【MSCE C++】ScanCriteria的问题

ScanCriteriaP scan= ScanCriteria::Create();
scan->SetModelRef(ACTIVEMODEL);
scan->SetDrawnElements();
std::vector<ElementRefP> list;
mdlScanCriteria_setDisplaySetTest(scan, true);
scan->SetElemRefCallback(ScanHelper::CallBack, (void*)&list);
scan->AddSingleElementTypeTest(MSElementTypes::CELL_HEADER_ELM);
scan->Scan();

为什么设置了ElementType,扫描结果还有其它类型元素?输出格式为ID;ElementType,

另外,mdlScanCriteria_setDisplaySetTest(scan, true);应该是只扫描可见元素吧,模型里全选只显示有5个元素,但是扫描结果有31个

附件dgn为OBD创建

scantest.dgn

Parents Reply Children
  • 在设置扫描条件的时候还有点问题,AddSingleElementTypeTest和AddSingleClassTest叠加的时候结果有问题,请问这两个函数是或还是且的关系,测试出来好像是或?

  • 添加条件都是且的关系,元素既要符合AddSingleElementTypeTest设置的条件,又要符合AddSingleClassTest才会被扫描到,您这两个函数设置的什么值?

  • 好像问题出在SetDrawnElements这个函数上?这个函数应该在什么时候使用?我理解,这个函数的作用是返回绘制的可见元素?但是结果好像和我理解的不一样。

    //以下返回265个元素
    scan->AddSingleClassTest(Bentley::DgnPlatform::DgnElementClass::Primary);
    
    //以下返回8个元素
    scan->SetDrawnElements();
    scan->AddSingleClassTest(Bentley::DgnPlatform::DgnElementClass::Primary);
    
    //以下返回2个元素
    scan->AddSingleElementTypeTest((int)Bentley::DgnPlatformNET::CellHeader);
    
    //以下返回2个元素
    scan->AddSingleClassTest(Bentley::DgnPlatform::DgnElementClass::Primary);
    scan->AddSingleElementTypeTest((int)Bentley::DgnPlatformNET::CellHeader);
    
    //以下返回8个元素
    scan->SetDrawnElements();//之前测试的时候,未取消此行,导致我认为是或的关系
    scan->AddSingleClassTest(Bentley::DgnPlatform::DgnElementClass::Primary);
    scan->AddSingleElementTypeTest((int)Bentley::DgnPlatformNET::CellHeader);

    2. 多次调用AddSingleClassTest 、AddSingleElementTypeTest和  调用一次SetClassTest、SetElementTypeTest的效果是否一样?

    3.OBD的墙,在OBD环境下,使用Element Selection工具选中,显示Element Class不属于任何一个分类,但是在OPM环境下是属于Primary分类的,这个问题需要另外开一帖吗?

  • SetDrawnElements这个函数应该就是设置扫描到需要绘制的元素,排除控制类型的元素。Dgn文件里边有很多不显示的元素,用来保存一些后台的数据。例如共享单元定义元素

  • 第一段代码和第二段代码比较,SetDrawnElements()看来是起作用了,过滤掉了很多元素。

    但是,第四段和第五段代码,调用SetDrawnElements()后结果增加,不太明白为什么,增加了限制条件,结果应该不变或变少啊?

    还有另外两个问题能否给点提示?