【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);



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

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

    请测试一下如下代码:

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



Children