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

  1. 包含必要的头文件

    首先,需要包含相关的 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>
    
  2. 创建三轴坐标系

    使用 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);
    
  3. 将三轴坐标系添加到视图中

    将创建的三轴坐标系添加到 OpenCascade 的视图中,例如 V3d_ViewerAIS_InteractiveContext

    // 创建一个视图 viewer
    Handle(V3d_Viewer) aViewer = new V3d_Viewer();
    
    // 创建交互上下文 context
    Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);
    
    // 将三轴坐标系添加到交互上下文中
    aContext->Display(aTrihedron, Standard_True);
    
  4. 处理交互操作

    可以通过 AIS_InteractiveContext 处理用户交互操作,例如选择、高亮等:

    // 选择对象
    aContext->SetSelected(aTrihedron);
    
    // 高亮显示选定的对象
    aTrihedron->HilightSelected(aContext->MainPrsMgr()->PresentationManager(), aContext->SelectedOwners());
    
  5. 清除资源

    在程序结束时,记得清理资源:

    // 清除所有的显示对象
    aContext->EraseAll();
    

在这里插入图片描述
在这里插入图片描述

这些步骤展示了如何使用 AIS_Trihedron 类在 OpenCascade 中创建、显示和操作三轴坐标系对象。

参考

posted @ 2024-08-03 09:28  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源