Skip to content

Commit 8933451

Browse files
author
Xuan Huang
committed
latvol
1 parent 96526f4 commit 8933451

File tree

5 files changed

+88
-33
lines changed

5 files changed

+88
-33
lines changed

src/Core/Algorithms/Visualization/OsprayDataAlgorithm.cc

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ DEALINGS IN THE SOFTWARE.
3434
#include <Core/Datatypes/Legacy/Field/Field.h>
3535
#include <Core/Datatypes/Legacy/Field/FieldInformation.h>
3636
#include <Core/Datatypes/Legacy/Field/VMesh.h>
37+
#include <Core/Datatypes/Legacy/Field/LatVolMesh.h>
3738
#include <Core/Datatypes/Mesh/VirtualMeshFacade.h>
3839
#include <Core/Algorithms/Base/AlgorithmVariableNames.h>
3940
#include <Core/Algorithms/Base/AlgorithmPreconditions.h>
@@ -339,16 +340,31 @@ OsprayGeometryObjectHandle OsprayDataAlgorithm::addVol(FieldHandle field, ColorM
339340

340341
auto facade(field->mesh()->getFacade());
341342
auto vfield = field->vfield();
343+
344+
// //cast mesh to latvol and fill dim, space, origin
345+
//auto latVolM = (boost::shared_ptr<LatVolMesh<Core::Basis::HexTrilinearLgn<Core::Geometry::Point> > >) field->mesh();
346+
//std::vector<int> dim; latVolM->get_dim(dim);
347+
// std::vector<float> min; latVolM.get_min(min);
348+
/*fieldData.origin_x = latVolM->get_min_i();
349+
fieldData.origin_y = latVolM->get_min_j();
350+
fieldData.origin_z = latVolM->get_min_k();
351+
fieldData.dim_x = latVolM->get_ni();
352+
fieldData.dim_y = latVolM->get_nj();
353+
fieldData.dim_z = latVolM->get_nk();*/
354+
//get_ni
355+
fieldData.dim_x = 100; fieldData.dim_y = 100; fieldData.dim_z = 100;
356+
fieldData.origin_x = -1; fieldData.origin_y = -1; fieldData.origin_z = -1;
357+
fieldData.spacing_x = 0.02; fieldData.spacing_y = 0.02; fieldData.spacing_z = 0.02;
358+
342359
double value;
360+
//std::cout << "mname:" << field->mesh()->type_name << std::endl;
343361

344362
for (const auto& node : facade->nodes())
345363
{
346364
auto point = node.point();
347365
if (vfield->num_values() > 0)
348366
{
349367
vfield->get_value(value, node.index());
350-
351-
352368
voxels.push_back(value);
353369
}
354370
vertex_new.push_back(static_cast<float>(point.x()));
@@ -357,32 +373,14 @@ OsprayGeometryObjectHandle OsprayDataAlgorithm::addVol(FieldHandle field, ColorM
357373

358374
}
359375

360-
//if (colorMap)
376+
if (colorMap)
361377
{
362-
obj->tfn.colors.push_back(0);
363-
obj->tfn.colors.push_back(0);
364-
obj->tfn.colors.push_back(1);
365-
//obj->tfn.colors.push_back(0);
366-
//obj->tfn.colors.push_back(.75);
367-
//obj->tfn.colors.push_back(.75);
368-
369-
obj->tfn.colors.push_back(0);
370-
obj->tfn.colors.push_back(1);
371-
obj->tfn.colors.push_back(0);
372-
373-
//obj->tfn.colors.push_back(1);
374-
//obj->tfn.colors.push_back(.5);
375-
//obj->tfn.colors.push_back(0);
376-
obj->tfn.colors.push_back(1);
377-
obj->tfn.colors.push_back(0);
378-
obj->tfn.colors.push_back(0);
379-
380-
obj->tfn.opacities.push_back(0.5);
381-
obj->tfn.opacities.push_back(0.5);
378+
ColorMap_OSP_helper cmp(colorMap->getColorMapName());
379+
obj->tfn.colors = cmp.colorList;
380+
obj->tfn.opacities = cmp.opacityList;
382381
}
383382
fieldData.color = voxels;
384383
fieldData.vertex = vertex_new;
385-
386384
return obj;
387385
}
388386

@@ -567,9 +565,15 @@ AlgorithmOutput OsprayDataAlgorithm::run(const AlgorithmInput& input) const
567565
}
568566
else if (info.is_volume())
569567
{
570-
if(info.is_latvol())
571-
renderable = addVol(field, colorMap);
572-
//THROW_ALGORITHM_INPUT_ERROR("field type vol.");
568+
if(info.is_latvol()){
569+
renderable = addVol(field, colorMap);
570+
}else if(info.is_tetvol()){
571+
THROW_ALGORITHM_INPUT_ERROR("Tet vol not supported. LatVol only at this point");
572+
}else if(info.is_hexvol()){
573+
THROW_ALGORITHM_INPUT_ERROR("Hex vol not supported. LatVol only at this point");
574+
}else{
575+
THROW_ALGORITHM_INPUT_ERROR("Unknown vol type. LatVol only at this point");
576+
}
573577
}
574578
else if (info.is_pointcloudmesh())
575579
{

src/Core/Datatypes/ColorMap.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,11 @@ ColorMap* ColorMap::clone() const
5454
return new ColorMap(*this);
5555
}
5656

57+
58+
5759
namespace detail
5860
{
61+
5962
class Rainbow : public ColorMapStrategy
6063
{
6164
public:

src/Core/Datatypes/ColorMap.h

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,53 @@ namespace Datatypes {
118118
private:
119119
StandardColorMapFactory() = delete;
120120
};
121+
122+
// colormap helper for ospray transfer function
123+
class ColorMap_OSP_helper
124+
{
125+
public:
126+
std::vector<float> colorList;
127+
std::vector<float> opacityList;
128+
ColorMap_OSP_helper(const std::string name){
129+
opacityList.push_back(0.5);
130+
opacityList.push_back(0.5);
131+
if(name.compare("Rainbow") == 0){
132+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(1);
133+
colorList.push_back(0); colorList.push_back(0.75); colorList.push_back(0.75);
134+
colorList.push_back(0); colorList.push_back(1); colorList.push_back(0);
135+
colorList.push_back(1); colorList.push_back(0.5); colorList.push_back(0);
136+
colorList.push_back(1); colorList.push_back(0); colorList.push_back(0);
137+
}else if(name.compare("Old Rainbow") == 0){
138+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(1);
139+
colorList.push_back(0); colorList.push_back(1); colorList.push_back(1);
140+
colorList.push_back(0); colorList.push_back(1); colorList.push_back(0);
141+
colorList.push_back(1); colorList.push_back(1); colorList.push_back(0);
142+
colorList.push_back(1); colorList.push_back(0); colorList.push_back(0);
143+
}else if(name.compare("Blackbody") == 0){
144+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(0);
145+
colorList.push_back(1); colorList.push_back(0); colorList.push_back(0);
146+
colorList.push_back(1); colorList.push_back(1); colorList.push_back(0);
147+
colorList.push_back(1); colorList.push_back(1); colorList.push_back(1);
148+
}else if(name.compare("Grayscale") == 0){
149+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(0);
150+
colorList.push_back(1); colorList.push_back(1); colorList.push_back(1);
151+
}else if(name.compare("Orange,Black,Lime") == 0){
152+
colorList.push_back(1); colorList.push_back(0.5); colorList.push_back(0);
153+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(0);
154+
colorList.push_back(0); colorList.push_back(1); colorList.push_back(0);
155+
}else if(name.compare("Darkhue") == 0){
156+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(0);
157+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(0.333333);
158+
colorList.push_back(0.5); colorList.push_back(0); colorList.push_back(0.5);
159+
colorList.push_back(1); colorList.push_back(0); colorList.push_back(0);
160+
colorList.push_back(1); colorList.push_back(0); colorList.push_back(0.25*2.6666666);
161+
}else if(name.compare("BP Seismic") == 0){
162+
colorList.push_back(0); colorList.push_back(0); colorList.push_back(1);
163+
colorList.push_back(1); colorList.push_back(1); colorList.push_back(1);
164+
colorList.push_back(1); colorList.push_back(0); colorList.push_back(0);
165+
}
166+
}
167+
};
121168

122169
}}}
123170

src/Core/Datatypes/Geometry.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ namespace Datatypes
8989
{
9090
std::vector<float> vertex, color, vertex_normal;
9191
std::vector<int32_t> index;
92+
int dim_x, dim_y,dim_z;
93+
float origin_x,origin_y,origin_z;
94+
float spacing_x, spacing_y, spacing_z;
9295
};
9396

9497
FieldData data;

src/Interface/Modules/Render/OsprayViewerDialog.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,9 @@ namespace
236236
SCIRun::LOG_DEBUG(std::to_string(numVoxels));
237237

238238
ospSetString(vol, "voxelType", "float");
239-
ospSet3i(vol, "dimensions", 100, 100, 100);
239+
ospSet3i(vol, "dimensions", obj->data.dim_x, obj->data.dim_y, obj->data.dim_z);
240+
ospSet3f(vol, "gridSpacing", fieldData.spacing_x, fieldData.spacing_y, fieldData.spacing_z);
241+
ospSet3f(vol, "gridOrigin", fieldData.origin_x, fieldData.origin_y, fieldData.origin_z);
240242

241243
std::for_each(obj->data.color.begin(), obj->data.color.end(), [&](float &v) {
242244
if (!std::isnan(v))
@@ -247,7 +249,6 @@ namespace
247249
ospcommon::vec3f v = ospcommon::vec3f(vertex[i], vertex[i+1], vertex[i+2]);
248250
bounds.extend(v);
249251
}
250-
251252
const auto& func = obj->tfn;
252253
OSPTransferFunction transferFunction = ospNewTransferFunction("piecewise_linear");
253254

@@ -257,12 +258,9 @@ namespace
257258

258259
ospSetData(transferFunction, "colors", cData);
259260
ospSetData(transferFunction, "opacities", oData);
260-
// the transfer function will apply over this volume value range
261-
ospSet2f(transferFunction, "valueRange", 0, 1);
261+
ospSet2f(transferFunction, "valueRange", voxelRange.lower, voxelRange.upper);
262262
ospCommit(transferFunction);
263-
// For now we set the same transfer function on all volumes.
264263
ospSetObject(vol, "transferFunction", transferFunction);
265-
//bounds = ospcommon::box3f(ospcommon::vec3f(0.f), 1);
266264
return vol;
267265

268266
}

0 commit comments

Comments
 (0)