FastFiber

selection set omzetten naar list

Gestart door gery, vr 01 07 2016, 18:56:39

Vorige topic - Volgende topic

gery

Is er een eenvoudige manier om in lisp een selection set om te zetten naar een list?
Of is er een eenvoudige manier om een list met op het scherm geselecteerde items op te zetten?

Achtergrond van de vraag: foreach werkt met lists, while en repeat werken met selection sets.
AutoCAD 2020 - Windows 10

Reimer

Even googlen levert volgens mij bruikbare oplossingen.
Maar je kunt toch ook gewoon while of repeat gebruiken op je selection set?
Wat ik vaak gebruik (even uit mijn hoofd dus hopelijk zonder typefouten):
(setq SS (ssget))
(setq CNT 0)
(while (< CNT (sslength SS))
  (setq OBJ (ssname SS CNT))
  ;-- programma --
  (setq CNT (+ CNT))
);_while


Reimer

gery

Bedankt voor je antwoord Reimer.

Ik gebruik meestal de repeat functie:

(setq #ss (ssget ...))
(setq #counter (sslength #ss))
(repeat #counter
  (setq #counter (1- #counter))
  ; --- actual function ---
)


De foreach function leek me ook wel handig maar die werkt met een list ipv selection set.
Ik had gedacht dat er misschien een standaard AutoLISP functie zou bestaan die de omzetting op een eenvoudige (lees: met zeer weinig code) kan doen.
AutoCAD 2020 - Windows 10

roy_043

BricsCAD heeft hier een standaard functie voor: vle-selectionset->list.
Maar het is ook redelijk eenvoudig om zelf een dergelijke functie te maken. Zie hier voor een voorbeeld.

gery

Bedankt allen!
Maar dit gaat me te ver leiden, ik zal de repeat functie wel blijven gebruiken.
AutoCAD 2020 - Windows 10

FastFiber