获取所有房间的角点:
public List<XYZ> getRoomXYZandV(Element room, Document doc)
{
List<XYZ> listXYZ = new List<XYZ>();
XYZ roomLocationXyz = room.Location == null ? new XYZ(0, 0, 0) : (room.Location as LocationPoint).Point;
//房间中心点坐标
FilteredElementCollector col = null;
col = new FilteredElementCollector(doc).OfClass(typeof(SpatialElement));
// 定义边界设置
SpatialElementBoundaryOptions opt = new SpatialElementBoundaryOptions();
opt.StoreFreeBoundaryFaces = true;
opt.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish; // 闭合线
//opt.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish; //非闭合线
IList<IList<BoundarySegment>> segments = (room as Room).GetBoundarySegments(opt);
if (null != segments)
{
foreach (IList<BoundarySegment> segmentList in segments)
{
foreach (BoundarySegment boundarySegment in segmentList)
{
List<Curve> allCurves = new List<Curve>();
allCurves.Add(boundarySegment.GetCurve());
XYZ start = boundarySegment.GetCurve().GetEndPoint(0);
XYZ end = boundarySegment.GetCurve().GetEndPoint(1);
listXYZ.Add(start);
listXYZ.Add(end);
}
}
}
if (listXYZ.Count == 0)
{
listXYZ.Add(new XYZ(0, 0, 0));
return listXYZ;
}
else
{
// MessageBox.Show("get xyzs");
return listXYZ; //房间边界线所有的端点
}
}
获取房间所有边界:
public List<Curve> GetRoomCurveList(Element room, Document doc)
{
// List<XYZ> listXYZ = new List<XYZ>();
List<Curve> allCurves = new List<Curve>();
XYZ roomLocationXyz = room.Location == null ? new XYZ(0, 0, 0) : (room.Location as LocationPoint).Point;
//房间中心点坐标
FilteredElementCollector col = null;
col = new FilteredElementCollector(doc).OfClass(typeof(SpatialElement));
// 定义边界设置
SpatialElementBoundaryOptions opt = new SpatialElementBoundaryOptions();
opt.StoreFreeBoundaryFaces = true;
opt.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Center; // 闭合线
//opt.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish; // 非闭合线
IList<IList<BoundarySegment>> segments = (room as Room).GetBoundarySegments(opt);
if (null != segments)
{
foreach (IList<BoundarySegment> segmentList in segments)
{
foreach (BoundarySegment boundarySegment in segmentList)
{
allCurves.Add(boundarySegment.GetCurve());
// XYZ start = boundarySegment.GetCurve().GetEndPoint(0);
// XYZ end = boundarySegment.GetCurve().GetEndPoint(1);
// listXYZ.Add(start);
// listXYZ.Add(end);
}
}
}
return allCurves;
}