00001 /* 00002 File: Plot2D.cc 00003 00004 Function: See header file 00005 00006 Author(s): Andrew Willmott 00007 00008 Copyright: (c) 1995-2000, Andrew Willmott 00009 00010 Notes: 00011 00012 */ 00013 00014 #include "gcl/Plot2D.h" 00015 00021 scPlot2D::scPlot2D() : scPrimitive(pPoly), plotType(plotStep) 00022 { 00023 samples.SetSize(10, 10); 00024 samples.MakeZero(); 00025 } 00026 00027 StrConst scPlot2D::Label() const 00028 { 00029 return("2D Plot"); 00030 } 00031 00032 Void scPlot2D::Draw(Renderer &r, SLContext *context) 00033 { 00034 Int i, j; 00035 Point pos0, pos1, pos2, pos3; 00036 Vector dx, dz, normal; 00037 Colour col = *(SC_GET(Colour)); 00038 00039 r.MakeCurrent(); 00040 00041 if (plotType != plotStep) 00042 { 00043 dx = Vector(2.0 / (samples.Cols() - 1), 0, 0); 00044 dz = Vector(0, 0, 2.0 / (samples.Rows() - 1)); 00045 00046 pos0[2] = -1; 00047 00048 for (i = 0; i < samples.Rows() - 1; i++) 00049 { 00050 pos0[0] = -1; 00051 pos1 = pos0 + dz; 00052 00053 for (j = 0; j < samples.Cols() - 1; j++) 00054 { 00055 pos3 = pos0 + dx; 00056 pos2 = pos1 + dx; 00057 pos0[1] = samples[i][j] + 0.01; 00058 pos1[1] = samples[i + 1][j] + 0.01; 00059 pos2[1] = samples[i + 1][j + 1] + 0.01; 00060 pos3[1] = samples[i][j + 1] + 0.01; 00061 00062 normal = norm(cross(pos1 - pos0, pos3 - pos0)); 00063 00064 r.N(norm(normal)); 00065 r.C(col).Begin(sRenderStyle) 00066 .P(pos0).P(pos1).P(pos2).P(pos3) 00067 .End(); 00068 00069 pos0 += dx; 00070 pos1 += dx; 00071 } 00072 00073 pos0 += dz; 00074 } 00075 } 00076 else 00077 { 00078 dx = Vector(2.0 / samples.Cols(), 0, 0); 00079 dz = Vector(0, 0, 2.0 / samples.Rows()); 00080 00081 pos0[2] = -1; 00082 00083 for (i = 0; i < samples.Rows(); i++) 00084 { 00085 pos0[0] = -1; 00086 pos1 = pos0 + dz; 00087 00088 for (j = 0; j < samples.Cols(); j++) 00089 { 00090 pos3 = pos0 + dx; 00091 pos2 = pos1 + dx; 00092 pos0[1] = pos1[1] = pos2[1] = pos3[1] = samples[i][j]; 00093 00094 r.Begin(renPoly).P(pos0).P(pos1).P(pos2).P(pos3).End(); 00095 00096 pos0 += dx; 00097 pos1 += dx; 00098 } 00099 00100 pos0 += dz; 00101 } 00102 } 00103 } 00104