fly276200 发表于 2026-7-20 16:11:29

C++二次开发, 面选择器 FaceCollector

各位大神们,初学二次开发,碰到问题,恳请大家指导。谢谢。

使用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紧接着就抛异常,



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


            NXOpen::BlockStyler::PropertyList* property_list = face_select00->GetProperties();
            std::vector<NXOpen::TaggedObject*> tagged_object_vector = property_list->GetTaggedObjectVector("SelectedObjects");
      }
      else {
            showInfo("update_cb()", "else!!!");
      }
    }
    catch
    (exception& ex) {
      logger->error("Error in update_cb(), {}", ex.what());
      showError("update_cb()", ex.what());
    }
    return 0;
}选择

异常

f3634861 发表于 2026-7-21 11:24:39

参考下UG自带的实例

方永锐 发表于 2026-7-20 16:30:14

本帖最后由 方永锐 于 2026-7-20 20:51 编辑

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

if(block == face_select0)
      {
//---------Enter your code here-----------
std::vector<NXOpen::TaggedObject*> tagged_objects = face_select0->GetSelectedObjects();
uc1601(std::to_string(tagged_objects.size()).c_str(), 1);
NXOpen::BlockStyler::PropertyList* property_list = face_select0->GetProperties();
std::vector<NXOpen::TaggedObject*> tagged_object_vector = property_list->GetTaggedObjectVector("SelectedObjects");
uc1601(std::to_string(tagged_object_vector.size()).c_str(), 1);
      }
我在updata_cb中添加这段代码,选择面后size是能返回1的。

猜是其他地方出错了。得去日志里看才行
{:3_57:}

fly276200 发表于 2026-7-20 16:51:02

方永锐 发表于 2026-7-20 16:30
vector faces_obj = face_select0->GetSelectedObjects();

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

且何如阁子者也 发表于 2026-7-20 19:43:26

去学点C语言基础吧   你在跟新里又调用跟新 不报错才怪

CrazyPlant 发表于 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++ 异常

fly276200 发表于 2026-7-21 22:41:06

我也碰上过getselectedobject的size为0的情况,找过各种方法,最后发现是编译参数的问题,附上我的编译参数。

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

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

最终的原因试CMake的版本问题,降到VS2019的版本就可以了。
页: [1]
查看完整版本: C++二次开发, 面选择器 FaceCollector