Стартовая страница › Форумы › Понять, как работает ПО › Mimic — Изменение параметров в редакторе
- В этой теме 42 ответа, 3 участника, последнее обновление 1 месяц назад сделано
manjey73.
-
АвторСообщения
-
05.03.2026 в 13:32 #42298
manjey73Участникмысли вслух.
Редактор (какой-то скрипт), при вставке должен проверять наличие записей id=»XXXX» (не во всех же элементах это есть собственно) и менять это на XXXX-1, так же проверять записи #XXXX и менять аналогично на #XXXX-1
В скриптах в том числеЗаносить в какую-то служебную ветку мнемосхемы в словарь этот XXXX и последнее проставленное значение (1).
При вставке такого же экземпляра, видя что в словаре уже есть XXXX и зная последнее значение делать так же переименования и добавлять 2 и вносить в словарь.
з.ы. мне кажется будет достаточно это сделать в редакторе и проблема с экземплярами будет решена.
Редактор же именует Comp1-1 и так далее, значит механизмы есть, просто их применить к ExtraMarkup и всё, и можно лепить спокойно svg-шки с применением id
-
Ответ изменён 1 месяц, 1 неделя назад пользователем
manjey73.
05.03.2026 в 15:55 #42303
MikhailМодератори этот id используется командой use в этом svg
Для чего?
Какое тогда решение можно применить для фейсплейта? если даже у групп в svg нельзя использовать id?
Ищите в мануалах по SVG, как избавиться от id, чем его заменить. Если бы мы говорили об обычном HTML, то заменили бы на атрибуты class или data.
05.03.2026 в 16:03 #42305
manjey73УчастникКоманды use и url (точно) не умеют работать с классами, только с id, они по id как раз вытягивают данные из defs или g
Других путей нет, по крайней мере я не нашел.
И кстати при работе с symbol тоже требует id, чтобы потом использовать его в use.Каждая шляпа, работает немного по разному, поэтому нужно это все.
З.Ы. ну, решение я нашел 🙂 постом выше. Если Редактор будет смотреть наличие id и искать по тексту кода SVG #my-id а так же по тексту кода Скрипта #my-id и менять их на то же самое, но с префиксом, запоминая, какой префикс он установил последним. То это решит возможно все проблемы.
Даже не надо там особо менять ничего, если мы какой-то элемент удалим, просто прилепит следующий номер и все.Вот это нужно для ExtraMarkup на главной схеме или при установке faceplate (проверять есть ли в нем ExtraMarkup)
Для WEB вроде никаких проблем это не вызовет.05.03.2026 в 16:33 #42308Boriss
УчастникУже писал ранее, что id элемента HTML или SVG доложен быть уникальным в рамках веб-страницы. Если данное правило не соблюдается, то нормально работать не будет.
И как его сделать уникальным, если это разметка в ExtraMarkup который в фейсплейте? id будет уникален при условии, что на мнемосхеме будет только один фейсплейт.
Весь день убил на то, что-бы сделать что-то подобное. За основу взял файлы manjey73.
Результат отрицательный.
На мнемосхеме два канала и панель. На панели два фейсплейта, привязанные к этим каналам. Вернее один и тот же, но в двух экземплярах. Скрипт фейсплейта меняет заливку и окантовку svg элемента. Т.е. меняет fill и stroke в разметке компонента ExtraMarkup. Если в канале 1, то расцветка одна, если 0, то другая. Расцветка меняется только от одного канала и сразу на двух фейсплейтах. На другой канал не реагирует.
Мнемосхема и фейсплейт https://disk.yandex.ru/d/JPlgER66dLXVHAБеру таймаут на неопределенное время. Терпение кончилось… Задача написать простейший скрипт превратилась в какую-то опупею… Писать скрипты внутри других скиптов, не понимая что и как работает и при отсутствии документации и методом научного тыка, такое себе занятие…
05.03.2026 в 16:41 #42309
manjey73УчастникBoriss, да, есть такая шляпа с id, тут Михаил прав, они должны быть уникальны.
По отношению к faceplate и вставленному в него ExtraMarkup путь один, скрипт Редактора перед вставкой должен находить все id и ссылки на них в самом svg и Скрипте фейсплейта заменять на такой же id + идентификатор
Чтобы имена и ссылки на них поменялись c id=»vn» на id=»vn-1″ (vn-2 для следующего и так далее с увеличением номеров) и то же самое в ссылках с #vn на #vn-1 и так далее по тому же принципу.
И тогда для экземпляров фейсплейта с ExtraMarcup будет все работать без плясок с бубном по простой методичке относительно скриптов. При этом Faceplate будет в одном экземпляре.
Ну, тут все от Михаила зависит, сделает и когда? 🙂 и можно будет создавать такие фейсплейты. Я уж точно буду создавать, так как это лучше, чем лепить смену картинок.
05.03.2026 в 17:16 #42310
manjey73УчастникВот, провел эксперимент, но он не совсем правильной, так как я создал два разных фейсплейта с разными именами, но думаю одно имя уже ничего бы не сломало, если бы Редактор добавлял при вставке префиксы (что рекомендует интернет) для имен id и ссылок на них.
В данном случае надо добавлять префиксы в коде HTML самого ExtraMarcup и в коде Скрипта самого Фейсплейта.
з.ы. и все работает. Единственное, что нужно, чтобы при потере связи, отсутствии чего-то, цвета не превращались в 0 и все становилось черным, а становились значениями по умолчанию, которые мы в фейсплейте выставим (может какая галочка для свойства, типа применять ПРИ том-то и том-то)
-
Ответ изменён 1 месяц, 1 неделя назад пользователем
manjey73.
06.03.2026 в 15:03 #42323
MikhailМодераторЕсли без атрибута id никак не обойтись в svg, то единственный вариант — формировать разметку в своём скрипте, добавляя префиксы к значению идентификатора везде, где он используется.
06.03.2026 в 15:58 #42328
manjey73УчастникАаа, а каким образом? Что-то я не очень понимаю, как это можно реализовать.
Почему бы это не возложить на сам Редактор, имхо, это было бы более правильнее.
Вы же все равно добавляете префиксы к CompX при построении дерева мнемосхемы.
Почему тоже самое не сделать и для id и ссылок на них?-
Ответ изменён 1 месяц, 1 неделя назад пользователем
manjey73.
06.03.2026 в 16:48 #42330
manjey73УчастникСобственно формировать разметку в своем скрипте не правильно.
Вот сколько не уговаривайте :), а делать это должен Редактор при вставке на мнемосхему, а не при загрузке схемы каждый раз, когда мы к ней обращаемся.
Даже значения по умолчанию должны обновляться еще в Редакторе, а не где-то там потом.ИМХО. Мы в Редакторе должны видеть результаты изменений настроек, так сказать превью всего происходящего. Да и плагину потом меньше работы в том числе.
09.03.2026 в 10:33 #42338
MikhailМодераторПришлите пример SVG, в котором без id никак не обойтись.
09.03.2026 в 10:51 #42341
manjey73УчастникМихаил, их туча. Через id работают ссылки use, url и бог знает что ещё.
Я пока в svg до всех нюансов не добрался.
Но без id там делать нечего, кроме примитивов, где ничего нельзя менять.В некоторых случаях можно вместо use использовать display=»none» если надо показать или скрыть.
Но маску так не наложить, там однозначно url используется со ссылкой на id09.03.2026 в 13:08 #42342
manjey73УчастникНу вот простые примеры с маской и без
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> <mask id="msk"> <rect x="0" y="0" width="100" height="100" fill="white" rx="15" ry="15"/> </mask> <g mask="url(#msk)" fill="#ffffff" stroke="red" stroke-width="10"> <rect x="0" y="0" width="100" height="100" rx="15" ry="15"/> </g> </svg><?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> <g fill="#ffffff" stroke="red" stroke-width="10"> <rect x="0" y="0" width="100" height="100" rx="15" ry="15"/> </g> </svg>Без маски происходит обрезка, так как у svg нет понимания делать толщину линии внутрь объекта, она всегда идет в разные стороны.
Еще ест такая штука как <symbol> он не отображается так же, как <defs> и вызывается через команду use по id. И symbol часто применяется из-за своих особенностей.
09.03.2026 в 15:40 #42343
manjey73УчастникКопаюсь в файле mim и что увидел.
Например у меня на Панели присутствуют фейсплеты, ссылки на которые в Зависимостях я удалил. При этом в Редакторе это никак не отображается — неплохо бы выделять красной пунктирной линией, чтобы было видно, и либо удалить такой компонент на схеме, либо посмотреть к чему была привязка и вернуть привязку на место.Редактор при этом их молча считывает и так же молча записывает в конечный mim файл.
Увидел, что сам фейсплейт никак не копируется в файл mim.
1. Вы предложили использовать id для поиска в svg, так как искать по path, rect, cycle и так далее не вариант, таких элементов может быть больше одного.
2. Плагин никак не понимает и не работает с id, кроме собственных, типа compX-1, compX-2 и так далее, но они спокойно могут встречаться так понимаю и в html и в svg и тогда экземпляры фейсплейтов с таким содержимым перестает быть экземплярами
3. Вы предложили использовать скрипт для изменения id, а кто придумает скрипт, который будет менять сам себя в фейсплейте, так как ссылки на те самые id используются в его сриптах ?честно, не знаю какой тут может быть выход?
Один из вариантов интегрировать фейсплейты прямо в мнемосхему сразу с индексом, добавляя Редактором так же индексы всем id и ссылкам на них в сриптах.
Плагин, видя, что это ссылка на обычный фейсплейт, берет его из зависимости, если ссылка на фейсплейт с индексом, берет его из схемы.Типа у нас фейсплейт называется TestFP, в ветке Components у нас есть ветка TestFP — не интегрированный, берем из зависимости
Или там TestFP-5 — интегрированный, берем из файла mimДа, mim будет увеличиваться в размере, но это выход. Так как там все id так же с индексом -5 и все скрипты со ссылками на эти id с индексом 5.
-
Ответ изменён 1 месяц назад пользователем
manjey73.
-
Ответ изменён 1 месяц, 1 неделя назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.