我创建了一个层,然后在该层上做一些操作,另外又做了一个功能,用于清除该层上所有元素。结果清除的时候总是把别的层的元素也删除了,有时候会崩溃,麻烦老师帮我找找原因。
创建层的代码:
auto ret = mdlLevel_isValidByName(ACTIVEMODEL, 0, L"MyLevel"); if (!ret) { mdlLevel_create(nullptr, ACTIVEMODEL, L"MyLevel", LEVEL_NULL_CODE); mdlLevelTable_rewrite(ACTIVEMODEL); } mdlLevel_setActiveByName(0, L"MyLevel");
删除层上所有元素的代码:
DgnPlatform::LevelId lid = 0; if (SUCCESS != mdlLevel_getIdFromName(&lid, ACTIVEMODEL, 0, L"MyLevel")) { return; } auto sc = ScanCriteria::Create(); sc->AddSingleLevelTest(lid); sc->SetModelRef(ACTIVEMODEL); sc->SetElemRefCallback([](ElementRefP el, CallbackArgP, ScanCriteriaP)->int { auto model = el->GetDgnModelP(); if (mdlModelRef_isActiveModel(model)) { EditElementHandle eeh(el); if (eeh.IsPersistent()) { eeh.DeleteFromModel(); } } return 0; }, nullptr); sc->Scan(); ScanCriteria::Delete(sc);
在你的回调函数里边把扫描到的元素保存到一个全局容器变量里边,扫描结束后再去删除扫描到的元素。
Answer Verified By: 程远 李
刚试了,还是原来的样子。如果我的函数调用没有问题的话,应该就是dgn文件的问题,谢谢了
注意,当前层是不允许删除的。
另外,如果想要删除某层上的元素,可以简单地调用一个函数mdlLevel_deleteElement即可。不必大动干戈地启用元素扫描功能。