autolisp吧 关注:477贴子:1,087
  • 1回复贴,共1

编写一个简单的lisp语句,遇到一个奇怪的问题

只看楼主收藏回复

思路是这样的,选取一个线条,取线条的y值小的一个端点的坐标pt1,其坐标为 x1,y1,然后求pt2其坐标为x2,y2,
x2=x1-125,y2=y2-19然后得出pt3,pt4,以pt4和pt3交差窗选这个范围内的对象,如果是文本文件,就输出到屏幕上。
这个是个简单的程序。不过运行中发现,如果把屏幕放大,也就是线条基本充满cad屏幕时,结果是正确的,当把屏幕缩小是,选出的结果就是错误的。
已经验证了,pt3和pt4的坐标输出是对的,但是就是窗选出的数据是庞斌的数据,屏幕越越缩小,选出的数据就距离窗选范围越远。
请问这是个什么问题呢


IP属地:重庆1楼2024-09-02 13:07回复
    (defun c:gc ()
    (prompt "\nPlease select multiple lines: ")
    (setq st1 (ssget))
    (setvar "OSMODE" 0)
    (if st1
    (progn
    (setq i 0)
    (setq isum (sslength st1))
    (while (< i (sslength st1))
    (setq ent1 (ssname st1 i))
    (setq data1 (entget ent1))
    (setq start-pt (cdr (assoc 10 data1)))
    (setq end-pt (cdr (assoc 11 data1)))
    (setq x1 (car (if (< (cadr start-pt) (cadr end-pt))
    start-pt
    end-pt
    )
    )
    )
    (setq y1 (cadr (if (< (cadr start-pt) (cadr end-pt))
    start-pt
    end-pt
    )
    )
    )
    (setq x2 (- x1 125))
    (setq y2 (- y1 19))
    (setq x3 (- x2 2))
    (setq y3 (+ y2 1))
    (setq x4 (+ x2 2))
    (setq y4 (- y2 1))
    (setq pt2 (list x2 y2))
    (setq pt3 (list x3 y3))
    (setq pt4 (list x4 y4))
    (command "_.rectangle" pt3 pt4)
    (setvar "OSMODE" 0)
    (setq st2 (ssget "C" pt4 pt3))
    (princ "\n")
    (if st2
    (progn
    (setq j 0)
    (setq jsum (sslength st2))
    (while (< j (sslength st2))
    (setq ent2 (ssname st2 j))
    (setq data2 (entget ent2))
    (if (= (cdr (assoc 0 data2)) "TEXT")
    (progn
    (setq k1 (cdr (assoc 1 data2)))
    (setq j (sslength st2))
    )
    )
    (setq j (1+ j))
    )
    (princ k1)
    )
    (princ "not found anything")
    )
    (setq i (1+ i))
    )
    )
    (princ "not selected anything")
    )
    )


    IP属地:重庆2楼2024-09-02 13:58
    回复