偏移多个块
好的,让我先解释一下我的情况。我目前正在处理2000多个模块,根据终端消费者的需要,将它们以不同的组合进行组装。组装后,我需要在最终产品周围添加一个6英尺的边框。目前,我一直在这样做,就是在我拥有的任何块的粗糙顶点周围使用“圆”命令,然后从一个切线到另一个切线绘制一条线,然后修剪掉多余的圆。完成后,我把它展平到z=0,这样我就有了一个6英尺的边界。效果很好,但这是一个缓慢而乏味的过程。现在我的问题是,有没有一种方法(lisp或其他方法)来获取所有选定的块并执行相同的操作,或者甚至只是生成圆,因为这会缩短一些时间?
我会说我几乎没有lisp的知识,所以如果这是解决方案,在启动和运行中有任何帮助都将不胜感激。
万分感谢! (defun C:test (/ ss p pr d o)
(if
(setq ss (ssget)
p(LM:ssboundingbox ss)
o72) ;;change offset value
(entmake
(list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(67 . 0)
(cons 410 (getvar 'ctab))
'(100 . "AcDbPolyline")
'(90 . 4)
'(70 . 1)
(cons 10 (setq pr (polar (polar (car p) pi o) (* pi 1.5) o)))
(cons 10 (setq pr (polar pr 0 (setq d (+ (- (caadr p) (caar p)) (* o 2))))))
(cons 10 (setq pr (polar pr (/ pi 2.) (+ (- (cadadr p) (cadar p)) (* 2 o)))))
(cons 10 (polar pr pi d ))
'(210 0.0 0.0 1.0)
)
)
)
(princ)
)
(defun LM:ssboundingbox ( s / a b i m n o )
;; Selection Set Bounding Box-Lee Mac
(repeat (setq i (sslength s))
(if
(and
(setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
(vlax-method-applicable-p o 'getboundingbox)
(not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
)
(setq m (cons (vlax-safearray->list a) m)
n (cons (vlax-safearray->list b) n)
)
)
)
(if (and m n)
(mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
)
) 好的,很抱歉耽搁了,不过我刚刚有机会尝试一下。它画了一个盒子,有点像我想要的,但有很多额外的空间,因为它只是在一个正方形中做了最大值,而不是围绕每个组件做一个圆,然后相切。你知道这是否容易做到吗? 以下是一个问题示例:http://s30.postimg.org/napvlyuoh/Page_1_14_0101_A.jpg
黑色边框是绘制的lisp函数。
红色虚线是我从每个主要点手动创建的6’,然后与切线相切,然后修剪多余部分。 您需要一个边界生成器,它可以查看所有对象并计算出外部形状,例如围绕其绘制的一条柱线,一条柱线将从一个角开始,然后相切,直到它与下一个对象再次相切或相切。手动地,它就像是拾取对象、拾取下一个、拾取下一个,并使用一些规则来连接端点或切线。尝试使用“边界”搜索 试着在你的形状周围画一条线,比如说一个正方形,然后边界选择所有对象,内部拾取点位于对象和新正方形之间的间隙,它应该在你的对象周围画两条线,其中一条线,然后偏移该线。
页:
[1]