예제 #1
0
        /// <summary>
        /// Create one SweptBlend
        /// </summary>
        private void CreateSweptBlend()
        {
            try
            {
                #region Create top and bottom profiles and path curve
                Autodesk.Revit.DB.XYZ pnt1 = new Autodesk.Revit.DB.XYZ(0, 0, 0);
                Autodesk.Revit.DB.XYZ pnt2 = new Autodesk.Revit.DB.XYZ(1, 0, 0);
                Autodesk.Revit.DB.XYZ pnt3 = new Autodesk.Revit.DB.XYZ(1, 1, 0);
                Autodesk.Revit.DB.XYZ pnt4 = new Autodesk.Revit.DB.XYZ(0, 1, 0);
                Autodesk.Revit.DB.XYZ pnt5 = new Autodesk.Revit.DB.XYZ(0, 0, 1);

                CurveArrArray arrarr1 = new CurveArrArray();
                CurveArray    arr1    = new CurveArray();
                arr1.Append(Line.CreateBound(pnt1, pnt2));
                arr1.Append(Line.CreateBound(pnt2, pnt3));
                arr1.Append(Line.CreateBound(pnt3, pnt4));
                arr1.Append(Line.CreateBound(pnt4, pnt1));
                arrarr1.Append(arr1);

                Autodesk.Revit.DB.XYZ pnt6    = new Autodesk.Revit.DB.XYZ(0.5, 0, 0);
                Autodesk.Revit.DB.XYZ pnt7    = new Autodesk.Revit.DB.XYZ(1, 0.5, 0);
                Autodesk.Revit.DB.XYZ pnt8    = new Autodesk.Revit.DB.XYZ(0.5, 1, 0);
                Autodesk.Revit.DB.XYZ pnt9    = new Autodesk.Revit.DB.XYZ(0, 0.5, 0);
                CurveArrArray         arrarr2 = new CurveArrArray();
                CurveArray            arr2    = new CurveArray();
                arr2.Append(Line.CreateBound(pnt6, pnt7));
                arr2.Append(Line.CreateBound(pnt7, pnt8));
                arr2.Append(Line.CreateBound(pnt8, pnt9));
                arr2.Append(Line.CreateBound(pnt9, pnt6));
                arrarr2.Append(arr2);

                SweepProfile bottomProfile = m_revit.Create.NewCurveLoopsProfile(arrarr1);
                SweepProfile topProfile    = m_revit.Create.NewCurveLoopsProfile(arrarr2);

                Autodesk.Revit.DB.XYZ pnt10 = new Autodesk.Revit.DB.XYZ(5, 0, 0);
                Autodesk.Revit.DB.XYZ pnt11 = new Autodesk.Revit.DB.XYZ(0, 20, 0);
                Curve curve = Line.CreateBound(pnt10, pnt11);

                Autodesk.Revit.DB.XYZ normal      = Autodesk.Revit.DB.XYZ.BasisZ;
                SketchPlane           sketchPlane = CreateSketchPlane(normal, Autodesk.Revit.DB.XYZ.Zero);
                #endregion
                // here create one swept blend
                SweptBlend newSweptBlend1 = m_creationFamily.NewSweptBlend(true, curve, sketchPlane, bottomProfile, topProfile);
                // move to proper place
                Autodesk.Revit.DB.XYZ transPoint1 = new Autodesk.Revit.DB.XYZ(11, 32, 0);
                ElementTransformUtils.MoveElement(m_familyDocument, newSweptBlend1.Id, transPoint1);
            }
            catch (Exception e)
            {
                m_errCount++;
                m_errorInfo += "Unexpected exceptions occur in CreateSweptBlend: " + e.ToString() + "\r\n";
            }
        }
예제 #2
0
        /// <summary>
        /// Create a new swept blend form using arcs to
        /// define circular start and end profiles and an
        /// arc path. The NewSweptBlend method requires
        /// the input profiles to be in the XY plane.
        /// </summary>
        public void CreateNewSweptBlendArc(Document doc)
        {
            Debug.Assert(doc.IsFamilyDocument,
                         "this method will only work in a family document");

            Application app = doc.Application;

            Autodesk.Revit.Creation.Application creapp
                = app.Create;

            Autodesk.Revit.Creation.FamilyItemFactory credoc
                = doc.FamilyCreate;

            #region Original code for Revit 2012
      #if COMPILE_ORIGINAL_CODE
            XYZ           pnt1    = new XYZ(0, -1, 0);
            XYZ           pnt2    = new XYZ(1, 0, 0);
            XYZ           pnt3    = new XYZ(0, 1, 0);
            XYZ           pnt4    = new XYZ(-1, 0, 0);
            Arc           aArc1   = creapp.NewArc(pnt1, pnt3, pnt2);
            Arc           aArc2   = creapp.NewArc(pnt3, pnt1, pnt4);
            CurveArrArray arrarr1 = new CurveArrArray();

            SweepProfile bottomProfile
                = creapp.NewCurveLoopsProfile(arrarr1);

            CurveArray arr1 = new CurveArray();
            arr1.Append(aArc1);
            arr1.Append(aArc2);
            XYZ           pnt6    = new XYZ(0, -2, 0);
            XYZ           pnt7    = new XYZ(2, 0, 0);
            XYZ           pnt8    = new XYZ(0, 2, 0);
            XYZ           pnt9    = new XYZ(-2, 0, 0);
            Arc           aArc3   = creapp.NewArc(pnt6, pnt8, pnt7);
            Arc           aArc4   = creapp.NewArc(pnt8, pnt6, pnt9);
            CurveArrArray arrarr2 = new CurveArrArray();
            CurveArray    arr2    = new CurveArray();
            arr2.Append(aArc3);
            arr2.Append(aArc4);
            arrarr2.Append(arr2);

            SweepProfile topProfile
                = creapp.NewCurveLoopsProfile(arrarr2);

            XYZ   pnt10   = new XYZ(0, 0, 0);
            XYZ   pnt11   = new XYZ(0, 5, 0);
            XYZ   pnt122  = new XYZ(2.5, 2.5, 0);
            Arc   testArc = creapp.NewArc(pnt10, pnt11, pnt122);
            Curve curve   = (Curve)testArc;

            Plane geometryPlane = creapp.NewPlane(
                XYZ.BasisZ, XYZ.Zero);

            SketchPlane sketchPlane = doc.NewSketchPlane(
                geometryPlane);

            SweptBlend aSweptBlend = doc.NewSweptBlend(
                true, curve, sketchPlane, bottomProfile,
                topProfile);
      #endif // COMPILE_ORIGINAL_CODE
            #endregion // Original code for Revit 2012

            XYZ        px   = XYZ.BasisX;
            XYZ        py   = XYZ.BasisY;
            Arc        arc1 = Arc.Create(-px, px, -py);
            Arc        arc2 = Arc.Create(px, -px, py);
            CurveArray arr1 = new CurveArray();
            arr1.Append(arc1);
            arr1.Append(arc2);
            CurveArrArray arrarr1 = new CurveArrArray();
            arrarr1.Append(arr1);

            SweepProfile bottomProfile
                = creapp.NewCurveLoopsProfile(arrarr1);

            px += px;
            py += py;
            Arc        arc3 = Arc.Create(-px, px, -py);
            Arc        arc4 = Arc.Create(px, -px, py);
            CurveArray arr2 = new CurveArray();
            arr2.Append(arc3);
            arr2.Append(arc4);
            CurveArrArray arrarr2 = new CurveArrArray();
            arrarr2.Append(arr2);

            SweepProfile topProfile
                = creapp.NewCurveLoopsProfile(arrarr2);

            XYZ p0      = XYZ.Zero;
            XYZ p5      = 5 * XYZ.BasisY;
            XYZ pmid    = new XYZ(2.5, 2.5, 0);
            Arc testArc = Arc.Create(p0, p5, pmid);

            Plane geometryPlane = creapp.NewPlane(
                XYZ.BasisZ, XYZ.Zero);

            SketchPlane sketchPlane = SketchPlane.Create(
                doc, geometryPlane);

            SweptBlend aSweptBlend = credoc.NewSweptBlend(
                true, testArc, sketchPlane, bottomProfile,
                topProfile);
        }