CADsite forum

AutoCAD => Autolisp => Topic gestart door: EddyBeerke op vr 04 07 2008, 15:17:13

Titel: Foreach functie [Helemaal opgelost!]
Bericht door: EddyBeerke op vr 04 07 2008, 15:17:13
Ik wil een bewerking doen voor meerdere geselecteerde objecten (lijnen e.d.), maar ik kom niet verder met de foreach
Wie kan mij verder helpen?


(defun c:test();
  (setq ~CMD (getvar "CMDECHO"))
    (setvar "CMDECHO" 0)
    (setq curlay (getvar 'CLAYER ))
    (setq ss1 (ssget))
    (foreach ent ss1
      (progn
           ;;;Hier komen de bewerkingen voor elke ent als voorbeeld copy
           (command "copy" ent "" "0,0" "0,0")
      );end progn
    );end foreach
  (setvar "CMDECHO" ~CMD)
);end defun
Titel: Re: Foreach functie
Bericht door: WebRacer op zo 06 07 2008, 10:47:49
(defun c:test();
  (setq ~CMD (getvar "CMDECHO"))
    (setvar "CMDECHO" 0)
    (setq curlay (getvar 'CLAYER ))
    (setq ss1 (ssget))
    (setq aantal (sslength ss1)) ; om het aantal elementen te bepalen
    (setq teller 0) ; een tellerke gebruiken om erdoor te wandelen
    (repeat aantal
      (progn
          (setq ent (ssname ss1 teller))  ; omdat de selektie niet per naam gebeurt, maar per entiteit, eerst de naam van het n-de element bepalen
           (setq teller (1+ teller)) ; tellerke onmiddelijk eentje doen optellen voor volgende element na deze loop
           ;;;Hier komen de bewerkingen voor elke ent als voorbeeld copy
           (command "copy" ent "" "0,0" "0,0")
      );end progn
    );end repeat   
(setvar "CMDECHO" ~CMD)

Als je persé met foreach wil werken, dan moet je van de selektie ss1 eerst de namen van elk opbject in een lijst steken....
Titel: Re: Foreach functie
Bericht door: EddyBeerke op ma 07 07 2008, 07:57:55
Bedankt WebRacer.

Ik ga het gelijk uitproberen.
Ik laat nog weten of dat dit is wat ik wil.

groetjes...


In iedergeval ff inloggen bij de CHAT...(onder menu "contact")
Titel: Re: Foreach functie
Bericht door: EddyBeerke op ma 07 07 2008, 12:49:53
Dit is wat ik er o.a. van gemaakt heb.
Met als toevoeging een progress in de statusregel.


(defun c:COPY0(); copieërd ent's
  (setq ~CMD (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq curlay (getvar 'CLAYER ))
  (setq ss1 (ssget))
  (setq aantal (sslength ss1)) ; om het aantal elementen te bepalen
  (setq teller 0) ; een tellerke gebruiken om erdoor te wandelen
  (acet-ui-progress-init "Objects gefilterd: " aantal)
  (repeat aantal
    (progn
      (setq ent (ssname ss1 teller))  ; omdat de selectie niet per naam gebeurt, maar per entiteit, eerst de naam van het n-de element bepalen
      (setq teller (1+ teller)) ; tellerke onmiddelijk eentje doen optellen voor volgende element na deze loop
      (command "copy" ent "" "0,0" "0,0")
      (acet-ui-progress-safe teller); ui-progress
    );end progn
  );end repeat 
  (setvar "CMDECHO" ~CMD)
  (princ (strcat "\n" (itoa teller) " objecten gecopieërd."))
  (acet-ui-progress-done); als acet-ui-progress-safe = 100% dan klaar
  (princ)
);end defun