lisp以缩放到新导入的
大家好,我使用lee mac的lisp(pointsin-v1.0.13)从文本文件导入点,并添加了一些修改,以便能够从excel导出点。
我想知道是否有lisp可以缩放到新插入的点。我目前在lisp的末尾使用缩放范围,但如果我将点导入到现有图形中,它将缩放到整个图形,而不仅仅是新插入的点。 你好
从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")
) 对不起,我错了
我很久以前下载了lisp,记得它是lee mac的。。
我的错
谢谢你的回复,伙计
我试试看! 我只是想公平对待作者。
等待你的测试。 阿基修克伦,
向托马斯喊道!
我用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) 是否要缩放新创建的点或分析坐标? 也许我的措辞错了。
我希望它将范围从左下角坐标缩放到新输入点的右上角坐标。 苏。。查看代码中的(命令“.zoom”“\u non”a“\u non”b),我发现a是最小坐标,b是最大坐标。
我做了一些搜索,发现了这个:http://www.cadtutor.net/forum/showthread.php?93410-点-Min-Max-x坐标
因此,我修改了lisp,经过一些测试,我意识到要将范围缩放到选择,a不是最小的坐标,而是左下角的坐标,b是图形中右上角的坐标。
autocad缩放范围是如何工作的?有代码吗?我可以修改它,使其仅将范围缩放到一组选择吗? 你好
在做了更多的搜索后,我发现我可以将当前层设置为导入点,冻结所有其他层,缩放范围,然后解冻层。
我用这个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)
)
这对我来说很管用。
非常感谢。 查看所有窗口中心的缩放选项。Tharwat使用两点的缩放窗口选项发布了答案,“W”是可选的,同样,两点的顺序也无关紧要。
范围缩放到对象的范围
所有缩放到两个预设的左下和右上“限制”类型,即“限制”。
中心要求一个点和一个比例,你也可以使用这种方法。
页:
[1]
2