Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

MRFaceCluster.cc

Go to the documentation of this file.
00001 /*
00002     File:       MRFaceCluster.cc
00003 
00004     Function:   
00005 
00006     Author:     Andrew Willmott
00007 
00008     Notes:      
00009 */
00010 
00011 #include "gcl/MRFaceCluster.h"
00012 #include "gcl/Renderer.h"
00013 #include "gcl/Draw.h"
00014 
00015 FaceCluster::FaceCluster()
00016 {
00017 }
00018 
00019 Void FaceCluster::DrawPlane(Renderer &r)
00020 {
00021     Point       corners[8];
00022     Int         i;
00023         
00024     MakeBoxCorners(min, max, corners);  
00025     r.Push();
00026     r.SetTransform(trans(Rotation(axesQuat)));
00027 
00028     r.N(vl_z).Begin(renPoly)
00029         .P((corners[0] + corners[4]) * 0.5).P((corners[1] + corners[5]) * 0.5)
00030         .P((corners[2] + corners[6]) * 0.5).P((corners[3] + corners[7]) * 0.5).End();
00031 
00032     r.Pop();
00033 }
00034 
00035 Void FaceCluster::DrawBox(Renderer &r, Bool solid)
00036 {
00037     Point       corners[8];
00038     Int         i;
00039         
00040     MakeBoxCorners(min, max, corners);  
00041     r.Push();
00042     r.SetTransform(trans(Rotation(axesQuat)));
00043     
00044     if (solid)
00045         PaintBox(r, corners);
00046     else
00047         FrameBox(r, corners);
00048 
00049     r.Pop();
00050 }
00051 
00052 Void FaceCluster::DrawSideAreas(Renderer &r)
00053 {
00054     Point       corners[8];
00055     Int         i;
00056         
00057     MakeBoxCorners(min, max, corners);  
00058     r.Push();
00059     r.SetTransform(trans(Rotation(axesQuat)));
00060 
00061     Point   centre = 0.5 * (min + max);
00062     Vector  delta;
00063     
00064     delta = Vector(max[0], centre[1], centre[2]);
00065     r.Push().SetTransform(Shift(delta) * Scalef(sqrt(sideArea[0] / 255.0)) * Shift(-delta));
00066     r.N(vl_x).Begin(renPoly)
00067         .P(corners[1]).P(corners[2]).P(corners[6]).P(corners[5]).End();
00068     r.Pop();
00069 
00070     delta = Vector(min[0], centre[1], centre[2]);
00071     r.Push().SetTransform(Shift(delta) * Scalef(sqrt(sideArea[3] / 255.0)) * Shift(-delta));
00072     r.N(-Vector(vl_x)).Begin(renPoly)
00073         .P(corners[0]).P(corners[4]).P(corners[7]).P(corners[3]).End();
00074     r.Pop();
00075 
00076     delta = Vector(centre[0], max[1], centre[2]);
00077     r.Push().SetTransform(Shift(delta) * Scalef(sqrt(sideArea[1] / 255.0)) * Shift(-delta));
00078     r.N(vl_y).Begin(renPoly)
00079         .P(corners[7]).P(corners[6]).P(corners[2]).P(corners[3]).End();
00080     r.Pop();
00081 
00082     delta = Vector(centre[0], min[1], centre[2]);
00083     r.Push().SetTransform(Shift(delta) * Scalef(sqrt(sideArea[4] / 255.0)) * Shift(-delta));
00084     r.N(-Vector(vl_y)).Begin(renPoly)
00085         .P(corners[0]).P(corners[1]).P(corners[5]).P(corners[4]).End();
00086     r.Pop();
00087 
00088     delta = Vector(centre[0], centre[1], max[2]);
00089     r.Push().SetTransform(Shift(delta) * Scalef(sqrt(sideArea[2] / 255.0)) * Shift(-delta));
00090     r.N(vl_z).Begin(renPoly)
00091         .P(corners[4]).P(corners[5]).P(corners[6]).P(corners[7]).End();
00092     r.Pop();
00093 
00094     delta = Vector(centre[0], centre[1], min[2]);
00095     r.Push().SetTransform(Shift(delta) * Scalef(sqrt(sideArea[5] / 255.0)) * Shift(-delta));
00096     r.N(-Vector(vl_z)).Begin(renPoly)
00097         .P(corners[3]).P(corners[2]).P(corners[1]).P(corners[0]).End();
00098     r.Pop();
00099 
00100     r.Pop();
00101 }
00102 
00103 Void FaceCluster::Draw(Renderer &r)
00104 {
00105 #ifdef ANCIENT
00106     DrawPlane(r);
00107     r.SetColour(cGreen);
00108     r.N(vl_z);
00109     DrawBox(r, true);
00110 #endif
00111 
00112     DrawBox(r, true);
00113 //  DrawPlane(r);
00114 }

Generated at Sat Aug 5 00:17:00 2000 for Graphics Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000