opencascade AIS_Trihedron源码学习 绘制三轴坐标系 原创
opencascade AIS_Trihedron
前言
//! 创建一个可选择的三轴坐标系
//! 该三轴坐标系包括一个原点,三个轴线和三个标签。
//! 标签的默认文本为 “X”, “Y”, “Z”。
//! 可以更改原点和任意轴线的颜色,箭头和标签的颜色也可以改变。
//! 可视化呈现可能显示为两种模式:着色模式和线框模式(默认为线框模式)。
//! 有四种选择模式:
//! - AIS_TrihedronSelectionMode_EntireObject 完整选择三轴坐标系,优先级 = 1
//! - AIS_TrihedronSelectionMode_Origin 选择其原点,优先级 = 5
//! - AIS_TrihedronSelectionMode_Axes 选择其轴线,优先级 = 3
//! - AIS_TrihedronSelectionMode_MainPlanes 选择其主平面,优先级 = 2
//!
//! 警告!
//! 用于显示三轴坐标系的默认长度单位是毫米,
//! 而轴线的默认表示值为100。
//! 如果您修改了这些尺寸,必须暂时恢复 Drawer。
//! 在其中,您可以取得存储长度值的 Aspect。
//! 对于三轴坐标系,这是 Prs3d_Drawer_LineAspect。
//! 您可以在此 Aspect 内部更改数值,然后重新计算显示。
方法
1
初始化三轴坐标系实体。
Standard_EXPORT AIS_Trihedron (const Handle(Geom_Axis2Placement)& theComponent);
2
返回数据显示模式。
Prs3d_DatumMode DatumDisplayMode() const { return myTrihDispMode; }
3
设置着色或线框显示模式,相对使用三角形或线段图形组。
void SetDatumDisplayMode (Prs3d_DatumMode theMode) { myTrihDispMode = theMode; }
4
返回在 SetComponent 中设置的右手坐标系。
const Handle(Geom_Axis2Placement)& Component() const { return myComponent; }
5
构造右手坐标系 aComponent。
Standard_EXPORT void SetComponent (const Handle(Geom_Axis2Placement)& theComponent);
6
如果三轴坐标系对象具有非默认大小(每个轴线默认大小为100毫米),则返回 true。
Standard_Boolean HasOwnSize() const { return myHasOwnSize; }
7
返回三轴坐标系对象的大小;默认为100.0。
Standard_EXPORT Standard_Real Size() const;
8
设置三轴坐标系对象的大小。
Standard_EXPORT void SetSize (const Standard_Real theValue);
9
如果对象具有单一颜色,则复制绘制器的默认大小;否则,DatumAspect 变为空。
Standard_EXPORT void UnsetSize();
10
如果三轴坐标系具有自定义文本颜色,则返回 true。
Standard_Boolean HasTextColor() const { return myHasOwnTextColor; }
11
返回三轴坐标系文本颜色。
Standard_EXPORT Quantity_Color TextColor() const;
12
设置三轴坐标系轴线标签的颜色。
Standard_EXPORT void SetTextColor (const Quantity_Color& theColor);
13
设置三轴坐标系轴线标签的颜色。
Standard_EXPORT void SetTextColor (const Prs3d_DatumParts thePart,
const Quantity_Color& theColor);
14
如果三轴坐标系具有自定义箭头颜色,则返回 true。
Standard_Boolean HasArrowColor() const { return myHasOwnArrowColor; }
15
返回三轴坐标系箭头颜色。
Standard_EXPORT Quantity_Color ArrowColor() const;
16
设置三轴坐标系箭头颜色。
Standard_EXPORT void SetArrowColor (const Quantity_Color& theColor);
17
设置三轴坐标系箭头颜色。
Standard_EXPORT void SetArrowColor (const Prs3d_DatumParts thePart,
const Quantity_Color& theColor);
18
返回数据部分的颜色:原点或三轴坐标系的某些部分。
Standard_EXPORT Quantity_Color DatumPartColor (Prs3d_DatumParts thePart);
19
设置数据部分的颜色:原点或三轴坐标系的某些部分。
20
如果显示模式为着色模式,则此颜色设置为正反面的颜色。
Standard_EXPORT void SetDatumPartColor (const Prs3d_DatumParts thePart,
const Quantity_Color& theColor);
21
设置原点的颜色。
void SetOriginColor (const Quantity_Color& theColor);
22
//! 设置x轴的颜色。
void SetXAxisColor (const Quantity_Color& theColor);
23
设置y轴的颜色。
void SetYAxisColor (const Quantity_Color& theColor);
24
设置z轴的颜色。
void SetAxisColor (const Quantity_Color& theColor);
25
//! 如果要绘制箭头,则返回 true。
Standard_Boolean ToDrawArrows() const;
26
//! 设置是否在可视化中绘制箭头。
void SetDrawArrows (const Standard_Boolean theToDraw);
27
//! 返回给定类型所有者的选择优先级。
Standard_Integer SelectionPriority (Prs3d_DatumParts thePart) { return mySelectionPriority[thePart]; }
28
//! 设置给定类型所有者的选择优先级。
void SetSelectionPriority (Prs3d_DatumParts thePart,
Standard_Integer thePriority);
29
//! 返回轴线的文本。参数 thePart 应为 XAxis、YAxis 或 ZAxis。
const TCollection_ExtendedString& Label (Prs3d_DatumParts thePart) { return myLabels[thePart]; }
30
设置三轴坐标系轴线的文本标签。参数 thePart 应为 XAxis、YAxis 或 ZAxis。
void SetLabel (const Prs3d_DatumParts thePart,
const TCollection_ExtendedString& theName);
31
//! 设置此三轴坐标系对象的颜色 theColor,它改变轴线的颜色。
Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor) Standard_OVERRIDE;
32
//! 返回是否选定的显示模式 aMode 对于三轴坐标系数据有效。
virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) ;
####33
返回索引 3,选择平面 XOY、YOZ、XOZ。
Standard_Integer Signature() const { return 3; }
33
表示交互对象类型为数据。
virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE { return AIS_KindOfInteractive_Datum; }
34
//! 移除颜色设置。
Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE;
35
清除属于此可选择对象的所有选定所有者(用于快速显示绘制)。
Standard_EXPORT virtual void ClearSelected() Standard_OVERRIDE;
36
绘制选定的所有者(用于快速显示绘制)。
Standard_EXPORT virtual void HilightSelected (const Handle(PrsMgr_PresentationManager)& thePM,
const SelectMgr_SequenceOfOwner& theOwners) Standard_OVERRIDE;
37
高亮显示属于此可选择对象的所有者(用于快速显示绘制)。
Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager)& thePM,
const Handle(Prs3d_Drawer)& theStyle,
使用实例
OpenCascade 中的 AIS_Trihedron
是用于绘制三轴坐标系的类,通常用于可视化工程模型中的参考坐标系。以下是一个简单的示例,展示如何创建和使用 AIS_Trihedron
:
-
包含必要的头文件
首先,需要包含相关的 OpenCascade 头文件:
#include <AIS_Trihedron.hxx> #include <Geom_Axis2Placement.hxx> #include <gp_Ax2.hxx> #include <Quantity_Color.hxx> #include <Prs3d_DatumMode.hxx> #include <Prs3d_Drawer.hxx> #include <AIS_Drawer.hxx> #include <V3d_Viewer.hxx> #include <AIS_InteractiveContext.hxx>
-
创建三轴坐标系
使用
AIS_Trihedron
类创建一个三轴坐标系对象,并设置其位置和显示选项:// 创建一个轴线的位置 gp_Ax2 anAxis(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)); // 以原点为中心,方向为Z轴 // 创建三轴坐标系对象 Handle(Geom_Axis2Placement) anAxisPlacement = new Geom_Axis2Placement(anAxis); Handle(AIS_Trihedron) aTrihedron = new AIS_Trihedron(anAxisPlacement); // 设置三轴坐标系的大小 aTrihedron->SetSize(200.0); // 设置大小为200mm // 设置三轴坐标系的显示模式为着色模式 aTrihedron->SetDatumDisplayMode(Prs3d_DM_Shaded); // 设置轴线颜色 Quantity_Color aColor(Quantity_NOC_RED); // 设置为红色 aTrihedron->SetColor(aColor);
-
将三轴坐标系添加到视图中
将创建的三轴坐标系添加到 OpenCascade 的视图中,例如
V3d_Viewer
和AIS_InteractiveContext
:// 创建一个视图 viewer Handle(V3d_Viewer) aViewer = new V3d_Viewer(); // 创建交互上下文 context Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer); // 将三轴坐标系添加到交互上下文中 aContext->Display(aTrihedron, Standard_True);
-
处理交互操作
可以通过
AIS_InteractiveContext
处理用户交互操作,例如选择、高亮等:// 选择对象 aContext->SetSelected(aTrihedron); // 高亮显示选定的对象 aTrihedron->HilightSelected(aContext->MainPrsMgr()->PresentationManager(), aContext->SelectedOwners());
-
清除资源
在程序结束时,记得清理资源:
// 清除所有的显示对象 aContext->EraseAll();
这些步骤展示了如何使用 AIS_Trihedron
类在 OpenCascade 中创建、显示和操作三轴坐标系对象。