UIApplication uiapp = commandData.Application;
UIDocument
uidoc = uiapp.ActiveUIDocument;
Document
doc = uidoc.Document;
Reference
refer_1 = uidoc.Selection.PickObject(ObjectType.Element, "");
Wall wall
= doc.GetElement(refer_1) as Wall;
Element
elem_1 = doc.GetElement(refer_1);
//获得墙上的柱子
IList list
= ExporterIFCUtils.GetAttachedColumns(wall);
MessageBox.Show(list.Count.ToString());
//获得墙相连的墙
IList
listData = ExporterIFCUtils.GetConnectedWalls(wall,
IFCConnectedWallDataLocation.Path);
IList
listId = new List();
foreach
(IFCConnectedWallData d in listData)
{
Element elem =
doc.GetElement(d.ElementId);
MessageBox.Show(elem.Name);
listId.Add(d.ElementId);
}
uidoc.Selection.SetElementIds(listId);
//获得族实例剪切墙体留下的洞口的所有边线集合,这里假设 instance是门窗 洞口
XYZ xyz =
null;//the direction of the hole relative to the location of the
curveloop
FamilyInstance instance = elem_1 as FamilyInstance;
CurveLoop
cl = ExporterIFCUtils.GetInstanceCutoutFromWall(doc, wall,
instance, out xyz);
//获得闭合曲线的面积
Solid
solid = backSolid(elem_1,uiapp);
IList loop
= new List();
foreach
(Face face in solid.Faces)
{
PlanarFace pf = face as
PlanarFace;
if
(pf.FaceNormal.IsAlmostEqualTo(XYZ.BasisZ))
{
loop = face.GetEdgesAsCurveLoops();
break;
}
}
double
area=
ExporterIFCUtils.ComputeAreaOfCurveLoops(loop);
MessageBox.Show((304.8*304.8*area).ToString());
public Solid backSolid(Element elem,
UIApplication uiapp)
{
Options option =
uiapp.Application.Create.NewGeometryOptions();
option.IncludeNonVisibleObjects = false;
option.DetailLevel = ViewDetailLevel.Medium;
Solid s = null;
GeometryElement geoElement = elem.get_Geometry(option);
foreach (GeometryObject obj in geoElement)
{
if (obj is Solid)
{
Solid solid = obj as Solid;
if (solid != null)
{
s = solid;
break;
}
}
else if (obj is GeometryInstance)//标准族实例
{
GeometryInstance geoInstance = obj as GeometryInstance;