//получаю сегмент стены и прилежащую стену к комнате
SpatialElementBoundaryOptions segmentOptions = new SpatialElementBoundaryOptions();
segmentOptions.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Center;
foreach (IList<Autodesk.Revit.DB.BoundarySegment> loop in space.GetBoundarySegments(segmentOptions)) {
foreach (Autodesk.Revit.DB.BoundarySegment segment in loop) {
spaceSurroundWalls.Add(new WallSegment { Wall = doc.GetElement(segment.ElementId) as Wall, Curve = segment.GetCurve() });
}
}
//пробегаюсь по списку и сдвигаю сегмент на половину толщины стены
List<ModelCurve> modelCurves = new List<ModelCurve>();
for (int i = 0; i < spaceSurroundWalls.Count; i++) {
Wall activeWall = spaceSurroundWalls[i].Wall;
Curve activeCurve = spaceSurroundWalls[i].Curve;
XYZ startPoint = activeCurve.GetEndPoint(0);
XYZ endPoint = activeCurve.GetEndPoint(1);
//случай когда пересечение стен дает сегмент принадлежности комнаты, но стены как такойвой не существует, а есть их присоединение
if (null == activeWall) {
modelCurves.Add(UtilsRevit.ModelLineCreation(commandData.Application, startPoint, endPoint, 0));
continue;
}
double offset = activeWall.WallType.Width / 2;
modelCurves.Add(UtilsRevit.ModelLineCreation(commandData.Application, startPoint, endPoint, offset));
}
//соединяю сегменты
for (int i = 0; i < modelCurves.Count; i++) {
if (i == modelCurves.Count - 1) {
UtilsRevit.CurvesJoin(doc, modelCurves[i], modelCurves[0]);
}
else {
UtilsRevit.CurvesJoin(doc, modelCurves[i], modelCurves[i + 1]);
}
}