跳到主要内容

插件 API 详解

ToolBaseNative 基类

类定义

class DLJ_DLL_EXPORT ToolBaseNative
{
public:
ToolBaseNative();
virtual ~ToolBaseNative();

// === 必须重写 ===
virtual const std::string& GetName() const = 0;
virtual ECode Apply(ProjectControl& ctx) = 0;

// === 可选重写 ===
virtual const ToolCategory GetCategory() const;

// === 框架方法 ===
ECode ParseInputs();
ECode Outputs();
ECode RunTool(ProjectControl& ctx);

protected:
void setupInput(const std::string& name, DataType type,
const std::string& defaultVal, const std::string& options,
void* linkTo, const VAR_MODE& mode = VAR_MODE::ALLOW_EMPTY,
const std::string& description = "");

void setupOutput(const std::string& name, DataType type,
const std::string& defaultVal, void* linkTo,
const std::string& description = "");

void SetupDone();
};

输入设置参数说明

参数类型说明
namestring参数名称(英文,用于变量绑定)
typeDataType数据类型枚举
defaultValstring默认值字符串
optionsstring选项列表,格式:"0_选项1,1_选项2"
linkTovoid*指向实际变量成员的指针
modeVAR_MODE输入模式(空/单/多)
descriptionstring参数说明(支持中文)

选项格式

"0_Nearest,1_Bilinear,2_Bicubic"
  • 数字前缀:选项值
  • 下划线 _:分隔值和显示文本
  • 逗号 ,:分隔选项

DataType 枚举

完整类型列表

枚举值说明字符串转换
INTEGER32位整数"Integer"
DOUBLE64位浮点"Double"
STRING字符串"String"
BOOL布尔值"Bool"
POINT2D二维点 (X, Y)"Point2D"
POINT3D三维点 (X, Y, Z)"Point3D"
LINE2D二维直线"Line2D"
RECTANGLE2D矩形 (X, Y, W, H)"Rectangle2D"
CIRCLE2D圆形 (Cx, Cy, R)"Circle2D"
POLYGON2D多边形顶点列表"Polygon2D"
REGION区域集合"Region"
IMAGE2D 图像"Image"
v* 前缀对应 List 类型同上

VAR_MODE 枚举

模式说明适用场景
ALLOW_EMPTY允许空值、单值、列表可选参数
ALLOW_SINGLE仅允许单个值必须单值输入
ALLOW_MANY允许单值或列表批量处理
OUT_IS_EMPTY输出可为空可选输出

ECode 错误码

成功

错误码说明
ALL_OK1执行成功

参数错误

错误码说明
VARIABLE_NAME_EMPTY变量名为空
VARIABLE_DOES_NOT_EXIST变量不存在
VARIABLE_TYPE_MISMATCH变量类型不匹配
VARIABLE_LENGTH_ERROR变量长度错误
DATA_TYPE_NO_MATCH数据类型不匹配
INCOMPATIBLE_ARGUMENTS参数不兼容
LOGIC_ERROR逻辑错误

运行时错误

错误码说明
NULL_REFERENCE空引用
OUT_OF_MEMORY内存不足
ALGORITHM_ERROR算法错误
BAD_DATA_FORMAT数据格式错误

ProjectControl 接口

变量访问

// 获取变量
template<typename T>
T* Get(const std::string& name);

// 设置变量
template<typename T>
void AddVariable(const std::string& name, const std::vector<T>& value);

// 清除所有变量
void ClearAllVariables();

// 重命名变量
bool RenameVariable(const std::string& oldName, const std::string& newName);

// 删除变量
bool RemoveVariable(const std::string& name);

Job 管理

// 获取 Job 数量
int JobsCount();

// 运行指定 Job
ECode RunJob(int jobIdx, int toolStart, int toolEnd);

// 获取迭代计数
int GetIterationCounter();
void SetIterationCounter(int value);

日志与调试

日志宏

// 推入调用栈信息(调试用)
DLJ_PUSH_CALLSTACK("函数入口");

// 推入警告
DLJ_PUSH_CALLSTACK_W("警告信息");

// 推入错误
DLJ_PUSH_CALLSTACK_E("错误信息");

// 设置最后错误
SET_ERROR("错误描述");

日志示例

ECode MyFilter::do_Filter()
{
DLJ_PUSH_CALLSTACK("开始执行滤波");

if (m_InputImage.empty())
{
DLJ_PUSH_CALLSTACK_E("输入图像为空");
SET_ERROR("InputImage 不能为空");
return ECode::VARIABLE_DOES_NOT_EXIST;
}

DLJ_PUSH_CALLSTACK("滤波完成");
return ECode::ALL_OK;
}

输入解析格式

标量值

"123" // 整数
"3.14" // 浮点数
"hello" // 字符串
"true" // 布尔

列表值

"1,2,3,4,5" // 整数列表
"1.1,2.2,3.3" // 浮点列表
"a,b,c" // 字符串列表

几何类型

"(10,20)" // Point2D
"(10,20,30)" // Point3D
"(10,20,100,80)" // Rectangle2D (X,Y,W,H)
"(50,50,25)" // Circle2D (Cx,Cy,R)
"(0,0),(100,0),(100,100),(0,100)" // Polygon2D

Region 类型

"Rect(10,20,100,80)"
"Circle(50,50,25)"
"Line(0,0,100,100)"
"Polygon((0,0),(100,0),(100,100))"

ExportDll C 接口

导出函数返回类型说明
RegisterAllTools()int注册所有算子
DeregisterAllTools()int注销所有算子
GetAllToolsNames(count)const char**获取所有算子名
GetToolInput(password, name)const char*获取输入 JSON
GetToolOutput(password, name)const char*获取输出 JSON
GetToolCategory(password, name)int获取算子分类
ProjectRunJob(idx, start, end, ...)bool运行指定 Job
ProjectGetProgramStructure()const char*获取程序结构 JSON

程序结构 JSON 格式

{
"jobs": [
{
"name": "Main",
"tools": [
{"idx": 0, "name": "LoadImage"},
{
"idx": 1, "name": "IF", "type": "ControlFlow",
"subJobs": {"then": "Job_Pass", "else": "Job_Fail"}},
{"idx": 2, "name": "SaveResult"}
]
}
]
}