赶项目节点的时候觉得导图纸、分离模型这种工作实在是太难受了,图纸量大的时候即麻烦又容易出错,于是通过二次开发的方法直接将导CAD、PDF、分离模型的工作整合成批量导出,并且自动放到对应的路径。写到分离模型的时候发现了一些API里面不太友好的地方,首先是项目不能直接由当前文档分离,需要先把当前文档关掉,通过打开的方式分离;但是API又不支持直接关掉当前文档,而且又没有给出直接切换文档的方法…最后解决的办法是新建一个临时的项目,通过UIApplication将这个新项目打开并设为当前文档,然后再分离模型,结束后再把临时项目删掉…饶了一圈实在难受,也不知道16之后的API有没有改进。
关键代码:
UIApplication uiapp = commandData.Application;
Document doc = uiapp.ActiveUIDocument.Document;
string filePath = @"C:\Users\imfour\Desktop\新建文件夹 (2)\新建文件夹 (2)\\" + doc.Title;
//判断是否启用工作集
if (doc.IsWorkshared)
{
//同步
doc.SynchronizeWithCentral(new TransactWithCentralOptions(), new SynchronizeWithCentralOptions());
//创建临时文档,将临时文档设置为活动文档
Document temDoc = uiapp.Application.NewProjectDocument(@"C:\ProgramData\Autodesk\RVT 2016\Templates\China\Construction-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);
}