开发帮助
此文档将叙述一些开发SuperScriptMaterializer中需要被记忆的一些原则。
可能的连线
该程序中最重要的事情之一是生成链接,而最困难的是pLink。 下图显示了将在此程序中分析的所有pLink情况。
+--------------+ +-----------------+
| pLocal +--------------> |
+--------------+ | |
| pIn (bb/oper) |
+--------------+ | |
| pIn (bb) +--------------> / |
+--------------+ | |
| pTarget (bb) |
+----------------+ | |
| pOut (bb/oper) +------------> |
+----------------+ +-----------------+
+------------------+ +--------------+
| +-----------> pOut (bb) |
| | +--------------+
| pOut (bb/oper) |
| | +--------------+
| +-----------> pLocal |
+------------------+ +--------------+
如果链接的一个端点不在当前图形中,则此端点将创建为快捷方式。 但是,如果链接的一个端点是当前分析的Building Graph的pIO,并且与另一个端点具有相同的CK_ID,则应创建一个eLink。
数据库
SuperScriptMaterializer处理流程里会涉及很多不同的数据库文件,以下是这些数据库和其内表的格式。
其中这些是Materializer直接输出的基于文档的数据库:
这些数据库是上面数据库经过Decorator处理可以被Viewer接受的数据库:
- decorated.db
- sheet.db
- query.db
- composition.db
doc.db 格式
doc.db导出的是当前Virtools文档内的脚本及其它重要数据。
表列表:
- script:文档里的每个脚本
- script_behavior:behavior本身,包括behavior graph和prototype behavior之类的
- script_bIn:behavior的行为输入
- script_bOut:behavior的行为输出
- script_eLink:export link
- script_pAttr:attribute类型的parameter
- script_pIn:behavior的parameter输入
- script_pLink:parameter link
- script_pLocal:local parameter
- script_pOper:parameter operator
- script_pOut:behavior的parameter输出
- script_pTarget:behavior的target输入,实际上是一个特殊的parameter输入
- msg:文档内定义的message标号与数值的对应
- array:文档里的每个CKDataArray
- array_header:CKDataArray的表头
- array_cell:CKDataArray的数据体
- data:文档中所有涉及导出的parameter参数属性,以类似字典的形式存储每个parameter参数的各个部分
script
字段 |
类型 |
含义 |
thisobj |
INTEGER |
脚本依附对象的CK_ID |
name |
TEXT |
脚本依附对象的名字 |
index |
INTEGER |
脚本在依附对象的排序序号 |
behavior |
INTEGER |
真正的脚本Behavior的CK_ID |
script_behavior
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
name |
TEXT |
当前对象的名字 |
type |
INTEGER |
CKBehavior::GetType |
proto_name |
TEXT |
原型名称,没有原型则留空。CKBehavior::GetPrototypeName |
proto_guid |
TEXT |
原型的GUID,如果没有原型则填写0,0 ,格式为guid1,guid2 ,用逗号分隔Virtools的GUID的两部分 |
flags |
INTEGER |
CKBehavior::GetFlags |
priority |
INTEGER |
CKBehavior::GetPriority |
version |
INTEGER |
CKBehavior::GetVersion |
pin_count |
TEXT |
Behavior的接口个数,由5部分组成,用, 分隔,分别代表:pTarget, pIn, pOut, bIn, bOut |
parent |
INTEGER |
当前对象父级Behavior的CK_ID ,如是顶层Behavior则填写-1 |
script_bIn / script_bOut
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
index |
INTEGER |
bIn/bOut在所属Behavior的次序号 |
name |
TEXT |
bIn/bOut名称 |
parent |
INTEGER |
当前对象所归属的Behavior的CK_ID |
script_bLink
字段 |
类型 |
含义 |
input |
INTEGER |
连线输入端的CK_ID ,不能确认此CK_ID 是bOut 还是bIn ,由于连线也可以是从parent 的bIn 连接到子元素的bIn |
output |
INTEGER |
连线输出端的CK_ID ,不能确认是bOut 还是bIn ,理由同上 |
delay |
INTEGER |
连线时延CKBehaviorLink::GetActivationDelay() |
input_obj |
INTEGER |
输入端所属Behavior的CK_ID |
input_type |
INTEGER |
指示输入端类型,0为bIn,1为bOut |
input_index |
INTEGER |
指示连线位于输入端所在Behavior的第几个bIO口 |
output_obj |
INTEGER |
输出端所属Behavior的CK_ID |
output_type |
INTEGER |
指示输出端类型,0为bIn,1为bOut |
output_index |
INTEGER |
指示连线位于输出端所在Behavior的第几个bIO口 |
parent |
INTEGER |
当前对象所归属的Behavior的CK_ID |
script_eLink
字段 |
类型 |
含义 |
export_obj |
INTEGER |
需要被导出的pIn 或pOut 的CK_ID |
internal_obj |
INTEGER |
导出连线中pIn 或pOut 所属Behavior中层次较深者的CK_ID |
is_in |
INTEGER |
指示连线是对pIn 还是pOut 进行导出,如果是pIn 则设置为1,否则设置为0 |
index |
INTEGER |
导出连线pIn 或pOut 在所属Behavior中层次较深者中的参数序号 |
parent |
INTEGER |
导出连线中pIn 或pOut 所属Behavior中层次较浅者的CK_ID ,同时也就是导出连线所归属的Behavior的CK_ID |
导出连线eLink是一种将父级的pIn或pOut链接至器内部Behavior的pIn与pOut的连线。pIn只能链接pIn,pOut只能链接pOut。导出连线一旦链接完成,则意味着两端的pIn或pOut将具有相同的CK_ID
。
script_pAttr
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
name |
TEXT |
pAttr名称 |
type |
TEXT |
Attribute的类型名 |
type_guid |
TEXT |
Attribute类型的GUID |
script_pIn
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
index |
INTEGER |
pIn在所属Behavior中的序号 |
name |
TEXT |
名称 |
type |
TEXT |
类型名 |
type_guid |
TEXT |
类型GUID |
parent |
INTEGER |
当前对象所归属的Behavior或Operator的CK_ID |
direct_source |
INTEGER |
CKParameterIn::GetDirectSource() |
shared_source |
INTEGER |
CKParameterIn::GetSharedSource() |
script_pLink
字段 |
类型 |
含义 |
input |
INTEGER |
pLink起点parameter的CK_ID |
output |
INTEGER |
pLink终点parameter的CK_ID |
input_obj |
INTEGER |
起点parameter所属behavior或operator的CK_ID |
input_type |
INTEGER |
起点来源类型 |
input_is_bb |
INTEGER |
指示起点parameter所属是Behavior还是Operator,如果是Behavior,则填写为1,否则为0 |
input_index |
INTEGER |
起点parameter所属Behavior的序号值 |
output_obj |
INTEGER |
终点parameter所属behavior或operator的CK_ID |
output_type |
INTEGER |
终点来源类型 |
output_is_bb |
INTEGER |
指示终点parameter所属是Behavior还是Operator |
output_index |
INTEGER |
终点parameter所属Behavior的序号值 |
parent |
INTEGER |
当前对象所归属的Behavior的CK_ID |
input_type
与output_type
使用下列数值:
- pIn:0
- pOut:1
- pLocal:2
- pTarget:3
- pAttr:4
当其值不是pIn
或pOut
中任何一个时,忽略对应输入或输出的is_bb
与index
值。
script_pLocal
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
name |
TEXT |
名称 |
type |
TEXT |
类型名 |
type_guid |
TEXT |
类型GUID |
is_setting |
INTEGER |
是否是所属Behavior的Setting,调用所属Behavior的CKBehavior::IsLocalParameterSetting() |
parent |
INTEGER |
当前对象所归属的Behavior的CK_ID |
script_pOper
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
op |
TEXT |
名称 |
op_guid |
TEXT |
Operator采用的转换函数的GUID |
parent |
INTEGER |
当前对象所归属的Behavior的CK_ID |
script_pOut
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
index |
INTEGER |
在所属Behavior中的序号 |
name |
TEXT |
名称 |
type |
TEXT |
类型名 |
type_guid |
TEXT |
类型GUID |
parent |
INTEGER |
当前对象所归属的Behavior或Operator的CK_ID |
script_pTarget
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
name |
TEXT |
名称 |
type |
TEXT |
类型名 |
type_guid |
TEXT |
类型GUID |
parent |
INTEGER |
当前对象所归属的Behavior的CK_ID |
direct_source |
INTEGER |
CKParameterIn::GetDirectSource() |
shared_source |
INTEGER |
CKParameterIn::GetSharedSource() |
与pIn
类似,仅缺少index
描述,因为对于一个Behavior,pTarget至多只能有1个。
msg
字段 |
类型 |
含义 |
index |
INTEGER |
message的标号 |
name |
TEXT |
message的名称 |
array
字段 |
类型 |
含义 |
thisobj |
INTEGER |
当前对象的CK_ID |
name |
TEXT |
表的名称 |
rows |
INTEGER |
表的行数 |
columns |
INTEGER |
表的列数 |
字段 |
类型 |
含义 |
index |
INTEGER |
当前表头的是第几列 |
name |
TEXT |
名称 |
type |
INTEGER |
列类型,CKDataArray::GetColumnType |
param_type |
TEXT |
列的类型 |
param_type_guid |
TEXT |
列的类型的GUID |
parent |
INTEGER |
表头所属表的CK_ID |
当列类型为Parameter时,param_type
和param_type_guid
为其所属CKParameterType的类型文本和GUID,当列类型为Object时,param_type
和param_type_guid
均无效,因为无法确认对应CKObject的类型。列类型为其它类型时,param_type
和param_type_guid
也均无效。
array_cell
字段 |
类型 |
含义 |
row |
INTEGER |
当前单元格所在行 |
column |
INTEGER |
当前单元格所在列 |
showcase |
TEXT |
单元格可视化文本 |
inner_param |
INTEGER |
单元格内部数据,为对应CKParameter或CKObject的CK_ID |
parent |
INTEGER |
单元格所属表的CK_ID |
当且仅当对应列的类型为Parameter或Object时,inner_param
才有效。
data
字段 |
类型 |
含义 |
field |
TEXT |
键值对的键 |
data |
TEXT |
键值对的值 |
parent |
INTEGER |
键值对所描述对象的CK_ID |
env.db 格式
env.db导出的是当前Virtools环境的数据,与文档无关,这部分如果是多个文件共用一个环境,那么只需要导出和在Decorator
里综合一次即可
表列表:
- attr:attribute
- op:operator,parameter转换的定义
- param:parameter的定义
- plugin:当前环境插件
- variable:全局变量数据
attr
字段 |
类型 |
含义 |
index |
INTEGER |
序号,总数由CKAttributeManager::GetAttributeCount() 获取 |
name |
TEXT |
CKAttributeManager::GetAttributeNameByType() |
category_index |
INTEGER |
CKAttributeManager::GetAttributeCategoryIndex() |
category_name |
TEXT |
CKAttributeManager::GetAttributeCategory() |
flags |
INTEGER |
CKAttributeManager::GetAttributeFlags() |
param_index |
INTEGER |
CKAttributeManager::GetAttributeParameterType() |
compatible_classid |
INTEGER |
CKAttributeManager::GetAttributeCompatibleClassId() |
default_value |
TEXT |
CKAttributeManager::GetAttributeDefaultValue() |
op
字段 |
类型 |
含义 |
funcptr |
INTEGER |
CKOperationDesc::Fct |
in1_guid |
TEXT |
CKOperationDesc::P1Guid |
in2_guid |
TEXT |
CKOperationDesc::P2Guid |
out_guid |
TEXT |
CKOperationDesc::ResGuid |
op_guid |
TEXT |
CKParameterManager::OperationCodeToGuid() |
op_name |
TEXT |
CKParameterManager::OperationCodeToName |
op_code |
INTEGER |
序号,总数由CKParameterManager::GetParameterOperationCount() 获取 |
param
字段 |
类型 |
含义 |
index |
INTEGER |
CKParameterTypeDesc::Index |
guid |
TEXT |
CKParameterTypeDesc::Guid |
derived_from |
TEXT |
CKParameterTypeDesc::DerivedFrom |
type_name |
TEXT |
CKParameterTypeDesc::TypeName |
default_size |
INTEGER |
CKParameterTypeDesc::DefaultSize |
func_CreateDefault |
INTEGER |
CKParameterTypeDesc::CreateDefaultFunction |
func_Delete |
INTEGER |
CKParameterTypeDesc::DeleteFunction |
func_SaveLoad |
INTEGER |
CKParameterTypeDesc::SaveLoadFunction |
func_Check |
INTEGER |
CKParameterTypeDesc::CheckFunction |
func_Copy |
INTEGER |
CKParameterTypeDesc::CopyFunction |
func_String |
INTEGER |
CKParameterTypeDesc::StringFunction |
func_UICreator |
INTEGER |
CKParameterTypeDesc::UICreatorFunction |
creator_dll_index |
INTEGER |
CKParameterTypeDesc::CreatorDll 的CKPluginEntry::m_PluginDllIndex |
creator_plugin_index |
INTEGER |
CKParameterTypeDesc::CreatorDll 的CKPluginEntry::m_PositionInDll |
dw_param |
INTEGER |
CKParameterTypeDesc::dwParam |
dw_flags |
INTEGER |
CKParameterTypeDesc::dwFlags |
cid |
INTEGER |
CKParameterTypeDesc::Cid |
saver_manager |
TEXT |
CKParameterTypeDesc::Saver_Manager |
plugin
字段 |
类型 |
含义 |
dll_index |
INTEGER |
CKPluginEntry::m_PluginDllIndex |
dll_name |
TEXT |
以CKPluginEntry::m_PluginDllIndex 为参,使用CKPluginManager::GetPluginDllInfo() ,获得的CKPluginDll::m_DllFileName |
plugin_index |
INTEGER |
CKPluginEntry::m_PositionInDll |
active |
INTEGER |
CKPluginEntry::m_Active |
guid |
TEXT |
CKPluginEntry::m_PluginInfo 的CKPluginInfo::m_GUID |
desc |
TEXT |
CKPluginEntry::m_Description |
author |
TEXT |
CKPluginEntry::m_Author |
summary |
TEXT |
CKPluginEntry::m_Summary |
version |
INTEGER |
CKPluginEntry::m_Version |
func_init |
INTEGER |
CKPluginEntry::m_InitInstanceFct |
func_exit |
INTEGER |
CKPluginEntry::m_ExitInstanceFct |
variable
字段 |
类型 |
含义 |
name |
TEXT |
CKVariableManager::Iterator::GetName() |
description |
TEXT |
CKVariableManager::Variable::GetDescription() |
flags |
INTEGER |
CKVariableManager::Variable::GetFlags() |
type |
INTEGER |
CKVariableManager::Variable::GetType() |
representation |
TEXT |
CKVariableManager::Variable::GetRepresentation() |
data |
TEXT |
CKVariableManager::Variable::GetStringValue() |
composition.db 格式
composition.db是Decorator
输出的所有被综合的文档与接下来三个数据库分别的内部的编号的的对应表(为每一个被综合的数据库分配一个编号,但是因为有些部分文档共用一个Virtools环境等,就需要将这些编号转换成共用的)
使用此表是为了保证网页URL基于编号的命名方式可以在三个表中正常通行,而不会出现在这个表中的编号在另一个表里指示的是另一个Virtools文件。
因此在查询其他数据库前需要先读取此数据库获得对应各个数据库的内部编号,进而在剩下的数据库中以内部编号继续查询。
表只有一个:composition。
decorated.db 格式
decorated.db是Decorator
输出的脚本综合的数据库,包含了所有脚本的连线和图形位置。
表列表:
- block:behavior的图形结构
- cell:类似local parameter的结构
- graph:脚本schematic图形
- link:脚本内的所有连线
- param:脚本里的parameter的数据
block
字段 |
类型 |
含义 |
parent_graph |
INTEGER |
|
thisobj |
INTEGER |
|
name |
TEXT |
|
assist_text |
TEXT |
|
pin-ptarget |
TEXT |
|
pin-pin |
TEXT |
|
pin-pout |
TEXT |
|
pin-bin |
TEXT |
|
pin-bout |
TEXT |
|
x |
REAL |
|
y |
REAL |
|
width |
REAL |
|
height |
REAL |
|
expandable |
INTEGER |
|
cell
字段 |
类型 |
含义 |
parent_graph |
INTEGER |
|
thisobj |
INTEGER |
|
name |
TEXT |
|
assist_text |
TEXT |
|
x |
REAL |
|
y |
REAL |
|
type |
INTEGER |
|
graph
字段 |
类型 |
含义 |
graph |
INTEGER |
|
graph_name |
TEXT |
|
width |
INTEGER |
|
height |
INTEGER |
|
index |
INTEGER |
|
parent |
TEXT |
|
param
param为原来的info
字段 |
类型 |
含义 |
target |
INTEGER |
|
attach_bb |
INTEGER |
|
is_setting |
INTEGER |
|
name |
TEXT |
|
field |
TEXT |
|
data |
TEXT |
|
link
字段 |
类型 |
含义 |
parent_graph |
INTEGER |
|
delay |
INTEGER |
|
start_interface |
INTEGER |
|
end_interface |
INTEGER |
|
startobj |
INTEGER |
|
endobj |
INTEGER |
|
start_type |
INTEGER |
|
end_type |
INTEGER |
|
start_index |
INTEGER |
|
end_index |
INTEGER |
|
x1 |
REAL |
|
y1 |
REAL |
|
x2 |
REAL |
|
y2 |
REAL |
|
sheet.db 格式
sheet.db是Decorator
输出的文档数据综合的数据库,包含了所有脚本的连线和图形位置。
表列表:
- data:同下
- header:同下
- body:同下
- param:与data.db几乎一致
query.db 格式
query.db是Decorator
输出的数据查询综合的数据库,包含了所有脚本内的数据部分,还有Virtools环境的可查询数据。
表列表:
- msg:从data.db - msg综合
- attr:同下
- op:同下
- param:同下
- plugin:同下
- variable:从env.db综合