3ED viewer: added more support for the VRML2 parser

This commit is contained in:
unknown 2015-03-28 17:16:40 +01:00 committed by jean-pierre charras
parent ff154dba3c
commit 26990213db
5 changed files with 107 additions and 10 deletions

View File

@ -1,6 +1,7 @@
boost_root
.downloads-by-cmake
Build
build
common/netlist_keywords.*
common/netlist_lexer.h
common/pcb_plot_params_lexer.h

View File

@ -179,6 +179,7 @@ private:
int read_DEF();
int read_DEF_Coordinate();
int read_Shape();
int read_appearance();
int read_Appearance();
int read_material();
int read_Material();

View File

@ -785,7 +785,7 @@ int VRML2_MODEL_PARSER::read_DEF()
if( read_Transform() == 0 )
{
std::string groupName = tagName;
//m_defGroupMap.insert( std::make_pair( groupName, new_mesh_model ) );
m_defGroupMap[groupName] = new_mesh_model;
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "Group %s: inserted model with %lu points, %lu coordIndex, %lu childs." ),
@ -808,8 +808,10 @@ int VRML2_MODEL_PARSER::read_DEF()
}
else
{
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "DEF %s %s NotImplemented, skipping." ), tagName, text );
debug_exit();
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_DEF %s %s NotImplemented, skipping." ), tagName, text );
Read_NotImplemented( m_file, '}' );
return 0;
}
}
@ -878,12 +880,7 @@ int VRML2_MODEL_PARSER::read_Shape()
if( strcmp( text, "appearance" ) == 0 )
{
//wxLogTrace( traceVrmlV2Parser, wxT( " \"appearance\" key word not supported." ) );
// skip
}
else if( strcmp( text, "Appearance" ) == 0 )
{
read_Appearance();
read_appearance();
}
else if( strcmp( text, "geometry" ) == 0 )
{
@ -899,7 +896,7 @@ int VRML2_MODEL_PARSER::read_Shape()
}
else
{
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "%s NotImplemented" ), text );
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_Shape %s NotImplemented" ), text );
Read_NotImplemented( m_file, '}' );
}
}
@ -965,6 +962,96 @@ int VRML2_MODEL_PARSER::read_geometry()
}
int VRML2_MODEL_PARSER::read_appearance()
{
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_appearance" ) );
debug_enter();
S3D_MATERIAL* material = NULL;
char text[BUFLINE_SIZE];
while( GetNextTag( m_file, text, sizeof(text) ) )
{
if( *text == ']' )
{
continue;
}
if( *text == '}' )
{
debug_exit();
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_appearance exit" ) );
return 0;
}
if( strcmp( text, "Appearance" ) == 0 )
{
int ret = read_Appearance();
debug_exit();
return ret;
}
else if( strcmp( text, "DEF" ) == 0 )
{
if( GetNextTag( m_file, text, sizeof(text) ) )
{
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_appearance adding new material %s" ), text );
wxString mat_name;
mat_name = FROM_UTF8( text );
material = new S3D_MATERIAL( m_Master, mat_name );
m_Master->Insert( material );
m_model->m_Materials = material;
if( GetNextTag( m_file, text, sizeof(text) ) )
{
if( strcmp( text, "Appearance" ) == 0 )
{
int ret = read_Appearance();
debug_exit();
return ret;
}
}
}
// Exit loop with error
break;
}
else if( strcmp( text, "USE" ) == 0 )
{
if( GetNextTag( m_file, text, sizeof(text) ) )
{
wxString mat_name;
mat_name = FROM_UTF8( text );
for( material = m_Master->m_Materials; material; material = material->Next() )
{
if( material->m_Name == mat_name )
{
m_model->m_Materials = material;
debug_exit();
return 0;
}
}
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_appearance error: material not found" ) );
}
// Exit loop with error
break;
}
else
{
// Exit loop with error
break;
}
}
debug_exit();
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_appearance failed" ) );
return -1;
}
int VRML2_MODEL_PARSER::read_Appearance()
{
wxLogTrace( traceVrmlV2Parser, m_debugSpacer + wxT( "read_Appearance" ) );

View File

@ -431,7 +431,9 @@ void PCB_MODULE::Parse( XNODE* aNode, wxStatusBar* aStatusBar,
}
lNode = lNode->GetParent();
lNode = FindNode( lNode, wxT( "layerContents" ) );
if( lNode )
lNode = FindNode( lNode, wxT( "layerContents" ) );
while( lNode )
{

View File

@ -3850,6 +3850,12 @@ public:
modulesAreFlipped = false;
SetSpecctraMode( true );
// Avoid not initialized members:
routeResolution = NULL;
sessionBoard = NULL;
m_top_via_layer = 0;
m_bot_via_layer = 0;
}
virtual ~SPECCTRA_DB()