Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Alex25 от 23-02-2020, 12:04:12

Название: Создание арматурного стержня в зоне усиления плиты
Отправлено: Alex25 от 23-02-2020, 12:04:12
Добрый день. Пытаюсь армировать зону усиления в плите перекрытия. Выбираю плиту и семейство "Зона усиления". Я беру, как первую точку LoacationPoint зоны усиления, затем через HandOrientation зоны усиления и
 AngleTo(XYZ.BasisZ) получаю вторую точку на расстоянии ширины зоны (на скриншоте получается нужная длина стержня). Стержень должен построиться на границе зоны усиления. Все чтобы я не делал (менял длину, координаты, угол и тд), стержень создается за пределами плиты и каждый раз в точке BasePoint. При отладки видно, что стержень имеет длину – ширины зоны, а в модели длина другая. Подскажите, в чем ошибка? Мб поможет...не присваивается форма арматурного стержня , если это связано. 



(https://i.postimg.cc/gxscYRFR/code.png) (https://postimg.cc/gxscYRFR)

(https://i.postimg.cc/B8wqF0vn/model.png) (https://postimg.cc/B8wqF0vn)
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Александр Игнатович от 25-02-2020, 10:46:55
По скриншоту гадать сложно, но попробую

Вероятно, проблема в том, что согласно SDK параметр norm ожидается быть

Цитировать
norm
Type: Autodesk.Revit.DB.XYZ
The normal to the plane that the rebar curves lie on.

У тебя направление прямой в stirrup примерно (13, -0.36, 0), нормаль -XYZ.BasisY
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Alex25 от 25-02-2020, 11:06:35
По скриншоту гадать сложно, но попробую

Вероятно, проблема в том, что согласно SDK параметр norm ожидается быть

Цитировать
norm
Type: Autodesk.Revit.DB.XYZ
The normal to the plane that the rebar curves lie on.

У тебя направление прямой в stirrup примерно (13, -0.36, 0), нормаль -XYZ.BasisY
Нужно брать не FacingOrientation зоны усиления для norm?
Через питон это работает(https://i.postimg.cc/y38X6TCW/2020-02-25-11-04-06-Py-S.png) (https://postimg.cc/y38X6TCW)

Я могу sln прикрепить ?




Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Александр Игнатович от 25-02-2020, 11:31:10
Через питон это работает


Может, ты где-то в методе получения 2 точки ошибся?

Я могу sln прикрепить ?

Прикрепляй, тогда уж и с файликом примера
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Александр Пекшев aka Modis от 25-02-2020, 17:36:27
Попробуй задать RebarStyle.Normal вместо RebarStyle.StirrupTie
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Alex25 от 25-02-2020, 21:45:01
Сделал через "Standart" не помогло. Скорее всего дело в значение угла при получении второй точки Curve.  У меня ZIP весит 70 МБ. Я уже не знаю что делать с этим rebar...
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Александр Пекшев aka Modis от 25-02-2020, 21:52:00
Я уже не знаю что делать с этим rebar...
Используй мой вспомогательный проект (https://adn-cis.org/forum/index.php?topic=8320.0) - экспортируй плиту и кривые, по которым создаешь арматуру, в AutoCAD и посмотри что должно получится. Для этого тот проект и делался
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Alex25 от 25-02-2020, 22:19:59
Спасибо , попробую )
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Alex25 от 01-03-2020, 22:18:08

(https://i.postimg.cc/s11Nrd6R/result.png) (https://postimg.cc/s11Nrd6R)
Вот такой результат получил. Проблема не может быть- у меня форма стержня через API не задается ?
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Александр Пекшев aka Modis от 01-03-2020, 22:23:28
Вот такой результат получил
Ну дык даже в автокаде вон отрезок не попадает в тело плиты, а находится в начале координат. Значит 100% ошибка в коде
Название: Re: Создание арматурного стержня в зоне усиления плиты
Отправлено: Alex25 от 05-03-2020, 13:21:30
Всем спасибо. Ошибка была в получении значения угла. Теперь сделал так:
Код - C# [Выбрать]
  1. public double Get_Angle (_pt= element.HandOrientation)
  2.         {
  3.             return new XYZ(_pt.X, _pt.Y, 0).AngleTo(XYZ.BasisX);
  4.  
  5.         }
-в метод передаю направление семейства - (-1,0,0)
-обнуляю z
Высчитываю угол между (-1,0,0) и (1,0,0)
Получаю 180 градусов.