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;
}选择
异常
参考下UG自带的实例 本帖最后由 方永锐 于 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:}
方永锐 发表于 2026-7-20 16:30
vector faces_obj = face_select0->GetSelectedObjects();
没看明白,去掉了std::吗?去掉的话没有什么意义吧,这个方法在头文件里面是这样的
public: std::vector<NXOpen::TaggedObject *> GetSelectedObjects (); 去学点C语言基础吧 你在跟新里又调用跟新 不报错才怪 我也碰上过getselectedobject的size为0的情况,找过各种方法,最后发现是编译参数的问题,附上我的编译参数。
/JMC # 调试友好
/GS # 栈保护
/Zc:wchar_t # 标准 wchar_t
/Zc:inline # 标准 inline
/Zc:forScope # 标准 for 作用域
/GR # RTTI
/Gd # 默认调用约定
/MD # 动态运行库
/EHsc # 标准 C++ 异常 我也碰上过getselectedobject的size为0的情况,找过各种方法,最后发现是编译参数的问题,附上我的编译参数。
猜是其他地方出错了。得去日志里看才行
感谢2位的支持,非常感谢。,
原因找到了,我用的CLion,不习惯VS,没有代码补全,没办法重新安装的VS,
最终的原因试CMake的版本问题,降到VS2019的版本就可以了。
页:
[1]