Найти тему

Запись данных в файл в плагине для Revit

Сегодня рассмотрим интересную тему: запись данных в файл. В этой статье будет мало новой информации непосредственно про Revit API: рассмотрим интересные вещи из других библиотек.

При создании плагина для Revit мы подключаем 2 обязательные DLL-ссылки: RevitAPI и RevitAPIUI. В общем-то, большая часть того, что мы делаем, завязана на классы и методы, присутствующие в этих библиотеках (и описанных на https://www.revitapidocs.com/). Но, помимо прочего, во всех вновь создаваемых проектах присутствует ссылка на базовую сборку system (это там хранятся string, int, double и многие другие базовые типы), и мы можем добавить любые другие сторонние сборки для наших целей (например EPPlus или ClosedXML для записи данных в Excel)

Сегодня мы рассмотрим работу с файлами и файловой системой с помощью классов из пространства имён System.IO (IO означает Input-Output, ввод-вывод). На сайте Microsoft можно изучать документацию на его классы так же, как и на revitapidocs.

Итак, рассмотрим код целиком, потом разберём его и представим результат:

Чтобы вам было удобнее, в этот раз я выложил код на свой GitHub. Там нет addin-файла, я запускаю через Addin-Manager.

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

Итак, что же тут мы имеем:
1. Записываем имя файла в строковую переменную (строка 30). Для этого я создал файл в папке "Документы", скопировал его путь, а затем заменил имя пользователя конструкцией "
Environment.UserName". Не то чтобы я хочу сохранить анонимность, просто показываю один из способов того, что можно сделать, если будете устанавливать свои плагины другим людям в папку %username%\AppData\Roaming\Autodesk\Revit\Addins

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

3. А далее собственно то, что является темой статьи. В конструкции using создаём новый StreamWriter, передавая ему filename. Далее проводим манипуляции с данными из проекта: я беру у каждой стены Id, имя типа и параметр "Длина" (почему я беру параметр именно так, читайте в статье о параметрах в Revit API), и записываю в строку. Затем эту строку записываю через метод WriteLine(string data).

  • Метод WriteLine записывает данные с новой строки (либо переносит строку)
  • Метод Write записывает данные в ту же строку

В самом конце я закрываю StreamWriter методом Close(). Информация сохраняется.

Запускаем плагин в Sample Project Revit 2023:

-2

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

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

-3