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

    MCOMMAND_SPLIT,

    Scheduled Pinned Locked Moved SDK Help
    2 Posts 0 Posters 242 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 27/11/2009 at 14:52, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   11 
      Platform:   Windows  ;   
      Language(s) :

      ---------
      I am trying to use SendModelingCommand() to call the split command in C4D.

      This is the code I am using.

        
      PolygonObject* objPoly;   
           objPoly=(PolygonObject* )obj;   
           if (!objPoly->IsInstanceOf(Opolygon))   
                return false;   
        
                LONG id = dc->id[0].id;   
        
                ModelingCommandData mdat;   
                BaseSelect *selected = objPoly->GetPolygonS();   
                if (!selected) return FALSE;   
                BaseDocument * doc=obj->GetDocument();   
                BaseSelect * backupSel=NULL;   
        
                LONG lngI=0;   
                LONG lngPolygonCount=objPoly->GetPolygonCount();   
                LONG lngSymPlane = data->GetReal(SYMMETRY_PLANE);   
                LONG lngMirroredSide = data->GetReal(MIRRORED_SIDE);   
        
                Vector * arrPoints=objPoly->GetPointW();   
                CPolygon * arrPolygons=objPoly->GetPolygonW();   
                CPolygon * hiddenPolygons=objPoly->GetPolygonW();   
                   
                mdat.mode = MODIFY_POLYGONSELECTION;   
                mdat.doc = doc;   
                mdat.bc = data;   
                mdat.op = objPoly;   
        
                backupSel =BaseSelect::Alloc();   
                if (!backupSel)return FALSE;   
        
                selected->CopyTo(backupSel);   
                blnSymmetryEnabled=FALSE;   
                   
           if (id == DELETE)   
              
           {   
        
                if (data->GetLong(SIDE_CHOOSER)==CHOOSE_A)   
                {     //Check to see which polys will be hidden   
                     selected->DeselectAll();   
                        
                     for (lngI=0;lngI<lngPolygonCount;lngI++)   
                     {     if (PolyOnEditableSide(arrPoints, arrPolygons, lngI, lngSymPlane, lngMirroredSide, lngOldPointCount, lngOldPolygonCount))   
                               selected->Select(lngI);   
                     }   
                     SendModelingCommand(MCOMMAND_DELETE, mdat);   
                     EventAdd(EVENT_FORCEREDRAW);   
                        
                }   
        
                else if (data->GetLong(SIDE_CHOOSER)==CHOOSE_B)   
                {     //Check to see which polys will be hidden   
                     selected->DeselectAll();   
                        
                     for (lngI=0;lngI<lngPolygonCount;lngI++)   
                     {     if (!PolyOnEditableSide(arrPoints, arrPolygons, lngI, lngSymPlane, lngMirroredSide, lngOldPointCount, lngOldPolygonCount))   
                               selected->Select(lngI);   
                     }   
                     SendModelingCommand(MCOMMAND_DELETE, mdat);   
                     EventAdd(EVENT_FORCEREDRAW);   
                }   
        
           }   
        
        
           if (id == SPLIT)   
           {   
        
                if (data->GetLong(SIDE_CHOOSER)==CHOOSE_A)   
                {     //Check to see which polys will be hidden   
                     selected->DeselectAll();   
                        
                     for (lngI=0;lngI<lngPolygonCount;lngI++)   
                     {     if (PolyOnEditableSide(arrPoints, arrPolygons, lngI, lngSymPlane, lngMirroredSide, lngOldPointCount, lngOldPolygonCount))   
                               selected->Select(lngI);   
                     }   
                        
                     SendModelingCommand(MCOMMAND_SPLIT, mdat);   
                     GePrint("Splitting A");   
                     EventAdd(EVENT_FORCEREDRAW);   
                }   
        
                if (data->GetLong(SIDE_CHOOSER)==CHOOSE_B)   
                {     //Check to see which polys will be hidden   
                     selected->DeselectAll();   
                        
                     for (lngI=0;lngI<lngPolygonCount;lngI++)   
                     {     if (!PolyOnEditableSide(arrPoints, arrPolygons, lngI, lngSymPlane, lngMirroredSide, lngOldPointCount, lngOldPolygonCount))   
                               selected->Select(lngI);   
                     }   
                     SendModelingCommand(MCOMMAND_SPLIT, mdat);   
                     GePrint("Splitting B");   
                     EventAdd(EVENT_FORCEREDRAW);   
                }   
        
           }   
        
                backupSel->CopyTo(selected);   
                BaseSelect::Free(backupSel);   
                blnSymmetryEnabled=TRUE;   
        
           return TRUE;   
        
      

      For some reason, the MCOMMAND_SPLIT is not doing anything. It selects all polygons on a certain side of the object and then runs the MCOMMAND_SPLIT but it's not doing anything..   Does anyone see a problem here?

      Thanks,

      ~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 28/11/2009 at 08:14, xxxxxxxx wrote:

        You need to get the new object from the AtomArray* result:

        // - Split PolygonSelection off into new Object  
        //*---------------------------------------------------------------------------*  
        BaseObject* GreeblerObj::SplitSelection(BaseObject* op, const Bool& deltags)  
        //*---------------------------------------------------------------------------*  
        {  
          // Initialize General ModelingCommandData  
          ModelingCommandData    gmcd;  
          gmcd.doc =            NULL;  
          gmcd.op =            op;  
          gmcd.bc =            NULL;  
          gmcd.mode =            MODIFY_POLYGONSELECTION;  
          gmcd.flags =        0L;  
          // Split selected polygons (tops) into new object  
          if (!(SendModelingCommand(MCOMMAND_SPLIT, gmcd) && gmcd.result))    return NULL;  
          BaseObject*    top =    static_cast<BaseObject*>(gmcd.result->GetIndex(0L));  
          AtomArray::Free(gmcd.result);  
          return top;  
        }
        

        Afterwards, you'll need to insert into the BaseDocument yourself if necessary.

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