PDA

Просмотр полной версии : SVG объект и стандартные контроллы



petr59
28.02.2022, 13:49
Добрый день.

Потребовалась тут мне красивенькая цистерна, нарисовал я ее в inrscape, параметризировал и решил добавить к SVG объекту стандартные контролл - "прогресс".
И ничего не получилось, его просто не видно. Иры с координатой Z ничего не дали. Т.е. Как я понимаю, на SVG объект наложить стандартный контролл ни как нельзя ?

petr59
28.02.2022, 14:04
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="80mm" height="30mm" version="1.1" viewBox="0 0 80 30" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<title>Цистерна 75 куб</title>
<g>
<path id="idTANK" d="m10.055 7.9375c-3.063 5.8155-2.5739 12.782 0 20.424h61.912c3.1377-6.5849 2.4907-13.652 0-20.953h-61.912z" fill="#fea" stroke="#000" stroke-width=".25203"/>
<text x="61.960781" y="16.131092" fill="#000000" font-family="sans-serif" font-size="2.8222px" stroke-width=".26458" style="line-height:1.25" xml:space="preserve"><tspan x="61.960781" y="16.131092" font-size="2.8222px" stroke-width=".26458">ВУ</tspan></text>
<rect id="idPIT" x="51.628" y="2.6799" width="9.6819" height="4.6819" fill="#fea" stroke="#000" stroke-width=".31808"/>
<g fill="#0aeeaa" stroke="#000" stroke-width=".25899">
<circle id="idHHS" cx="69.699" cy="10.37" r="1.3705"/>
<circle id="idHS" cx="69.598" cy="15.273" r="1.3705"/>
<circle id="idLS" cx="69.699" cy="19.954" r="1.3705"/>
<circle id="idLLS" cx="69.742" cy="24.778" r="1.3705"/>
</g>
<g fill="#000000" font-family="sans-serif" font-size="2.8222px" stroke-width=".26458">
<text x="61.810452" y="11.561016" style="line-height:1.25" xml:space="preserve"><tspan x="61.810452" y="11.561016" font-size="2.8222px" stroke-width=".26458">АВУ</tspan></text>
<text x="62.119064" y="20.759712" style="line-height:1.25" xml:space="preserve"><tspan x="62.119064" y="20.759712" font-size="2.8222px" stroke-width=".26458">НУ</tspan></text>
<text x="61.831848" y="25.746468" style="line-height:1.25" xml:space="preserve"><tspan x="61.831848" y="25.746468" font-size="2.8222px" stroke-width=".26458">АНУ</tspan></text>
<text id="idFL" x="11.842056" y="11.661829" style="line-height:1.25" xml:space="preserve"><tspan x="11.842056" y="11.661829" font-size="2.8222px" stroke-width=".26458">ТС-1</tspan></text>
<text x="19.672567" y="11.784039" style="line-height:1.25" xml:space="preserve"><tspan x="19.672567" y="11.784039" font-size="2.8222px" stroke-width=".26458">№</tspan></text>
<text id="idNM" x="23.769703" y="11.90625" style="line-height:1.25" xml:space="preserve"><tspan x="23.769703" y="11.90625" font-size="2.8222px" stroke-width=".26458">1</tspan></text>
<text id="idEIZM" x="31.019333" y="12.007063" style="line-height:1.25" xml:space="preserve"><tspan x="31.019333" y="12.007063" font-size="2.8222px" stroke-width=".26458">м<tspan baseline-shift="super" font-size="65%">3</tspan></tspan></text>
</g>
<rect id="Lfield" x="34.387" y="13.711" width="9.2696" height="4.8098" fill="#6effff" stroke="#000" stroke-width=".19023"/>
<text id="Lvalue" x="35.412247" y="17.258577" fill="#000000" font-family="sans-serif" font-size="2.8222px" stroke-width=".26458" style="line-height:1.25" xml:space="preserve"><tspan x="35.412247" y="17.258577" font-size="2.8222px" stroke-width=".26458">1500</tspan></text>
<text x="29.972027" y="16.712965" fill="#000000" font-family="sans-serif" font-size="2.8222px" stroke-width=".26458" style="line-height:1.25" xml:space="preserve"><tspan x="29.972027" y="16.712965" font-size="2.8222px" stroke-width=".26458">L=</tspan></text>
<rect id="Lflt" x="44.98" y="7.9375" width="7.9356" height="20.437" fill="#0ff" image-rendering="auto" stroke="#000" stroke-width=".34736"/>
<rect id="Lupp" x="44.982" y="7.62" width="7.9314" height="9.76" fill="#ececec" stroke="#000" stroke-width=".23999"/>
<text x="27.179924" y="11.936316" fill="#000000" font-family="sans-serif" font-size="2.8222px" stroke-width=".26458" style="line-height:1.25" xml:space="preserve"><title>idV75</title><tspan x="27.179924" y="11.936316" font-size="2.8222px" stroke-width=".26458">75</tspan></text>
</g>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:title>Цистерна 75 куб</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>
Это svg -файл, что именно в шапке надо убрать ?

melky
28.02.2022, 14:24
Строка 4 Позиция 8 недопустимый знак кодировки

Chrome тоже не понимает кодировку и дает те же ошибки. Либо чтобы было по русски нужен какой-то префикс, что там unicode, либо заменить на латиницу. После замены на латиницу, в том числе и символа № у меня Хром отобразил ваш svg

petr59
01.03.2022, 06:21
Сам svg отображается. С этим проблем нет. Не отображается наложенный на него контролл. А формат данных - оптмизированный SVG, все сделано по видеокурсу.
Но в настройках импорта поставил птичку удалить метаданные. И русское название из титла убрал, контролл не отображается.

petr59
01.03.2022, 08:33
Закономерность интересная обнаружилась. Как только в сторону от примера со светофором уходишь - так сразу траблы начинаются. Подумал - ну ладно, стандартные библиотечные элементы не пересекаются с SVG объектом, реализую на динамизации объекта. И тут облом. Если для динамизации берешь fill (как в примере) - все ок. А понадобилось мне stroke использовать - облом. Причем, всяко пытался, и тупо в свойствах объекта АИ написать (вместо#0000000) и создал переменную целую, и связь отредактировал 1- АИ, 2-ДТ .... Не работает.

melky
01.03.2022, 10:23
Так может у вас fiil не прозрачный? вот контрол и не отображается. Или вообще fill убрать, если у него нет свойства Transparent ?

petr59
01.03.2022, 11:24
Если бы дело было в прозрачности - то координатой Z я бы это разрулил, - не разруливается, более того, если я его за пределы резервуара сдвигаю (что бы кончик высовывался - все равно не видно. Но бог с ним, я уже готов ползунок сам моделировать, за счет изменения параметров высоты например, но у меня вообще все объекты SVG файла динамизируются как fill. Хотя при экспорте SVG я например и width и stroke указывал.

petr59
02.03.2022, 13:40
Дождался ответа от поддержки. По варианту размещения элементов из стандартной палитры на svg объекты они ничего не ответили. Ну тут я сам виноват, я начал моделировать уровень через SVG параметризацию - они и не стали разбираться с реальной проблемой. А по поводу динамизации значений текстового поля, ответ был следующий - stroke - это параметр цвета текста, а с параметром содержимое - inkscape не работает, нужно ручками править xml файл, правда как - не сказали. По этому вопрос, как поправить текстовое поле в svg объекте что бы его содержимое стала доступно параметризации в MasterScada 4D. Примерчик, плиззз, если можно.

melky
02.03.2022, 14:23
А примеров в самой MS4D нет? то есть любой где работает, посмотреть разницу ?

petr59
03.03.2022, 08:20
Дополнение подошло, что бы параметризировать текстовое поле объектаSVG, нужно задать при импорте атрибут элемента SVG "content". Что характерно, в раскрывающемся списке его нет, но ручками вбивается. При этом да, свойство в MasterScada 4D становиться текст, задается показывается в режиме разработки и даже меняется. Правда улезает в координату 0,0 и при выполнении не показывается. Т.е. еще что то надо добавлять, вопрос только что ?

petr59
03.03.2022, 08:23
Примерчик они подогнали, фишку с content я там подсмотрел, но пример хитрый, все объекты svg файла там не пересекаются. И он да, работает. Но мне надо на фоне квадрата несколько текстовых полей параметризировать. Т.е. это немного не то, что надо.

petr59
03.03.2022, 13:11
Еще поправочка подошла. Почему то если сохраняешь в формате оптимизированный SVG, он выносит координаты текстового поля. Нужно сохранять как простой SVG.

melky
03.03.2022, 13:33
SVG может включать в себя другие SVG, может так поиграться? типа текстовые поля засунуть в отдельные SVG...

petr59
04.03.2022, 09:56
Последние сводки с полей. Inkscape косячит и не может построить нормальный файл svg. Рекомендуют пользоватся Adobe Illustrator. Мало того, что он платный, с ним еще и непонятно как работать, По Inkscape хотя бы курс есть.
По поводу вложения svg -
Я думаю, если один косячный svg засунуть в другой косячный получится скорей всего - косяк в квадрате. :)

melky
04.03.2022, 10:16
Сделайте в Inkckape а потом пройдитесь руками :)

Есть еще прога, которая может делать экспорт в SVG... посмотрю дома как называется, что-то простое, которое может электросхемы рисовать, не помню сейчас название.

petr59
04.03.2022, 11:47
Ну это да, доработать рашпилем называется. Сейчас в раздумьях - или с адобе иллюстратором знакомится или со структурой SVG файла.

melky
04.03.2022, 12:57
sPlan вроде как умеет экспорт в SVG... но могу ошибиться...

Еще поиск выдает несколько бесплатных прог для построения блок схем, среди которых есть умеющие экспорт в SVG

petr59
04.03.2022, 14:00
Получилось все проблемы с динамизацией решить в Adobe Illustrator. Получается в Inkscape можно только светофор динамизировать. :)

melky
04.03.2022, 14:08
petr59 не помешал бы пример и полноценное описание.

petr59
05.03.2022, 06:40
Попробую. Объект - простейший, квадрат с текстовым полем:

59547

При этом нужно внимательно посмотреть на слои, Id слоя = Id параметризируемого объекта
59548

Следующий важный момент - создание SVG - объекта, в команде сохранить как задаешь тип сохраняемого файла SVG.
Далее нужно правильно расставить птички параметров сохранения
59549

Ну с AI вроде бы все. Да, ID - делать на латинице, что бы не было проблем при импорте в МастерСкада
Теперь по импорту:
59550
При импорте в мастерскаду единственная тонкость, ID атрибута content (значение поля) в выпадающем списке нет, нужно вколачивать ручками.
3 параметра сделано.
цвет боска
Значение текстового поля
Цвет текста

petr59
05.03.2022, 06:42
Ну сам объект, svg файл загрузить не получается. Ругается движог форума, говорит не корректный файл.

petr59
05.03.2022, 07:01
Да, и стандартные контролы теперь нормально обрабатываются.

petr2off
11.03.2022, 08:28
Да, еще раз напоминаю, имена слоев на латинице, иначе стандартные контролы не показываются. Вообще, чем проще структура слоев, тем лучше.

melky
11.03.2022, 11:39
petr2off можете вставить текст svg в виде кода. Или просто в zip его и выложите. Будет полезно посмотреть.
А если еще отдельным файликом откоментируете те или иные строки, так вообще будет красота.

petr2off
14.03.2022, 11:00
Комментировать строки SVG объекта- это не корректная идея. SVG файл создает Adobe Illustrator. Собственно для этого редактор мне и нужен. Соответственно
разбираться в алгоритмах генерации SVG -файла - точно не моя задача. Моя задача научится пользоваться инструментом, для создания SVG объекта
для MasterScada 4D, на большее я не претендую.

melky
14.03.2022, 11:08
petr2off объясню иначе. Вы создали в программе то, что не работает и потом нашли как сделать, чтобы работало.
Два варианта svg в архив (не рабочий и рабочий) и что делали в программе, чтобы заработало.
Сравнение двух вариантов, кто не пользует Адобы поможет понять что и как делать.

з.ы. я как-то просил наших дизайнеров сделать мне элементы в svg. Так эти "добрые" люди нарисовав горизонтальный элемент потом просто сделали его поворот и сотворили из него вертикальный. Как результат программа впихнула в svg трансформацию. То есть человеку было лень рисовать вертикальный вариант с нуля. А потом сидишь и мучаешься с такими художниками....

petr2off
15.03.2022, 09:05
Еще один неприятный момент выявился. Создать библиотечный элемент, в котором SVG объект и стандартные контролы наложены - нельзя. Это вот такая фича в МастерСкада. Т.е. схема получается примерно такая, в библиотеке делаете чистый SVG объект, далее его размещаете в проекте (например на главном окне) далее накладываете на него стандартные контроллы, ну а затем либо в этом же окне размножаем, ну либо в другое окно переносим. Т.е. рекламируемая объектность MasterScada 4D оказалась немного ограниченная.
Ну а мысль о сравнении SVG файлов конечно интересная. Но наверно до отпуска отложу, когда злоба дня не будет так давлеть.

petr2off
16.03.2022, 09:55
Немного поторопился я, что нельзя. Можно, просто в бубен нужно стучать в 2 раза чаще. Схема такая. Создаем библиотечный объект "резервуар". В нем создаем 2 окна одинакового размера. В одно окно импортируем SVG объект. Потом накладываем его на стандартное окно, и вот на него уже накладываем стандартные контроллы. Получаем библиотечный элемент который можно размещать в главном окне, просто уровень вложенности получается больше.

atp-services
27.03.2022, 17:40
Сбросьте хоть фото чего вы там в SVG рисуете! Я делал резервуар с шкалой наклонности и выводом процентного наполнения. все в принципе легко получается.

petr2off
28.03.2022, 07:17
Да получается в принципе все легко, есди динамизация SVG идет на уровне светофора. И сложность рисунка тут ни причем.
Т.е. повесить регистры модбус на параметры SVG объекта проблем нет ни каких. Проблемы возникают:
1) Когда на SVG объект мы навешиваем стандартные контроллы. Лечится как я уже описал.
2) Когда я хочу сделать составной библиотечный объект с процедурным интерфейсом. Эту проблему пока не разрешил.

petr2off
28.03.2022, 10:01
давайте по полочкам разложу. Что бы было проще общаться с поддержкой - был сделан элементарный библиотечный объект, состоящий из
1) SVG объекта (окно pTST). Простой прямоугольник с текстом. Динамизированы в нем 2 параметра, цвет прямоугольника и текстовое поле.
59939
cTablo - цвет и vTablo - значение
59940
2) Так как на SVG объекты нельзя накладывать стандартные контролы, то было создано стандартное окно oTST. На это окно был наложен объект pTST и стандартный прогресс
59941
3) Для работы с объектом к нему был приделан программный интерфейс TSTint с параметрами
59942
где pSTS - входной параметр состояния, в котором упакованы значения (для прогресса и текстового поля),
oV - выходной параметр с значением
oC - выходной параметр для цвета
процедурка выглядит так:
59943
3) Так как при переносе объекта в проект параметры процедуры становятся недоступными, в объекте была сделана еще одна прокладка
переменные iP01, oP1,oP2. которые были связаны с параметрами процедуры
59944
Ну по библиотечному объекту все. В дереве библиотеки он выглядит так:
59945
4) Процедуру создания АРМ и главного окна я подробно не расписываю, как не относящиеся к теме.
Дерево проекта выглядит вот так.
59946
Тут есть главное окно (Окно 1), добавлено 2 экземпляра библиотечного объекта pTST(pTST 1 и pTST2) и 2 параметра для управления объектами pTST - X1 и X2.
Экземпляы pTST и Параметры X1 и X2 размещены на ОКНО 1. Выглядит это так:
59947
Параметр X1 и X2 связаны с параметрами iP01 экземпляров pTST 1 и pTST2
Уффф, долго писал. А теперь запускаем проект.
59948
А вот это результат выполнения. Стандартные элементы отратывают, SVG объект слеп.

petr2off
31.03.2022, 06:41
Ну вот, с поддержкой пообщался, общениие довольно сложно происходило. Но результат следующий.
Для SVG объектов нельзя устанавливать связь с элементами дерева. Только из дерева системы и только с экземплярами.
Т.е. объектную модель это рушит напрочь. Иначе говоря - нормальныцй библиотечный составной элемент с SVG объектом создать нельзя.
Делаете чистый SVG объект, клонируете на его основе нужное количество экземполяров и с экземплярами вяжете то что Вам нужно. Где то так.