
一、Geom2d_AxisPlacement 简介
在 OpenCASCADE 的二维几何库中,Geom2d_AxisPlacement 是一个用于定义二维坐标系的几何类,主要包含一个原点(gp_Pnt2d)和一个方向向量(gp_Dir2d)。它在构造与控制二维几何对象(如线段、曲线)时非常关键,广泛应用于草图建模、投影运算、草图约束系统等场景。

特点总结:
- 轻量而直观:只包含一个点与一个方向,结构简洁;
- 可变操作丰富:支持翻转、镜像、角度测量等变换;
| 应用场景 | 如何使用 |
|---|---|
| 构造二维几何图元(直线、圆等) | 作为构造函数参数传入,如用于 Geom2d_Circle, Geom2d_Line 等构造中心点与方向信息 |
| 进行二维方向对齐(如加工路径、投影线) | 设定方向向量与参考点,实现图元或路径的旋转、镜像、偏移等操作 |
| 在参数空间中定义局部坐标系 | 在曲面 UV 空间中定义原点与方向,便于处理 UV 坐标方向、绘制路径或标注等 |
| 构建二维草图、约束求解器等 | 定义草图中局部参考轴系, |
二、交互式操作解析
1. 坐标系初始化
教学示例中,场景初始化函数 sceneInit 创建了一个默认的坐标系:

axis = new Geom2d_AxisPlacement(gp_Pnt2d(0, 0), gp_Dir2d(1, 0));
此操作创建了一个原点在 (0,0),方向为 X 轴正方向的坐标系。
可视化代码:
drawAxis(context, axis, Quantity_NOC_BLUE1);
该函数将坐标系绘制为一条有向线段。
2. 设置新原点与方向


用户可以通过 ImGui 界面输入新原点与方向:
ImGui::InputFloat2("Origin", newLoc);
ImGui::InputFloat2("Direction", newDir);
点击按钮后,会应用变换并更新显示:
axis->SetLocation(gp_Pnt2d(newLoc[0], newLoc[1]));
axis->SetDirection(gp_Dir2d(newDir[0], newDir[1]));
| 参数名 | 类型 | 说明 |
|---|---|---|
newLoc |
float[2] |
新的坐标原点位置 |
newDir |
float[2] |
新的方向向量(自动归一化) |

3. 方向翻转(Reverse)
点击按钮后,调用 Reverse() 方法实现方向反转:
axis->Reverse();
或使用 Reversed() 返回新对象:
Handle(Geom2d_AxisPlacement) reversed = axis->Reversed();
并使用红色绘制新坐标轴:
drawAxis(context, reversed, Quantity_NOC_RED);
4. 通过 gp_Ax2d 设置坐标轴
Geom2d_AxisPlacement 可从通用坐标系对象 gp_Ax2d 中直接赋值:
gp_Ax2d ax2d(gp_Pnt2d(newLoc[0], newLoc[1]), gp_Dir2d(newDir[0], newDir[1]));
axis->SetAxis(ax2d);
这是在已有 gp_* 数据结构下设置轴系的常用方式。
5. 与反转坐标轴的夹角
计算当前坐标轴与其反转版本之间的角度:
Handle(Geom2d_AxisPlacement) reversed = axis->Reversed();
angleBetween = axis->Angle(reversed);
📌 输出结果为弧度值,理论上为 π(≈3.14159)。
6. 镜像坐标轴
使用 gp_Trsf2d 实现对当前坐标轴的镜像:
gp_Trsf2d trsf;
trsf.SetMirror(axis->Location());
Handle(Geom2d_AxisPlacement) mirrored = Handle(Geom2d_AxisPlacement)::DownCast

最低0.47元/天 解锁文章
402

被折叠的 条评论
为什么被折叠?



