Vyntek
规格机器视觉规格

C++ 头文件与模块边界(示意)

www 工作副本 · M1 提前迁(Arden · 2026-10-21 Asia/Shanghai;计划表属 M2,Alive 开迁本轮一并落地)
双轨:本页在 www;对照 mvdocs cpp-headers。
本节含「本仓 include 对齐」(对拍 tip 1c03617 Bruno CM1:嵌套子树 + 扁平便利伞头)。桩/未齐标 stub 边界,不假装已实现。Arden 不改 include/src。
相关:overview · glossary · image-model · memory-management · API

示意组织,非已发布 ABI。 头文件路径、类型名与命名空间可在实现期微调,但须全文统一为 vyntek::toolflow / vyntek::imaging 与 <vyntek/toolflow/...> / <vyntek/imaging/...>。总体边界见设计概述;编排语义见 toolflow.md;像素句柄见 image-model.md / memory-management.md。

本文钉住 公开头 vs 内部头、include 树、以及 ToolFlow 与成像句柄的对应关系。宿主与工具作者只应依赖公开头;detail/ / internal/ 不对宿主暴露。

语言与绑定边界

层语言暴露面
Tool / ToolFlow 编排核心C++<vyntek/toolflow/...>
成像句柄 / 内存 / 工厂C++<vyntek/imaging/...>
ImageDisplay 控件C#现有控件包;经绑定层消费 C++ 句柄,不反向进 C++ include
其它 UI / 编辑器C# 或其它仅绑定同一 C++ 核心;不另写执行引擎
托管绑定(MVP)PInvokeMVP = PInvoke(薄、可控);C++/CLI 非默认;细则见 csharp-binding.md(T11)

依赖方向(禁止反向):

UI / Runner / 产线宿主
        │
        ▼
  vyntek::toolflow(公开头)  ──依赖──►  vyntek::imaging(公开句柄头)
        │
        ▼
  detail/internal(不对宿主暴露)

C++ 核心 不 #include 任何 UI / Avalonia / Skia / ImageDisplay 头。显示经句柄交给绑定层,再由 C# ImageDisplay 消费。

命名空间

命名空间职责
vyntek::toolflowTool、ToolFlow、Terminal、TypeDesc、Value/PropertyBag、Link、RunSession、Registry、Diagnostic、序列化
vyntek::imagingImageInfo、像素格式、句柄(PixelImageHandle 等)、Buffer、Reader/Writer、工厂
vyntek::toolflow::detail / vyntek::imaging::detail实现细节;不进公开安装树

对外稳定标识用 ToolId(字符串或强类型 id);不混 MPF / 旧 DAG 术语。

Include 树(公开)

<vyntek/toolflow/toolflow.hpp>      // ToolFlow 根:Create / Load / AddTool / Link / Validate
<vyntek/toolflow/tool.hpp>          // Tool 基类 / 观察指针 / ToolId / LastRun 查询
<vyntek/toolflow/terminal.hpp>      // Inputs/Outputs 终端、TypeDesc
<vyntek/toolflow/link.hpp>          // Link 端点、LinkId、建链结果
<vyntek/toolflow/run_session.hpp>   // RunSession、RunResult、RunContext、取消
<vyntek/toolflow/registry.hpp>      // ToolRegistry、工厂、register_builtin_tools
<vyntek/toolflow/serialize.hpp>     // .avtf Load/Save、schema_version、Diagnostic
<vyntek/toolflow/diagnostic.hpp>    // Diagnostic / DiagnosticCode / Severity(亦可由 serialize/toolflow 转发)

<vyntek/imaging/image_info.hpp>     // ImageInfo、PixelFormat、ColorEncoding
<vyntek/imaging/handle.hpp>         // 公开句柄:Share / OpenRead / OpenWrite / Access
<vyntek/imaging/access.hpp>         // ReadOnlyView / WritableView(临时访问)
<vyntek/imaging/buffer.hpp>         // ImageBuffer、Rent / ImportNative / ReturnCompleted
<vyntek/imaging/factory.hpp>        // PixelImage 工厂:Create / Copy / RentGray8…
<vyntek/imaging/version.hpp>        // ImageContentVersion

示意聚合头(可选,实现期可拆):

// <vyntek/toolflow/toolflow.hpp> 可转发包含 tool / terminal / link / run_session
#include <vyntek/toolflow/tool.hpp>
#include <vyntek/toolflow/terminal.hpp>
#include <vyntek/toolflow/link.hpp>
#include <vyntek/toolflow/run_session.hpp>
// 成像:只依赖公开句柄,不拉 buffer 内部实现
#include <vyntek/imaging/handle.hpp>

Mermaid:模块边界

flowchart TB
  subgraph public_tf ["vyntek::toolflow 公开"]
    TF[toolflow.hpp]
    Tool[tool.hpp]
    Term[terminal.hpp]
    Link[link.hpp]
    Run[run_session.hpp]
    Reg[registry.hpp]
    Ser[serialize.hpp]
    Diag[diagnostic.hpp]
  end
  subgraph public_im ["vyntek::imaging 公开"]
    HI[handle.hpp]
    II[image_info.hpp]
    Acc[access.hpp]
    Buf[buffer.hpp]
    Fac[factory.hpp]
    Ver[version.hpp]
  end
  subgraph internal ["detail / internal(不对宿主)"]
    TFImpl[toolflow 执行器/校验实现]
    ImImpl[协调实体/池/归还泵]
  end
  subgraph csharp ["C# / UI(绑定层)"]
    ID[ImageDisplay 控件]
    Bind[PInvoke 绑定 MVP;见 csharp-binding]
  end
  TF --> Tool
  TF --> Term
  TF --> Link
  TF --> Run
  TF --> Reg
  Ser --> TF
  Diag --> TF
  TF -.->|属性中的图像句柄| HI
  Tool -.-> HI
  HI --> II
  HI --> Acc
  HI --> Ver
  Fac --> HI
  Fac --> Buf
  TFImpl --> public_tf
  ImImpl --> public_im
  Bind -->|句柄/视图桥| HI
  Bind --> TF
  ID --> Bind

公开头职责一览

公开头对应概念宿主典型用法
toolflow.hpp容器 ToolFlowCreate / Load / AddTool / Link / Validate
tool.hpp原子 Tool;对外 ToolIdAddTool 返回观察指针;LastRunStatus / GetProperty
terminal.hppInputs / Outputs;TypeDescAddInput / AddOutput;类型用 TypeDesc
link.hpp链接赋值(≠ DAG)Link / Unlink;类型与列表序校验
run_session.hpp一次会话上的 RunSetInput / Run / GetOutput / RequestCancel
registry.hpp类型 id → 工厂反序列化与工具箱共用
serialize.hpp.avtfLoad/Save;未知 type id 严格失败;嵌套 schema 见 toolflow §6.6
diagnostic.hpp(或转发)Diagnostic / DiagnosticCode / SeverityValidate/Run/Load 结构化列表;见 toolflow §7.4.6
handle.hpp 等成像句柄工具属性中的图像;ReadOnly 发布后内容稳定

ToolFlow 如何消费成像

  • ToolFlow 只依赖 vyntek::imaging 的公开句柄头(handle.hpp / image_info.hpp / version.hpp 等)。
  • 链接赋值传递的是句柄值(稳定 ReadOnly),不是 DAG 边调度。
  • ToolFlow 不依赖 detail/ 协调实体实现,不反向被 imaging 依赖。
  • 临时 OpenRead / OpenWrite 由工具在自身 Run 内完成;执行器不代开像素锁。

内部头(不对宿主)

建议安装布局:

include/vyntek/toolflow/...     # 公开
include/vyntek/imaging/...      # 公开
src/toolflow/detail/...     # 或 include/vyntek/toolflow/detail/ 但不进 SDK 安装包
src/imaging/internal/...

内部头示例职责(名称示意):执行列表调度、链接图校验实现、.avtf 解析器细节、Buffer 协调实体、归还泵、池计量。宿主工程若 include 这些路径,视为破坏封装,升级不保证。

与 ImageDisplay(C#)的边界

规则说明
C++ 不 include UI无 Avalonia / Skia / ImageDisplay 头进入 vyntek::toolflow / vyntek::imaging
显示经句柄headless / 工具发布 PixelImageHandle(ReadOnly);绑定层把句柄交给 C#
C# 仅封装image-display.md 保持 C# API;底层像素来自 C++ 成像句柄
观察 ≠ 执行LastRun / 预览订阅不得当作下次 Run 的隐式输入源

托管跨边界细则(opaque handle、Release/Dispose、PInvoke 默认)见独立短文 csharp-binding.md,本文不展开以免 include 树文档过胖。

示意:最小 include 用法

// 示意、非已发布 ABI
#include <vyntek/toolflow/toolflow.hpp>
#include <vyntek/toolflow/registry.hpp>
#include <vyntek/toolflow/run_session.hpp>
#include <vyntek/toolflow/serialize.hpp>
#include <vyntek/imaging/handle.hpp>

namespace tf = vyntek::toolflow;
namespace im = vyntek::imaging;

// ToolFlow 持有/传递 im::PixelImageHandle;不 include UI。

打包与库名(T14 · 薄)

Alive 拍板:MVP 无稳定 ABI 承诺。示意头与示例不是已发布 ABI;与全文「非已发布 ABI」口径一致。本文不写完整 CMake 工程。

倾向说明
库名libvyntek_toolflow(编排核心);libvyntek_imaging(像素/句柄)
头安装树跟本节公开 include:<vyntek/toolflow/...> / <vyntek/imaging/...>;detail/ 不进 SDK 安装包
ABIMVP 无稳定 ABI / 符号版本承诺;升级可改布局与签名
绑定托管侧仍经 csharp-binding.md(PInvoke)消费导出符号;库名与头树对齐即可

实现期可用 CMake add_library(vyntek_toolflow …) / vyntek_imaging 产出上述逻辑库名;文档侧只钉名与安装前缀,不展开工程脚手架。

伪仓库树(R5 · sketch)

不可编译 · 无稳定 ABI。 最小可看见树见 sketch/README.md:公开头路径占位 + fake_acq 链 / Load .avtf / headless 碎片(2–3 个 .cpp)+ ImageDisplay 仅 C# 文件名示意。

关系说明
与本文include 名 / 命名空间须与上文公开树一致;sketch 头仅为路径占位
与 examples-scenarios.md碎片对照 S03 / S04 / S07 骨架,不替代场景文
与 test-contracts.md示意实现对照,非验收勾选正文(仍认 TC-* / §10.1)

本仓 include 对齐(tip 1c03617 · Bruno CM1 伞头 · 按实)

对照 Windows 实树 D:\Works\Vyntek\include(读仓当日,HEAD/1c03617:扁平伞头由 #error 改回便利转发)。Arden 不改 include/ / src/ / examples/ / CMake;缺口只开问题单。

优先嵌套路径 <vyntek/toolflow/…> / <vyntek/imaging/…>;扁平 <vyntek/{toolflow,imaging,memory,session}.hpp> 与伞头 vyntek.h 仅为便利聚合(NON-STABLE)。

两层布局(当前树)

include/
  vyntek.h                          # 伞头:四模块便利头 + capi + version()
  vyntek/
    toolflow.hpp                    # 便利 → toolflow/{toolflow,run_session,registry,diagnostic}.hpp
    imaging.hpp                     # 便利 → imaging 公开子树(含 acquisition_session)
    memory.hpp                      # 便利 → imaging/buffer + 扁平 vyntek::BufferView 占位
    session.hpp                     # 便利 → toolflow/run_session + 扁平 vyntek::Session 占位
    capi/vyntek_exports.h           # C 导出(PInvoke 面)
    toolflow/{toolflow,tool,terminal,link,run_session,registry,serialize,diagnostic,output_inspector}.hpp
    imaging/{image_info,handle,access,buffer,factory,version,status,acquisition_session,memory_pool,memory_owner,fake_camera_adapter}.hpp

路径 / 命名空间 / 库

规格目标本仓已有(按实 · 1c03617)stub 边界
<vyntek/toolflow/…> · vyntek::toolflow已有嵌套子树(含 output_inspector.hpp)头均标 NON-STABLE(AGENTS.md 强制,≠ 未实现);Run/Load/serialize 已实现(见下方「公开头职责 vs 实现成熟度」表);观察面外形在、未验收
<vyntek/imaging/…> · vyntek::imaging已有嵌套子树(含 memory_pool / fake_camera_adapter)仍标 STUB;TC-MEM / TC-ACQ 未验收
伞头 vyntek.h已有:#include 四便利头 + capi/vyntek_exports.h;VYNTEK_VERSION_* / version()便利伞头;无稳定 ABI(VYNTEK_ABI_UNSTABLE)
扁平 <vyntek/toolflow.hpp> / imaging.hpp便利转发到嵌套公开头(CM1;不再 #error)可用,但文档/新代码仍 优先嵌套路径
扁平 <vyntek/memory.hpp>转发 imaging/buffer.hpp + 保留 vyntek::BufferView 两字段占位stub:非协调实体;权威存储 API 在 imaging
扁平 <vyntek/session.hpp>转发 toolflow/run_session.hpp + 保留 vyntek::Session 空类占位stub:真跑用 vyntek::toolflow::RunSession;≠ AcquisitionSession
libvyntek_toolflow + libvyntek_imaging(T14)CMake vyntek_toolflow / vyntek_imaging + 可选 INTERFACE vyntek双库已分;SHARED/Rhett PInvoke 联调仍属实现侧
C 导出 vyntek_toolflow_* / vyntek_imaging_*capi/vyntek_exports.h + src/*/capi_*.cpp示意/薄导出;NON-STABLE
AcquisitionSessionimaging/acquisition_session.hpp停流骨架 + Latest 预览槽(tip e46c042);≠ RunSession;TC 未验收
detail/ 不对宿主src/imaging/detail/buffer_entity.*符合方向;公开头勿拉 detail

公开头职责 vs 实现成熟度(摘要)

公开头规格职责本仓状态(一句话)
toolflow/toolflow.hppCreate/Load/AddTool/Link/Validate已实现;TC-REG/LNK 断言覆盖(真实算法仍 stub)
toolflow/run_session.hppSetInput/Run/GetOutput/Cancel已实现;列表序执行 + Busy/Cancel/Abort;TC-RUN/CTL 覆盖
toolflow/serialize.hpp.avtf Load/Save已实现;TC-SER-01…07 覆盖
toolflow/diagnostic.hppDiagnosticCode 闭集类型在;与 v1.9 码表对齐以实现/测试为准
imaging/handle.hppPixelImageHandle Share/Open*有实现进展;仍 NON-STABLE
imaging/buffer.hppRent/ImportNative/ReturnCompleted有实体与生命周期枚举;完整归还泵属 Reed
toolflow/output_inspector.hppT10 观察 / KeepLatest外形在;GetOutput ≠ 该保留集;未验收
imaging/factory.hppCreate/Copy/Rent*有路径;池类型在 memory_pool.hpp(虚基类,默认 CanRent 乐观)
imaging/acquisition_session.hpp采集会话停流 + 有界入口 + Latest 预览槽 + 资源快照(tip e46c042);NON-STABLE
vyntek/memory.hpp · BufferView(api/memory 历史扁平)占位 only;勿当 ImageBuffer
vyntek/session.hpp · Session(api/session 历史扁平)占位 only;勿当 RunSession
capi/vyntek_exports.hPInvoke 面符号声明在;语义完整度随 Bruno/Rhett

与过时摘要的纠偏

  • 勿再写「扁平头一律 #error / 仅嵌套可用」——自 1c03617(Bruno CM1)起扁平头为便利转发(memory/session 另带历史占位类型)。
  • 勿再写「命名空间仍扁平 vyntek::、单库」——嵌套命名空间与 T14 双库外形已落地;语义/验收仍大量 STUB。
  • 权威细表以本页为准;api 摘录见 api/index。

文档状态:设计草案(2026-10-21,Asia/Shanghai)。与 toolflow v1.9、overview、csharp-binding.md(T11)对齐。T14:库名 libvyntek_toolflow / libvyntek_imaging;头树同上;MVP 无稳定 ABI。R5 伪树见 sketch/README.md。术语终检见 glossary.md(R8)。Alive 拍板:MVP=PInvoke;C++/CLI 非默认;ImageDisplay 仅 C#;TypeDesc/Diagnostic 与 toolflow 同名。

On this page