Как создать стену с линией привязки, совпадающей с внешней границей области?

Я создаю стену над линией границы области, но не могу найти способ, как разместить ее с помощью линии привязки "Finish Face: Exterior".

Я получаю геометрические данные от границы области:

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.

Заранее спасибо!


person cansadadeserfeliz    schedule 07.05.2013    source источник


Ответы (2)


Существует встроенный параметр для ключа ссылки на стену.

Autodesk.Revit.DB.WALL_KEY_REF_PARAM, который можно использовать для установки опорного значения, которое будет отображаться на стене в свойствах стены.

Однако, насколько я понимаю, программно линия стены всегда будет осевой линией при создании стены. (Кто-то может исправить это, если он знает лучше).

person sweetfa    schedule 08.05.2013
comment
Спасибо за ваш ответ! Проблема в том, что когда я устанавливаю этот параметр после создания стены, это дает мне следующий результат (dropbox.com/s/0u46vs43vvfwgay/revit_wall_location_line.png), где стена остается на том же месте, а перемещается только линия привязки стены, поэтому граница области не находится на внешней стороне стены, а остается в центр его. - person cansadadeserfeliz; 08.05.2013
comment
Я могу убедиться, что стена расположена по центральной линии независимо от значения WALL_KEY_REF_PARAM. Единственным решением является перемещение линии привязки в нужном направлении на половину ширины типа стены перед созданием стены, а затем, при желании, установка WALL_KEY_REF_PARAM соответствующим образом. Да, это немного работы, но именно поэтому они платят вам большие деньги! - person GentlemanCoder; 10.05.2013
comment
Хахаха, к сожалению, они не платят мне большие деньги :) Я работаю за еду ;) - person cansadadeserfeliz; 11.05.2013
comment
Спасибо, похоже, единственное решение - сделать это таким образом. - person cansadadeserfeliz; 11.05.2013

Я решил это так:

  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));
    
person cansadadeserfeliz    schedule 16.05.2013