CAD程序设计:XLINE(构造线)功能设计分析

发布时间:2026/9/27 2:05:52

CAD程序设计:XLINE(构造线)功能设计分析 XLINE构造线功能设计分析摘要本文给出XLINE构造线命令的完整功能设计复用 Element 现有字段零新增结构枚举追加Xline13以「有界化 二次裁剪」解决无限直线渲染难点交互链路与直线族同构策略模式六种绘制方式全部映射到既有line::Mode几何计算命令行、捕捉/交点/剪切等兼容层、UI 入口与验证7 组 67 断言全绿均已落地并明确 fitView 排除、框选不整选、导出降级 ±10 m 等有意边界。1. 需求回顾在绘图模块中新增XLINE构造线命令绘制向两端无限延伸的辅助线。#要求落地方式1命令行XLINE 菜单/工具栏入口提示选择绘制方式XlineCommand精确xline 前缀xline_*工具条【基本图元】下拉按钮 【绘图 构造线(X)】子菜单2六种绘制方式H / V / A / 两点(默认) / B / O全部映射到既有line::Mode几何计算零重复实现3动态预览、回车确认、Esc/右键取消、连续绘制previewXline无限线实时预览commitXlineAndContinue提交后保持命令活跃右键/Esc 走通用兜底退出4按视图边界裁剪显示、缩放同步图层/颜色/线型撤销重做不参与面积长度统计buildPath(Xline, visibleWorldRect)每帧裁剪样式走ElementFactory::create默认管道addElement自动入撤销栈flatten对 Xline 返回空 → 剪切/统计天然排除5复用坐标输入/捕捉/单位处理与 LINE/RAY 风格一致捕捉通过点交点、injectPoint坐标注入、snapDefaultFor默认档全部自动生效2. 数据模型复用 Element 现有字段零新增结构枚举“只增不改”铁律ElementType::Xline追加到枚举末尾序号 13老 .sketch 存整数序号追加不破坏旧档。pts[0] 通过点世界坐标rotation 方向角度世界角Y 翻转只在渲染期。序列化elementToJson/FromJson为泛型字段读写无需改动。3. 无限直线的渲染方案本设计核心难点ElementItem::buildPath是静态方法拿不到视图且 QGraphicsItem 的 boundingRect 是缓存值不会随视图平移/缩放自动重算。方案有界化无限直线先与「场景级大矩形」kXlineBigRect(-1e5, -1e5, 2e5, 2e5)与scene_-setSceneRect同级slab 法求交得到一条有界长线段——boundingRect 取该交段恒定不随视图变化保证平移/缩放时图元永不被场景索引剔除。二次裁剪paintOne对 Xline 每帧传入visibleWorldRect()view-mapToScene(viewport()-rect())实际绘制路径只含可见段——缩放/平移时显示自动同步且不把 ±1e5 的巨长线段交给光栅器。取景排除rawBounds(Xline)返回空矩形 →contentBounds()跳过fitView 不被无限线撑爆命中/拾取走geo::distanceToElement的点到无限直线距离与“无限延伸”的视觉一致。4. 交互链路策略模式与直线族同构工具 id: xline / xline_h / xline_v / xline_angle / xline_2pt / xline_bisector / xline_parallel → ToolRegistry (XlineSub 类别 DrawBasic 的 xline) → ToolManager (Family::Xline 的 SubToolHandler) → ToolContext::handleXlineSubTool → GraphicsView::handleXlineSubTool line::modeFromString(“xline_*”) → line::Mode → line::compute(...) 结果线段 (a,b) → createXline(a, angleDeg(b-a)) → commitXlineAndContinueline::modeFromString扩展识别xline_*H→Horizontal、V→Vertical、A→Angle、2pt/默认→TwoPoint、B→Bisector、O→Parallel几何计算零复制。连续绘制commitXlineAndContinue提交后清空本轮采集但保持drawing_true与commitElementresetPending 退出刻意不同右键/Esc 走handleRightButton通用兜底“已结束当前绘制”→ 再右键回到选择。预览previewXline——角度模式未拾取时以光标为基点按参数角度预览平行模式已选参考线时按光标位置预览其余经line::compute后转为无限线。5. 命令行命令语义xline x,y 角度过点 角度“45”不是合法点 → 自动与两点式区分xline x1,y1 x2,y2两点定线默认方式xline_h / xline_v x,y水平 / 竖直过点xline_angle x,y [角度]指定角度缺省 30°与 line_angle 一致xline_bisector id1 id2 x,y两直线角平分方向xline_parallel id x,y平行于参考直线过点注册registerExact(“xline”) registerPrefix(“xline_”)共用XlineCommand。6. 兼容层模块处理捕捉snapHandles仅通过点无限线无端点distanceToElement点到无限直线距离交点/近距拾取命中整条延伸线交点intersectElementsXline 展开为 ±1e5 长线段后按常规路径求交构造线 × 构造线走math::lineLineIntersect—— 交点捕捉是构造线的核心用途剪切/统计flatten对 Xline 返回空default 分支→ 不参与 trim/面积/长度DXF R12无 XLINE 原生实体 → 降级为通过点沿方向±10 m的 LINEDWG R12同上降级 LINE读回即普通 Line往返测试验证STEP降级为 ±10 m 的 TRIMMED_CURVE(LINE)取景/命中geometryBounds为空 → fitView 排除elementHandles走 default 返回 pts拖通过点即平移构造线7. UI 入口工具条【基本图元】组createDropdownTool主按钮“构造线”两点方式下拉 6 项。菜单【绘图 构造线(X)】buildXlineMenu与工具条共享toolActions_指针。MainWindow::xlineSubModes()作为唯一数据源纳入allSubModeToolIds()DrawingMenuTest §10 一致性校验自动覆盖。图标icons.h新增“xline”glyph两端出界的贯通斜线 通过点区别于直线的带端点斜线。8. 验证新增tests/xline_test.cppCMake 正式 targetXlineTest7 组 67 断言全绿工厂/枚举/序列化往返、ToolRegistry 注册、命令行六种模式含缺参拒绝/参考不存在拒绝、点线距离、交点线×线/线×圆/构造线×构造线、捕捉仅通过点、flatten 排除、DXF/DWG 导出降级、撤销重做。既有回归SketchCAD全量编译链接通过SketchSelfTestexit 0DrawingMenuTest含 allSubModeToolIds ⊆ ToolRegistry 校验exit 0。构建方式ninja -j 1 target工程 OOM 约束测试从工程根运行。9. 已知边界有意行为fitView / 内容统计排除构造线 —— 若图纸只有构造线适配窗口无目标与“辅助线”定位一致。框选marquee按 boundingRect 判定±1e5 交段不可能完全落入框内 → 构造线不被框选整选单击点线距离容差仍可选中避免辅助线被常规框选误带。导出降级为 ±10 m 长线段属 R12 格式的固有限制未来升级 R13 格式可写原生 XLINE。
延伸阅读

更多相关文章

2026/9/27 2:00:52

ARM开发板安装ROS2 Humble指南:换源、配置与避坑全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 2:00:52

MWORKS Sysplorer并网逆变器仿真:PLL与dq电流控制详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 3:00:54

基于Java与MySQL的学生信息管理系统数据库课设完整实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 3:00:54

IT66220硬件HDCP引擎与预烧密钥,让HDMI合规更省心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 2:55:54

5个免费工具搞定网站开发价格预算,告别做完没人访问

5个免费工具搞定网站开发价格预算,告别做完没人访问 网站做好了,后台数据一片惨淡,没人访问,这是多少建站团队的噩梦?很多老板砸了几万块做官网,结果上线三个月,百度收录寥寥无几,流量几乎为零。别怪网站做得丑,十有八九是你在“网站开发价格预算”…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑