初学二次开发不久,最近在尝试用代码在Revit中建立各种样子的模型,但是最近遇到一个问题:我想用剪切的方法来建立空心体(比如空心的柱,梁之类的),在网上看到有大神贴出的如下方法
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Document doc = uiapp.ActiveUIDocument.Document;
//手动选取
Reference refer_1 = uidoc.Selection.PickObject(ObjectType.Element);
Element elem_1 = doc.GetElement(refer_1);
//手动选取
Reference refer_2 = uidoc.Selection.PickObject(ObjectType.Element);
Element elem_2 = doc.GetElement(refer_2);
//两个标准族实例的剪切
SolidSolidCutUtils.AddCutBetweenSolids(doc, elem_1, elem_2);
这里这位大神是通过手动选取的方式完成的剪切,我想做到完全自动化,例如用元素的ID,元素名之类的来代替手动选取模型,自己多番尝试但均无果。
请问:假设用代码创建了两个相互交错的模型,有没有什么方法能做不需要手动选取就能完成剪切,还烦请各位大神给出具体思路或代码片段,感激不尽。
需要使用的是InstanceVoidCutUtils.AddInstanceVoidCut方法,剪切出空心体
空心体族的属性 familyDoc1.OwnerFamily.get_Parameter(BuiltInParameter.FAMILY_ALLOW_CUT_WITH_VOIDS);要设置为1。
https://blog.csdn.net/a321123b/article/details/81742555
俺也遇到这样的问题了,也注意了上面提到的BuiltInParameter.FAMILY_ALLOW_CUT_WITH_VOIDS问题并进行了相应设置但还是没用。
这样的结果是false
FamilyInstance familyInstance1 = revitDoc.Create.NewFamilyInstance(XYZ.Zero, familySymbol1, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
Element element1 = revitDoc.GetElement(familyInstance1.Id);
MessageBox.Show(InstanceVoidCutUtils.CanBeCutWithVoid(element1).ToString());
但是选中族实例,他的结果就是True,就不太懂。
Selection selend = uiDoc.Selection;
Reference refend = sel.PickObject(ObjectType.Element, "选择族实例");
Element elemend = revitDoc.GetElement(refend);
MessageBox.Show(InstanceVoidCutUtils.CanBeCutWithVoid(elemend).ToString());//为什么同一个族实例手动选了之后就是可以切割的呀