Using a BaseObject as Polygon



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

    On 21/11/2002 at 08:20, xxxxxxxx wrote:

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

    ---------
    How can I use a BaseObject as a PolygonObject? I am casting it to a Polygonobject and change for example a point (in position). That works fine when the object is a Polygonobject in Cinema 4D (and I can see the point moving in C4D). But when it is still a BaseObject (PrimitiveObject ie Sphere) in Cinema 4D it doesn´t work.
    So how can I use it as if it was a Polygonobject? It sure is just a simple thing, but I can´t make it anyway. :)
    Thanks



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

    On 21/11/2002 at 10:03, xxxxxxxx wrote:

    You can't. But you can convert it to a PolygonObject with:

        
        
        BaseObject* GetDeformedObject(BaseObject* obj, BaseDocument* doc)  
        {  
         if (!obj) return NULL;
        
        
        
        
         ModelingCommandData cd;  
         cd.doc = doc;  
         cd.op = obj;  
         if (!SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT,cd)) return NULL;
        
        
        
        
         return cd.result1;  
        }
    


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

    On 21/11/2002 at 11:01, xxxxxxxx wrote:

    Thanks that worked but it somehow gives me a really strange result. :\ It seems the returned BaseObject is somehow corrupted. When using a normal polygonobject and using the new code with a primitive it looks completely different and weird.
    I will have a look in my code. Maybe it´s something in there but I couldn´t find anything yet.
    I´ll get back to you when I know more.
    Best
    Samir



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

    On 21/11/2002 at 11:45, xxxxxxxx wrote:

    Oh yeah, something is definetly wrong with the returned object. When I use my code my deformer deforms with no strenght a sphere to this result:

    But when I use my code with the function you gave me (that looks alright to me anyway) I get this result with no strenght:

    I couldn´t find a mistake in my code. Everything is still the same. Now I only ask for the object type:

        
        
        Bool VertexNormal::ModifyObject(PluginObject *mod, BaseDocument *doc, BaseObject *op, const Matrix &op_mg, const Matrix &mod_mg, Real lod, LONG flags, BaseThread *thread)  
        {
        
        
        
        
        PolygonObject* obj;
        
        
        
        
        if(!op->IsInstanceof(Opoint) || !op->IsInstanceof(Opolygon)) obj = (PolygonObject* )GetDeformedObject(op,doc);
        
        
        
        
        else obj=(PolygonObject* )op; if(!obj) return TRUE;
    

    Any ideas? :(



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

    On 22/11/2002 at 08:05, xxxxxxxx wrote:

    In your test you are saying:

    If not a point object, OR not a poly object...

    For this test to be false, BOTH parts must be false.
    For both to be false the object must be both a point object and a poly object.

    Poly objects are derived from point objects, so a poly object is also a point object, so this test is equivalent to saying

    If not a poly object...

    which is simpler and clearer.

    The other thing I noted is that you are returning TRUE if 'obj' is NOT valid...

    Hope this helps



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

    On 22/11/2002 at 08:55, xxxxxxxx wrote:

    Poly objects are derived from point objects, so a poly object is also a point object, so this test is equivalent to saying

    If not a poly object...
    -----------------------
    True that. :) But not that bad. thanks anyway
    ------------------------
    The other thing I noted is that you are returning TRUE if 'obj' is NOT valid
    ------------------------
    yes, because the method returns TRUE, so I am returning TRUE too. This will stop the execution of the code anyway. It´s not always FALSE ;)
    ------------------------
    Hope this helps
    ------------------------
    no not really in my case. The procedure does work, but the returned BaseObject is somehow weird. There must be a fault anywhere in my code, cause after checking the returned object it seems to be completely ok.
    Best
    Samir


Log in to reply