MSCE C++ 创建元素 针对 mdlElmdscr_new 和 mdlElmdscr_appendElement 两个函数的理解问题?

mdlComplexChain_createHeader(&elem, 1, 0);//必须有。

mdlElmdscr_new(&edP2, NULL, &elem);//1-1

mdlShape_create(&elem, NULL, pts1, 4, 1);

mdlElmdscr_appendElement(edP2, &elem);//1-2

mdlSurface_project(&solidEdP, edP1, &pt1, &pt2, NULL);

mdlElmdscr_freeAll(&edP1);//释放所有参数
mdlElmdscr_add(solidEdP);//将生成的实体添加到模型中 也就是设计文件中

老师好,这个是我写的一个简单的demo 示例,先创建一个平面,然后进行拉伸,从而形成一个三维实体的思路。

针对这个段代码有这么几个问题,请教一下老师:

1、mdlElmdscr_new(&edP2, NULL, &elem);    与  mdlElmdscr_appendElement(edP2, &elem);  两个函数的作用是什么?我以为第一个已经将元素与元素描述符进行关联了,为什么创建完平面后还要使用                             mdlElmdscr_appendElement(edP2, &elem);做一次追加呢?

2、mdlElmdscr_add(solidEdP);//将生成的实体添加到模型中 也就是设计文件中  这么理解对吗?还有添加到设计文件 该函数还有显示在视图上的意思吗(在视图上可见该图形)?

Parents
  • 【答1】:mdlElmdscr_new就是以一个MSElement为基础创建一个MSElementDescr。如果你仅仅是一个简单元素(如Line、LineString、Shape等),则不需要首先创建一个ComplexChain头,直接就将shape转成ElementDescr即可。只有当拉伸面是复杂元素(如由一个Linestring和Arc组成的楔形面)时,才需要先创建一个ComplexChain头,以该头作为基础构造一个最初的ElementDescr,而后创建一个Linestring,调用mdlElmdscr_appendElement添加到先前的ElementDescr中,再创建一个Arc,继续调用mdlElmdscr_appendElement添加ElementDescr中。

    所以,根据我以上的表述,您的代码写得是不正确的。

    【答2】:一个设计文件(DgnFile)可以含有多个模型(DgnModel),mdlElmdscr_add是将元素添加到当前这个模型中。

    不写入模型的元素仅在内存中存在,不会显示出来,只有写入模型的元素才会显示出来。

    如果确实想实现不写入模型而要显示的话,需要改用mdlTransientXXX类函数来创建临时元素。这类临时元素能显示但不写入当前模型中。



    Answer Verified By: 平凡人生 

Reply
  • 【答1】:mdlElmdscr_new就是以一个MSElement为基础创建一个MSElementDescr。如果你仅仅是一个简单元素(如Line、LineString、Shape等),则不需要首先创建一个ComplexChain头,直接就将shape转成ElementDescr即可。只有当拉伸面是复杂元素(如由一个Linestring和Arc组成的楔形面)时,才需要先创建一个ComplexChain头,以该头作为基础构造一个最初的ElementDescr,而后创建一个Linestring,调用mdlElmdscr_appendElement添加到先前的ElementDescr中,再创建一个Arc,继续调用mdlElmdscr_appendElement添加ElementDescr中。

    所以,根据我以上的表述,您的代码写得是不正确的。

    【答2】:一个设计文件(DgnFile)可以含有多个模型(DgnModel),mdlElmdscr_add是将元素添加到当前这个模型中。

    不写入模型的元素仅在内存中存在,不会显示出来,只有写入模型的元素才会显示出来。

    如果确实想实现不写入模型而要显示的话,需要改用mdlTransientXXX类函数来创建临时元素。这类临时元素能显示但不写入当前模型中。



    Answer Verified By: 平凡人生 

Children
No Data