Object Snap

 

De Object Snaps kunnen binnen AutoLISP worden aanroepen.

 

In het volgende voorbeeld wordt het selectiepunt gebruikt om het punt te vinden dat exact op het geselecteerde element ligt.

 

(defun c:ostest1 (/ 1p p2)

  (setq enp (entsel "\nSelecteer een element: ")

           p1 (osnap (cadr enp) "nea")

           p2 (getpoint "\nWijs een punt aan: ")

  )

  (command "line" p1 p2 "")

  (princ)

)

 

Bij getpoint zou je Object Snap als volgt kunnen gebruiken:

 

(defun c:ostest2 (/ p1 p2)

  (setq p1 (osnap (getpoint "\nWijs het 1e punt aan: ") "end,int")       

          p2 (osnap (getpoint p1 "\nWijs het 2e punt aan: ") "end,int")

  )

  (command "line" p1 p2 "")

  (princ)

)

 

Je zult merken dat dit niet lekker werkt. Op het moment dat je het punt aanwijst, merk je niet dat de Object Snap actief is.

De volgende methode is veel beter:

 

(defun c:ostest3 (/ p1 p2)

  (setvar "osmode" 33)

  (setq p1 (getpoint "\nWijs het 1e punt aan: ")       

          p2 (getpoint p1 "\nWijs het 2e punt aan: ")

  )

  (command "line" p1 p2 "")

  (princ)

)

 

Met de systeemvariabele osmode wordt de Object Snap permanent aangezet. Bij het aanwijzen van de punten wordt de cursor van de Object Snap actief.

Voor de systeemvariabele moet je een getal opgeven. Endpoint = 1 ,  Intersection = 32. Bij een combinatie van Object Snaps tel je de waarden bij elkaar op. Een volledig overzicht vind je bij de systeemvariabelen op de website van AutoDESK.

 

Goed beheer van de Object Snaps

Het is van belang dat je zorgvuldig omgaat met Object Snap. Het kan heel hinderlijk zijn als telkens de verkeerde snap aan staat of als er een aan staat, terwijl dat juist niet de bedoeling is. Om die reden is de volgende werkwijze aan te bevelen:

 

(defun c:ostest4 (/ p1 p2 osn)

  (setq osn (getvar "osmode"))

  (setvar "osmode" 33)

  (setq p1 (getpoint "\nWijs het 1e punt aan: ")       

        p2 (getpoint p1 "\nWijs het 2e punt aan: ")

  ) 

  (command "line" p1 p2 "")

  (setvar "osmode" osn)

  (princ)

)

 

De eventueel ingestelde Object Snap wordt aan het begin van de routine afgevangen en aan het eind van de routine weer teruggezet.

 

Osprompt

In de oudere versies van AutoCAD was aan de cursor niet te zien welke Object Snap stond ingesteld. Het blijft niettemin handig als ook de command-line weergeeft welke Object Snap staat ingesteld. Met osprompt gaat dat heel makkelijk. Het is een routine die je gebruikt voorafgaand aan een get-functie. De tekst die je anders in de get-functie zou opnemen, voeg je als argument toe aan osprompt. De Object Snap geef je op met een getal, zoals bij osmode. osprompt heeft al een groot aantal combinaties van Object Snaps. Zonodig vul je de lijst aan.

 

De routine

;* OSPROMPT laat de ingestelde object snap zien op de command-line.

;* by Jaap Moggré, Leiden, The Netherlands

 

(defun osprompt (msg os)

  (setvar "osmode" os)

  (prompt msg)

  (princ " <")

  (cond ((= (getvar "osmode") 4)(princ "cen"))

        ((= (getvar "osmode") 1)(princ "end"))

        ((= (getvar "osmode") 64)(princ "ins"))

        ((= (getvar "osmode") 32)(princ "int"))

        ((= (getvar "osmode") 2)(princ "mid"))

        ((= (getvar "osmode") 512)(princ "nea"))

        ((= (getvar "osmode") 8)(princ "nod"))

        ((= (getvar "osmode") 128)(princ "perp"))

        ((= (getvar "osmode") 16)(princ "qua"))

        ((= (getvar "osmode") 256)(princ "tan"))

        ((= (getvar "osmode") 0)(princ "non"))

        ((= (getvar "osmode") 33)(princ "end,int"))

        ((= (getvar "osmode") 40)(princ "int,node"))

        ((= (getvar "osmode") 41)(princ "end,int,node"))

        ((= (getvar "osmode") 45)(princ "end,int,node,cen"))

        ((= (getvar "osmode") 49)(princ "end,int,qua"))

        ((= (getvar "osmode") 57)(princ "end,int,node,qua"))

        ((= (getvar "osmode") 72)(princ "nod,ins"))

        ((= (getvar "osmode") 520)(princ "nod,nea"))

  )

  (princ ">: ")

  (princ)

)

 

De toepassing van osprompt ziet er als volgt uit:

 

(defun c:ostest4 (/ p1 p2 osn)

  (setq osn (getvar "osmode"))

  (osprompt "\nWijs het 1e punt aan" 41)

  (setq p1 (getpoint ))

  (osprompt "\nWijs het 2e punt aan" 41)

  (setq p2 (getpoint p1))   

  (command "line" p1 p2 "")

  (setvar "osmode" osn)

  (princ)

)