
françois leroy
Enthusiast
françois leroy
Enthusiast
Activity
Oct 11, 2013
09:30 AM
Hi Shachar! Thanx for the answer. The "unselectable" keys is a trick I've been trying before, but it brings strange behaviour, like if you stay clicked on a key, and your plugin deselects it, a new selection comes up with the key again. And if you move, the move itself is repeated as many times as the key is selected / unselected... and the key moves like crazy. But I think I've seen where the problem comes from: when keys are dragged, there is a difference (in certain cases, like dragging keys fast with a slow render) between params[]->u.something.value and the corresponding stream. I've changed my code and it works fine now... But it was really tricky to debug: if you drag keys under debug mode, AE takes the time to update params[] values, and the error doesn't appear. Cheers, François
... View more
Oct 09, 2013
11:56 AM
Hi, I've written an effect (layer effect) which performs different actions in a specific order. If this order is respected, everything's fine. The problems come when the user drags the keyframes in the timeline (so when their time change...). I've tried to save the keyframes times when keys are set and compare them with actual keytimes, but if user drags them fast enough, the render is called anyway... So here's my question: is there any way to fix the keyframes in time? If not, is there a way to hide (or disable) the keyframes in the timeline, but not in the Effect's UI? Thanx, François
... View more
Sep 12, 2013
08:19 AM
That was twisted enough to work.. but it doesn't. And you're right, I can write selection, but when I do so, the selection switches from Mask vertex to layer then back to my new selection. So , when I drag a Vertex, My Vertex is deselected, my Layer dragged, and then my Vertex is reselected... all this during the render call! I think this is too much cheating. I'd probably better make a fake Mask with DrawBot. May be it's not worth it just for CS5... Thanx Shachar! François
... View more
Sep 12, 2013
07:34 AM
If you already have an idea, then I'm curious! You're right, they deserve to be tortured even in CS5...
... View more
Sep 12, 2013
07:13 AM
Oh! It seems it happens only with CS5! May be we don't need to call the devil... just update AE! Cheers, François
... View more
Sep 12, 2013
07:02 AM
Hi Shachar! As you can see, I'm still torturing AE's masks... Unfortunately, both RefreshAllWindows() and REFRESH_UI give no result. The hard stuff is I'm checking wich vertex is selected to transform the mask, so I can't mess with selection. Do you think Drawbot can help? Thanx, François
... View more
Sep 12, 2013
02:48 AM
Hi! My plugin (effect) acts like an AEGP and performs Mask modification. Everything works fine, but AE still shows the Mask before modification unless I deselect the mask... Is there a way to force refresh? Note, I can't force "deselect" then "reselect", cos' the Mask computation needs the selection to be stable... Thanx in advance, François
... View more
Aug 16, 2013
02:38 AM
It's a native plugin, made in C++, which is much more powerfull than scripting, but also a lot more work (and troubles) ! The SDK forum is for native plugins developpement, there is also a Scripting forum where you can find usefull and probably more accurate information. C++ plugins can use scripting too (mine do), via "ExecuteScript" command, so you can find posts where scripting is dicussed also. But if you have scripting questions, I'll be glad to answer (if I can) in this forum ! Cheers, François
... View more
Aug 14, 2013
03:23 AM
Accessing maskPath vertices directly via expression is not possible... or not that I know... My plugin is a work around: you don't really dynamically access vertices, but you control them via parameters, wich are accessible. Cos' trying to retrieve data dynamically leads to troubles, you can believe me! It's because AE computes Geometry, then Effects... Parameters are part of Effects, so updating there value occurs AFTER Geometry, and if you intend to get Geometry datas... If you go the scripting way, it'll be really easy to get the vertices coordinates (myLayer.Masks.property(myMaskIndex).maskShape.valueAtTime(myTime, false).vertices[vertexIndex]) Then your expression will be processed during Geometry, so the result is available at proper time. Cheers, François
... View more
Aug 13, 2013
11:20 AM
Hi Bertrand! If the maskPath isn't animated, then just copy paste the maskPath into the Position parameter of your layer... If it's animated and you have access to the maskPath data (via scripting, for example...), the easiest is to apply an expression on your position (Dan Ebbert's done the job for all of us, as usual ) http://www.motionscript.com/expressions-lab-ae65/bezier.html Expression is a bit heavy to compute, but it's way easier than writing C++ native plugin! There was a javascript application to do that a few years ago, written by Bresnev Shu, but it's no longer available... but if you find someone who still got it, you can steal it from him! Cheers, François ps: j'utilise le même frenchglish! 😉 Shameless advertising for my plugins: the coming update of BAO_Mask_Avenger includes this function !
... View more
Aug 12, 2013
01:13 AM
Bad news is still better than no news... at least I now know where (not) to go! I think I'll try to go the scripting way first, then see what happens... Thanx, François
... View more
Aug 11, 2013
06:56 AM
Hi! Does anyone know if we can access vector data from AI or EPS files, to be used with an effect plugin? Shachar may be? I've looked at Streams and DynamicStreams, but couldn't find anything... Thanx, François
... View more
Jul 31, 2013
01:11 AM
1 Upvote
Hi! Actually, you don't need to catch the close event. When After Effects closes, it checks this folder: Adobe After Effects (your version)/Support Files/Scripts/Shutdown and runs the scripts present in this folder. So if you paste your script in the Shutdown folder, it'll be launched on close event. If you want to launch scripts on Startup, you'll find a Startup folder as well... Cheers, François
... View more
Jul 18, 2013
02:56 AM
Hi Shachar! I manages to intercept AE's command, but it works a bit too well... When user calls "free transform", I can do what ever I want, except "free transform". Is there a way to give the control back to AE when Cmd 's been intercepted? (I set AEGP_HP_AfterAE, but it doesn't change anything...) Cheers, François PS: registration code is coming...
... View more
Jul 16, 2013
02:29 AM
Thanx Shachar! As usual, you're the man with an answer... you should write a book! Cheers, François PS: Here's a link to my plugin: http://aescripts.com/bao-mask-avenger/ I made it thanx to your help! So I'd like to give you a free registration code (if you're interested). Do you have a personnal e-mail or a place I can upload it? You can send me an answer here: frankoue@yahoo.fr
... View more
Jul 15, 2013
05:46 AM
Hi! I've written a plugin (effect) to control MaskShapes instead of AE. I already have a button in my plugin, to switch between 2 options: 1_Mask controls effect, 2_Effect controls mask. Now I'm trying to intercept the following command: Free Transform (ctrl + t). If I get the call, switch to option 1, when Free Transform is over, switch back to option 2. So, here are the issues: First, how to get the call? (I tried to handle PF_Event, but no result for the moment...) More tricky, how to know when user stops Free Transform, as effect isn't selected anymore? If anyone has the beginning of a clue, I'm highly interested! Thanx, François Note: I found a work around by script and executeScript, but I was wondering if there is a more reliable way through SDK. Ce message a été modifié par: françois leroy
... View more
Jul 12, 2013
07:54 AM
Then see you next month! PS: thanx
... View more
Jul 11, 2013
09:48 AM
Hi Griebel! Did you manage to build a structure? I'd be curious to know... I'm gonna release my plugin soon, so if you wanna see the demo: http://www.youtube.com/watch?v=J3dWu3Nhtgg and http://www.youtube.com/watch?v=UFRZhpG3-V8 Hope you like it! François Ce message a été modifié par: françois leroy
mistake on the link...
... View more
Jul 01, 2013
07:12 AM
Hi Griebel, glad it works! I've been digging this way too (you're right, it seems we're on the same vibe!), but maskPath seems to be really opaque... I tried with the Reflection Properties (in the JS Tools Guide), but didn't get anywhere. I also tried with Shape... If you find any info, I'd be happy to know! Cheers, François
... View more
Jun 28, 2013
11:58 PM
Hi Griebel (and: fine, thanx Shachar!) Reading what you describe, I think I have a solution. I didn't use it with the SDK, but I did with scripts and it worked just fine: _your plugin reads the path data, then writes it to a .txt file. You can choose the way you write your datas. When I did it, it looked like this: vert1 = [1,2]; inTan1 = [0,0]; outTan1 = [5,6]; etc... _your expression reads this .txt file with an "eval()" expression. You can see details here: http://www.graymachine.com/2009/04/expressions-and-external-documents-revisited/ The expression can call any variable from this .txt file, so if you type "vert1", you just get this value: [1,2] The advantage is that the .txt file should call a new render for your layer, so, no more worries about synch. The bad part is your layer will call a render twice, and writing to external file and re-read from it can take some time, if you have a lot of points... But if you work on light projects, then you won't even notice the difference. François PS: About my plugin, It'll be finished soon (other stuff involved...), so I can show you when it's ready.
... View more
Jun 27, 2013
09:15 PM
Hi Griebel! I can't tell you about PF_ADD_TEXT, but I've written an effect close to what you want to do. Here 's the solution I found : I have 300 Point parameters, representing either vertices ot tangents. (a pain to write, so I wrote a simple app just to write the parameters...) They are enabled / disabled according to PathNumVertices. In my case, the points control the path, but you can do the opposite. The main issue is that parameters are modified during Render call, so, for example, if you attach a layer's position to a Vertex via expression, you'll see that your layer is at the right place, but its "render" hasn't been affected. After effects computes the geometry first, then comes the rendering. So your layer's position is computed before your parameter is modified. Then comes the render: your parameter changes, the layer's position changes too, but doesn't generate a new render call, so AE makes a render of your layer at the position your layer was before render call... But if you intend to use this parameters to control other Effects, then the render calls will occure at the same time... tricky, right? you can find some informations here: http://forums.adobe.com/thread/1141646?start=0&tstart=0 The discussion's been really further than just Effect's index. I've been bothering Shachar Carmi with my mask issues for monthes 🙂 Hope it helps! François
... View more
Jun 08, 2013
05:04 AM
Thanx Shachar, I got it workin' now. So here is the code, for future generations static PF_Err LineProcessFunction( void *refcon, A_long threadNum, A_long iterationCount, A_long numOfIterations) { register MyData *data = (MyData*)refcon; PF_Err err = PF_Err_NONE; PF_Pixel *pixelDataInStart = reinterpret_cast <PF_Pixel *>(data->input.data); PF_Pixel *pixelDataOutStart = reinterpret_cast <PF_Pixel *>(data->output.data); PF_Pixel *inP = pixelDataInStart + (iterationCount * (data->input.rowbytes / sizeof(PF_Pixel))); PF_Pixel *outP = pixelDataOutStart + (iterationCount * (data->output.rowbytes / sizeof(PF_Pixel))); for (int i = 0; i < data->input.width; i++) { outP->alpha *= inP->alpha; inP++; outP++; } return err; } Thanx again for your help! François
... View more
Jun 07, 2013
01:24 AM
Hey Shachar! I have troubles getting the baseAdress... I can't find how to access it directly (and don't see it in any "typedef struct" or any declaration) I found "get_pixel_data8" and "AEGP_GetBaseAddr8" but they both crash AE... Did I miss something on how to access it directly? Or should I dig deeper in "get_pixel_data8" or "AEGP_GetBaseAddr8"? François ************************************************************************************************* I found an answer there: http://forums.adobe.com/message/3552882#3552882 So: PF_Pixel8 *pixelDataInStart = reinterpret_cast <PF_Pixel8 *>(data->input.data);
... View more
Jun 06, 2013
09:03 PM
Wow! This is more than I expected!! Thank you so much Shachar, one more time! Cheers, François
... View more
Jun 04, 2013
03:11 AM
Hi Shachar! Do you have any precision about how to use iterateGeneric() ? I didn't find any example on the sdk, and as I have no C++ background, it's difficult to figure out... By the way, the blending operation works just fine, it's just too slow... Thanx, François
... View more
May 15, 2013
07:43 AM
1 Upvote
Hi Nicolas! (ou salut? , je laisse en anglais pour que ça serve au maximum...) Your thread is old but I might have an answer, as I'm trying to do something similar now: I have a loop with all my masks. I use a newWorld filled with white (the idea is from Shachar Carmi, of course!), mask it with PF_MaskWorldWithPath (you're right, no expansion...) and then turn the layer to a matte (0 alpha -> black, 255 alpha -> white). Then I composite with the previous one with a blend mode... And use this world as a matte. For the substract mode, the trick is to invert the matte before blending : 255 alpha -> black, 0 alpha -> white Then you can use PF_Xfer_DARKEN to blend your mask with others. If someone has a better way, I'm interested too! Cheers, François
... View more
May 13, 2013
08:39 AM
Hey Shachar! For my Mask Effect, I finally managed to get it work during preview AND real render, and all the stuff... But there is still something going wrong. I finally make my Mask modifications, and CHECKOUT_PARAM() to get the frame before effect. Then I try to combine my pre-effect image with my mask using PF_MaskWorldWithPath. The problem is PF_MaskWorldWithPath doesn't really mask my image from a maskPath, but from the alpha result of the maskPath... For example, it has no effect with a maskMode_NONE mask. Or if it can do that, well, how? I didn't see any mode parameter... So I decide to fill the invert of my mask with a 0 alpha color, so I can erase the outside... Cos "Fill" or "Stroke" effects work just fine after my FX, they don't care about the mask's real alpha result, they just use the path. Do you have any clue on how it works? If you have, you'll save my life once again 😉 Cheers, François
... View more