- 博客(1486)
- 问答 (1)
- 收藏
- 关注

原创 CMake 统一的构建描述: 拒绝依赖特定IDE从我做起
CMake 充当了一个通用的“项目描述语言”,使得各种 IDE 和编译器能够理解并构建你的项目,从而极大地简化了 C++ 的跨平台开发和维护工作。Visual Studio 使用 JSON 文件来管理不同的 CMake 配置(例如 Debug/Release,不同的目标平台,不同的生成器等)。来为你的 C++ 代码提供准确的 IntelliSense(代码补全、错误高亮、参数信息等),并支持代码导航(如“转到定义”,“查找所有引用”)。的跨平台问题,但它本身并不能让你的 C++ 代码自动变得平台无关。
2025-05-27 08:33:14
704
8

原创 没有绝对完美的架构:架构因迭代而涅槃
一个在当前看来近乎完美的架构,随着时间的推移,外部技术的演进(新的语言、框架、中间件的出现)、业务需求的变更(市场扩张、用户行为变化)、以及系统内部复杂度的自然累积(代码的熵增),都可能使其逐渐变得臃肿、低效,甚至成为发展的桎梏。市场的反馈、运维的数据、开发团队的体验,都成为驱动架构演进的“选择压力”,促使其向更优的方向“突变”和“选择”。“涅槃”一词,本意指超越生死轮回的境界,在软件架构的语境下,它隐喻着架构通过不断的自我扬弃和重构,从旧的束缚中解脱,达到一种更高层次的适应性和生命力。
2025-05-08 19:30:41
329
4

原创 Qt故事会: 初识惊叹跨平台魔力 , 深入惨遭跨平台挑战
这就像是给了你一套能在各种道路上行驶的汽车零件(Qt),但如果组装汽车的人(原始开发者)按照越野车的标准加了很多只适用于崎岖山路的特殊装备(Windows 特有代码),那么当你想把这辆车开到平坦的公路上(移植到 Linux)时,就需要拆掉或改造那些特殊装备,这当然会很费劲。Qt 框架本身尽力提供了跨平台的基础,但如果最初的开发者没有严格遵守跨平台编码规范,大量使用了平台绑定的特性,那么后续的移植工作自然会非常痛苦,远非简单的“重新编译”就能解决。Qt 确实是一个强大的跨平台框架,它极大地简化了多平台开发。
2025-05-05 17:24:00
507
15

原创 QML对象更新机制与缓存问题的讨论
QML 很适合“首屏直观开发”,但一旦进入“动态组件管理阶段”,你必须自己设计组件的生命周期与状态控制机制,否则缓存机制会让你掉进“状态不同步”的坑里。用缓存要有意识;给组件设计 reset;不信赖生命周期钩子;优先重置,不轻言销毁;靠测试发现复用问题。
2025-05-01 20:42:52
855
11

原创 Qt界面流畅性的系统讨论: 多维度渲染性能优化架构
实际开发中应结合性能分析工具精准定位瓶颈,优先解决影响最大的问题(如算法复杂度从 O(n²) 优化到 O(n)),再逐步实施其他优化策略。四个维度提供系统化解决方案,涵盖从代码优化到硬件加速的完整技术链。,导致界面无法及时刷新(通常需保持 60 FPS)。合并多个绘制调用为单个调用(减少OpenGL状态切换)。强制固定刷新频率(如30 FPS)。仅保留最新数据,避免内存无限增长。降低数据密度,减少传输和计算量。合并高频刷新请求,避免冗余渲染。仅重绘界面中发生变化的区域。使用GPU硬件加速图形绘制。
2025-02-20 09:27:43
1180
37

原创 山外青山楼外楼 : 详解 Qt信号与槽的100种用法 (眼界篇)
在 Qt 信号与槽的应用中,基于其核心机制和可扩展性,理论上有无限种组合和变种。具体来说,常见的信号与槽用法和场景应用大约可以总结出以下 100 多种主要方式,分为几个大类:在自定义类中定义信号和槽,可以让你的类具备灵活的通信能力。2. Lambda 表达式作为槽在现代 C++(C++11及以上)中,可以使用 Lambda 表达式代替传统槽函数。这对于一次性处理或简化代码非常有用。3. 函数指针的使用Qt 5 引入了基于函数指针的信号与槽连接方式,比字符串形式更加安全和高效。4. 信号与槽的
2024-11-30 19:47:31
1664
38

原创 基于epoll ET模式 的 非阻塞IO服务器模型
你的这段代码整体设计非常扎实,目标明确——使用 `epoll` 的 **边缘触发 (ET) 模式** 实现一个高并发 TCP 服务器,模拟**接收小缓冲区**和**大数据压力**下的传输情景,细节处理得也比较完善,尤其是在非阻塞 I/O、缓冲处理和连接管理上都非常到位。即使你设了 `recv_buf[1]`,也可以把 `recv()` 调整为尽可能多地接收数据,比如设为 `recv_buf[512]`,然后 `memcpy` 进去,这样你仍然保有模拟小缓冲区的结构,但性能好很多。
2024-04-03 21:07:53
976
1
原创 TopAbs_ShapeEnum 详细解释
由多个实体(SOLID)通过共享面(FACE)连接而成的集合。扩展了线框(WIRE)和壳体(SHELL)的概念到三维实体领域。最复杂的拓扑元素,可以包含任意类型形状的集合。它是一个通用容器,可以组合不相关的形状,没有特定的拓扑连接要求。由共享边(EDGE)连接的多个面(FACE)组成的集合。可以是开放的(如半球)或闭合的(如完整球体表面)。由顶点(VERTEX)连接的多个边(EDGE)组成的序列。可以是开放的(如折线)或闭合的(如多边形)。是最基本的零维拓扑元素,用于定义边的端点、线框的连接处等。
2025-06-12 16:39:23
63
原创 OpenCASCADE的仿射变换(gp_Trsf)详解
gp_Trsf类是OpenCASCADE中处理三维仿射变换的核心工具,能够表示和组合各种基本变换。理解这个类的工作原理对于实现复杂的几何操作至关重要。通过合理使用这些变换,可以方便地实现对3D对象的移动、旋转、缩放等操作,是CAD系统中必不可少的功能。
2025-06-12 14:30:29
188
原创 使用 cpp 枚举类 和 传统枚举的区别 ?
在 C++ 中,enum class是 C++11 引入的一种更安全、作用域更清晰的枚举类型。它和传统枚举(enum。
2025-06-12 12:35:17
288
原创 Visual Studio 2022 打开 Qt UI 界面闪退的终极解决方案
Visual Studio 2022 打开 Qt UI 界面闪退的问题,绝大多数情况下都可以通过在 Qt VS Tools 选项中将“Run in detached window”设置为True,并仔细检查 Qt Designer 的路径配置来解决。这些设置确保了 Visual Studio 以最稳定、最兼容的方式调用外部的 Qt Designer 程序,从而避免了因集成模式导致的各种冲突和闪退。如果问题依然存在,则需进一步排查 Qt 安装本身的完整性或系统环境因素。
2025-06-12 09:38:36
536
原创 关于OpenGL和其编程方式
GLSL (OpenGL Shading Language) 是OpenGL的着色器语言,用于编写在GPU上运行的着色器程序,包括顶点着色器(Vertex Shader)、片段着色器(Fragment Shader)等。实际开发中,你需要同时使用这两种语言:C/C++控制应用程序流程和资源,GLSL控制GPU渲染管线中的可编程部分。OpenGL本身是一个图形API规范,它定义了一系列函数调用接口,这些接口可以通过多种编程语言来调用,最常见的是C和C++。
2025-06-11 22:06:04
188
1
原创 探索 最小包围盒 算法
在数学上并不完全等价。PCA是一种强大的多元统计方法,其本质是在高维数据中寻找到一个全新的正交坐标系,使得数据在该坐标系下的**方差(Variance)**得到最大化的表达。AABB的方向是固定的,而OBB的方向是待求解的变量,这使得问题从一个简单的极值查找升格为一个复杂的。的“高深”之处,不在于代码的繁复,而在于它巧妙地运用了多个数学分支的理论,将一个看似无从下手的几何优化问题,转化为一个稳健、可解的代数问题。这个定理的意义在于,它将一个可能极其复杂的、带有孔洞和凹陷的几何模型,简化为了一个相对简单的。
2025-06-11 16:08:23
508
1
原创 occt 近似最小包围盒 与 包围球,包围长方体,包围圆柱体
包围体核心API实现思路备注长方体BRepBndLib最直接,根据Bnd_Box的角点创建。结果精确,是其他包围体的计算基础。球体BRepBndLib基于Bnd_Box的中心和对角线距离计算。结果是近似的,但实现简单且高效。圆柱体BRepBndLib基于Bnd_Box尺寸计算轴对齐的圆柱。结果是轴对齐的近似体,非最小包围圆柱。
2025-06-11 15:51:06
231
原创 occt 通过 点 和 三维矢量 画出射线
首先,定义射线的起点和方向。// 1. 定义射线的起点// 射线的起点坐标 (x, y, z)// 2. 定义射线的方向(这是一个单位矢量)// 沿着X轴正方向gp_Pnt: 表示三维空间中的一个点。gp_Dir: 表示一个三维方向(单位矢量,其模长恒为1)。如果你有一个普通矢量 (gp_Vec),可以通过将其转换为方向。
2025-06-11 14:33:58
169
原创 详解 occt BRepPrimAPI_MakeRevol
远不止是一个简单的几何旋转工具。输入验证: 在计算前检查可能导致失败的几何条件。核心计算: 调用底层库执行高效的扫描操作。拓扑修复: 自动处理和修复因旋转产生的简并和共享问题,确保输出结果的有效性。理解了这些内部机制,就能更深刻地体会到为什么它是一个“高级API”,并能更加自信地在项目中使用它。
2025-06-11 14:15:39
330
原创 OCCT TopoDS 包 大全解
这些类代表了构成几何模型的具体拓扑层级。它们都是的“具体化身”。顶点。拓扑结构中最基本的元素,代表空间中的一个点。边。连接两个或多个顶点的路径,通常由一条几何曲线(如直线、圆弧)定义。面。由一个或多个闭合的线框(Wire)界定的二维区域,通常由一个几何曲面(如平面、球面)定义。线框。由一条或多条首尾相连的边(Edge)组成的序列。壳。由一个或多个相互连接的面(Face)组成,构成一个开放或封闭的边界。体。由一个或多个壳(Shell)界定的三维空间区域。一个封闭的壳定义一个体。复合体。
2025-06-10 09:12:39
904
原创 使用occt api 实现 回旋体 毛坯几何体 拉伸体 边倒圆 的难易程度
这取决于具体要创建什么类型的毛坯。如果是简单的几何体(如立方体、圆柱体等),OCCT提供了现成的类如。你需要选择要倒圆的边和倒圆半径。虽然概念简单,但有时可能需要处理特殊情况,如多个边的交叉点。基本上,你只需要一个2D轮廓(通常是一个面)和一个方向向量,就可以创建拉伸体。比拉伸稍复杂,因为需要指定旋转轴和角度,可能会遇到拓扑问题,特别是在完整360度旋转时。拉伸体通常是最简单的几何创建功能之一。从易到难排序:拉伸体 > 毛坯几何体 > 边倒圆 > 回旋体。回旋体通过旋转2D轮廓生成3D体,使用。
2025-06-10 08:31:41
355
原创 详解 OpenCASCADE Technology (OCCT) 中的 `gp_Ax2` 类
gp_Ax2是 OCCT 中用于描述位置和姿态的核心工具。它不仅是构建和定位几何体的基础,也是理解和应用三维几何变换的关键。深刻理解gp_Ax2的“主方向优先”和“保持右手法则”的设计原则,对于高效、正确地使用 OCCT 进行三维建模至关重要。
2025-06-09 18:13:12
1032
1
原创 详解 OpenCASCADE Technology (OCCT) 中的 gp_Ax1 类
gp_Ax1是一个看似简单但功能强大的类。它封装了三维轴的核心属性和操作,为 OCCT 复杂的几何算法和数据结构提供了坚实的基础。理解gp_Ax1是掌握 OCCT 几何建模的关键一步。
2025-06-09 18:08:57
800
原创 使用 occt 构建 长方体 回旋体 毛坯几何体 拉伸体 边倒圆 有什么 异曲同工 之处
尽管这些操作的用户接口可能很简单,但它们背后的实现原理都高度依赖于 OCCT 强大的B-Rep 数据结构和几何-拓扑算法库。MakeBox:直接构建预定义的 B-Rep 结构。:通过扫掠(旋转或平移)二维轮廓来生成三维几何和拓扑,并处理各种曲面类型。MakeFillet:在现有 B-Rep 上执行复杂的局部修改,涉及几何的重新计算、旧元素的修剪、新元素的创建和无缝集成。这些操作的“异曲同工之处”在于它们都致力于生成有效、一致且可用于后续处理的 TopoDS_Shape 对象。
2025-06-09 08:58:55
871
2
原创 OCCT gp包完整类功能列表
确实,我之前的回答没有完整覆盖列表中的所有类。让我进行一个更全面的分析,确保包含所有列出的类:完整的类列表分析:现在我已经覆盖了所有列出的类。
2025-06-08 20:30:27
533
3
原创 零毫秒的“魔法”:深入解析 QTimer::singleShot(0, ...) 的时序奥秘
在软件开发中,我们有时会遇到一些看似“灵异”的现象:一段代码明明逻辑正确,但执行结果却不符合预期,尤其是在处理用户界面(UI)和多组件通信时。它解决的不是“代码会不会执行”的问题,而是“代码在。下次当你遇到因时序引发的奇怪问题时,不妨想一想,是不是你的代码跑得“太快了”,需要请事件循环这位“秘书”帮你安排一下执行顺序。它将您的代码的执行时机从“立即”变成了“在当前所有待处理事件完成之后”,从而完美地解决了时序问题。零毫秒的延迟,其真正的意义不是“时间上的延迟”,而是“,然后才能去处理队列中的下一个事件。
2025-06-07 15:42:09
824
2
原创 OCCT TopoDS_Shape 类详解
采用Handle-Body设计模式是轻量级的"句柄"是存储实际数据的"实体"支持形状的三个关键属性基础拓扑数据(TShape)位置(Location)方向(Orientation)提供丰富的操作功能位置变换方向变换形状属性访问与修改形状比较形状复制支持现代C++特性移动语义模板编程STL容器集成(通过哈希特化)这种设计使能够高效地表示和操作各种拓扑实体,如顶点、边、面和实体,同时优化内存使用(通过共享底层数据)和提高性能(通过轻量级的拷贝和传递)。
2025-06-07 10:15:03
619
1
原创 std::hash<TopoDS_Wire> 特化语法详解
这段代码定义了std::hash模板对类型的完全特化,使对象可以作为键值使用在需要哈希功能的STL容器中(如这个特化通过委托给的哈希实现,利用了继承关系简化了代码,同时确保了哈希值的一致性。
2025-06-07 09:58:49
525
原创 对 OCCT 轮廓线 的一般描述
可以理解为由多条边(Edge)构成的“线段串”或“线环”,它在 OCCT 的拓扑层次结构中,是介于和之间的一个重要抽象,用于定义二维或三维形状的边界和路径。
2025-06-07 09:29:48
569
原创 TopoDS_TShape TopoDS_Shape TopoDS_HShape 有什么区别?
包含一个Handle,这个Handle指向实际的拓扑数据。:你在代码中最常使用的拓扑形状对象。它轻量级,是值类型,通过浅拷贝高效传递。:存储实际拓扑数据的底层对象。你通常通过的TShape()方法间接访问它。它是引用计数的瞬态对象。已废弃,不应在新代码中使用。理解这三者的区别对于正确有效地使用 OCCT 拓扑模型至关重要,尤其是在进行性能优化和避免内存泄漏时。操作,让 OCCT 内部处理的生命周期。
2025-06-06 19:53:24
669
原创 OCCT创建直纹面的主要API方法
总体来说,OCCT中直接专门用于创建直纹面的API大约有4-5种,但如果考虑间接方法和特殊情况,总共有约10-13种不同的方法可以创建直纹面或直纹面的变体。
2025-06-06 13:52:23
204
1
原创 OCCT直纹面(Ruled Surface):一种通过两条曲线之间线性插值生成的曲面
直纹面(Ruled Surface)是一种通过两条曲线之间线性插值生成的曲面。可以想象为一条直线在两条曲线之间移动所形成的轨迹。对于直纹面,最直接的是和类。
2025-06-06 13:42:59
456
原创 OCCT平面创建详解
法向量法向量垂直于平面表面法向量定义了平面的"朝向",而非平面本身的位置法向量的大小不重要,只有方向有意义(通常被规范化为单位向量)示例法向量(1,0,0):创建垂直于X轴的平面,即YZ平面法向量(0,1,0):创建垂直于Y轴的平面,即XZ平面法向量(0,0,1):创建垂直于Z轴的平面,即XY平面。
2025-06-05 16:05:28
252
2
原创 OCCT在三维空间中创建和操作平面的类
通过组合这些类,可以在OCCT中高效创建、操作和可视化三维空间中的平面,适用于几何建模、碰撞检测、截面分析等场景。将gp_Pln包装为可参数化的几何曲面(Geom_Surface),用于高级几何操作。将Geom_Plane或gp_Pln转换为有限大小的拓扑面(TopoDS_Face)。gp_Pln(gp_Pnt P, gp_Dir N) 通过点和法向量定义平面。gp_Pln(gp_Ax3 axes) 通过坐标系定义平面(默认XY平面)AIS_Plane 交互式显示平面 可视化控制(大小、颜色)
2025-06-05 15:09:32
369
原创 occt 模型阵列
在Open CASCADE Technology (OCCT)中,模型阵列(Pattern/Array)用于复制几何形状并按一定规律(如线性、圆形、矩阵)排列。// 旋转轴(Z轴)gp_Ax1 axis(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1));BRepBuilderAPI_Transform 基础变换(平移、旋转) 线性/圆形阵列。
2025-06-05 11:18:07
351
原创 OCCT回旋体相关的类
功能: 将轮廓形状(TopoDS_Shape,如Wire或Face)绕旋转轴旋转生成实体(TopoDS_Solid)。功能: 将几何曲线(Geom_Curve)绕轴旋转生成几何曲面(Geom_Surface),适用于纯数学定义。功能: 通过多个截面轮廓(TopoDS_Wire)生成旋转体(类似CAD中的“Loft”操作)。使用BRepAlgoAPI_Fuse(并集)、BRepAlgoAPI_Cut(差集)等。(2) Geom_SurfaceOfRevolution(旋转生成几何曲面)
2025-06-05 09:45:18
592
原创 OpenCASCADE Technology (OCCT) 学习曲线规划
OpenCASCADE Technology (OCCT) 是一个非常全面的CAD/CAM/CAE几何建模库。
2025-06-04 13:19:19
248
1
VScode间接性黑屏?
2021-02-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人