Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/08/2009 at 08:03, xxxxxxxx wrote:
User Information: Cinema 4D Version: 10.5 Platform: Mac OSX ; Language(s) : C.O.F.F.E.E ;
--------- Hi, I'm continuing to attempt to write my coffee tag that eventually will export the tags user data for each frame to a text file. The user data for the tag is" on/off, input and print". the input will be connected to whatever via xpresso, while "on" will collect the values per frame (with a frame index number)into an array that will be dumped out to a text file when the "print" is activated. With the code I have at the moment the array is only getting the current frame.
<< var lasttime;
main(doc,op) {
doc->SetFps( 25 );
var number,on_off,coffee_tag,save_doc;
// create index for array var t = doc->GetTime(); var sec = t->GetSecond(); var frame =int( t->GetFrame(doc->GetFps()));
var max_time = doc->GetMaxTime(); var max_sec = max_time->GetSecond(); var max_frame =int(max_time->GetFrame(doc->GetFps()));
var arr = new(array,max_frame,max_frame); arr[frame] =frame,number;
coffee_tag=op->GetFirstTag();
while(coffee_tag) {if(instanceof(coffee_tag, CoffeeExpressionTag)) break; coffee_tag=coffee_tag->GetNext(); } if(!coffee_tag) return;
if(!(coffee_tag#ID_USERDATA:2)) return;
number=coffee_tag#ID_USERDATA:1;
// userdata switch to print to file save_doc=coffee_tag#ID_USERDATA:5;
var i = 0; if (save_doc)
for (i = 0; i < max_frame; i = i + 1) { println(arr _);}
if (!lasttime) lasttime = doc- >GetTime(); //initialize lasttime
var time = doc->GetTime(); //current document time
if (time->IsEQ(lasttime))
return;
else
println (arr[frame,frame]);
lasttime = doc->GetTime(); //write current time back to lasttime
}
>>
Any help greatly appreciated! Conor
On 21/08/2009 at 12:47, xxxxxxxx wrote:
In order to advance frames, you must doc->SetTime().
On 24/08/2009 at 03:32, xxxxxxxx wrote:
Hi Robert Thanks very much, i've changed my code to try to use the SetTime in the loop activated by "print", but I don't think I'm getting the basetime right, as I want the loop to increment through each frame but i'm getting an incompatible float/object message.
I've attached the code below
var lasttime;
var max_time = doc->GetMaxTime(); var max_sec = max_time->GetSecond(); var max_frame =(int(max_time->GetFrame(doc->GetFps())) + 1);
var arr_frame = new(array,max_frame); var arr_number = new(array,max_frame); arr_frame[frame] = frame;
number=coffee_tag#ID_USERDATA:1; if (number != 0) { arr_number[frame] = number; }
for (i = 0; i < max_frame; i = i + 1) {
doc->SetTime(((t->GetFrame(doc->GetFps())) + i)); // HERE IS THE PROBLEM !!!
print (frame); print (","); print( arr_number[frame]); println(" "); }
if (i == max_frame)coffee_tag#ID_USERDATA:5 = 0;//reset print after dump
if (!lasttime) lasttime = doc->GetTime(); //initialize lasttime
else print (arr_frame[frame]); print (","); print (arr_number[frame]); println(" ");