如何修改revit视图范围子集名称

Posts - 828,
Articles - 4,
Comments - 40
每天早上叫醒我的不是闹钟而是梦想-你厌恶的现在是未来的你回不去的曾经-努力努力现实没有留给梦想多少时间
11:46 by 精诚所至
金石为开, ... 阅读,
最佳的绘图方式是左手键盘,右手鼠标,使用快捷键将大大提高绘图效率,Revit同样提供了自定义绘图工具快捷键的功能(Revit2011及以后版本),有两种方式调出自定义快捷键窗口,第一种是Revit窗口点击左上角调出“选项”对话框,切换到“用户界面”选项卡,其中有“快捷键”按钮,即可调出快捷键设置窗口。
或者点击“视图--用户界面--快捷键同样可以调出快捷键定义对话框,需要说明的是,Revit跟Autocad快捷键不同,Autocad快捷键是单个字母,一般是命令的英文首字母,但是Revit快捷键只能是两个字母,Revit跟Autocad稍有不同是,AutoCAD中Enter或者空格都能重复上个命令,但Revit重复上个命令只能用Enter键,空格键不能重复上个命令。
举例说明如何自定义Revit快捷键,比如我们要定义对齐命令的快捷键,那么我们打开“自定义快捷键对话框,前提我们已经知道,”对齐“按钮在Revit”修改“菜单栏下,在过滤器中将搜索范围限定为”修改“制位表”,在”搜索“栏中输入”对齐“,即可找到要修改的命令,可以看到Revit默认的对齐快捷键是AL,也就是应为的align的前两个字母,我们想把“AA”指定为对齐工具快捷键,那么我们在“新按键”栏输入“AA”,点击”指定“。
完成之后即可将“AA”指定给对齐命令,需要说明的是,自定义快捷键不会覆盖掉原来Revit默认的快捷键,使用自定义的快捷键AA或者Revit默认的AL同样可以调用“对齐”命令。1784人阅读
Revit(64)
原文链接:
今天我们讨论一个我很感兴趣的问题:
1. 如何精确地获取空间范围框(Scope Box)的几何位置、尺寸和方向?
2. 如何精确地设置三维视图剖视框(Section Box)的几何位置、尺寸和方向?
换句话说就是如何使用手动调整的范围框来定义视图剖视框,即模型是如何在三维视图中被剪切的。
实际上我已经在博文 &(译者注:我的翻译版本在这里 )&中说明了如何设置一个视图剖视框。关键在于正确地设置视图的 SectionBox 属性。该属性是一个 BoundingBoxXYZ 类型的值,即一个转换(Transform)加上最大坐标值和最小坐标值。该属性描述了范围框的位置、方向和尺寸。在那篇博文里,这个属性值被传入 ViewSection.CreateSection() 方法用于创建剖视图。
如果需要修改(而不是创建)一个存在的剖视图,我们只要将更新后的 BoundingBoxXYZ 赋予该剖视图的 SectionBox 属性即可。
下图是一个模型的三维视图,其中有一个虚线表示的范围框。三维视图的 SectionBox 属性被选中,所以视图的剖视框(实线表示)也显示出来了。虚线范围框和实线剖视框都被选中。
我们的目标是使用程序重新定位并且旋转剖视框,使其与范围框的位置、方向和尺寸都相同。
你需要实现如下的操作步骤:
1. 从范围框获取所需几何数据
范围框没有提供直接的 Location 属性,所以只能从它的几何定义中计算得到。通过 RevitLookup 我们可以发现,范围框包含12条线段(即范围框的12条边)。所以你需要通过这12条线段来范围框的计算尺寸和方向,进而计算视图剖视框。
2. 创建需要的剖视框对象(转换、最大坐标值、最小坐标值……)
3. 将剖视框对象设置到视图的 SectionBox 属性
view.SectionBox = newSectionBox
为了验证我的方案,我实现了 GetScopeBoxBoundingBox() 方法用于从范围框的12条边中抽取数据创建 BoundingBox 对象,并基于它 创建了 SetSectionBox 命令。
GetScopeBoxBoundingBox() 方法的算法如下:
1. 选取一条边所在线为X轴,一个端点作为原点;
2. 找到其它两条经过原点的线,分别作为Y轴和Z轴;
3. 可以通过Y轴和Z轴的方向选取,确认新的坐标系是右手螺旋方向;
确认坐标系为右手螺旋方向
当且仅当坐标系确定的平行六面体的有符号体积为正值时,该坐标系为右手螺旋方向。有符号体积的计算公式为:前两个坐标轴向量的叉积与第三个坐标轴的点积。
/// &summary&
/// 由向量 a,b,c 围成的平行六面体的有符号体积。德语称之为 Spatprodukt。
/// &/summary&
static double SignedParallelipedVolume( XYZ a, XYZ b, XYZ c )
return a.CrossProduct( b ).DotProduct( c );
/// &summary&
/// 如果三个向量 a,b,c 组成右手螺旋方向的坐标系,则返回 true。
/// 即由这三个向量围成的平行六面体的有符号体积为正值。
/// &/summary&
bool IsRightHanded( XYZ a, XYZ b, XYZ c )
return 0 & SignedParallelipedVolume( a, b, c );
获取范围框的 Bounding Box
以上准备工作就绪之后,是可以使用 GetScopeBoxBoundingBox() 方法获取 Bounding Box 了。
BoundingBoxXYZ GetScopeBoxBoundingBox( Element scopeBox )
Document doc = scopeBox.D
Application app = doc.A
Options opt = app.Create.NewGeometryOptions();
GeometryElement geo = scopeBox.get_Geometry( opt );
int n = geo.Count&GeometryObject&();
if( 12 != n )
throw new ArgumentException( &Expected exactly 12 lines in scope box geometry& );
XYZ origin =
// 从平行六面体的12条边中获取X/Y/Z轴
foreach( GeometryObject obj in geo )
Debug.Assert( obj is Line, &expected only lines in scope box geometry& );
Line line = obj as L
XYZ p = line.get_EndPoint( 0 );
XYZ q = line.get_EndPoint( 1 );
XYZ v = q -
if( null == origin )
else if( p.IsAlmostEqualTo( origin ) || q.IsAlmostEqualTo( origin ) )
if( q.IsAlmostEqualTo( origin ) )
v = v.Negate();
if( null == vy )
Debug.Assert( IsPerpendicular( vx, v ), &expected orthogonal lines in scope box geometry& );
Debug.Assert( null == vz, &expected exactly three orthogonal lines to originate in one point& );
Debug.Assert( IsPerpendicular( vx, v ), &expected orthogonal lines in scope box geometry& );
Debug.Assert( IsPerpendicular( vy, v ), &expected orthogonal lines in scope box geometry& );
if( !( IsRightHanded( vx, vy, vz ) ) )
// 创建转换(Transform)
Transform t = Transform.I
t.Origin =
t.BasisX = vx.Normalize();
t.BasisY = vy.Normalize();
t.BasisZ = vz.Normalize();
Debug.Assert( t.IsConformal, &expected resulting transform to be conformal& );
// 创建 Bounding Box
BoundingBoxXYZ bb = new BoundingBoxXYZ();
bb.Transform =
bb.Min = XYZ.Z
bb.Max = vx + vy +
我们还差一点儿就要成功了。
根据范围框计算合适的视图剖视框
现在我需要确认Z轴确实是垂直向上的。在考虑视图方向的前提下,使用最靠近观察者的范围框边界作为剖视框的Z轴。
因此我创建了另外一个方法 GetSectionBoundingBoxFromScopeBox()。它根据范围框的位置、视图方向计算出一个合适的剖视图 Bounding Box:
1. 找到最接近观察者的垂直边界;
2. 使用该边界的底部端点作为原点;
3. 找到另外两条源于原点的边界;
4. 使用这三条边界定义 Bounding Box
使用视图方向和范围框 Bounding Box 的最大尺寸来共同确定视点。我们将身处视点来观测范围框。我将会遍历两次范围框的边界集合。在第一次遍历中,我确定原点和Z轴。在第二次遍历中,我确定Y轴和Z轴。
BoundingBoxXYZ GetSectionBoundingBoxFromScopeBox(
Element scopeBox,
XYZ viewdirTowardViewer )
Document doc = scopeBox.D
Application app = doc.A
// 从观察者的角度在范围框的外部找到一个可能的视点
BoundingBoxXYZ bb = scopeBox.get_BoundingBox( null );
XYZ v = bb.Max - bb.M
double size = v.GetLength();
XYZ viewPoint = bb.Min + 10 * size * viewdirTowardV
// 获取范围框几何数据(即它的12条边界)
Options opt = app.Create.NewGeometryOptions();
GeometryElement geo = scopeBox.get_Geometry( opt );
int n = geo.Count&GeometryObject&();
if( 12 != n )
throw new ArgumentException( &Expected exactly 12 lines in scope box geometry& );
// 将最接近观察者的那条边界的底部端点作为原点,从原点出发垂直向上的向量作为Z轴。
// 如果和观察者距离最近的边界多于一条,则选择最左边的那条(假设给定的视图方向中Z轴是垂直向上的)
double dist = double.MaxV
XYZ origin =
foreach( GeometryObject obj in geo )
Debug.Assert( obj is Line, &expected only lines in scope box geometry& );
Line line = obj as L
p = line.get_EndPoint( 0 );
q = line.get_EndPoint( 1 );
if( IsVertical( v ) )
if( q.Z & p.Z )
v = v.Negate();
if( p.DistanceTo( viewPoint ) & dist )
dist = origin.DistanceTo( viewPoint );
// 找到另外两条以原点为端点的边界作为X轴和Y轴,并确认X/Y/Z组成符合右手螺旋方向的坐标系
foreach( GeometryObject obj in geo )
Line line = obj as L
p = line.get_EndPoint( 0 );
q = line.get_EndPoint( 1 );
if( IsVertical( v ) ) // 已经在上面的遍历中处理过了
if( p.IsAlmostEqualTo( origin ) || q.IsAlmostEqualTo( origin ) )
if( q.IsAlmostEqualTo( origin ) )
v = v.Negate();
if( null == vx )
Debug.Assert( IsPerpendicular( vz, v ), &expected orthogonal lines in scope box geometry& );
Debug.Assert( null == vy, &expected exactly three orthogonal lines to originate in one point& );
Debug.Assert( IsPerpendicular( vz, v ), &expected orthogonal lines in scope box geometry& );
Debug.Assert( IsPerpendicular( vx, v ), &expected orthogonal lines in scope box geometry& );
if( !( IsRightHanded( vx, vy, vz ) ) )
// 创建转换(Transform)
Transform t = Transform.I
t.Origin =
t.BasisX = vx.Normalize();
t.BasisY = vy.Normalize();
t.BasisZ = vz.Normalize();
Debug.Assert( t.IsConformal, &expected resulting transform to be conformal& );
// 创建 Bounding Box
bb = new BoundingBoxXYZ();
bb.Transform =
bb.Min = XYZ.Z
bb.Max = vx + vy +
创建一个外部命令,在当前的三维视图中首先找到第一个范围框元素,然后执行如下操作:
1. 访问当前视图并确认是否为三维视图;
2. 选中范围框元素;
3. 使用 GetSectionBoundingBoxFromScopeBox() 方法根据范围框得到剖视框;
4. 将剖视框的 Bounding Box 设置到当前视图的 SectionBox 属性
UIApplication uiapp = commandData.A
UIDocument uidoc = uiapp.ActiveUID
Application app = uiapp.A
Document doc = uidoc.D
View3D view = doc.ActiveView as View3D;
if( null == view )
message = &Please run this command in a 3D view.&;
return Result.F
Element scopeBox = new FilteredElementCollector( doc, view.Id )
.OfCategory( BuiltInCategory.OST_VolumeOfInterest )
.WhereElementIsNotElementType()
.FirstElement();
BoundingBoxXYZ viewSectionBox = GetSectionBoundingBoxFromScopeBox( scopeBox, view.ViewDirection );
using( Transaction tx = new Transaction( doc ) )
tx.Start( &Move And Resize Section Box& );
view.SectionBox = viewSectionB
tx.Commit();
return Result.S
结果如下图所示:
表示范围框的虚线被剖视框的实线完全覆盖了。
完整的代码可以在这里下载:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:139206次
积分:2402
积分:2402
排名:第14512名
原创:39篇
转载:12篇
译文:57篇
评论:29条
(2)(1)(7)(2)(2)(10)(5)(5)(5)(1)(13)(6)(1)(10)(11)(5)(1)(1)(1)(1)(1)(1)(1)(3)(1)(2)(4)(2)(3)视图样板定义:;视图样板是一系列视图属性,例如,视图比例、规程、;使用视图样板可以为视图应用标准设置;在创建视图样板之前,请首先考虑如何使用视图;创建视图样板:;可通过复制现有的视图样板,并进行必要的修改来创建;也可以从项目视图或直接从“图形显示选项”对话框中;基于现有视图样板创建视图样板的步骤;1.单击“视图”选项卡“图形”面板“视图样板”下;2.在“视图
视图样板定义:
视图样板是一系列视图属性,例如,视图比例、规程、详细程度以及可见性设置。
使用视图样板可以为视图应用标准设置。 使用视图样板可以帮助确保遵守公司标准,并实现施工图文档集的一致性。
在创建视图样板之前,请首先考虑如何使用视图。 对于每种类型的视图(楼层平面、立面、剖面、三维视图等等),要使用哪些样式? 例如,设计师可以使用许多样式的楼板平面视图,如电力和信号、分区、拆除、家具,然后进行放大。
创建视图样板:
可通过复制现有的视图样板,并进行必要的修改来创建新的视图样板。
也可以从项目视图或直接从“图形显示选项”对话框中创建视图样板。
基于现有视图样板创建视图样板的步骤
1. 单击“视图”选项卡 “图形”面板 “视图样板”下拉列表 “管理视图样板”。
2. 在“视图样板”对话框中的“视图样板”下,使用“规程”过滤器和“视图类型”过滤器限制视图样板列表。
每个视图类型的样板都包含一组不同的视图属性。请为正在创建的样板选择适当的视图类型。
3. 在“名称”列表中,选择视图样板以用作新样板的起点。
4. 单击 (复制)。
5. 在“新视图样板”对话框中,输入样板的名称,然后单击“确定”。
6. 根据需要修改视图样板的属性值。
如果选中“包含”选项,可以选择将包含在视图样板中的属性。清除“包含”选项可从样板中删除这些属性。对于未包含在视图样板中的属性,不需要指定它们的值。在应用视图样板时不会替换这些视图属性。
7. 单击“确定”。
基于项目视图设置创建视图样板的步骤 1. 在项目浏览器中,选择要从中创建视图样板的视图。 2. 单击“视图”选项卡 “图形”面板 “视图样板”下拉列表 “从当前视图创建样板”,或单击鼠
标右键并选择“通过此视图创建样板”。
3. 在“新视图样板”对话框中,输入样板的名称,然后单击“确定”。
此时显示“视图样板”对话框。
4. 根据需要修改视图样板的属性值。
如果选中“包含”选项,可以选择将包含在视图样板中的属性。清除“包含”选项可删除这些属性。对于未包含在视图样板中的属性,不需要指定它们的值。在应用视图样板时不会替换这些视图属性。 5. 单击“确定”。 从“图形显示选项”对话框创建视图样板的步骤
1. 在视图控制栏上,单击“视觉样式图形显示选项”。
注: 新视图样板将反映当前视图的视图类型。
2. 在“图形显示选项”对话框中,根据需要定义选项。
3. 单击“另存为视图样板”。
4. 在“新视图样板”对话框中,输入样板的名称,然后单击“确定”。
此时显示“视图样板”对话框。
5. 根据需要修改视图样板的属性值。
如果选中“包含”选项,可以选择将包含在视图样板中的属性。清除“包含”选项可删除这些属性。对于未包含在视图样板中的属性,不需要指定它们的值。在应用视图样板时不会替换这些视图属性。
6. 单击“确定”。
视图样板的传递:
您可以为每种样式创建视图样板来控制以下设置:类别的可见性/图形替代、视图比例、详细程度、图形显示选项等等
视图样板的导出即视图样板的传递,当使用“传递项目标准”工具时,请考虑以下事项: ?
? 当系统族依赖于其他系统族时,所有相关的族都必须同时传递,以便使其关系保持不变。例如,文本类型和标注样式使用箭头。因此,文本类型、标注样式和箭头必须同时传递。 视图样板和过滤器必须同时传递才能保持其关系。 假设您希望将视图样板和过滤器从源项目传递到目标项目。如果目标项目包含具有相同名称的视
图样板和过滤器,请将其删除,然后再从源项目传递这些项目。此预防措施可以避免出现潜在问题。
? 以下项目不在项目之间传递:
o 立面视图类型
o 剖面视图类型
o Revit 链接的可见性设置
三亿文库包含各类专业文献、幼儿教育、小学教育、专业论文、外语学习资料、中学教育、生活休闲娱乐、行业资料、高等教育、revit视图样板定义方法及心得62等内容。 
 自带的中国样板文件 二.绘制轴网和标高 轴网绘制方法: “常用”选项卡→“...在左侧的 REVIT 项目浏览器中,打开“南立面”视图 “常用”选项卡→“基准”...  Revit应用总结_建筑/土木_工程科技_专业资料。机电(建模-管综-出图)总结 1.视图样板 1.1 视图范围 1.2 过滤器 1.3 颜色方案位置 2.绘制图层(CAD 底图...  Revit视图比例和视图详细程度的关系_建筑/土木_工程科技_专业资料。Revit视图比例和视图详细程度的关系BIM 软件小技巧:Revit 视图比例和视图详细程度的关系 Revit 里,...  本章 仅介绍此次样板文件创建的过程、基本方法与经验总结。 5.2 客户定义的...Revit2014视图样板的使用... 2页 免费 定制项目-客户需求表 暂无评价 1页 2...  Revit 流程及相关问题总结一.准备工作 整体规划 准备各专业样板文件―对象样式―...( 剖面标头的定义 ,剖面视图当中的梁板 平面填充不显示 的定义,墙梁柱不显示...  BIM-revit相关样板文件的设置及视频演示_建筑/土木_工程科技_专业资料。BIM实施...BIM-REVIT样板流程 34页 2下载券
revit视图样板定义方法及... 3页 免费
...  欢 迎分享心得经验~ 写在前面: REVIT 作为一款专门...视图 “常用”→“结构”→“梁” 默认样板中依然...可以自定义修改 Revit 快捷键将其修改为自己习惯的...  在 REVIT 中以自定义样板或机械样板新建一个文件,并链 接上一步的建筑模型 1...建立本专业所需视图样板,注意检查视图样板中专业名称 一栏是否正确(此处可仅先行...  项目样板文件 剖面框在三维视图的属性里 实现选择框...revit 会用转角立柱的方式来生成 8.2.1 绘制楼梯...着色是自定义颜色 →颜色方案 点开着色 物体是黄的...更多最新文章相关作者文章搜狗:感谢您阅读revit小技巧 | revit中新建剖面视图时应用视图样板 本文版权归原作者所有,本文由网友投递产生,如有侵权请联系 ,会第一时间为您处理删除。

我要回帖

更多关于 revit三维视图不显示 的文章

 

随机推荐