Расширение (плагин) SketchUp для…
При расчете стоимости новой кухни цена оказалась такой большой, что я решил сделать её сам так как это обойдется в два раза дешевле. Для тренировки решил сделать для себя рабочий стол. Достаточно быстро пришло понимание: чтобы сделать хорошую вещь нужно сделать 3D модель. Это позволит на этапе проектирования посмотреть как будет выглядеть мебель и продумать как в дальнейшем будет происходить сборка. Так как 3D моделированием я не занимаюсь, то начал искать программу попроще. И самая простая что нашел SketchUp. При создании модели постоянно приходилось править модель из-за постоянно изменявшихся размеров. И после третьего изменения появилась идея — сделать параметризированную модель, чтобы она сама генерировалась с нужными размерами. SketchUp поддерживает скрипты на языке Ruby и эта статья о том что у меня получилось.
Решение достаточно простое — создаю некоторый API, который позволяет создавать 3D объекты листов ЛДСП с нужными параметрами.
Красные — это 2 мм кромки, фиолетовый — кромки 0.4 мм. Нижние полки не до конца, так как там батарея отопления у стены. Столешница отстает от стены на 4 см чтобы тепло от батарее отопления поднималось вверх и обогревало стену (
# Толщина фанеры $weght = 16.0 # Зазор между ящиком и задней стенкой $zazor = 5. 0 # Отступ от краев для ящика $dWidth = 26.0 # $width = 770 $offsetStena = 40 $dStoledhnica = 20 $height = 2500 - 150 - 900 $depthLeft = 600 $depthRight = $depthLeft - 175 $jshikHeight = 200 $heightPlanka = 300 $heightJshik = 190 $heightJshikOffset = 10 # Функция точки входа def object3D_main() # Загрузить библиотеки Shasoft::Object3D::loadLibrary() # Установить толщину ЛДСП Shasoft::Object3D::LDSP::setWeght($weght) # Создать модель stenaLeft = Shasoft::Object3D::LDSP::create($height-$weght,$depthLeft,"2 0 0 1").name("Левая стена").rotateY(-90) stenaRight = Shasoft::Object3D::LDSP::create($height-$weght,$depthLeft,"2 0 0 1").name("Правая стена").rotateY(-90).moveX($width-$weght) stoleshnica = Shasoft::Object3D::LDSP::create($width,$depthLeft+$dStoledhnica-$offsetStena,"2 2 1 2").name("Столешница").move(-$weght,-$dStoledhnica,$height-$weght) polka1 = Shasoft::Object3D::LDSP::create($width-$weght*2,$depthRight,"2 0 0 0").name("Полка 1").moveZ(400) polka2 = Shasoft::Object3D::LDSP::create($width-$weght*2,$depthRight-$weght,"2 0 0 0").name("Полка 2").moveZ(600) polka3 = Shasoft::Object3D::LDSP::create($width-$weght*2,$depthLeft-$offsetStena,"2 0 0 0").name("Полка 3").moveZ(800+$heightJshik+$heightJshikOffset+10-$weght-5) pereborka1 = Shasoft::Object3D::LDSP::create($width-$weght*2,$heightPlanka).name("Переборка").rotateX(90).moveY($depthRight).moveZ(400+$weght) # Верхний ящик jshik1box = Shasoft::Object3D::LDSP::create_box($width-$weght*2-$dWidth,$depthLeft-$zazor-$offsetStena,$heightJshik,"Верхний ящик",1).moveX($dWidth/2).moveZ($height-$heightJshik-$heightJshikOffset-$weght) jshik1Fasad = Shasoft::Object3D::LDSP::create($width,200,"2 2 2 2").rotateX(90).moveX(-$weght).moveZ($height-$heightJshik-$heightJshikOffset-$weght-5).name("Фасад ящика 1") jshik1 = Shasoft::Object3D::create(jshik1box,jshik1Fasad) # Нижний ящик jshik2box = Shasoft::Object3D::LDSP::create_box($width-$weght*2-$dWidth,$depthLeft-$zazor-$offsetStena,$heightJshik-$weght-5,"Нижний ящик",1).moveX($dWidth/2).moveZ($height-$heightJshik-$heightJshikOffset-$weght) jshik2Fasad = Shasoft::Object3D::LDSP::create($width,200,"2 2 2 2"). rotateX(90).moveX(-$weght).moveZ($height-$heightJshik-$heightJshikOffset-$weght-5).name("Фасад ящика 2") jshik2 = Shasoft::Object3D::create(jshik2box,jshik2Fasad).moveZ(-$height+800+$heightJshik+$heightJshikOffset+$weght+10) # Двери widthDver = $width/2-5 dver1 = Shasoft::Object3D::LDSP::create(widthDver,800-5-10,"2 2 2 2").rotateX(90).moveZ(5).moveX(-$weght).name("Дверь 1") dver2 = dver1.copy.moveX($width-widthDver).name("Дверь 2") # for i in 0..5 Shasoft::Object3D::LDSP::create(467,247,"0 2 0 0").name("Полка в шкаф").moveX(-600).moveZ(i*50) end for i in 0..2 Shasoft::Object3D::LDSP::create(467,640,"0 2 0 0").name("Полка в шкаф 2").moveX(-600-600).moveZ(i*50) end # Shasoft::Object3D::LDSP::write_csv( File.dirname(__FILE__)+"/main.csv" ) #Shasoft::Object3D::LDSP::write_csv_cut( File.dirname(__FILE__)+"/cut.csv" ) #Shasoft::Object3D::show() end
Скачиваем файл Object3D.rbz Запускаем SketchUp Открываем Диспечер расширений (Окно/Диспечер расширений) Жмем кнопку «Установить расширение» и выбираем скаченный файл Object3D. rbz После этого плагин запрашивает директорию где будут храниться проекты. Т.е. выводится окно «Укажите директорию с проектами» и требуется указать папку где вы будете хранить ваши проекты.
В результате у нас появляется наше расширение
Переходим в папку которую мы указали для хранения проектов. Эту папку можно изменить в меню плагина
Создаем в папке директорию с названием нашего проекта. В моем случае это «Шкафчик в зал». Затем заходим в созданную директорию и создаем файл main.rb в котором создаем функцию точки входа
# Функция точки входа def object3D_main() ... # код для генерации модели end
Перезапускаем SketchUp и в меню плагина у вас появится пункт с названием созданной вами папки. Теперь вы выборе этого пункта будет происходить следующее:
- очистка консоли Ruby
- удаление всех элементов в текущем проекте
- загрузка файла main.rb из указанной директории
- вызов функции object3D_main
В функции object3D_main нужно сделать генерацию вашей модели.
Файл «core.rb»
Каждая функция возвращает объект Shasoft::Object3D::Object3D который содержит методы для перемещения объекта и его поворота
- Функция name() — установка имени объекта. Не стоит им пренебрегать. При сборке может сильно помочь 🙂
- Функции объекта moveX, moveY, moveZ позволяют перемещать объект по соответствующим осям.
- Функция move(x,y,z) позволяет переместить объект сразу по трем осям
- Функции объекта rotateX
- Есть функции псевдонимы moveRed, moveGreen, moveBlue, rotateRed, rotateGreen, rotateBlue где оси X(red), Y(green), Z(blue) названы по их цвету в SketchUp. Может кому-то так будет удобнее. Каждая функция возвращает указатель на сам обхект. Это позволяет делать цепочку вызовов
# Повернем объект на 90 градусов вокруг оси X и переместим по оси Y на 100 мм obj.rotateX(90).moveY(100)
Функция объекта set(dict,key,value) позволяет установить значение атрибута. dict — имя словаря, key — имя атрибута, value — значение
Функция объекта get(dict,key,value=nil) позволяет получить значение атрибута. dict — имя словаря, key — имя атрибута, value — значение
Метод copy позволяет получить копию объекта (хотя работает не очень стабильно :))
Метод group позволяет получить стандартный объект SketchUp::Group
Определен метод для создания объекта. В качестве параметров можно передавать список объектов Shasoft::Object3D::Object3D или SketchUp::Group. Если список параметров пустой, то будет создана новая группа
# Создать объект со списком дочерних объектов Shasoft::Object3D::create(*args)
Также есть функция которая позволяет получить список объектов (Skechup::Group). Можно задать имя словаря и будут возвращены только объекты, у которых такой словарь присутствует. В частности именно так я отделяю объекты лист ЛДСП от других. При создании я устанавливаю словарь LDSP по которому потом и фильтрую все объекты сцены.
# Получить список объектов # dict - имя словаря Shasoft::Object3D::get(dict=nil)
Файл «2D_weght»
# Создать 3D объект выдавливания # pts - список точек в координатной плоскости x,y # weght - толщина(высота) Shasoft::Object3D::create_pushpull(pts,weght) # Создать плоскую поверхность с заданной толщиной # lX - размер по X # lY - размер по Y # weght - толщина Shasoft::Object3D::create_plane(lX,lY,weght)
Файл «ldsp.rb»
# Получить текущую толщину Shasoft::Object3D::LDSP::weght # Установить толщину Shasoft::Object3D::LDSP::setWeght(weght)
# Получить текущий материал ЛДСП Shasoft::Object3D::LDSP::material # Установить материал ЛДСП Shasoft::Object3D::LDSP::setMaterial(material) # Создать лист ЛДСП # width - ширина (по X) # depth - глубина (по Y) # kromka - кромка [X ближний, Y левый, X дальний, Y правый], 0 - нет кромки, 1 - кромка 0. 4 мм, 2 - кромка 2 мм Shasoft::Object3D::LDSP::create(width,depth,kromka="0 0 0 0")
Вспомогательная функция для создания выдвижных ящиков
# Создать ящик # width - ширина # depth - глубина # height - высота # name - имя # is_kromka - 1/0 кромить верх 2 мм кромкой Shasoft::Object3D::LDSP::create_box(width,depth,height,name,is_kromka)
результат работы
# Записать размеры в файл CSV Shasoft::Object3D::LDSP::write_csv(filepath)
в результате будет сгенерирован следующий csv файл со следующими колонками
- A — Ширина
- B — Глубина
- C Количество деталей
- D — кромки в формате Д-длинная сторона, К-короткая сторона. Именно в таком их записывают в той конторе в которой я заказываю распил деталей. Возможно это стандарт.
- E — кромки в том формате в котором вы их задавили при генерации
- F — Название всех деталей. Это полезно при сборке
# Записать в файл команды для CorelCAD (AutoCAD?) # Для выполнения готового скрипта в Corel CAD (по идее наверное и в вдругих CAD системах тоже можно). Я использовал для генерации 2D проекта для деталей из оргстекла Shasoft::Object3D::write_cad_commands(filepath)
В результате будет сформирован скрипт SCR для запуска такого вида
LINE 50.0,0.0 65.0,0.0 65.0,70.0 50.0,70.0 50.0,0.0 LINE 75.0,0.0 90.0,0.0 90.0,70.0 75.0,70.0 75.0,0.0 LINE 100.0,0.0 115.0,0.0 115.0,20.0 100.0,20.0 100.0,0.0 LINE 125.0,0.0 140.0,0.0 140.0,20.0 125.0,20.0 125.0,0.0
# Записать в файл команды для CorelDraw (CorelDraw) # Для выполнения готового скрипта в CorelDraw. Я использовал для генерации 2D проекта для деталей из оргстекла Shasoft::Object3D::write_CorelDraw_commands(filepath)
В результате будет сформирован скрипт VBA для запуска в CorelDraw такого вида
Sub generateFigures() Dim crv As Curve Dim shp As Shape ' Set crv = ActiveDocument. CreateCurve With crv.CreateSubPath(0.0,0.0) .AppendLineSegment 15.0,0.0 .AppendLineSegment 15.0,70.0 .AppendLineSegment 0.0,70.0 .Closed = True End With Set shp = ActiveLayer.CreateCurve(crv) shp.Fill.ApplyNoFill shp.Outline.SetPropertiesEx 0.1, OutlineStyles(0), CreateRGBColor(0, 0, 0), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=1#, Justification:=cdrOutlineJustificationMiddle ' Set crv = ActiveDocument.CreateCurve With crv.CreateSubPath(25.0,0.0) .AppendLineSegment 40.0,0.0 .AppendLineSegment 40.0,70.0 .AppendLineSegment 25.0,70.0 .Closed = True End With Set shp = ActiveLayer.CreateCurve(crv) shp.Fill.ApplyNoFill shp.Outline.SetPropertiesEx 0.1, OutlineStyles(0), CreateRGBColor(0, 0, 0), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=1#, Justification:=cdrOutlineJustificationMiddle ' ActivePage. SetSize 12875.0#, 2100#
В заключении
Проектирование и сборка мебели самому — это экономия денег где-то в 2 раза. А также возможность втиснуть ваше индивидуальное мебельное изделие в любую нестандартную дырку в квартире. Я обычно собираю мебель на конфирматах 7×50 из ЛДСП 16 мм
При наличии сверла для конфирматов
(и небольшого навыка) сборка занимает не так много времени.
Единственный минус — в это можно втянуться. После рабочего стола я уже собрал: кухню, несколько клеток (для одной и той же птицы она на фото), полки (навесные и напольные), тумбы и столы. В общем «захламил» в квартире все неиспользуемые места.
Ссылка для скачивания расширения
Lumion для SketchUp: совместимость, импорт и LiveSync.
Рендеринг проектов SketchUp в реальном времени в Lumion.
Создайте свой дизайн-проект SketchUp в реалистичной обстановке, словно в окружении реальных зданий.
Lumion — решение для архитекторов, которым нужен лучший способ работы в SketchUp. С новым LiveSync вы можете сразу же настроить визуализацию своей модели SketchUp в режиме реального времени. Внесение изменений и редактирование модели САПР, позволяет увидеть, что эти изменения происходят в режиме реального времени в захватывающей, реалистичной среде Lumion.
Зачем использовать Lumion для SketchUp?
- Мгновенный высококачественный рендеринг во время работы
- Преобразуйте материалы SketchUp в реалистичные материалы Lumion
- Добавьте людей, автомобили, мебель, воду, деревья, погодные эффекты и многое другое
- Получайте высококачественные фотореалистичные изображений проекта, видеоролики и панорамы 360
- Применяйте стили с предустановленным набором эффектов визуализации к вашим дизайн-проектам одним кликом
Легко добавить стиль к вашим рендерам
Больше не нужно искать и подбирать интересные эффекты. Как только вы примените материалы Lumion к своей 3D-модели и просто нажмете кнопку «Стили», в одно мгновение ваш дизайн станет красивым рендером с тщательно сбалансированной комбинацией эффектов.
Моментальный рендеринг или создание стиля за считанные минуты. Создайте свой собственный дизайн быстрее, чем когда-либо.
Смотреть обзор
Основные возможности LiveSync для SketchUp
- Синхронизация точек обзора между SketchUp и Lumion
- Возможность добавлять и сохранять красивые материалы Lumion в Ваш LiveSync проект
- Синхронизация и визуализация материалов в реальном времени
- Автоматический импорт модели в Lumion (нет необходимости отдельно импортировать модель)
Рендеринг SketchUp — экспорт в Lumion
Lumion совместим практически со всеми программными продуктами для 3D-моделирования и предлагает удобный импорт файлов SketchUp. Он принимает как файлы собственного формата .SKP, так и другие распространенные форматы 3D-файлов, такие как COLLADA (. DAE) и .FBX.
В видеообзоре справа показано, как легко импортировать модели SketchUp в Lumion. Вы также увидите, насколько быстро можно внедрить изменения в проект.
LiveSync для SketchUp
*Требуется Lumion
5 главных причин, по которым архитекторы используют Lumion:
1. Возможность всё сделать самостоятельно!
Любой пользователь Lumion может создавать динамичные видеоролики и изображения без предварительной подготовки. Это многофункциональный инструмент для создания 3D-рендеров живописных архитектурных объектов. Вам больше не нужно передавать визуализацию проектов на аутсорсинг.
2. Максимально быстрые результаты
С Lumion вы можете редактировать свой проект в режиме реального времени. Все разработано так, чтобы сэкономить ваше время. Это означает, что вы можете настроить визуализацию всего за несколько минут и быстро вносить изменения. Конечные результаты отображаются с использованием технологии рендеринга на GPU. Это гарантирует готовность видеороликов или изображений с минимально затраченным временем, необходимого для других решений. Благодаря скорости работы Lumion, нет необходимости использования рендер-ферм.
3. Внушительная библиотека объектов и материалов
Рендеринг – это всего лишь одна из вещей, необходимых для создания эффектных визуализаций. Для создания комплексных визуальных эффектов необходимы фотореалистичное небо, многообразные материалы, вода, трава, деревья, растения, модели людей, и многие другие объекты. Lumion включает в себя огромную библиотеку контента с инструментами, материалами и художественными эффектами. Все это интегрировано и прекрасно взаимодействует между собой, поэтому вы можете сразу добавить любые элементы в проект, чтобы вдохнуть жизнь и атмосферу в ваши визуализации.
4. Новейшие технологии визуализации
Традиционно визуализация имеет много ограничений. Рендеринг занимает много времени, а программное обеспечение почти всегда сложно освоить. Lumion полностью меняет представление о визуализации, предоставляя инструменты, которые может использовать каждый. Отдельное обучение компьютерной графике не требуется. В Lumion редактирование и рендеринг практически мгновенны, и это открывает новые возможности для архитектурной студии и для бизнеса в целом. Вы можете создать и настроить видеоролик в режиме реального времени или добавить эффекты эскиза к визуализации практически мгновенно, щелкнув мышью, что сразу же придаст вашей работе концептуальный и художественный вид.
5. Создавайте комплексные визуализации
Для большинства программных решений процесс визуализации больших проектов сложная и ресурсоёмкая задача. Уникальная технология Lumion делает его наиболее подходящим для таких задач, как визуализация ландшафта или квартала города. Вы можете без особых усилий редактировать большие проекты с огромной площадью, добавлять массивы объектов, буквально десятки тысяч деревьев, растений или зданий. Мы получаем множество отзывов от наших пользователей о том, что Lumion в настоящее время является единственным программным обеспечением в мире, которое позволяет без труда редактировать и обрабатывать такие большие массивы. У нас даже есть примеры целых городов, созданных в Lumion!
Добавление расширений в SketchUp | Справка SketchUp
Extension Warehouse и SketchUp созданы для совместной работы. В большинстве случаев, чтобы добавить расширение в локальную копию SketchUp, достаточно нажать кнопку Установить на странице сведений о расширении и немного подождать, пока программа выполнит остальную работу.
Однако этот волшебный процесс установки сопровождается несколькими оговорками:
- Вы должны получить доступ к Extension Warehouse из SketchUp (в отличие от браузера). При доступе к хранилищу расширений из веб-браузера вы видите кнопку «Загрузить» вместо кнопки «Установить», после чего вам потребуется установить загруженный файл
.rbz
вручную через настройки SketchUp.Совет: Устанавливать расширения и управлять ими проще всего, если получить доступ к Хранилищу расширений из SketchUp, выбрав Расширения > Хранилище расширений .
- Расширение является бесплатным. Многие расширения в хранилище расширений можно загрузить и использовать бесплатно. У разработчиков также есть возможность продавать расширения за разовую плату или подписку. Когда расширение доступно для покупки, вместо кнопки «Установить» вы видите кнопку «Купить», а иногда и кнопку «Установить пробную версию», как показано на следующем рисунке. Пробное расширение можно использовать бесплатно в течение ограниченного времени. В некоторых случаях расширение доступно для покупки, но вам необходимо купить расширение на сайте разработчика и установить расширение вручную.
Примечание: Если вы не знакомы с функциями на странице сведений о расширении, ознакомьтесь с введением в интерфейс Extension Warehouse в разделе «Начало работы». Если вам интересно, как удалить, обновить или иным образом управлять вашими расширениями, см. Управление расширениями.
В следующих разделах объясняется, что вам нужно знать об установке расширений вручную, приобретении расширений и использовании расширения после его установки.
Содержание
- Установка расширений вручную в SketchUp
- Проба или покупка расширений на складе расширений
- Поиск и использование расширения после его установки
Установка расширений вручную в SketchUp
Если вы загружаете расширение из хранилища расширений через веб-браузер или с веб-сайта разработчика, ваше расширение упаковано в виде файла .rbz
, который можно установить вручную. Вот шаги, которые вам нужно выполнить:
- В SketchUp выберите Extensions > Extension Manager . Появится окно диспетчера расширений.
- Нажмите кнопку Установить расширение .
- В появившемся диалоговом окне «Открыть» перейдите к файлу
.rbz
, сохраненному на вашем компьютере, выберите файл и нажмите OK (Microsoft Windows) или Открыть (Mac OS X). - Когда SketchUp предупредит вас об установке расширений только из надежных источников, нажмите Да , чтобы продолжить и установить расширение. (Это предполагает, что вы действительно доверяете источнику своего расширения.)
Попробовать или приобрести расширения в хранилище расширений
Независимо от того, вошли ли вы в хранилище расширений через браузер или SketchUp, вы можете приобрести расширение. Однако для установки пробной версии или приобретенного расширения необходимо войти в хранилище расширений через SketchUp.
Следующие шаги помогут вам совершить покупку:
- На странице сведений о расширении нажмите кнопку Купить . (Если вы можете загрузить пробную версию перед покупкой, вы увидите ссылку «Установить пробную версию» из SketchUp. Чтобы установить пробную версию, см. следующие шаги по установке пробной версии или покупке.)
- При появлении запроса введите платежную и платежную информацию. Платежная информация необходима для подтверждения вашей кредитной карты. Ваша квитанция отправляется по электронной почте на адрес электронной почты, который вы используете для входа в Extension Warehouse. Если вы не получили электронное письмо с квитанцией вскоре после завершения покупки, проверьте папку со спамом.
Совет: После того, как вы приобрели расширение, Склад расширений не предлагает возмещение. Если вы хотите попробовать расширение перед его покупкой, найдите кнопку «Установить пробную версию», которая позволит вам попробовать, как работает расширение, прежде чем купить его. Если у вас возникли проблемы с приобретением расширения или вы хотите связаться с нами по поводу сделанной вами покупки Extension Warehouse, заполните нашу контактную форму службы поддержки клиентов и в раскрывающемся списке «Вы хотели бы выбрать» выберите 9. 0003 Решить проблему с покупкой .
Чтобы установить пробную версию или приобретенное расширение, выполните следующие действия:
- В SketchUp выберите Extension > Extension Warehouse и войдите в Extension Warehouse.
- Чтобы установить пробную версию, найдите расширение, которое хотите попробовать, и на странице сведений о расширении нажмите Установить пробную версию . Если вы уже приобрели расширение, перейдите к шагу 3.
- В меню пользователя выберите Мои расширения .
- На вкладке Мои расширения прокрутите вниз до пробного расширения или приобретенного расширения, которое вы хотите установить, и щелкните ссылку Установить пробную версию или Установить . На следующем рисунке вы видите ссылку «Установить пробную версию».
- Когда SketchUp спросит, доверяете ли вы автору и хотите ли продолжить установку расширения, вам нужно нажать Да , чтобы продолжить. Через несколько секунд диалоговое окно подтвердит, что расширение установлено.
Поиск и использование расширения после его установки
Как использовать расширение в SketchUp после установки?
Иногда в меню «Расширения» появляется расширение, как показано на следующем рисунке. Просто выберите расширение из меню, чтобы начать его использовать. Расширение также может добавлять панель инструментов для использования функций расширения, например панель инструментов Curve Maker, показанную на рисунке. В других случаях расширение находится в меню «Рисование», меню «Инструменты» или контекстном меню.
Совет: Для получения подробной информации о том, как использовать расширение, прочитайте документацию по расширению, которую вы можете найти на странице сведений о расширении или через нее. Например, страница сведений о расширении может содержать видео, инструкции или ссылки на дополнительную документацию о том, как работает расширение. Если у вас есть вопрос, ознакомьтесь с отзывами других пользователей (также на странице сведений о расширении) или проверьте, предоставляет ли разработчик контактную информацию на странице сведений, в своем профиле или на своем веб-сайте.
- Дополнительный склад
- установка расширений
- плагин
- расширения
- плагинов
- расширение
- установить расширение
Обратная связь
подключаемых модулей SketchUp | Магазин плагинов | SketchUcation
Medeek Engineering Inc.: Medeek Electrical v1.3.2 | |||
| | ||
Medeek Engineering Inc.: Medeek Engineering v0.8.0 | |||
| | ||
Medeek Engineering Inc.: Medeek Foundation v1.8.8 | |||
| | ||
Medeek Engineering Inc.: Medeek Truss v3.1.8 | |||
| | ||
Medeek Engineering Inc.: Medeek Wall v3. |