Редактор Схем. Динамическая надпись

Стартовая страница Форумы Новые идеи Редактор Схем. Динамическая надпись

Просмотр 15 сообщений - с 1 по 15 (из 20 всего)
  • Автор
    Сообщения
  • #42690
    phenix769
    Участник

    Мне не хватает такого инструмента как <Динамическая надпись> что бы работал как по принципу <Динамический рисунок>, например есть условия (коллекция) Знач.=1 выводи слово <Привет мир> или Знач.=100 выводи слово <Привет мир на 100%> . Может и есть решение с помощью обходных путей но хотелось такую реализацию как в Dinamic Picture.

    • Тема изменена 2 месяца, 2 недели назад пользователем Mikhail.
    #42691
    manjey73
    Участник

    А когда-то такое было?
    Для динамического текста применяется Перечисление. Если есть разрывы в значении, то предварительно привести скриптом через case к последовательным значениям, потом Перечисление.

    Другой путь, это применение svg с текстом и использовать Динамический рисунок, ну в Mimic просто рисунок + условия.
    Пример svg с текстом выкладывал.

    #42692
    manjey73
    Участник

    з.ы. на счет условий для текста я говорил Михаилу, что надо 🙂
    Может быть в Mimic как-то можно обыграть это скриптами теперь, но еще не пробовал.

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

    Ага. Я в виде картинки выводил. Т.е. надпись оформлял типа картинки и как динамический рисунок… )))

    #42695
    a80808
    Участник

    Тут заодно и цвет менять можно )))

    #42696
    manjey73
    Участник
    <?xml version="1.0" encoding="utf-8"?>
    <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"  >
      <text text-anchor="start">
        <tspan x="1" font-weight="normal" fill="#f00" stroke="#f00" stroke-width="0.6" >
           Авария основного
        </tspan>
        <tspan x="1" dy="1em" font-weight="normal" fill="#f00" stroke="#f00" stroke-width="0.6" >
           вентилятора по заслонке
        </tspan>
    
      </text>
    
      <style>
        <![CDATA[
          text{
            dominant-baseline: hanging;
            font: 12px Comic Sans MS, Verdana, Helvetica, Arial, sans-serif;
          }
        ]]>
      </style>
    </svg>

    Примет на две строки в svg

    #42697
    Boriss
    Участник

    Можно применить js скрипт к компоненту «Текст»

    class extends ComponentScript {
    	domCreated(args) {
    		args.component.customData ??= {};
    		const customData = args.component.customData;
    	}
    	
    	dataUpdated(args) {
    		const customData = args.component.customData;
    		const props = args.component.properties;
    		const cnlData = args.dataProvider.getCurData(props.inCnlNum);		
    		
    		if (cnlData.d.val <= 25) {
    			props.text = "Мир на 25%";
    		} else if (cnlData.d.val > 25 && cnlData.d.val <= 50) {
    			props.text = "Мир на 50%";
    		} else if (cnlData.d.val > 50 && cnlData.d.val <= 75) {
    			props.text = "Мир на 75%";
    		} else if (cnlData.d.val > 75 && cnlData.d.val <= 100) {
    			props.text = "Мир на 100%";
    		} else if (cnlData.d.val == 200) {
    			props.text = "Мир на 200%";
    		} else {
    			props.text = "--";
    		}
            
    		args.propertyChanged = true
    	}
    }

    Условия отредактируйте под свои задачи.

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

    Добрый день!
    Если кратко резюмировать:
    1. Если используется несколько фиксированных фраз, используйте формат канала. Например, Откл-Вкл
    2. Если текст может быть произвольным или условий так много, что метод 1 становится неудобен, используйте скрипт компонента как показано выше.

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

    Т.е. надпись оформлял типа картинки и как динамический рисунок…

    В новом редакторе схем можно проще.

    на счет условий для текста я говорил Михаилу, что надо

    Было такое.

    #42702
    Boriss
    Участник

    Так будет правильнее. Убрал лишнее.

    class extends ComponentScript {
    	
    	dataUpdated(args) {
    		const props = args.component.properties;
    		const cnlData = args.dataProvider.getCurData(props.inCnlNum);		
    		
    		if (cnlData.d.val <= 25) {
    			props.text = "Мир на 25%";
    		} else if (cnlData.d.val > 25 && cnlData.d.val <= 50) {
    			props.text = "Мир на 50%";
    		} else if (cnlData.d.val > 50 && cnlData.d.val <= 75) {
    			props.text = "Мир на 75%";
    		} else if (cnlData.d.val > 75 && cnlData.d.val <= 100) {
    			props.text = "Мир на 100%";
    		} else if (cnlData.d.val == 200) {
    			props.text = "Мир на 200%";
    		} else {
    			props.text = "--";
    		}
            
    		args.propertyChanged = true
    	}
    }
    #42703
    a80808
    Участник

    Столько if — else…Может проще case?

    #42704
    manjey73
    Участник

    а как вы в case запихнете диапазон ?

    #42705
    Boriss
    Участник

    Может и проще. А какая разница? phenix769 попросил обходной путь. Путь указан. А как его идти, дело сугубо индивидуальное 😉
    Покажите свой вариант.

    #42706
    a80808
    Участник

    Хм…не ожидал, что простое замечание вызовет такую реакцию…Извините!

    #42707
    Boriss
    Участник

    Не стоит, я не со зла…

Просмотр 15 сообщений - с 1 по 15 (из 20 всего)
  • Для ответа в этой теме необходимо авторизоваться.