still question about object axis



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

    On 14/06/2009 at 13:55, xxxxxxxx wrote:

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

    ---------
    hi there,

    i am totally struggling now.. i need to set the axis of an object to a specific value and i have absolutely no clue how to do this. not even a shade of knowledge...

    for example i want to set it to the global (0,0,0) coordinate..

    maybe someone can help me solve this? i've got the first tip here, but i must admit that i dont understand that matrix stuff good enough to use it...

    thanks in advance,
    ello



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

    On 14/06/2009 at 15:29, xxxxxxxx wrote:

    could it really be that it is that simple???

    > `

      
    \>  void setAxis(BaseDocument *doc, BaseObject *op, Vector pos)  
    \>  {  
    \>       Matrix m;  
    \>       Matrix tm;  
    \>       m.off = pos;  
    \>       while(op)  
    \>       {  
    \>            if (op->GetType()==Opolygon)  
    \>            {  
    \>                 tm = op->GetMl();  
    \>                 PointObject *pobj = static_cast<PointObject*>(op);  
    \>                 Vector *parr = pobj->GetPointW();  
    \>                 LONG pcnt = pobj->GetPointCount();  
    \>                 GePrint(LongToString(pcnt));  
    \>                 for(int i=0;i<pcnt;i++)  
    \>                 {  
    \>                      parr[i]*=tm;  
    \>                 }  
    \>    
    \>                 op->SetMl(m,FALSE);  
    \>            }  
    \>            setAxis(doc,op->GetDown(),pos);  
    \>            op = op->GetNext();  
    \>       }  
    \>  }  
    \>  
    

    `

    in my first tests it seems that this is it??

    thanks for checking,
    ello



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

    On 14/06/2009 at 15:55, xxxxxxxx wrote:

    hm, now i face another problem.. what is wrong with my code? i am trying to calculate the center of a polygonobject, but it doesnt work:

    > `

      
    \>                 Vector cpos = Vector(0);  
    \>                 PointObject *pobj = static_cast<PointObject*>(op);  
    \>                 Vector *parr = pobj->GetPointW();  
    \>                 LONG pcnt = pobj->GetPointCount();  
    \>                 if (pcnt>0)  
    \>                 {  
    \>                      for(int i=0;i<pcnt;i++)  
    \>                      {  
    \>                           cpos += parr[i];  
    \>                      }  
    \>                      cpos /= pcnt;  
    \>                 }  
    \>  
    

    `

    where's my fault?

    thanks and cheers,
    ello



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

    On 15/06/2009 at 13:44, xxxxxxxx wrote:

    hmm, somehow the axis is not centered correctly, nearby, but not exactly where it should be..

    > `

      
    \>  void setAxisSingleObject(BaseObject *op, Vector pos)  
    \>  {  
    \>       Matrix m;  
    \>       m.off = -pos;  
    \>       if (op->GetType()==Opolygon)  
    \>       {  
    \>            PointObject *pobj = static_cast<PointObject*>(op);  
    \>            Vector *parr = pobj->GetPointW();  
    \>            LONG pcnt = pobj->GetPointCount();  
    \>            for(int i=0;i<pcnt;i++)  
    \>            {  
    \>                 parr[i]*=m;  
    \>            }  
    \>            m.off = pos;  
    \>            op->SetMl(m,FALSE);  
    \>       }  
    \>  }  
    \>    
    \>  void centerAxis(BaseObject *op)  
    \>  {  
    \>            if (op->GetType()==Opolygon)  
    \>            {  
    \>                 Vector cpos = Vector(0);  
    \>                 PointObject *pobj = static_cast<PointObject*>(op);  
    \>                 Vector *parr = pobj->GetPointW();  
    \>                 LONG pcnt = pobj->GetPointCount();  
    \>                 if (pcnt>0)  
    \>                 {  
    \>                      for(int i=0;i<pcnt;i++)  
    \>                      {  
    \>                           cpos += parr[i];  
    \>                      }  
    \>                      cpos /= pcnt;  
    \>                      setAxisSingleObject(op, cpos+op->GetPos());  
    \>                 }  
    \>            }  
    \>  }  
    \>  
    

    `

    anyone sees where i am wrong here?

    thanks in advance.
    cheers,
    ello


Log in to reply