My VideoPost Plugin can't be inserted
-
On 28/06/2015 at 08:29, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R15
Platform: Windows ; Mac ;
Language(s) : C++ ;---------
Hello SDK Support Team!
I've run into a little big problem and I can't find out what could be the cause and I also wasn't able
to revert to a situation where this problem does not occur.The VideoPostData plugin I created can not be added the the RenderData. You can see it in the
drop-down menu when you press the "Effect..." button, but selecting it from the list does not
insert it.I've added a print statement to my LensVideoPost::Alloc() static function to check when the
function is called. The observations I made certainly confuse me.- Pressing the "Effect..." button calls LensVideoPost::Alloc(). But the object is destroyed immediately
afterwards (I assume the "Effect..." button builds the menu by allocating an instance of each plugin,
getting its name and then freeing it again) - After the Video Post is selected, nothing happens. Alloc() is not even called!
- Trying to create one from Python fails instantly, Alloc() is not called!
- Opening a scene that already had this Video Post inserted works! However, when you remove the
Video Post and try to add it again, its the same behaviour as I already described. - Cloning the Video Post from the scene that was loaded works as well.
I would like to send you the plugin for Windows or Mac (both same behaviour) and a scene that
contains the plugin so you can also check out observation #4. Please let me know if you need it
and where to send it.Thanks a lot in advance!
Niklas - Pressing the "Effect..." button calls LensVideoPost::Alloc(). But the object is destroyed immediately
-
On 30/06/2015 at 02:37, xxxxxxxx wrote:
Hello,
without any code it is hard to say anything. Please provide some snippets of the most relevant parts of your code (Register() etc.).
Best wishes,
Sebastian -
On 30/06/2015 at 04:27, xxxxxxxx wrote:
Hi Sebastian,
sure. Here's the register, alloc, init and free functions:
/// --------------------------------------------------------------------------- /// --------------------------------------------------------------------------- class LensVideoPost: public VideoPostData { // ... public: static NodeData* Alloc() { GePrint(">>> LensVideoPost::Alloc()"); return NewObjClear(LensVideoPost); } // ... }; /// --------------------------------------------------------------------------- /// --------------------------------------------------------------------------- Bool RegisterLensVideoPost() { const String name = GeLoadString(PROJLENS_PLUGINID); return RegisterVideoPostPlugin( PROJLENS_PLUGINID, // Plugin ID name, // Name 0, // Info Flags LensVideoPost::Alloc, // Allocator "vpprojlens", // Description 0, // Disklevel 0, // Priority nullptr); // Unused, always nullptr } /// --------------------------------------------------------------------------- /// --------------------------------------------------------------------------- Bool LensVideoPost::Init(GeListNode* node) { GePrint(">>> LensVideoPost::Init() #1"); if (!node || !super::Init(node)) return false; BaseContainer* bc = Get(node)->GetDataInstance(); GePrint(">>> LensVideoPost::Init() #2"); if (!bc) return false; GePrint(">>> LensVideoPost::Init() #3"); bc->SetInt32(PROJLENS_TYPE, PROJLENS_TYPE_EQUIRECTANGULAR); bc->SetFloat(PROJLENS_EQUI_HFOV, Rad(180.0)); bc->SetFloat(PROJLENS_EQUI_VFOV, Rad(90.0)); bc->SetBool(PROJLENS_EQUI_NODISTORTION, true); bc->SetFloat(PROJLENS_FISH_FOV, Rad(180.0)); bc->SetBool(PROJLENS_FISH_OVERLAY, false); bc->SetFloat(PROJLENS_STEREOGRAPHIC_ZPOSITION, 1.0); return true; } /// --------------------------------------------------------------------------- /// --------------------------------------------------------------------------- void LensVideoPost::Free(GeListNode* node) { GePrint(">>> LensVideoPost::Free()"); }
Cheers,
-Niklas -
On 30/06/2015 at 08:49, xxxxxxxx wrote:
hey Niklas,
I'm not sure about the 2 early returns in your Init() function.
1- in my videopost plugin I don't call parent Init()
2- I get container like this "not sure about the Get(node)"BaseVideoPost\* bvp = (BaseVideoPost\* )node; BaseContainer\* data = bvp->GetDataInstance();
so maybe when you create the plugin it get stuck at Init()
but when you load a document with the plugin it doesn't call Init() at all "as it may be using read/write stuff to copy data directly without the need of using Init()" -
On 30/06/2015 at 09:07, xxxxxxxx wrote:
hey Mohamend,
thanks for your comment. But Init() succeeds, so that's not the issue I think. The Get() you see in
Init() is overloaded and does basically the cast to BaseVideoPost. -
On 01/07/2015 at 01:47, xxxxxxxx wrote:
Hello,
you code looks good so gar. But based on the class name I assume you are creating a custom lens? Maybe this causes the described behavior.
Best wishes,
Sebastian