1、实体构建的剪切与连接:
namespace CreateInstanceTest
{
[Transaction(TransactionMode.Manual)]
class TestCut : IExternalCommand
{
Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Document doc = uiApp.ActiveUIDocument.Document;
Element elem_1 = doc.GetElement(uiDoc.Selection.PickObject(ObjectType.Element));
Element elem_2 = doc.GetElement(uiDoc.Selection.PickObject(ObjectType.Element));
using (Transaction trans = new Transaction(doc))
{
trans.Start("Cut Element");
SolidSolidCutUtils.AddCutBetweenSolids(doc, elem_1, elem_2);//两个标准族实例的剪切
ICollection<ElementId> list = SolidSolidCutUtils.GetCuttingSolids(elem_1);//获取剪切实例的个数
//判断两个构件是否连接
if (JoinGeometryUtils.AreElementsJoined(doc, elem_1, elem_2) == true)
{
JoinGeometryUtils.UnjoinGeometry(doc, elem_1, elem_2); //取消连接
SolidSolidCutUtils.RemoveCutBetweenSolids(doc, elem_1, elem_2);//取消剪切
JoinGeometryUtils.JoinGeometry(doc, elem_1, elem_2);//连接
JoinGeometryUtils.SwitchJoinOrder(doc, elem_1, elem_2);//切换连接顺序
ICollection<ElementId> listid = JoinGeometryUtils.GetJoinedElements(doc, elem_1);//获取连接对象的个数
}
trans.Commit();
}
return Result.Succeeded;
}
}
}
2、空心剪切
public class TestVoidCut : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Document doc = uiApp.ActiveUIDocument.Document;
Wall wall = doc.GetElement(uiDoc.Selection.PickObject(ObjectType.Element))as Wall;
Element elem = doc.GetElement(uiDoc.Selection.PickObject(ObjectType.Element));
using (Transaction trans = new Transaction(doc))
{
trans.Start("Void Cut");
InstanceVoidCutUtils.AddInstanceVoidCut(doc, wall, elem);
trans.Commit();
}
return Result.Succeeded;
}
}