Skip to content

Commit 0d82115

Browse files
author
tpat
committed
Changed some variables to static const. Modified generate box code. Made
function for generating rotate and translation transforms
1 parent b704649 commit 0d82115

File tree

6 files changed

+57
-42
lines changed

6 files changed

+57
-42
lines changed

src/Core/GeometryPrimitives/Transform.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,16 @@ Transform::operator=(const Transform& copy)
839839
return *this;
840840
}
841841

842+
std::vector<Vector> Transform::get_column_vectors()
843+
{
844+
std::vector<Vector> column_vectors(3);
845+
for(int i = 0; i < 3; i++)
846+
{
847+
column_vectors[i] = Vector(mat[0][i], mat[1][i], mat[2][i]);
848+
}
849+
return column_vectors;
850+
}
851+
842852
Point
843853
SCIRun::Core::Geometry::operator*(Transform &t, const Point &d)
844854
{

src/Core/GeometryPrimitives/Transform.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ namespace SCIRun {
147147
/// Persistent I/O.
148148
static PersistentTypeID type_id;
149149
virtual void io(Piostream &stream);
150+
std::vector<Vector> get_column_vectors();
150151
};
151152

152153
SCISHARE Point operator*(Transform &t, const Point &d);

src/Graphics/Glyphs/GlyphGeom.cc

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -630,9 +630,8 @@ void GlyphGeom::generateComet(const Point& p1, const Point& p2,
630630
Vector tangent = dir.getArbitraryTangent();
631631
Vector bitangent = Cross(dir, tangent);
632632

633-
Transform rotate(Point(0.0, 0.0, 0.0), tangent, bitangent, dir);
634-
Transform trans = rotate;
635-
trans.pre_translate((Vector) p2);
633+
Transform trans, rotate;
634+
generateTransforms(p2, tangent, bitangent, dir, trans, rotate);
636635

637636
trans.post_scale ( Vector(1.0,1.0,1.0) * radius );
638637
rotate.post_scale( Vector(1.0,1.0,1.0) / radius );
@@ -752,7 +751,7 @@ void reorderTensor(std::vector<Vector>& eigvectors, Vector& eigvals)
752751

753752
void GlyphGeom::generateBox(const Point& center, Tensor& t, double scale, ColorRGB& node_color, bool normalize)
754753
{
755-
double zeroThreshold = 0.000001;
754+
static const double zeroThreshold = 0.000001;
756755
double eigval1, eigval2, eigval3;
757756
t.get_eigenvalues(eigval1, eigval2, eigval3);
758757

@@ -797,31 +796,30 @@ void GlyphGeom::generateBox(const Point& center, Tensor& t, double scale, ColorR
797796
}
798797
}
799798

800-
Transform rotate(Point(0.0, 0.0, 0.0), eigvectors[0], eigvectors[1], eigvectors[2]);
801-
Transform trans = rotate;
802-
trans.pre_translate((Vector) center);
799+
Transform trans, rotate;
800+
generateTransforms(center, eigvectors[0], eigvectors[1], eigvectors[2], trans, rotate);
803801

804802
// Rotate and translate points
805-
Vector p1 = Vector(trans * Point(eigvals * Vector(-1.0, 1.0, 1.0)));
806-
Vector p2 = Vector(trans * Point(eigvals * Vector(-1.0, 1.0, -1.0)));
807-
Vector p3 = Vector(trans * Point(eigvals * Vector(1.0, 1.0, 1.0)));
808-
Vector p4 = Vector(trans * Point(eigvals * Vector(1.0, 1.0, -1.0)));
809-
Vector p5 = Vector(trans * Point(eigvals * Vector(-1.0, -1.0, 1.0)));
810-
Vector p6 = Vector(trans * Point(eigvals * Vector(-1.0, -1.0, -1.0)));
811-
Vector p7 = Vector(trans * Point(eigvals * Vector(1.0, -1.0, 1.0)));
812-
Vector p8 = Vector(trans * Point(eigvals * Vector(1.0, -1.0, -1.0)));
813-
814-
// Rotate norms
815-
Vector x_vec = rotate * Vector(1, 0, 0);
816-
Vector y_vec = rotate * Vector(0, 1, 0);
817-
Vector z_vec = rotate * Vector(0, 0, 1);
818-
819-
generateBoxSide(p7, p8, p3, p4, x_vec, node_color);
820-
generateBoxSide(p3, p4, p1, p2, y_vec, node_color);
821-
generateBoxSide(p5, p7, p1, p3, z_vec, node_color);
822-
generateBoxSide(p1, p2, p5, p6, -x_vec, node_color);
823-
generateBoxSide(p5, p6, p7, p8, -y_vec, node_color);
824-
generateBoxSide(p2, p4, p6, p8, -z_vec, node_color);
803+
std::vector<Vector> points;
804+
for(int x = -1; x < 2; x+=2)
805+
{
806+
for(int y = -1; y < 2; y+=2)
807+
{
808+
for(int z = -1; z < 2; z+=2)
809+
{
810+
points.push_back(Vector(trans * Point(x * eigvals.x(), y * eigvals.y(), z * eigvals.z())));
811+
}
812+
}
813+
}
814+
815+
std::vector<Vector> column_vectors = rotate.get_column_vectors();
816+
817+
generateBoxSide(points[5], points[4], points[7], points[6], column_vectors[0], node_color);
818+
generateBoxSide(points[7], points[6], points[3], points[2], column_vectors[1], node_color);
819+
generateBoxSide(points[1], points[5], points[3], points[7], column_vectors[2], node_color);
820+
generateBoxSide(points[3], points[2], points[1], points[0], -column_vectors[0], node_color);
821+
generateBoxSide(points[1], points[0], points[5], points[4], -column_vectors[1], node_color);
822+
generateBoxSide(points[2], points[6], points[0], points[4], -column_vectors[2], node_color);
825823
}
826824

827825
void GlyphGeom::generateBoxSide(const Vector& p1, const Vector& p2, const Vector& p3, const Vector& p4,
@@ -850,7 +848,7 @@ void GlyphGeom::generateBoxSide(const Vector& p1, const Vector& p2, const Vector
850848

851849
void GlyphGeom::generateEllipsoid(const Point& center, Tensor& t, double scale, int resolution, const ColorRGB& color, bool half, bool normalize)
852850
{
853-
double zeroThreshold = 0.000001;
851+
static const double zeroThreshold = 0.000001;
854852
std::vector<Vector> eigvectors(3);
855853
t.get_eigenvectors(eigvectors[0], eigvectors[1], eigvectors[2]);
856854

@@ -899,9 +897,8 @@ void GlyphGeom::generateEllipsoid(const Point& center, Tensor& t, double scale,
899897
}
900898
}
901899

902-
Transform rotate(Point(0.0, 0.0, 0.0), eigvectors[0], eigvectors[1], eigvectors[2]);
903-
Transform trans = rotate;
904-
trans.pre_translate((Vector) center);
900+
Transform trans, rotate;
901+
generateTransforms(center, eigvectors[0], eigvectors[1], eigvectors[2], trans, rotate);
905902

906903
trans.post_scale (Vector(1.0,1.0,1.0) * eigvals);
907904
rotate.post_scale(Vector(1.0,1.0,1.0) / eigvals);
@@ -1009,7 +1006,7 @@ inline double spow(double e, double x)
10091006

10101007
void GlyphGeom::generateSuperEllipsoid(const Point& center, Tensor& t, double scale, int resolution, const ColorRGB& color, bool normalize, double emphasis)
10111008
{
1012-
double zeroThreshold = 0.000001;
1009+
static const double zeroThreshold = 0.000001;
10131010
std::vector<Vector> eigvectors(3);
10141011
t.get_eigenvectors(eigvectors[0], eigvectors[1], eigvectors[2]);
10151012

@@ -1058,9 +1055,8 @@ void GlyphGeom::generateSuperEllipsoid(const Point& center, Tensor& t, double sc
10581055
}
10591056
}
10601057

1061-
Transform rotate(Point(0.0, 0.0, 0.0), eigvectors[0], eigvectors[1], eigvectors[2]);
1062-
Transform trans = rotate;
1063-
trans.pre_translate((Vector) center);
1058+
Transform trans, rotate;
1059+
generateTransforms(center, eigvectors[0], eigvectors[1], eigvectors[2], trans, rotate);
10641060

10651061
trans.post_scale (Vector(1.0,1.0,1.0) * eigvals);
10661062
rotate.post_scale(Vector(1.0,1.0,1.0) / eigvals);
@@ -1130,7 +1126,6 @@ void GlyphGeom::generateSuperEllipsoid(const Point& center, Tensor& t, double sc
11301126
void GlyphGeom::generateTorus(const Point& p1, const Point& p2, double major_radius, double minor_radius,
11311127
int resolution, const ColorRGB& color)
11321128
{
1133-
std::cout << "minor, major rad: " << minor_radius << ", " << major_radius << std::endl;
11341129
int nv = resolution;
11351130
int nu = nv + 1;
11361131

@@ -1533,3 +1528,12 @@ void GlyphGeom::generateTransforms(const Point& center, const Vector& normal,
15331528

15341529
rotate.post_rotate(zrotangle, zrotaxis);
15351530
}
1531+
1532+
void GlyphGeom::generateTransforms(const Point& center, const Vector& eigvec1, const Vector& eigvec2,
1533+
const Vector& eigvec3, Transform& translate, Transform& rotate)
1534+
{
1535+
static const Point origin(0.0, 0.0, 0.0);
1536+
rotate = Transform(origin, eigvec1, eigvec2, eigvec3);
1537+
translate = rotate;
1538+
translate.pre_translate((Vector) center);
1539+
}

src/Graphics/Glyphs/GlyphGeom.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ namespace SCIRun {
128128
void generateEllipsoid(const Core::Geometry::Point& center, const Core::Geometry::Vector& t, double scales, int nu, int nv, int half, std::vector<QuadStrip>& quadstrips);
129129
void generateTransforms(const Core::Geometry::Point& center, const Core::Geometry::Vector& normal, Core::Geometry::Transform& trans, Core::Geometry::Transform& rotate);
130130
void generateTransforms(const Core::Geometry::Point& center, const Core::Geometry::Transform& transform, Core::Geometry::Transform& trans, Core::Geometry::Transform& rotate);
131+
void generateTransforms(const Core::Geometry::Point& center, const Core::Geometry::Vector& eigvec1, const Core::Geometry::Vector& eigvec2,
132+
const Core::Geometry::Vector& eigvec3, Core::Geometry::Transform& translate, Core::Geometry::Transform& rotate);
131133

132134

133135
};

src/Interface/Modules/Visualization/ShowFieldGlyphsDialog.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ ShowFieldGlyphsDialog::ShowFieldGlyphsDialog(const std::string& name, ModuleStat
5454
createExecuteInteractivelyToggleAction();
5555

5656
connect(defaultMeshColorButton_, SIGNAL(clicked()), this, SLOT(assignDefaultMeshColor()));
57-
// connect(tensorSuperquadricsEmphasisSlider_, SIGNAL(valueChanged(int)), parent, SLOT(setSuperquadricEmphasis(int)));
5857
connectButtonToExecuteSignal(defaultMeshColorButton_);
5958
}
6059

src/Modules/Visualization/ShowFieldGlyphs.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ void GlyphBuilder::addGlyph(
178178
break;
179179
case RenderState::GlyphType::COMET_GLYPH:
180180
{
181-
double sphere_extrusion = 0.0625f;
181+
static const double sphere_extrusion = 0.0625f;
182182
Vector dir = (p2 - p1);
183183
glyphs.addComet(p1-dir, p1, radius, resolution, node_color, node_color, sphere_extrusion);
184184
break;
@@ -198,7 +198,6 @@ void GlyphBuilder::addGlyph(
198198
}
199199
case RenderState::GlyphType::RING_GLYPH:
200200
{
201-
// double torusRatio = 6.0;
202201
double length = (p2 - p1).length();
203202
double major_radius = length * 0.5;
204203
double minor_radius = length * radius * 2.0;
@@ -779,9 +778,9 @@ void GlyphBuilder::renderTensors(
779778

780779
int neg_eigval_count = 0;
781780
int tensorcount = 0;
782-
double vectorThreshold = 0.001;
783-
double pointThreshold = 0.01;
784-
double epsilon = pow(2, -52);
781+
static const double vectorThreshold = 0.001;
782+
static const double pointThreshold = 0.01;
783+
static const double epsilon = pow(2, -52);
785784

786785
// Render every item from facade
787786
for(int i = 0; i < indices.size(); i++)

0 commit comments

Comments
 (0)