首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dynamo创建三维视图标记【注释系列教程】

Hello大家好!我是九哥~

最近病了一场,说好的注释系列教程,刚写到第二篇就断更了,今天先补上一篇,在三维视图中创建标记,效果见视频:

其实呢,在三维视图中创建标记并不难,Dynamo中自带三个创建标记的节点,按需选择即可:

不过呢,我更推荐使用GeniusLoci节点包中的Create Tag节点(不同版本中可能名称不一样,用法是差不多的):

用法也非常简单,输入要标记的视图、要标记的点、图元、标记族类型、是否需要引线、对齐方式、是否为链接图元等,如下图:

但是运行完却发现,效果是这样:

而我们更希望效果是这样:

看起来,调整应该不难,简单搜了下,发现Rhythm节点包中,有设置标记文字位置和引线拐点位置的节点,可是,不论怎么设置,这个拐点的位置都不理想。

设置拐点坐标

设置文字坐标

好在之前群里有小伙伴趟过这个坑了,这里涉及到一个问题,就是当三维视图锁定以后,这里的坐标系,就不再是原来的坐标系了,而是视图旋转后的坐标系,视图朝向是冲着屏幕的。

所以这里,如果想将这个折线调整的漂亮一些,就需要对坐标点进行坐标系变换,这里就涉及数学知识了,比较头疼。

简单搜了下,Dynamo自带的节点似乎都是基于坐标系调整的节点,并没有针对同一点在两个坐标系之间的矩阵变换的,所以只能自己计算下了。

首先,你需要知道,同一个点在两个坐标系中的变换,本质就是“投影”。我们先来看下向量坐标的由来,如下图:

如果你能理解这一点,那么,我们在计算下单位向量在坐标系中的投影,其正好为向量P与各个坐标轴夹角的余弦值:

这个时候,我们假设Revit原来的坐标系是A,旋转后的三维视图坐标系是B,基于坐标系A表示坐标系B的各个坐标轴并且将各个向量单位化,由此我们得到一个旋转矩阵:

最终,我们可以得到矩阵变换的公式:

这样,我们就很好理解,同时可以得到两个旋转矩阵:

从B到A的转换矩阵:

从A到B的转换矩阵:

基于此,我们首先需要获取视图的XYZ向量,通过查询API手册,可以找到视图属性中有三个向量,分别就是我们需要的XYZ方向向量:

然后将向量转换为点,求两个坐标系的转换矩阵:

反之,逻辑一样,用逆矩阵即可。

最后只需要将求得的两个点,分别设置给tag的文字和引线转折点即可。这里要用的API分别是(都是可get可set的,赋予值即可):

好了,今天的分享就到这里了,小伙伴们快去尝试吧~

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OxsaNr0YUldeBAx2doGIjjDA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券