OpenCasCade图元拖动问题
今天稍不注意解决了一个困扰很久的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图元拖动问题相关推荐
- QGraphicsItem图元拖动绘制(二)
系列文章目录 QGraphicsItem图元的简单使用(一) 文章目录 系列文章目录 前言 一.简单演示 二.实现代码 总结 前言 接上一章,上一章讲解了如何简单使用图元,通过鼠标点击绘制一个固定图元 ...
- QGraphicsItem图元旋转缩放和自定义图元(三)
系列文章目录 QGraphicsItem图元的简单使用(一) QGraphicsItem图元拖动绘制(二) 文章目录 系列文章目录 前言 一.缩放和旋转 二.自定义图元 总结 前言 接上一章,图元绘制 ...
- QGraphicsItem图元坐标和在场景中的坐标(六)
系列文章目录 QGraphicsItem图元的简单使用(一) QGraphicsItem图元拖动绘制(二) QGraphicsItem图元旋转缩放和自定义图元(三) QGraphicsItem鼠标拖动 ...
- 三维设计软件Autodesk 123D Design(附安装包下载)
1. 概述 Autodesk 123D是由Autodesk创建的一套CAD和3D建模工具,它的范围类似于Trimble SketchUp,并且基于Autodesk Inventor. 除了基本的绘图和 ...
- QT应用编程: QGraphicsView绘制图片作为背景
一.环境介绍 QT版本: 5.12.6 操作系统: win10 64位 二.功能介绍 使用指定的图片作为QGraphicsView视图窗口的背景,并消除图元拖动时产生的残影. 思路: 派生QGraph ...
- Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元
啥意思,感觉本人语文学得菜,不好描述. 直接看程序运行截图: 1.隐藏鼠标: 2.图元分组: 3.视图与场景坐标转换 程序源码如下: mygraphicsitem.h #ifndef MYGRAPHI ...
- OpenCASCADE可视化:3D演示之图形基元
OpenCASCADE可视化:3D演示之图形基元 结构层次 图形基元 原始数组 文本原语 材料 纹理 自定义着色器 所述Graphic3d包用于在3D查看器来创建3D图形对象.这些称为结构的对象由一组 ...
- OpenCASCADE可视化:3D演示之3D术语表
OpenCASCADE可视化:3D演示之3D术语表 组 光源 Primitive 结构- 管理一组组 视图 查看器 视图方向- 视图映射- Z-Buffering 组 一组基元和这些基元的属性.基元和 ...
- OpenCASCADE:Foundation Classes之数学原语和算法
OpenCASCADE:Foundation Classes之数学原语和算法 概述 向量和矩阵 原始几何类型 原始几何类型的集合 基本几何库 常用数学算法 精确 精密封装 标准精度值 概述 Open ...
- CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果...
CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果 开始 一图抵千言.首先来看鼠标拖动太阳(光源)的情形. 然后是鼠标拖拽旋转模型的情形. 然后我们移动摄像 ...
最新文章
- 软件测试培训需要学习什么
- Unity制作游戏中的场景
- .net core使用数据库
- OpenCV Cut Image via ROI 根据兴趣区域剪裁图片
- 看完让你理解WebSocket原理
- opencv cannot open file 'opencv_calib3d249d'
- Retrofit网络请求框架使用简析——Android网络请求框架(四)
- 资深开发者告诉你“页游转手游”应注意的五大点
- python自动下载邮件附件
- RPC 开发系列一:RPC 基本介绍
- 彬彬说,真正的喜欢一个人就会用心的去揣摩她,去知道她喜欢什么,什么性格...
- FPGA国内外发展现状
- 【教程】使用 LitJson 处理 Json 数据信息
- Android 与其他基于 Linux 的系统有何不同?
- Doris进阶——初识Doris_FE、BE、BROKER的扩缩容
- windows10 改变桌面路径到其他盘 直接显示所有文件重定向路径问题
- ubuntu18.04 ros-melodic 在安装ros依赖包时总是出现E软件包无法定位
- BitmapFactory.decodeStream接收servlet传回的图片数据流慢、卡死、延迟问题
- 093【RTKLIB源码之postpos-9】刨根问底
- wireshark抓包分析怎么看进程_wireshark 抓包分析
热门文章
- matlab实现矩形脉冲串,python中的矩形脉冲串
- java json 打印出来_如何使用Java漂亮地打印现有的JSON数据?
- linux命令ftps,Linux下ftp+ssl实现ftps
- mysql函数变量存储_MySQL存储过程、存储函数、变量
- FileZilla,读取目录列表失败(425 Can‘t open data connection.)的解决办法
- PEP 263 -- Defining Python Source Code Encodings(定义Python源代码编码)
- spring 的web.xml的加载顺序
- servlet和springMVC框架
- Runner站立会议03
- 将指定用户下所有表的查询权限赋权给查询用户