реализовать такое можно, но из-за необходимости явной проверки типа данных, поступивших на вход элемента придется пожертвовать частью производительности и размером результирующего кода. Т.е. это значит, что в схеме, не использующей кабели будет тот же самый код и теже проверки, что и в схеме их использующей. Без подобных тяжких последсвий можно обойтись только в пакетах на базе FTCG
альтернативой предложенному решению может быть такое:
code_19005.txt
где "Новый элемент Х" это элемент, который последовательно выдает "наверх" данные с каждого провода из кабеля и принимает их обратно после изменения пользователем.
------------ Дoбавленo в 16.17:
nesco писал(а):
А кто мешает это сделать сейчас на кабелеnesco, предложенное решение не совсем корректно. Во-первых, оно предполагает знание о внутренней структуре данных кабеля, во-вторых, не является масштабируемым. Пример:
Add(Edit,1071184,151,193)
{
Left=20
Top=105
Width=80
Text=""
link(onChange,13905387:Wire1,[(203,199)(203,230)])
}
Add(Edit,8366180,151,242)
{
Left=20
Top=140
Width=80
Text=""
link(onChange,13905387:Wire2,[(203,248)(203,237)])
}
Add(Edit,4283550,541,256)
{
Left=245
Top=105
Width=85
Text=""
}
Add(Edit,845026,543,305)
{
Left=245
Top=140
Width=85
Text=""
}
Add(CableWork,13905387,224,224)
{
link(Cable,12826108:Wire1,[])
}
Add(CableEvent,11897247,490,287)
{
link(Wire1,4283550:doText,[(522,293)(522,262)])
link(Wire2,845026:doText,[(524,300)(524,311)])
}
Add(Math,2690228,329,287)
{
OpType=2
Op2=2
ResultType=0
link(onResult,5514629:doAdd,[])
link(Op1,11147394:Value2,[])
}
Add(MT_Add,5514629,378,287)
{
InputMT=1
link(onAdd,45930:Cable,[])
link(Data,11147394:Value1,[(384,271)(328,271)])
}
Add(MT_MultiMem,11147394,322,224)
{
link(onData,2690228:doOperation,[(368,230)(368,210)(305,210)(305,293)])
}
Add(CableWork,12826108,259,224)
{
link(Cable,11147394:doValue,[])
}
Add(CableEvent,45930,448,287)
{
link(Wire1,11897247:Cable,[])
}
разбирать и собирать формат кабеля для более сложных топологий будет еще сложнее