/// <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)); }
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(); } }
/// <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); }