opencascade AIS_Line源码学习直线节点

opencascade AIS_Line

前言

构造用于构建复合形状的线基准。

方法

1

//! 初始化线 aLine。
Standard_EXPORT AIS_Line(const Handle(Geom_Line)& aLine);

2

//! 初始化线的起始点 aStartPoint 和终点 aEndPoint。
Standard_EXPORT AIS_Line(const Handle(Geom_Point)& aStartPoint, const Handle(Geom_Point)& aEndPoint);

3

//! 返回签名 5。
virtual Standard_Integer Signature() const Standard_OVERRIDE { return 5; }

4

//! 返回类型 Datum。
virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE { return AIS_KindOfInteractive_Datum; }

5

//! 构造一条无限线。
const Handle(Geom_Line)& Line() const { return myComponent; }

6

//! 返回通过 SetPoints 设置的线的起点 thePStart 和终点 thePEnd。
void Points (Handle(Geom_Point)& thePStart, Handle(Geom_Point)& thePEnd) const
{
thePStart = myStartPoint;
thePEnd = myEndPoint;
}

7

//! 实例化一条无限线。
void SetLine (const Handle(Geom_Line)& theLine)
{
myComponent = theLine;
myLineIsSegment = Standard_False;
}

8

//! 设置无限线的起点 thePStart 和终点 thePEnd,以创建一个有限线段。
void SetPoints (const Handle(Geom_Point)& thePStart, const Handle(Geom_Point)& thePEnd)
{
myStartPoint = thePStart;
myEndPoint = thePEnd;
myLineIsSegment = Standard_True;
}

9

//! 为绘图工具或“Drawer”中的线条提供新颜色设置 aColor。
Standard_EXPORT void SetColor (const Quantity_Color& aColor) Standard_OVERRIDE;

10

//! 为绘图工具或“Drawer”中的线条提供新宽度设置 aValue。
Standard_EXPORT void SetWidth (const Standard_Real aValue) Standard_OVERRIDE;

11

//! 移除颜色设置并返回原始颜色。
Standard_EXPORT void UnsetColor() Standard_OVERRIDE;

12

//! 移除宽度设置并返回原始宽度。
Standard_EXPORT void UnsetWidth() Standard_OVERRIDE;

示例:使用 AIS_Line

#include <AIS_InteractiveContext.hxx>
#include <AIS_Line.hxx>
#include <Geom_CartesianPoint.hxx>
#include <Geom_Line.hxx>
#include <Graphic3d.hxx>
#include <V3d_View.hxx>
#include <V3d_Viewer.hxx>
#include <Visual3d_ViewManager.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <WNT_Window.hxx>

int main() {
    // 初始化图形驱动
    Handle(Graphic3d_GraphicDriver) aDriver = new OpenGl_GraphicDriver;

    // 创建一个 3D 视图器
    Handle(V3d_Viewer) aViewer = new V3d_Viewer(aDriver, Standard_ExtString("Viewer3D"));

    // 创建一个 3D 视图
    Handle(V3d_View) aView = aViewer->CreateView();

    // 为视图创建一个窗口(例如,使用 WNT_Window 类用于 Windows 系统)
    Handle(WNT_Window) aWindow = new WNT_Window("OpenCASCADE Line Example", 100, 100, 800, 600);
    aView->SetWindow(aWindow);

    // 创建一个交互上下文
    Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);

    // 定义线的两个点
    Handle(Geom_CartesianPoint) startPoint = new Geom_CartesianPoint(0.0, 0.0, 0.0);
    Handle(Geom_CartesianPoint) endPoint = new Geom_CartesianPoint(10.0, 10.0, 0.0);

    // 创建一条连接两个点的 AIS_Line
    Handle(AIS_Line) aLine = new AIS_Line(startPoint, endPoint);

    // 设置线条的颜色和宽度
    aLine->SetColor(Quantity_NOC_BLUE);
    aLine->SetWidth(2.0);

    // 在交互上下文中显示这条线
    aContext->Display(aLine, AIS_Shaded, 0, Standard_True);

    // 调整视图以显示所有对象
    aView->FitAll();

    // 主事件循环(伪代码,实际实现取决于你的 GUI 框架)
    while (true) {
        // 处理 GUI 事件并根据需要重绘视图
        // 例如:
        // aView->Redraw();
    }

    return 0;
}

解释

  1. 初始化图形驱动

    • 使用 OpenGl_GraphicDriver 处理 OpenGL 渲染。
  2. 创建视图器和视图

    • 创建 V3d_Viewer 来管理 3D 可视化。
    • V3d_View 是实际的 3D 视图,用于渲染对象。
  3. 创建窗口

    • 使用 WNT_Window 在 Windows 系统上创建一个窗口。对于其他系统,你可能会使用 Xw_Window 或其他适当的类。
  4. 创建交互上下文

    • 创建 AIS_InteractiveContext 来管理视图器中的交互对象。
  5. 定义点并创建线

    • 使用 Geom_CartesianPoint 定义两个点。
    • 使用这些点创建 AIS_Line 对象。
  6. 设置线条属性

    • 使用 SetColorSetWidth 自定义线条的外观。
  7. 显示线条

    • 使用 Display 方法在交互上下文中显示线条。
  8. 调整和更新视图

    • 使用 FitAll 方法确保视图调整以显示所有对象。
  9. 事件循环

    • 需要一个事件循环来处理 GUI 事件并根据需要重绘视图。实际实现取决于你的 GUI 框架。

关键点

  • AIS_Line:表示有限和无限线条,可以通过颜色和线宽进行自定义。
  • 交互上下文:用于管理和显示像 AIS_Line 这样的交互对象。
  • GUI 框架:将 OpenCASCADE 集成到 GUI 框架(如 Qt 或 MFC)中需要调整事件循环以正确处理窗口事件。

这个示例展示了如何使用 AIS_Line 在 3D 视图中可视化线条,并且可以根据需要进一步自定义和互动。

参考
参考