灵闪3.9.x新增了数据类型隐式转换功能,这个功能是干什么用的?具体有哪些规则或限制?
从3.9开始,部分数据类型之间允许单向的隐式转换。若允许A类型->B类型的转换,表现为:
一个需要B类型输入的参数,筛选列表中可以选择A类型的输出作为依赖,若选择后,在实际运行过程中会执行对应的转换函数。
注意:反之不一定成立!
另外,部分算法入参(类型为LP_VARIANT)原本允许接收多种类型的参数,例如“流程控制-索引”工具的“结果对象”入参允许绑定所有列表类型的参数,这类入参按目前设计不允许隐式转换,以避免非预期的行为。
目前支持的转换规则如下(再次重申:假设A可以隐式转换为B,但B不一定能转换为A):
转换关系图:

1. 单个元素转列表(图中L)
所有单个元素的类型,均可隐式转换为对应的列表类型,列表中仅有一个元素,如:(int)123 -> (list){ 123 }
2. 数值类型转字符串(图中S)
数值类型指bool、int、double及其对应的列表类型。其中int、double转换方式目前与QString的默认转换方式相同,bool默认转换为"true""false",如:(int)123 -> (string)"123",(list){ true, false, false } -> (list){ "true", "false", "false" }
3. 数值类型的完全互转(图中N)
旨在弱化bool、int、double之间的区别,即便它们的互转可能会丢失部分信息。三者可以随意互转,三者的列表类型也可以随意互转,三者的单类型也可以转至任意列表类型,注意:三者的列表类型不能转回单类型!
4. 图片相关类型的转换(图中I)
图片(MatEx/MatPair)由一个矩阵(Mat)和一个2D坐标系(Matx33d)组合而成,允许以下转换:
图片 -> 矩阵:抛弃2D坐标系信息
图片 -> 2D坐标系:抛弃矩阵信息
矩阵 -> 图片:增加3x3单位矩阵
同理允许列表类型的以上转换
5. 坐标系转点(图中C)
2D坐标系 -> 2D点:抛弃平移之外的其他信息,仅保留dx、dy
3D坐标系 -> 3D点:抛弃平移之外的其他信息,仅保留dx、dy、dz
同理允许列表类型的以上转换
6. 3D转2D(图中3)
3D点 -> 2D点:移除z信息
3D线 -> 2D线:移除z信息
球 -> 2D圆:保留球心x、y,保留半径r
同理允许列表类型的以上转换
7. list和polygon的互转及引申(图中P)
旨在弱化两者之间的区别,但从设计上来说,list比polygon在点列表的概念上更通用;按照未来IB 4.0.x的概念上理解,polygon可能会多携带“是否闭合”相关的信息。
list -> polygon
polygon -> list
list -> list:将多个多边形按顺序转为点列表
point -> polygon:转为size为1的polygon
list -> list:转为list of size为1的polygon
8. 矩形转多边形(图中R)
矩形的四个角点转为多边形
注意:当前矩形后台数据结构本就是QPolygonF,故可以直接转;若未来调整为真正的矩形,应遵循ROI控制点的设计,按左上、左下、右下、右上的顺序转为多边形