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

Сайт Муратова: muratovbim.pro
Download Telegram
Промокод на бронь отеля

Скидка 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
Самое сложное в такой простой казалось бы геометрии — диагональные части.

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

В общем, не люблю такое. Относительно всей разработки этих рам больше всего времени потратил именно на эти диагональные рёбра жёсткости.

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

А вот вырезы по углам — это не одно тело выдавливания, которое параметризировал, тут выдавливание просто квадратом. И уже после срезал углы полым сдвигом. Мне это показалось быстрее, чем параметризировать дополнительные диагонали в выдавливании, ведь в сдвиге достаточно просто кинуть параметр на катеты треугольника.
👍42
Так в дикой природе, ещё до вмешательства человека, выглядела формула для подбора количества секций трубчатого радиатора с нижним подключением с краю, по краям и по центру, по центру можно только чётное количество секций.
if(roundup(ADSK_Теплопотери / (size_lookup(LT_Секция, "Q", 1 Вт, Секция_Ширина, Секция_Глубина, Секция_Высота, Количество труб) * (Температурный напор / 70 дельта °C) ^ 1.3)) < Секция_Минимум, Секция_Минимум, 
if(roundup(ADSK_Теплопотери / (size_lookup(LT_Секция, "Q", 1 Вт, Секция_Ширина, Секция_Глубина, Секция_Высота, Количество труб) * (Температурный напор / 70 дельта °C) ^ 1.3)) > Максимум секций, Максимум секций,
if(and(Центральное подключение, roundup(roundup(ADSK_Теплопотери / (size_lookup(LT_Секция, "Q", 1 Вт, Секция_Ширина, Секция_Глубина, Секция_Высота, Количество труб) * (Температурный напор / 70 дельта °C) ^ 1.3)) / 2) - roundup(ADSK_Теплопотери / (size_lookup(LT_Секция, "Q", 1 Вт, Секция_Ширина, Секция_Глубина, Секция_Высота, Количество труб) * (Температурный напор / 70 дельта °C) ^ 1.3)) / 2 > 0), roundup(ADSK_Теплопотери / (size_lookup(LT_Секция, "Q", 1 Вт, Секция_Ширина, Секция_Глубина, Секция_Высота, Количество труб) * (Температурный напор / 70 дельта °C) ^ 1.3)) + 1,
roundup(ADSK_Теплопотери / (size_lookup(LT_Секция, "Q", 1 Вт, Секция_Ширина, Секция_Глубина, Секция_Высота, Количество труб) * (Температурный напор / 70 дельта °C) ^ 1.3)))))
😱9🔥4
Ну что, делимся итогами 2025 года.

Мой плейлист: https://music.yandex.ru/users/yamusic-my2025/playlists/6738981?ref_id=BC52D22A-5245-474D-B6C8-629055853365
🔥4