Как изменить траекторию электрических цепей в dynamo?

Главная Форумы Задать вопрос Как изменить траекторию электрических цепей в dynamo?

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Сообщения
  • #8499 Score: 0
    Sche
    Участник
    34 pts

    Добрый день,

    На просторах интернета нашел скрипт поиска кратчайшего пути между двумя устройствами по лоткам. Есть мысль с помощью dynamo сделать так, чтобы траектория эл.цепи автоматом прокладывалась по этому пути.

    Есть такая штука как SetCircuitPath(). Насколько я понимаю, туда надо подать список точек, по которым этот path построится. Но т.к. в пайтоне я совсем не писатель (и даже с трудом читатель), то что с этим дальше делать не совсем представляю. Нужен хотя бы простейший пример кода: берем цепь, задаем произвольный список точек и получаем новый путь.

     

    #8509 Score: 0
    txt
    Модератор
    86 pts

    Не работал с электрикой. rvt файл с примером лотков, проводов и прочего электрического хозяйства приложите и картинку с результатом, который нужен

    #8511 Score: 0
    Sche
    Участник
    34 pts

    Картинки, файл rvt и скрипт по поиску кратчайшего пути:

    https://cloud.mail.ru/public/LaHh/iNrw1ZC7F

     

    #8515 Score: 0
    ИваСерж
    Хранитель
    134 pts

    У меня не получается открыть dyn – пишет, битый файл.
    Может проблема в dyf? Как его правильно установить?
    Я почитал код – серьезная работа с графами, которую я в свое время не осилил.
    Хотелось бы, чтоб заработало и у меня. Было бы интересно даже поблагодарить
    автора за такой суровый труд.

    А вот задать новый путь электрической системе проще простого.
    Надо получить список координат пути в виде XYZ (внимание, это не point!).
    Потом у электрической системы есть метод
    ElectricalSystem.SetCircuitPath(тут список из координат)
    Метод действительно рабочий и вы копали в правильном направлении.

    К сожалению, без питона не обойтись. Прошу помощи запустить это скрипт – обязательно напишу рабочий пример.

    #8516 Score: 0
    Sche
    Участник
    34 pts

    Скрипт брал отсюда https://forum.dynamobim.com/t/shortest-route/16360/14

    У меня он тоже с первого раза ругнулся, но потом запустился.

    Сохранил dyf как dyn. Поможет? Сложил туда же:

    https://cloud.mail.ru/public/LaHh/iNrw1ZC7F

    У меня как раз и проблема, как список points превратить в эти самые XYZ.

    #8518 Score: 0
    Sche
    Участник
    34 pts

    Всё, разобрался. Вроде строит цепи по лоткам. Буду тестить.

     

    #8519 Score: 1
    ИваСерж
    Хранитель
    134 pts

    Спасибо, заработало.
    Столкнулся со следующими проблемами:
    1. Каким образом будете выбирать электрическую систему и лотоки?
    Я выбираю все лотки в проекте. И электрическую систему беру по элементу.
    Вопрос выбора исходных данных существеннен. Хотелось бы, чтобы, нажав кнопку, все пересчитало само. Такого уровня автоматизации достичь возможно. Выбор электрической системы по элементу также не всегда корректен: возможны ситуации, когда у элемента несколько электрических систем – например, приточная установка с тэнами. Вентилятор одним кабелем, а тэны, независимо от вентилятора, другими кабелями

    2. Путь просчитывается не полностью. Путь по лотку считает волшебная “нода”. А вот спуск с лотка кто будет рассчитывать?

    Я пока продолжаю работать. Но, вот черновик:
    https://www.dropbox.com/s/7ffmekdzdpqi1m1/01_ShortestPath_SI.dyn?dl=0

    Текущая задача – решить проблему №2. Это по сути, не проблема, просто задача, требующая времени. Буду решать на досуге.

    #8523 Score: 0
    txt
    Модератор
    86 pts

    по второй задаче,как вариант построения линий от одного элемента до горизонтального лотка
    import clr
    #грузим нужные библиотеки в том числе:
    from Autodesk.Revit.DB import SetComparisonResult, IntersectionResultArray
    CableTray=FilteredElementCollector(doc, doc.ActiveView.Id).OfCategory(BuiltInCategory.OST_CableTray).ToElements();
    #элемент
    el_pt = IN[0].Location
    cur_cable= [ x for x in CableTray if x.Location.Curve.Distance(XYZ(el_pt.X, el_pt.Y,el_pt.Z )/304.8) == min( [i.Location.Curve.Distance(XYZ(el_pt.X, el_pt.Y,el_pt.Z )/304.8) for i in CableTray]) ][0]
    dist=cur_cable.Location.Curve.Distance(XYZ(el_pt.X/304.8, el_pt.Y/304.8, cur_cable.Location.Curve.GetEndPoint(0).Z))
    curve_1 = Line.CreateBound(XYZ(el_pt.X, el_pt.Y, el_pt.Z)/304.8, XYZ(el_pt.X/304.8, el_pt.Y/304.8, cur_cable.Location.Curve.GetEndPoint(0).Z))
    pt_1 = XYZ(el_pt.X/304.8, el_pt.Y/304.8, cur_cable.Location.Curve.GetEndPoint(0).Z)
    plane_pt = Plane.CreateByOriginAndBasis(pt_1, XYZ.BasisX, XYZ.BasisY)
    result = clr.Reference[IntersectionResultArray]()
    ints = Arc.Create(plane_pt, dist , 0, 360).Intersect(cur_cable.Location.Curve, result)
    if ints == ints.Overlap:
    ints_pt= result.Item[0].XYZPoint
    curve_2 = Line.CreateBound(XYZ(pt_1.X, pt_1.Y, pt_1.Z), XYZ(ints_pt.X, ints_pt.Y, ints_pt.Z))
    OUT= el_pt, Point.Create(ints_pt).ToProtoType() , Point.Create(pt_1).ToProtoType(), cur_cable.Location.Curve.ToProtoType() , curve_2.ToProtoType() , curve_1.ToProtoType()

    #8524 Score: 1
    txt
    Модератор
    86 pts

    Красным выделен результат кода выше (остальное – работа нода автора поста)

    #8525 Score: 0
    Sche
    Участник
    34 pts

    По 1-й задаче: для оборудования слаботочки, например, я прописываю в параметре Type Comments тип системы (СКС, СКУД, СОТ и т.п.) и потом при необходимости фильтрую. Но там лотки общие. Вообще проблема может быть решена через разные рабочие наборы (Лотки.СС, Лотки.ЭМ).

    По 2й задаче: мудрю всё в динамо. 1я-точка – Location панели, потом поднимаю до точки с z координатой уровня лотка, далее ищу перпендикуляр с ближайшим лотком и точку их пересечения. Дальше по точкам скрипта. Последние три точки до розетки как с панелью, только в обратном порядке.

    Проблемы:

    1. Затык с перпендикуляром (либо кратчайшим расстоянием от точки до линии) – как-то криво я его строю, и не всегда корректно.
    2. Не всегда у нас кабель от оборудования сразу вверх идёт. Бывает, что по коробу горизонтально и потом уже вверх. Значит, надо тоже учитывать. Т.е. вводить еще и выборку по коробам (у меня это воздуховоды)?

    P.S. Кстати, кабель ведь от лотка до точки опуска ведь не голый идёт – в гофре. Первоначально я хотел эту гофру отрисовывать и уже её использовать для построения полной траектории. Но захотелось всего и сразу – чтобы наоборот можно было эту гофру потом автоматом дорисовать.

    #8526 Score: 1
    Sche
    Участник
    34 pts

    Для разных электрических систем можно вот так сделать (с удобным выбором из выпадающего списка):

    https://www.dropbox.com/s/p4l42ofd2b1kpyc/%D0%92%D1%8B%D0%B1%D0%BE%D1%80%20%D1%8D%D0%BB.%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B.dyn?dl=0

     

    #8634 Score: 0
    Maksim
    Участник

    Здравствуйте. Не получается открыть файлы Динамо из данной ветки “Ошибка чтения поврежденного файла”, в чем может быть причина? Моя версия 1.3.3.4111.

    ИваСерж, у вас было подобное?!

    И кстати, посмотрел на ютубе ваши ролики, спасибо за них.

    Но хотел бы узнать, удалось ли, решить отображение схемы в пространстве “Чертежного вида” или “Легенды”?

     

    #8635 Score: 1
    Sche
    Участник
    34 pts

    Динамо v2.0.1

    на чертежный вид помещаю обычное семейство с помощью динамо по такому алгоритму:

    1. Размещаю аннотационное семейство на Чертежном виде.
    2. Меняю его Family Type на нужное.

    Выглядит это вот так:

     

    #8636 Score: 0
    Maksim
    Участник

    Sche, к чему я спрашивал, мне интересно было бы структурку слаботочки получать, вы это уже решили?

    Подскажите куда копать, допустим на примере ПРВ (ТАМУ-распред_коробка-розетка-(2-ая розетка тоже от коробки))?

    То есть, я с уровня/уровней собираю типы по параметру (допустим “ПРВ”) и по вашему алгоритму они постятся в Чертежном виде?

    #8637 Score: 0
    Sche
    Участник
    34 pts

    По структурке “не всё так однозначно”)).

    Например, для СКС у меня отдельно семейства для чертежного вида. Из модели я беру цепи и соответственно для каждой цепи точки размещения розетки и панели. Так же из модели подхватываю номера оборудования и место размещения. Затем на чертежном виде размещаю аннотативные семейства и вношу в них данные оборудования. Получается вот так:

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Для ответа в этой теме необходимо авторизоваться.