找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 19187|回复: 8
打印 上一主题 下一主题

[求助] 不用 “select_with_class_dialog”,如何直接 获得 鼠标选择的 object

[复制链接]
跳转到指定楼层
1
发表于 2012-6-14 23:56:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
小弟 最近在做ug2次开发的一个项目,现有个问题,想请教下大家。
开发环境 ug4.0, vc6,做了个mfc dll。

现在 需要获得鼠标选中的object,然后创建新的装配体,即 UF_ASSEM_create_component_part()。
貌似获取用鼠标选择的object都是用 UF_UI_select_with_class_dialog 这样的函数,获得 int n_objects,tag_t * object。
但 这些函数都会弹出一个 确认框,要用户点击ok,或者cancel。用户觉得麻烦,有没有其他api或者什么办法可以实现直接获得鼠标选择的物体(鼠标可以选中多个object)。

谢谢先了!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2012-6-15 14:11:19 | 只看该作者
用USER STYLER特有的选择特性,或者用BLOCK UI也可以
3
发表于 2012-6-15 15:03:16 | 只看该作者
upoint 发表于 2012-6-15 14:11
用USER STYLER特有的选择特性,或者用BLOCK UI也可以

我做的对话框是 纯mfc的非模态对话框,不是用ug的USER STYLER生成的。USER STYLER 的特有选择特性就不适应了吧, BLOCK UI 是啥,我先去了解下。
4
发表于 2012-6-15 15:46:36 | 只看该作者
那你要失望了,非模态对话框是要通过选择对话框实现的,如果你想实现也可以,用MFC非模态对话框+USER STYLER也可以实现
5
发表于 2012-6-15 16:01:52 | 只看该作者
upoint 发表于 2012-6-15 15:46
那你要失望了,非模态对话框是要通过选择对话框实现的,如果你想实现也可以,用MFC非模态对话框+USER STYLER也 ...

能否细说下 MFC非模态对话框+USER STYLER,要如何实现 我的要求。

我有找了下资料,用/NXOPEN里的c++类库可以获取 鼠标选中的object。
代码段如下:
#include <NXOpen/Selection.hxx>
.....

        UI * pUI = UI::GetUI();
        if (!pUI)
        {
                return;
        }

        Selection * pSelection = pUI->GetSelectionManager();
        if (!pSelection)
        {
                return;
        }
       
        m_nCntSel = pSelection->GetNumSelectedObjects();
        char pszName[256+1] = "";
       
        for (int i = 0; i < m_nCntSel; i++)
        {
                NXObject * pObject = pSelection->GetSelectedObject(i);
                if (pObject)
                {                                       
                                    tag_t tag1 = pObject->Tag();
                }
        }
...
现在的问题是  获得的tag1 我用在 UF_ASSEM_create_component_part 中,会出错,说是 异常的对象。
我怀疑是 因为用的是/NXOPEN里的c++类库,获得的tag标识不能用在 c 的库函数UF_ASSEM_create_component_part 中。因为这两个是不同的lib。
各位帮忙看下,有没有什么好的办法解决这个 mfc非模态对话框,不用UF_UI_select_with_class_dialog 函数,不需要用户交互点击 ok按钮,直接 获得鼠标选择的对象。
6
发表于 2012-6-16 13:34:16 | 只看该作者
先用鼠标将要选择的目标点成高亮显示,然后,遍历这些高亮显示的目标
7
发表于 2012-6-16 19:06:55 | 只看该作者
zhangcanwei 发表于 2012-6-16 13:34
先用鼠标将要选择的目标点成高亮显示,然后,遍历这些高亮显示的目标

这个方案我之前试过,先鼠标选中object, “高亮显示”了, 调用api  UF_OBJ_ask_display_properties(object,&disp); 然后判断 disp.highlight_status 是否高亮显示。 但是这个值highlight_status却 是0

可能是因为我操作不对吧,你说的“先用鼠标将要选择的目标点成高亮显示”,要怎么操作呢?


8
发表于 2012-6-18 09:39:40 | 只看该作者
tnsmallpig 发表于 2012-6-16 19:06
这个方案我之前试过,先鼠标选中object, “高亮显示”了, 调用api  UF_OBJ_ask_display_properties(obje ...

你确认调用这个函数之前,高亮显示没有消失? 或者你遍历到的确实是正确的目标吗?比如实体的某个面高亮显示了,而实体本身有可能没有高亮,如果你遍历得到的是实体,那就不对了

我只是提供一个思路,自己并没有真正试验过。
9
发表于 2012-6-28 17:10:58 | 只看该作者
nx4, vc6首先确定了你没法用NXOpen,Block UI,所以你只能从已有的东西里面找,UFUN和UI Styler。

UFUN里面有一个global selection,通过UF_UI_ask_global_sel_object_list可以获得当前的用户选择,但是,NX不开放global selection handle,这样就不能应用uf_ui.h里面很多相关的函数,如添加,删除等。这个是否能够满足你的需要,还是需要看你的应用是不是很简单而且有规则可循。

uf_ui.h提供了很多操作selection handle的方法,获得该handle有两种方式,第一种就是你说的,另外一种就是UI Styler,所以,如果你想有复杂的应用,就只能你自己去考虑了。粘贴帮助如下:
The selection pointer is provided to the API programmer in the following ways:

For UI Styler dialogs, the API programmer can call UF_STYLER_ask_value from their callback.
For single and class selection dialogs, NX passes the selection pointer to the API programmer's initialization procedure . See  UF_UI_select_with_single_dialog for details.
NX passes the selection pointer to the API programmer's filter procedure and selection callback.




您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-12 06:09 , Processed in 0.024775 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表