完善主体资料,免费赠送VIP会员!
* 主体类型
* 企业名称
* 信用代码
* 所在行业
* 企业规模
* 所在职位
* 姓名
* 所在行业
* 学历
* 工作性质
请先选择行业
您还可以选择以下福利:
行业福利,领完即止!

下载app免费领取会员

NULL

ad.jpg

二次开发教程:Revit开发通过API 创建族

发布于:2019-08-23 17:20:00

网友投稿

更多

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Autodesk.Revit.UI;

using Autodesk.Revit.DB;

using Autodesk.Revit.Attributes;

using Autodesk.Revit.ApplicationServices;



namespace CreateFamily

{

    [Transaction(TransactionMode.Manual)]

    public class Class1:IExternalCommand

    {

        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

        {

            string rftPath = @"C:\ProgramData\Autodesk\RVT 2016\Family Templates\Chinese\公制柱.rft";

            UIApplication uiapp = commandData.Application;

            Application app = uiapp.Application;

            UIDocument uidoc = commandData.Application.ActiveUIDocument;

            Document doc = uidoc.Document;



            //创建族文件

            Document faDoc = app.NewFamilyDocument(rftPath);


            Transaction trans = new Transaction(faDoc, "Create Family");

            trans.Start();

            FamilyManager manager = faDoc.FamilyManager;

            //添加材质参数

            FamilyParameter mfp = manager.AddParameter("材质", BuiltInParameterGroup.PG_MATERIALS, ParameterType.Material, false);


            //创建拉伸

            CurveArrArray arry = GetCurves();

            SketchPlane skplane = GetSketchPlane(faDoc);

            Extrusion extrusion = faDoc.FamilyCreate.NewExtrusion(true, arry, skplane, 4000 / 304.8);

            faDoc.Regenerate();


            //创建约束

            Reference topFaceRef = null;

            Options opt = new Options();

            opt.ComputeReferences = true;

            opt.DetailLevel = ViewDetailLevel.Fine;

            GeometryElement gelm = extrusion.get_Geometry(opt);

            foreach (GeometryObject gobj in gelm)

            {

                if (gobj is Solid)

                {

                    Solid s = gobj as Solid;

                    foreach (Face face in s.Faces)

                    {

                        if (face.ComputeNormal(new UV()).IsAlmostEqualTo(new XYZ(0, 0, 1)))

                        {

                            topFaceRef = face.Reference;

                        }

                    }

                 }

            }

            View v = GetView(faDoc);

            Reference r =GetTopLevel(faDoc);

            Dimension d = faDoc.FamilyCreate.NewAlignment(v, r, topFaceRef);

            d.IsLocked = true;

            faDoc.Regenerate();


            //关联材质参数

            Parameter p = extrusion.get_Parameter(BuiltInParameter.MATERIAL_ID_PARAM);

            manager.AssociateElementParameterToFamilyParameter(p, mfp);



            trans.Commit();


            Family fa = faDoc.LoadFamily(doc);

            faDoc.Close(false);

            trans = new Transaction(doc, "CreateColumn");

            trans.Start();

            fa.Name = "我的柱";

            trans.Commit();

            return Result.Succeeded;

        }


        private CurveArrArray GetCurves()

        {

            double len = 300 / 304.8;


            XYZ p1 = new XYZ(-len, -len, 0);

            XYZ p2 = new XYZ(len, -len, 0);

            XYZ p3 = new XYZ(len, len, 0);

            XYZ p4 = new XYZ(-len, len, 0);


            Line l1 = Line.CreateBound(p1, p2);

            Line l2 = Line.CreateBound(p2, p3);

            Line l3 = Line.CreateBound(p3, p4);

            Line l4 = Line.CreateBound(p4, p1);

            CurveArrArray ary = new CurveArrArray();

            CurveArray arry = new CurveArray();

            arry.Append(l1);

            arry.Append(l2);

            arry.Append(l3);

            arry.Append(l4);

            ary.Append(arry);

            return ary;

        }


        private SketchPlane GetSketchPlane(Document doc)

        {

            FilteredElementCollector temc = new FilteredElementCollector(doc);

            temc.OfClass(typeof(SketchPlane));

            SketchPlane sketchPlane = temc.First(m => m.Name == "低于参照标高") as SketchPlane;

            return sketchPlane;

        }


        private View GetView(Document doc)

        {

            FilteredElementCollector viewFilter = new FilteredElementCollector(doc);

            viewFilter.OfClass(typeof(View));

            View v = viewFilter.First(m => m.Name == "前") as View;

            return v;

        }


        private Reference GetTopLevel(Document doc)

        {

            FilteredElementCollector temc = new FilteredElementCollector(doc);

            temc.OfClass(typeof(Level));

            Level lvl = temc.First(m => m.Name == "高于参照标高") as Level;

            return new Reference(lvl);

        }

    }

}

本文版权归腿腿教学网及原创作者所有,未经授权,谢绝转载。

未标题-1.jpg

上一篇:二次开发教程:Revit开发楼梯创建

下一篇:二次开发教程:Revit开发之标注创建

60acb4e0ef112.png