Меню

Как разработать модель стула



—>Уроки по моделированию в 3D MAX —>

—>

Моделирование [118]
Материалы [3]
Интерфейс [4]
Полезное [24]
Физика [1]
MAX Script [2]
Paint.NET [0]
Видеоуроки [0]

—>

Каталог статей

Начнём с ножки стула. На командной панели выбираем геометрический объект Cylinder из группы Standard Primitives, щёлкаем в любом окне проекции и настраиваем параметры цилиндра как на рисунке — радиус 1 см, а высота 80 см.

Выделяем созданный цилиндр, идём в главное меню Tools/Mirror, в появившемся окне выставляем настройки как на рисунке ниже: копия объекта будет создана на расстоянии 40 см от исходного вдоль оси X. Нажимаем ОК.

Выделяем цилиндр-копию и на командной панели во вкладке Modify изменяем высоту цилиндра на 40 см.

При выделенном маленьком цилиндре на основной панели инструментов нажимаем на кнопку Select and Move, наводим курсор на ось Х (она станет жёлтой) и при зажатом левом Shift нажимаем на ось Х, одновременно перемещая цилиндр по этой оси.

После отпускания клавиш появится окно с настройками копирования, где надо выбрать тип объекта Копия и нажать ОК.

Новую копию надо положить горизонтально. Используем для этого основную панель инструментов: Select and Rotate и Angle Snap Toggle (угловая привязка).

Используя интсрумент Select and Move разместим цилиндр как на рисунке.

Теперь, выделив все 3 цилиндра, используем повторно инструмент Mirror, но с другими настройками.

Добавим ещё один цилиндр, используя копирование с Shift-ом.

Пора сделать «сидушку». Создадим объект ChamferBox (Куб с фаской) из группы Extended Primitives с параметрами как на рисунке.

Переходим в окно проекции «Вид сверху», для этого нажимаем Т латинскую. Использую инструмент Select and Move, размещаем ChamderBox как на рисунке.

Потом переходим в вид Слева (нажимаем латинскую L) и размещаем «подушку» как показано ниже.

Копируем подушку, меняем её параметры и используя инструменты перемещения и поворота размещаем её как показано ниже. Для выравнивания можно использовать окна проекций Сверху, Слева, Спереди (F).

Источник

Творческий проект по технологии «Стул»

Описание презентации по отдельным слайдам:

МОУ «Хохломская средняя школа» Т В О Р Ч Е С К И Й П Р О Е К Т по учебному предмету: Технология «Раскладной табурет» 2016

1.Введение 1.1.Обоснование возникшей проблемы и потребности, цели и задачи………..3 1.2. Схема обдумывания ……………………………………………………………….4 1.3. История и современность…………………………………………………………5 1.4. Анализ идей………………………………………………………………………….6 2.Основная часть 2.1. Выбор материалов для проекта, дизайн – анализ…………………………….8 2.2. Определение дизайнерской задачи……………………………………………………….………..…9 2.3.Правила безопасности во время работы…………………………………. 11 2.4. Чертёж изделия……………………………………………………………………..13 2.5.Технология изготовления складного табурета…………………………………14 2.6.Обоснование проекта: экономическое, экологическое, эстетическое…. 16 3.Заключительная часть 3.1. Самооценка и контроль качества……………..……………………….……………………..17 Словарь терминов…………………………………………………………….…. 18 Литература………………………………………………………. ………………. 19 Содержание

1.1.Обоснование возникшей проблемы и потребности, цели и задачи Для поездок на природу надо всегда иметь среди своего туристического снаряжения складной табурет. Складные табуреты — очень компактный и удобный вид туристической мебели. Подобные табуреты можно использовать для кемпинга, для дачи, в туристических походах или простых поездках на природу или рыбалку. Складные табуреты просты и долговечны в эксплуатации, очень компактны, удобны при перевозке. Так как я очень люблю рыбалку, а у бабушки есть сад, да и часто выезжаем отдыхать с семьёй на природу. Я решил для таких случаев сделать раскладной табурет. Мой проект будет состоять из разработки конструкции, изготовления стула, а так же экономических расчетов. Я решил сделать его из дерева т.к. это более удобный и экологически чистый продукт. Цели и задачи проекта Целью творческого проекта является выполнение складного табурета для сада. Задачи проекта: 1. Разработать и выполнить проект. 2. Изучить историю табурета. 3. Совершенствовать навыки и приемы работы, полученные на уроках технологии. 4. Оценить проделанную работу. Введение

ПРОБЛЕМА ПОТРЕБНОСТЬ ИСТОРИЯ И СОВРЕМЕННОСТЬ КОНСТРУКЦИЯ МОДЕЛЬ МАТЕРИАЛ ИНСТРУМЕНТЫ, ОБОРУДОВАНИЕ ТЕХНОЛОГИЯ ИЗГОТОВЛЕНИЯ ЭКОЛОГИЧЕСКОЕ ОБОСНОВАНИЕ ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ ОХРАНА ТРУДА Табурет 1. 2. Схема обдумывания

Одним из первых изобретений человека была табуретка. Слово «табурет» французского происхождения, и означает «стул без спинки» Именно она, наряду с кроватью и столом, и является прародителем всего того, на чем мы сейчас сидим. До того как древний человек придумал табурет, он сидел на земле. Когда люди поняли, что на земле сидеть холодно и сыро, они стали класть под себя шкуры, пучки травы или веток. Прототипом стула стало бревно. Но так как оно катается, то кто-то додумался рубить его на части и сидеть на получившемся полене. Такой чурбан было не очень легко переносить с места на место, и у него стали отсекать ненужные части с боков или снизу, чтобы при этом оно оставалось устойчивым. Самые древние из образцов найденных табуреток датируются примерно 3000 г до нашей эры. Именно эти древние табуретки впоследствии стали прародителями стульев. В Древней Египте для изготовления мебели, в том числе табуреток, активно применялось дерево. Табуреты в те времена использовали в своем обиходе даже цари и фараоны. Причем в ходу были не только обычные, но и складные табуретки, сиденья которых выполнялись из дерева, а ножки напоминали копыта и делались из слоновьих клыков. Массовое производство табуретов началось в 1933 году. Тем не менее, существуют вещи, которые всегда остаются популярными, независимо от времени, места и эпохи. Табурет как раз относится к таким. Благодаря своей гениальной простоте, минимальному количеству деталей, а также простой технологии производства, табурет невероятно популярный элемент мебели, особенно в России. В России табуреты очень часто применяют в качестве мебели для кухни или для дачи. Благодаря своей конструкции, они помогают значительно экономить место в малогабаритных квартирах. На сегодняшний день существует множество видов табуретов для разных целей и ситуаций. 1.3.История и современность

Приступая к проектированию изделия, необходимо предста­вить ряд вариантов подобного изделия, чтобы выявить ряд суще­ственных преимуществ и недостатков. При выборе конструкции и технологии изготовления этого изделия я определил параметры, которые следует учесть при изготовлении раскладной табуретки. Назначение: использовать как средство для сидения на природе, рыбалке, и в саду. Варианты можно комбинировать между собой, тем самым получая множество различных решений. В качестве примера я взял четыре различных вариантов табуретов. Проанализировав ранее существующее, выбрал за основу табурет под №4, изменив немного конструкцию. Это — основной вариант изделия, при из­готовлении которого, я хотел бы закрепить полученные на уро­ках технологии знания и умения. Процесс изготовления досту­пен, материал есть. Для работы необходимо иметь: навыки работы на сверлильном станке, электрическим лобзиком, материал (древесину), инструмент, немного терпения, желания, внимания и усидчивости — и успех в работе гарантирован. Представленный вариант с точки зрения конструкторской зада­чи выглядит, практичным и удобным. После выбора оптимального варианта необходима разработ­ка технической документации. 1.4.Анализ идей

Читайте также:  Комаровский как наладить стул грудничка

2.1.Выбор материалов для проекта, дизайн – анализ Исследуя различные материалы, применяемые в производст­ве подобного рода изделий, я нашел, на мой взгляд, оптималь­ное соотношение между стоимостью материала, сложностью его обработки и функциональными возможностями в результате эксплуатации (прочность, вес, долговечность). Проектируемый объект не должен быть громоздким, обла­дать большой массой и неустойчивостью, но в то же время он должен соответствовать заводским аналогам. Для изготовления изделия я выбрал самый распространённый конструкционный материал – древесину. Наряду с технологическими свойствами этот материал экономиче­ски выгоден, он гарантирует качество изделия, к тому же хоро­шо поддается механической обработке. При изготовлении изделия можно использовать ос­татки от промышленного производства, которое имеется в достаточном количестве в школе. 2. Основная часть

Решая дизайнерскую задачу, предлагаю свой вариант, который мне кажется удобным, дешевым, оригинальным. Схема 2 2.2.Определение дизайнерской задачи Вид соединения Винты Саморезы

Схема 3 Представляю вариант дизайнерского оформления изделия 2.2.Определение дизайнерской задачи Шлифование Покрытие лаком Способы отделки

Обоснование используемых технологий, инструментов и оборудования Для изготовления изделия – складного табурета мне потребуются знания технологии по обработке древесины Из ручных инструментов «необходимы» следующие: 1) разметочные — уголок, линейка, карандаш, штангенциркуль. 2) электролобзик 3) шлифовальная машинка Из станков: 1) сверлильный станок Для предохранения от влаги — масло Все перечисленные материалы, инструменты и станки имеются в наличии в нашей школьной мастерской. Поэтому данное изделие можно изготовить. 2.2.Определение дизайнерской задачи

При изготовлении этого изделия я использовал как ручной деревообрабатывающий инструмент, так и оборудование, такое как сверлильный станок. До начала работы Правильно надеть спецодежду (фартук с нарукавниками или халат, берет или косынку). Проверить надежность крепления защитного кожуха ременной передачи. Проверить надежность соединения защитного заземления (зануления) с корпусом станка. Надежно закрепить сверло в патроне. Проверить работу станка на холостом ходу и исправность пусковой коробки путем включения и выключения кнопки. Прочно закрепить деталь на столе станка в тисках или кондукторах. Запрещается при сверлении незакрепленную деталь поддерживать руками. Надеть защитные очки. 2.3. Техника безопасности

Во время работы Нельзя пользоваться сверлами с изношенными конусными хвостовиками. После того как шпиндель станка набрал полную скорость, сверло к детали подавать плавно, без усилий и рывков. Перед сверлением заготовки необходимо накренить центры отверстий. Деревянные заготовки в месте сверления накалываются шилом. Необходимы особое внимание и осторожность в конце сверления. При выходе сверла из материала заготовки нужно уменьшить подачу. При сверлении крупных деревянных заготовок (деталей) на стол под деталь кладется обрезок или кусок многослойной фанеры. Во избежание травмы в процессе работы на станке запрещается: наклонять голову близко к сверлу; производить работу в рукавицах; класть посторонние предметы на станину станка; смазывать или охлаждать сверло с помощью мокрых тряпок. Для охлаждения сверла нужно пользоваться специальной кисточкой. тормозить руками патрон или сверло; отходить от станка, не выключив его. При прекращении подачи электротока немедленно выключить мотор. Перед остановкой станка необходимо отвести сверло от детали, после чего выключить мотор. 2.3. Техника безопасности

После окончания работы После остановки вращения сверла удалить опилки со станка с помощью щетки. В пазах станочного стола опилки убираются металлическим крючком. Запрещается сдувать опилки ртом или сметать рукой. Отделить сверло от патрона и сдать станок учителю 2.3. Техника безопасности

Источник

Параметрическая модель стула

Введение

Этот материал адресуется лицам, использующим или желающим использовать при работе с 3ds Max язык программирования MAXSript.
В параметрической модели имеется взаимосвязь параметров ее различных компонентов. В такой модели изменение значения одного параметра влечет изменения значений связанных с ним параметров модели. Подобные модели широко применяются в САПР. Примером такой модели в 3ds Max может служить объект Biped (двуногий).
3ds Max позволяет создавать параметрические модели посредством связывания параметров, употребления соответствующих контроллеров и модификаторов (преимущественно параметрических), а также за счет создания соответствующего MAXSript-кода, обеспечивающего пересчет модели при изменении значения управляющего параметра.
Рассмотрим параметрическую модель (рис. 1, а), в которой реализуются следующие зависимости:

spherePosition = conePosition + [0, 0, 1.25 * H],

где
R – радиус сферы;
H – высота конуса;
spherePosition – позиция сферы (координаты ее центра);
conePosition – позиция конуса (координаты центра его основания).

Рис. 1. Параметризованная модель: а – H = 50; б – H = -50

Рассматриваемую модель можно реализовать в 3ds Max несколькими способами. Приведем два из них. В первом употребим контроллеры Float Expression и Position Expression для формирования соответственно первой и второй зависимостей, а во втором – контроллеры Float Script и Position Script.
Создание модели и ее параметризацию средствами контроллеров Float Expression и Position Expression обеспечит следующий код:

delete $*
h = 50
cn = cone radius1:20 radius2:0 height:70 heightSegs:20 sides:24 wireColor:[6, 135, 113]
sph = sphere radius:(0.25 * cn.Height) segs:32 wireColor: [135, 110, 8]
sph.Pos = cn.Pos + [0, 0, 1.25 * cn.Height]
cn.Height.Controller = bezier_float()
fltX = float_expression()
fltX.AddScalarTarget «h» cn.Height.Controller
fltX.SetExpression «abs(0.25 * h)»
sph.Radius.Controller = fltX

pstnX = position_expression()
pstnX.AddScalarTarget «h» cn.Height.Controller
pstnX.AddVectorTarget «ps» cn.Position.Controller
pstnX.SetExpression «ps + [0, 0, 1.25 * h]»
sph.Position.Controller = pstnX
animate on (
at time 0f (cn.Height = h; cn.Pos = [0, 0, 0])
at time 50f (cn.Height = -h; cn.Pos = [0, 0, h])
at time 100f (cn.Height = h; cn.Pos = [0, 0, 0])
)
playAnimation()

Порядок действий следующий:

  1. Сцена очищается, и создаются объекты конус и сфера с именами cn и sph соответственно.
  2. После создания контроллера fltX (применяется конструктор float_expression) в контроллере создается скалярная переменная h, зависящая от высоты конуса (метод AddScalarTarget): значение переменной h будет равняться высоте конуса. Предварительно этому параметру (высоте конуса) назначается контроллер Bezier Float, ссылка на который используется в качестве второго параметра метода AddScalarTarget.
  3. Далее задается выражение (метод SetExpression), результат которого возвращает контроллер fltX.
  4. Параметру сферы Radius назначается контроллер fltX.

Теперь изменение высоты конуса, например на вкладке Modify после выбора конуса, приведет к изменению радиуса сферы.
Для управления позицией сферы используется контроллер Position Expression, программируемый в следующем порядке:

  1. После создания контроллера pstnX (применяется конструктор position_expression) в контроллере создаются скалярная переменная h, зависящая от высоты конуса (метод AddScalarTarget), и векторная переменная ps, зависящая от позиции конуса (метод AddVectorTarget). Как и в случае метода AddScalarTarget, вторым параметром метода AddVectorTarget также является ссылка на контроллер (cn.Position.Controller). Значение переменной ps после установления такой связи будет равно значению позиции конуса (величина типа Point3).
  2. Далее задается выражение (метод SetExpression), результат которого возвращает контроллер pstnX.
  3. Свойству сферы Position назначается контроллер pstnX.
Читайте также:  Кукольная мебель стул своими руками

Наличие такого контроллера обеспечит надлежащее перемещение сферы при изменении позиции конуса.
Для демонстрации результата в точках 0f, 50f и 100f временной шкалы создаются ключи анимации высоты и позиции конуса.
После запуска программы можно открыть диалог настройки контроллера, например Float Expression (рис. 2), выполнив следующие действия: выбрать примитив Sphere – меню Graph Editors – Track View – Curve Editor – ветвь Objects – Sphere01 – Sphere (Object) – Radius – двойной удар мышью.

Рис. 2. Диалог настройки контроллера Float Expression

Порядок запуска MAXScript-кода в 3ds Max описан ниже.
Вторая реализация рассматриваемой модели, основанная на контроллерах Float Script и Position Script, поддерживается следующим кодом:

delete $*
h = 50
cn = cone radius1:20 radius2:0 height:70 heightSegs:20 sides:24 wireColor:clr
sph = sphere radius:(0.25 * cn.Height) segs:32 wireColor:clr2
sph.Pos = cn.Pos + [0, 0, 1.25 * cn.Height]
fltS = float_script()
fltS.AddNode «cn2» cn
fltS.Script = «abs(0.25 * cn2.Height)»
sph.Radius.Controller = fltS

psS = position_script()
psS.AddNode «cn2» cn
psS.Script = «cn2.Pos + [0, 0, 1.25 * cn2.Height]»
sph.Position.Controller = psS
animate on (
at time 0f (cn.Height = h; cn.Pos = [0, 0, 0])
at time 50f (cn.Height = -h; cn.Pos = [0, 0, h])
at time 100f (cn.Height = h; cn.Pos = [0, 0, 0])
)
playAnimation()

В обоих контроллерах определяется переменная cn2 (метод AddNode), хранящая ссылку на объект конус. Это обеспечивает доступ к свойствам конуса, что и используется соответствующим образом в Script-выражениях контроллеров (свойство Script).
С другими возможностями программного управления моделями 3ds Max можно познакомиться, обратившись, например, к приведенным в конце урока источникам.
Рассмотренную модель можно, разумеется, реализовать интерактивно, без применения MAXScript. Следующая модель такой альтернативы не имеет.

Описание модели стула

В рассматриваемом примере регулируемым параметром является радиус скруглений R между отдельными компонентами модели стула. Изменение радиуса влечет изменение высоты ножек стула, размеров его сиденья и спинки (рис. 3).

Рис. 3. Параметризованный стул: а — R = 5; б — R = 15

Модель имеет следующие характеристики:

  1. Радиус всех скруглений одинаков и изменяется с шагом 1 в диапазоне 5 – 15 единиц.
  2. При пересчете модели сохраняются габариты стула, хранимые глобальными переменными wX, wY и wZ, а также размеры и положение задних ножек стула.
  3. Каркас стула воспроизводится цилиндрами и дугами (примитивы Cylinder и Arc); последние используются для отображения скруглений.
  4. Сиденье и списка стула отображаются посредством примитива Plane (плоскость).
  5. Сиденье отстоит от основания стула на 0.5 * wZ.

MAXScript-реализация модели стула

Параметризация модели выполняется средствами MAXScript. Код, обеспечивающий построение и управление моделью, а также создание и вывод управляющего диалога, имеет следующий вид:

global rlFlt
global clr = [6, 135, 113], clr2 = [135, 110, 8]
global wX = 60.0, wY = 45.0, wZ = 120.0
global arrC = #(), arrRc = #()

fn Prps = (
delete $*
units.DisplayType = #Generic
units.SystemType = #Inches
viewport.SetLayout #layout_4
viewport.ActiveViewport = 4
max vpt persp user
viewport.SetGridVisibility 4 false
max tool zoomExtents
backgroundColor = color 200 200 200
)

fn fndPs R wX wY wZ &arrPs = (
x = 0.5 * wX
y = 0.5 * wY
vY = [0, wY, 0]
wZ2 = 0.5 * wZ
p1 = [-x, -y, 0]; p2 = p1 + vY
p3 = [x, -y, 0]; p4 = p3 + vY
p5 = [0, -y, wZ2]; p6 = p5 + vY
p7 = [x, -y, 0.75 * wZ]; p8 = p7 + vY
p9 = [x + 2 * R, 0, wZ]
p10 = [-x, -y, wZ2 — R]
p11 = [x, -y, wZ2 + R]
arrPs = #(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
for k = 1 to 2 do arrC[k].Height = wZ2 — R
for k = 5 to 6 do arrC[k].Height = wX — 2 * R
for k = 7 to 8 do arrC[k].Height = wZ2 — 2 * R
arrC[9].Height = wY — 2 * R
)

fn fndPs2 R wX wY wZ &arrPs2 = (
x = 0.5 * wX
y = 0.5 * wY
vY = [0, wY, 0]
wZ2 = wZ / 2
pc1 = [-x + R, -y, wZ2 — R]; pc2 = pc1 + vY
pc3 = [x — R, -y, wZ2 + R]; pc4 = pc3 + vY
pc5 = [x + R, -y, wZ — R]; pc6 = pc5 + vY
pc7 = [x + R, -y + R, wZ]; pc8 = pc7 + [0, wY — 2 * R, 0]
arrPs2 = #(pc1, pc2, pc3, pc4, pc5, pc6, pc7, pc8)
)

fn mkChr R wX wY wZ = (
Prps()
arrC = for k = 1 to 11 collect cylinder wireColor:clr2 radius:2
arrPs = #()
arrPs2 = #()
fndPs R wX wY wZ &arrPs
fndPs2 R wX wY wZ &arrPs2
arrC[3].Height = arrC[4].Height = sqrt ((0.5 * wX)^2 + (0.5 * wZ)^2)
for k = 10 to 11 do arrC[k].Height = wY
for k = 5 to 9 do arrC[k].Pivot = [0, 0, 0.5 * arrC[k].Height]
for k = 1 to 11 do arrC[k].Pos = arrPs[k]
for k = 3 to 4 do rotate arrC[k] -(atan (1.0 * wX / wZ)) [0, 1, 0]
for k = 5 to 6 do rotate arrC[k] 90 [0, 1, 0]
for k = 9 to 11 do rotate arrC[k] -90 [1, 0, 0]
rc = arc radius:R from:0 to:90 pie:off reverse:off pos:[0, 0, 0] \
rotation:(quat -0.5 0.5 -0.5 -0.5) wireColor:clr2 \
render_renderable:on render_displayRenderMesh:on render_useViewportSettings:off \
render_mapcoords:on render_displayRenderSettings:off render_viewport_thickness:4.0 \
render_thickness:4.0
arrRc = for k = 1 to 7 collect copy rc
arrRc.WireColor = clr2
arrRc[6].Rotation = quat 0 0 -0.707107 0.707107
arrRc[7].Rotation = quat 0 0 0 1
insertItem rc arrRc 1
arrNg = #(0, 0, 180, 180, 0, 0, 0, 0)
for k = 1 to 8 do (
rotate arrRc[k] arrNg[k] [0, 1, 0]
arrRc[k].Pos = arrPs2[k]
)
max tool zoomExtents
global pln = plane length:wY width:(wX — R) lengthSegs:1 widthSegs:1 \
pos:[0, 0, wZ / 2] wireColor:clr
p = arrPs[7]; p[2] = 0
global pln2 = plane length:wY width:(wZ / 2 — 2 * R) lengthSegs:1 widthSegs:1 \
pos:p wireColor:clr
rotate pln2 -90 [0, 1, 0]
)

fn chgChr R wX wY wZ = (
for k = 1 to 2 do arrC[k].Height = 0.5 * wZ — R
for k = 5 to 6 do arrC[k].Scale = [1, 1, (wX — 2 * R) / arrC[5].Height]
for k = 7 to 8 do arrC[k].Scale = [1, 1, (0.5 * wZ — 2 * R) / arrC[7].Height]
arrC[9].Scale = [1, 1, (wY — 2 * R) / arrC[9].Height]
arrC[9].Pos = [0.5 * wX + 2 * R, 0, wZ]
arrC[10].Pos = [-0.5 * wX, -0.5 * wY, 0.5 * wZ — R]
arrC[11].Pos = [0.5 * wX, -0.5 * wY, 0.5 * wZ + R]
arrPs2 = #()
fndPs2 R wX wY wZ &arrPs2
for k = 1 to 8 do arrRc[k].Pos = arrPs2[k]
arrRc.Radius = R
pln.Width = wX — 2 * R
pln2.Width = 0.5 * wZ — 2 * R
)

rollout rChr «Chair» width:120 height:100 (
spinner spnR «R » pos:[15,5] width:100 height:20 range:[5,15,1] type:#integer
colorPicker theClr «Color » pos:[15,30] width:100 height:20 color:clr modal:true
button btnNmt «Animation» pos:[15,55] width:100 height:20 toolTip:»Play animation»
button btnCls «Close» pos:[15,80] width:100 height:20 toolTip:»Close Dialog»
on spnR changed val do chgChr val wX wY wZ
on theClr changed newClr do (
clr = newClr
pln.WireColor = newClr
pln2.WireColor = newClr
)
on btnNmt pressed do (
animationRange = interval 0f 100f
timeConfiguration.PlaybackLoop = false
with redraw off (
animate on (
at time 0f chgChr spnR.Range[1] wX wY wZ
at time 50f chgChr spnR.Range[2] wX wY wZ
at time 100f chgChr 10 wX wY wZ
)
)
max tool zoomExtents
playAnimation()
with redraw off (
sliderTime = 0f
chgChr 10 wX wY wZ
)
spnR.Value = 10
)
on btnCls pressed do closeRolloutFloater rlFlt
)

function opnRlFlt = (
if rlFlt != undefined then closeRolloutFloater rlFlt
rlFlt = newRolloutFloater «Chair» (rChr.Width + 35) (rChr.Height + 35) 50 50
addRollout rChr rlFlt rolledUp:false
rChr.spnR.Value = 10
)

mkChr 10 wX wY wZ
opnRlFlt()

Читайте также:  Как сделать чтобы колеса стула не царапали ламинат

Запуск программы

Запуск программы выполняется в 3ds Max в следующем порядке:

  1. Открыть редактор кода (меню MAXScript – MAXScript Editor).
  2. Перейти в открывшийся диалог и при необходимости создать новую вкладку (Ctrl + N).
  3. Скопировать код, приведенный в уроке, в чистую вкладку редактора.
  4. Позиционироваться в любом месте скопированного кода и нажать Ctrl + E, либо воспользоваться меню редактора Tools – Evaluate All.
  5. Употребить появившийся диалог (рис. 4) для управления моделью стула, которая отобразится в сцене непосредственно перед открытием диалога.

Рис. 4. Управляющий диалог Chair

Описание программы

Построение стула обеспечивает функция mkChr, которая принимает в качестве параметров значения радиуса скруглений, длину, ширину и высоту стула – это соответственно параметры R, wX, wY и wZ. Стул состоит из 11 цилиндров (примитив Cylinder), 8 дуг (примитив Arc) и двух плоскостей (примитив Plane). Последние употребляются для отображения сиденья и спинки стула.
Переменные wX, wY и wZ объявлены как глобальные, что позволяет применять их в обработчике on btnNmt pressed управляющего диалога Chair (идентификатор rChr).
Цилиндры хранит массив arrC; номера цилиндров, то есть их индексы в массиве arrC, показаны на рис 5, а.

Рис. 5. Нумерация компонентов модели стула: а – нумерация цилиндров; б – нумерация дуг

Дуги хранятся в массиве arrRc; их индексы в этом массиве показаны на рис. 5, б.
Плоскости для сиденья и спинки имеют в программе соответственно идентификаторы pln и pln2. Эти имена являются глобальными и поэтому доступны в обработчиках диалога Chair.
Перед построением модели функцией Prps удаляются все элементы сцены и устанавливаются требуемые параметры сеанса – это тип единиц измерения, число видовых портов (4), активный видовой порт (4) и его тип (Perspective). Кроме того, в этом видовом порте устраняется изображение сетки и выполняется команда max tool zoomExtents.
Координаты базовых точек цилиндров и дуг вычисляются соответственно функциями fndPs и fndPs2, принимающими вдобавок к параметрам R, wX, wY и wZ соответственно массивы arrPs и arrPs2. В эти массивы названные функции записывают необходимые для построения примитивов координаты их базовых точек. Нумерация базовых точек отвечает показанным на рис. 5 нумерациям цилиндров и дуг.
Параметризация модели обеспечивается функцией chgChr, которая вызывается обработчиком on spnR changed при изменении счетчика R (spinner spnR) диалога Chair. Также эта функция применяется при создании ключей анимации (кнопка Animation диалога Chair).
Функция принимает параметры R, wX, wY и wZ. Параметр R является изменяемым, и его значение берется равным показанию счетчика R диалога. Прочие параметры после запуска программы не изменяются.
Получив новое значение радиуса, функция chgChr:

  • изменяет высоту цилиндров 1 и 2 (свойство Height цилиндра);
  • соответствующим образом масштабирует цилиндры 5 – 9 (свойство Scale цилиндра);
  • изменяет положение цилиндров 9, 10 и 11 (свойство Pos цилиндра), смещая позицию цилиндров 10 и 11 в начало, а цилиндр 9 в конец соответствующих дуг модели;
  • изменяет координаты центра каждой дуги (свойство Pos дуги); для этой цели, как и при создании модели, выполняется обращение к функции fndPs2;
  • изменяет значение радиуса каждой дуги (свойство Radius дуги);
  • модифицирует ширину сиденья и спинки (свойство Width плоскостей pln и pln2).

В рассматриваемой модели масштабирование цилиндра будет вызывать надлежащий эффект, если базовая точка цилиндра (свойство Pivot) расположена в его центре, а не в центре основания, как это предусмотрено по умолчанию. Эта проблема решается при создании модели функцией mkChr за счет употребления следующего кода:

for k = 5 to 9 do arrC[k].Pivot = [0, 0, 0.5 * arrC[k].Height]

Таким образом, функция chgChr обеспечивает получение экземпляра модели, отвечающего принятому функцией значению радиуса скругления R. Все преобразования выполняются исходя из неизменности габаритов стула и положения его сиденья. Единственными неизменяемыми компонентами модели являются цилиндры 3 и 4, отображающие задние ножки стула.
Кроме обработчика on spnR changed, вызываемого при изменении показания счетчика R, диалог Chair (см. рис. 4) содержит обработчики on theClr changed, on btnNmt pressed и on btnCls pressed do, выполняемые соответственно при нажатии на полосу с цветом (элемент colorPicker), на кнопку Animation (элемент button btnNmt) и Close (элемент button btnCls).
Ключи анимации рассчитываются в точках 0f, 50f и 100f временной шкалы после нажатия на кнопку Animation диалога Chair: выполняется обработчик on btnCls pressed do, в котором трижды вызывается функция chgChr. После воспроизведения анимации (метод playAnimation) временная шкала устанавливается в точку 0f и вновь вызывается функция chgChr со значением параметра R, равным 10. Это обеспечивает появление начального образа стула. Это же значение радиуса скругления устанавливается и в счетчике R диалога (spnR.Value = 10).

Заключение

Параметрические модели требуют дополнительных издержек при их создании. Поэтому вопрос о целесообразности параметризации модели решается с учетом предполагаемых выгод.
Издержки связаны с необходимостью:

  • структуризации модели и сохранения в ней параметров, влияющих на ее геометрию;
  • поиска зависимостей между параметрами;
  • реализации этих зависимостей (как правило, с привлечением MAXScript).

Основной эффект параметризации – это возможность получения модифицированного экземпляра модели, за счет изменения небольшого числа параметров. Так, параметрическая модель кузова автомобиля может обеспечить пересчет всех компонентов кузова при изменении геометрии двери или иной части кузова.
Также параметрические модели несложно снабдить надлежащим, более удобным пользовательским интерфейсом, обеспечивающим управление отдельными параметрами модели и, значит, моделью в целом.
Кроме того, параметризация предоставляет дополнительные возможности для анимации модели, что, в частности, существенно при создании мультимедийных приложений.

Источник

Adblock
detector