明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: XTdwynij

[函数] read的应用之无限命令

[复制链接]
发表于 昨天 18:36 | 显示全部楼层
  1. ;; 设置图块文件所在的目录
  2. (setq blockDirectory "D:\\张生\\说明\")

  3. ;; 初始化计数器
  4. (setq i 1)

  5. ;; 循环生成 C1 到 C20 命令
  6. (while (<= i 20)
  7.   ;; 动态定义命令函数
  8.   (eval
  9.     (list 'defun
  10.           ;; 命令名 C:C1, C:C2, ..., C:C20
  11.           (read (strcat "C:C" (itoa i)))
  12.           '() ; 无参数
  13.           '(progn ; 使用 progn 将多个表达式组合成一个
  14.              ;; 提示用户选择插入点 (在命令执行时)
  15.              (setq insertPt (getpoint "\n指定图块插入点: "))
  16.              ;; 发送 _INSERT 命令,指定图块文件和插入点
  17.              (command "_-INSERT" (strcat blockDirectory (itoa i) "孔.dwg") insertPt pause pause pause) ; pause 用于 Scale X, Y 和 Rotation
  18.              ;; 检查插入是否成功 (entlast 是否更新)
  19.              (if (/= (entlast) nil)
  20.                (progn
  21.                  ;; 发送 _.ROTATE 命令
  22.                  ;; 选择对象 (entlast)
  23.                  (command "_.ROTATE" (entlast) "")
  24.                  ;; 指定基点 (图块的插入点)
  25.                  (command (getvar 'lastpoint)) ; 通常 _INSERT 后 lastpoint 会是插入点,或者重新获取 (cdr (assoc 10 (entget (entlast))))
  26.                  ;; 暂停,让用户指定第二点或输入角度
  27.                  (command pause)
  28.                ) ; progn
  29.                (princ "\n图块插入失败,无法执行旋转。")
  30.              ) ; if
  31.              ;; 清理命令行输出
  32.              (princ)
  33.           ) ; progn
  34.     ) ; list for eval
  35.   ) ; eval

  36.   ;; 计数器递增
  37.   (setq i (+ i 1))
  38. ) ; while

  39. ;; 可选:打印完成信息
  40. (princ "\n已成功定义命令 C1 到 C20。")
  41. (princ)




  1. (setq i 1)
  2. (while (<= i 20)
  3.   (eval
  4.     (list 'defun
  5.           (read (strcat "C:C" (itoa i))) ; 定义命令 C1, C2...
  6.           '() ; 无参数
  7.           (list 'progn
  8.                 (list 'command "_-INSERT" ; 注意 -INSERT,不要弹出对话框
  9.                       (strcat "D:\\张生\\说明\" (itoa i) "孔.dwg")
  10.                       '(getpoint "\n图块插入点:") ; 延迟执行
  11.                       1.0 ; 缩放X
  12.                       1.0 ; 缩放Y
  13.                       0.0 ; 初始角度
  14.                 )
  15.                 (list 'command "_.ROTATE"
  16.                       (list 'entlast) "" ; 旋转对象
  17.                       (list 'cdr (list 'assoc 10 (list 'entget (list 'entlast)))) ; 基点:块的插入点
  18.                       'pause ; 让用户指定角度
  19.                 )
  20.                 '(princ) ; 静默退出
  21.           )
  22.     )
  23.   )
  24.   (setq i (1+ i))
  25. )
打卡蹭积分
回复 支持 反对

使用道具 举报

发表于 昨天 18:41 | 显示全部楼层
本帖最后由 gzcsun 于 2025-8-28 18:44 编辑

不明白要做成这样。
做一个函数,然后做多个命令调用不就可以,而且更简单,更快。
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 21:11 来自手机 | 显示全部楼层
你有种再说一遍 发表于 2025-8-28 15:51
这种就是动态编译而已,是动态类型语言的常用工具.
在静态类型语言其实也有,无非就是宏,或者混合runtime.
...

惊惊大佬牛逼,先关注一波再说。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-8-29 05:50 , Processed in 0.141505 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表