Пример #1
0
/*===========================================================================*/
StructuredVolumeImporter::SuperClass* StructuredVolumeImporter::exec( const kvs::FileFormatBase* file_format )
{
    if ( !file_format )
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Input file format is NULL.");
        return NULL;
    }

    if ( const kvs::KVSMLObjectStructuredVolume* volume = dynamic_cast<const kvs::KVSMLObjectStructuredVolume*>( file_format ) )
    {
        this->import( volume );
    }
    else if ( const kvs::AVSField* volume = dynamic_cast<const kvs::AVSField*>( file_format ) )
    {
        this->import( volume );
    }
    else if ( const kvs::DicomList* volume = dynamic_cast<const kvs::DicomList*>( file_format ) )
    {
        this->import( volume );
    }
    else
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Input file format is not supported.");
        return NULL;
    }

    return this;
}
Пример #2
0
/*===========================================================================*/
HitAndMissSampling::SuperClass* HitAndMissSampling::exec( const kvs::ObjectBase* object )
{
    if ( !object )
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Input object is NULL.");
        return( NULL );
    }

    const kvs::VolumeObjectBase* volume = kvs::VolumeObjectBase::DownCast( object );
    if ( !volume )
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Input object is not volume dat.");
        return( NULL );
    }

    const kvs::VolumeObjectBase::VolumeType volume_type = volume->volumeType();
    if ( volume_type == kvs::VolumeObjectBase::Structured )
    {
        this->mapping( reinterpret_cast<const kvs::StructuredVolumeObject*>( object ) );
    }
    else // volume_type == kvs::VolumeObjectBase::Unstructured
    {
        this->mapping( reinterpret_cast<const kvs::UnstructuredVolumeObject*>( object ) );
    }

    return( this );
}
Пример #3
0
int main( int argc, char** argv )
{
    Argument arg( argc, argv );
    kvs::glut::Application app( argc, argv );
    kvs::glut::Screen screen( &app );
    screen.setTitle( "kvs::glew::ShadowMapRenderer" );

    // Add user key press event.
    KeyPressEvent key_press_event;
    screen.addKeyPressEvent( &key_press_event );

    screen.show();

    kvs::PolygonObject* object = new kvs::PolygonImporter( arg.value<std::string>() );
    if ( !object )
    {
        kvsMessageError( "Cannot read polygon object." );
        return( EXIT_FAILURE );
    }

    g_renderer = new kvs::glew::ShadowMapRenderer( &screen );
    if ( !g_renderer )
    {
        kvsMessageError( "Cannot allocate renderer." );
        delete object;
        return( EXIT_FAILURE );
    }

    screen.registerObject( object, g_renderer );

    return( app.run() );
}
Пример #4
0
/*===========================================================================*/
PolygonToPolygon::SuperClass* PolygonToPolygon::exec( const kvs::ObjectBase* object )
{
    if ( !object )
    {
        BaseClass::m_is_success = false;
        kvsMessageError( "Input object is NULL." );
        return( NULL );
    }

    const kvs::PolygonObject* polygon = kvs::PolygonObject::DownCast( object );
    if ( !polygon )
    {
        BaseClass::m_is_success = false;
        kvsMessageError( "Input object is not supported." );
        return( NULL );
    }

    if ( polygon->polygonType() == kvs::PolygonObject::Triangle )
    {
        this->calculate_triangle_connections( polygon );
        this->calculate_triangle_normals();
    }
    else
    {
        BaseClass::m_is_success = false;
        kvsMessageError( "Input polygon type is not supported." );
        return( NULL );
    }

    SuperClass::updateMinMaxCoords();
    BaseClass::m_is_success = true;

    return( this );
}
Пример #5
0
/*===========================================================================*/
bool Gis::read( const std::string& filenames )
{
    BaseClass::setFilename( filenames );
    BaseClass::setSuccess( true );

    if ( kvs::Directory( filenames ).isDirectory() )
    {
        kvs::Directory directory( filenames );

        const size_t nfiles = directory.fileList().size();
        for ( size_t i = 0; i < nfiles; i++ )
        {
            const std::string file = directory.fileList().at(i).filePath( true );
            if ( !this->read_mesh( file ) )
            {
                kvsMessageError("Cannot read the mesh data.");
                BaseClass::setSuccess( false );
                return false;
            }
        }
    }
    else
    {
        const std::string file = filenames;
        if ( !this->read_mesh( file ) )
        {
            kvsMessageError("Cannot read the mesh data.");
            BaseClass::setSuccess( false );
            return false;
        }
    }

    float min_latitude =  9999.0f;
    float max_latitude = -9999.0f;
    float min_longitude =  9999.0f;
    float max_longitude = -9999.0f;
    float min_height =  9999.0f;
    float max_height = -9999.0f;
    for ( size_t i = 0; i < m_meshes.size(); i++ )
    {
        if ( m_meshes[i]->hasData() )
        {
            min_latitude = kvs::Math::Min( min_latitude, m_meshes[i]->area().minLatitude() );
            max_latitude = kvs::Math::Max( max_latitude,  m_meshes[i]->area().maxLatitude() );
            min_longitude = kvs::Math::Min( min_longitude, m_meshes[i]->area().minLongitude() );
            max_longitude = kvs::Math::Max( max_longitude, m_meshes[i]->area().maxLongitude() );
            min_height = kvs::Math::Min( min_height, m_meshes[i]->area().minHeight() );
            max_height = kvs::Math::Max( max_height, m_meshes[i]->area().maxHeight() );
        }
    }

    m_area.setMinLatitude( min_latitude );
    m_area.setMaxLatitude( max_latitude );
    m_area.setMinLongitude( min_longitude );
    m_area.setMaxLongitude( max_longitude );
    m_area.setMinHeight( min_height );
    m_area.setMaxHeight( max_height );

    return true;
}
Пример #6
0
const bool HandsGenerator::create( kvs::ni::Context& context )
{
    if ( m_is_created )
    {
        kvsMessageError( "HandsGenerator is already created." );
        return( false );
    }

    {
        XnStatus status = m_generator.Create( context.context() );
        if ( status != XN_STATUS_OK )
        {
            kvsMessageError( "%s error: <%s>.",
                xnGetStatusName( status ),
                xnGetStatusString( status ) );
            return( false );
        }
    }

    {
        XnStatus status = m_generator.RegisterHandCallbacks(
            HandCreateEvent, HandUpdateEvent, HandDestroyEvent, NULL, m_handler );
        if ( status != XN_STATUS_OK )
        {
            kvsMessageError( "%s error: <%s>.",
                xnGetStatusName( status ),
                xnGetStatusString( status ) );
            return( false );
        }
    }

    m_is_created = true;
    return( true );
}
Пример #7
0
const kvs::Vector3f DepthGenerator::realPosition( const kvs::Vector3f& pos )
{
    if ( !m_is_created )
    {
        kvsMessageError( "DepthGenerator is not created yet." );
        return( pos );
    }

    XnPoint3D proj;
    XnPoint3D real;
    proj.X = pos.x();
    proj.Y = pos.y();
    proj.Z = pos.z();

    XnStatus status = m_generator.ConvertProjectiveToRealWorld( 1, &proj, &real );
    if ( status != XN_STATUS_OK )
    {
        kvsMessageError( "%s error: <%s>.",
            xnGetStatusName( status ),
            xnGetStatusString( status ) );
        return( pos );
    }

    return( kvs::Vector3f( real.X, real.Y, real.Z ) );
}
Пример #8
0
/*===========================================================================*/
int main( int argc, char** argv )
{
    // GLUT viewer application.
    kvs::glut::Application app( argc, argv );

    // Create an image object.
    const std::string filename( argc > 1 ? argv[1] : "" );
    kvs::ImageObject* object = new kvs::ImageImporter( filename );
    if ( !object )
    {
        kvsMessageError("Cannot creat an image object.");
        return( false );
    }

    // Create an image renderer.
    const kvs::ImageRenderer::Type type = kvs::ImageRenderer::Stretching;
    kvs::ImageRenderer* renderer = new kvs::ImageRenderer( type );
    if ( !renderer )
    {
        kvsMessageError("Cannot create an image renderer.");
        delete object;
        return( false );
    }

    // Screen.
    kvs::glut::Screen screen( &app );
    screen.registerObject( object, renderer );
    screen.setSize( object->width(), object->height() );
    screen.setTitle( "kvs::ImageRenderer" );
    screen.show();

    return( app.run() );
}
Пример #9
0
/*===========================================================================*/
bool VisualizationPipeline::import()
{
    if ( !this->hasObject() )
    {
        // Check filename.
        if ( m_filename.empty() )
        {
            kvsMessageError( "Input data is not specified." );
            return false;
        }

        // Import object.
        kvs::ObjectImporter importer( m_filename );
        kvs::ObjectBase* object = importer.import();
        if ( !object )
        {
            kvsMessageError( "Cannot import an object." );
            return false;
        }

        // Attache the imported object.
        m_object = object;

    }

    return true;
}
Пример #10
0
/*==========================================================================*/
void MarchingPyramid::mapping( const kvs::UnstructuredVolumeObject* volume )
{
    // Check whether the volume can be processed or not.
    if ( volume->veclen() != 1 )
    {
        kvsMessageError("The input volume is not a sclar field data.");
        return;
    }

    // Attach the pointer to the volume object.
    BaseClass::attachVolume( volume );
    BaseClass::setRange( volume );
    BaseClass::setMinMaxCoords( volume, this );

    // Extract surfaces.
    const std::type_info& type = volume->values().typeInfo()->type();
    if (      type == typeid( kvs::Int8   ) ) this->extract_surfaces<kvs::Int8>( volume );
    else if ( type == typeid( kvs::Int16  ) ) this->extract_surfaces<kvs::Int16>( volume );
    else if ( type == typeid( kvs::Int32  ) ) this->extract_surfaces<kvs::Int32>( volume );
    else if ( type == typeid( kvs::Int64  ) ) this->extract_surfaces<kvs::Int64>( volume );
    else if ( type == typeid( kvs::UInt8  ) ) this->extract_surfaces<kvs::UInt8>( volume );
    else if ( type == typeid( kvs::UInt16 ) ) this->extract_surfaces<kvs::UInt16>( volume );
    else if ( type == typeid( kvs::UInt32 ) ) this->extract_surfaces<kvs::UInt32>( volume );
    else if ( type == typeid( kvs::UInt64 ) ) this->extract_surfaces<kvs::UInt64>( volume );
    else if ( type == typeid( kvs::Real32 ) ) this->extract_surfaces<kvs::Real32>( volume );
    else if ( type == typeid( kvs::Real64 ) ) this->extract_surfaces<kvs::Real64>( volume );
    else
    {
        kvsMessageError("Unsupported data type '%s' of the volume.",
                        volume->values().typeInfo()->typeName() );
    }
}
Пример #11
0
/*===========================================================================*/
kvs::ObjectBase* MarchingPyramid::exec( const kvs::ObjectBase* object )
{
    const kvs::ObjectBase::ObjectType object_type = object->objectType();
    if ( object_type == kvs::ObjectBase::Geometry )
    {
        kvsMessageError("Geometry object is not supported.");
        return NULL;
    }

    // In the case of VertexNormal-type, the duplicated vertices are forcibly deleted.
    if ( SuperClass::normalType() == kvs::PolygonObject::VertexNormal )
    {
        m_duplication = false;
    }

    const kvs::VolumeObjectBase* volume = reinterpret_cast<const kvs::VolumeObjectBase*>( object );
    const kvs::VolumeObjectBase::VolumeType volume_type = volume->volumeType();
    if ( volume_type == kvs::VolumeObjectBase::Unstructured )
    {
        this->mapping( reinterpret_cast<const kvs::UnstructuredVolumeObject*>( object ) );
    }
    else // volume_type == kvs::VolumeObjectBase::Unstructured
    {
        kvsMessageError("Unstructured volume object is not supported.");
        return NULL;
    }

    return this;
}
Пример #12
0
/*===========================================================================*/
void SphereGlyph::exec( kvs::ObjectBase* object, kvs::Camera* camera, kvs::Light* light )
{
    kvs::IgnoreUnusedVariable( light );
    kvs::IgnoreUnusedVariable( camera );

    if ( object->objectType() == kvs::ObjectBase::Geometry )
    {
        const kvs::GeometryObjectBase* geometry = kvs::GeometryObjectBase::DownCast( object );
        if ( geometry->geometryType() == kvs::GeometryObjectBase::Point )
        {
            const kvs::PointObject* point = kvs::PointObject::DownCast( geometry );
            if ( !point ) { kvsMessageError("Input object is not point dat."); return; }
            if ( m_point != point ) { this->attach_point( point ); }
        }
    }
    else if ( object->objectType() == kvs::ObjectBase::Volume )
    {
        const kvs::VolumeObjectBase* volume = kvs::VolumeObjectBase::DownCast( object );
        if ( !volume ) { kvsMessageError("Input object is not volume dat."); return; }
        if ( m_volume != volume ) { this->attach_volume( volume ); }
    }

    BaseClass::startTimer();
    kvs::OpenGL::WithPushedAttrib p( GL_ALL_ATTRIB_BITS );
    kvs::OpenGL::Enable( GL_DEPTH_TEST );
    this->initialize();
    this->draw();
    BaseClass::stopTimer();
}
Пример #13
0
/*===========================================================================*/
bool TableObjectTag::write( kvs::XMLNode::SuperClass* parent )
{
    kvs::XMLElement element( BaseClass::name() );

    if ( m_has_nrows )
    {
        element.setAttribute( "nrows", m_nrows );
    }
    else
    {
        kvsMessageError( "'nrows' is not specified in <%s>.", BaseClass::name().c_str() );
        return false;
    }

    if ( m_has_ncolumns )
    {
        element.setAttribute( "ncolumns", m_ncolumns );
    }
    else
    {
        kvsMessageError( "'ncolumns' is not specified in <%s>.", BaseClass::name().c_str() );
        return false;
    }

    return BaseClass::write_with_element( parent, element );
}
Пример #14
0
/*===========================================================================*/
ExtractEdges::SuperClass* ExtractEdges::exec( const kvs::ObjectBase* object )
{
    if ( !object )
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Input object is NULL.");
        return NULL;
    }

    const kvs::VolumeObjectBase* volume = kvs::VolumeObjectBase::DownCast( object );
    if ( !volume )
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Input object is not volume dat.");
        return NULL;
    }

    const kvs::VolumeObjectBase::VolumeType type = volume->volumeType();
    if ( type == kvs::VolumeObjectBase::Structured )
    {
        this->mapping( kvs::StructuredVolumeObject::DownCast( volume ) );
    }
    else // type == kvs::VolumeObjectBase::Unstructured
    {
        this->mapping( kvs::UnstructuredVolumeObject::DownCast( volume ) );
    }

    return this;
}
Пример #15
0
/*===========================================================================*/
LineImporter::LineImporter( const std::string& filename )
{
    if ( kvs::KVSMLObjectLine::CheckExtension( filename ) )
    {
        kvs::KVSMLObjectLine* file_format = new kvs::KVSMLObjectLine( filename );
        if( !file_format )
        {
            BaseClass::setSuccess( false );
            kvsMessageError("Cannot read '%s'.",filename.c_str());
            return;
        }

        if( file_format->isFailure() )
        {
            BaseClass::setSuccess( false );
            kvsMessageError("Cannot read '%s'.",filename.c_str());
            delete file_format;
            return;
        }

        this->import( file_format );
        delete file_format;
    }
    else
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Cannot import '%s'.",filename.c_str());
        return;
    }
}
Пример #16
0
/*===========================================================================*/
bool GriddedBinaryDataFile::load() const
{
    if ( m_filename.length() == 0 )
    {
        kvsMessageError("Filename of binary data has not been specified.");
        return false;
    }

    std::ifstream ifs( m_filename.c_str(), std::ios::binary | std::ios::in );
    if( !ifs.is_open() )
    {
        kvsMessageError( "Cannot open %s.", m_filename.c_str() );
        return false;
    }

    ifs.seekg( 0, std::ios::end );
    const std::streamoff end = ifs.tellg();

    ifs.seekg( 0, std::ios::beg );
    const std::streamoff begin = ifs.tellg();
    const std::streamoff file_size = end - begin; // [byte]

    if ( m_sequential )
    {
        const size_t element_size = sizeof( kvs::Real32 ) + 4 * sizeof( kvs::Int16 );
        const size_t nelements = static_cast<size_t>( file_size / element_size );
        m_values.allocate( nelements );

        for ( size_t i = 0; i < nelements; i++ )
        {
            kvs::Int16 padding[4];
            kvs::Real32 value;
            ifs.read( (char*)( padding + 0 ), sizeof( kvs::Int16 ) );
            ifs.read( (char*)( padding + 1 ), sizeof( kvs::Int16 ) );
            ifs.read( (char*)( &value ), sizeof( kvs::Real32 ) );
            ifs.read( (char*)( padding + 2 ), sizeof( kvs::Int16 ) );
            ifs.read( (char*)( padding + 3 ), sizeof( kvs::Int16 ) );
            m_values[i] = value;
        }
    }
    else
    {
        const size_t element_size = sizeof( kvs::Real32 );
        const size_t nelements = static_cast<size_t>( file_size / element_size );
        m_values.allocate( nelements );

        ifs.read( (char*)( m_values.data() ), file_size );
    }

    if ( m_big_endian != kvs::Endian::IsBig() )
    {
        kvs::Endian::Swap( m_values.data(), m_values.size() );
    }

    ifs.close();

    return true;
}
Пример #17
0
/*===========================================================================*/
bool VisualizationPipeline::exec()
{
    // Setup object.
    if ( !this->import() )
    {
        kvsMessageError( "Cannot import the object." );
        return false;
    }

    const kvs::ObjectBase* object = m_object;
    ModuleList::iterator module = m_module_list.begin();
    ModuleList::iterator last   = m_module_list.end();

    // Skip the renderer module since the renderer is executed in the display function.
    if ( this->hasRenderer() ) --last;

    // Execute the filter or the mapper module.
    while ( module != last )
    {
        object = module->exec( object );
        if ( !object )
        {
            kvsMessageError("Cannot execute '%s'.", module->name() );
            return false;
        }

        ++module;
    }

    // Attache the pointer to the object that is registered in the object manager.
    m_object = object;

    // Setup renderer.
    if ( !this->hasRenderer() )
    {
        // create renderer module.
        if ( !this->create_renderer_module( object ) )
        {
            kvsMessageError( "Cannot create a renderer for '%s'.", m_filename.c_str() );
            return false;
        }
    }

    // Find the renderer module.
    ModuleList::iterator renderer_module = this->find_module( kvs::PipelineModule::Renderer );
    if ( renderer_module != m_module_list.end() )
    {
        // WARNING: The renderer module is disconnected from the pipeline module
        // as well as the object module.
        renderer_module->disable_auto_delete();

        // Attach the pointer to the renderer that is registered in the renderer manager.
        m_renderer = renderer_module->renderer();
    }

    return true;
}
Пример #18
0
/*===========================================================================*/
bool StructuredVolumeObject::write( const std::string& filename, const bool ascii, const bool external ) const
{
    kvs::KVSMLStructuredVolumeObject kvsml;
    kvsml.setWritingDataType( ::GetWritingDataType( ascii, external ) );

    if ( this->label() != "" ) { kvsml.setLabel( this->label() ); }
    if ( this->unit() != "" ) { kvsml.setUnit( this->unit() ); }

    switch ( this->gridType() )
    {
    case kvs::StructuredVolumeObject::UnknownGridType:
    {
        kvsMessageError("Unknown grid type.");
        break;
    }
    case kvs::StructuredVolumeObject::Uniform:
    {
        kvsml.setGridType("uniform");
        break;
    }
/*
    case kvs::StructuredVolumeObject::Rectilinear:
        kvsml.setGridType("rectilinear");
        break;
    case kvs::StructuredVolumeObject::Curvilinear:
        kvsml.setGridType("curvilinear");
        break;
*/
    default:
    {
        kvsMessageError("'uniform' grid type is only supported.");
        break;
    }
    }

    kvsml.setVeclen( this->veclen() );
    kvsml.setResolution( this->resolution() );
    kvsml.setValues( this->values() );

    if ( this->hasMinMaxValues() )
    {
        kvsml.setMinValue( this->minValue() );
        kvsml.setMaxValue( this->maxValue() );
    }

    if ( this->hasMinMaxObjectCoords() )
    {
        kvsml.setMinMaxObjectCoords( this->minObjectCoord(), this->maxObjectCoord() );
    }

    if ( this->hasMinMaxExternalCoords() )
    {
        kvsml.setMinMaxExternalCoords( this->minExternalCoord(), this->maxExternalCoord() );
    }

    return kvsml.write( filename );
}
Пример #19
0
/*===========================================================================*/
bool WriteColorData(
    kvs::XMLNode::SuperClass* parent,
    const kvs::kvsml::WritingDataType writing_type,
    const std::string& filename,
    const kvs::ValueArray<kvs::UInt8>& colors )
{
    // <Color>
    if ( colors.size() > 0 )
    {
        kvs::kvsml::ColorTag color_tag;
        if ( !color_tag.write( parent ) )
        {
            kvsMessageError( "Cannot write <%s>.", color_tag.name().c_str() );
            return false;
        }

        // <DataValue>
        if ( colors.size() == 3 )
        {
            kvs::kvsml::DataValueTag data_tag;
            if ( !data_tag.write( color_tag.node(), colors ) )
            {
                kvsMessageError( "Cannot write <%s> for <%s>.",
                                 data_tag.name().c_str(),
                                 color_tag.name().c_str() );
                return false;
            }
        }
        // <DataArray>
        else
        {
            kvs::kvsml::DataArrayTag data_tag;
            if ( writing_type == kvs::kvsml::ExternalAscii )
            {
                data_tag.setFile( kvs::kvsml::DataArray::GetDataFilename( filename, "color" ) );
                data_tag.setFormat( "ascii" );
            }
            else if ( writing_type == kvs::kvsml::ExternalBinary )
            {
                data_tag.setFile( kvs::kvsml::DataArray::GetDataFilename( filename, "color" ) );
                data_tag.setFormat( "binary" );
            }

            const std::string pathname = kvs::File( filename ).pathName();
            if ( !data_tag.write( color_tag.node(), colors, pathname ) )
            {
                kvsMessageError( "Cannot write <%s> for <%s>.",
                                 data_tag.name().c_str(),
                                 color_tag.name().c_str() );
                return false;
            }
        }
    }

    return true;
}
Пример #20
0
/*===========================================================================*/
bool WriteSizeData(
    kvs::XMLNode::SuperClass* parent,
    const kvs::kvsml::WritingDataType writing_type,
    const std::string& filename,
    const kvs::ValueArray<kvs::Real32>& sizes )
{
    // <Size>
    if ( sizes.size() > 0 )
    {
        kvs::kvsml::SizeTag size_tag;
        if ( !size_tag.write( parent ) )
        {
            kvsMessageError( "Cannot write <%s>.", size_tag.name().c_str() );
            return false;
        }

        // <DataValue>
        if ( sizes.size() == 1 )
        {
            kvs::kvsml::DataValueTag data_tag;
            if ( !data_tag.write( size_tag.node(), sizes ) )
            {
                kvsMessageError( "Cannot write <%s> for <%s>.",
                                 data_tag.name().c_str(),
                                 size_tag.name().c_str() );
                return false;
            }
        }
        // <DataArray>
        else
        {
            kvs::kvsml::DataArrayTag data_tag;
            if ( writing_type == kvs::kvsml::ExternalAscii )
            {
                data_tag.setFile( kvs::kvsml::DataArray::GetDataFilename( filename, "size" ) );
                data_tag.setFormat( "ascii" );
            }
            else if ( writing_type == kvs::kvsml::ExternalBinary )
            {
                data_tag.setFile( kvs::kvsml::DataArray::GetDataFilename( filename, "size" ) );
                data_tag.setFormat( "binary" );
            }

            const std::string pathname = kvs::File( filename ).pathName();
            if ( !data_tag.write( size_tag.node(), sizes, pathname ) )
            {
                kvsMessageError( "Cannot write <%s> for <%s>.",
                                 data_tag.name().c_str(),
                                 size_tag.name().c_str() );
                return false;
            }
        }
    }

    return true;
}
Пример #21
0
/*===========================================================================*/
StructuredVolumeImporter::StructuredVolumeImporter( const std::string& filename )
{
    if ( kvs::KVSMLStructuredVolumeObject::CheckExtension( filename ) )
    {
        BaseClass::setSuccess( SuperClass::read( filename ) );
    }
    else if ( kvs::AVSField::CheckExtension( filename ) )
    {
        kvs::AVSField* file_format = new kvs::AVSField( filename );
        if( !file_format )
        {
            BaseClass::setSuccess( false );
            kvsMessageError("Cannot read '%s'.",filename.c_str());
            return;
        }

        if( file_format->isFailure() )
        {
            BaseClass::setSuccess( false );
            kvsMessageError("Cannot read '%s'.",filename.c_str());
            delete file_format;
            return;
        }

        this->import( file_format );
        delete file_format;
    }
    else if ( kvs::DicomList::CheckDirectory( filename ) )
    {
        kvs::DicomList* file_format = new kvs::DicomList( filename );
        if( !file_format )
        {
            BaseClass::setSuccess( false );
            kvsMessageError("Cannot read '%s'.",filename.c_str());
            return;
        }

        if( file_format->isFailure() )
        {
            BaseClass::setSuccess( false );
            kvsMessageError("Cannot read '%s'.",filename.c_str());
            delete file_format;
            return;
        }

        this->import( file_format );
        delete file_format;
    }
    else
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Cannot import '%s'.",filename.c_str());
        return;
    }
}
Пример #22
0
void FrameBufferObject::checkStatus() const
{
    const GLenum status = this->checkFramebufferStatus();
    if ( status == GL_FRAMEBUFFER_COMPLETE ) { return; }

    switch ( status )
    {
    case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
        kvsMessageError( "Framebuffer incomplete attachement" );
        break;
    case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
        kvsMessageError( "Framebuffer incomplete, missing attachment" );
        break;
    case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER:
        kvsMessageError( "Framebuffer incomplete, missing draw buffer" );
        break;
    case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
        kvsMessageError( "Framebuffer incomplete, missing read buffer" );
        break;
    case GL_FRAMEBUFFER_UNSUPPORTED:
        kvsMessageError( "Unsupported framebuffer format" );
        break;
    case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
        kvsMessageError( "Framebuffer incomplete multisample" );
        break;
    case GL_FRAMEBUFFER_UNDEFINED:
        kvsMessageError( "Framebuffer undefined" );
        break;
    default:
        kvsMessageError( "Unknown framebuffer error" );
        break;
    }
}
Пример #23
0
void BufferObject::releaseGL( const kvs::cl::CommandQueue& queue )
{
    if ( !m_is_created )
    {
        kvsMessageError( "Buffer is not created yet." );
        return;
    }

    const cl_int result = clEnqueueReleaseGLObjects(
        queue.queue(), 1, &m_memory, 0, NULL, NULL );
    if ( result != CL_SUCCESS )
    {
        kvsMessageError( "OpenCL; %s.", kvs::cl::ErrorString( result ) );
    }
}
Пример #24
0
/*===========================================================================*/
const kvs::PolygonObject::NormalType Argument::normalType( void )
{
    const kvs::PolygonObject::NormalType default_value = kvs::PolygonObject::PolygonNormal;

    kvs::PolygonObject::NormalType normal_type = default_value;
    if ( this->hasOption("n") )
    {
        const std::string option_value = this->optionValue<std::string>("n");
        if ( option_value == "poly" ||
             option_value == "polygon" )
        {
            normal_type = kvs::PolygonObject::PolygonNormal;
        }
        else if ( option_value == "vert" ||
                  option_value == "vertex" )
        {
            normal_type = kvs::PolygonObject::VertexNormal;
        }
        else
        {
            kvsMessageError("Unknown normal type '%s'.",option_value.c_str());
        }
    }

    return( normal_type );
}
Пример #25
0
/*===========================================================================*/
int main( int argc, char** argv )
{
    kvs::glut::Application app( argc, argv );

    // Initialize capture device.
    kvs::opencv::CaptureDevice device;
    if ( !device.create( CV_CAP_ANY ) )
    {
        kvsMessageError("Capture device is NULL.");
        return 1;
    }

    const IplImage* frame = device.queryFrame();
    const size_t width = static_cast<size_t>( frame->width );
    const size_t height = static_cast<size_t>( frame->height );

    kvs::opencv::VideoObject* object = new kvs::opencv::VideoObject( CV_CAP_ANY );
    kvs::opencv::VideoRenderer* renderer = new kvs::opencv::VideoRenderer();

    kvs::glut::Screen screen( &app );
    screen.setTitle( "kvs::opencv::VideoRenderer" );
    screen.setSize( width, height );
    screen.registerObject( object, renderer );
    screen.show();

    return app.run();
}
Пример #26
0
/*===========================================================================*/
void ScreenBase::create()
{
    KVS_ASSERT( m_id == -1 );

    // Initialize display mode.
    QGLFormat f = QGLFormat::defaultFormat();
    f.setDoubleBuffer( displayFormat().doubleBuffer() );
    f.setRgba( displayFormat().colorBuffer() );
    f.setDepth( displayFormat().depthBuffer() );
    f.setAccum( displayFormat().accumulationBuffer() );
    f.setStencil( displayFormat().stencilBuffer() );
    f.setStereo( displayFormat().stereoBuffer() );
    f.setSampleBuffers( displayFormat().multisampleBuffer() );
    f.setAlpha( displayFormat().alphaChannel() );
    QGLFormat::setDefaultFormat( f );

    // Set screen geometry.
    QWidget::setGeometry( BaseClass::x(), BaseClass::y(), BaseClass::width(), BaseClass::height() );

    QGLWidget::makeCurrent();

    // Initialize GLEW.
    GLenum result = glewInit();
    if ( result != GLEW_OK )
    {
        const GLubyte* message = glewGetErrorString( result );
        kvsMessageError( "GLEW initialization failed: %s.", message );
    }

    // Create window.
    static int counter = 0;
    m_id = counter++;
}
Пример #27
0
/*===========================================================================*/
void ExtractEdges::calculate_connections( const kvs::UnstructuredVolumeObject* volume )
{
    switch ( volume->cellType() )
    {
    case kvs::UnstructuredVolumeObject::Tetrahedra:
        this->calculate_tetrahedra_connections( volume );
        break;
    case kvs::UnstructuredVolumeObject::Hexahedra:
        this->calculate_hexahedra_connections( volume );
        break;
    case kvs::UnstructuredVolumeObject::QuadraticTetrahedra:
        this->calculate_quadratic_tetrahedra_connections( volume );
        break;
    case kvs::UnstructuredVolumeObject::QuadraticHexahedra:
        this->calculate_quadratic_hexahedra_connections( volume );
        break;
    case kvs::UnstructuredVolumeObject::Prism:
        this->calculate_prism_connections( volume );
        break;
    default:
    {
        BaseClass::setSuccess( false );
        kvsMessageError("Unknown cell type.");
        break;
    }
    }
}
Пример #28
0
/*===========================================================================*/
void ExtractEdges::calculate_rectilinear_coords( const kvs::StructuredVolumeObject* volume )
{
    kvs::IgnoreUnusedVariable( volume );

    BaseClass::setSuccess( false );
    kvsMessageError("Rectilinear volume has not yet supportted.");
}
Пример #29
0
/*==========================================================================*/
size_t Texture::get_channel_size( const GLenum external_type ) const
{
    size_t channel_size = 0;
    switch( external_type )
    {
    case GL_UNSIGNED_BYTE:
    case GL_BYTE:
        channel_size = sizeof(char);
        break;
    case GL_UNSIGNED_SHORT:
    case GL_SHORT:
        channel_size = sizeof(short);
        break;
    case GL_UNSIGNED_INT:
    case GL_INT:
        channel_size = sizeof(int);
        break;
    case GL_FLOAT:
        channel_size = sizeof(float);
        break;
    default:
        kvsMessageError("Unsupported OpenGL external pixel data type.");
        break;
    }

    return channel_size;
}
Пример #30
0
/*===========================================================================*/
bool ObjectTag::write( kvs::XMLNode::SuperClass* parent )
{
    kvs::XMLElement element( BaseClass::name() );

    if ( m_has_type )
    {
        element.setAttribute( "type", m_type );
    }
    else
    {
        kvsMessageError( "'type' is not specified in <%s>.", BaseClass::name().c_str() );
        return false;
    }

    if ( m_has_external_coord )
    {
        const std::string min_coord = kvs::String::ToString( m_min_external_coord );
        const std::string max_coord = kvs::String::ToString( m_max_external_coord );
        const std::string value = min_coord + max_coord; // is this bug? ( min_coord + " " + max_coord )
        element.setAttribute( "external_coord", value );
    }

    if ( m_has_object_coord )
    {
        const std::string min_coord = kvs::String::ToString( m_min_object_coord );
        const std::string max_coord = kvs::String::ToString( m_max_object_coord );
        const std::string value = min_coord + max_coord; // is this bug? ( min_coord + " " + max_coord )
        element.setAttribute( "object_coord", value );
    }

    return BaseClass::write_with_element( parent, element );
}