SELECTIESET

 

 

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

 

De verschillen met entsel

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.