#Revit二次开发# 创建剖面视图

设置box的min和max只是设置box的范围大小。其中min和max的xyz方向的大小实际指的基于剖面视图坐标系。Box的原点和min,max可以确定位置关系;box的原点决定创建的剖面视图的原点。剖面视图的原点在剖面线上的一端。

设置一个从左往右看的剖面视图:

 

默认数值的情况下,box的min和maxbox的中心点Orgion是(0,0,0),此时原点:从左往右看,右下角是剖面视图原点。Orgion- RightDirection*100+ViewDirection*100-UpDirection*100也等于min- RightDirection*100变成(-100,100,-100);

再来设置一下box范围:box的RightDirection 长度为10,UpDirection方向为20,ViewDirection反方向为30.矩阵原点与min点重合,所以剖面原点=矩阵原点- RightDirection *Height变成(0,10,0);

同理,下面这个设置 剖面原点=矩阵原点- RightDirection *Height变成(1,11,1);

那么可以设置box的min的X值使原点变成剖面视图的原点:

设置的box的矩阵的Z轴是X轴,那就是从左往右看,对于剖面而言,视图方向ViewDirection就是

-X轴(-1,0,0),视图的UpDirection就是原来的Z轴(0,0,1),右方向RightDirection就是-Y轴。

剖面的宽度Width,由box的X轴距离决定;剖面能看到的深度Depth,由box的Z轴距离决定;高度Height,Y轴距离决定。

一般需求是有个点,需要放在剖面视图中间的,现在将原点(0,0,0)显示在剖面视图中间

所以,要将一个点orgion放在设置的剖面中间,那么设置box的框的大小和原点位置是

确定视图的原点和视图box的大小之后,最重要的一点是,确定视图的坐标系。是否可以根据具体的要求决定剖面视图的XYZ坐标系,就是视图的RightDirection,UpDirection,ViewDirection,这三个属性。

要确定一个坐标系的xyz轴,至少需要知道其中的两个,假设我们指定的情况是,知道一个面的法向量和需要剖面视图的方向,实际我们知道两个垂直的向量了,可以得到一个合乎规则的xyz,但实际仍然定不了一个想要的视图坐标系。举个例子:

这个面的法向量向左,视图方向想要的是另一个箭头方向。计算另一个坐标方向是向上的,这个坐标系对于视图是不成立的,所以生成之后,视图坐标系的视图方向会变成反方向。

所以简单指定向量,通过计算得到的向量,不一定能构成坐标系。

 

程序中设置的参数:

生成的视图属性如下:

程序中设置的x与z轴被取反。

设置的坐标系,特别是视图方向,实际是与坐标系的Y轴相反的,

假设这是一个视图坐标系,视图方向实际是-y;

所以需要二次计算。先分为两种情况,剖面视图方向平行于Z轴(0,0,1)

不平行:

通过视图方向ViewDirection和面的法向量,计算一个垂直向量Y,判断Y与-Y与z轴角度关系,取与z轴角度更小的为视图UpDirection,再通过UpDirection绕ViewDirection顺时针转90度,得到RightDirection。由此得到一个视图的坐标系。

平行:

向上则与X轴(1,0,0)比较,向下则与-X轴(-1,0,0)比较。

通过lookup查看视图的数据:

 

这就实现一个需求,将指定的点放在剖面视图的中心位置,指定了显示的范围大小。且明确了视图的坐标系。

下面两个是相反方向的模型线和对应生成的剖面视图。

 

 

 

整个过程最难理解的部分是,视图的坐标系与程序中设置的sectionBox的矩阵坐标系之间的关系。并不是一一对应的关系。sectionBox的z轴是视图方向的反方向。以此为依据,构件合乎规则xyz坐标系,才能使视图的坐标系变成需要的。

 

最后还有一点不理解的是,视图的Cropbox的min和max为什么程序设定的不一样?这个是有什么决定的?

查找api得知cropBox即裁剪框,框的X方向在屏幕上右侧;Y,向上;Z,朝向用户。这个是和视图方向一致的。

所以和设置的sectionBox不是同一个对象。设置的是z轴与裁剪框z轴相反,故设置的是0-30,裁剪框是-30-0;x,y轴是从视图原点开始计算的,所以是0-10,0-20;

 

 

在研究默认设置的剖面视图:

默认的数据,不设置sectionBox,那么就是单位矩阵,原点是000,长宽深度都是200.生成的视图,原点在100,-100,-100是一个从下往上看的视图,视图的UpDirection默认是y轴 RightDirection是-x轴。

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值