31 #include "WMImageExtractor.h"
32 #include "WMImageExtractor.xpm"
33 #include "core/common/WPropertyHelper.h"
34 #include "core/dataHandler/WDataHandler.h"
35 #include "core/dataHandler/WDataTexture3D.h"
36 #include "core/graphicsEngine/WGEColormapping.h"
37 #include "core/kernel/WKernel.h"
58 return "Image Extractor";
63 return "This module allows extracting of single images from a dataset.";
68 return imageExtractor_xpm;
73 m_input = std::shared_ptr< WModuleInputData < WDataSetSingle > >(
77 m_output = std::shared_ptr< WModuleOutputData < WDataSetScalar > >(
129 std::shared_ptr< WDataSetSingle > newDataSet =
m_input->getData();
130 bool dataChanged = (
m_dataSet != newDataSet );
131 bool dataValid = ( newDataSet != NULL );
154 std::size_t i =
static_cast< std::size_t
>(
m_selectedImage->get(
true ) );
156 std::shared_ptr< WDataSetScalar > oldOut =
m_outData;
206 m_outData = std::shared_ptr< WDataSetScalar >();
220 debugLog() <<
"Finished! Good Bye!";
229 if(
m_dataSet->getValueSet()->order() > 1 || i >=
m_dataSet->getValueSet()->dimension() )
231 return std::shared_ptr< WDataSetScalar >();
234 std::shared_ptr< WGridRegular3D > grid = std::dynamic_pointer_cast< WGridRegular3D >(
m_dataSet->getGrid() );
237 std::size_t dim =
m_dataSet->getValueSet()->dimension();
240 switch(
m_dataSet->getValueSet()->getDataType() )
244 std::shared_ptr< std::vector< float > > values = std::shared_ptr< std::vector< float > >(
245 new std::vector< float >(
m_dataSet->getGrid()->size() ) );
246 std::shared_ptr< WValueSet< float > > v = std::dynamic_pointer_cast< WValueSet< float > >(
m_dataSet->getValueSet() );
248 for( std::size_t k = 0; k < grid->size(); ++k )
250 ( *values )[k] = v->rawData()[ dim * k + i ];
253 std::shared_ptr< WValueSet< float > > vs =
254 std::shared_ptr< WValueSet< float > >(
new WValueSet< float >( 0, 1, values, W_DT_FLOAT ) );
256 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
260 std::shared_ptr< std::vector< double > > values = std::shared_ptr< std::vector< double > >(
261 new std::vector< double >(
m_dataSet->getGrid()->size() ) );
262 std::shared_ptr< WValueSet< double > > v = std::dynamic_pointer_cast< WValueSet< double > >(
m_dataSet->getValueSet() );
264 for( std::size_t k = 0; k < grid->size(); ++k )
266 ( *values )[k] = v->rawData()[ dim * k + i ];
269 std::shared_ptr< WValueSet< double > > vs =
270 std::shared_ptr< WValueSet< double > >(
new WValueSet< double >( 0, 1, values, W_DT_DOUBLE ) );
272 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
276 std::shared_ptr< std::vector< uint8_t > > values = std::shared_ptr< std::vector< uint8_t > >(
277 new std::vector< uint8_t >(
m_dataSet->getGrid()->size() ) );
278 std::shared_ptr< WValueSet< uint8_t > > v = std::dynamic_pointer_cast< WValueSet< uint8_t > >(
m_dataSet->getValueSet() );
280 for( std::size_t k = 0; k < grid->size(); ++k )
282 ( *values )[k] = v->rawData()[ dim * k + i ];
285 std::shared_ptr< WValueSet< uint8_t > > vs =
286 std::shared_ptr< WValueSet< uint8_t > >(
new WValueSet< uint8_t >( 0, 1, values, W_DT_UINT8 ) );
288 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
292 std::shared_ptr< std::vector< uint16_t > > values = std::shared_ptr< std::vector< uint16_t > >(
293 new std::vector< uint16_t >(
m_dataSet->getGrid()->size() ) );
294 std::shared_ptr< WValueSet< uint16_t > > v = std::dynamic_pointer_cast< WValueSet< uint16_t > >(
m_dataSet->getValueSet() );
296 for( std::size_t k = 0; k < grid->size(); ++k )
298 ( *values )[k] = v->rawData()[ dim * k + i ];
301 std::shared_ptr< WValueSet< uint16_t > > vs =
304 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
308 std::shared_ptr< std::vector< uint32_t > > values = std::shared_ptr< std::vector< uint32_t > >(
309 new std::vector< uint32_t >(
m_dataSet->getGrid()->size() ) );
310 std::shared_ptr< WValueSet< uint32_t > > v = std::dynamic_pointer_cast< WValueSet< uint32_t > >(
m_dataSet->getValueSet() );
312 for( std::size_t k = 0; k < grid->size(); ++k )
314 ( *values )[k] = v->rawData()[ dim * k + i ];
317 std::shared_ptr< WValueSet< uint32_t > > vs =
320 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
324 std::shared_ptr< std::vector< int8_t > > values = std::shared_ptr< std::vector< int8_t > >(
325 new std::vector< int8_t >(
m_dataSet->getGrid()->size() ) );
326 std::shared_ptr< WValueSet< int8_t > > v = std::dynamic_pointer_cast< WValueSet< int8_t > >(
m_dataSet->getValueSet() );
328 for( std::size_t k = 0; k < grid->size(); ++k )
330 ( *values )[k] = v->rawData()[ dim * k + i ];
333 std::shared_ptr< WValueSet< int8_t > > vs =
334 std::shared_ptr< WValueSet< int8_t > >(
new WValueSet< int8_t >( 0, 1, values, W_DT_INT8 ) );
336 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
340 std::shared_ptr< std::vector< int16_t > > values = std::shared_ptr< std::vector< int16_t > >(
341 new std::vector< int16_t >(
m_dataSet->getGrid()->size() ) );
342 std::shared_ptr< WValueSet< int16_t > > v = std::dynamic_pointer_cast< WValueSet< int16_t > >(
m_dataSet->getValueSet() );
344 for( std::size_t k = 0; k < grid->size(); ++k )
346 ( *values )[k] = v->rawData()[ dim * k + i ];
349 std::shared_ptr< WValueSet< int16_t > > vs =
350 std::shared_ptr< WValueSet< int16_t > >(
new WValueSet< int16_t >( 0, 1, values, W_DT_INT16 ) );
352 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
354 case W_DT_SIGNED_INT:
356 std::shared_ptr< std::vector< int32_t > > values = std::shared_ptr< std::vector< int32_t > >(
357 new std::vector< int32_t >(
m_dataSet->getGrid()->size() ) );
358 std::shared_ptr< WValueSet< int32_t > > v = std::dynamic_pointer_cast< WValueSet< int32_t > >(
m_dataSet->getValueSet() );
360 for( std::size_t k = 0; k < grid->size(); ++k )
362 ( *values )[k] = v->rawData()[ dim * k + i ];
365 std::shared_ptr< WValueSet< int32_t > > vs =
366 std::shared_ptr< WValueSet< int32_t > >(
new WValueSet< int32_t >( 0, 1, values, W_DT_SIGNED_INT ) );
368 return std::shared_ptr< WDataSetScalar >(
new WDataSetScalar( vs, grid ) );
371 warnLog() <<
"Encountered unsupported data format in ImageExtractor!";
372 return std::shared_ptr< WDataSetScalar >();
382 s <<
m_dataSet->getFilename() <<
" (" << i <<
" of " <<
m_dataSet->getValueSet()->dimension() <<
")";
392 float fmin =
static_cast< float >( min + ( max - min ) *
m_minValuePct->get(
true ) * 0.01 );
393 float fmax =
static_cast< float >( min + ( max - min ) *
m_maxValuePct->get(
true ) * 0.01 );
395 m_outData->getTexture()->minimum()->set( fmin );
396 m_outData->getTexture()->scale()->set( std::max( fmax, fmin + 1.0f ) - fmin );
virtual void wait() const
Wait for the condition.
void setResetable(bool resetable=true, bool autoReset=true)
Sets the resetable flag.
virtual void add(std::shared_ptr< WCondition > condition)
Adds another condition to the set of conditions to wait for.
Class to encapsulate boost::condition_variable_any.
This data set type contains scalars as values.
static void replaceTexture(osg::ref_ptr< WGETexture3D > old, osg::ref_ptr< WGETexture3D > newTex, std::string name="")
Replaces the specified texture with the given new one.
static void registerTexture(osg::ref_ptr< WGETexture3D > texture, std::string name="")
Register the specified texture to the colormapper.
static void deregisterTexture(osg::ref_ptr< WGETexture3D > texture)
De-register the specified texture to the colormapper.
Class offering an instantiate-able data connection between modules.
Class representing a single module of OpenWalnut.
virtual void properties()
Initialize properties in this function.
wlog::WStreamedLogger debugLog() const
Logger instance for comfortable debug logging.
void addConnector(std::shared_ptr< WModuleInputConnector > con)
Adds the specified connector to the list of inputs.
wlog::WStreamedLogger warnLog() const
Logger instance for comfortable warning- logs.
std::shared_ptr< WProperties > m_properties
The property object for the module.
std::shared_ptr< WProperties > m_infoProperties
The property object for the module containing only module whose purpose is "PV_PURPOSE_INFORMNATION".
void ready()
Call this whenever your module is ready and can react on property changes.
WConditionSet m_moduleState
The internal state of the module.
virtual void activate()
Callback for m_active.
WPropBool m_active
True whenever the module should be active.
virtual void connectors()
Initialize connectors in this function.
WBoolFlag m_shutdownFlag
Condition getting fired whenever the thread should quit.
Base Class for all value set types.