diff --git a/pcbnew/pcb_io/altium/altium_pcb.cpp b/pcbnew/pcb_io/altium/altium_pcb.cpp index ea4badf32a..7d726feea3 100644 --- a/pcbnew/pcb_io/altium/altium_pcb.cpp +++ b/pcbnew/pcb_io/altium/altium_pcb.cpp @@ -805,14 +805,39 @@ FOOTPRINT* ALTIUM_PCB::ParseFootprint( ALTIUM_COMPOUND_FILE& altiumLibFile, } } + + // Loop over this multiple times to catch pads that are jumpered to each other by multiple shapes + for( bool changes = true; changes; ) + { + changes = false; + + alg::for_all_pairs( footprint->Pads().begin(), footprint->Pads().end(), + [&changes]( PAD* aPad1, PAD* aPad2 ) + { + if( !( aPad1->GetNumber().IsEmpty() ^ aPad2->GetNumber().IsEmpty() ) ) + return; + + for( PCB_LAYER_ID layer : aPad1->GetLayerSet().Seq() ) + { + std::shared_ptr shape1 = aPad1->GetEffectiveShape( layer ); + std::shared_ptr shape2 = aPad2->GetEffectiveShape( layer ); + + if( shape1->Collide( shape2.get() ) ) + { + if( aPad1->GetNumber().IsEmpty() ) + aPad1->SetNumber( aPad2->GetNumber() ); + else + aPad2->SetNumber( aPad1->GetNumber() ); + + changes = true; + } + } + } ); + } + // Auto-position reference and value footprint->AutoPositionFields(); - for( PAD* pad : footprint->Pads() ) - { - pad->Recombine( false, ARC_HIGH_DEF ); - } - if( parser.HasParsingError() ) { THROW_IO_ERROR( wxString::Format( wxT( "%s stream was not parsed correctly" ), @@ -2474,14 +2499,70 @@ void ALTIUM_PCB::ConvertShapeBasedRegions6ToFootprintItemOnLayer( FOOTPRINT* polySet.AddHole( hole_linechain ); } - std::unique_ptr shape = std::make_unique( aFootprint, SHAPE_T::POLY ); + if( aLayer == F_Cu || aLayer == B_Cu ) + { + std::unique_ptr pad = std::make_unique( aFootprint ); - shape->SetPolyShape( polySet ); - shape->SetFilled( true ); - shape->SetLayer( aLayer ); - shape->SetStroke( STROKE_PARAMS( 0 ) ); + LSET padLayers; + padLayers.set( aLayer ); - aFootprint->Add( shape.release(), ADD_MODE::APPEND ); + pad->SetAttribute( PAD_ATTRIB::SMD ); + pad->SetShape( PAD_SHAPE::CUSTOM ); + pad->SetThermalSpokeAngle( ANGLE_90 ); + + int anchorSize = 1; + VECTOR2I anchorPos = linechain.CPoint( 0 ); + + pad->SetShape( PAD_SHAPE::CUSTOM ); + pad->SetAnchorPadShape( PAD_SHAPE::CIRCLE ); + pad->SetSize( { anchorSize, anchorSize } ); + pad->SetPosition( anchorPos ); + + SHAPE_POLY_SET shapePolys = polySet; + shapePolys.Move( -anchorPos ); + pad->AddPrimitivePoly( shapePolys, 0, true ); + + auto& map = m_extendedPrimitiveInformationMaps[ALTIUM_RECORD::REGION]; + auto it = map.find( aPrimitiveIndex ); + + if( it != map.end() ) + { + const AEXTENDED_PRIMITIVE_INFORMATION& info = it->second; + + if( info.pastemaskexpansionmode == ALTIUM_MODE::MANUAL ) + { + pad->SetLocalSolderPasteMargin( + info.pastemaskexpansionmanual ? info.pastemaskexpansionmanual : 1 ); + } + + if( info.soldermaskexpansionmode == ALTIUM_MODE::MANUAL ) + { + pad->SetLocalSolderMaskMargin( + info.soldermaskexpansionmanual ? info.soldermaskexpansionmanual : 1 ); + } + + if( info.pastemaskexpansionmode != ALTIUM_MODE::NONE ) + padLayers.set( aLayer == F_Cu ? F_Paste : B_Paste ); + + if( info.soldermaskexpansionmode != ALTIUM_MODE::NONE ) + padLayers.set( aLayer == F_Cu ? F_Mask : B_Mask ); + } + + pad->SetLayerSet( padLayers ); + + aFootprint->Add( pad.release(), ADD_MODE::APPEND ); + } + else + { + std::unique_ptr shape = std::make_unique( aFootprint, SHAPE_T::POLY ); + + shape->SetPolyShape( polySet ); + shape->SetFilled( true ); + shape->SetLayer( aLayer ); + shape->SetStroke( STROKE_PARAMS( 0 ) ); + + aFootprint->Add( shape.release(), ADD_MODE::APPEND ); + } } @@ -4224,24 +4305,73 @@ void ALTIUM_PCB::ConvertFills6ToBoardItemOnLayer( const AFILL6& aElem, PCB_LAYER void ALTIUM_PCB::ConvertFills6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, const AFILL6& aElem, PCB_LAYER_ID aLayer ) { - PCB_SHAPE* fill = new PCB_SHAPE( aFootprint, SHAPE_T::RECTANGLE ); - - fill->SetFilled( true ); - fill->SetLayer( aLayer ); - fill->SetStroke( STROKE_PARAMS( 0 ) ); - - fill->SetStart( aElem.pos1 ); - fill->SetEnd( aElem.pos2 ); - - if( aElem.rotation != 0. ) + if( aLayer == F_Cu || aLayer == B_Cu ) { - // TODO: Do we need SHAPE_T::POLY for non 90° rotations? - VECTOR2I center( aElem.pos1.x / 2 + aElem.pos2.x / 2, - aElem.pos1.y / 2 + aElem.pos2.y / 2 ); - fill->Rotate( center, EDA_ANGLE( aElem.rotation, DEGREES_T ) ); - } + std::unique_ptr pad = std::make_unique( aFootprint ); - aFootprint->Add( fill, ADD_MODE::APPEND ); + LSET padLayers; + padLayers.set( aLayer ); + + pad->SetAttribute( PAD_ATTRIB::SMD ); + if( aElem.rotation == 0. ) + { + pad->SetShape( PAD_SHAPE::RECTANGLE ); + pad->SetSize( { aElem.pos2.x - aElem.pos1.x, aElem.pos2.y - aElem.pos1.y } ); + pad->SetPosition( ( aElem.pos1 + aElem.pos2 ) / 2 ); + } + else + { + pad->SetShape( PAD_SHAPE::CUSTOM ); + + int anchorSize = std::min( std::abs( aElem.pos2.x - aElem.pos1.x ), + std::abs( aElem.pos2.y - aElem.pos1.y ) ); + VECTOR2I anchorPos = aElem.pos1; + + pad->SetAnchorPadShape( PAD_SHAPE::CIRCLE ); + pad->SetSize( { anchorSize, anchorSize } ); + pad->SetPosition( anchorPos ); + + SHAPE_POLY_SET shapePolys; + shapePolys.NewOutline(); + shapePolys.Append( aElem.pos1.x - anchorPos.x, aElem.pos1.y - anchorPos.y ); + shapePolys.Append( aElem.pos2.x - anchorPos.x, aElem.pos1.y - anchorPos.y ); + shapePolys.Append( aElem.pos2.x - anchorPos.x, aElem.pos2.y - anchorPos.y ); + shapePolys.Append( aElem.pos1.x - anchorPos.x, aElem.pos2.y - anchorPos.y ); + shapePolys.Outline( 0 ).SetClosed( true ); + + VECTOR2I center( ( aElem.pos1.x + aElem.pos2.x ) / 2 - anchorPos.x, + ( aElem.pos1.y + aElem.pos2.y ) / 2 - anchorPos.y ); + shapePolys.Rotate( EDA_ANGLE( aElem.rotation, DEGREES_T ), center ); + pad->AddPrimitivePoly( shapePolys, 0, true ); + } + + pad->SetThermalSpokeAngle( ANGLE_90 ); + pad->SetLayerSet( padLayers ); + + aFootprint->Add( pad.release(), ADD_MODE::APPEND ); + } + else + { + std::unique_ptr fill = + std::make_unique( aFootprint, SHAPE_T::RECTANGLE ); + + fill->SetFilled( true ); + fill->SetLayer( aLayer ); + fill->SetStroke( STROKE_PARAMS( 0 ) ); + + fill->SetStart( aElem.pos1 ); + fill->SetEnd( aElem.pos2 ); + + if( aElem.rotation != 0. ) + { + // TODO: Do we need SHAPE_T::POLY for non 90° rotations? + VECTOR2I center( aElem.pos1.x / 2 + aElem.pos2.x / 2, + aElem.pos1.y / 2 + aElem.pos2.y / 2 ); + fill->Rotate( center, EDA_ANGLE( aElem.rotation, DEGREES_T ) ); + } + + aFootprint->Add( fill.release(), ADD_MODE::APPEND ); + } } diff --git a/qa/data/pcbnew/plugins/altium/pcblib/Espressif ESP32-WROOM-32.pretty/Espressif ESP32-WROOM-32.kicad_mod b/qa/data/pcbnew/plugins/altium/pcblib/Espressif ESP32-WROOM-32.pretty/Espressif ESP32-WROOM-32.kicad_mod index 6c7bd400b0..636e011425 100644 --- a/qa/data/pcbnew/plugins/altium/pcblib/Espressif ESP32-WROOM-32.pretty/Espressif ESP32-WROOM-32.kicad_mod +++ b/qa/data/pcbnew/plugins/altium/pcblib/Espressif ESP32-WROOM-32.pretty/Espressif ESP32-WROOM-32.kicad_mod @@ -1,303 +1,305 @@ (footprint "Espressif ESP32-WROOM-32" (version 20240108) (generator "pcbnew") (generator_version "8.0") (layer "F.Cu") (descr "39-SMD Module") - (property "Reference" "REF**" (at -0.7949 -15.8 0) (layer "F.SilkS")(uuid "1ba00595-7cdb-41da-b2d6-fe1e55aedb5a") + (property "Reference" "REF**" (at -0.7949 -15.8 0) (layer "F.SilkS")(uuid "f7ddddee-76f3-4a42-9d8f-38560a8d1a7b") (effects (font (size 1 1) (thickness 0.15))) ) - (property "Value" "Espressif ESP32-WROOM-32" (at -0.7949 11.7 0) (layer "F.Fab")(uuid "a0b801f8-67b0-40af-bc74-5fb922536f1e") + (property "Value" "Espressif ESP32-WROOM-32" (at -0.7949 11.7 0) (layer "F.Fab")(uuid "59df7c48-e724-4ab5-a33b-9e60bc4d2ba8") (effects (font (size 1 1) (thickness 0.15))) ) (property "Footprint" "" (at 0 0 0) (layer "F.Fab")(hide yes) -(uuid "d11e7180-2d21-44b8-82e1-14dfae92478f") +(uuid "21c0c3f7-dd20-42d2-b8ca-f18a3d492892") (effects (font (size 1 1) (thickness 0.15))) ) (property "Datasheet" "" (at 0 0 0) (layer "F.Fab")(hide yes) -(uuid "9a20ae60-6735-491f-b2ce-7be2e1ce8201") +(uuid "63ad61c5-c2ee-4242-9854-ca508f48c883") (effects (font (size 1 1) (thickness 0.15))) ) (property "Description" "" (at 0 0 0) (layer "F.Fab")(hide yes) -(uuid "c9846f16-7334-4c7e-9942-76164abfe712") +(uuid "9cd8cbf3-6cd7-4067-b1fe-7847b84b98ec") (effects (font (size 1 1) (thickness 0.15))) ) - (fp_rect (start -4 3) (end 2 -3) - (stroke (width 0) (type default)) (fill solid) (layer "F.Cu")(uuid "53a0d484-ba4a-473a-813a-78ba00c68775")) - (fp_rect (start -4 3) (end 2 -3) - (stroke (width 0) (type default)) (fill solid) (layer "B.Cu")(uuid "6f10dc95-dd4b-4c58-8b3f-1c01f0ee7340")) (fp_line (start -9 -15) (end 9 -15) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "80691bf8-c994-4d7f-b35a-ca2db09f8f30")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "ccbcb558-12da-48bb-b4bf-f72362e39ef0")) (fp_line (start -9 -8.3) (end -9 -15) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "c0fc8e99-faa2-4f86-9767-2abba0af87d1")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "6b3b48a7-1e14-4cc2-a554-0e552e218af5")) (fp_line (start -9 10.5) (end -9 9.6) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "6cf50186-6cff-4054-ac04-35cdc465c665")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "61a88ea9-bff4-4f16-8f96-19cf448eb981")) (fp_line (start -9 10.5) (end -6.4 10.5) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "8d1b0767-bf73-4a04-b6e3-65a0eebc4ef6")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "bbe9eb65-c5be-4c38-8c0a-723591cb90a0")) (fp_line (start 6.4 10.5) (end 9 10.5) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "dced984c-c0d0-426d-a7d1-c0807afc815e")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "974d2cde-b3ad-48f6-a99d-d5b30540f52b")) (fp_line (start 9 -8.3) (end 9 -15) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "22567767-03c8-41d7-ae97-5b7b380d06b1")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "80816d7f-d18b-40cd-aa36-206caee69797")) (fp_line (start 9 10.5) (end 9 9.6) - (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "4b1b5b15-b78d-4c85-b0c8-bc4be1e8bced")) + (stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "69ed6f45-b0ca-499f-b17a-9d0db8d1c36c")) (fp_circle (center -10.4648 -7.62) (end -10.4648 -7.87) - (stroke (width 0.75) (type solid)) (fill none) (layer "F.SilkS")(uuid "7099898e-3e99-4ff9-9998-26b15f8b942d")) + (stroke (width 0.75) (type solid)) (fill none) (layer "F.SilkS")(uuid "6efc53fe-bbe2-48ea-b62e-f4b1a3f8e999")) (fp_line (start -9.7 -15.2) (end 9.7 -15.2) - (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "14e1cc73-d49a-4c41-80c1-293ddec29a74")) + (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "bbe7a210-7838-4f44-b687-409f584a73a3")) (fp_line (start -9.7 11.2) (end -9.7 -15.2) - (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "b8869f21-d425-4cea-aece-88023926befe")) + (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "8c2a6103-7821-4cec-83e7-f99c2304180a")) (fp_line (start -9.7 11.2) (end 9.7 11.2) - (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "77db8cac-b176-46fb-8e07-658498a434b2")) + (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "3b8ffe4a-6551-4c47-a257-203ce0555572")) (fp_line (start -0.5 -0.001) (end 0.5 -0.001) - (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "93051670-a8f3-4544-ad70-5770f75aa29c")) + (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "886a6591-8f27-42b6-98a3-0245528e1261")) (fp_line (start 0 0.499) (end 0 -0.501) - (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "be4932e2-42e8-4a91-afd5-8b2672e4dc85")) + (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "140c57d5-c796-4b32-b7a9-0c9f8afc69ae")) (fp_line (start 9.7 11.2) (end 9.7 -15.2) - (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "a22230da-646c-4c5b-88ba-3fc4f8e38cd5")) + (stroke (width 0.05) (type solid)) (layer "Eco2.User")(uuid "5d90805d-b24d-42dd-9e39-79a2736359c1")) (fp_line (start -9 -15) (end 9 -15) - (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "14b89af9-3886-41e7-81f7-790f1475cc6f")) + (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "b11cb1a3-7de6-4a46-9c80-38f6ea31f285")) (fp_line (start -9 10.5) (end -9 -15) - (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "fa541386-c806-4fc4-b7b3-5631071cd1d8")) + (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "dfc474f7-1d8e-4a86-9bc6-4064b5e59255")) (fp_line (start -9 10.5) (end 9 10.5) - (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "2d3c548c-d4fd-4999-9b1b-ce3cf77653f8")) + (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "e4bdee17-dd3e-4905-925a-54c1554c5c54")) (fp_line (start 9 10.5) (end 9 -15) - (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "742495ee-f970-46f8-8d2e-7e837df25243")) + (stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "83c47a1b-af42-44c3-b12e-c2dc8f003731")) (fp_circle (center -7.9 -7.6) (end -7.9 -8.1) - (stroke (width 0.1) (type solid)) (fill none) (layer "B.Fab")(uuid "5bf18964-d0d0-4b33-85ae-21b8d7a38792")) - (pad "" thru_hole circle (at -2.835 -0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "bd6cfc84-eed1-4c29-a962-6927e8cfc9bb") - ) - (pad "" thru_hole circle (at -2.835 0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "68a85088-9a9e-47ce-94e2-f381f4a07714") - ) - (pad "" thru_hole circle (at -1.9175 -1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "1c020f30-66e8-4eda-bdc9-6a92ba465ace") - ) - (pad "" thru_hole circle (at -1.9175 0) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "c248bc1b-8b27-4749-9508-f940920db95f") - ) - (pad "" thru_hole circle (at -1.9175 1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "ce126843-0c03-4fff-a8d4-eb5b171f7023") - ) - (pad "" thru_hole circle (at -1 -0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "20fa0e63-64ef-4b71-a1fe-3d1b688fc272") - ) - (pad "" thru_hole circle (at -1 0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "7c71a6e2-f6c8-4fc5-9972-fdaa6b0ed183") - ) - (pad "" thru_hole circle (at -0.0825 -1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "bfe8372c-0104-45b2-b353-86c4c2fd8e69") - ) - (pad "" thru_hole circle (at -0.0825 0) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "90590aa4-d200-4aa3-ae3d-65fca4ddd997") - ) - (pad "" thru_hole circle (at -0.0825 1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "6a3bca9f-deda-484a-b4aa-9d2307c847a8") - ) - (pad "" thru_hole circle (at 0.835 -0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "55800dd8-2ca8-463b-bb99-5c932c761b41") - ) - (pad "" thru_hole circle (at 0.835 0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) - -(uuid "0ca122ad-16fa-4dca-a9d5-ec9f28de0f66") - ) + (stroke (width 0.1) (type solid)) (fill none) (layer "B.Fab")(uuid "e97379b3-1161-4400-a6d3-0a66e2be5354")) (pad "1" smd roundrect (at -8.5 -7.51) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "08b22d3f-0a6e-460e-8007-ec53f2731e61") +(uuid "f99e4362-5f85-458c-b0b6-2594153a82cb") ) (pad "2" smd roundrect (at -8.5 -6.24) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "2272b202-c8dd-4092-8d85-b67de448c62c") +(uuid "ee3fbcaf-49b9-435d-9ad3-1b9fff5d8576") ) (pad "3" smd roundrect (at -8.5 -4.97) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "5ae9181f-a60a-4a34-af39-fb8d53927279") +(uuid "64937670-ff1a-4818-9c7a-aa6ebce42f3d") ) (pad "4" smd roundrect (at -8.5 -3.7) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "bbcd7a59-6f51-41e5-8610-5ab3cef829b7") +(uuid "17b9021b-75cf-4616-87d6-cb34ade5d27e") ) (pad "5" smd roundrect (at -8.5 -2.43) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "1e913477-4faf-4989-85b4-d7029d70586e") +(uuid "678ecd60-e2f8-40ed-bddb-5c81316a0417") ) (pad "6" smd roundrect (at -8.5 -1.16) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "db825d4e-6363-4655-9559-ae00ca64c554") +(uuid "84882a6a-d30e-4a7b-9785-39bfd974e13b") ) (pad "7" smd roundrect (at -8.5 0.11) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "60b7d8aa-b138-43ea-bd1e-16adcc8d33ad") +(uuid "9138158d-d4d6-46c4-9aaf-66b5ea6370b3") ) (pad "8" smd roundrect (at -8.5 1.38) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "c9f71d4b-93a6-4852-bb18-cdf4ac8bf641") +(uuid "d981b7a5-883e-45a7-8c70-fbeacbe86360") ) (pad "9" smd roundrect (at -8.5 2.65) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "1f949961-9a09-4f81-8c03-269f743d2a7b") +(uuid "7b64850b-05b8-41a8-82e4-e53811dc073c") ) (pad "10" smd roundrect (at -8.5 3.92) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "0d988aeb-fa36-403d-87e2-f6c2ecbb3939") +(uuid "65d9a089-a670-47b8-8581-33aecbbe1cc8") ) (pad "11" smd roundrect (at -8.5 5.19 180) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "c318ce7c-9f79-4225-a5e2-fc0ef5969e12") +(uuid "f19f9267-31fc-479f-834b-63dce70df920") ) (pad "12" smd roundrect (at -8.5 6.46 180) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "a631940e-4cf1-46cf-9863-78213fd22aba") +(uuid "b274ec92-f21f-4607-8bb9-b8706cfd34a9") ) (pad "13" smd roundrect (at -8.5 7.73 180) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "0d5130a2-681c-4940-b4a3-46d65b90f11c") +(uuid "dab42302-674a-4981-874c-5c6329116647") ) (pad "14" smd roundrect (at -8.5 9 180) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "cb1a6cde-49c4-41d3-b96f-7a1e356d9bc3") +(uuid "70db9bc8-38bc-4f9e-8704-d1e5633bf5e3") ) (pad "15" smd roundrect (at -5.715 10 270) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "91914b0e-bde1-4de2-98c6-eec4a1b28372") +(uuid "8530e9b8-ccf1-4af1-9c95-867dbd5f3cb2") ) (pad "16" smd roundrect (at -4.445 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "17985445-f923-44c5-a38b-b003fdc26921") +(uuid "0ad92815-dcf5-4ada-9d73-3d5c509aedc6") ) (pad "17" smd roundrect (at -3.175 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "571fb42b-535a-43e7-a84b-c505467a4dfe") +(uuid "90ce394f-743c-4f8e-98d6-b465adb9f46b") ) (pad "18" smd roundrect (at -1.905 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "b982433f-58ba-420b-96da-b40877d56837") +(uuid "7af065a4-9e6b-4cba-bc0b-d16883fe3f1f") ) (pad "19" smd roundrect (at -0.635 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "32bfc9c0-6dc4-4f9b-bf0f-1a92d0763c1c") +(uuid "b44f6a1d-e3f0-46c8-a919-2e168a6b9784") ) (pad "20" smd roundrect (at 0.635 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "a1bc973c-19a1-41d1-a237-88892065b913") +(uuid "903c19e8-7a26-4db4-a48d-f5ece8811cd6") ) (pad "21" smd roundrect (at 1.905 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "c847265b-aad7-447d-93ee-dfa65e1c873c") +(uuid "4626dc20-5baa-47cc-964d-c23f1b175877") ) (pad "22" smd roundrect (at 3.175 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "349f767a-8008-41ef-934a-dab97b501fa9") +(uuid "281bc41e-0612-45cb-987b-5dbdb3753486") ) (pad "23" smd roundrect (at 4.445 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "542fdc21-09f1-4b4a-be4c-6510b2d2d95b") +(uuid "3ca9ac34-c65d-48f3-a321-c281200db675") ) (pad "24" smd roundrect (at 5.715 10 90) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "b1cbe2fb-fddb-4e17-967c-fb083174aed6") +(uuid "38cd3a21-a95d-413c-aa86-a15cbfbcf5f7") ) (pad "25" smd roundrect (at 8.5 9) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "2a9eeacd-6474-4267-beda-833c7149a0bb") +(uuid "e1170e16-4a60-4f2e-8032-be726e1d75c2") ) (pad "26" smd roundrect (at 8.5 7.73) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "70aec27e-eb81-4ff3-8561-3b4c5b24e5ec") +(uuid "dbf16cd6-5c85-46c7-baf9-2b3bf931a622") ) (pad "27" smd roundrect (at 8.5 6.46) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "c655475d-1ee7-426c-a402-69ff7a728877") +(uuid "80e16a54-aa17-4664-8c41-357ecebd92f0") ) (pad "28" smd roundrect (at 8.5 5.19) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "4f47f373-52d7-475c-abff-73cd34ae3686") +(uuid "5ee6db82-b066-4aa8-af96-9a1bedef52ed") ) (pad "29" smd roundrect (at 8.5 3.92) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "c45041a1-4fa4-42b6-bcd5-f963500b6d3e") +(uuid "c573abb6-48ad-458e-a2b4-42bd0aa7b381") ) (pad "30" smd roundrect (at 8.5 2.65) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.05) (solder_mask_margin 0.05) -(uuid "adf0b2ed-3ebf-4df1-b9ed-0721e80ee4b5") +(uuid "5c31c709-7405-4fec-8f20-7838f1730803") ) (pad "31" smd rect (at 8.5 1.38) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "4e7e1e9a-114b-4106-afa2-dfa31b2f12a4") +(uuid "b028670b-34db-4bc0-9768-3092d98559f7") ) (pad "32" smd rect (at 8.5 0.11) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "1b9b4f68-90f4-453e-9b43-a95988ea38f9") +(uuid "4ae610e6-d9db-4585-9c85-5dd47400f9bd") ) (pad "33" smd rect (at 8.5 -1.16) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "2e91def0-0fb4-4beb-b4e4-065be23f743c") +(uuid "8e4ff640-19e0-4c88-9457-bc80caa7282c") ) (pad "34" smd rect (at 8.5 -2.43) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "847cef85-5fb6-4885-8a0a-77ee0bdeea01") +(uuid "9199e8e2-8371-4589-aecb-0fefd05aef73") ) (pad "35" smd rect (at 8.5 -3.7) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "f18d349c-e4d0-4a6d-a1b2-536d039f2144") +(uuid "61b3f64c-58a6-41fe-a25e-b357af19bd97") ) (pad "36" smd rect (at 8.5 -4.97) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "d5990d49-986d-4f84-a69e-03162d9ee421") +(uuid "6eab4fbe-e494-48be-bcb7-7033bdc34e13") ) (pad "37" smd rect (at 8.5 -6.24) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "63c5963a-f366-4128-acc5-663d0ad8c169") +(uuid "3a7357a7-7e01-4d2c-9ff8-f51c0acef7f9") ) (pad "38" smd rect (at 8.5 -7.51) (size 2 0.9) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "53498215-ca6d-46ab-907e-b5bf5dfc21c6") +(uuid "3511aaa5-4035-46da-b5aa-a378777c87f9") ) (pad "39" smd rect (at -2.835 -1.835) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "b65c2d8c-02d8-466a-b9fa-d6195265d9ad") +(uuid "33fbc71b-cee0-49df-8a17-5c23951cd06d") + ) + (pad "39" thru_hole circle (at -2.835 -0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "91f24b80-3551-4147-b396-a65fa2b228c6") ) (pad "39" smd rect (at -2.835 0 90) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "c3a96cd8-1aca-4519-a786-e2f992640989") +(uuid "4541feab-e3dd-42f1-98e6-f68d3bc4d2f9") + ) + (pad "39" thru_hole circle (at -2.835 0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "82ed68d5-649e-43b2-ae52-084af4e141d3") ) (pad "39" smd rect (at -2.835 1.835 180) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "0bebd4e2-d364-4325-b4e9-d90e23a46083") +(uuid "0a8d9ed5-c8f5-46fb-8601-a6cb60e77880") + ) + (pad "39" thru_hole circle (at -1.9175 -1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "a060a74a-409c-44e2-a812-da2ee7230dbd") + ) + (pad "39" thru_hole circle (at -1.9175 0) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "55316ebd-0b01-4e2e-997a-c93e96595335") + ) + (pad "39" thru_hole circle (at -1.9175 1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "14619631-75cd-4baa-938a-3b8c14c4b089") ) (pad "39" smd rect (at -1 -1.835) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "a6cc869e-0998-40a6-85c9-cfa613ec10ff") +(uuid "4a031b07-5fe8-4710-94f6-81a3a6b51307") + ) + (pad "39" thru_hole circle (at -1 -0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "12a4f942-4f1a-4c93-985a-51d459fcf0e7") ) (pad "39" smd rect (at -1 0) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "f20a48ff-a576-4d9e-a36c-e860ec5b7178") +(uuid "cdc5900b-6e40-47e1-9131-d89e7a98a22d") + ) + (pad "39" smd rect (at -1 0) (size 6 -6) (layers "F.Cu") +(uuid "597e6e56-6aff-40bd-a617-3606896d64a1") + ) + (pad "39" smd rect (at -1 0) (size 6 -6) (layers "B.Cu") +(uuid "e1a84642-9b3b-47ee-884d-e09a9e2b8553") + ) + (pad "39" thru_hole circle (at -1 0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "d3be3a9e-7acf-4778-a1e9-0b97b634358c") ) (pad "39" smd rect (at -1 1.835 180) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "9cffc53d-9bad-45ea-9503-c6bf1e6620f6") +(uuid "94019a7f-4ec3-450b-9817-70390ef95172") + ) + (pad "39" thru_hole circle (at -0.0825 -1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "6637b83b-a4f1-43ba-b285-4986426c9f93") + ) + (pad "39" thru_hole circle (at -0.0825 0) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "11777650-ceb9-4c35-9143-d23c370ccafd") + ) + (pad "39" thru_hole circle (at -0.0825 1.835) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "1b551e05-c1f6-4d84-a9e5-a1e00ec3b0ae") ) (pad "39" smd rect (at 0.835 -1.835) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "5da7dec2-3ce0-4c32-b248-c57e1cbaeae5") +(uuid "284967cd-1c5e-498d-8a9c-3f4b1d1bd67b") + ) + (pad "39" thru_hole circle (at 0.835 -0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "f03f9897-611a-4d8b-a3e2-5c842a54c72d") ) (pad "39" smd rect (at 0.835 0 270) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "7f4f074a-f529-475f-83d1-3b6208ef8c60") +(uuid "9a82cbde-bf24-4f76-bcba-5ebe97c65a0f") + ) + (pad "39" thru_hole circle (at 0.835 0.9175) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask")(remove_unused_layers no) + +(uuid "b1f952db-dbfa-485d-a45e-4747e199b57c") ) (pad "39" smd rect (at 0.835 1.835 180) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask") (solder_mask_margin 0.05) -(uuid "c91782b9-912e-4085-a63d-548ccf1935b5") +(uuid "9fc18859-4958-4808-bd37-76c1540986ea") ) - (zone (net 0) (net_name "") (layers "*.Cu")(uuid "ef687268-1ef2-4ddb-ac11-af11f3ba3ff4") + (zone (net 0) (net_name "") (layers "*.Cu")(uuid "29f6a6bd-8842-4382-9864-e9399823aab5") (hatch edge 0.5) (connect_pads (clearance 0)) (min_thickness 0.25) (filled_areas_thickness no)