Lisp用于修剪角点
大家好!我现在对lisp越来越熟悉了,我想知道是否有人可以给我insite来创建一个lisp,它基本上可以在选定的区域内修剪或圆角。从下面开始:图1
输出如图2所示
谢谢
Cad-n-ator,
如果希望lisp一次性完成所有交点,可以使用SSGET和“I”隐含模式,以获取之前选择的所有线(PICKFIRST on)。然后,编写一个循环来检查每条线与其他线,并找到交点(与INTERS)。在该循环中,每次有交点时,都可以调用半径为零的圆角命令以获得双重修剪。这是许多方法中的一种。享受 我和Randy的想法一样。。。
对于示例图形,您可以实现这一点,因为每条线只有两个交点。如果有两个以上(即你的整个团队不是正方形)呢?你必须引入一些条件,比如只在距离两端一定距离内的十字路口。我要说的是,如果你在学习lisp,你会被咬成一大块。。 谢谢insite的伙计们。。。我希望只使用矩形区域。我仍然是autocad中lisp/macro的新手,所以我有自己的工作要做。谢谢 如果希望继续使用圆角方法(零半径),则需要找到一种方法来知道选择集中的哪些线需要用哪些线进行圆角。
因为,如果您只需遍历选择集,将所有行相互填充,您可能会得到不需要的圆角。 请尝试以下操作:
(defun c:boxed (/ vlax-list->3D-point i j ss e1 e2 o1 o2 iLst)
;; by Lee McDonnell~03.12.2009
(vl-load-com)
(defun vlax-list->3D-point (lst)
(if lst
(cons (list (car lst) (cadr lst) (caddr lst))
(vlax-list->3D-point (cdddr lst)))))
(if (setq i -1 ss (ssget '((0 . "LINE"))))
(while (setq j (1+ i) e1 (ssname ss (setq i (1+ i))))
(while (setq e2 (ssname ss (setq j (1+ j))))
(if (setq iLst
(vlax-list->3D-point
(vlax-invoke
(setq o1 (vlax-ename->vla-object e1)) 'IntersectWith
(setq o2 (vlax-ename->vla-object e2)) acExtendBoth)))
(foreach x (list e1 e2)
(if (< (distance (vlax-curve-getStartPoint x) (car iLst))
(distance (vlax-curve-getEndPoint x) (car iLst)))
(vla-put-StartPoint (vlax-ename->vla-object x) (vlax-3D-point (car iLst)))
(vla-put-EndPoint (vlax-ename->vla-object x) (vlax-3D-point (car iLst)))))))))
(princ))
如果所讨论的线不平行/垂直,则上述结果不理想:眨眼: 这就像我想要的一样!谢谢
我如何修改它,使我不必打开窗口或选择线,而只需在矩形区域内单击,它就会自动执行此操作?
窗口选择是不是太费劲了? 对不起,没有,只是在玩弄可能性,因为我还在学习lisp例程可以做什么。
页:
[1]
2