Revit二次开发 关于构建的剪切的实现方法提问。

初学二次开发不久,最近在尝试用代码在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());//为什么同一个族实例手动选了之后就是可以切割的呀