;Connect two offset straight (poly)lines with wave S-shaped arcs, ogee
;---
;    )
;   (
;     ---
;VM, CADforum.cz, 4/2026

(defun C:WaveLink  ( / e1 e2 at1 at2 ent1 ent2 pt1 pt2 mid ss osm cmde)
 (if (and
  (setq e1 (nentsel "\nSelect the first line near endpoint: ")) ; (e pt)
  (setq e2 (nentsel "\nSelect the second line near endpoint: "))
  (setq ent1 (car e1)  ent2 (car e2)  pt1 (osnap (cadr e1) "_END")  pt2 (osnap (cadr e2) "_END")) ; endpoints
  (setq at1 (osnap (cadr e1) "_NEA")  at2 (osnap (cadr e2) "_NEA")) ; picked at lines
  (setq mid (list (/ (+(car pt1)(car pt2)) 2.0)(/ (+(cadr pt1)(cadr pt2)) 2.0))) ; arcs meet in center
     )(progn
   (setq osm (getvar "OSMODE")) (setvar "OSMODE" 0)
   (setq cmde (getvar "CMDECHO")) (setvar "CMDECHO" 0)
   (setq ss (ssadd ent1))
   (command "_UCS" "_W")
   (command "_ARC" pt1 "_E" mid "_Di" (angtos (angle at1 pt1) 0 12))
   (ssadd (entlast) ss)
   (command "_ARC" pt2 "_E" mid "_Di" (angtos (angle at2 pt2) 0 12))
   (ssadd (entlast) ss)
   (ssadd ent2 ss)
   (setvar "OSMODE" osm)
   (initget "Yes No")
   (if (/= (getkword "\nJoin lines and wave? [Yes/No] <Yes>: ") "No")(progn
    (initcommandversion)
    (command "_JOIN" ss "")
   ))
   (setvar "CMDECHO" cmde)
   (princ)
 ))
)
(defun C:OGEE (/) (C:WaveLink)(princ))
