C# Optix 1.6.2.36 AdvancedSvgimageC#

Место общения программистов C#
Ответить
Anonymous
 C# Optix 1.6.2.36 AdvancedSvgimage

Сообщение Anonymous »

Я использую 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»