Skip to content

Commit 4c1f189

Browse files
committed
work on colormap for #988 closes #1014
Vectors now get color from magnitude and scalars are getting correct value from colormap as well. started base work for convert to RGB. Tensors get color from primaryeigenvalue.
1 parent 9ca67ab commit 4c1f189

File tree

9 files changed

+156
-51
lines changed

9 files changed

+156
-51
lines changed

src/Core/Datatypes/Color.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,21 @@
3636
using namespace SCIRun::Core::Datatypes;
3737

3838
ColorRGB::ColorRGB()
39-
: r_(1.0), g_(1.0), b_(1.0)
39+
: r_(1.0), g_(1.0), b_(1.0), a_(1.0)
4040
{
4141
}
4242

4343
ColorRGB::ColorRGB(double r, double g, double b)
44-
: r_(r), g_(g), b_(b)
44+
: r_(r), g_(g), b_(b), a_(1.0)
4545
{
4646
}
4747

48-
ColorRGB::ColorRGB(const std::string& rgb) : r_(1.0), g_(1.0), b_(1.0)
48+
ColorRGB::ColorRGB(double r, double g, double b, double a)
49+
: r_(r), g_(g), b_(b), a_(a)
50+
{
51+
}
52+
53+
ColorRGB::ColorRGB(const std::string& rgb) : r_(1.0), g_(1.0), b_(1.0), a_(1.0)
4954
{
5055
try
5156
{

src/Core/Datatypes/Color.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,16 @@ namespace Datatypes {
4242
class SCISHARE ColorRGB
4343
{
4444
private:
45-
double r_, g_, b_;
45+
double r_, g_, b_, a_;
4646
public:
4747
ColorRGB();
4848
explicit ColorRGB(const std::string& rgb);
4949
ColorRGB(double r, double g, double b);
50+
ColorRGB(double r, double g, double b, double a);
5051

5152
// These equality operations should use floating point comparisons.
5253
inline bool operator==(const ColorRGB& c) const {
53-
return ((r_==c.r_)&&(g_==c.g_)&&(b_==c.b_));
54+
return ((r_==c.r_)&&(g_==c.g_)&&(b_==c.b_)&&(a_==c.a_));
5455
}
5556

5657
inline bool operator!=(const ColorRGB& c) const {
@@ -63,6 +64,7 @@ namespace Datatypes {
6364
inline double r() const {return r_;}
6465
inline double g() const {return g_;}
6566
inline double b() const {return b_;}
67+
inline double a() const {return a_;}
6668

6769
std::string toString() const;
6870
};

src/Core/Datatypes/ColorMap.cc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,12 @@ ColorRGB ColorMap::valueToColor(double scalar) const {
173173
*/
174174
ColorRGB ColorMap::valueToColor(const Tensor &tensor) const {
175175
//TODO this is probably not implemented correctly.
176-
return ColorRGB(getTransformedColor(fabs(tensor.xx())),
177-
getTransformedColor(fabs(tensor.yy())),
178-
getTransformedColor(fabs(tensor.zz())));
176+
//return ColorRGB(getTransformedColor(fabs(tensor.xx())), getTransformedColor(fabs(tensor.yy())), getTransformedColor(fabs(tensor.zz())));
177+
double eigen1, eigen2, eigen3;
178+
Tensor ten = tensor;
179+
ten.get_eigenvalues(eigen1, eigen2, eigen3);
180+
double primaryEigen = std::max(std::max(eigen1, eigen2), eigen3);
181+
return getColorMapVal(primaryEigen);
179182
}
180183
/**
181184
* @name valueToColor
@@ -185,10 +188,8 @@ ColorRGB ColorMap::valueToColor(const Tensor &tensor) const {
185188
*/
186189
ColorRGB ColorMap::valueToColor(const Vector &vector) const {
187190
//TODO this is probably not implemented correctly.
188-
return ColorRGB(getTransformedColor(fabs(vector.x())),
189-
getTransformedColor(fabs(vector.y())),
190-
getTransformedColor(fabs(vector.z())));
191-
191+
// return ColorRGB(getTransformedColor(fabs(vector.x())),getTransformedColor(fabs(vector.y())), getTransformedColor(fabs(vector.z())));
192+
return getColorMapVal(vector.length());
192193
}
193194

194195
std::string ColorMap::getColorMapName() const { return name_; }

src/Graphics/Glyphs/GlyphGeom.cc

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ void GlyphGeom::buildObject(GeometryHandle geom, const std::string uniqueNodeID,
173173
vboBuffer->write(static_cast<float>(colors_.at(i).r()));
174174
vboBuffer->write(static_cast<float>(colors_.at(i).g()));
175175
vboBuffer->write(static_cast<float>(colors_.at(i).b()));
176-
vboBuffer->write(static_cast<float>(1.f));
176+
vboBuffer->write(static_cast<float>(colors_.at(i).a()));
177+
//vboBuffer->write(static_cast<float>(1.f));
177178
} // no color writing otherwise
178179
}
179180

@@ -205,7 +206,7 @@ void GlyphGeom::addArrow(const Point& p1, const Point& p2, double radius, double
205206

206207
Point mid(ratio * (p1.x() + p2.x()), ratio * (p1.y() + p2.y()), ratio * (p1.z() + p2.z()));
207208

208-
generateCylinder(p1, mid, radius / 3.0, radius / 3.0, resolution, color1, color2, numVBOElements_, points_, normals_, indices_, colors_);
209+
generateCylinder(p1, mid, radius / 6.0, radius / 6.0, resolution, color1, color2, numVBOElements_, points_, normals_, indices_, colors_);
209210
generateCylinder(mid, p2, radius, 0.0, resolution, color1, color2, numVBOElements_, points_, normals_, indices_, colors_);
210211
}
211212

@@ -233,7 +234,10 @@ void GlyphGeom::addCone(const Point p1, const Point& p2, double radius, double r
233234

234235
void GlyphGeom::addNeedle(Point p1, const Point& p2, const ColorRGB& color1, const ColorRGB& color2)
235236
{
236-
generateLine(p1, p2, color1, color2, numVBOElements_, points_, indices_, colors_);
237+
Point mid(0.5 * (p1.x() + p2.x()), 0.5 * (p1.y() + p2.y()), 0.5 * (p1.z() + p2.z()));
238+
ColorRGB endColor(color2.r(), color2.g(), color2.b(), 0.5);
239+
generateLine(p1, mid, color1, endColor, numVBOElements_, points_, indices_, colors_);
240+
generateLine(mid, p2, color1, endColor, numVBOElements_, points_, indices_, colors_);
237241
}
238242

239243
void GlyphGeom::addPoint(const Point& p, const ColorRGB& color)

src/Interface/Modules/Visualization/ShowFieldGlyphsDialog.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ void ShowFieldGlyphsDialog::setupScalarsTab()
187187

188188
connectButtonToExecuteSignal(scalarTab_->showScalarsCheckBox_);
189189
connectButtonToExecuteSignal(scalarTab_->enableTransparencyScalarsCheckBox_);
190+
connectButtonToExecuteSignal(scalarTab_->defaultScalarsColoringRButton_);
191+
connectButtonToExecuteSignal(scalarTab_->colormapLookupScalarsColoringRButton_);
192+
connectButtonToExecuteSignal(scalarTab_->conversionRGBScalarsColoringRButton_);
190193
connectButtonToExecuteSignal(scalarTab_->scalarsAsPointsRButton_);
191194
connectButtonToExecuteSignal(scalarTab_->scalarsAsSpheresRButton_);
192195
//connectButtonToExecuteSignal(scalarTab_->scalarsAsBoxesRButton_);
@@ -212,6 +215,9 @@ void ShowFieldGlyphsDialog::setupVectorsTab()
212215

213216
connectButtonToExecuteSignal(vectorTab_->showVectorsCheckBox_);
214217
connectButtonToExecuteSignal(vectorTab_->enableTransparencyVectorsCheckBox_);
218+
connectButtonToExecuteSignal(vectorTab_->defaultVectorsColoringRButton_);
219+
connectButtonToExecuteSignal(vectorTab_->colormapLookupVectorsColoringRButton_);
220+
connectButtonToExecuteSignal(vectorTab_->conversionRGBVectorsColoringRButton_);
215221
connectButtonToExecuteSignal(vectorTab_->vectorsAsLinesRButton_);
216222
connectButtonToExecuteSignal(vectorTab_->vectorsAsNeedlesRButton_);
217223
connectButtonToExecuteSignal(vectorTab_->vectorsAsCometsRButton_);

src/Interface/Modules/Visualization/ShowFieldGlyphsScalarTab.ui

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,11 @@
268268
<item>
269269
<widget class="QRadioButton" name="conversionRGBScalarsColoringRButton_">
270270
<property name="enabled">
271-
<bool>false</bool>
271+
<bool>true</bool>
272272
</property>
273273
<property name="font">
274274
<font>
275-
<strikeout>true</strikeout>
275+
<strikeout>false</strikeout>
276276
</font>
277277
</property>
278278
<property name="text">
@@ -294,15 +294,21 @@
294294
<height>20</height>
295295
</rect>
296296
</property>
297+
<property name="decimals">
298+
<number>4</number>
299+
</property>
297300
<property name="minimum">
298-
<double>0.010000000000000</double>
301+
<double>0.000100000000000</double>
299302
</property>
300303
<property name="maximum">
301304
<double>100.000000000000000</double>
302305
</property>
303-
<property name="value">
306+
<property name="singleStep">
304307
<double>0.100000000000000</double>
305308
</property>
309+
<property name="value">
310+
<double>1.000000000000000</double>
311+
</property>
306312
</widget>
307313
<widget class="QLabel" name="label_10">
308314
<property name="geometry">

src/Interface/Modules/Visualization/ShowFieldGlyphsVectorTab.ui

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -366,11 +366,11 @@
366366
<item>
367367
<widget class="QRadioButton" name="conversionRGBVectorsColoringRButton_">
368368
<property name="enabled">
369-
<bool>false</bool>
369+
<bool>true</bool>
370370
</property>
371371
<property name="font">
372372
<font>
373-
<strikeout>true</strikeout>
373+
<strikeout>false</strikeout>
374374
</font>
375375
</property>
376376
<property name="text">
@@ -392,15 +392,21 @@
392392
<height>20</height>
393393
</rect>
394394
</property>
395+
<property name="decimals">
396+
<number>4</number>
397+
</property>
395398
<property name="minimum">
396-
<double>0.010000000000000</double>
399+
<double>0.000100000000000</double>
397400
</property>
398401
<property name="maximum">
399402
<double>100.000000000000000</double>
400403
</property>
401-
<property name="value">
404+
<property name="singleStep">
402405
<double>0.100000000000000</double>
403406
</property>
407+
<property name="value">
408+
<double>1.000000000000000</double>
409+
</property>
404410
</widget>
405411
<widget class="QLabel" name="label_10">
406412
<property name="geometry">

0 commit comments

Comments
 (0)