Aller au contenu

MODIFIER LA VALEUR NUMERIQUE D UN PARAMETRE DYNAMIQUE DE BLOC


PHILPHIL

Messages recommandés

BONJOUR

 

j'ai fait ce petit lisp qui me permet

de modifier une propriété dynamique numérique d'un bloc

je tappe le nom de la propriétée et ca valeur modificative

puis je sélectionne les blocs

 

 

j'aimerais pouvoir faire l'inverse

sélectionner les blocs et que l'on me propose les propriétés dynamique communes

pour choisir dans une fenetre, permetant de pas a avoir a tapper et peut etre e tromper

 

mais la je bloque

 

dans la récupération et la mise en fenetre plus sélection

 

a+

 

phil

 

 

(defun c:cpn (/)
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (setq tprec1 (atoi (getcfg "APPDATA/precision1")))
 (setq modifnume (atof (getcfg "APPDATA/MODIFNUME")))
 (setq modifpara (getcfg "APPDATA/MODIFPARA"))
 (princ "\n")
 (setq compt 0)
 (setq com1 (getstring t
                       (strcat "\nVEUILLEZ ENTRER LE NON DU PARAMETRE A MODIFIER  <"
                               modifpara
                               "> : "
                       )
            )
 )
 (if (/= com1 "")
   (setq modifpara com1)
 )
 (setcfg "APPDATA/MODIFPARA" modifpara)
 (setq tmp (getdist
             (strcat "\nENTRER LA VALEUR NUMERIQUE DE MODIFICATION <"
                     (rtos modifnume 2 8)
                     ">: "
             )
           )
 )
 (if tmp
   (setq modifnume tmp)
 )
 (setcfg "APPDATA/MODIFNUME" (rtos modifnume 2 8))
 (prompt "\nSELECTIONNER LES BLOCS PARAMETRIQUE A MODIFIER :"
 )
 (setq sel (ssget (list '(0 . "INSERT"))))
 (setq com (sslength sel))
 (while (< compt com)
   (progn (foreach att (vlax-invoke (vlax-ename->vla-object
                                      (cdr (assoc -1 (entget (ssname sel compt))))
                                    )
                                    'getdynamicblockproperties
                       )
            (if (= (vla-get-propertyname att) modifpara)
              (progn (setq valeurextraite (vlax-variant-value (vla-get-value att)))
                     (vla-put-value att (+ valeurextraite modifnume))
              )
            )
          )
          (setq compt (1+ compt))
   )
 )
 (setvar "osmode" osm)
 (setq poi null)
 (princ)
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Ce que tu demandes nécessite de créer la boite de dialogue "à la volée" (écrire le fichier DCL depuis le code LISP) en fonctions des propriétés dynamiques du bloc sélectionné.

 

Tu trouveras un exemple avec la routine ssd dans Special_selections sur cette page.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

j'aimerais pouvoir faire l'inverse

sélectionner les blocs et que l'on me propose les propriétés dynamique communes

Tu peux sélectionner les blocs, puis simplement utiliser la palette Propriétés, non ? :unsure:

Lien vers le commentaire
Partager sur d’autres sites

hello

 

ok gile je vais aller voir ca merci

 

bryce, le probleme est quand tu as plusieurs blocs ayant le meme nom, la meme propriéta dynamique mais pas forcement la meme valeur, donc on ne peut plus passer par la palette de popriétés

 

je suis d'accord que propriétés commune a chaque blocs ne sert a rien, a moi de sélectionner les blocs en conséquence avant

 

merci

 

a+

 

phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

bryce, le probleme est quand tu as plusieurs blocs ayant le meme nom, la meme propriéta dynamique mais pas forcement la meme valeur, donc on ne peut plus passer par la palette de popriétés

 

Justement si, ou alors je n'ai pas compris ce que tu veux faire.

 

Si par exemple tu as plusieurs blocs "porte" avec une propriété dynamique "largeur" dont les valeurs sont différentes.

Si tu sélectionnes ces blocs "porte", dans la palette Propriétés la propriété dynamique "largeur" affiche *VARIE*, mais tu peux cliquer dans la case et sélectionner dans une liste une largeur qui sera affectée à toutes les portes sélectionnées.

Ce n'est pas ce que tu veux faire ?

Lien vers le commentaire
Partager sur d’autres sites

hello

 

he nonn

 

blocs "PANNEAU"

longueur ( paramétrique ) 121, 128,143 ....

et je veux rajouter 3.5 cm a chaque longueur

 

ce que fait deja le LISP, mais je dois tapper au clavier le nom du parametre ici "longueur"

 

si je passe par la palette de propriétés et je mets 121+3.5 chaque panneaux sélectionné aurat une longueur de 124.5cm

tous le calepinage redevient faux

 

t'inquiete je vais me débrouiller

 

merci

 

a+

phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

hello

 

 

LISP a tester

 

ca permet de modifier a la volée des parametres dynamiques numérique

 

de rajouter ( ex : +123 ) ou soustraire ( ex: -666 ) une valeur pour les parametres remplie dans la boite de dialogue

 

il y a une vérification pour que les parametres ne soit pas négatif , si c'est le cas il n'y a pas de modification

 

merci a gile pour le bout de code SSD de la boite

 

j'ai pas tout piger surtout la LISTE POP2 je vois pas a quoi elle sert

 

a+

 

phil

 

 

(defun c:cpn (/ propdynnom2)
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (setq tprec1 (atoi (getcfg "APPDATA/precision1")))
 (prompt "\nSELECTIONNER LES BLOCS PARAMETRIQUE A MODIFIER :")
 (setq selinsert (ssget (list '(0 . "INSERT"))))
 (setq com (sslength selinsert))
 (setq compt 0
       propdynnom2 nil
       pop2 nil
 )
 (while (< compt com)
   (progn (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                                    'getdynamicblockproperties
                       )
            (if (= (vlax-variant-type (vla-get-value att)) 5)
              (setq propdynnom2 (cons (vla-get-propertyname att) propdynnom2))
            )
          )
          (setq compt (1+ compt))
   )
 )
 (setq propdynnom (remove_doubles (vl-sort propdynnom2 '<)))
 (boitepropdyn)
 (setq compt 0)
 (setq com (sslength selinsert))
 (while (< compt com)
   (foreach don ret
     (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                               'getdynamicblockproperties
                  )
       (if (= (vla-get-propertyname att) (car don))
         (progn (setq valeurextraite (vlax-variant-value (vla-get-value att)))
                (if (> (+ valeurextraite (atof (cdr don))) 0)
                  (vla-put-value att (+ valeurextraite (atof (cdr don))))
                )
         )
       )
     )
   )
   (setq compt (1+ compt))
 )
 (setvar "osmode" osm)
 (setq poi null)
 (princ)
)

 

 

 

 

(defun boitepropdyn (/ tmp file fuzz
;;;                     ret
                    pn av dcl_id val)
 (setq tmp  (vl-filename-mktemp "Tmp.dcl")
       file (open tmp "w")
       ret  nil
 )
 (write-line (strcat "DynBlkProps:dialog{label=\"Blocs dynamiques\";"
                     "
             :text{label=\"Nom du bloc : \""
                     (vl-prin1-to-string "Tous les blocs")
                     "
             ;}

             spacer;:boxed_column{label=\"Propriétés dynamiques\";"
             )
             file
 )
 (foreach pn propdynnom
   (write-line (strcat ":row{:edit_box{label="
                       (vl-prin1-to-string pn)
                       ";key="
                       (vl-prin1-to-string pn)
                       ";edit_width=20;allow_accept=true;}
                      
      
	       }"
               )
               file
   )
 )
 (write-line "}spacer;ok_cancel;}" file)
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "DynBlkProps" dcl_id))
   (exit)
 )
 (foreach p pop2 (start_list (car p)) (mapcar 'add_list (cdr p)) (end_list))
 (action_tile
   "accept"
   "(foreach p propdynnom
(if (assoc p POP2)
(setq val (nth (atoi (get_tile p)) (cdr (assoc p POP2))))
(setq val (get_tile p)))
(if (and val (/= val \"\"))
(setq ret (cons (cons p val) ret))))
(and (not ret) (setq ret T))
(setq sel (get_tile \"selset\"))
(done_dialog)"
 )
 (action_tile "cancel" "(setq ret nil)")
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
;;;  ret
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

HELLO

 

 

mise a jour

 

pour les parametres de type "rotation" qui sont en radiant et non pas en degrés

mais qui doivent etre rentrés dans la fenetre des propriétées en degrés

 

a+

 

phil

 

(defun c:cpn (/ propdynnom2)
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (setq tprec1 (atoi (getcfg "APPDATA/precision1")))
 (prompt "\nSELECTIONNER LES BLOCS PARAMETRIQUE A MODIFIER :")
 (setq selinsert (ssget (list '(0 . "INSERT"))))
 (setq com (sslength selinsert))
 (setq compt 0
       propdynnom2 nil
       pop2 nil
 )
 (while (< compt com)
   (progn (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                                    'getdynamicblockproperties
                       )
            (if (= (vlax-variant-type (vla-get-value att)) 5)
              (setq propdynnom2 (cons (vla-get-propertyname att) propdynnom2))
            )
          )
          (setq compt (1+ compt))
   )
 )
 (setq propdynnom (remove_doubles (vl-sort propdynnom2 '<)))
 (boitepropdyn)
 (setq compt 0)
 (setq com (sslength selinsert))
 (while (< compt com)
   (foreach don ret
     (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                               'getdynamicblockproperties
                  )
       (setq test10 (ssname selinsert compt))
       (setq test11 (car don))
       
       (setq test12 att)
       (if (= (vla-get-propertyname att) (car don))
         (progn (if (= (vla-get-unitstype att) 2)
                  (progn (setq valeurextraite (vlax-variant-value (vla-get-value att)))
                         (if (> (+ valeurextraite (atof (cdr don))) 0)
                           (vla-put-value att (+ valeurextraite (atof (cdr don))))
                         )
                  )
                  (progn (setq valeurextraite (vlax-variant-value (vla-get-value att)))
                         (if (> (+ valeurextraite (* ( atof (cdr don)) (/ pi 180))) 0)
                           (vla-put-value att (+ valeurextraite (* (atof (cdr don)) (/ pi 180))))
                         )
                  )
                )
;;;                 (if (= (vla-get-unitstype att) 1)
;;;                   (progn (setq valeurextraite (vlax-variant-value (vla-get-value att)))
;;;                          (if (> (+ valeurextraite (atof (* (cdr don) (/ pi 180)))) 0)
;;;                            (vla-put-value att (+ valeurextraite (atof (* (cdr don) (/ pi 180)))))
;;;                          )
;;;                   )
;;;                 )
         )
       )
     )
   )
   (setq compt (1+ compt))
 )
 (setvar "osmode" osm)
 (setq poi null)
 (princ)
)

 

 

une declinaison du LISP pour changer les attributs

 

(defun c:caa (/ propattributnom2)
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (prompt "\nSELECTIONNER LES BLOCS A MODIFIER :")
 (setq selinsert (ssget (list '(0 . "INSERT"))))
 (setq com (sslength selinsert))
 (setq compt 0
       propattributnom2 nil
       pop2 nil
 )
 (while (< compt com)
   (progn (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                                    'getattributes
                       )
            (setq propattributnom2 (cons (vla-get-tagstring att) propattributnom2))
          )
          (setq compt (1+ compt))
   )
 )
 (setq propattributnom (remove_doubles (vl-sort propattributnom2 '<)))
 (boiteattributs)
 (setq compt 0)
 (setq com (sslength selinsert))
 (while (< compt com)
   (foreach don ret
     (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                               'getattributes
                  )
       (cond ((= (vla-get-tagstring att) (car don)) (vla-put-textstring att (cdr don))))
     )
   )
   (setq compt (1+ compt))
 )
 (setvar "osmode" osm)
 (setq poi null)
 (princ)
)

 

(defun boiteattributs (/ tmp file fuzz
;;;                     ret
                    pn av dcl_id val )
 (setq tmp  (vl-filename-mktemp "Tmp.dcl")
       file (open tmp "w")
       ret  nil
 )
 (write-line (strcat "DynBlkProps:dialog{label=\"Blocs avec attributs\";"
                     "
             :text{label=\"Nom du bloc : \""
                     (vl-prin1-to-string "Tous les blocs")
                     "
             ;}

             spacer;:boxed_column{label=\"Propriétés d'attributs\";"
             )
             file
 )
 (foreach pn propattributnom
   (write-line (strcat ":row{:edit_box{label="
                       (vl-prin1-to-string pn)
                       ";key="
                       (vl-prin1-to-string pn)
                       ";edit_width=20;allow_accept=true;}
                      
      
	       }"
               )
               file
   )
 )
 (write-line "}spacer;ok_cancel;}" file)
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "DynBlkProps" dcl_id))
   (exit)
 )
 (foreach p pop2 (start_list (car p)) (mapcar 'add_list (cdr p)) (end_list))
 (action_tile
   "accept"
   "(foreach p propattributnom
(if (assoc p POP2)
(setq val (nth (atoi (get_tile p)) (cdr (assoc p POP2))))
(setq val (get_tile p)))
(if (and val (/= val \"\"))
(setq ret (cons (cons p val) ret))))
(and (not ret) (setq ret T))
(setq sel (get_tile \"selset\"))
(done_dialog)"
 )
 (action_tile "cancel" "(setq ret nil)")
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
;;;  ret
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

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é