Author Topic: [XDrX-PlugIn(162)] Break horizontal or vertical lines according to spacing  (Read 264 times)

0 Members and 1 Guest are viewing this topic.

xdcad

  • Swamp Rat
  • Posts: 505
A friend sent a request:

http://bbs.xdcad.net/thread-730113-1-1.html

1. Only process horizontal or vertical lines
2. Only break unclosed lines or polylines, and do not process closed curves encountered.
3. Only break the cross point out

Code: [Select]
(defun c:xdtb_brkgap ( / verts1 an ent ints mode p1 p2 ss ss1 vec verts x y)
  (defun _break-line (ent an)
    (if (and (setq
       ss1 (ssget "_f"
  verts
  '((0 . "*polyline,line")
    (-4 . "<not")
    (-4 . "&=")
    (70 . 1)
    (-4 . "not>")
   )
   )
     )
     (progn
       (ssdel x ss1)
       t
     )
     (> (sslength ss1) 0)
)
      (progn
(mapcar '(lambda (x)
   (setq verts1 (xdrx-getpropertyvalue x "vertices"))
   (if (and (setq ints (xdrx-get-inters ent x))
    (setq ints (vl-remove-if
'(lambda (y)
    (or (member y verts1)
(member y verts))
  )
ints
       )
    )
    (> (length ints) 0)
       )
     (progn
       (setq ints
  (xdrx-points-sortoncurve ent ints)
     ints (mapcar 'car ints)
       )
       (mapcar '(lambda (y)
  (setq p1 (polar
     y
     an
     (/
       #xd-var-global-break-gap-distance
       2.0
     )
   )
p2 (polar
     y
     (+ an pi)
     (/
       #xd-var-global-break-gap-distance
       2.0
     )
   )
  )
  (xdrx-curve-break ent p1 p2)
  (setq ent (entlast))
)
       ints
       )
     )
   )
)
(xdrx-ss->ents ss1)
)
      )
    )
  )
  (xdrx-begin)
  (xd::doc:getdouble
    (xdrx-string-multilanguage
      "\n打断距离"
      "\nBreak Gap Distance"
    )
    "#xd-var-global-break-gap-distance"
    3.5
  )
  (if (not #xd-var-global-slope-mode)
    (setq #xd-var-global-slope-mode "0")
  )
  (xdrx-initget 0 "0 1")
  (if (setq mode
     (getkword
       (xdrx-string-formatex
(xdrx-string-multilanguage
   "\n打断方式[竖线(0)/水平线(1)]<%s>"
   "\nInterruption method [vertical line (0)/horizontal line (1)]<%s>"
)
#xd-var-global-slope-mode
       )
     )
      )
    (setq #xd-var-global-slope-mode mode)
  )
  (if (setq ss (xdrx-ssget
(xdrx-string-multilanguage
   "\n选择要处理的线<退出>:"
   "\nSelect lines to process <Exit>:"
)
'((0 . "*polyline,line")
   (-4 . "<not")
   (-4 . "&=")
   (70 . 1)
   (-4 . "not>")
  )
       )
      )
    (progn
      (xdrx-begin)
      (xdrx-document-safezoom ss)
      (mapcar '(lambda (x)
(if (or (xdrx-object-iskindof x "line")
(and (xdrx-object-iskindof x "*polyline")
      (= (xdrx-getpropertyvalue x "numverts") 2)
      (xdrx-polyline-isonlylines x)
)
     )
   (progn
     (setq verts (xdrx-getpropertyvalue x "vertices")
   vec (xdrx-vector-normalize
   (mapcar '- (last verts) (car verts))
)
     )
     (if (= #xd-var-global-slope-mode "0")
       (progn
(if (xdrx-vector-isparallelto '(0 1 0) vec)
   (_break-line x (/ pi 2.0))
)
       )
       (progn
(if (xdrx-vector-isparallelto '(1 0 0) vec)
   (_break-line x 0.0)
)
       )
     )
   )
)
       )
      (xdrx-ss->ents ss)
      )
      (xdrx-end)
    )
  )
  (princ)
)
« Last Edit: May 10, 2024, 09:42:02 PM by xdcad »
The code I wrote uses XDRX-API,which can be downloaded from github.com and is updated at any time.
===================================
https://github.com/xdcad
https://sourceforge.net/projects/xdrx-api-zip/
http://bbs.xdcad.net

Hugo

  • Bull Frog
  • Posts: 433
I get an error message

Bekomme eine Fehlermeldung

Befehl: XDTB_BRKGAP
Break Gap Distance<3.5>:3
Interruption method [vertical line (0)/horizontal line (1)]<1>1
Select lines to process <Exit>:Entgegengesetzte Ecke angeben: 5 gefunden
Select lines to process <Exit>:
Befehl: AnwendungsFEHLER: SSGET W/C erfordert zwei Punkte
AnwendungsFEHLER: SSGET W/C erfordert zwei Punkte

xdcad

  • Swamp Rat
  • Posts: 505
I get an error message

Bekomme eine Fehlermeldung

Befehl: XDTB_BRKGAP
Break Gap Distance<3.5>:3
Interruption method [vertical line (0)/horizontal line (1)]<1>1
Select lines to process <Exit>:Entgegengesetzte Ecke angeben: 5 gefunden
Select lines to process <Exit>:
Befehl: AnwendungsFEHLER: SSGET W/C erfordert zwei Punkte
AnwendungsFEHLER: SSGET W/C erfordert zwei Punkte

plz upload dwg
The code I wrote uses XDRX-API,which can be downloaded from github.com and is updated at any time.
===================================
https://github.com/xdcad
https://sourceforge.net/projects/xdrx-api-zip/
http://bbs.xdcad.net

Hugo

  • Bull Frog
  • Posts: 433
Thanks, it's solved, I found the error.

ss1 (ssget "f"

ss1 (ssget "_f"