Automatic whitespace and indentation prettification for sexpr formats
This commit is contained in:
parent
55ba667bcb
commit
f1f8981395
|
@ -117,6 +117,8 @@ set( KICOMMON_SRCS
|
|||
string_utils.cpp
|
||||
trace_helpers.cpp
|
||||
wx_filename.cpp
|
||||
|
||||
plugins/kicad/kicad_plugin_utils.cpp # needed by richio
|
||||
)
|
||||
|
||||
add_library( kicommon SHARED
|
||||
|
@ -492,7 +494,6 @@ set( COMMON_SRCS
|
|||
page_info.cpp
|
||||
plugin_file_desc.cpp
|
||||
plugins/plugin_utils.cpp
|
||||
plugins/kicad/kicad_plugin_utils.cpp
|
||||
printout.cpp
|
||||
project.cpp
|
||||
ptree.cpp
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <kiid.h>
|
||||
#include <plugins/kicad/kicad_plugin_utils.h>
|
||||
#include <richio.h>
|
||||
|
@ -37,6 +39,184 @@ void FormatUuid( OUTPUTFORMATTER* aOut, const KIID& aUuid, char aSuffix )
|
|||
aOut->Print( 0, "(uuid \"%s\")%c", TO_UTF8( aUuid.AsString() ), aSuffix );
|
||||
else
|
||||
aOut->Print( 0, "(uuid \"%s\")", TO_UTF8( aUuid.AsString() ) );
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Formatting rules:
|
||||
* - All extra (non-indentation) whitespace is trimmed
|
||||
* - Indentation is one tab
|
||||
* - Starting a new list (open paren) starts a new line with one deeper indentation
|
||||
* - Lists with no inner lists go on a single line
|
||||
* - End of multi-line lists (close paren) goes on a single line at same indentation as its start
|
||||
*
|
||||
* For example:
|
||||
* (first
|
||||
* (second
|
||||
* (third list)
|
||||
* (another list)
|
||||
* )
|
||||
* (fifth)
|
||||
* (sixth thing with lots of tokens
|
||||
* (and a sub list)
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
void Prettify( std::string& aSource, char aQuoteChar )
|
||||
{
|
||||
// Configuration
|
||||
const char indentChar = '\t';
|
||||
const int indentSize = 1;
|
||||
|
||||
// In order to visually compress PCB files, it is helpful to special-case long lists of (xy ...)
|
||||
// lists, which we allow to exist on a single line until we reach column 99.
|
||||
const int xySpecialCaseColumnLimit = 99;
|
||||
|
||||
// If whitespace occurs inside a list after this threshold, it will be converted into a newline
|
||||
// and the indentation will be increased. This is mainly used for image and group objects,
|
||||
// which contain potentially long sets of string tokens within a single list.
|
||||
const int consecutiveTokenWrapThreshold = 72;
|
||||
|
||||
std::string formatted;
|
||||
formatted.reserve( aSource.length() );
|
||||
|
||||
auto cursor = aSource.begin();
|
||||
auto seek = cursor;
|
||||
|
||||
int listDepth = 0;
|
||||
char lastNonWhitespace = 0;
|
||||
bool inQuote = false;
|
||||
bool hasInsertedSpace = false;
|
||||
bool inMultiLineList = false;
|
||||
int column = 0;
|
||||
|
||||
auto isWhitespace = []( const char aChar )
|
||||
{
|
||||
return ( aChar == ' ' || aChar == '\t' || aChar == '\n' || aChar == '\r' );
|
||||
};
|
||||
|
||||
auto nextNonWhitespace =
|
||||
[&]( std::string::iterator aIt )
|
||||
{
|
||||
seek = aIt;
|
||||
|
||||
while( seek != aSource.end() && isWhitespace( *seek ) )
|
||||
seek++;
|
||||
|
||||
return *seek;
|
||||
};
|
||||
|
||||
auto isXY =
|
||||
[&]( std::string::iterator aIt )
|
||||
{
|
||||
seek = aIt;
|
||||
|
||||
if( ++seek == aSource.end() || *seek != 'x' )
|
||||
return false;
|
||||
|
||||
if( ++seek == aSource.end() || *seek != 'y' )
|
||||
return false;
|
||||
|
||||
if( ++seek == aSource.end() || *seek != ' ' )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
while( cursor != aSource.end() )
|
||||
{
|
||||
char next = nextNonWhitespace( cursor );
|
||||
|
||||
if( isWhitespace( *cursor ) && !inQuote )
|
||||
{
|
||||
if( !hasInsertedSpace // Only permit one space between chars
|
||||
&& listDepth > 0 // Do not permit spaces in outer list
|
||||
&& lastNonWhitespace != '(' // Remove extra space after start of list
|
||||
&& next != ')' // Remove extra space before end of list
|
||||
&& next != '(' ) // Remove extra space before newline
|
||||
{
|
||||
if( column < consecutiveTokenWrapThreshold )
|
||||
{
|
||||
// Note that we only insert spaces here, no matter what kind of whitespace is in
|
||||
// the input. Newlines will be inserted as needed by the logic below.
|
||||
formatted.push_back( ' ' );
|
||||
column++;
|
||||
}
|
||||
else
|
||||
{
|
||||
formatted += fmt::format( "\n{}",
|
||||
std::string( listDepth * indentSize, indentChar ) );
|
||||
column = listDepth * indentSize;
|
||||
inMultiLineList = true;
|
||||
}
|
||||
|
||||
hasInsertedSpace = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hasInsertedSpace = false;
|
||||
|
||||
if( *cursor == '(' && !inQuote )
|
||||
{
|
||||
if( listDepth == 0 )
|
||||
{
|
||||
formatted.push_back( '(' );
|
||||
column++;
|
||||
}
|
||||
else if( isXY( cursor ) && column < xySpecialCaseColumnLimit )
|
||||
{
|
||||
// List-of-points special case
|
||||
formatted += " (";
|
||||
column += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
formatted += fmt::format( "\n{}(",
|
||||
std::string( listDepth * indentSize, indentChar ) );
|
||||
column = listDepth * indentSize + 1;
|
||||
}
|
||||
|
||||
listDepth++;
|
||||
}
|
||||
else if( *cursor == ')' && !inQuote )
|
||||
{
|
||||
if( listDepth > 0 )
|
||||
listDepth--;
|
||||
|
||||
if( lastNonWhitespace == ')' || inMultiLineList )
|
||||
{
|
||||
formatted += fmt::format( "\n{})",
|
||||
std::string( listDepth * indentSize, indentChar ) );
|
||||
column = listDepth * indentSize + 1;
|
||||
inMultiLineList = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
formatted.push_back( ')' );
|
||||
column++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The output formatter escapes double-quotes
|
||||
if( *cursor == aQuoteChar
|
||||
&& ( cursor == aSource.begin() || *( cursor - 1 ) != '\\' ) )
|
||||
{
|
||||
inQuote = !inQuote;
|
||||
}
|
||||
|
||||
formatted.push_back( *cursor );
|
||||
column++;
|
||||
}
|
||||
|
||||
lastNonWhitespace = *cursor;
|
||||
}
|
||||
|
||||
++cursor;
|
||||
}
|
||||
|
||||
aSource = formatted;
|
||||
}
|
||||
|
||||
} // namespace KICAD_FORMAT
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <core/ignore.h>
|
||||
#include <richio.h>
|
||||
#include <errno.h>
|
||||
#include <plugins/kicad/kicad_plugin_utils.h>
|
||||
|
||||
#include <wx/file.h>
|
||||
#include <wx/translation.h>
|
||||
|
@ -582,20 +583,47 @@ void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
|
|||
}
|
||||
|
||||
|
||||
void STREAM_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER::PRETTIFIED_FILE_OUTPUTFORMATTER( const wxString& aFileName,
|
||||
const wxChar* aMode,
|
||||
char aQuoteChar ) :
|
||||
OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar )
|
||||
{
|
||||
int lastWrite;
|
||||
m_fp = wxFopen( aFileName, aMode );
|
||||
|
||||
// This might delay awhile if you were writing to say a socket, but for
|
||||
// a file it should only go through the loop once.
|
||||
for( int total = 0; total<aCount; total += lastWrite )
|
||||
{
|
||||
lastWrite = m_os.Write( aOutBuf, aCount ).LastWrite();
|
||||
|
||||
if( !m_os.IsOk() )
|
||||
{
|
||||
THROW_IO_ERROR( _( "OUTPUTSTREAM_OUTPUTFORMATTER write error" ) );
|
||||
}
|
||||
}
|
||||
if( !m_fp )
|
||||
THROW_IO_ERROR( strerror( errno ) );
|
||||
}
|
||||
|
||||
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER::~PRETTIFIED_FILE_OUTPUTFORMATTER()
|
||||
{
|
||||
try
|
||||
{
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER::Finish();
|
||||
}
|
||||
catch( ... )
|
||||
{}
|
||||
}
|
||||
|
||||
|
||||
bool PRETTIFIED_FILE_OUTPUTFORMATTER::Finish()
|
||||
{
|
||||
if( !m_fp )
|
||||
return false;
|
||||
|
||||
KICAD_FORMAT::Prettify( m_buf );
|
||||
|
||||
if( fwrite( m_buf.c_str(), m_buf.length(), 1, m_fp ) != 1 )
|
||||
THROW_IO_ERROR( strerror( errno ) );
|
||||
|
||||
fclose( m_fp );
|
||||
m_fp = nullptr;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void PRETTIFIED_FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
|
||||
{
|
||||
m_buf.append( aOutBuf, aCount );
|
||||
}
|
||||
|
|
|
@ -346,7 +346,7 @@ void SCH_SEXPR_PLUGIN::SaveSchematicFile( const wxString& aFileName, SCH_SHEET*
|
|||
// works properly.
|
||||
wxASSERT( fn.IsAbsolute() );
|
||||
|
||||
FILE_OUTPUTFORMATTER formatter( fn.GetFullPath() );
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER formatter( fn.GetFullPath() );
|
||||
|
||||
m_out = &formatter; // no ownership
|
||||
|
||||
|
|
|
@ -36,10 +36,12 @@ namespace KICAD_FORMAT {
|
|||
* @param aValue is the value to write
|
||||
* @param aSuffix is the character to format after the end of the boolean (after the close paren)
|
||||
*/
|
||||
void FormatBool( OUTPUTFORMATTER* aOut, int aNestLevel, const wxString& aKey, bool aValue,
|
||||
char aSuffix = '\n' );
|
||||
KICOMMON_API void FormatBool( OUTPUTFORMATTER* aOut, int aNestLevel, const wxString& aKey,
|
||||
bool aValue, char aSuffix = '\n' );
|
||||
|
||||
void FormatUuid( OUTPUTFORMATTER* aOut, const KIID& aUuid, char aSuffix = '\n' );
|
||||
KICOMMON_API void FormatUuid( OUTPUTFORMATTER* aOut, const KIID& aUuid, char aSuffix = '\n' );
|
||||
|
||||
KICOMMON_API void Prettify( std::string& aSource, char aQuoteChar = '"' );
|
||||
|
||||
} // namespace KICAD_FORMAT
|
||||
|
||||
|
|
|
@ -408,6 +408,12 @@ public:
|
|||
|
||||
std::string Quotew( const wxString& aWrapee ) const;
|
||||
|
||||
/**
|
||||
* Performs any cleanup needed at the end of a write.
|
||||
* @return true if all is well
|
||||
*/
|
||||
virtual bool Finish() { return true; }
|
||||
|
||||
private:
|
||||
std::vector<char> m_buffer;
|
||||
char quoteChar[2];
|
||||
|
@ -490,28 +496,27 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Implement an #OUTPUTFORMATTER to a wxWidgets wxOutputStream.
|
||||
*
|
||||
* The stream is neither opened nor closed by this class.
|
||||
*/
|
||||
class KICOMMON_API STREAM_OUTPUTFORMATTER : public OUTPUTFORMATTER
|
||||
class KICOMMON_API PRETTIFIED_FILE_OUTPUTFORMATTER : public OUTPUTFORMATTER
|
||||
{
|
||||
wxOutputStream& m_os;
|
||||
|
||||
public:
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER( const wxString& aFileName, const wxChar* aMode = wxT( "wt" ),
|
||||
char aQuoteChar = '"' );
|
||||
|
||||
~PRETTIFIED_FILE_OUTPUTFORMATTER();
|
||||
|
||||
/**
|
||||
* This can take any number of wxOutputStream derivations, so it can write to a file,
|
||||
* socket, or zip file.
|
||||
* Performs prettification and writes the stored buffer to the file.
|
||||
* @return true if the write succeeded.
|
||||
*/
|
||||
STREAM_OUTPUTFORMATTER( wxOutputStream& aStream, char aQuoteChar = '"' ) :
|
||||
OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar ),
|
||||
m_os( aStream )
|
||||
{
|
||||
}
|
||||
bool Finish() override;
|
||||
|
||||
protected:
|
||||
void write( const char* aOutBuf, int aCount ) override;
|
||||
|
||||
private:
|
||||
FILE* m_fp;
|
||||
std::string m_buf;
|
||||
};
|
||||
|
||||
|
||||
#endif // RICHIO_H_
|
||||
|
|
|
@ -119,7 +119,7 @@ void FP_CACHE::Save( FOOTPRINT* aFootprint )
|
|||
wxLogTrace( traceKicadPcbPlugin, wxT( "Creating temporary library file '%s'." ),
|
||||
tempFileName );
|
||||
|
||||
FILE_OUTPUTFORMATTER formatter( tempFileName );
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER formatter( tempFileName );
|
||||
|
||||
m_owner->SetOutputFormatter( &formatter );
|
||||
m_owner->Format( (BOARD_ITEM*) it->second->GetFootprint() );
|
||||
|
@ -319,7 +319,7 @@ void PCB_PLUGIN::SaveBoard( const wxString& aFileName, BOARD* aBoard,
|
|||
// Prepare net mapping that assures that net codes saved in a file are consecutive integers
|
||||
m_mapping->SetBoard( aBoard );
|
||||
|
||||
FILE_OUTPUTFORMATTER formatter( aFileName );
|
||||
PRETTIFIED_FILE_OUTPUTFORMATTER formatter( aFileName );
|
||||
|
||||
m_out = &formatter; // no ownership
|
||||
|
||||
|
@ -328,6 +328,7 @@ void PCB_PLUGIN::SaveBoard( const wxString& aFileName, BOARD* aBoard,
|
|||
Format( aBoard, 1 );
|
||||
|
||||
m_out->Print( 0, ")\n" );
|
||||
m_out->Finish();
|
||||
|
||||
m_out = nullptr;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
(footprint "Reverb_BTDR-1V" (version 20231007) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(descr "Digital Reverberation Unit, http://www.belton.co.kr/inc/downfile.php?seq=17&file=pdf (footprint from http://www.uk-electronic.de/PDF/BTDR-1.pdf)")
|
||||
(tags "audio belton reverb")
|
||||
(property "Reference" "REF**" (at -11.5 0 180) (layer "F.SilkS") (tstamp 23fd8612-0682-410f-bf8d-c4874ad45f3d)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(property "Value" "Reverb_BTDR-1V" (at 27.62 -2.75 180) (layer "F.Fab") (tstamp 84aa1724-7810-4bd1-982b-bc3da110a2d1)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(property "Footprint" "" (at 0 0 0 unlocked) (layer "F.Fab") hide (tstamp 8ed64581-2b83-4ebe-8edd-cfd9b8d4cf5e)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0 unlocked) (layer "F.Fab") hide (tstamp b2b0cf58-a054-47f5-a1a7-d365c87f1a14)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Description" "" (at 0 0 0 unlocked) (layer "F.Fab") hide (tstamp a92072d5-74bf-49b6-8a42-08692319d2f4)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line (start -13.88 1.3) (end 69.12 1.3)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 81a7dfa1-c278-425c-a935-a8b9a29946a6))
|
||||
(fp_line (start -13.88 4.3) (end -13.88 1.3)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp bda1223a-e7ea-4c51-9249-a21d389f3710))
|
||||
(fp_line (start -6.38 4.3) (end -13.88 4.3)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 690bfa6b-b0f9-4317-ad57-06b3802ac7b0))
|
||||
(fp_line (start -6.38 11.1) (end -6.38 4.3)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 97cadbec-a55e-41ed-92d5-eb3214b34afd))
|
||||
(fp_line (start 61.62 4.3) (end 61.62 11.1)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c5e6a983-b7b3-4b12-9d4a-dd295e782cfe))
|
||||
(fp_line (start 61.62 11.1) (end -6.38 11.1)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2d8f87c0-9dd2-41d3-b1cd-9d71e4644960))
|
||||
(fp_line (start 69.12 1.3) (end 69.12 4.3)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp be83e42e-9ffb-493c-ad07-45c77841473d))
|
||||
(fp_line (start 69.12 4.3) (end 61.62 4.3)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f4ce1fd3-d6c1-4abb-b989-ae90ad642a07))
|
||||
(fp_line (start -14.13 -1.25) (end 69.37 -1.25)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 712967cb-b7b3-4f31-95b5-a3ae7821d1b9))
|
||||
(fp_line (start -14.13 11.35) (end -14.13 -1.25)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0662dc2c-544d-47e4-b9a9-078d346b7b8b))
|
||||
(fp_line (start -6.63 11.35) (end -14.13 11.35)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6b2036dd-604c-4667-9cd8-889990119aba))
|
||||
(fp_line (start 61.62 11.35) (end -6.63 11.35)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 48f58059-e5ec-4db5-97c0-741c62b975e6))
|
||||
(fp_line (start 69.37 -1.25) (end 69.37 11.35)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 12d7a82e-b0c6-40b8-a78c-2d112ffab686))
|
||||
(fp_line (start 69.37 11.35) (end 61.62 11.35)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 665f55d3-1930-4c50-8ac6-a50812f0ebb7))
|
||||
(fp_line (start -13.88 1.3) (end 69.12 1.3)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 40e6edcf-2dca-4414-8c68-54b5cb516af0))
|
||||
(fp_line (start -13.88 4.3) (end -13.88 1.3)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 69e81b15-c24f-4180-a1e2-ddeb5ca6447d))
|
||||
(fp_line (start -6.38 4.3) (end -13.88 4.3)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp f4d1a664-c87b-4415-947e-80bf18cfb575))
|
||||
(fp_line (start -6.38 11.1) (end -6.38 4.3)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp e0811244-7b68-4fcc-9992-3c461271d12c))
|
||||
(fp_line (start 61.62 4.3) (end 61.62 11.1)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 1c90e511-a13d-4a19-bb0c-341a540211ff))
|
||||
(fp_line (start 61.62 11.1) (end -6.38 11.1)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b8985526-ec53-47c3-9430-ddff43dd0717))
|
||||
(fp_line (start 69.12 1.3) (end 69.12 4.3)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 422ec1ee-934d-458a-a428-dae9f64f0e7c))
|
||||
(fp_line (start 69.12 4.3) (end 61.62 4.3)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp c32cd034-9d5f-4f99-a118-06e174e115a6))
|
||||
(fp_text user "${REFERENCE}" (at 27.62 6.2 180) (layer "F.Fab") (tstamp 2c2c1e88-d6ac-4cc4-8e09-80f372bca783)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(pad "1" thru_hole rect (at 0 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6b54a4cf-1c47-48bd-9076-9d2c1ed1dc0b)
|
||||
)
|
||||
(pad "2" thru_hole circle (at 2.54 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 1b5d7c94-aaa1-488b-9352-7b5770314a42)
|
||||
)
|
||||
(pad "3" thru_hole circle (at 5.08 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 254b0c32-5f01-4308-b5dd-0a4bc380a715)
|
||||
)
|
||||
(pad "4" thru_hole circle (at 7.62 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp bc6a6a8f-3b8f-413f-88e7-4957bd99351b)
|
||||
)
|
||||
(pad "5" thru_hole circle (at 50.62 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 35698302-6de0-4184-aefe-e2cbdd76c272)
|
||||
)
|
||||
(pad "6" thru_hole circle (at 53.16 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp c86ea0ec-de68-4d29-839c-dfca7c7d64b3)
|
||||
)
|
||||
(pad "7" thru_hole circle (at 55.7 0) (size 2 2) (drill 1) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 5fc56d94-ca72-44e4-babd-0986bd43161c)
|
||||
)
|
||||
(model "${KICAD6_3DMODEL_DIR}/Audio_Module.3dshapes/Reverb_BTDR-1V.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,364 @@
|
|||
(footprint "Reverb_BTDR-1V"
|
||||
(version 20231014)
|
||||
(generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(descr "Digital Reverberation Unit, http://www.belton.co.kr/inc/downfile.php?seq=17&file=pdf (footprint from http://www.uk-electronic.de/PDF/BTDR-1.pdf)")
|
||||
(tags "audio belton reverb")
|
||||
(property "Reference" "REF**"
|
||||
(at -11.5 0 180)
|
||||
(layer "F.SilkS")
|
||||
(uuid "23fd8612-0682-410f-bf8d-c4874ad45f3d")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "Reverb_BTDR-1V"
|
||||
(at 27.62 -2.75 180)
|
||||
(layer "F.Fab")
|
||||
(uuid "84aa1724-7810-4bd1-982b-bc3da110a2d1")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8ed64581-2b83-4ebe-8edd-cfd9b8d4cf5e")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "b2b0cf58-a054-47f5-a1a7-d365c87f1a14")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "a92072d5-74bf-49b6-8a42-08692319d2f4")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -13.88 1.3)
|
||||
(end 69.12 1.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "81a7dfa1-c278-425c-a935-a8b9a29946a6")
|
||||
)
|
||||
(fp_line
|
||||
(start -13.88 4.3)
|
||||
(end -13.88 1.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bda1223a-e7ea-4c51-9249-a21d389f3710")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.38 4.3)
|
||||
(end -13.88 4.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "690bfa6b-b0f9-4317-ad57-06b3802ac7b0")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.38 11.1)
|
||||
(end -6.38 4.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "97cadbec-a55e-41ed-92d5-eb3214b34afd")
|
||||
)
|
||||
(fp_line
|
||||
(start 61.62 4.3)
|
||||
(end 61.62 11.1)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c5e6a983-b7b3-4b12-9d4a-dd295e782cfe")
|
||||
)
|
||||
(fp_line
|
||||
(start 61.62 11.1)
|
||||
(end -6.38 11.1)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2d8f87c0-9dd2-41d3-b1cd-9d71e4644960")
|
||||
)
|
||||
(fp_line
|
||||
(start 69.12 1.3)
|
||||
(end 69.12 4.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "be83e42e-9ffb-493c-ad07-45c77841473d")
|
||||
)
|
||||
(fp_line
|
||||
(start 69.12 4.3)
|
||||
(end 61.62 4.3)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f4ce1fd3-d6c1-4abb-b989-ae90ad642a07")
|
||||
)
|
||||
(fp_line
|
||||
(start -14.13 -1.25)
|
||||
(end 69.37 -1.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "712967cb-b7b3-4f31-95b5-a3ae7821d1b9")
|
||||
)
|
||||
(fp_line
|
||||
(start -14.13 11.35)
|
||||
(end -14.13 -1.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "0662dc2c-544d-47e4-b9a9-078d346b7b8b")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.63 11.35)
|
||||
(end -14.13 11.35)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "6b2036dd-604c-4667-9cd8-889990119aba")
|
||||
)
|
||||
(fp_line
|
||||
(start 61.62 11.35)
|
||||
(end -6.63 11.35)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "48f58059-e5ec-4db5-97c0-741c62b975e6")
|
||||
)
|
||||
(fp_line
|
||||
(start 69.37 -1.25)
|
||||
(end 69.37 11.35)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "12d7a82e-b0c6-40b8-a78c-2d112ffab686")
|
||||
)
|
||||
(fp_line
|
||||
(start 69.37 11.35)
|
||||
(end 61.62 11.35)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "665f55d3-1930-4c50-8ac6-a50812f0ebb7")
|
||||
)
|
||||
(fp_line
|
||||
(start -13.88 1.3)
|
||||
(end 69.12 1.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "40e6edcf-2dca-4414-8c68-54b5cb516af0")
|
||||
)
|
||||
(fp_line
|
||||
(start -13.88 4.3)
|
||||
(end -13.88 1.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "69e81b15-c24f-4180-a1e2-ddeb5ca6447d")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.38 4.3)
|
||||
(end -13.88 4.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "f4d1a664-c87b-4415-947e-80bf18cfb575")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.38 11.1)
|
||||
(end -6.38 4.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "e0811244-7b68-4fcc-9992-3c461271d12c")
|
||||
)
|
||||
(fp_line
|
||||
(start 61.62 4.3)
|
||||
(end 61.62 11.1)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "1c90e511-a13d-4a19-bb0c-341a540211ff")
|
||||
)
|
||||
(fp_line
|
||||
(start 61.62 11.1)
|
||||
(end -6.38 11.1)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "b8985526-ec53-47c3-9430-ddff43dd0717")
|
||||
)
|
||||
(fp_line
|
||||
(start 69.12 1.3)
|
||||
(end 69.12 4.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "422ec1ee-934d-458a-a428-dae9f64f0e7c")
|
||||
)
|
||||
(fp_line
|
||||
(start 69.12 4.3)
|
||||
(end 61.62 4.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "c32cd034-9d5f-4f99-a118-06e174e115a6")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 27.62 6.2 180)
|
||||
(layer "F.Fab")
|
||||
(uuid "2c2c1e88-d6ac-4cc4-8e09-80f372bca783")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at 0 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "6b54a4cf-1c47-48bd-9076-9d2c1ed1dc0b")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 2.54 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "1b5d7c94-aaa1-488b-9352-7b5770314a42")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at 5.08 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "254b0c32-5f01-4308-b5dd-0a4bc380a715")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at 7.62 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "bc6a6a8f-3b8f-413f-88e7-4957bd99351b")
|
||||
)
|
||||
(pad "5" thru_hole circle
|
||||
(at 50.62 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "35698302-6de0-4184-aefe-e2cbdd76c272")
|
||||
)
|
||||
(pad "6" thru_hole circle
|
||||
(at 53.16 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "c86ea0ec-de68-4d29-839c-dfca7c7d64b3")
|
||||
)
|
||||
(pad "7" thru_hole circle
|
||||
(at 55.7 0)
|
||||
(size 2 2)
|
||||
(drill 1)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "5fc56d94-ca72-44e4-babd-0986bd43161c")
|
||||
)
|
||||
(model "${KICAD6_3DMODEL_DIR}/Audio_Module.3dshapes/Reverb_BTDR-1V.wrl"
|
||||
(offset
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
)
|
|
@ -0,0 +1,459 @@
|
|||
(footprint "Samtec_HLE-133-02-xx-DV-PE-LC_2x33_P2.54mm_Horizontal" (version 20231007) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(descr "Samtec HLE .100\" Tiger Beam Cost-effective Single Beam Socket Strip, HLE-133-02-xx-DV-PE-LC, 33 Pins per row (http://suddendocs.samtec.com/prints/hle-1xx-02-xx-dv-xe-xx-mkt.pdf, http://suddendocs.samtec.com/prints/hle-thru.pdf), generated with kicad-footprint-generator")
|
||||
(tags "connector Samtec HLE top entry")
|
||||
(property "Reference" "REF**" (at 40.64 -1.86 0) (layer "F.SilkS") (tstamp d7d96772-e03a-4426-a0a8-985d2f05395c)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(property "Value" "Samtec_HLE-133-02-xx-DV-PE-LC_2x33_P2.54mm_Horizontal" (at 40.64 9.48 0) (layer "F.Fab") (tstamp 49601f37-d091-46da-baa9-d689daff8c35)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(property "Footprint" "" (at 0 0 0 unlocked) (layer "F.Fab") hide (tstamp ff94169b-f250-42d4-930f-7219680349ee)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (at 0 0 0 unlocked) (layer "F.Fab") hide (tstamp acd21faa-5721-4ade-85d5-942cb34c84ed)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Description" "" (at 0 0 0 unlocked) (layer "F.Fab") hide (tstamp 6148024c-f26b-4a66-bcac-2beade119a8f)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line (start -1.38 1.16) (end 82.66 1.16)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7c52bc78-22a8-4160-a603-33cc9d686e57))
|
||||
(fp_line (start -1.38 6.46) (end -1.38 1.16)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fbef2b56-80f7-4605-99f5-a37b8da50187))
|
||||
(fp_line (start 82.66 1.16) (end 82.66 6.46)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp dd12b657-377e-4b89-bee8-e58271582db2))
|
||||
(fp_line (start 82.66 6.46) (end -1.38 6.46)
|
||||
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fbd9cf3d-8f1f-459c-abb5-e3d3de1c39a3))
|
||||
(fp_line (start -1.77 -1.16) (end 83.05 -1.16)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 12290ceb-f967-4d28-9567-065b15276b3a))
|
||||
(fp_line (start -1.77 8.78) (end -1.77 -1.16)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f82c492d-353a-47ba-9fd1-5c0b783ec3cb))
|
||||
(fp_line (start 83.05 -1.16) (end 83.05 8.78)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 3c1ab95e-f889-4fd4-863c-e1296f32e502))
|
||||
(fp_line (start 83.05 8.78) (end -1.77 8.78)
|
||||
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 54384746-dd3a-4635-857e-0377998f000e))
|
||||
(fp_line (start -1.27 1.27) (end 82.55 1.27)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 14bee1a7-a2f2-4279-a1bf-e9802a7f7909))
|
||||
(fp_line (start -1.27 6.35) (end -1.27 1.27)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 95ddeebf-9bab-407a-b5b9-6eb6a4364fc5))
|
||||
(fp_line (start -0.5 1.27) (end 0 1.977107)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a000f61b-ed9a-436e-aa02-b24dd3a256e9))
|
||||
(fp_line (start 0 1.977107) (end 0.5 1.27)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3554cb0a-6e1e-4950-9160-ff8ba06fda09))
|
||||
(fp_line (start 82.55 1.27) (end 82.55 6.35)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp cc5e1b5c-5b92-411e-a937-319a3cf22a06))
|
||||
(fp_line (start 82.55 6.35) (end -1.27 6.35)
|
||||
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 065f55ce-844c-4408-9024-73db5bc819b2))
|
||||
(fp_text user "${REFERENCE}" (at 40.64 5.65 0) (layer "F.Fab") (tstamp e5e30624-f8f1-4b8a-98e8-30f283a79f6d)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 0 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 8f16bc69-7845-49c0-88e9-d7c2e263e0c7)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 0 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp d5042c78-66bd-404a-be0d-7f7fa9b05add)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 1.27 3.81) (size 1.19 1.19) (drill 1.19) (layers "*.Cu" "*.Mask")
|
||||
(tstamp afe9b455-c277-432a-84d8-ea417f498c0b)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 2.54 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp bb1d5ee5-121e-4207-8709-3f80bd03f00e)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 2.54 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp d88b3e8b-5e63-45e1-a81d-6d3d0c1f3620)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 5.08 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6f20b1ed-9b05-436c-8742-b48b3543e65a)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 5.08 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6321709d-d5dd-44bc-8336-016ddfddecf7)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 7.62 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 296066e0-062b-4ac0-945d-6e66f97b36f6)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 7.62 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 31b9876d-b6ea-44e2-aae9-b607534c1621)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 10.16 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cd21dd18-1295-47be-b86d-90db42597662)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 10.16 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 2b639b25-69d0-4d30-b969-867f6d773dd5)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 12.7 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a80fa169-ac58-4655-8615-10acddacb88a)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 12.7 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 9297ad19-a021-431e-b112-df6739784200)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 15.24 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp ba2c4e03-466a-4ea3-a42a-d3cdd279e348)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 15.24 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 43bea87a-eb6c-4819-b09e-fecc6a333344)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 17.78 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 9808d94d-ec13-4ae8-93cd-50febc47747d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 17.78 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 5bba70ac-5b67-4a67-b3b0-bf3801d4d68a)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 20.32 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 59757ede-45bd-4464-a0d3-47fe600311a7)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 20.32 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 14c8ee3b-8b76-4b9f-b3a4-d318aefbe7ac)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 22.86 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp dd72446b-c34d-480e-b8f6-ca347f075610)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 22.86 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e3201589-6a0d-4066-8df3-263da096020d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 25.4 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp c67b8aad-dbc5-4fcf-918e-cb7c31b08d6a)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 25.4 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 34ca49ce-5601-4de2-99c4-b63dfd5022db)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 27.94 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 7ac7a742-6b0d-4d9c-8800-1665c8ccef9d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 27.94 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a031bed1-9fee-4bb6-b413-cc01734ec2d5)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 30.48 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 50a2792a-4354-4554-ab66-6df638449c77)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 30.48 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp bef71df3-6ec9-443a-b1e4-db0db1223402)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 33.02 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 4f7cb693-9d03-430d-bba4-95971682c7ca)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 33.02 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 8990046c-26cd-43be-b225-589180054b77)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 35.56 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 1fa2347a-1391-4070-a3df-7c1f3da58db4)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 35.56 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 8dc6af26-eb38-4834-bbb6-17ae16c19282)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 38.1 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp dad259c0-d67f-4b90-8a05-c51f7eba2251)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 38.1 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp c766b845-282f-4b7b-9acb-d6510994724f)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 40.64 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 133cff93-d897-4ef2-a02d-ef4db90a5ef1)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 40.64 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp bc05f5f6-bfff-4fb2-ba92-80d19028c8bc)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 43.18 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp f80160ce-cb2a-454a-adc5-7816abaa9108)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 43.18 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 0fbf22c8-ec1f-4482-9674-0257dd15a5e0)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 45.72 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp aeb9ab33-9f38-4848-912f-c3ee3f1ffa1c)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 45.72 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cf373623-2971-4096-a381-a6509dd4bc7f)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 48.26 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp daabd1db-aff2-4ec5-a3a5-81960ceeb397)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 48.26 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp c55b878d-f23d-4193-8c81-c1245f24c824)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 50.8 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp aa865054-8d40-4751-8325-0d42cdb03dbe)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 50.8 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 34c859e3-5398-4108-a80e-343896292e92)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 53.34 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 2f847875-79bd-4c89-844a-cdb66b8ff290)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 53.34 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 2c424d71-1f4a-445c-a1a0-d00037fa2bad)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 55.88 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp ac96b551-2930-4655-8dec-1e6211fa854d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 55.88 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 967327f1-ae84-47a8-bdfc-e8927af9e06d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 58.42 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp c813aa2e-9df4-43ac-8f42-3a579310ccd1)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 58.42 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 1b7f66e0-3db9-48a7-af48-b304fb572015)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 60.96 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a16842ee-545a-4260-b242-896eb09f9536)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 60.96 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a8bf5f7f-19f0-4b93-ae9d-7bb67945db2b)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 63.5 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 0d96cc9d-bc64-4e7e-8986-c22215d8ebb9)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 63.5 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 224ebe9d-5bd1-4bfa-bcb7-f4d52cfe96f6)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 66.04 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp ba7f5023-b307-4cbf-974b-e1261c8da38b)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 66.04 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e3429a31-5b89-4a55-b6ff-1bed45701683)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 68.58 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 11759f81-e03f-40ae-afb9-bc2e0ed0834d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 68.58 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 19e19364-6dc7-4f25-8fe9-add9e652c494)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 71.12 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6011d677-5074-4b9f-830a-d6a51f84b5db)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 71.12 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 354270ad-a714-487b-ad47-49db09e3b026)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 73.66 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 0d7c6bc2-e2fb-4733-8969-438c5e923c9d)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 73.66 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6b37256e-9923-42ad-a47c-08daef08b341)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 76.2 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a522f41e-5f7a-4bb1-9ab9-c1ce30e48132)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 76.2 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp f49577f8-e6eb-4dd7-ad28-2e8b5a3c67e5)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 78.74 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp dfd0d2c0-0c92-46c1-9c37-945111e1dbf6)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 78.74 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 9cd36a56-e7fe-4314-9b0c-41f789aae5bc)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 80.01 3.81) (size 1.19 1.19) (drill 1.19) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 533817fa-41cd-44f4-9f2d-4dc00136c466)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 81.28 2.54) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 7e81ff61-e3bd-422a-aa1b-03c38a1d40fe)
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 81.28 5.08) (size 1.4 1.4) (drill 1.4) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 73107856-1c13-4696-aa6e-2294bb4379e4)
|
||||
)
|
||||
(pad "1" thru_hole roundrect (at 0 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask") (roundrect_rratio 0.19084)
|
||||
(tstamp eb905d9b-fb23-417e-aed1-5e77d65a8f0a)
|
||||
)
|
||||
(pad "2" thru_hole circle (at 0 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a8783e7c-fbdd-458b-ac0f-55a43947e706)
|
||||
)
|
||||
(pad "3" thru_hole circle (at 2.54 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp d3bcec23-1169-4547-a92d-fe13b7038017)
|
||||
)
|
||||
(pad "4" thru_hole circle (at 2.54 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 86912d70-ff38-40c6-bd6e-96ddb80e8ebf)
|
||||
)
|
||||
(pad "5" thru_hole circle (at 5.08 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 7debb537-09ec-473d-a3a6-87595821e326)
|
||||
)
|
||||
(pad "6" thru_hole circle (at 5.08 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 11266bac-2d64-4bda-8a4e-190a5f23e934)
|
||||
)
|
||||
(pad "7" thru_hole circle (at 7.62 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 4ba10efc-419f-4c6f-bd53-7211c19fb882)
|
||||
)
|
||||
(pad "8" thru_hole circle (at 7.62 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp fffb81dd-f81f-4466-866d-74737568d8c8)
|
||||
)
|
||||
(pad "9" thru_hole circle (at 10.16 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cbb84cfa-afee-46dd-9cf0-2f6225968284)
|
||||
)
|
||||
(pad "10" thru_hole circle (at 10.16 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 9f990f67-b097-4a20-8060-6190da035240)
|
||||
)
|
||||
(pad "11" thru_hole circle (at 12.7 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 4798d74b-24e7-437d-868c-12d2da2c4bf8)
|
||||
)
|
||||
(pad "12" thru_hole circle (at 12.7 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 0d5bc052-c507-4b41-9875-83aa97581dc6)
|
||||
)
|
||||
(pad "13" thru_hole circle (at 15.24 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp a8218fa1-cfe3-44e4-8d58-4b14445a2213)
|
||||
)
|
||||
(pad "14" thru_hole circle (at 15.24 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cf1bf178-839d-4c1e-a104-d1d7a3406f23)
|
||||
)
|
||||
(pad "15" thru_hole circle (at 17.78 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp dbdf99b3-6e39-4792-aa64-192a0e6fe497)
|
||||
)
|
||||
(pad "16" thru_hole circle (at 17.78 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 98532ba0-346e-4475-ab07-50c04a090b3b)
|
||||
)
|
||||
(pad "17" thru_hole circle (at 20.32 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 2cc1974f-34a9-4967-8d50-d2a9c1d92145)
|
||||
)
|
||||
(pad "18" thru_hole circle (at 20.32 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 64d472bd-bc46-4958-9853-ecb2eb82bf42)
|
||||
)
|
||||
(pad "19" thru_hole circle (at 22.86 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 273647c2-b84e-4567-8e45-28a07ea63e52)
|
||||
)
|
||||
(pad "20" thru_hole circle (at 22.86 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 3923c84d-6735-4282-9f6c-0b0b997468b2)
|
||||
)
|
||||
(pad "21" thru_hole circle (at 25.4 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp f36a27ef-5d16-444c-b350-b9492737c564)
|
||||
)
|
||||
(pad "22" thru_hole circle (at 25.4 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp f3746ab3-2b45-499f-872a-403dbef0f687)
|
||||
)
|
||||
(pad "23" thru_hole circle (at 27.94 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 52d08f1e-a367-4689-85f6-ea7b6fd80d40)
|
||||
)
|
||||
(pad "24" thru_hole circle (at 27.94 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 84a85a9c-f421-44c4-ab6b-f2489af764d9)
|
||||
)
|
||||
(pad "25" thru_hole circle (at 30.48 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e0e7bac2-a62b-4536-822d-5d01b414350b)
|
||||
)
|
||||
(pad "26" thru_hole circle (at 30.48 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp deb0aa25-cb90-425a-be8a-608541affcc6)
|
||||
)
|
||||
(pad "27" thru_hole circle (at 33.02 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 3bddffb9-73d5-440d-a509-1f351d64db51)
|
||||
)
|
||||
(pad "28" thru_hole circle (at 33.02 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp b20fd0a3-3dac-47f1-842b-9a26faa7d0b2)
|
||||
)
|
||||
(pad "29" thru_hole circle (at 35.56 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 2622f88e-12e2-4b21-b5a3-9ed1b4ffab6f)
|
||||
)
|
||||
(pad "30" thru_hole circle (at 35.56 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6fec8402-de11-4446-b3f5-ec6f0f743514)
|
||||
)
|
||||
(pad "31" thru_hole circle (at 38.1 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cb2d7fbb-d78e-4ed9-9f49-3811197dca46)
|
||||
)
|
||||
(pad "32" thru_hole circle (at 38.1 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e9fc89a7-6eb1-441c-836f-8b8c7c6f0c1e)
|
||||
)
|
||||
(pad "33" thru_hole circle (at 40.64 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e6b99459-642c-49a5-b36a-e5d52d3ac9b8)
|
||||
)
|
||||
(pad "34" thru_hole circle (at 40.64 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 83a82a75-b42b-4db7-a29a-ec47be89a6f9)
|
||||
)
|
||||
(pad "35" thru_hole circle (at 43.18 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 49e1aeac-00a3-4eb6-bceb-85ec76d2a3ec)
|
||||
)
|
||||
(pad "36" thru_hole circle (at 43.18 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 741643bf-ad6d-4153-8ef4-b975e915fc09)
|
||||
)
|
||||
(pad "37" thru_hole circle (at 45.72 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 2fca8d4e-8855-4758-add0-d8a7f0b26d50)
|
||||
)
|
||||
(pad "38" thru_hole circle (at 45.72 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cebb3f2b-6ebf-4c26-a020-6367fee52480)
|
||||
)
|
||||
(pad "39" thru_hole circle (at 48.26 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cc48fa87-f248-4387-bb2d-2ab04371f595)
|
||||
)
|
||||
(pad "40" thru_hole circle (at 48.26 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp dadbcb8f-536c-4805-8d07-d6221e24e317)
|
||||
)
|
||||
(pad "41" thru_hole circle (at 50.8 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp d2a654eb-1ab9-4b7e-80ed-1784a54ffbe1)
|
||||
)
|
||||
(pad "42" thru_hole circle (at 50.8 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 4ca9961b-c1d2-49c9-a2ec-efa362b9ce5c)
|
||||
)
|
||||
(pad "43" thru_hole circle (at 53.34 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp eaaacd5a-73b9-4c11-a363-375329e539ba)
|
||||
)
|
||||
(pad "44" thru_hole circle (at 53.34 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp cbb5eaf3-5bae-4a39-ab5d-d249f37b45ae)
|
||||
)
|
||||
(pad "45" thru_hole circle (at 55.88 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 44d1ad55-c706-420b-b385-672ccdc51c38)
|
||||
)
|
||||
(pad "46" thru_hole circle (at 55.88 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 828c5215-437d-45c0-a046-cad5a64a4b31)
|
||||
)
|
||||
(pad "47" thru_hole circle (at 58.42 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 603d3811-4c3f-41f8-966e-a50a5ddb9b4c)
|
||||
)
|
||||
(pad "48" thru_hole circle (at 58.42 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 25ff1673-d9d2-4399-829d-1ecb1cb69e82)
|
||||
)
|
||||
(pad "49" thru_hole circle (at 60.96 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 24da4615-cb69-46de-abab-7f0f9ef08181)
|
||||
)
|
||||
(pad "50" thru_hole circle (at 60.96 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 109823aa-8839-4313-9c11-aded6fb82440)
|
||||
)
|
||||
(pad "51" thru_hole circle (at 63.5 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp ba799056-ddcb-4b87-b1df-3ebe638b804a)
|
||||
)
|
||||
(pad "52" thru_hole circle (at 63.5 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp b327cb51-6b79-488f-8159-b66b9e0cb07a)
|
||||
)
|
||||
(pad "53" thru_hole circle (at 66.04 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp b6c1e9bf-2b18-454f-915c-22b25985fcfc)
|
||||
)
|
||||
(pad "54" thru_hole circle (at 66.04 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 1a392732-5bce-4038-914d-478dd68d82b7)
|
||||
)
|
||||
(pad "55" thru_hole circle (at 68.58 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6557e87a-934e-4195-a150-ec48a5ec8cb8)
|
||||
)
|
||||
(pad "56" thru_hole circle (at 68.58 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp f28bb049-1af4-4001-97df-44fdc3dc5506)
|
||||
)
|
||||
(pad "57" thru_hole circle (at 71.12 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 721130f8-4af1-4c16-9727-4d700bcccdb6)
|
||||
)
|
||||
(pad "58" thru_hole circle (at 71.12 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6299857f-ec44-4502-af24-07a9d1f48e78)
|
||||
)
|
||||
(pad "59" thru_hole circle (at 73.66 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp dfd398b7-ea21-4f59-8bf6-0acb12f6079a)
|
||||
)
|
||||
(pad "60" thru_hole circle (at 73.66 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 10a92803-d161-41aa-82ac-0f14dd5fafbb)
|
||||
)
|
||||
(pad "61" thru_hole circle (at 76.2 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6b272580-3134-4c41-9f0b-315497112a3e)
|
||||
)
|
||||
(pad "62" thru_hole circle (at 76.2 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 92b5e425-082b-4278-84ce-18c74f78d407)
|
||||
)
|
||||
(pad "63" thru_hole circle (at 78.74 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 6cc1f4ac-970f-4ae4-b4a1-e0a88eb3246c)
|
||||
)
|
||||
(pad "64" thru_hole circle (at 78.74 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp 5c072520-7c05-4fc4-87b6-0871c0cae2e0)
|
||||
)
|
||||
(pad "65" thru_hole circle (at 81.28 0) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e5a40f41-921f-40a5-804f-48fb8e6f7bd4)
|
||||
)
|
||||
(pad "66" thru_hole circle (at 81.28 7.62) (size 1.31 1.31) (drill 0.71) (layers "*.Cu" "*.Mask")
|
||||
(tstamp e4bfc510-e523-44f8-a3a3-25f0724b565c)
|
||||
)
|
||||
(model "${KICAD6_3DMODEL_DIR}/Connector_Samtec_HLE_THT.3dshapes/Samtec_HLE-133-02-xx-DV-PE-LC_2x33_P2.54mm_Horizontal.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,169 @@
|
|||
(kicad_pcb (version 20231007) (generator pcbnew)
|
||||
|
||||
(general
|
||||
(thickness 1.6)
|
||||
)
|
||||
|
||||
(paper "A4")
|
||||
(layers
|
||||
(0 "F.Cu" signal)
|
||||
(31 "B.Cu" signal)
|
||||
(32 "B.Adhes" user "B.Adhesive")
|
||||
(33 "F.Adhes" user "F.Adhesive")
|
||||
(34 "B.Paste" user)
|
||||
(35 "F.Paste" user)
|
||||
(36 "B.SilkS" user "B.Silkscreen")
|
||||
(37 "F.SilkS" user "F.Silkscreen")
|
||||
(38 "B.Mask" user)
|
||||
(39 "F.Mask" user)
|
||||
(40 "Dwgs.User" user "User.Drawings")
|
||||
(41 "Cmts.User" user "User.Comments")
|
||||
(42 "Eco1.User" user "User.Eco1")
|
||||
(43 "Eco2.User" user "User.Eco2")
|
||||
(44 "Edge.Cuts" user)
|
||||
(45 "Margin" user)
|
||||
(46 "B.CrtYd" user "B.Courtyard")
|
||||
(47 "F.CrtYd" user "F.Courtyard")
|
||||
(48 "B.Fab" user)
|
||||
(49 "F.Fab" user)
|
||||
(50 "User.1" user)
|
||||
(51 "User.2" user)
|
||||
(52 "User.3" user)
|
||||
(53 "User.4" user)
|
||||
(54 "User.5" user)
|
||||
(55 "User.6" user)
|
||||
(56 "User.7" user)
|
||||
(57 "User.8" user)
|
||||
(58 "User.9" user)
|
||||
)
|
||||
|
||||
(setup
|
||||
(pad_to_mask_clearance 0)
|
||||
(pcbplotparams
|
||||
(layerselection 0x00010fc_ffffffff)
|
||||
(plot_on_all_layers_selection 0x0000000_00000000)
|
||||
(disableapertmacros false)
|
||||
(usegerberextensions false)
|
||||
(usegerberattributes true)
|
||||
(usegerberadvancedattributes true)
|
||||
(creategerberjobfile true)
|
||||
(dashed_line_dash_ratio 12.000000)
|
||||
(dashed_line_gap_ratio 3.000000)
|
||||
(svgprecision 4)
|
||||
(plotframeref false)
|
||||
(viasonmask false)
|
||||
(mode 1)
|
||||
(useauxorigin false)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15.000000)
|
||||
(pdf_front_fp_property_popups true)
|
||||
(pdf_back_fp_property_popups true)
|
||||
(dxfpolygonmode true)
|
||||
(dxfimperialunits true)
|
||||
(dxfusepcbnewfont true)
|
||||
(psnegative false)
|
||||
(psa4output false)
|
||||
(plotreference true)
|
||||
(plotvalue true)
|
||||
(plotfptext true)
|
||||
(plotinvisibletext false)
|
||||
(sketchpadsonfab false)
|
||||
(subtractmaskfromsilk false)
|
||||
(outputformat 1)
|
||||
(mirror false)
|
||||
(drillshape 1)
|
||||
(scaleselection 1)
|
||||
(outputdirectory "")
|
||||
)
|
||||
)
|
||||
|
||||
(net 0 "")
|
||||
|
||||
(gr_rect (start 142.24 88.9) (end 143.51 90.17)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 16baef1d-04a3-4f4a-8880-8a0675489673))
|
||||
(gr_rect (start 140.97 87.63) (end 156.21 99.06)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 4cacc7e6-4a75-4a10-b7af-5b754b440395))
|
||||
(gr_rect (start 142.24 96.52) (end 143.51 97.79)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 6de1afbb-ac41-4ea5-8cc4-b054a5e5fb0d))
|
||||
(gr_rect (start 142.24 91.44) (end 143.51 92.71)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 7ee0cdbc-c1c4-4512-a0d5-989b2eabf959))
|
||||
(gr_rect (start 153.67 93.98) (end 154.94 95.25)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 85402e04-a27f-4b2f-8d1c-bb7286ec8e18))
|
||||
(gr_rect (start 153.67 96.52) (end 154.94 97.79)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp c8bfbb9e-f4f5-4989-a83e-83f54ffaac3d))
|
||||
(gr_rect (start 153.67 91.44) (end 154.94 92.71)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp d26b4361-04bf-4822-9118-fae9bb6dcbe6))
|
||||
(gr_rect (start 153.67 88.9) (end 154.94 90.17)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp e2573c52-72ff-4e6d-b78d-9c4aeb0876a0))
|
||||
(gr_rect (start 142.24 93.98) (end 143.51 95.25)
|
||||
(stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts") (tstamp f8376e5d-27d2-43e8-ba5c-b3a8e26409b2))
|
||||
(image (at 148.59 93.345) (layer "F.Cu")
|
||||
(data
|
||||
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
|
||||
)
|
||||
)
|
||||
|
||||
(group "" (id 341a7559-d258-493a-87dc-f6c4b095509d)
|
||||
(members
|
||||
85402e04-a27f-4b2f-8d1c-bb7286ec8e18
|
||||
c8bfbb9e-f4f5-4989-a83e-83f54ffaac3d
|
||||
d26b4361-04bf-4822-9118-fae9bb6dcbe6
|
||||
e2573c52-72ff-4e6d-b78d-9c4aeb0876a0
|
||||
)
|
||||
)
|
||||
(group "" (id b2069c54-f5f7-4dc5-9f12-98f292c334e3)
|
||||
(members
|
||||
341a7559-d258-493a-87dc-f6c4b095509d
|
||||
bcad4640-c8e1-4ef4-96ca-ca8cc3e1742d
|
||||
)
|
||||
)
|
||||
(group "" (id bcad4640-c8e1-4ef4-96ca-ca8cc3e1742d)
|
||||
(members
|
||||
16baef1d-04a3-4f4a-8880-8a0675489673
|
||||
6de1afbb-ac41-4ea5-8cc4-b054a5e5fb0d
|
||||
7ee0cdbc-c1c4-4512-a0d5-989b2eabf959
|
||||
f8376e5d-27d2-43e8-ba5c-b3a8e26409b2
|
||||
)
|
||||
)
|
||||
)
|
|
@ -0,0 +1,243 @@
|
|||
(kicad_pcb
|
||||
(version 20231014)
|
||||
(generator pcbnew)
|
||||
(general
|
||||
(thickness 1.6)
|
||||
(legacy_teardrops no)
|
||||
)
|
||||
(paper "A4")
|
||||
(layers
|
||||
(0 "F.Cu" signal)
|
||||
(31 "B.Cu" signal)
|
||||
(32 "B.Adhes" user "B.Adhesive")
|
||||
(33 "F.Adhes" user "F.Adhesive")
|
||||
(34 "B.Paste" user)
|
||||
(35 "F.Paste" user)
|
||||
(36 "B.SilkS" user "B.Silkscreen")
|
||||
(37 "F.SilkS" user "F.Silkscreen")
|
||||
(38 "B.Mask" user)
|
||||
(39 "F.Mask" user)
|
||||
(40 "Dwgs.User" user "User.Drawings")
|
||||
(41 "Cmts.User" user "User.Comments")
|
||||
(42 "Eco1.User" user "User.Eco1")
|
||||
(43 "Eco2.User" user "User.Eco2")
|
||||
(44 "Edge.Cuts" user)
|
||||
(45 "Margin" user)
|
||||
(46 "B.CrtYd" user "B.Courtyard")
|
||||
(47 "F.CrtYd" user "F.Courtyard")
|
||||
(48 "B.Fab" user)
|
||||
(49 "F.Fab" user)
|
||||
(50 "User.1" user)
|
||||
(51 "User.2" user)
|
||||
(52 "User.3" user)
|
||||
(53 "User.4" user)
|
||||
(54 "User.5" user)
|
||||
(55 "User.6" user)
|
||||
(56 "User.7" user)
|
||||
(57 "User.8" user)
|
||||
(58 "User.9" user)
|
||||
)
|
||||
(setup
|
||||
(pad_to_mask_clearance 0)
|
||||
(allow_soldermask_bridges_in_footprints no)
|
||||
(pcbplotparams
|
||||
(layerselection 0x00010fc_ffffffff)
|
||||
(plot_on_all_layers_selection 0x0000000_00000000)
|
||||
(disableapertmacros no)
|
||||
(usegerberextensions no)
|
||||
(usegerberattributes yes)
|
||||
(usegerberadvancedattributes yes)
|
||||
(creategerberjobfile yes)
|
||||
(dashed_line_dash_ratio 12.000000)
|
||||
(dashed_line_gap_ratio 3.000000)
|
||||
(svgprecision 4)
|
||||
(plotframeref no)
|
||||
(viasonmask no)
|
||||
(mode 1)
|
||||
(useauxorigin no)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15.000000)
|
||||
(pdf_front_fp_property_popups yes)
|
||||
(pdf_back_fp_property_popups yes)
|
||||
(dxfpolygonmode yes)
|
||||
(dxfimperialunits yes)
|
||||
(dxfusepcbnewfont yes)
|
||||
(psnegative no)
|
||||
(psa4output no)
|
||||
(plotreference yes)
|
||||
(plotvalue yes)
|
||||
(plotfptext yes)
|
||||
(plotinvisibletext no)
|
||||
(sketchpadsonfab no)
|
||||
(subtractmaskfromsilk no)
|
||||
(outputformat 1)
|
||||
(mirror no)
|
||||
(drillshape 1)
|
||||
(scaleselection 1)
|
||||
(outputdirectory "")
|
||||
)
|
||||
)
|
||||
(net 0 "")
|
||||
(gr_rect
|
||||
(start 142.24 88.9)
|
||||
(end 143.51 90.17)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "16baef1d-04a3-4f4a-8880-8a0675489673")
|
||||
)
|
||||
(gr_rect
|
||||
(start 140.97 87.63)
|
||||
(end 156.21 99.06)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "4cacc7e6-4a75-4a10-b7af-5b754b440395")
|
||||
)
|
||||
(gr_rect
|
||||
(start 142.24 96.52)
|
||||
(end 143.51 97.79)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "6de1afbb-ac41-4ea5-8cc4-b054a5e5fb0d")
|
||||
)
|
||||
(gr_rect
|
||||
(start 142.24 91.44)
|
||||
(end 143.51 92.71)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "7ee0cdbc-c1c4-4512-a0d5-989b2eabf959")
|
||||
)
|
||||
(gr_rect
|
||||
(start 153.67 93.98)
|
||||
(end 154.94 95.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "85402e04-a27f-4b2f-8d1c-bb7286ec8e18")
|
||||
)
|
||||
(gr_rect
|
||||
(start 153.67 96.52)
|
||||
(end 154.94 97.79)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "c8bfbb9e-f4f5-4989-a83e-83f54ffaac3d")
|
||||
)
|
||||
(gr_rect
|
||||
(start 153.67 91.44)
|
||||
(end 154.94 92.71)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "d26b4361-04bf-4822-9118-fae9bb6dcbe6")
|
||||
)
|
||||
(gr_rect
|
||||
(start 153.67 88.9)
|
||||
(end 154.94 90.17)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "e2573c52-72ff-4e6d-b78d-9c4aeb0876a0")
|
||||
)
|
||||
(gr_rect
|
||||
(start 142.24 93.98)
|
||||
(end 143.51 95.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "f8376e5d-27d2-43e8-ba5c-b3a8e26409b2")
|
||||
)
|
||||
(image
|
||||
(at 148.59 93.345)
|
||||
(layer "F.Cu")
|
||||
(data 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
|
||||
)
|
||||
)
|
||||
(group ""
|
||||
(id "341a7559-d258-493a-87dc-f6c4b095509d")
|
||||
(members "85402e04-a27f-4b2f-8d1c-bb7286ec8e18" "c8bfbb9e-f4f5-4989-a83e-83f54ffaac3d"
|
||||
"d26b4361-04bf-4822-9118-fae9bb6dcbe6" "e2573c52-72ff-4e6d-b78d-9c4aeb0876a0"
|
||||
)
|
||||
)
|
||||
(group ""
|
||||
(id "b2069c54-f5f7-4dc5-9f12-98f292c334e3")
|
||||
(members "341a7559-d258-493a-87dc-f6c4b095509d" "bcad4640-c8e1-4ef4-96ca-ca8cc3e1742d")
|
||||
)
|
||||
(group ""
|
||||
(id "bcad4640-c8e1-4ef4-96ca-ca8cc3e1742d")
|
||||
(members "16baef1d-04a3-4f4a-8880-8a0675489673" "6de1afbb-ac41-4ea5-8cc4-b054a5e5fb0d"
|
||||
"7ee0cdbc-c1c4-4512-a0d5-989b2eabf959" "f8376e5d-27d2-43e8-ba5c-b3a8e26409b2"
|
||||
)
|
||||
)
|
||||
)
|
|
@ -29,6 +29,7 @@
|
|||
#include <richio.h>
|
||||
|
||||
#include <board.h>
|
||||
#include <footprint.h>
|
||||
|
||||
#include <qa_utils/stdstream_line_reader.h>
|
||||
|
||||
|
@ -82,8 +83,9 @@ std::unique_ptr<BOARD_ITEM> ReadBoardItemFromStream( std::istream& aStream )
|
|||
{
|
||||
board.reset( parser.Parse() );
|
||||
}
|
||||
catch( const IO_ERROR& )
|
||||
catch( const IO_ERROR& e )
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
|
||||
return board;
|
||||
|
@ -91,7 +93,7 @@ std::unique_ptr<BOARD_ITEM> ReadBoardItemFromStream( std::istream& aStream )
|
|||
|
||||
|
||||
std::unique_ptr<BOARD> ReadBoardFromFileOrStream( const std::string& aFilename,
|
||||
std::istream& aFallback )
|
||||
std::istream& aFallback )
|
||||
{
|
||||
std::istream* in_stream = nullptr;
|
||||
std::ifstream file_stream;
|
||||
|
@ -111,5 +113,26 @@ std::unique_ptr<BOARD> ReadBoardFromFileOrStream( const std::string& aFilename,
|
|||
}
|
||||
|
||||
|
||||
std::unique_ptr<FOOTPRINT> ReadFootprintFromFileOrStream( const std::string& aFilename,
|
||||
std::istream& aFallback )
|
||||
{
|
||||
std::istream* in_stream = nullptr;
|
||||
std::ifstream file_stream;
|
||||
|
||||
if( aFilename.empty() )
|
||||
{
|
||||
// no file, read stdin
|
||||
in_stream = &aFallback;
|
||||
}
|
||||
else
|
||||
{
|
||||
file_stream.open( aFilename );
|
||||
in_stream = &file_stream;
|
||||
}
|
||||
|
||||
return ReadItemFromStream<FOOTPRINT>( *in_stream );
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace KI_TEST
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
class BOARD;
|
||||
class BOARD_ITEM;
|
||||
class FOOTPRINT;
|
||||
|
||||
/**
|
||||
* @file board_file_utils.h
|
||||
|
@ -100,6 +101,9 @@ template <typename ITEM> std::unique_ptr<ITEM> ReadItemFromStream( std::istream&
|
|||
std::unique_ptr<BOARD> ReadBoardFromFileOrStream( const std::string& aFilename,
|
||||
std::istream& aFallback = std::cin );
|
||||
|
||||
std::unique_ptr<FOOTPRINT> ReadFootprintFromFileOrStream( const std::string& aFilename,
|
||||
std::istream& aFallback = std::cin );
|
||||
|
||||
} // namespace KI_TEST
|
||||
|
||||
#endif // QA_PCBNEW_UTILS_BOARD_FILE_UTILS__H
|
||||
#endif // QA_PCBNEW_UTILS_BOARD_FILE_UTILS__H
|
||||
|
|
|
@ -38,6 +38,7 @@ set( QA_PCBNEW_SRCS
|
|||
test_lset.cpp
|
||||
test_pns_basics.cpp
|
||||
test_pad_numbering.cpp
|
||||
test_prettifier.cpp
|
||||
test_libeval_compiler.cpp
|
||||
test_save_load.cpp
|
||||
test_tracks_cleaner.cpp
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <qa_utils/wx_utils/unit_test_utils.h>
|
||||
#include <pcbnew_utils/board_test_utils.h>
|
||||
#include <pcbnew_utils/board_file_utils.h>
|
||||
#include <plugins/kicad/pcb_plugin.h>
|
||||
#include <board.h>
|
||||
#include <footprint.h>
|
||||
#include <settings/settings_manager.h>
|
||||
|
||||
|
||||
struct PRETTIFIER_TEST_FIXTURE
|
||||
{
|
||||
PRETTIFIER_TEST_FIXTURE() :
|
||||
m_settingsManager( true /* headless */ )
|
||||
{ }
|
||||
|
||||
SETTINGS_MANAGER m_settingsManager;
|
||||
};
|
||||
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( FootprintPrettifier, PRETTIFIER_TEST_FIXTURE )
|
||||
{
|
||||
std::vector<wxString> footprints = {
|
||||
"Reverb_BTDR-1V",
|
||||
"Samtec_HLE-133-02-xx-DV-PE-LC_2x33_P2.54mm_Horizontal"
|
||||
};
|
||||
|
||||
std::unique_ptr<FOOTPRINT> original, converted;
|
||||
PCB_PLUGIN plugin;
|
||||
|
||||
std::string tempLibPath = fmt::format( "{}/prettifier.pretty",
|
||||
std::filesystem::temp_directory_path().c_str() );
|
||||
std::filesystem::remove_all( tempLibPath );
|
||||
std::filesystem::create_directory( tempLibPath );
|
||||
|
||||
for( const wxString& footprint : footprints )
|
||||
{
|
||||
BOOST_TEST_CONTEXT( footprint.ToStdString() )
|
||||
{
|
||||
std::string inPath = fmt::format( "{}prettifier/{}.kicad_mod",
|
||||
KI_TEST::GetPcbnewTestDataDir(),
|
||||
footprint.ToStdString() );
|
||||
|
||||
BOOST_CHECK_NO_THROW( original = KI_TEST::ReadFootprintFromFileOrStream( inPath ) );
|
||||
BOOST_REQUIRE( original.get() );
|
||||
|
||||
BOOST_CHECK_NO_THROW( plugin.FootprintSave( tempLibPath, original.get() ) );
|
||||
|
||||
std::string newPath = fmt::format( "{}/{}.kicad_mod", tempLibPath,
|
||||
original->GetFPIDAsString().ToStdString() );
|
||||
|
||||
BOOST_CHECK_NO_THROW( converted = KI_TEST::ReadFootprintFromFileOrStream( newPath ) );
|
||||
BOOST_REQUIRE( converted.get() );
|
||||
|
||||
// Hack around the fact that PAD::operator== compares footprint UUIDs, even though
|
||||
// these UUIDs cannot be preserved through a round-trip
|
||||
const_cast<KIID&>( converted->m_Uuid ) = original->m_Uuid;
|
||||
|
||||
// File should parse the same way
|
||||
BOOST_REQUIRE( *original == *converted );
|
||||
|
||||
// And the formatting should match
|
||||
std::string goldenPath = fmt::format( "{}prettifier/{}_formatted.kicad_mod",
|
||||
KI_TEST::GetPcbnewTestDataDir(),
|
||||
footprint.ToStdString() );
|
||||
|
||||
std::ifstream test( newPath );
|
||||
std::ifstream golden( goldenPath );
|
||||
|
||||
BOOST_REQUIRE( !test.fail() && !golden.fail() );
|
||||
BOOST_REQUIRE_MESSAGE( test.tellg() == golden.tellg(), "File sizes didn't match!" );
|
||||
|
||||
test.seekg( 0, std::ifstream::beg );
|
||||
golden.seekg( 0, std::ifstream::beg );
|
||||
|
||||
BOOST_REQUIRE_MESSAGE( std::equal( std::istreambuf_iterator<char>( test.rdbuf() ),
|
||||
std::istreambuf_iterator<char>(),
|
||||
std::istreambuf_iterator<char>( golden.rdbuf() ) ),
|
||||
"Formatted footprints do not match!" );
|
||||
|
||||
std::filesystem::remove( newPath );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue