bool PCB_POLYGON::Parse( XNODE* aNode, const wxString& aDefaultMeasurementUnit, const wxString& aActualConversion ) { XNODE* lNode; wxString propValue; lNode = FindNode( aNode, wxT( "netNameRef" ) ); if( lNode ) { lNode->GetAttribute( wxT( "Name" ), &propValue ); propValue.Trim( false ); propValue.Trim( true ); m_net = propValue; m_netCode = GetNetCode( m_net ); } // retrieve polygon outline FormPolygon( aNode, &m_outline, aDefaultMeasurementUnit, aActualConversion ); m_positionX = m_outline[0]->x; m_positionY = m_outline[0]->y; // fill the polygon with the same contour as its outline is m_islands.Add( new VERTICES_ARRAY ); FormPolygon( aNode, m_islands[0], aDefaultMeasurementUnit, aActualConversion ); return true; }
bool PCB_COPPER_POUR::Parse( XNODE* aNode, wxString aDefaultMeasurementUnit, wxString aActualConversion, wxStatusBar* aStatusBar ) { XNODE* lNode; wxString pourType, str, propValue; int pourSpacing, thermalWidth; // aStatusBar->SetStatusText( aStatusBar->GetStatusText() + wxT( " CooperPour..." ) ); //str = FindNode( aNode, wxT( "pourType" ) )->GetNodeContent(); //str.Trim( false ); //pourType = str.MakeUpper(); lNode = FindNode( aNode, wxT( "netNameRef" ) ); if( lNode ) { lNode->GetAttribute( wxT( "Name" ), &propValue ); propValue.Trim( false ); propValue.Trim( true ); m_net = propValue; m_netCode = GetNetCode( m_net ); } if( FindNode( aNode, wxT( "width" ) ) ) SetWidth( FindNode( aNode, wxT( "width" ) )->GetNodeContent(), aDefaultMeasurementUnit, &m_width, aActualConversion ); if( FindNode( aNode, wxT( "pourSpacing" ) ) ) SetWidth( FindNode( aNode, wxT( "pourSpacing" ) )->GetNodeContent(), aDefaultMeasurementUnit, &pourSpacing, aActualConversion ); if( FindNode( aNode, wxT( "thermalWidth" ) ) ) SetWidth( FindNode( aNode, wxT( "thermalWidth" ) )->GetNodeContent(), aDefaultMeasurementUnit, &thermalWidth, aActualConversion ); lNode = FindNode( aNode, wxT( "pcbPoly" ) ); if( lNode ) { // retrieve copper pour outline FormPolygon( lNode, &m_outline, aDefaultMeasurementUnit, aActualConversion ); m_positionX = m_outline[0]->x; m_positionY = m_outline[0]->y; } else { return false; } return true; }
bool PCB_PLANE::Parse( XNODE* aNode, wxString aDefaultMeasurementUnit, wxString aActualConversion, wxStatusBar* aStatusBar ) { XNODE* lNode; wxString pourType, str, propValue; // aStatusBar->SetStatusText( aStatusBar->GetStatusText() + wxT( " Plane..." ) ); lNode = FindNode( aNode, wxT( "netNameRef" ) ); if( lNode ) { lNode->GetAttribute( wxT( "Name" ), &propValue ); propValue.Trim( false ); propValue.Trim( true ); m_net = propValue; m_netCode = GetNetCode( m_net ); } if( FindNode( aNode, wxT( "width" ) ) ) SetWidth( FindNode( aNode, wxT( "width" ) )->GetNodeContent(), aDefaultMeasurementUnit, &m_width, aActualConversion ); lNode = FindNode( aNode, wxT( "pcbPoly" ) ); if( lNode ) { // retrieve plane outline FormPolygon( lNode, &m_outline, aDefaultMeasurementUnit, aActualConversion ); m_positionX = m_outline[0]->x; m_positionY = m_outline[0]->y; } else { return false; } return true; }
void PCB_EDIT_FRAME::ReadMacros() { wxString str; wxFileName fn; fn = GetBoard()->GetFileName(); fn.SetExt( MacrosFileExtension ); wxFileDialog dlg( this, _( "Read Macros File" ), fn.GetPath(), fn.GetFullName(), MacrosFileWildcard, wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR ); if( dlg.ShowModal() == wxID_CANCEL ) return; if( !wxFileExists( dlg.GetPath() ) ) { wxString msg; msg.Printf( _( "File %s not found" ), GetChars( dlg.GetPath() ) ); DisplayError( this, msg ); return; } wxXmlDocument xml; xml.SetFileEncoding( wxT( "UTF-8" ) ); if( !xml.Load( dlg.GetFilename() ) ) return; XNODE *macrosNode = (XNODE*) xml.GetRoot()->GetChildren(); while( macrosNode ) { int number = -1; if( macrosNode->GetName() == wxT( "macros" ) ) { number = wxAtoi( macrosNode->GetAttribute( wxT( "number" ), wxT( "-1" ) ) ); if( number >= 0 && number < 10 ) { m_Macros[number].m_Record.clear(); XNODE *hotkeyNode = (XNODE*) macrosNode->GetChildren(); while( hotkeyNode ) { if( hotkeyNode->GetName() == wxT( "hotkey" ) ) { int x = wxAtoi( hotkeyNode->GetAttribute( wxT( "x" ), wxT( "0" ) ) ); int y = wxAtoi( hotkeyNode->GetAttribute( wxT( "y" ), wxT( "0" ) ) ); int hk = wxAtoi( hotkeyNode->GetAttribute( wxT( "hkcode" ), wxT( "0" ) ) ); MACROS_RECORD macros_record; macros_record.m_HotkeyCode = hk; macros_record.m_Position.x = x; macros_record.m_Position.y = y; m_Macros[number].m_Record.push_back( macros_record ); } hotkeyNode = (XNODE*) hotkeyNode->GetNext(); } } } macrosNode = (XNODE*) macrosNode->GetNext(); } }
void LoadInputFile( wxString aFileName, wxXmlDocument* aXmlDoc ) { char line[sizeof( ACCEL_ASCII_KEYWORD )]; int tok; XNODE* iNode = NULL, *cNode = NULL; wxString str, propValue, content; wxCSConv conv( wxT( "windows-1251" ) ); FILE* fp = wxFopen( aFileName, wxT( "rt" ) ); if( !fp ) THROW_IO_ERROR( wxT( "Unable to open file: " ) + aFileName ); // check file format if( !fgets( line, sizeof( line ), fp ) || strcmp( line, ACCEL_ASCII_KEYWORD ) ) THROW_IO_ERROR( "Unknown file type" ); // rewind the file fseek( fp, 0, SEEK_SET ); // lexer now owns fp, will close on exception or return DSNLEXER lexer( empty_keywords, 0, fp, aFileName ); iNode = new XNODE( wxXML_ELEMENT_NODE, wxT( "www.lura.sk" ) ); while( ( tok = lexer.NextTok() ) != DSN_EOF ) { if( tok == DSN_RIGHT ) { iNode = iNode->GetParent(); } else if( tok == DSN_LEFT ) { tok = lexer.NextTok(); str = wxEmptyString; cNode = new XNODE( wxXML_ELEMENT_NODE, wxString( lexer.CurText(), conv ) ); iNode->AddChild( cNode ); iNode = cNode; } else if( cNode ) { str = wxString( lexer.CurText(), conv ); if( tok == DSN_STRING ) { // update attribute if( iNode->GetAttribute( wxT( "Name" ), &propValue ) ) { iNode->DeleteAttribute( wxT( "Name" ) ); iNode->AddAttribute( wxT( "Name" ), propValue + wxT( ' ' ) + str ); } else iNode->AddAttribute( wxT( "Name" ), str ); } else if( str != wxEmptyString ) { // update node content content = cNode->GetNodeContent() + wxT( ' ' ) + str; if( cNode->GetChildren() ) cNode->GetChildren()->SetContent( content ); else cNode->AddChild( new wxXmlNode( wxXML_TEXT_NODE, wxEmptyString, content ) ); } } } if( iNode ) { aXmlDoc->SetRoot( iNode ); //aXmlDoc->Save( wxT( "test.xml" ) ); } }