# 3D 瓷砖墙体建模应用程序 **Repository Path**: ericchenran/3D-builder ## Basic Information - **Project Name**: 3D 瓷砖墙体建模应用程序 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-15 - **Last Updated**: 2024-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README ### 一、脚本概述 本脚本使用 `Python` 语言编写,结合了 `vpython`、`tkinter` 等库,旨在创建一个 `3D` 瓷砖墙体设计器的图形界面应用程序。用户可以通过该应用程序输入墙体和瓷砖的相关尺寸参数、选择瓷砖颜色,实时查看 `3D` 场景中瓷砖墙体的预览效果,同时还能计算瓷砖的数量以及覆盖面积等信息,并可选择是否显示尺寸标注,方便对瓷砖墙体设计进行直观的可视化操作与分析。 ### 二、代码结构与功能模块说明 #### (一)类的初始化(`__init__` 方法) 1. **创建主窗口**:使用 `tk.Tk()` 创建主窗口,并设置窗口标题为 “`3D` 瓷砖墙体设计器”。 2. **默认参数设定**:定义了墙体和瓷砖的各项尺寸参数(单位为厘米)以及瓷砖的默认颜色(灰色),同时设置了一个标注开关变量,用于控制是否显示尺寸标注,另外还初始化了与鼠标拖动操作相关的变量。 3. **界面与场景创建**:调用 `create_ui` 方法创建用户界面,调用 `create_3d_scene` 方法创建 `3D` 场景。 #### (二)用户界面创建(`create_ui` 方法) 1. **控制面板框架**:通过 `ttk.LabelFrame` 创建一个名为 “控制面板” 的框架,用于放置后续的各种控件,并将其放置在主窗口的合适位置。 2. **墙体尺寸输入部分**:使用 `ttk.Label` 和 `ttk.Entry` 组合,创建用于输入墙体宽度、高度、深度的文本框控件,并添加相应的提示标签,方便用户输入墙体尺寸参数(单位为厘米)。 3. **瓷砖尺寸输入部分**:与墙体尺寸输入类似,创建用于输入瓷砖宽度、高度、厚度的文本框控件,同样添加提示标签,供用户输入瓷砖尺寸参数(单位为厘米)。 4. **功能按钮部分**: - **颜色选择按钮**:点击 “选择瓷砖颜色” 按钮,触发 `choose_color` 方法,可弹出颜色选择对话框让用户选择瓷砖颜色。 - **更新 `3D` 视图按钮**:点击 “更新 `3D` 视图” 按钮,调用 `update_3d_view` 方法,依据当前输入的参数更新 `3D` 场景中的墙体和瓷砖显示效果。 - **计算瓷砖数量按钮**:点击 “计算瓷砖数量” 按钮,触发 `calculate_tiles` 方法,计算并在界面上显示瓷砖的横向、纵向数量以及总数量、覆盖面积等信息。 - **标注开关按钮**:通过 `ttk.Checkbutton` 创建一个复选框,点击可切换是否显示尺寸标注,关联 `toggle_dimensions` 方法来实现功能。 5. **结果显示区域**:使用 `tk.Text` 创建一个文本框,用于显示计算瓷砖数量等操作后的结果信息,放置在控制面板的合适位置。 #### (三)`3D` 场景创建(`create_3d_scene` 方法) 1. **场景基本设置**:设置 `3D` 场景的宽度、高度、背景颜色以及标题等属性,同时为场景绑定鼠标按下(`mousedown`)、鼠标抬起(`mouseup`)、鼠标移动(`mousemove`)等事件,分别关联对应的事件处理方法(`on_mouse_down`、`on_mouse_up`、`on_mouse_move`),以便实现通过鼠标操作旋转和缩放场景视角的功能。 2. **初始视图更新**:调用 `update_3d_view` 方法,依据初始参数生成并显示 `3D` 场景中的墙体和瓷砖等对象。 #### (四)鼠标事件处理方法(`on_mouse_down`、`on_mouse_up`、`on_mouse_move` 方法) 1. **鼠标按下(`on_mouse_down`)**:当鼠标在 `3D` 场景中按下时,记录鼠标当前位置,并设置拖动状态为 `True`,表示开始拖动操作。 2. **鼠标抬起(`on_mouse_up`)**:当鼠标抬起时,结束拖动操作,将拖动状态设置为 `False`,并清空上次记录的鼠标位置。 3. **鼠标移动(`on_mouse_move`)**:在鼠标拖动(即 `dragging` 为 `True` 且有上次鼠标位置记录)的过程中,根据鼠标移动的水平和垂直距离,计算相应的旋转角度,对场景相机的位置进行旋转操作,从而实现通过鼠标拖动旋转 `3D` 场景视角的功能,同时让相机始终看向原点,保证视角效果,并更新上次鼠标位置记录。 #### (五)颜色选择功能(`choose_color` 方法) 通过 `colorchooser.askcolor` 弹出颜色选择对话框,获取用户选择的颜色(以 `RGB` 元组形式返回),将其转换为 `vpython` 中的向量表示形式并更新瓷砖颜色,然后调用 `update_3d_view` 方法更新 `3D` 场景,使瓷砖以新选择的颜色显示。 #### (六)标注开关功能(`toggle_dimensions` 方法) 通过切换 `show_dimensions` 变量的值来控制是否显示尺寸标注,然后调用 `update_3d_view` 方法,依据新的标注显示状态更新 `3D` 场景。 #### (七)`3D` 视图更新功能(`update_3d_view` 方法) 1. **对象清除**:首先将当前 `3D` 场景中的所有对象设置为不可见,以便重新根据最新参数绘制场景。 2. **参数获取与单位转换**:从界面上的文本框获取用户输入的墙体和瓷砖的尺寸参数,并将单位从厘米转换为米,方便后续在 `3D` 场景中的坐标计算与对象创建。 3. **墙体基础创建**:使用 `vpython` 的 `box` 函数创建一个代表墙体基础的长方体对象,设置其位置、大小、颜色和透明度等属性。 4. **瓷砖创建与标注添加**: - 根据墙体和瓷砖尺寸计算瓷砖在水平和垂直方向上的数量,然后通过嵌套循环在合适的位置创建一个个代表瓷砖的长方体对象,并设置其位置、大小和颜色等属性。 - 如果标注开关处于打开状态(`show_dimensions` 为 `True`),针对每个瓷砖,在其下方添加尺寸标注文本(格式为长×宽×高,单位厘米),在其上方添加序号标注文本,同时对坐标轴也进行标注优化,创建坐标轴原点、箭头以及对应的标签文本,并通过动画效果让坐标轴标签文本渐显(从透明度 `0` 逐渐变为 `1`)。 #### (八)瓷砖数量计算功能(`calculate_tiles` 方法) 1. **参数获取**:从界面文本框获取墙体宽度、高度以及瓷砖宽度、高度等参数。 2. **数量计算**:计算瓷砖在横向和纵向的数量,进而得到瓷砖的总数量,同时计算瓷砖所覆盖的面积(单位转换为平方米)。 3. **结果显示**:将计算得到的墙体尺寸、瓷砖尺寸、瓷砖横向、纵向、总数量以及覆盖面积等信息整理成字符串格式,清空结果显示文本框中原有的内容后,将新的结果信息插入文本框进行显示。若获取参数时出现数值格式错误,则弹出错误提示框告知用户输入有效的数值。 #### (九)主循环启动(`run` 方法) 通过调用 `self.root.mainloop()` 启动 `Tkinter` 主事件循环,使应用程序能够持续响应用户的各种操作,保持界面的交互性与显示状态。 ### 三、使用方法 在 `Python` 环境中运行该脚本(确保已安装 `vpython`、`tkinter` 等相关依赖库),将会弹出带有图形界面的 `3D` 瓷砖墙体设计器应用程序窗口。用户可以按照界面上的提示,在相应文本框中输入墙体和瓷砖的尺寸参数,点击 “选择瓷砖颜色” 按钮挑选瓷砖颜色,通过 “更新 `3D` 视图” 按钮查看设计效果,利用 “计算瓷砖数量” 按钮获取瓷砖数量和覆盖面积信息,还可通过标注开关按钮决定是否显示尺寸标注等,通过鼠标操作可旋转和缩放 `3D` 场景视角,以便从不同角度查看瓷砖墙体设计情况。 ### 四、作者信息 **作者**:陈祖豪 **邮箱**:3469807212@qq.com 希望这份脚本说明能帮助你更好地理解和使用该代码创建的 `3D` 瓷砖墙体设计器应用程序。如有其他疑问,请随时联系作者。