/// <summary> /// create the extrusions of the air handler system /// </summary> private void CreateExtrusions() { Autodesk.Revit.Creation.Application app = m_application.Create; CurveArray curves = null; CurveArrArray profile = null; Plane plane = null; SketchPlane sketchPlane = null; #region Create the cuboid extrusions for (int i = 0; i <= 2; ++i) { // create the profile curves = app.NewCurveArray(); curves.Append(app.NewLine(profileData[i, 0], profileData[i, 1], true)); curves.Append(app.NewLine(profileData[i, 1], profileData[i, 2], true)); curves.Append(app.NewLine(profileData[i, 2], profileData[i, 3], true)); curves.Append(app.NewLine(profileData[i, 3], profileData[i, 0], true)); profile = app.NewCurveArrArray(); profile.Append(curves); // create the sketch plane plane = app.NewPlane(sketchPlaneData[i, 0], sketchPlaneData[i, 1]); sketchPlane = f.NewSketchPlane(plane); // create the extrusion extrusions[i] = f.NewExtrusion(isSolid[i], profile, sketchPlane, extrusionOffsets[i, 1]); extrusions[i].StartOffset = extrusionOffsets[i, 0]; m_combineElements.Append(extrusions[i]); } #endregion #region Create the round extrusions for (int i = 3; i <= 4; ++i) { // create the profile profile = app.NewCurveArrArray(); curves = app.NewCurveArray(); plane = new Plane(profileData[i, 0], profileData[i, 1]); curves.Append(app.NewArc(plane, arcRadius, 0, Math.PI * 2)); profile.Append(curves); // create the sketch plane plane = app.NewPlane(sketchPlaneData[i, 0], sketchPlaneData[i, 1]); sketchPlane = f.NewSketchPlane(plane); // create the extrusion extrusions[i] = f.NewExtrusion(isSolid[i], profile, sketchPlane, extrusionOffsets[i, 1]); extrusions[i].StartOffset = extrusionOffsets[i, 0]; m_combineElements.Append(extrusions[i]); } #endregion }
/// <summary> /// Create a wall with the collected data or the data read from journal /// </summary> private void CreateWall() { // Get the create classes. Creation.Application createApp = m_commandData.Application.Application.Create; Creation.Document createDoc = m_commandData.Application.ActiveUIDocument.Document.Create; // Create geometry line(curve) Line geometryLine = createApp.NewLine(m_startPoint, m_endPoint, true); if (null == geometryLine) // assert the creation is successful { throw new Exception("Create the geometry line failed."); } // Create the wall using the wall type, level and created geometry line Wall createdWall = createDoc.NewWall(geometryLine, m_createType, m_createlevel, 15, m_startPoint.Z + m_createlevel.Elevation, true, true); if (null == createdWall) // assert the creation is successful { throw new Exception("Create the wall failed."); } }
/// <summary> /// Batch creation of Walls /// </summary> /// <returns>If batch creation succeeds, return true; otherwise, return false</returns> private bool CreateWalls() { try { if (null == m_level) { return(false); } //Create ProfiledWallCreationData for Walls' batch creation List <ProfiledWallCreationData> profiledWallCreationDatas = new List <ProfiledWallCreationData>(); Autodesk.Revit.Creation.Application appCreation = m_cmdData.Application.Application.Create; for (int i = 1; i < 11; i++) { // Create wall's profile which is a combination of rectangle and arc CurveArray curveArray = appCreation.NewCurveArray(); // Create three lines for rectangle part of profile. Autodesk.Revit.DB.XYZ pt1 = new Autodesk.Revit.DB.XYZ(i * 10, -80, 15); Autodesk.Revit.DB.XYZ pt2 = new Autodesk.Revit.DB.XYZ(i * 10, -80, 0); Autodesk.Revit.DB.XYZ pt3 = new Autodesk.Revit.DB.XYZ(i * 10, -90, 0); Autodesk.Revit.DB.XYZ pt4 = new Autodesk.Revit.DB.XYZ(i * 10, -90, 15); Line line1 = appCreation.NewLine(pt1, pt2, true); Line line2 = appCreation.NewLine(pt2, pt3, true); Line line3 = appCreation.NewLine(pt3, pt4, true); // Create arc part of profile. Autodesk.Revit.DB.XYZ pointInCurve = new Autodesk.Revit.DB.XYZ(i * 10, -85, 20); Arc arc = appCreation.NewArc(pt4, pt1, pointInCurve); if (null == line1 || null == line2 || null == line3 || null == arc) { continue; } curveArray.Append(line1); curveArray.Append(line2); curveArray.Append(line3); curveArray.Append(arc); ProfiledWallCreationData profiledWallCreationData = new ProfiledWallCreationData(curveArray, true); if (null != profiledWallCreationData) { profiledWallCreationDatas.Add(profiledWallCreationData); } } //Create RectangularWallCreationData for Walls' batch creation List <RectangularWallCreationData> rectangularWallCreationDatas = new List <RectangularWallCreationData>(); for (int i = 1; i < 11; i++) { Autodesk.Revit.DB.XYZ pt1 = new Autodesk.Revit.DB.XYZ(i * 10, -110, 0); Autodesk.Revit.DB.XYZ pt2 = new Autodesk.Revit.DB.XYZ(i * 10, -120, 0); Line line = appCreation.NewLine(pt1, pt2, true); RectangularWallCreationData rectangularWallCreationData = null; if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } } // Create Walls if (0 == profiledWallCreationDatas.Count || 0 == rectangularWallCreationDatas.Count) { return(false); } m_doc.Create.NewWalls(profiledWallCreationDatas); m_doc.Create.NewWalls(rectangularWallCreationDatas); } catch (Exception) { return(false); } return(true); }
/// <summary> /// Get common informations for batch creation /// </summary> private void PreCreate() { try { Autodesk.Revit.Creation.Application appCreation = m_cmdData.Application.Application.Create; //Try to get Level named "Level 1" which will be used in most creations m_level = (from elem in new FilteredElementCollector(m_doc).OfClass(typeof(Level)).ToElements() let level = elem as Level where level != null && "Level 1" == level.Name select level).First(); //If ViewPlan "Level 1" does not exist, try to create one. if (null != m_level) { try { m_viewPlan = m_doc.Create.NewAreaViewPlan("Level 1", m_level, AreaElemType.BOMAArea); } catch { } } if (null == m_level && null == m_viewPlan) { return; } //Create RectangularWallCreationData for Walls' batch creation List <RectangularWallCreationData> rectangularWallCreationDatas = new List <RectangularWallCreationData>(); //List of Curve is used to store Area's boundary lines List <Curve> curves = new List <Curve>(); Autodesk.Revit.DB.XYZ pt1 = new Autodesk.Revit.DB.XYZ(-4, 95, 0); Autodesk.Revit.DB.XYZ pt2 = new Autodesk.Revit.DB.XYZ(-106, 95, 0); Line line = appCreation.NewLine(pt1, pt2, true); RectangularWallCreationData rectangularWallCreationData = null; if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); curves.Add(line); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } pt1 = new Autodesk.Revit.DB.XYZ(-4, 105, 0); pt2 = new Autodesk.Revit.DB.XYZ(-106, 105, 0); line = appCreation.NewLine(pt1, pt2, true); if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); curves.Add(line); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } for (int i = 0; i < 11; i++) { pt1 = new Autodesk.Revit.DB.XYZ(-5 - i * 10, 94, 0); pt2 = new Autodesk.Revit.DB.XYZ(-5 - i * 10, 106, 0); line = appCreation.NewLine(pt1, pt2, true); if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); curves.Add(line); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } } // Create Area Boundary Line for Area // It is necessary if need to create closed region for Area // But for Room, it is not necessary. Autodesk.Revit.DB.XYZ origin = new Autodesk.Revit.DB.XYZ(0, 0, 0); Autodesk.Revit.DB.XYZ norm = new Autodesk.Revit.DB.XYZ(0, 0, 1); Plane plane = appCreation.NewPlane(norm, origin); if (null != plane) { SketchPlane sketchPlane = m_doc.Create.NewSketchPlane(plane); if (null != sketchPlane) { foreach (Curve curve in curves) { m_doc.Create.NewAreaBoundaryLine(sketchPlane, curve, m_viewPlan); } } } //Create enclosed region using Walls for Room pt1 = new Autodesk.Revit.DB.XYZ(5, -5, 0); pt2 = new Autodesk.Revit.DB.XYZ(55, -5, 0); line = appCreation.NewLine(pt1, pt2, true); rectangularWallCreationData = null; if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } pt1 = new Autodesk.Revit.DB.XYZ(5, 5, 0); pt2 = new Autodesk.Revit.DB.XYZ(55, 5, 0); line = appCreation.NewLine(pt1, pt2, true); if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } for (int i = 0; i < 6; i++) { pt1 = new Autodesk.Revit.DB.XYZ(5 + i * 10, -5, 0); pt2 = new Autodesk.Revit.DB.XYZ(5 + i * 10, 5, 0); line = appCreation.NewLine(pt1, pt2, true); if (null != line) { rectangularWallCreationData = new RectangularWallCreationData(line, m_level, true); } if (null != rectangularWallCreationData) { rectangularWallCreationDatas.Add(rectangularWallCreationData); } } // Call Wall batch creation method to create Walls m_doc.Create.NewWalls(rectangularWallCreationDatas); } catch (Exception) { } }