Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private Floor CopyFloor(Floor sourceFloor)
- {
- var floorGeometryElement =
- sourceFloor.get_Geometry(new Options());
- foreach (var geometryObject in floorGeometryElement)
- {
- var floorSolid =
- geometryObject as Solid;
- if (floorSolid == null)
- continue;
- var topFace =
- GetTopFace(floorSolid);
- if (topFace == null)
- throw new NotSupportedException("Floor does not have top face");
- if (topFace.EdgeLoops.IsEmpty)
- throw new NotSupportedException("Floor top face does not have edges");
- var outerBoundary =
- topFace.EdgeLoops.get_Item(0);
- // create new floor using source floor outer boundaries
- CurveArray floorCurveArray =
- GetCurveArrayFromEdgeArary(outerBoundary);
- var newFloor =
- sourceFloor
- .Document
- .Create
- .NewFloor(floorCurveArray, false);
- // if source floor has openings
- if (topFace.EdgeLoops.Size > 1)
- {
- for (int i = 1; i < topFace.EdgeLoops.Size; i++)
- {
- var openingEdges =
- topFace.EdgeLoops.get_Item(i);
- var openingCurveArray =
- GetCurveArrayFromEdgeArary(openingEdges);
- var opening =
- sourceFloor
- .Document
- .Create
- .NewOpening(newFloor,
- openingCurveArray,
- true);
- }
- }
- return newFloor;
- }
- return null;
- }
- private CurveArray GetCurveArrayFromEdgeArary(EdgeArray edgeArray)
- {
- CurveArray curveArray =
- new CurveArray();
- foreach (Edge edge in edgeArray)
- {
- var edgeCurve =
- edge.AsCurve();
- curveArray.Append(edgeCurve);
- }
- return curveArray;
- }
- PlanarFace GetTopFace(Solid solid)
- {
- PlanarFace topFace = null;
- FaceArray faces = solid.Faces;
- foreach (Face f in faces)
- {
- PlanarFace pf = f as PlanarFace;
- if (null != pf
- && (Math.Abs(pf.Normal.X - 0) < _eps && Math.Abs(pf.Normal.Y - 0) < _eps))
- {
- if ((null == topFace)
- || (topFace.Origin.Z < pf.Origin.Z))
- {
- topFace = pf;
- }
- }
- }
- return topFace;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement