Invité ingoenius Posté(e) le 3 octobre 2011 Posté(e) le 3 octobre 2011 Ici un script qui sert a inserer des block avec des fonction random de rotation echelle et de type de bloc a partir d'un selection ) Mon souci est que pour l'instat j'ai créé un loop de 1000 iteration car je sais pas sortir du loop par un while sur la touche escape , si vous avez la solution merci ;-) sinon le script fonctionne meme de cette facon ;-------------------------------------------------------------------------------------------------------------------------------------------- ;;; Retourne un nombre "pseudo-aléatoire" entre 0 et 1 (defun randomGen () (or *seed* (setq *seed* (getvar "DATE"))) (setq *seed* (rem (1+ (* 1664525 *seed*)) 4294967296.0)) (/ *seed* 4294967296.0) ) ;;; Retourne un nombre "pseudo-aléatoire" entre mini et maxi (defun boundRandom (mini maxi) (+ mini (* (- maxi mini) (randomGen))) ) ;; Retourne un nombre "pseudo-aléatoire" entre mini et maxi ;; arrondi au pas spécifié (defun stepRandom (mini maxi step) (+ mini (round (* (- maxi mini) (randomGen)) step)) ) ;------------------------------------------------------------------------------------------ (defun c:Rins ();Random Insert Bloks (setq INDEX 0) (prompt "select the source list Blocks: ") (setq sel (ssget '((0 . "INSERT"))));set selzione blocchi (setq n (sslength sel)) (setq Smin 0);numerico (setq Smax n);numerico ;inizio creazione lista con i nomi dei blocchi (setq lb (list nil));lista vuota (repeat n (setq ent (ssname sel INDEX)) (SETQ Nom_Bloc (cdr (assoc 2 (entget ent))));nome Blocco (setq lb (append lb( list Nom_Bloc) ));append nome a lista (setq INDEX (1+ INDEX)) ) (setq lb (cdr lb)) ; elimination premier nil de la liste ;fine creazione lista (setq I 0) (setq Smin2 (getint "\nEnter Min Scale Factor "));percentuale (setq Smax2 (getint "\nEnter Max Scale Factor "));percentuale (repeat 1000 (setq NLista (fix (boundRandom Smin Smax))) ;prend un block au hazard dans la liste lb (setq NEWBL (nth Nlista lb)) (setq BL1 (entget (ssname sel2 I))) (rnd) (setq Ang rand);ang rotation (setq Scale(fix (boundRandom Smin2 Smax2))) (setq Scale2 (/ Scale 100.0 )) (command "_-insert" NEWBL pause "" "" Ang);inserzione a schermo (setq LL (entlast)) (SETQ PT1 (cdr (assoc 10 (entget LL))));recupero il punto d'inserzione del blocco (command "_scale" LL "" pt1 Scale2) ) )
bryce Posté(e) le 3 octobre 2011 Posté(e) le 3 octobre 2011 Bonjour, Tu peux remplacer(repeat 1000par(while T ;) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Invité ingoenius Posté(e) le 3 octobre 2011 Posté(e) le 3 octobre 2011 Bonjour, Tu peux remplacer(repeat 1000par(while T ;)Merci ;-)
Invité ingoenius Posté(e) le 19 octobre 2011 Posté(e) le 19 octobre 2011 Ici le mise a jour du code selon vos conseils :rolleyes: ;;; Retourne un nombre "pseudo-aléatoire" entre 0 et 1 (defun randomGen () (or *seed* (setq *seed* (getvar "DATE"))) (setq *seed* (rem (1+ (* 1664525 *seed*)) 4294967296.0)) (/ *seed* 4294967296.0) ) ;;; Retourne un nombre "pseudo-aléatoire" entre mini et maxi (defun boundRandom (mini maxi) (+ mini (* (- maxi mini) (randomGen))) ) ;; Retourne un nombre "pseudo-aléatoire" entre mini et maxi ;; arrondi au pas spécifié (defun stepRandom (mini maxi step) (+ mini (round (* (- maxi mini) (randomGen)) step)) ) ;----------------------------------------------------- (defun rnd () (if (not seed) (setq seed (getvar "DATE")) ) (setq modulus 65536 multiplier 25173 increment 13849 seed (rem (+ (* multiplier seed) increment) modulus) random (/ seed modulus) ) (princ(setq rand (fix(* 200 random)))) ;print rand ) ;---------------------------------------------------- (defun c:Rins ();Random Insert Blocks (setq INDEX 0) (prompt "select the source list Blocks: ") (setq sel (ssget '((0 . "INSERT"))));set selection (setq n (sslength sel)) (setq Smin1 0);numerico (setq Smax1 n);numerico ;inizio creazione lista con i nomi dei blocchi (setq lb_1 (list nil));lista vuota (repeat n (setq ent (ssname sel INDEX)) (SETQ Nom_Bloc (cdr (assoc 2 (entget ent))));nome Blocco (setq lb_1 (append lb_1( list Nom_Bloc) ));append nome a lista (setq INDEX (1+ INDEX)) ) (setq lb_1 (cdr lb_1)) ; elimination premier nil de la liste ;fine creazione lista (setq Smin2 (getint "\nEnter Min Scale Factor "));percentuale (setq Smax2 (getint "\nEnter Max Scale Factor "));percentuale (while T (setq NLista (fix (boundRandom Smin1 Smax1))) ;prend un block au hazard dans la liste lb (setq NEWBL (nth Nlista lb_1));decide nome blocco (rnd) (setq Ang rand);ang rotatione aleatoria (setq Scale(fix (boundRandom Smin2 Smax2))) (setq Scale2 (/ Scale 100.0 )) ;scala aleatoria (command "_-insert" NEWBL pause Scale2 Ang);inserzione a schermo );fine While )
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant