倔强的蚂蚁 发表于 2013-11-22 11:47:32

谁能帮我看看是怎么回事,关于(> (abs (- (cadadr pt) (cadadr pto))) ds)

我从论坛里下载的源码,其中里边有一句是
(> (abs (- (cadadr pt) (cadadr pto))) ds)

我不知道是怎么个意思,所以就自己编了段代码
(defun c:sss ()
(setq pto (grread t 15 0))
(setq pt (grread pto))
(while (/= (car pt) 3)
    (setq a (abs (- (cadadr pt) (cadadr pto)))
    )
)
)

想看看
(abs (- (cadadr pt) (cadadr pto))得出的是一个什么样的值

但是程序执行的时候,就卡了,光标不动,貌似是无限循环崩溃呢

莫非是我while写的不对?

倔强的蚂蚁 发表于 2013-11-22 12:27:01

(defun c:sss ()
(setq pto (grread t 15 0))

(while (= 5 (car (setq pt (grread pto))))
    (setq a (abs (- (cadadr pt) (cadadr pto)))
    )
)
)

搞明白了。

q3_2006 发表于 2013-11-22 12:33:10

如果在图面直接点击,cadadr是获取你点击位置坐标的Y值。。。你的代码干嘛用我看不懂。。。

倔强的蚂蚁 发表于 2013-11-22 12:50:16

q3_2006 发表于 2013-11-22 12:33 static/image/common/back.gif
如果在图面直接点击,cadadr是获取你点击位置坐标的Y值。。。你的代码干嘛用我看不懂。。。

就是从明经里下的代码,自动增减数字的,我弄明白了,谢谢了!我看的就是下面的代码。

;;;use Alan method
;;;to easy to control add method devided by viewsize .
;;;Writed by chlh_jd
(defun c:test (/ en ent str ds pto pt)
(if (and (setq en (car (entsel "Select Integer Number Text :")))
           (setq ent (entget en))
           (setq str (cdr (assoc 1 ent)))
           (numberp (eval (read str)))
           (equal (atoi str) (atof str))
           (setq ds (/ (getvar "viewsize") 100.));_here can be changed cond to your need
           (setq pto (grread t 15 0))
      )
    (while (and        (setq pt (grread pto))
                (not (and (= 2 (car pt))
                          (or (= 13 (cadr pt)) (= 32 (cadr pt)))
                     )
                ) ;_Enter Space
                (not (or (= (car pt) 11) (= (car pt) 25))) ;_Right button
           )
      (if (and (= (car pt) 5)
             (> (abs (- (cadadr pt) (cadadr pto))) ds)             
          )
        (cond
          ((> (- (cadadr pt) (cadadr pto)) 0);_Y+ move   
           (setq str (rtos (1+ (atoi str)) 2 0))
           (entmod (list (cons 1 str) (cons -1 en)))          
           (setq pto pt)
          )
          ((< (- (cadadr pt) (cadadr pto)) 0);_Y- move
           (setq str (rtos (1- (atoi str)) 2 0))
           (entmod (list (cons 1 str) (cons -1 en)))
           (setq pto pt)
          )
        )
        (princ)
      )
    )
    (princ)
)
(princ)
)

倔强的蚂蚁 发表于 2013-11-22 12:51:14

q3_2006 发表于 2013-11-22 12:33 static/image/common/back.gif
如果在图面直接点击,cadadr是获取你点击位置坐标的Y值。。。你的代码干嘛用我看不懂。。。

现在执行到
(setq str (cdr (assoc 1 ent)))
就不动了,不知道咋回事

q3_2006 发表于 2013-11-22 14:44:29

倔强的蚂蚁 发表于 2013-11-22 12:51 static/image/common/back.gif
现在执行到
(setq str (cdr (assoc 1 ent)))
就不动了,不知道咋回事

没啥问题呀。。我运行正常!

倔强的蚂蚁 发表于 2013-11-22 15:10:47

q3_2006 发表于 2013-11-22 14:44 static/image/common/back.gif
没啥问题呀。。我运行正常!

如果我输入单行文本,运行就正常
若数字是多行文本输入的,就得打散一下。
后来我给改了改,在entmod里,加了subst,然后就运行正常了。
页: [1]
查看完整版本: 谁能帮我看看是怎么回事,关于(> (abs (- (cadadr pt) (cadadr pto))) ds)