柔性软件底座平台

EEditor

一份代码,多领域落地。
从 JSON 编辑器到 3D CAD,一个底座全部搞定。

查看案例 开源库编译 →
📸 请放置 EEditor 主界面截图 → images/hero_bg.png
架构

通用底座 + 领域插件

把不变的东西做到极致通用,让变化的东西以最低成本接入。插件之间共享同一套数据模型,天然互通。

领域插件层
JSON 编辑 · 网络扫描 · 3D 仿真 · CAD 建模 · 点云处理
通用底座(LibCommon)
EItem 树 · 反射系统 · EVariant · 命令管理 · 序列化 · UI 抽象
PluginJson PluginNetTools PluginOsg PluginVsg PluginPointCloud PluginOcc PluginUIQt 更多…

为什么选择 C++

高性能底座 + 多语言生态,用 C++ 做最稳定通用的底层,用脚本做最灵活敏捷的业务表达。

📚

丰富的生态

直接对接 OpenSceneGraph、VTK、OpenCASCADE、Qt 等业界标准库,无需中间层,零性能损耗。

⚡

极致性能

零成本抽象、确定性内存管理、编译期优化。仿真、点云、CAD 等场景的不可替代保障。

🔗

脚本兼容

Python、JavaScript、Lua 均可自然接入。C++ 做底座,脚本做业务,各取所长。

基础底座

LibCommon 核心模块

所有模块零外部依赖,可独立编译、独立测试。插件开发者无需关心 UI 渲染、命令管理、数据持久化。

🌳

EItem 系统

统一数据模型。一切可见数据都是 EItem 树节点 —— JSON 键值对、3D 几何体、网络设备,同一套接口。字符串驱动的对象创建,无需 new,无需 #include。

统一数据模型
🔍

元数据与反射

编译期自动生成类型"说明书":类名、属性、类型约束、可调操作。ui_ 前缀属性自动出现在属性面板,零 UI 胶水代码。

自动化
📦

EVariant

万能类型容器。整数、浮点、字符串、向量、颜色、矩阵、数组 —— 一个容器统一传递。反射、属性面板、序列化、命令系统共享同一份数据,零转换损耗。

类型统一
🔧

插件系统

标准生命周期:regist → beforeInit → init → afterInit。DLL/SO 两阶段加载。已累计 15+ 插件,覆盖 UI、数据格式、传感器、网络、3D 等领域。

15+ 插件
↩️

命令管理

每次操作封装为可撤销命令,携带 undo/redo 委托和序列化快照。树节点的增删改移自动生成命令入栈,插件无需手动管理撤销逻辑。

undo/redo
💾

序列化系统

EItem 树一键序列化为 JSON。每个子类只需实现 packData/unpackData。数据在版本控制、跨平台迁移和 AI 辅助编辑中均易于处理。

JSON 持久化

界面与实现分离

13 个平台无关的抽象 UI 元素。插件代码只依赖抽象接口,完全不感知底层 GUI 框架。当前由 Qt 实现,理论上可替换为任何框架。

📸 请放置截图 → images/screenshot_tree.png

树视图

EItem 层级树的直接映射。多选、拖拽排序、增删改移自动生成撤销命令。树视图即数据视图。

📸 请放置截图 → images/screenshot_property.png

属性编辑

反射系统根据 EVariant 类型自动生成编辑控件。整数→数字框,字符串→文本框,颜色→取色器。零 UI 胶水代码。

📸 请放置截图 → images/screenshot_codeeditor.png

代码编辑器

基于 QScintilla,语法高亮、行号、括号匹配。与树视图双向同步 —— 点击树节点高亮对应文本,编辑文本自动更新树。

📸 请放置截图 → images/screenshot_3d_scene.png

三维渲染

三种后端:OSG+OpenGL、VSG+Vulkan、VTK+Qt。一套 EItem 抽象,多种渲染管线。场景状态一键 JSON 序列化。

开发体验

定义一个新数据模型有多简单

继承 EItem,声明 ui_ 属性,反射系统自动处理一切。

// 定义一个 JSON 叶子节点 —— 仅需几行代码 class EJsonLeaf : public EItem { public: EString ui_key; // 自动出现在属性面板 EVariant ui_variantValue; // 万能容器:string/int/double/bool }; // 创建节点树 —— 仅需字符串指定类型 auto root = EItemManager::newItem("EJsonObject"); auto child = EItemManager::newItem("EJsonLeaf"); child->ui_key = "name"; child->ui_variantValue = EVariant("EEditor"); root->addChild(child);

已集成的插件

PluginUIQt
PluginJson
PluginNetTools
PluginOsg
PluginVsg
PluginPointCloud
PluginOcc
PluginGraph 规划中
PluginTimeline 规划中

一个真正通用的软件底座

从 JSON 编辑器到点云处理器,从网络扫描到 CAD 建模。
不变的部分做到极致通用,变化的部分以最低成本接入。
EEditor 正在证明:这不是梦。

技术栈

核心技术与工具

C++ Qt VTK OpenSceneGraph VulkanSceneGraph OpenCASCADE Lua Python CMake QScintilla rapidjson WebAssembly LLM