【MSCE C#】如何得到外部文件所有的model名称

DgnDocument doc = DgnDocument.CreateForLocalFile(FullFileName.Text);
DgnFile dgnFile= DgnFile.Create(doc, DgnFileOpenMode.PreferableReadWrite).DgnFile;
StatusInt si = StatusInt.Success;
DgnFileStatus status=dgnFile.LoadDgnFile(out si);
if (status == DgnFileStatus.Success)
{
    dgnModels = dgnFile.GetAllLoadedModels();
    foreach (DgnModel dgnModel in dgnModels)
    {
        ModelNames.Items.Add(dgnModel.ModelName);
    }
}
//上述代码中用到的自定义方法
public static List<DgnModel> GetAllLoadedModels(this DgnFile dgnFile)
        {
            List<DgnModel> models = new List<DgnModel>();
            IEnumerator<DgnModel> modelEnumerator = dgnFile.GetLoadedModelsCollection().GetEnumerator();
            while(modelEnumerator.MoveNext())
            {
                models.Add(modelEnumerator.Current);
            }
            return models;
        }
经过测试,以上代码得到的Model数量为1,不对,不知道哪里出了问题,麻烦知道下。谢谢老师

Parents
  • dgnFile.GetAllLoadedModels仅能得到DGN文件中被装载的模型,那些从未被打开过的模型是不能获得的。请改用GetModelIndexCollection获得DGN文件中所有的模型索引,再根据这个索引得到模型名。

    这样做的目的是为了节省内存,文件打开时仅仅装载上次最后打开时的那个模型(Save Settings能保存住这个设置,否则的话,会默认打开DGN文件中的Default模型),其他的模型都不装载。

    请测试一下如下代码:

    foreach (ModelIndex mi in dgnFile.GetModelIndexCollection())
          MessageBox.Show(mi.Name);



  • 符老师,我注意到了只能获取已经装载的模型,因此,我有一行loaddgnfile的命令。我没有表述完全我的需求,我想列出外部文件model名称,然后遍历model中的元素。有没有办法打开文件,然后装载所有模型,根据getallloadedmodel来获取所有模型呢。

  • 在我上面代码的基础上,在foreach循环中对于每个mi调用dgnFile.LoadModelById来装载这些未被装入内存中的模型。LoadDgnFile也仅仅是将Dgn文件装入内存,前面讲过,它仅会装载上次默认打开的最后一个模型,其他模型不会装载。



    Answer Verified By: cao li 

Reply Children
No Data