понедельник, 7 марта 2016 г.

Скриншот из Revit. Часть 1

               В моей работе частенько приходится работать и выдавать решения очень быстро , мне некогда возиться с проблемным ПО поэтому я и занялся программировать но всему есть пределы. Глядя на окно печати Revit наворачивается слеза:





Если нажать на кнопку печать то получим вот такой результат :



                 Мало того что не вписывается и нужно подгонять рамку так еще и качество УГ:



             Не понимаю почему но Revit режет очень сильно качество изображений и вообще всего что улетает из него, например тоже растровое изображение (обычные чертежи). Там порядка 96 Dpi и не более. Как то задумался я над этой проблемой и приуныл :(. Но после "полета в космос" начал смотреть на вещи совсем другим взглядом. Возможно то что я начала писАть в последнее время не совсем понятно а некоторые вещи кажутся из разряда "клиники" но не все так просто в этом деле.
             Давайте разберемся что же нам делать в этой задаче !
Итак у нас есть "горячо любимый" Revit и есть проблема ....... что же делать ? ..... :/ ..... Эврика ! а давайте запилим скрипт который будет делать то что мы ему скажем ! :D Обуздаем вселенную хаоса !
            Для начала нам нужно связаться не с родными библиотеками Revit а с внешними , например с библиотеками форм Windows и с нашей любимой clr, и не забываем про библиотеку Revit:

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import *
from Autodesk.Revit.DB import *

Далее свяжемся с нашим открытым документом :

doc = __revit__.ActiveUIDocument.Document

А далее начинаем  сохранять нужный нам фрагмент экрана :



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


            Разрешение в DPI_600 можно менять как душе угодно:
 
 А точнее только 4 типа (для справки DPI - пиксели на дюйм\dots per inch) . Формат так же не обязательно PNG, можно JPG или BMP или иные.
            В конечном счете получим вот такой код:


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


 Подписываемся, ставим лайки ! :)
             P.S. Работает только с 2016 версии Revit. И меня все больше удивляет гибкость API Revit и "специальная" безрукость самой программы.

5 комментариев:

  1. Миша, ты МЕГАКРУТ! А просто нажать "R - Export - Images and Animation - Image" не пробовал)? Или правый клик на виде и "Save to Project a Image"?

    ОтветитьУдалить
  2. Внимательно читай , цитирую:
    "Мало того что не вписывается и нужно подгонять рамку так еще и качество УГ"
    я показал как можно сделать скриншот именно видимой части (именно того фрагемнта чертежа который нужен) окна будь то вид или лист.
    P.S. не стоит ерничать

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. А почему именно через инструмент печать? А не через инструмент экспорта в изображение? Там и именно видимая часть окна абсолютно корректно выводится и разрешение нужное можно поставить.

    ОтветитьУдалить
  5. Большое спасибо за код, хочу использовать его в плагине для создания УГО для типоразмеров

    ОтветитьУдалить

Поиск по этому блогу