# HG changeset patch # User Edouard Tisserant # Date 1653907444 -7200 # Node ID 4f252e8d67595d73480267184ddd95cc698dc32b # Parent 5335895ce5261dc3daa8b87740c25c35b7b8a98b SVGHMI: more fixes for XY graph + add XY graph test. diff -r 5335895ce526 -r 4f252e8d6759 svghmi/widget_xygraph.ysl2 --- a/svghmi/widget_xygraph.ysl2 Thu May 26 12:11:42 2022 +0200 +++ b/svghmi/widget_xygraph.ysl2 Mon May 30 12:44:04 2022 +0200 @@ -72,6 +72,15 @@ [this.x_axis_line_elt, this.y_axis_line_elt], [this.x_format, this.y_format]); + let max_stroke_width = 0; + for(let curve of this.curves){ + if(curve.style.strokeWidth > max_stroke_width){ + max_stroke_width = curve.style.strokeWidth; + } + } + + this.Margins=this.reference.getLengths().map(length => max_stroke_width/length); + // create <clipPath> path and attach it to widget let clipPath = document.createElementNS(xmlns,"clipPath"); let clipPathPath = document.createElementNS(xmlns,"path"); @@ -79,6 +88,7 @@ clipPathPathDattr.value = this.reference.getClipPathPathDattr(); clipPathPath.setAttributeNode(clipPathPathDattr); clipPath.appendChild(clipPathPath); + clipPath.id = randomId(); this.element.appendChild(clipPath); // assign created clipPath to clip-path property of curves @@ -115,7 +125,7 @@ } this.xmax = time; - let Xlength = this.xmax - this.xmin; + let Xrange = this.xmax - this.xmin; if(!this.fixed_y_range){ ymin_damaged = overflow <= this.ymin; @@ -129,7 +139,14 @@ this.ymin = value; } } - let Ylength = this.ymax - this.ymin; + let Yrange = this.ymax - this.ymin; + + let [xMargin,yMargin] = zip(this.Margins, [Xrange, Yrange]).map(([m,l]) => m*l); + [[this.dxmin, this.dxmax],[this.dymin,this.dymax]] = + [[this.xmin-xMargin, this.xmax+xMargin], + [this.ymin-yMargin, this.ymax+yMargin]]; + Xrange += 2*xMargin; + Yrange += 2*yMargin; // recompute curves "d" attribute // FIXME: use SVG getPathData and setPathData when available. @@ -141,8 +158,8 @@ zip(this.curves_data, this.curves).map(([data,curve]) => { let new_d = data.map(([x,y], i) => { // compute curve point from data, ranges, and base_ref - let xv = vectorscale(xvect, (x - this.xmin) / Xlength); - let yv = vectorscale(yvect, (y - this.ymin) / Ylength); + let xv = vectorscale(xvect, (x - this.dxmin) / Xrange); + let yv = vectorscale(yvect, (y - this.dymin) / Yrange); let px = base_point.x + xv.x + yv.x; let py = base_point.y + xv.y + yv.y; if(!this.fixed_y_range){ @@ -169,8 +186,8 @@ if(this.curves_data.some(data => data.length > 1)){ // move marks and update labels - this.reference.applyRanges([[this.xmin, this.xmax], - [this.ymin, this.ymax]]); + this.reference.applyRanges([[this.dxmin, this.dxmax], + [this.dymin, this.dymax]]); // apply computed curves "d" attributes for(let [curve, d_attr] of zip(this.curves, this.curves_d_attr)){ @@ -220,9 +237,17 @@ return new DOMPoint(p2 * p1.x , p2 * p1.y); }; +function vectorLength(p1) { + return Math.sqrt(p1.x*p1.x + p1.y*p1.y); +}; + +function randomId(){ + return Date.now().toString(36) + Math.random().toString(36).substr(2); +} + function move_elements_to_group(elements) { let newgroup = document.createElementNS(xmlns,"g"); - newgroup.id = Date.now().toString(36) + Math.random().toString(36).substr(2); + newgroup.id = randomId(); for(let element of elements){ let parent = element.parentElement; @@ -308,11 +333,17 @@ this.base_ref = [base_point, xvect, yvect]; + this.lengths = [xvect,yvect].map(v => vectorLength(v)); + for(let axis of this.axes){ axis.setBasePoint(base_point); } } + getLengths(){ + return this.lengths; + } + getBaseRef(){ return this.base_ref; } @@ -372,7 +403,7 @@ for(let [elementname,element] of zip(["minor", "major", "label"],[...marks,label])){ for(let name of ["base","slide"]){ let transform = svg_root.createSVGTransform(); - element.transform.baseVal.appendItem(transform); + element.transform.baseVal.insertItemBefore(transform,0); this[elementname+"_"+name+"_transform"]=transform; }; }; @@ -395,7 +426,7 @@ this.marks_and_label_group.transform.baseVal.appendItem(this.marks_and_label_group_transform); this.duplicates = []; - this.last_mark_count = 0; + this.last_duplicate_index = 0; } setBasePoint(base_point){ @@ -445,12 +476,9 @@ // - To transform order of magnitude to an integer, floor() is used. // This results in a count of mark fluctuating in between 10 and 100. // - // - To spare resources result is better in between 5 and 50, - // and log10(5) is substracted to order of magnitude to obtain this - // log10(5) ~= 0.69897 - - - let unit = Math.pow(10, Math.floor(Math.log10(range)-0.69897)); + // - To spare resources result is better in between 3 and 30, + // and log10(3) is substracted to order of magnitude to obtain this + let unit = Math.pow(10, Math.floor(Math.log10(range)-Math.log10(3))); // TODO: for time values (ms), units may be : // 1 -> ms @@ -508,11 +536,11 @@ // base_point // move major marks and label to first positive mark position - let v = vectorscale(unit_vect, unit); - this.label_slide_transform.setTranslate(v.x, v.y); - this.major_slide_transform.setTranslate(v.x, v.y); + // let v = vectorscale(unit_vect, unit); + // this.label_slide_transform.setTranslate(v.x, v.y); + // this.major_slide_transform.setTranslate(v.x, v.y); // move minor mark to first half positive mark position - v = vectorscale(unit_vect, unit/2); + let v = vectorscale(unit_vect, unit/2); this.minor_slide_transform.setTranslate(v.x, v.y); // duplicate marks and labels as needed @@ -523,7 +551,7 @@ let transform = svg_root.createSVGTransform(); let newlabel = this.label.cloneNode(true); let newuse = document.createElementNS(xmlns,"use"); - let newuseAttr = document.createAttribute("xlink:href"); + let newuseAttr = document.createAttribute("href"); newuseAttr.value = "#"+this.marks_group.id; newuse.setAttributeNode(newuseAttr); newgroup.transform.baseVal.appendItem(transform); @@ -560,10 +588,10 @@ // X<--------->| // base_point + let duplicate_index = 0; for(let mark_index = 0; mark_index <= mark_count; mark_index++){ - let i = 0; let val = (mark_min + mark_index) * unit; - let vec = vectorscale(unit_vect, offset + val - min); + let vec = vectorscale(unit_vect, val - min); let text = this.format ? sprintf(this.format, val) : val.toString(); if(mark_index == mark_offset){ // apply offset to original marks and label groups @@ -572,7 +600,7 @@ // update original label text this.label.getElementsByTagName("tspan")[0].textContent = text; } else { - let [transform,element] = this.duplicates[i++]; + let [transform,element] = this.duplicates[duplicate_index++]; // apply unit vector*N to marks and label groups transform.setTranslate(vec.x, vec.y); @@ -581,19 +609,20 @@ element.getElementsByTagName("tspan")[0].textContent = text; // Attach to group if not already - if(i >= this.last_mark_count){ + if(element.parentElement == null){ this.group.appendChild(element); } } } + let save_duplicate_index = duplicate_index; // dettach marks and label from group if not anymore visible - for(let i = current_mark_count; i < this.last_mark_count; i++){ - let [transform,element] = this.duplicates[i]; + for(;duplicate_index < this.last_duplicate_index; duplicate_index++){ + let [transform,element] = this.duplicates[duplicate_index]; this.group.removeChild(element); } - this.last_mark_count = current_mark_count; + this.last_duplicate_index = save_duplicate_index; return vectorscale(unit_vect, offset); } diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_i18n/svghmi_0@svghmi/messages.pot --- a/tests/projects/svghmi_i18n/svghmi_0@svghmi/messages.pot Thu May 26 12:11:42 2022 +0200 +++ b/tests/projects/svghmi_i18n/svghmi_0@svghmi/messages.pot Mon May 30 12:44:04 2022 +0200 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2021-02-15 14:45+CET\n" +"POT-Creation-Date: 2022-05-26 11:39+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/beremiz.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/beremiz.xml Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,5 @@ +<?xml version='1.0' encoding='utf-8'?> +<BeremizRoot xmlns:xsd="http://www.w3.org/2001/XMLSchema" URI_location="PYRO://127.0.0.1:61427"> + <TargetType/> + <Libraries Enable_SVGHMI_Library="true"/> +</BeremizRoot> diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/plc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/plc.xml Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,337 @@ +<?xml version='1.0' encoding='utf-8'?> +<project xmlns:ns1="http://www.plcopen.org/xml/tc6.xsd" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201"> + <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2022-05-06T11:12:02"/> + <contentHeader name="Unnamed" modificationDateTime="2022-05-09T09:09:01"> + <coordinateInfo> + <fbd> + <scaling x="5" y="5"/> + </fbd> + <ld> + <scaling x="0" y="0"/> + </ld> + <sfc> + <scaling x="0" y="0"/> + </sfc> + </coordinateInfo> + </contentHeader> + <types> + <dataTypes/> + <pous> + <pou name="program0" pouType="program"> + <interface> + <localVars> + <variable name="trendval0"> + <type> + <derived name="HMI_REAL"/> + </type> + </variable> + <variable name="trendval1"> + <type> + <derived name="HMI_REAL"/> + </type> + </variable> + <variable name="counter"> + <type> + <INT/> + </type> + </variable> + </localVars> + </interface> + <body> + <FBD> + <outVariable localId="2" executionOrderId="0" height="25" width="95" negated="false"> + <position x="910" y="195"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="10" formalParameter="OUT"> + <position x="910" y="205"/> + <position x="885" y="205"/> + </connection> + </connectionPointIn> + <expression>trendval0</expression> + </outVariable> + <outVariable localId="3" executionOrderId="0" height="25" width="95" negated="false"> + <position x="910" y="255"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="12" formalParameter="OUT"> + <position x="910" y="265"/> + <position x="885" y="265"/> + </connection> + </connectionPointIn> + <expression>trendval1</expression> + </outVariable> + <block localId="4" typeName="ADD" executionOrderId="0" height="75" width="63"> + <position x="210" y="190"/> + <inputVariables> + <variable formalParameter="IN1"> + <connectionPointIn> + <relPosition x="0" y="35"/> + <connection refLocalId="1"> + <position x="210" y="225"/> + <position x="140" y="225"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN2"> + <connectionPointIn> + <relPosition x="0" y="60"/> + <connection refLocalId="7"> + <position x="210" y="250"/> + <position x="170" y="250"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="63" y="35"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="5" typeName="SEL" executionOrderId="0" height="80" width="65"> + <position x="485" y="175"/> + <inputVariables> + <variable formalParameter="G"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="6" formalParameter="OUT"> + <position x="485" y="205"/> + <position x="460" y="205"/> + <position x="460" y="185"/> + <position x="435" y="185"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN0"> + <connectionPointIn> + <relPosition x="0" y="50"/> + <connection refLocalId="4" formalParameter="OUT"> + <position x="485" y="225"/> + <position x="273" y="225"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN1"> + <connectionPointIn> + <relPosition x="0" y="70"/> + <connection refLocalId="8"> + <position x="485" y="245"/> + <position x="445" y="245"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="65" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="6" typeName="GE" executionOrderId="0" height="60" width="65"> + <position x="370" y="155"/> + <inputVariables> + <variable formalParameter="IN1"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="4" formalParameter="OUT"> + <position x="370" y="185"/> + <position x="306" y="185"/> + <position x="306" y="225"/> + <position x="273" y="225"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN2"> + <connectionPointIn> + <relPosition x="0" y="50"/> + <connection refLocalId="9"> + <position x="370" y="205"/> + <position x="350" y="205"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="65" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inVariable localId="7" executionOrderId="0" height="25" width="20" negated="false"> + <position x="150" y="240"/> + <connectionPointOut> + <relPosition x="20" y="10"/> + </connectionPointOut> + <expression>1</expression> + </inVariable> + <inVariable localId="8" executionOrderId="0" height="25" width="20" negated="false"> + <position x="425" y="235"/> + <connectionPointOut> + <relPosition x="20" y="10"/> + </connectionPointOut> + <expression>0</expression> + </inVariable> + <inVariable localId="9" executionOrderId="0" height="25" width="35" negated="false"> + <position x="315" y="195"/> + <connectionPointOut> + <relPosition x="35" y="10"/> + </connectionPointOut> + <expression>360</expression> + </inVariable> + <block localId="10" typeName="COS" executionOrderId="0" height="40" width="60"> + <position x="825" y="175"/> + <inputVariables> + <variable formalParameter="IN"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="14" formalParameter="OUT"> + <position x="825" y="205"/> + <position x="785" y="205"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="60" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="11" typeName="INT_TO_REAL" executionOrderId="0" height="40" width="100"> + <position x="585" y="175"/> + <inputVariables> + <variable formalParameter="IN"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="5" formalParameter="OUT"> + <position x="585" y="205"/> + <position x="550" y="205"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="100" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <block localId="12" typeName="SIN" executionOrderId="0" height="40" width="60"> + <position x="825" y="235"/> + <inputVariables> + <variable formalParameter="IN"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="14" formalParameter="OUT"> + <position x="825" y="265"/> + <position x="805" y="265"/> + <position x="805" y="205"/> + <position x="785" y="205"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="60" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inOutVariable localId="1" executionOrderId="0" height="25" width="70" negatedOut="false" negatedIn="false"> + <position x="70" y="215"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="5" formalParameter="OUT"> + <position x="70" y="225"/> + <position x="60" y="225"/> + <position x="60" y="285"/> + <position x="560" y="285"/> + <position x="560" y="205"/> + <position x="550" y="205"/> + </connection> + </connectionPointIn> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>counter</expression> + </inOutVariable> + <comment localId="13" height="110" width="285"> + <position x="40" y="25"/> + <content> + <xhtml:p><![CDATA[Generate values for curves]]></xhtml:p> + </content> + </comment> + <block localId="14" typeName="DIV" executionOrderId="0" height="60" width="65"> + <position x="720" y="175"/> + <inputVariables> + <variable formalParameter="IN1"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="11" formalParameter="OUT"> + <position x="720" y="205"/> + <position x="685" y="205"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN2"> + <connectionPointIn> + <relPosition x="0" y="50"/> + <connection refLocalId="15"> + <position x="720" y="225"/> + <position x="685" y="225"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="65" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inVariable localId="15" executionOrderId="0" height="25" width="70" negated="false"> + <position x="615" y="215"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>57.2958</expression> + </inVariable> + </FBD> + </body> + </pou> + </pous> + </types> + <instances> + <configurations> + <configuration name="config"> + <resource name="resource1"> + <task name="task0" priority="0" interval="T#20ms"> + <pouInstance name="instance0" typeName="program0"/> + </task> + </resource> + </configuration> + </configurations> + </instances> +</project> diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/svghmi_0@svghmi/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/svghmi_0@svghmi/baseconfnode.xml Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='utf-8'?> +<BaseParams xmlns:xsd="http://www.w3.org/2001/XMLSchema" IEC_Channel="0" Name="svghmi_0"/> diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/svghmi_0@svghmi/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/svghmi_0@svghmi/confnode.xml Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='utf-8'?> +<SVGHMI xmlns:xsd="http://www.w3.org/2001/XMLSchema"/> diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/svghmi_0@svghmi/fr-FR.mo Binary file tests/projects/svghmi_xy/svghmi_0@svghmi/fr-FR.mo has changed diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/svghmi_0@svghmi/fr-FR.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/svghmi_0@svghmi/fr-FR.po Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,21 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2022-05-13 11:27+CEST\n" +"PO-Revision-Date: 2022-05-13 11:29+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: SVGHMI 1.0\n" +"X-Generator: Poedit 2.3\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: fr\n" + +msgid "blup" +msgstr "bloup" diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/svghmi_0@svghmi/messages.pot --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/svghmi_0@svghmi/messages.pot Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,21 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2022-05-30 12:35+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: SVGHMI 1.0\n" + + +#:svghmi.svg: blup:text73 +msgid "blup" +msgstr "" + diff -r 5335895ce526 -r 4f252e8d6759 tests/projects/svghmi_xy/svghmi_0@svghmi/svghmi.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/projects/svghmi_xy/svghmi_0@svghmi/svghmi.svg Mon May 30 12:44:04 2022 +0200 @@ -0,0 +1,585 @@ +<?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" + inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" + sodipodi:docname="svghmi.svg" + id="hmi0" + version="1.1" + viewBox="0 0 1280 720" + height="720" + width="1280"> + <metadata + id="metadata8"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs6"> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker1993" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1991" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#00aad4;fill-opacity:1;fill-rule:evenodd;stroke:#00aad4;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1887" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#00aad4;fill-opacity:1;fill-rule:evenodd;stroke:#00aad4;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path1885" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker1721" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1719" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1621" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path1619" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker1527" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1525" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker1439" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + inkscape:connector-curvature="0" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path1437" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1357" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path1355" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1275" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1273" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker1199" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path1197" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0" + refX="0" + id="marker6249" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + id="path6247" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker6185" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:collect="always"> + <path + inkscape:connector-curvature="0" + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" + id="path6183" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="DotM" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotM"> + <path + transform="matrix(0.4,0,0,0.4,2.96,0.4)" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:#ff6600;stroke-width:1.00000003pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path8269" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker26099" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:#ff6600;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path26097" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:collect="always" + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="marker19820-3" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path19818-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#3ee800;fill-opacity:1;fill-rule:evenodd;stroke:#3ee800;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.4,0,0,-0.4,-4,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker25117-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#3ee800;fill-opacity:1;fill-rule:evenodd;stroke:#3ee800;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path25115-5" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="DotM-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotM"> + <path + transform="matrix(0.4,0,0,0.4,2.96,0.4)" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:#ff6600;stroke-width:1.00000003pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path8269-5" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:collect="always" + inkscape:isstock="true" + style="overflow:visible" + id="marker26099-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Mend"> + <path + transform="matrix(-0.4,0,0,-0.4,-4,0)" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:#ff6600;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path26097-2" + inkscape:connector-curvature="0" /> + </marker> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1600" + inkscape:window-height="836" + id="namedview4" + showgrid="false" + inkscape:zoom="2.6222222" + inkscape:cx="138.92196" + inkscape:cy="243.43713" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g2776" /> + <rect + inkscape:label="HMI:Page:Home" + y="0" + x="0" + height="720" + width="1280" + id="rect1016" + style="color:#000000;opacity:1;fill:#d6d6d6;fill-opacity:1" /> + <g + transform="matrix(3.7795276,0,0,3.7795276,-24.745762,-208.06827)" + id="g2776" + inkscape:label="HMI:XYGraph|10:100:%.2D:%.4f@/TRENDVAL0@/TRENDVAL1"> + <rect + inkscape:label="background" + ry="1.8520833" + rx="1.8520833" + y="87.995224" + x="22.985178" + height="114.9259" + width="167.31071" + id="rect2746" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.66866732;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <path + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 155.83129,160.76911 c -6.48118,-0.65276 -10.17779,-21.29836 -15.40662,-31.02314 -3.53004,-8.41808 -7.5877,-1.29208 -10.4198,6.97869 -4.61524,10.2233 -10.32507,20.13252 -15.96731,14.06607 -7.74352,-19.32213 -18.607099,-4.75161 -26.390159,-23.86108 -4.63396,-13.32693 -11.88412,-10.90822 -16.09527,3.29105 -2.36066,8.20528 -4.35835,18.89169 -7.94811,21.41954 -2.80281,2.74222 -5.9827,1.11526 -8.29837,-5.00354" + id="path2748" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" + inkscape:label="curve_1" /> + <path + inkscape:label="curve_0" + sodipodi:nodetypes="cccccccc" + inkscape:connector-curvature="0" + id="path2750" + d="m 55.011564,133.09949 c 6.481177,0.19426 10.177788,6.33834 15.406617,9.23241 3.530037,2.5052 7.587703,0.38452 10.419795,-2.07684 4.615243,-3.04243 10.325074,-5.99139 15.967312,-4.18603 7.743522,5.75022 18.607102,1.41407 26.390162,7.101 4.63396,3.96606 11.88412,3.24626 16.09527,-0.97941 2.36066,-2.44187 4.35835,-5.62212 7.94811,-6.3744 2.80281,-0.81608 5.9827,-0.3319 8.29837,1.48904" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#00b4cf;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + inkscape:label="y_interval_minor_mark" + inkscape:connector-curvature="0" + id="path2752" + d="m 43.637172,172.91226 h -1.35783" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + sodipodi:nodetypes="cc" /> + <path + inkscape:label="y_axis_line" + inkscape:connector-curvature="0" + id="path2754" + d="M 44.123362,185.11382 V 98.607125" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6249)" + sodipodi:nodetypes="cc" /> + <path + inkscape:label="y_interval_major_mark" + inkscape:connector-curvature="0" + id="path2756" + d="m 43.637172,167.88501 h -3.4745" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <text + inkscape:label="y_axis_label" + id="text2760" + y="169.42703" + x="38.401363" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="font-size:4.23333311px;text-align:end;text-anchor:end;stroke-width:0.26458332px" + y="169.42703" + x="38.401363" + id="tspan2758" + sodipodi:role="line">10</tspan></text> + <path + sodipodi:nodetypes="cc" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 63.393748,179.65255 v 1.35783" + id="path2764" + inkscape:connector-curvature="0" + inkscape:label="x_interval_minor_mark" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6185)" + d="M 39.02135,179.37991 H 169.44888" + id="path2766" + inkscape:connector-curvature="0" + inkscape:label="x_axis_line" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 68.420998,179.65255 v 3.4745" + id="path2768" + inkscape:connector-curvature="0" + inkscape:label="x_interval_major_mark" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;" + x="-184.6293" + y="70.044762" + id="text2772" + inkscape:label="x_axis_label" + transform="rotate(-90)"><tspan + sodipodi:role="line" + id="tspan2770" + x="-186.94957" + y="70.044762" + style="font-size:4.23333311px;stroke-width:0.26458332px;text-anchor:end;text-align:end;">10</tspan></text> + </g> + <g + transform="matrix(2.1611542,0,0,2.1611542,616.6367,256.27681)" + id="g7998" + inkscape:label="HMI:Meter@/TRENDVAL0"> + <desc + id="desc3869">A sophisticated meter looking like real</desc> + <path + inkscape:label="range" + sodipodi:open="true" + d="M 63.610123,2.2017068 A 64.411957,64.411957 0 0 1 128.02208,-62.210247" + sodipodi:end="4.712389" + sodipodi:start="3.1415927" + sodipodi:ry="64.411957" + sodipodi:rx="64.411957" + sodipodi:cy="2.2017097" + sodipodi:cx="128.02208" + sodipodi:type="arc" + id="path7978" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#00b4cf;stroke-width:1.74884677;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#marker19820-3);marker-end:url(#marker25117-7);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;font-variant-east_asian:normal;vector-effect:none;stroke-linecap:butt;stroke-linejoin:miter" /> + <path + inkscape:label="needle" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path7980" + d="M 130.96206,4.0725977 79.111776,-41.363223" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff6600;stroke-width:0.92543143;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:29.63333321;stroke-opacity:1;marker-start:url(#DotM);marker-end:url(#marker26099)" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="49.132977" + y="4.9187088" + id="text7984" + inkscape:label="min"><tspan + sodipodi:role="line" + id="tspan7982" + x="49.132977" + y="4.9187088" + style="text-align:end;text-anchor:end;fill:#ff6600;stroke-width:0.26458332px">-1</tspan></text> + <text + id="text7988" + y="-68.889908" + x="127.48073" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="max"><tspan + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.26458332px" + y="-68.889908" + x="127.48073" + id="tspan7986" + sodipodi:role="line">1</tspan></text> + </g> + <g + transform="matrix(2.1611542,0,0,2.1611542,630.36551,530.09036)" + id="g7998-9" + inkscape:label="HMI:Meter@/TRENDVAL1"> + <desc + id="desc3869-1">A sophisticated meter looking like real</desc> + <path + inkscape:label="range" + sodipodi:open="true" + d="M 63.610123,2.2017068 A 64.411957,64.411957 0 0 1 128.02208,-62.210247" + sodipodi:end="4.712389" + sodipodi:start="3.1415927" + sodipodi:ry="64.411957" + sodipodi:rx="64.411957" + sodipodi:cy="2.2017097" + sodipodi:cx="128.02208" + sodipodi:type="arc" + id="path7978-2" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.7488468;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#marker19820-3);marker-end:url(#marker25117-7);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;font-variant-east_asian:normal;vector-effect:none;stroke-linecap:butt;stroke-linejoin:miter" /> + <path + inkscape:label="needle" + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path7980-7" + d="M 130.96206,4.0725977 79.111776,-41.363223" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff6600;stroke-width:0.92543143;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:29.63333321;stroke-opacity:1;marker-start:url(#DotM-3);marker-end:url(#marker26099-6)" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="49.132977" + y="4.9187088" + id="text7984-0" + inkscape:label="min"><tspan + sodipodi:role="line" + id="tspan7982-9" + x="49.132977" + y="4.9187088" + style="text-align:end;text-anchor:end;fill:#ff6600;stroke-width:0.26458332px">-1</tspan></text> + <text + id="text7988-3" + y="-68.889908" + x="127.48073" + style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="max"><tspan + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.26458332px" + y="-68.889908" + x="127.48073" + id="tspan7986-6" + sodipodi:role="line">1</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="1003.7288" + y="83.8983" + id="text73" + inkscape:label="_blup"><tspan + sodipodi:role="line" + id="tspan71" + x="1003.7288" + y="83.8983">blup</tspan></text> + <g + id="g14237" + inkscape:label="HMI:DropDown:#langs@lang" + transform="matrix(0.81491208,0,0,0.81491208,42.49804,-160.06995)" + style="stroke-width:0.35083869"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#53676c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.75419343;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect14212" + width="574.92957" + height="84.312515" + x="864.00842" + y="946.07819" + rx="2.4558709" + ry="2.4558709" + inkscape:label="box" /> + <rect + inkscape:label="highlight" + ry="2.4558709" + rx="2.4558709" + y="968.2616" + x="864.00842" + height="39.945667" + width="574.92957" + id="rect5497" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.75419331;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <text + id="text14183" + y="998.13739" + x="890.70056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.95956421px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d42aff;fill-opacity:1;stroke:none;stroke-width:0.35083869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:label="text"><tspan + style="text-align:start;text-anchor:start;fill:#d42aff;stroke-width:0.35083869px" + y="998.13739" + x="890.70056" + sodipodi:role="line" + id="tspan421">Language (Country)</tspan></text> + <path + sodipodi:type="star" + style="opacity:1;vector-effect:none;fill:#a7a5a6;fill-opacity:1;stroke:none;stroke-width:0.12376806;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path424" + sodipodi:sides="3" + sodipodi:cx="1387.0236" + sodipodi:cy="977.31354" + sodipodi:r1="43.683521" + sodipodi:r2="21.841761" + sodipodi:arg1="1.5707963" + sodipodi:arg2="2.6179939" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 1387.0236,1020.9971 -18.9156,-32.76268 -18.9155,-32.76264 37.8311,0 37.831,0 -18.9155,32.76264 z" + inkscape:transform-center-y="10.92088" + inkscape:label="button" /> + </g> +</svg>