主要使用RevitAPI中创建命令Document.FamilyCreate.NewExtrusion,此处Document需为族文档。
代码如下:
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData data, ref string message, ElementSet elements)
{
UIApplication _app = data.Application;
UIDocument uidoc = data.Application.ActiveUIDocument;
Document _doc = uidoc.Document;
//选择族文件模板,默认公制常规模型
string rftPath = @"C:\ProgramData\Autodesk\RVT 2016\Family Templates\Chinese\公制常规模型.rft";
//创建族文件
Document faDoc = _app.Application.NewFamilyDocument(rftPath);
Transaction trans = new Transaction(faDoc, "Create Family");
trans.Start();
try
{
FamilyManager manager = faDoc.FamilyManager;
//添加材质参数
FamilyParameter mfp = manager.AddParameter("材质", BuiltInParameterGroup.PG_MATERIALS, ParameterType.Material, false);
//创建拉伸
//创建拉伸轮廓
double len = 10;
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);
CurveArray curveArray = new CurveArray();
curveArray.Append(l1);
curveArray.Append(l2);
curveArray.Append(l3);
curveArray.Append(l4);
CurveArrArray curveArr = new CurveArrArray();
curveArr.Append(curveArray);
Plane p1 = faDoc.Application.Create.NewPlane(XYZ.BasisZ, XYZ.Zero);
Extrusion extrusion = faDoc.FamilyCreate.NewExtrusion(true, curveArr, SketchPlane.Create(faDoc, p1), 10);
faDoc.Regenerate();
//关联材质参数
Parameter p = extrusion.get_Parameter(BuiltInParameter.MATERIAL_ID_PARAM);
manager.AssociateElementParameterToFamilyParameter(p, mfp);
trans.Commit();
}
catch (Exception ex)
{
trans.RollBack();
}
//载入族
Family fa = faDoc.LoadFamily(_doc);
faDoc.Close(false);
//设置族名称
trans = new Transaction(_doc, "SetName");
trans.Start();
fa.Name = "自建拉伸";
trans.Commit();
return Result.Succeeded;
}
}