技术栈:TRAE SOLO · C# · .NET 8.0 · CommunityToolkit.Mvvm · System.Reactive (Rx.NET) · Silk.NET · Vulkan
周期:从架构设计到 UI DEMO 可运行,全程 SOLO 驱动
开源仓库:https://github.com/chenjan470-ai/feii-builder
摘要
用 TRAE SOLO 从零搭建了一个面向三维建模软件的 C# UI 框架 Feii Builder。当前三维软件 UI 框架要么是 C++ 的(Qt/ImGui),要么是 Python 和 Web 的,仅有的 C# 方案 Avalonia 对三维和现代 Vulkan 支持并不好。Feii 采用 C# + .NET 8.0 + CommunityToolkit.Mvvm + Rx.NET + Silk.NET + 优先 Vulkan 的技术栈,目标是补充 C# 情景下三维 UI 框架空白。目前已完成 7 层模块化架构、54 个源文件、11,275 行代码、28 个单元测试全部通过,UI DEMO 可运行并展示完整的菜单栏/工具栏/停靠面板/状态栏/3D 视口布局。
背景:为什么 C# 三维领域缺一个 UI 框架?
我是一名建筑师和业余三维软件插件开发者,长期关注建筑和机械领域的快速建模工具。目前萌生了AI友好自建快速三维建模软件工具的想法,在做UI技术选型时,我发现了一个尴尬的现实:
当前三维软件 UI 框架的现状:
| 方案 | 语言 | 三维支持 | Vulkan 支持 | 现代架构 |
|---|---|---|---|---|
| Qt | C++ | 传统信号槽 | ||
| ImGui | C++ | 无 MVVM | ||
| Dear PyGui | Python | 无 MVVM | ||
| Web (Three.js/Babylon) | JS/TS | React/Vue | ||
| Avalonia | C# | |||
| WPF | C# |
核心痛点:C# 作为 .NET 生态的主力语言,在三维 UI 领域几乎是空白。Avalonia 虽然是优秀的 C# UI 框架,但它的渲染管线基于 Skia/软件渲染,对 Vulkan 和三维场景的支持非常有限。如果你想在 C# 里做一个类似 Blender/Rhino 那样的三维建模软件,你需要自己从底层搭起。
这就是 Feii Builder 的出发点:做一个 C# 原生的、优先 Vulkan 的、MVVM+响应式的三维 UI 框架,作为后续三维软件开发的基础。
实践过程:SOLO 如何帮我从零搭起一个 UI 框架
和很多"一气呵成"的项目不同,Feii 的开发过程是一个完整的工程化闭环——从技能库搭建、架构文档生成、自动化工作安排、到自动测试修正,全部由 SOLO 驱动。
第一阶段:技能库搭建——让 SOLO 理解三维 UI 开发
在写第一行代码之前,我先做了件很多人可能跳过的事:给 SOLO 建了一套专属技能系统。
这套技能系统包含 7 个技能:
| 技能 | 职责 |
|---|---|
| dev-context | 核心开发上下文,整合记忆和进化 |
| feii-dotnet | .NET 8.0 开发规范 + 记忆/进化 |
| feii-graphics | GPU 计算与渲染 + 记忆/进化 |
| feii-workflow | 开发阶段工作流模板 |
| feii-learnings | 自进化学习技能 |
| feii-verify | 验证技能(编译/测试/类型检查) |
| feii-review | 代码审核技能 |
为什么要先建技能库? 因为三维 UI 框架开发涉及的知识面极广——从 Vulkan 渲染管线到 HarfBuzz 文本整形,从 Win32 窗口管理到 MVVM 属性系统。如果不先让 SOLO "学会"这些领域知识,它生成的代码会非常泛化,无法满足专业需求。
关键 Prompt 示例:
创建 feii-graphics 技能,需要包含以下知识:
1. Vulkan 渲染管线:Instance → PhysicalDevice → Device → Swapchain → Pipeline
2. Silk.NET 的 Vulkan 绑定使用方式
3. GPU 多后端自动选择与降级策略(Vulkan → D3D11 → OpenGL)
4. 文本渲染管线:字体管理 → 文本整形(HarfBuzz) → 布局 → 字形图集 → GPU 渲染
5. Win32 窗口与 Vulkan Surface 的对接
第二阶段:架构文档生成——7 层模块化架构
有了技能库,我让 SOLO 基于对 Blender、Rhino、Godot 等开源项目的分析,生成完整的架构文档。
Feii 的 7 层架构:
┌─────────────────────────────────────────────────────────────────────┐
│ L7 扩展层 Extension │
│ Feii.Plus · Feii.AI · Feii.CLI │
├─────────────────────────────────────────────────────────────────────┤
│ L6 应用层 Application │
│ Feii.App │
├─────────────────────────────────────────────────────────────────────┤
│ L5 渲染层 Rendering │
│ Feii.Render │
├──────────────────────────┬──────────────────────────────────────────┤
│ L4 UI框架层 │ L3 服务层 │
│ Feii.UI.Interface │ Feii.Support · Feii.Exchange │
├──────────────────────────┤ │
│ L3 UI平台层 │ │
│ Feii.UI.Text │ │
│ Feii.UI.Gpu │ │
│ Feii.UI.Portal │ │
├──────────────────────────┴──────────────────────────────────────────┤
│ L2 内核层 Kernel │
│ Feii.Core · Feii.Core.GPU · Feii.Project │
├─────────────────────────────────────────────────────────────────────┤
│ L1 基础层 Foundation │
│ Feii.Shared │
└─────────────────────────────────────────────────────────────────────┘
关键架构决策:
| 决策 | 理由 |
|---|---|
| GPU 计算与 GPU 渲染分离为两个模块 | 计算用 ILGPU,渲染用 Vulkan/D3D11,职责边界清晰 |
| UI 框架层与平台层分离 | Interface 层只定义控件/布局/事件,Portal 层对接 Win32/Linux/macOS |
| 依赖单向原则 | 依赖只能从上层指向下层,禁止反向依赖和循环依赖 |
| 容错降级原则 | Vulkan 不可用时自动降级到 D3D11 → OpenGL → 软件渲染 |
第三阶段:核心模块实现——从底层到上层的完整搭建
这是最核心的开发阶段。我让 SOLO 按照架构文档的依赖顺序,从 L1 基础层开始逐层实现。
3.1 L1 基础层:Feii.Shared
关键 Prompt:
实现 Feii.Shared 模块,包含:
1. 基础类型:Point2D/3D, Vector2D/3D, Size2D, Rect2D, Color4, Transform3D
2. 错误系统:Result<T> 类型、ErrorCodes 分类、IError 接口
3. 日志系统:ILogger/ILoggerFactory/ILogWriter,支持多级别日志和彩色控制台输出
4. 引入 System.Reactive 和 CommunityToolkit.Mvvm 包
要求:所有类型使用 readonly record struct,保证不可变性和值语义
SOLO 生成了完整的类型系统,包括:
- 不可变的基础几何类型(
Point3D、Vector3D、Color4等) - 函数式错误处理(
Result/Result<T>替代异常) - 可扩展的日志系统
3.2 L3 平台层:Feii.UI.Portal(窗口管理)
这是最硬核的部分——纯 C# 手写 Win32 窗口,不依赖任何 UI 框架。
关键 Prompt:
实现 Win32 窗口管理,要求:
1. 纯 P/Invoke 实现,不依赖任何第三方窗口库
2. 支持:窗口创建/销毁、消息循环、DPI 感知、鼠标/键盘事件
3. IPortalWindow/IPortalContext 接口抽象,为 Linux/macOS 移植预留
4. 窗口事件:Resized/Closed/KeyDown/MouseDown/MouseMove/Paint 等
5. 鼠标捕获(SetCapture/ReleaseCapture)支持
SOLO 生成了完整的 Win32 窗口系统,包括:
Win32Window:545 行,完整的窗口生命周期管理Win32PInvoke:497 行,Win32 API 声明Win32Context:109 行,消息循环和回调管理- 完整的事件系统:鼠标、键盘、DPI、窗口状态变化
3.3 L3 平台层:Feii.UI.Gpu(GPU 渲染抽象)
关键 Prompt:
实现 GPU 渲染后端抽象层,要求:
1. IGpuDevice 接口:Buffer/Texture/Shader/Pipeline/Framebuffer/Swapchain/CommandList
2. Vulkan 后端:基于 Silk.NET.Vulkan 绑定
3. 多后端工厂:GpuBackendFactory.GetBestAvailableBackend() 自动选择
4. 资源管理:VulkanBuffer/VulkanTexture/VulkanShader/VulkanPipeline 等
5. 设备特性查询:GpuDeviceFeatures
SOLO 生成了:
IGpuDevice:460 行,完整的 GPU 设备抽象接口VulkanBackend:73 行,Vulkan 后端入口VulkanDevice:90 行,Vulkan 设备管理VulkanResources:314 行,Vulkan 资源类型(Buffer/Texture/Shader/Pipeline/Swapchain 等)
3.4 L3 平台层:Feii.UI.Text(文本渲染)
关键 Prompt:
实现文本渲染系统,要求:
1. 字体管理:IFontFace/IFontManager,基于 SkiaSharp + HarfBuzzSharp
2. 文本整形:TextShaping,处理复杂文字排版
3. 文本布局:TextLayout,支持多行排版和对齐
4. 字形图集:GlyphAtlas,GPU 纹理缓存字形
5. GPU 文本渲染:GpuTextRendering,将字形上传到 GPU 渲染
6. 文本命中测试:TextHitTesting,支持光标定位和选择
SOLO 生成了完整的文本渲染管线,从字体加载到 GPU 渲染的 12 个类。
3.5 L4 UI 框架层:Feii.UI.Interface(控件/布局/事件)
这是 UI 框架的核心,也是代码量最大的模块。
关键 Prompt:
实现 UI 框架核心,要求:
1. 属性系统:UiDependencyProperty/UiDependencyObject,支持属性变更通知和元数据
2. 控件体系:UiElement → UiControlBase → Control → Button/TextBox/Slider 等
3. 布局系统:Measure/Arrange 两遍布局,StackPanel/WrapPanel/DockPanel/Grid
4. 事件路由:RoutedEvent,支持冒泡和隧道
5. 绘图抽象:IUiDrawContext,DrawRect/DrawRoundedRect/DrawLine/DrawText/DrawPath
6. Shell 系统:UiShell,包含菜单栏/工具栏/停靠面板/状态栏
7. 主题系统:UiThemeManager,支持 Light/Dark 主题切换
SOLO 生成了:
UiShell:1,054 行,完整的 Shell 实现(菜单栏 + 工具栏 + 停靠面板 + 状态栏)UiRenderBridge:773 行,渲染桥接层BasicControls:463 行,基础控件(Button/TextBox/CheckBox/Slider 等)PanelControls:387 行,面板控件(StackPanel/WrapPanel/DockPanel/Grid)Control:224 行,控件基类和依赖属性系统- 以及 DrawingSystem、RoutedEvents、InputSystem、LayoutSystem 等核心模块
3.6 UI DEMO:Feii.UI.Demo
关键 Prompt:
实现 UI DEMO 程序,要求:
1. 创建 Win32 窗口,标题"Feii - 三维快速建模软件",1600x900
2. 使用 SoftwareRenderer(基于 System.Drawing)作为当前渲染器
3. 初始化 UiShell,显示完整的建模软件 UI 布局
4. 支持窗口缩放时自动重新布局
5. 渲染循环:BeginFrame → RenderElement → Present
DEMO 运行后展示的 UI 布局:
- 菜单栏:文件/编辑/视图/创建/修改/工具/帮助,带快捷键显示
- 工具栏:标准/视图/创建/修改四组工具栏
- 左侧停靠面板:工具面板(选择/移动/旋转/缩放/直线/圆/矩形/多段线)
- 右侧停靠面板:属性面板 + 图层面板
- 中央视口:3D 视口区域(带网格线)
- 状态栏:状态文本/坐标/单位/选择信息
第四阶段:自动化工作流——SOLO 的闭环能力
除了写代码,我还让 SOLO 帮我建立了完整的自动化工作流:
4.1 自动化测试和修正
验证流程:
1. dotnet build → 编译检查
2. dotnet test → 28 个单元测试
3. 类型检查 → 确保无编译警告
4. 发现问题 → 自动修正 → 重新验证
测试覆盖:
- 基础类型测试:Rect/Point/Size/Thickness/Vector2/Color
- 依赖属性测试:Register/GetValue/SetValue/ClearValue
- 控件测试:Button/CheckBox/Slider/StackPanel/WrapPanel/DockPanel
- 主题测试:Light/Dark 主题颜色
- 矩阵测试:Identity/Translation/Scale/Multiply
4.2 自动化 Review
Review 维度:
1. 架构审查:模块依赖是否单向、接口是否隔离
2. 安全审查:是否有不安全代码、是否有内存泄漏
3. 性能审查:是否有不必要的对象分配、是否有同步阻塞
4.3 自进化学习系统
学习闭环:
规划 → 实现 → 验证 → Review → 反思 → 记忆 → 进化
每次犯错后,SOLO 会自动记录教训,3 次以上跨任务重复的模式会自动升级为永久规则。
踩过的坑
| 坑 | 原因 | 解决方式 |
|---|---|---|
| Win32 窗口 WndProc 回调崩溃 | GCHandle 管理不当导致 GC 回收 | 使用 UnmanagedCallersOnly + GCHandle.Alloc 固定引用 |
| Vulkan 初始化在无 GPU 环境失败 | 没有降级策略 | 实现 GpuBackendFactory,自动降级到软件渲染 |
| 文本渲染中文乱码 | 字体回退链不完整 | 建立字体回退链:指定字体 → 微软雅黑 → 宋体 → 通用无衬线 |
| DPI 缩放导致 UI 模糊 | 未处理 WM_DPICHANGED | 实现 DPI 感知窗口,自动调整渲染尺寸 |
| 停靠面板布局计算错误 | 左右面板宽度未从总宽度中扣除 | 修正 DockManager 的布局算法,先计算左右再计算中间 |
成果展示
技术栈一览
| 层 | 选型 | 说明 |
|---|---|---|
| 语言 | C# 12 / .NET 8.0 | 最新 LTS,跨平台 |
| MVVM | CommunityToolkit.Mvvm 8.2.2 | 现代 MVVM 模式 |
| 响应式 | System.Reactive 6.0.1 | Rx.NET 响应式数据流 |
| GPU 渲染 | Silk.NET.Vulkan 2.20.0 | Vulkan 绑定,优先 Vulkan |
| GPU 降级 | Silk.NET.Direct3D11 + OpenGL | 多后端自动选择 |
| 文本整形 | HarfBuzzSharp 8.3.0 | 跨平台复杂文字排版 |
| 2D 渲染 | SkiaSharp 2.88.8 | 字体管理和字形渲染 |
| 测试 | xUnit 2.6.2 | 单元测试框架 |
项目结构
Feii.sln (7 个项目)
├── Feii.Shared/ L1 基础层 - 公共类型/错误/日志
├── Feii.UI.Portal/ L3 平台层 - Win32 窗口管理
├── Feii.UI.Gpu/ L3 平台层 - GPU 渲染抽象
├── Feii.UI.Text/ L3 平台层 - 文本渲染系统
├── Feii.UI.Interface/ L4 框架层 - 控件/布局/事件/Shell
├── Feii.UI.Demo/ DEMO - 可运行的 UI 演示
└── Feii.Tests/ 测试 - 28 个单元测试
代码统计
| 指标 | 数值 |
|---|---|
| 源文件数 | 54 |
| 代码行数 | 11,275 |
| 编译警告 | 0 |
| 编译错误 | 0 |
| 单元测试 | 28(全部通过) |
| 技能文件 | 7 个 SKILL.md |
功能清单
已实现:
Win32 窗口管理(创建/销毁/消息循环/DPI/事件)
GPU 渲染后端抽象(Vulkan/D3D11/OpenGL 接口定义)
文本渲染管线(字体管理/整形/布局/图集/GPU 渲染)
UI 属性系统(DependencyProperty/DependencyObject)
UI 控件体系(Button/TextBox/CheckBox/Slider/ProgressBar 等)
UI 布局系统(StackPanel/WrapPanel/DockPanel/Grid)
UI 事件路由(RoutedEvent 冒泡/隧道)
Shell 系统(菜单栏/工具栏/停靠面板/状态栏)
主题系统(Light/Dark 主题)
绘图抽象(IUiDrawContext 跨渲染器适配)
软件渲染器(System.Drawing 实现,用于当前 DEMO)
完整的建模软件 UI 布局(参照 Blender/Rhino)
规划中:
Vulkan 渲染器实际对接(当前为 Mock 实现)
Linux/macOS 平台支持
3D 视口渲染(场景/材质/光照)
输入法支持
无障碍访问
效果与总结
SOLO 在我流程中做了什么?
| 环节 | SOLO 的贡献 |
|---|---|
| 技能库搭建 | 生成了 7 个专业技能,让后续开发更精准 |
| 架构设计 | 分析了 Blender/Rhino/Godot 源码,生成了 7 层模块化架构 |
| 代码实现 | 11,275 行代码全部由 SOLO 生成,我只做方向性指导 |
| 测试验证 | 自动编译、自动测试、自动修正,28 个测试全部通过 |
| 代码审查 | 多维度并发审查(架构/安全/性能) |
| 学习进化 | 自动记录错误和纠正,形成永久规则 |
提效了多少?
- 传统方式:搭建这样一个 UI 框架,需要 2-3 个月
- SOLO 方式:从架构到可运行 DEMO,约 2 天
- 提效比:约 30-45 倍
可复用的方法
- 先建技能库再写代码:让 SOLO 先"学会"领域知识,生成代码质量大幅提升
- 架构先行:让 SOLO 生成完整架构文档,再按依赖顺序逐层实现
- 闭环验证:每次实现后自动编译+测试+审查,确保每一步都正确
- 自进化学习:记录每次犯错和纠正,让 SOLO 越来越懂你的项目
对 C# 三维生态的思考
C# 在企业应用和游戏开发(Unity/Godot)中已经非常成熟,但在三维建模软件领域几乎空白。Feii 的实践证明:
- C# 完全可以胜任三维 UI 框架开发——.NET 8.0 的性能、Silk.NET 的原生绑定、Rx.NET 的响应式能力,组合起来非常强大
- Vulkan 优先的策略是正确的——现代 GPU 渲染需要低开销的 API,Vulkan 是最佳选择
- MVVM + 响应式是三维 UI 的正确架构——三维软件的属性面板、命令系统、事件系统天然适合 MVVM 和 Rx
Feii 的目标不只是做一个 DEMO,而是成为一个真正可用的 C# 三维 UI 框架,让后续的三维软件开发者不再需要从零开始,让非编程专业的各行业专业人士可以极低门槛完成专业软件和插件开发,让AI可以通过CLI进行建模渲染等工作,甚至可以完全动口不动嘴,完成工业级别建模工作和动画展示。同时,Feii全量实现Rhino的API接口和Blender的Python API接口,方便主流三维软件丰富插件生态转移。
开源仓库:https://github.com/chenjan470-ai/feii-builder
协议:MIT(保留作者署名)








