Polyworks脚本开发学习笔记(十)-互动式开发及出错控制
第八章组合的各种命令,完成了一个对所选的测点名称进行命名的任务。但是,由于任务中没有交互环节,只能机械地将
曲面点 - 包边点改为Flush,以及包边点改为Gap。本次将通过交互式控制,灵活的完成重命名。
另外,在程序中加入对可能出错的位置检查,并提前控制,防止错误执行。
原始脚本及任务分析
version "5.0"
#定义变量数组获取所有比较点名称
DECLARE vArrPts
TREEVIEW COMPARISON_POINT NAME SELECTED GET ( vArrPts )
#循环改名
DECLARE i 1
WHILE $i<= SIZE (vArrPts)
DECLARE vStr $vArrPts[$i]
DECLARE vNewName
MACRO ECHO ($vArrPts[$i])
DECLARE vPos1
DECLARE vPos2
DECLARE vPtType1 "曲面点 - 包边点"
DECLARE vPtType2 "包边点"
#获取当前名称对应的索引号,获取不到则跳过本次循环
DECLARE vPtInd
TREEVIEW COMPARISON_POINT INDEX GET ($vStr,vPtInd)
IF $vPtInd==0
CONTINUE
ENDIF
#在名称中查找有没有"曲面点 - 包边点",有则返回位置vPos1大于0
MACRO STRING FIND_FIRST ( $vStr,$vPtType1,,vPos1 )
#在名称中查找有没有"曲面点",有则返回位置vPos2大于0
MACRO STRING FIND_FIRST ( $vStr,$vPtType2,,vPos2 )
IF $vPos1>0
#"曲面点 - 包边点"替换为"Gap"并重命名
MACRO STRING REPLACE ( $vStr,$vPtType1,"Flush",,,vNewName )
TREEVIEW COMPARISON_POINT NAME($vPtInd,$vNewName)
ELSEIF $vPos2>0
#"曲面点"替换为"Gap"并重命名
MACRO STRING REPLACE ( $vStr,$vPtType2,"Gap",,,vNewName )
TREEVIEW COMPARISON_POINT NAME($vPtInd,$vNewName)
ENDIF
++i
ENDWHILE
- 出错检查: 如果程序开始时,没有特征点被选择,则应该跳出程序,可增加一个判断
- 改名扩展到不止比较点COMPARISON_POINT还有特征FEATURE
- 将修改原始名称“曲面点 - 包边点” 该用输入字符串vStrOrName1代替,默认值为“曲面点 - 包边点”
- 将修改后名称用输入字符串vStrReplaceName1代替,默认值为“Flush”
- 增加一个“增加前缀“的功能,用媳妇换vStrPrefixName1,默认值为空“”
出错检测控制
version "5.0"
#定义变量数组获取所有比较点和特征点数量,如果数量和为0,则退出程序
DECLARE vArrComPts
DECLARE vNumArrComPts
DECLARE vArrFeats
DECLARE vNumArrFeats
TREEVIEW COMPARISON_POINT COUNT SELECTED GET ( vNumArrComPts )
TREEVIEW FEATURE COUNT SELECTED GET ( vNumArrFeats )
DECLARE vNumSelComPtsAndFeats EXPR_I ( $vNumArrComPts+$vNumArrFeats )
IF $vNumSelComPtsAndFeats==0
MACRO END ( "Error" )
ENDIF
扩展选择特征类型
将原有的比较点类型,增加特征类型
#如果选择比较点数量>0,则用vArrComPts接收比较点名称
IF $vNumArrComPts>0
TREEVIEW COMPARISON_POINT NAME SELECTED GET (vArrComPts)
ENDIF
#如果选择的特征数量>0,则用vArrFeats接收特征名称
IF $vNumArrFeats>0
TREEVIEW FEATURE NAME SELECTED GET (vArrFeats)
ENDIF
用互动方式设置重命名的参数
采用三个变量接收改名前后的字符串,采用互动对话框获取。获取后去除字符串前后空格。
增加错误检测,如果选择取消,则原始名称为空,退出脚本;如果改名后的字符串为空,则退出脚本。
#用互动方式设置重命名的参数,增加错误检测-如果原始名称或修改名称为空则报错退出运行
DECLARE vStrOrName1
DECLARE vStrOrName1Default "曲面点 - 包边点"
DECLARE vStrReplaceName1
DECLARE vStrReplaceName1Default "Flush"
DECLARE vStrPrefixName1
DECLARE vq1 {"批量修改名称:"}
DECLARE vA1 {"STRING","原始名称", $vStrOrName1Default,"STRING","修改名称",$vStrReplaceName1Default,"STRING","增加前缀", ""}
MACRO INPUT MULTIPLE_PARAMETERS ("修改名称设置", $vq1, $vA1, vStrOrName1, vStrReplaceName1,vStrPrefixName1)
MACRO STRING TRIM_SPACES ( $vStrReplaceName1,vStrReplaceName1)
MACRO STRING TRIM_SPACES ( $vStrPrefixName1,vStrPrefixName1)
IF $vStrOrName1==""
MACRO END ( "Error" )
ELSEIF $vStrReplaceName1==""
MACRO END ( "Error" )
ENDIF
对话框效果:
循环进行命名
用两个循环分别在比较点和特征中查找对应名称的对象,按照修改的参数进行重命名。
DECLARE i 1
#循环改名,先修改比较点的名称
IF $vNumArrComPts>0
SET i 1
WHILE $i<=$vNumArrComPts
DECLARE vStr1 $vArrComPts[$i]
DECLARE vNewName1
DECLARE vPos1
#获取当前名称对应的索引号,获取不到则跳过本次循环
DECLARE vPtInd1
TREEVIEW COMPARISON_POINT INDEX GET ($vStr1,vPtInd1)
IF $vPtInd1==0
CONTINUE
ENDIF
#在名称中查找有没有 vStrOrName1,有则返回位置vPos1大于0
MACRO STRING FIND_FIRST ( $vStr1,$vStrOrName1,,vPos1 )
IF $vPos1>0
#vStrOrName1替换为vStrReplaceName1并重命名
MACRO STRING REPLACE ( $vStr1,$vStrOrName1,$vStrReplaceName1,,,vNewName1 )
TREEVIEW COMPARISON_POINT NAME($vPtInd1,$vNewName1)
ENDIF
IF $vStrPrefixName1 != ""
TREEVIEW COMPARISON_POINT NAME GET ( $vPtInd1,vNewName1 )
SET vNewName1 "${vStrPrefixName1}_${vNewName1}"
TREEVIEW COMPARISON_POINT NAME($vPtInd1,$vNewName1)
ENDIF
++i
ENDWHILE
ENDIF
#循环改名,再修改特征点的名称
IF $vNumArrFeats>0
SET i 1
WHILE $i<=$vNumArrFeats
DECLARE vStr2 $vArrFeats[$i]
DECLARE vNewName2
DECLARE vPos2
#获取当前名称对应的索引号,获取不到则跳过本次循环
DECLARE vPtInd2
TREEVIEW FEATURE INDEX GET ($vStr2,vPtInd2)
IF $vPtInd2==0
CONTINUE
ENDIF
#在名称中查找有没有 vStrOrName1,有则返回位置vPos2大于0
MACRO STRING FIND_FIRST ( $vStr2,$vStrOrName1,,vPos2 )
IF $vPos2>0
#vStrOrName1替换为vStrReplaceName1并重命名
MACRO STRING REPLACE ( $vStr2,$vStrOrName1,$vStrReplaceName1,,,vNewName2 )
TREEVIEW FEATURE NAME($vPtInd2,$vNewName2)
ENDIF
IF $vStrPrefixName1 != ""
TREEVIEW FEATURE NAME GET ( $vPtInd2,vNewName2)
SET vNewName2 "${vStrPrefixName1}_${vNewName2}"
TREEVIEW FEATURE NAME($vPtInd2,$vNewName2)
ENDIF
++i
ENDWHILE
ENDIF
程序运行效果
当原始名称和修改名称不同时,程序能够批量查找并改名;
当前缀不为空时,程序可以为特征点批量增加前缀;
命令使用更加灵活,不易出错,健壮性更好。