qald 发表于 2022-7-5 23:45:41

偏移多个块

好的,让我先解释一下我的情况。我目前正在处理2000多个模块,根据终端消费者的需要,将它们以不同的组合进行组装。组装后,我需要在最终产品周围添加一个6英尺的边框。目前,我一直在这样做,就是在我拥有的任何块的粗糙顶点周围使用“圆”命令,然后从一个切线到另一个切线绘制一条线,然后修剪掉多余的圆。完成后,我把它展平到z=0,这样我就有了一个6英尺的边界。效果很好,但这是一个缓慢而乏味的过程。
 
现在我的问题是,有没有一种方法(lisp或其他方法)来获取所有选定的块并执行相同的操作,或者甚至只是生成圆,因为这会缩短一些时间?
 
我会说我几乎没有lisp的知识,所以如果这是解决方案,在启动和运行中有任何帮助都将不胜感激。
 
万分感谢!

jdiala 发表于 2022-7-6 00:03:56

(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))
   )
)

qald 发表于 2022-7-6 00:15:26

好的,很抱歉耽搁了,不过我刚刚有机会尝试一下。它画了一个盒子,有点像我想要的,但有很多额外的空间,因为它只是在一个正方形中做了最大值,而不是围绕每个组件做一个圆,然后相切。你知道这是否容易做到吗?

qald 发表于 2022-7-6 00:23:23

以下是一个问题示例:http://s30.postimg.org/napvlyuoh/Page_1_14_0101_A.jpg
 
 
黑色边框是绘制的lisp函数。
红色虚线是我从每个主要点手动创建的6’,然后与切线相切,然后修剪多余部分。

BIGAL 发表于 2022-7-6 00:42:12

您需要一个边界生成器,它可以查看所有对象并计算出外部形状,例如围绕其绘制的一条柱线,一条柱线将从一个角开始,然后相切,直到它与下一个对象再次相切或相切。手动地,它就像是拾取对象、拾取下一个、拾取下一个,并使用一些规则来连接端点或切线。尝试使用“边界”搜索

BIGAL 发表于 2022-7-6 00:47:12

试着在你的形状周围画一条线,比如说一个正方形,然后边界选择所有对象,内部拾取点位于对象和新正方形之间的间隙,它应该在你的对象周围画两条线,其中一条线,然后偏移该线。
页: [1]
查看完整版本: 偏移多个块