DatasetPlane::DatasetPlane() : Dataset( QDir( "new plane" ), Fn::DatasetType::PLANE ), vbo0( 0 ), m_handle0( GLFunctions::getPickIndex() ), m_handle1( GLFunctions::getPickIndex() ), m_handle2( GLFunctions::getPickIndex() ), dirty( true ) { QList<Dataset*>dsl = Models::getDatasets( Fn::DatasetType::NIFTI_ANY ); int nx = 160; int ny = 200; int nz = 160; float dx = 1.0f; float dy = 1.0f; float dz = 1.0f; float ax = 0.0f; float ay = 0.0f; float az = 0.0f; if ( dsl.size() > 0 ) { nx = dsl[0]->properties().get( Fn::Property::D_NX ).toInt(); ny = dsl[0]->properties().get( Fn::Property::D_NY ).toInt(); nz = dsl[0]->properties().get( Fn::Property::D_NZ ).toInt(); dx = dsl[0]->properties().get( Fn::Property::D_DX ).toFloat(); dy = dsl[0]->properties().get( Fn::Property::D_DY ).toFloat(); dz = dsl[0]->properties().get( Fn::Property::D_DZ ).toFloat(); ax = dsl[0]->properties().get( Fn::Property::D_ADJUST_X ).toFloat(); ay = dsl[0]->properties().get( Fn::Property::D_ADJUST_Y ).toFloat(); az = dsl[0]->properties().get( Fn::Property::D_ADJUST_Z ).toFloat(); } QVector3D h0( nx * dx / 2 + ax, ny * dy / 2 + ay, nz * dz / 2 + az ); QVector3D h1( ax, h0.y(), h0.z() ); QVector3D h2( h0.x(), ay, h0.z() ); m_properties["maingl"].createBool( Fn::Property::D_SHOW_PLANE_HANDLES, true, "general" ); m_properties["maingl"].createColor( Fn::Property::D_HANDLE_COLOR, QColor( 255, 0, 0 ), "general" ); m_properties["maingl"].createVector( Fn::Property::D_HANDLE_0, h0, "handles" ); m_properties["maingl"].createVector( Fn::Property::D_HANDLE_1, h1, "handles" ); m_properties["maingl"].createVector( Fn::Property::D_HANDLE_2, h2, "handles" ); PropertyGroup props2( m_properties["maingl"] ); m_properties.insert( "maingl2", props2 ); m_properties["maingl2"].createBool( Fn::Property::D_SHOW_PLANE_HANDLES, true, "general" ); m_properties["maingl2"].createColor( Fn::Property::D_HANDLE_COLOR, QColor( 255, 0, 0 ), "general" ); }
Dataset3D::Dataset3D( QDir filename, std::vector<QVector3D> data, nifti_image* header ) : DatasetNifti( filename, Fn::DatasetType::NIFTI_VECTOR, header ), m_data( data ), m_renderer( 0 ), m_stippleRenderer( 0 ) { m_properties["maingl"].createInt( Fn::Property::D_COLORMAP, -1 ); m_properties["maingl"].createBool( Fn::Property::D_INTERPOLATION, false, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_ALPHA, 1.0f, 0.0, 1.0, "general" ); m_properties["maingl"].createInt( Fn::Property::D_DIM, 3 ); m_properties["maingl"].createFloat( Fn::Property::D_SCALING, 1.0f, 0.0f, 2.0f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_OFFSET, 0.0f, -0.5, 0.5, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_VECTORS_STICKS, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_SAGITTAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_CORONAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_AXIAL, true, "general" ); m_properties["maingl"].createBool( Fn::Property::D_HAS_TEXTURE, true ); connect( m_properties["maingl"].getProperty( Fn::Property::D_RENDER_VECTORS_STICKS ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( switchRenderSticks() ) ); connect( m_properties["maingl"].getProperty( Fn::Property::D_SCALING ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( scalingChanged() ) ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_VECTORS_STIPPLES, false, "stipples" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_RENDER_VECTORS_STIPPLES ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( switchRenderStipples() ) ); m_properties["maingl"].createList( Fn::Property::D_STIPPLE_PROB_MASK, { "none" }, 0, "stipples" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_STIPPLE_PROB_MASK ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( probMaskChanged() ) ); m_properties["maingl"].createColor( Fn::Property::D_COLOR, QColor( 255, 0, 0 ), "stipples" ); m_properties["maingl"].createFloat( Fn::Property::D_STIPPLE_THICKNESS, 1.0f, 0.1f, 5.0f, "stipples" ); m_properties["maingl"].createFloat( Fn::Property::D_STIPPLE_GLYPH_SIZE, 1.0f, 1.0f, 5.0f, "stipples" ); m_properties["maingl"].createList( Fn::Property::D_STIPPLE_SLICE_ORIENT, { "axial", "coronal", "sagittal" }, 0, "stipples" ); examineDataset(); PropertyGroup props2( m_properties["maingl"] ); m_properties.insert( "maingl2", props2 ); m_properties["maingl2"].getProperty( Fn::Property::D_ACTIVE )->setPropertyTab( "general" ); connect( Models::g(), SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( updateMaskSelect() ) ); connect( Models::d(), SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( updateMaskSelect() ) ); updateMaskSelect(); probMaskChanged(); }
DatasetBingham::DatasetBingham( QDir filename, std::vector<std::vector<float> > data, nifti_image* header ) : DatasetNifti( filename, Fn::DatasetType::NIFTI_BINGHAM, header ), m_data( data ), m_renderer( 0 ) { m_properties["maingl"].createFloat( Fn::Property::D_SCALING, 1.0f, 0.1f, 2.0f, "general" ); m_properties["maingl"].createInt( Fn::Property::D_OFFSET, 0, -1, 1, "general" ); m_properties["maingl"].createInt( Fn::Property::D_ORDER, 4 ); m_properties["maingl"].createInt( Fn::Property::D_LOD, 2, 0, 4, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_FIRST, true, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_SECOND, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_THIRD, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_SAGITTAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_CORONAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_AXIAL, true, "general" ); examineDataset(); PropertyGroup props2( m_properties["maingl"] ); m_properties.insert( "maingl2", props2 ); m_properties["maingl2"].getProperty( Fn::Property::D_ACTIVE )->setPropertyTab( "general" ); }
DatasetTensor::DatasetTensor( QDir filename, std::vector<std::vector<float> > data, nifti_image* header ) : DatasetNifti( filename, Fn::DatasetType::NIFTI_TENSOR, header ), m_renderer( 0 ), m_rendererEV( 0 ), m_renderGlpyhs( false ) { for ( unsigned int i = 0; i < data.size(); ++i ) { Matrix m( 3, 3 ); m( 1, 1 ) = data.at( i )[0]; m( 1, 2 ) = data.at( i )[1]; m( 1, 3 ) = data.at( i )[2]; m( 2, 1 ) = data.at( i )[1]; m( 2, 2 ) = data.at( i )[3]; m( 2, 3 ) = data.at( i )[4]; m( 3, 1 ) = data.at( i )[2]; m( 3, 2 ) = data.at( i )[4]; m( 3, 3 ) = data.at( i )[5]; m_data.push_back( m ); } m_properties["maingl"].createInt( Fn::Property::D_CREATED_BY, (int)Fn::Algo::TENSORFIT ); m_properties["maingl"].createFloat( Fn::Property::D_FA_THRESHOLD, 0.01f, 0.0f, 1.0f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_EV_THRESHOLD, 10.0f, 0.0f, 10.f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_GAMMA, 0.1f, 0.0f, 10.0f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_OFFSET, 0.0f, -0.5f, 0.5f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_SCALING, 0.5f, 0.0f, 2.0f, "general" ); m_properties["maingl"].createInt( Fn::Property::D_TENSOR_RENDERMODE, 0, 0, 3, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_SAGITTAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_CORONAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_AXIAL, true, "general" ); examineDataset(); PropertyGroup props2( m_properties["maingl"] ); m_properties.insert( "maingl2", props2 ); m_properties["maingl2"].getProperty( Fn::Property::D_ACTIVE )->setPropertyTab( "general" ); }
DatasetTensor::DatasetTensor( QDir filename, std::vector<Matrix> data, nifti_image* header ) : DatasetNifti( filename, Fn::DatasetType::NIFTI_TENSOR, header ), m_data( data ), m_logData( 0 ), m_renderer( 0 ), m_rendererEV( 0 ), m_renderGlpyhs( false ) { m_properties["maingl"].createFloat( Fn::Property::D_FA_THRESHOLD, 0.01f, 0.0f, 1.0f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_EV_THRESHOLD, 10.0f, 0.0f, 10.f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_GAMMA, 0.1f, 0.0f, 10.0f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_OFFSET, 0.0f, -1.0f, 1.0f, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_SCALING, 0.5f, 0.0f, 2.0f, "general" ); m_properties["maingl"].createList( Fn::Property::D_TENSOR_RENDERMODE, { "superquadric", "1st ev", "2nd ev", "3rd ev" }, 0, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_SAGITTAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_CORONAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_AXIAL, true, "general" ); examineDataset(); PropertyGroup props2( m_properties["maingl"] ); m_properties.insert( "maingl2", props2 ); m_properties["maingl2"].getProperty( Fn::Property::D_ACTIVE )->setPropertyTab( "general" ); }
void VariableRegistryTestFixture::testCodec(){ VariableRegistry *r = new VariableRegistry(global_outgoing_event_buffer); Datum generated_codec(r->generateCodecDatum()); // #codec, #componentCodec, #termination (all generated by default) checkCodec(generated_codec, 0); CPPUNIT_ASSERT(r->getNVariables() == 0); Datum test1((float)5); VariableProperties props(&test1, "test", "Test test", "Testy test test test", M_NEVER, M_WHEN_CHANGED, true, false, M_CONTINUOUS_INFINITE, ""); shared_ptr<Variable> testvar = r->createGlobalVariable(&props); int n_variables = 1; CPPUNIT_ASSERT(r->lookupVariable("test").getInteger() == 5); CPPUNIT_ASSERT(r->getNVariables() == n_variables); //r->generateCodec(); Datum generated_codec2(r->generateCodecDatum()); checkCodec(generated_codec2, n_variables); shared_ptr<Variable> _testvar = r->getVariable("test"); shared_ptr<Variable> __testvar = r->getVariable(N_RESERVED_CODEC_CODES); CPPUNIT_ASSERT(__testvar != NULL); CPPUNIT_ASSERT(_testvar->getValue() == testvar->getValue()); CPPUNIT_ASSERT(__testvar->getValue() == testvar->getValue()); CPPUNIT_ASSERT(r->hasVariable("test")); CPPUNIT_ASSERT(!r->hasVariable("test2")); CPPUNIT_ASSERT(r->getNVariables() == 1); // regenerate a new registry from the codec VariableRegistry *r2 = new VariableRegistry(global_outgoing_event_buffer); r2->updateFromCodecDatum(generated_codec2); Datum generated_codec3(r2->generateCodecDatum()); checkCodec(generated_codec3, 1); CPPUNIT_ASSERT(r->lookupVariable("test").getInteger() == 5); CPPUNIT_ASSERT(r2->lookupVariable("test").getInteger() == 5); CPPUNIT_ASSERT(r->getNVariables() == n_variables); CPPUNIT_ASSERT(r2->getNVariables() == n_variables); Datum test2((long)15); VariableProperties props2(&test2, "test2", "Test2 test2", "Testy test2 test2 test2", M_NEVER, M_WHEN_CHANGED, true, false, M_CONTINUOUS_INFINITE, ""); shared_ptr<Variable> testvar2 = r2->createGlobalVariable(&props2); n_variables++; _testvar = r2->getVariable("test"); __testvar = r2->getVariable(N_RESERVED_CODEC_CODES); CPPUNIT_ASSERT(_testvar->getValue() == testvar->getValue()); CPPUNIT_ASSERT(__testvar->getValue() == testvar->getValue()); CPPUNIT_ASSERT(__testvar->getValue() == _testvar->getValue()); shared_ptr<Variable> _testvar2 = r2->getVariable("test2"); shared_ptr<Variable> __testvar2 = r2->getVariable(N_RESERVED_CODEC_CODES + 1); CPPUNIT_ASSERT(_testvar2->getValue() == testvar2->getValue()); CPPUNIT_ASSERT(__testvar2->getValue() == testvar2->getValue()); CPPUNIT_ASSERT(__testvar2->getValue() == _testvar2->getValue()); CPPUNIT_ASSERT(r2->hasVariable("test")); CPPUNIT_ASSERT(r2->hasVariable("test2")); CPPUNIT_ASSERT(r2->getNVariables() == n_variables); CPPUNIT_ASSERT(r->lookupVariable("test").getInteger() == 5); CPPUNIT_ASSERT(r2->lookupVariable("test").getInteger() == 5); CPPUNIT_ASSERT(r2->lookupVariable("test2").getInteger() == 15); Datum generated_codec4(r2->generateCodecDatum()); checkCodec(generated_codec4, 2); delete r; delete r2; }
DatasetIsoline::DatasetIsoline( DatasetScalar* ds, float isoValue ) : Dataset( QDir( "new iso line" ), Fn::DatasetType::ISO_LINE ), m_dirty( true ), vbo0( 0 ), vbo1( 0 ), vbo2( 0 ), vbo3( 0 ), m_vertCountAxial( 0 ), m_vertCountCoronal( 0 ), m_vertCountSagittal( 0 ), m_stripeVertCountAxial( 0 ), m_stripeVertCountCoronal( 0 ), m_stripeVertCountSagittal( 0 ), m_x( 0 ), m_y( 0 ), m_z( 0 ) { m_scalarField = *(ds->getData() ); m_properties["maingl"].createInt( Fn::Property::D_NX, ds->properties( "maingl" ).get( Fn::Property::D_NX ).toInt() ); m_properties["maingl"].createInt( Fn::Property::D_NY, ds->properties( "maingl" ).get( Fn::Property::D_NY ).toInt() ); m_properties["maingl"].createInt( Fn::Property::D_NZ, ds->properties( "maingl" ).get( Fn::Property::D_NZ ).toInt() ); m_properties["maingl"].createFloat( Fn::Property::D_DX, ds->properties( "maingl" ).get( Fn::Property::D_DX ).toFloat(), "transform" ); m_properties["maingl"].createFloat( Fn::Property::D_DY, ds->properties( "maingl" ).get( Fn::Property::D_DY ).toFloat(), "transform" ); m_properties["maingl"].createFloat( Fn::Property::D_DZ, ds->properties( "maingl" ).get( Fn::Property::D_DZ ).toFloat(), "transform" ); m_properties["maingl"].createFloat( Fn::Property::D_ADJUST_X, ds->properties( "maingl" ).get( Fn::Property::D_ADJUST_X ).toFloat(), "transform" ); m_properties["maingl"].createFloat( Fn::Property::D_ADJUST_Y, ds->properties( "maingl" ).get( Fn::Property::D_ADJUST_Y ).toFloat(), "transform" ); m_properties["maingl"].createFloat( Fn::Property::D_ADJUST_Z, ds->properties( "maingl" ).get( Fn::Property::D_ADJUST_Z ).toFloat(), "transform" ); m_properties["maingl"].createInt( Fn::Property::D_DIM, 1 ); m_properties["maingl"].createInt( Fn::Property::D_CREATED_BY, (int)Fn::Algo::ISOSURFACE ); m_properties["maingl"].createInt( Fn::Property::D_TYPE, (int)Fn::DatasetType::ISO_LINE ); QString name = ds->properties( "maingl" ).get( Fn::Property::D_NAME ).toString(); if( !name.contains( "isoline" ) ) { name += " (isoline)"; } m_properties["maingl"].createString( Fn::Property::D_NAME, name ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_SAGITTAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_CORONAL, false, "general" ); m_properties["maingl"].createBool( Fn::Property::D_RENDER_AXIAL, true, "general" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_RENDER_SAGITTAL ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); connect( m_properties["maingl"].getProperty( Fn::Property::D_RENDER_CORONAL ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); connect( m_properties["maingl"].getProperty( Fn::Property::D_RENDER_AXIAL ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); m_properties["maingl"].createFloat( Fn::Property::D_LINE_WIDTH, 1, 1, 10, "general" ); m_properties["maingl"].createFloat( Fn::Property::D_STIPPLE_GLYPH_SIZE, 1.2f, 1, 10, "general" ); m_properties["maingl"].createColor( Fn::Property::D_COLOR, Models::getGlobal( Fn::Property::G_ISOLINE_STANDARD_COLOR ).value<QColor>(), "general" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_COLOR ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); m_properties["maingl"].createBool( Fn::Property::D_INTERPOLATION, true, "general" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_INTERPOLATION ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); m_properties["maingl"].createFloat( Fn::Property::D_ISO_VALUE, isoValue, ds->properties( "maingl" ).get( Fn::Property::D_MIN ).toFloat(), ds->properties( "maingl" ).get( Fn::Property::D_MAX ).toFloat(), "general" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_ISO_VALUE ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); m_properties["maingl"].createList( Fn::Property::D_ISOLINE_STRIPES, { "none", "45 degrees right", "45 degrees left", "vertical", "horizontal", "dots" }, 0, "general" ); connect( m_properties["maingl"].getProperty( Fn::Property::D_ISOLINE_STRIPES ), SIGNAL( valueChanged( QVariant ) ), this, SLOT( isoValueChanged() ) ); m_properties["maingl"].createFloat( Fn::Property::D_ISOLINE_STRIPES_WIDTH, 1, 1, 10, "general" ); PropertyGroup props2( m_properties["maingl"] ); m_properties.insert( "maingl2", props2 ); connect( Models::g(), SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( globalChanged() ) ); }