找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 416|回复: 6

[求助] C++二次开发, 面选择器 FaceCollector

[复制链接]

1

主题

7

回帖

70

积分

上等兵

积分
70
发表于 2026-7-20 16:11:29 | 显示全部楼层 |阅读模式
各位大神们,初学二次开发,碰到问题,恳请大家指导。谢谢。

使用C++,NX2506(NX2412也试过了),使用UI创建了个面选择器对话框,编译后,调用dll的时候,
明明已经选择了一个面(UI也显示1了),可是代码返回的对象的size的大小是0,请大家指导一下。



我在initialize_cb()中给面选择器执行了
face_select00->SetLabelString("Glass surface");

update_cb()中,
showInfo("Info", label_string);
NX也能弹出窗口显示 Glass surface 字段,

可GetSelectedObjects()返回的就是size = 0,

我用GetTaggedObjectVector("SelectedObjects"),返回的也是0,

然后NX紧接着就抛异常,



  1. int Code::update_cb(NXOpen::BlockStyler::UIBlock* block) {
  2.     try {
  3.         if (block == face_select00) {
  4.             //---------Enter your code here-----------
  5.             showInfo("Info", "update by faceSelect_00");
  6.             auto label_string = face_select00->LabelString();
  7.             showInfo("Info", label_string);
  8.             std::vector<NXOpen::TaggedObject*> tagged_objects = face_select00->GetSelectedObjects();
  9.             showInfo("info", std::to_string(tagged_objects.size()).c_str());


  10.             NXOpen::BlockStyler::PropertyList* property_list = face_select00->GetProperties();
  11.             std::vector<NXOpen::TaggedObject*> tagged_object_vector = property_list->GetTaggedObjectVector("SelectedObjects");
  12.         }
  13.         else {
  14.             showInfo("update_cb()", "else!!!");
  15.         }
  16.     }
  17.     catch
  18.     (exception& ex) {
  19.         logger->error("Error in update_cb(), {}", ex.what());
  20.         showError("update_cb()", ex.what());
  21.     }
  22.     return 0;
  23. }
复制代码
选择

选择

选择

异常

异常

异常

1

主题

332

回帖

2439

积分

少尉

积分
2439
发表于 2026-7-21 11:24:39 | 显示全部楼层
参考下UG自带的实例

0

主题

5

回帖

825

积分

四级士官

积分
825
发表于 2026-7-20 16:30:14 | 显示全部楼层
本帖最后由 方永锐 于 2026-7-20 20:51 编辑

详细的错误信息要去日志文件里看。

  1. if(block == face_select0)
  2.         {
  3.   //---------Enter your code here-----------
  4.   std::vector<NXOpen::TaggedObject*> tagged_objects = face_select0->GetSelectedObjects();
  5.   uc1601(std::to_string(tagged_objects.size()).c_str(), 1);
  6.   NXOpen::BlockStyler::PropertyList* property_list = face_select0->GetProperties();
  7.   std::vector<NXOpen::TaggedObject*> tagged_object_vector = property_list->GetTaggedObjectVector("SelectedObjects");
  8.   uc1601(std::to_string(tagged_object_vector.size()).c_str(), 1);
  9.         }
复制代码

我在updata_cb中添加这段代码,选择面后size是能返回1的。

猜是其他地方出错了。得去日志里看才行


1

主题

7

回帖

70

积分

上等兵

积分
70
 楼主| 发表于 2026-7-20 16:51:02 | 显示全部楼层
方永锐 发表于 2026-7-20 16:30
vector faces_obj = face_select0->GetSelectedObjects();

没看明白,去掉了std::吗?去掉的话没有什么意义吧,这个方法在头文件里面是这样的
public: std::vector<NXOpen::TaggedObject *> GetSelectedObjects ();

2

主题

657

回帖

5470

积分

上尉

积分
5470
发表于 2026-7-20 19:43:26 | 显示全部楼层
去学点C语言基础吧   你在跟新里又调用跟新 不报错才怪

0

主题

2

回帖

18

积分

列兵

积分
18
发表于 2026-7-21 16:47:17 | 显示全部楼层
我也碰上过getselectedobject的size为0的情况,找过各种方法,最后发现是编译参数的问题,附上我的编译参数。
        /JMC # 调试友好
        /GS # 栈保护
        /Zc:wchar_t # 标准 wchar_t
        /Zc:inline # 标准 inline
        /Zc:forScope # 标准 for 作用域
        /GR # RTTI
        /Gd # 默认调用约定
        /MD # 动态运行库
        /EHsc # 标准 C++ 异常

1

主题

7

回帖

70

积分

上等兵

积分
70
 楼主| 发表于 2026-7-21 22:41:06 | 显示全部楼层
我也碰上过getselectedobject的size为0的情况,找过各种方法,最后发现是编译参数的问题,附上我的编译参数。

猜是其他地方出错了。得去日志里看才行


感谢2位的支持,非常感谢。,
原因找到了,我用的CLion,不习惯VS,没有代码补全,没办法重新安装的VS,

最终的原因试CMake的版本问题,降到VS2019的版本就可以了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2026-9-9 17:59

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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