明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1051|回复: 6

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

[复制链接]
发表于 2013-11-22 11:47 | 显示全部楼层 |阅读模式
我从论坛里下载的源码,其中里边有一句是
(> (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 | 显示全部楼层
(defun c:sss ()
  (setq pto (grread t 15 0))
  
  (while (= 5 (car (setq pt (grread pto))))
    (setq a (abs (- (cadadr pt) (cadadr pto)))
    )
  )
)

搞明白了。
发表于 2013-11-22 12:33 | 显示全部楼层
如果在图面直接点击,cadadr是获取你点击位置坐标的Y值。。。你的代码干嘛用我看不懂。。。
 楼主| 发表于 2013-11-22 12:50 | 显示全部楼层
q3_2006 发表于 2013-11-22 12:33
如果在图面直接点击,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 | 显示全部楼层
q3_2006 发表于 2013-11-22 12:33
如果在图面直接点击,cadadr是获取你点击位置坐标的Y值。。。你的代码干嘛用我看不懂。。。

现在执行到
(setq str (cdr (assoc 1 ent)))
就不动了,不知道咋回事
发表于 2013-11-22 14:44 | 显示全部楼层
倔强的蚂蚁 发表于 2013-11-22 12:51
现在执行到
(setq str (cdr (assoc 1 ent)))
就不动了,不知道咋回事

没啥问题呀。。我运行正常!
 楼主| 发表于 2013-11-22 15:10 | 显示全部楼层
q3_2006 发表于 2013-11-22 14:44
没啥问题呀。。我运行正常!

如果我输入单行文本,运行就正常
若数字是多行文本输入的,就得打散一下。
后来我给改了改,在entmod里,加了subst,然后就运行正常了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 17:46 , Processed in 0.279828 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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