明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3863|回复: 13

请大侠帮忙改改一个单向阵列LISP

[复制链接]
发表于 2012-12-27 22:25:31 | 显示全部楼层 |阅读模式

能不能把下面的源码改成可以记忆之前用过的数据,比如,我用这个阵列过一次,重复用的时候 不用再次输入行距或拾取行距



(defun c:aw (/ )
  (setvar "cmdecho" 0)
  (princ "\n选择要阵列的对象")
  (setq ss (ssget))
  (setq rs (getreal "\n请输入行距或右键量取距离:"))
(if (= rs nil)(progn
             (setq pt1(getpoint "\n拾取第1点:"))
             (setq pt2(getpoint pt1 "\n拾取第2点:"))
             (setq rs(rtos (distance pt1 pt2) 2 2))
           )
  )
  (setq rl (getint "\n请输入行数: <6>"))
  (if (null rl)  (setq rl 6) )
  (command "_.Array" ss "" "r" rl 1 rs 1)
  (setvar "cmdecho" 1)
  (princ)
)


发表于 2019-5-29 22:44:14 | 显示全部楼层
tangjunasd58 发表于 2013-12-10 11:12
加入的别人的通用函数,在这个基础上能不做个判断执行下次命令的时候全安上一次的参数执行

把通用函数分享一下 谢谢
 楼主| 发表于 2012-12-27 22:27:32 | 显示全部楼层
还可以不可以改成往哪个方向拾取就向那个方向阵列,比如我向上拾取距离,阵列就向上,向左拾取距离,阵列就向左
发表于 2012-12-28 21:15:21 | 显示全部楼层
阵列方向我一般都是用正负号控制,至于说记忆上次,没弄过,是不是可以考虑向黑板中写入数值到时去提取,只是个思路,不知对不对。
发表于 2012-12-29 08:26:35 | 显示全部楼层
  1. (defun c:aw ()
  2. (setvar "cmdecho" 0)
  3. (princ "\n选择要阵列的对象")
  4. (setq ss (ssget))
  5. (setq p1 (getpoint "\n起点 :"))
  6. (if (setq p (getpoint p1 "\n请输入方向(间距) :")) (setq p2 p))
  7. (setq ang (angle p1 p2))
  8. (setq dst (distance p1 p2))
  9. (setq r1 (if (numberp r1) r1 6))
  10. (setq r (getint (strcat "\n请输入数量: <" (rtos r1) ">")))
  11. (setq r (if (numberp r) r r1) r1 r)
  12. (command "_.COPY" ss "" "M" p1)
  13. (repeat r
  14.   (command (setq p1 (polar p1 ang dst)))
  15. )
  16. (command "")
  17. )
  18. (setvar "cmdecho" 1)
  19. (princ)
  20. )
发表于 2013-1-18 22:59:33 | 显示全部楼层
谢谢了,这个只能记录下个数,不能记录下距离跟方向
发表于 2013-1-19 09:46:01 | 显示全部楼层
  1. ;; 伪源码需要e派工具箱(XCAD)的支持
  2. (defun c:tt (/ t0 lst ll1 ll2 ilst)
  3.   (defun main-pro (/ p0 d0 ss)
  4.     (setq p0  '(0 0)
  5.           d0  0
  6.           rad (xyp-d2r ang)
  7.     )
  8.     (if        (setq ss (ssget))
  9.       (repeat num
  10.         (setq d0 (+ d0 dist))
  11.         (xyp-copymove ss p0 (polar p0 rad d0))
  12.       )
  13.     )
  14.   )
  15.   (setq        ll1 '(dist num ang)
  16.         ll2 '(100. 5 0.)
  17.   )
  18.   (defun ajbcs () (xyp-Multiple-Settile ll1 ll2))
  19.   (xyp-initSet ll1 ll2)
  20.   (setq        ilst '(("dist" "间距" "real" "8")
  21.                ("ang" "角度" "real" "8")
  22.                ("num" "数量" "int" "8")
  23.                "spacer;"
  24.               )
  25.   )
  26.   (if (= (xyp-Dcl-Init Ilst "【单向阵列】" t) 1)
  27.     (main-pro)
  28.   )
  29.   (princ)
  30. )
发表于 2013-5-11 23:18:46 | 显示全部楼层
院长的伪源码用的太广泛了
发表于 2013-7-4 11:25:14 | 显示全部楼层
ZZXXQQ 发表于 2012-12-29 08:26

感觉良好,如能增加首部数字递增更好。
发表于 2013-12-10 11:12:49 | 显示全部楼层
加入的别人的通用函数,在这个基础上能不做个判断执行下次命令的时候全安上一次的参数执行


(defun C:AWW ( / ss ang bp cnt dist d)
  (cond
    (  (setq ss (ssget))
       (initget 1)
       (setq bp (getpoint "\n基点: "))
       (initget 1)
       (setq ang (getangle bp "\n阵列方向: "))
       (setq dist (xx-dist "行距" rs 2.2))
       (setq cnt (xx-int "整数" rl 5))
       (setq d 0.0)
       (setvar "cmdecho" 0)
       (command "_.undo" "_g" "_.copy" ss "" "_m" bp)           
       (repeat (1- cnt)
       (command (polar bp ang (setq d (+ d dist)))))        
       (command "" "_.undo" "_e"))) (princ))  

点评

请补上通用函数啊,不然运行失败呢  发表于 2018-9-25 21:00
发表于 2015-1-19 15:07:19 | 显示全部楼层
收藏  学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 20:14 , Processed in 0.188414 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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