00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_GFX_GXSPHERE_CC_UTC20050626084025_DEFINED
00035 #define GROOVX_GFX_GXSPHERE_CC_UTC20050626084025_DEFINED
00036
00037 #include "gfx/gxsphere.h"
00038
00039 #include "geom/box.h"
00040
00041 #include "gfx/bbox.h"
00042 #include "gfx/canvas.h"
00043
00044 #include "io/reader.h"
00045 #include "io/writer.h"
00046
00047 #include "rutz/trace.h"
00048
00049 namespace
00050 {
00051 const int GXSPHERE_SVID = 0;
00052 }
00053
00054 const FieldMap& GxSphere::classFields()
00055 {
00056 GVX_TRACE("GxSphere::classFields");
00057 static const Field FIELD_ARRAY[] =
00058 {
00059 Field("radius", &GxSphere::itsRadius, 1.0, 0.0, 10.0, 0.1,
00060 Field::NEW_GROUP),
00061 Field("slices", &GxSphere::itsSlices, 10, 1, 100, 1),
00062 Field("stacks", &GxSphere::itsStacks, 10, 1, 100, 1),
00063 Field("filled", &GxSphere::itsFilled, true, false, true, true,
00064 Field::BOOLEAN)
00065 };
00066
00067 static FieldMap FIELD_MAP(FIELD_ARRAY);
00068
00069 return FIELD_MAP;
00070 }
00071
00072 GxSphere* GxSphere::make()
00073 {
00074 GVX_TRACE("GxSphere::make");
00075 return new GxSphere;
00076 }
00077
00078 GxSphere::GxSphere() :
00079 FieldContainer(&sigNodeChanged),
00080 itsRadius(1.0),
00081 itsSlices(50),
00082 itsStacks(50),
00083 itsFilled(true)
00084 {
00085 GVX_TRACE("GxSphere::GxSphere");
00086 setFieldMap(GxSphere::classFields());
00087 }
00088
00089 GxSphere::~GxSphere() throw()
00090 {
00091 GVX_TRACE("GxSphere::~GxSphere");
00092 }
00093
00094 io::version_id GxSphere::class_version_id() const
00095 {
00096 GVX_TRACE("GxSphere::class_version_id");
00097 return GXSPHERE_SVID;
00098 }
00099
00100 void GxSphere::read_from(io::reader& reader)
00101 {
00102 GVX_TRACE("GxSphere::read_from");
00103 readFieldsFrom(reader, classFields());
00104 }
00105
00106 void GxSphere::write_to(io::writer& writer) const
00107 {
00108 GVX_TRACE("GxSphere::write_to");
00109 writeFieldsTo(writer, classFields(), GXSPHERE_SVID);
00110 }
00111
00113
00115
00116 void GxSphere::getBoundingCube(Gfx::Bbox& bbox) const
00117 {
00118 GVX_TRACE("GxSphere::getBoundingCube");
00119
00120 geom::box<double> mybox;
00121
00122 mybox.set_xx_yy_zz(-itsRadius, itsRadius,
00123 -itsRadius, itsRadius,
00124 -itsRadius, itsRadius);
00125
00126 bbox.drawBox(mybox);
00127 }
00128
00129 void GxSphere::draw(Gfx::Canvas& canvas) const
00130 {
00131 GVX_TRACE("GxSphere::draw");
00132
00133 canvas.drawSphere(itsRadius, itsSlices, itsStacks, itsFilled);
00134 }
00135
00136 static const char __attribute__((used)) vcid_groovx_gfx_gxsphere_cc_utc20050626084025[] = "$Id: gxsphere.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00137 #endif // !GROOVX_GFX_GXSPHERE_CC_UTC20050626084025_DEFINED