Twist maakt net als
ZIGZAG een speciaal soort arcering die je met HATCH niet kunt maken. De
TWIST-routine oriënteert zich, net als LHATCH, op de vorm van het arceervlak. Hij
werkt met de twee langste begrenzingslijnen. Als begrenzingslijn kun je zowel
een LINE, POLYLINE als LWPOLYLINE selecteren. De TWIST-arcering is een POLYLINE
Subroutines
De volgende
subroutines worden door TWIST zelf geladen. Je vindt ze elders op het menu van
AutoLISP-routines:
ˇ
linpoints.lsp
ˇ
midpoint.lsp
ˇ
sel.lsp
;* TWIST zet een
golflijn tussen twee aangewezen lijnen
;* ******** Jaap
Moggré, Leiden, The Netherlands ***********
(defun c:twist (/ lst1
lst2 en c d p1 p2 p3 p4 px px1 pm1 pm2
pt1 pt2 pc ptc p r st twlist osn cl blip pwid en encut)
(if (not
sel)(load "sel"))
(if (not
linpoints)(load "linpoints"))
(if (not
midpoint)(load "midpoint"))
(setvar
"cmdecho" 0)
(command
"undo" "group")
(setq
osn (getvar "osmode")
cl (getvar "clayer")
blip (getvar "blipmode")
pwid (getvar
"plinewid")
)
(setvar
"osmode" 0)
(setvar
"plinewid" 0)
(setq enp1
(sel (list "LINE" "POLYLINE" "LWPOLYLINE"
)"")
enp2
(sel (list "LINE" "POLYLINE" "LWPOLYLINE"
)"")
plist1
(linpoints enp1)
plist2
(linpoints enp2)
p1 (car
plist1)
p2
(cadr plist1)
p3 (car
plist2)
p4 (cadr plist2)
)
(if (>
(distance p1 p3)(distance p1 p4))
(setq c
p3 p3 p4 p4 c)
)
(setq pm1
(midpoint p1 p3)
pm2
(midpoint p2 p4)
d (distance pm1 pm2)
pt1 pm1
st t
r t
)
(while r
(setq px
(polar pt1 (+ (angle pm1 pm2)(/ pi 2)) 100)
px1 (inters p1 p2 pt1 px nil)
px (polar px1 (angle p1
p2)(distance pt1 px1))
px1 (polar px (+ (angle p1
p2)(/ pi 2)) 100)
ptc (inters pm1 pm2 px px1
nil)
pt2 (polar pt1 (angle pm1
pm2)(* (distance pt1 ptc) 2))
)
(if (<
(distance pt1 pm2)(distance pt1 pt2))(setq r nil))
(setq
twlist (append twlist (list pt2))
pt1
pt2
)
(if st
(progn
(setq
pc ptc st nil)
)
)
)
(setvar
"blipmode" 0)
(command
"pline" pm1 "A" "CE" pc (foreach p twlist
(command p))
"line" p2 p4 ""
)
(setq encut
(entlast))
(command
"trim" encut "" pt2 "")
(entdel
encut)
(setvar
"osmode" osn)
(setvar
"blipmode" blip)
(setvar
"plinewid" pwid)
(command
"undo" "e")
(princ)
)