Пример #1
0
        /// <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));
            }
        }
Пример #2
0
        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);
        }