Example #1
0
int main(int argc, char **argv) {
    int argparser_state;
    char *infile_value;
    char *outfile_value;
    char *config_file_value;
    char *clean_str;
    char *valid_config_lines[MAX_CONFIG_LINE_LEN];
    size_t valid_line_num;

    argparser_state = argparser(argc, argv,
                                &infile_value,
                                &outfile_value,
                                &config_file_value);
    if (argparser_state) {
        exit(EXIT_FAILURE);
    }

    clean_str = read_whole_str(infile_value);
    valid_line_num = read_config_lines(config_file_value, valid_config_lines);

    if (!clean_str) {
        printf("Not valid infile: %s\n", infile_value);
        exit(EXIT_FAILURE);
    }

    /* Configuration parser */
    struct Calibration *calis[valid_line_num];
    parse_config(valid_config_lines, valid_line_num, calis);

    /* Print valid calibration config information*/
    print_cali_struct(valid_line_num, calis);

    /* Do calibrations */
    clean_str = multi_cali(clean_str, valid_line_num, calis);
    printf("\n%s\n", clean_str);

    /* Save output to file */
    write_str_to_file(outfile_value, clean_str);

    return 0;
}
Example #2
0
// `Main program' equivalent, creating windows and returning main app frame
bool wxOsgApp::OnInit()
{
    // copy wxargs to form we can use with osg
    std::vector< std::string > arguments;
    char *argarray[ 100 ];
    for( int ii=0; ii<argc; ii++ )
    {
        std::string argument = std::string( wxString( argv[ ii ] ).mb_str() );
        arguments.push_back( argument );
    }
    for( unsigned int ii = 0; ii < arguments.size(); ++ii )
    {
        argarray[ ii ] = const_cast< char* >( arguments[ ii ].c_str() );
    }
    int argcount = arguments.size();
    
    // parse arguments
    if( argcount < 2 )
    {
        std::cout << arguments[ 0 ] << ": requires filename argument." << std::endl;
        return( false );
    }
    osg::ArgumentParser argparser(&argcount,argarray);
    flat_mode_ = argparser.read( "--flat" );

    const int width = 800;
    const int treeWidth = 300;
    const int overallWidth = (width + treeWidth);
    const int height = 600;

    //
    // Create the main osg window
    MainFrame * frame = new MainFrame( NULL, wxT( "backdropFX wxpick" ),
                                      wxPoint( 10, 30 ), wxSize( overallWidth, height ) );

    // create tree & edit window
    _tree = new osgWxTree::TreeControl( frame, wxID_ANY, wxDefaultPosition, wxSize(treeWidth, height),
       wxTR_DEFAULT_STYLE | wxTR_HAS_BUTTONS | wxTR_ROW_LINES | wxTR_SINGLE );
    _tree->Show( true );


    // create osg canvas
    int * attributes = new int[ 7 ];
    attributes[ 0 ] = int( WX_GL_DOUBLEBUFFER );
    attributes[ 1 ] = WX_GL_RGBA;
    attributes[ 2 ] = WX_GL_DEPTH_SIZE;
    attributes[ 3 ] = 8;
    attributes[ 4 ] = WX_GL_STENCIL_SIZE;
    attributes[ 5 ] = 8;
    attributes[ 6 ] = 0;
    OSGCanvas * canvas = new OSGCanvas( frame, wxID_ANY, wxPoint(treeWidth,0),
                                        wxSize( width, height ), wxSUNKEN_BORDER, wxT( "osgviewerWX" ), attributes );
    GraphicsWindowWX * gw = new GraphicsWindowWX( canvas );
    canvas->SetGraphicsWindow( gw );


    // load the scene.
    osg::ref_ptr< osg::Group > root = new osg::Group; 
    root->setName( "wxpick root" );

    osg::ref_ptr< osg::Node > loadedModels = osgDB::readNodeFiles( argparser );
    if( loadedModels.valid() )
        root->addChild( loadedModels.get() );

    // Convert loaded data to use shader composition.
    {
        backdropFX::ShaderModuleVisitor smv;
        smv.setAttachMain( false ); // Use bdfx-main
        smv.setAttachTransform( false ); // Use bdfx-transform
        smv.setSupportSunLighting( true ); // Use shaders that light from the Sun
        backdropFX::convertFFPToShaderModules( root.get(), &smv );
    }

    backdropFXSetUp( root.get(), width, height );


    // construct the viewer
    osg::ref_ptr< osgViewer::Viewer > viewer = new osgViewer::Viewer;

    viewer->getCamera()->setGraphicsContext( gw );
    viewer->getCamera()->setViewport( 0, 0, width, height );

    viewerSetUp( *viewer, (double)width / (double)height, root.get() );

    viewer->addEventHandler( new osgWxTree::PickHandler( _tree ) );
    viewer->addEventHandler( new EffectHandler( _tree ) );
    viewer->setThreadingModel( osgViewer::Viewer::SingleThreaded );

    // populate the ui control
    if ( !flat_mode_ )
    {
        // create a full tree or
        osgWxTree::PopulateTreeControlWithNodeVisitor pt( _tree );
        root->accept( pt );
    }
    else
    {
        // create a flattened tree
        osgWxTree::setTreeToFlatGroup( _tree, root.get() );
    }

    frame->SetViewer( viewer.get() );
    frame->Show( true );

    return( true );
}