dcpanchal_2005 发表于 2022-7-6 07:58:54

打断与相交的所有线

你好
任何一个都可以使用lsp例程来断开相互相交的直线。。
 
谢谢

flowerrobot 发表于 2022-7-6 08:04:55

听起来标准不好

lpseifert 发表于 2022-7-6 08:05:27

在这里查看,,,需要注册,但免费
http://www.theswamp.org/index.php?topic=10370.0

Lee Mac 发表于 2022-7-6 08:10:19

作为一种选择,我很快就想到了:
 
 
 

;;; Break All, by Lee McDonnell.25/07/2009

(defun c:brkAll (/ *error* doc spc ss Objlst Obj iLst Altlst lst)
(vl-load-com)

(defun *error* (msg)
   (if doc (vla-EndUndoMark doc))
   (if ov (mapcar 'setvar vl ov))
   (if (not
         (wcmatch
         (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
   (princ
       (strcat "\n** Error: " msg " **")))
   (princ))

(setq doc (vla-get-ActiveDocument
             (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))

(setq vl '("CMDECHO" "OSMODE")
       ov (mapcar 'getvar vl))

(vla-StartUndoMark doc)
(or *brk$dis* (setq *brk$dis* 5.))
(if (setq ss (ssget '((0 . "*LINE,ARC"))))
   (progn
   (or (not
         (setq tmp
             (getdist
               (strcat "\nSpecify Break Distance <" (rtos *brk$dis* 2 2) "> : "))))
         (setq *brk$dis* tmp))
   (setq Objlst
       (mapcar 'vlax-ename->vla-object
         (vl-remove-if 'listp
         (mapcar 'cadr (ssnamex ss)))))
   (while (setq Obj (car Objlst))
       (foreach iObj (setq Objlst (cdr Objlst))
         (setq iLst
         (cons
             (cons Obj
               (vlax-list->3D-point
               (vlax-invoke Obj
                   'IntersectWith iObj acExtendNone))) iLst))))
   (mapcar 'setvar vl '(0 0))
   (foreach Int (vl-remove-if-not
                  (function
                      (lambda (x)
                        (vl-consp (cdr x)))) iLst)
       (setq Obj (car Int))
       (foreach Pt (cdr Int)
         (and Altlst (setq lst Altlst))
         (if (not (setq bDis (vlax-curve-getDistatPoint Obj Pt)))
         (while (and (not bDis) lst)
             (setq bDis (vlax-curve-getDistatPoint (setq Obj (car lst)) Pt)
                   lst (cdr lst))))
         (if bDis
         (progn
             (or (setq bPt1 (vlax-curve-getPointatDist Obj
                              (+ bDis (/ *brk$dis* 2.))))
               (setq bPt1 (vlax-curve-getEndPoint Obj)))
             (or (setq bPt2 (vlax-curve-getPointatDist Obj
                              (- bDis (/ *brk$dis* 2.))))
               (setq bPt2 (vlax-curve-getStartPoint Obj)))
             (command "_.Break"
               (list (vlax-vla-object->ename Obj) pt) "_F" bPt1 bPt2)
             (setq AltLst (cons (vlax-ename->vla-object (entlast)) AltLst)))))))
   (princ "\n** Nothing Selected **"))
(vla-EndUndoMark doc)
(mapcar 'setvar vl ov)
(princ))
            

(defun vlax-list->3D-point (lst)
(if lst
   (cons (list (car lst) (cadr lst) (caddr lst))
         (vlax-list->3D-point (cdddr lst)))))

rayg11757 发表于 2022-7-6 08:14:25

非常酷的常规!!!
问题:
1.是否可以根据用户输入指定垂直线或水平线断开?
 
2.是否可以只打断彼此完全相交的线,而忽略仅接触而不相交的线,例如使用垂直osnap绘制的线?
 
非常感谢。
射线

Lee Mac 发表于 2022-7-6 08:17:15

 
谢谢你,雷,
 
如果我有更多的时间的话,我想这两个都是可能的,但我会看看我能做些什么。
 
同时,看看这个——有人花了更多的时间在同样的事情上。。。
http://www.theswamp.org/index.php?topic=10370.0

kyosmith 发表于 2022-7-6 08:20:06

 
 
这正是我需要的!
 
有人能帮忙吗?请
 

Lee Mac 发表于 2022-7-6 08:22:36

你查过我提供的链接了吗?

kyosmith 发表于 2022-7-6 08:25:01

是的,但链接上的宏不会只打断与水平线相交的垂直线
 
它还打断了垂直于
 

kyosmith 发表于 2022-7-6 08:28:25

我需要的是:选择一束线(许多线),然后只打断与水平线相交的垂直线
页: [1] 2
查看完整版本: 打断与相交的所有线