Revit プリント セットを作成および削除するためのフォームを作成しようとしています。
私は2つの主な問題を抱えています:
1) 印刷セットを作成できますが、フォームを再起動しない限りそのコンテンツにアクセスできません。以下のエラーが発生します(view_set変数を定義しているかどうかによって異なります)
List_object_has_no_attribute_Views
Local_variable_referenced_before_assignment
これは、選択した印刷セットのシートを表示する関数のコードです。
def DisplaySheetsInSet (self, sender, args):
self.curItem = CurrentSetsListBox.SelectedItem
PrintSetForm_Load
try:
view_set=[]
for i in PrintSetForm.ViewSets:
if i.Name == str(self.curItem):
view_set = i
else:
continue
Sheets=[sheet.Name for sheet in view_set.Views]
SheetsLb.BeginUpdate()
SheetsLb.Items.Clear()
for sheet in Sheets:
SheetsLb.Items.Add(sheet)
SheetsLb.EndUpdate()
except Exception as e:
popup (str(e)
2) プリント セットを 1 回削除できます。別のものを削除しようとすると、次のエラーが表示され、フォームを再起動する必要があります (以下に示す印刷セットを削除する関数のコード)
The_referenced_object_is_not_valid
def DelPrintSet(self, sender, args):
self.curItem = CurrentSetsListBox.SelectedItems
t = Transaction (doc, 'Delete printset')
t.Start()
for viewset in PrintSetForm.ViewSets:
if viewset.Name in [str(item) for item in self.curItem]:
doc.Delete(viewset.Id)
doc.Regenerate()
else:
continue
self.Refresh()
UpdateSetNames(CurrentSetsListBox)
t.Commit()
フォームを再起動/更新する関数を作成しようとしましたが、機能しません (以下のコード):
グローバル PrintSetForm_Load 定義
PrintSetForm_Load(self、送信者):
Application.Exit()
Application.Restart()
#self.Refresh()
#self.ResetBindings()
#self.ActiveForm.Close()
sd = PrintSetForm()
sd.ShowDialog()
この gif は、動作中のフォームを示しています。
アイデアや提案はありますか?
ありがとうございました。
3) SheetsLb に DataSource を設定しようとすると、最初にクリックしたセットだけが表示されます。
Sheets=[sheet.Name for sheet in view_set.Views]
SheetNumber=[sheet.get_Parameter(BuiltInParameter.SHEET_NUMBER).AsString() for sheet in view_set.Views]
SheetsLb.BeginUpdate()
SheetsLb.DataSource = None
SheetsLb.Items.Clear()
UpdatedList=[]
for number,name in zip(SheetNumber,Sheets):
UpdatedList.append(number+" - "+ name + " [ ] ")
SheetsLb.DataSource=UpdatedList
SheetsLb.EndUpdate()