TWIST

 

 

 

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

 

De routine

      

;* 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)

)