Skip to content

Commit 64986d0

Browse files
committed
Adding dataprovider
starting to add a class to get the models and transfer functions.
1 parent 568ba60 commit 64986d0

File tree

9 files changed

+613
-92
lines changed

9 files changed

+613
-92
lines changed

cppvolrend/renderingmanager.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,8 +1046,9 @@ void RenderingManager::SetImGuiInterface ()
10461046
if (m_data_mgr.GetNumberOfStructuredDatasets() > 0)
10471047
{
10481048
int volume_index = m_data_mgr.GetCurrentVolumeIndex();
1049+
std::vector<std::string>& ui_strgrid_names = m_data_mgr.GetUINameDatasetList();
10491050
if (ImGui::Combo("###CurrentVolumeDataID", &volume_index, vector_getter,
1050-
static_cast<void*>(m_data_mgr.GetUINameDatasetListPtr()), m_data_mgr.GetUINameDatasetListPtr()->size()))
1051+
static_cast<void*>(&ui_strgrid_names), ui_strgrid_names.size()))
10511052
{
10521053
if (volume_index != m_data_mgr.GetCurrentVolumeIndex())
10531054
{
@@ -1102,8 +1103,9 @@ void RenderingManager::SetImGuiInterface ()
11021103
if (ImGui::CollapsingHeader("Transfer Function###DataMdanagerTransferFunction"))
11031104
{
11041105
int transfer_function_index = m_data_mgr.GetCurrentTransferFunctionIndex();
1106+
std::vector<std::string>& ui_tf_names = m_data_mgr.GetUINameTransferFunctionList();
11051107
if (ImGui::Combo("###CurrentTransferFunction1DID", &transfer_function_index, vector_getter,
1106-
static_cast<void*>(m_data_mgr.GetUINameTransferFunctionListPtr()), m_data_mgr.GetUINameTransferFunctionListPtr()->size()))
1108+
static_cast<void*>(&ui_tf_names), ui_tf_names.size()))
11071109
{
11081110
if (transfer_function_index != m_data_mgr.GetCurrentTransferFunctionIndex())
11091111
{

data/volume_list.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
sep=;
2+
Name;Source;File;Size;Spacing;Type
3+
Bonsai;raw;Bonsai.1.256x256x256.raw;256x256x256;1x1x1;uchar

libs/volvis_utils/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ add_library(volvis_utils STATIC camerastatelist.cpp camerastatelist.h
1717
transferfunction1d.cpp transferfunction1d.h
1818
unstructuredgridvolume.cpp unstructuredgridvolume.h
1919
utils.cpp utils.h
20-
tetrahedron.cpp tetrahedron.h)
20+
tetrahedron.cpp tetrahedron.h
21+
dataprovider.cpp dataprovider.h)
2122

2223
include_directories(${CMAKE_SOURCE_DIR}/include)
2324
add_definitions(-DEXPMODULE)

libs/volvis_utils/datamanager.cpp

Lines changed: 74 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,17 @@ namespace vis
2828
, curr_gl_tex_structured_volume(nullptr)
2929
, curr_gl_tex_structured_gradient(nullptr)
3030
{
31+
m_path_to_data = "";
32+
#ifdef USE_DATA_PROVIDER
33+
m_data_provider = std::make_unique<DataProvider>();
34+
#else
3135
// structured, unstructured and transfer function list...
3236
stored_structured_datasets.clear();
3337
stored_transfer_functions.clear();
34-
35-
m_path_to_data = "";
36-
3738

3839
ui_dataset_names.clear();
3940
ui_transferf_names.clear();
41+
#endif
4042
}
4143

4244
DataManager::~DataManager ()
@@ -66,6 +68,16 @@ namespace vis
6668

6769
void DataManager::ReadData ()
6870
{
71+
#ifdef USE_DATA_PROVIDER
72+
m_data_provider->ClearStructuredGridFileList();
73+
m_data_provider->ClearTransferFunctionFileList();
74+
75+
if (curr_vol_data_type == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED) {
76+
//m_data_provider->SetStructuredGridFileList(m_path_to_data, "#list_structured_datasets");
77+
m_data_provider->SetStructuredGridFileList(m_path_to_data, "volume_list.csv");
78+
curr_volume_index = 0;
79+
}
80+
#else
6981
stored_structured_datasets.clear();
7082
stored_transfer_functions.clear();
7183

@@ -74,22 +86,27 @@ namespace vis
7486

7587
if (curr_vol_data_type == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
7688
ReadStructuredDatasetsFromRes();
89+
#endif
7790

7891
ReadTransferFunctionsFromRes();
7992

8093
if (curr_vol_data_type == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
8194
{
8295
GenerateStructuredVolumeTexture();
8396
}
84-
97+
8598
vis::TransferFunctionReader tfr;
8699
curr_vr_transferfunction = tfr.ReadTransferFunction(stored_transfer_functions[GetCurrentTransferFunctionIndex()].path);
87100
curr_vr_transferfunction->SetName(stored_transfer_functions[GetCurrentTransferFunctionIndex()].name);
88101
}
89102

90103
int DataManager::GetNumberOfStructuredDatasets ()
91104
{
105+
#ifdef USE_DATA_PROVIDER
106+
return m_data_provider->GetNumberOfStructuredGrids();
107+
#else
92108
return stored_structured_datasets.size();
109+
#endif
93110
}
94111

95112
int DataManager::GetCurrentVolumeIndex ()
@@ -99,9 +116,13 @@ namespace vis
99116

100117
std::string DataManager::GetCurrentVolumeName ()
101118
{
102-
if (GetInputVolumeDataType() == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
119+
if (GetInputVolumeDataType() == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
103120
{
121+
#ifdef USE_DATA_PROVIDER
122+
return m_data_provider->GetStructuredGridNameList()[GetCurrentVolumeIndex()];
123+
#else
104124
return stored_structured_datasets[GetCurrentVolumeIndex()].name;
125+
#endif
105126
}
106127
return "";
107128
}
@@ -171,15 +192,14 @@ namespace vis
171192
{
172193
return curr_gl_tex_structured_gradient;
173194
}
174-
175-
std::vector<std::string>* DataManager::GetUINameDatasetListPtr ()
176-
{
177-
return &ui_dataset_names;
178-
}
179195

180-
std::vector<std::string>* DataManager::GetUINameTransferFunctionListPtr ()
196+
std::vector<std::string>& DataManager::GetUINameTransferFunctionList ()
181197
{
182-
return &ui_transferf_names;
198+
#ifdef USE_DATA_PROVIDER
199+
return m_data_provider->GetTransferFunctionNameList();
200+
#else
201+
return ui_transferf_names;
202+
#endif
183203
}
184204

185205
////////////////////////////////////////////////////////////////////////
@@ -208,45 +228,46 @@ namespace vis
208228
curr_vr_transferfunction = nullptr;
209229
}
210230

231+
#ifndef USE_DATA_PROVIDER
211232
void DataManager::ReadStructuredDatasetsFromRes ()
212233
{
213234
std::string line;
214235
std::string model_read_filename = m_path_to_data;
215236
model_read_filename.append("/#list_structured_datasets");
216237
std::ifstream f_openmodels(model_read_filename);
217-
238+
218239
if (!f_openmodels.is_open())
219240
{
220241
std::cout << "Error: Unable to read vol rendering datasets." << std::endl;
221242
exit(EXIT_FAILURE);
222243
}
223-
244+
224245
std::cout << "Reading structured datasets..." << std::endl;
225246
while (!f_openmodels.eof())
226247
{
227248
line.clear();
228249
std::getline(f_openmodels, line);
229-
250+
230251
int start_path = line.find_first_of("<") + 1;
231252
int end_path = line.find_first_of(">");
232-
253+
233254
int start_name = line.find_last_of("<") + 1;
234255
int end_name = line.find_last_of(">");
235-
256+
236257
stored_structured_datasets.push_back(DataReference(
237258
line.substr(start_path, end_path - start_path),
238259
line.substr(start_name, end_name - start_name),
239260
m_path_to_data
240261
));
241262
}
242263
f_openmodels.close();
243-
264+
244265
for (int i = 0; i < stored_structured_datasets.size(); i++)
245266
{
246267
std::cout << i << ": " << stored_structured_datasets[i].name << std::endl;
247268
ui_dataset_names.push_back(stored_structured_datasets[i].name);
248269
}
249-
270+
250271
curr_volume_index = 0;
251272
}
252273

@@ -256,43 +277,48 @@ namespace vis
256277
std::string tfunc_read_filename = m_path_to_data;
257278
tfunc_read_filename.append("/#list_transfer_functions");
258279
std::ifstream f_opentransferfunctions(tfunc_read_filename);
259-
280+
260281
if (!f_opentransferfunctions.is_open())
261282
{
262283
std::cout << "Error: Unable to read vol rendering transfer functions." << std::endl;
263284
exit(EXIT_FAILURE);
264285
}
265-
286+
266287
std::cout << "Reading Transfer Functions...";
267288
while (!f_opentransferfunctions.eof())
268289
{
269290
line.clear();
270291
std::getline(f_opentransferfunctions, line);
271-
292+
272293
int start_path = line.find_first_of("<") + 1;
273294
int end_path = line.find_first_of(">");
274-
295+
275296
int start_name = line.find_last_of("<") + 1;
276297
int end_name = line.find_last_of(">");
277-
298+
278299
stored_transfer_functions.push_back(DataReference(
279300
line.substr(start_path, end_path - start_path),
280301
line.substr(start_name, end_name - start_name),
281302
m_path_to_data
282303
));
283304
}
284305
f_opentransferfunctions.close();
285-
306+
286307
for (int i = 0; i < stored_transfer_functions.size(); i++)
287308
ui_transferf_names.push_back(stored_transfer_functions[i].name);
288309
}
310+
#endif
289311

290312
bool DataManager::GenerateStructuredVolumeTexture ()
291313
{
292314
// Read Volume
315+
#ifdef USE_DATA_PROVIDER
316+
curr_vr_volume = m_data_provider->LoadStructuredGrid(GetCurrentVolumeIndex());
317+
#else
293318
vis::VolumeReader vr;
294319
curr_vr_volume = vr.ReadStructuredVolume(stored_structured_datasets[GetCurrentVolumeIndex()].path);
295-
curr_vr_volume->SetName(stored_structured_datasets[GetCurrentVolumeIndex()].name);
320+
curr_vr_volume->SetName(stored_structured_datasets[GetCurrentVolumeIndex()].name);
321+
#endif
296322

297323
// Generate Volume Texture
298324
curr_gl_tex_structured_volume = vis::GenerateRTexture(curr_vr_volume, 0, 0, 0, curr_vr_volume->GetWidth(),
@@ -347,7 +373,7 @@ namespace vis
347373
{
348374
if (curr_vol_data_type == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
349375
{
350-
if (curr_volume_index + 1 < stored_structured_datasets.size())
376+
if (curr_volume_index + 1 < GetNumberOfStructuredDatasets())
351377
{
352378
curr_volume_index += 1;
353379
DeleteVolumeData();
@@ -364,18 +390,27 @@ namespace vis
364390
{
365391
if (curr_vol_data_type == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
366392
{
367-
for(int i = 0; i < stored_structured_datasets.size(); i++)
393+
#ifdef USE_DATA_PROVIDER
394+
int new_volume_id = m_data_provider->FindStructuredGridName(name);
395+
if (new_volume_id != -1) {
396+
curr_volume_index = new_volume_id;
397+
DeleteVolumeData();
398+
GenerateStructuredVolumeTexture();
399+
return true;
400+
}
401+
#else
402+
for (int i = 0; i < stored_structured_datasets.size(); i++)
368403
{
369404
if (stored_structured_datasets[i].name.compare(name) == 0)
370405
{
371406
curr_volume_index = i;
372407
DeleteVolumeData();
373408

374409
GenerateStructuredVolumeTexture();
375-
376410
return true;
377411
}
378412
}
413+
#endif
379414
}
380415
return false;
381416
}
@@ -384,7 +419,7 @@ namespace vis
384419
{
385420
if (curr_vol_data_type == vis::GRID_VOLUME_DATA_TYPE::STRUCTURED)
386421
{
387-
if (id < stored_structured_datasets.size())
422+
if (id < GetNumberOfStructuredDatasets())
388423
{
389424
curr_volume_index = id;
390425
DeleteVolumeData();
@@ -577,6 +612,15 @@ namespace vis
577612
return vlist;
578613
}
579614

615+
std::vector<std::string>& DataManager::GetUINameDatasetList ()
616+
{
617+
#ifdef USE_DATA_PROVIDER
618+
return m_data_provider->GetStructuredGridNameList();
619+
#else
620+
return ui_dataset_names;
621+
#endif
622+
}
623+
580624
gl::Texture3D* DataManager::GenerateGradientWithComputeShader ()
581625
{
582626
// Get Current Volume

libs/volvis_utils/datamanager.h

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include <iostream>
2727

28+
#include <volvis_utils/dataprovider.h>
2829
#include <volvis_utils/gridvolume.h>
2930
#include <volvis_utils/structuredgridvolume.h>
3031
#include <volvis_utils/unstructuredgridvolume.h>
@@ -36,6 +37,8 @@
3637
#include <gl_utils/computeshader.h>
3738
#include <gl_utils/pipelineshader.h>
3839

40+
//#define USE_DATA_PROVIDER
41+
3942
namespace vis
4043
{
4144
class DataReference
@@ -113,16 +116,17 @@ namespace vis
113116
std::string CurrentGradientName ();
114117
std::vector<std::string> GetGradientGenerationTypeStrList ();
115118

116-
std::vector<std::string>* GetUINameDatasetListPtr ();
117-
std::vector<std::string>* GetUINameTransferFunctionListPtr ();
119+
std::vector<std::string>& GetUINameDatasetList ();
120+
std::vector<std::string>& GetUINameTransferFunctionList ();
118121

119122
void DeleteVolumeData ();
120123
void DeleteTransferFunctionData ();
121124
void DeleteGradientData ();
122125
protected:
123-
126+
#ifndef USE_DATA_PROVIDER
124127
void ReadStructuredDatasetsFromRes ();
125128
void ReadTransferFunctionsFromRes ();
129+
#endif
126130

127131
bool GenerateStructuredVolumeTexture ();
128132
bool GenerateStructuredGradientTexture ();
@@ -136,10 +140,6 @@ namespace vis
136140
vis::GRID_VOLUME_DATA_TYPE curr_vol_data_type;
137141
bool use_specific_lookup_data_shader;
138142

139-
// structured, unstructured and transfer function list...
140-
std::vector<DataReference> stored_structured_datasets;
141-
std::vector<DataReference> stored_transfer_functions;
142-
143143
// structured datasets
144144
vis::StructuredGridVolume* curr_vr_volume;
145145
gl::Texture3D* curr_gl_tex_structured_volume;
@@ -157,27 +157,17 @@ namespace vis
157157
gl::Texture3D* curr_gl_tex_structured_gradient;
158158

159159
std::string m_path_to_data;
160-
161-
//// data and transfer function list...
162-
//int m_curr_volume_index;
163-
//std::vector<DataReference> m_stored_datasets;
164-
//int m_curr_transferfunction_index;
165-
//std::vector<DataReference> m_stored_transfer_functions;
166-
//
167-
//VOL_DATA_TYPE m_curr_data_type;
168-
//
169-
//// structured datasets
170-
//vis::StructuredGridVolume* m_curr_structured_volume;
171-
//gl::Texture3D* m_curr_tex_structured_volume;
172-
//
173-
//// transfer function
174-
//vis::TransferFunction* m_curr_transferfunction;
175-
//
176-
//STRUCTURED_GRADIENT_TYPE m_curr_gradient_type;
177-
//gl::Texture3D* m_curr_tex_structured_gradient;
160+
161+
#ifdef USE_DATA_PROVIDER
162+
std::unique_ptr<DataProvider> m_data_provider;
163+
#else
164+
// structured, unstructured and transfer function list...
165+
std::vector<DataReference> stored_structured_datasets;
166+
std::vector<DataReference> stored_transfer_functions;
178167

179168
std::vector<std::string> ui_dataset_names;
180169
std::vector<std::string> ui_transferf_names;
170+
#endif
181171
private:
182172

183173
};

0 commit comments

Comments
 (0)