/// <summary> /// Create an extrude. /// </summary> /// <param name="extrude">The IExtrude object.</param> /// <returns>A solid.</returns> public Solid CreateExtrude(IExtrude extrude) { if (extrude is IHasOpenings) { var o = (IHasOpenings)extrude; // The voids in the profiles are concatenated with the // voids provided by the openings. Polygon[] voids = null; if (o.Openings != null && o.Openings.Count > 0) { if (extrude.Profile.Voids == null) { voids = o.Openings.Select(op => op.Profile.Perimeter).ToArray(); } else { voids = extrude.Profile.Voids.Concat(o.Openings.Select(op => op.Profile.Perimeter)).ToArray(); } } return(Solid.SweepFace(extrude.Profile.Perimeter, voids, extrude.ExtrudeDirection, extrude.ExtrudeDepth, extrude.BothSides)); } else { return(Solid.SweepFace(extrude.Profile.Perimeter, null, extrude.ExtrudeDirection, extrude.ExtrudeDepth, extrude.BothSides)); } }
private static IfcExtrudedAreaSolid ToIfcExtrudedAreaSolid(this IExtrude extrude, Transform transform, Document doc) { var position = new Transform().ToIfcAxis2Placement3D(doc); double extrudeDepth = 0.0; IfcArbitraryClosedProfileDef extrudeProfile = null; IfcDirection extrudeDirection = null; extrudeProfile = extrude.Profile.Perimeter.ToIfcArbitraryClosedProfileDef(doc); extrudeDirection = extrude.ExtrudeDirection.ToIfcDirection(); extrudeDepth = extrude.ExtrudeDepth; var solid = new IfcExtrudedAreaSolid(extrudeProfile, position, extrudeDirection, new IfcPositiveLengthMeasure(extrude.ExtrudeDepth)); doc.AddEntity(extrudeProfile); doc.AddEntity(extrudeDirection); doc.AddEntity(position); doc.AddEntity(solid); return(solid); }