Как в sketchup написать текст
Google SketchUp — программа для быстрого создания и редактирования трёхмерной графики. Удобство и простоту SketchUp оценят, как начинающие работу с трёхмерным моделированием, так и профессионалы.
Но не все знают, что SketchUp обладает мощным API, с помощью которого можно создавать модули, добавляя в программу новый функционал. В этом посте я попытаюсь объяснить общие принципы архитектуры SketchUp и процесс разработки плагина. Перед написанием нового велосипеда плагина стоит поискать на сайте Sketchucation уже готовые реализации с необходимой для Вас функциональностью. Найдя подходящий плагин с открытым исходным кодом, можно реализовать требуемый функционал, оставив основную часть кода нетронутой. Например, плагин делает какие-то расчеты и построения, а вы только изменяете их применение или визуализацию.
Плагины для SketchUp пишутся на языке Ruby.
На Google Code представлена официальная документация по разработке. Она состоит из 3 разделов: Introduction, Quick Reference и Object Reference.
1) Introduction – вводный раздел, в котором показан пример создания простого плагина.
2) Quick Reference – справочный раздел по классам, методам.
3) Object Reference – справочный раздел по объектной модели SketchUp. Объектная иерархия очень удобно разбита по группам, что позволяет быстро искать необходимые для написания кода классы.
Пример разработки плагина я возьму из собственной практики. Для удобства работы требовался дополнительный функционал, отсутствующий в SketchUp. Задача состояла в быстром и удобном определении размеров объекта (ширина, высота, толщина). Готовый плагин с данной функциональностью был найден — GetDimensions, но у него был большой минус: он показывал размеры в MessageBox’e, который необходимо было постоянно закрывать, что создавало определенное неудобство. Я решил исследовать его код и изменить вывод результата.
Код плагина GetDimensions:
require 'sketchup.rb'
def get_dimensions
model = Sketchup.active_model
mname = model.title
Sketchup::set_status_text(( "GET COMPONENT DIMENSIONS. " ), SB_PROMPT)
Sketchup::set_status_text( " " , SB_VCB_LABEL)
Sketchup::set_status_text( " " , SB_VCB_VALUE)
boundingBox = model.selection[0].bounds
dims = [ boundingBox.height,
boundingBox.width,
boundingBox.depth ]
dims.sort!
UI.messagebox( "Thickness: " + dims[0].to_s + "\nWidth: " + dims[1].to_s + "\nLength: " + dims[2].to_s)
end
if ( not file_loaded?( "GetDimensions.rb" ) )
add_separator_to_menu( "Plugins" )
UI.menu( "Plugins" ).add_item( "Get Dimensions" ) < get_dimensions >
end
* This source code was highlighted with Source Code Highlighter .
Код состоит из логики плагина ( get_dimensions ), добавления пункта меню (Plugins -> Get Dimensions) и загрузка самого файла плагина в систему (GetDimensions.rb).
Для установки, плагин необходимо скопировать в директорию “C:\Program Files\Google\Google SketchUp\Plugins\”, а программа автоматически подгрузит все скрипты из этой папки при запуске.
Главным объектом, хранящим в себе структуру рисунка, является model .
В данном плагине берется первый выделенный объект и его размеры. Размеры сортируются в порядке возрастания и показываются в MessageBox’е, а в панели состояния отображается название плагина.
Панель состояния меня сразу заинтересовала, и я решил перенести в нее вывод полученных размеров.
После небольшой модификации плагина мне удалось этого достичь:
def get_dimensions
model = Sketchup.active_model
entities = model.entities
boundingBox = model.selection[0].bounds
dims = [ boundingBox.height,
boundingBox.width,
boundingBox.depth ]
dims.sort!
Sketchup::set_status_text(( "Thickness: " + dims[0].to_s + ". Width: " + dims[1].to_s + ". Length: " + dims[2].to_s ), SB_PROMPT)
end
* This source code was highlighted with Source Code Highlighter .
После выбора элемента, с помощью инструмента Select, выбираем в меню команду Get Dimensions. В результате на панели состояния будут отображаться размеры выбранного элемента. Для более удобного вызова команды следует назначить горячую клавишу.
Следующим шагом было сделать так, чтобы размеры автоматически показывались при выделении объекта. В голову пришло два варианта: сделать свой инструмент, который бы выделял элементы как инструмент Select, но при этом показывал внизу размеры, либо модифицировать инструмент Select, что бы он при выделении показывал размеры объекта.
После поиска по Object Reference, родилась идея реализации второго способа.
Как оказалось, с помощью Observer Classes -> SelectionObserver можно подписаться на события инструмента Select.
После модификации логика плагина была разнесена на два файла:
Dimensions_load.rb
require 'sketchup.rb'
require 'Dimensions/GetDimensions.rb'
$PluginMenuName = "Tools"
$DimensionsMenuName = "Dimensions Tool"
$GetDimensionsMenuItem = "Get Dimensions"
$AutoDisplayMenuItem = "Auto Display Dimensions"
if (not file_loaded?( "dimensions_load.rb" ))
pluginMenu = UI.menu($PluginMenuName)
dimensions = Dimensions. new
pluginMenu.add_separator
getDimensionsSubMenu = pluginMenu.add_submenu($DimensionsMenuName)<>
getDimensionsSubMenu.add_item($GetDimensionsMenuItem)
autoDisplayItem = getDimensionsSubMenu.add_item($AutoDisplayMenuItem)
getDimensionsSubMenu.set_validation_proc(autoDisplayItem)
end
* This source code was highlighted with Source Code Highlighter .
GetDimensions.rb
require 'sketchup.rb'
class Dimensions < Sketchup::SelectionObserver
def initialize()
@usedObserver = false
end
def onSelectionBulkChange(selection)
get_dimensions(selection)
end
def get_selection_dimensions
get_dimensions(Sketchup.active_model.selection)
end
def get_dimensions(selection)
boundingBox = selection[0].bounds
dims = [ boundingBox.height,
boundingBox.width,
boundingBox.depth ]
dims.sort!
Sketchup::set_status_text(( "Thickness: " + dims[0].to_s + ". Width: " + dims[1].to_s + ". Length: " + dims[2].to_s ), SB_PROMPT)
end
def connect_observer
if (@usedObserver) then
return remove_observer
else
return add_observer
end
end
def add_observer
@usedObserver = true
Sketchup.active_model.selection.add_observer self
return MF_CHECKED
end
def remove_observer
@usedObserver = false
Sketchup.active_model.selection.remove_observer self
return MF_UNCHECKED
end
def menu_checked
if (@usedObserver) then
return MF_CHECKED
else
return MF_UNCHECKED
end
end
end
* This source code was highlighted with Source Code Highlighter .
Рассмотрим код подробнее.
Для того, чтобы иметь возможность перехватывать события инструмента Select, необходимо наследоваться от класса SelectionObserver , переопределить у себя метод onSelectionBulkChange(selection) , который будет вызываться при выделении объектов, и подписаться на события с помощью Sketchup.active_model.selection.add_observer .
Плагин был перемещен в меню Tool -> Dimensions Tool, которое содержит два подпункта: Get Dimensions и Auto Display Dimensions.
Как я уже говорил ранее, задача плагина сводилась к отображению параметров объекта автоматически при его выделении. Т.к. дополнительный функционал не всегда нужен, решено было сделать его отключаемым. Auto Display Dimensions — позволяет включать его в нужный момент, а Get Dimensions – вызов плагина по запросу — был оставлен для большей гибкости использования.
Как видите, модернизирование существующего плагина намного проще, чем писание его с нуля. Кстати, я впервые писал код на Ruby, но благодаря большому опыту программирования, понять синтаксис не составило труда.
При построении трехмерных моделей или двухмерных примитивов необходимо знать и
учитывать размеры объектов. Измерение размеров, построение объектов с заданными
размерами - важнейшие задачи, решаемые в любом программном пакете 3d-моделирования.
Не менее важной задаче 3d-моделирования при создании сцен 3d-мира является задача
соотнесения размеров разных моделей. При проектировании объектов или сцен в SketchUp
необходимо оперировать с реальными размерами объектов. Именно для соотнесения размеров
создаваемых объектов с пространством сцены, при создании нового проекта пользователь
видит фигуру Сюзан. Рост Сюзан - качественный ориентир, как для размеров вновь
создаваемых объектов, так и для правильной ориентации и соотнесения размеров объектов на
пространстве сцены нового проекта.
Для решения этих задач в SketchUp используются инструменты панели Construction
(Построение). Важнейшим инструментов из этой панели является Tape Measure (Рулетка).
Назначение инструмента Рулетка - измерение линейных расстояний между двумя точками в
пространстве сцены. Это, пожалуй, самый востребованный инструмент из данной группы,
поскольку с его помощью выполняются самые необходимые измерения. Рулетка может не
только измерять расстояния между объектами, но и создавать направляющие на нужном
расстоянии от края объекта (производить операции разметки). Под операциями разметки
понимается создание опорных линий разметки, облегчающих в дальнейшем правильное
расположение объектов относительно друг друга. Направляющая - это просто тонкая
пунктирная линия, с помощью которой можно точно располагать объекты относительно друг
друга. Для построения направляющей линии (Guide Line) необходимо активировать инструмент
Рулетка (курсор превращается в “Рулетку со знаком +), затем щелкнуть кнопкой мыши на
стартовой точке и переместить курсор в направлении измерения. При этом вычерчивается
линия со стрелками на концах, выделенная цветом оси, вдоль которой происходит измерение.
В конце этой линии изображается пунктирная линия, называемая направляющей. В конечной
точке еще раз щелкаем мышью.
Видео YouTube
Панели инструментов в программе SketchUp — основной тип элементов управле- ния программой — блоки кнопок, эквивалентные командам меню, обеспечивающие быстрый доступ к наиболее важным и часто используемым инструментам. Эти блоки в SketchUp , как и в стандартных приложениях ОС Windows — плавающие , т. е. могут быть перемещены в любое место рабочего окна.
Вид и состав панелей инструментов настраивается в меню View | Toolbars (Вид | Панели инструментов). Давайте активируем панели инструментов, которые наиболее часто используются в SketchUp , и кратко их рассмотрим.
Панель Standard (Стандартная)
Кнопки этой панели (рис. 7.1) активируют опции: New (Создать), Open (Открыть), Save (Сохранить), Cut (Вырезать), Copy (Копировать), Paste (Вставить), Erase (Удалить), Undo (Отменить), Redo (Вернуть), Print (Печать), Model info (Данные модели).
Рис. 7.1. Стандартные инструменты
Панель Principal (Основные)
Кнопки этой панели (рис. 7.2) активируют опции: Select (Выбрать), Make Component (Создать компонент), Paint Bucket (Заливка), Eraser (Ластик).
Рис. 7.2. Основные инструменты
Панель Drawing (Рисование) Кнопки этой панели (рис. 7.3) активируют опции рисования: Rectangle (Прямо- угольник), Line (Линия), Circle (Окружность), Arc (Дуга), Polygon (Многоугольник), Freehand (От руки).
Рис. 7.3. Инструменты рисования
Панель Modification (Изменение)
Кнопки этой панели (рис. 7.4) активируют опции модификаций: Move (Перемес- тить), Push / Pull (Тяни/Толкай), Rotate (Повернуть), Follow Me (Ведение) (следуй за мной), Scale (Масштабировать), Offset (Смещение).
Рис. 7.4. Инструменты изменения (модификации)
Панель Construction (Построение)
Кнопки этой панели (рис. 7.5) активируют опции: Tape Measure (Рулетка), Dimensions (Указатели размеров), Protractor (Угломер), Text (Текст), Axes (Оси), 3 D Text (3 D -текст).
Рис. 7.5. Конструкционные инструменты
Панель Camera (Камера)
Кнопки этой панели (рис. 7.6) активируют опции обзора: Orbit (Орбита), Pan (Панорама), Zoom (Масштаб), Zoom Window (Область увеличения), Previous (Пред.), Next (Далее), Zoom Extents (В размер окна).
Рис. 7.6. Инструменты управления камерой
Панель Walkthrough (Проход)
Кнопки этой панели (рис. 7.7) активируют опции "прогулки": Position Camera (Расположить камеру), Walk (Проход), Look Around (Осмотреть), Section Plane (Плоскость сечения).
Рис. 7.7. Инструменты управления видом
Панель Styles (Стили)
Кнопки этой панели (рис. 7.8) активируют опции отображения: X - ray (Рентген), Wireframe (Каркас), Hidden Line (Скрытая линия), Shaded (Затенение), Shaded with Textures (Затенение с текстурами), Monochrome (Монохромная).
Рис. 7.8. Инструменты отображения поверхностей
Панель Views (Представления)
Кнопки этой панели (рис. 7.9) активируют опции показа или иначе представления вида изображения: Isometric (Изометрический), Top (Сверху), Front (Спереди), Right (Справа), Back (Сзади), Left (Слева).
Рис. 7.9. Инструменты настройки вида изображения
Панель Shadows (Тени)
Эта панель (рис. 7.10) активации опций теней: кнопка Shadow Settings (Настройка теней) для вызова диалогового окна дополнительных настроек теней; кнопка- переключатель включения/выключения теней Show / Hide Shadows (Показать/ скрыть тени); ползунковые регуляторы для выбора времени года и суток.
Рис. 7.10. Инструменты настройки тени
Панель Sections (Сечения)
Кнопки этой панели (рис. 7.11) активируют опции показа/скрытия сечений (разрезов): Section Plane (Плоскость сечения), Display Section Planes (Отобразить плоскости сечения), Display Section Cut (Отобразить разрезы).
Рис. 7.11. Инструменты настройки показа разрезов
Панель Layers (Слои)
Кнопки этой панели (рис. 7.12) активируют опции слоев: раскрывающийся список выбора активного слоя; кнопка активации диспетчера слоев Layers Manager (Диспетчер слоев).
Рис. 7.12. Инструмент настройки слоев
Панель Google ( Google )
Кнопки этой панели (рис. 7.13) активируют опции: Add Location (Установить местоположение вручную), Toggle Terrain (Показать/скрыть рельеф), Add New Building (Добавить новое здание), Photo Textures (Фототекстуры), Preview Model In Google Earth (Просмотреть модель в Google Планета Земля), Get Models (Получить модели), Share Models (Обмен моделями), Share Component (Обмен компонентами).
Рис. 7.13. Инструменты Google Earth
Панель Dynamic Components ( DC ) (Динамические компоненты)
Кнопки этой панели (рис. 7.14) активируют опции: взаимодействия, настройки, атрибутов.
Рис. 7.14. Инструменты, управляющие динамическими компонентами
Панель Sandbox (Песочница)
Чтобы эту панель можно было вызвать из меню View | Toolbars (Вид | Панели инструментов), и в меню появился соответствующий пункт, его необходимо дополнительно активировать из меню Window | Preferences | Extensions | Sandbox Tools (Окно | Параметры | Расширения | Инструменты песочницы).
Кнопки этой панели (рис. 7.15) активируют опции: From Contours (Из контуров), From Scratch (С нуля), Smoove (Моделировать), Stamp (Оттиск), Drape (Обтекание), Add Detail (Добавить деталь), Flip Edge (Отразить край).
Читайте также: