MCOMMAND_MAKEEDITABLE -> Cinema crashes



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

    On 17/05/2008 at 12:52, xxxxxxxx wrote:

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

    ---------
    Hi.
    I'm trying to make a cube in C++ and then make it editable. This is my code so far in my object-plugin:

    BaseObject* extrudierterWuerfel::GetVirtualObjects(BaseObject *op, HierarchyHelp *hh)
    {
         BaseObject *wuerfel = BaseObject::Alloc(Ocube);
         BaseDocument *doc = op->GetDocument();
         doc->InsertObject(wuerfel, NULL, NULL);

    ModelingCommandData datac;
         BaseContainer basec;

    datac.doc=doc;
         datac.op=op;
         datac.bc=&basec;
         
        SendModelingCommand(MCOMMAND_MAKEEDITABLE, datac);
         
         return wuerfel;
    }

    I don't know what is wrong, but when I start the plugin, Cinema crashes. When I change the command from MCOMMAND_MAKEEDITABLE to MCOMMAND_SELECTALL, that doesn't happen.
    Can you please help me?



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

    On 17/05/2008 at 14:42, xxxxxxxx wrote:

    You CANNOT use SendModelingCommand() in GetVirtualObjects() - especially anything that causes a cache rebuild which is what GetVirtualObjects() is already in the process of doing. MAKEEDITABLE and CURRENTSTATETOOBJECT for instance.



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

    On 17/05/2008 at 15:06, xxxxxxxx wrote:

    Ah, ok, but where or how should I do it then?



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

    On 17/05/2008 at 15:52, xxxxxxxx wrote:

    Not there? ;)

    You'll have to allocate a PolygonObject to be returned and fill in the Vector and Polygon arrays yourself if you must do it in GetVirtualObjects().



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

    On 18/05/2008 at 05:43, xxxxxxxx wrote:

    Thanks so far, I found another thread here, where is described how to do this with a copy of the object. This is my new code:

    BaseObject* extrudierterWuerfel::GetVirtualObjects(BaseObject *op, HierarchyHelp *hh)
    {
         BaseDocument *doc = op->GetDocument();

    BaseObject *cloned = BaseObject::Alloc(Ocube);
         
         PolygonObject *poly=NULL;

    BaseDocument *copydoc=doc->Alloc();
        copydoc->InsertObject(cloned,NULL,NULL,FALSE);

    ModelingCommandData cd,cd2,cd3;
         cd.doc     = copydoc;
         cd.op     = cloned;
         if (!SendModelingCommand(MCOMMAND_MAKEEDITABLE, cd)) return NULL;

    poly=static_cast<PolygonObject*>(cd.result->GetIndex(0));

    copydoc->SetMode(Mpolygons);
         
         
         BaseContainer bc;
         bc.SetData(MDATA_EXTRUDE_OFFSET, 50);          
         
         ModelingCommandData extrusionmcd;

    extrusionmcd.bc=&bc;
         extrusionmcd.doc=copydoc;
         extrusionmcd.op=poly;

    SendModelingCommand(ID_MODELING_EXTRUDE_TOOL, extrusionmcd);
         
         return poly;
    }

    The good thing here is, that nothing crashes. The bad thing is, that no making editable or extrusion happens. Why is that?



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

    On 22/05/2008 at 02:58, xxxxxxxx wrote:

    Nobody knows what's wrong here? Is it that I have to copy the object back into the Basedocument doc?


Log in to reply