【问题标题】:How to create wall with Location line coinciding with external area boundary?如何创建位置线与外部区域边界重合的墙?
【发布时间】:2013-05-17 00:49:50
【问题描述】:

我正在区域边界线上创建一堵墙,但找不到使用定位线“完成面:外部”放置它的方法。

我正在从区域边界获取几何数据:

LocationCurve elLocation = (LocationCurve)area_boundary.Location;
XYZ pt1 = elLocation.Curve.get_EndPoint(0);
XYZ pt2 = elLocation.Curve.get_EndPoint(1);

然后根据它创建一条线来建造一堵墙:

Line line = doc.Application.Create.NewLineBound(pt1, pt2);
Wall wall = Wall.Create(doc, line, level.Id, false);

此代码为我提供了一堵墙,其中心放置了位置线和区域边界。 有没有办法创建位置线与外部区域边界重合的墙?

这是来自 Revit 的 screen-shoot

提前谢谢你!

【问题讨论】:

    标签: c# api revit revit-api


    【解决方案1】:

    墙参考键有一个BuiltinParameter。

    Autodesk.Revit.DB.WALL_KEY_REF_PARAM,可用于设置在墙属性中出现在墙上的参考值。

    但是,我的理解是,在创建墙时,以编程方式,墙的线将始终是墙的中心线。 (如果他们知道的更多,欢迎更正此问题)。

    【讨论】:

    • 感谢您的回答!问题是,当我在创建墙后设置此参数时,它会给我以下结果(dropbox.com/s/0u46vs43vvfwgay/revit_wall_location_line.png),其中墙停留在同一位置,只有墙的定位线移动,因此区域边界不在外表面墙,但仍然在墙的中心。
    • 无论 WALL_KEY_REF_PARAM 的值如何,我都可以验证墙位于中心线上。唯一的解决方案是在创建墙之前将定位线沿所需方向平移墙类型宽度的一半,然后根据需要适当设置 WALL_KEY_REF_PARAM。是的,它有点工作,但这就是他们付给你大笔钱的原因!
    • 哈哈哈不幸的是,他们不给我大笔钱 :) 我为食物工作;)
    • 谢谢,看来唯一的解决办法就是这样做
    【解决方案2】:

    我是这样解决的:

    1. 获取墙的外表面:

      IList<Reference> sideFaces = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Exterior);
      Face face = uiDoc.Document.GetElement(sideFaces[0]).GetGeometryObjectFromReference(sideFaces[0]) as Face;
      
    2. 获取那张脸的法线向量并还原它:

      PlanarFace pf = face as PlanarFace;
      XYZ normal_reverted = -1.0 * pf.Normal;
      
    3. 移动墙:

      wall.Location.Move(normal_reverted * (wall.WallType.Width / 2.0));
      

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 2013-05-16
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多