Anonymous
C# Optix 1.6.2.36 AdvancedSvgimage
Сообщение
Anonymous » 23 июл 2025, 12:19
Я использую C# с версией Allen Bradley's Poptix Application версии 1.6.2.36. Optix включает в себя поддержку SVG через Object AdvancedSvgimage, Optix был приобретен Алленом Брэдли, и в документации не так много.
Код: Выделить всё
var objJSON = new {
columns = "1",
ctrl = new {
svg = new {
hdr = new {
encoding = "utf-8",
version = "1.0"
},
attr = new {
fill = "none",
viewbox = "0 0 16 16",
xmllns = "http://www.w3.org/2000/svg"
},
children = new object[] { new {
name = "path",
fill_rule = "evenodd" ,
clip_rule = "evenodd",
d =
"M8 16L3.54223 12.3383C1.93278 11.0162 1 9.04287 1 6.96005C1"
+ " 3.11612 4.15607 0 8 0C11.8439 0 15 3.11612 15 6.96005C15"
+ " 9.04287 14.0672 11.0162 12.4578 12.3383L8 16ZM3 6H5C6.10457"
+ " 6 7 6.89543 7 8V9L3 7.5V6ZM11 6C9.89543 6 9 6.89543 9 8V9L13 7.5V6H11Z",
fill = "#000000"
} }
}, type = "SVG" },
font = "family,size(points),weight,italic,undeline",
gap = new { x = "8", y = "8" },
iomask = "0xffff",
position = new {
ctrl = "3,auto,center,center,Ctrl",
tag = "1,auto,center,center,Tag",
value = "4,auto,center,center,Val" },
shapename = new {
affix = "Affix",
name = "Panel1",
prefix = "Prefix" },
rslinx = "CommDrivers/RAEtherNet_IPDriver"
+ "/RAEtherNet_IPStation/Tags"
+ "/Controller Tags/Local:3:O"
+ "/Pt{pt}"
+ "/Data"
};
string strJSON = JsonSerializer.Serialize(objJSON);
< /code>
Это часть кода запуска, который проходит json: < /p>
IUAObject objPt = null;
...
if (mJSON.Ctrl.Type.CompareTo(mcstrCtrlSVG) == 0) {
if (mJSON.Ctrl.SVG.Children != null) {
objPt = InformationModel.MakeObject(mJSON.Ctrl.Type);
}
}
if (objPt == null) {
Log.Error($"Unable to create object \"{mJSON.Ctrl.Type}\"");
return;
}
...
if (mJSON.Ctrl.Type.CompareTo(mcstrCtrlSVG) == 0) {
clsSVGAttr SVGAttr = mJSON.Ctrl.SVG.Attr;
clsSVGHdr SVGHdr = mJSON.Ctrl.SVG.Hdr;
string strSVG = string.Empty;
string strNewNode = string.Empty;
for (int intChild = 0; intChild < mJSON.Ctrl.SVG.Children.Length;
intChild++) {
object objChild = mJSON.Ctrl.SVG.Children[intChild];
if (objChild is System.Text.Json.JsonElement) {
JsonObject objJSON = JsonSerializer.Deserialize
(objChild.ToString());
foreach (var (strKey, value) in objJSON) {
if (strKey == mcstrName) {
strNewNode = $"{value}";
} else {
strNewNode += $" {strKey.Replace("_", "-")}=\"{value}\"";
}
}
continue;
}
PropertyInfo[] aryProperties = objChild.GetType().GetProperties();
foreach (PropertyInfo piMember in aryProperties) {
if (!(piMember.GetGetMethod(true) is { } getMethod)
|| piMember.GetIndexParameters().Length > 0) {
continue;
}
object objValue;
try {
objValue = getMethod.Invoke(objChild, Array.Empty());
if (objValue == null) {
Log.Info($"{piMember.Name} is null");
} else {
Log.Info($"{piMember.Name} is {objValue}");
}
} catch (Exception ex) {
Log.Error($"L607 Exception: {ex.GetType().Name}: {ex.Message}");
objValue = null;
}
if (objValue == null) {
continue;
}
if (piMember.Name.CompareTo(mcstrName) == 0) {
strNewNode = $"{piMember.Name}";
} else {
strNewNode += $" \"{piMember}\"=\"{objValue}\"";
}
}
}
if (strNewNode.Length > 0) {
strNewNode = $"";
}
if (strNewNode.Length > 0) {
if (SVGHdr != null) {
strSVG = $"";
}
if (SVGAttr != null) {
strSVG += $"";
}
if (strSVG.Length > 0) {
if (strNewNode.Length > 0) {
strSVG += strNewNode;
}
strSVG += "";
}
if (!string.IsNullOrEmpty(strSVG)) {
Log.Info($"L640 {strSVG}");
((AdvancedSVGImage)objPt).SetImageContent(strSVG);
}
}
}
< /code>
Проблема, которую я вижу в консоли: < /p>
Exception: No behaviour or observer found that handles the method 'SetImageContent' on node SVG,C3
У меня есть только «Visual Studio Code», версия 1.102.1, должна быть установлена полная визуальная студия>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... edsvgimage
1753262385
Anonymous
Я использую C# с версией Allen Bradley's Poptix Application версии 1.6.2.36. Optix включает в себя поддержку SVG через Object AdvancedSvgimage, Optix был приобретен Алленом Брэдли, и в документации не так много.[code]var objJSON = new { columns = "1", ctrl = new { svg = new { hdr = new { encoding = "utf-8", version = "1.0" }, attr = new { fill = "none", viewbox = "0 0 16 16", xmllns = "http://www.w3.org/2000/svg" }, children = new object[] { new { name = "path", fill_rule = "evenodd" , clip_rule = "evenodd", d = "M8 16L3.54223 12.3383C1.93278 11.0162 1 9.04287 1 6.96005C1" + " 3.11612 4.15607 0 8 0C11.8439 0 15 3.11612 15 6.96005C15" + " 9.04287 14.0672 11.0162 12.4578 12.3383L8 16ZM3 6H5C6.10457" + " 6 7 6.89543 7 8V9L3 7.5V6ZM11 6C9.89543 6 9 6.89543 9 8V9L13 7.5V6H11Z", fill = "#000000" } } }, type = "SVG" }, font = "family,size(points),weight,italic,undeline", gap = new { x = "8", y = "8" }, iomask = "0xffff", position = new { ctrl = "3,auto,center,center,Ctrl", tag = "1,auto,center,center,Tag", value = "4,auto,center,center,Val" }, shapename = new { affix = "Affix", name = "Panel1", prefix = "Prefix" }, rslinx = "CommDrivers/RAEtherNet_IPDriver" + "/RAEtherNet_IPStation/Tags" + "/Controller Tags/Local:3:O" + "/Pt{pt}" + "/Data" }; string strJSON = JsonSerializer.Serialize(objJSON); < /code> Это часть кода запуска, который проходит json: < /p> IUAObject objPt = null; ... if (mJSON.Ctrl.Type.CompareTo(mcstrCtrlSVG) == 0) { if (mJSON.Ctrl.SVG.Children != null) { objPt = InformationModel.MakeObject(mJSON.Ctrl.Type); } } if (objPt == null) { Log.Error($"Unable to create object \"{mJSON.Ctrl.Type}\""); return; } ... if (mJSON.Ctrl.Type.CompareTo(mcstrCtrlSVG) == 0) { clsSVGAttr SVGAttr = mJSON.Ctrl.SVG.Attr; clsSVGHdr SVGHdr = mJSON.Ctrl.SVG.Hdr; string strSVG = string.Empty; string strNewNode = string.Empty; for (int intChild = 0; intChild < mJSON.Ctrl.SVG.Children.Length; intChild++) { object objChild = mJSON.Ctrl.SVG.Children[intChild]; if (objChild is System.Text.Json.JsonElement) { JsonObject objJSON = JsonSerializer.Deserialize (objChild.ToString()); foreach (var (strKey, value) in objJSON) { if (strKey == mcstrName) { strNewNode = $"{value}"; } else { strNewNode += $" {strKey.Replace("_", "-")}=\"{value}\""; } } continue; } PropertyInfo[] aryProperties = objChild.GetType().GetProperties(); foreach (PropertyInfo piMember in aryProperties) { if (!(piMember.GetGetMethod(true) is { } getMethod) || piMember.GetIndexParameters().Length > 0) { continue; } object objValue; try { objValue = getMethod.Invoke(objChild, Array.Empty()); if (objValue == null) { Log.Info($"{piMember.Name} is null"); } else { Log.Info($"{piMember.Name} is {objValue}"); } } catch (Exception ex) { Log.Error($"L607 Exception: {ex.GetType().Name}: {ex.Message}"); objValue = null; } if (objValue == null) { continue; } if (piMember.Name.CompareTo(mcstrName) == 0) { strNewNode = $"{piMember.Name}"; } else { strNewNode += $" \"{piMember}\"=\"{objValue}\""; } } } if (strNewNode.Length > 0) { strNewNode = $""; } if (strNewNode.Length > 0) { if (SVGHdr != null) { strSVG = $""; } if (SVGAttr != null) { strSVG += $""; } if (strSVG.Length > 0) { if (strNewNode.Length > 0) { strSVG += strNewNode; } strSVG += ""; } if (!string.IsNullOrEmpty(strSVG)) { Log.Info($"L640 {strSVG}"); ((AdvancedSVGImage)objPt).SetImageContent(strSVG); } } } < /code> Проблема, которую я вижу в консоли: < /p> Exception: No behaviour or observer found that handles the method 'SetImageContent' on node SVG,C3 [/code] У меня есть только «Visual Studio Code», версия 1.102.1, должна быть установлена полная визуальная студия> Подробнее здесь: [url]https://stackoverflow.com/questions/79711588/c-sharp-optix-1-6-2-36-advancedsvgimage[/url]