CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoLISP 开发指南

将操作分配给磁贴

2023-1-5 07:47| 发布者: admin| 查看: 336| 评论: 0|来自: AutoCAD

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

您已完成为按钮分配操作。接下来要做的是让这一切付诸行动。


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 16:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部