public string GetAttachmentPath(string file, string modelName, int referenceIndex) { string referenceFile = null; DgnDocument pDgnDoc = DgnDocument.CreateForLocalFile(file); DgnFile pDgn = DgnFile.Create(pDgnDoc, DgnFileOpenMode.ReadWrite).DgnFile; StatusInt openForWriteStatus; pDgn.LoadDgnFile(out openForWriteStatus); if (!pDgn.IsOpen) return null; bool IsFindModel = false; foreach (ModelIndex mi in pDgn.GetModelIndexCollection()) { if(modelName == mi.Name) IsFindModel = true; } if (!IsFindModel) return null; var dgnModelId = pDgn.FindModelIdByName(modelName); DgnModel dgnModel = pDgn.FindLoadedModelById(dgnModelId); if (dgnModel == null) { StatusInt errorDetails; dgnModel = pDgn.LoadRootModelById(out errorDetails, dgnModelId, true, true, false); } var attatches = new List<DgnAttachment>(dgnModel.GetDgnAttachments()); if (attatches == null || attatches.Count == 0 || referenceIndex < 0 || referenceIndex > attatches.Count - 1) { referenceFile = null; } else { DgnFile abc = attatches[referenceIndex].GetDgnFile(); if (abc == null) return null; referenceFile = attatches[referenceIndex].GetDgnFile().GetDocument().FileName; } StatusInt stat = pDgn.ProcessChanges(DgnSaveReason.FileClose); pDgn.Release(); return referenceFile; }
在使用上面函数获取一个外部文件的参考文件路径名时调用LoadRootModelById需要130ms左右,在调用100次时需要十几秒,请问有没有更加快速的获取dgnmodel的方法?
MSCE下的C++编程,直接有函数DgnModelRef::GetReachableModelRefs给你返回一个ReachableModelRefCollection,就是所有参考模型的一个集合。
Answer Verified By: zhimin xie