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 或 true。gp_tradgp_spacatofdone_dialogTUserClick 您已完成为按钮分配操作。接下来要做的是让这一切付诸行动。 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:39
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.