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

AltStyle によって変換されたページ (->オリジナル) /