关于解决NX重置之后“试图使用不活动的对象”

本文探讨了在NX软件中如何正确管理和删除对象的问题。当在对话框中选择并创建了一个特征后,该特征会存储在私有字段中。文章特别强调了在重置后需要在初始化前清理这些私有字段,以避免因对象已删除但引用仍然存在而导致的错误。
部署运行你感兴趣的模型镜像

 

在执行Mian函数之前设置好私有字段,根据代码执行顺序Mian函数入口-构造函数-initialize(初始化对象)-dialogShown-Update

对话框中已经选中对象之后就已经创建了Feature(特征)并且已经储存在了私有字段中,重置之后自动进入初始化之前的函数

        if (BlockFeature != null)
        {
            theUfSession.Obj.DeleteObject(BlockFeature.Tag);
            BlockFeature = null;
        }

这时NX对象已经不存在,但是私有字段中依旧存在,如果要去执行DeletaObject函数,则会出现报警

所以需要在初始化的时候再次将私有字段设置为Null。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

double bujian_douVal = std::stod(params[7]); // 获取部件偏置 if (!geomTags.empty()) { for (tag_t geomTag : geomTags) { try { NXOpen::Session* theSession = NXOpen::Session::GetSession(); NXOpen::Part* workPart(theSession->Parts()->Work()); // 获取几何组对象 NXOpen::CAM::FeatureGeometry* featureGeometry = dynamic_cast<NXOpen::CAM::FeatureGeometry*>( NXOpen::NXObjectManager::Get(geomTag)); if (featureGeometry == NULL) continue; // 创建铣削几何构建器 NXOpen::CAM::MillGeomBuilder* millGeomBuilder; millGeomBuilder = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(featureGeometry); // 初始化部件几何体数据 millGeomBuilder->PartGeometry()->InitializeData(false); // 获取几何对象和几何体列表 NXOpen::CAM::Geometry* partGeometry = millGeomBuilder->PartGeometry(); NXOpen::CAM::GeometrySetList* geometrySetList = partGeometry->GeometryList(); // 通过Geometry创建新的几何体集 NXOpen::CAM::GeometrySet* newGeometrySet = partGeometry->CreateGeometrySet(); // 完全加载工作部件 NXOpen::PartLoadStatus* partLoadStatus = workPart->LoadThisPartFully(); delete partLoadStatus; // 创建包含所有实体的列表 std::vector<NXOpen::Body*> bodies; for (tag_t entityTag : layerEntities) { NXOpen::Body* body = dynamic_cast<NXOpen::Body*>(NXOpen::NXObjectManager::Get(entityTag)); if (body != NULL) bodies.push_back(body); } if (bodies.empty()) { millGeomBuilder->Destroy(); continue; } // 创建选择规则 NXOpen::BodyDumbRule* bodyDumbRule; bodyDumbRule = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies, true); // 获取新几何体集的收集器 NXOpen::ScCollector* scCollector = newGeometrySet->ScCollector(); // 用新规则替换现有规则 std::vector<NXOpen::SelectionIntentRule*> rules(1); rules[0] = bodyDumbRule; scCollector->ReplaceRules(rules, false); if (bujian_douVal != 0) { newGeometrySet->SetCustomPartOffset(true); newGeometrySet->SetPartOffset(bujian_douVal); } //将新几何体集添加到列表 geometrySetList->Append(newGeometrySet); // 提交构建器更改 NXOpen::NXObject* nXObject = millGeomBuilder->Commit(); millGeomBuilder->Destroy(); } catch (...) { printToMessageWindow("关联实体到几何组时发生错误"); } } }程序循环添加几何体失败“关联实体到几何组时发生错误”只成功添加了第一次的几何体 ,参考下这段代码:“ NXOpen::Session *theSession = NXOpen::Session::GetSession(); NXOpen::Part *workPart(theSession->Parts()->Work()); NXOpen::Part *displayPart(theSession->Parts()->Display()); NXOpen::PartLoadStatus *partLoadStatus1; partLoadStatus1 = workPart->LoadThisPartFully(); delete partLoadStatus1; std::vector<NXOpen::Body *> bodies1(1); NXOpen::Body *body1(dynamic_cast<NXOpen::Body *>(workPart->Bodies()->FindObject("EXTRUDE(2)"))); bodies1[0] = body1; NXOpen::BodyDumbRule *bodyDumbRule1; bodyDumbRule1 = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true); NXOpen::ScCollector *scCollector1(dynamic_cast<NXOpen::ScCollector *>(workPart->FindObject("ENTITY 113 1"))); std::vector<NXOpen::SelectionIntentRule *> rules1(1); rules1[0] = bodyDumbRule1; scCollector1->ReplaceRules(rules1, false); // can not output code to find <JABL>: <UGS::CamBuilder::Geometry> &00007FF4F4CEEEF8 [52127] NXOpen::CAM::Geometry *nullNXOpen_CAM_Geometry(NULL); NXOpen::CAM::GeometrySet *geometrySet1; geometrySet1 = nullNXOpen_CAM_Geometry->CreateGeometrySet(); // can not output code to find <JABL>: <UGS::UICOMPJA_list> &00007FF4F4CEF128 [52128] NXOpen::ObjectList *nullNXOpen_ObjectList(NULL); nullNXOpen_ObjectList->Append(geometrySet1); NXOpen::PartLoadStatus *partLoadStatus2; partLoadStatus2 = workPart->LoadThisPartFully(); delete partLoadStatus2; std::vector<NXOpen::Body *> bodies2(1); NXOpen::Body *body2(dynamic_cast<NXOpen::Body *>(workPart->Bodies()->FindObject("Geometry Instance(3:1A:1A)"))); bodies2[0] = body2; NXOpen::BodyDumbRule *bodyDumbRule2; bodyDumbRule2 = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies2, true); NXOpen::ScCollector *scCollector2; scCollector2 = geometrySet1->ScCollector(); std::vector<NXOpen::SelectionIntentRule *> rules2(1); rules2[0] = bodyDumbRule2; scCollector2->ReplaceRules(rules2, false); ”
最新发布
09-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值