在 NX 的二次开发中,我们经常需要选择实体和方向,如果每次手动选择,势必会影响调试的效率,那么有没有办法,让 程序 一启动就自动选择当前实体和方向呢,自然是有的。

经过我一番研究,因为可能有多个实体存在,所以如果加上一些限定条件,则可以实现自动选择准确的实体,如果实体只有一个,那么去掉选择条件也是可以的。
比如,我通过实体的面和特征数目同时成立的条件筛选实体。
直接上 代码 :
#include "NXOpen/Direction.hxx"#include "NXOpen/DirectionCollection.hxx" #if 1 //调试模式时,自动选择体和Z方向(Z方向可能选反) const int nDstFaceCount = 41; const int nDstFeatureCount = 5; const double dZDir = 1.0; //取负值反向 Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); BodyCollection *bcBodys = workPart->Bodies(); Body* pBody = nullptr; //选择面数最多body for (auto it = bcBodys->begin(); it != bcBodys->end(); ++it) { Body *pTmpBody = *it; int nFaceCount = pTmpBody->GetFaces().size(); int nFeatureCount = pTmpBody->GetFeatures().size(); if (nFaceCount == nDstFaceCount && nFeatureCount == nDstFeatureCount) { pBody = pTmpBody; break; } } std::vector<TaggedObject*> vSelBody(1); vSelBody[0] = pBody; m_pBodySelect->AUTUMOONBLock_SetSelectedObjects(vSelBody); tag_t tWCS; UF_CSYS_ask_wcs(&tWCS); UF_DISP_set_highlight(tWCS, 1); Point3d origin1(0.0, 0.0, 330.0); Vector3d vector1(0.0, 0.0, 1.0); Direction *directionZ = workPart->Directions()->CreateDirection(origin1, vector1, SmartObject::UpdateOptionWithinModeling); std::vector<TaggedObject*> vDirections(1); vDirections[0] = directionZ; m_pVector->AUTUMOONBLock_SetSelectedObjects(vDirections); if (pBody) { //设置Core m_Core->SetBodie(pBody); m_Core->SetFroVec(AUTUMOONMathVector3d(0.0, 0.0, dZDir)); DoRec(); m_pFaceSelect->Focus(); }#endif // _DEBUG其中限定条件为面的数量和特征数量,根据实际情况修改即可。
部分不重要的代码的实现,因为项目原因无法公开,其实就是一些简单的 宏 定义展开而已。
欢迎交流与讨论。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删