예제 #1
0
        /// <summary>
        /// The method is used to create extrusion using FamilyItemFactory.NewExtrusion()
        /// </summary>
        /// <param name="curveArrArray">the CurveArrArray parameter</param>
        /// <param name="workPlane">the reference plane is used to create SketchPlane</param>
        /// <param name="startOffset">the extrusion's StartOffset property</param>
        /// <param name="endOffset">the extrusion's EndOffset property</param>
        /// <returns>the new extrusion</returns>
        public Extrusion NewExtrusion(CurveArrArray curveArrArray, ReferencePlane workPlane, double startOffset, double endOffset)
        {
            Extrusion rectExtrusion = null;

            try
            {
                SubTransaction subTransaction = new SubTransaction(m_document);
                subTransaction.Start();
                SketchPlane sketch = SketchPlane.Create(m_document, workPlane.GetPlane());
                rectExtrusion             = m_familyCreator.NewExtrusion(true, curveArrArray, sketch, Math.Abs(endOffset - startOffset));
                rectExtrusion.StartOffset = startOffset;
                rectExtrusion.EndOffset   = endOffset;
                subTransaction.Commit();
                return(rectExtrusion);
            }
            catch
            {
                return(null);
            }
        }
예제 #2
0
        /// <summary>
        /// Create an extrusion from a given thickness
        /// and list of XYZ points defined in millimetres
        /// in the given family document, which  must
        /// contain a sketch plane named "Ref. Level".
        /// </summary>
        Extrusion CreateExtrusion(
            Document doc,
            List <XYZ> pts,
            double thickness)
        {
            Autodesk.Revit.Creation.FamilyItemFactory factory
                = doc.FamilyCreate;

            SketchPlane sketch = FindElement(doc,
                                             typeof(SketchPlane), "Ref. Level")
                                 as SketchPlane;

            CurveArrArray curveArrArray = new CurveArrArray();

            curveArrArray.Append(CreateProfile(pts));

            double extrusionHeight = MmToFoot(thickness);

            return(factory.NewExtrusion(true,
                                        curveArrArray, sketch, extrusionHeight));
        }
예제 #3
0
        /// <summary>
        /// Create one rectangular extrusion
        /// </summary>
        private void CreateExtrusion()
        {
            try
            {
                #region Create rectangle profile
                CurveArrArray curveArrArray = new CurveArrArray();
                CurveArray    curveArray1   = new CurveArray();

                Autodesk.Revit.DB.XYZ normal      = Autodesk.Revit.DB.XYZ.BasisZ;
                SketchPlane           sketchPlane = CreateSketchPlane(normal, Autodesk.Revit.DB.XYZ.Zero);

                // create one rectangular extrusion
                Autodesk.Revit.DB.XYZ p0 = Autodesk.Revit.DB.XYZ.Zero;
                Autodesk.Revit.DB.XYZ p1 = new Autodesk.Revit.DB.XYZ(10, 0, 0);
                Autodesk.Revit.DB.XYZ p2 = new Autodesk.Revit.DB.XYZ(10, 10, 0);
                Autodesk.Revit.DB.XYZ p3 = new Autodesk.Revit.DB.XYZ(0, 10, 0);
                Line line1 = Line.CreateBound(p0, p1);
                Line line2 = Line.CreateBound(p1, p2);
                Line line3 = Line.CreateBound(p2, p3);
                Line line4 = Line.CreateBound(p3, p0);
                curveArray1.Append(line1);
                curveArray1.Append(line2);
                curveArray1.Append(line3);
                curveArray1.Append(line4);

                curveArrArray.Append(curveArray1);
                #endregion
                // here create rectangular extrusion
                Extrusion rectExtrusion = m_creationFamily.NewExtrusion(true, curveArrArray, sketchPlane, 10);
                // move to proper place
                Autodesk.Revit.DB.XYZ transPoint1 = new Autodesk.Revit.DB.XYZ(-16, 0, 0);
                ElementTransformUtils.MoveElement(m_familyDocument, rectExtrusion.Id, transPoint1);
            }
            catch (Exception e)
            {
                m_errCount++;
                m_errorInfo += "Unexpected exceptions occur in CreateExtrusion: " + e.ToString() + "\r\n";
            }
        }
예제 #4
0
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            Application app = commandData.Application.Application;

            string filename = Path.Combine(_folder, _template);

            Document familyDoc = app.NewFamilyDocument(filename);

            Family family = familyDoc.OwnerFamily;

            Autodesk.Revit.Creation.FamilyItemFactory factory
                = familyDoc.FamilyCreate;

            Extrusion extrusion = null;

            using (Transaction trans = new Transaction(
                       familyDoc))
            {
                trans.Start("Create Extrusion");

                XYZ arcCenter = new XYZ(0.0, 3.0, -2.0);

                // Get the "left" view

                View view = GetView(ViewType.Elevation,
                                    XYZ.BasisY.Negate(), XYZ.BasisZ, familyDoc);

                // 2D offsets from view 'left'

                XYZ xOffset = new XYZ(0.0, 10.0, 0.0);
                XYZ yOffset = new XYZ(0.0, 0.0, -10.0);

                //################## Reference planes ################################

                // Origin's reference planes

                ReferencePlane referencePlaneOriginX
                    = factory.NewReferencePlane(XYZ.BasisX,
                                                XYZ.Zero, XYZ.BasisY, view);

                referencePlaneOriginX.Name   = "ReferencePlane_OriginX";
                referencePlaneOriginX.Pinned = true;

                ReferencePlane referencePlaneOriginY
                    = factory.NewReferencePlane(XYZ.BasisZ,
                                                XYZ.Zero, -XYZ.BasisX, view);

                referencePlaneOriginY.Name   = "ReferencePlane_OriginY";
                referencePlaneOriginY.Pinned = true;

                // Reference planes the extruded arc should stick to

                ReferencePlane referencePlaneX
                    = factory.NewReferencePlane(
                          XYZ.BasisX + yOffset,
                          XYZ.Zero + yOffset,
                          XYZ.BasisY, view);
                referencePlaneX.Name = "ReferencePlane_X";

                ReferencePlane referencePlaneY
                    = factory.NewReferencePlane(
                          XYZ.BasisZ + xOffset,
                          XYZ.Zero + xOffset,
                          -XYZ.BasisX, view);
                referencePlaneY.Name = "ReferencePlane_Y";

                familyDoc.Regenerate();

                //################## Create dimensions ###############################

                // Dimension x

                ReferenceArray refArrayX = new ReferenceArray();
                refArrayX.Append(referencePlaneX.GetReference());
                refArrayX.Append(referencePlaneOriginX.GetReference());

                Line      lineX      = Line.CreateUnbound(arcCenter, XYZ.BasisZ);
                Dimension dimensionX = factory.NewDimension(
                    view, lineX, refArrayX);

                // Dimension y

                ReferenceArray refArrayY = new ReferenceArray();
                refArrayY.Append(referencePlaneY.GetReference());
                refArrayY.Append(referencePlaneOriginY.GetReference());

                Line      lineY      = Line.CreateUnbound(arcCenter, XYZ.BasisY);
                Dimension dimensionY = factory.NewDimension(
                    view, lineY, refArrayY);

                familyDoc.Regenerate();

                //################## Create arc ######################################

                double arcRadius = 1.0;

                Arc arc = Arc.Create(
                    XYZ.Zero + xOffset + yOffset,
                    arcRadius, 0.0, 2 * Math.PI,
                    XYZ.BasisZ, XYZ.BasisY.Negate());

                CurveArray curves = new CurveArray();
                curves.Append(arc);

                CurveArrArray profile = new CurveArrArray();
                profile.Append(curves);

                Plane plane = new Plane(XYZ.BasisX.Negate(),
                                        arcCenter);

                SketchPlane sketchPlane = SketchPlane.Create(
                    familyDoc, plane);

                Debug.WriteLine("Origin: " + sketchPlane.GetPlane().Origin);
                Debug.WriteLine("Normal: " + sketchPlane.GetPlane().Normal);
                Debug.WriteLine("XVec:   " + sketchPlane.GetPlane().XVec);
                Debug.WriteLine("YVec:   " + sketchPlane.GetPlane().YVec);

                extrusion = factory.NewExtrusion(true,
                                                 profile, sketchPlane, 10);

                familyDoc.Regenerate();

                //################## Add family parameters ###########################

                FamilyManager fmgr = familyDoc.FamilyManager;

                FamilyParameter paramX = fmgr.AddParameter("X",
                                                           BuiltInParameterGroup.PG_GEOMETRY,
                                                           ParameterType.Length, true);
                dimensionX.FamilyLabel = paramX;

                FamilyParameter paramY = fmgr.AddParameter("Y",
                                                           BuiltInParameterGroup.PG_GEOMETRY,
                                                           ParameterType.Length, true);
                dimensionY.FamilyLabel = paramY;

                // Set their values

                FamilyType familyType = fmgr.NewType(
                    "Standard");

                fmgr.Set(paramX, 10);
                fmgr.Set(paramY, 10);

                trans.Commit();
            }

            // Save it to inspect

            SaveAsOptions opt = new SaveAsOptions();

            opt.OverwriteExistingFile = true;

            filename = Path.Combine(Path.GetTempPath(),
                                    "test.rfa");

            familyDoc.SaveAs(filename, opt);

            return(Result.Succeeded);
        }