Mimic — Изменение параметров в редакторе

Стартовая страница Форумы Понять, как работает ПО Mimic — Изменение параметров в редакторе

Просмотр 13 сообщений - с 31 по 43 (из 43 всего)
  • Автор
    Сообщения
  • #42298
    manjey73
    Участник

    мысли вслух.

    Редактор (какой-то скрипт), при вставке должен проверять наличие записей id=»XXXX» (не во всех же элементах это есть собственно) и менять это на XXXX-1, так же проверять записи #XXXX и менять аналогично на #XXXX-1
    В скриптах в том числе

    Заносить в какую-то служебную ветку мнемосхемы в словарь этот XXXX и последнее проставленное значение (1).

    При вставке такого же экземпляра, видя что в словаре уже есть XXXX и зная последнее значение делать так же переименования и добавлять 2 и вносить в словарь.

    з.ы. мне кажется будет достаточно это сделать в редакторе и проблема с экземплярами будет решена.

    Редактор же именует Comp1-1 и так далее, значит механизмы есть, просто их применить к ExtraMarkup и всё, и можно лепить спокойно svg-шки с применением id

    • Ответ изменён 1 месяц, 1 неделя назад пользователем manjey73.
    #42303
    Mikhail
    Модератор

    и этот id используется командой use в этом svg

    Для чего?

    Какое тогда решение можно применить для фейсплейта? если даже у групп в svg нельзя использовать id?

    Ищите в мануалах по SVG, как избавиться от id, чем его заменить. Если бы мы говорили об обычном HTML, то заменили бы на атрибуты class или data.

    #42305
    manjey73
    Участник

    Команды use и url (точно) не умеют работать с классами, только с id, они по id как раз вытягивают данные из defs или g

    Других путей нет, по крайней мере я не нашел.
    И кстати при работе с symbol тоже требует id, чтобы потом использовать его в use.

    Каждая шляпа, работает немного по разному, поэтому нужно это все.

    З.Ы. ну, решение я нашел 🙂 постом выше. Если Редактор будет смотреть наличие id и искать по тексту кода SVG #my-id а так же по тексту кода Скрипта #my-id и менять их на то же самое, но с префиксом, запоминая, какой префикс он установил последним. То это решит возможно все проблемы.
    Даже не надо там особо менять ничего, если мы какой-то элемент удалим, просто прилепит следующий номер и все.

    Вот это нужно для ExtraMarkup на главной схеме или при установке faceplate (проверять есть ли в нем ExtraMarkup)
    Для WEB вроде никаких проблем это не вызовет.

    #42308
    Boriss
    Участник

    Уже писал ранее, что id элемента HTML или SVG доложен быть уникальным в рамках веб-страницы. Если данное правило не соблюдается, то нормально работать не будет.

    И как его сделать уникальным, если это разметка в ExtraMarkup который в фейсплейте? id будет уникален при условии, что на мнемосхеме будет только один фейсплейт.

    Весь день убил на то, что-бы сделать что-то подобное. За основу взял файлы manjey73.
    Результат отрицательный.
    На мнемосхеме два канала и панель. На панели два фейсплейта, привязанные к этим каналам. Вернее один и тот же, но в двух экземплярах. Скрипт фейсплейта меняет заливку и окантовку svg элемента. Т.е. меняет fill и stroke в разметке компонента ExtraMarkup. Если в канале 1, то расцветка одна, если 0, то другая. Расцветка меняется только от одного канала и сразу на двух фейсплейтах. На другой канал не реагирует.
    Мнемосхема и фейсплейт https://disk.yandex.ru/d/JPlgER66dLXVHA

    Беру таймаут на неопределенное время. Терпение кончилось… Задача написать простейший скрипт превратилась в какую-то опупею… Писать скрипты внутри других скиптов, не понимая что и как работает и при отсутствии документации и методом научного тыка, такое себе занятие…

    #42309
    manjey73
    Участник

    Boriss, да, есть такая шляпа с id, тут Михаил прав, они должны быть уникальны.

    По отношению к faceplate и вставленному в него ExtraMarkup путь один, скрипт Редактора перед вставкой должен находить все id и ссылки на них в самом svg и Скрипте фейсплейта заменять на такой же id + идентификатор

    Чтобы имена и ссылки на них поменялись c id=»vn» на id=»vn-1″ (vn-2 для следующего и так далее с увеличением номеров) и то же самое в ссылках с #vn на #vn-1 и так далее по тому же принципу.

    И тогда для экземпляров фейсплейта с ExtraMarcup будет все работать без плясок с бубном по простой методичке относительно скриптов. При этом Faceplate будет в одном экземпляре.

    Ну, тут все от Михаила зависит, сделает и когда? 🙂 и можно будет создавать такие фейсплейты. Я уж точно буду создавать, так как это лучше, чем лепить смену картинок.

    #42310
    manjey73
    Участник

    Вот, провел эксперимент, но он не совсем правильной, так как я создал два разных фейсплейта с разными именами, но думаю одно имя уже ничего бы не сломало, если бы Редактор добавлял при вставке префиксы (что рекомендует интернет) для имен id и ссылок на них.

    В данном случае надо добавлять префиксы в коде HTML самого ExtraMarcup и в коде Скрипта самого Фейсплейта.

    з.ы. и все работает. Единственное, что нужно, чтобы при потере связи, отсутствии чего-то, цвета не превращались в 0 и все становилось черным, а становились значениями по умолчанию, которые мы в фейсплейте выставим (может какая галочка для свойства, типа применять ПРИ том-то и том-то)

    • Ответ изменён 1 месяц, 1 неделя назад пользователем manjey73.
    #42323
    Mikhail
    Модератор

    Если без атрибута id никак не обойтись в svg, то единственный вариант — формировать разметку в своём скрипте, добавляя префиксы к значению идентификатора везде, где он используется.

    #42328
    manjey73
    Участник

    Ааа, а каким образом? Что-то я не очень понимаю, как это можно реализовать.
    Почему бы это не возложить на сам Редактор, имхо, это было бы более правильнее.
    Вы же все равно добавляете префиксы к CompX при построении дерева мнемосхемы.
    Почему тоже самое не сделать и для id и ссылок на них?

    • Ответ изменён 1 месяц, 1 неделя назад пользователем manjey73.
    #42330
    manjey73
    Участник

    Собственно формировать разметку в своем скрипте не правильно.

    Вот сколько не уговаривайте :), а делать это должен Редактор при вставке на мнемосхему, а не при загрузке схемы каждый раз, когда мы к ней обращаемся.
    Даже значения по умолчанию должны обновляться еще в Редакторе, а не где-то там потом.

    ИМХО. Мы в Редакторе должны видеть результаты изменений настроек, так сказать превью всего происходящего. Да и плагину потом меньше работы в том числе.

    #42338
    Mikhail
    Модератор

    Пришлите пример SVG, в котором без id никак не обойтись.

    #42341
    manjey73
    Участник

    Михаил, их туча. Через id работают ссылки use, url и бог знает что ещё.
    Я пока в svg до всех нюансов не добрался.
    Но без id там делать нечего, кроме примитивов, где ничего нельзя менять.

    В некоторых случаях можно вместо use использовать display=»none» если надо показать или скрыть.
    Но маску так не наложить, там однозначно url используется со ссылкой на id

    #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 часто применяется из-за своих особенностей.

    #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.
Просмотр 13 сообщений - с 31 по 43 (из 43 всего)
  • Для ответа в этой теме необходимо авторизоваться.