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 12/04/2008 at 06:18, xxxxxxxx wrote:
User Information: Cinema 4D Version: 10.1 Platform: Windows ; Mac ; Mac OSX ; Language(s) : C++ ;
--------- Hi,
I need to make a plugin object that's in fact a Null Object (including e.g. the ID_BASEOBJECT_COLOR and ID_BASEOBJECT_SHADEDWIRECOLORMODE working as in an Null Object), just with 2 extra attributes.
I tried with:
> `
class OPointOfInterest : public ObjectData \> { \> INSTANCEOF(OPointOfInterest,ObjectData) \> \> private: \> \> public: \> virtual Bool Init(GeListNode *node); \> \> virtual Bool Message (GeListNode *node, LONG type, void *data); \> virtual Bool Draw (PluginObject *op, LONG type, BaseDraw *bd, BaseDrawHelp *bh); \> virtual Bool GetDEnabling (GeListNode *node, const DescID &id;,GeData &t;_data,LONG flags,const BaseContainer *itemdesc); \> virtual void CheckDirty(PluginObject* op, BaseDocument* doc); \> \> static NodeData *Alloc(void) { return gNew OPointOfInterest; } \> };
`
All void functions just return TRUE.
I try to register it with: > `
Bool RegisterPointOfInterest(void) \> { \> // decide by name if the plugin shall be registered - just for user convenience \> String name=GeLoadString(IDS_POINTOFINTEREST); if (!name.Content()) return TRUE; \> return RegisterObjectPlugin(ID_POINTOFINTEREST,name,0,OPointOfInterest::Alloc,"OPointOfInterest","PointOfInterest.tif",0); \> }
Not sure about the "0" flag, have also tried OBJECT_GENERATOR.
In the .res file I include Onull and add some attributes.
Now the object looks like I want, and has all attributes that I want. But if I try to use the Null Object's functionality to draw e.g. a circle in a certain color, it does not work. Nothing is drawn.
What do I have to do to make an object that completely behaves like the null object?
Thanks in advance for hints and help
Best regards, Jack
On 12/04/2008 at 07:42, xxxxxxxx wrote:
Howdy,
Well, the drawing of a Null object is in the NULL object's ObjectData::Draw() function, which you'd have to mimic in your OPointOfInterest::Draw() function. ;o)
Adios, Cactus Dan
On 12/04/2008 at 19:39, xxxxxxxx wrote:
Just return a Null object in GetVirtualObjects. Here an example (it's a modified sample from the SDK)
> \> class MorphMixerObject : public ObjectData \> { \> INSTANCEOF(MorphMixerObject,ObjectData) \> \> public: \> virtual BaseObject\* GetVirtualObjects(PluginObject \*op, HierarchyHelp \*hh); \> \> static NodeData \*Alloc(void) { return gNew MorphMixerObject; } \> }; \> \> // create morphed object \> BaseObject \*MorphMixerObject::GetVirtualObjects(PluginObject \*op, HierarchyHelp \*hh) \> { \> BaseObject \*null = NULL; \> null = BaseObject::Alloc(Onull); \> if (!null) goto Error; \> \> BaseContainer \*data = null->GetDataInstance(); \> \> data->SetLong(NULLOBJECT_DISPLAY, NULLOBJECT_DISPLAY_PENTAGON); \> \> return null; \> \> Error: \> BaseObject::Free(null); \> return NULL; \> } \> \> // be sure to use unique IDs obtained from www.plugincafe.com \> #define ID_MORPHMIXER_OBJECT 1001156 \> \> Bool RegisterMorphMixer(void) \> { \> // decide by name if the plugin shall be registered - just for user convenience \> String name=GeLoadString(IDS_MORPHMIXER); if (!name.Content()) return TRUE; \> return RegisterObjectPlugin(ID_MORPHMIXER_OBJECT,name,OBJECT_GENERATOR,MorphMixerObject::Alloc,"Omorphmixer","morphmixer.tif",0); \> } \>
\> class MorphMixerObject : public ObjectData \> { \> INSTANCEOF(MorphMixerObject,ObjectData) \> \> public: \> virtual BaseObject\* GetVirtualObjects(PluginObject \*op, HierarchyHelp \*hh); \> \> static NodeData \*Alloc(void) { return gNew MorphMixerObject; } \> }; \> \> // create morphed object \> BaseObject \*MorphMixerObject::GetVirtualObjects(PluginObject \*op, HierarchyHelp \*hh) \> { \> BaseObject \*null = NULL; \> null = BaseObject::Alloc(Onull); \> if (!null) goto Error; \> \> BaseContainer \*data = null->GetDataInstance(); \> \> data->SetLong(NULLOBJECT_DISPLAY, NULLOBJECT_DISPLAY_PENTAGON); \> \> return null; \> \> Error: \> BaseObject::Free(null); \> return NULL; \> } \> \> // be sure to use unique IDs obtained from www.plugincafe.com \> #define ID_MORPHMIXER_OBJECT 1001156 \> \> Bool RegisterMorphMixer(void) \> { \> // decide by name if the plugin shall be registered - just for user convenience \> String name=GeLoadString(IDS_MORPHMIXER); if (!name.Content()) return TRUE; \> return RegisterObjectPlugin(ID_MORPHMIXER_OBJECT,name,OBJECT_GENERATOR,MorphMixerObject::Alloc,"Omorphmixer","morphmixer.tif",0); \> } \>
cheers, Matthias
On 13/04/2008 at 09:00, xxxxxxxx wrote:
Right that's a good possibility, too. Thanks again, Matthias!
Anway, I already did the drawing stuff in the Draw(), that way I have the possibility to draw some more things and give the object a special look.
Greetings, Jack