» 您尚未 [登录 - 注册] ┆ 在线 ┆ 风格 ┆ 帮助 ┆ 


  您的位置: DMIS 空间-- -> DMIS 区 -> DMIS 心得 -> 宏(Macro)详解

您是本帖的第 8540 个阅读者 ┆
 贴子主题:宏(Macro)详解
爱科腾瑞客服性别:男<br>状态:离线<br>积时:1 年 5 个月 28 天 8 小时 51 分 3 秒
总版主
等级:总版主
头衔:未定义
帮派:未定义
帖数:342
金钱:2336
Y 币:12
注册:2008-8-6

[资料] [短信] [编辑] [引用] [管理员邮箱] 楼主

宏(Macro)详解

Macro是DMIS中类似于定义一个函数,可以传递一些参数,我们可以这样来理解宏.

我们新做了一个函数,通过CALL来输入对应的参数,即可完成设计的功能.

例如,之前论坛上有一个写曲线投影到平面的程序,大概程序的结构为

    定义一个宏,假设为M(SSJ)

    CALL/M(SSJ),'FA(GCV1)','FA(PLN1)'

    那么在定义这个宏语句的时候,只需要两个参数:曲线的标签名和投影平面的标签名.

    其它的计算和处理都在前面所定义的宏中完成.

    宏的好处不言而喻,他使得程序的通用性更强,更模块化,更利于查错.

    宏定义的语法为:M(LABEL) = Macro/varname,'lable'

                            ENDMAC

    以一个简单例子说明

    输出圆CIR1的直径\X坐标\Y坐标\Z坐标

    通常我们的语句为

    DECL/COMMON,DOUBLE,DATAC[4]

    DATAC[1] = OBTAIN/FA(CIR1),4

    DATAC[2] = OBTAIN/FA(CIR1),5

    DATAC[3] = OBTAIN/FA(CIR1),6

    DATAC[4] = OBTAIN/FA(CIR1),10

    WRITE/DID(DEFAULTSCREEN),DATAC[1]

    WRITE/DID(DEFAULTSCREEN),DATAC[2]

    WRITE/DID(DEFAULTSCREEN),DATAC[3]

    WRITE/DID(DEFAULTSCREEN),DATAC[4]

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

但是如果这个用宏定义来做,语句是这样

  M(demo) = MACRO/'CIR1'

    DECL/COMMON,DOUBLE,DATAC[4]

    DATAC[1] = OBTAIN/FA(CIR1),4

    DATAC[2] = OBTAIN/FA(CIR1),5

    DATAC[3] = OBTAIN/FA(CIR1),6

    DATAC[4] = OBTAIN/FA(CIR1),10

    WRITE/DID(DEFAULTSCREEN),DATAC[1]

    WRITE/DID(DEFAULTSCREEN),DATAC[2]

    WRITE/DID(DEFAULTSCREEN),DATAC[3]

    WRITE/DID(DEFAULTSCREEN),DATAC[4]

ENDMAC

CALL/M(demo),(CIR1)

表面上来看,结果没有变,但是代码好象增多了.

如果同样我需要输出CIR2的这些值,我不需要再修改源程序,只需要将CALL语句中的CIR1替换为CIR2即可.

但是如果是第一种代码,我们需要把所有的CIR1替换为CIR2,不仅不方便,而且容易出错.

我再需要输出其它圆的这几项实际值,只需要调用这个宏M(demo)即可以,不用重复再去写代码,保证程序的模块化.

PS: 宏定义的参数有两种,标签名和变量.

在用CALL语句做调用时,同样也只有两种参数.

定义的时候标签名为单引号,变量没有什么限制,例如 M(demo) = macro/'CIR1',tempchar

调用宏的时候,标签名为括号,变量无限制,例如CALL/M(demo),(CIR1),tempstring

宏在测量程序上的很有意义,很多写好的程序,可以用宏的方式写出来,方便以后做调用,节省不必要的代码工作.

   

「该帖子被 爱科腾瑞客服 在 2009-1-6 16:43:01 编辑过」



------------------------------------------------------------------------
爱科腾瑞(北京)有限公司
2009-1-6 16:39:03
IP
雨人性别:男<br>状态:离线<br>积时:1 天 1 小时 33 分 14 秒
新兵
等级:新兵
头衔:未定义
帮派:未定义
帖数:31
金钱:84
Y 币:0
注册:2008-11-14

[资料] [短信] [编辑] [引用] [管理员邮箱] 1



哦,其实宏就是个功能函数块!


------------------------------------------------------------------------
DMIS 空间--欢迎您!
2009-1-9 11:47:09
IP ×
计量新生性别:男<br>状态:离线<br>积时:10 小时 1 分 53 秒
新兵
等级:新兵
头衔:未定义
帮派:未定义
帖数:28
金钱:207
Y 币:0
注册:2008-12-3

[资料] [短信] [编辑] [引用] [管理员邮箱] 2



是啊!往往一些客户的特殊要求,都可以编写好程序,最后打包成外部宏,嵌入到软件里。用起来就很方便了!我就遇到过,一批图纸上的圆锥给的基本参数跟DMIS规定的参数不一样,所以编写一个宏,把简单的算法写进去,再定义时,就很方便了。


------------------------------------------------------------------------
新手,多多指教
2009-1-23 9:13:13
IP ×
zlzl521521性别:男<br>状态:离线<br>积时:11 个月 18 天 2 小时 29 分 54 秒
论坛贵宾
等级:论坛贵宾
头衔:未定义
帮派:未定义
帖数:202
金钱:1421
Y 币:0
注册:2008-8-8

[资料] [短信] [编辑] [引用] [管理员邮箱] 3



这个不错~


------------------------------------------------------------------------
关于精神病人的上网问题一直是我国治安管理条例中的空白.
2009-7-9 14:30:00
IP ×
小宝宝性别:男<br>状态:离线<br>积时:2 年 2 个月 5 天 7 小时 29 分 15 秒
新兵
等级:新兵
头衔:未定义
帮派:未定义
帖数:83
金钱:118
Y 币:0
注册:2010-7-22

[资料] [短信] [编辑] [引用] [管理员邮箱] 4



请教下能不能让 M(demo) = MACRO/'CIR1'   变成 M(demo) = MACRO/'@tempstring'

与 I变量   合起来用可以吗?

MODE/AUTO,PROG,MAN

DECL/COMMON,INTGR,i

DECL/COMMON,CHAR,20,K,TEMPSTRING

DO/i,1,10,1

  k = assign/str(i)

  tempstring = assign/concat('cir',k)

  F(@tempstring) = Feat/circle,outer,cart,0,0,0,0,0,1,25

  MEAS/circle,F(@tempstring),4

  ENDMES

ENDDO



------------------------------------------------------------------------
我是初学者,大哥们,请多多指教,谢谢了
2011-10-11 14:08:52
IP ×
爱科腾瑞客服性别:男<br>状态:离线<br>积时:1 年 5 个月 28 天 8 小时 51 分 3 秒
总版主
等级:总版主
头衔:未定义
帮派:未定义
帖数:342
金钱:2336
Y 币:12
注册:2008-8-6

[资料] [短信] [编辑] [引用] [管理员邮箱] 5



没试过…………


------------------------------------------------------------------------
爱科腾瑞(北京)有限公司
2011-10-11 16:01:30
IP ×
漫随流水性别:女<br>状态:离线<br>积时:1 个月 18 天 7 小时 2 分 32 秒
少校
等级:少校
头衔:未定义
帮派:未定义
帖数:84
金钱:941
Y 币:0
注册:2009-7-3

[资料] [短信] [编辑] [引用] [管理员邮箱] 6



不知道为什么,两种语句都是要把CIR1改成CIR2 才有用


------------------------------------------------------------------------
DMIS 空间--欢迎您!
2014-8-13 16:41:09
IP ×
天涯海角性别:男<br>状态:离线<br>积时:1 个月 7 天 18 小时 10 分 52 秒
下士
等级:下士
头衔:未定义
帮派:未定义
帖数:14
金钱:100
Y 币:0
注册:2014-10-1

[资料] [短信] [编辑] [引用] [管理员邮箱] 7



受教了 !!!!


------------------------------------------------------------------------
DMIS 空间--欢迎您!
2014-10-1 19:46:59
IP ×
nihao性别:男<br>状态:离线<br>积时:18 分 53 秒
下士
等级:下士
头衔:未定义
帮派:未定义
帖数:11
金钱:66
Y 币:0
注册:2018-10-12

[资料] [短信] [编辑] [引用] [管理员邮箱] 8



受教了 !!!!


------------------------------------------------------------------------
讨债公司

网站制作

搬家公司
2018-10-12 18:54:54
IP ×
 每页10条,共1页,合计9条记录分页:« 1 »转到  


爱科腾瑞(北京)有限公司