diff --git a/pcbnew/pcb_io/altium/altium_parser_pcb.cpp b/pcbnew/pcb_io/altium/altium_parser_pcb.cpp index 3ebe7a7abd..7ce2be435f 100644 --- a/pcbnew/pcb_io/altium/altium_parser_pcb.cpp +++ b/pcbnew/pcb_io/altium/altium_parser_pcb.cpp @@ -787,6 +787,9 @@ APAD6::APAD6( ALTIUM_BINARY_PARSER& aReader ) soldermaskexpansionmode = static_cast( aReader.Read() ); aReader.Skip( 3 ); // to 106 + pad_to_die_length = 0; + pad_to_die_delay = 0; + if( subrecord5 == 110 ) { // Don't know exactly what this is, but it's always been 0 in the files with @@ -820,6 +823,14 @@ APAD6::APAD6( ALTIUM_BINARY_PARSER& aReader ) { } + if( subrecord5 >= 202 ) + { + aReader.Skip( 40 ); + pad_to_die_length = aReader.ReadKicadUnit(); + aReader.Skip( 32 ); + pad_to_die_delay = KiROUND( aReader.Read() * 1e18 ); + } + aReader.SkipSubrecord(); // Subrecord 6 diff --git a/pcbnew/pcb_io/altium/altium_parser_pcb.h b/pcbnew/pcb_io/altium/altium_parser_pcb.h index 5fc6b781e0..9b9bbe504d 100644 --- a/pcbnew/pcb_io/altium/altium_parser_pcb.h +++ b/pcbnew/pcb_io/altium/altium_parser_pcb.h @@ -687,6 +687,9 @@ struct APAD6 ALTIUM_LAYER tolayer; ALTIUM_LAYER fromlayer; + int32_t pad_to_die_length; + int32_t pad_to_die_delay; + std::unique_ptr sizeAndShape; explicit APAD6( ALTIUM_BINARY_PARSER& aReader ); diff --git a/pcbnew/pcb_io/altium/altium_pcb.cpp b/pcbnew/pcb_io/altium/altium_pcb.cpp index a8c77cc5bc..960a07ac4a 100644 --- a/pcbnew/pcb_io/altium/altium_pcb.cpp +++ b/pcbnew/pcb_io/altium/altium_pcb.cpp @@ -3618,6 +3618,9 @@ void ALTIUM_PCB::ConvertPads6ToFootprintItemOnCopper( FOOTPRINT* aFootprint, con if( aElem.is_tent_bottom ) pad->SetLayerSet( pad->GetLayerSet().reset( B_Mask ) ); + pad->SetPadToDieLength( aElem.pad_to_die_length ); + pad->SetPadToDieDelay( aElem.pad_to_die_delay ); + aFootprint->Add( pad.release(), ADD_MODE::APPEND ); }