[摘要] 赶项目节点的时候觉得导图纸、分离模型这种工作实在是太难受了,图纸量大的时候即麻烦又容易出错,于是通过二次开发的方法直接将导CAD、PD
赶项目节点的时候觉得导图纸、分离模型这种工作实在是太难受了,图纸量大的时候即麻烦又容易出错,于是通过二次开发的方法直接将导CAD、PDF、分离模型的工作整合成批量导出,并且自动放到对应的路径。写到分离模型的时候发现了一些API里面不太友好的地方,首先是项目不能直接由当前文档分离,需要先把当前文档关掉,通过打开的方式分离;但是API又不支持直接关掉当前文档,而且又没有给出直接切换文档的方法…最后解决的办法是新建一个临时的项目,通过UIApplication将这个新项目打开并设为当前文档,然后再分离模型,结束后再把临时项目删掉…饶了一圈实在难受,也不知道16之后的API有没有改进。
关键代码:
UIApplication uiapp = commandData.Application; Document doc = uiapp.ActiveUIDocument.Document; string filePath = @"C:UsersimfourDesktop新建文件夹 (2)新建文件夹 (2)"+ doc.Title; //判断是否启用工作集 if (doc.IsWorkshared) { //同步 doc.SynchronizeWithCentral(new TransactWithCentralOptions(), new SynchronizeWithCentralOptions()); //创建临时文档,将临时文档设置为活动文档 Document temDoc = uiapp.Application.NewProjectDocument(@"C:ProgramDataAutodeskRVT 2016TemplatesChinaConstruction-DefaultCHSCHS.rte"); string temFilePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +""+"temFile.rvt"; temDoc.SaveAs(temFilePath); temDoc.Close(false); uiapp.OpenAndActivateDocument(temFilePath); temDoc = uiapp.ActiveUIDocument.Document; //关闭本地文件 string docPathName = doc.PathName; ModelPath modelPath = doc.GetWorksharingCentralModelPath(); doc.Close(false); //分离模型 OpenOptions openOptions = new OpenOptions { DetachFromCentralOption = DetachFromCentralOption.DetachAndDiscardWorksets }; Document detachDoc = uiapp.Application.OpenDocumentFile(modelPath, openOptions); detachDoc.SaveAs(filePath); detachDoc.Close(false); //重新打开本地文件 uiapp.OpenAndActivateDocument(docPathName); //清理临时文档 temDoc.Close(false); File.Delete(temFilePath); } else { //保存项目,复制到新路径 doc.Save(); File.Copy(doc.PathName, filePath); }