tangjunasd 发表于 2012-12-27 22:25:31

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


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



(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
加入的别人的通用函数,在这个基础上能不做个判断执行下次命令的时候全安上一次的参数执行




把通用函数分享一下 谢谢:lol

tangjunasd 发表于 2012-12-27 22:27:32

还可以不可以改成往哪个方向拾取就向那个方向阵列,比如我向上拾取距离,阵列就向上,向左拾取距离,阵列就向左

hhbhyt 发表于 2012-12-28 21:15:21

阵列方向我一般都是用正负号控制,至于说记忆上次,没弄过,是不是可以考虑向黑板中写入数值到时去提取,只是个思路,不知对不对。

ZZXXQQ 发表于 2012-12-29 08:26:35


(defun c:aw ()
(setvar "cmdecho" 0)
(princ "\n选择要阵列的对象")
(setq ss (ssget))
(setq p1 (getpoint "\n起点 :"))
(if (setq p (getpoint p1 "\n请输入方向(间距) :")) (setq p2 p))
(setq ang (angle p1 p2))
(setq dst (distance p1 p2))
(setq r1 (if (numberp r1) r1 6))
(setq r (getint (strcat "\n请输入数量: <" (rtos r1) ">")))
(setq r (if (numberp r) r r1) r1 r)
(command "_.COPY" ss "" "M" p1)
(repeat r
(command (setq p1 (polar p1 ang dst)))
)
(command "")
)
(setvar "cmdecho" 1)
(princ)
)

tangjunasd58 发表于 2013-1-18 22:59:33

谢谢了,这个只能记录下个数,不能记录下距离跟方向

xyp1964 发表于 2013-1-19 09:46:01

;; 伪源码需要e派工具箱(XCAD)的支持
(defun c:tt (/ t0 lst ll1 ll2 ilst)
(defun main-pro (/ p0 d0 ss)
    (setq p0'(0 0)
          d00
          rad (xyp-d2r ang)
    )
    (if        (setq ss (ssget))
      (repeat num
        (setq d0 (+ d0 dist))
        (xyp-copymove ss p0 (polar p0 rad d0))
      )
    )
)
(setq        ll1 '(dist num ang)
        ll2 '(100. 5 0.)
)
(defun ajbcs () (xyp-Multiple-Settile ll1 ll2))
(xyp-initSet ll1 ll2)
(setq        ilst '(("dist" "间距" "real" "8")
             ("ang" "角度" "real" "8")
             ("num" "数量" "int" "8")
             "spacer;"
              )
)
(if (= (xyp-Dcl-Init Ilst "【单向阵列】" t) 1)
    (main-pro)
)
(princ)
)

hehoubin 发表于 2013-5-11 23:18:46

院长的伪源码用的太广泛了

香田里浪人 发表于 2013-7-4 11:25:14

ZZXXQQ 发表于 2012-12-29 08:26 static/image/common/back.gif


感觉良好,如能增加首部数字递增更好。

tangjunasd58 发表于 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))

wangxf888 发表于 2015-1-19 15:07:19

收藏学习
页: [1] 2
查看完整版本: 请大侠帮忙改改一个单向阵列LISP