BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit f3f21a92bedc48064aeffdd24404bfd604d24932
parent c11117d3569ce62941b884ec22fa484055b60303
Author: Matt Demanett <matt@demanett.net>
Date:   Thu,  1 Oct 2020 22:03:36 -0400

ASX: chainable 8-step expander for ADDR-SEQ. #139

Diffstat:
MREADME-prerelease.md | 10+++++++++-
Mplugin.json | 11+++++++++++
Mres-pp/AddrSeq-dark-pp.svg | 257+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mres-pp/AddrSeq-lowcontrast-pp.svg | 259+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mres-pp/AddrSeq-pp.svg | 257+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Ares-pp/AddrSeqX-dark-pp.svg | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/AddrSeqX-lowcontrast-pp.svg | 474+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/AddrSeqX-pp.svg | 410+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mres-src/AddrSeq-src.svg | 46++++++++--------------------------------------
Ares-src/AddrSeqX-src.svg | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Mres-src/defs.svg | 40++++++++++++++++++++++++++++++++++++++++
Mres/AddrSeq-dark.svg | 0
Mres/AddrSeq-lowcontrast.svg | 0
Mres/AddrSeq.svg | 0
Ares/AddrSeqX-dark.svg | 0
Ares/AddrSeqX-lowcontrast.svg | 0
Ares/AddrSeqX.svg | 0
Msrc/AddrSeq.cpp | 47+++++++++++++++++++++++++++--------------------
Msrc/AddrSeq.hpp | 97++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
Asrc/AddrSeqX.cpp | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/AddrSeqX.hpp | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/AddrSeq_shared.hpp | 35+++++++++++++++++++++++++++++++++++
Msrc/Pgmr.cpp | 51++++++++++++++++++++++++---------------------------
Msrc/Pgmr.hpp | 26+++++++++++---------------
Msrc/PgmrX.cpp | 18+++---------------
Msrc/PgmrX.hpp | 24++++++++++--------------
Msrc/Pgmr_shared.cpp | 70----------------------------------------------------------------------
Msrc/Pgmr_shared.hpp | 37+------------------------------------
Msrc/addressable_sequence.cpp | 18+++++++++++++++---
Msrc/addressable_sequence.hpp | 6+-----
Msrc/bogaudio.cpp | 2++
Msrc/expanders.hpp | 162+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32 files changed, 2660 insertions(+), 369 deletions(-)

diff --git a/README-prerelease.md b/README-prerelease.md @@ -899,12 +899,20 @@ _Polyphony:_ Same as 8:1. #### <a name="addrseq"></a> ADDR-SEQ -ADDR-SEQ is an 8-step sequencer where the step values are set by 8 knobs (with default output range of +/-10V). It has the same clocked or voltage-addressed control circuit as 8:1 and 1:8. +ADDR-SEQ is an 8-step sequencer where the step values are set by 8 knobs (with default output range of +/-10V). It has the same clocked or voltage-addressed control circuit as 8:1 and 1:8. It can be expanded to more steps, 8 at a time, with <a href="#addrseqx">ASX</a>. The output range of the knobs may be set on the context (right-click) menu to a variety of bipolar (e.g. +/-5V) and unipolar ranges (e.g. 0-5V). _Polyphony:_ Same as 8:1. +#### <a name="addrseqx"></a> ASX + +ASX is a chainable expander for <a href="addrseq">ADDR-SEQ</a>, adding 8 steps to the base sequence. + +When ASXs are added to an ADDR-SEQ, ADDR-SEQ's STEPS and SELECT knobs (and select CV input) work over the total number of steps, including the expanders. The knob dials will still read 1-8, but the knob will set the step length (or step selection) over the full count of steps. The parameter tooltips, if enabled, will show the real values. + +Each ASX in a chain must be positioned to the right of, and adjacent to, the previous ASX in the chain, or the base ADDR-SEQ module. See <a href="#expanders">notes on expanders</a>. + ![Sequencers screenshot](doc/www/sequencers2.png) #### <a name="pgmr"></a> PGMR diff --git a/plugin.json b/plugin.json @@ -740,6 +740,17 @@ ] }, { + "slug": "Bogaudio-AddrSeqX", + "name": "ASX", + "description": "8-step chainable expander for ADDR-SEQ", + "manualUrl": "https://github.com/bogaudio/BogaudioModules/blob/master/README.md#addrseqx", + "tags": [ + "Sequencer", + "Expander", + "Polyphonic" + ] + }, + { "slug": "Bogaudio-Pgmr", "name": "PGMR", "description": "4-step programmer and sequencer", diff --git a/res-pp/AddrSeq-dark-pp.svg b/res-pp/AddrSeq-dark-pp.svg @@ -17,6 +17,9 @@ text.brand { polyline { stroke: #333; } +polyline.guide { + stroke: #0f0; +} path { stroke: #333; } @@ -135,36 +138,6 @@ polyline.knob-tick { } </style> - <defs> - <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px"> - <g transform="translate(20 20)"> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> - <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> - - <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> - - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> - </g> - </symbol> - </defs> - <rect class="module-background background-fill" width="90.0" height="380.0"/> @@ -289,7 +262,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 -8)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -302,7 +301,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 33.3)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -315,7 +340,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 74.6)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -328,7 +379,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 115.9)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -341,7 +418,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 157.1)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -354,7 +457,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 198.4)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -367,7 +496,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 239.7)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -380,7 +535,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 281)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> diff --git a/res-pp/AddrSeq-lowcontrast-pp.svg b/res-pp/AddrSeq-lowcontrast-pp.svg @@ -17,6 +17,9 @@ text.brand { polyline { stroke: #333; } +polyline.guide { + stroke: #0f0; +} path { stroke: #333; } @@ -115,7 +118,7 @@ polyline.output-label, path.output-label { } circle.port-rim { - stroke: #ccc; + stroke: #bbb; } circle.port-barrel { stroke: #222; @@ -135,36 +138,6 @@ polyline.knob-tick { } </style> - <defs> - <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px"> - <g transform="translate(20 20)"> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> - <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> - - <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> - - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> - </g> - </symbol> - </defs> - <rect class="module-background background-fill" width="90.0" height="380.0"/> @@ -289,7 +262,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 -8)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -302,7 +301,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 33.3)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -315,7 +340,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 74.6)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -328,7 +379,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 115.9)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -341,7 +418,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 157.1)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -354,7 +457,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 198.4)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -367,7 +496,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 239.7)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -380,7 +535,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 281)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> diff --git a/res-pp/AddrSeq-pp.svg b/res-pp/AddrSeq-pp.svg @@ -17,6 +17,9 @@ text.brand { polyline { stroke: #333; } +polyline.guide { + stroke: #0f0; +} path { stroke: #333; } @@ -71,36 +74,6 @@ polyline.knob-tick { } </style> - <defs> - <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px"> - <g transform="translate(20 20)"> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> - <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> - - <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> - - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> - </g> - </symbol> - </defs> - <rect class="module-background background-fill" width="90.0" height="380.0"/> @@ -225,7 +198,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 -8)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -238,7 +237,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 33.3)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -251,7 +276,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 74.6)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -264,7 +315,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 115.9)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -277,7 +354,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 157.1)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -290,7 +393,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 198.4)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -303,7 +432,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 239.7)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> @@ -316,7 +471,33 @@ polyline.knob-tick { <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> </g> </svg></g> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)" href="#dial-bipolar-addrseq"/> + <g transform="translate(-3 281)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT"> <rect width="6.4" height="6.4" fill="#0f0"/> diff --git a/res-pp/AddrSeqX-dark-pp.svg b/res-pp/AddrSeqX-dark-pp.svg @@ -0,0 +1,474 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="45.0" height="380.0" viewBox="0 0 45.0 380.0"> + <style>text { + fill: #333; + font-family: 'Roboto', sans-serif; + font-weight: bold; +} +text.title { + font-family: 'Comfortaa', sans-serif; + font-weight: normal; +} +text.brand { + font-family: 'Audiowide', sans-serif; + font-weight: bold; +} + +polyline { + stroke: #333; +} +polyline.guide { + stroke: #0f0; +} +path { + stroke: #333; +} + +rect.module-background, .background-fill { + fill: #ddd; +} +polyline.module-border-inner { + stroke: #e4e4e4; +} +polyline.module-border-middle { + stroke: #ebebeb; +} +polyline.module-border-outer { + stroke: #f2f2f2; +} + +g.io-group { +} +rect.input-background, rect.input-background-filler { + fill: #fafafa; +} +rect.output-background, rect.output-background-filler { + fill: #bbb; +} +text.input-label, text.output-label { + /* font-size: 6pt; */ +} +polyline.input-label, polyline.output-label { +} +path.input-label, path.output-label { +} + +circle.port-rim { + stroke: #f0f0f0; +} +circle.port-barrel { + stroke: #222; + fill: #222; +} +circle.knob-center { + fill: #eee; +} +circle.knob-rim { + fill: #333; +} +circle.knob-tick { + fill: #fff; +} +polyline.knob-tick { + stroke: #fff; +} + + +text { + fill: #eee; +} + +polyline { + stroke: #ccc; +} +path { + stroke: #ccc; +} + +rect.module-background, .background-fill { + fill: #111; +} +polyline.module-border-inner { + stroke: #191919; +} +polyline.module-border-middle { + stroke: #111; +} +polyline.module-border-outer { + stroke: #000; +} + +rect.input-background, rect.input-background-filler { + fill: #aaa; +} +rect.output-background, rect.output-background-filler { + fill: #666; +} +text.input-label { + fill: #222; +} +polyline.input-label, path.input-label { + stroke: #222; +} +text.output-label { + fill: #ddd; +} +polyline.output-label, path.output-label { + stroke: #ddd; +} + +circle.port-rim { + stroke: #c0c0c0; +} +circle.port-barrel { + stroke: #222; + fill: #222; +} +circle.knob-center { + fill: #888; +} +circle.knob-rim { + fill: #444; +} +circle.knob-tick { + fill: #fff; +} +polyline.knob-tick { + stroke: #fff; +} +</style> + + + + <rect class="module-background background-fill" width="45.0" height="380.0"/> + + + <polyline class="module-border-inner" points="1,1 44.0,1 44.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/> + <polyline class="module-border-middle" points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/> + <polyline class="module-border-outer" points="0,0 45.0,0 45.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/> + + <text class="title" font-size="7pt" letter-spacing="2px" text-anchor="end" transform="translate(40.0 13)">ASX</text> + <g transform="translate(3 363.0)"> + <g transform="translate(0 12)"> + <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text> + <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/> + </g> + </g> + + + + + <g transform="translate(5.5 32)"> + <g transform="translate(9 4)"><svg id="OUT1_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 -8)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> + <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 45.3)"><svg id="OUT2_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 33.3)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> + <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 86.6)"><svg id="OUT3_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 74.6)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> + <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 127.9)"><svg id="OUT4_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 115.9)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> + <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 169.1)"><svg id="OUT5_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 157.1)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> + <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 210.4)"><svg id="OUT6_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 198.4)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> + <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 251.7)"><svg id="OUT7_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 239.7)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> + <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 293)"><svg id="OUT8_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 281)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> + <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + </g> +</svg> diff --git a/res-pp/AddrSeqX-lowcontrast-pp.svg b/res-pp/AddrSeqX-lowcontrast-pp.svg @@ -0,0 +1,474 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="45.0" height="380.0" viewBox="0 0 45.0 380.0"> + <style>text { + fill: #333; + font-family: 'Roboto', sans-serif; + font-weight: bold; +} +text.title { + font-family: 'Comfortaa', sans-serif; + font-weight: normal; +} +text.brand { + font-family: 'Audiowide', sans-serif; + font-weight: bold; +} + +polyline { + stroke: #333; +} +polyline.guide { + stroke: #0f0; +} +path { + stroke: #333; +} + +rect.module-background, .background-fill { + fill: #ddd; +} +polyline.module-border-inner { + stroke: #e4e4e4; +} +polyline.module-border-middle { + stroke: #ebebeb; +} +polyline.module-border-outer { + stroke: #f2f2f2; +} + +g.io-group { +} +rect.input-background, rect.input-background-filler { + fill: #fafafa; +} +rect.output-background, rect.output-background-filler { + fill: #bbb; +} +text.input-label, text.output-label { + /* font-size: 6pt; */ +} +polyline.input-label, polyline.output-label { +} +path.input-label, path.output-label { +} + +circle.port-rim { + stroke: #f0f0f0; +} +circle.port-barrel { + stroke: #222; + fill: #222; +} +circle.knob-center { + fill: #eee; +} +circle.knob-rim { + fill: #333; +} +circle.knob-tick { + fill: #fff; +} +polyline.knob-tick { + stroke: #fff; +} + + +text { + fill: #b3b3b3; +} + +polyline { + stroke: #b3b3b3; +} +path { + stroke: #b3b3b3; +} + +rect.module-background, .background-fill { + fill: #333; +} +polyline.module-border-inner { + stroke: #191919; +} +polyline.module-border-middle { + stroke: #111; +} +polyline.module-border-outer { + stroke: #000; +} + +rect.input-background, rect.input-background-filler { + fill: #b3b3b3; +} +rect.output-background, rect.output-background-filler { + fill: #888; +} +text.input-label { + fill: #666; +} +polyline.input-label, path.input-label { + stroke: #666; +} +text.output-label { + fill: #ccc; +} +polyline.output-label, path.output-label { + stroke: #ccc; +} + +circle.port-rim { + stroke: #bbb; +} +circle.port-barrel { + stroke: #222; + fill: #222; +} +circle.knob-center { + fill: #bbb; +} +circle.knob-rim { + fill: #555; +} +circle.knob-tick { + fill: #fff; +} +polyline.knob-tick { + stroke: #fff; +} +</style> + + + + <rect class="module-background background-fill" width="45.0" height="380.0"/> + + + <polyline class="module-border-inner" points="1,1 44.0,1 44.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/> + <polyline class="module-border-middle" points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/> + <polyline class="module-border-outer" points="0,0 45.0,0 45.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/> + + <text class="title" font-size="7pt" letter-spacing="2px" text-anchor="end" transform="translate(40.0 13)">ASX</text> + <g transform="translate(3 363.0)"> + <g transform="translate(0 12)"> + <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text> + <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/> + </g> + </g> + + + + + <g transform="translate(5.5 32)"> + <g transform="translate(9 4)"><svg id="OUT1_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 -8)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> + <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 45.3)"><svg id="OUT2_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 33.3)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> + <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 86.6)"><svg id="OUT3_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 74.6)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> + <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 127.9)"><svg id="OUT4_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 115.9)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> + <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 169.1)"><svg id="OUT5_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 157.1)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> + <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 210.4)"><svg id="OUT6_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 198.4)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> + <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 251.7)"><svg id="OUT7_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 239.7)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> + <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 293)"><svg id="OUT8_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 281)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> + <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + </g> +</svg> diff --git a/res-pp/AddrSeqX-pp.svg b/res-pp/AddrSeqX-pp.svg @@ -0,0 +1,410 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="45.0" height="380.0" viewBox="0 0 45.0 380.0"> + <style>text { + fill: #333; + font-family: 'Roboto', sans-serif; + font-weight: bold; +} +text.title { + font-family: 'Comfortaa', sans-serif; + font-weight: normal; +} +text.brand { + font-family: 'Audiowide', sans-serif; + font-weight: bold; +} + +polyline { + stroke: #333; +} +polyline.guide { + stroke: #0f0; +} +path { + stroke: #333; +} + +rect.module-background, .background-fill { + fill: #ddd; +} +polyline.module-border-inner { + stroke: #e4e4e4; +} +polyline.module-border-middle { + stroke: #ebebeb; +} +polyline.module-border-outer { + stroke: #f2f2f2; +} + +g.io-group { +} +rect.input-background, rect.input-background-filler { + fill: #fafafa; +} +rect.output-background, rect.output-background-filler { + fill: #bbb; +} +text.input-label, text.output-label { + /* font-size: 6pt; */ +} +polyline.input-label, polyline.output-label { +} +path.input-label, path.output-label { +} + +circle.port-rim { + stroke: #f0f0f0; +} +circle.port-barrel { + stroke: #222; + fill: #222; +} +circle.knob-center { + fill: #eee; +} +circle.knob-rim { + fill: #333; +} +circle.knob-tick { + fill: #fff; +} +polyline.knob-tick { + stroke: #fff; +} +</style> + + + + <rect class="module-background background-fill" width="45.0" height="380.0"/> + + + <polyline class="module-border-inner" points="1,1 44.0,1 44.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/> + <polyline class="module-border-middle" points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/> + <polyline class="module-border-outer" points="0,0 45.0,0 45.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/> + + <text class="title" font-size="7pt" letter-spacing="2px" text-anchor="end" transform="translate(40.0 13)">ASX</text> + <g transform="translate(3 363.0)"> + <g transform="translate(0 12)"> + <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text> + <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/> + </g> + </g> + + + + + <g transform="translate(5.5 32)"> + <g transform="translate(9 4)"><svg id="OUT1_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 -8)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> + <g transform="translate(17 26.5)"><svg id="OUT1_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 45.3)"><svg id="OUT2_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 33.3)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> + <g transform="translate(17 67.8)"><svg id="OUT2_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 86.6)"><svg id="OUT3_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 74.6)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> + <g transform="translate(17 109.1)"><svg id="OUT3_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 127.9)"><svg id="OUT4_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 115.9)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> + <g transform="translate(17 150.4)"><svg id="OUT4_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 169.1)"><svg id="OUT5_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 157.1)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> + <g transform="translate(17 191.6)"><svg id="OUT5_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 210.4)"><svg id="OUT6_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 198.4)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> + <g transform="translate(17 232.9)"><svg id="OUT6_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 251.7)"><svg id="OUT7_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 239.7)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> + <g transform="translate(17 274.2)"><svg id="OUT7_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + + <g transform="translate(9 293)"><svg id="OUT8_PARAM"> + <g transform="translate(8 8)"> + <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/> + <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/> + <circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/> + </g> + </svg></g> + <g transform="translate(-3 281)"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </g> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> + <g transform="translate(17 315.5)"><svg id="OUT8_LIGHT"> + <rect width="6.4" height="6.4" fill="#0f0"/> + </svg></g> + </g> +</svg> diff --git a/res-src/AddrSeq-src.svg b/res-src/AddrSeq-src.svg @@ -2,36 +2,6 @@ <module hp="6"> <style/> - <defs> - <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px"> - <g transform="translate(20 20)"> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> - <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> - - <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> - - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> - <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> - <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> - </g> - </symbol> - </defs> - <def xlink:href="#module6" var-name="ADDR-SEQ" var-letterspacing="0.5"/> <g class="io-group" transform="translate(6.5 32)"> @@ -79,42 +49,42 @@ <g transform="translate(49.5 32)"> <def id="OUT1_PARAM" xlink:href="#knob16" transform="translate(9 4)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> <def id="OUT1_LIGHT" xlink:href="#light-small" transform="translate(17 26.5)"/> <def id="OUT2_PARAM" xlink:href="#knob16" transform="translate(9 45.3)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> <def id="OUT2_LIGHT" xlink:href="#light-small" transform="translate(17 67.8)"/> <def id="OUT3_PARAM" xlink:href="#knob16" transform="translate(9 86.6)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> <def id="OUT3_LIGHT" xlink:href="#light-small" transform="translate(17 109.1)"/> <def id="OUT4_PARAM" xlink:href="#knob16" transform="translate(9 127.9)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> <def id="OUT4_LIGHT" xlink:href="#light-small" transform="translate(17 150.4)"/> <def id="OUT5_PARAM" xlink:href="#knob16" transform="translate(9 169.1)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> <def id="OUT5_LIGHT" xlink:href="#light-small" transform="translate(17 191.6)"/> <def id="OUT6_PARAM" xlink:href="#knob16" transform="translate(9 210.4)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> <def id="OUT6_LIGHT" xlink:href="#light-small" transform="translate(17 232.9)"/> <def id="OUT7_PARAM" xlink:href="#knob16" transform="translate(9 251.7)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> <def id="OUT7_LIGHT" xlink:href="#light-small" transform="translate(17 274.2)"/> <def id="OUT8_PARAM" xlink:href="#knob16" transform="translate(9 293)"/> - <use xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)"/> <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> <def id="OUT8_LIGHT" xlink:href="#light-small" transform="translate(17 315.5)"/> </g> diff --git a/res-src/AddrSeqX-src.svg b/res-src/AddrSeqX-src.svg @@ -0,0 +1,49 @@ +<module hp="3"> + <style/> + + <def xlink:href="#module3h" var-name="ASX"/> + + <!-- <polyline class="guide" points="0,0 0,380" stroke-width="1" fill="none" transform="translate($width/2.0 0)" /> --> + + <g transform="translate(5.5 32)"> + <def id="OUT1_PARAM" xlink:href="#knob16" transform="translate(9 4)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 -8)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 32)">1</text> + <def id="OUT1_LIGHT" xlink:href="#light-small" transform="translate(17 26.5)"/> + + <def id="OUT2_PARAM" xlink:href="#knob16" transform="translate(9 45.3)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 33.3)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 73.3)">2</text> + <def id="OUT2_LIGHT" xlink:href="#light-small" transform="translate(17 67.8)"/> + + <def id="OUT3_PARAM" xlink:href="#knob16" transform="translate(9 86.6)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 74.6)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 114.6)">3</text> + <def id="OUT3_LIGHT" xlink:href="#light-small" transform="translate(17 109.1)"/> + + <def id="OUT4_PARAM" xlink:href="#knob16" transform="translate(9 127.9)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 115.9)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 155.9)">4</text> + <def id="OUT4_LIGHT" xlink:href="#light-small" transform="translate(17 150.4)"/> + + <def id="OUT5_PARAM" xlink:href="#knob16" transform="translate(9 169.1)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 157.1)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 197.1)">5</text> + <def id="OUT5_LIGHT" xlink:href="#light-small" transform="translate(17 191.6)"/> + + <def id="OUT6_PARAM" xlink:href="#knob16" transform="translate(9 210.4)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 198.4)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 238.4)">6</text> + <def id="OUT6_LIGHT" xlink:href="#light-small" transform="translate(17 232.9)"/> + + <def id="OUT7_PARAM" xlink:href="#knob16" transform="translate(9 251.7)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 239.7)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 279.7)">7</text> + <def id="OUT7_LIGHT" xlink:href="#light-small" transform="translate(17 274.2)"/> + + <def id="OUT8_PARAM" xlink:href="#knob16" transform="translate(9 293)"/> + <def xlink:href="#dial-bipolar-addrseq" transform="translate(-3 281)"/> + <text font-size="5pt" letter-spacing="2px" transform="translate(11 321)">8</text> + <def id="OUT8_LIGHT" xlink:href="#light-small" transform="translate(17 315.5)"/> + </g> +</module> diff --git a/res-src/defs.svg b/res-src/defs.svg @@ -63,6 +63,18 @@ </g> </symbol> + <symbol id="module3h"> + <def xlink:href="#module-background"/> + <def xlink:href="#module-border"/> + <text class="title" font-size="7pt" letter-spacing="${letterspacing}px" default-letterspacing="2" text-anchor="end" transform="translate($width-5 13)">$name</text> + <g transform="translate(3 $height-17)"> + <g transform="translate(0 12)"> + <text class="brand" font-size="7pt" letter-spacing="1.5px">BGA</text> + <rect class="background-fill" width="3.0" height="3" fill="#ddd" transform="translate(10.5 -5)"/> + </g> + </g> + </symbol> + <symbol id="button" viewBox="0 0 18px 18px"> <g transform="translate(9 9)"> <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/> @@ -251,6 +263,34 @@ </g> </symbol> + <symbol id="dial-bipolar-addrseq" viewBox="0 0 40px 40px"> + <g transform="translate(20 20)"> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-240) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-225) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-210) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-195) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-180) translate(10 0)"/> + <polyline points="0,0 4.0,0" stroke-width="1.0" transform="rotate(-165) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-150) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-135) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-120) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-105) translate(10 0)"/> + + <polyline points="0,0 5,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> + + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-75) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-60) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-45) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-30) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1.0" transform="rotate(-15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(0) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(15) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(30) translate(10 0)"/> + <polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(45) translate(10 0)"/> + <polyline points="0,0 4,0" stroke-width="1" transform="rotate(60) translate(10 0)"/> + </g> + </symbol> + <symbol id="dial-centertick" viewBox="0 0 40px 40px"> <g transform="translate(20 20)"> <polyline points="0,0 4,0" stroke-width="1" transform="rotate(-90) translate(10 0)"/> diff --git a/res/AddrSeq-dark.svg b/res/AddrSeq-dark.svg Binary files differ. diff --git a/res/AddrSeq-lowcontrast.svg b/res/AddrSeq-lowcontrast.svg Binary files differ. diff --git a/res/AddrSeq.svg b/res/AddrSeq.svg Binary files differ. diff --git a/res/AddrSeqX-dark.svg b/res/AddrSeqX-dark.svg Binary files differ. diff --git a/res/AddrSeqX-lowcontrast.svg b/res/AddrSeqX-lowcontrast.svg Binary files differ. diff --git a/res/AddrSeqX.svg b/res/AddrSeqX.svg Binary files differ. diff --git a/src/AddrSeq.cpp b/src/AddrSeq.cpp @@ -2,10 +2,26 @@ #include "AddrSeq.hpp" void AddrSeq::processAlways(const ProcessArgs& args) { - std::fill(_lightSums, _lightSums + 8, 0.0f); + if (expanderConnected()) { + AddrSeqExpanderMessage* te = toExpander(); + te->baseID = _id; + te->position = 1; + te->rangeOffset = _rangeOffset; + te->rangeScale = _rangeScale; + } } void AddrSeq::processChannel(const ProcessArgs& args, int c) { + std::lock_guard<SpinLock> lock(_elementsLock); + std::vector<AddrSeqStep*>& steps = _elements; + int stepsN = steps.size(); + + if (c == 0) { + for (int i = 0; i < stepsN; ++i) { + steps[i]->lightSum = 0.0f; + } + } + int step = nextStep( c, &inputs[RESET_INPUT], @@ -13,23 +29,22 @@ void AddrSeq::processChannel(const ProcessArgs& args, int c) { &params[STEPS_PARAM], params[DIRECTION_PARAM], &params[SELECT_PARAM], - inputs[SELECT_INPUT] + inputs[SELECT_INPUT], + stepsN ); - float out = params[OUT1_PARAM + step].getValue(); + float out = steps[step]->param.getValue(); out += _rangeOffset; out *= _rangeScale; outputs[OUT_OUTPUT].setChannels(_channels); outputs[OUT_OUTPUT].setVoltage(out, c); - for (int i = 0; i < 8; ++i) { - _lightSums[i] += step == i; - } -} + steps[step]->lightSum += 1; -void AddrSeq::postProcessAlways(const ProcessArgs& args) { - for (int i = 0; i < 8; ++i) { - lights[OUT1_LIGHT + i].value = _lightSums[i] * _inverseChannels; + if (c == _channels - 1) { + for (int i = 0; i < stepsN; ++i) { + steps[i]->light.value = steps[i]->lightSum * _inverseChannels; + } } } @@ -71,17 +86,9 @@ struct AddrSeqWidget : AddressableSequenceModuleWidget { auto out8LightPosition = Vec(66.5, 347.5); // end generated by svg_widgets.rb - { - auto w = createParam<Knob16>(stepsParamPosition, module, AddrSeq::STEPS_PARAM); - dynamic_cast<Knob*>(w)->snap = true; - addParam(w); - } + addParam(createParam<Knob16>(stepsParamPosition, module, AddrSeq::STEPS_PARAM)); addParam(createParam<SliderSwitch2State14>(directionParamPosition, module, AddrSeq::DIRECTION_PARAM)); - { - auto w = createParam<Knob29>(selectParamPosition, module, AddrSeq::SELECT_PARAM); - dynamic_cast<Knob*>(w)->snap = true; - addParam(w); - } + addParam(createParam<Knob29>(selectParamPosition, module, AddrSeq::SELECT_PARAM)); addParam(createParam<Knob16>(out1ParamPosition, module, AddrSeq::OUT1_PARAM)); addParam(createParam<Knob16>(out2ParamPosition, module, AddrSeq::OUT2_PARAM)); addParam(createParam<Knob16>(out3ParamPosition, module, AddrSeq::OUT3_PARAM)); diff --git a/src/AddrSeq.hpp b/src/AddrSeq.hpp @@ -1,13 +1,12 @@ #pragma once -#include "bogaudio.hpp" -#include "addressable_sequence.hpp" - -extern Model* modelAddrSeq; +#include "AddrSeq_shared.hpp" namespace bogaudio { -struct AddrSeq : OutputRangeAddressableSequenceModule { +typedef ChainableExpandableModule<AddrSeqExpanderMessage, AddrSeqStep, 8, OutputRangeAddressableSequenceModule> AddrSeqBase; + +struct AddrSeq : AddrSeqBase { enum ParamsIds { STEPS_PARAM, DIRECTION_PARAM, @@ -47,13 +46,79 @@ struct AddrSeq : OutputRangeAddressableSequenceModule { NUM_LIGHTS }; - float _lightSums[8] {}; + struct StepsParamQuantity : ParamQuantity { + float getDisplayValue() override { + float v = getValue(); + if (!module) { + return v; + } + + auto m = dynamic_cast<AddrSeq*>(module); + std::lock_guard<SpinLock> lock(m->_elementsLock); + int n = m->_elements.size(); + v = clamp(v, 1.0f, 8.0f); + v -= 1.0f; + v /= 7.0f; + v *= n - 1; + v += 1.0f; + return (int)v; + } + + void setDisplayValue(float dv) override { + if (!module) { + return; + } + + auto m = dynamic_cast<AddrSeq*>(module); + std::lock_guard<SpinLock> lock(m->_elementsLock); + int n = m->_elements.size(); + dv = clamp(dv, 1.0f, (float)n); + dv -= 1.0f; + dv /= (float)(n - 1); + dv *= 7.0f; + dv += 1.0f; + setValue(dv); + } + }; + + struct SelectParamQuantity : ParamQuantity { + float getDisplayValue() override { + float v = getValue(); + if (!module) { + return v; + } + + auto m = dynamic_cast<AddrSeq*>(module); + std::lock_guard<SpinLock> lock(m->_elementsLock); + int n = m->_elements.size(); + v = clamp(v, 0.0f, 7.0f); + v /= 7.0f; + v *= n - 1; + v += 1.0f; + return (int)v; + } + + void setDisplayValue(float dv) override { + if (!module) { + return; + } - AddrSeq() { + auto m = dynamic_cast<AddrSeq*>(module); + std::lock_guard<SpinLock> lock(m->_elementsLock); + int n = m->_elements.size(); + dv = clamp(dv, 1.0f, (float)n); + dv -= 1.0f; + dv /= (float)(n - 1); + dv *= 7.0f; + setValue(dv); + } + }; + + AddrSeq() : AddrSeqBase(AddrSeqRegistry::registry()) { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - configParam(STEPS_PARAM, 1.0f, 8.0f, 8.0f, "Steps"); + configParam<StepsParamQuantity>(STEPS_PARAM, 1.0f, 8.0f, 8.0f, "Steps"); configParam(DIRECTION_PARAM, 0.0f, 1.0f, 1.0f, "Direction"); - configParam(SELECT_PARAM, 0.0f, 7.0f, 0.0f, "Select step"); + configParam<SelectParamQuantity>(SELECT_PARAM, 0.0f, 7.0f, 0.0f, "Select step"); configParam<OutputRangeParamQuantity>(OUT1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1", " V"); configParam<OutputRangeParamQuantity>(OUT2_PARAM, -1.0f, 1.0f, 0.0f, "Step 2", " V"); configParam<OutputRangeParamQuantity>(OUT3_PARAM, -1.0f, 1.0f, 0.0f, "Step 3", " V"); @@ -63,11 +128,23 @@ struct AddrSeq : OutputRangeAddressableSequenceModule { configParam<OutputRangeParamQuantity>(OUT7_PARAM, -1.0f, 1.0f, 0.0f, "Step 7", " V"); configParam<OutputRangeParamQuantity>(OUT8_PARAM, -1.0f, 1.0f, 0.0f, "Step 8", " V"); setInputIDs(CLOCK_INPUT, SELECT_INPUT); + + setLocalElements({ + new AddrSeqStep(params[OUT1_PARAM], lights[OUT1_LIGHT]), + new AddrSeqStep(params[OUT2_PARAM], lights[OUT2_LIGHT]), + new AddrSeqStep(params[OUT3_PARAM], lights[OUT3_LIGHT]), + new AddrSeqStep(params[OUT4_PARAM], lights[OUT4_LIGHT]), + new AddrSeqStep(params[OUT5_PARAM], lights[OUT5_LIGHT]), + new AddrSeqStep(params[OUT6_PARAM], lights[OUT6_LIGHT]), + new AddrSeqStep(params[OUT7_PARAM], lights[OUT7_LIGHT]), + new AddrSeqStep(params[OUT8_PARAM], lights[OUT8_LIGHT]) + }); + registerBase(); + setExpanderModelPredicate([](Model* m) { return m == modelAddrSeqX; }); } void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/AddrSeqX.cpp b/src/AddrSeqX.cpp @@ -0,0 +1,79 @@ + +#include "AddrSeqX.hpp" + +void AddrSeqX::processAlways(const ProcessArgs& args) { + int position = 0; + int baseID = 0; + if (baseConnected()) { + AddrSeqExpanderMessage* bm = fromBase(); + baseID = bm->baseID; + position = bm->position; + _rangeOffset = bm->rangeOffset; + _rangeScale = bm->rangeScale; + } + setBaseIDAndPosition(baseID, position); + if (_position < 1) { + for (int i = 0; i < 4; ++i) { + _localElements[i]->light.value = 0.0f; + } + } + + if (expanderConnected()) { + AddrSeqExpanderMessage* te = toExpander(); + te->baseID = _baseID; + te->position = _position > 0 ? _position + 1 : 0; + te->rangeOffset = _rangeOffset; + te->rangeScale = _rangeScale; + } +} + +struct AddrSeqXWidget : BGModuleWidget { + static constexpr int hp = 3; + + AddrSeqXWidget(AddrSeqX* module) { + setModule(module); + box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); + setPanel(box.size, "AddrSeqX"); + createScrews(); + + // generated by svg_widgets.rb + auto out1ParamPosition = Vec(14.5, 36.0); + auto out2ParamPosition = Vec(14.5, 77.3); + auto out3ParamPosition = Vec(14.5, 118.6); + auto out4ParamPosition = Vec(14.5, 159.9); + auto out5ParamPosition = Vec(14.5, 201.1); + auto out6ParamPosition = Vec(14.5, 242.4); + auto out7ParamPosition = Vec(14.5, 283.7); + auto out8ParamPosition = Vec(14.5, 325.0); + + auto out1LightPosition = Vec(22.5, 58.5); + auto out2LightPosition = Vec(22.5, 99.8); + auto out3LightPosition = Vec(22.5, 141.1); + auto out4LightPosition = Vec(22.5, 182.4); + auto out5LightPosition = Vec(22.5, 223.6); + auto out6LightPosition = Vec(22.5, 264.9); + auto out7LightPosition = Vec(22.5, 306.2); + auto out8LightPosition = Vec(22.5, 347.5); + // end generated by svg_widgets.rb + + addParam(createParam<Knob16>(out1ParamPosition, module, AddrSeqX::OUT1_PARAM)); + addParam(createParam<Knob16>(out2ParamPosition, module, AddrSeqX::OUT2_PARAM)); + addParam(createParam<Knob16>(out3ParamPosition, module, AddrSeqX::OUT3_PARAM)); + addParam(createParam<Knob16>(out4ParamPosition, module, AddrSeqX::OUT4_PARAM)); + addParam(createParam<Knob16>(out5ParamPosition, module, AddrSeqX::OUT5_PARAM)); + addParam(createParam<Knob16>(out6ParamPosition, module, AddrSeqX::OUT6_PARAM)); + addParam(createParam<Knob16>(out7ParamPosition, module, AddrSeqX::OUT7_PARAM)); + addParam(createParam<Knob16>(out8ParamPosition, module, AddrSeqX::OUT8_PARAM)); + + addChild(createLight<SmallLight<GreenLight>>(out1LightPosition, module, AddrSeqX::OUT1_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out2LightPosition, module, AddrSeqX::OUT2_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out3LightPosition, module, AddrSeqX::OUT3_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out4LightPosition, module, AddrSeqX::OUT4_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out5LightPosition, module, AddrSeqX::OUT5_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out6LightPosition, module, AddrSeqX::OUT6_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out7LightPosition, module, AddrSeqX::OUT7_LIGHT)); + addChild(createLight<SmallLight<GreenLight>>(out8LightPosition, module, AddrSeqX::OUT8_LIGHT)); + } +}; + +Model* modelAddrSeqX = createModel<AddrSeqX, AddrSeqXWidget>("Bogaudio-AddrSeqX", "ASX", "8-step chainable expander for ADDR-SEQ", "Sequencer", "Expander", "Polyphonic"); diff --git a/src/AddrSeqX.hpp b/src/AddrSeqX.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include "AddrSeq_shared.hpp" + +namespace bogaudio { + +typedef ChainableExpanderModule<AddrSeqExpanderMessage, AddrSeqStep, 8, BGModule> AddrSeqXBase; + +struct AddrSeqX : AddrSeqXBase, OutputRange { + enum ParamsIds { + OUT1_PARAM, + OUT2_PARAM, + OUT3_PARAM, + OUT4_PARAM, + OUT5_PARAM, + OUT6_PARAM, + OUT7_PARAM, + OUT8_PARAM, + NUM_PARAMS + }; + + enum InputsIds { + NUM_INPUTS + }; + + enum OutputsIds { + NUM_OUTPUTS + }; + + enum LightsIds { + OUT1_LIGHT, + OUT2_LIGHT, + OUT3_LIGHT, + OUT4_LIGHT, + OUT5_LIGHT, + OUT6_LIGHT, + OUT7_LIGHT, + OUT8_LIGHT, + NUM_LIGHTS + }; + + AddrSeqX() : AddrSeqXBase(AddrSeqRegistry::registry()) { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); + configParam<OutputRangeParamQuantity>(OUT1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1", " V"); + configParam<OutputRangeParamQuantity>(OUT2_PARAM, -1.0f, 1.0f, 0.0f, "Step 2", " V"); + configParam<OutputRangeParamQuantity>(OUT3_PARAM, -1.0f, 1.0f, 0.0f, "Step 3", " V"); + configParam<OutputRangeParamQuantity>(OUT4_PARAM, -1.0f, 1.0f, 0.0f, "Step 4", " V"); + configParam<OutputRangeParamQuantity>(OUT5_PARAM, -1.0f, 1.0f, 0.0f, "Step 5", " V"); + configParam<OutputRangeParamQuantity>(OUT6_PARAM, -1.0f, 1.0f, 0.0f, "Step 6", " V"); + configParam<OutputRangeParamQuantity>(OUT7_PARAM, -1.0f, 1.0f, 0.0f, "Step 7", " V"); + configParam<OutputRangeParamQuantity>(OUT8_PARAM, -1.0f, 1.0f, 0.0f, "Step 8", " V"); + + setLocalElements({ + new AddrSeqStep(params[OUT1_PARAM], lights[OUT1_LIGHT]), + new AddrSeqStep(params[OUT2_PARAM], lights[OUT2_LIGHT]), + new AddrSeqStep(params[OUT3_PARAM], lights[OUT3_LIGHT]), + new AddrSeqStep(params[OUT4_PARAM], lights[OUT4_LIGHT]), + new AddrSeqStep(params[OUT5_PARAM], lights[OUT5_LIGHT]), + new AddrSeqStep(params[OUT6_PARAM], lights[OUT6_LIGHT]), + new AddrSeqStep(params[OUT7_PARAM], lights[OUT7_LIGHT]), + new AddrSeqStep(params[OUT8_PARAM], lights[OUT8_LIGHT]) + }); + setBaseModelPredicate([](Model* m) { return m == modelAddrSeq || m == modelAddrSeqX; }); + setExpanderModelPredicate([](Model* m) { return m == modelAddrSeqX; }); + } + + void processAlways(const ProcessArgs& args) override; +}; + +} // namespace bogaudio diff --git a/src/AddrSeq_shared.hpp b/src/AddrSeq_shared.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "bogaudio.hpp" +#include "addressable_sequence.hpp" +#include "expanders.hpp" + +extern Model* modelAddrSeq; +extern Model* modelAddrSeqX; + +namespace bogaudio { + +struct AddrSeqExpanderMessage : ExpanderMessage { + int baseID = -1; + int position = -1; + float rangeOffset = 0.0f; + float rangeScale = 10.0f; +}; + +struct AddrSeqStep { + Param& param; + Light& light; + float lightSum = 0.0f; + + AddrSeqStep( + Param& param, + Light& light + ) + : param(param) + , light(light) + {} +}; + +typedef ChainableRegistry<AddrSeqStep, 8> AddrSeqRegistry; + +} // namespace bogaudio diff --git a/src/Pgmr.cpp b/src/Pgmr.cpp @@ -4,14 +4,14 @@ #define SELECT_TRIGGERS "SELECT_TRIGGERS" void Pgmr::reset() { - std::lock_guard<SpinLock> lock(_stepsLock); + std::lock_guard<SpinLock> lock(_elementsLock); for (int c = 0; c < maxChannels; ++c) { _lastSteps[c] = -1; _allPulseGens[c].process(1000.0f); } - for (int i = 0, n = _steps.size(); i < n; ++i) { - _steps[i]->reset(); + for (auto* element : _elements) { + element->reset(); } } @@ -48,11 +48,13 @@ void Pgmr::processAlways(const ProcessArgs& args) { } void Pgmr::processChannel(const ProcessArgs& args, int c) { - std::lock_guard<SpinLock> lock(_stepsLock); - int steps = _steps.size(); + std::lock_guard<SpinLock> lock(_elementsLock); + std::vector<PgmrStep*>& steps = _elements; + int stepsN = steps.size(); + if (c == 0) { - for (int i = 0, n = _steps.size(); i < n; ++i) { - _steps[i]->lightSum = 0.0f; + for (int i = 0; i < stepsN; ++i) { + steps[i]->lightSum = 0.0f; } } @@ -64,37 +66,37 @@ void Pgmr::processChannel(const ProcessArgs& args, int c) { params[DIRECTION_PARAM], NULL, inputs[SELECT_INPUT], - steps + stepsN ); - for (int i = 0; i < steps; ++i) { - if (_steps[i]->triggers[c].process(_steps[i]->selectParam.getValue() + _steps[i]->selectInput.getPolyVoltage(c))) { - step = setStep(c, i, steps); + for (int i = 0; i < stepsN; ++i) { + if (steps[i]->triggers[c].process(steps[i]->selectParam.getValue() + steps[i]->selectInput.getPolyVoltage(c))) { + step = setStep(c, i, stepsN); } } { - float out = _steps[step]->aParam.getValue(); + float out = steps[step]->aParam.getValue(); out += _rangeOffset; out *= _rangeScale; outputs[A_OUTPUT].setChannels(_channels); outputs[A_OUTPUT].setVoltage(out, c); } { - float out = _steps[step]->bParam.getValue(); + float out = steps[step]->bParam.getValue(); out += _rangeOffset; out *= _rangeScale; outputs[B_OUTPUT].setChannels(_channels); outputs[B_OUTPUT].setVoltage(out, c); } { - float out = _steps[step]->cParam.getValue(); + float out = steps[step]->cParam.getValue(); out += _rangeOffset; out *= _rangeScale; outputs[C_OUTPUT].setChannels(_channels); outputs[C_OUTPUT].setVoltage(out, c); } { - float out = _steps[step]->dParam.getValue(); + float out = steps[step]->dParam.getValue(); out += _rangeOffset; out *= _rangeScale; outputs[D_OUTPUT].setChannels(_channels); @@ -104,30 +106,25 @@ void Pgmr::processChannel(const ProcessArgs& args, int c) { if (step != _lastSteps[c]) { _lastSteps[c] = step; _allPulseGens[c].trigger(0.001f); - _steps[step]->pulseGens[c].trigger(0.001f); + steps[step]->pulseGens[c].trigger(0.001f); } outputs[SELECT_ALL_OUTPUT].setChannels(_channels); outputs[SELECT_ALL_OUTPUT].setVoltage(_allPulseGens[c].process(_sampleTime) * 5.0f, c); - for (int i = 0; i < steps; ++i) { - _steps[i]->selectedOutput.setChannels(_channels); - _steps[i]->selectedOutput.setVoltage((_steps[i]->pulseGens[c].process(_sampleTime) || (!_selectTriggers && step == i)) * 5.0f, c); + for (int i = 0; i < stepsN; ++i) { + steps[i]->selectedOutput.setChannels(_channels); + steps[i]->selectedOutput.setVoltage((steps[i]->pulseGens[c].process(_sampleTime) || (!_selectTriggers && step == i)) * 5.0f, c); - _steps[i]->lightSum += step == i; + steps[i]->lightSum += step == i; } if (c == _channels - 1) { - for (int i = 0, n = _steps.size(); i < n; ++i) { - _steps[i]->selectedLight.value = _steps[i]->lightSum * _inverseChannels; + for (int i = 0; i < stepsN; ++i) { + steps[i]->selectedLight.value = steps[i]->lightSum * _inverseChannels; } } } -void Pgmr::setSteps(std::vector<PgmrStep*>& steps) { - std::lock_guard<SpinLock> lock(_stepsLock); - _steps = steps; -} - struct PgmrWidget : AddressableSequenceBaseModuleWidget { static constexpr int hp = 15; diff --git a/src/Pgmr.hpp b/src/Pgmr.hpp @@ -4,7 +4,9 @@ namespace bogaudio { -struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequenceModule>, PgmrBase { +typedef ChainableExpandableModule<PgmrExpanderMessage, PgmrStep, 4, OutputRangeAddressableSequenceModule> PgmrBase; + +struct Pgmr : PgmrBase { enum ParamsIds { DIRECTION_PARAM, SELECT_ON_CLOCK_PARAM, @@ -64,13 +66,10 @@ struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequen float _sampleTime = 0.001f; bool _selectTriggers = false; - SpinLock _stepsLock; - std::vector<PgmrStep*> _steps; int _lastSteps[maxChannels] {}; rack::dsp::PulseGenerator _allPulseGens[maxChannels]; - int _id = -1; - Pgmr() { + Pgmr() : PgmrBase(PgmrRegistry::registry()) { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); configParam(DIRECTION_PARAM, 0.0f, 1.0f, 1.0f, "Forward"); configParam(SELECT_ON_CLOCK_PARAM, 0.0f, 1.0f, 0.0f, "Select on clock"); @@ -96,16 +95,14 @@ struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequen configParam(SELECT4_PARAM, 0.0f, 1.0f, 0.0f, "Select 4"); setInputIDs(CLOCK_INPUT, SELECT_INPUT); - _localSteps[0] = new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]); - _localSteps[1] = new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]); - _localSteps[2] = new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]); - _localSteps[3] = new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT]); - + setLocalElements({ + new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]), + new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]), + new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]), + new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT]) + }); + registerBase(); setExpanderModelPredicate([](Model* m) { return m == modelPgmrX; }); - _id = PgmrRegistry::registry().registerBase(*this); - } - virtual ~Pgmr() { - PgmrRegistry::registry().deregisterBase(_id); } void reset() override; @@ -115,7 +112,6 @@ struct Pgmr : ExpandableModule<PgmrExpanderMessage, OutputRangeAddressableSequen void modulate() override; void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void setSteps(std::vector<PgmrStep*>& steps); }; } // namespace bogaudio diff --git a/src/PgmrX.cpp b/src/PgmrX.cpp @@ -11,25 +11,13 @@ void PgmrX::processAlways(const ProcessArgs& args) { _rangeOffset = bm->rangeOffset; _rangeScale = bm->rangeScale; } - - if (_registered && (position <= 0 || position != _position)) { - PgmrRegistry::registry().deregisterExpander(_baseID, _position); - _registered = false; - _baseID = 0; - _position = 0; - } - else if (!_registered && position > 0) { - _registered = true; - _baseID = baseID; - _position = position; - PgmrRegistry::registry().registerExpander(_baseID, _position, *this); - } - + setBaseIDAndPosition(baseID, position); if (_position < 1) { for (int i = 0; i < 4; ++i) { - _localSteps[i]->selectedLight.value = 0.0f; + _localElements[i]->selectedLight.value = 0.0f; } } + if (expanderConnected()) { PgmrExpanderMessage* te = toExpander(); te->baseID = _baseID; diff --git a/src/PgmrX.hpp b/src/PgmrX.hpp @@ -4,7 +4,9 @@ namespace bogaudio { -struct PgmrX : ExpanderModule<PgmrExpanderMessage, ExpandableModule<PgmrExpanderMessage, BGModule>>, PgmrBase, OutputRange { +typedef ChainableExpanderModule<PgmrExpanderMessage, PgmrStep, 4, BGModule> PgmrXBase; + +struct PgmrX : PgmrXBase, OutputRange { enum ParamsIds { CVA1_PARAM, CVB1_PARAM, @@ -53,11 +55,7 @@ struct PgmrX : ExpanderModule<PgmrExpanderMessage, ExpandableModule<PgmrExpander NUM_LIGHTS }; - bool _registered = false; - int _baseID = -1; - int _position = -1; - - PgmrX() { + PgmrX() : PgmrXBase(PgmrRegistry::registry()) { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); configParam<OutputRangeParamQuantity>(CVA1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1A", " V"); configParam<OutputRangeParamQuantity>(CVB1_PARAM, -1.0f, 1.0f, 0.0f, "Step 1B", " V"); @@ -80,17 +78,15 @@ struct PgmrX : ExpanderModule<PgmrExpanderMessage, ExpandableModule<PgmrExpander configParam<OutputRangeParamQuantity>(CVD4_PARAM, -1.0f, 1.0f, 0.0f, "Step 4D", " V"); configParam<OutputRangeParamQuantity>(SELECT4_PARAM, 0.0f, 1.0f, 0.0f, "Select 4"); - _localSteps[0] = new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]); - _localSteps[1] = new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]); - _localSteps[2] = new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]); - _localSteps[3] = new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT]); - + setLocalElements({ + new PgmrStep(params[CVA1_PARAM], params[CVB1_PARAM], params[CVC1_PARAM], params[CVD1_PARAM], lights[SELECT1_LIGHT], params[SELECT1_PARAM], inputs[SELECT1_INPUT], outputs[SELECT1_OUTPUT]), + new PgmrStep(params[CVA2_PARAM], params[CVB2_PARAM], params[CVC2_PARAM], params[CVD2_PARAM], lights[SELECT2_LIGHT], params[SELECT2_PARAM], inputs[SELECT2_INPUT], outputs[SELECT2_OUTPUT]), + new PgmrStep(params[CVA3_PARAM], params[CVB3_PARAM], params[CVC3_PARAM], params[CVD3_PARAM], lights[SELECT3_LIGHT], params[SELECT3_PARAM], inputs[SELECT3_INPUT], outputs[SELECT3_OUTPUT]), + new PgmrStep(params[CVA4_PARAM], params[CVB4_PARAM], params[CVC4_PARAM], params[CVD4_PARAM], lights[SELECT4_LIGHT], params[SELECT4_PARAM], inputs[SELECT4_INPUT], outputs[SELECT4_OUTPUT]) + }); setBaseModelPredicate([](Model* m) { return m == modelPgmr || m == modelPgmrX; }); setExpanderModelPredicate([](Model* m) { return m == modelPgmrX; }); } - virtual ~PgmrX() { - PgmrRegistry::registry().deregisterExpander(_baseID, _position); - } void processAlways(const ProcessArgs& args) override; }; diff --git a/src/Pgmr_shared.cpp b/src/Pgmr_shared.cpp @@ -1,7 +1,5 @@ #include "Pgmr_shared.hpp" -#include "Pgmr.hpp" -#include "PgmrX.hpp" void PgmrStep::reset() { for (int c = 0; c < BGModule::maxChannels; ++c) { @@ -9,71 +7,3 @@ void PgmrStep::reset() { pulseGens[c].process(1000.0f); } } - - -PgmrRegistry::Base::Base(Pgmr& b) : module(b) { - std::copy(b._localSteps, b._localSteps + 4, std::back_inserter(steps)); -} - -int PgmrRegistry::registerBase(Pgmr& b) { - std::lock_guard<std::mutex> lock(_lock); - - int id = _nextID; - ++_nextID; - auto p = _bases.emplace(id, Base(b)); - b.setSteps(p.first->second.steps); - return id; -} - -void PgmrRegistry::deregisterBase(int id) { - std::lock_guard<std::mutex> lock(_lock); - _bases.erase(id); -} - -void PgmrRegistry::registerExpander(int baseID, int position, PgmrX& x) { - std::lock_guard<std::mutex> lock(_lock); - - assert(position > 0); - auto base = _bases.find(baseID); - if (base != _bases.end()) { - int i = 4 * position; - if (i < (int)base->second.steps.size()) { - assert(!base->second.steps[i]); - std::copy(x._localSteps, x._localSteps + 4, base->second.steps.begin() + i); - } - else { - base->second.steps.resize(i + 4, NULL); - std::copy(x._localSteps, x._localSteps + 4, base->second.steps.begin() + i); - } - for (auto i = base->second.steps.begin(), n = base->second.steps.end(); i != n; ++i) { - if (!*i) { - return; - } - } - base->second.module.setSteps(base->second.steps); - } -} - -void PgmrRegistry::deregisterExpander(int baseID, int position) { - std::lock_guard<std::mutex> lock(_lock); - - auto base = _bases.find(baseID); - if (base != _bases.end()) { - int n = 4 * position; - if (n < (int)base->second.steps.size()) { - int i = 0; - for (; i < n; ++i) { - if (!base->second.steps[i]) { - break; - } - } - base->second.steps.resize(i); - base->second.module.setSteps(base->second.steps); - } - } -} - -PgmrRegistry& PgmrRegistry::registry() { - static PgmrRegistry instance; - return instance; -} diff --git a/src/Pgmr_shared.hpp b/src/Pgmr_shared.hpp @@ -57,41 +57,6 @@ struct PgmrStep { void reset(); }; -struct PgmrBase { - PgmrStep* _localSteps[4] {}; - - virtual ~PgmrBase() { - for (int i = 0; i < 4; ++i) { - if (_localSteps[i]) { - delete _localSteps[i]; - } - } - } -}; - -struct Pgmr; -struct PgmrX; - -struct PgmrRegistry { -private: - struct Base { - Pgmr& module; - std::vector<PgmrStep*> steps; - - Base(Pgmr& b); - }; - - std::mutex _lock; - int _nextID = 1; - std::unordered_map<int, Base> _bases; - -public: - int registerBase(Pgmr& b); - void deregisterBase(int id); - void registerExpander(int baseID, int position, PgmrX& x); - void deregisterExpander(int baseID, int position); - - static PgmrRegistry& registry(); -}; +typedef ChainableRegistry<PgmrStep, 4> PgmrRegistry; } // namespace bogaudio diff --git a/src/addressable_sequence.cpp b/src/addressable_sequence.cpp @@ -6,6 +6,12 @@ #define TRIGGERED_SELECT "triggered_select" #define REVERSE_ON_NEGATIVE_CLOCK "reverse_on_negative_clock" +void AddressableSequenceModule::setInputIDs(int clockInputID, int selectInputID) { + _polyInputID = clockInputID; + _clockInputID = clockInputID; + _selectInputID = selectInputID; +} + void AddressableSequenceModule::reset() { for (int i = 0; i < maxChannels; ++i) { _step[i] = 0; @@ -85,7 +91,12 @@ int AddressableSequenceModule::nextStep( int steps = n; if (stepsParam) { - steps = clamp(stepsParam->getValue(), 1.0f, (float)n); + float s = clamp(stepsParam->getValue(), 1.0f, 8.0f); + s -= 1.0f; + s /= 7.0f; + s *= n - 1; + s += 1.0f; + steps = s; } int reverse = 1 - 2 * (directionParam.getValue() == 0.0f); _step[c] = (_step[c] + reverse * clock + -reverse * negativeClock) % steps; @@ -94,7 +105,8 @@ int AddressableSequenceModule::nextStep( float select = n; if (selectParam) { - select = clamp(selectParam->getValue(), 0.0f, (float)(n - 1)); + float s = clamp(selectParam->getValue(), 0.0f, 7.0f) / 7.0f; + select = s * (n - 1); } if (_triggeredSelect) { if (_selectTrigger[c].process(selectInput.getPolyVoltage(c))) { @@ -103,7 +115,7 @@ int AddressableSequenceModule::nextStep( _select[c] -= _select[c] * reset; } else { - select += clamp(selectInput.getPolyVoltage(c), -9.99f, 9.99f) * 0.1f * (float)n; + select += clamp(selectInput.getPolyVoltage(c), -10.0f, 10.0f) * 0.1f * (float)(n - 1); if (!_selectOnClock || clock) { _select[c] = select; } diff --git a/src/addressable_sequence.hpp b/src/addressable_sequence.hpp @@ -23,11 +23,7 @@ struct AddressableSequenceModule : BGModule { bool _triggeredSelect = false; bool _reverseOnNegativeClock = false; - void setInputIDs(int clockInputID, int selectInputID) { - _polyInputID = clockInputID; - _clockInputID = clockInputID; - _selectInputID = selectInputID; - } + void setInputIDs(int clockInputID, int selectInputID); void reset() override; void sampleRateChange() override; json_t* toJson(json_t* root) override; diff --git a/src/bogaudio.cpp b/src/bogaudio.cpp @@ -5,6 +5,7 @@ #include "ADSR.hpp" #include "Additator.hpp" #include "AddrSeq.hpp" +#include "AddrSeqX.hpp" #include "AMRM.hpp" #include "Analyzer.hpp" #include "AnalyzerXL.hpp" @@ -200,6 +201,7 @@ void init(rack::Plugin *p) { p->addModel(modelOneEight); p->addModel(modelEightOne); p->addModel(modelAddrSeq); + p->addModel(modelAddrSeqX); p->addModel(modelPgmr); p->addModel(modelPgmrX); diff --git a/src/expanders.hpp b/src/expanders.hpp @@ -107,4 +107,166 @@ struct ExpanderModule : BASE { } }; +template<class E, int N> +struct ChainableRegistry { +public: + struct Chainable { + E* _localElements[N] {}; + + virtual ~Chainable() { + for (int i = 0; i < N; ++i) { + if (_localElements[i]) { + delete _localElements[i]; + } + } + } + + void setLocalElements(std::vector<E*> es) { + assert(es.size() == N); + for (int i = 0; i < N; ++i) { + _localElements[i] = es[i]; + } + } + }; + + struct ChainableBase : Chainable { + SpinLock _elementsLock; + std::vector<E*> _elements; + + void setElements(const std::vector<E*>& elements) { + std::lock_guard<SpinLock> lock(_elementsLock); + _elements = elements; + } + }; + + typedef Chainable ChainableExpander; + +private: + struct Base { + ChainableBase& module; + std::vector<E*> elements; + + Base(ChainableBase& b) : module(b) { + std::copy(b._localElements, b._localElements + N, std::back_inserter(elements)); + } + }; + + std::mutex _lock; + int _nextID = 1; + std::unordered_map<int, Base> _bases; + +public: + int registerBase(ChainableBase& b) { + std::lock_guard<std::mutex> lock(_lock); + + int id = _nextID; + ++_nextID; + auto p = _bases.emplace(id, Base(b)); + b.setElements(p.first->second.elements); + return id; + } + + void deregisterBase(int id) { + std::lock_guard<std::mutex> lock(_lock); + _bases.erase(id); + } + + void registerExpander(int baseID, int position, ChainableExpander& x) { + std::lock_guard<std::mutex> lock(_lock); + + assert(position > 0); + auto base = _bases.find(baseID); + if (base != _bases.end()) { + int i = N * position; + if (i < (int)base->second.elements.size()) { + assert(!base->second.elements[i]); + std::copy(x._localElements, x._localElements + N, base->second.elements.begin() + i); + } + else { + base->second.elements.resize(i + N, NULL); + std::copy(x._localElements, x._localElements + N, base->second.elements.begin() + i); + } + for (auto i = base->second.elements.begin(), n = base->second.elements.end(); i != n; ++i) { + if (!*i) { + return; + } + } + base->second.module.setElements(base->second.elements); + } + } + + void deregisterExpander(int baseID, int position) { + std::lock_guard<std::mutex> lock(_lock); + + auto base = _bases.find(baseID); + if (base != _bases.end()) { + int n = N * position; + if (n < (int)base->second.elements.size()) { + int i = 0; + for (; i < n; ++i) { + if (!base->second.elements[i]) { + break; + } + } + base->second.elements.resize(i); + base->second.module.setElements(base->second.elements); + } + } + } + + static ChainableRegistry& registry() { + static ChainableRegistry<E, N> instance; + return instance; + } +}; + +template<class MESSAGE, class ELEMENT, int N, class BASE> +struct ChainableExpandableModule +: ExpandableModule<MESSAGE, BASE> +, ChainableRegistry<ELEMENT, N>::ChainableBase +{ + ChainableRegistry<ELEMENT, N>& _registry; + int _id = -1; + + ChainableExpandableModule(ChainableRegistry<ELEMENT, N>& registry) : _registry(registry) {} + virtual ~ChainableExpandableModule() { + _registry.deregisterBase(_id); + } + + void registerBase() { + _id = _registry.registerBase(*this); + } +}; + +template<class MESSAGE, class ELEMENT, int N, class BASE> +struct ChainableExpanderModule +: ExpanderModule<MESSAGE, ExpandableModule<MESSAGE, BASE>> +, ChainableRegistry<ELEMENT, N>::ChainableExpander +{ + ChainableRegistry<ELEMENT, N>& _registry; + bool _registered = false; + int _baseID = -1; + int _position = -1; + + ChainableExpanderModule(ChainableRegistry<ELEMENT, N>& registry) : _registry(registry) {} + virtual ~ChainableExpanderModule() { + _registry.deregisterExpander(_baseID, _position); + } + + void setBaseIDAndPosition(int baseID, int position) { + if (_registered && (position <= 0 || position != _position)) { + _registry.deregisterExpander(_baseID, _position); + _registered = false; + _baseID = 0; + _position = 0; + } + else if (!_registered && position > 0) { + _registered = true; + _baseID = baseID; + _position = position; + _registry.registerExpander(_baseID, _position, *this); + } + } +}; + } // namespace bogaudio