社区活动 技术论坛 二次开发,有看得懂的帮我优化一下
二次开发,有看得懂的帮我优化一下
2011-05-30 17:04 59 0 11
Sub main() Dim app As Object Set app = CreateObject("pcdlrn.application") Dim part As Object Set part = app.ActivePartProgram Dim cmds As Object Set cmds = part.Commands Dim cmd As Object Dim theoTZ As Double Dim arr(10000) As Single Dim i As Integer i = 1 For Each cmd In cmds If cmd.IsMeasuredFeature Or cmd.IsDCCFeature Then theoTZ = cmd.GetText(THEO_Z, 0) arr(i) = theoTZ End If i = i + 1 Next cmd Set cmd = cmds.Add(ASSIGNMENT, True) abc = cmd.PutText("MAXTZ1", DEST_EXPR, 0) abc = cmd.PutText(max(arr), SRC_EXPR, 0) End Sub Function max(a() As Single) As Single Dim bb As Integer, pp As Single pp = a(1) For bb = 2 To UBound(a) If pp < a(bb) Then pp = a(bb) Next bb max = pp End Function -------------------------------------------------------------- 以上代码中,有谁能帮我把数组长度改为变量,也就是说改为当前程序下手动和自动特征个数的总和,谢谢!
我要回复

登陆后才能评论

登录
所有回贴(11)
Sub main() Dim app As Object Set app = CreateObject("pcdlrn.application") Dim part As Object Set part = app.ActivePartProgram Dim cmds As Object Set cmds = part.Commands Dim cmd As Object Dim theoTZ As Double Dim arr(10000) As Single Dim i As Integer i = 1 For Each cmd In cmds If cmd.IsMeasuredFeature Or cmd.IsDCCFeature Then theoTZ = cmd.GetText(THEO_Z, 0) arr(i) = theoTZ End If i = i + 1 Next cmd Set cmd = cmds.Add(ASSIGNMENT, True) abc = cmd.PutText("MAXTZ1", DEST_EXPR, 0) abc = cmd.PutText(max(arr), SRC_EXPR, 0) End Sub Function max(a() As Single) As Single Dim bb As Integer, pp As Single pp = a(1) For bb = 2 To UBound(a) If pp < a(bb) Then pp = a(bb) Next bb max = pp End Function -------------------------------------------------------------- 以上代码中,有谁能帮我把数组长度改为变量,也就是说改为当前程序下手动和自动特征个数的总和,谢谢!
2011-05-30 17:04
回复
取消
提交
好像是取得所有自动特征的理论值Z值的最大值。然后在程序末尾加了一个赋值语句,将该值放到MAXTZ1里面。然后用了一个遍历查找最大值的方法。 添加Assignment的命令的那个用法我也是第一次看到。 其实可以在第一遍循环里面就可以用一个临时值存储最大值,到后面直接调用这个值就行了。现在需要遍历两遍,效率低。
2011-05-30 17:13
回复
取消
提交
可以不用数组依然可以解决问题啊,为啥要用?
2011-05-30 17:15
回复
取消
提交
楼上果然是高手,呵呵!
2011-05-30 17:17
回复
取消
提交
哦,我懂了,谢谢!
2011-05-30 17:17
回复
取消
提交
我的意思是在第一遍遍历pcdmis命令的过程中,你就可以统计各种命令的个数,以及临时存放最大值。
2011-05-30 17:21
回复
取消
提交
一起学习啊~赞楼主每次都给出新例子新思路!
2011-05-30 17:25
回复
取消
提交
可以了,非常感谢楼上! ------------------------------------------------------- Private Sub Form_load() Dim app As Object Set app = CreateObject("pcdlrn.application") Dim part As Object Set part = app.ActivePartProgram Dim cmds As PCDLRN.Commands Set cmds = part.Commands Dim cmd As PCDLRN.Command Dim theoTZ As Double maxaa = -1000000 For Each cmd In cmds If cmd.IsMeasuredFeature Or cmd.IsDCCFeature Then theoTZ = cmd.GetText(THEO_Z, 0) End If If theoTZ > maxaa Then maxaa = theoTZ End If Next cmd Set cmd = cmds.Add(ASSIGNMENT, True) abc = cmd.PutText("MAXTZ1", DEST_EXPR, 0) abc = cmd.PutText(maxaa, SRC_EXPR, 0) Unload Me End Sub ------------------------------------------------------------- 不要函数了,也不要数组了,呵呵!
2011-05-30 17:30
回复
取消
提交
有好的东东,你我都贴出来分享一下,共同进步嘛! 其实这论坛里面不乏高手,只是他们不愿分享他们的成果而已! 自私的人就守着他那点微不足道的成绩,永远得不到别人的尊重!
2011-05-30 19:25
回复
取消
提交
我还是比较认可楼主的模块化写法,用数组也可以啊,定义数组个数为arr(cmds.count),这样要比定义常量数组好些
2011-05-30 22:48
回复
取消
提交
在线咨询
关注我们

海克斯康制造智能

电话咨询
400-6580-400

热线电话(工作时间8:30-17:30)

关注我们 电话咨询 在线咨询

海克斯康制造智能