User-configureable dash styles (and dash-dot-dot).

ADDED: Schematic Setup properties for dash length and gap length.
ADDED: dash-dot-dot line style

Fixes https://gitlab.com/kicad/code/kicad/issues/2206
This commit is contained in:
Jeff Young 2021-07-23 00:05:01 +01:00
parent e26341d424
commit 295a6408c3
29 changed files with 767 additions and 121 deletions

View File

@ -603,6 +603,7 @@ set( BMAPS_OTHER
stripline
stroke_dash
stroke_dashdot
stroke_dashdotdot
stroke_dot
stroke_solid
tune_diff_pair_length_legend

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 B

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 529 B

View File

@ -15,7 +15,10 @@
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg840"
sodipodi:docname="stroke_dashdot.svg"
inkscape:version="1.0.1 (c497b03c, 2020-09-10)"><defs
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png/stroke_dashdot_dark.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"><defs
id="defs844" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@ -25,17 +28,18 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="715"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview842"
showgrid="false"
inkscape:zoom="10.679189"
inkscape:cx="32"
inkscape:cy="8"
inkscape:cx="31.43816"
inkscape:cy="9.4982411"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="1"
inkscape:current-layer="svg840" />
inkscape:current-layer="svg840"
inkscape:document-rotation="0" />
<metadata
id="metadata43">
<rdf:RDF>
@ -44,7 +48,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
@ -59,15 +63,18 @@
rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF>
</metadata>
<path
d="M36.635,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path834" />
d="m 35.735,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path834"
sodipodi:nodetypes="sssssss" />
<path
d="M19,8c0,-1.656 -1.344,-3 -3,-3l-12,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l12,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path836" />
d="m 19.5,8 c 0,-1.656 -1.344,-3 -3,-3 H 4 C 2.344,5 1,6.344 1,8 c 0,1.656 1.344,3 3,3 h 12.5 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path836"
sodipodi:nodetypes="sssssss" />
<path
d="M63,8c0,-1.656 -1.344,-3 -3,-3l-12,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l12,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path838" />
d="M 63,8 C 63,6.344 61.656,5 60,5 H 47.5 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 H 60 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path838"
sodipodi:nodetypes="sssssss" />
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,84 @@
<?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"
width="100%"
height="100%"
viewBox="0 0 64 16"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg840"
sodipodi:docname="stroke_dashdotdot.svg"
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png/stroke_dashdotdot_dark.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"><defs
id="defs844" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview842"
showgrid="false"
inkscape:zoom="10.679189"
inkscape:cx="32"
inkscape:cy="8"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="1"
inkscape:current-layer="svg840"
inkscape:document-rotation="0" />
<metadata
id="metadata43">
<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 />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"><cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" /><cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" /><cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /><cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF>
</metadata>
<path
d="m 29.935,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path834"
sodipodi:nodetypes="sssssss" />
<path
d="M 17,8 C 17,6.344 15.656,5 14,5 H 4 C 2.344,5 1,6.344 1,8 c 0,1.656 1.344,3 3,3 h 10 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path836"
sodipodi:nodetypes="sssssss" />
<path
d="M 63,8 C 63,6.344 61.656,5 60,5 H 50 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 10 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path838"
sodipodi:nodetypes="sssssss" />
<path
d="m 41.735,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path840"
sodipodi:nodetypes="sssssss" /></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -15,7 +15,10 @@
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg844"
sodipodi:docname="stroke_dot.svg"
inkscape:version="1.0.1 (c497b03c, 2020-09-10)"><defs
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png/stroke_dot_dark.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"><defs
id="defs848" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@ -25,8 +28,8 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="715"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview846"
showgrid="false"
inkscape:zoom="10.679189"
@ -35,7 +38,8 @@
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="1"
inkscape:current-layer="svg844" />
inkscape:current-layer="svg844"
inkscape:document-rotation="0" />
<metadata
id="metadata43">
<rdf:RDF>
@ -44,7 +48,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
@ -59,23 +63,28 @@
rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF>
</metadata>
<path
d="M36.5,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path834" />
d="m 35.1,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path834"
sodipodi:nodetypes="sssssss" />
<path
d="M10,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path836" />
d="M 8,8 C 8,6.344 6.656,5 5,5 H 4 C 2.344,5 1,6.344 1,8 1,9.656 2.344,11 4,11 H 5 C 6.656,11 8,9.656 8,8 Z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path836"
sodipodi:nodetypes="sssssss" />
<path
d="M50,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path838" />
d="m 48.9,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path838"
sodipodi:nodetypes="sssssss" />
<path
d="M23,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path840" />
d="m 21.3,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path840"
sodipodi:nodetypes="sssssss" />
<path
d="M63,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#DED3DD;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path842" />
d="M 63,8 C 63,6.344 61.656,5 60,5 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#ded3dd;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path842"
sodipodi:nodetypes="sssssss" />
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -15,7 +15,10 @@
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg840"
sodipodi:docname="stroke_dashdot.svg"
inkscape:version="1.0.1 (c497b03c, 2020-09-10)"><defs
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png/stroke_dashdot.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"><defs
id="defs844" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@ -25,8 +28,8 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="715"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview842"
showgrid="false"
inkscape:zoom="10.679189"
@ -35,7 +38,8 @@
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="1"
inkscape:current-layer="svg840" />
inkscape:current-layer="svg840"
inkscape:document-rotation="0" />
<metadata
id="metadata43">
<rdf:RDF>
@ -44,7 +48,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
@ -59,15 +63,18 @@
rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF>
</metadata>
<path
d="M36.635,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path834" />
d="m 35.735,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path834"
sodipodi:nodetypes="sssssss" />
<path
d="M19,8c0,-1.656 -1.344,-3 -3,-3l-12,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l12,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path836" />
d="m 19.5,8 c 0,-1.656 -1.344,-3 -3,-3 H 4 C 2.344,5 1,6.344 1,8 c 0,1.656 1.344,3 3,3 h 12.5 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path836"
sodipodi:nodetypes="sssssss" />
<path
d="M63,8c0,-1.656 -1.344,-3 -3,-3l-12,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l12,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path838" />
d="M 63,8 C 63,6.344 61.656,5 60,5 H 47.5 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 H 60 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path838"
sodipodi:nodetypes="sssssss" />
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,84 @@
<?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"
width="100%"
height="100%"
viewBox="0 0 64 16"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg840"
sodipodi:docname="stroke_dashdotdot.svg"
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png/stroke_dashdotdot.png"
inkscape:export-xdpi="96.000008"
inkscape:export-ydpi="96.000008"><defs
id="defs844" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview842"
showgrid="false"
inkscape:zoom="16.183779"
inkscape:cx="30.972869"
inkscape:cy="8.7951986"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="1"
inkscape:current-layer="svg840"
inkscape:document-rotation="0" />
<metadata
id="metadata43">
<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 />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"><cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" /><cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" /><cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /><cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF>
</metadata>
<path
d="m 30.135,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path834"
sodipodi:nodetypes="sssssss" />
<path
d="M 17,8 C 17,6.344 15.656,5 14,5 H 4 C 2.344,5 1,6.344 1,8 c 0,1.656 1.344,3 3,3 h 10 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path836"
sodipodi:nodetypes="sssssss" />
<path
d="M 63,8 C 63,6.344 61.656,5 60,5 H 50 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 10 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path838"
sodipodi:nodetypes="sssssss" />
<path
d="m 41.935,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path840"
sodipodi:nodetypes="sssssss" /></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -15,7 +15,10 @@
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg844"
sodipodi:docname="stroke_dot.svg"
inkscape:version="1.0.1 (c497b03c, 2020-09-10)"><defs
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png/stroke_dot.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"><defs
id="defs848" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@ -25,8 +28,8 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="715"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview846"
showgrid="false"
inkscape:zoom="10.679189"
@ -35,7 +38,8 @@
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="1"
inkscape:current-layer="svg844" />
inkscape:current-layer="svg844"
inkscape:document-rotation="0" />
<metadata
id="metadata43">
<rdf:RDF>
@ -44,7 +48,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
@ -59,23 +63,28 @@
rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF>
</metadata>
<path
d="M36.5,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path834" />
d="m 35.1,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path834"
sodipodi:nodetypes="sssssss" />
<path
d="M10,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path836" />
d="M 8,8 C 8,6.344 6.656,5 5,5 H 4 C 2.344,5 1,6.344 1,8 1,9.656 2.344,11 4,11 H 5 C 6.656,11 8,9.656 8,8 Z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path836"
sodipodi:nodetypes="sssssss" />
<path
d="M50,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path838" />
d="m 48.9,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path838"
sodipodi:nodetypes="sssssss" />
<path
d="M23,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path840" />
d="m 21.3,8 c 0,-1.656 -1.344,-3 -3,-3 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path840"
sodipodi:nodetypes="sssssss" />
<path
d="M63,8c0,-1.656 -1.344,-3 -3,-3l-3,0c-1.656,0 -3,1.344 -3,3c0,1.656 1.344,3 3,3l3,0c1.656,0 3,-1.344 3,-3Z"
style="fill:#545454;stroke:#000;stroke-width:0.09000000000000000px;fill-opacity:1"
id="path842" />
d="M 63,8 C 63,6.344 61.656,5 60,5 h -1 c -1.656,0 -3,1.344 -3,3 0,1.656 1.344,3 3,3 h 1 c 1.656,0 3,-1.344 3,-3 z"
style="fill:#545454;fill-opacity:1;stroke:#000000;stroke-width:0.09px"
id="path842"
sodipodi:nodetypes="sssssss" />
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -93,6 +93,8 @@ PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES( PAGED_DIALOG* aParent, EDA_DRAW_
g_lineStyleNames.push_back( _( "Dotted" ) );
g_lineStyleIcons.push_back( BITMAPS::stroke_dashdot );
g_lineStyleNames.push_back( _( "Dash-Dot" ) );
g_lineStyleIcons.push_back( BITMAPS::stroke_dashdotdot );
g_lineStyleNames.push_back( _( "Dash-Dot-Dot" ) );
m_netclassesDirty = true;

View File

@ -184,6 +184,12 @@ void PDF_PLOTTER::SetDash( PLOT_DASH_TYPE dashed )
(int) GetDashMarkLenIU(), (int) GetDashGapLenIU(),
(int) GetDotMarkLenIU(), (int) GetDashGapLenIU() );
break;
case PLOT_DASH_TYPE::DASHDOTDOT:
fprintf( workFile, "[%d %d %d %d %d %d] 0 d\n",
(int) GetDashMarkLenIU(), (int) GetDashGapLenIU(),
(int) GetDotMarkLenIU(), (int) GetDashGapLenIU(),
(int) GetDotMarkLenIU(), (int) GetDashGapLenIU() );
break;
default:
fputs( "[] 0 d\n", workFile );
}

View File

@ -571,6 +571,12 @@ void PS_PLOTTER::SetDash( PLOT_DASH_TYPE dashed )
(int) GetDashMarkLenIU(), (int) GetDashGapLenIU(),
(int) GetDotMarkLenIU(), (int) GetDashGapLenIU() );
break;
case PLOT_DASH_TYPE::DASHDOTDOT:
fprintf( m_outputFile, "[%d %d %d %d %d %d] 0 setdash\n",
(int) GetDashMarkLenIU(), (int) GetDashGapLenIU(),
(int) GetDotMarkLenIU(), (int) GetDashGapLenIU(),
(int) GetDotMarkLenIU(), (int) GetDashGapLenIU() );
break;
default:
fputs( "solidline\n", m_outputFile );
}

View File

@ -257,16 +257,24 @@ void SVG_PLOTTER::setSVGPlotStyle( bool aIsGroup, const std::string& aExtraStyle
switch( m_dashed )
{
case PLOT_DASH_TYPE::DASH:
fprintf( m_outputFile, "stroke-dasharray:%f,%f;", GetDashMarkLenIU(), GetDashGapLenIU() );
fprintf( m_outputFile, "stroke-dasharray:%f,%f;",
GetDashMarkLenIU(), GetDashGapLenIU() );
break;
case PLOT_DASH_TYPE::DOT:
fprintf( m_outputFile, "stroke-dasharray:%f,%f;", GetDotMarkLenIU(), GetDashGapLenIU() );
fprintf( m_outputFile, "stroke-dasharray:%f,%f;",
GetDotMarkLenIU(), GetDashGapLenIU() );
break;
case PLOT_DASH_TYPE::DASHDOT:
fprintf( m_outputFile, "stroke-dasharray:%f,%f,%f,%f;",
GetDashMarkLenIU(), GetDashGapLenIU(),
GetDotMarkLenIU(), GetDashGapLenIU() );
break;
case PLOT_DASH_TYPE::DASHDOTDOT:
fprintf( m_outputFile, "stroke-dasharray:%f,%f,%f,%f,%f,%f;",
GetDashMarkLenIU(), GetDashGapLenIU(),
GetDotMarkLenIU(), GetDashGapLenIU(),
GetDotMarkLenIU(), GetDashGapLenIU() );
break;
case PLOT_DASH_TYPE::DEFAULT:
case PLOT_DASH_TYPE::SOLID:
default:

View File

@ -58,6 +58,15 @@ void STROKE_PARAMS::Stroke( const SHAPE* aShape, PLOT_DASH_TYPE aLineStyle, int
strokes[3] = aRenderSettings->GetGapLength( aWidth );
wrapAround = 4;
break;
case PLOT_DASH_TYPE::DASHDOTDOT:
strokes[0] = aRenderSettings->GetDashLength( aWidth );
strokes[1] = aRenderSettings->GetGapLength( aWidth );
strokes[2] = aRenderSettings->GetDotLength( aWidth );
strokes[3] = aRenderSettings->GetGapLength( aWidth );
strokes[4] = aRenderSettings->GetDotLength( aWidth );
strokes[5] = aRenderSettings->GetGapLength( aWidth );
wrapAround = 6;
break;
default:
UNIMPLEMENTED_FOR( lineTypeNames.at( aLineStyle ).name );
}
@ -171,11 +180,12 @@ static wxString getLineStyleToken( PLOT_DASH_TYPE aStyle )
switch( aStyle )
{
case PLOT_DASH_TYPE::DASH: token = "dash"; break;
case PLOT_DASH_TYPE::DOT: token = "dot"; break;
case PLOT_DASH_TYPE::DASHDOT: token = "dash_dot"; break;
case PLOT_DASH_TYPE::SOLID: token = "solid"; break;
case PLOT_DASH_TYPE::DEFAULT: token = "default"; break;
case PLOT_DASH_TYPE::DASH: token = "dash"; break;
case PLOT_DASH_TYPE::DOT: token = "dot"; break;
case PLOT_DASH_TYPE::DASHDOT: token = "dash_dot"; break;
case PLOT_DASH_TYPE::DASHDOTDOT: token = "dash_dot_dot"; break;
case PLOT_DASH_TYPE::SOLID: token = "solid"; break;
case PLOT_DASH_TYPE::DEFAULT: token = "default"; break;
}
return token;
@ -186,13 +196,22 @@ void STROKE_PARAMS::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const
{
wxASSERT( aFormatter != nullptr );
aFormatter->Print( aNestLevel, "(stroke (width %s) (type %s) (color %d %d %d %s))",
FormatInternalUnits(GetWidth() ).c_str(),
TO_UTF8( getLineStyleToken( GetPlotStyle() ) ),
KiROUND( GetColor().r * 255.0 ),
KiROUND( GetColor().g * 255.0 ),
KiROUND( GetColor().b * 255.0 ),
Double2Str( GetColor().a ).c_str() );
if( GetColor() == KIGFX::COLOR4D::UNSPECIFIED )
{
aFormatter->Print( aNestLevel, "(stroke (width %s) (type %s))",
FormatInternalUnits(GetWidth() ).c_str(),
TO_UTF8( getLineStyleToken( GetPlotStyle() ) ) );
}
else
{
aFormatter->Print( aNestLevel, "(stroke (width %s) (type %s) (color %d %d %d %s))",
FormatInternalUnits(GetWidth() ).c_str(),
TO_UTF8( getLineStyleToken( GetPlotStyle() ) ),
KiROUND( GetColor().r * 255.0 ),
KiROUND( GetColor().g * 255.0 ),
KiROUND( GetColor().b * 255.0 ),
Double2Str( GetColor().a ).c_str() );
}
}
@ -218,13 +237,14 @@ void STROKE_PARAMS_PARSER::ParseStroke( STROKE_PARAMS& aStroke )
switch( token )
{
case T_dash: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DASH ); break;
case T_dot: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DOT ); break;
case T_dash_dot: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DASHDOT ); break;
case T_solid: aStroke.SetPlotStyle( PLOT_DASH_TYPE::SOLID ); break;
case T_default: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DEFAULT ); break;
case T_dash: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DASH ); break;
case T_dot: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DOT ); break;
case T_dash_dot: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DASHDOT ); break;
case T_dash_dot_dot: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DASHDOTDOT ); break;
case T_solid: aStroke.SetPlotStyle( PLOT_DASH_TYPE::SOLID ); break;
case T_default: aStroke.SetPlotStyle( PLOT_DASH_TYPE::DEFAULT ); break;
default:
Expecting( "solid, dash, dash_dot, dot or default" );
Expecting( "solid, dash, dash_dot, dash_dot_dot, dot or default" );
}
NeedRIGHT();

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2020-2021 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
@ -41,10 +41,13 @@ PANEL_SETUP_FORMATTING::PANEL_SETUP_FORMATTING( wxWindow* aWindow, SCH_EDIT_FRAM
{
}
void PANEL_SETUP_FORMATTING::onCheckBoxIref( wxCommandEvent& event )
{
bool enabled = m_showIntersheetsReferences->GetValue();
m_dashedLineHelp->SetFont( KIUI::GetInfoFont( this ) );
m_radioFormatStandard->Enable( enabled );
m_radioFormatAbbreviated->Enable( enabled );
m_prefixCtrl->Enable( enabled );
@ -94,11 +97,17 @@ bool PANEL_SETUP_FORMATTING::TransferDataToWindow()
m_suffixCtrl->ChangeValue( settings.m_IntersheetRefsSuffix );
m_listOwnPage->SetValue( settings.m_IntersheetRefsListOwnPage );
wxString offsetRatio = wxString::Format( "%f", settings.m_TextOffsetRatio * 100.0 );
m_textOffsetRatioCtrl->SetValue( offsetRatio );
m_textOffsetRatioCtrl->SetValue( StringFromValue( EDA_UNITS::PERCENT,
settings.m_TextOffsetRatio * 100.0 ) );
wxString labelSizeRatio = wxString::Format( "%f", settings.m_LabelSizeRatio * 100.0 );
m_labelSizeRatioCtrl->SetValue( labelSizeRatio );
m_dashLengthCtrl->SetValue( StringFromValue( EDA_UNITS::UNSCALED,
settings.m_DashedLineDashRatio ) );
m_gapLengthCtrl->SetValue( StringFromValue( EDA_UNITS::UNSCALED,
settings.m_DashedLineGapRatio ) );
m_labelSizeRatioCtrl->SetValue( StringFromValue( EDA_UNITS::PERCENT,
settings.m_LabelSizeRatio * 100.0 ) );
return true;
}
@ -142,13 +151,17 @@ bool PANEL_SETUP_FORMATTING::TransferDataFromWindow()
settings.m_IntersheetRefsSuffix = m_suffixCtrl->GetValue();
settings.m_IntersheetRefsListOwnPage = m_listOwnPage->GetValue();
double dtmp = DEFAULT_TEXT_OFFSET_RATIO;
m_textOffsetRatioCtrl->GetValue().ToDouble( &dtmp );
settings.m_TextOffsetRatio = dtmp / 100.0;
settings.m_TextOffsetRatio = DoubleValueFromString( EDA_UNITS::PERCENT,
m_textOffsetRatioCtrl->GetValue() ) / 100.0;
dtmp = DEFAULT_LABEL_SIZE_RATIO;
m_labelSizeRatioCtrl->GetValue().ToDouble( &dtmp );
settings.m_LabelSizeRatio = dtmp / 100.0;
settings.m_DashedLineDashRatio = DoubleValueFromString( EDA_UNITS::UNSCALED,
m_dashLengthCtrl->GetValue() );
settings.m_DashedLineGapRatio = DoubleValueFromString( EDA_UNITS::UNSCALED,
m_gapLengthCtrl->GetValue() );
settings.m_LabelSizeRatio = DoubleValueFromString( EDA_UNITS::PERCENT,
m_labelSizeRatioCtrl->GetValue() ) / 100.0;
return true;
}

View File

@ -93,7 +93,7 @@ PANEL_SETUP_FORMATTING_BASE::PANEL_SETUP_FORMATTING_BASE( wxWindow* parent, wxWi
sbSizer4->Add( fgSizer2, 1, wxALL|wxEXPAND, 5 );
bLeftColumn->Add( sbSizer4, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
bLeftColumn->Add( sbSizer4, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
wxStaticBoxSizer* sbSizer41;
sbSizer41 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Symbols") ), wxVERTICAL );
@ -149,13 +149,13 @@ PANEL_SETUP_FORMATTING_BASE::PANEL_SETUP_FORMATTING_BASE( wxWindow* parent, wxWi
bSizer61->Add( m_choiceJunctionDotSize, 1, wxEXPAND|wxRIGHT, 5 );
sbSizer2->Add( bSizer61, 1, wxBOTTOM|wxEXPAND, 5 );
sbSizer2->Add( bSizer61, 0, wxBOTTOM|wxEXPAND, 5 );
bLeftColumn->Add( sbSizer2, 0, wxEXPAND|wxALL, 5 );
bLeftColumn->Add( sbSizer2, 1, wxEXPAND|wxALL, 5 );
bPanelSizer->Add( bLeftColumn, 1, 0, 10 );
bPanelSizer->Add( bLeftColumn, 1, wxEXPAND, 10 );
wxBoxSizer* bRightColumn;
bRightColumn = new wxBoxSizer( wxVERTICAL );
@ -209,11 +209,40 @@ PANEL_SETUP_FORMATTING_BASE::PANEL_SETUP_FORMATTING_BASE( wxWindow* parent, wxWi
bRightColumn->Add( sbSizerIREf, 0, wxALL|wxEXPAND, 5 );
wxStaticBoxSizer* sbSizer6;
sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Dashed Lines") ), wxVERTICAL );
bRightColumn->Add( 0, 0, 0, wxEXPAND, 5 );
wxFlexGridSizer* fgSizer41;
fgSizer41 = new wxFlexGridSizer( 0, 2, 5, 0 );
fgSizer41->SetFlexibleDirection( wxBOTH );
fgSizer41->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
dashLengthLabel = new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY, _("Dash length:"), wxDefaultPosition, wxDefaultSize, 0 );
dashLengthLabel->Wrap( -1 );
fgSizer41->Add( dashLengthLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_dashLengthCtrl = new wxTextCtrl( sbSizer6->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer41->Add( m_dashLengthCtrl, 0, wxALIGN_CENTER_VERTICAL, 5 );
gapLengthLabel = new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY, _("Gap length:"), wxDefaultPosition, wxDefaultSize, 0 );
gapLengthLabel->Wrap( -1 );
fgSizer41->Add( gapLengthLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_gapLengthCtrl = new wxTextCtrl( sbSizer6->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer41->Add( m_gapLengthCtrl, 0, wxALIGN_CENTER_VERTICAL, 5 );
bPanelSizer->Add( bRightColumn, 1, wxRIGHT|wxLEFT, 10 );
sbSizer6->Add( fgSizer41, 0, wxEXPAND|wxBOTTOM, 5 );
m_dashedLineHelp = new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY, _("Dash and dot lengths are ratios of the line width."), wxDefaultPosition, wxDefaultSize, 0 );
m_dashedLineHelp->Wrap( -1 );
sbSizer6->Add( m_dashedLineHelp, 0, wxALL, 5 );
bRightColumn->Add( sbSizer6, 1, wxEXPAND|wxBOTTOM, 5 );
bPanelSizer->Add( bRightColumn, 1, wxRIGHT|wxLEFT|wxEXPAND, 10 );
this->SetSizer( bPanelSizer );

View File

@ -56,7 +56,7 @@
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">10</property>
<property name="flag"></property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
@ -216,7 +216,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Text</property>
@ -1210,7 +1210,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALL</property>
<property name="proportion">0</property>
<property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Connections</property>
@ -1222,7 +1222,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer61</property>
@ -1361,7 +1361,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">10</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
@ -1920,12 +1920,345 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Dashed Lines</property>
<property name="minimum_size"></property>
<property name="name">sbSizer6</property>
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">2</property>
<property name="flexible_direction">wxBOTH</property>
<property name="growablecols"></property>
<property name="growablerows"></property>
<property name="hgap">0</property>
<property name="minimum_size"></property>
<property name="name">fgSizer41</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">none</property>
<property name="rows">0</property>
<property name="vgap">5</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Dash length:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">dashLengthLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_dashLengthCtrl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Gap length:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">gapLengthLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_gapLengthCtrl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Dash and dot lengths are ratios of the line width.</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_dashedLineHelp</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
</object>
</object>
</object>

View File

@ -66,6 +66,11 @@ class PANEL_SETUP_FORMATTING_BASE : public wxPanel
wxTextCtrl* m_prefixCtrl;
wxStaticText* m_suffixLabel;
wxTextCtrl* m_suffixCtrl;
wxStaticText* dashLengthLabel;
wxTextCtrl* m_dashLengthCtrl;
wxStaticText* gapLengthLabel;
wxTextCtrl* m_gapLengthCtrl;
wxStaticText* m_dashedLineHelp;
// Virtual event handlers, overide them in your derived class
virtual void onCheckBoxIref( wxCommandEvent& event ) { event.Skip(); }

View File

@ -86,6 +86,9 @@ bool SCH_EDIT_FRAME::LoadProjectSettings()
GetRenderSettings()->m_PinSymbolSize = settings.m_PinSymbolSize;
GetRenderSettings()->m_JunctionSize = settings.m_JunctionSize;
GetRenderSettings()->SetDashLengthRatio( settings.m_DashedLineDashRatio );
GetRenderSettings()->SetGapLengthRatio( settings.m_DashedLineGapRatio );
// Verify some values, because the config file can be edited by hand, and have bad values:
LIB_SYMBOL::SetSubpartIdNotation( LIB_SYMBOL::GetSubpartIdSeparator(),
LIB_SYMBOL::GetSubpartFirstId() );
@ -123,6 +126,9 @@ void SCH_EDIT_FRAME::ShowSchematicSetupDialog( const wxString& aInitialPage )
GetRenderSettings()->m_PinSymbolSize = Schematic().Settings().m_PinSymbolSize;
GetRenderSettings()->m_JunctionSize = Schematic().Settings().m_JunctionSize;
GetRenderSettings()->SetDashLengthRatio( Schematic().Settings().m_DashedLineDashRatio );
GetRenderSettings()->SetGapLengthRatio( Schematic().Settings().m_DashedLineGapRatio );
GetCanvas()->GetView()->MarkDirty();
GetCanvas()->GetView()->UpdateAllItems( KIGFX::REPAINT );
GetCanvas()->Refresh();

View File

@ -67,4 +67,5 @@
//#define SEXPR_SCHEMATIC_FILE_VERSION 20210615 // Update overbar syntax in net names.
//#define SEXPR_SCHEMATIC_FILE_VERSION 20210621 // Update overbar syntax in bus aliases.
//#define SEXPR_SCHEMATIC_FILE_VERSION 20211123 // R/W uuids for junctions.
#define SEXPR_SCHEMATIC_FILE_VERSION 20220101 // Circles, arcs, rects, polys & beziers
//#define SEXPR_SCHEMATIC_FILE_VERSION 20220101 // Circles, arcs, rects, polys & beziers
#define SEXPR_SCHEMATIC_FILE_VERSION 20220102 // Dash-dot-dot

View File

@ -50,6 +50,8 @@ SCHEMATIC_SETTINGS::SCHEMATIC_SETTINGS( JSON_SETTINGS* aParent, const std::strin
m_IntersheetRefsFormatShort( false ),
m_IntersheetRefsPrefix( DEFAULT_IREF_PREFIX ),
m_IntersheetRefsSuffix( DEFAULT_IREF_SUFFIX ),
m_DashedLineDashRatio( 5 ),
m_DashedLineGapRatio( 3 ),
m_SpiceAdjustPassiveValues( false ),
m_NgspiceSimulatorSettings( nullptr )
{
@ -89,6 +91,12 @@ SCHEMATIC_SETTINGS::SCHEMATIC_SETTINGS( JSON_SETTINGS* aParent, const std::strin
m_params.emplace_back( new PARAM<wxString>( "drawing.intersheets_ref_suffix",
&m_IntersheetRefsSuffix, defaultIntersheetsRefSuffix ) );
m_params.emplace_back( new PARAM<double>( "drawing.dashed_lines_dash_length_ratio",
&m_DashedLineDashRatio, 5 ) );
m_params.emplace_back( new PARAM<double>( "drawing.dashed_lines_gap_length_ratio",
&m_DashedLineGapRatio, 3 ) );
m_params.emplace_back( new PARAM_SCALED<int>( "drawing.default_line_thickness",
&m_DefaultLineWidth, Mils2iu( defaultLineThickness ), Mils2iu( 5 ), Mils2iu( 1000 ),
1 / IU_PER_MILS ) );

View File

@ -61,6 +61,9 @@ public:
wxString m_IntersheetRefsPrefix;
wxString m_IntersheetRefsSuffix;
double m_DashedLineDashRatio; // Dash length as ratio of the lineWidth
double m_DashedLineGapRatio; // Gap length as ratio of the lineWidth
wxString m_PlotDirectoryName;
wxString m_NetFormatName;

View File

@ -1021,6 +1021,7 @@ const std::vector<BITMAP_INFO> g_BitmapInfo = {
{ BITMAPS::stripline, wxT( "stripline.png" ), -1, wxT( "light" ) },
{ BITMAPS::stroke_dash, wxT( "stroke_dash.png" ), -1, wxT( "light" ) },
{ BITMAPS::stroke_dashdot, wxT( "stroke_dashdot.png" ), -1, wxT( "light" ) },
{ BITMAPS::stroke_dashdotdot, wxT( "stroke_dashdotdot.png" ), -1, wxT( "light" ) },
{ BITMAPS::stroke_dot, wxT( "stroke_dot.png" ), -1, wxT( "light" ) },
{ BITMAPS::stroke_solid, wxT( "stroke_solid.png" ), -1, wxT( "light" ) },
{ BITMAPS::tune_diff_pair_length_legend, wxT( "tune_diff_pair_length_legend.png" ), -1, wxT( "light" ) },
@ -1055,6 +1056,7 @@ const std::vector<BITMAP_INFO> g_BitmapInfo = {
{ BITMAPS::stripline, wxT( "stripline_dark.png" ), -1, wxT( "dark" ) },
{ BITMAPS::stroke_dash, wxT( "stroke_dash_dark.png" ), -1, wxT( "dark" ) },
{ BITMAPS::stroke_dashdot, wxT( "stroke_dashdot_dark.png" ), -1, wxT( "dark" ) },
{ BITMAPS::stroke_dashdotdot, wxT( "stroke_dashdotdot_dark.png" ), -1, wxT( "dark" ) },
{ BITMAPS::stroke_dot, wxT( "stroke_dot_dark.png" ), -1, wxT( "dark" ) },
{ BITMAPS::stroke_solid, wxT( "stroke_solid_dark.png" ), -1, wxT( "dark" ) },
{ BITMAPS::tune_diff_pair_length_legend, wxT( "tune_diff_pair_length_legend_dark.png" ), -1, wxT( "dark" ) },

View File

@ -519,6 +519,7 @@ enum class BITMAPS : unsigned int
stripline,
stroke_dash,
stroke_dashdot,
stroke_dashdotdot,
stroke_dot,
stroke_solid,
swap_layer,

View File

@ -50,7 +50,8 @@ enum class PLOT_DASH_TYPE
DASH,
DOT,
DASHDOT,
LAST_TYPE = DASHDOT
DASHDOTDOT,
LAST_TYPE = DASHDOTDOT
};
@ -69,7 +70,8 @@ const std::map<PLOT_DASH_TYPE, struct lineTypeStruct> lineTypeNames =
{ PLOT_DASH_TYPE::SOLID, { _( "Solid" ), BITMAPS::stroke_solid } },
{ PLOT_DASH_TYPE::DASH, { _( "Dashed" ), BITMAPS::stroke_dash } },
{ PLOT_DASH_TYPE::DOT, { _( "Dotted" ), BITMAPS::stroke_dot } },
{ PLOT_DASH_TYPE::DASHDOT, { _( "Dash-Dot" ), BITMAPS::stroke_dashdot } }
{ PLOT_DASH_TYPE::DASHDOT, { _( "Dash-Dot" ), BITMAPS::stroke_dashdot } },
{ PLOT_DASH_TYPE::DASHDOTDOT, { _( "Dash-Dot-Dot" ), BITMAPS::stroke_dashdotdot } }
};