예제 #1
0
        /// <summary>
        /// Create a centerbased cylinder, only on X, Y, Z three axes forward direction
        /// </summary>
        /// <param name="center">The given cylinder center</param>
        /// <param name="bottomradius">The given cylinder's bottom radius</param>
        /// <param name="height">The given cylinder's height</param>
        /// <param name="cylinderdirection">Cylinder's extrusion direction</param>
        /// <returns>The created cylinder</returns>
        public Solid CreateCenterbasedCylinder(XYZ center, double bottomradius, double height, CylinderDirection cylinderdirection)
        {
            double halfheight   = height / 2.0;
            XYZ    bottomcenter = new XYZ(
                cylinderdirection == CylinderDirection.BasisX ? center.X - halfheight : center.X,
                cylinderdirection == CylinderDirection.BasisY ? center.Y - halfheight : center.Y,
                cylinderdirection == CylinderDirection.BasisZ ? center.Z - halfheight : center.Z);
            XYZ topcenter = new XYZ(
                cylinderdirection == CylinderDirection.BasisX ? center.X + halfheight : center.X,
                cylinderdirection == CylinderDirection.BasisY ? center.Y + halfheight : center.Y,
                cylinderdirection == CylinderDirection.BasisZ ? center.Z + halfheight : center.Z);

            CurveLoop sweepPath = new CurveLoop();

            sweepPath.Append(Line.CreateBound(bottomcenter,
                                              topcenter));

            List <CurveLoop> profileloops = new List <CurveLoop>();
            CurveLoop        profileloop  = new CurveLoop();
            Ellipse          cemiEllipse1 = Ellipse.Create(bottomcenter, bottomradius, bottomradius,
                                                           cylinderdirection == CylinderDirection.BasisX ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisX,
                                                           cylinderdirection == CylinderDirection.BasisZ ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisZ,
                                                           -Math.PI, 0);
            Ellipse cemiEllipse2 = Ellipse.Create(bottomcenter, bottomradius, bottomradius,
                                                  cylinderdirection == CylinderDirection.BasisX ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisX,
                                                  cylinderdirection == CylinderDirection.BasisZ ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisZ,
                                                  0, Math.PI);

            profileloop.Append(cemiEllipse1);
            profileloop.Append(cemiEllipse2);
            profileloops.Add(profileloop);

            return(GeometryCreationUtilities.CreateSweptGeometry(sweepPath, 0, 0, profileloops));
        }
예제 #2
0
        public static void CreateCenterbasedCylinder(Document doc, XYZ center, double bottomradius, double height, CylinderDirection cylinderdirection, String name)
        {
            double halfheight   = height / 2.0;
            XYZ    bottomcenter = new XYZ(
                cylinderdirection == CylinderDirection.BasisX ? center.X - halfheight : center.X,
                cylinderdirection == CylinderDirection.BasisY ? center.Y - halfheight : center.Y,
                cylinderdirection == CylinderDirection.BasisZ ? center.Z - halfheight : center.Z);
            XYZ topcenter = new XYZ(
                cylinderdirection == CylinderDirection.BasisX ? center.X + halfheight : center.X,
                cylinderdirection == CylinderDirection.BasisY ? center.Y + halfheight : center.Y,
                cylinderdirection == CylinderDirection.BasisZ ? center.Z + halfheight : center.Z);

            CurveLoop sweepPath = new CurveLoop();

            sweepPath.Append(Line.CreateBound(bottomcenter,
                                              topcenter));

            List <CurveLoop> profileloops = new List <CurveLoop>();
            CurveLoop        profileloop  = new CurveLoop();
            Ellipse          cemiEllipse1 = Ellipse.Create(bottomcenter, bottomradius, bottomradius,
                                                           cylinderdirection == CylinderDirection.BasisX ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisX,
                                                           cylinderdirection == CylinderDirection.BasisZ ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisZ,
                                                           -Math.PI, 0);
            Ellipse cemiEllipse2 = Ellipse.Create(bottomcenter, bottomradius, bottomradius,
                                                  cylinderdirection == CylinderDirection.BasisX ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisX,
                                                  cylinderdirection == CylinderDirection.BasisZ ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisZ,
                                                  0, Math.PI);

            profileloop.Append(cemiEllipse1);
            profileloop.Append(cemiEllipse2);
            profileloops.Add(profileloop);
            Solid cyl = GeometryCreationUtilities.CreateSweptGeometry(sweepPath, 0, 0, profileloops);

            using (Transaction t = new Transaction(doc, "Create cylinder direct shape"))
            {
                t.Start();
                DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));
                ds.SetShape(new GeometryObject[] { cyl });
                ds.Name = name;
                t.Commit();
            }
        }
예제 #3
0
        /// <summary>
        /// Create a centerbased cylinder, only on X, Y, Z three axes forward direction
        /// </summary>
        /// <param name="center">The given cylinder center</param>
        /// <param name="bottomradius">The given cylinder's bottom radius</param>
        /// <param name="height">The given cylinder's height</param>
        /// <param name="cylinderdirection">Cylinder's extrusion direction</param>
        /// <returns>The created cylinder</returns>
        public Solid CreateCenterbasedCylinder(XYZ center, double bottomradius, double height, CylinderDirection cylinderdirection)
        {
            double halfheight = height / 2.0;
             XYZ bottomcenter = new XYZ(
            cylinderdirection == CylinderDirection.BasisX ? center.X - halfheight : center.X,
            cylinderdirection == CylinderDirection.BasisY ? center.Y - halfheight : center.Y,
            cylinderdirection == CylinderDirection.BasisZ ? center.Z - halfheight : center.Z);
             XYZ topcenter = new XYZ(
            cylinderdirection == CylinderDirection.BasisX ? center.X + halfheight : center.X,
            cylinderdirection == CylinderDirection.BasisY ? center.Y + halfheight : center.Y,
            cylinderdirection == CylinderDirection.BasisZ ? center.Z + halfheight : center.Z);

             CurveLoop sweepPath = new CurveLoop();
             sweepPath.Append(m_app.Create.NewLine(bottomcenter,
            topcenter,
            true));

             List<CurveLoop> profileloops = new List<CurveLoop>();
             CurveLoop profileloop = new CurveLoop();
             Ellipse cemiEllipse1 = m_app.Create.NewEllipse(bottomcenter, bottomradius, bottomradius,
            cylinderdirection == CylinderDirection.BasisX ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisX,
            cylinderdirection == CylinderDirection.BasisZ ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisZ,
            -Math.PI, 0);
             Ellipse cemiEllipse2 = m_app.Create.NewEllipse(bottomcenter, bottomradius, bottomradius,
            cylinderdirection == CylinderDirection.BasisX ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisX,
            cylinderdirection == CylinderDirection.BasisZ ? Autodesk.Revit.DB.XYZ.BasisY : Autodesk.Revit.DB.XYZ.BasisZ,
            0, Math.PI);
             profileloop.Append(cemiEllipse1);
             profileloop.Append(cemiEllipse2);
             profileloops.Add(profileloop);

             return GeometryCreationUtilities.CreateSweptGeometry(sweepPath, 0, 0, profileloops);
        }