将操作分配给磁贴
DCL 定义只不过是定义一个无生命的对话框。使用该函数将此死气沉沉的对话框连接到动态 AutoLISP 代码,如以下代码所示:action_tile ;; Assign actions (the functions to be invoked) to dialog buttons (action_tile "gp_lw" "(setq plineStyle \"Light\")" ) (action_tile "gp_hw" "(setq plineStyle \"Pline\")" ) (action_tile "gp_actx" "(setq objectCreateMethod \"ActiveX\")" ) (action_tile "gp_emake" "(setq objectCreateMethod \"Entmake\")" ) (action_tile "gp_cmd" "(setq objectCreateMethod \"Command\")" ) (action_tile "cancel" "(done_dialog) (setq UserClick nil)") (action_tile "accept" (strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))" "(setq tileSpace (atof (get_tile \"gp_spac\")))" "(done_dialog) (setq UserClick T))" ) ) 请注意 AutoLISP 代码周围的所有引号。当您编写 AutoLISP 函数时,您的代码实质上是在告诉一个磁贴,“在这里,记住这个字符串,然后在用户选择您时将其传回给我。字符串(双引号内的任何内容)将处于休眠状态,直到用户选择磁贴。此时,图块将字符串传递给 AutoCAD,AutoCAD 将字符串转换为正常运行的 AutoLISP 代码并执行代码。action_tile 例如,请考虑以下表达式,该表达式连接到轻量级折线单选按钮:action_tile (action_tile "gp_lw" "(setq plineStyle \"Light\")" ) 代码将字符串分配给单选按钮。当用户选取按钮时,字符串将传递回 AutoCAD 并直接转换为以下 AutoLISP 表达式:"(setq plineStyle \"Light\")" (setq plineStyle "Light") 再看一个代码片段。以下是分配给“确定”按钮的表达式:action_tile (action_tile "accept" (strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))" "(setq tileSpace (atof (get_tile \"gp_spac\")))" "(done_dialog) (setq UserClick T))" ) 当用户单击“确定”按钮时,分配给该按钮的冗长字符串将传递给 AutoCAD,并转换为以下 AutoLISP 代码: (progn (setq tileRad (atof (get_tile "gp_trad"))) (setq tileSpace (atof (get_tile "gp_spac"))) (done_dialog) (setq UserClick T) ) 此代码执行以下操作: 它从键值为 (图块半径)和(图块间距值)的图块中检索当前值。然后将数字字符串转换为实数。对话框随函数一起终止,并将值 或 true 分配给变量 。gp_tradgp_spacatofdone_dialogTUserClick 您已完成为按钮分配操作。接下来要做的就是让它全部动起来。 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 12:52
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.