Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python 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
    • Recent
    • Tags
    • Users
    • Login

    Sweep Nurbs Question

    Scheduled Pinned Locked Moved SDK Help
    8 Posts 0 Posters 590 Views
    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 Offline
      Helper
      last edited by

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

      On 14/09/2011 at 19:42, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   13 
      Platform:   Windows  ; Mac  ;  
      Language(s) :     C++  ;

      ---------
      Hey Everyone,

      I have a sweep Nurbs under which place a cubic spline and a circle spline.  Then, I make the sweep nurbs editable via SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT, mcd);

      The result is that the main object has two children object which are the caps that were created.  What I woiuld like to do then , is connect the caps to the main body and then optimize that to connect the caps to the main body.  This is of course all via code and not manually.

      Could someone explain to me how I would do this?

      I understand how to run optimize via SendModelingCOmmand..   and I have found that the Connect + Delete command can be called via CallCommand(16768);  But I can't seem to make it work..  When I add the call command, c4d crashes.

      Here is the code I am trying to use.  🙂

        
        
      //CONVERT TO POLYGON OBJECT  
        //==========================================================//  
        ModelingCommandData mcd;  
        mcd.op = objsweep;  
        
      #ifdef C4D_R12  
        mcd.mode = MODELINGCOMMANDMODE_ALL;  
      #else  
        mcd.mode = MODIFY_ALL;  
      #endif  
        
        mcd.doc = doc;  
        SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT, mcd);  
        BaseObject *res = static_cast<BaseObject*>(mcd.result->GetIndex(0));  
        
        PolygonObject *polyObj = (PolygonObject * )res;  
        if(!polyObj) return NULL;  
        //==========================================================//  
        
        CallCommand(16768);  //Connect and Delete  
        
        // MESH OPTIMIZE  
        //==========================================================//  
        ModelingCommandData mcd3;  
        BaseContainer bc3;  
        bc3.SetReal(MDATA_OPTIMIZE_TOLERANCE, 0.01);  
        bc3.SetReal(MDATA_OPTIMIZE_POINTS, TRUE);  
        bc3.SetReal(MDATA_OPTIMIZE_POLYGONS, TRUE);  
        bc3.SetReal(MDATA_OPTIMIZE_UNUSEDPOINTS, TRUE);  
        mcd3.bc = &bc3;  
        
        mcd3.op = polyObj;  
        
      #ifdef C4D_R12  
        mcd3.mode = MODELINGCOMMANDMODE_ALL;  
      #else  
        mcd3.mode = MODIFY_ALL;  
      #endif  
        
        mcd3.doc = doc;  
          
        if(SendModelingCommand(MCOMMAND_OPTIMIZE, mcd3)){}  
        
        polyObj->Message(MSG_UPDATE);  
        //==========================================================//  
        
      

      Any help you could offer would be great.  🙂

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

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

        On 15/09/2011 at 01:28, xxxxxxxx wrote:

        From where do you call this, from GetVirtualObjects?

        cheers,
        Matthias

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

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

          On 15/09/2011 at 03:29, xxxxxxxx wrote:

          Woops,  sorry!  Yes, it is called from GetVirtualObjects()

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

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

            On 15/09/2011 at 06:47, xxxxxxxx wrote:

            I've just been through this very same thing so I feel your pain. I don't think you can use CallCommand from GVO. What I did was take the object returned from the CurrentStateToObject and did another SendModelingCommand on it using MCOMMAND_JOIN. Since that also returns a new object you can delete the object returned from the first SendModelingCommand call ('res' in your case) and return the connected one. Or do an optimize on it then return it (I didn't need the optimized version).

            Seems to work for me, anyway.

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

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

              On 15/09/2011 at 08:45, xxxxxxxx wrote:

              CallCommand within GetVirtualObjects is fatal and forbidden. As suggested use SendModelingCommand to join and optimize objects.

              cheers,
              Matthias

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

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

                On 15/09/2011 at 08:49, xxxxxxxx wrote:

                Just to add, always keep in mind that GetVirtualObjects sole purpose is to return an object or a group of objects. Every change to the document or the interface is strictly forbidden. If you think about it that it runs in a multithreaded context it makes sense.

                cheers,
                Matthias

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

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

                  On 15/09/2011 at 09:15, xxxxxxxx wrote:

                  Thanks guys.  I will do that. 
                   
                  @Matthias.  Thanks for the Info.  That makes perfect sense.  GVO and I have had a love hate relationship for a while now.  HAHA  I am always trying to push her beyond her limits..  LOL
                   
                  Thanks again!
                   
                  ~Shawn

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

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

                    On 16/09/2011 at 08:30, xxxxxxxx wrote:

                    Howdy,

                    Remember, that to get around some of the limitations due to thread safety, you can sometimes use a separate document, held in memory only, to do your building. I don't know what the efficiency of that method is, though. It's probably dependent on how many calls or calculations are needed to perform the task.

                    Adios,
                    Cactus Dan

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