if WeldShapes != undefined do destroyDialog WeldShapes
rollout WeldShapes "WeldShapes" width:126 height:72
(
button CornerVerts "CornerVerts" pos:[8,40] width:74 height:22 toolTip:"Set corner type for all vertices"
on CornerVerts pressed do undo on
(
for s in selection where superclassof s == shape do (
for ss=1 to numsplines s do (
for sss=1 to numKnots s ss do
(
setKnotType s ss sss #corner
)
)
updateshape s
)
)
)
createdialog WeldShapes width:126
МакетерВсем привет! не работает undo on, прошу совета
Если сплайны являются уникальными и они не имеют модификаторов, тогда попробуйте такой вариант:
if WeldShapes != undefined do destroyDialog WeldShapes
rollout WeldShapes "WeldShapes" width:126 height:72
(
button CornerVerts "CornerVerts" pos:[8,40] width:74 height:22 toolTip:"Set corner type for all vertices"
on CornerVerts pressed do undo on
(
for s in selection where superclassof s == shape do (
converttosplineshape s
for ss=1 to numsplines s do (
for sss=1 to numKnots s ss do
(
setKnotType s ss sss #corner
)
)
updateshape s
)
)
)
createdialog WeldShapes width:126
Как сохранить другой вид скриптов mse , точнее они нужны на панельки но не в modifer list , попробовал из туда закинуть, при открытие макса, все скрипты выскакивают сами
Пользовался на днях сервисамиработы с планировками и дизайномквартир. (не поймите как рекламу: Сервисы перечислил для того, может что упустил)
Ни один из сервисов не понравился, т.к. нет там режима сборки помещений из типовых панелей (где все окна/двери уже расчитаны и под розетки дырки). До этого создал максимально приближённую модель своей квартиры в Sim 3 (ссылку на youtube не даю здесь) (обои, пол, стены - максимально по дизайну близки к реалиям) (сами 2 сима жить не могут там: тесно! но мы же живём семером!).
Решил я воспользоваться 3D-Max очередной раз (до этого я тупо рисовал сплайн нашей квартиры и выдавливал стены по нему) уже серъёзно: из типовым Ж/Б-плит. (встроенная стена не подходит - типовушности СССР квартир не даёт).
Всё бы хорошо, но никак не выгугливается решение задачи: Как совместить, скажем, два бокса, один - с лицевыми сторонами, второй - вывернутый наизнанку.
В скрипте пока написал два режима: Из готовых стандартных боксов и из собственной мэши.
1. Собственная мэш очень сильно грешит треугольниками при некоторых ракурсах (бликует или затеняется) и портит текстуру стены;
2. Боксы очень неверно сливаются и не дают нужного результата.
Что должно получиться: Двусторонняя стена для дальнейщей возможности применить к ней 2-side material (одни обои на стороне в одну комнату, другие обои - для другой комнаты).
Розетка-Выключатель
plugin simpleObject ApartmentDesign
classID:#(0x77B10BDB, 0x1AB51BB7)
category:"Wall Accessuars"
name:"Switch" (
fn transformMesh theTriMesh theMatrix = (
for v = 1 to theTriMesh.numverts do (
setVert theTriMesh v ((getVert theTriMesh v) * theMatrix)
)
theTriMesh
)
parameters main rollout:params (
lamp1 type:#node ui:light1
lamp2 type:#node ui:light2
lamp3 type:#node ui:light3
)
fn light_filt obj = isKindOf obj light
rollout params "Parameters" (
group "Switches && Lights" (
label lab1 "Pick the lights You are needed"
pickbutton light1 "Pick" filter:light_filt autodisplay:true across:3
pickbutton light2 "Pick" filter:light_filt autodisplay:true
pickbutton light3 "Pick" filter:light_filt autodisplay:true
)
on light1 rightclick do (lamp1 = lamp2; lamp2 = lamp3; lamp3 = $Omni_Light)
on light2 rightclick do (lamp2 = lamp3; lamp3 = $Omni_Light)
on light3 rightclick do lamp3 = $Omni_Light
)
on buildMesh do (
local lamps = #()
local hole, body = createInstance box length:2.0 width:6.4 height:6.4
local offset = 0.1
if isValidNode lamp1 then append lamps lamp1
if isValidNode lamp2 then append lamps lamp2
if isValidNode lamp3 then append lamps lamp3
if lamps.count == 0 then (
hole = createInstance torus radius_1:1.6 radius_2:0.3 sliceOn:1 slice_From:-80 slice_To:80
offset = 3.2
) else (
hole = createInstance box length:1.8 width:6.2 height:6.2
for i = 1 to lamps.count do (
pad = createInstance box width:(5.9 / lamps.count) length:1.0 height:6.0
pad_mesh = transformMesh pad.mesh (transmatrix [0, 0, -3.0])
rotate pad_mesh (eulerangles (if lamps[i].enabled then -5 else 5) 0 0)
pad_mesh = transformMesh pad_mesh (transmatrix [6.0 / lamps.count * (i - 1) - (3.0 - 3.0 / lamps.count), -0.8, 3.2])
if i > 1 then
mesh += pad_mesh
else
mesh = pad_mesh
free pad
)
)
mesh += (body.mesh - transformMesh hole.mesh (transmatrix [0, -0.5, offset]))
free hole
free body
)
tool create (
on mousePoint click do
case click of (
1: nodeTM.translation = gridPoint
2: #stop
)
)
)
Та же беда: Проявление треугольников на поверхности розетки в местах отверстий.
(если нажимать кнопки и указывать на лампы - розетка станет выключателем (до трёх позиций), реагирующим на параметр On лампы)
Вопросы:
1. Как побороть проблему с треугольностью текстур на стене?
2. Как совместить два бокса: Нормальный и вывернутый?
P.S.: Как видите из интерфейса, ограничений уйма: Длина стены - до 8м, высота - до 5м, толшина - до 50см (прикинул из стандартов ЖБИ).
Помогите, не работает макс скрипт, запускаю через ран скрипт и ничего не происходит, ноль внимания, ни один скрипт не работает. мак 2013-й, переустонавливал не помогает, устонавливал 2014-й та же история, что происходит ?
Александр ТюрюминПомогите, не работает макс скрипт, запускаю через ран скрипт и ничего не происходит, ноль внимания, ни один скрипт не работает. мак 2013-й, переустонавливал не помогает, устонавливал 2014-й та же история, что происходит ?
Назначь скрипту горячую клавишу.
Или открой нужный скрипт MAXScript > Open Script... Выдели текст скрипта и перенеси его на тулбар, появится кнопка, при нажатии всё должно работать.
Что за скрипт хоть?
Народ, нужна помощь.
В Custom User Interface назначил горячую клавишу на команду Bridge в группе Editable Poly, но она почему-то не срабатывает.
Занёс эту команду отдельно в скрипт и всё заработало, но находится он теперь в группе MainUI. Как сделать так, чтобы этот скрипт лежал в группе Editable Poly?
Надо было мне уточнить, она срабатывает, но в этом случае кнопка Bridge зажимается и чтобы соединить рёбра мостом необходимо тянуть от одного ребра до другого, а скрипт сразу соединяет выбранные рёбра.
Добрый вечер, форумчане
подскажите как макс скриптом изменять координаты костного рига для анимации?
Имеется изменение координат узловых точек мокапа человека, соответствующих
точкам сгиба конечностей рига.
Каким образом можно передавать этот массив данных в макс ?
изменение данных 30 раз в секунду
Какой тип передачи данных в 3ds max может использоваться в этом случае?
BelprofИмеется изменение координат узловых точек мокапа человека, соответствующих
точкам сгиба конечностей рига.
Предоставьте файл с массивом данных, если можно.
Каким образом вы получили этот массив данных?
Изменения координат являются абсолютными или относительными?
Сколько узловых точек изменяют свои координаты?
Каким образом можно передавать этот массив данных в макс ?
изменение данных 30 раз в секунду
это должно быть в реальном времени
Может быть лучше создавать ключи анимации в каждом кадре для точках сгиба конечностей рига, а потом масштабировать ключи?
Сколько секунд длится анимация?
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Skap
Skap
igorznag
Макетер
igorznag
Макетер
И где можно почитать более подробнее, чем в хелпе про thehold?
Роман Марк (Дефсток)
Maxis
Роман Марк (Дефсток)
Роман Марк (Дефсток)
Paguo-86PK
Ни один из сервисов не понравился, т.к. нет там режима сборки помещений из типовых панелей (где все окна/двери уже расчитаны и под розетки дырки). До этого создал максимально приближённую модель своей квартиры в Sim 3 (ссылку на youtube не даю здесь) (обои, пол, стены - максимально по дизайну близки к реалиям) (сами 2 сима жить не могут там: тесно! но мы же живём семером!).
Решил я воспользоваться 3D-Max очередной раз (до этого я тупо рисовал сплайн нашей квартиры и выдавливал стены по нему) уже серъёзно: из типовым Ж/Б-плит. (встроенная стена не подходит - типовушности СССР квартир не даёт).
Код скрипта генерации стены
unRegisterRedrawViewsCallback showObjectNames fn showObjectNames = ( gw.setTransform(Matrix3 1) for o in objects where not o.isHidden do ( local t = StringStream "" format "%d\n%\n%" o.pos.x o.pos.y o.pos.z to:t gw.text o.pos (o.name) color:yellow gw.text (o.pos+[0,0,-2]) (t) color:yellow ) -- gw.text [0,0,0] (viewport.GetTM() as string) color:green gw.Polyline #([0,0,0],[200,0,0],[200,100,0],[0,100,0]) true gw.enlargeUpdateRect #whole gw.updateScreen() ) -- registerRedrawViewsCallback showObjectNames -- showObjectNames() fn transformMesh theTriMesh theMatrix = ( for v = 1 to theTriMesh.numverts do ( setVert theTriMesh v ((getVert theTriMesh v)*theMatrix) ) theTriMesh ) plugin simpleObject ConcreteMaker name:"Concrete" classID:#(0x77B10BDB, 0x1AB51BB7) category:"Model Apartment" ( parameters main rollout:params ( mode type:#boolean ui:mode default:true side type:#boolean ui:side default:true depth type:#worldunits ui:depth default:0.25 length type:#worldunits ui:length default:3.00 height type:#worldunits ui:height default:3.00 width type:#worldunits ui:width default:0.30 door_width type:#worldunits ui:door_width default:0.90 door_height type:#worldunits ui:door_height default:2.00 door_seek type:#integer ui:door_seek default:30 view_width type:#worldunits ui:view_width default:60.0 view_height type:#worldunits ui:view_height default:60.0 view_seek type:#integer ui:view_seek default:60 log_x type:#worldunits ui:log_x log_y type:#worldunits ui:log_y log_z type:#worldunits ui:log_z ) rollout params "Parameters" ( local m = viewport.GetFOV() checkbox mode "Base (Mesh/Box) " type:#boolean fieldwidth:60 checkbox side "Two sided " type:#boolean fieldwidth:60 spinner depth "Floor depth " type:#worldunits range:[0.1, 0.5, 0.25] fieldwidth:60 group "Wall" ( spinner length "Wall Length " type:#worldunits range:[0.1, 8.0, 3.0] fieldwidth:60 spinner height "Wall Height " type:#worldunits range:[0.1, 5.0, 3.0] fieldwidth:60 spinner width "Wall Width " type:#worldunits range:[0.1, 0.50, 0.30] fieldwidth:60 ) group "Door" ( spinner door_width "Door Width " type:#worldunits range:[0.1, 9.0, 0.90] fieldwidth:60 spinner door_height "Door Height " type:#worldunits range:[0.1, 10.0, 2.0] fieldwidth:60 slider door_seek "Door Place " type:#integer range:[0, 100, 30] fieldwidth:60 ) group "Window" ( spinner view_width "Window Width " type:#worldunits range:[0.1, 9.0, 0.75] fieldwidth:60 spinner view_height "Window Height " type:#worldunits range:[0.1, 10.0, 3.0] fieldwidth:60 slider view_seek "Window Place " type:#integer range:[0, 100, 50] fieldwidth:60 ) spinner log_x "User X " type:#worldunits range:[-999999,99999,0] fieldwidth:60 spinner log_y "User Y " type:#worldunits range:[-999999,99999,0] fieldwidth:60 spinner log_z "User Z " type:#worldunits range:[-999999,99999,0] fieldwidth:60 materialbutton mat1 "Forward surface" materialbutton mat2 "Backward surface" ) on buildMesh do ( if door_height > (height - depth) do door_height = height - depth if door_width > (length - width) do door_width = (length - width) local hl = length / 2 -- half wall length local hw = width / 2 -- half wall width local hd = door_width / 2 -- half door width local hv = view_width / 2 -- half view width local dp = -hl + (length - door_width) * door_seek / 100 + hd -- door pos local vp = -hl + (length - view_width) * view_seek / 100 + hv -- view pos if mode then ( local wall = createInstance box length:(width / 2) width:length height:(height + depth) local door = createInstance box length:(width / 2) width:door_width height:door_height local view = createInstance box length:(width / 2) width:view_width height:view_height local msh msh = transformMesh wall.mesh (transmatrix [0,0,-depth]) msh -= transformMesh door.mesh (transmatrix [dp,0,0]) msh -= transformMesh view.mesh (transmatrix [vp,0,door_height - view_height]) mesh = transformMesh msh (transmatrix [0,width,0]) -- mesh = transformMesh mesh (transmatrix [0,width / 2,0]) -- wall.mesh = transformMesh wall.mesh (transmatrix [0,-width / 4,-depth]) -- wall.mesh -= transformMesh door.mesh (transmatrix [dp,-width / 2,0]) -- wall.mesh -= transformMesh view.mesh (transmatrix [vp,-width / 2,door_height - view_height]) if side then ( meshop.flipNormals msh #{1..mesh.numFaces} meshop.attach mesh msh -- mesh += transformMesh msh (transmatrix [0,-width * 2,0]) ) free wall free door free view return mesh ) else ( -- .3........5 -- ...13..15.. -- ... -- ...11..17.. -- .1........7 local v = #( [-hl, -hw,depth], [-hl, -hw,door_height], [dp-hd-1,-hw,door_height], [dp-hd-2,-hw,depth] ) local f = #([0,2,1],[0,3,2]) setMesh mesh \ verts:#( /* 1 2*/ [-hl, -hw,-depth], [-hl, hw,-depth], /* 3 4*/ [-hl, -hw,height], [-hl, hw,height], /* 5 6*/ [hl, -hw,height], [hl, hw,height], /* 7 8*/ [hl, -hw,-depth], [hl, hw,-depth], /* 9 10*/ [0,0,0],[0,0,0], /*11 12*/ [dp-hd,-hw, 0], [dp-hd, hw, 0], /*13 14*/ [dp-hd,-hw,door_height], [dp-hd, hw,door_height], /*15 16*/ [dp+hd,-hw,door_height], [dp+hd, hw,door_height], /*18 18*/ [dp+hd,-hw, 0], [dp+hd, hw, 0] ) \ faces:#( [11,1,7],[11,7,17],[11,17,18], [13,1,11],[13,3,1],[13,11,12], [15,5,3],[15,3,13],[15,13,14], [17,7,5],[17,5,15],[17,15,16] ) -- materialIDs:#(1,2) ) -- meshop.flipNormals mesh #{1..mesh.numFaces} -- print mesh.numFaces return (mesh) setMesh mesh \ verts:#( \ [-hl, -hw,-depth], [-hl, hw,-depth], -- 1 2 [-hl, -hw,height], [-hl, hw,height], -- 3 4 [hl, -hw,height], [hl, hw,height], -- 5 6 [hl, -hw,-depth], [hl, hw,-depth], -- 7 8 [0,0,0],[0,0,0], [dp-hd,-hw,-depth], [dp-hd, hw,-depth], -- 11 12 [dp-hd,-hw,height], [dp-hd, hw,height], -- 13 14 [dp+hd,-hw,height], [dp+hd, hw,height], -- 15 16 [dp+hd,-hw,-depth], [dp+hd, hw,-depth], -- 17 18 [0,0,0],[0,0,0], [dp-hd,-hw, 0], [dp-hd, hw, 0], -- 21 22 [dp-hd,-hw,door_height], [dp-hd, hw,door_height],-- 23 24 [dp+hd,-hw,door_height], [dp+hd, hw,door_height],-- 25 26 [dp+hd,-hw, 0], [dp+hd, hw, 0] -- 27 28 ) \ faces:#( \ [1,11,13], [1,13,3], -- Left front [11,17,27], [11,27,21], -- Bottom front [23,25,15], [23,15,13], -- Upper front [25,24,26], [25,23,24], -- Upper entry [17,7,5], [17,5,15], -- Right front [2,12,14], [2,14,4], -- Left back [12,18,28], [12,28,22], -- Bottom back [24,26,16], [24,16,14], -- Upper back [18,8,6], [18,6,16], -- Right back [22,21,27], [22,27,28], -- Bottom entry [21,24,23], [21,22,24], -- Left entry [25,28,27], [25,26,28] -- Right entry ) \ smooth:false -- extrudeFace mesh #{1..8} width 100 dir:#common ) tool create ( on mousePoint click do case click of ( 1: nodeTM.translation = gridPoint 4: #stop ) on mouseMove click do case click of ( 2: ( log_x = gridDist.x; log_y = gridDist.y; log_z = gridDist.z length = abs gridDist.x if length > 10 then length = 10 height = abs gridDist.z if height > 5 then height = 5 door_height = height * 0.75 view_height = door_height / 2 door_width = length / 8 view_width = door_width ) 3: ( log_x = gridDist.x; log_y = gridDist.y; log_z = gridDist.z door_width = abs gridDist.x if door_width > 10 then door_width = 10 door_height = abs gridDist.y if door_height >= height - 0.5 then door_height = height - 0.5 view_height = door_height / 2 ) 4: ( log_x = gridDist.x; log_y = gridDist.y; log_z = gridDist.z -- door_width = abs gridDist.y if door_width > 10 then door_width = 10 door_seek = abs gridDist.x if door_seek > 100 then door_seek = 100 ) ) ) )Всё бы хорошо, но никак не выгугливается решение задачи: Как совместить, скажем, два бокса, один - с лицевыми сторонами, второй - вывернутый наизнанку.
В скрипте пока написал два режима: Из готовых стандартных боксов и из собственной мэши.
1. Собственная мэш очень сильно грешит треугольниками при некоторых ракурсах (бликует или затеняется) и портит текстуру стены;
2. Боксы очень неверно сливаются и не дают нужного результата.
Что должно получиться: Двусторонняя стена для дальнейщей возможности применить к ней 2-side material (одни обои на стороне в одну комнату, другие обои - для другой комнаты).
Розетка-Выключатель
plugin simpleObject ApartmentDesign classID:#(0x77B10BDB, 0x1AB51BB7) category:"Wall Accessuars" name:"Switch" ( fn transformMesh theTriMesh theMatrix = ( for v = 1 to theTriMesh.numverts do ( setVert theTriMesh v ((getVert theTriMesh v) * theMatrix) ) theTriMesh ) parameters main rollout:params ( lamp1 type:#node ui:light1 lamp2 type:#node ui:light2 lamp3 type:#node ui:light3 ) fn light_filt obj = isKindOf obj light rollout params "Parameters" ( group "Switches && Lights" ( label lab1 "Pick the lights You are needed" pickbutton light1 "Pick" filter:light_filt autodisplay:true across:3 pickbutton light2 "Pick" filter:light_filt autodisplay:true pickbutton light3 "Pick" filter:light_filt autodisplay:true ) on light1 rightclick do (lamp1 = lamp2; lamp2 = lamp3; lamp3 = $Omni_Light) on light2 rightclick do (lamp2 = lamp3; lamp3 = $Omni_Light) on light3 rightclick do lamp3 = $Omni_Light ) on buildMesh do ( local lamps = #() local hole, body = createInstance box length:2.0 width:6.4 height:6.4 local offset = 0.1 if isValidNode lamp1 then append lamps lamp1 if isValidNode lamp2 then append lamps lamp2 if isValidNode lamp3 then append lamps lamp3 if lamps.count == 0 then ( hole = createInstance torus radius_1:1.6 radius_2:0.3 sliceOn:1 slice_From:-80 slice_To:80 offset = 3.2 ) else ( hole = createInstance box length:1.8 width:6.2 height:6.2 for i = 1 to lamps.count do ( pad = createInstance box width:(5.9 / lamps.count) length:1.0 height:6.0 pad_mesh = transformMesh pad.mesh (transmatrix [0, 0, -3.0]) rotate pad_mesh (eulerangles (if lamps[i].enabled then -5 else 5) 0 0) pad_mesh = transformMesh pad_mesh (transmatrix [6.0 / lamps.count * (i - 1) - (3.0 - 3.0 / lamps.count), -0.8, 3.2]) if i > 1 then mesh += pad_mesh else mesh = pad_mesh free pad ) ) mesh += (body.mesh - transformMesh hole.mesh (transmatrix [0, -0.5, offset])) free hole free body ) tool create ( on mousePoint click do case click of ( 1: nodeTM.translation = gridPoint 2: #stop ) ) )Та же беда: Проявление треугольников на поверхности розетки в местах отверстий.(если нажимать кнопки и указывать на лампы - розетка станет выключателем (до трёх позиций), реагирующим на параметр On лампы)
Вопросы:
1. Как побороть проблему с треугольностью текстур на стене?
2. Как совместить два бокса: Нормальный и вывернутый?
P.S.: Как видите из интерфейса, ограничений уйма: Длина стены - до 8м, высота - до 5м, толшина - до 50см (прикинул из стандартов ЖБИ).
Спасибо.
Вложения
Александр Тюрюмин
KoL'T
Или открой нужный скрипт MAXScript > Open Script... Выдели текст скрипта и перенеси его на тулбар, появится кнопка, при нажатии всё должно работать.
Что за скрипт хоть?
KoL'T
В Custom User Interface назначил горячую клавишу на команду Bridge в группе Editable Poly, но она почему-то не срабатывает.
Занёс эту команду отдельно в скрипт и всё заработало, но находится он теперь в группе MainUI. Как сделать так, чтобы этот скрипт лежал в группе Editable Poly?
Сам скрипт:
macroScript Bridge
category: "Editable Polygon Object"
tooltip: "Bridge"
(
$.EditablePoly.Bridge ()
)
Royal Ghost
KoL'T
KoL'T
Belprof
подскажите как макс скриптом изменять координаты костного рига для анимации?
Имеется изменение координат узловых точек мокапа человека, соответствующих
точкам сгиба конечностей рига.
Каким образом можно передавать этот массив данных в макс ?
изменение данных 30 раз в секунду
Какой тип передачи данных в 3ds max может использоваться в этом случае?
Belprof
это должно быть в реальном времени,
и точки сгиба могут быть привязаны к хелперам,
если прямое назначение координат не предусмотрено
igorznag
Каким образом вы получили этот массив данных?
Изменения координат являются абсолютными или относительными?
Сколько узловых точек изменяют свои координаты?
Это можно сделать с помощью функций FileStream: openFile, readValue, readLine.
Пример: Read Geometry Data From Text File - Part One
Может быть лучше создавать ключи анимации в каждом кадре для точках сгиба конечностей рига, а потом масштабировать ключи?
Сколько секунд длится анимация?