# HandRubbingCAD **Repository Path**: master-turtle/HandRubbingCAD ## Basic Information - **Project Name**: HandRubbingCAD - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-02 - **Last Updated**: 2025-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 可视化工具项目 ## 1. 项目概述 该项目是一个用于三维梯形建模和可视化的工具,支持用户通过(命令行输入/指定读取配置文件)指令来创建自定义的梯形。项目使用 C++ , VTK库 , OpenCascade库 实现,提供了丰富的功能,包括二维图形的构建、三维拉伸、模型显示和用户交互等。 ## 2. 功能特性 1. **二维平面图形构建和三维拉伸**: - 支持创建等腰梯形,用户可以指定名称、底边长、高和夹角。 - 支持将二维图形沿 Z 轴拉伸,生成三维模型。**** - 示例命令:`trapezoid -name=2d_geometry -width=4 -height=2 -theta=30 extrude -name=3d_geometry -source=2d_geometry -distance=0.5` 2. **配置文件支持**: - 用户可以将所有输入整合到一个配置文件(json文件)中,程序会读取并执行相应命令。 - 使用: `~~~` 3. **模型显示**: - 使用 VTK 和 OpenCascade 库可视化 B-Rep 模型,支持高层和低层 API 的模型离散化。 4. **用户交互**: - 实现左键单击选中物体并高亮显示,点击空白位置高亮取消的功能 ## 3. 环境要求 - 该程序需要连接我自己远端的 all_in_one 库,已经在最外层cmake中配置了,电脑联网的话会自动拉取到本地 - all_in_one 库是使用vcpkg组织包的如需要的如下: jsoncpp ZLIB fmt - 依赖库: - VTK: vcpkg安装: `vcpkg install vtk` - OpenCascade 和 tbb 库用的是贵公司提供的我妨碍lib目录下的 - vcpkg install qt5-base vcpkg install qt5-tools vcpkg install qt5-widgets vcpkg install qt5-quick ## 4. 程序git地址 ``` https://gitee.com/master-turtle/HandRubbingCAD.git ``` ## 5. 项目结构 ``` D:. │ .gitignore │ CMakeLists.txt │ CMakeSettings.json │ format_all.bat │ README.md │ ├─cmake │ all_in_one.cmake # 从远端拉取 all_in_one工具库 │ env_check.cmake # 配置环境 │ ├─config │ config.json # 配置文件样例 │ ├─core │ │ CMakeLists.txt │ │ ModelBuilder.cpp │ │ ModelBuilder.h # 模型构建者 │ │ project_marco.h # 项目中需要 all_in_one 模块中的头文件 │ │ Visualizer.cpp │ │ Visualizer.h # 可视化模块 │ │ │ ├─command │ │ Command.cpp │ │ Command.h # 参数指令模块 │ │ │ └─config │ ModelConfig.cpp │ ModelConfig.h # 读取配置文件模块 │ ├─data │ learn_about.md │ 参数化CAD建模程序的C++实现v3.pdf │ ├─lib # 存放第三方库的目录:暂时需要:OCCT-7.5.0,tbb_2017.0.100 ├─src │ CMakeLists.txt │ main.cpp # 主函数 │ └─test CMakeLists.txt test.cpp test_command.cpp test_config.cpp ``` -------- trapezoid -name=2d_geometry -width=4 -height=2 -theta=30 extrude -name=3d_geometry -source=2d_geometry -distance=0.5 show 设计原则:单一职责、开闭原则、里氏替换、接口隔离和依赖倒转原则 这个文件描述了一个参数化CAD建模程序的C++实现项目,旨在考核开发人员在CAD建模、场景交互、软件工程等方面的能力。项目要求使用C++语言,结合OpenCascade(OCCT)和VTK库,实现一个可以根据参数建模并具备场景交互功能的程序。 ### 题目概述 项目的主要任务包括: 1. 参数化构建平面图形:根据输入的参数(如梯形的底边宽度、高度和角度),在XY平面上构建一个等腰梯形。 2. 拉伸二维平面图形:将构建的二维梯形沿Z轴拉伸,生成三维实体模型。 3. 可视化B-Rep模型:使用VTK库将生成的B-Rep模型进行可视化显示。 4. 实现三维场景交互功能:支持鼠标拾取、高亮显示选中物体等交互功能。 5. 使用输入配置文件控制输出:通过配置文件输入参数,程序根据配置文件生成模型并显示。 6. 支持用户命令:提供一个命令处理窗口,用户可以通过命令行输入建模命令,程序根据命令更新视图。 7. 单元测试和自动化测试:为项目中的算法和功能添加单元测试,并搭建自动化测试框架。 8. 使用CMake构建项目:使用CMake管理项目的构建过程,确保跨平台兼容性。 9. 设计合理的程序架构:遵循SOLID设计原则,确保模块之间的依赖关系合理。 10. 生成代码文档:使用Doxygen自动生成代码文档,并绘制程序处理流程图和UML类图。 ### 实现思路 1. 边界表示法(B-Rep):理解B-Rep的基本概念,掌握如何在OpenCascade中使用B-Rep表示几何模型。B-Rep模型由面、边、顶点等拓扑结构组成,几何信息描述了这些拓扑结构的具体形状和位置。 2. OpenCascade的使用:熟悉OpenCascade的API,特别是TopoDS_Shape、BRepBuilderAPI_Command等类,用于创建和操作几何模型。OpenCascade提供了丰富的建模功能,如创建点、边、面、实体,以及布尔操作、扫描操作等。 3. VTK可视化:使用VTK库进行模型的可视化。VTK提供了强大的可视化管线,可以将OpenCascade生成的B-Rep模型进行三角剖分并显示。需要了解VTK中的PolyData、PolyDataMapper和Actor等概念。 4. 三维场景交互:实现鼠标拾取功能,通过鼠标点击选中物体并高亮显示。需要处理鼠标的二维坐标到三维世界坐标的转换,并通过射线与物体的相交检测来判断拾取结果。 5. 命令模式:使用命令模式来处理用户输入的命令。命令模式将请求封装为对象,使得请求的发送者和接收者解耦。通过命令模式,可以实现对建模命令的处理和视图的更新。 6. 配置文件解析:设计一个配置文件格式,用于输入建模参数。程序需要读取并解析配置文件,根据配置文件中的参数生成模型。需要处理配置文件读取过程中可能出现的异常情况。 7. 单元测试和自动化测试:使用Google Test框架为项目中的关键函数和算法添加单元测试。同时,搭建自动化测试框架,确保项目在迭代过程中功能的稳定性。 8. CMake构建:使用CMake管理项目的构建过程,处理编译、链接和依赖关系。CMake具有良好的跨平台支持,可以生成适用于不同操作系统和编译器的构建文件。 9. 程序架构设计:遵循SOLID设计原则,确保模块之间的依赖关系合理。模块应具有单一职责,高层模块依赖于抽象而不是具体实现,接口应尽量简洁。 10. 文档生成:使用Doxygen生成代码文档,并在代码中添加规范的注释。同时,绘制程序的处理流程图和UML类图,帮助理解程序的执行流程和类之间的关系。 ### 总结 这个项目要求开发者具备扎实的C++编程能力,熟悉OpenCascade和VTK库的使用,掌握边界表示法、三维图形学、命令模式等知识。通过合理的架构设计和模块划分,结合单元测试和自动化测试,确保项目的稳定性和可维护性。最终,项目应能够根据用户输入的参数生成几何模型,并支持三维场景的交互操作。 1. 检查 QT_QPA_PLATFORM_PLUGIN_PATH 环境变量 Qt 需要知道在哪里查找平台插件。你可以通过设置 QT_QPA_PLATFORM_PLUGIN_PATH 环境变量来指定平台插件的位置。 确定你的 Qt 安装目录,通常是类似 C:\Qt\\mingwXX_XX\plugins\platforms 或者 C:\Qt\\msvcXX_XX\plugins\platforms。 设置环境变量: 在 Windows 中,右击“此电脑” -> 选择“属性” -> “高级系统设置” -> “环境变量”。 在“系统变量”中,点击“新建”,设置变量名为 QT_QPA_PLATFORM_PLUGIN_PATH,值为你的 platforms 目录路径。 示例路径: