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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 356|回复: 2
打印 上一主题 下一主题

revit二次开发有偿求助

[复制链接]

2

主题

23

帖子

126

积分

BIM助工

Rank: 2Rank: 2

积分
126

社区QQ达人

跳转到指定楼层
楼主
发表于 2017-3-29 16:43:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
思路:我想通过调用Revit的API。在主文档中的平面视图下选择一面链接文件中的墙,捕获到墙边界的面的Refernce。然后完成尺寸的标注。

                               
登录/注册后可看大图


问题:通过API获取到链接文档,然后获取到墙在链接文档中的Refernce后,无法引用这些Refernce在当前文档中实现标注。提示错误如下:

                               
登录/注册后可看大图




代码如下:
  •         [Transaction(TransactionMode.Manual)]
  •         [Regeneration(RegenerationOption.Manual)]
  •         public class 链接文件墙洞口标注 : IExternalCommand
  •         {
  •             public class WallSelectionFilter : ISelectionFilter
  •             {
  •                 public RevitLinkInstance instance = null;
  •                 public bool AllowElement(Element elem)
  •                 {
  •                     instance = elem as RevitLinkInstance;
  •                     if (instance != null)
  •                     {
  •                         return true;
  •                     }
  •                     return false;
  •                 }
  •                 public bool AllowReference(Reference reference, XYZ position)
  •                 {
  •                     if (instance == null)
  •                     {
  •                         return false;
  •                     }
  •                     else
  •                     {
  •                         Document linkdocument = instance.GetLinkDocument();
  •                         Element ent = linkdocument.GetElement(reference.LinkedElementId);
  •                         return ent is Wall;
  •                         return false;
  •                     }
  •                 }
  •             }
  •             private void AddCurvesAndSolids(GeometryElement geomElem, CurveArray curves, List<Solid> solids)
  •             {
  •                 foreach (GeometryObject geomObject in geomElem)
  •                 {
  •                     Solid solid = geomObject as Solid;
  •                     if (null != solid)
  •                     {
  •                         solids.Add(solid);
  •                         continue;
  •                     }
  •                     //如果GeometryObject 是几何实例,则进行二次遍历
  •                     GeometryInstance geomInst = geomObject as GeometryInstance;
  •                     if (null != geomInst)
  •                     {
  •                         AddCurvesAndSolids(geomInst.GetSymbolGeometry(geomInst.Transform), curves, solids);
  •                     }
  •                 }
  •             }
  •             public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  •             {
  •                 #region 建立revit连接
  •                 UIDocument uiDoc = commandData.Application.ActiveUIDocument;
  •                 Document doc = uiDoc.Document;
  •                 Autodesk.Revit.ApplicationServices.Application app = doc.Application;
  •                 #endregion
  •                 Selection sel = uiDoc.Selection;
  •                 sel.PickElementsByRectangle();
  •                 Reference ref1 = uiDoc.Selection.PickObject(ObjectType.LinkedElement, new WallSelectionFilter(), "Please pick a point on Wall face.");
  •                 RevitLinkInstance linkInstance = doc.GetElement(ref1) as RevitLinkInstance;
  •                 Document lincdoc = linkInstance.GetLinkDocument();
  •                 Element ent = lincdoc.GetElement(ref1.LinkedElementId);
  •                 Wall wallent = null;
  •                 wallent = ent as Wall;
  •                 Transaction trans = new Transaction(doc);
  •                 trans.Start("sta");
  •                 LocationCurve lc = wallent.Location as LocationCurve;
  •                 Curve curve = lc.Curve;
  •                 Line line1 = curve as Line;
  •                 XYZ PTXL = line1.GetEndPoint(0) - line1.GetEndPoint(1);//获取墙的方向向量
  •                 #region 获取lines
  •                 ReferenceArray referenceArray = new ReferenceArray();
  •                 Options opt = doc.Application.Create.NewGeometryOptions();
  •                 opt.ComputeReferences = true;
  •                 opt.View = doc.ActiveView;
  •                 GeometryElement geo = wallent.get_Geometry(opt);
  •                 CurveArray curvearrau = new CurveArray();
  •                 List<Solid> Solids = new List<Solid>();
  •                 AddCurvesAndSolids(geo, curvearrau, Solids);
  •                 jisuanlei JISUAN = new jisuanlei();
  •                 for (int i = 0; i < Solids.Count; i++)
  •                 {
  •                     Solid solid = Solids;
  •                     FaceArray faces = solid.Faces;
  •                     foreach (Face fa in faces)
  •                     {
  •                         PlanarFace pf = fa as PlanarFace;
  •                         if (Math.Abs(pf.Normal.AngleTo(PTXL)) < 0.1)
  •                         {
  •                             referenceArray.Append(fa.Reference);
  •                         }
  •                         if (Math.Abs(pf.Normal.AngleTo(PTXL) - Math.PI) < 0.1)
  •                         {
  •                             referenceArray.Append(fa.Reference);
  •                         }
  •                     }
  •                 }
  •                 XYZ pt1 = (line1.GetEndPoint(0).X < line1.GetEndPoint(1).X ? line1.GetEndPoint(0) : line1.GetEndPoint(1));
  •                 XYZ pt2 = (line1.GetEndPoint(0).X > line1.GetEndPoint(1).X ? line1.GetEndPoint(0) : line1.GetEndPoint(1));
  •                 Line newLine2JD = Line.CreateBound(pt1, pt2);
  •                 Dimension newDimensionJD = doc.Create.NewDimension(doc.ActiveView, newLine2JD, referenceArray);
  •                 #endregion
  •                 trans.Commit();
  •                 return Result.Succeeded;
  •             }
  •         }

[color=rgb(51, 102, 153) !important]复制代码

求大神告诉我,我该怎样去引用墙的Refernce。才能完成这个标注呢?

哪位大神能解答,提供500答谢金!!!

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

0

主题

1

帖子

53

积分

BIM助工

Rank: 2Rank: 2

积分
53
2F
发表于 2017-4-12 21:06:34 | 只看该作者
加q 283581677,详聊
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 03:26

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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