opencascade AIS_RubberBand AIS_RotationMode源码学习 原创

//!相机旋转类型 Camera rotation mode.
enum AIS_RotationMode
{
AIS_RotationMode_BndBoxActive, //!< default OCCT rotation
AIS_RotationMode_PickLast, //!< rotate around last picked point
AIS_RotationMode_PickCenter, //!< rotate around point at the center of window
AIS_RotationMode_CameraAt, //!< rotate around camera center
AIS_RotationMode_BndBoxScene, //!< rotate around scene center
};

enum
{
AIS_RotationMode_LOWER = 0,
AIS_RotationMode_UPPER = AIS_RotationMode_BndBoxScene,
};

AIS_RubberBand

前言

在这里插入图片描述
//! 用于绘制橡皮筋选择区域的演示。
//! 它支持矩形和多边形选择。
//! 它是在二维覆盖层上构建的。
//! 默认配置是不填充的。
//! 对于矩形选择,使用 SetRectangle() 方法。
//! 对于多边形选择,使用 AddPoint() 和 GetPoints() 方法。

方法

1

构造具有默认配置的橡皮筋:空填充和白色实线。
该对象绑定到 Graphic3d_ZLayerId_TopOSD 图层。
AIS_RubberBand();

2

构造具有空填充和定义的线条样式的橡皮筋。
theLineColor [输入] 橡皮筋线条的颜色
theType [输入] 橡皮筋线条的类型
theLineWidth [输入] 橡皮筋线条的宽度。默认值为1。
该对象绑定到 Graphic3d_ZLayerId_TopOSD 图层。
AIS_RubberBand (const Quantity_Color& theLineColor,
const Aspect_TypeOfLine theType,
const Standard_Real theLineWidth = 1.0,
const Standard_Boolean theIsPolygonClosed = Standard_True);

3

构造具有定义的填充和线条参数的橡皮筋。
theLineColor [输入] 橡皮筋线条的颜色
theType [输入] 橡皮筋线条的类型
theFillColor [输入] 橡皮筋填充的颜色
theTransparency [输入] 填充的透明度。0表示不透明填充。默认值为透明。
theLineWidth [输入] 橡皮筋线条的宽度。默认值为1。
该对象绑定到 Graphic3d_ZLayerId_TopOSD 图层。
AIS_RubberBand (const Quantity_Color& theLineColor,
const Aspect_TypeOfLine theType,
const Quantity_Color theFillColor,
const Standard_Real theTransparency = 1.0,
const Standard_Real theLineWidth = 1.0,
const Standard_Boolean theIsPolygonClosed = Standard_True);

4

AIS_RubberBand();

5

设置矩形边界。
void SetRectangle (const Standard_Integer theMinX, const Standard_Integer theMinY,
const Standard_Integer theMaxX, const Standard_Integer theMaxY);

6

将最后一个点添加到点列表中。它们用于构建橡皮筋的多边形。
void AddPoint (const Graphic3d_Vec2i& thePoint);

7

从橡皮筋多边形的点列表中删除最后一个点。
sa AddPoint(), GetPoints()
void RemoveLastPoint();

8

将最后一个点添加到点列表中。它们用于构建橡皮筋的多边形。
AddPoint (const Graphic3d_Vec2i& thePoint);

9

从橡皮筋多边形的点列表中删除最后一个点。
RemoveLastPoint();

10

返回橡皮筋多边形的点。
Points() const;

11

//! 移除橡皮筋多边形的所有点。
void ClearPoints() { myPoints.Clear(); }

12

返回颜色属性。
Standard_EXPORT Quantity_Color LineColor() const;

13

//! 设置橡皮筋显示的线条颜色。
Standard_EXPORT void SetLineColor (const Quantity_Color& theColor);

14

//! 返回橡皮筋填充的颜色。
Standard_EXPORT Quantity_Color FillColor() const;

15

//! 设置橡皮筋填充的颜色。
Standard_EXPORT void SetFillColor (const Quantity_Color& theColor);

16

//! 设置橡皮筋显示的线条宽度。
Standard_EXPORT void SetLineWidth (const Standard_Real theWidth) const;

17

//! 返回线条宽度。
Standard_EXPORT Standard_Real LineWidth() const;

18

//! 设置橡皮筋显示的线条类型。
Standard_EXPORT void SetLineType (const Aspect_TypeOfLine theType);

19

//! 返回线条类型。
Standard_EXPORT Aspect_TypeOfLine LineType() const;

20

//! 设置填充的透明度。
//! @param theValue [输入] 透明度值。1.0 表示透明背景
Standard_EXPORT void SetFillTransparency (const Standard_Real theValue) const;

21

//! 返回填充的透明度。
Standard_EXPORT Standard_Real FillTransparency() const;

22

//! 启用或禁用橡皮筋的填充。
Standard_EXPORT void SetFilling (const Standard_Boolean theIsFilling);

23

//! 启用带有定义参数的橡皮筋填充。
//! @param theColor [输入] 填充颜色
//! @param theTransparency [输入] 填充的透明度。0 表示不透明填充。
Standard_EXPORT void SetFilling (const Quantity_Color theColor, const Standard_Real theTransparency);

24

//! 返回是否启用了橡皮筋的填充。
Standard_EXPORT Standard_Boolean IsFilling() const;

25

//! 返回是否启用了橡皮筋的自动闭合。
Standard_EXPORT Standard_Boolean IsPolygonClosed() const;

26

//! 自动创建一条额外的线连接第一个和最后一个屏幕点以闭合边界折线。
Standard_EXPORT void SetPolygonClosed(Standard_Boolean theIsPolygonClosed);

protected:

27

//! 返回如果交互对象接受显示模式。
Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) const Standard_OVERRIDE
{
return theMode == 0;
}

28

//! 计算橡皮筋的显示。
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
const Handle(Prs3d_Presentation)& thePrs,
const Standard_Integer theMode) Standard_OVERRIDE;

29

//! 不为橡皮筋填充选择原语。
virtual void ComputeSelection (const Handle(SelectMgr_Selection)& /aSelection/,
const Standard_Integer /aMode/) Standard_OVERRIDE { };

30

//! 为橡皮筋填充填充三角形原语数组。
//! 它使用 Delaunay 三角剖分。
//! @return 如果成功填充三角形数组,则返回 true。
Standard_EXPORT Standard_Boolean fillTriangles();

示例

AIS_RubberBand 是 Open CASCADE 中用于绘制橡皮筋选择框的类。橡皮筋选择框是一种常见的图形用户界面元素,允许用户通过拖动鼠标来选择矩形或多边形区域。下面是一个使用 AIS_RubberBand 的示例代码,展示如何在 Open CASCADE 中创建和使用橡皮筋选择框。

首先,确保你的 Open CASCADE 环境已正确配置,并导入必要的头文件。

#include <AIS_RubberBand.hxx>
#include <AIS_InteractiveContext.hxx>
#include <V3d_View.hxx>
#include <Aspect_TypeOfLine.hxx>
#include <Quantity_Color.hxx>
#include <Graphic3d_Vec2i.hxx>
#include <NCollection_Sequence.hxx>

// 示例代码:使用 AIS_RubberBand 创建橡皮筋选择框

void CreateRubberBandSelection(const Handle(AIS_InteractiveContext)& theContext, const Handle(V3d_View)& theView)
{
    // 创建一个默认配置的橡皮筋选择框
    Handle(AIS_RubberBand) aRubberBand = new AIS_RubberBand();

    // 设置橡皮筋选择框的线条颜色、类型和宽度
    aRubberBand->SetLineColor(Quantity_Color(Quantity_NOC_WHITE));
    aRubberBand->SetLineType(Aspect_TOL_SOLID);
    aRubberBand->SetLineWidth(1.0);

    // 在选择框内设置一个矩形
    aRubberBand->SetRectangle(100, 100, 400, 300);

    // 添加一些点来构建多边形选择框
    aRubberBand->AddPoint(Graphic3d_Vec2i(200, 200));
    aRubberBand->AddPoint(Graphic3d_Vec2i(300, 300));
    aRubberBand->AddPoint(Graphic3d_Vec2i(400, 200));
    
    // 启用填充,并设置填充颜色和透明度
    aRubberBand->SetFilling(Standard_True);
    aRubberBand->SetFillColor(Quantity_Color(Quantity_NOC_RED));
    aRubberBand->SetFillTransparency(0.5);

    // 将橡皮筋选择框添加到交互上下文中
    theContext->Display(aRubberBand, Standard_True);
    theView->Redraw();
}

// 示例代码:清除橡皮筋选择框
void ClearRubberBandSelection(const Handle(AIS_InteractiveContext)& theContext)
{
    // 获取所有显示的橡皮筋选择框对象,并将其移除
    Handle(AIS_RubberBand) aRubberBand;
    for (theContext->InitCurrent(); theContext->MoreCurrent(); theContext->NextCurrent())
    {
        Handle(AIS_InteractiveObject) anObject = theContext->Current();
        aRubberBand = Handle(AIS_RubberBand)::DownCast(anObject);
        if (!aRubberBand.IsNull())
        {
            theContext->Remove(aRubberBand, Standard_True);
        }
    }
}

在上述代码中,我们展示了如何创建一个 AIS_RubberBand 对象并对其进行配置,包括设置线条颜色、类型、宽度,以及填充颜色和透明度。我们还展示了如何在 2D 界面上添加矩形和多边形选择框的点。最后,我们将橡皮筋选择框添加到交互上下文中并进行显示。

请根据实际需要,将该代码集成到你的 Open CASCADE 应用程序中,并在合适的位置调用 CreateRubberBandSelectionClearRubberBandSelection 函数。
参考

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