Object likely to NullObject



  • 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



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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); \> } \>

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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


Log in to reply