Browse Source

add Core.HalfNotes and Core.ParamProxy modules (self-editing patches)

pull/1639/head
bsp2 6 years ago
parent
commit
b573cbf07b
10 changed files with 1105 additions and 9 deletions
  1. +3
    -1
      include/global_ui.hpp
  2. +3
    -1
      make.objects
  3. +4
    -0
      src/Core/Core.cpp
  4. +49
    -0
      src/Core/HalfNotes.cpp
  5. +374
    -0
      src/Core/ParamProxy.cpp
  6. +2
    -1
      src/app/ModuleWidget.cpp
  7. +7
    -6
      src/engine.cpp
  8. +75
    -0
      vst2_bin/res/ComponentLibrary/LEDButtonLit.svg
  9. +113
    -0
      vst2_bin/res/Core/HalfNotes.svg
  10. +475
    -0
      vst2_bin/res/Core/ParamProxy.svg

+ 3
- 1
include/global_ui.hpp View File

@@ -97,7 +97,8 @@ struct GlobalUI {
const ParamWidget *last_param_widget; // never dereferenced, may have already been deleted. unset after redraw().
int last_param_gid; // updated during redraw()
float last_param_value; // updated in onMouseMove() and onChange(). corresponding param may not exist anymore.
float value_clipboard;
float value_clipboard; // last copied value
int gid_clipboard; // param GID of last copied value (-1 if none)
TextField *tf_id;
TextField *tf_value;
bool b_lock; // true=don't update info (e.g. when receiving VST parameter updates from host)
@@ -151,6 +152,7 @@ struct GlobalUI {
param_info.last_param_gid = 0;
param_info.last_param_value = 0.0f;
param_info.value_clipboard = 0.0f;
param_info.gid_clipboard = -1;
param_info.tf_id = NULL;
param_info.tf_value = NULL;
param_info.b_lock = false;


+ 3
- 1
make.objects View File

@@ -96,7 +96,9 @@ HOST_OBJ= \
src/Core/MIDIToCVInterface.o \
src/Core/MIDITriggerToCVInterface.o \
src/Core/Notes.o \
src/Core/QuadMIDIToCVInterface.o
src/Core/QuadMIDIToCVInterface.o \
src/Core/ParamProxy.o \
src/Core/HalfNotes.o

LIB_OBJ= \
$(COMMON_OBJ) \


+ 4
- 0
src/Core/Core.cpp View File

@@ -11,6 +11,8 @@ RACK_PLUGIN_MODEL_DECLARE(Core, MIDICCToCVInterface);
RACK_PLUGIN_MODEL_DECLARE(Core, MIDITriggerToCVInterface);
RACK_PLUGIN_MODEL_DECLARE(Core, Blank);
RACK_PLUGIN_MODEL_DECLARE(Core, Notes);
RACK_PLUGIN_MODEL_DECLARE(Core, ParamProxy);
RACK_PLUGIN_MODEL_DECLARE(Core, HalfNotes);

#undef SLUG
#define SLUG Core
@@ -24,6 +26,8 @@ RACK_PLUGIN_INIT(Core) {
RACK_PLUGIN_MODEL_ADD(Core, MIDITriggerToCVInterface);
RACK_PLUGIN_MODEL_ADD(Core, Blank);
RACK_PLUGIN_MODEL_ADD(Core, Notes);
RACK_PLUGIN_MODEL_ADD(Core, ParamProxy);
RACK_PLUGIN_MODEL_ADD(Core, HalfNotes);
}

#endif // RACK_HOST

+ 49
- 0
src/Core/HalfNotes.cpp View File

@@ -0,0 +1,49 @@
#include "global_pre.hpp"
#include "Core.hpp"
#include "global.hpp"

using namespace rack;



struct HalfNotesWidget : ModuleWidget {
TextField *textField;

HalfNotesWidget(Module *module) : ModuleWidget(module) {
setPanel(SVG::load(assetGlobal("res/Core/HalfNotes.svg")));

addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));

textField = Widget::create<LedDisplayTextField>(mm2px(Vec(3.39962f, 14.8373f)));
textField->box.size = mm2px(Vec(74.480f*0.46f, 102.753f));
textField->multiline = true;
addChild(textField);
}

json_t *toJson() override {
json_t *rootJ = ModuleWidget::toJson();

// text
json_object_set_new(rootJ, "text", json_string(textField->text.c_str()));

return rootJ;
}

void fromJson(json_t *rootJ) override {
ModuleWidget::fromJson(rootJ);

// text
json_t *textJ = json_object_get(rootJ, "text");
if (textJ)
textField->text = json_string_value(textJ);
}
};


RACK_PLUGIN_MODEL_INIT(Core, HalfNotes) {
Model *modelHalfNotes = Model::create<Module, HalfNotesWidget>("Core", "HalfNotes", "Half Notes", BLANK_TAG);
return modelHalfNotes;
}

+ 374
- 0
src/Core/ParamProxy.cpp View File

@@ -0,0 +1,374 @@
/*
Copyright (c) 2019 bsp

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

#include "global_pre.hpp"
#include "Core.hpp"
#include "global_ui.hpp"

using namespace rack;

extern void rack::engineSetParam(Module *module, int paramId, float value, bool bVSTAutomate);

namespace rack {
extern bool vst2_find_module_and_paramid_by_unique_paramid(int uniqueParamId, Module**retModule, int *retParamId);
}

struct ParamProxy;

// struct TrigButton : TL1105 {
// struct ParamProxyTrigButton : CKD6 {
struct ParamProxyTrigButton : LEDButton {
ParamWidget *id_widget;

ParamProxyTrigButton() {
addFrame(SVG::load(assetGlobal("res/ComponentLibrary/LEDButtonLit.svg")));
}

void onAction(EventAction &e) override;
void onDragEnd(EventDragEnd &e) override;
};

struct NullButton : SVGSwitch, ToggleSwitch {
NullButton() {
addFrame(SVG::load(assetPlugin("res/null.svg")));
addFrame(SVG::load(assetPlugin("res/null.svg")));
}
};

struct RoundSmallBlackKnobParamId : RoundSmallBlackKnob {
RoundSmallBlackKnobParamId() {
}

void onChange(EventChange &e) override;
};

struct ParamProxy : Module {

static const uint32_t NUM_PARAM_ROWS = 8u;

enum RowParamIds {
ROW_PARAM_CONSTVAL,
ROW_PARAM_MIN,
ROW_PARAM_MAX,
ROW_PARAM_PARAMID,
ROW_PARAM_LEARNFROMCLIPBOARD,
NUM_ROW_PARAMS
};

enum ParamIds {
PARAM_0_CONSTVAL,
PARAM_0_MIN,
PARAM_0_MAX,
PARAM_0_PARAMID,
PARAM_0_LEARNFROMCLIPBOARD,

PARAM_1_CONSTVAL,
PARAM_1_MIN,
PARAM_1_MAX,
PARAM_1_PARAMID,
PARAM_1_LEARNFROMCLIPBOARD,

PARAM_2_CONSTVAL,
PARAM_2_MIN,
PARAM_2_MAX,
PARAM_2_PARAMID,
PARAM_2_LEARNFROMCLIPBOARD,

PARAM_3_CONSTVAL,
PARAM_3_MIN,
PARAM_3_MAX,
PARAM_3_PARAMID,
PARAM_3_LEARNFROMCLIPBOARD,

PARAM_4_CONSTVAL,
PARAM_4_MIN,
PARAM_4_MAX,
PARAM_4_PARAMID,
PARAM_4_LEARNFROMCLIPBOARD,

PARAM_5_CONSTVAL,
PARAM_5_MIN,
PARAM_5_MAX,
PARAM_5_PARAMID,
PARAM_5_LEARNFROMCLIPBOARD,

PARAM_6_CONSTVAL,
PARAM_6_MIN,
PARAM_6_MAX,
PARAM_6_PARAMID,
PARAM_6_LEARNFROMCLIPBOARD,

PARAM_7_CONSTVAL,
PARAM_7_MIN,
PARAM_7_MAX,
PARAM_7_PARAMID,
PARAM_7_LEARNFROMCLIPBOARD,

NUM_PARAMS
};

enum InputIds {
INPUT_0_CV,
INPUT_1_CV,
INPUT_2_CV,
INPUT_3_CV,
INPUT_4_CV,
INPUT_5_CV,
INPUT_6_CV,
INPUT_7_CV,
NUM_INPUTS
};

enum OutputIds {
NUM_OUTPUTS
};

enum LightIds {
NUM_LIGHTS
};

bool b_update_leds;
float last_output_state[NUM_PARAM_ROWS];

void resetOutputState(void) {
for(uint32_t rowIdx = 0u; rowIdx < ParamProxy::NUM_PARAM_ROWS; rowIdx++)
{
last_output_state[rowIdx] = 0.0f;
}
}

ParamProxy() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
b_update_leds = true;
resetOutputState();
}

void step() override;
};

void ParamProxy::step() {

int rowParamBaseId = ParamProxy::PARAM_0_CONSTVAL;

for(uint32_t rowIdx = 0u; rowIdx < ParamProxy::NUM_PARAM_ROWS; rowIdx++)
{
float curVal;

if(inputs[rowIdx].active)
{
// Use CV input when a cable's plugged in
curVal = inputs[rowIdx].value * (1.0f / 10.0f);

if(curVal < 0.0f)
curVal = 0.0f;
else if(curVal > 1.0f)
curVal = 1.0f;
}
else
{
// Use constant value when nothing's connected
curVal = params[rowParamBaseId + ParamProxy::ROW_PARAM_CONSTVAL].value;
}

int targetParamGID = int(params[rowParamBaseId + ParamProxy::ROW_PARAM_PARAMID].value);
if(targetParamGID > 0)
{
// Rescale to min/max range
float minVal = params[rowParamBaseId + ParamProxy::ROW_PARAM_MIN].value;
float maxVal = params[rowParamBaseId + ParamProxy::ROW_PARAM_MAX].value;
if(minVal > maxVal)
{
float t = minVal;
minVal = maxVal;
maxVal = t;
}
curVal = minVal + (maxVal - minVal) * curVal;

if(curVal != last_output_state[rowIdx])
{
last_output_state[rowIdx] = curVal;

// Find target module + param
// (todo) should we lock global_ui->app.mtx_param for this ?
Module *module;
int paramId;
if(vst2_find_module_and_paramid_by_unique_paramid(targetParamGID, &module, &paramId))
{
ModuleWidget *moduleWidget = global_ui->app.gRackWidget->findModuleWidgetByModule(module);
if(NULL != moduleWidget)
{
// Find
ParamWidget *paramWidget = moduleWidget->findParamWidgetByParamId(paramId);
if(NULL != paramWidget)
{
if(isfinite(paramWidget->minValue) && isfinite(paramWidget->maxValue))
{
// De-Normalize parameter
global_ui->param_info.b_lock = true;
float paramRange = (paramWidget->maxValue - paramWidget->minValue);
if(paramRange > 0.0f)
{
float value = (curVal * paramRange) + paramWidget->minValue;
// Dprintf("ParamProxy: paramId=%d value=%f min=%f max=%f\n", paramId, value, paramWidget->minValue, paramWidget->maxValue);
engineSetParam(module, paramId, value, false/*bVSTAutomate*/);

// Update UI widget
paramWidget->setValue(value);
}
global_ui->param_info.b_lock = false;
}
}
}
} // if find paramid
} // if value has changed
} // if targetParamGID > 0

// Next param row
rowParamBaseId += ParamProxy::NUM_ROW_PARAMS;

} // loop param rows
}


struct ParamProxyWidget : ModuleWidget {
ParamWidget *bt_widgets[ParamProxy::NUM_PARAM_ROWS];

ParamProxyWidget(ParamProxy *module);

void draw(NVGcontext *vg) override;

void fromJson(json_t *rootJ) override {
ModuleWidget::fromJson(rootJ);
ParamProxy *ppMod = dynamic_cast<ParamProxy*>(module);
ppMod->b_update_leds = true;
ppMod->resetOutputState();
}
};

ParamProxyWidget::ParamProxyWidget(ParamProxy *module) : ModuleWidget(module) {
setPanel(SVG::load(assetGlobal("res/Core/ParamProxy.svg")));

addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));


sF32 cy = 63.0f;
int rowParamBaseId = ParamProxy::PARAM_0_CONSTVAL;

for(uint32_t rowIdx = 0u; rowIdx < ParamProxy::NUM_PARAM_ROWS; rowIdx++)
{
sF32 cx = 2.0f;
sF32 cyk = cy + 1.2f; // knob
sF32 cyt = cy + 3.3f; // copyfromclipboard button

#define PORT_STX 27.0f
#define KNOB_STX 25.0f

// CV Input
addInput(Port::create<PJ301MPort>(Vec(cx, cy), Port::INPUT, module, ParamProxy::INPUT_0_CV + int32_t(rowIdx)));
cx += PORT_STX;

// Const Val
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(cx, cyk), module, rowParamBaseId + ParamProxy::ROW_PARAM_CONSTVAL, 0.0f, 1.0f, 0.5f));
cx += KNOB_STX;

// Min Val
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(cx, cyk), module, rowParamBaseId + ParamProxy::ROW_PARAM_MIN, 0.0f, 1.0f, 0.0f));
cx += KNOB_STX;

// Max Val
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(cx, cyk), module, rowParamBaseId + ParamProxy::ROW_PARAM_MAX, 0.0f, 1.0f, 1.0f));
cx += KNOB_STX;

// Param Id
ParamWidget *idWidget = ParamWidget::create<RoundSmallBlackKnobParamId>(Vec(cx, cyk), module, rowParamBaseId + ParamProxy::ROW_PARAM_PARAMID, 0.0f, 10000.0f, 0.0f);
addParam(idWidget);
cx += KNOB_STX;

// Learn from clipboard button
ParamProxyTrigButton *bt = ParamWidget::create<ParamProxyTrigButton>(Vec(cx, cyt), module, rowParamBaseId + ParamProxy::ROW_PARAM_LEARNFROMCLIPBOARD, 0.0f, 1.0f, 0.0f);
bt->id_widget = idWidget;
bt_widgets[rowIdx] = bt;
addParam(bt);

// Next param row (aligned to row height of Core.Notes module)
cy += 36.0f;
rowParamBaseId += ParamProxy::NUM_ROW_PARAMS;
}

module->b_update_leds = true;
}

void ParamProxyWidget::draw(NVGcontext *vg) {

// Highlight button when the corresponding row has a valid target param
ParamProxy *ppMod = dynamic_cast<ParamProxy*>(module);
if(ppMod->b_update_leds)
{
ppMod->b_update_leds = false;
int paramIdParamId = ParamProxy::PARAM_0_PARAMID;

for(uint32_t rowIdx = 0u; rowIdx < ParamProxy::NUM_PARAM_ROWS; rowIdx++)
{
float btState = (module->params[paramIdParamId].value > 0.0f) ? 1.0f : 0.0f;
bt_widgets[rowIdx]->setValue(btState);
paramIdParamId += ParamProxy::NUM_ROW_PARAMS;
}

}

ModuleWidget::draw(vg);
}

void RoundSmallBlackKnobParamId::onChange(EventChange &e) {
RoundSmallBlackKnob::onChange(e);
ParamProxy *ppMod = dynamic_cast<ParamProxy*>(module);
ppMod->b_update_leds = true;
}

void ParamProxyTrigButton::onAction(EventAction &e) {
if(-1 != rack::global_ui->param_info.gid_clipboard)
{
printf("xxx ParamProxyTrigButton: copy clipboard param id %d to proxy param %d\n",
rack::global_ui->param_info.gid_clipboard,
paramId - 1/*ROW_PARAM_PARAMID*/
);
float gidf = float(rack::global_ui->param_info.gid_clipboard);
module->params[paramId - 1/*ROW_PARAM_PARAMID*/].value = gidf;
id_widget->setValue(gidf);
setValue((gidf > 0.0f) ? 1.0f : 0.0f);
ParamProxy *ppMod = dynamic_cast<ParamProxy*>(module);
ppMod->b_update_leds = true;
}
}

void ParamProxyTrigButton::onDragEnd(EventDragEnd &e) {
ParamProxy *ppMod = dynamic_cast<ParamProxy*>(module);
ppMod->b_update_leds = true;
}

RACK_PLUGIN_MODEL_INIT(Core, ParamProxy) {
Model *modelParamProxy = Model::create<ParamProxy, ParamProxyWidget>("Core", "ParamProxy", "ParamProxy", CONTROLLER_TAG);
return modelParamProxy;
}

+ 2
- 1
src/app/ModuleWidget.cpp View File

@@ -389,7 +389,8 @@ void ModuleWidget::onHoverKey(EventHoverKey &e) {
case 'w':
if (windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->param_info.value_clipboard = global_ui->param_info.last_param_value;
printf("xxx CopyParamItem: value=%f\n", global_ui->param_info.value_clipboard);
global_ui->param_info.gid_clipboard = global_ui->param_info.last_param_gid;
printf("xxx CopyParamItem: value=%f id=%d\n", global_ui->param_info.value_clipboard, global_ui->param_info.gid_clipboard);
e.consumed = true;
return;
}


+ 7
- 6
src/engine.cpp View File

@@ -29,9 +29,10 @@ extern void log_printf(const char *logData, ...);
#define Dprintf printf
#endif // USE_LOG_PRINTF

namespace rack {

namespace rack {

bool vst2_find_module_and_paramid_by_unique_paramid(int uniqueParamId, Module**retModule, int *retParamId);

float Light::getBrightness() {
// LEDs are diodes, so don't allow reverse current.
@@ -268,7 +269,7 @@ static int loc_vst2_find_unique_param_by_module_and_paramid(Module *module, int
return module->vst2_unique_param_base_id + paramId;
}

static bool loc_vst2_find_module_and_paramid_by_unique_paramid(int uniqueParamId, Module**retModule, int *retParamId) {
bool vst2_find_module_and_paramid_by_unique_paramid(int uniqueParamId, Module**retModule, int *retParamId) {
if(uniqueParamId >= 0)
{
if(uniqueParamId < VST2_MAX_UNIQUE_PARAM_IDS)
@@ -360,7 +361,7 @@ void vst2_handle_queued_params(void) {
{
Module *module;
int paramId;
if(loc_vst2_find_module_and_paramid_by_unique_paramid(qp.unique_id, &module, &paramId))
if(vst2_find_module_and_paramid_by_unique_paramid(qp.unique_id, &module, &paramId))
{
ModuleWidget *moduleWidget = global_ui->app.gRackWidget->findModuleWidgetByModule(module);
if(NULL != moduleWidget)
@@ -412,7 +413,7 @@ void vst2_handle_queued_params(void) {
float vst2_get_param(int uniqueParamId) {
Module *module;
int paramId;
if(loc_vst2_find_module_and_paramid_by_unique_paramid(uniqueParamId, &module, &paramId))
if(vst2_find_module_and_paramid_by_unique_paramid(uniqueParamId, &module, &paramId))
{
if(sUI(paramId) < sUI(module->params.size())) // paranoia
{
@@ -436,10 +437,10 @@ float vst2_get_param(int uniqueParamId) {
return 0.0f;
}

void vst2_get_param_name (int uniqueParamId, char *s, int sMaxLen) {
void vst2_get_param_name(int uniqueParamId, char *s, int sMaxLen) {
Module *module;
int paramId;
if(loc_vst2_find_module_and_paramid_by_unique_paramid(uniqueParamId, &module, &paramId))
if(vst2_find_module_and_paramid_by_unique_paramid(uniqueParamId, &module, &paramId))
{
if(sUI(paramId) < sUI(module->params.size())) // paranoia
{


+ 75
- 0
vst2_bin/res/ComponentLibrary/LEDButtonLit.svg View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="17.999601"
height="18"
viewBox="0 0 4.7623944 4.7624998"
version="1.1"
id="svg7595"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="LEDButtonLit.svg">
<defs
id="defs7589">
<clipPath
id="clip444">
<path
d="m 1201.582,338.19922 h 18 v 18 h -18 z m 0,0"
id="path24586"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-64.418253"
inkscape:cy="0.82092183"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
units="px" />
<metadata
id="metadata7592">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-46.755712,-67.833036)">
<path
inkscape:connector-curvature="0"
id="path31385"
d="m 46.899276,69.399864 c -0.448549,1.235067 0.189124,2.602426 1.423167,3.052011 1.236107,0.448551 2.602415,-0.188103 3.052021,-1.42317 0.44958,-1.236099 -0.187086,-2.601391 -1.423167,-3.052008 -1.235075,-0.448554 -2.600378,0.187068 -3.052021,1.423167"
style="clip-rule:nonzero;fill:#2b712b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332" />
</g>
</svg>

+ 113
- 0
vst2_bin/res/Core/HalfNotes.svg View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="40.6395mm"
height="128.4993mm"
viewBox="0 0 40.6395 128.4993"
version="1.1"
id="svg30767"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="HalfNotes.svg">
<defs
id="defs30761" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="11.76052"
inkscape:cy="443.71577"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1137"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true" />
<metadata
id="metadata30764">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.557143,-52.920968)"
style="display:inline">
<path
inkscape:connector-curvature="0"
id="path3835"
d="M 30.579938,53.013299 H 71.126642 V 181.32657 H 30.579938 Z m 0,0"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.24945153" />
<path
inkscape:connector-curvature="0"
id="path3837"
d="M 71.173492,52.92097 H 30.533773 v 128.4993 h 40.639719 z m -0.0937,128.31189 h -40.453 V 53.107008 h 40.453005 z m 0,0"
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.24945153" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d="m 44.205919,62.187839 c 0,0.176389 0.14333,0.325215 0.31972,0.325215 0.17639,0 0.31969,-0.148826 0.31969,-0.325215 v -1.5875 l 1.30641,1.714278 c 0.0882,0.110243 0.18189,0.187413 0.33623,0.187413 h 0.0219 c 0.18189,0 0.32522,-0.143316 0.32522,-0.325215 v -2.359201 c 0,-0.176389 -0.14333,-0.319705 -0.31972,-0.319705 -0.17639,0 -0.32522,0.143316 -0.32522,0.319705 v 1.526864 l -1.25677,-1.648132 c -0.0882,-0.115757 -0.18189,-0.192927 -0.33624,-0.192927 h -0.0661 c -0.18189,0 -0.32522,0.143316 -0.32522,0.325219 z m 0,0"
id="path23448" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d="m 49.018579,62.535103 c 0.915,0 1.57646,-0.689017 1.57646,-1.532378 v -0.0055 c 0,-0.843361 -0.65595,-1.526868 -1.57095,-1.526868 -0.91504,0 -1.5765,0.68902 -1.5765,1.532378 v 0.01101 c 0,0.843361 0.65596,1.521354 1.57099,1.521354 z m 0.006,-0.600823 c -0.52366,0 -0.89848,-0.424437 -0.89848,-0.931555 v -0.0055 c 0,-0.507118 0.36381,-0.926042 0.89298,-0.926042 0.52363,0 0.89295,0.424434 0.89295,0.931552 v 0.01101 c 0,0.507118 -0.36378,0.920531 -0.88745,0.920531 z m 0,0"
id="path23440" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d="m 51.740299,62.182325 c 0,0.181903 0.1433,0.330729 0.32519,0.330729 0.18193,0 0.32523,-0.148826 0.32523,-0.330729 V 60.12078 h 0.6284 c 0.16535,0 0.29764,-0.132292 0.29764,-0.297656 0,-0.165365 -0.13229,-0.303167 -0.29764,-0.303167 h -1.90722 c -0.16535,0 -0.29764,0.137802 -0.29764,0.303167 0,0.165364 0.13229,0.297656 0.29764,0.297656 h 0.6284 z m 0,0"
id="path23444" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d="m 54.105249,62.485495 h 1.65915 c 0.16538,0 0.29217,-0.126781 0.29217,-0.286632 0,-0.159854 -0.12679,-0.292145 -0.29217,-0.292145 h -1.33943 v -0.622872 h 1.12999 c 0.15984,0 0.29213,-0.126781 0.29213,-0.286632 0,-0.165364 -0.13229,-0.292146 -0.29213,-0.292146 h -1.12999 v -0.600823 h 1.32292 c 0.15984,0 0.29213,-0.126781 0.29213,-0.292145 0,-0.159851 -0.13229,-0.292143 -0.29213,-0.292143 h -1.64264 c -0.18189,0 -0.32522,0.148827 -0.32522,0.33073 v 2.30959 c 0,0.181902 0.14333,0.325218 0.32522,0.325218 z m 0,0"
id="path23436" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d="m 57.692049,62.529593 c 0.63941,0 1.08588,-0.33073 1.08588,-0.920532 v -0.01101 c 0,-0.512628 -0.33623,-0.727604 -0.93705,-0.887454 -0.51261,-0.132292 -0.6394,-0.192927 -0.6394,-0.385851 v -0.01101 c 0,-0.143316 0.12679,-0.259073 0.38032,-0.259073 0.20395,0 0.40792,0.07166 0.62287,0.198438 0.0496,0.03305 0.0992,0.04961 0.16538,0.04961 0.16535,0 0.30318,-0.132292 0.30318,-0.30317 0,-0.126778 -0.0717,-0.214973 -0.14333,-0.25907 -0.27009,-0.165364 -0.57877,-0.259072 -0.94259,-0.259072 -0.60632,0 -1.03628,0.352777 -1.03628,0.892968 v 0.0055 c 0,0.589799 0.38586,0.755164 0.98118,0.909504 0.49607,0.126781 0.60081,0.209462 0.60081,0.374826 v 0.01101 c 0,0.170879 -0.16535,0.275608 -0.42993,0.275608 -0.28663,0 -0.5347,-0.09922 -0.75519,-0.264583 -0.0441,-0.03306 -0.10471,-0.06063 -0.1874,-0.06063 -0.17088,0 -0.30868,0.132291 -0.30868,0.303166 0,0.09922 0.0551,0.192927 0.12679,0.242535 0.33073,0.237024 0.72207,0.358291 1.11344,0.35829 z m 0,0"
id="path23432" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="widgets"
style="display:none"
transform="translate(0,1.9042969e-6)">
<rect
style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.3213588;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect33077"
width="74.480209"
height="102.75342"
x="3.399621"
y="14.837339" />
</g>
</svg>

+ 475
- 0
vst2_bin/res/Core/ParamProxy.svg View File

@@ -0,0 +1,475 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="50.799999mm"
height="128.4993mm"
viewBox="0 0 50.799999 128.4993"
version="1.1"
id="svg48736"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="ParamProxy.svg">
<defs
id="defs48730" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="105.14906"
inkscape:cy="402.11702"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:window-width="1677"
inkscape:window-height="1016"
inkscape:window-x="381"
inkscape:window-y="64"
inkscape:window-maximized="0"
inkscape:snap-page="true"
inkscape:snap-global="false" />
<metadata
id="metadata48733">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-339.725,84.74965)"
style="display:inline">
<path
inkscape:connector-curvature="0"
id="path40442"
d="m 339.8187,-84.456869 h 50.61397 V 43.856402 H 339.8187 Z m 0,0"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" />
<path
inkscape:connector-curvature="0"
id="path40444"
d="m 390.525,-84.74965 h -50.8 v 128.4993 h 50.8 z M 390.33896,43.56224 H 339.91241 V -84.563613 h 50.42655 z m 0,0"
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47866" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47814" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47770" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47726" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47690" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47662" />
<path
inkscape:connector-curvature="0"
style="fill:#ffd714;fill-opacity:1;stroke:none;stroke-width:0.35277775"
d=""
id="path47630" />
<g
aria-label="R N D"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.15000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="text904"
transform="matrix(0.18524187,0,0,0.18524187,326.50304,16.577928)">
<path
d="m 254.46405,-19.209966 q 0.3359,0.113688 0.65112,0.485758 0.3204,0.372071 0.64079,1.023194 l 1.05937,2.108398 h -1.12138 l -0.98702,-1.979207 q -0.38241,-0.775147 -0.74414,-1.028361 -0.35657,-0.253215 -0.97669,-0.253215 h -1.13688 v 3.260783 h -1.04386 v -7.715291 h 2.35644 q 1.32292,0 1.97404,0.552938 0.65113,0.552937 0.65113,1.669148 0,0.728638 -0.34107,1.209229 -0.33589,0.480591 -0.98185,0.666626 z m -2.61483,-3.240112 v 2.73885 h 1.31258 q 0.75448,0 1.13689,-0.346232 0.38757,-0.351399 0.38757,-1.028361 0,-0.676961 -0.38757,-1.018025 -0.38241,-0.346232 -1.13689,-0.346232 z"
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.15000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path910"
inkscape:connector-curvature="0" />
<path
d="m 250.80536,-10.078741 h 1.4056 l 3.42098,6.4543863 v -6.4543863 h 1.01286 v 7.7152912 h -1.4056 l -3.42098,-6.4543862 v 6.4543862 h -1.01286 z"
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.15000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path912"
inkscape:connector-curvature="0" />
<path
d="m 251.84922,4.0082541 v 5.9996339 h 1.26091 q 1.5968,0 2.33577,-0.7234703 0.74414,-0.7234701 0.74414,-2.2840983 0,-1.5502929 -0.74414,-2.2685953 -0.73897,-0.72347 -2.33577,-0.72347 z m -1.04386,-0.8578288 h 2.14457 q 2.24276,0 3.29179,0.9353434 1.04903,0.9301758 1.04903,2.9145507 0,1.9947103 -1.0542,2.9300537 -1.0542,0.9353429 -3.28662,0.9353429 h -2.14457 z"
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.15000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path914"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="PARAM PROXY"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#a5a5a5;fill-opacity:1;stroke:none;stroke-width:0.26458332"
id="text4717"
transform="matrix(0.51585715,0,0,0.51585715,177.51272,-104.3978)">
<path
d="m 328.77818,51.725641 v 2.899048 h 1.31258 q 0.72864,0 1.12655,-0.377238 0.3979,-0.377238 0.3979,-1.07487 0,-0.692464 -0.3979,-1.069702 -0.39791,-0.377238 -1.12655,-0.377238 z m -1.04387,-0.857829 h 2.35645 q 1.29708,0 1.95854,0.589111 0.66662,0.583944 0.66662,1.715658 0,1.142049 -0.66662,1.725993 -0.66146,0.583943 -1.95854,0.583943 h -1.31258 v 3.100586 h -1.04387 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4719"
inkscape:connector-curvature="0" />
<path
d="m 336.01805,51.896173 -1.41594,3.839559 h 2.83704 z m -0.58912,-1.028361 h 1.18339 l 2.94039,7.715291 h -1.0852 l -0.7028,-1.979207 h -3.47782 l -0.7028,1.979207 h -1.10071 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4721"
inkscape:connector-curvature="0" />
<path
d="m 344.33278,54.965753 q 0.3359,0.113688 0.65113,0.485758 0.32039,0.372071 0.64078,1.023194 l 1.05937,2.108398 h -1.12138 l -0.98702,-1.979207 q -0.3824,-0.775147 -0.74414,-1.028361 -0.35657,-0.253215 -0.97668,-0.253215 h -1.13688 v 3.260783 h -1.04387 v -7.715291 h 2.35645 q 1.32291,0 1.97404,0.552938 0.65112,0.552938 0.65112,1.669149 0,0.728637 -0.34106,1.209228 -0.3359,0.480591 -0.98186,0.666626 z m -2.61482,-3.240112 v 2.738851 h 1.31258 q 0.75447,0 1.13688,-0.346232 0.38757,-0.3514 0.38757,-1.028361 0,-0.676962 -0.38757,-1.018026 -0.38241,-0.346232 -1.13688,-0.346232 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4723"
inkscape:connector-curvature="0" />
<path
d="m 350.17739,51.896173 -1.41594,3.839559 h 2.83704 z m -0.58911,-1.028361 h 1.18339 l 2.94039,7.715291 h -1.08521 l -0.7028,-1.979207 h -3.47782 l -0.7028,1.979207 h -1.10071 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4725"
inkscape:connector-curvature="0" />
<path
d="m 354.83344,50.867812 h 1.55546 l 1.96887,5.250325 1.9792,-5.250325 h 1.55547 v 7.715291 h -1.01803 v -6.77478 l -1.98954,5.291667 h -1.04903 l -1.98955,-5.291667 v 6.77478 h -1.01285 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4727"
inkscape:connector-curvature="0" />
<path
d="m 368.38299,51.725641 v 2.899048 h 1.31259 q 0.72863,0 1.12654,-0.377238 0.39791,-0.377238 0.39791,-1.07487 0,-0.692464 -0.39791,-1.069702 -0.39791,-0.377238 -1.12654,-0.377238 z m -1.04386,-0.857829 h 2.35645 q 1.29707,0 1.95853,0.589111 0.66663,0.583944 0.66663,1.715658 0,1.142049 -0.66663,1.725993 -0.66146,0.583943 -1.95853,0.583943 h -1.31259 v 3.100586 h -1.04386 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4729"
inkscape:connector-curvature="0" />
<path
d="m 377.38503,54.965753 q 0.3359,0.113688 0.65112,0.485758 0.3204,0.372071 0.64079,1.023194 l 1.05937,2.108398 h -1.12138 l -0.98702,-1.979207 q -0.38241,-0.775147 -0.74414,-1.028361 -0.35657,-0.253215 -0.97669,-0.253215 h -1.13688 v 3.260783 h -1.04386 v -7.715291 h 2.35644 q 1.32292,0 1.97404,0.552938 0.65113,0.552938 0.65113,1.669149 0,0.728637 -0.34107,1.209228 -0.3359,0.480591 -0.98185,0.666626 z m -2.61483,-3.240112 v 2.738851 h 1.31258 q 0.75448,0 1.13688,-0.346232 0.38758,-0.3514 0.38758,-1.028361 0,-0.676962 -0.38758,-1.018026 -0.3824,-0.346232 -1.13688,-0.346232 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4731"
inkscape:connector-curvature="0" />
<path
d="m 384.21665,51.575779 q -1.13688,0 -1.80867,0.847494 -0.66663,0.847493 -0.66663,2.309936 0,1.457275 0.66663,2.304769 0.67179,0.847493 1.80867,0.847493 1.13688,0 1.79834,-0.847493 0.66663,-0.847494 0.66663,-2.304769 0,-1.462443 -0.66663,-2.309936 -0.66146,-0.847494 -1.79834,-0.847494 z m 0,-0.847493 q 1.62264,0 2.59416,1.090372 0.97152,1.085205 0.97152,2.914551 0,1.824178 -0.97152,2.914551 -0.97152,1.085205 -2.59416,1.085205 -1.62781,0 -2.60449,-1.085205 -0.97152,-1.085205 -0.97152,-2.914551 0,-1.829346 0.97152,-2.914551 0.97668,-1.090372 2.60449,-1.090372 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4733"
inkscape:connector-curvature="0" />
<path
d="m 388.3611,50.867812 h 1.12138 l 1.9172,2.868042 1.92753,-2.868042 h 1.12138 l -2.48047,3.7052 2.64583,4.010091 h -1.12138 l -2.17041,-3.281453 -2.18591,3.281453 h -1.12655 l 2.75436,-4.118611 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4735"
inkscape:connector-curvature="0" />
<path
d="m 394.92917,50.867812 h 1.12138 l 2.13941,3.172933 2.1239,-3.172933 h 1.12138 l -2.72852,4.041097 v 3.674194 h -1.04903 v -3.674194 z"
style="fill:#a5a5a5;fill-opacity:1;stroke-width:0.26458332"
id="path4737"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="CV"
style="font-style:normal;font-weight:normal;font-size:8.28145313px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:0.20703632"
id="text4742"
transform="matrix(0.46130952,0,0,0.46130952,194.03739,-97.973253)">
<path
d="m 325.86291,63.455498 v 0.861304 q -0.41246,-0.38415 -0.88152,-0.574202 -0.46503,-0.190053 -0.9907,-0.190053 -1.03519,0 -1.58513,0.634857 -0.54994,0.630814 -0.54994,1.827743 0,1.192885 0.54994,1.827742 0.54994,0.630814 1.58513,0.630814 0.52567,0 0.9907,-0.190053 0.46906,-0.190053 0.88152,-0.574202 v 0.853216 q -0.42863,0.291145 -0.90983,0.436717 -0.47715,0.145573 -1.01092,0.145573 -1.37081,0 -2.15932,-0.837042 -0.78852,-0.841085 -0.78852,-2.292765 0,-1.455724 0.78852,-2.292766 0.78851,-0.841085 2.15932,-0.841085 0.54185,0 1.01901,0.145572 0.4812,0.141529 0.90174,0.42863 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4766"
inkscape:connector-curvature="0" />
<path
d="m 328.68944,69.027687 -2.3049,-6.037212 h 0.85322 l 1.91266,5.082904 1.9167,-5.082904 h 0.84917 l -2.30085,6.037212 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4768"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="CO"
style="font-style:normal;font-weight:normal;font-size:8.28145313px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:0.20703632"
id="text4746"
transform="matrix(0.46130952,0,0,0.46130952,195.21718,-97.973253)">
<path
d="m 341.98058,63.451478 v 0.861303 q -0.41245,-0.384149 -0.88152,-0.574202 -0.46502,-0.190053 -0.9907,-0.190053 -1.03518,0 -1.58512,0.634857 -0.54994,0.630814 -0.54994,1.827743 0,1.192885 0.54994,1.827743 0.54994,0.630813 1.58512,0.630813 0.52568,0 0.9907,-0.190052 0.46907,-0.190053 0.88152,-0.574203 v 0.853216 q -0.42863,0.291145 -0.90982,0.436718 -0.47716,0.145572 -1.01092,0.145572 -1.37081,0 -2.15933,-0.837041 -0.78851,-0.841085 -0.78851,-2.292766 0,-1.455724 0.78851,-2.292766 0.78852,-0.841085 2.15933,-0.841085 0.54185,0 1.019,0.145573 0.4812,0.141529 0.90174,0.42863 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4771"
inkscape:connector-curvature="0" />
<path
d="m 345.70077,63.540439 q -0.88961,0 -1.41529,0.663163 -0.52163,0.663163 -0.52163,1.807524 0,1.140317 0.52163,1.803481 0.52568,0.663163 1.41529,0.663163 0.88961,0 1.4072,-0.663163 0.52163,-0.663164 0.52163,-1.803481 0,-1.144361 -0.52163,-1.807524 -0.51759,-0.663163 -1.4072,-0.663163 z m 0,-0.663164 q 1.26971,0 2.02992,0.853217 0.76022,0.849172 0.76022,2.280634 0,1.427418 -0.76022,2.280635 -0.76021,0.849172 -2.02992,0.849172 -1.27376,0 -2.03802,-0.849172 -0.76021,-0.849173 -0.76021,-2.280635 0,-1.431462 0.76021,-2.280634 0.76426,-0.853217 2.03802,-0.853217 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4773"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="MIN"
style="font-style:normal;font-weight:normal;font-size:8.28145313px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:0.20703632"
id="text4750"
transform="matrix(0.46130952,0,0,0.46130952,194.88981,-97.973253)">
<path
d="m 354.59934,63.032246 h 1.21715 l 1.54064,4.108377 1.54873,-4.108377 h 1.21714 v 6.037212 h -0.7966 v -5.301262 l -1.55682,4.140726 h -0.82086 l -1.55682,-4.140726 v 5.301262 h -0.79256 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4776"
inkscape:connector-curvature="0" />
<path
d="m 361.74856,63.032246 h 0.81683 v 6.037212 h -0.81683 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4778"
inkscape:connector-curvature="0" />
<path
d="m 364.19094,63.032246 h 1.09989 l 2.67691,5.050555 v -5.050555 h 0.79256 v 6.037212 h -1.09988 l -2.67691,-5.050554 v 5.050554 h -0.79257 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4780"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="MAX"
style="font-style:normal;font-weight:normal;font-size:8.28145313px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:0.20703632"
id="text4754"
transform="matrix(0.46130952,0,0,0.46130952,194.36673,-97.973253)">
<path
d="m 373.55607,62.911008 h 1.21714 l 1.54064,4.108377 1.54873,-4.108377 h 1.21715 v 6.037211 h -0.7966 v -5.301262 l -1.55682,4.140727 h -0.82087 l -1.55681,-4.140727 v 5.301262 h -0.79256 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4783"
inkscape:connector-curvature="0" />
<path
d="m 382.72308,63.7157 -1.10796,3.004453 h 2.21998 z m -0.46098,-0.804692 h 0.92601 l 2.30085,6.037211 h -0.84917 l -0.54994,-1.548728 h -2.7214 l -0.54994,1.548728 h -0.8613 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4785"
inkscape:connector-curvature="0" />
<path
d="m 386.07529,62.911008 h 0.87748 l 1.50021,2.244241 1.50829,-2.244241 h 0.87748 l -1.94097,2.899317 2.07036,3.137894 h -0.87747 l -1.69835,-2.567735 -1.71047,2.567735 h -0.88153 l 2.15528,-3.222811 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4787"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="PID"
style="font-style:normal;font-weight:normal;font-size:8.28145313px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:0.20703632"
id="text4758"
transform="matrix(0.46130952,0,0,0.46130952,193.91048,-97.973253)">
<path
d="m 397.34425,62.830037 h 0.81683 v 6.037212 h -0.81683 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4792"
inkscape:connector-curvature="0" />
<path
d="m 400.60346,63.501287 v 4.694711 h 0.98666 q 1.24949,0 1.82774,-0.566115 0.58229,-0.566115 0.58229,-1.787306 0,-1.213103 -0.58229,-1.775175 -0.57825,-0.566115 -1.82774,-0.566115 z m -0.81682,-0.67125 h 1.67812 q 1.75496,0 2.57583,0.731906 0.82086,0.727862 0.82086,2.280634 0,1.56086 -0.82491,2.292766 -0.82491,0.731906 -2.57178,0.731906 h -1.67812 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4794"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="LRN"
style="font-style:normal;font-weight:normal;font-size:8.28145313px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#cacaca;fill-opacity:1;stroke:none;stroke-width:0.20703632"
id="text4762"
transform="matrix(0.46130952,0,0,0.46130952,194.42407,-97.973253)">
<path
d="m 411.3349,62.84908 h 0.81683 v 5.349786 h 2.93975 v 0.687426 h -3.75658 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4797"
inkscape:connector-curvature="0" />
<path
d="m 418.80762,66.055717 q 0.26284,0.08896 0.50951,0.380105 0.2507,0.291145 0.50141,0.800649 l 0.82896,1.649821 h -0.87748 l -0.77235,-1.548729 q -0.29923,-0.606552 -0.58228,-0.804692 -0.27902,-0.19814 -0.76426,-0.19814 h -0.88961 v 2.551561 H 415.9447 V 62.84908 h 1.84392 q 1.03518,0 1.54468,0.432673 0.5095,0.432674 0.5095,1.306108 0,0.570159 -0.26688,0.946221 -0.26284,0.376062 -0.7683,0.521635 z m -2.0461,-2.535387 v 2.14315 h 1.0271 q 0.59037,0 0.8896,-0.270927 0.30328,-0.27497 0.30328,-0.804692 0,-0.529721 -0.30328,-0.796604 -0.29923,-0.270927 -0.8896,-0.270927 z"
style="fill:#cacaca;fill-opacity:1;stroke-width:0.20703632"
id="path4799"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="widgets"
style="display:none">
<rect
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect49271"
width="2.1759191"
height="2.1772995"
x="12.524985"
y="54.577202" />
<rect
y="54.577202"
x="35.725647"
height="2.1772995"
width="2.1759191"
id="rect49816"
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect49818"
width="2.1759191"
height="2.1772995"
x="12.524985"
y="69.158226" />
<rect
y="69.158226"
x="35.725647"
height="2.1772995"
width="2.1759191"
id="rect49820"
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect49822"
width="2.1759191"
height="2.1772995"
x="12.524985"
y="91.147583" />
<rect
y="91.147583"
x="35.725647"
height="2.1772995"
width="2.1759191"
id="rect49824"
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect49826"
width="2.1759191"
height="2.1772995"
x="12.524985"
y="107.17003" />
<rect
y="107.17003"
x="35.725647"
height="2.1772995"
width="2.1759191"
id="rect49828"
style="opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.04378174;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
y="14.837339"
x="3.2122073"
height="28.000355"
width="44.000755"
id="rect50704"
style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.70603204;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
y="55.530807"
x="3.7069211"
height="8.2117252"
width="8.2117281"
id="rect50717"
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50719"
width="8.2117281"
height="8.2117252"
x="15.307249"
y="55.530807" />
<rect
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50721"
width="8.2117281"
height="8.2117252"
x="26.906193"
y="55.530807" />
<rect
y="55.530807"
x="38.506519"
height="8.2117252"
width="8.2117281"
id="rect50723"
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50733"
width="8.2117281"
height="8.2117252"
x="3.7069209"
y="70.144905" />
<rect
y="70.144905"
x="15.307249"
height="8.2117252"
width="8.2117281"
id="rect50735"
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
y="70.144905"
x="26.906193"
height="8.2117252"
width="8.2117281"
id="rect50737"
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50739"
width="8.2117281"
height="8.2117252"
x="38.506519"
y="70.144905" />
<rect
y="92.143906"
x="3.7069209"
height="8.2117252"
width="8.2117281"
id="rect50741"
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50743"
width="8.2117281"
height="8.2117252"
x="15.307249"
y="92.143906" />
<rect
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50745"
width="8.2117281"
height="8.2117252"
x="26.906193"
y="92.143906" />
<rect
y="92.143906"
x="38.506519"
height="8.2117252"
width="8.2117281"
id="rect50747"
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50749"
width="8.2117281"
height="8.2117252"
x="3.7069209"
y="108.1443" />
<rect
y="108.1443"
x="15.307249"
height="8.2117252"
width="8.2117281"
id="rect50751"
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
y="108.1443"
x="26.906193"
height="8.2117252"
width="8.2117281"
id="rect50753"
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<rect
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.16517603;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="rect50755"
width="8.2117281"
height="8.2117252"
x="38.506523"
y="108.1443" />
</g>
</svg>

Loading…
Cancel
Save