opencascade 快速显示AIS_ConnectedInteractive源码学习

AIS_ConcentricRelation

typedef PrsDim_ConcentricRelation AIS_ConcentricRelation

AIS_ConnectedInteractive

简介

创建一个任意位置的另一个交互对象实例作为参考。这允许您使用连接的交互对象,而无需重新计算其表示、选择或图形结构。这些属性是从您的参考对象推导而来的。连接的交互对象与其源对象之间的关系通常是几何变换关系。AIS_ConnectedInteractive 类支持任何交互对象的选择模式 0,并且如果其参考对象基于 AIS_Shape,则支持所有标准模式。子类可以重新定义 ComputeSelection()。此外,如果其参考对象基于 AIS_Shape,则连接的交互对象还将处理 HLR(隐藏线去除)。

方法介绍

AIS_ConnectedInteractive()

AIS_ConnectedInteractive::AIS_ConnectedInteractive(const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d = PrsMgr_TOP_AllView)

断开先前的视图连接并将高亮模式设置为0。这会高亮显示线框表示aTypeOfPresentation3d。Top_AllView禁用隐藏线去除。

AcceptDisplayMode()
virtual Standard_Boolean AIS_ConnectedInteractive::AcceptDisplayMode(const Standard_Integer theMode) const inline override virtual

如果参考表示接受指定的显示模式,则返回true。

重实现自PrsMgr_PresentableObject。

AcceptShapeDecomposition()
virtual Standard_Boolean AIS_ConnectedInteractive::AcceptShapeDecomposition() const inline override virtual

通知图形上下文交互对象可以分解为子形状以进行动态选择。

重实现自SelectMgr_SelectableObject。

Compute()
virtual void AIS_ConnectedInteractive::Compute(const Handle<PrsMgr_PresentationManager>& thePrsMgr, const Handle<Prs3d_Presentation>& theprs, const Standard_Integer theMode) override protected virtual

计算视图aPresentation及其更新。后者由aPresentationManager管理。显示模式aMode默认为0。当实例连接到另一个InteractiveObject时,该方法是重新定义的虚方法;此时,该方法不会计算任何内容,只是使用最后一个对象的表示,并进行存储的变换(如果有)。

实现自PrsMgr_PresentableObject。

computeHLR()
virtual void AIS_ConnectedInteractive::computeHLR(const Handle<Graphic3d_Camera>& theProjector, const Handle<TopLoc_Datum3D>& theTrsf, const Handle<Prs3d_Presentation>& thePrs) override protected virtual

根据视点计算表示。

重实现自PrsMgr_PresentableObject。

ComputeSelection()
virtual void AIS_ConnectedInteractive::ComputeSelection(const Handle<SelectMgr_Selection>& theSelection, const Standard_Integer theMode) override protected virtual

通过从myReference选择中复制生成敏感实体,为这些实体创建并设置一个实体拥有者,并将它们添加到theSelection中。

实现自SelectMgr_SelectableObject。

computeSubShapeSelection()
void AIS_ConnectedInteractive::computeSubShapeSelection(const Handle<SelectMgr_Selection>& theSelection, const Standard_Integer theMode) protected

通过从myReference子形状选择中复制生成敏感实体,为这些实体创建并设置一个实体拥有者,并将它们添加到theSelection中。

Connect() [1/3]
void AIS_ConnectedInteractive::Connect(const Handle<AIS_InteractiveObject>& theAnotherObj) inline

建立连接交互对象、anotherIobj及其参考之间的连接。

Connect() [2/3]
void AIS_ConnectedInteractive::Connect(const Handle<AIS_InteractiveObject>& theAnotherObj, const gp_Trsf& theLocation) inline

建立连接交互对象、anotherIobj及其参考之间的连接。将实例定位在aLocation中。

Connect() [3/3]
void AIS_ConnectedInteractive::Connect(const Handle<AIS_InteractiveObject>& theAnotherObj, const Handle<TopLoc_Datum3D>& theLocation) inline

建立连接交互对象、anotherIobj及其参考之间的连接。将实例定位在aLocation中。

connect()
void AIS_ConnectedInteractive::connect(const Handle<AIS_InteractiveObject>& theAnotherObj, const Handle<TopLoc_Datum3D>& theLocation) protected
ConnectedTo()
const Handle<AIS_InteractiveObject>& AIS_ConnectedInteractive::ConnectedTo() const inline

返回与参考交互对象的连接。

Disconnect()
void AIS_ConnectedInteractive::Disconnect()

清除与源参考的连接。表示将不再显示。警告:必须在删除表示之前完成。

HasConnection()
Standard_Boolean AIS_ConnectedInteractive::HasConnection() const inline

如果表示与其源参考之间建立了连接,则返回true。

Signature()
virtual Standard_Integer AIS_ConnectedInteractive::Signature() const inline override virtual

返回0。

重实现自AIS_InteractiveObject。

Type()
virtual AIS_KindOfInteractive AIS_ConnectedInteractive::Type() const inline override virtual

返回KOI_Object。

重实现自AIS_InteractiveObject。

updateShape()
void AIS_ConnectedInteractive::updateShape(const Standard_Boolean WithLocation = Standard_True)

用法示例

cpp 复制代码
#include <AIS_ConnectedInteractive.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_Shape.hxx>
#include <TopoDS_Shape.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <V3d_View.hxx>
#include <Graphic3d_GraphicDriver.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <Aspect_DisplayConnection.hxx>

int main()
{
    // 创建 OpenGl_GraphicDriver
    Handle(Graphic3d_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver();

    // 创建视窗
    Handle(Aspect_DisplayConnection) aDispConnection = new Aspect_DisplayConnection();
    Handle(V3d_View) aView = new V3d_View(aGraphicDriver, "My View", aDispConnection);

    // 创建一个AIS_InteractiveContext
    Handle(AIS_InteractiveContext) context = new AIS_InteractiveContext(aGraphicDriver);

    // 创建一个盒子
    TopoDS_Shape boxShape = BRepPrimAPI_MakeBox(10, 20, 30).Shape();
    Handle(AIS_Shape) box = new AIS_Shape(boxShape);

    // 将盒子添加到AIS_InteractiveContext中
    context->Display(box);

    // 创建一个AIS_ConnectedInteractive对象
    Handle(AIS_ConnectedInteractive) connectedInteractive = new AIS_ConnectedInteractive();

    // 连接AIS_ConnectedInteractive对象与盒子
    connectedInteractive->Connect(box);

    // 将AIS_ConnectedInteractive对象添加到AIS_InteractiveContext中
    context->Display(connectedInteractive);

    // 显示视图
    aView->SetWindow(100, 100, 800, 600);
    aView->SetBackgroundColor(Quantity_NOC_BLACK);
    aView->MustBeResized();
    aView->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD, 0.08, V3d_ZBUFFER);

    // 主事件循环
    aView->Redraw();
    aView->Redraw();

    return 0;
}

在这个示例中,我们首先创建了一个 OpenGl_GraphicDriver 并设置了视窗。然后创建了一个 AIS_InteractiveContext,并在其中创建了一个盒子对象 box,并将其添加到 AIS_InteractiveContext 中进行显示。接着,创建了一个 AIS_ConnectedInteractive 对象 connectedInteractive,并通过 Connect() 方法将其连接到盒子对象 box 上,最后将 connectedInteractive 对象添加到 AIS_InteractiveContext 中进行显示。

相关推荐
charlie1145141912 小时前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(协议层封装)
c语言·驱动开发·单片机·学习·教程·oled
马船长3 小时前
[BSidesCF 2020]Had a bad day1
学习
黄交大彭于晏3 小时前
三端回链增加截图功能
学习
linwq83 小时前
设计模式学习(二)
java·学习·设计模式
Fhd-学习笔记4 小时前
《大语言模型》综述学习笔记
笔记·学习·语言模型
简知圈6 小时前
【04-自己画P封装,并添加已有3D封装】
笔记·stm32·单片机·学习·pcb工艺
YxVoyager6 小时前
GAMES101学习笔记(五):Texture 纹理(纹理映射、重心坐标、纹理贴图)
笔记·学习·图形渲染
徐某人..6 小时前
ARM嵌入式学习--第十天(UART)
arm开发·单片机·学习·arm
Buring_learn6 小时前
代理模式 -- 学习笔记
笔记·学习·代理模式
萝卜青今天也要开心6 小时前
读书笔记-《Redis设计与实现》(一)数据结构与对象(下)
java·数据结构·redis·学习