elimgo 发表于 2022-7-5 17:10:08

lisp以缩放到新导入的

大家好,
 
我使用lee mac的lisp(pointsin-v1.0.13)从文本文件导入点,并添加了一些修改,以便能够从excel导出点。
 
我想知道是否有lisp可以缩放到新插入的点。我目前在lisp的末尾使用缩放范围,但如果我将点导入到现有图形中,它将缩放到整个图形,而不仅仅是新插入的点。

Tharwat 发表于 2022-7-5 17:19:11

你好
 
从Lisp文件中可以清楚地看到,作者姓名如下:[版权所有2015 Thomas Gail Haws]。
 
搜索函数的名称,并将其替换为以下内容:

(DEFUN PI:INSERT3DPOINTS (POINTSLIST POINTFORMAT / NODELAYERFORMAT POINTLIST th:entlast th:newobj th:lst a b)
(SETQ NODELAYERFORMAT (PI:GETNODELAYERFORMAT POINTFORMAT))
(setq th:entlast (entlast))
(COMMAND "._undo" "_group")
(FOREACH POINTLIST POINTSLIST
   (PI:MAKELAYER NODELAYERFORMAT POINTLIST POINTFORMAT)
   (COMMAND "._point" (CAR POINTLIST))
   (if (and (not (eq (setq th:newobj (entlast)) th:entlast))
            (eq (cdr (assoc 0 (entget th:newobj))) "POINT")
         )
   (setq th:lst (cons (cdr (assoc 10 (entget th:newobj))) th:lst))
   )
)
(if th:lst
   (progn
   (setq a (car th:lst)
       b a
       )
   (mapcar '(lambda (pt)
                (and (< (car pt)(car a))
                  (< (cadr pt) (cadr a))
                  (setq a pt)
                  )
                (and (> (car pt)(car b))
                  (> (cadr pt) (cadr b))
                  (setq a pt)
                  ))
       th:lst)
   (command "_.zoom" "_non" a "_non" b)
   )
   )
(COMMAND "._undo" "_end")
)

elimgo 发表于 2022-7-5 17:22:15

对不起,我错了
我很久以前下载了lisp,记得它是lee mac的。。
我的错
 
谢谢你的回复,伙计
我试试看!

Tharwat 发表于 2022-7-5 17:25:59

我只是想公平对待作者。
 
等待你的测试。

elimgo 发表于 2022-7-5 17:31:08

阿基修克伦,
 
向托马斯喊道!
 
我用5个坐标(相同的坐标但不同的顺序)的选择集进行了测试,为了检查a和b值,如果最小的坐标在第一个列表中,最大的坐标在最后一个列表中,效果很好,但是,当顺序不顺时,a和b并没有完全正确:
 
测试1:
坐标1=10,10
坐标2=20,20
坐标3=30,30
坐标4=40,40
 
结果将是a=(40.0 40.0 0.0)和b=(10.0 10.0 0.0)
 
测试2:
坐标1=40,40
坐标2=30,30
坐标3=20,20
坐标4=10,10
 
结果将是a=(10.0 10.0 0.0)和b=(40.0 40.0 0.0)
 
测试3:
坐标1=30,30
坐标2=40,40
坐标3=10,10
坐标4=20,20
 
结果将是a=(10.0 10.0 0.0)和b=(30.0 30.0 0.0)
 
测试4:
坐标1=20,20
坐标2=30,30
坐标3=10,10
坐标4=40,40
 
结果将是a=(40.0 40.0 0.0)和b=(20.0 20.0 0.0)
 
测试5:
坐标1=30,30
坐标2=10,10
坐标3=20,20
坐标4=40,40
 
结果将是a=(40.0 40.0 0.0)和b=(30.0 30.0 0.0)

Tharwat 发表于 2022-7-5 17:37:18

是否要缩放新创建的点或分析坐标?

elimgo 发表于 2022-7-5 17:41:52

也许我的措辞错了。
我希望它将范围从左下角坐标缩放到新输入点的右上角坐标。

elimgo 发表于 2022-7-5 17:47:55

苏。。查看代码中的(命令“.zoom”“\u non”a“\u non”b),我发现a是最小坐标,b是最大坐标。
 
我做了一些搜索,发现了这个:http://www.cadtutor.net/forum/showthread.php?93410-点-Min-Max-x坐标
 
因此,我修改了lisp,经过一些测试,我意识到要将范围缩放到选择,a不是最小的坐标,而是左下角的坐标,b是图形中右上角的坐标。
 
autocad缩放范围是如何工作的?有代码吗?我可以修改它,使其仅将范围缩放到一组选择吗?

elimgo 发表于 2022-7-5 17:52:56

你好
 
在做了更多的搜索后,我发现我可以将当前层设置为导入点,冻结所有其他层,缩放范围,然后解冻层。
 
我用这个http://www.cadtutor.net/forum/showthread.php?76896-冻结除当前层外的所有层并恢复以前的状态
(defun c:frz ( / d n )
   (while (setq d (tblnext "LAYER" (null d)))
       (if
         (and
               (zerop (logand 1 (cdr (assoc 70 d))))
               (not (member (setq n (cdr (assoc 2 d))) *thaw-list*))
         )
         (setq *thaw-list* (cons n *thaw-list*))
       )
   )
   (command "_.-layer" "_F" "*" "")
   (princ)
)

(defun c:unfrz ( )
   (if *thaw-list*
       (command "_.-layer" "_T"
         (apply 'strcat (mapcar '(lambda ( x ) (strcat "," x)) *thaw-list*))
         ""
       )
   )
   (setq *thaw-list* nil)
   (princ)
)
 
这对我来说很管用。
 
非常感谢。

BIGAL 发表于 2022-7-5 17:56:45

查看所有窗口中心的缩放选项。Tharwat使用两点的缩放窗口选项发布了答案,“W”是可选的,同样,两点的顺序也无关紧要。
 
范围缩放到对象的范围
所有缩放到两个预设的左下和右上“限制”类型,即“限制”。
中心要求一个点和一个比例,你也可以使用这种方法。
页: [1] 2
查看完整版本: lisp以缩放到新导入的