用API能否修改Revit链接模型
2014-08-13 15:40
609 查看
Revit使用协同的方式有工作集模式和链接模型的模式. 在工作集模式,协同和参照很容易. 链接模型可以参照但是修改起来比较麻烦.
一直由一个疑问,可否通过编写程序的方式来修改模型里的链接文档.
不试不知道,通过一个小例子测试可行性. SharpDevelop代码如下;
public void CreateElementInLinkModel() { Selection sel = this.ActiveUIDocument.Selection; Document doc = this.ActiveUIDocument.Document; Reference ref1 = sel.PickObject(ObjectType.Element,"please pick a linked model"); RevitLinkInstance linkedInstance = doc.GetElement(ref1) as RevitLinkInstance; ElementId typeId = linkedInstance.GetTypeId(); RevitLinkType linkType = doc.GetElement(typeId) as RevitLinkType; string docName = linkType.Name; //find its document. Document linkDoc = null; foreach (Document d in doc.Application.Documents) { if (d.Title == docName) { linkDoc = d; break; } } Transaction trans = new Transaction(linkDoc); trans.Start("createALine"); Line l = this.Application.Create.NewLineBound(new XYZ(0,0,0),new XYZ(1000,1000,0)); // FilteredElementCollector collector = new FilteredElementCollector(linkDoc); collector.OfClass(typeof(ViewPlan)); ViewPlan vp = collector.FirstElement() as ViewPlan; linkDoc.Create.NewModelCurve(l,vp.SketchPlane); trans.Commit(); linkDoc.Save(); }
运行后,提示
Autodesk.Revit.Exceptions.ArgumentException: Document is a linked file. Transactions can only be used in primary documents (projects or families.)
Parameter name: document
意思是对于非主要文档,我们无法启动一个事务. 所以无法直接修改一个连接模型对象.
后来又尝试先卸载连接模型. 然后在从后台打开这个链接模型的rvt文件. 修改完该模型后,再次加载该连接文件. 实验成功. 成功绘制了一条线. 并可以加载. 就是稍有点闪烁.
public void EditLinkModelLoadBackGround() { Selection sel = this.ActiveUIDocument.Selection; Document doc = this.ActiveUIDocument.Document; Reference ref1 = sel.PickObject(ObjectType.Element,"please pick a linked model"); RevitLinkInstance linkedInstance = doc.GetElement(ref1) as RevitLinkInstance; ElementId typeId = linkedInstance.GetTypeId(); RevitLinkType linkType = doc.GetElement(typeId) as RevitLinkType; string docName = linkType.Name; //find its document. Document linkDoc = null; foreach (Document d in doc.Application.Documents) { if (d.Title == docName) { linkDoc = d; break; } } string linkDocFullName = linkDoc.PathName; linkType.Unload(new myoverload()); Document backGroundDoc = this.Application.OpenDocumentFile( linkDocFullName); Transaction trans = new Transaction(backGroundDoc); trans.Start("createALine"); Line l = this.Application.Create.NewLineBound(new XYZ(0,0,0),new XYZ(1000,100,0)); // FilteredElementCollector collector = new FilteredElementCollector(backGroundDoc); collector.OfClass(typeof(ViewPlan)); ViewPlan vp = collector.FirstElement() as ViewPlan; backGroundDoc.Create.NewModelCurve(l,vp.SketchPlane); trans.Commit(); backGroundDoc.Save(); backGroundDoc.Close(false); linkType.Load(); }
这篇文章比较有价值, 可能能解决大家在编程中的很多需求.
作者: 叶雄进--橄榄山BIM软件
转载请注明作者和来源
原文地址: http://blog.csdn.net/joexiongjin/article/details/38537729
相关文章推荐
- 【Revit API】获取链接模型中构件
- Revit API修改链接文件房间边界
- RevitAPI: 如何获取RevitLinkInstance链接模型的位置?
- 如何用Revit API 在Revit的模型中获取轮廓族的截面信息
- Revit API修改保温层厚度
- 可否编程对链接模型进行修改或选择链接模型中的对象?
- Revit API 开发 (7): 创建模型线
- RevitAPI: 如何插入链接文件
- Revit开发在链接模型中使用ISelectionFilter
- Revit API创建墙的保温层修改墙厚度
- 捕获参数修改事件从而修改Revit其它模型
- RevitAPI: 修改文件最大备份数和修改水管坡度
- Revit:API获取CAD链接中的文字标注信息
- Revit API根据链接文件开洞
- Revit开发之选择链接模型中的构件
- 如何显示链接的REVIT模型中的注释文字
- 关于Revit API修改元素参数的问题?
- Revit API 之 动态修改Ribbon命令控件快捷键
- RevitAPI: 修改视图View裁剪区域Cropbox的大小
- Java持久性API(JPA)第4讲——删除和修改.doc