ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

D2 v0.1.5 版本特性解析:Crow Foot 关系标记、SVG 自适应屏幕与 Dagre 布局优化

D2 v0.1.5 版本特性解析:Crow Foot 关系标记、SVG 自适应屏幕与 Dagre 布局优化 D2 v0.1.5 版本特性解析Crow Foot 关系标记、SVG 自适应屏幕与 Dagre 布局优化【免费下载链接】d2D2 is a modern diagram scripting language that turns text to diagrams.项目地址: https://gitcode.com/GitHub_Trending/d2/d2本篇技术指南以 D2 项目 v0.1.5 版本的发布说明ci/release/changelogs/v0.1.5.md为核心脉络逐项拆解该版本引入的两大新特性Crow Foot 箭头标记、SVG 导出自适应屏幕、一项布局改进Dagre 边缘间距防标签重叠以及五个关键 Bug 修复并结合当前仓库源码d2target、d2scenebuild、d2svg、d2dagrelayout 等给出实现层面的佐证。读完本文你将掌握 v0.1.5 中 Crow Foot 记号的四种取值语义与渲染原理、SVG 自适应屏幕的实现机制以及这批修复对编译、布局与导出链路的实际影响。版本背景与更新总览v0.1.5 是 D2 早期迭代中的一个功能性版本重点补齐了 ER 图实体关系图场景下的关系基数标记能力同时改善了 SVG 导出的查看体验与 Dagre 布局下的边缘可读性。该版本包含2 项新特性FeaturesCrow Foot 箭头标记、SVG 导出后自动适配屏幕1 项改进ImprovementsDagre 布局下边缘间距调整避免标签相互覆盖5 项缺陷修复Bugfixes覆盖 PNG 导出、watch 模式、编译器维度校验、near标签碰撞与 SQL 表列路由五个方向。下文按此结构逐一展开并在每个要点后附上仓库内可交叉验证的源码依据。新特性一Crow Foot 关系记号cf-one / cf-many特性含义Crow Foot乌鸦脚是实体关系建模ERD中用于表达关系基数cardinality的标准记号常见于 one、many、one and only one、zero or many 等语义的表达。v0.1.5 将其引入箭头arrowhead体系使用户在纯文本 D2 脚本中即可描述一对一一对多多对多等关系约束。四种取值与语义在 d2target/d2target.go 中箭头类型被建模为Arrowhead字符串类型v0.1.5 新增的四种 Crow Foot 取值如下取值语义ER 基数视觉特征cf-one恰好一个one and only one单条垂直修饰线竖线cf-many零或多个zero or more三条向外展开的叉状标记cf-one-required至少一个one or more垂直修饰线 叉状标记cf-many-required一个或多个many必选垂直修饰线 叉状标记组合需要说明的是从渲染实现看cf-one-required与cf-many-required在修饰线 叉状标记的组合方式上共享同一套绘制逻辑区别主要体现在语义命名上而cf-one使用单条竖线、cf-many使用三线叉状标记二者的几何生成代码在 d2renderers/d2scenebuild/connection.go 中分别实现。渲染原理在 d2renderers/d2scenebuild/connection.go 中Crow Foot 箭头的绘制分两步完成偏移计算offset : 3 strokeWidth*1.8偏移量随线宽动态放大保证修饰符号与连接线端点之间留有稳定间隙修饰符modifier生成对于-required系列绘制一条贯穿箭头高度方向的竖直折线polyline表示恰好一个对于非 required 系列绘制一个空心椭圆d2scene.Ellipse作为修饰符对于-many系列额外生成三条从中心向外展开的路径命令MoveTo/LineTo构成经典的乌鸦脚三叉形状。当箭头位于连接目标端时还会通过d2scene.Scale(-1, -1)做镜像变换使记号方向正确贴合连线方向connection.go。使用示例在 D2 脚本中通过source-arrowhead或target-arrowhead关键字指定 Crow Foot 记号。典型 ER 关系描述如下customer: { shape: rectangle } order: { shape: rectangle } customer - order: { source-arrowhead: cf-many target-arrowhead: cf-one-required label: places }以上脚本表示一个客户可以下多个订单many每笔订单必须属于一个客户one required。所有合法箭头取值包括 Crow Foot 四种均在 d2target/d2target.go 的Arrowheads校验表中登记编译器只接受该集合内的取值。测试佐证d2renderers/d2scenebuild/arrowhead_test.go 将四种 Crow Foot 取值列入支持的箭头类型枚举并覆盖了-required修饰线与-many三叉路径的生成断言可作为该特性的行为验证入口。新特性二导出的 SVG 打开即自动适配屏幕特性含义v0.1.5 之前导出的 SVG 在浏览器或 SVG 查看器中打开时可能因画布尺寸大于视口而需要手动缩放或滚动。该版本通过为 SVG 根元素补充viewBox与preserveAspectRatio属性使图形成功适配查看器视口实现打开即缩放适配。实现机制在 d2renderers/d2svg/d2svg.go 中SVG 根标签的生成逻辑如下preserveAspectRatio的两种取值默认xMinYMin meet按左上角对齐、等比缩放并完整容纳整个图形当开启居中选项opts.Center时为xMidYMid meet图形在视口内水平垂直居中。viewBox以画布实际宽高w、h构造viewBox0 0 w h使外部容器可基于比例自适应缩放。通过meet语义图形在任意视口下都能等比完整呈现且 SVG 仍保留width/height属性作为渲染默认尺寸不影响后续的精确排版需求如 PDF/PPTX 转换。对动画与 watch 模式的影响由于动画渲染opts.MasterID ! 会改变外层标签结构不再输出svg包装而改用g该版本在实现时明确将自适应包装限制在非动画的常规导出路径上。与此配套的 watch 模式行为见下文 Bugfix 部分——浏览器预览仅在首次加载时执行适配避免编辑过程中画面被反复缩放。改进Dagre 布局下的边缘间距与标签防重叠v0.1.5 对默认布局引擎Dagre的边间距策略做了调整将 Dagre 边缘彼此拉开防止标签重叠。在 d2layouts/d2dagrelayout/layout.go 中布局参数被建模为ConfigurableOpts包含两个可配置项参数JSON 键默认值含义NodeSepnodesep60同层节点间距EdgeSepedgesep20相邻边间距注释明确说明对 top-to-bottom 图ranksep控制纵向层级间距nodesep与edgesep控制横向间距。v0.1.5 对边缘间距的调整即作用于EdgeSep维度——当多条边并行连接相邻节点时更宽的边距能显著降低边缘标签label互相遮挡的概率从而提升复杂依赖图的阅读性。该布局参数最终透传给 Dagre 的edgesep选项见 layout.go 中rootAttrs的组装逻辑。Bugfix 详解五个修复点的行为与验证1. PNG 导出不再追加不存在的 Appendix 分隔线修复前即使图中没有任何 appendix附录元素PNG 栅格化输出仍可能绘制一条多余的分隔线。该版本确保当附录不存在时导出中不包含附录分隔线。佐证d2cli/raster.go 中注释说明 Static raster exports paint at most two appendix items (tooltip and ...)即栅格导出对附录元素的数量与条件有明确约束修复使 PNG 输出与该约束保持一致避免空附录产生视觉残影。2. Watch 模式仅在初始加载时适配屏幕配合新特性二watch 模式浏览器实时预览现在只在首次加载时执行适配屏幕动作后续每次文件变更触发的重渲染不再重新缩放视口。这一设计保证用户在编辑过程中保持稳定的缩放与平移状态避免因反复自适应造成观看跳动。3. 带 style 的形状上 width/height 不再误报编译错误此前对带有样式style的形状设置width/height尺寸时编译器会错误地抛出编译错误。修复后尺寸属性width/height与style的组合使用被正常接受维度校验逻辑不再与样式块的解析相互干扰。4. 修复near与边界标签的位置碰撞near关键字用于将对象吸附到参考点或参考对象附近。此前当near指向的目标与位于图表边界上同一位置的标签重合时两者会发生碰撞重叠。该版本修复了位置解析使near定位与边界标签的排布互不冲突。5. 修复 SQL 表列路由列名为表名前缀时的寻路错误在 SQL 表sql_table形状之间连线时若列名恰好是表名的前缀例如表名users、列名user此前路由计算会因名称前缀匹配歧义而选错端口导致连线起点/终点错误。该版本修正了列端口的路由解析逻辑确保名称前缀关系不再干扰表间连线的正确寻路。小结v0.1.5 以关系建模体验 导出查看体验为双主线Crow Foot 记号为 ER 图补齐了标准基数表达cf-one、cf-many及其-required变体SVG 自适应屏幕与 watch 初始适配改善了查看与编辑流程Dagre 边缘间距调整与五项 Bugfix 则分别从布局可读性、导出一致性、编译校验与路由正确性上夯实了基础。对于需要深入验证或二次开发的读者建议按如下路径继续研读箭头类型定义与校验表d2target/d2target.goCrow Foot 场景渲染d2renderers/d2scenebuild/connection.goCrow Foot 测试用例d2renderers/d2scenebuild/arrowhead_test.goSVG 自适应屏幕生成d2renderers/d2svg/d2svg.goDagre 边/节点间距参数d2layouts/d2dagrelayout/layout.go栅格导出附录约束d2cli/raster.go【免费下载链接】d2D2 is a modern diagram scripting language that turns text to diagrams.项目地址: https://gitcode.com/GitHub_Trending/d2/d2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表