DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DA::DAAbstractNode类 参考abstract

节点对应的基类 更多...

#include <DAAbstractNode.h>

类 DA::DAAbstractNode 继承关系图:
DA::DAStandardNodeConstValue DA::DAStandardNodeInputOutput

class  LinkInfo
 链接信息 更多...
 
class  PrivateData
 

Public 类型

enum  NodeType { NormalNode , GlobalNode }
 节点类型 更多...
 
using SharedPointer = std::shared_ptr< DAAbstractNode >
 
using WeakPointer = std::weak_ptr< DAAbstractNode >
 
using IdType = uint64_t
 

Public 成员函数

virtual ~DAAbstractNode ()
 节点的销毁,节点销毁过程会通知相关联的节点把自己信息解除
 
QString getNodeName () const
 获取节点的名字
 
virtual void setNodeName (const QString &name)
 设置节点名
 
QString getNodePrototype () const
 FCAbstractNode::getNodePrototype
 
QString getNodeGroup () const
 获取分组
 
QIcon getIcon () const
 获取节点图标
 
void setIcon (const QIcon &icon)
 设置图标
 
const DANodeMetaDatametaData () const
 获取节点元数据
 
DANodeMetaDatametaData ()
 获取节点元数据
 
QString getNodeTooltip () const
 获取节点的说明
 
void setNodeTooltip (const QString &tp)
 设置节点的说明
 
void setMetaData (const DANodeMetaData &metadata)
 设置元数据
 
SharedPointer pointer ()
 返回自身的引用
 
IdType getID () const
 获取id
 
void setID (const IdType &d)
 设置id
 
bool hasProperty (const QString &k) const
 判断是否存在属性
 
void setProperty (const QString &k, const QVariant &v)
 设置属性
 
QVariant getProperty (const QString &k, const QVariant &defaultVal=QVariant()) const
 读取属性
 
bool removeProperty (const QString &k)
 移除属性
 
QList< QString > getPropertyKeys () const
 获取所以得属性关键字
 
const QHash< QString, QVariant > & propertys () const
 属性引用
 
QHash< QString, QVariant > & propertys ()
 属性引用
 
virtual void saveExternInfoToXml (QDomDocument *doc, QDomElement *nodeElement, const QVersionNumber &ver) const
 把信息保存到xml上
 
virtual void loadExternInfoFromXml (const QDomElement *nodeElement, const QVersionNumber &ver)
 从xml加载扩展信息
 
virtual NodeType nodeType () const
 节点类型默认都为NormalNode
 
QList< QString > getInputKeys () const
 获取说有的输入参数
 
int getInputKeysConut () const
 获取输入节点的数量
 
QList< QString > getLinkedInputKeys () const
 获取所有已经链接上的输入节点
 
QList< QString > getOutputKeys () const
 获取所有的输出参数
 
int getOutputKeysConut () const
 获取输出节点的数量
 
QList< QString > getLinkedOutputKeys () const
 获取所有已经链接上的输出的参数名
 
void addInputKey (const QString &k)
 添加一个输入参数
 
void addOutputKey (const QString &k)
 添加一个输出参数
 
virtual bool linkTo (const QString &outKey, SharedPointer inNode, const QString &inKey)
 建立连接,从out到另外一个item的in
 
bool detachLink (const QString &key)
 detachToLink会对_toNode进行删除操作,因此不允许在_toNode迭代环境中调用此函数
 
bool detachInputLinks (const QString &key)
 
bool detachOutputLinks (const QString &key)
 
void detachAll ()
 移除所有依赖,一般是节点被删除时会调用此函数
 
QList< SharedPointer > getInputNodes () const
 获取所有连接了输入keys的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode
 
QList< SharedPointer > getInputNodes (const QString inputkey) const
 获取所有连接了inputkey的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode
 
QList< SharedPointer > getOutputNodes () const
 获取此节点输出到其他的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode
 
QList< SharedPointer > getOutputNodes (const QString outputkey) const
 获取此节点输出到其他的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode
 
int getInputNodesCount () const
 获取输入节点的数量
 
int getOutputNodesCount () const
 获取输出节点的数量
 
void setInputData (const QString &key, const QVariant &dp)
 输入参数
 
void setOutputData (const QString &key, const QVariant &dp)
 设置输出的参数
 
void removeInputKey (const QString &key)
 移除输入,如果有数据,数据也会移除
 
void removeAllInputKeys ()
 移除所有输入节点
 
void removeOutputKey (const QString &key)
 移除输出,如果有数据,数据也会移除
 
void removeAllOutputKeys ()
 移除所有输出节点
 
QVariant getInputData (const QString &key) const
 FCAbstractNode::inputData
 
QVariant getOutputData (const QString &key) const
 
QList< LinkInfogetAllInputLinkInfo () const
 获取所有输入(入度)的信息
 
QList< LinkInfogetAllOutputLinkInfo () const
 获取输出(出度)的链接信息
 
DAWorkFlowworkflow () const
 获取工作流
 
std::shared_ptr< DAAbstractNodeFactoryfactory () const
 获取工厂
 
template<typename T >
std::shared_ptr< T > castTo ()
 转换为其他具体类型节点
 
virtual bool exec ()=0
 
virtual DAAbstractNodeGraphicsItemcreateGraphicsItem ()=0
 
DAAbstractNodeGraphicsItemgraphicsItem () const
 获取graphicsItem
 

静态 Public 成员函数

static IdType generateID ()
 生成一个唯一id
 

Protected 成员函数

void registItem (DAAbstractNodeGraphicsItem *it)
 记录item,此函数在DAAbstractNodeGraphicsItem构造函数中调用
 
void unregistItem ()
 解除对item的记录 在某些环境下,删除item就会调用此函数解除item的记录
 
bool linkTo_ (const QString &outKey, SharedPointer inNode, const QString &inKey)
 DAAbstractNode::linkToNoCallback
 
void registFactory (const std::shared_ptr< DAAbstractNodeFactory > &fc)
 记录工厂
 

友元

class DAAbstractNodeLinkGraphicsItem
 
class DAAbstractNodeGraphicsItem
 
class DAAbstractNodeFactory
 
class DAWorkFlow
 

详细描述

节点对应的基类

节点可以理解为一个函数,函数有多个输入,但只会有一个return或者多个分支的return, 反映到节点中就是可以存在多个输入,但也应该有多个输出(参考流程中的菱形控制(if-else))。 因此节点的输入点是0~n,节点的输出点是0~n。

此节点作为专业数据结构讲,就是图结构(实际workflow是个网结构)的节点,为了适应workflow的称呼,这里做如下约定:

  • in-degree入度定义为inputKey,inputCount就是入度的权
  • out-degree出度定义为outputKeyy,outputCount就是出度的权
  • 每个度都可以赋予不同的值,作为数据投递
  • 邻接(Adjacent)标示为link,linkto就建立起两个节点的邻接

需要用户实现以下2个函数

//节点对应的item显示接口,所有node都需要提供一个供前端的显示接口
virtual DAAbstractNodeGraphicsItem *createGraphicsItem();
//运行
virtual bool exec() = 0;
这是节点的基类,workflow所有节点都继承此类 作为一个节点的QGraphicsItem,此item应该由DAAbstractNode创建
Definition DAAbstractNodeGraphicsItem.h:47

这个节点和有向无环图(DAG)的不一样,有向无环图是没有节点名称的说法的,这个节点是更通用的节点, 当然,通过限制节点的输入输出名称,也可以实现通用的有向无环图,一个简单的workflow应该使用DAG, 使用带节点名称的图结构会使得workflow过于复杂,就变成类似labview的模式

注解
每个节点对应一个
参见
DAAbstractNodeGraphicsItem ,可以通过createGraphicsItem创建一个item

DAAbstractNode不一定会持有DAAbstractNodeGraphicsItem,但DAAbstractNodeGraphicsItem一定会有对应的node

成员枚举类型说明

◆ NodeType

节点类型

枚举值
NormalNode 

普通节点,默认为普通节点

GlobalNode 

全局节点

成员函数说明

◆ addInputKey()

void DA::DAAbstractNode::addInputKey ( const QString &  k)

添加一个输入参数

参数
k

◆ addOutputKey()

void DA::DAAbstractNode::addOutputKey ( const QString &  k)

添加一个输出参数

参数
k

◆ castTo()

template<typename T >
std::shared_ptr< T > DA::DAAbstractNode::castTo ( )
inline

转换为其他具体类型节点

返回
如果成功返回一个不为空的指针
注解
注意此操作通过dynamic_pointer_cast实现

◆ detachAll()

void DA::DAAbstractNode::detachAll ( )

移除所有依赖,一般是节点被删除时会调用此函数

不能直接迭代_toNode过程调用detachToLink,会导致迭代器失效

清空关系这里,不能清除workflow和factory的关系,尤其不能清除factory的关系 因为在redo/undo下,undo后factory会丢失

◆ detachLink()

bool DA::DAAbstractNode::detachLink ( const QString &  key)

detachToLink会对_toNode进行删除操作,因此不允许在_toNode迭代环境中调用此函数

参数
outpt
返回

◆ factory()

std::shared_ptr< DAAbstractNodeFactory > DA::DAAbstractNode::factory ( ) const

获取工厂

返回

◆ generateID()

DAAbstractNode::IdType DA::DAAbstractNode::generateID ( )
static

生成一个唯一id

返回

◆ getAllInputLinkInfo()

QList< DAAbstractNode::LinkInfo > DA::DAAbstractNode::getAllInputLinkInfo ( ) const

获取所有输入(入度)的信息

返回

◆ getAllOutputLinkInfo()

QList< DAAbstractNode::LinkInfo > DA::DAAbstractNode::getAllOutputLinkInfo ( ) const

获取输出(出度)的链接信息

返回

◆ getIcon()

QIcon DA::DAAbstractNode::getIcon ( ) const

获取节点图标

返回
图标

◆ getID()

DAAbstractNode::IdType DA::DAAbstractNode::getID ( ) const

获取id

参见
setID generateID
返回

◆ getInputData()

QVariant DA::DAAbstractNode::getInputData ( const QString &  key) const

FCAbstractNode::inputData

参数
key
返回

◆ getInputKeys()

QList< QString > DA::DAAbstractNode::getInputKeys ( ) const

获取说有的输入参数

返回

◆ getInputKeysConut()

int DA::DAAbstractNode::getInputKeysConut ( ) const

获取输入节点的数量

返回

◆ getInputNodes() [1/2]

QList< DAAbstractNode::SharedPointer > DA::DAAbstractNode::getInputNodes ( ) const

获取所有连接了输入keys的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode

返回
返回连接了node的input keys的节点

◆ getInputNodes() [2/2]

QList< DAAbstractNode::SharedPointer > DA::DAAbstractNode::getInputNodes ( const QString  inputkey) const

获取所有连接了inputkey的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode

返回
返回连接了node的inputkey的节点

◆ getInputNodesCount()

int DA::DAAbstractNode::getInputNodesCount ( ) const

获取输入节点的数量

返回

◆ getLinkedInputKeys()

QList< QString > DA::DAAbstractNode::getLinkedInputKeys ( ) const

获取所有已经链接上的输入节点

返回
结果已经去重

◆ getLinkedOutputKeys()

QList< QString > DA::DAAbstractNode::getLinkedOutputKeys ( ) const

获取所有已经链接上的输出的参数名

返回
结果已经去重

◆ getNodeGroup()

QString DA::DAAbstractNode::getNodeGroup ( ) const

获取分组

返回

◆ getNodeName()

QString DA::DAAbstractNode::getNodeName ( ) const

获取节点的名字

返回

◆ getNodePrototype()

QString DA::DAAbstractNode::getNodePrototype ( ) const

FCAbstractNode::getNodePrototype

返回

◆ getNodeTooltip()

QString DA::DAAbstractNode::getNodeTooltip ( ) const

获取节点的说明

返回
返回说明字符串
参见
setNodeTooltip

◆ getOutputKeys()

QList< QString > DA::DAAbstractNode::getOutputKeys ( ) const

获取所有的输出参数

返回

◆ getOutputKeysConut()

int DA::DAAbstractNode::getOutputKeysConut ( ) const

获取输出节点的数量

返回

◆ getOutputNodes() [1/2]

QList< DAAbstractNode::SharedPointer > DA::DAAbstractNode::getOutputNodes ( ) const

获取此节点输出到其他的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode

返回

◆ getOutputNodes() [2/2]

QList< DAAbstractNode::SharedPointer > DA::DAAbstractNode::getOutputNodes ( const QString  outputkey) const

获取此节点输出到其他的节点 input Output ┌───┐ ┌───┐ ┌───┐ │in │━━━━━━━━━━━━━━│ * │━━━━━━━━━━━━━━━━━│out│ └───┘ └───┘ └───┘ LinkData outputkey inputkey outputNode inputNode

返回

◆ getOutputNodesCount()

int DA::DAAbstractNode::getOutputNodesCount ( ) const

获取输出节点的数量

返回

◆ getProperty()

QVariant DA::DAAbstractNode::getProperty ( const QString &  k,
const QVariant &  defaultVal = QVariant() 
) const

读取属性

注解
如果节点有一些额外属性,通过此函数保存才能存入文件系统中
参数
k
defaultVal
返回

◆ getPropertyKeys()

QList< QString > DA::DAAbstractNode::getPropertyKeys ( ) const

获取所以得属性关键字

返回

◆ graphicsItem()

DA::DAAbstractNodeGraphicsItem * DA::DAAbstractNode::graphicsItem ( ) const

获取graphicsItem

返回

◆ hasProperty()

bool DA::DAAbstractNode::hasProperty ( const QString &  k) const

判断是否存在属性

参数
k
返回

◆ linkTo()

bool DA::DAAbstractNode::linkTo ( const QString &  outKey,
DAAbstractNode::SharedPointer  inNode,
const QString &  inKey 
)
virtual

建立连接,从out到另外一个item的in

建立连接,如果基础的对象需要校验,可继承此函数

注意,继承的方法中一定要调用父类方法DAAbstractNode::linkTo,否则信息会异常

参数
outpt输出点
toItem输入的item
topt输入点
返回
成功返回true

◆ linkTo_()

bool DA::DAAbstractNode::linkTo_ ( const QString &  outKey,
DAAbstractNode::SharedPointer  inNode,
const QString &  inKey 
)
protected

DAAbstractNode::linkToNoCallback

参数
outKey
inNode
inKey
返回

◆ loadExternInfoFromXml()

void DA::DAAbstractNode::loadExternInfoFromXml ( const QDomElement *  nodeElement,
const QVersionNumber &  ver 
)
virtual

从xml加载扩展信息

DAAbstractNode的此函数不会实现任何功能,继承的node要加载一些参数可以通过继承此函数实现

参数
parentElement

◆ metaData() [1/2]

DANodeMetaData & DA::DAAbstractNode::metaData ( )

获取节点元数据

返回

◆ metaData() [2/2]

const DANodeMetaData & DA::DAAbstractNode::metaData ( ) const

获取节点元数据

返回

◆ nodeType()

DAAbstractNode::NodeType DA::DAAbstractNode::nodeType ( ) const
virtual

节点类型默认都为NormalNode

返回

◆ pointer()

DAAbstractNode::SharedPointer DA::DAAbstractNode::pointer ( )

返回自身的引用

返回

◆ propertys() [1/2]

QHash< QString, QVariant > & DA::DAAbstractNode::propertys ( )

属性引用

返回

◆ propertys() [2/2]

const QHash< QString, QVariant > & DA::DAAbstractNode::propertys ( ) const

属性引用

返回

◆ registFactory()

void DA::DAAbstractNode::registFactory ( const std::shared_ptr< DAAbstractNodeFactory > &  fc)
protected

记录工厂

参数
fc

◆ registItem()

void DA::DAAbstractNode::registItem ( DAAbstractNodeGraphicsItem it)
protected

记录item,此函数在DAAbstractNodeGraphicsItem构造函数中调用

参数
it
注解
在createGraphicsItem时,构造DAAbstractNodeGraphicsItem就会在 DAAbstractNodeGraphicsItem的构造函数中调用此函数记录DAAbstractNodeGraphicsItem

◆ removeInputKey()

void DA::DAAbstractNode::removeInputKey ( const QString &  key)

移除输入,如果有数据,数据也会移除

参数
key

◆ removeOutputKey()

void DA::DAAbstractNode::removeOutputKey ( const QString &  key)

移除输出,如果有数据,数据也会移除

参数
key

◆ removeProperty()

bool DA::DAAbstractNode::removeProperty ( const QString &  k)

移除属性

参数
k

◆ saveExternInfoToXml()

void DA::DAAbstractNode::saveExternInfoToXml ( QDomDocument *  doc,
QDomElement *  nodeElement,
const QVersionNumber &  ver 
) const
virtual

把信息保存到xml上

DAAbstractNode的此函数不会实现任何功能,继承的node要保存一些参数可以通过继承此函数实现

参数
doc
parentElement

◆ setIcon()

void DA::DAAbstractNode::setIcon ( const QIcon &  icon)

设置图标

参数
icon设置的图标

◆ setID()

void DA::DAAbstractNode::setID ( const IdType &  d)

设置id

参见
getID generateID
参数
d

◆ setInputData()

void DA::DAAbstractNode::setInputData ( const QString &  key,
const QVariant &  dp 
)

输入参数

参数
inputName
dp数据会发生拷贝操作,不会影响原来数据包

◆ setMetaData()

void DA::DAAbstractNode::setMetaData ( const DANodeMetaData metadata)

设置元数据

参数
metadata

◆ setNodeName()

void DA::DAAbstractNode::setNodeName ( const QString &  name)
virtual

设置节点名

参数
name
注解
此函数会导致关联的DAWorkFlow发射nodeNameChanged信号
参见
DAWorkFlow::nodeNameChanged
注解
此函数为虚函数,在一些场合需要对名字进行校验的特殊节点可继承此函数来进行校验,但记得调用DAAbstractNode::setNodeName使之生效

◆ setNodeTooltip()

void DA::DAAbstractNode::setNodeTooltip ( const QString &  tp)

设置节点的说明

参数
tp说明文本
参见
getNodeTooltip

◆ setOutputData()

void DA::DAAbstractNode::setOutputData ( const QString &  key,
const QVariant &  dp 
)

设置输出的参数

参数
key
dp

◆ setProperty()

void DA::DAAbstractNode::setProperty ( const QString &  k,
const QVariant &  v 
)

设置属性

注解
如果节点有一些额外属性,通过此函数保存才能存入文件系统中
参数
k属性键值
v属性值

◆ workflow()

DAWorkFlow * DA::DAAbstractNode::workflow ( ) const

获取工作流

返回

该类的文档由以下文件生成: