Render.ru

MaxScript Macros

cherepushka

Пользователь сайта
#22
Принялся я дальше экспериментировать и застрял. Тоже самое делаю с примитивами, режет нормально. Но вот файл во вложении primerchik-source.obj режет четвертую часть (во вложении primerchik-itog.obj). Почему если к этой модели вручную применять, то Slice режет чётко половину, а скриптом четвертую часть?
Спасибо.
Код:
(
    local src_files = getFiles "C:\models\*.obj"
    local save_dir = "C:\models\slice\\"
    for f in src_files do
    (
        resetMaxFile #noPrompt
        importFile f #noPrompt

        for o in geometry do
        (
            sl = (SliceModifier slice_type:2)
            sl.Slice_Plane.rotation = (quat 90 [0, 1, 0])
            addModifier o sl

        )

        exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
    )
)
 

Вложения

#23
Ты вроде моё предыдущее сообщение прочитал, и даже поблагодарил... только скрипт используешь старый. Поэтому получаешь в лоб теми же граблями.
Пробуй это:
Код:
(
   local src_files = getFiles "C:\models\*.obj"
   local save_dir = "C:\models\slice\\"
   for f in src_files do
   (
     resetMaxFile #noPrompt
     importFile f #noPrompt

     for o in geometry 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:0) -- копия по оси X
     )

     exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
   )
)
А иожно и соптимизировать. Это должно работать быстрее:
Код:
(
   local src_files = getFiles "C:\models\*.obj"
   local save_dir = "C:\models\slice\\"
   local sl = (SliceModifier slice_type:2)
   sl.Slice_Plane.rotation = (quat 90 [0, 1, 0]) -- поворачиваю вокруг оси Y
   local mirr = (Mirror mirror_axis:0 copy:true offset:0) -- копия по оси X
  
   for f in src_files do
   (
     resetMaxFile #noPrompt
     importFile f #noPrompt

     for o in geometry do
     (
       CenterPivot o
       resetXForm o
       addModifier o sl
       addModifier o mirr
     )

     exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
   )
)
 

cherepushka

Пользователь сайта
#24
Black Sphinx, спасибо и прошу мне поверить. Я что только не делал, когда нахожусь в тупике, только тогда стараюсь писать. И вот сейчас использую эти два скрипта и не получается порезать чётко пополам. Режет четвертую часть.
 
#25
Cherepushka, я проверял работу скрипта (неоптимизированный цикл for o in geometry do...) с твоей моделью primerchik-source.obj. Объекты режутся по их геометрическому центру.

upload_2017-3-29_12-30-3.png


Ещё раз проверь каким вариантом скрипта ты пользуешься.

У меня нет оснований тебе не верить. Но что-то идёт не так. В первую очередь проверяем человеческий фактор ;)

Кстати, а почему ты решил использовать связку Slice+Mirror а не Symmetry?
 

cherepushka

Пользователь сайта
#26
Black Sphinx, спасибо и прошу прощения, что напрягаю. Я ломал голову уже который день и понял, что проблема в файле stp. Когда скрипт работает с другими расширениями, всё нормально. Но я начал использовать несколько файлов с расширением stp и понял. Хотя непонятно, почему именно с ними.(пробовал указать o.pivot = [0,0,0]) А скрипт работает действительно быстрее, большое спасибо.
Насчет Symmetry, действительно лучше. Спасибо. Только в синтаксисе думаю ошибка
Код:
local sim = (symmetry axis:0 flip:true)
Ничего не происходит, в Listener Ok. Может ли Max подсвечивать ошибки?
 
#27
Успокойся, не напрягаешь. "Ломал голову ... и понял"- эт хорошо. Мы все здесь, удалённо, всё-таки не располагаем полной информацией.

Stp, говоришь... :Smoking:

Чисто идейно, должно быть совершенно фиолетово, откуда появился меш: сделан он в самом Максе или импортирован из стороннего формата (кривую модель можно получить и так, и так).

Присылай проблемную модель в stp. Будем посмотреть где и что.

Приведённый тобой код просто создаёт объект (в смысле MAXScript'а) типа модификатор Symmetry. Для того, что бы что-то происходило, надо этот объект модификатора применить к какому-то объекту в сцене посредством функции addModifier. Типа так:
Код:
(
   local src_files = getFiles "C:\models\*.obj"
   local save_dir = "C:\models\slice\\"
   local sym = (symmetry axis:0) -- flip не нужен; остальные параметры - по умолчанию
 
   for f in src_files do
   (
     resetMaxFile #noPrompt
     importFile f #noPrompt

     for o in geometry do
     (
          CenterPivot o
          resetXForm o
          addModifier o sym
     )

     exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
   )
)
 

cherepushka

Пользователь сайта
#28
Не могу прикрепить файл. Пишет такую ошибку
Произошла ошибка
Файл с этим расширением загружать нельзя.

for_5.stp
Может на почту?
 

cherepushka

Пользователь сайта
#31
А каким образом правильно делать скрипт, если у меня такая последовательность вручную.
Есть объект, на его фэйс нужно создать текст (с AutoCrid - если делаю вручную). Преобразовать объект в Editable Poly и команда Attach и указать текст. Я смотрю хэлп официальный и хотелось, по хорошему пинка в правильном направлении, а дальше буду экспериментировать, очень интересно стало.
 
#32
У тебя в stp-файле объекты в группах. Поэтому не срабатывает CenterPivot(), правда в документации это нигде не написано :Devil:

Если тебе группы не критичны, то так будет работать:
Код:
(
  -- local src_files = getFiles (pathConfig.getCurrentProjectFolder() +@"\scenes\*.stp")
  -- local save_dir = pathConfig.getCurrentProjectFolder() + @"\scenes\"
  local src_files = getFiles "C:\models\*.obj"
  local save_dir = "C:\models\slice\\"

   local sym = (symmetry axis:0 threshold:0.001)
   
   for f in src_files do
   (
     print (getFileNameFile f)
     
     resetMaxFile #noPrompt
     importFile f #noPrompt

     for h in helpers do
     (
       if (isGroupHead h) do explodeGroup h
     )

     for o in geometry do
     (
       CenterPivot o
       resetXForm o
       addModifier o sym
     )
     
     exportFile (save_dir + (getFileNameFile f) + ".obj") #noPrompt
   )
)
Дополнительно уменьшил threshold в symmetry, что бы при слиянии не билась геометрия.
 

cherepushka

Пользователь сайта
#33
Black Sphinx, большое спасибо.
Есть ли возможность созданный текст установить прямо сверху бокса (на его верхнюю грань)?
Код:
fow = (text text:"Hello" size:7.5)
addModifier fllow (Extrude amount:1.5)
И после эти два объекта attach?
 

cherepushka

Пользователь сайта
#34
Код:
fow = (text text:"Hello" size:7.5)
addModifier fow (Extrude amount:1.5)
Переменную забыл переименовать, когда модификатор добавлял
 
#35
По второму вопросу у меня нет готового решения.

Надо одним щелчком мыши в произвольном вьюпорте (1) выбрать объект и (2) вычислить матрицу трансформации (идентити) для нового текстового объекта в указанной точке (что собственно и делает AutoGrid). Если эту проблему решить, то остальное достаточно тривиально. Некоторые мысли по этому поводу есть, но что-то больно сложно. Может кто-то подскажет как это сделать просто?
 

cherepushka

Пользователь сайта
#37
Black Sphinx, спасибо. Грызу хэлп, но пока нечем похвастаться. Как будут проблески, то сразу обрадую и буду радоваться сам.
У меня такой вопрос, может кто сталкивался. Есть ли возможность экспортировать в какой-то универсальный формат, чтобы он открывался в других программах (например в SolidWorks, Компас)? Ни один формат, который пробовал экспортировать не открывается в этих программах. Остановился на dwg, открывается только в Автокаде, хотя если делать файл в самом Автокаде, он без проблем в этих программах открывается, а если через Max, то ошибка.
Может в настройках экспорта есть какая-нибудь галочка?
Спасибо.
 
#38
Иморт/экспорт 3D-форматов - давняя боль. Всегда было криво, и всегда очень индивидуально для каждой пары программ. Если в последнее время что-то изменилось - был бы рад услышать.

Ты в Автокаде экспортированную модель не пробовал пересохранить? Или открыть в Автокаде экспортированный файл и скопировать модель в новый файл, созданный в Автокаде? Понятно, что получается через задницу, но если очень надо перекинуть модель, то почему бы и нет?

Только вопрос не по теме ветки форума. Ты бы его задал где-нибудь в более обитаемой ветке. Может кто-то и что-то и расскажет.
 

cherepushka

Пользователь сайта
#39
В самом Автокаде пробовал, ничего. Чего только не делал.
И вот до чего дошел. Экспорт из макса в Автокад (*.dwg). В автокаде в 3д режиме преобразовал в поверхность объекты и сделал экспорт в igs. Только такие файлы открывают Компас и SolidWorks. Напрямую в igs из 3ds max не выходит.
Так вот, почему продолжаю писать в этой теме. Мне нужно эти же действия, которые делал в Автокаде осуществить в Максе.
Если я просто Конвертирую объекты в Nurbs, то экспорт не выходит. Нужно найти аналог команды в Автокаде преобразовать в поверхность. (Nurbs surface или нет?)
Спасибо.
 
Сверху