写在前面
这个例子是在族文件是测试的(打开Revit,选择新建族,选择公制常规模型,如下图一)。创建好以后是空白的,如下图二
图一
图二
实现例子前有几个疑问:
拉伸实体是什么?创建拉伸实体的方法是什么?
创建自定义族类型的方法是什么?方法是什么?
问题解答:
拉伸实体是什么?创建拉伸实体的方法是什么?
答:各种百度也没有个所以然,询问同事以后得到一个通俗的解释,说创建族的时候,你给定一个正方形,就可以做一个正方体出来,同理,给一个圆,就能做一个圆柱出来,拉伸实体的意思大概根据平面图形,拉伸呈现给你一个加了厚度的立体图形吧。
创建拉伸实体的方法 doc.FamilyCreate.NewExtrusion(),要求参数如下:
创建自定义族类型的方法是什么?方法是什么?
答:使用FamilyMananger中的NewType来实现族类型的添加,在创建完成后,Revit会把新创建的族类型设置为当前族类型。
创建族类型的方法:doc.FamilyManager.NewType("我创建的类");,代码中的例子,参数就是一个名字,string类型的。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
namespace BasicCreation
{
[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
Transaction trans = new Transaction(doc,"LS");
trans.Start();
Curve c1 = Line.CreateBound(new XYZ(0,0,0),new XYZ(0,10,0));
Curve c2 = Line.CreateBound(new XYZ(0,10,0), new XYZ(10,10,0));
Curve c3 = Line.CreateBound(new XYZ(10,10,0), new XYZ(10,0,0));
Curve c4 = Line.CreateBound(new XYZ(10,0,0), new XYZ(0,0,0));
CurveArray curveArray = new CurveArray();
curveArray.Append(c1);
curveArray.Append(c2);
curveArray.Append(c3);
curveArray.Append(c4);
CurveArrArray curveArr = new CurveArrArray();
curveArr.Append(curveArray);
//doc.FamilyCreate.NewExtrusion(true,curveArr,SketchPlane.Create(doc,new Plane(new XYZ(0,0,1),XYZ.Zero)),10);
doc.FamilyCreate.NewExtrusion(true, curveArr, SketchPlane.Create(doc, Plane.CreateByNormalAndOrigin(new XYZ(0,0,1),XYZ.Zero)), 10);
doc.FamilyManager.NewType("我创建的类");
trans.Commit();
return Result.Succeeded;
}
}
}
效果: