Доброго времени суток!
Не подскажите, можно ли в 3Ds Max создавать макросы? Как в фотошопе actions. Начал читать документацию по MaxScript, но пока глуховато.
У меня есть очень много файлов в формате *.step.
Импорт файла, выделить объект, применить модификатор Slice. Затем экспорт с любым названием.
Может у кого была похожая ситуация.
Спасибо.
Пока продвинулся не намного.
Применяю addmodifier myBox (sliceModifier()), теперь нужно выбрать параметр RemoveTop, но когда пишу
sliceModifier.Slice_Type=3 выходит ошибка
cherepushkaно когда пишу
sliceModifier.Slice_Type=3 выходит ошибка
myBox.modifiers[#Slice].Slice_Type = 2
Для "Remove Top" значение "2" так-как нумерация режимов идёт с нуля.
Похоже макс не умеет экспортировать в step, по этому в примере будет экспорт в obj
(
local src_files = getFiles "C:\models\*.step"
local save_dir = "C:\models\slice\\"
for f in src_files do
(
resetMaxFile #noPrompt
importFile f #noPrompt
for o in geometry do
(
addModifier o (SliceModifier slice_type:2)
)
exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
)
)
Владислав Бодюл( local src_files = getFiles "C:\models\*.step" local save_dir = "C:\models\slice\\" for f in src_files do ( resetMaxFile #noPrompt importFile f #noPrompt for o in geometry do ( addModifier o (SliceModifier slice_type:2) ) exportFile (save_dir + (getFileNameFile f) + ".obj"😉 #noPrompt ) )
Добрый день, а каким образом можно перечислять свойства у модификатора <Mirror>.?
Делаю так, но ничего не случается
addModifier obj (MirrorModifier mirror_axis:1
copy:true
Mirror_Offset:100
)
И можно ли каким-нибудь образом значение Mirror_Offset сделать как-то автоматом что ли, чтобы фигура зеркально отобразилась рядом с первоисточником?
Спасибо большое за помощь новичку.
А почему я не могу сделать так - применить два модификатора к объекту?
local src_files = getFiles "C:\models\*.step"
local save_dir = "C:\models\slice\\"
for f in src_files do
(
resetMaxFile #noPrompt
importFile f #noPrompt
for o in geometry do
(
addModifier o (SliceModifier slice_type:2)
addModifier o (Mirror mirror_axis:1 copy:true Mirror_Offset😮ffset)
)
(
local src_files = getFiles "C:\models\*.step"
local save_dir = "C:\models\slice\\"
for f in src_files do
(
resetMaxFile #noPrompt
importFile f #noPrompt
for o in geometry do
(
addModifier o (SliceModifier slice_type:2)
addModifier o (Mirror mirror_axis:1 copy:true Mirror_Offset:ffset)
)
exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
)
)
Спасибо.
Вот вставил, там и стоял двойной бэкслэш.
Но я хотел узнать, почему два модификатора нельзя использовать.
(
local src_files = getFiles "C:\models\*.step"
local save_dir = "C:\models\slice\\"
for f in src_files do
(
resetMaxFile #noPrompt
importFile f #noPrompt
for o in geometry do
(
addModifier o (SliceModifier slice_type:2)
currentTransform = obj.transform
obj.transform *= inverse currentTransform
offset = obj.max.y * 2
obj.transform = currentTransform
addModifier o (Mirror mirror_axis:1 copy:true Mirror_Offset:offset)
)
exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
)
)
(
local src_files = getFiles "C:\models\*.step"
local save_dir = "C:\models\slice\\"
for f in src_files do
(
resetMaxFile #noPrompt
importFile f #noPrompt
for o in geometry do
(
addModifier o (SliceModifier slice_type:2)
currentTransform = o.transform
o.transform = matrix3 1
offset = o.max.y * 2.0
o.transform = currentTransform
--resetXForm o
addModifier o (Mirror mirror_axis:1 copy:true offset:offset)
)
exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
)
)
Если отзеркаленая копия объекта будет находится слишком далеко (у меня такое случалось с некоторыми объектами), тогда нужно применить ResetXForm. Для этого необходимо раскомментировать эту строку:
УРАААААА, Заработало! Спасибо, Спасибо, Спасибо и еще раз Спасибо.
Владислав, скажите пожалуйста, Вы учились по справке?
В справке нет примеров - это меня расстраивает. В коде всё понятно, но вот эта строчка до меня не доходит
o.transform = matrix3 1
Я сейчас углубляюсь в процесс и решил поворачивать Slice - Plane вокруг оси X. Как правильно в этом коде разместить Slice_Plane.rotation = quat 90 [1, 0, 0] ?
Т.е. сначала повернуть Plane, а потом обрезать.
Спасибо.
cherepushka, у меня большое подозрение, что ты не пользуешься MAXScript Listener. (F11 при дефолтной раскладке). Там можно увидеть сообщения об ошибках в скриптах. Рекомендую.
cherepushkaВ коде всё понятно, но вот эта строчка до меня не доходит
o.transform = matrix3 1
Я не очень умею объяснять. Но если в кратце, то эта строка сбрасывает трансформацию объекта, задав единичную матрицу в качестве матрицы трансформации объекта. В результате перемещает объект в начало координат, обнуляет углы поворота и задаёт масштаб равный [1,1,1] т.е 100% по всем осям. Возможно это не самый лучший способ, но это первое что мне пришло в голову. Всё это необходимо для более точного вычисления значения для параметра offset. После того как значение было получено, объект был трансформирован обратно.
cherepushkaaddModifier o (SliceModifier
Slice_Plane.rotation = quat 90 [1, 0, 0]
slice_type:2
)
Вот знаю, что неправильно. Но порядок такой.
cherepushka, у меня большое подозрение, что ты не пользуешься MAXScript Listener. (F11 при дефолтной раскладке). Там можно увидеть сообщения об ошибках в скриптах. Рекомендую.
Black Sphinx, спасибо,
Нет, туда я заглядываю (Shift Enter), но когда код ошибки мне не понятен, тогда я в ступоре.
Почему-то ерунда получается какая-то. На чайниках проверил, всё без проблем. Mirror применяется к отдельным объектам и относительно своих Pivot point. Почему когда делаю вручную эти же операции, зеркалит правильно, а с кодом так?
Спасибо.
На всякий случай. Во вложении primer.max - то, что в итоге хочу добиться (сделал вручную, чтобы в стэке было видно ), а error.obj - то, что получается со скриптом.
sl = (SliceModifier slice_type:2)
sl.Slice_Plane.rotation = (quat 90 [0, 1, 0]) -- поворачиваю вокруг оси Y
addModifier o sl
currentTransform = o.transform
o.transform = matrix3 1
offset = o.max.x * 2.0
o.transform = currentTransform
--resetXForm o
addModifier o (Mirror mirror_axis:0 copy:true offset:offset) -- копия по оси X
У тебя пивоты объектов не по центру объектов.
Попробуй так:
(
for o in selection do (
CenterPivot o
resetXForm o
sl = (SliceModifier slice_type:2)
sl.Slice_Plane.rotation = (quat 90 [0, 1, 0]) -- поворачиваю вокруг оси Y
addModifier o sl
addModifier o (Mirror mirror_axis:0 copy:true offset:offset) -- копия по оси X
)
)
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
cherepushka
Не подскажите, можно ли в 3Ds Max создавать макросы? Как в фотошопе actions. Начал читать документацию по MaxScript, но пока глуховато.
У меня есть очень много файлов в формате *.step.
Импорт файла, выделить объект, применить модификатор Slice. Затем экспорт с любым названием.
Может у кого была похожая ситуация.
Спасибо.
Пока продвинулся не намного.
Применяю addmodifier myBox (sliceModifier()), теперь нужно выбрать параметр RemoveTop, но когда пишу
sliceModifier.Slice_Type=3 выходит ошибка
Владислав Бодюл
Похоже макс не умеет экспортировать в step, по этому в примере будет экспорт в obj
( local src_files = getFiles "C:\models\*.step" local save_dir = "C:\models\slice\\" for f in src_files do ( resetMaxFile #noPrompt importFile f #noPrompt for o in geometry do ( addModifier o (SliceModifier slice_type:2) ) exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt ) )cherepushka
cherepushka
Делаю так, но ничего не случается
addModifier obj (MirrorModifier mirror_axis:1
copy:true
Mirror_Offset:100
)
И можно ли каким-нибудь образом значение Mirror_Offset сделать как-то автоматом что ли, чтобы фигура зеркально отобразилась рядом с первоисточником?
Владислав Бодюл
( obj = $ currentTransform = obj.transform obj.transform *= inverse currentTransform offset = obj.max.y * 2 obj.transform = currentTransform addModifier obj (Mirror mirror_axis:1 copy:true Mirror_Offset:offset) )cherepushka
А почему я не могу сделать так - применить два модификатора к объекту?
local src_files = getFiles "C:\models\*.step"
local save_dir = "C:\models\slice\\"
for f in src_files do
(
resetMaxFile #noPrompt
importFile f #noPrompt
for o in geometry do
(
addModifier o (SliceModifier slice_type:2)
addModifier o (Mirror mirror_axis:1 copy:true Mirror_Offset😮ffset)
)
exportFile (save_dir + (getFileNameFile f) + ".obj"😉 #noPrompt
)
Sphinx Black (Black Sphinx)
И оформляй код через Вставить -> Код, а то фигня отображается ((
cherepushka
( local src_files = getFiles "C:\models\*.step" local save_dir = "C:\models\slice\\" for f in src_files do ( resetMaxFile #noPrompt importFile f #noPrompt for o in geometry do ( addModifier o (SliceModifier slice_type:2) addModifier o (Mirror mirror_axis:1 copy:true Mirror_Offset:ffset) ) exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt ) )Спасибо.Вот вставил, там и стоял двойной бэкслэш.
Но я хотел узнать, почему два модификатора нельзя использовать.
Владислав Бодюл
( local src_files = getFiles "C:\models\*.step" local save_dir = "C:\models\slice\\" for f in src_files do ( resetMaxFile #noPrompt importFile f #noPrompt for o in geometry do ( addModifier o (SliceModifier slice_type:2) currentTransform = obj.transform obj.transform *= inverse currentTransform offset = obj.max.y * 2 obj.transform = currentTransform addModifier o (Mirror mirror_axis:1 copy:true Mirror_Offset:offset) ) exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt ) )cherepushka
Владислав Бодюл
( local src_files = getFiles "C:\models\*.step" local save_dir = "C:\models\slice\\" for f in src_files do ( resetMaxFile #noPrompt importFile f #noPrompt for o in geometry do ( addModifier o (SliceModifier slice_type:2) currentTransform = o.transform o.transform = matrix3 1 offset = o.max.y * 2.0 o.transform = currentTransform --resetXForm o addModifier o (Mirror mirror_axis:1 copy:true offset:offset) ) exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt ) )Если отзеркаленая копия объекта будет находится слишком далеко (у меня такое случалось с некоторыми объектами), тогда нужно применить ResetXForm. Для этого необходимо раскомментировать эту строку:cherepushka
Владислав, скажите пожалуйста, Вы учились по справке?
В справке нет примеров - это меня расстраивает. В коде всё понятно, но вот эта строчка до меня не доходит
o.transform = matrix3 1
cherepushka
Т.е. сначала повернуть Plane, а потом обрезать.
Спасибо.
cherepushka
Sphinx Black (Black Sphinx)
Владислав Бодюл
Я не очень умею объяснять. Но если в кратце, то эта строка сбрасывает трансформацию объекта, задав единичную матрицу в качестве матрицы трансформации объекта. В результате перемещает объект в начало координат, обнуляет углы поворота и задаёт масштаб равный [1,1,1] т.е 100% по всем осям. Возможно это не самый лучший способ, но это первое что мне пришло в голову. Всё это необходимо для более точного вычисления значения для параметра offset. После того как значение было получено, объект был трансформирован обратно.
Как-то так:
или в углах Эйлера может будет удобней
cherepushka
Нет, туда я заглядываю (Shift Enter), но когда код ошибки мне не понятен, тогда я в ступоре.
cherepushka
cherepushka
Спасибо.
На всякий случай. Во вложении primer.max - то, что в итоге хочу добиться (сделал вручную, чтобы в стэке было видно ), а error.obj - то, что получается со скриптом.
sl = (SliceModifier slice_type:2) sl.Slice_Plane.rotation = (quat 90 [0, 1, 0]) -- поворачиваю вокруг оси Y addModifier o sl currentTransform = o.transform o.transform = matrix3 1 offset = o.max.x * 2.0 o.transform = currentTransform --resetXForm o addModifier o (Mirror mirror_axis:0 copy:true offset:offset) -- копия по оси XВложения
Sphinx Black (Black Sphinx)
Попробуй так:
( for o in selection do ( CenterPivot o resetXForm o sl = (SliceModifier slice_type:2) sl.Slice_Plane.rotation = (quat 90 [0, 1, 0]) -- поворачиваю вокруг оси Y addModifier o sl addModifier o (Mirror mirror_axis:0 copy:true offset:offset) -- копия по оси X ) )