我这边想复制本地的shared celll元素到文件中,但是调用了mdlSharedCell_addToFile函数后文件并没有新增一个shared cell元素,是函数入参有问题还是API选择出错了呢
SharedCell的创建的关键参数是SharedCell name,你需要在mdlSharedCell_extract调用中获取其名称,然后传入到mdlSharedCell_create函数中。
在Create函数中的第二个参数仅仅是一个元素模版的作用(即决定了创建的元素的颜色、层等信息),不能起到创建相同sharedcell的作用。
你好,我这边debug 发现用cellName确实接收到了shared cell的名称,但是仍然没有新增元素成功,是还有其它的什么限制么
...
mdlSharedCell_create后,直接调用mdlElement_add(&new_sharedCell);来添加这个元素到当前模型中即可。
mdlSharedCell_addToFile主要用于更高级的场合。比如,与某个点关联的sharedCell
你好,从我本地的调试结果来看,无论是调用mdlElement_add还是mdlSharedCell_addToFile函数都不能将新的sharedcell添加到本地dgn文件当中,而且mdlSharedCell_create函数也确实产生了一个新的sharedcell ,这个让我确实很困惑
从您发的截图中的代码看不到有什么不对的地方,只能猜测是其他部分代码的问题了,您最好是另写一个单独的函数去测试一下看看,这个函数不要调用其他您自己编写的函数以及全局变量。如果这个函数运行后问题还存在,您可将对应的dgn文件以及这个函数的代码提供给我们即可,我们就能快速地帮您分析出问题原因。另外您上传代码时请使用下图所示菜单项,这样我们不用再花时间去重新输入一遍了。
我推测您调用mdlSharedCell_create时可能没有连接(Attach)该cell所在的单元库。当然,您只有DGN文件,可能没有原始的单元库。针对这种情况,其实直接基于老的元素构造一个新元素,然后ApplyTransform移动一下即可。如下代码测试通过,不仅仅针对这个SharedCell,任何类型的元素都可以这样复制的。
ElementId id = 1721L; ElementHandle oldElem(id, ACTIVEMODEL); EditElementHandle newElem(oldElem, true); Transform trans = Transform::From(10000, 0, 0); TransformInfo tInfo(trans); HandlerR handler = newElem.GetHandler(MISSING_HANDLER_PERMISSION_Transform); handler.ApplyTransform(newElem, tInfo); newElem.AddToModel();
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: DengX deng