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

    op->Remove(); doesnt remove the object at all

    Scheduled Pinned Locked Moved SDK Help
    4 Posts 0 Posters 414 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 28/01/2011 at 09:07, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:    
      Platform:      
      Language(s) :   C.O.F.F.E.E  ;

      ---------
      Hi,

      I'm having some trouble with the Remove-Function of the BaseList2D class.
      When i call this function, the object will be removed from the document, as it should be.
      But the variable still contains the object.
      I want to use this variable again, so it should be overwritten with a new defintion, but anything i do, it won't work.

      I have an object that should be removed. The new Object is later allocated in the same variable.
      But anything i do, its like the old object is kept.

      var doc = GetActiveDocument();  
      var op, bc;  
        
      op = doc->GetActiveObject();  
      if (op) {  
        op->Remove();  
        doc->MultiMessage(MSG_UPDATE);  
      }  
        
      op = AllocObject(Ocube);  
      bc = op->GetContainer();  
      doc->InsertObject(op,null,null);   
        
      ///Make Editable  
      doc->SetActiveObject(op);  
      SendModelingCommand(MCOMMAND_MAKEEDITABLE, doc, op, bc, MODIFY_ALL);  
      op = doc->GetActiveObject();  
      bc = op->GetContainer();  
        
      Subdivider(op,true,2,true);        //A function i declared to subdive  
      

      The result i recieve, is that the old object gets subdivided, not the new cube. And i just don't get why and how i can prevent from this. 😢😢

      The very strange is, if I change the variable for just the active object which gets removed, the result is the same O.o

      thanks in advance, nux

      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/01/2011 at 12:06, xxxxxxxx wrote:

        The variable still contains the object because you may want to insert it somewhere else.

        When I use your script without the last line (since you didn't include the method), it works fine: I get an editable cube, and my original object is gone. Looks fine to me. Can't really see an error on first glance either.

        But what does your Subdivider method do? Does it perhaps access the original object somehow?

        Please post the full code for a check...

        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 29/01/2011 at 00:11, xxxxxxxx wrote:

          Hm, strange.

          Here is the code of the Subdivider Function. It also displaces the polygons and so on.

          Subdivider(op,sub,subdivs,round) {  
            var doc = GetActiveDocument();  
            var bc = new(BaseContainer);  
            var i;    
            for (i=0; i <= op->GetPolygonCount(); i++){  
                var RockPoly = new(BaseSelect);  
                RockPoly->Select((int(polyrand->Get01() * i)));  
                op->SetPolygonSelection(RockPoly);  
                bc->SetData(MDATA_NORMALMOVE_VALUE , (int(polyrand->Get01() * i))*edt_destruct/100/(edt_subdivs+1));  
                SendModelingCommand(ID_MODELING_NORMALMOVE_TOOL, NULL, op, bc, MODIFY_POLYGONSELECTION);  
            }  
              
            bc->SetData(MDATA_SUBDIVIDE_HYPER, round);  
            bc->SetData(MDATA_SUBDIVIDE_ANGLE, PI);  
            bc->SetData(MDATA_SUBDIVIDE_SUB, 1);  
            SendModelingCommand(MCOMMAND_SUBDIVIDE, NULL, op, bc, MODIFY_ALL);  
            if (sub == true && subdivs > 0) {  
                bc->SetData(MDATA_SUBDIVIDE_HYPER, round);  
                bc->SetData(MDATA_SUBDIVIDE_ANGLE, PI);  
                bc->SetData(MDATA_SUBDIVIDE_SUB, subdivs);  
                SendModelingCommand(MCOMMAND_SUBDIVIDE, NULL, op, bc, MODIFY_ALL);  
            }  
            
            bc->SetData(MDATA_SETVALUE_SETX, MDATA_SETVALUE_CRUMPLE_ALONGNORMALS);  
            bc->SetData(MDATA_SETVALUE_SETY, MDATA_SETVALUE_CRUMPLE_ALONGNORMALS);  
            bc->SetData(MDATA_SETVALUE_SETZ, MDATA_SETVALUE_CRUMPLE_ALONGNORMALS);  
            bc->SetData(MDATA_SETVALUE_VAL, vector(edt_shapesmooth+10,edt_shapesmooth+10,edt_shapesmooth+10));  
            SendModelingCommand(ID_MODELING_SETVALUE_TOOL, doc, op, bc, MODIFY_ALL);  
          }
          

          cheers, nux

          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 29/01/2011 at 02:31, xxxxxxxx wrote:

            Sorry - cannot confirm.

            I put it all into a simple script in the script manager, added some initialization and stuff that was not declared, made proper outputs... the object that is assigned to "op" is a cube, stays a cube, is subdivided as a cube. The original (deleted) object is gone. No error so far.

            I tried it single, in hierarchies, with nulls, with various objects, no errors. I can't see a coding error either.

              
            Subdivider(op,sub,subdivs,round) {   
                 println("Pt4: " + op->GetName());   
                 var polyrand = new(Random);   
                 polyrand->Init(8374946);   
                 var edt_destruct = 1;   
                 var edt_subdivs = 1;   
                 var edt_shapesmooth = 1;   
              
                var doc = GetActiveDocument();   
                var bc = new(BaseContainer);   
                var i;   
                for (i=0; i <= op->GetPolygonCount(); i++){   
                    var RockPoly = new(BaseSelect);   
                    RockPoly->Select((int(polyrand->Get01() * i)));   
                    op->SetPolygonSelection(RockPoly);   
                    bc->SetData(MDATA_NORMALMOVE_VALUE , (int(polyrand->Get01() * i))*edt_destruct/100/(edt_subdivs+1));   
            println("Pt5: " + op->GetName());   
                    SendModelingCommand(ID_MODELING_NORMALMOVE_TOOL, NULL, op, bc, MODIFY_POLYGONSELECTION);   
                }   
                   
                bc->SetData(MDATA_SUBDIVIDE_HYPER, round);   
                bc->SetData(MDATA_SUBDIVIDE_ANGLE, PI);   
                bc->SetData(MDATA_SUBDIVIDE_SUB, 1);   
                SendModelingCommand(MCOMMAND_SUBDIVIDE, NULL, op, bc, MODIFY_ALL);   
                if (sub == true && subdivs > 0) {   
                    bc->SetData(MDATA_SUBDIVIDE_HYPER, round);   
                    bc->SetData(MDATA_SUBDIVIDE_ANGLE, PI);   
                    bc->SetData(MDATA_SUBDIVIDE_SUB, subdivs);   
                    SendModelingCommand(MCOMMAND_SUBDIVIDE, NULL, op, bc, MODIFY_ALL);   
                }   
              
                bc->SetData(MDATA_SETVALUE_SETX, MDATA_SETVALUE_CRUMPLE_ALONGNORMALS);   
                bc->SetData(MDATA_SETVALUE_SETY, MDATA_SETVALUE_CRUMPLE_ALONGNORMALS);   
                bc->SetData(MDATA_SETVALUE_SETZ, MDATA_SETVALUE_CRUMPLE_ALONGNORMALS);   
                bc->SetData(MDATA_SETVALUE_VAL, vector(edt_shapesmooth+10,edt_shapesmooth+10,edt_shapesmooth+10));   
                SendModelingCommand(ID_MODELING_SETVALUE_TOOL, doc, op, bc, MODIFY_ALL);   
            }   
              
              
            main(docA, opA)   
            {   
            var doc = GetActiveDocument();   
            var op, bc;   
              
            op = doc->GetActiveObject();   
            if (op) {   
                      println("Pt1: " + op->GetName());   
                op->Remove();   
                doc->MultiMessage(MSG_UPDATE);   
            }   
              
            op = AllocObject(Ocube);   
            bc = op->GetContainer();   
            doc->InsertObject(op,null,null);   
            println("Pt2: " + op->GetName());   
              
            ///Make Editable   
            doc->SetActiveObject(op);   
            SendModelingCommand(MCOMMAND_MAKEEDITABLE, doc, op, bc, MODIFY_ALL);   
            op = doc->GetActiveObject();   
            bc = op->GetContainer();   
            println("Pt3: " + op->GetName());   
              
            Subdivider(op,true,2,false);        //A function i declared to subdive   
            }   
            
            1 Reply Last reply Reply Quote 0
            • First post
              Last post