51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

PowerMill二次开发(宏编程实战篇)---模型螺丝孔特征及通孔延伸功能实现

功能说明:

1、在指定的方向上将模型上的螺丝孔特征识别出来'

2、将所有孔特征进行产生,识别出倒扣孔并将其删除。

3、将通孔进行延伸加长刀具半径加上2毫米。

创作艰辛期待您的点赞加收藏。

作者在此感谢您的阅读。谢谢!

处理完成最终效果图:

过程运用了非常巧妙的过切测算技巧技术,阅读后,各位朋友可以引用借鉴到别的场景。有需要的可以原文复制,删除注释行,自行修改为己用。

//******以下开始执行方法并附上解析------Start

//这里需要关闭信息框和错误报警框

DIALOGS MESSAGE OFF

DIALOGS ERROR OFF

//先判断是否存在文件夹,防止是第二次或多次运行时文件夹内部的特征产生干扰

If folder_exists('Featureset\WS') {

DELETE FEATURESET FOLDER "Featureset\WS"

}

//定义特征名称的基础名称

string $Featureset_basename = 'TG'

string $stay_featuerset = $Featureset_basename + '1'

//构建特征名称变量

string $fold_name = 'WS'

string $fold_name_path = 'Featureset\WS'

//判定是否存在刀具Tee, 也可以这样写 if entity_exists('Tool','tee') == 1

if pathname('tool','tee') !="" {

} else {

//这里创建一把刀具 名称tee,可以省略FORM TOOL 不需要弹窗

CREATE TOOL "tee" DRILL FORM TOOL

EDIT TOOL "tee" DIAMETER "8"

TOOL ACCEPT

}

//不激活特征

DEACTIVATE Featureset

//在特征管理器内创建 文件夹$fold_name = 'WS'

CREATE FOLDER "Featureset" $fold_name

//将文件夹激活

ACTIVATE FOLDER $fold_name_path

//方法执行所有模型曲面选中,先不选择 取消隐藏 再选中所有模型

//所有模型不选择

EDIT MODEL ALL DESELECT ALL

//取消隐藏

BLANK UNDO

//选择所有模型曲面

EDIT MODEL ALL SELECT ALL

//以下是录制了产生特征的过程宏命令

EDIT FEATURECREATE TYPE HOLE EDIT FEATURECREATE CIRCULAR ON EDIT FEATURECREATE FILTER HOLES FEATURECREATE

EDIT FEATURECREATE TYPE HOLE EDIT FEATURECREATE CIRCULAR ON

EDIT FEATURECREATE FILTER HOLES EDIT FEATURECREATE TOPDEFINE ABSOLUTE EDIT FEATURECREATE BOTTOMDEFINE ABSOLUTE

EDIT FEATURECREATE HOLES FIXED OFF

EDIT FEATURECREATE HOLES FIXED ON

EDIT FEATURECREATE HOLES COMPOUND ON

EDIT FEATURECREATE HOLES COMPOUND Off

EDIT FEATURECREATE HOLES OPEN ON

EDIT FEATURECREATE HOLES OPEN Off

EDIT FEATURECREATE HOLES CAPPED INCLUDE

EDIT FEATURECREATE HOLES CAPPED EXCLUDE

EDIT OPTIONS CLOSETOL "0.01"

EDIT FEATURESET ; INSERT POINTS

//以下语句 取消选择模型

EDIT MODEL ALL DESELECT ALL

//如果存在烂面导致产生,孔特征反向

if pathname('level','Bad Surfaces') != "" {

EDIT MODEL ALL DESELECT ALL

EDIT LEVEL "Bad Surfaces" SELECT ALL

DELETE MODEL SELECTED

DELETE LEVEL EMPTY

//将产生在文件夹内的所有孔特征删除

FOREACH RRT IN folder($fold_name_path) {

DELETE FEATURESET $RRT.NAME

}

//重复一遍产生特征过程 解析如上

EDIT MODEL ALL DESELECT ALL

BLANK UNDO

EDIT MODEL ALL SELECT ALL

EDIT FEATURECREATE TYPE HOLE EDIT FEATURECREATE CIRCULAR ON EDIT FEATURECREATE FILTER HOLES FEATURECREATE

EDIT FEATURECREATE TYPE HOLE EDIT FEATURECREATE CIRCULAR ON

EDIT FEATURECREATE FILTER HOLES EDIT FEATURECREATE TOPDEFINE ABSOLUTE EDIT FEATURECREATE BOTTOMDEFINE ABSOLUTE

EDIT FEATURECREATE HOLES FIXED OFF

EDIT FEATURECREATE HOLES FIXED ON

EDIT FEATURECREATE HOLES COMPOUND ON

EDIT FEATURECREATE HOLES COMPOUND Off

EDIT FEATURECREATE HOLES OPEN ON

EDIT FEATURECREATE HOLES OPEN OFF

EDIT FEATURECREATE HOLES CAPPED INCLUDE

EDIT FEATURECREATE HOLES CAPPED EXCLUDE

EDIT OPTIONS CLOSETOL "0.01"

EDIT FEATURESET ; INSERT POINTS

EDIT MODEL ALL DESELECT ALL

}

//如果存在烂面导致产生,孔特征反向

//运行到这里将看到如下图示意效果

//定义一个变量A1 并赋值为1

INT A1 = 1

//这里需要读取一下WS文件夹内的特征 将知道是1和2 ,使用了Foreach循环结构

FOREACH FT IN folder($fold_name_path) {

//激活特征

ACTIVATE Featureset $FT

//定义特征名称变量赋值给到NA ,通过基础的名称

STRING NA = $Featureset_basename+$A1

//如下图变量调试情况

//重命名特征

RENAME Featureset ; $NA

//这里导入一个基础的ptf策略模板

IMPORT TEMPLATE ENTITY TOOLPATH TMPLTSELECTORGUI "Drilling\Drilling.ptf"

//将刀轨重命名为TEST_DER,目的是为了好认和操作

RENAME Toolpath ; "TEST_DER"

//激活刀具tee

ACTIVATE Tool "tee"

//执行特征的钻孔计算

EDIT TOOLPATH ; CALCULATE

//接受刀轨表格

FORM ACCEPT DrillMain

//判断一下是否计算过程产生了坏曲面分离出来

if pathname('level','Bad Surfaces') != "" {

//如果存在坏曲面层 则将其删除掉

EDIT MODEL ALL DESELECT ALL

EDIT LEVEL "Bad Surfaces" SELECT ALL

DELETE MODEL SELECTED

DELETE LEVEL EMPTY

//如果存在坏曲面层 则将其删除掉

}

//判断当前激活的路径刀轴方向是否是垂直的

if toolaxis.type == "vertical" {

//如果是垂直的情况 则这个特征是这个坐标系的 是我们需要的特征

//删除测算的刀具路径

DELETE TOOLPATH "TEST_DER"

//重命名特征

RENAME Featureset ; $stay_featuerset

} ELSE {

//如果是不垂直刀轴情况,说明特征的方向是反向,是对面的,不是我们要找的特征

//我们将其删掉

DELETE FEATURESET $NA

//删除掉测算导入额路径 放置下一次调任后重命名产生冲突

DELETE TOOLPATH "TEST_DER"

}

//变量要循环移除加1,防止名称重复

$A1 = $A1 + 1

}

//保证孔朝上---以上是保障找到坐标系下的特征,运行完成后效果图,WS文件夹仅剩下我们需要的特征,并进行了特征重命名为TG1

//叠加孔---以下是进行叠加孔操作指令

//申请一个变量A3并赋值给0

INT A3 = 0

//采用一个Foreach循环读取特征文件夹WS内的特征数量,通过循环的计次变量A3判断特征的数量

FOREACH FT IN folder($fold_name_path) {

//没循环异常计数变量加1

$A3 = $A3 + 1

}

//判断计数变量的数值大小,如果超过了1,说明文件夹WS内的特征数量超过了1个

IF $A3 > 1 {

//申请变量A2并赋值2

INT A2 = 2

//采用Foreah循环读取文件夹WS内的特征

FOREACH FT IN folder($fold_name_path) {

//这里需要判断 不是第一个特征的才叠加 ,意思是将第1个之后的特征叠加到第1个特征.

If $FT.name != $stay_featuerset {

STRING DJ = $Featureset_basename+$A2

//执行叠加特征命令

EDIT FEATURESET $stay_featuerset INSERT FEATURESET $DJ LAST

//叠加进去特征后删除特征

DELETE FEATURESET $DJ

//计数变量自加1

$A2 = $A2 + 1

}

}

}

//叠加孔---以上完成了将多个特征叠加到一个特征上的功能

//分类孔-以下是进行从叠加的特征中进行分类

//不显示特征$stay_featuerset

UNDRAW Featureset $stay_featuerset

//激活特征

ACTIVATE FEATURESET $stay_featuerset

//将刀具tee删除

DELETE Tool "tee"

//产生必要的分类特征名称

//***-螺孔特征名称,构建基础名称

string LK = $Featureset_basename + '_LK'

//判断是否存名称为变量LK的特征

if pathname('featureset',$LK) == '' {

//创建这个特征出来

CREATE IN $fold_name_path FEATURESET $LK

}

//运行到此的效果图如下

//不显示特征$stay_featuerset

UNDRAW Featureset $stay_featuerset

//激活特征

ACTIVATE FEATURESET $stay_featuerset

//************以下是识别穿透模型的特征孔,将其删除,如下图,这个特征孔方向与Z方向正向相同,但是特征顶部以上不是闪开的模型口,意思进行这个孔特征加工时,钻头贯穿整个孔特征顶部的模型,钻穿模型,这种是不允许的,我们所以将其找出并删除。

//判断是否存在刀具tee的语句命令

if pathname('tool','tee') !="" {

//存在则进行以下处理

//先将其删除

DELETE Tool "tee"

//创建出来钻头tee

CREATE TOOL "tee" DRILL FORM TOOL

//编辑设置直径为3.4,可以是其他的数值

EDIT TOOL "tee" DIAMETER "3.4"

//编辑钻头的角度为89.999,无限接近90度

EDIT TOOL "tee" TAPERANGLE "89.999"

TOOL ACCEPT

} else {

//不存在则进行以下处理

//创建出来钻头tee

CREATE TOOL "tee" DRILL FORM TOOL

//编辑设置直径为3.4,可以是其他的数值

EDIT TOOL "tee" DIAMETER "3.4"

//编辑钻头的角度为89.999,无限接近90度

EDIT TOOL "tee" TAPERANGLE "89.999"

TOOL ACCEPT

}

//初始化这些碰撞表格参数

FORM COLLISION

EDIT COLLISION TYPE GOUGE

EDIT COLLISION SPLIT_TOOLPATH N

EDIT COLLISION SCOPE ALL

EDIT PAR 'Verification.UseVerificationThickness' '1'

EDIT PAR 'Verification.UseAxialThickness' '0'

EDIT PAR 'Verification.Thickness' '-0.2'

COLLISION ACCEPT

//如下图示意

//以下我们同样采用Foreach循环进行读取WS文件夹内的特征$stay_featuerset的每一个孔

foreach rr in components(entity('featureset',$stay_featuerset)) {

//判断是否存在测算的刀轨路径TEST_DER

if pathname('toolpath','TEST_DER') != '' {

//如果存在则将其删除

DELETE Toolpath 'TEST_DER'

}

//这里先对特征$stay_featuerset(即TG1特征)的孔取消选择

EDIT FEATURESET $stay_featuerset DESELECT ALL

//这里先对特征$stay_featuerset(即TG1特征)的孔选择名为$rr.name的孔

EDIT FEATURESET $stay_featuerset SELECT $rr.name

//运行到此后的效果图如下,特征中选中了黄色的孔

//这里导入钻孔模板

IMPORT TEMPLATE ENTITY TOOLPATH TMPLTSELECTORGUI "Drilling\Drilling.ptf"

//编辑模板的余量为负余量0.75

EDIT PAR 'Thickness' "-0.75"

//编辑连接的数值

EDIT TOOLPATH LEADS LINK THRESHOLD "10"

//命名当前刀具路径名称为TEST_DER

RENAME Toolpath ; "TEST_DER"

//设置钻孔深度方式为钻到孔深

EDIT DRILL DEPTH HOLE

//修改刀具tee的直径为孔的直径减去0.08 防止刀具碰到模型

EDIT TOOL "tee" DIAMETER "$rr.diameter-0.08"

//激活刀具tee

ACTIVATE Tool "tee"

//检查是否存在坏曲面

if pathname('level','Bad Surfaces') != "" {

//如果存在坏曲面则进行以下删除过程命令

EDIT MODEL ALL DESELECT ALL

EDIT LEVEL "Bad Surfaces" SELECT ALL

DELETE MODEL SELECTED

DELETE LEVEL EMPTY

}

//定义一个变量new_fet1,令他等于特征管理器内即将新产生的特征名称

string new_fet1 = new_entity_name('featureset',$stay_featuerset)

//赋值特征TG1选择的孔为新特征

COPY FEATURESET $stay_featuerset SELECTED

//复制完成后 新产生的特征中只有一个孔 产生的特征名称叫做$new_fet1

//激活复制出来的特征$new_fet1

ACTIVATE Featureset $new_fet1

//执行这个特征钻孔路径计算

EDIT TOOLPATH ; CALCULATE

//接收路径窗体表格

FORM ACCEPT DrillMain

//计算生成出来刀轨后可删除复制产生的特征$new_fet1

DELETE Featureset $new_fet1

//删除后可将资源回收站中的特征进行清除,以防止重复操作导致回收资源站元素过多,影响软件计算效率

EDIT RECYCLER DELETE Featureset ALL

//接着激活TG1特征

ACTIVATE Featureset $stay_featuerset

//取消特征选择的孔

EDIT FEATURESET $stay_featuerset DESELECT ALL

//令特征选择孔$rr.name

EDIT FEATURESET $stay_featuerset SELECT $rr.name

//以下过切检查---这是非常关键的一步操作---对路径进行过切检查分析

//定义一个变量名称$nam,令它等于刀具路径资源管理器内即将产生的新路径的名称

string $nam = entity('toolpath','').name

//执行过切检查

FORM COLLISION

EDIT COLLISION APPLY

COLLISION ACCEPT

//*****[1]

//判断刀具路径是否是过切状态

if STRING(toolpath.safety.tool.cutting.status) == 'collides' {

//如果是则是对穿模型的孔要将其删除

//删除路径

DELETE Toolpath $nam

//删除特征$stay_featuerset上选择的孔

DELETE FEATURESET $stay_featuerset SELECTED

} else {

//如果不是,则是我们需要的孔特征

//判断以下孔的拔模角度

if $rr.draft < 0.05 {

//如果拔模角度小于0.05 则执行以下命令

//赋值过切检查窗体参数

FORM COLLISION

EDIT COLLISION TYPE GOUGE

EDIT COLLISION SPLIT_TOOLPATH N

EDIT COLLISION SCOPE ALL

EDIT PAR 'Verification.UseVerificationThickness' '1'

EDIT PAR 'Verification.UseAxialThickness' '0'

EDIT PAR 'Verification.Thickness' '-0.02'

COLLISION ACCEPT

//先不把螺丝孔节识别出来

//失效计算完成的刀具路径

INVALIDATE TOOLPATH "TEST_DER"

//设置余量为0

EDIT PAR 'Thickness' "0"

//执行计算

EDIT TOOLPATH ; CALCULATE

//执行过切检查

FORM COLLISION

EDIT COLLISION APPLY

COLLISION ACCEPT

//定义一个变量tt1,并赋值为0

int tt1 = 0

//判断刀具路径过切状态

if STRING(toolpath.safety.tool.cutting.status) == 'collides' {

//如果是过切状态,则执行以下过程,过切时说明是螺丝孔特征

//定义一个变量temp_copy_featurest_name并赋值为特征资源管理器内新产生特征名称。

string temp_copy_featurest_name = new_entity_name('Featureset',$stay_featuerset)

//复制特征$stay_featuerset(TG1)选择的特征

COPY FEATURESET $stay_featuerset SELECTED

//将复制出来的特征叠加到螺丝孔这个特征中

//如下图示:

//将找到的螺丝孔特征叠加到$LK特征中

EDIT FEATURESET $LK INSERT FEATURESET $temp_copy_featurest_name LAST

//叠加完成后删除复制出的特征$temp_copy_featurest_name

DELETE Featureset $temp_copy_featurest_name

//删除特征$stay_featuerset选择的特征

DELETE FEATURESET $stay_featuerset SELECTED

//赋值变量$tt1令其等于1

$tt1 = 1

}

//如果$tt1的值是0,说明这个特征没有倒扣结构,不是螺丝孔特征

if $tt1 == 0 {

//如果不是螺丝孔特征的执行以下过程指令

//定义一个变量$jt_hong,并另其等于这个选中孔的底部值

real $jt_hong = $rr.BOTTOM

//判断如果底部值

if $rr.BOTTOM > 0 {

//如果底部值大于0则执行赋值$jt_hong为孔的底部减去孔的直径的0.52再减去2,即加深孔数值

$jt_hong = $rr.BOTTOM - $rr.diameter*0.52 - 2

} else {

//如果底部值小于或等于0则按以下算法算出加深孔的底部位置值

$jt_hong = $rr.BOTTOM + $rr.diameter*0.52 + 2

}

//定义一个变量,并赋值为孔现阶段的底部值

real jt_org = $rr.BOTTOM

//修改底部数值

EDIT FEATURESET ; BOTTOM $jt_hong

//失效刀具路径

INVALIDATE TOOLPATH "TEST_DER"

//设置余量数为0

EDIT PAR 'Thickness' "0"

//执行路径计算

EDIT TOOLPATH ; CALCULATE

//执行过切检查

FORM COLLISION

EDIT COLLISION APPLY

COLLISION ACCEPT

//判断刀具路径的过切状态

if STRING(toolpath.safety.tool.cutting.status) == 'collides' {

//如果是过切状态,则将孔的底部数值改为原来的底部值,说明不能被加长延伸。

EDIT FEATURESET ; BOTTOM $jt_org

}

//此处如果不是过切状态,说明孔底部被修改加长成$jt_hong是可以的,不做任何处理,延长孔成功。

}

}

}

//*****[1]

//判断是否存在刀具路径TEST_DER

if pathname('toolpath','TEST_DER') != '' {

//这里是存在的情况,执行以下指令,将其删除

DELETE Toolpath 'TEST_DER'

}

}

//判断刀具tee是否存在

if pathname('tool','tee') !="" {

//这里是存在的情况,执行以下指令,将其删除

DELETE Tool "tee"

}

//******以上方法结束------End

赞(4)
未经允许不得转载:工具盒子 » PowerMill二次开发(宏编程实战篇)---模型螺丝孔特征及通孔延伸功能实现