购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
对于电极自动编程开发,通常在第一步需要进行型腔铣粗加工,如果需要再考虑效率的问题,一般只对基准面以上的部分采用型腔铣,而单独的基准台只需要进行2D轮廓加工,可以节约一些时间。这样就需要对型腔铣单独设置加工区域面,并且要通过算法自动找到基准台以上的所有面。

自动识别电极基准面以上的所有面大致算法:
1,首先要自动找到电极的基准面,这一步对于做电极自动编程非常重要,找到基准面就可以确定电极的方向、大小等,后续的很多识别算法,都会参考这个基准面。那么如何自动找到电极的基准面呢?(要求是处于正交状态的任意方向,都能自动找到),方法在另外的帖子会详细说明,或者可以加胡君qq85585969获取算法的原型代码。
2,找到基准面后,就已经确定了电极的方向,然后以基准面的法向方向作为Z向建立工作坐标系,再遍历电极所有的面,计算每个面的边界盒得到Z向的极限值,再对比基准面的高度,就能得到基准面以上的所有面。如还是不明白可以加胡君qq85585969交流。
示例代码:
//创建一个型腔铣加工操作
int MyClass::CAMCreatCavityMillOperation ()
{
//m_EleBodyTag是提前获得的选择的电极TAG
tag_t datumFace = GetEleDatumFace(m_EleBodyTag, 1); //自动获得电极基准面
tag_t datumFloorFace = GetEleDatumFace(m_EleBodyTag, 2); //自动获得电极基准底面
if (datumFace == NULL_TAG || datumFloorFace == NULL_TAG)
{
uc1601("基准面或基准底面获取失败,",1);
return 0;
}
int err_code=0;
tag_t operTag;
UF_OPER_create("mill_contour", "CAVITY_MILL", &operTag);
//设定名称
const char * objName ="CAVITY_MILL102";
UF_OBJ_set_name(operTag, objName);
//获取当前部件的UF_SETUP对象
tag_t setupTag=NULL_TAG;
UF_SETUP_ask_setup(&setupTag);
//获取geom根组,根据geom名字查询组的TAG
tag_t rootGeomGroup=NULL_TAG;
UF_SETUP_ask_geom_root(setupTag,&rootGeomGroup);
tag_t geomGroupName = NULL_TAG;
UF_NCGROUP_ask_object_of_name(rootGeomGroup, "WORKPIECE", &geomGroupName);
//获取刀具根组,根据刀具名字查询组的TAG
tag_t rootMctGroup=NULL_TAG;
UF_SETUP_ask_mct_root(setupTag,&rootMctGroup);
tag_t mctGroupName = NULL_TAG;
UF_NCGROUP_ask_object_of_name(rootMctGroup, "D10", &mctGroupName);
//获取program根组,根据program名字查询组的TAG
tag_t rootProgramGroup=NULL_TAG;
UF_SETUP_ask_program_root(setupTag,&rootProgramGroup);
tag_t programGroupName = NULL_TAG;
UF_NCGROUP_ask_object_of_name(rootProgramGroup, "HUNC01", &programGroupName);
//设定所属几何体、刀具、程序组
UF_NCGROUP_accept_member( geomGroupName, operTag);
UF_NCGROUP_accept_member( mctGroupName, operTag);
UF_NCGROUP_accept_member( programGroupName, operTag);
/*以下设置加工区域、切削模式、每刀切削深度、侧面底面余量、切削方向、内外公差、非切削运动、起始点等*/
//设置加工区域
int dfCount = 0;
tag_t *datumTopAllFace;

●●●请先
登陆 或
注册 后查看●●●
//设置进给率速度, ask查询的目的,是填充feedrateVla的值.
UF_PARAM_feedrate_t feedrateVla;
UF_PARAM_ask_subobj_ptr_value (operTag, UF_PARAM_FEED_CUT, &feedrateVla);
feedrateVla.value = 235.3;
UF_PARAM_set_subobj_ptr_value (operTag, UF_PARAM_FEED_CUT, &feedrateVla);
//生成程序
logical generated;
UF_PARAM_generate(operTag, &generated);
//刷新导航器
UF_UI_ONT_refresh();
return 0;
效果演示:
