首页 / 浏览问题 / 组件GIS / 问题详情
动态标绘选取问题
31EXP 2022年10月31日
您好,请问在动态图层添加了标绘后,怎么实现鼠标左键点击标绘,后台返回标绘的对象

1个回答

您好,关于鼠标的点击事件需要在UI控件上实现,请问您使用的 iObjects 组件哪个版本呢?C++、.NET 还是 Java 组件呢?具体是 11i、10.2.1?还是其他版本呢?

如果您使用的是 iObjects C++ 组件的话,在 qmapcontrol UI 控件中有实现对应的鼠标响应事件 mousePressEvent 和 mouseReleaseEvent,如果您觉得无法满足您的需求的话,建议继承该类重写对应的鼠标响应事件,或者直接修改这些鼠标响应事件的具体执行逻辑。

关于具体如何在 C++ 实现鼠标监听事件,建议您可以参考 C++ 开发语言学习教程。

如果您使用的是 .NET 或者 Java 组件的话,和上述流程类似,都是需要在 UI 控件上对鼠标行为进行监听,实现对应的监听事件。

希望可以帮到您。
2,168EXP 2022年10月31日
您好,我用的是iobject c++ 10.2版本,这个选取动态标绘的具体函数是哪个函数请问,我找到的是UGGraphObject的的hittest,但是该函数是虚函数,不知道在哪实现的,所以想知道怎么用哪个函数实现选取动图图层的标绘
您好,通过动态图层(QDynamicLayer)可以获取到动态标绘以及几何对象的关联管理对象(QDynamicObject),而通过 QDynamicObject 对象可以根据GetGeometry 接口获取您之前设置的标绘对象。
是的,这个我知道,就是怎么根据鼠标点击的位置,判断是否选中标绘
您好,iObjects C++ 的 QMapControl 控件中并没有封装接口判断对象是否被选中,建议您可以自行封装。

关于如何判断鼠标点击的位置是否选中标绘对象,建议可以根据鼠标点击的位置点和标绘对应的 Geometry 进行相交或者包含判断,若存在相交或包含,即可认为选中的情况。
请问手动标绘的图标,可以直接鼠标选中,并移动复制,请问这部分代码应该有选中的功能,请问手动标绘的鼠标事件的具体代码可以共享一下吗
您说的这部分代码就是在qmapcontrol.h和qmapcontrol.cpp中,建议直接看源码,在 extensions4Qt 实例代码中。

你好,我看了一下,mapcontrol里写的标牌移动函数可以用在动态图层上,就是里面的onbuttondown函数是在UGmapeditorwnd上声明,但是实现没有找到,请问可以私信我一下这个函数的具体实现吗

您好,UGC::UGMapEditorWnd 是 iObjects C++ 封装好的库,是无法提供源码的,还望理解
好吧,那请问这个graphs类是什么类,这个类可以适用于geometry类吗,那样没源码就可以用了
您好,UGGraphics是画布类,用于绘制Geometry几何对象的。

新问题建议您重新发帖提问,这样可以便于所有人检索查看,还望理解。
嗯嗯,就是onlbittondown的参数不就是uggraphs吗,就想问一下,有没有办法直接使用这个函数实现点击侦测,毕竟标牌就可以直接用这个函数,用UGGraphs画的UGGeometry按理说也可以吧

因为觉得是一个问题就没有开贴,不好意思
您好,无法直接基于 OnLButtonDown 事件实现点击侦测功能,目前 OnLButtonDown 事件已经在 iObjects C++ 组件中封装好了,无法修改其内容,由于 QDynamicObject 没有实现选中状态属性,目前并不适合您的需求,建议直接使用 UGLayer,UGLayer 中实现了获取当前选中集(GetSelection())的接口,可以根据该接口获取选中的几何对象。
...