Zoals bekend kun je
bij veel commando’s losse elementen kiezen, maar vaak ook pak je een hele groep
elementen tegelijk. Wanneer je in je routine alleen losse elementen wilt laten
selecteren gebruik je in principe entsel. Voor het selecteren van
meerdere elementen tegelijk is er ssget.
Wanneer je (ssget)
typt op de commandline, kun je een onbeperkt aantal elementen kiezen. Je sluit
af met Enter en dan reageert de commandline met:
<Selection set: a6>
Je hebt nu een
selectieset aangemaakt. Dit is een verzameling van entity names, zoals
je die ook met entsel zou kunnen pakken. Die entity-names kun je er
eenvoudig uit de selectieset halen. Ze zijn genummerd, te beginnen bij 0.
Zo haal je de eerste
entityname uit een selectieset:
(setq ss (ssget))
(setq en (ssname ss
0))
Behalve dat je met ss
meerdere entity-names kunnen pakken, zijn er nog een paar opmerkelijke
verschillen tussen entsel en ssget.
entsel
levert een list met de entity-name en het selectiepunt.
ssget
levert een list met entity-names. Er is geen selectiepunt.
entsel
heeft de mogelijkheid om een tekst toe te voegen, bijv.
(setq enp (entsel
“\nSelecteer een cirkel: “))
Aan ssget kun
je geen tekst toevoegen. Dat moet je in een aparte regel doen. bijv:
(prompt “\nSelecteer cirkels: “)
(setq ss (ssget))
ssget
heeft opties waarmee je het selectieproces kunt sturen. entsel heeft dat
niet.
Bij ssget kun
je bijvoorbeeld zorgen dat er alleen cirkels gepakt kunnen worden:
(setq ss (ssget ‘((0 . CIRCLE))))
Voor een uitgebreide
beschrijving van de opties van ssget, zie de beschrijving van de AutoLISP-functies .
Een van de opties van ssget
is dat je een punt opgeeft. In de selectieset komen dan de elementen die door
dat punt lopen.
Voorbeeld:
Teken een lijn en
selecteer een punt op die lijn, met behulp van de objectsnap.
(setq pt (getpoint))
(setq ss (ssget pt))
Vroeger bleef een
ingestelde Object Snap actief bij het
gebruik van entsel. Je moest er dan steeds voor zorgen dat de Object
Snap uitgeschakeld was voordat je entsel gebruikte, tenzij je de
selectie juist wilde sturen met behulp van een Object Snap. Dat laatste is nu
niet meer mogelijk. Je zou de volgende provisorische oplossing kunnen
toepassen:
(defun c:es (/ ocs osn ss)
(setq ocs
(getvar "cursorsize"))
(setq osn
(getvar "osmode"))
(setvar
"cursorsize" 1)
(setvar
"osmode" 1)
(setq p
(getpoint "\nSelect object: "))
(setq ss
(ssget p))
(setq enp
(list (ssname ss 0) p))
(princ enp)
(setvar
"cursorsize" ocs)
(setvar
"osmode" osn)
(princ)
)
Je gebruikt ssget
met de point-mode. Om de indruk te wekken dat je select gebruikt, maak
je de cursor (de crosshairs) tijdelijk zo klein mogelijk.