alevans 发表于 2022-7-5 13:10:03

关闭门Autolisp

大家好,我想在auto cad中关闭一扇门。基本上我想在弧的中心和起点之间延伸一条线。但基本上,我正在尝试循环绘制一个图形,并对所有门(有很多!)执行此操作。我附上了一张照片,门是紫色的,我试图延伸的部分是蓝色的。如果我能让墙(红色)来做这个扩展,那就更好了。注意:圆弧和连接的紫色线不是一条实心多边形线,而是单独的实体(但它们位于同一层上),而墙(红色)是一个单独的层。
 
谢谢
 
A.
 

marko_ribar 发表于 2022-7-5 13:18:29

如果我是你的话,我已经手动绘制了这条线-我的意思是-你是如何绘制门规格的-你肯定没有在墙开口之间使用自动插入。。。即使你们有门挡——但你们说它是直线和圆弧,你们可能必须根据墙的位置手动将它们定位在正确的方向上。。。所以我的建议-你没有数百万个门需要处理,只要画出那条线,在门的最后冻结层。。。

alevans 发表于 2022-7-5 13:21:41

你好,马克,谢谢你的回复。
 
我实际上没有设计这些图纸,也不是建筑师或土木工程师。我对autocad和autolisp(基本工作熟练度)相当陌生,负责某些事情的自动化。这些线背后的想法是最终创建边界。我设法将我的平面布置图简化为前后平面布置图,并突出了差异。我无法手动绘制这些线的原因是,我不知道最终需要处理多少dwg文件,因此我正在寻找一种通用解决方案。
 
现在,我有三层破碎的墙,并试图通过90度角连接它们。一张图片可能更好地说明了这一点。
 
这就是我希望实现的目标。
 
[编辑:请不要担心文本,我已经删除了它。而且泛黄的圆形对象也不是什么大问题]
 
谢谢
 
A.
 

BIGAL 发表于 2022-7-5 13:28:06

同意Marko的观点,如果我画了一扇门,我画了所有的门,包括门框,但我有一个lisp来做,它会问相关的问题,离门的边缘大小有多远,左,右,进/出,都做了。它受版权保护。
 
 

ronjonp 发表于 2022-7-5 13:29:54

如果门是块,只需将该线条添加到另一层的块定义中即可。别介意,仔细阅读你的帖子。

BIGAL 发表于 2022-7-5 13:34:45

Serach for door lisp我肯定有一些免费的,我的考虑了它插入的墙的智能。

ronjonp 发表于 2022-7-5 13:38:37

你可以使用带有遮罩的动态块,然后你就不需要打破墙壁。

alevans 发表于 2022-7-5 13:42:59

谢谢大家,我将尝试实施这些解决方案。
 
A.

ronjonp 发表于 2022-7-5 13:48:27

张贴你的绘图样本,如果你需要代码来清理这些现有的计划,我有一个主意。

ronjonp 发表于 2022-7-5 13:52:08

尝试关闭由“a\u DOOR\u FULL”层上的直线和圆弧组成的门。。看那张图,我首先推荐一些一致性

(defun c:foo (/ _get b c d s)
;; RJP » 2018-10-12
;; Closes doors on a common layer that consist of an arc and a line
(defun _get (e) (list (vlax-curve-getstartpoint e) (vlax-curve-getendpoint e)))
(cond
    ;; Layer filter below '(8 . "A_DOOR_FULL")'
    ((setq s (ssget "_x" '((0 . "line,arc") (8 . "A_DOOR_FULL"))))
   (foreach a        (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
       (if (= "LINE" (cdr (assoc 0 (entget a))))
       (setq b (cons (_get a) b))
       (setq c (cons (_get a) c))
       )
   )
   (foreach p        b
       (cond
       ((setq        d (vl-some '(lambda (x)
                              (if (or (equal (setq e (car p)) (car x) 1e-8)
                                      (equal (setq e (car p)) (cadr x) 1e-8)
                                      (equal (setq e (cadr p)) (car x) 1e-8)
                                      (equal (setq e (cadr p)) (cadr x) 1e-8)
                                  )
                                x
                              )
                          )
                           c
                  )
          )
          (setq d (vl-remove-if '(lambda (x) (equal e x 1e-8)) (append d p)))
          (entmakex (list '(0 . "LINE") (cons 10 (car d)) (cons 11 (cadr d)) '(8 . "DoorClosed")))
       )
       )
   )
    )
)
(princ)
)
页: [1] 2
查看完整版本: 关闭门Autolisp