diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp index 3728504745..a7aae7b387 100644 --- a/pcbnew/pcb_parser.cpp +++ b/pcbnew/pcb_parser.cpp @@ -2165,7 +2165,7 @@ DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT( bool aAllowCirclesZeroWidth ) case T_tstamp: NextTok(); - const_cast( segment->m_Uuid ) = KIID( CurStr() ); + const_cast( segment->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); break; case T_status: @@ -2245,7 +2245,7 @@ TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB() case T_tstamp: NextTok(); - const_cast( text->m_Uuid ) = KIID( CurStr() ); + const_cast( text->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -2297,7 +2297,7 @@ DIMENSION* PCB_PARSER::parseDIMENSION() case T_tstamp: NextTok(); - const_cast( dimension->m_Uuid ) = KIID( CurStr() ); + const_cast( dimension->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -2516,7 +2516,7 @@ MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments ) case T_tstamp: NextTok(); - const_cast( module->m_Uuid ) = KIID( CurStr() ); + const_cast( module->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -2811,7 +2811,7 @@ TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE() case T_tstamp: NextTok(); - const_cast( text->m_Uuid ) = KIID( CurStr() ); + const_cast( text->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -3001,7 +3001,7 @@ EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE() case T_tstamp: NextTok(); - const_cast( segment->m_Uuid ) = KIID( CurStr() ); + const_cast( segment->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); break; case T_status: @@ -3465,7 +3465,7 @@ D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent ) case T_tstamp: NextTok(); - const_cast( pad->m_Uuid ) = KIID( CurStr() ); + const_cast( pad->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -3604,7 +3604,7 @@ ARC* PCB_PARSER::parseARC() case T_tstamp: NextTok(); - const_cast( arc->m_Uuid ) = KIID( CurStr() ); + const_cast( arc->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); break; case T_status: @@ -3671,7 +3671,7 @@ TRACK* PCB_PARSER::parseTRACK() case T_tstamp: NextTok(); - const_cast( track->m_Uuid ) = KIID( CurStr() ); + const_cast( track->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); break; case T_status: @@ -3755,7 +3755,7 @@ VIA* PCB_PARSER::parseVIA() case T_tstamp: NextTok(); - const_cast( via->m_Uuid ) = KIID( CurStr() ); + const_cast( via->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -3844,7 +3844,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent ) case T_tstamp: NextTok(); - const_cast( zone->m_Uuid ) = KIID( CurStr() ); + const_cast( zone->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; @@ -4374,7 +4374,7 @@ PCB_TARGET* PCB_PARSER::parsePCB_TARGET() case T_tstamp: NextTok(); - const_cast( target->m_Uuid ) = KIID( CurStr() ); + const_cast( target->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); NeedRIGHT(); break; diff --git a/pcbnew/pcb_parser.h b/pcbnew/pcb_parser.h index be19b43088..7f0cb85f09 100644 --- a/pcbnew/pcb_parser.h +++ b/pcbnew/pcb_parser.h @@ -78,6 +78,7 @@ class PCB_PARSER : public PCB_LEXER std::vector m_netCodes; ///< net codes mapping for boards being loaded bool m_tooRecent; ///< true if version parses as later than supported int m_requiredVersion; ///< set to the KiCad format version this board requires + bool m_resetKIIDs; ///< reading into an existing board; reset UUIDs bool m_showLegacyZoneWarning; @@ -319,7 +320,8 @@ public: PCB_PARSER( LINE_READER* aReader = NULL ) : PCB_LEXER( aReader ), - m_board( 0 ) + m_board( 0 ), + m_resetKIIDs( false ) { init(); } @@ -343,6 +345,7 @@ public: { init(); m_board = aBoard; + m_resetKIIDs = true; } BOARD_ITEM* Parse();