Дневник Ревитчика – Telegram
Дневник Ревитчика
552 subscribers
212 photos
9 videos
2 files
49 links
Канал Вадима Муратова про рабочие будни в Ревите. Уведомления о статьях блога и новинках магазина отслеживайте на основном канале @revitblog

Сайт Муратова: muratovbim.pro
Download Telegram
Про нейросети и искусственный интеллект

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

Но вспомните, что было, когда появился БИМ? Это тоже стало хайпом. И что в итоге?

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

Поэтому не переживайте, если чувствуете, что отстаёте от жизни. Не отстаёте.

Если это будет важно и полезно, то в компании появятся специальные ИИ-инженеры, вы не сможете совмещать всё сразу.

Нейросети могут приносить пользу, поэтому если пользуетесь и помогает — класс, если нет — да и похуй, живите, как нравится.
😁20👍163🤔1
Чё там у вас, по сколько файлов открываете обычно?
😱13🗿4😁3🔥1👨‍💻1🤝1
А теперь надо написать скрипт, который будет отключать лишние фланцы с крепежом.

Вот такое веселье.

И да, это говно строится медленно.
🔥9😁1
Нумеруйте ваши соединители! Это может неожиданно пригодиться.

Сделал скрипт для отключения ненужных креплений. Какие крепления не нужны?

1. Не нужны фланцы со стороны воздуховодов на стыках между фитингами. У меня система такая, что на каждом фитинги по два фланца на каждом подключении. Один — самого фитинга, второй — для воздуховода, это нужно для одной цели — считать шинорейки воздуховодов. Воздуховоды можно поделить на участки другим моим скриптом, соответственно, всё будет кусками указанной длины, ещё и шинорейки посчитаются.

Это я решил делать уже после того, как сделал фитинги и расставил их фланцы. В итоге пришлось открывать каждый ёбаный фитинг и расставлять там фланцы воздуховодов. А это автоматом повлекло за собой создание группы параметры для их отключения. Невесело.

При тестах щас выяснил, что эти ёбаные фланцы при изменении геометрии фитинга съезжают, вернее напротив, не едут за геометрией. Видимо, потому что основой для них были вложенные семейства первоначальных фланцев. Я понадеялся на обычное поведение элементов на грани, когда они перемещаются за геометрией без всяких привязок. Но вот тут меня ждало разочарование.

Что это значит для меня? А это значит, что мне придётся заново открывать каждый ёбаный фитинг и менять основу для фланца воздуховода, переносить его с вложенного семейства на геометрию фитинга, а где можно ещё и закреплять замочками.

2. Не нужны крепежи одного из фланцев на стыке двух фитингов. У каждого фитинга есть фланцы и крепеж включён. Но когда я стыкую отвод и переход, то между ними крепёж нужен только на одном фитинге. Второй надо отключать. Аналогично для скотча у круглых воздуховодов, достаточно скотча с одного фитинга.

И вот тут в первой версии скрипта меня ждал сюрприз, который я предвидел, но всё равно сюрприз.

Как обычно идёт анализ элементов? Мы берём элемент и его айдишник. Айдишник кладём в список обработанных элементов, чтобы в будущем не попадать на него заново. Сам элемент класть в список обработанных не нужно, потому что при сравнении через «==» поведение будет нестабильным из-за типа данных (в данном случае это Фэмили Инстанс). А вот айдишник — понятная история, это целое число, целые числа сравниваются со 100 %-ой гарантией верного результата.

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

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

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

Что делать? Надо переходить к реестру не фитинга, а его соединителей. И вот тут ещё сюрприз — у этих ёбаных соединителей нет вменяемых айдишников, как у фитингов. Они все там с айди 0, 1, 2, вот такие. То есть по айди нельзя понять, мы уже обработали соединитель или нет. Гуидов в проекте через Лукап не видно тоже, то есть нет уникального значения, по которому я пойму, что этот соединитель уже обрабатывал.

Взгрустнул я. Пошёл на встречу к жене и дочери, они гуляли. Зашли в кафешку перекусить, потому что мне нужен кофейный стаканчик, куда складывать мусор. Ну вот такой я человек, да.

Сидим, едим, и тут мне пришла простая и классная идея: у соединителей нет уникальных айдишников, между фитингами айди повторяются, но ведь я могу са
👍7🌚1💯1🙉1
Телеграм не отправил вторую часть поста, хотя обычно длинные посты делит сам и отправляет два поста.

В общем, напишу ещё раз.

Сидим, едим, и тут мне пришла простая и классная идея: у соединителей нет уникальных айдишников, между фитингами айди повторяются, но ведь я могу сам создать уникальные значения для каждого соединителя.

При этом мне нужно генерировать такие значения, которые будут стабильно повторяться. Если цикл зайдёт во второй раз в фитинг, то один и тот же соединитель должен получать тот же уникальный код каждый раз. Иначе смысл всего теряется.

И я придумал в кафешке простую схему: беру айдишник фитинга и прибавляю к нему через нижнее подчёркивание описание соединителя. Я заполнял описания вручную при создании семейств, чтобы потом генерировать имена параметров и с правильной стороны отключать крепёж. Но в целом можно и без описания, можно брать айди соединителя, в рамках одного фитинга они всё равно уникальные.

И всё, айди фитинга однозначно определяет, к какому фитингу относится соединитель, а описание — что за соединитель в фитинге обрабатывается. В итоге я заношу этот код в список обработанных, и при повторном входе в фитинги ранее обработанные соединители не обрабатываются.

Благодаря этому отключаются только крепежи со стороны одного соединителя одного фитинга, у второго крепёж остаётся. Этим алгоритмом я обрабатываю по сути даже не сами фитинги, а конкретные соединители и учёт веду соединителей, а не фитингов, так как информация о том, что фитинг ранее обрабатывался недостаточна.

Вот такая маленькая победа.
1🔥13👍1🤝1
Промокод на бронь отеля

Скидка 600 ₽ на бронирование отеля на Яндекс Путешествиях https://travel.yandex.ru/hotels по промокоду:
FORMYFRIEND-EQID7

Не то чтобы мне прям капец нужны ваши 600 рублей, лучше семейств на них купите, но если кому-то пригодится даже такая скидочка, то хорошо ведь.
7
А вы как развлекаетесь вечерами?
🔥13🤝4😁2👍1
Открыл тут видео с прохождением Дьяблы 4. Ну просто так, обычно не смотрю такое.

И вижу, как там чуваку донатят и по 5к, и донаты 100к+ есть.

Я как бы слегка вахуе.

Не в том плане, что вот мне никто столько не донатит, нет. Я как раз понимаю, почему не донатят, потому что это нормально.

Но тут это какая-то дичь. Чувак просто гамает и за это ему кидают донаты. Чего, блядь?

Он не делает ничего, что помогает зрителям, что их как-то развивает, это просто развлечение.

Неужели это настолько кайфовое развлечение, что люди готовы кидать столько денег за то, чтобы СМОТРЕТЬ, как играет другой человек.

Ну это же дичь какая-то.
😁14💯11🐳4🤝1
Решил добавить ещё один набор фитингов для вентиляции с промежуточным ЛОДом. Сейчас есть два ЛОДа для прямоугольных фитингов:
1. Фитинг + фланец фитинга без крепежа,
2. Фитинг + фланец фитинга с крепежом + фланец воздуховода

Буду добавлять третий вариант, где есть фитинг, фланец фитинга с пустышками для крепежа и фланец воздуховода. Чтобы Ревит при трассировке не отрисовывал болты, гайки, стяжки.

Проблема, на самом деле, как я понял, не столько в количестве геометрии, Ревит тормозит не из-за геометрии. Подлагивания возникают в тот момент, когда Ревит активирует типоразмер семейства. Если вы работали с семействами через код, то при размещении семейства его нужно сначала активировать. Типа есть неактивные типоразмеры и активные. Почему так — хрен его знает.

И вот по моим ощущениям все лаги происходят именно при активации семейства. Например, когда я делал капец сложные диффузоры, в которых много массивов приходилось использовать, то при первом размещении семейства оно прям подлагивало, но на следующие разы всё происходило быстрее. Отсюда у меня была идея, что можно перед началом работы в проекте раскладывать все семейства в модели, а уже потом удалять их и начинать моделить.

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

В общем, в связи с этим мне нужно в почти трёх десятках семейств заменить фланец. Сделать это несложно технически, мне просто надо отредактировать геометрию и загрузить с заменой во все семейства. Но при этом я бы не хотел, чтобы у меня путались разные вложенные, я хочу дать им разные имена. Для этого надо несколько десятков раз заходить в семейства и менять имена. Это невесело.

А писать скрипты, чтобы они обрабатывали несколько семейств открытых, я не умею. Но, как оказалось, это умеет делать китайская ИИ от Алибабы, Квен. Я тупо на удачу написал запрос, она пошуршала серверами и выдала мне код. Я закинул его в Ревит Пайтон Шелл (чтобы не переписывать куски под Динамо), и чудо, оно работает. Делюсь с вами, мало ли вам тоже пригодится. Пидорские эмодзи не моя работа, это ИИ решила скрасить наши будни.
😁1
# -*- coding: utf-8 -*-
from Autodesk.Revit.DB import *
from Autodesk.Revit.Exceptions import InvalidOperationException
from System.Diagnostics import Stopwatch

import clr
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager

# === НАСТРОЙКИ ===
# Словарь переименований: {старое_имя: новое_имя}
RENAME_MAP = {
"Стена_1": "Несущая стена",
"Окно_Стандарт": "Окно тип A",
# Добавьте сюда свои пары
}

# === ФУНКЦИЯ ПЕРЕИМЕНОВАНИЯ ===
def rename_nested_families_in_family_doc(fam_doc):
"""Переименовывает вложенные семейства в одном семействе."""
try:
collector = FilteredElementCollector(fam_doc)
nested_fams = collector.OfClass(Family).ToElements()

renamed_count = 0
for fam in nested_fams:
old_name = fam.Name
if old_name in RENAME_MAP:
new_name = RENAME_MAP[old_name]
try:
fam.Name = new_name
renamed_count += 1
print(" В семействе '{}': '{}' → '{}'".format(
fam_doc.Title, old_name, new_name))
except Exception as e:
print(" Ошибка при переименовании '{}' в '{}': {}".format(
old_name, fam_doc.Title, str(e)))

return renamed_count
except Exception as ex:
print("⚠️ Ошибка в документе '{}': {}".format(fam_doc.Title, str(ex)))
return 0

# === ОСНОВНОЙ СКРИПТ ===
uiapp = __revit__ # доступен в pyRevit и некоторых средах
app = uiapp.Application

# Получаем все открытые документы (включая семейства)
open_docs = [doc for doc in app.Documents if doc.IsFamilyDocument and not doc.IsLinked]

if not open_docs:
print(" Нет открытых семейств для обработки.")
else:
print("🔄 Найдено {} открытых семейств(а).".format(len(open_docs)))
total_renamed = 0

for doc in open_docs:
try:
# Открываем транзакцию для каждого документа
with Transaction(doc, "Переименование вложенных семейств") as t:
t.Start()
count = rename_nested_families_in_family_doc(doc)
total_renamed += count
t.Commit()
except InvalidOperationException as ex:
print("🚫 Невозможно начать транзакцию в '{}': {}".format(doc.Title, str(ex)))
except Exception as ex:
print("💥 Неожиданная ошибка в '{}': {}".format(doc.Title, str(ex)))

print("\n Завершено. Всего переименовано вложенных семейств: {}".format(total_renamed))


Установите Ревит Пайтон Шелл, в него вставляйте код и запускайте. Можно сохранить в формате .py и потом просто открывать в РПШ.
Для хейтеров.
🔥12😍3🗿2
Есть у Ренги один неоспоримый плюс.

Они выбрали охуительный оттенок серого цвета для интерфейса программы.

Жаль, не все решения по интерфейсу настолько же удачные.

Выбрал цвет для МодПлюса в Ревите в стиле Ренги 🤷‍♂️
👌3😁2🤷‍♂1
Впервые ещё до релиза библиотеки в Телеграме собираюсь выпускать уже второе обновление библиотеки по горячим следам 🤪
1🔥1
Ищу пару человек, которые шарят в работе с МГЭ.

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

Я хочу сделать общедоступный бесплатный ФОП по требованиям МГЭ.

Соответственно, для этого нужны люди, которые работали с этими параметрами и понимают, как это можно сделать хорошо.

А потом выпустим в общий доступ бесплатно.

Если там ещё какие пресеты для экспорта в IFC можно сделать или типа того, то тоже можно покумекать.

Я с этим всем не работал, поэтому ищу специалистов. Буду координировать работу и говорить, что вот так красиво, так делаем, а вот так фу, не будем делать.

А вы будете в поте лица трудиться, делать общество лучше.

Если расклад устраивает, пишите мне.

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

Вот нам надо будет сделать тоже хорошо, как эта кофта сидит на мне.
🔥17😁72
Интересный косяк в Ревите

У меня в семействе есть формула, если «Проекция длины врезки» равно 6,096 мм, то есть длине по умолчанию, на которую врезка входит в прямую грань, то делать диаметр магистрали равным 1 мм.

Но вот ситуация, значение в параметре равно 6,096, но как будто не совсем. Отсюда имеем формально воротниковую врезку, но на какой-то дикий диаметр.

Решил проблему добавлением округления.

А ещё интересно, что тип данных у этого параметра не Длина, а Длина листа. Причём этого типа данных нет во встроенных, которые видны пользователю. То есть я даже единиц накинуть не могу.

Дополнение! Такая ситуация возникает, когда между врезкой и магистралью есть отклонение от ровного угла 90°.
🤔2👍1
Эти суки должны гореть в аду.
💯23😁18😱4💔3🙊2
пишу статью по итогам эфиров о Ренге

это не войдёт в финальную версию, но вам покажу
😁21🔥5
То есть какая-то херня в списке есть, а Бим-моделей нет. Ясно, понятно.

Ну а я разве не трансцендентный специалист?
😁10
Прикольная залипуха: китаец меняет жесткий диск в Айфоне последней модели.

Было неожиданно, что старый диск каким-то фрезером буквально выпиливают из платы.

Вывод: ремонт явно нельзя доверять всяким сомнительным точкам без специализированного оборудования.

Видео на Ютубе, не Станисла, просто видео и титры на английском: https://youtu.be/BOyKqIugNVE
1