Invité ingoenius Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 Je voudrait cree un script , qui permet aprés selection de plusieur bloc, d'effectuer au choix rotation scale ou Move mais avec un parametre de randomisation , avec 2 variables min et max Je sais pas par quel bout commencer, si vous avez des conseils ;-)
Invité ingoenius Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 Enfin J'ai commencé et pour l'instant ca fonctionne, par contre je voudrais savoir comment contrandre mon numero random generé pour etre a l'interieur des 2 valeur min et max a decider ici le script elaboré a present (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:RRB ();RandomRotateBlocks (setq sel (ssget '((0 . "INSERT"))));set selzione blocchi (setq n (sslength sel)) (setq INDEX 0) (repeat n (setq ent (ssname sel INDEX)) (SETQ PT1 (cdr (assoc 10 (entget ent)))) (rnd) (setq Ang rand) (command "_rotate" ent "" pt1 ang) (setq n (1+ n)) (setq INDEX (1+ INDEX)) ) ) (defun c:RSB ();RandomScaleBlocks (setq sel (ssget '((0 . "INSERT"))));set selzione blocchi (setq n (sslength sel)) (setq INDEX 0) (setq Smin 0.3) (setq Smax 1.5) (repeat n (setq ent (ssname sel INDEX)) (SETQ PT1 (cdr (assoc 10 (entget ent)))) (rnd) (setq Scale (/ rand 100.0)) (command "_scale" ent "" pt1 Scale) (setq n (1+ n)) (setq INDEX (1+ INDEX)) ) )
(gile) Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 Salut, Voilà les routines que j'utilise : ;;; 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)) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 Merci Gile ;-) J'ai pu completer, ici ma routine (avec l'utilisation de tes codes random ;-))RandomScaleBlock (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:RSB ();Random_Scale_Block (setq sel (ssget '((0 . "INSERT"))));set selzione blocchi (setq n (sslength sel)) (setq INDEX 0) (setq Smin (getint "\nEnter Min Scale Factor "));Facteur Echelle % (setq Smax (getint "\nEnter Max Scale Factor "));Facteur Echelle % (repeat n (setq ent (ssname sel INDEX)) (setq Scale(fix (boundRandom Smin Smax))) (setq Scale2 (/ Scale 100.0 )) (command "_scale" ent "" pt1 Scale2) (setq n (1+ n)) (setq INDEX (1+ INDEX)) ) )
Invité ingoenius Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 Maintenat l'etape successive ideale serait: creer une routine qui:liste le nom des blocs dans une selction (selection 1) remplace toujour de facon random un'autre selection de blocs identiques (selection 2)par une suite aleatoire des blocs dans la liste avec variations de Rotation Echelle (min max) et variation random sur couleur R V B Ensuite si serit possible de faire generer de facon (Airbrush en deplacant la souris le blocs) Alors selait genial ;-)
bryce Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 Bonjour, Je viens de regarder ton code par curiosité, et j'ai 2 remarques :- le point de base de la mise à l'échelle pt1 n'est défini nulle part :unsure:- la ligne suivante ne sert à rien a priori :(setq n (1+ n));) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Invité ingoenius Posté(e) le 2 octobre 2011 Posté(e) le 2 octobre 2011 - le point de base de la mise à l'échelle pt1 n'est défini nulle part :unsure:- la ligne suivante ne sert à rien a priori :(setq n (1+ n));)Tu as raison, c est que j ai recycles de vieux script, et parfois evec les copier coller on oublie des choses :-)Le point pt1 de mise a l echelle doit etre le point d i sertion du bloc, je vais rectifier cela lundi merci pour les conseils :-)
Invité ingoenius Posté(e) le 3 octobre 2011 Posté(e) le 3 octobre 2011 Ici 3 Routines completes :P RRB RandomRotateBlock effectue une rotation random aux blocks selectionnes RSB RandomScaleBLockeffectue une scale random (entre 2 valeurs min et max )ex min 40 max 130l'echelle serà entre 40% et 130% RREPL RandomReplaceBlocksun inseres d'abord une serie de blocks, qui seront la sourceet ensuite les blocks a substituer peuvent etre dejà dans le dessin ou inserer avant le script Le script demande une premiere selection (les blocks source)ensuite la seconde selection serà celle des blocks a remplacer Les script remplacera de facon aleatoire les blocks de la deuxieme selection avec ceux de la premiere ;------------------------------------------------------------------------------------------------------------------- ;;; 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:RRB ();RandomRotateBlock (setq sel (ssget '((0 . "INSERT"))));set selzione blocchi (setq n (sslength sel)) (setq INDEX 0) (repeat n (setq ent (ssname sel INDEX)) (SETQ PT1 (cdr (assoc 10 (entget ent)))) (rnd) (setq Ang rand) (command "_rotate" ent "" pt1 ang) (setq n (1+ n)) (setq INDEX (1+ INDEX)) ) ) ;------------------------------------------------------------------------------------------------------------------- (defun c:RSB ();RandomScaleBlock (setq sel (ssget '((0 . "INSERT"))));set selzione blocchi (setq n (sslength sel)) (setq INDEX 0) (setq Smin (getint "\nEnter Min Scale Factor "));percentuale (setq Smax (getint "\nEnter Max Scale Factor "));percentuale (repeat n (setq ent (ssname sel INDEX)) (SETQ PT1 (cdr (assoc 10 (entget ent)))) ;(SETQ PT1 (cdr (assoc 10 (entget ent)))) ;(SETQ ScX (cdr (assoc 41 (entget ent)))) ;(SETQ ScX (cdr (assoc 42 (entget ent)))) ;(SETQ ScX (cdr (assoc 43 (entget ent)))) (setq Scale(fix (boundRandom Smin Smax))) (setq Scale2 (/ Scale 100.0 )) (command "_scale" ent "" pt1 Scale2) ;(setq n (1+ n)) (setq INDEX (1+ INDEX)) ) ) ;------------------------------------------------------------------------------------------------------------------- (defun c:RRepl ();Random Replace 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);percentuale (setq Smax n);percentuale (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 (prompt "select block to replace: ") (setq sel2 (ssget '((0 . "INSERT"))));set selection blocks a substituer (setq n2 (sslength sel2)) (setq I 0) (repeat n2 (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))) (setq NWNM (cons 2 NEWBL)) (setq OLD (assoc 2 BL1)) (setq ODNM (cdr OLD)) (entmod (subst NWNM OLD BL1)) (setq I (1+ I)) ) )
Invité ingoenius Posté(e) le 3 octobre 2011 Posté(e) le 3 octobre 2011 Maintenat que j'ai fait le debutj'ai besoin d'aide pour melanger tout ca, en une seule routine 1 Je selectionne une serie de blocks2 A chaque click le script ensére un de ces block au hazard avec rotation aleatoire et echelle aleatoire entre min et max merci a vous pour l'aide ;-) Cest bon j'ai ouvert un autre Post pour cela
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