00001
00002 #include <OSGConfig.h>
00003 #include <OSGVector.h>
00004
00005 #include "OSGDVRSlice.h"
00006
00007 OSG_USING_NAMESPACE
00008
00009 DVRSlice::DVRSlice(void)
00010 {
00011
00012 numberOfVertices = 0;
00013 normal = Vec3f(0.0,0.0,0.0);
00014 vertexData = new Pnt3f[12];
00015 }
00016
00017 DVRSlice::~DVRSlice(void)
00018 {
00019
00020 delete [] vertexData;
00021 }
00022
00023 Pnt3f DVRSlice::getVertex(UInt32 number)
00024 {
00025 return vertexData[number];
00026 }
00027
00028 UInt32 DVRSlice::getVertexCount()
00029 {
00030 return numberOfVertices;
00031 }
00032
00033 void DVRSlice::setVertex(Pnt3f vertex)
00034 {
00035 vertexData[numberOfVertices] = vertex;
00036 numberOfVertices++;
00037 }
00038
00039 void DVRSlice::setNormal(Vec3f n)
00040 {
00041 normal = n;
00042 }
00043
00044 Vec3f DVRSlice::getNormal()
00045 {
00046
00047
00048 if(normal == Vec3f(0.0, 0.0, 0.0) && numberOfVertices >= 3)
00049 {
00050 normal = (vertexData[0] - vertexData[1]).cross(
00051 vertexData[0] - vertexData[2]);
00052
00053 normal.normalize();
00054 }
00055
00056 return normal;
00057 }
00058
00059 void DVRSlice::resetSlice()
00060 {
00061 numberOfVertices = 0;
00062 normal = Vec3f(0.0, 0.0, 0.0);
00063 }
00064
00065 void DVRSlice::setTextureTransform(const Vec3f &scale, const Vec3f &translate)
00066 {
00067 texScale = scale;
00068 texTranslate = translate;
00069 }
00070
00071 Vec3f DVRSlice::getTextureScale(void) const
00072 {
00073 return texScale;
00074 }
00075
00076 Vec3f DVRSlice::getTextureTranslate(void) const
00077 {
00078 return texTranslate;
00079 }
00080
00081 void DVRSlice::output(void)
00082 {
00083 for(UInt32 i = 0; i < numberOfVertices; i++)
00084 {
00085 std::cerr << "Vertex Number "
00086 << i
00087 << ": "
00088 << vertexData[i][0]
00089 << ", "
00090 << vertexData[i][1]
00091 << ", "
00092 << vertexData[i][2]
00093 << std::endl;
00094 }
00095
00096 Vec3f n = getNormal();
00097
00098 std::cerr << "Normal: "
00099 << n[0]
00100 << ", "
00101 << n[1]
00102 << ", "
00103 << n[2]
00104 << std::endl;
00105 }