kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #31163
[RFC / Patch] Connector pin style
As part of standardising the visual style of connectors, the standard KiCad
libraries now draw connectors with special art on each pin.
I have made a small patch which adds a 'Connector' pin visual style to the
available options, which removes the need for hand-drawn art and makes this
process easier.
gallery:
https://imgur.com/a/HIecX
Patch file attached. Is this something that will be appreciated?
Oliver
From 52210ca4c651fd20527261d931581b96effa2fdb Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Thu, 19 Oct 2017 00:12:53 +1100
Subject: [PATCH] Added 'connector' pin style
- Draws small rectangle with entry pin
- Save / load
- Icon
---
bitmaps_png/CMakeLists.txt | 1 +
bitmaps_png/cpp_16/pinshape_connector.cpp | 22 +++++++++
bitmaps_png/sources/pinshape_connector.svg | 75 ++++++++++++++++++++++++++++++
eeschema/class_library.h | 3 +-
eeschema/lib_pin.cpp | 49 +++++++++++++++++++
eeschema/pin_shape.cpp | 6 +++
eeschema/pin_shape.h | 1 +
eeschema/sch_legacy_plugin.cpp | 49 +++++++++++--------
include/bitmaps.h | 1 +
9 files changed, 186 insertions(+), 21 deletions(-)
create mode 100644 bitmaps_png/cpp_16/pinshape_connector.cpp
create mode 100644 bitmaps_png/sources/pinshape_connector.svg
diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt
index 7e88233..581ded2 100644
--- a/bitmaps_png/CMakeLists.txt
+++ b/bitmaps_png/CMakeLists.txt
@@ -86,6 +86,7 @@ set( BMAPS_SMALL
pinshape_clock_active_low
pinshape_active_low_output
pinshape_clock_fall
+ pinshape_connector
pinshape_nonlogic
pintype_input
pintype_output
diff --git a/bitmaps_png/cpp_16/pinshape_connector.cpp b/bitmaps_png/cpp_16/pinshape_connector.cpp
new file mode 100644
index 0000000..4efbe45
--- /dev/null
+++ b/bitmaps_png/cpp_16/pinshape_connector.cpp
@@ -0,0 +1,22 @@
+
+/* Do not modify this file, it was automatically generated by the
+ * PNG2cpp CMake script, using a *.png file as input.
+ */
+
+#include <bitmaps.h>
+
+static const unsigned char png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
+ 0x61, 0x00, 0x00, 0x00, 0x57, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x60, 0xc0, 0x03, 0xa4,
+ 0xa4, 0xa4, 0xb6, 0x03, 0xf1, 0x7f, 0x09, 0x09, 0x09, 0x4f, 0x06, 0x72, 0xc0, 0x10, 0x31, 0x40,
+ 0x5c, 0x5c, 0x5c, 0x11, 0x17, 0x96, 0x96, 0x96, 0x3e, 0x40, 0xd0, 0x00, 0x90, 0x02, 0x42, 0x98,
+ 0x18, 0x03, 0xd6, 0x03, 0x6d, 0x8b, 0xc7, 0x82, 0x2f, 0x11, 0x6b, 0x40, 0x03, 0x12, 0x3f, 0x17,
+ 0xe4, 0x74, 0x28, 0x7e, 0x0b, 0x92, 0x07, 0x19, 0x84, 0x24, 0x86, 0x82, 0xa9, 0x66, 0x00, 0xc5,
+ 0x5e, 0x20, 0x3f, 0x10, 0x29, 0x8e, 0xc6, 0xd1, 0xbc, 0xc0, 0x00, 0x00, 0x4a, 0x48, 0x6a, 0xa5,
+ 0x2e, 0x78, 0x5a, 0x63, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+const BITMAP_OPAQUE pinshape_connector_xpm[1] = {{ png, sizeof( png ), "pinshape_connector_xpm" }};
+
+//EOF
diff --git a/bitmaps_png/sources/pinshape_connector.svg b/bitmaps_png/sources/pinshape_connector.svg
new file mode 100644
index 0000000..3b8fc0d
--- /dev/null
+++ b/bitmaps_png/sources/pinshape_connector.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="16"
+ width="16"
+ version="1.1"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="pinshape_connector.svg">
+ <metadata
+ id="metadata22">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs20" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1855"
+ inkscape:window-height="1056"
+ id="namedview18"
+ showgrid="true"
+ inkscape:zoom="17.65625"
+ inkscape:cx="14.358419"
+ inkscape:cy="-1.1268556"
+ inkscape:window-x="65"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2999"
+ empspacing="2"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <path
+ d="m 8.2839791,0 0,16"
+ id="path12"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#1a1a1a;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 4.4286266,8 16,8"
+ id="path14"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 8.3392612,5.6192035 -7.5892612,0 0,4.7615935 8.2119976,0"
+ id="path4136"
+ inkscape:connector-curvature="0" />
+</svg>
diff --git a/eeschema/class_library.h b/eeschema/class_library.h
index 23bbe8f..cac4f40 100644
--- a/eeschema/class_library.h
+++ b/eeschema/class_library.h
@@ -53,7 +53,8 @@ class SCH_PLUGIN;
* Part Library version and file header macros.
*/
#define LIB_VERSION_MAJOR 2
-#define LIB_VERSION_MINOR 4
+//#define LIB_VERSION_MINOR 4
+#define LIB_VERSION_MINOR 5 // Added 'connector' pin graphical style Oct 2017
/* Must be the first line of part library (.lib) files. */
#define LIBFILE_IDENT "EESchema-LIBRARY Version"
diff --git a/eeschema/lib_pin.cpp b/eeschema/lib_pin.cpp
index 1f99840..7c898a3 100644
--- a/eeschema/lib_pin.cpp
+++ b/eeschema/lib_pin.cpp
@@ -658,6 +658,11 @@ bool LIB_PIN::Save( OUTPUTFORMATTER& aFormatter )
return false;
break;
+ case PINSHAPE_CONNECTOR:
+ if( aFormatter.Print( 0, "P" ) < 0 )
+ return false;
+ break;
+
case PINSHAPE_NONLOGIC:
if( aFormatter.Print( 0, "X" ) < 0 )
return false;
@@ -1099,6 +1104,50 @@ void LIB_PIN::DrawPinSymbol( EDA_DRAW_PANEL* aPanel,
}
}
+ if( m_shape == PINSHAPE_CONNECTOR )
+ {
+ const int conn_size = InternalPinDecoSize( *this );
+
+ // Dimensions of internal U shape
+ const int L = conn_size * 1.5;
+ const int W = conn_size * 0.75;
+
+ if( MapY1 == 0 ) /* MapX1 = +- 1 */
+ {
+ // Draw the small line inside the 'U' shape
+ GRMoveTo( x1, y1 );
+ GRLineTo( clipbox, aDC, x1 - MapX1 * conn_size * 0.75, y1,
+ width, color );
+
+ // Draw the 'U' shape
+ GRMoveTo( x1, y1 - W );
+ GRLineTo( clipbox, aDC, x1 - MapX1 * L, y1 - W,
+ width, color );
+
+ GRLineTo( clipbox, aDC, x1 - MapX1 * L, y1 + W,
+ width, color );
+
+ GRLineTo( clipbox, aDC, x1, y1 + W,
+ width, color );
+ }
+ else /* MapX1 = 0 */
+ {
+ // Draw the small line inside the 'U' shape
+ GRMoveTo( x1, y1 );
+ GRLineTo( clipbox, aDC, x1, y1 - MapY1 * conn_size * 0.75,
+ width, color );
+
+ // Draw the 'U' shape
+ GRMoveTo( x1 - W, y1 );
+ GRLineTo( clipbox, aDC, x1 - W, y1 - MapY1 * L,
+ width, color );
+ GRLineTo( clipbox, aDC, x1 + W, y1 - MapY1 * L,
+ width, color );
+ GRLineTo( clipbox, aDC, x1 + W, y1,
+ width, color );
+ }
+ }
+
if( m_shape == PINSHAPE_INPUT_LOW || m_shape == PINSHAPE_CLOCK_LOW )
{
const int symbol_size = ExternalPinDecoSize( *this );
diff --git a/eeschema/pin_shape.cpp b/eeschema/pin_shape.cpp
index f59dbb4..570d895 100644
--- a/eeschema/pin_shape.cpp
+++ b/eeschema/pin_shape.cpp
@@ -58,6 +58,9 @@ wxString GetText( GRAPHIC_PINSHAPE shape )
case PINSHAPE_FALLING_EDGE_CLOCK:
return _( "Falling edge clock" );
+ case PINSHAPE_CONNECTOR:
+ return _( "Connector" );
+
case PINSHAPE_NONLOGIC:
return _( "NonLogic" );
}
@@ -95,6 +98,9 @@ BITMAP_DEF GetBitmap( GRAPHIC_PINSHAPE shape )
case PINSHAPE_FALLING_EDGE_CLOCK:
return pinshape_clock_fall_xpm;
+ case PINSHAPE_CONNECTOR:
+ return pinshape_connector_xpm;
+
case PINSHAPE_NONLOGIC:
return pinshape_nonlogic_xpm;
}
diff --git a/eeschema/pin_shape.h b/eeschema/pin_shape.h
index 25f11b9..9bb2a5c 100644
--- a/eeschema/pin_shape.h
+++ b/eeschema/pin_shape.h
@@ -42,6 +42,7 @@ enum GRAPHIC_PINSHAPE
PINSHAPE_CLOCK_LOW,
PINSHAPE_OUTPUT_LOW,
PINSHAPE_FALLING_EDGE_CLOCK,
+ PINSHAPE_CONNECTOR,
PINSHAPE_NONLOGIC
};
diff --git a/eeschema/sch_legacy_plugin.cpp b/eeschema/sch_legacy_plugin.cpp
index c73dad3..1537333 100644
--- a/eeschema/sch_legacy_plugin.cpp
+++ b/eeschema/sch_legacy_plugin.cpp
@@ -3102,12 +3102,13 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr< LIB_PART >& aPart,
{
enum
{
- INVERTED = 1 << 0,
- CLOCK = 1 << 1,
- LOWLEVEL_IN = 1 << 2,
- LOWLEVEL_OUT = 1 << 3,
- FALLING_EDGE = 1 << 4,
- NONLOGIC = 1 << 5
+ PIN_ATTR_INVERTED = 1 << 0,
+ PIN_ATTR_CLOCK = 1 << 1,
+ PIN_ATTR_LOWLEVEL_IN = 1 << 2,
+ PIN_ATTR_LOWLEVEL_OUT = 1 << 3,
+ PIN_ATTR_FALLING_EDGE = 1 << 4,
+ PIN_ATTR_CONNECTOR = 1 << 5,
+ PIN_ATTR_NONLOGIC = 1 << 6
};
int flags = 0;
@@ -3124,27 +3125,31 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr< LIB_PART >& aPart,
break;
case 'I':
- flags |= INVERTED;
+ flags |= PIN_ATTR_INVERTED;
break;
case 'C':
- flags |= CLOCK;
+ flags |= PIN_ATTR_CLOCK;
break;
case 'L':
- flags |= LOWLEVEL_IN;
+ flags |= PIN_ATTR_LOWLEVEL_IN;
break;
case 'V':
- flags |= LOWLEVEL_OUT;
+ flags |= PIN_ATTR_LOWLEVEL_OUT;
break;
case 'F':
- flags |= FALLING_EDGE;
+ flags |= PIN_ATTR_FALLING_EDGE;
break;
case 'X':
- flags |= NONLOGIC;
+ flags |= PIN_ATTR_NONLOGIC;
+ break;
+
+ case 'P':
+ flags |= PIN_ATTR_CONNECTOR;
break;
default:
@@ -3158,35 +3163,39 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr< LIB_PART >& aPart,
pin->SetShape( PINSHAPE_LINE );
break;
- case INVERTED:
+ case PIN_ATTR_INVERTED:
pin->SetShape( PINSHAPE_INVERTED );
break;
- case CLOCK:
+ case PIN_ATTR_CLOCK:
pin->SetShape( PINSHAPE_CLOCK );
break;
- case INVERTED | CLOCK:
+ case PIN_ATTR_INVERTED | PIN_ATTR_CLOCK:
pin->SetShape( PINSHAPE_INVERTED_CLOCK );
break;
- case LOWLEVEL_IN:
+ case PIN_ATTR_LOWLEVEL_IN:
pin->SetShape( PINSHAPE_INPUT_LOW );
break;
- case LOWLEVEL_IN | CLOCK:
+ case PIN_ATTR_LOWLEVEL_IN | PIN_ATTR_CLOCK:
pin->SetShape( PINSHAPE_CLOCK_LOW );
break;
- case LOWLEVEL_OUT:
+ case PIN_ATTR_LOWLEVEL_OUT:
pin->SetShape( PINSHAPE_OUTPUT_LOW );
break;
- case FALLING_EDGE:
+ case PIN_ATTR_FALLING_EDGE:
pin->SetShape( PINSHAPE_FALLING_EDGE_CLOCK );
break;
- case NONLOGIC:
+ case PIN_ATTR_CONNECTOR:
+ pin->SetShape( PINSHAPE_CONNECTOR );
+ break;
+
+ case PIN_ATTR_NONLOGIC:
pin->SetShape( PINSHAPE_NONLOGIC );
break;
diff --git a/include/bitmaps.h b/include/bitmaps.h
index 800ec2d..0c81548 100644
--- a/include/bitmaps.h
+++ b/include/bitmaps.h
@@ -368,6 +368,7 @@ EXTERN_BITMAP( pinshape_invert_xpm )
EXTERN_BITMAP( pinshape_clock_fall_xpm )
EXTERN_BITMAP( pinshape_clock_normal_xpm )
EXTERN_BITMAP( pinshape_clock_invert_xpm )
+EXTERN_BITMAP( pinshape_connector_xpm )
EXTERN_BITMAP( pinshape_active_low_input_xpm )
EXTERN_BITMAP( pinshape_clock_active_low_xpm )
EXTERN_BITMAP( pinshape_active_low_output_xpm )
--
2.7.4
Follow ups