今天稍不注意解决了一个困扰很久的OCC图元拖动的问题,该问题的解决居然是因为一个坐标相对与绝对的问题。

记录一下代码:

如下简单实现了选中图元跟随鼠标移动而移动

void OccEditView::SelectObejectMove(int x,int y)
{if (myObeject)     //当前选中图元{m_TrsfPoint.SetCoord(0,0,0);gp_XYZ coord;gp_Vec VecRect;gp_Trsf TrsfRect;for (UINT i=0;i<m_shapeArray.size();i++)   //m_shapeArray是所有图元集合是一个vector {if (myObeject==m_shapeArray[i].m_Ais && m_shapeArray[i].SimpleShapeID>=5500 && m_shapeArray[i].SimpleShapeID<=6000)    //只允许拖动对应(ID值大于等于5500小于6000){gp_Pnt StartP;gp_Pnt2d TempPoint;TempPoint.SetCoord((double)x,(double)y);
m_TrsfPoint=ChangeCoordinate(TempPoint.X(),TempPoint.Y(),m_shapeArray[i].m_ShapeSurface);    //将鼠标二维点转换为OCC三维点coord.SetCoord(m_TrsfPoint.X()-m_shapeArray[i].BasePoint.X(),0,0);    //新的拖动位置是以原本的位置相对移动的,所以传入的拖动坐标要减去原始的坐标值(即相对偏移拖动)VecRect.SetXYZ(coord);TrsfRect.SetTranslationPart(VecRect);TopLoc_Location locationRect(TrsfRect);myAISContext1->SetLocation(m_shapeArray[i].m_Ais,locationRect);myAISContext1->UpdateCurrentViewer();m_ItemID=m_shapeArray[i].SimpleShapeID;}}}
}

问题:

 coord.SetCoord(m_TrsfPoint.X()-m_shapeArray[i].BasePoint.X(),0,0);   //(此处移动限制在X轴上)//新的拖动位置是以原本的位置相对移动的,所以传入的拖动坐标要减去原始的坐标值(即相对偏移拖动)

上面这段是设置gp_XYZ的值,也就是图元即将要移动到的新的位置,以前这句我是这样写的:

coord.SetCoord(m_TrsfPoint.X(),0,0);  //直接传入新的三维点坐标

可惜,OCC提供的这种方法是相对于图元原始的位置坐标为参考的,所以需要减去图元原始坐标位置。

不限定X轴,随意的跟随鼠标拖动:

 coord.SetCoord(m_TrsfPoint.X()-m_shapeArray[i].BasePoint.X(),m_TrsfPoint.Y()-m_shapeArray[i].BasePoint.Y(),m_TrsfPoint.Z()-m_shapeArray[i].BasePoint.Z());   //(跟随鼠标位置移动)

OpenCasCade图元拖动问题相关推荐

  1. QGraphicsItem图元拖动绘制(二)

    系列文章目录 QGraphicsItem图元的简单使用(一) 文章目录 系列文章目录 前言 一.简单演示 二.实现代码 总结 前言 接上一章,上一章讲解了如何简单使用图元,通过鼠标点击绘制一个固定图元 ...

  2. QGraphicsItem图元旋转缩放和自定义图元(三)

    系列文章目录 QGraphicsItem图元的简单使用(一) QGraphicsItem图元拖动绘制(二) 文章目录 系列文章目录 前言 一.缩放和旋转 二.自定义图元 总结 前言 接上一章,图元绘制 ...

  3. QGraphicsItem图元坐标和在场景中的坐标(六)

    系列文章目录 QGraphicsItem图元的简单使用(一) QGraphicsItem图元拖动绘制(二) QGraphicsItem图元旋转缩放和自定义图元(三) QGraphicsItem鼠标拖动 ...

  4. 三维设计软件Autodesk 123D Design(附安装包下载)

    1. 概述 Autodesk 123D是由Autodesk创建的一套CAD和3D建模工具,它的范围类似于Trimble SketchUp,并且基于Autodesk Inventor. 除了基本的绘图和 ...

  5. QT应用编程: QGraphicsView绘制图片作为背景

    一.环境介绍 QT版本: 5.12.6 操作系统: win10 64位 二.功能介绍 使用指定的图片作为QGraphicsView视图窗口的背景,并消除图元拖动时产生的残影. 思路: 派生QGraph ...

  6. Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元

    啥意思,感觉本人语文学得菜,不好描述. 直接看程序运行截图: 1.隐藏鼠标: 2.图元分组: 3.视图与场景坐标转换 程序源码如下: mygraphicsitem.h #ifndef MYGRAPHI ...

  7. OpenCASCADE可视化:3D演示之图形基元

    OpenCASCADE可视化:3D演示之图形基元 结构层次 图形基元 原始数组 文本原语 材料 纹理 自定义着色器 所述Graphic3d包用于在3D查看器来创建3D图形对象.这些称为结构的对象由一组 ...

  8. OpenCASCADE可视化:3D演示之3D术语表

    OpenCASCADE可视化:3D演示之3D术语表 组 光源 Primitive 结构- 管理一组组 视图 查看器 视图方向- 视图映射- Z-Buffering 组 一组基元和这些基元的属性.基元和 ...

  9. OpenCASCADE:Foundation Classes之数学原语和算法

    OpenCASCADE:Foundation Classes之数学原语和算法 概述 向量和矩阵 原始几何类型 原始几何类型的集合 基本几何库 常用数学算法 精确 精密封装 标准精度值 概述 Open ...

  10. CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果...

    CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果 开始 一图抵千言.首先来看鼠标拖动太阳(光源)的情形. 然后是鼠标拖拽旋转模型的情形. 然后我们移动摄像 ...

最新文章

  1. 软件测试培训需要学习什么
  2. Unity制作游戏中的场景
  3. .net core使用数据库
  4. OpenCV Cut Image via ROI 根据兴趣区域剪裁图片
  5. 看完让你理解WebSocket原理
  6. opencv cannot open file 'opencv_calib3d249d'
  7. Retrofit网络请求框架使用简析——Android网络请求框架(四)
  8. 资深开发者告诉你“页游转手游”应注意的五大点
  9. python自动下载邮件附件
  10. RPC 开发系列一:RPC 基本介绍
  11. 彬彬说,真正的喜欢一个人就会用心的去揣摩她,去知道她喜欢什么,什么性格...
  12. FPGA国内外发展现状
  13. 【教程】使用 LitJson 处理 Json 数据信息
  14. Android 与其他基于 Linux 的系统有何不同?
  15. Doris进阶——初识Doris_FE、BE、BROKER的扩缩容
  16. windows10 改变桌面路径到其他盘 直接显示所有文件重定向路径问题
  17. ubuntu18.04 ros-melodic 在安装ros依赖包时总是出现E软件包无法定位
  18. BitmapFactory.decodeStream接收servlet传回的图片数据流慢、卡死、延迟问题
  19. 093【RTKLIB源码之postpos-9】刨根问底
  20. wireshark抓包分析怎么看进程_wireshark 抓包分析

热门文章

  1. matlab实现矩形脉冲串,python中的矩形脉冲串
  2. java json 打印出来_如何使用Java漂亮地打印现有的JSON数据?
  3. linux命令ftps,Linux下ftp+ssl实现ftps
  4. mysql函数变量存储_MySQL存储过程、存储函数、变量
  5. FileZilla,读取目录列表失败(425 Can‘t open data connection.)的解决办法
  6. PEP 263 -- Defining Python Source Code Encodings(定义Python源代码编码)
  7. spring 的web.xml的加载顺序
  8. servlet和springMVC框架
  9. Runner站立会议03
  10. 将指定用户下所有表的查询权限赋权给查询用户