我整体理解一遍需求,核对信息,有几处确认点跟你对齐:
整体业务理解
- UI面板(截图里这个树状编辑窗口):树控件做分层展示,分组来源是 LayerDefine 里面的 MajCode/MajName(大类)、SubCode/SubName(子类)。
- 树一级节点:
MajName(给水、排水、燃气、热力……大类) - 树二级节点:
SubName(雨水、污水、雨污合流……子类) - 树叶子节点:CodeDefine.Name(一般管线点、雨水井、雨水管段、阀门……),叶子对应每一个要素编码。
- 树一级节点:
- 每点击树叶子项,执行绘制:分两类绘制物
- 点要素:插入块,拿
CodeDefine.BlockName,加载外部块文件插入DWG;同时设置对应图层、附加CAD属性(FieldDefine定义的字段) - 线要素:绘制直线/多段线,同样归属对应图层,携带属性。
- 点要素:插入块,拿
- 全部元数据源头:
PipeStandardStore.Instance内存聚合模型,不再去读SQLite。
需要向你确认的4个疑问点
- 关联逻辑确认
CodeDefine.LayerInfo就是关联到LayerDefine;要靠这个LayerInfo拿MajName / SubName来做树的分组。
会不会存在个别CodeDefine.LayerInfo为null(代码表记录的LayerName在图层表找不到对应记录)?这种要素树面板怎么处理?
方案备选:①丢弃不显示;②归到一个【未分类】虚拟分组。
- 区分点要素/线要素
现在的模型里CodeDefine没有一个字段标记这是【点(插块)】还是【线(画线)】。
- 是靠约定判断:
BlockName为空=线要素;BlockName有值=点要素插入块? - 还是数据库代码表里有某个字段用来区分点/线?
树的重复问题
一个LayerDefine(大类‑子类)下面会挂多个CodeDefine;
会不会出现同一个Code(要素),业务上有没有可能被归属到多个不同图层分组?
按现有结构一个CodeDefine只绑定一个LayerInfo,正常只会出现在树里一个叶子,确认这点。图层创