RevitAPI 之参照平面(Referenceplane)和参照线(Reference Line)

本文介绍了Revit API中参照平面和参照线的基本概念及应用,详细解释了如何使用Revit API创建参照平面和参照线,并展示了如何将模型曲线转换为参照线。此外,还深入探讨了草图平面和草图在Revit中的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Referenceplane是参照平面,Reference Line是参照线。它们是辅助绘图的重要工具, 在族的创建过程中经常使用。

一、参照平面

参照平面可以定位和驱动族模型。在大多数的族模板中,已经默认有三个参照平面,分别为X,Y和Z平面方向,其交点是坐标原点(0, 0, 0)。这三个参照平面默认被固定锁住,并且不能被删除


一般情况下不要去解锁和移动这三个参照平面,否则可能导致所创建族原点不在(0,0,0)点,无法在项目文档中正确使用。
参照平面也通常与参数标注结合使用,将实体的一面与参照平而对齐并锁住,它就能驱动实体模型了。
创建参照平面可以使用Autodesk.Revit.Creation.ItemFactoryBase实用类下的两个重载方法,如下表。

方法

描述

public ReferencePlane NewReferencePlane(DB.XYZ bubbleEnd, DB.XYZ freeEnd, DB.XYZ cutVec, View pView);

使用两点、切向量和视图创建一个新的参考平面的实例。切向量应该垂直于两点向量。

public ReferencePlane NewReferencePlane2(DB.XYZ bubbleEnd, DB.XYZ freeEnd, DB.XYZ thirdPnt, View pView);

使用三点和视图创建一个新的参考平面的实例


在族文档中创建了一个名字为“MyReferencePlane”的参照平面:
public void CreatReferencePlane(Autodesk.Revit.DB.Document doc)
        {
            if (!doc.IsFamilyDocument)
                return;


            using (Transaction transaction = new Transaction(doc, "Editing Family"))
            {
                transaction.Start();
                XYZ bubbleEnd = new XYZ(0, 5, 5);
                XYZ freeEnd = new XYZ(5, 5, 5);
                XYZ cutVector = XYZ.BasisY;
                View view = doc.ActiveView;
                ReferencePlane referencePlane = doc.FamilyCreate.NewReferencePlane(bubbleEnd,freeEnd, cutVector, view);
                referencePlane.Name = "MyReferencePlane";
                transaction.Commit();
            }
        }

注意:参照平面的名字不能重复,但是可以重命名。创建好之后,可以得到一些在图形建模中比较常用的数据,如方向(Direction )、法向量(Normal )、平面(piane ),以及其几何引用(Reference)等。


二、参照线

参照线和参考平面的功能基本相同,它主要实现角度参变。参照线的形状既可以是直线,也可以是其他曲线,在API中,可以使用ChangeToReferenceLine方法从模型曲线转变成参照线,代码如下:
        public void ChangeModelCurveToReferenceLine(Autodesk.Revit.DB.Document doc, ElementId modelCurveId)
        {
            ModelCurve modelCurve = doc.GetElement(modelCurveId) as ModelCurve;
            using (Transaction transaction = new Transaction(doc, "Change  model  curve  to  reference line."))
            {
                transaction.Start();
                modelCurve.ChangeToReferenceLine();
                transaction.Commit();
            }
        }

虽然参照线是由模型曲线转变来 的,但是参照线仍然是模型曲线,它的 元素ID也没有改变。可以从文档中 把模型曲线过滤出来,通过查看它的 IsReferenceLine属性,可以发现参照线的这个属性返回的是True,即为参照线。


=========【更多高级应用请关注公众号】========


==================================
































































































































































 
参照线和参考平面的功能蕋本相同,它主要实现角度参变。参照线的形状既可以是直 线,也町以是其他曲线,在API中,可以使用ChangeToReferenceLine方法从模型曲线转变 成参照线,见代码片段3-30。
代码片段3 3〇:元素编辑
-一 1 L—-
public void ChangeModelCurveToReferenceLine()
{
Document doc = this.ActiveUIDocument.Document;
ModelCurve modelCurve = doc.GetElement(new Elementld(2910)) as ModelCurve; using(Transaction transaction = new Transaction(docJ ^Change model curve to reference line/’))
{
transaction*Start(); modelCurve.ChangeToReferenceLine(); transaction.Commit();
上面的示例中,ID为2910的元素是当前族文档中的一根模型弧线,把它变成参照线后 如图3-18所示,图上半部分的线为原 来的模型曲线,下半部分的线为转变 后的参照线。
虽然参照线是由模型曲线转变来 的,但是参照线仍然是模型曲线,它的 元素ID也没有改变。可以从文档中 把模型曲线过滤出来,通过查看它的 IsReferenceLine属性,可以发现参照 线的这个属性返回的是True,即为参
昭线
3)草图平面(Sketchplane)和草 图(Sketch)
草图编辑在Revit®中被广泛用于 创建各种元素,包括绘制和修改模型 的形状。没有用于创建元素的绘制形 状的绘画也属于草图编辑,例如,用鼠 标移动的操作画一根曲线,在已经创
建好的楼板上绘制褶皱来修改楼板的几何形状等。
草图编辑在用户界面上有专门的窗口区域,不同的元素提供不同的绘制草图的工具集,
标准的工具集一•般有两种:
•绘制形状的工具——直线,曲线,圆,多边形,椭圆,样条曲线。 •拾取已有几何图形来创建形状的工具——线,面拾取等。
图3-19为模型线的绘制草图工具集。 




 


 
草图编辑需要在一个表面上绘制形状,当这个表面为平而 时称之为草图平面(SketchPlane)。草图平面也可以理解成以 下几种情形:
•用户界面的工作平面或者详图元素的视图平面。
•标高或者其他的由草图编辑工具所决定的平面。
•元素约束条件所决定的表面。
•鼠标光标所在区域的一个几何面。
草图平面在API中被用于创建草图相关的元素,如模型
线;或者用于创建拥有草图属性的元素,如构建的实体。草图平面可以从已存在的元素或者
从几何面、平面创建。 注意:
创建元素时传入的草图平面未必就是这个元素的实际草图平面,如果传入的草图平 面已经被其他用途使用了,Revit®就会寻找或者创建一个新的在几何上对等的草图平面。
一些草图平面只适合于用在创建详图元素上,比如那些从详图曲线获取到的草图平 面,当被用在其他类型的元素上时,将会导致创建失败。
创建草图平面的方法在Autodesk. Revit. DB. SketchPlane类里,三个重载方法如表 3-11所示。
代码片段3_31从文档中找到名字为“Ref. Level”的标高,以此创建了一个新的草图平 面,然后用几何点为(0, 0, 0)到点(10, 10, 〇)的直线创建了一条模型曲线,见图3_20。
代码片段3, 3丨:元素编辑
public void CreateModelCurve()
{ 、、乂,.
Document doc = this.ActiveUIDocument.Document;
//在族文档中找到名字为〃Ref • Level"的标高
FilteredElementCollector collector = new FilteredElementCollector(doc); collector = collector • Of Category (BuiltlnCategory • OST一Levels); var levelElements = from element in collector where element. Name = = "Ref • Level" select element;
List< Autodesk.Revit.DB.Element> levels = levelElements•ToList< Autodesk.Revit* DB*Element> (); if(levels•Count < = 0) return;
Level ref Level = levels[0] as Level;
//创违一条几何直线,一个基于标窃的草图平面,然后专这个审图平面上创亨一条模型线. using(Transaction trans = new TransactionCdoc, ^Create model line.")) 
  
 
trans.Start();
Line line = Line.CreateBound(XYZ.Zeroj new XYZ(10> 10j 0));
SketchPlane sketchPlane = SketchPlane.Create(doc> refLevel.Id); ModelCurve modelLine = doc.FamilyCreate.NewModelCurve(line> sketchPlane); trans.Commit();
 
图3-20在草图平而上创建模型曲线(直线)


代码片段3_32创建一个原点为坐标原点(0, 〇, 〇),法向蛩为(0, 0, 1)的几何平面,然 后用这个几何平面创建了对应的草图平面,再在这个草图平面上创建了一个圆心为(〇, 〇, 〇),半径为5的圆形的模型线。
代码片段3-32:元素编辑
public void CreateSketchPlaneByPlane()
{
Document doc = this.ActiveUIDocument.Document; using(Transaction trans = new Transaction(doc,Create model arc."))
{
trans.Start();
Plane plane = this.Application.Create.NewPlaneCXYZ.BasisZj XYZ.Zero); SketchPlane sketchPlane = SketchPlane.Create(doc^ plane);
Arc arc = Arc.Create(plane, 5, 0, Math.PI * 2);
ModelCurve modelCircle = doc.FamilyCneate.NewModelCurveCarc, sketchPlane); trans.Commit(); 
代码的效果如图3-21所示。 ^一-,一^
从一个几何平面的引用来创建草图平面的方 |
法和上面两个示例类似,需要在文档中找到一个 ,! \
几何平面,例如,一个几何实体的平面 \
(PlanarFace. Reference),然后将该平面的引用传( I^
入即可。 / 丨丨
草图(Sketch)是个抽象的概念,由两个最基 I
本的属性构成:草图平面(SketchPlane)和轮廓\ \
(Profile)。在UI用户界面上,进人草图编辑的绘 \ |/
图区域后,草图平面就默认设置好了,用户只需要 \ J
使用草图编辑工具绘制轮廊就可以;API中则需 |^
要用户创建或者确定草图平面,再提供相应的轮 ^
廊。上面的两个示例中的端点为〇),0,()靡10,則一21在草图平面上创建模型曲线(圆) 10, 〇)的直线(line);圆心为(0, 〇, 〇)和半径为5
的圆形(arc)就可以理解为对应的轮廓。
图3-22左边部分是族文档中的一个拉伸体(Extrusion),右边部分是这个拉伸体的轮 廊,为四根首尾相连的直线构成的线组。
 


API从文档中取到ID为3388的拉伸体及其草图的示例参见代码片段3-33。
代码片段3-33:元素编辑
public void 6etSketchFromExtrusion()
Document doc = this.ActiveUIDocument.Document;
Extrusion extrusion = doc.6etElement(new Elementld(3388)) as Extrusion; SketchPlane sketchPlane = extrusion .Sketch.SketchPlane;
CurveArrArray sketchProfile = extrusion.Sketch.Profile; 
Revit®中的三维模型,如拉伸(Extrusion)、融合(Blend )、旋转(Revolution )、放样 (Sweep)、放样融合(Sw印tBlend),都使用到了草图。不但在创逮好的模型中可以获取到它 的草图(Sketch属性),而且在创建过程中(比如NewExtunsion等方法)也耑要使用到草图 平面和轮廊。关于三维模型的创建和使用方法(详细介绍参见第7章)。
<think>嗯,用户的问题是关于如何在Revit中将参照平面转换为工作平面。我需要回顾之前的引用内容,看看有没有相关的信息。引用[1]提到了如何使用代码创建参照平面,并且可以获取到参照平面的几何引用如法向量等,这点很重要,因为工作平面的设置通常需要方向信息。引用[3]则强调了Reference对象的重要性,特别是面引用、线引用,可能设定工作平面有关。接下来,用户的具体需求是设置工作平面的方法。根据Revit的操作逻辑,通常需要先选择参照平面,然后通过“设置工作平面”命令或API中的对应方法。在UI操作部分,应该分步骤说明:选择参照平面、找到“设置工作平面”的位置,可能在“修改”选项卡或上下文菜单中。用户可能对步骤不太熟悉,所以需要明确路径,比如“视图”选项卡下的“工作平面”面板。另外,引用[2]中提到NewAlignment方法,虽然主要用于对齐约束,但这说明API中可以通过引用对象来建立关联。结合引用[3]的内容,引用对象的类型如面引用(Reference)是关键,可能需要通过参照平面获取其几何引用,然后传递给API方法如SetPlane。关于API部分,用户可能是开发者,所以需要提供代码示例。Plane.CreateByNormalAndOrigin方法可以利用参照平面的法向量原点来创建平面对象。需要引用正确的命名空间,比如Autodesk.Revit.DB.Plane。然后通过UIApplication或UIDocument获取ActiveView,再设置工作平面。这里要注意事务处理,确保在事务中执行设置操作。还要考虑可能出现的错误点,比如参照平面名称重复导致创建失败,引用[1]中特别提到名字不能重复,但在设置工作平面时可能没有这个问题。不过用户需要确保参照平面有效存在,否则引用可能为空。此外,工作平面的设置依赖于当前视图,特别是三维视图或平面视图,在剖面或立面视图中可能无法设置,这点需要提及。用户可能遇到的问题包括找不到“设置工作平面”的按钮,或者参照平面不可见。需要强调可见性的重要性,比如在视图中启用参照平面显示,或者在属性中检查是否隐藏。另外,转换后的工作平面可能需要作为绘制草图的基础,所以在创建拉伸等形状时选择该平面作为草图平面。最后总结建议,手动操作用户更方便,开发则需注意几何引用事务处理。同时,避免引用中不相关的内容,比如导出图纸或CAD参照,除非用户有后续问题涉及这些方面。确保回答清晰,覆盖UIAPI两种方法,满足不同用户的需求。</think> 在Revit中将参照平面设置为工作平面的方法可分为手动操作API编程两种方式,具体步骤如下(参考Revit API原理实现): ### 一、手动操作(UI界面) 1. **激活目标视图** 在项目或族编辑器中,切换到需要设置工作平面的*平面视图*(如楼层平面参照平面视图)或*三维视图*。 2. **选择参照平面** 单击选中目标参照平面(需确保参照平面在视图中可见)[^1]。 3. **设置工作平面** - 方法1:单击顶部菜单栏「修改」> 「工作平面」> 「设置」 > 选择「名称」标签页 > 从列表中选择目标参照平面名称(如`MyReferencePlane`)[^1]。 - 方法2:在视图控制栏单击「工作平面」图标(小网格状按钮)> 选择「拾取一个平面」> 点击目标参照平面边缘[^4]。 4. **验证设置** 创建新几何体(如拉伸形状),若草图自动对齐到该参照平面,即表示设置成功[^5]。 > ⚠️ 注意:工作平面必须与视图平行,剖面视图中需通过「视图」> 「工作平面」>「显示」检查方向。 ### 二、API编程实现(C#示例) ```csharp // 引用命名空间 using Autodesk.Revit.DB; using Autodesk.Revit.UI; public void SetRefPlaneAsWorkPlane(UIDocument uidoc, string refPlaneName) { Document doc = uidoc.Document; View activeView = doc.ActiveView; // 1. 按名称查找参照平面 ReferencePlane refPlane = new FilteredElementCollector(doc) .OfClass(typeof(ReferencePlane)) .Where(e => e.Name == refPlaneName) .FirstOrDefault() as ReferencePlane; if (refPlane == null) return; // 2. 获取参照平面的几何引用 Reference planeRef = refPlane.GetReference(); // 获取几何引用对象[^3] // 3. 创建新工作平面 Plane plane = Plane.CreateByNormalAndOrigin( refPlane.Normal, // 法向量 refPlane.BubbleEnd // 起点坐标 ); using(Transaction trans = new Transaction(doc, "设置工作平面")) { trans.Start(); // 4. 将参照平面设置为当前视图的工作平面 activeView.SetWorkPlane(plane); // 关键API方法 trans.Commit(); } } ``` **关键API说明** - `GetReference()`:获取参照平面的几何引用(如面或线),用于空间定位[^3] - `Plane.CreateByNormalAndOrigin()`:根据法向量原点创建数学平面 - `View.SetWorkPlane()`:强制将当前视图的工作平面设置为指定平面[^2] ### 三、常见问题解决 1. **参照平面不可见** - 在视图属性中启用「显示参照平面」或通过「VV」快捷键打开可见性设置[^4]。 2. **API创建失败** - 需确保在*事务(Transaction)* 内操作文档[^1] - 检查参照平面名称唯一性(`refPlane.Name`不可重复)[^1][^5]。 3. **工作平面方向错误** - 使用`refPlane.Direction`验证方向矢量[^1] - 通过`XYZ.BasisX/Y/Z`重新指定法向量。 > 📌 实践建议:在族编辑器中使用参照平面作为参数化驱动的基础时,优先通过`doc.FamilyCreate.NewExtrusion()`等方法的`sketchPlane`参数直接绑定[^5]。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值