[C++/C# MSCE ]关闭参考文件的图层显示

符老师   C#LevelHandle.Display可以关闭当前dgn的图层  C++mdlLevel_setDisplay也可以   但我要关闭参考文件的图层   该怎么做呢(上述都不行)?求符老师指导

Parents
  •       需要获得参考文件的模型,然后再去关闭图层:

           ModelId modelId = modelItem.GetModelId();
           DgnModelPtr dgnptr = s_DgnFile->LoadModelById(modelId);
           if (dgnptr->FillSections(DgnModelSections::Model) != SUCCESS)
              {
                    return ERROR;
               }
           
           if (dgnptr != nullptr)
           {
             //参考模型
             if (!dgnptr->IsDgnAttachment() || (dgnptr->IsDgnAttachment() && !dgnptr->AsDgnAttachmentCP()->IsMissingFile()))
                 {
                       //通过参考模型,关闭图层
                       if (SUCCESS != mdlLevel_setDisplay (dgnptr, levelId, true))
                                         return ERROR;
                  }
            }

  • 不行   。。。 我后面还加了mdlLevelTable_rewrite函数 结果是2  不是0    看来还得怎么设置

Reply Children
  • 上面的有误,你试下通过下面的方法得到参考模型,然后在模型里头去关闭,看看可以不?

    if (dgnptr->IsDgnAttachment())
                 {
                       //通过参考模型,关闭图层
                       if (SUCCESS != mdlLevel_setDisplay (dgnptr, levelId, true))
                                         return ERROR;
                  }

  • 图层的关闭问题较为复杂,分全局显示(Global Display)和视图显示(View Display)。mdlLevel_setDisplay是控制全局显示的,当全局显示被关闭后,所有视图就都不显示该层信息了。而视图显示可以控制每个视图对每个层的单独的开和关。有函数mdlView_setLevelDisplay。

    现在的问题不光是本模型的层的开关,而是涉及到了参考模型的层的开关,这就更加复杂了。当我们参考一个模型进来的时候,会在当前模型中创建一个DgnAttachment这样的元素,在该元素中有控制参考模型中每个层的开关的,不必要到原参考模型中去开关。



  • 符老师   mdlLevel_setDisplay中参数DgnModelRefP  传的就是DgnAttachment 但不靠谱   是不是还要加其他的呢

  • 如下例子能关闭视图1中当前模型下参考的第一级参考模型中的所有的层。

    void listReference(WCharCP unparsed)
        {
        DgnModelP           pActiveModel = ISessionMgr::GetActiveDgnModelP();
        DgnAttachmentArrayP pAttachArray = pActiveModel->GetDgnAttachmentsP();
        if (NULL == pAttachArray)
            {
            mdlDialog_dmsgsPrint(L"No Attached Reference");
            return;
            }
        for (DgnAttachmentP pAttach : *pAttachArray)
            {
            mdlDialog_dmsgsPrint(pAttach->GetAttachFileName().GetWCharCP());
    
    		BitMaskCP  lvlMask = mdlView_getLevelDisplayMask(pAttach, 0, ViewLevelDisplayType::Normal);
    		BitMaskP newLvlMask = mdlBitMask_clone(lvlMask);
    		mdlBitMask_setAll(newLvlMask, FALSE);
    		mdlView_setLevelDisplayMask(pAttach, 0, newLvlMask, TRUE);
    		mdlBitMask_free(&newLvlMask);
    
    		pAttach->Rewrite(true, true);
            }
        }



    Answer Verified By: Andy