老师好:
我在查看标注相关代码的时候,遇到了两个API
1、AssociativePoint::InitKeypoint()
2、AssociativePoint::SetRoot()
查看帮助文档,还是理解不了 他们的意思,希望老师 百忙之中 给 解释一下! 不胜感激!
另外,如果想实现 对元素上 某两个点的距离 进行 标注的话,而不是按照 以元素为单位 标注,应该怎么考虑呢?
这几个接口主要是用来设置使标注元素关联到指定的元素上,被关联的元素即Root元素改变时,标注元素会自动更新,您看看这个帖子:https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/177283/msce/513799#513799,里边符老师给出了一段使用的示例代码
郭工,您好:
我 已经 拜读过 那篇文章了,就是按照那个思路,自己在写的时候, 发现对 上面提到的两个函数 中的参数 意义 不是很清楚,所以就发帖子 提问了 , 希望 老师 给解释一下。
另外,我想实现的是 对 ICurvePrimitive::CreateRectangle()创建一个矩形后,将 他的长 和宽给标注出来,
或者将 CreateLineString 创建的线串,根据提供的两个点,进行标注。
但是 ,在测试过程中, 系统一直崩溃,所以 我认为 问题出在 下面代码中,
CreateLineString(pts,5);
AssociativePoint::InitKeypoint(assocPt1, 0, 5, 0, 1); AssociativePoint::SetRoot(assocPt1, lineEeh.GetElementId(), 0);
AssociativePoint::InitKeypoint(assocPt2, 4, 5, 0, 1); AssociativePoint::SetRoot(assocPt2, lineEeh.GetElementId(), 0);
这里面的线串可能是 直线 也可能不是直线等。
烦请老师 ,帮忙看一下 或者
Bentley 二次开发小白一枚
InitKeypoint后边四个参数分别是线性元素的第几个顶点,总共几个顶点,最后两个参数配合使用用来指定assocPt1具体在设定的顶点到下一顶点这一段的哪个位置,divisor用来设定这一段多长,例如是10的话,那么numerator传5意思就是assocPt1在这一段中间位置。SetRoot最后两个参数allowFarElm表明是否允许被关联的元素在参考或者共享单元里边,最后一个参数是如果标注的点是两个元素的交点的话,需要两个Root元素,这个参数用来指定是第几个Root元素。程序出错的话,可以先用VS调试一下看看是哪一行出的错。
这个是我的主要代码,针对 InitKeypoint 和 SetRoot 方法的设置如下:
DPoint3d pts1[5]; pts1[0]=pt1; pts1[1]=pt2; pts1[2]=pt1; pts1[3]=pt1; pts1[4]=pt2; pts1[1].x=pt2.x-800; pts1[2].x=pt2.x-600; pts1[3].x=pt2.x-400; CreateLineString(pts,5); AssociativePoint::InitKeypoint(assocPt1, 0, 5, 0, 5); AssociativePoint::SetRoot(assocPt1, lineEeh.GetElementId(), 0); AssociativePoint::InitKeypoint(assocPt2, 4, 5, 0, 1); AssociativePoint::SetRoot(assocPt2, lineEeh.GetElementId(), 0);
我的assocPt1 是想 将点放到 这条线串的 第一个 位置上,assocPt2 是想放到最后一个点上,从而标识出线串的长度,这样我就可以随意在 这条线段上 插入标注了!
另外,我是可以看到 属性中有标注了,但是 却找不到 在视图上。
效果图如下:
,另外,您上面提到的顶点是不是就是 这个线串上的这 5 个点的概念?
那么这么理解是否可以您看:
1、vertex 就是 下标,以我当前这个为例的话,应该0 到 4 之间。
2、nVertex 就是顶点的总数 也就是 5.
3、numerator
4、divisor
3和4 还是不明白、理解不出来,老师 您看是否可以 帮忙修改一下 ,按照线串的做法。辛苦老师了!!!
AssociativePoint::SetRoot这个函数调用之前,被关联的元素要先添加到文件中,您是否这样做了?divisor 就是告诉InitKeypoint函数vertex 这个点到下一个点的距离先按divisor 算,那么插入点就是 vertex 这个点往下一个顶点移动numerator。如果numerator您传的是divisor 的一半的话,插入的点就是 vertex 这个点到下一个点这一段的中点。