Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Subdivide

    SDK Help
    0
    26
    14.5k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

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

      On 03/09/2009 at 14:04, xxxxxxxx wrote:

      So in my Message() for my tool plugin I have the following code.

      > `

        
      \>  Bool SculptTool::Message(BaseDocument* doc, BaseContainer& data, LONG type, void* t_data)  
      \>  {  
      \>    
      \>  switch (type)  
      \>       {  
      \>            case MSG_DESCRIPTION_COMMAND:  
      \>            {  
      \>            DescriptionCommand *dc = (DescriptionCommand* ) t_data;  
      \>            if (dc->id[0].id==COMMAND_SUBDIVIDE)  
      \>                 {  
      \>                 GePrint("Subdivide Button Clicked");  
      \>                 }  
      \>            }  
      \>       }  
      \>       return TRUE;  
      \>  }  
      \>  
      

      `

      Where if say's GePrint ("Subdivide Button Clicked"); I would instead like to execute the DoCommand() member. in that is the following code.

      > `

        
      \>  Bool SculptTool::DoCommand(ModelingCommandData &mdat;)  
      \>  {  
      \>    
      \>  //CODE RELATED TO THE SUBDIVISION OPTIONS/////////////////////////////////  
      \>    
      \>       //Define Variables  
      \>    
      \>       BaseObject *op=mdat.doc->GetActiveObject();  
      \>       PolygonObject* objPoly;  
      \>       objPoly=(PolygonObject* )op;  
      \>    
      \>       //Determine Attributes  
      \>    
      \>       if (mdat.bc->GetBool(HYPERNURBS_SUBDIVISION, TRUE)) //If HyperNURBS is checked  
      \>       {  
      \>       mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, TRUE); //Set HyperNURBS subdivision  
      \>       }  
      \>       else  
      \>       {  
      \>       mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, FALSE); //Disable HyperNURBS subdivision  
      \>       }  
      \>       mdat.bc->SetLong(MDATA_SUBDIVIDE_SUB, mdat.bc->GetLong(NUM_SUBDIVISIONS)); //Set Number of Subdivisions  
      \>       mdat.bc->SetReal(MDATA_SUBDIVIDE_ANGLE, mdat.bc->GetReal(MAX_ANGLE)); //Set Maxiumum Angle  
      \>              
      \>       //Subdivision Command  
      \>       SendModelingCommand(MCOMMAND_SUBDIVIDE, mdat);  
      \>       mdat.bc->SetLong(POLYGON_COUNT, objPoly->GetPolygonCount());  
      \>         
      \>       return true;  
      \>    
      \>  //END SUBDIVISION OPTIONS/////////////////////////////////////////////////  
      \>    
      \>    
      \>  }  
      \>  
      

      `

      Can anyone explain how ot do this?
      Thanks
      ~Shawn

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

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

        On 03/09/2009 at 19:11, xxxxxxxx wrote:

        You should just call DoCommand() where you have that GePrint() in Message().

        Save yourself unnecessary variables and wasted time and just do:

        PolygonObject *objPoly = ToPoly(mdat.doc->GetActiveObject());

        🙂

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

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

          On 03/09/2009 at 19:56, xxxxxxxx wrote:

          Okay this is the code now.

          > `

            
          \>  Bool SculptTool::Message(BaseDocument* doc, BaseContainer& data, LONG type, void* t_data)  
          \>  {  
          \>    
          \>  switch (type)  
          \>       {  
          \>            case MSG_DESCRIPTION_COMMAND:  
          \>            {  
          \>            DescriptionCommand *dc = (DescriptionCommand* ) t_data;  
          \>            if (dc->id[0].id==COMMAND_SUBDIVIDE)  
          \>                 {  
          \>                 GePrint("Subdivide Button Clicked");  
          \>                 DoCommand();  
          \>                 }  
          \>            }  
          \>       }  
          \>       return TRUE;  
          \>  }  
          \>  
          

          `

          This is the error I get now.

          error C2660: 'SculptTool::DoCommand' : function does not take 0 arguments

          any thoughts?

          ~Shawn

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

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

            On 03/09/2009 at 20:02, xxxxxxxx wrote:

            Well, I hate to be obvious but you need to fill and send the ModelingCommandData& mdat argument for your DoCommand() function. 🙂

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

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

              On 03/09/2009 at 20:14, xxxxxxxx wrote:

              LOL..   obviously the obvious eludes me some times. HAHA..

              Do I fill it the way it is declared?

              like this.

              DoCommand(ModelingCommandData &mdat;);

              or do I need something else in the parenthesis?

              LOL. thank you for you patience with this noob.

              ~Shawn

              1 Reply Last reply Reply Quote 0
              • H
                Helper
                last edited by

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

                On 03/09/2009 at 20:27, xxxxxxxx wrote:

                Like this unless you have another mdat you have already alotted for this:

                > Bool SculptTool::Message(BaseDocument\* doc, BaseContainer& data, LONG type, void\* t_data) \> { \> switch (type) \>      { \>           case MSG_DESCRIPTION_COMMAND: \>           { \>           DescriptionCommand \*dc = (DescriptionCommand\* ) t_data; \>           if (dc->id[0].id==COMMAND_SUBDIVIDE) \>                { \>                GePrint("Subdivide Button Clicked"); \>                ModelingCommandData     mdat; \>                DoCommand(mdat); \>                } \>           } \>      } \>      return TRUE; \> } \>

                1 Reply Last reply Reply Quote 0
                • H
                  Helper
                  last edited by

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

                  On 03/09/2009 at 20:31, xxxxxxxx wrote:

                  HAHA.. WOW.. that couldn't be more obvious..   LOL

                  thanks Robert. Not sure what time it is where you are but it's 11:30 PM here in NY.    I'm obviously tired..

                  Thanks again.

                  ~Shawn

                  1 Reply Last reply Reply Quote 0
                  • H
                    Helper
                    last edited by

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

                    On 03/09/2009 at 20:36, xxxxxxxx wrote:

                    Okay. so now it calls the DoCommand function but as soon as it does, C4D crashes out...

                    Do you see anything in this code that would cause C4D to crash?

                    > `

                      
                    \>  Bool SculptTool::DoCommand(ModelingCommandData &mdat;)  
                    \>  {  
                    \>    
                    \>  //CODE RELATED TO THE SUBDIVISION OPTIONS/////////////////////////////////  
                    \>    
                    \>       //Define Variables  
                    \>    
                    \>      PolygonObject *objPoly = ToPoly(mdat.doc->GetActiveObject());  
                    \>    
                    \>       //Determine Attributes  
                    \>    
                    \>       if (mdat.bc->GetBool(HYPERNURBS_SUBDIVISION, TRUE)) //If HyperNURBS is checked  
                    \>       {  
                    \>       mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, TRUE); //Set HyperNURBS subdivision  
                    \>       }  
                    \>       else  
                    \>       {  
                    \>       mdat.bc->SetBool(MDATA_SUBDIVIDE_HYPER, FALSE); //Disable HyperNURBS subdivision  
                    \>       }  
                    \>       mdat.bc->SetLong(MDATA_SUBDIVIDE_SUB, mdat.bc->GetLong(NUM_SUBDIVISIONS)); //Set Number of Subdivisions  
                    \>       mdat.bc->SetReal(MDATA_SUBDIVIDE_ANGLE, mdat.bc->GetReal(MAX_ANGLE)); //Set Maxiumum Angle  
                    \>              
                    \>       //Subdivision Command  
                    \>       SendModelingCommand(MCOMMAND_SUBDIVIDE, mdat);  
                    \>       mdat.bc->SetLong(POLYGON_COUNT, objPoly->GetPolygonCount());  
                    \>         
                    \>       return TRUE;  
                    \>    
                    \>  //END SUBDIVISION OPTIONS/////////////////////////////////////////////////  
                    \>    
                    \>    
                    \>  }  
                    \>    
                    \>  
                    

                    `

                    Thanks,

                    ~Shawn

                    1 Reply Last reply Reply Quote 0
                    • H
                      Helper
                      last edited by

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

                      On 03/09/2009 at 20:41, xxxxxxxx wrote:

                      After you get objPoly, check that it isn't NULL:

                      if (!objPoly) return FALSE;

                      Also, make sure that the mdat.bc is set to a BaseContainer. I'd do this in Message after declaring mdat. Declare a BaseContainer and add it:

                      BaseContainer bc;
                      mdat.bc = bc;

                      You may also want to set your input BaseContainer value (HYPERNURBS_SUBDIVISION).

                      1 Reply Last reply Reply Quote 0
                      • H
                        Helper
                        last edited by

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

                        On 03/09/2009 at 20:59, xxxxxxxx wrote:

                        now I have this in Message()

                        > `

                          
                        \>  Bool SculptTool::Message(BaseDocument* doc, BaseContainer& data, LONG type, void* t_data)  
                        \>  {  
                        \>    
                        \>  switch (type)  
                        \>       {  
                        \>            case MSG_DESCRIPTION_COMMAND:  
                        \>            {  
                        \>            DescriptionCommand *dc = (DescriptionCommand* ) t_data;  
                        \>            if (dc->id[0].id==COMMAND_SUBDIVIDE)  
                        \>                 {  
                        \>                 GePrint("Subdivide Button Clicked");  
                        \>                 ModelingCommandData mdat;  
                        \>                 BaseContainer* bc;  
                        \>                 mdat.bc = bc;  
                        \>              DoCommand(mdat);  
                        \>                 }  
                        \>            }  
                        \>       }  
                        \>       return TRUE;  
                        \>  }  
                        \>  
                        

                        `

                        and this is the error.

                        warning C4700: uninitialized local variable 'bc' used

                        I assume there is more I have to do to the basecontainer.

                        🙂
                        ~Shawn

                        1 Reply Last reply Reply Quote 0
                        • H
                          Helper
                          last edited by

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

                          On 03/09/2009 at 21:19, xxxxxxxx wrote:

                          Don't use a pointer to it, just declare it as I did above. 🙂

                          1 Reply Last reply Reply Quote 0
                          • H
                            Helper
                            last edited by

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

                            On 03/09/2009 at 21:25, xxxxxxxx wrote:

                            hmm.. now I get this.

                            error C2440: '=' : cannot convert from 'BaseContainer' to 'BaseContainer *'

                            after changing

                            BaseContainer* bc;

                            to

                            BaseContainer bc;

                            1 Reply Last reply Reply Quote 0
                            • H
                              Helper
                              last edited by

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

                              On 03/09/2009 at 21:37, xxxxxxxx wrote:

                              mdat.bc = &bc;

                              That will do it.

                              1 Reply Last reply Reply Quote 0
                              • H
                                Helper
                                last edited by

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

                                On 03/09/2009 at 21:43, xxxxxxxx wrote:

                                yes it did. Thanks a lot Robert.

                                Off to bed now.

                                Thanks for your help.

                                ~Shawn

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post