ИваСерж

Ответы в темах

Просмотр 15 сообщений - с 1 по 15 (из 98 всего)
  • Автор
    Сообщения
  • #4843 Score: 4
    ИваСерж
    Хранитель
    134 pts

    Вот прямо сегодня столкнулся с такой проблемой. Подробней рассказал Лобанов в своих уроках

    https://youtu.be/XIGpuP23k9k?list=PLVCDzVIlOckHsZcqkq3DmzdGcq2503l1G&t=1175

    Решение: создавать элементы не средствами Динамо, с через питон.
    Я использовал команду doc.Create.NewFamilyinstance. Тогда семейства создаются без привязки к Динамо. Если нужно, могу подсказать как работать с NewFamilyinstance.

    p.s.

    import Revit
    clr.ImportExtensions(Revit.Elements)

    Element.ToDSType(False) – если мы создали элемент в Dynamo (и его не было в Revit) – Dynamo будет отслеживать. Т.е. при очередном запуске старый элемент будет удаляться и создаваться новый!

    Element.ToDSType(True) – Dynamo не будет отслеживать и при каждом запуске будут создаваться новые элементы, старые удаляться не будут.

     

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

    http://dynamobim.ru/cmdownloads/%d1%8d%d0%bb%d0%b5%d0%ba%d1%82%d1%80%d0%be%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d0%b9-%d1%80%d0%b0%d1%81%d1%87%d1%91%d1%82/

    Закончил обещаный скрипт по расчёту электрики. Тест-проект прикладываю. Записывать видео лень. Кому надо – спрашивайте. Скрипт написан под мой собственный БИМ стандарт. Прошел тесты на небольших проектах, но глобально не проверялся.

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

    Пример с динамо скриптом

    http://dynamobim.ru/cmdownloads/%D1%80%D0%B0%D1%81%D1%87%D1%91%D1%82-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%B8%D1%87%D0%B5%D0%BA%D0%B8%D1%85-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-%D1%81%D0%BE%D0%B7%D0%B4/

    Видео как работает. Правда, до конца так и не записал из-за отсутсвтия интереса.
    https://www.youtube.com/watch?v=-OgdSa-tMO0&list=PLXoMzi7DFVEZ9LfSdxDtba6bFMjA2d7vq

    На данный момент переработана  рассчётная часть скрипта. Добавлены контакторы и т.п.
    Не доделанными остаются 2Д  – пока размещаю схемы в модели, а не в чертежном виде. Но, как дойдут руки, доделаю.

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

    Суть вопроса как понимаю я:
    Для программирования в Ревит мы используем АПИ. Динамо это “обертка” (красивая оболочка) над этим АПИ. Питон, встроенный в Динамо – это очередная “обёртка”, но уже для Динамо. Получаем, как лук, завернутые друг в друга программные элементы. По сути, Ревит это “обертка” надо операционной системой. Операционная система – “обертка” над драйверами, драйверы – “обертка” для железа.

    Работая в Питоне мы можем пользоваться:
    1. Методами Питона 2.7 (причем урезанными), если встречаем элемент из Динамо, то его надо “развернуть” – Unwrap
    2. Методами самого Динамо (т.е. из кода Питона мы можем обращаться к нодам Динамо.

    В Питоне 2.7 нет метода IndexOf, зато есть нод с таким именем в Динамо. Можете вытащить этот нод и посмотреть как он работает. В коде вы обращаетесь именно к ноду!
    Из-за приведенных особенностей часто возникают проблемы с пространствами имен. Я часто путаю Point из Динамо и Point, которую создал в коде посредством АПИ. Как по мне, то Питон в Динамо не достаточно “инкапсулирован” от самого Динамо. Проблемы с пространствами имен встречаются постоянно. Я бы хотел, чтоб работая в Питоне, мы пользовались только методами Питона, а на методы Динамо ссылались как-то по другому. Хотя, думаю, это тоже большой вопрос для программистов.

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

    Могу только на питоне.
    В ИН0 – подаем список панелей
    В ИН1- подаем список координат.

    На выходе отсортированные панели.

    panelsList = IN[0]
    coordZlist = IN[1]

    ziped = zip(panelsList,coordZlist)
    ziped.sort(key=lambda x: x[1])
    outlist = [i[0] for i in ziped]

    OUT = outlist

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

    У нас не 3 питон, а 2.7
    я бы написал через генератор списков
    a = [1,3,5,7]
    b = [i*2 for i in a]
    OUT = b

    Можно через лямбду и мап
    a = [1,3,5,7]
    func = lambda x: x*2
    b = map(func, a)
    OUT = b

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

    Задача моего скрипта – делить существующие лотки на лотки стандартной длинны 1.5 м.
    Для этого я отфильтровываю все лотки, которые короче 1.5 м
    Затем вычисляю точки для новых лотков.
    Удаляю старые лотки.
    По точкам черчу новые лотки.
    Новые лотки соединяю. При этом автоматически воссоздаются коннекторы.
    Скрипт полностью рабочий.
    https://www.dropbox.com/s/f4vdwdur1b18abs/CableTrayDivide.zip?dl=0

    П.С. код, конечно, не очень удачный… Скрипт 16 года) Читаю код и хочу его теперь полностью переписать)

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

    Параметры удаляются через FamilyManager. Метод RemoveParameter
    http://www.revitapidocs.com/2015/cb266197-b76e-66db-ea15-2cf14bcb4f85.htm

    1. Основная идея такая:
      1.1. Открыть семейство по пути на диске
      1.2. Найти параметр
      1.3. Удалить параметр
      1.4. Сохранить семейство.

    2. Если надо удалить параметры из семейств, которые уже подгружены в проект:
    2.1. Найти семейство в проекте и сохранить его на диск по какому-то временному пути.
    2.2. Сделать действия из п.1
    2.3 Загрузить семейство по указанному пути в проект.
    Пункт 2 однако, требует больших затрат. Поэтому мы решили отказаться от удаления параметров в уже текущих проектах
    Ну и пример (как есть) – работал на Ревите 2015.

    https://www.dropbox.com/s/2jnrm112zc8dkxx/DeleteParamFromRFA.dyn?dl=0

     

     

     

     

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

    У меня все получилось и работает.
    Прошу применять.
    https://pastebin.com/yYgsaaZF

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

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

    https://pastebin.com/fqzcgcpj

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

    Насколько я понимаю, использован не правильный нод. Этот нод считает сколько вложенных семейств в семействе. Очевидно, нисколько.

    Скорее всего Вам нужен нод из того же клокворк Assembly.FromElements

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

    Библиотека насколько я понял, самая обычная – ревит АПИ.
    А вот метод лежит в классе BooleanOperationsUtils
    Сначала обращаемся к классу, а потом через точку уже и к самому методу
    BooleanOperationsUtils.ExecuteBooleanOperationModifyingOriginalSolid – должно отработать.

    можно попробовать сократить эту ерунду и вначале экспортнуть метод сокращенно воспользовавшись
    import … as …

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

    Я всё чаще использую генераторы списка.
    Недавно прочел, что генератор списка работает быстрее, поскольку не вызывает append

    быстрее будет выполнятся следующая запись:
    OUT = [i for i in IN[0] if i.Name == "Щит"]

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

    Мой вариант. Автор я )) Очень простой скрипт, как по мне.
    Как всегда, питоновский.
    https://www.dropbox.com/s/1nfo9ncyje47plg/ElSys.dyn?dl=0

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

    Мы говорим о марках или о самих трубах?
    Труба это не семейство (не Фемели инстанс).
    Очевидно, нет у трубы FamilyInstance.Type

    Зато у трубы есть PypeType
    В динамо есть даже нод GetPypeType

    Возможно, подтолкнет на какие-то идеи по замене трубы.

    А вот и пример скрипта который соединяет 2 любые трубы и вставляет фитинги по умолчанию.
    Проверил. У меня скрипт работает в 2019.

    АвтоСоединение
    Скрипт лежит у меня на дропбоксе пока мне не надоест.
    Если удалю и кому-то нужно будет – пишите в личку.

Просмотр 15 сообщений - с 1 по 15 (из 98 всего)