• Open CASCADE学习|选取模型的点、线和面


    目录

    1、上下文初始化设置

    2、定义选择函数

    3、添加鼠标事件

    4、显示模型后输入选择函数


    实现鼠标左键点选模型的点、线、面并高亮显示,实现过程如下:

    1、上下文初始化设置

    1. //交互式上下文
    2. context = new AIS_InteractiveContext(viewer);
    3. context->SetDisplayMode(AIS_Shaded, Standard_True);
    4. //高亮颜色和模式
    5. context->HighlightStyle(Prs3d_TypeOfHighlight_LocalDynamic)->SetColor(Quantity_NameOfColor::Quantity_NOC_RED);
    6. context->HighlightStyle(Prs3d_TypeOfHighlight_LocalDynamic)->SetMethod(Aspect_TOHM_COLOR);
    7. context->HighlightStyle(Prs3d_TypeOfHighlight_LocalDynamic)->SetDisplayMode(1);
    8. context->HighlightStyle(Prs3d_TypeOfHighlight_LocalDynamic)->SetTransparency(0.5f);

    2、定义选择函数

    1. void Displaywin::selectMode(Handle(AIS_Shape) selectmode)
    2. {
    3. //激活将形状分解为Any
    4. context->Deactivate();
    5. const int aSubShapeSelMode = AIS_Shape::SelectionMode(TopAbs_FACE);
    6. context->Activate(selectmode, aSubShapeSelMode);
    7. context->Activate(selectmode, AIS_Shape::SelectionMode(TopAbs_SOLID));
    8. context->Activate(selectmode, AIS_Shape::SelectionMode(TopAbs_VERTEX));
    9. context->Activate(selectmode, AIS_Shape::SelectionMode(TopAbs_EDGE));
    10. }

    3、添加鼠标事件

    1. void Displaywin::mousePressEvent(QMouseEvent* event)
    2. {
    3. //平移 鼠标右键+shift
    4. if ((event->buttons() & Qt::RightButton))//&& (QApplication::keyboardModifiers() == Qt::ShiftModifier))
    5. {
    6. m_mode = Action3d_Panning;
    7. m_x = event->pos().x();
    8. m_y = event->pos().y();
    9. }
    10. else if (event->buttons() & Qt::LeftButton)//选择
    11. {
    12. context->MoveTo(event->pos().x(), event->pos().y(), view, true);
    13. }
    14. else if (event->buttons() & Qt::MidButton)//旋转
    15. {
    16. m_mode = Action3d_Rotation;
    17. //开始旋转视图围绕屏幕轴
    18. view->StartRotation(event->pos().x(), event->pos().y());
    19. }
    20. }

    4、显示模型后输入选择函数

    void Mainwin::trigerdrawbox(){    TopoDS_Shape box = occ.createBox();    Handle(AIS_Shape) aisBox = new AIS_Shape(box);    Dui->GetInteractiveContext()->EraseAll(Standard_True);    Dui->GetInteractiveContext()->Display(aisBox, Standard_True);    Dui->GetView()->FitAll();    Dui->selectMode(aisBox);  }
    

  • 相关阅读:
    怎么清晰地理解、表达 IaaS 、 PaaS 、 SaaS ?
    java图片处理
    【后端框架】MyBatis(2)
    Tair 对 Redis 引擎架构之争的看法
    面试java框架-Spring
    【计算机组成原理】指令系统(一)—— 指令格式
    (PC+WAP)织梦模板茶几茶盘类网站
    【NSArray数组的遍历 Objective-C语言】
    LeetBook新手村题单
    脱壳工具:Youpk的使用详解
  • 原文地址:https://blog.csdn.net/T20151470/article/details/136608173