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);//将生成的实体添加到模型中 也就是设计文件中 这么理解对吗?还有添加到设计文件 该函数还有显示在视图上的意思吗(在视图上可见该图形)?
【答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: 平凡人生