EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1085|回复: 3
打印 上一主题 下一主题

如何修改Revit中墙,梁,管道等的端点位置。实例代码演示修改管道的倾斜角度

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 11:57:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/8124489
作者:  叶雄进 , Autodesk ADN


接到一个朋友的关于修改管道角度的咨询

Q: 管道的端点偏移都是只读的,有没有更改管道坡度的API?如果有,是什么;如果没有,有什么办法解决一下吗?谢谢。


关于修改Revit中条状对象的空间位置,这个是非常常用。比如修改墙的一个端点的位置,修改梁的倾斜角度,这几个修改条状对象位置的解决方案具有类似性。今天在这里统一谈谈

大家可能很容易看到这些对象的位置都是通过Element.Location 来获取。如果是条状对象,如墙,梁,管道,我们可以把结果值强制转化为LocationCurve对象。从LocationCurve对象,我们可以获取其定位曲线

Curve dingweiXian = LocationCurve.Curve;

从Curve中可以获取其端点坐标XYZ的值。

比如:

XYZ prStart = dingweiXian.get_EndPoint(0);

XYZ ptEnd = dingweiXian.get_EndPoint(1);


这样接获得了墙,梁或管道对象的端点坐标。


但是大家可以发现,EndPoint属性只读的,那也就是意味着我们无法通过EndPoint属性来修改dingweiXian的端点坐标值。这就是本文开头问题的困惑。那我们到底如何修改其端点坐标呢?这个确实有点不好发现解决方案,也是为什么写本文的原因。 如果你仔细阅读RevitAPI.chm文档,你会发现LocationCurve.Curve 属性是可读写的,借此我们可以给管道重新赋值一个新的Curve对象来实现对管道的端点坐标进行修改。只需重新生成一个Curve,然后赋值给墙,梁或管道的LocationCurve 对象即可实现对他们的端点进行修改的目的。


实现过程请看下面的代码来修改管道的一个端点出的高度,实现修改管道倾斜角度。对于墙和梁的修改可以用同样的步骤。


  1. [csharp] view plaincopy
  2. Selection sel = app.ActiveUIDocument.Selection ;  
  3. Reference ref1 = sel.PickObject(ObjectType.Element,"please pick a pipe");  
  4. Element elem = doc.GetElement(ref1);  
  5. Pipe pipe = elem as Pipe;  
  6.   
  7. LocationCurve locCurve = pipe.Location as LocationCurve;  
  8.   
  9. Transaction trans = new Transaction(doc);  
  10. trans.Start("changePipeEnd");  
  11. Line line = locCurve.Curve as Line;  
  12.   
  13. XYZ ptStart =line.get_EndPoint(0);  
  14. XYZ ptEnd = line.get_EndPoint(1);  
  15.   
  16. XYZ newEnd = new XYZ(ptEnd.X,ptEnd.Y, ptEnd.Z + 2); //抬高2  
  17.   
  18. Line newLine = this.Application.Create.NewLineBound(ptStart,newEnd);  
  19.   
  20. locCurve.Curve = newLine;  
  21.   
  22. trans.Commit();  
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 06:28

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表