KARDOLITO89 发表于 2022-7-5 13:09:28

删除多段线或对象输出

 
Por favor,podemos ayudar a convertir este punto para poder seleccional varios contornos(polilínea)y mantener los segmentos que se interscan con una línea que cruza todos los contornos。
 
 


 
 
 
 
 
 

KARDOLITO89 发表于 2022-7-5 13:22:57

 
 

; Required Express tools
; OutSide Contour Delete with Extrim
; Found at http://forums.augi.com/showthread.php?t=55056
(defun C:OCD (/ en ss lst ssall bbox)
(vl-load-com)
(if (and (setq en (car(entsel "\nSelect contour (polyline): ")))
         (wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE"))
    (progn
      (setq bbox (ACET-ENT-GEOMEXTENTS en))
      (setq bbox (mapcar '(lambda(x)(trans x 0 1)) bbox))
      (setq lst (ACET-GEOM-OBJECT-POINT-LIST en 1e-3))
      (ACET-SS-ZOOM-EXTENTS (ACET-LIST-TO-SS (list en)))
      (command "_.Zoom" "0.95x")
      (if (null etrim)(load "extrim.lsp"))
      (etrim en (polar
                  (car bbox)
                  (angle (car bbox)(cadr bbox))
                  (* (distance (car bbox)(cadr bbox)) 1.1)))
      (if (and
            (setq ss (ssget "_CP" lst))
            (setq ssall (ssget "_X" (list (assoc 410 (entget en)))))
         )
      (progn
          (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
          (foreach e1 lst (ssdel e1 ssall))
          (ACET-SS-ENTDEL ssall)
          )
      )
      )
    )
)
(princ "\nType OCD to start")
(princ)Por favor,modifique esta luz para selecciar el contorno múltiple y retener el segmento。


 

KARDOLITO89 发表于 2022-7-5 13:33:58

Cad64 发表于 2022-7-5 13:48:22

我把你的两条线合并在一起了。请不要创建多个线程来问同一个问题。
另外,这是一个英语论坛,所以请用英语发布你的问题。
 
非常感谢。

marko_ribar 发表于 2022-7-5 13:53:08

试试这个mod。。。最低限度测试。。。
 

; Required Express tools
; OutSide Contour Delete with Extrim
; Found at http://forums.augi.com/showthread.php?t=55056
; Modified for multiple contour processing by M.R.
(defun C:OCD ( / *error* LM:ConvexHull LM:Clockwise-p entnextparent adoc cmde sel i el en ss sss lst cp ssall bbox enx laylst elst fuzz )

(vl-load-com)

(defun *error* ( m )
    (if cmde
      (setvar 'cmdecho cmde)
    )
    (vla-endundomark adoc)
    (if m
      (prompt m)
    )
    (princ)
)

;; Convex Hull-Lee Mac
;; Implements the Graham Scan Algorithm to return the Convex Hull of a list of points.

(defun LM:ConvexHull ( lst / ch p0 )
      (cond
          (   (< (length lst) 4) lst)
          (   (setq p0 (car lst))
            (foreach p1 (cdr lst)
                  (if (or (< (cadr p1) (cadr p0))
                        (and (equal (cadr p1) (cadr p0) 1e-8) (< (car p1) (car p0)))
                      )
                      (setq p0 p1)
                  )
            )
            (setq lst (vl-remove p0 lst))
            (setq lst (append (list p0) lst))
            (setq lst
                  (vl-sort lst
                      (function
                        (lambda ( a b / c d )
                              (if (equal (setq c (angle p0 a)) (setq d (angle p0 b)) 1e-8)
                                  (< (distance p0 a) (distance p0 b))
                                  (< (if (equal c (* 2.0 pi) 1e-8) 0.0 c) (if (equal d (* 2.0 pi) 1e-8) 0.0 d))
                              )
                        )
                      )
                  )
            )
            (setq ch (list (cadr lst) (car lst)))
            (foreach pt (cddr lst)
                  (setq ch (cons pt ch))
                  (while (and (caddr ch) (LM:Clockwise-p (caddr ch) (cadr ch) pt))
                      (setq ch (cons pt (cddr ch)))
                  )
            )
            (reverse ch)
          )
      )
)

;; Clockwise-p-Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented or collinear

(defun LM:Clockwise-p ( p1 p2 p3 )
      (<(-(* (- (carp2) (carp1)) (- (cadr p3) (cadr p1)))
            (* (- (cadr p2) (cadr p1)) (- (carp3) (carp1)))
          )
          1e-8
      )
)

(defun entnextparent ( e )
    (while (and (setq e (entnext e)) (wcmatch (cdr (assoc 0 (entget e))) "ATTRIB,VERTEX,SEQEND")))
    e
)

(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(if (= 8 (logand 8 (getvar 'undoctl)))
    (vla-endundomark adoc)
)
(setq cmde (getvar 'cmdecho))
(setvar 'cmdecho 0)
(prompt "\nSelect contour polylines: ")
(while (not (setq sel (ssget "_:L" '((0 . "*POLYLINE") (-4 . "<or") (70 . 1) (70 . 129) (-4 . "or>")))))
    (prompt "\nEmpty sel.set... Retry selecting again...")
)
(if (tblsearch "LAYER" "temp_layer")
    (progn
      (prompt "\nLayer \"temp_layer\" already present in active document... Please delete this layer as it is used by this routine and restart OCD again...")
      (exit)
    )
)
(if (null etrim) (load "extrim.lsp"))
(initget 6)
(setq fuzz (getdist "\nPick or specify fuzz distance for interpolation of reference polyline(s) <0.5> : "))
(if (null fuzz)
    (setq fuzz 0.5)
)
(repeat (setq i (sslength sel))
    (if laylst
      (progn
      (setq el (entlast))
      (vl-cmdf "_.PASTECLIP" "_non" '(0.0 0.0 0.0))
      (while (setq el (entnextparent el))
          (setq elst (cons el elst))
      )
      )
    )
    (vla-startundomark adoc)
    (setq en (ssname sel (setq i (1- i))))
    (setq bbox (ACET-ENT-GEOMEXTENTS en))
    (setq bbox (mapcar '(lambda ( x ) (trans x 0 1)) bbox))
    (setq lst (ACET-GEOM-OBJECT-POINT-LIST en fuzz))
    (setq cp (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) (car bbox) (cadr bbox)))
    (setq lst (mapcar '(lambda ( x ) (mapcar '+ cp (mapcar '* (mapcar '- x cp) (list 1.05 1.05 1.05)))) lst))
    (setq lst (LM:ConvexHull lst))
    (vl-cmdf "_.ZOOM" "_OB" en "")
    (vl-cmdf "_.ZOOM" "0.75x")
    (etrim en (polar (car bbox) (angle (car bbox) (cadr bbox)) (* (distance (car bbox) (cadr bbox)) 1.1)))
    (vl-cmdf "_.ZOOM" "_P")
    (vl-cmdf "_.ZOOM" "_P")
    (if (setq ss (ssget "_CP" lst))
      (progn
      (setq sss (ssadd))
      (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
          (setq enx (entget (vlax-vla-object->ename (vla-copy (vlax-ename->vla-object e)))))
          (setq laylst (cons (cdr (assoc 8 enx)) laylst))
          (entupd (cdr (assoc -1 (entmod (subst (cons 8 "temp_layer") (assoc 8 enx) enx)))))
          (ssadd (cdr (assoc -1 enx)) sss)
      )
      )
    )
    (vl-cmdf "_.COPYBASE" "_non" '(0.0 0.0 0.0) sss "")
    (vl-cmdf "_.UNDO" "_B")
)
(setq el (entlast))
(vl-cmdf "_.PASTECLIP" "_non" '(0.0 0.0 0.0))
(while (setq el (entnextparent el))
    (setq elst (cons el elst))
)
(setq ssall (ssget "_X" (list (cons 8 "~temp_layer"))))
(ACET-SS-ENTDEL ssall)
(mapcar '(lambda ( a b ) (entupd (cdr (assoc -1 (entmod (subst (cons 8 b) '(8 . "temp_layer") (entget a))))))) elst laylst)
(vl-cmdf "_.PURGE" "_LA" "temp_layer" "_N")
(*error* nil)
)HTH。,M、 R。

ronjonp 发表于 2022-7-5 14:04:50

你听说过谷歌翻译吗?这毕竟是万维网。 

BIGAL 发表于 2022-7-5 14:12:14

谷歌翻译
 
页: [1]
查看完整版本: 删除多段线或对象输出