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

用API能否修改Revit链接模型相关推荐

  1. Revit链接模型时的定位解释

    导入选项分为两大类: "自动"定位选项会根据一组规则在主体模型中放置传入的几何图形. 如果知道主体模型中的坐标位置以及导入或链接的文件中的坐标位置,请使用自动定位以精确放置传入的几 ...

  2. 如何编辑revit链接模型 ?教你简单的做法!

    链接模型是Revit实现工作协作的方式之一.在项目浏览器的Revit链接分支中列出链接模型.在过滤器中,链接文件也是单独统计的.因为链接模型中的图元可以作为尺寸标记和对齐的参考.链接文件可用于用作空间 ...

  3. 【Revit二次开发】链接模型坐标系/族坐标系与模型坐标系转换

    前因:因做管线分布时,参照线选择Revit链接文件中的构件(墙,梁,柱,管等)后,调整的管距离参照线的距离不对,经测试是坐标系不同导致.查了很多资料,故总结如下 Revit中坐标系有哪几种(原文链接: ...

  4. Revit二次开发:获取链接模型中的构件及几何元素

    1.背景 最近工作上做机电专业方面的功能比较多,机电专业的BIM模型有一个特点,就是在生产模型的过程中需要链接许多其他专业的模型作为前置条件,因此机电专业的开发需求中很多时候都需要与链接模型打交道.链 ...

  5. Revit MEP中如何利用API实现把弯头链接到风管上

    如何利用API实现把弯头链接到风管上 当创建弯头族实例时,试了两个方法来创建, 1. 使用方法 NewFamilyInstance( XYZ location, FamilySymbol symbol ...

  6. Revit二开 批量链接模型

    往往有时候提交项目需要整合各专业的模型,需要链接模型,模型太多不想一个个点,可以批量插入链接模型或重新载入模型,下面直接上代码: MagicTools批量链接功能: 载入模型用到 OpenFileDi ...

  7. Revit API 开发(14): RevitLink - 链接文件 rvt,IFC,DWG等

    前言 本文对 Revit 链接做一个简单的笔记,以便日后可以查询. 下图中,RVT 和 IFC 都会出现在 Revit 链接的列表里面,他们是 RevitLinkType.而 DWG 及其它文件则不会 ...

  8. 解决链接模型的可见性问题

    链接模型可见性有三种设置选项:按主体视图.按链接视图.自定义,链接模型显示设置默认按照主体视图,在这种模式下,链接的模型中的一些图元将不能显示,比如,某些视图专有图元:文字注释.标注,图元标记等,这是 ...

  9. Revit里模型动态更新DMU的用法

    许多时候,开发者希望Revit有这样的功能.当用户对模型进行修改后,二次开发的程序能够相应用户的修改,对模型作出一些相应的修改操作.例如,一些墙上的窗户要求永远居中显示.当用户对这个墙做了长度修改,这 ...

最新文章

  1. 从 Spring Cloud 看一个微服务框架的「五脏六腑]
  2. 2020.11.me
  3. homebrew install php53
  4. python输入input数组_Python学习——实现简单的交互raw_input的使用
  5. 优秀案例UI素材模板|深层解析iPhone手机APP页面怎么设计?
  6. c#自定义可拖动变形控件
  7. websocket没准备好如何解决_惠普打印机打印没反应如何解决 惠普打印机打印没反应解决方法【详解】...
  8. FZU 2128 最长子串
  9. 如何减小Exe, DLL 的大小
  10. win2008 用什么php,Win2008 Server配置PHP环境,win2008php
  11. Python坐标系转换
  12. nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
  13. 波士顿大学计算机科学与技术专业,BU波士顿大学计算机信息系统硕士Master of Science in Computer Information Systems...
  14. 快乐数-判断一个数字是否是快乐数
  15. 启动SparkSql,报javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
  16. 秘钥认证登录CentOS 7
  17. U盘制做多系统启动盘
  18. SysInfoTools MS SQL Transaction Log Recovery 22.0
  19. 【ict云赛道备考】华为云介绍
  20. 1035神奇的数字9

热门文章

  1. java cup_JavaCUP
  2. 宝塔面板安装部署LightPicture轻量级图片管理系统
  3. 青奥项目的渡江战役哦 哈哈哈
  4. kubernetes搭建 二、Etcd集群
  5. 文章学习(二)综述类:数据驱动的类比设计:最先进的技术和未来的方向
  6. 退化分布的特征函数及期望与方差 - 随机过程
  7. 电脑一键重装系统内存完整性无法打开怎么办
  8. 视频恢复软件哪个好用?推荐这几款恢复率高的软件
  9. JAVA实现100以内偶数和,奇数和,奇偶和
  10. 思科devnet_CCNA、CCNP、CCIE及Devnet认证