室内概念设计:矩形空间家具布置系统

矩形空间家具布置系统 – 开发技术报告

项目背景与简介

“矩形空间家具布置系统”是基于 Web 的轻量级 2D 室内排版编辑工具,提供符合物理比例的平面设计沙箱。用户可自定义房间尺寸,通过拖拽布置标准家具、门窗及可拉伸隔墙。

本系统摒弃繁重框架与第三方图形库,纯基于原生 DOM 与现代 Web API 构建,实现了高效渲染与流畅交互,为轻量级网页 CAD 应用提供了优秀的架构范式。

核心技术栈

  • 结构层:HTML5,采用表现与数据分离(Data-View Separation)架构。
  • 样式层:CSS3 + Tailwind CSS。利用 CSS 变量实现无冲突动画,结合 resize 属性实现原生拉伸。
  • 逻辑层:原生 JavaScript。零依赖,利用 DOM API、Pointer Events 及 ResizeObserver 实现核心交互。

核心架构与关键技术实现

动态比例尺渲染引擎

为解决大尺寸房间或跨设备导致的内容溢出问题,系统引入动态比例尺机制

  • 全局映射:维护 PIXELS_PER_METER 核心变量。
  • 自适应算法:监听视口变化,运用 Math.min(scaleX, scaleY) 动态推导使房间完全可见的最大比例尺。
  • 数据驱动:元素绑定真实物理数据(单位:米),屏幕像素仅为基于当前比例尺的渲染表现。
物理体积互换取代视觉旋转

弃用易导致包围盒计算偏差的 CSS transform: rotate()。当触发“双击旋转”时,直接在数据层面对调元素的物理宽高。此举确保 DOM 包围盒始终贴合物理轮廓,彻底解决了碰撞错位与拉伸方向混乱等图形学难题。

智能磁吸辅助线系统

内置高效磁吸对齐引擎:拖拽时实时计算元素的水平与垂直基准线。一旦与场景内其他元素的基准线距离小于设定阈值(SNAP_DIST = 12px),即强制修正坐标完成“吸附”,并显示绝对定位的红色十字辅助线提供视觉反馈。

隔墙动态拉伸与锚点固定

结合 CSS3 resizeResizeObserver API,实现隔墙原生拉伸并将像素变化反算为物理尺寸存入数据。通过设置 transform-origin: left center; 锚定原点,避免宽度变化导致的“两端晃动”,实现“钉死一端、延伸另一端”的稳定交互。

交互优化与安全防呆设计

为保障系统稳定性与数据安全,实施了以下防呆设计(Error Prevention):

  1. 输入边界限制:对用户输入的各项尺寸进行严格拦截与格式化,设定安全范围(如 1m 至 18m),防止极端数值导致渲染引擎崩溃(前端 DoS 级防御)。
  2. 状态按钮防误触:“一键清空”功能摒弃易被沙箱拦截的 confirm() 弹窗,采用纯前端状态机与 setTimeout 定时器。要求用户在 3 秒内“二次确认”,实现安全防误触。
  3. 右键快捷删除:拦截原生上下文菜单(contextmenu)并转化为删除操作,辅以 scale(0) 过渡动画,兼顾操作效率与优雅。

总结与展望

本系统验证了以原生 Web 技术构建复杂图形编辑器的可行性,其轻量、数据驱动的架构具备极强的可扩展性。

未来拓展方向:

  1. 数据持久化:将 data-m-* 数据序列化为 JSON,存储至本地或后端数据库,实现方案存取。
  2. 2D 转 3D 预览:将 JSON 数据接入 Three.js 引擎,一键生成三维空间漫游。
  3. BOM 表格导出:提取场景数据,自动生成“家具物料清单”并支持导出为 Excel/PDF。

订阅评论
提醒

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论