符老师 元素加入选择集AddElement(Element element, DgnModelRef modelRef);这个函数效率太低
AddElementSet(IElementSet elementSet); 这个函数(元素含参考文件的元素) 我用C++ 、C#都不行 请问问符老师 怎么弄?
求指教
请参考下面代码:
if (nullptr != element.GetElementRef()) { ElemAgendaEntry newElement(element.GetElementRef(), element.GetModelRef()); newElement.GetElementDescrP()->el.hdr.dhdr.props.b.invisible = false; agenda.push_back(newElement); } ElementAgenda::Iterator elementSet2(&(*agenda.begin()), &(*(agenda.end() - 1))); SelectionSetManager::GetManager().AddElementSet(&elementSet2);
ElementAgenda::Iterator 没有这个用法 这要加什么头文件么
这不行 第一 我很多是参考元素 第二 清除隔离时 怎么弄回原来图层 那样 更复杂了
您将元素加到元素选择集的目的是为了隔离显示(DisplaySet Set)么?
是的 主要时为了显示一部分元素 隐藏一部分
小郭老师 号外号外 好消息 好消息 可以了 我整理下 把那个类发一下 供大家参考
struct TestElementSet : IElementSet { public: ElementAgenda Elements; int index=0; public : void Add(EditElementHandleR elem)//这个添加不行 { Elements.Insert(elem); } void Add(ElementRefP elRef, DgnModelRefP modelRef)//这个可以 { Elements.Insert(elRef, modelRef); } void AddRange(ElementAgenda agenda)//这个添加也不行 { Elements = agenda; } unsigned __int64 GetCount() { return (unsigned __int64)Elements.GetCount(); } bool GetFirst(ElementHandleR elHandle) { if (Elements.GetCount() == 0) return false; elHandle = *(Elements.GetFirst()); return true; } bool GetNext(ElementHandleR elHandle) { if (Elements.GetCount() == 0|| index>=Elements.GetCount()) return false; const ElemAgendaEntry* ele = Elements.GetEntry(index); ElementRefP refp = ele->GetElementRef(); DgnModelRefP modelRef = ele->GetModelRef(); elHandle=(*ele); index++; return true; } };
那两个插入的都是内存中的元素,可能是您调用了插入的函数以后,原来的元素的对象实例离开了其作用域已经被析构了。
Answer Verified By: Andy