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