Форум .:3DCenter.ru:. _ 3ds Max _ Как сделать много скринов
Автор: cad 10/01/2017, 12:23
Добрый день. У меня такая задача: на винте много макс - файлов (неск. тыс), распиханных по разным папкам. Нужно сделать к каждому файлу картинку - скрин с вьюпорта, которая будет иметь такое-же имя файла, как и сама сцена. Сейчас делаю так: открываю файл, выставляю удобную ориентацию сцены, делаю принтскрин, иду в папку, копирую имя файла, перехожу в граф. редактор, создаю картинку и сохраняю с именем из буфера. Как-то много движений получается. Можно ли как-то автоматизировать?
Например,
назначить хоткей или сделать кнопку на Tools - Preview - Grab Viewport - Capture Still Image - но в разделе хоткеев этой ф-ии нет чтоб по умолчанию там был выбран тип файла JPG. Если бы автоматом вставлялось имя исходной сцены - вообще ништяк
Автор: igorznag2 10/01/2017, 14:22
Цитата(cad @ 10/01/2017, 13:23)
Например, назначить хоткей или сделать кнопку на Tools - Preview - Grab Viewport - Capture Still Image - но в разделе хоткеев этой ф-ии нет чтоб по умолчанию там был выбран тип файла JPG. Если бы автоматом вставлялось имя исходной сцены - вообще ништяк
Попробуйте такой вариант. Пример. Запускаем скрипт. Меню Customize > Customize UI > Keyboard > Category:"_igorznag" Назначаем клавишу для действия igorznag_grab_and_save. Скрипт делает скрин с вьюпорта и сохраняет его в папке сцены с названием сцены и в формате jpg.
Код
macroscript igorznag_grab_and_save category:"_igorznag" ( m=maxFileName; if m!="" do ( b=gw.getViewportDib(); bn=substring m 1 (m.count-4) bfn=maxFilePath+bn+".jpg"; b.filename=bfn; save b; close b ))
macroscript igorznag_grab_and_save category:"_igorznag" ( m=maxFileName; if m!="" do ( b=gw.getViewportDib(); bn=substring m 1 (m.count-4) bfn=maxFilePath+bn+".jpg"; b.filename=bfn; save b; close b ))
а что тут добавить чтобы каждый раз jpeg не перезаписывался, а сохранялся с новым номером? спасибо заранее!
Автор: Jahman 10/01/2017, 17:05
QUOTE
doesFileExist <filename_string>
перех сохранением проверить нет ли такого имени и как-то индексировать имя файла если есть
Автор: igorznag2 10/01/2017, 17:39
Цитата(IOG @ 10/01/2017, 18:01)
а что тут добавить чтобы каждый раз jpeg не перезаписывался, а сохранялся с новым номером? спасибо заранее!
Код
macroscript igorznag_grab_and_save category:"_igorznag" ( m=maxFileName; if m!="" do ( b=gw.getViewportDib(); bn=substring m 1 (m.count-4) bfn=maxFilePath+bn+".jpg"; i=1; while doesFileExist bfn do (bfn=maxFilePath+bn+(i as string)+".jpg"; i+=1) b.filename=bfn; save b; close b ) )
Автор: IOG 10/01/2017, 18:41
Сделал немного по-другому, под свои нужды, перезапись не включал :
Код
( global gl_ScreenMePos global gl_ScreenMeEt global gl_ScreenMeFolder if gl_ScreenMePos == undefined do gl_ScreenMePos = [300,300] if gl_ScreenMeEt == undefined do gl_ScreenMeEt = "" if gl_ScreenMeFolder == undefined do gl_ScreenMeFolder = ""
rollout ScreenMe "ScreenMe!" width:250 height:80 ( button setFolder "set folder" width:240 editText eT "Name:" text:gl_ScreenMeEt pos:[5,30] width:240 height:20 button btn1 "Save" pos:[40,55] width:60 fn fn_FolderText = ( if gl_ScreenMeFolder != "" do ( if gl_ScreenMeFolder.count > 40 then ( setFolder.text = "..." + (substring gl_ScreenMeFolder (gl_ScreenMe.count - 37) gl_ScreenMe.count) ) else setFolder.text = gl_ScreenMeFolder ) ) on ScreenMe open do fn_FolderText() on setFolder pressed do ( gl_ScreenMeFolder = getSavePath() fn_FolderText() ) on ScreenMe close do ( gl_ScreenMePos = GetDialogPos ScreenMe ) on eT changed A do gl_ScreenMeEt = eT.text on btn1 pressed do ( if eT.text != "" and setFolder.text !="" do ( local b=gw.getViewportDib() b.filename=gl_ScreenMeFolder + "\\" + eT.text + ".jpg" save b close b ) ) ) createdialog ScreenMe pos:gl_ScreenMePos )
Автор: cad 11/01/2017, 11:43
Цитата(igorznag2 @ 10/01/2017, 17:39)
Цитата(IOG @ 10/01/2017, 18:01)
а что тут добавить чтобы каждый раз jpeg не перезаписывался, а сохранялся с новым номером? спасибо заранее!
Код
macroscript igorznag_grab_and_save category:"_igorznag" ( m=maxFileName; if m!="" do ( b=gw.getViewportDib(); bn=substring m 1 (m.count-4) bfn=maxFilePath+bn+".jpg"; i=1; while doesFileExist bfn do (bfn=maxFilePath+bn+(i as string)+".jpg"; i+=1) b.filename=bfn; save b; close b ) )