尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

极化码在高斯信道下的CA-SCL译码:MATLAB实现与性能仿真

极化码在高斯信道下的CA-SCL译码:MATLAB实现与性能仿真

简介:这套Matlab代码包实现了极化码在高斯信道下的CA-SCL译码算法,面向通信工程、电子信息与数学等专业学生,可用于课程设计、期末大作业或毕业设计中的性能验证与算法对比。代码采用参数化编程,列表深度、信噪比等关键参数可灵活…

📅 2026/9/11 18:25:40
OpenAI Agents SDK Realtime 智能体完全指南:会话生命周期、音频配置与电话集成实战

OpenAI Agents SDK Realtime 智能体完全指南:会话生命周期、音频配置与电话集成实战

OpenAI Agents SDK Realtime 智能体完全指南:会话生命周期、音频配置与电话集成实战 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

📅 2026/9/11 18:25:40
STM32F405ZG与AD5293数字电位器实现工业自动校准方案

STM32F405ZG与AD5293数字电位器实现工业自动校准方案

做仪表、传感器变送器或者工业板卡的朋友,八成都有过半夜还在车间里拿螺丝刀拧电位器的经历。每个批次元器件都有离散性,每块板子都要单独校准,校准完还得担心机械电位器用久了氧化、振动导致阻值漂移。后来我把整个方案换成了数字电位器&…

📅 2026/9/11 18:20:39
MORE NEWS

更多资讯

📰

AI 裕灌电动开罐器智能功率 MOSFET 完整选型方案

2026 年随着 AI 技术在智能厨电中的深度渗透(如自适应力控、罐体识别、节能待机),电动开罐器对功率 MOSFET 提出更高要求:小型化、低损耗、高可靠性。微碧半导体(VBsemi)基于 Trench 工艺,为您提…

📰

AI 浴室柜 电动升降台盆柜智能功率 MOSFET 完整选型方案

2026 年随着 AI 技术在智能家居中的深度渗透,浴室柜与电动升降台盆柜对功率器件提出更高要求:静音驱动、低功耗、高可靠性。微碧半导体(VBsemi)基于 Trench、SGT 及超结工艺,为您提供覆盖升降电机驱动、控制板电源、传…

📰

WeChatMsg 使用教程:导出微信聊天记录

WeChatMsg 使用教程:导出微信聊天记录 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg WeCha…

📰

5 步在本地搭起自托管 AI:self-hosted-ai-starter-kit 部署与配置方法

5 步在本地搭起自托管 AI:self-hosted-ai-starter-kit 部署与配置方法 【免费下载链接】self-hosted-ai-starter-kit The Self-hosted AI Starter Kit is an open-source template that quickly sets up a local AI environment. Curated by n8n, it provides essen…

📰

Claudian 插件完整指南:让 AI 代理直接在你的 Obsidian 知识库里干活

Claudian 插件完整指南:让 AI 代理直接在你的 Obsidian 知识库里干活 【免费下载链接】claudian An Obsidian plugin that embeds Claude Code/Codex as an AI collaborator in your vault 项目地址: https://gitcode.com/GitHub_Trending/cl/claudian 还在手…

📰

### Python集群导向计算:构建高效分布式数据处理架构

随着数据规模的爆炸式增长,单机计算在处理海量数据、复杂模型训练及高并发任务时逐渐显露出性能瓶颈。Python集群导向(Cluster-oriented)计算通过将任务分发至多个计算节点并行执行,打破了单机的物理限制,成为现代数据…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬