Box3D question



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

    On 05/10/2009 at 18:24, xxxxxxxx wrote:

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

    ---------
    Hello,

    I am creating a box that I would like to be created to be half of the size of an existing cube.   I am using Box3D to draw the box and I would like to resize the newly drawn box so that it covers half of the box.

    Here is the code I am using to draw the box.

    > `

      
    \>    
    \>    
    \>  Bool TrueSymmetry::Draw(PluginTag *tag, BaseObject *op, BaseDraw *bd, BaseDrawHelp *bh)  
    \>  {       
    \>       //GePrint("Draw");  
    \>          BaseContainer *bc=((BaseList2D* )tag)->GetDataInstance();  
    \>          LONG lngMySymPlane =tag->GetDataInstance()->GetLong (SYMMETRY_PLANE);  
    \>          LONG trans = 175;  
    \>            LONG boxTrans     = 200;  
    \>          Vector color = bc->GetVector(PLANE_COLOR);  
    \>            Vector boxColor = Vector(1,0,0);  
    \>            Real size;  
    \>            size = .55;  
    \>              
    \>          //Matrix for determining scale, rotation, and position.   
    \>          Matrix m = op->GetMg();  
    \>          Vector rad = op->GetRad();  
    \>    
    \>          m.v1 *= rad.x+100;  
    \>          m.v2 *= rad.y+100;  
    \>          m.v3 *= rad.z+100;  
    \>              
    \>              
    \>    
    \>          switch (lngMySymPlane)  
    \>          {  
    \>    
    \>                 case XY_PLANE:  
    \>    
    \>                      if (!tag->GetDataInstance()->GetBool(ENABLE_SYMMETRY))  
    \>                      {  
    \>                           bd->SetTransparency(boxTrans);  
    \>                           Vector p[8];  
    \>                        
    \>                           p[0] = m * Vector(-size, -size, -size);  
    \>                          p[1] = m * Vector( size, -size, -size);  
    \>                           p[2] = m * Vector( size, -size, size);  
    \>                           p[3] = m * Vector(-size, -size, size);  
    \>                           p[4] = m * Vector(-size, size, -size);  
    \>                           p[5] = m * Vector( size, size, -size);  
    \>                           p[6] = m * Vector( size, size, size);  
    \>                           p[7] = m * Vector(-size, size, size);  
    \>                             
    \>                           bd->Box3D(m,size,boxColor);  
    \>                      }  
    \>    
    \>    
    \>  
    

    `

    The problem is, that when I draw the box, if I change the vectors under p[] it doesn't change the location of each point of the box? Could someone explain to me how to alter the position of the box and to make it more of a rectangle shape so that it covers onnly half of the cube in the viewport.

    Thanks,

    ~Shawn



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

    On 05/10/2009 at 18:34, xxxxxxxx wrote:

    Here's is an example of what I mean.



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

    On 05/10/2009 at 20:51, xxxxxxxx wrote:

    As it says, set size to 0.5 and multiply the vectors in the matrix by the lengths. So p[n] = m * Vector(*size* ) where m.v1/v2/v3 are scaled (basis vectors). In other words, specify a unit cube in size as 0.5 and apply scaling via the matrix 'm'.

    For instance, if you want to scale the x axis,

    // Global Matrix of the object
    Matrix m = op->GetMg();
    // Scale the X-axis basic vector by 1/2
    m.v1 *= 0.5f;
    // Translate along the X-axis by half the bounding box x size
    // - even though this is a radius, you want your half-box centered in the half-space!
    m.off.x += (0.5f * op->GetRad().x);
    // Yellow half-space box
    Box3D(m, 0.5, Vector(1.0f, 1.0f, 0.0f));



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

    On 05/10/2009 at 20:53, xxxxxxxx wrote:

    I should also note that p[n] is not needed. This is shown in the docs for explanatory reasons. The dimensions of the cube are given by the 'size' variable and the matrix.



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

    On 06/10/2009 at 15:50, xxxxxxxx wrote:

    Awesome.. Thanks Robert..   That worked like a charm.

    ~Shawn


Log in to reply