赶项目节点的时候觉得导图纸、分离模型这种工作实在是太难受了,图纸量大的时候即麻烦又容易出错,于是通过二次开发的方法直接将导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);
 }

 

0

评论0

请先
建筑施工手册1~5册!全套5910页带目录pdf版下载学习
建筑施工手册1~5册!全套5910页带目录pdf版下载学习
8分钟前 有人购买 去瞅瞅看

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录网站