1.view和direction
屏幕右向为view.rightdirection其单位基矢量坐标表达为view.cropbox.transform.basisx
屏幕上向为view.updirection其单位基矢量坐标表达为view.cropbox.transform.basisy
屏幕指向"你"为view.viewdirection其单位基矢量坐标表达为view.cropbox.transform.basisZ
按照 right,up,view的右手系
观察者的眼睛位置的世界或者模型坐标为view.origin
2.view和transform
View.cropbox.transform.basis代表了这个view的视图坐标空间的三个正交单位基向量,而origin则对应其原点(0,0,0)
根据线性代数知识,
将这三个基向量按列放置组成变换方阵A,那么视图坐标空间里任意点p的坐标列向量左乘这个A再加上origin的世界坐标即可得到p的世界坐标表达
为了书写方便形式上,revit把transform改成了一个3x4的矩阵,前三列为三个基向量,第四列为origin的世界坐标,p点这一三维向量则添加一维"1"
于是我们可以从view.cropbox.transform.ofpoint(XYZ point)来返回视图坐标空间某点的世界坐标
问:如果我们要对view空间的物体进行ElementTransformUtil操作呢?
由于实际上是对location操作,而location是世界坐标的,所以要变回世界坐标,记view空间变换为A,我们要进行的变换为T
则view坐标的p经T变换后的view坐标为p'=A-1TAp
3.view和cropbox和outline
cropbox返回boundingboxXYZ
outline返回boundingboxUV
广大的世界坐标被cropbox裁剪,cropbox如何定义的呢?原来根据viewdirection的方向有前后两个与之正交的clipplane,而这两个裁剪面中间有一个投影面projectionplane,平行光线穿过前后两个clipplane形成的线路与其围成cropbox.cropbox投影到projectionplane上形成outline,这也正是isometric正交投影;如果不是平行光线而是从观测者(origin)眼睛出发,成pyramid状的perspective透视投影,则以前clipplane的前截面为基准,投影到后clipplane形成cropbox . 总之cropbox是一个平行六面体,outline为其在投影面上的投影.它们的max和min都是遵从视图坐标系,可以通过view.cropbox.transform转化到世界坐标系.值得注意的是转到outline时,有一个scale进行缩放,在自建视图比如view section时如果发现大小不符正是因为这一点.
顺带一提Identity指单位阵,api中经常可以看到Transform transform = Transform.Identity来初始化一个transform这其实可以类比string.Empty
4.创建viewSection类时对视图坐标系的理解
api创建viewSection类时都需要给一个boundingbox,我们为这个boundingbox添加tansform,依次赋予origin(世界坐标)和basis(i).我们根据添加的origin(世界坐标)和basis决定的一个坐标空间来添加这个box.max和box.min(注意origin在该空间是XYZ.Zero).
然后重点来了,ViewSection.CreateXXX()方法是如何使用boundingbox这个参数的呢?它将box的basisZ的反向inverse作为viewdirection,将box的basisY作为updirection,然后根据右手系定出rightdirection,将origin移动到boundingbox的lowerleftfront左下前点,所以你会发现建好后的viewsection的cropbox返回的boundingbox与你赋给它的boundingbox的transform和origin可能都不一样,不过他们的空间位置和大小却是一致的.
基于此,我们在考虑如何构建boundingbox的transform时,我们只需考虑viewdirection和updirection(一般为XYZ.basisZ),然后按照right up view的左手系定出rightdirection,然后把right和up赋给boundingbox的basisX和basisY,而basisZ由右手系得到.
如此我们一开始所考虑的viewdirection和updirection就是viewsection建好后的对应方向