前言
这个例子介绍体量族的修改。包含了创建体量,用API 移动体量族的顶点、边、轮廓(面)。
内容
效果分步骤展示。
整理:
核心逻辑
- 创建拉伸体
m_revitDoc.FamilyCreate.NewLoftForm(true, profiles)
- 增加一个截面
form.AddProfile(connectingEdge.Reference, param)
- 移动截面的边
两个函数连用无法得到有有效的值form.get_CurveLoopReferencesOnProfile(profileIndex, 0);, form.GetGeometryObjectFromReference(r)
改为直接使用get_CurveLoopReferencesOnProfile
返回的引用 - 移动截面
form.MoveProfile(profileIndex, offset);
- 移动底面的顶点
form.MoveSubElement(subElemReference, offset);
- 增加一条边
form.AddEdge(topEdge.Reference, topParam, bottomEdge.Reference, bottomParam);
- 移动边
MoveSubElement(form, edgeReference, offset);
- 移动增加边的顶点
两个函数连用无法得到有有效的值form.get_CurveLoopReferencesOnProfile(profileIndex, 0);, form.GetGeometryObjectFromReference(r)
改为直接使用get_CurveLoopReferencesOnProfile
返回的引用
关键点
这个例子,本质上是对 Form API 的一个应用。参考 API 接口做一下总结:
// class Autodesk.Revit.DB.Form
// 1. 增加边和轮廓
public void AddEdge(Reference faceReference, XYZ point);
public void AddEdge(Reference startEdgeReference, double startParam, Reference endEdgeReference, double endParam);
public void AddEdge(Reference startPointReference, Reference endPointReference);
public int AddProfile(Reference edgeReference, double param);
// 2. 移动
public void MoveProfile(int profileIndex, XYZ offset);
public void MoveSubElement(Reference subElementReference, XYZ offset);
// 3. 旋转
public void RotateProfile(int profileIndex, Line axis, double angle);
public void RotateSubElement(Reference subElementReference, Line axis, double angle);
// 4. 缩放
public void ScaleProfile(int profileIndex, double factor, XYZ origin);
public void ScaleSubElement(Reference subElementReference, double factor, XYZ origin);
// 5. 查询
public ReferenceArray GetControlPoints(Reference curveOrEdgeOrFaceReference);
public ReferenceArray GetCurvesAndEdgesReference(Reference pointReference);```