Cleanup Altium text import

Handle inverted text
Correct location for flags
Add mechanics to detect inverted_rect (like text boxes)

(cherry picked from commit b11e030f8f)
This commit is contained in:
Seth Hillbrand 2024-06-16 13:07:39 -07:00
parent 48077d77c4
commit b589da63d8
4 changed files with 360 additions and 690 deletions

View File

@ -1009,13 +1009,24 @@ ATEXT6::ATEXT6( ALTIUM_BINARY_PARSER& aReader, std::map<uint32_t, wxString>& aSt
aReader.Skip( 4 );
position = aReader.ReadVector2IPos();
height = aReader.ReadKicadUnit();
aReader.Skip( 2 );
strokefonttype = static_cast<STROKE_FONT_TYPE>( aReader.Read<uint16_t>() );
// TODO: The Serif font type doesn't match well with KiCad, we should replace it with a better match
rotation = aReader.Read<double>();
isMirrored = aReader.Read<uint8_t>() != 0;
strokewidth = aReader.ReadKicadUnit();
if( subrecord1 < 123 )
{
fonttype = ALTIUM_TEXT_TYPE::STROKE;
aReader.SkipSubrecord();
return;
}
isComment = aReader.Read<uint8_t>() != 0;
isDesignator = aReader.Read<uint8_t>() != 0;
aReader.Skip( 2 );
aReader.Skip( 1 );
fonttype = static_cast<ALTIUM_TEXT_TYPE>( aReader.Read<uint8_t>() );
isBold = aReader.Read<uint8_t>() != 0;
isItalic = aReader.Read<uint8_t>() != 0;
@ -1023,17 +1034,11 @@ ATEXT6::ATEXT6( ALTIUM_BINARY_PARSER& aReader, std::map<uint32_t, wxString>& aSt
aReader.ReadBytes( fontData, sizeof( fontData ) );
fontname = wxString( fontData, wxMBConvUTF16LE(), sizeof( fontData ) ).BeforeFirst( '\0' );
isInverted = aReader.Read<uint8_t>() != 0;
char tmpbyte = aReader.Read<uint8_t>();
isInverted = !!tmpbyte;
inverted_borderwidth = aReader.ReadKicadUnit();
widestring_index = aReader.Read<uint32_t>();
aReader.Skip( 4 );
uint32_t stringIndex = aReader.Read<uint32_t>();
aReader.Skip( 13 );
textposition = static_cast<ALTIUM_TEXT_POSITION>( aReader.Read<uint8_t>() );
/**
* In Altium 14 (subrecord1 == 230) only left bottom is valid? I think there is a bit missing.
* https://gitlab.com/kicad/code/kicad/-/merge_requests/60#note_274913397
*/
if( subrecord1 <= 230 )
textposition = ALTIUM_TEXT_POSITION::LEFT_BOTTOM;
// An inverted rect in Altium is like a text box with the text inverted.
isInvertedRect = aReader.Read<uint8_t>() != 0;
@ -1047,7 +1052,7 @@ ATEXT6::ATEXT6( ALTIUM_BINARY_PARSER& aReader, std::map<uint32_t, wxString>& aSt
// Subrecord 2 - Legacy 8bit string, max 255 chars, unknown codepage
aReader.ReadAndSetSubrecordLength();
auto entry = aStringTable.find( stringIndex );
auto entry = aStringTable.find( widestring_index );
if( entry != aStringTable.end() )
text = entry->second;
@ -1059,6 +1064,13 @@ ATEXT6::ATEXT6( ALTIUM_BINARY_PARSER& aReader, std::map<uint32_t, wxString>& aSt
aReader.SkipSubrecord();
// Altium only supports inverting truetype fonts
if( fonttype != ALTIUM_TEXT_TYPE::TRUETYPE )
{
isInverted = false;
isInvertedRect = false;
}
if( aReader.HasParsingError() )
THROW_IO_ERROR( wxT( "Texts6 stream was not parsed correctly" ) );
}

View File

@ -718,6 +718,14 @@ struct ATRACK6
struct ATEXT6
{
enum class STROKE_FONT_TYPE
{
DEFAULT = 1,
SANSSERIF = 2,
SERIF = 3
};
ALTIUM_LAYER layer;
uint16_t component;
@ -725,7 +733,7 @@ struct ATEXT6
uint32_t height;
double rotation;
uint32_t strokewidth;
ALTIUM_TEXT_POSITION textposition;
STROKE_FONT_TYPE strokefonttype;
bool isBold;
bool isItalic;

View File

@ -2914,6 +2914,7 @@ void ALTIUM_PCB::ConvertVias6ToFootprintItem( FOOTPRINT* aFootprint, const AVIA6
pad->SetNumber( "" );
pad->SetNetCode( GetNetCode( aElem.net ) );
pad->SetKeepTopBottom( false );
pad->SetPosition( aElem.position );
pad->SetSize( VECTOR2I( aElem.diameter, aElem.diameter ) );
pad->SetDrillSize( VECTOR2I( aElem.holesize, aElem.holesize ) );
@ -3935,6 +3936,7 @@ void ALTIUM_PCB::ConvertTexts6ToBoardItemOnLayer( const ATEXT6& aElem, PCB_LAYER
{ "PRINT_DATE", "CURRENT_DATE"},
};
wxString kicadText = AltiumPcbSpecialStringsToKiCadStrings( aElem.text, variableMap );
BOARD_ITEM* item = pcbText.get();
EDA_TEXT* text = pcbText.get();
@ -3947,7 +3949,7 @@ void ALTIUM_PCB::ConvertTexts6ToBoardItemOnLayer( const ATEXT6& aElem, PCB_LAYER
item = pcbTextbox.get();
text = pcbTextbox.get();
pcbTextbox->SetPosition( aElem.position );
pcbTextbox->SetRectangle( -aElem.textbox_rect_height, aElem.textbox_rect_width );
pcbTextbox->SetRectangle( aElem.textbox_rect_height, aElem.textbox_rect_width );
switch( aElem.textbox_rect_justification )
{
@ -4046,10 +4048,11 @@ void ALTIUM_PCB::ConvertTexts6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, con
wxString kicadText = AltiumPcbSpecialStringsToKiCadStrings( aElem.text, variableMap );
text->SetText(kicadText);
text->SetKeepUpright( false );
item->SetLayer( aLayer );
item->SetIsKnockout( aElem.isInverted );
fpText->SetText(kicadText);
fpText->SetKeepUpright( false );
fpText->SetLayer( aLayer );
fpText->SetPosition( aElem.position );
fpText->SetIsKnockout( aElem.isInverted );
if( isTextbox )
{
@ -4099,7 +4102,7 @@ void ALTIUM_PCB::ConvertTexts6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, con
field->SetPosition( aElem.position );
}
ConvertTexts6ToEdaTextSettings( aElem, *text );
ConvertTexts6ToEdaTextSettings( aElem, text );
if( toAdd )
{
@ -4138,6 +4141,9 @@ void ALTIUM_PCB::ConvertTexts6ToEdaTextSettings( const ATEXT6& aElem, EDA_TEXT*
aEdaText->SetItalic( aElem.isItalic );
aEdaText->SetMirrored( aElem.isMirrored );
aEdaText->SetTextAngle( EDA_ANGLE( aElem.rotation, DEGREES_T ) );
aEdaText->SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
aEdaText->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
}

View File

@ -1,670 +1,314 @@
(footprint "Espressif ESP32-WROOM-32"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(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)
(unlocked yes)
(layer "F.SilkS")
(uuid "e86c5289-cb53-49f4-b61a-8baeb9261682")
(effects
(font
(size 1 1)
(thickness 0.15)
(property "Reference" "REF**" (at -0.7949 -15.8 0) (layer "F.SilkS")(uuid "1ba00595-7cdb-41da-b2d6-fe1e55aedb5a")
(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")
(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")
(effects (font (size 1 1) (thickness 0.15)))
)
(property "Value" "Espressif ESP32-WROOM-32"
(at -0.7949 11.7 0)
(unlocked yes)
(layer "F.Fab")
(uuid "81ec18a6-dce6-49aa-b59c-30114353b268")
(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")
(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")
(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"))
(fp_line (start -9 -8.3) (end -9 -15)
(stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "c0fc8e99-faa2-4f86-9767-2abba0af87d1"))
(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"))
(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"))
(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"))
(fp_line (start 9 -8.3) (end 9 -15)
(stroke (width 0.2) (type solid)) (layer "F.SilkS")(uuid "22567767-03c8-41d7-ae97-5b7b380d06b1"))
(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"))
(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"))
(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"))
(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"))
(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"))
(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"))
(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"))
(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"))
(fp_line (start -9 -15) (end 9 -15)
(stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "14b89af9-3886-41e7-81f7-790f1475cc6f"))
(fp_line (start -9 10.5) (end -9 -15)
(stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "fa541386-c806-4fc4-b7b3-5631071cd1d8"))
(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"))
(fp_line (start 9 10.5) (end 9 -15)
(stroke (width 0.1) (type solid)) (layer "B.Fab")(uuid "742495ee-f970-46f8-8d2e-7e837df25243"))
(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")
)
(property "Footprint" "Espressif ESP32-WROOM-32"
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "d4c0bd0e-37ad-4850-b70d-aa72de04190e")
(effects
(font
(size 1 1)
(thickness 0.15)
(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")
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "4ad78952-d9c9-4b33-b810-313f34611a71")
(effects
(font
(size 1 1)
(thickness 0.15)
(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")
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "cc19605b-506b-496a-8138-e88f3cdba85a")
(effects
(font
(size 1 1)
(thickness 0.15)
(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")
)
(fp_rect
(start -4 3)
(end 2 -3)
(stroke
(width 0)
(type default)
(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")
)
(fill solid)
(layer "F.Cu")
(uuid "cc35b043-6986-447a-bcaa-0e9eb62616eb")
(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")
)
(fp_rect
(start -4 3)
(end 2 -3)
(stroke
(width 0)
(type default)
)
(fill solid)
(layer "B.Cu")
(uuid "782550ba-2fe9-404c-84a8-db3932565d44")
)
(fp_line
(start -9 -15)
(end 9 -15)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "67d81324-ca01-4ad0-a67a-4005e0154490")
)
(fp_line
(start -9 -8.3)
(end -9 -15)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "af02e358-d76a-4d1b-b0f6-40d18d17c8fc")
)
(fp_line
(start -9 10.5)
(end -9 9.6)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "be2b705a-d300-4dd3-9e29-7d5604ab5296")
)
(fp_line
(start -9 10.5)
(end -6.4 10.5)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "cfee0109-0172-4bfe-aaae-c388cd53596f")
)
(fp_line
(start 6.4 10.5)
(end 9 10.5)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "f08bd4f8-8d5f-4376-bbed-a7edf06f810b")
)
(fp_line
(start 9 -8.3)
(end 9 -15)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "f88f483c-af9a-4c56-a92d-00de32ffd17e")
)
(fp_line
(start 9 10.5)
(end 9 9.6)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "9a3ad0c4-3c41-4704-bf26-12805d7404e4")
)
(fp_circle
(center -10.4648 -7.62)
(end -10.4648 -7.87)
(stroke
(width 0.75)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "e4e4440c-e629-42f8-ada2-30d1d9420f64")
)
(fp_line
(start -9.7 -15.2)
(end 9.7 -15.2)
(stroke
(width 0.05)
(type solid)
)
(layer "Eco2.User")
(uuid "451a10e9-6d9c-4e49-8c0a-5e728c75a075")
)
(fp_line
(start -9.7 11.2)
(end -9.7 -15.2)
(stroke
(width 0.05)
(type solid)
)
(layer "Eco2.User")
(uuid "65d46d73-bac5-41d6-8797-882c3f0d54be")
)
(fp_line
(start -9.7 11.2)
(end 9.7 11.2)
(stroke
(width 0.05)
(type solid)
)
(layer "Eco2.User")
(uuid "3344f71c-4ab1-428a-a05c-05aaa0fcdc4d")
)
(fp_line
(start -0.5 -0.001)
(end 0.5 -0.001)
(stroke
(width 0.05)
(type solid)
)
(layer "Eco2.User")
(uuid "7c9a7c5b-725a-46a1-8fea-a01aa730e156")
)
(fp_line
(start 0 0.499)
(end 0 -0.501)
(stroke
(width 0.05)
(type solid)
)
(layer "Eco2.User")
(uuid "c85dc972-4566-4183-bb36-b22657f50b08")
)
(fp_line
(start 9.7 11.2)
(end 9.7 -15.2)
(stroke
(width 0.05)
(type solid)
)
(layer "Eco2.User")
(uuid "50c35ea7-bf56-49d4-916e-d93833414495")
)
(fp_line
(start -9 -15)
(end 9 -15)
(stroke
(width 0.1)
(type solid)
)
(layer "B.Fab")
(uuid "6baa9dd8-c950-4dc1-b811-2845822d4111")
)
(fp_line
(start -9 10.5)
(end -9 -15)
(stroke
(width 0.1)
(type solid)
)
(layer "B.Fab")
(uuid "9df8ac18-2784-4334-8bdf-43c18f21377a")
)
(fp_line
(start -9 10.5)
(end 9 10.5)
(stroke
(width 0.1)
(type solid)
)
(layer "B.Fab")
(uuid "233f0868-4368-4a8c-a8ae-ad6165e89871")
)
(fp_line
(start 9 10.5)
(end 9 -15)
(stroke
(width 0.1)
(type solid)
)
(layer "B.Fab")
(uuid "3cf29f0a-9eab-4b37-8ddf-e3fa86a8db59")
)
(fp_circle
(center -7.9 -7.6)
(end -7.9 -8.1)
(stroke
(width 0.1)
(type solid)
)
(fill none)
(layer "B.Fab")
(uuid "6b6278c5-995b-4a5f-8b5c-5eb1e68cad19")
)
(pad "1" smd roundrect
(at -8.5 -7.51)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "54ba3566-b09a-4fc4-aa83-8d49dbfbdba5")
(uuid "08b22d3f-0a6e-460e-8007-ec53f2731e61")
)
(pad "2" smd roundrect
(at -8.5 -6.24)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "19ed72d5-69da-443c-a447-06ffe301041f")
(uuid "2272b202-c8dd-4092-8d85-b67de448c62c")
)
(pad "3" smd roundrect
(at -8.5 -4.97)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "2d342e9a-fc86-4ca2-98b0-ff0f4acf4768")
(uuid "5ae9181f-a60a-4a34-af39-fb8d53927279")
)
(pad "4" smd roundrect
(at -8.5 -3.7)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "8c7a05fe-acab-46aa-99db-130f9d4e64e0")
(uuid "bbcd7a59-6f51-41e5-8610-5ab3cef829b7")
)
(pad "5" smd roundrect
(at -8.5 -2.43)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "424362f8-fd09-43da-99fe-ec31d9648051")
(uuid "1e913477-4faf-4989-85b4-d7029d70586e")
)
(pad "6" smd roundrect
(at -8.5 -1.16)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "a6272ba8-17e8-4b24-ab4b-9c17094c313c")
(uuid "db825d4e-6363-4655-9559-ae00ca64c554")
)
(pad "7" smd roundrect
(at -8.5 0.11)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "ab57c4c8-1670-4531-9612-d80a38d8689a")
(uuid "60b7d8aa-b138-43ea-bd1e-16adcc8d33ad")
)
(pad "8" smd roundrect
(at -8.5 1.38)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "44880566-7a0e-4079-bd1c-68e088a1bbed")
(uuid "c9f71d4b-93a6-4852-bb18-cdf4ac8bf641")
)
(pad "9" smd roundrect
(at -8.5 2.65)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "d01e07d3-2f10-4f0b-adb2-e0ff5575ae6c")
(uuid "1f949961-9a09-4f81-8c03-269f743d2a7b")
)
(pad "10" smd roundrect
(at -8.5 3.92)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "ffcd31f7-ad65-468b-b645-491108568ffb")
(uuid "0d988aeb-fa36-403d-87e2-f6c2ecbb3939")
)
(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)
(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 "e76ba829-c6b8-4f54-95f0-3c52759a5412")
(uuid "c318ce7c-9f79-4225-a5e2-fc0ef5969e12")
)
(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)
(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 "5f837dfb-977d-47d6-b070-ff0984184d64")
(uuid "a631940e-4cf1-46cf-9863-78213fd22aba")
)
(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)
(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 "8bd8c2cf-8e7a-49e5-b8d9-c3510b27fa3f")
(uuid "0d5130a2-681c-4940-b4a3-46d65b90f11c")
)
(pad "14" smd roundrect
(at -8.5 9 180)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "4f0b919f-f441-48f7-8e9d-6e8a10a4aeac")
(uuid "cb1a6cde-49c4-41d3-b96f-7a1e356d9bc3")
)
(pad "15" smd roundrect
(at -5.715 10 270)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "60e3fbbb-6042-4b2b-ab58-7eb9b8a9d099")
(uuid "91914b0e-bde1-4de2-98c6-eec4a1b28372")
)
(pad "16" smd roundrect
(at -4.445 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "9b9668d3-416a-4165-afd4-c0d22f495e0e")
(uuid "17985445-f923-44c5-a38b-b003fdc26921")
)
(pad "17" smd roundrect
(at -3.175 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "dce007eb-dddf-4750-8954-5c8c395077b8")
(uuid "571fb42b-535a-43e7-a84b-c505467a4dfe")
)
(pad "18" smd roundrect
(at -1.905 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "74f2cea0-3c49-4231-a4de-138c12e102e6")
(uuid "b982433f-58ba-420b-96da-b40877d56837")
)
(pad "19" smd roundrect
(at -0.635 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "d22ae084-e7ff-4224-95b9-a63e4ac8f3c4")
(uuid "32bfc9c0-6dc4-4f9b-bf0f-1a92d0763c1c")
)
(pad "20" smd roundrect
(at 0.635 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "24d37bfe-12e1-4059-aca0-78971d138f12")
(uuid "a1bc973c-19a1-41d1-a237-88892065b913")
)
(pad "21" smd roundrect
(at 1.905 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "ca8c63a6-ebbc-4e44-9b02-1bed2d1792fe")
(uuid "c847265b-aad7-447d-93ee-dfa65e1c873c")
)
(pad "22" smd roundrect
(at 3.175 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "d096f2ce-0d6f-4d25-8f0e-1a3c9cf080aa")
(uuid "349f767a-8008-41ef-934a-dab97b501fa9")
)
(pad "23" smd roundrect
(at 4.445 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "c3fe2d70-ae60-4aa5-9c11-f329cd885e57")
(uuid "542fdc21-09f1-4b4a-be4c-6510b2d2d95b")
)
(pad "24" smd roundrect
(at 5.715 10 90)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "b89e939a-f176-49d3-a9c7-12b953da7d39")
(uuid "b1cbe2fb-fddb-4e17-967c-fb083174aed6")
)
(pad "25" smd roundrect
(at 8.5 9)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "f9405a49-ad8a-418a-afeb-41619e5c02f4")
(uuid "2a9eeacd-6474-4267-beda-833c7149a0bb")
)
(pad "26" smd roundrect
(at 8.5 7.73)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "4920493c-867d-45af-a851-0886734db8cd")
(uuid "70aec27e-eb81-4ff3-8561-3b4c5b24e5ec")
)
(pad "27" smd roundrect
(at 8.5 6.46)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "4e5fddb1-2b36-4ca8-82fe-dc1aab0e5da7")
(uuid "c655475d-1ee7-426c-a402-69ff7a728877")
)
(pad "28" smd roundrect
(at 8.5 5.19)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "08c1196e-35eb-49f8-8aee-4bc958945a5c")
(uuid "4f47f373-52d7-475c-abff-73cd34ae3686")
)
(pad "29" smd roundrect
(at 8.5 3.92)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "53ab5511-6f4d-44ba-8025-b6ccc4bc6b9d")
(uuid "c45041a1-4fa4-42b6-bcd5-f963500b6d3e")
)
(pad "30" smd roundrect
(at 8.5 2.65)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(roundrect_rratio 0.05)
(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 "9b500d6e-8e5c-4bca-8dfc-18a1ff2229fe")
(uuid "adf0b2ed-3ebf-4df1-b9ed-0721e80ee4b5")
)
(pad "31" smd rect
(at 8.5 1.38)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "a9dff6e2-7eda-461e-9556-797103a065dd")
(uuid "4e7e1e9a-114b-4106-afa2-dfa31b2f12a4")
)
(pad "32" smd rect
(at 8.5 0.11)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "a70aec46-1cbf-40f1-9c0b-fad50c82793c")
(uuid "1b9b4f68-90f4-453e-9b43-a95988ea38f9")
)
(pad "33" smd rect
(at 8.5 -1.16)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "18e5437a-6ff5-4fc3-a207-3d37ef2695b2")
(uuid "2e91def0-0fb4-4beb-b4e4-065be23f743c")
)
(pad "34" smd rect
(at 8.5 -2.43)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "853a3caa-acc4-41a5-982b-7449220516e4")
(uuid "847cef85-5fb6-4885-8a0a-77ee0bdeea01")
)
(pad "35" smd rect
(at 8.5 -3.7)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "215fb439-853c-49b2-aae2-4398d0802b12")
(uuid "f18d349c-e4d0-4a6d-a1b2-536d039f2144")
)
(pad "36" smd rect
(at 8.5 -4.97)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "0be76498-ce87-48e2-8efc-745931fc9f52")
(uuid "d5990d49-986d-4f84-a69e-03162d9ee421")
)
(pad "37" smd rect
(at 8.5 -6.24)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "3d298c5c-4c03-4d24-8515-03f2bd961cc4")
(uuid "63c5963a-f366-4128-acc5-663d0ad8c169")
)
(pad "38" smd rect
(at 8.5 -7.51)
(size 2 0.9)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "b059ef6e-c6a1-40ea-9dee-e96f0cc9743d")
(uuid "53498215-ca6d-46ab-907e-b5bf5dfc21c6")
)
(pad "39" smd rect
(at -2.835 -1.835)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "6c73264c-85e7-4541-9455-c3c35d038637")
(uuid "b65c2d8c-02d8-466a-b9fa-d6195265d9ad")
)
(pad "39" smd rect
(at -2.835 0 90)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "a19c1431-f68f-45b2-a431-675a24e54e9f")
(uuid "c3a96cd8-1aca-4519-a786-e2f992640989")
)
(pad "39" smd rect
(at -2.835 1.835 180)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "ad0157fd-a574-47ab-98b2-39dd4eedd488")
(uuid "0bebd4e2-d364-4325-b4e9-d90e23a46083")
)
(pad "39" smd rect
(at -1 -1.835)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "df54c599-70f5-40ca-a0ab-c28249a530b7")
(uuid "a6cc869e-0998-40a6-85c9-cfa613ec10ff")
)
(pad "39" smd rect
(at -1 0)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "f9fd6f37-3763-4b02-8996-96f41a64ce5b")
(uuid "f20a48ff-a576-4d9e-a36c-e860ec5b7178")
)
(pad "39" smd rect
(at -1 1.835 180)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "d58401f4-e240-45ef-b740-3a2109ed20f2")
(uuid "9cffc53d-9bad-45ea-9503-c6bf1e6620f6")
)
(pad "39" smd rect
(at 0.835 -1.835)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "939b0b61-d26d-44dd-be7d-f50cf7b7e601")
(uuid "5da7dec2-3ce0-4c32-b248-c57e1cbaeae5")
)
(pad "39" smd rect
(at 0.835 0 270)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "0dfda696-0635-4aca-ad04-57d49bd82559")
(uuid "7f4f074a-f529-475f-83d1-3b6208ef8c60")
)
(pad "39" smd rect
(at 0.835 1.835 180)
(size 1.33 1.33)
(layers "F.Cu" "F.Paste" "F.Mask")
(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 "14e90ddb-5799-4c83-ab52-1d088544801d")
(uuid "c91782b9-912e-4085-a63d-548ccf1935b5")
)
(zone
(net 0)
(net_name "")
(layers "*.Cu")
(uuid "bfe5168b-00a3-4d1b-8922-5d3f679c9723")
(zone (net 0) (net_name "") (layers "*.Cu")(uuid "ef687268-1ef2-4ddb-ac11-af11f3ba3ff4")
(hatch edge 0.5)
(connect_pads
(clearance 0)
)
(min_thickness 0.25)
(filled_areas_thickness no)
(keepout
(tracks not_allowed)
(vias not_allowed)
(pads not_allowed)
(copperpour not_allowed)
(footprints allowed)
)
(fill
(thermal_gap 0.5)
(thermal_bridge_width 0.5)
)
(connect_pads (clearance 0))
(min_thickness 0.25) (filled_areas_thickness no)
(keepout (tracks not_allowed) (vias not_allowed) (pads not_allowed) (copperpour not_allowed) (footprints allowed))
(fill (thermal_gap 0.5) (thermal_bridge_width 0.5))
(polygon
(pts
(xy -9 -15) (xy 9 -15) (xy 9 -8.7) (xy -9 -8.7)
(xy -9 -15)
(xy 9 -15)
(xy 9 -8.7)
(xy -9 -8.7)
)
)
)