自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 C++ decltype总结

介绍C++ decltype的概念、内容和使用方法等。

2025-06-10 09:11:14 356

原创 C++ <type_traits> 总结

介绍C++的<type_traits>的概念、内容、实现方法和实例等,可参照进行系统学习和实现。

2025-06-10 09:09:39 701

原创 C++ constexpr 和 if constexpr

介绍C++ constexpr 和 if constexpr 使用方法。

2025-06-10 09:09:18 376

原创 C++移动构造和移动赋值

介绍C++移动构造和移动赋值概念,可参照学习。

2025-06-10 09:06:19 331

原创 C++ 面向对象编程(OOP)

介绍C++面向对象OOP概念和内容,可参照进行系统性学习和实践。

2025-06-10 09:04:36 279

原创 C++元编程(Template Metaprogramming)总结

介绍C++元编程,可参照该内容进行系统性学习和实践。

2025-06-10 09:02:20 272

原创 C++ 线程安全备忘(Thread Safety Cheat Sheet)

介绍C++线程安全概念和实现方法等,可参照该内容进行学习和实践。

2025-06-10 09:00:46 425

原创 C++ 智能指针

介绍C++智能指针,可参照该内容进行系统性学习。

2025-06-10 08:58:25 914

原创 现代 C++ 内存管理方法

介绍现代C++内存管理方法,可参照该内容进行系统性学习。

2025-06-10 08:56:07 818

原创 C++ STL概述

C++ STL概述,将STL分为几个主要部分,可参照此分块进行系统性学习。

2025-06-10 08:52:43 704

原创 现代C++模板函数与模板类总结

现代C++模板函数、模板类的总结,可参照该内容进行系统性学习。

2025-06-10 08:52:15 538

原创 C++11/14/17 主要特性概念(含英文对照)

本文主要介绍C++11/14/17的特性概念,便于系统化学习。

2025-06-10 08:46:35 485

原创 现代C++内容主要分块

C++主要分块内容列表,涵盖基础、高级内容,系统学习可根据该列表进行。

2025-06-10 08:43:30 749

原创 编写一款2D CAD/CAM软件(二十一)生产ASCII ART Logo

发挥你的想象力、艺术创造力,在各种位图编辑软件中生产软件Logo的位图,例如位图名称为logo.png.然后打开ascii.txt文件,查看根据位图生成的ASCII ART Logo.利用QCommandLineParser来显示ASCII ART Logo.1) 安装jp2a工具:sudo apt install jp2a。

2024-07-20 16:45:44 881

原创 编写一款2D CAD/CAM软件(二十)转存

为了方便debug调试,那么应该封装一个打印字符串的接口函数。通过一个接口函数将文件转存为一个测试参考的文件。以部分类的转存为例。

2024-06-11 11:45:01 159

原创 编写一款2D CAD/CAM软件(十九)点选图形

在框选图形的基础上增加图元是否击中的判断。

2024-06-02 17:31:22 193

原创 LLVM IR 生成 -emit-llvm

emit-llvm 生成IR文件,默认结果为bitcode结果(.bc);-S 生成汇编格式文件。输入:test.cc。输出:test.ll。

2024-05-30 09:33:57 359

原创 GDB 使用python

【代码】GDB 使用python。

2024-05-11 16:49:40 897

原创 GDB断点执行的次数

需求背景:条件断点可能执行多次,但是可能在最后一次执行引发了后续的问题,但是断点位置并非问题现场,如何使得断点在最后一次停下来?

2024-05-11 13:36:37 680

原创 编写一款2D CAD/CAM软件(十八)框选图形

实现第一种操作相对比较简单:为每个图像计算一个边框Frame,然后计算这个Frame是否完全在选择框内。实现第二种操作则相对麻烦。如果你认为只要计算出Frame与选择框是否相交就可以,那么你想得过于简单了。比如一个圆,它的Frame和选择框相交并不等同于圆本身与选择框相交。因此第二种方法需要补充更多关于不同几何图形是否相交的API,这一部分我们将会在后续的文章中陆续补充上。本文先关注如何实现第一种操作。

2024-04-26 21:30:29 352

原创 编写一款2D CAD/CAM软件(十七)绘制选择框

本文先来实现框选的第一部分,那就是绘制出按住鼠标左键拖动形成的矩形框。

2024-04-24 21:43:16 1131

原创 std::map/unordered_map count & find perf

对于std::map/unordered_map而言,因key值仅能出现一次,故其count函数的实现一般会调用find函数,其perf没有大的差别。对于std::map/unordered_map而言,std::cout只有0或1的返回值。如果仅需要知道std::map/unordered_map中是否含某key值,那么使用count即可。std::cout, 遍历容器,对某个元素出现的次数进行计数,返回次数。std::find, 遍历容器,如果找到第一个就返回其迭代器。

2024-04-22 15:36:42 335

原创 Verilog 不可综合部分

Verilog中存在部分用于仿真验证的子集,只在仿真时使用,因为没有对应的硬件元件,因此不可综合。

2024-04-22 14:57:33 1348

原创 编写一款2D CAD/CAM软件(十六)交互绘制图形

以此为模板,可以将绘制其它基本图元的功能补齐。

2024-04-21 10:33:52 684 1

原创 编写一款2D CAD/CAM软件(十五)封装交互操作类

至此,我们仍然还不能使用鼠标与软件进行交互来进行基本图元的绘制,因为我们还没有对绘制的操作类进行封装,在下一篇文章中我们将实现基本的交互操作。

2024-04-20 10:04:34 852

原创 编写一款2D CAD/CAM软件(十四)绘制工具栏

前面的文章已经封装了数个最基本的图元,但是视图的呈现是基于测试数据形成的。为了尽快完善软件交互的框架和能力,本文将增加工具栏。

2024-04-17 20:39:56 565

原创 编写一款2D CAD/CAM软件(十三)绘制折线

将一组离散的点按顺序通过直线段相连即构成折线。

2024-04-16 20:54:19 350

原创 编写一款2D CAD/CAM软件(十二)绘制圆

QPainter中有多个绘制椭圆的接口,长轴半径与短轴半径相等的椭圆即正圆。注意设置QPainter的画刷QBrush为空,否则绘制的将是填充的圆。注意这里的长度变换,从几何图形坐标系转为视图坐标系的半径长度。测试数据中增加了圆形。

2024-04-16 20:24:10 304

原创 编写一款2D CAD/CAM软件(十一)文档

软件在编辑、访问、使用数据时,数据在内存里;当用户离线,数据在文档里,在硬盘里;文档构成了数据的集合,完整地、独立地表示一个设计。因此,本文封装了一个文档类JDocument用于数据的管理,同时增加了一个单独地文档模块库j-document来实现。

2024-04-14 19:08:22 415 1

原创 编写一款2D CAD/CAM软件(十)视图拖拽

一般视图操作是通过按压鼠标滚轮拖动实现视图的平移操作。

2024-04-14 12:00:40 570 1

原创 编写一款2D CAD/CAM软件(九)视图缩放

用户通过视图缩放能够查看几何图形的精细结构、局部细节或者查看全局构成。视图缩放最友好和最方便的操作方式一般是通过鼠标滚轮的转动来实现的。

2024-04-13 20:30:47 906

原创 编写一款2D CAD/CAM软件(八)窗口缩放

当用户对窗口尺寸进行调整时,将引起resize事件的传递。

2024-04-13 16:18:15 634

原创 编写一款2D CAD/CAM软件(七)GUI

GUI是用户与应用交互的桥梁。如果应用的需求简单,那么GUI的实现可以选择一些单窗口的组件来实现,比如对话框。如果应用的需求复杂,那么GUI的实现仅靠一些单窗口组件是难以达到目的的。这里我们选择使用QMainWIndow+QMdiArea的基本框架来支持多文档等特性的实现。注意一点,GUI界面的所有实现都在j-main模块中。让我们开启GUI实现之旅吧!本文的目的是将在上一篇Unit test的几何图形绘制到窗口上,后续再添加更多的功能。

2024-04-11 20:08:15 654

原创 编写一款2D CAD/CAM软件(六)Unit Test

Unit Test对于大型软件项目是非常重要的,能够帮助developer快速发现、定位和解决问题。基于现有的Unit Test框架来构建单元测试是事半功倍的事情,比如Google Test或QTest等。由于我们的软件是基于Qt GUI的,考虑到同一框架的兼容、匹配性更高,因此我们这里选择使用QTest框架来构建Unit test.

2024-04-08 19:59:38 508

原创 编写一款2D CAD/CAM软件(五)视图

有些引擎使用CPU的能力,有些则充分发挥GPU的能力,而对于CAD/CAM这种面向大型绘图设计的图形软件,不仅仅需要充分发挥硬件的能力,而且需要进行多种图形学、算法的优化才能达到满足用户需求的目的。这里我们暂时使用Qt提供的QPainter作为绘图引擎,该引擎是使用CPU来进行绘图,理解容易、使用简单。而对于图形坐标系和视图坐标系的缩放比例ratio_,以及图形坐标系的原点在视图坐标系下的坐标位置(x_orig_geo_, y_orig_geo_)可以参照上一篇关于坐标系的说明。

2024-04-06 19:09:34 827 8

原创 编写一款2D CAD/CAM软件(四)坐标系

我们仅使用视图坐标系和图形坐标系2个坐标系来简化坐标系模型。

2024-04-03 21:36:34 318 1

原创 编写一款2D CAD/CAM软件(三)几何图元

这里暂时只定义点,直线和圆,其它几何图元陆续增加。这是一个2D的CAD/CAM软件,所以这里的点定义在二维的直角坐标系下。同样其它几何图元也定义在二维直角坐标系下。y_ = y;x_ = x;y_ = y;return x_;return y_;两点定义一条直线(确切的说是线段)。end_ = end;

2024-04-01 15:53:02 242

原创 编写一款2D CAD/CAM软件(二)软件模块组成

这里我们把这款代开发的CAD/CAM软件叫做JCad,因此每个模块增加了j-的前缀.

2024-03-30 18:40:37 545

原创 编写一款2D CAD/CAM软件(一)前言

为何需要CAD/CAM软件?CAD/CAM软件对于工业设计与生产的重要性不言而喻。在这个倡导智能制造的时代,CAD/CAM软件的地位日益重要。处于领先地位的CAD/CAM软件有哪些?请登录AutoDesk官网查看其产品全家桶系列。有哪些开源CAD/CAM软件?FreeCADQCadQCAD有哪些国产CAD/CAM软件?中望CAD浩辰CAD。

2024-03-30 17:45:45 559

原创 Basic principles of backward/downward compatibility of files

【代码】Basic principles of backward/downward compatibility of files。

2024-03-27 15:50:27 304

Debugging with GDB

这是GDB的用户手册,您在平时使用GDB的过程中遇到的任何问题,都可以通过查阅该手册获取答案!希望您有更好地debug体验,更强的debug能力!

2024-04-17

VIM User Manual

VIM 用户手册对VIM编辑器的操作进行了详细的说明。如果你在平时使用VIM的过程中遇到任何问题,都可以通过该手册得到答案。

2024-04-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除