Введение
Речь в данном посте пойдет об одной мощной функции в пайревит - print_md.
(если вы попали на данную статью случайно и совершенно не понимаете кто такой пайревит - велком сюда)
print_md – это функция, которая позволяет выводить текст в формате Markdown непосредственно в консоль pyRevit. Markdown – это лёгкий язык разметки, который позволяет задавать заголовки, списки, выделения и даже вставлять HTML-элементы. Благодаря этому вывод становится не просто текстом, а красиво оформленным и удобным для восприятия.
Кстати, скорее всего, на дзене используется какой-то аналог маркдауна, но только кривой... маркдаун курильщика.
Зачем это нужно?
Представь, что ты написал скрипт, который анализирует модель Revit, считает количество элементов, выводит предупреждения и даже показывает таблицы. Вместо того, чтобы просто печатать текст через стандартный print(), ты можешь с помощью print_md сделать вывод более структурированным и наглядным. Это особенно полезно при обучении, демонстрации результатов и создании отчетов.
Как это модет выглядеть?
1. Заголовки
2. Отступы и списки
3. Сочетание оформлений
4. Разделитель
5. Эмодзи
Принцип работы print_md
print_md принимает строку с текстом, содержащим Markdown-разметку, и отображает её в окне вывода pyRevit. Благодаря этому можно использовать:
- Заголовки: # Заголовок 1, ## Заголовок 2 и т.д.
- Списки: - пункт или * пункт для маркированных списков.
- Выделение текста: жирный, курсив и т.д.
- Вставку HTML: <p style="color: red;">Красный текст</p> для дополнительного форматирования.
Вот собстенно и все, теперь берем читаем про маркдаун разметку, закидываемся знаниями о HTML и в путь. Разберетесь.
Ну ладно, немного примеров.
Примеры
1. Заголовки
Markdown позволяет создавать заголовки разных уровней, что помогает разделить текст на логические блоки.
Пример:
from pyrevit import script
output = script.get_output()
output.print_md("# Заголовок 1")
output.print_md("## Заголовок 2")
output.print_md("### Заголовок 3")
Что получится:
- «Заголовок 1» будет самым крупным.
- «Заголовок 2» — чуть поменьше.
- «Заголовок 3» — используется для подзаголовков.
2. Жирный и курсивный текст
Вы можете выделять важные слова и фразы, делая их жирными или курсивными.
Примеры:
output.print_md("**Это жирный текст**")
output.print_md("*Это курсивный текст*")
output.print_md("***Это жирный и курсивный текст***")
Совет: Используйте жирный текст для выделения ключевых моментов, а курсив — для уточнения или примечаний.
3. Разделитель
output.print_md("___")
Поможет вам добавить горизонтальную линию что визуально отделит выводимую информацию
4. Ссылки
Вы можете добавлять гиперссылки в вывод, что удобно для предоставления дополнительной информации.
Пример:
output.print_md("Для подробностей смотрите [Revit API Docs](https://www.revitapidocs.com).")
5. Списки
Markdown поддерживает как маркированные, так и нумерованные списки.
Маркированные списки:
output.print_md("- Пункт 1\n- Пункт 2\n- Пункт 3")
Нумерованные списки:
output.print_md("1. Первый пункт\n2. Второй пункт\n3. Третий пункт")
Подсказка: Разделяйте пункты переносами строки, чтобы список выглядел аккуратно.
Отступы для цитат
Цитаты (Blockquotes):
Используйте символ > для создания цитат. Если нужно сделать вложенную цитату, добавьте дополнительные символы >.
Пример:
output.print_md("> Это основной блок цитаты.\n>> Это вложенная цитата.")
Чем больше > тем глубже отступ
6. Расширенные возможности HTML в Markdown
Markdown сам по себе предоставляет базовые возможности форматирования, но иногда возникает необходимость в более тонком управлении стилем. Для этого можно использовать HTML-теги прямо внутри Markdown.
6.1 Базовые примеры использования HTML
Изменение цвета текста:
Вы можете использовать тег <span> с CSS-стилями, чтобы изменить цвет или шрифт.
Пример:
output.print_md("<p style='color: red;'>Это текст красного цвета</p>")
Центрирование текста:
Хотя Markdown не поддерживает выравнивание напрямую, HTML может решить эту задачу.
Пример:
output.print_md("<div style='text-align: center;'>Этот текст по центру</div>")
Создание таблиц:
Если стандартный синтаксис Markdown для таблиц вам не подходит, можно создать таблицу с помощью HTML-тегов.
Пример:
html_table = """
<table border='1' style='border-collapse: collapse;'>
<tr>
<th>Параметр</th>
<th>Описание</th>
</tr>
<tr>
<td><code>print_md</code></td>
<td>Вывод форматированного текста в pyRevit</td>
</tr>
<tr>
<td><code>get_output()</code></td>
<td>Получение объекта для вывода</td>
</tr>
</table>
"""
output.print_md(html_table)
Кстати!!!
О стандартном интрументарии печати данных в табличном предсталение с помощью print_table() ТУТ
6.2 Продвинутые возможности HTML
Стилизация через CSS:
Вы можете задавать не только цвет, но и шрифты, размеры, отступы и многое другое, используя встроенные CSS-стили.
Пример:
html_styled = """
<p style='font-family: Arial; font-size: 16px; color: blue; text-align: justify;'>
Этот текст оформлен с использованием встроенного CSS. Вы можете изменять шрифт, размер, цвет и даже отступы.
</p>
"""
output.print_md(html_styled)
Использование списков и других элементов:
Если вам нужно комбинировать HTML и Markdown, вы можете использовать HTML для создания сложных структур, а Markdown — для более простых блоков.
Пример комбинирования:
combined = """
## Секция с HTML и Markdown
<div style='background-color: #f0f0f0; padding: 10px;'>
<p style='color: green;'>Это абзац, оформленный с помощью HTML внутри Markdown.</p>
<ul>
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>
</div>
"""
output.print_md(combined)
7. Выделение элементов
Функция linkify в pyRevit позволяет превращать идентификаторы элементов в интерактивные ссылки. То есть, если вы передадите ей ElementId элемента, она сгенерирует ссылку, при клике на которую pyRevit выделит или «подсветит» этот элемент в модели. Это очень удобно для быстрого перехода к интересующему объекту прямо из отчёта или логов.
Как это работает:
- При передаче ID: Вызывая linkify с идентификатором (или объектом элемента), pyRevit оборачивает его в специальный HTML‑код.
- Интерактивность: Полученная ссылка отображается в окне вывода как кликабельный элемент.
- Действие при клике: Когда пользователь нажимает на эту ссылку, pyRevit получает ID и автоматически активирует соответствующий элемент в модели (например, выделяет его в интерфейсе) или (при клике по лупе) откроет вид и сфокусируется на элементе
from pyrevit import script
from Autodesk.Revit.DB import FilteredElementCollector, Wall
output = script.get_output()
doc = __revit__.ActiveUIDocument.Document
# Получаем одну стену из модели (или любой другой элемент)
wall = FilteredElementCollector(doc).OfClass(Wall).FirstElement()
# Выводим сообщение с ссылкой, по которой можно перейти к элементу output.print_md("Выделить".format(output.linkify(wall.Id)))
Примечание:
В некоторых версиях pyRevit функция linkify может принимать как объект элемента, так и непосредственно его ElementId. При клике pyRevit автоматически откроет вид, где находится элемент, и выделит его.
Таким образом, функция linkify делает ваш вывод не просто информативным, а интерактивным – пользователю достаточно нажать на ссылку, чтобы мгновенно перейти к интересующему элементу в модели.
Итог
Функция print_md в pyRevit — это не просто средство вывода текста. Она открывает возможности для создания:
- Заголовков, списков и цитат для структурированного и понятного отчёта.
- Кодовых блоков с сохранением отступов, что делает примеры кода легко читаемыми.
- Эмодзи, добавляющих эмоциональный и визуальный акцент.
- HTML-разметки для продвинутого форматирования, позволяющей контролировать цвета, выравнивание, отступы, таблицы и многое другое.
Используя все эти возможности, вы можете создавать не только функциональные, но и эстетически привлекательные отчёты и выводы, которые будут понятны как вам, так и вашим коллегам.
🚀 Начни использовать print_md уже сегодня, и твои скрипты заиграют новыми красками!