Стартовая страница › Форумы › Понять, как работает ПО › Mimic — скрипты для SVG
- В этой теме 30 ответов, 2 участника, последнее обновление 2 недели, 5 дней назад сделано
Mikhail.
-
АвторСообщения
-
10.12.2025 в 12:16 #41354
manjey73УчастникРассказывайте, как найти компонент svg по определенному id ?
Например есть строка
<rect id="liquid"— уровень вложенности в svg неизвестен, может быть во вложенном svg в svg, может быть вложен в группу g внутри svg.в SunShining как-то все примитивно
_showShining(args) { args.component.dom.find("svg path") .attr("fill", this._getShining(args) ? "cyan" : "lightcyan");в итоге я найду кучу path, потому что у меня их будет много.
10.12.2025 в 17:32 #41369
manjey73Участника по этому поводу подсказки будут? 🙂
11.12.2025 в 18:02 #41379
MikhailМодераторПопробуйте
args.component.dom.find("#liquid")
Не уверен, что SVG, в котором используются id, будет корректно себя вести на схеме, если он применяется для нескольких компонентов. Обычно считается, что id уникален в рамках веб-страницы. Может быть, для SVG есть исключение. Поищите в этом направлении.
Вместо id лучше использовать class, если это поддерживается в SVG.12.12.2025 в 08:40 #41386
manjey73УчастникНу по идее svg завернут в тег <svg> и все id получаются нужны уникальные только в рамках одного тега. Со вложенными не проверял, но тоже должно изолироваться по идее.
Есть в нете примеры, когда один и тот же svg вкладывают один в другой, не помню, чтобы там что-то меняли.
12.12.2025 в 08:41 #41387
manjey73Участникclass определяет имя стиля, но не «имя» компонента внутри svg.
А обращение, например для use идет именно по id12.12.2025 в 15:09 #41390
MikhailМодераторВозможно, для SVG это нормально. Нужно пробовать.
15.12.2025 в 23:56 #41424
manjey73Участник<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style> body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f0f0; } #tank { width: 300px; height: auto; } </style> </head> <body> <svg id="tank" version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 766" width="448" height="766"> <defs> <!-- ClipPath для заливки --> <clipPath id="tankClip"> <path d="m0.72 65.92l0.24-3.6 0.72-3.84 1.2-3.36 1.68-3.36 2.16-3.12 2.4-2.88 2.88-2.4 3.12-2.16 3.36-1.68 3.6-1.2 21.36-7.68 22.08-6.96 22.08-6 22.32-5.04 22.56-4.08 22.56-3.36 22.8-2.16 22.8-1.44 23.04-0.48 22.8 0.48 23.04 1.44 22.8 2.16 22.56 3.36 22.56 4.08 22.32 5.04 22.08 6 21.84 6.96 21.6 7.68 3.6 1.2 3.36 1.68 3.12 2.16 2.64 2.4 2.64 2.88 1.92 3.12 1.68 3.36 1.2 3.36 0.72 3.84 0.48 3.6v632.17l-0.48 3.84-0.72 3.6-1.2 3.6-1.68 3.36-1.92 3.12-2.64 2.64-2.64 2.64-3.12 1.92-3.36 1.68-3.6 1.2-21.6 7.92-21.84 6.72-22.08 6-22.32 5.04-22.56 4.32-22.56 3.12-22.8 2.4-23.04 1.44-22.8 0.24-23.04-0.24-22.8-1.44-22.8-2.4-22.56-3.12-22.56-4.32-22.32-5.04-22.08-6-22.08-6.72-21.36-7.92-3.6-1.2-3.36-1.68-3.12-1.92-2.88-2.64-2.4-2.64-2.16-3.12-1.68-3.36-1.2-3.6-0.72-3.6-0.24-3.84z"/> </clipPath> </defs> <style> .s0 { fill: none; stroke: #ff0000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.4; } </style> <!-- Заливка уровня --> <rect id="liquid" fill="#2196F3" width="448" height="0" y="766" clip-path="url(#tankClip)" /> <!-- Твой контур --> <path id="Path 1" fill-rule="evenodd" class="s0" d="m0.72 65.92l0.24-3.6 0.72-3.84 1.2-3.36 1.68-3.36 2.16-3.12 2.4-2.88 2.88-2.4 3.12-2.16 3.36-1.68 3.6-1.2 21.36-7.68 22.08-6.96 22.08-6 22.32-5.04 22.56-4.08 22.56-3.36 22.8-2.16 22.8-1.44 23.04-0.48 22.8 0.48 23.04 1.44 22.8 2.16 22.56 3.36 22.56 4.08 22.32 5.04 22.08 6 21.84 6.96 21.6 7.68 3.6 1.2 3.36 1.68 3.12 2.16 2.64 2.4 2.64 2.88 1.92 3.12 1.68 3.36 1.2 3.36 0.72 3.84 0.48 3.6v632.17l-0.48 3.84-0.72 3.6-1.2 3.6-1.68 3.36-1.92 3.12-2.64 2.64-2.64 2.64-3.12 1.92-3.36 1.68-3.6 1.2-21.6 7.92-21.84 6.72-22.08 6-22.32 5.04-22.56 4.32-22.56 3.12-22.8 2.4-23.04 1.44-22.8 0.24-23.04-0.24-22.8-1.44-22.8-2.4-22.56-3.12-22.56-4.32-22.32-5.04-22.08-6-22.08-6.72-21.36-7.92-3.6-1.2-3.36-1.68-3.12-1.92-2.88-2.64-2.4-2.64-2.16-3.12-1.68-3.36-1.2-3.6-0.72-3.6-0.24-3.84z"/> </svg> <script> const levelPercent = 80; // ← МЕНЯЙ от 0 до 100 // === Рассчитываем уровень === // Самая нижняя точка: Y = 766 (конец viewBox) // Самая верхняя точка: Y = 0 (начало viewBox) const minY = 0; const maxY = 766; const totalHeight = maxY - minY; // При levelPercent = 0 -> y = maxY = 766 (ничего не заполнено) // При levelPercent = 100 -> y = minY = 0 (полный) const liquidHeight = (levelPercent / 100) * totalHeight; const y = maxY - liquidHeight; // Применяем const liquidRect = document.getElementById('liquid'); liquidRect.setAttribute('y', y); liquidRect.setAttribute('height', liquidHeight); </script> </body> </html>Примитивный код, добытый за два дня мучения ИИ 🙂
Теперь объясните дураку, сколько еще должен потратить дней на ИИ, чтобы добавить аналог изменений в скрипте для Mimic? — код, работающий в html (меняю одно значение и вижу разницу) чтобы заставить работать в Mimic ?можно хоть один пример с комментариями для вот совсем тупых ?
Я вижу по коду, что меняя одну переменную, тут меняется две переменных — y и heightя даже не могу посмотреть, меняет ли какой-либо код хоть что-то, потому что в редакторе отключены скрипты, какой-то адекватной отладки нет совсем.
16.12.2025 в 06:20 #41425
manjey73УчастникИнтересно, что будет происходить, если в экземплярах будут const ?
Они тоже окажутся в общей куче страницы и перемещаются между экземплярами?16.12.2025 в 14:07 #41426
manjey73Участникvar, let и const
Как будут себя вести в экземплярах компонентов, особенно интересует в части faceplate, внутри которого могут быть два и более одинаковых экземпляра компонента ?
Возможно ли применение экземпляров faceplate в другом faceplate?
Поведение скриптов при этом ?
16.12.2025 в 18:26 #41428
MikhailМодератор> Возможно ли применение экземпляров faceplate в другом faceplate?
Да. Скрипт относится к конкретному компоненту.> var, let и const
var не рекомендую использовать.
let и const, если они объявлены локально в методах, будут нормально работать.Создавайте новый фейсплейт по аналогии с SunComponent.fp, используя свой SVG, и пишите, как всё это будет работать при попытке изменить SVG из скрипта.
16.12.2025 в 19:23 #41430
manjey73УчастникУ меня вообще нет понимания, как этот скрипт внедрить. В HTML он работает, я меняю одну переменную, так понимаю именно ее надо связать каким то образом.
И если я меняю в html и открываю снова, я вижу как меняется уровень.
Но все мои попытки сделать по аналогии с SunComponent ни к чему не приводят.Или вообще получаю сообщение об ошибке веб страницы, так как использовал из скрипта поиск по ID
16.12.2025 в 19:24 #41431
manjey73УчастникВот можете сделать пример faceplate, используя svg и скрипт выше?
С некоторыми пояснениями, что за чем и почему?16.12.2025 в 23:31 #41433
manjey73УчастникВ топку этот Mimic с его скриптами, завернутыми непонятно куда и во что? 🙁
const либо не видит, либо не принимает, куда бы я этот кусок кода не писал.
Все, что работает в html тут не работает никак.в общем до будущих времен, когда появится хоть какая-то адекватная документация, как адаптировать скрипты для работы в этом ….. Mimic 🙂
17.12.2025 в 17:01 #41439
MikhailМодераторВот можете сделать пример faceplate, используя svg и скрипт выше?
Нет, но я могу ответить на Ваши конкретные вопросы, которые возникают в процессе разработки. Вопрос «как сделать» не относится к конкретным вопросам. Пример вопроса, на который я могу ответить: «что делается в таком-то примере, в такой-то строчке скрипта».
Новый движок мнемосхем опубликован в экспериментальном режиме. Не стоит ждать полной документации и множества примеров, пока он не готов. Готов — это когда старый редактор схем удалён из дистрибутива.
17.12.2025 в 18:14 #41441
manjey73Участникваш вариант find не работает.
Попытки всунуть в разных вариантах const не работают.В консоли ошибки выдаются в стиле «ой, я не знаю const»
Или если const с именами в другом месте, то ошибка «ой, я не знаю такое имя» и на этом обработка заканчивается. Если закопентировать эту строку, будет ошибка со следующим именем переменной.
И так далее.Я же и говорю, с остальным будем ждать дальше. Или ждать редактора от «конкурента» 🙂
Вот было бы неплохо пример хотя бы на коде выше с применением const и связями с пояснениями, чтобы разбираться дальше. Может я их просто не туда или не так сую?
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.