Aller au contenu

Random Insert Block


Messages recommandés

Invité ingoenius
Posté(e)

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

Invité ingoenius
Posté(e)

Bonjour,

 

Tu peux remplacer

(repeat 1000

par

(while T

;)

Merci ;-)

  • 3 semaines après...
Invité ingoenius
Posté(e)

Ici le mise a jour du code selon vos conseils :rolleyes: :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
 
) 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité