首先,我了解到OBD出图的顺序是模型-》绘图-》图纸
我现在想做一个功能自动识别绘图中的线(也就是获得一个线的所有的数据,我已经阅读并理解了sdk-example中的CurveExample的PrimitiveCurveExample.cpp),并且在线的每一个结点上,在绘图中画上一个标记。
现在的情况是,我模仿CurveExample做了基本功能,我能够从绘图中拿到对应的数据(即直线两个端点的坐标),但是,当我使用数据添加对应的图案到绘图中去的时候(即在前述读取的坐标下画三角形),所画的标记的位置与对应模型在绘图中的位置相去甚远。
比较夸张的描述如下:(1,0,1)和(3,0,1)是模型中某个体的某条线的两端,对模型做纵切面绘图,在绘图中获取到对应Dseg的数据后转化为两个端点的数据(这里也有疑问,下文说,tag(*?*)),使用端点的数据,在对应位置画比例比较合适的三角形,而三角形跑到了很远的位置,与预期不符(大概是(2,99,0)和(4,99,0))。
但是,如果是直接在绘图中画的直线,是能够进行预期的行为(即在1,0,1和3,0,1处对应绘图的位置画线)。
tag(*?*)这里有个问题是,这个数据好像不是(1,0,1)和(3,0,1),按推测,应该两个端点有两个坐标是一样的,但是这里的数据两个端点有两个坐标不一样。
总结以上问题:如何使用模型中的坐标,在绘图中标注内容?
tag(*?*)这个问题查清楚了,实际上获得的坐标是那个体在对应位置的面的“左上和右下”两个端点,属于模型中的坐标
参考模型参考到主文件时是做了变换的,尤其是在切图的时候,例如您前了前视图,这个时候原三维模型中的坐标(x,y,z),就编程了图纸中的(x,z)了。所以您获取参考中元素的坐标的话,是需要用参考的旋转变换矩阵对坐标做一个变换的,您可以搜一下以前的帖子看看,这个问题以前的帖子中讨论过的。
communities.bentley.com/.../msce-c-msce-_processfacets-v
上面这个是我搜到的,说实话读起来有一点吃力
sdk的example里面有对应的例子吗?
您搜的这个帖子很好呀,符老师的代码就完成了获取参考到主模型的旋转变换矩阵呀。
Answer Verified By: lblk dug
核心函数就是GetTransformToParent。你不要受ProcessFacet的影响。直接从绘图模型中拿到设计模型的参考,然后执行如下两行就能得到从设计模型(儿子)到当前绘图模型(父亲)的变换了。Transform trans; modelRef->AsDgnAttachmentP()->GetTransformToParent(trans, false);
然后对你获取的点执行变换即可。