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 28/08/2009 at 18:19, xxxxxxxx wrote:

      great thanks. Now I have another question. Is it possible to create a true nurbs object within C4D? I suppose it would be done using splines. But its it possible to create geometry between splines?

      Just curious.

      ~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 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