Render.ru

о Loader и программистах

#1
Ни как не могу установить значения TrimIn и TrimOut в Loader при помощи скрипта.

comp = Fusion():GetCurrentComp()
ldTool = comp.myLoader
tableTrimIn = {1}
tableTrimOut = {10}
ldTool:SetAttrs({TOOLIT_Clip_TrimIn=tableTrimIn, TOOLIT_Clip_TrimOut=tableTrimOut})

юзаю Fusion 5.1 beta 1 build 25
Ошибок не дает, но значения не меняет.

Хотел жизнь упростить. Нарезать из авишника и обработать много частей с одним Loader'ом.
Вроде проста идея: список соответствия - фреймы -> часть авишника. А третий вечер уже потратил впустую
Хотя нет! Натестил что print(string.len("фузион")) в ToolScript выдает 12, а в командной строке консоли 6!
Либо программерам не платят вовсе и они генерируют код рандомом,
Либо вся команда во главе с главным программистом, тупы, что для одной функции пишут две реализации и обе глючные,
либо все делают фрилансеры ... без согласования интерфейсов,
либо Eyeon наплевать на нас.
Но все равно я на нем останусь, все равно он лучше "Шейка"

И вообще, когда программа глючная трудно понять я ошибаюсь или очередной прокол программистов.
С уважением к тяжелой доле творческих людей. IgorOk!
 
#2
В хелпе сказано, что не все атрибуты можно изменить скриптом. Проверка на изменяемость только тестом.
IgorOk!
 

slayerk

Мастер
Рейтинг
155
#3
выкладываю тут "коллекцию" мною написанных(/модифицированных) скриптов. несколько как раз по затронутой теме. другие может еще кому пригодятся.

есть еще три скриптика лежат на 3dcenter - правленные стандартные скрипты для импорта трекинга, подкоректированные для пятерки.
http://3dcenter.ru/forum/index.php?showtopic=66613&st=15

совет: скриптинг во фью довольно таки простая и понятная вешь (вопреки сложившемуся вокруг этого процесса мнения). можно освоить основные принципы за недельку, влегкую причем (по своему опыту).
чтобы менять через скрипт какой-либо параметр тула или проверить его способность к изменениям у меня например есть следующий "трюк":
беру и тыкаю ПКМ на любой параметр в той же тулзе и выбираю модификатор expression (не тот который в Modifiers->expression, а тот который сразу в контекстном меню) под данным параметром появляется окно с "+" и полемм ввода выражения.
"+" тянешь ЛКМ на тот параметр который нужно менять через скрипт. в окне ввода выражения появляеся его название - которое собственно и необходимо для изменения этого параметра через скрипт.
далее запоминаешь(/записываешь/копируешь) это название и убираешь созданный expression. щбратиться к этому параметру можно так:
<имя_тула>.<скопированное/запомненое/записанное_название_параметра>

для твоего случая:
ldTool.ClipStartTime=1
ldTool.ClipendTime=10
(что-то навроде этого. пишу по памяти)

в переменной comp всегда хранится активная композиция (первая строка лишняя)
в переменной tool всегда хранится текущая активная тулза
 

slayerk

Мастер
Рейтинг
155
#7
Григорий Чаленко сказал(а):
А кто-нибудь пробовал адаптировать под пятерку скрипт "Check for Missing Frames" ?
у меня такого не наблюдается. что он делает? проверяет наличие файлов на диске? так не вопрос я думаю.
у меня в выложенных скриптах есть скриптик который раскидывает сиквенцию на основе файла с ключевыми кадрами по папкам.
причем папки тоже сам создает. при этом после того как раскидал создает композицию и все раскиданное в нее импортит причем выставляет все друг за другом на таймлайне. так что проверить наличие файлов на диске это по сути пустяк.
 

slayerk

Мастер
Рейтинг
155
#9
function isMissing(filename)
if fileexists(filename) == true then return false
else return true end
end

lds = GetToolList("Loader")

print()
print("Checking flow for missing frames.")
print()

for i, tool in lds do
missing = {}

frames = eyeon.LD_GetFrames(tool)

for i, file in frames do
--~ print(file)
if isMissing(file) == true then
table.insert(missing, file)
end

end

if table.getn(missing) > 0 then
print(tool:GetAttrs().TOOLS_Name.." : Missing Frames")
print("-----------------------------------------------------")

for i, v in missing do
print(" "..v)
end

end
end

print()
print("Done checking.")
print()
 

slayerk

Мастер
Рейтинг
155
#11
Григорий Чаленко сказал(а):
Круто!
Спасибо!
С меня "куперс" :)

Можно добавить копирайты (Айзека и свой) и опубликовать здесь:
http://vfxpedia.com/index.php?title=Useful_Scripts
Композеры мира будут носить на руках :)
круто! может сразу денег спросить? :)
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#12

slayerk

Мастер
Рейтинг
155
#13

slayerk

Мастер
Рейтинг
155
#14
читал читал идея хороша. мне кажется реализация у ней достаточно геморная поэтому и не торопятся
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#16
slayerk сказал(а):
Цитирую Григорий Чаленко:
читал читал идея хороша. мне кажется реализация у ней достаточно геморная поэтому и не торопятся
Можно предложить им реализацию за деньги, мотивируя тем, что это реальный кусок работы.
А они просто будут включать скрипт/плагин в стандартный комплект поставки.
 

slayerk

Мастер
Рейтинг
155
#17
вот написал скрипт который работает так:
выделяешь тулы вызываешь скрипт он находит общие у тулов параметры и предлагает их в Дропдаун листе. Выбираешь нужный параметр и чмыкаешь Set(Для коннекта еще не доделал) потом открывается окно для ввода значения туду вводишь значение и чмык ок.
тестирован на Motion blur set to 1
Код:
function getInpNum(tl, name)
	local num=0
	for i=1, table.getn(tl:GetInputList()) do
		if tl:GetInputList()[i]:GetAttrs().INPS_Name==name then
			num=i
		end
	end
	print("fucking is OK!")
	return num
end

function getInpsNames(tbl)
	local tmp={}
	for i, j in tbl do
		if j:GetAttrs().INPB_Passive == false then
			table.insert(tmp, j:GetAttrs().INPS_Name)
		end
	end
	return tmp
end

function getMin(tbl) 
	
	local minTl=0
	local minInps=1000000
	local numInps=0
	
	for i=1, table.getn(tbl) do
		numInps=table.getn(tbl[i]:GetInputList())
		if numInps<minInps then
			minTl=i
			minInps=numInps
		end
	end
	return minTl
end

tools_s=comp:GetToolList(true)

if  table.getn(tools_s)<2 then
	return 0, "you must select more then one tool for sheet"
end

temp=tools_s
dump(tools_s)
print()
t1=temp[getMin(temp)]
table.remove(temp, getMin(temp))
t2=temp[getMin(temp)]

inps={}

t2_inps=getInpsNames(t2:GetInputList())
t1_inps=getInpsNames(t1:GetInputList())
for i, f in t1_inps do
	for j, k in t2_inps do
		if f==k then
			table.insert(inps, k)
		end
	end
end


for i, j in temp do
	tmp={}
	tmp_inps=getInpsNames(j:GetInputList())
	for k, l in tmp_inps do
		fl=false
		for m, n in inps do
			if (n==l) then 
				fl=true 
			end
		end
		if fl==true then
			table.insert(tmp, l)
		end		
	end
	inps=tmp
end

dump(inps)
if table.getn(inps)==0 then
	print("NO SHEET INPUTS")
	return 0
end

query=AskUser("© 2007 SlayerK Script", {
	{"list", Name="Parameter", "Dropdown", Options=inps},
	{"set", Name="Set Value", "Checkbox", Default=false},
	{"connect", Name="Connect To", "Checkbox", Default=false}
})

if (query.set==true) and (query.connect==true) then
	print("YOU MUST CHOOSE ONE CHECKBOX")
	return 0
end

if query.set then
	property=inps[query.list+1]
	val=AskUser("Enter Correct Value", {
		{"Value", "Text", Name="New Value", Lines=7, Wrap=true}
	})
	
	tools_s=comp:GetToolList(true)
	for i, j in tools_s do
		inpNumber=getInpNum(j, property)
		
		do_str=string.gsub(j:GetAttrs().TOOLS_Name, "%s", "") .. "." .. j:GetInputList()[inpNumber]:GetAttrs().INPS_ID
		do_str=do_str .. "=" .. val.Value
		print(do_str)
		
		dostring(do_str);
	end
end
 

Вложения

slayerk

Мастер
Рейтинг
155
#19
+бонус картинка с общими атрибутами для FastNoise и Background. не без тонкостей там все, но пока времени нет.
 
Сверху