MSCE C++ AssociativePoint::InitKeypoint 的问题

老师好:

          我在查看标注相关代码的时候,遇到了两个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 还是不明白、理解不出来,老师 您看是否可以 帮忙修改一下 ,按照线串的做法。辛苦老师了!!!

    Bentley 二次开发小白一枚

  • AssociativePoint::SetRoot这个函数调用之前,被关联的元素要先添加到文件中,您是否这样做了?divisor 就是告诉InitKeypoint函数vertex 这个点到下一个点的距离先按divisor 算,那么插入点就是 vertex 这个点往下一个顶点移动numerator。如果numerator您传的是divisor 的一半的话,插入的点就是 vertex 这个点到下一个点这一段的中点。