我是一名建筑师,通过 Revit 逐渐爱上了编码。但不幸的是,由于仍然是一个终极菜鸟,我需要任何愿意加入的人的帮助。我也是 Stackoverflow 菜鸟,所以我不知道是否可以,并且在社区中发布这样的问题更多辅导的,然后解决问题。但无论如何,这里是这样:我正在尝试创建一个能够同时从 Revit 族编辑器中删除多个参数的应用程序。我在 C# 方面取得了成功,但是由于我想转移到 Python,因为作为初学者更容易进入,所以我做了很多浏览,但由于 OOP 知识有限而没有任何帮助。如何在列表框中显示 Family 参数名称,或者如果列表框中已经有字符串名称,如何将所选项目与 FamilyParameterSet 中的实际参数进行比较?
我有一个起始代码,可以从家庭管理器收集所有参数。我将它投射到列表中。然后一个选项是使用要在列表框中列出的参数的名称属性,但我不知道返回并检查列表或循环列表以将参数集中的名称与从列表框中选择的名称进行比较。因此,我选择了将 Family 参数直接放入列表框中的另一个选项,但我无法显示实际的 Name 属性。这段 C# 代码可能对我有帮助,但我不知道如何在 Python 中重新创建它,因为我的 OOP 经验真的很差。 ListBox 上的项目显示为类名
doc = __revit__.ActiveUIDocument.Document
mgr = doc.FamilyManager;
fps = mgr.Parameters;
paramsList=list(fps)
senderlist =[]
class IForm(Form):
def __init__(self):
self.Text = "Remove multiple parameters"
lb = ListBox()
lb.SelectionMode = SelectionMode.MultiSimple
for n in fps:
lb.Items.Add(n.Definition.Name)
lb.Dock = DockStyle.Fill
lb.SelectedIndexChanged += self.OnChanged
self.Size = Size(400, 400)
self.CenterToScreen()
button = Button()
button.Text = "Delete Parameters"
button.Dock = DockStyle.Bottom
button.Click += self.RemoveParameter
self.Controls.Add(button)
def OnChanged(self, sender, event):
senderlist.append(sender.SelectedItem)
def RemoveParameter(self,sender,event):
for i in paramsList:
if i.Definition.Name in senderlist:
t = Transaction(doc, 'This is my new transaction')
t.Start()
mgr.RemoveParameter(i.Id)
t.Commit()
Application.Run(IForm())
我需要函数 RemoveParameter 具有 Family 参数的所有 .Id 比例,以便将它们从 Family 参数集中删除。在代码的开头(对于不知道 Revit API 的人)“fps”表示 FamilyParameterSet 被转换为 Python 列表“paramsList”。所以我需要从列表框中选择的项目中删除 FPS 的成员。