欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Revit二次开发_项目文件分离

程序员文章站 2022-04-02 10:06:32
...

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

 

相关标签: Revit