首页 > 编程学习 > Polyworks脚本开发学习笔记(十)-互动式开发及出错控制

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 vNewNameMACRO ECHO ($vArrPts[$i])DECLARE vPos1DECLARE vPos2DECLARE vPtType1 "曲面点 - 包边点"DECLARE vPtType2 "包边点"#获取当前名称对应的索引号,获取不到则跳过本次循环DECLARE vPtIndTREEVIEW COMPARISON_POINT INDEX GET ($vStr,vPtInd)IF $vPtInd==0 CONTINUEENDIF#在名称中查找有没有"曲面点 - 包边点",有则返回位置vPos1大于0MACRO STRING FIND_FIRST ( $vStr,$vPtType1,,vPos1 )#在名称中查找有没有"曲面点",有则返回位置vPos2大于0MACRO 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
  1. 出错检查: 如果程序开始时,没有特征点被选择,则应该跳出程序,可增加一个判断
  2. 改名扩展到不止比较点COMPARISON_POINT还有特征FEATURE
  3. 将修改原始名称“曲面点 - 包边点” 该用输入字符串vStrOrName1代替,默认值为“曲面点 - 包边点”
  4. 将修改后名称用输入字符串vStrReplaceName1代替,默认值为“Flush”
  5. 增加一个“增加前缀“的功能,用媳妇换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>0TREEVIEW COMPARISON_POINT NAME SELECTED GET (vArrComPts)
ENDIF
#如果选择的特征数量>0,则用vArrFeats接收特征名称
IF $vNumArrFeats>0TREEVIEW FEATURE NAME SELECTED GET (vArrFeats)
ENDIF

用互动方式设置重命名的参数

采用三个变量接收改名前后的字符串,采用互动对话框获取。获取后去除字符串前后空格。
增加错误检测,如果选择取消,则原始名称为空,退出脚本;如果改名后的字符串为空,则退出脚本。

#用互动方式设置重命名的参数,增加错误检测-如果原始名称或修改名称为空则报错退出运行
DECLARE vStrOrName1 
DECLARE vStrOrName1Default   "曲面点 - 包边点"
DECLARE vStrReplaceName1 
DECLARE vStrReplaceName1Default "Flush"
DECLARE vStrPrefixName1DECLARE 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>0SET i 1WHILE $i<=$vNumArrComPtsDECLARE vStr1 $vArrComPts[$i]DECLARE vNewName1DECLARE vPos1#获取当前名称对应的索引号,获取不到则跳过本次循环DECLARE vPtInd1TREEVIEW COMPARISON_POINT INDEX GET ($vStr1,vPtInd1)IF $vPtInd1==0 CONTINUEENDIF#在名称中查找有没有 vStrOrName1,有则返回位置vPos1大于0MACRO STRING FIND_FIRST ( $vStr1,$vStrOrName1,,vPos1 )IF $vPos1>0#vStrOrName1替换为vStrReplaceName1并重命名MACRO STRING REPLACE ( $vStr1,$vStrOrName1,$vStrReplaceName1,,,vNewName1 )TREEVIEW COMPARISON_POINT NAME($vPtInd1,$vNewName1)ENDIFIF $vStrPrefixName1 != ""TREEVIEW COMPARISON_POINT NAME GET ( $vPtInd1,vNewName1 )SET vNewName1 "${vStrPrefixName1}_${vNewName1}"TREEVIEW COMPARISON_POINT NAME($vPtInd1,$vNewName1)ENDIF++iENDWHILE
ENDIF
#循环改名,再修改特征点的名称
IF $vNumArrFeats>0SET i 1WHILE $i<=$vNumArrFeatsDECLARE vStr2 $vArrFeats[$i]DECLARE vNewName2DECLARE vPos2#获取当前名称对应的索引号,获取不到则跳过本次循环DECLARE vPtInd2TREEVIEW FEATURE INDEX GET ($vStr2,vPtInd2)IF $vPtInd2==0 CONTINUEENDIF#在名称中查找有没有 vStrOrName1,有则返回位置vPos2大于0MACRO STRING FIND_FIRST ( $vStr2,$vStrOrName1,,vPos2 )IF $vPos2>0#vStrOrName1替换为vStrReplaceName1并重命名MACRO STRING REPLACE ( $vStr2,$vStrOrName1,$vStrReplaceName1,,,vNewName2 )TREEVIEW FEATURE NAME($vPtInd2,$vNewName2)ENDIFIF $vStrPrefixName1 != ""TREEVIEW FEATURE NAME GET ( $vPtInd2,vNewName2)SET vNewName2 "${vStrPrefixName1}_${vNewName2}"TREEVIEW FEATURE NAME($vPtInd2,$vNewName2)ENDIF++iENDWHILE
ENDIF

程序运行效果

当原始名称和修改名称不同时,程序能够批量查找并改名;
当前缀不为空时,程序可以为特征点批量增加前缀;
命令使用更加灵活,不易出错,健壮性更好。


本文链接:https://www.ngui.cc/zz/1918283.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000