Aller au contenu

LIER DES BLOCS


PHILPHIL

Messages recommandés

HELLO

 

patrick a ecrit LATT qui relie les attibuts entre eux

 

est'il possible de relier des blocs entre eux

pour aller plus vite

 

en selectionnant ce que l'on voudrait lier a l'interieur des blocs

des attributs de meme noms ( ca va de soit)

des tables de blocs

un parametre de visibilité

ou des propriétés dynamiques de meme non

 

monsieur TOTODESK si tu nous lis

 

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

  • 2 semaines après...

BONJOUR

 

toujours dans mon idée de lier des blocs je cherche la methode avant

j'en ai peut etre une mais je voudrais savoir si vous avez mieux

 

1°: selectionner les blocs à lier et faire la liste des attributs et parametres dynamiques

2°: une boite de dialogue avec les attributs et parametres a cocher a mettre en commun

3°: ecrire dans chaque blocs selectionner des xdata avec la liste des parametres et attributs cocher ( une liste ou deux listes ? pour attributs et pour parametres )

un numero en commun permetant de savoir quels blocs sont liés, et une date

 

(-3 
("APPLICATION1" (1040 . 2.01112e+007) (1070 . 123) (1002 . "{") (1000 . 
"attribut") (1000 . "numero;longueur;largeur") (1002 . "}") (1002 . "{") (1000 
. "parametres") (1002 . "}"))))

 

1040 la date

1070 numéro en commun entre bloc lier

1000 noms des attributs lier

....

 

question : peut on mettre une liste d'attributs ou parametres dans les xdata ?

 

 

4°: un lisp qui permet de modifier la date xdata apres avoir changer les attributs ou parametres

5°: un lisp qui regarde par la suite chaque bloc avec des xadata et exporte aux autres blocs ayant le meme numero les parametres les plus recent en fonction de la date

 

je vais devoir faire un "dictionnaire" dans le fichier regroupant la liste des numero pour eviter les doublons,

 

ce sont des bouts de LISP des LISPEURS de cadxp que j'ai modifié, mais malheureusement pas tjrs compris

 

pour le moment j'ai ca

qui récupere les attibuts et parametres d'un bloc ou des bloc selectionner

 

(defun c:testselection (/
;;;               propdynnom2
              )
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (prompt "\nSELECTIONNER LES BLOCS PARAMETRIQUE A LIER :")
 (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 '<)))

 (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
                       )
              (setq propdynnom2 (cons (vla-get-propertyname att) propdynnom2))
          )
          (setq compt (1+ compt))
   )
 )
 (SETQ TEST13 (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert 0)))))
                                    'getdynamicblockproperties
                       ))
 (setq propdynnom (remove_doubles (vl-sort propdynnom2 '<)))
 (boitepropdyntest)
 (setq compt 0)
 (setq com (sslength selinsert))
 (while (< compt com)
   (foreach don ret
     (setq test14 don)
     (foreach att (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                               'getdynamicblockproperties
                  )
       (if (= (vla-get-propertyname att) (car don))
         (progn (if (= (vla-get-unitstype att) 2)
                  (vla-put-value att (atof (cdr don)))
                )
                (if (= (vla-get-unitstype att) 1)
                  (vla-put-value att (* (atof (cdr don)) (/ pi 180)))
                )
               (if (= (vla-get-unitstype att) 0)
                  (vla-put-value att (cdr don))
                )
           
         )
       )
     )
   )
   (setq compt (1+ compt))
 )
 (setvar "osmode" osm)
 (setq poi null)
 (princ)
)

 

et la boite de dialogue qui batifole un peu bcp meme

j'ai bien la les liste qui s'affichent mais je ne sais pas récuperer la liste des cases cochées

 

et j'ai un "64" qui se balade qui doit venir de "(itoa (expt 2 6))"

 

(defun boitepropdyntest (/ 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")
                     "
             ;}:boxed_column{label=\"Propriétés dynamiques\";"
             )
             file
 )
 
 (foreach pn propdynnom
   (write-line
     (strcat ":row{:toggle {key = \"" (itoa (expt 2  6)) "\"; label ="(vl-prin1-to-string pn)";}}")

     file
)
   
 )
(write-line (strcat "}:boxed_column{label=\"Attribut\";"
             )
             file
 )
(foreach pn propattributnom
   (write-line
     (strcat ":row{:toggle {key = \"" (itoa (expt 2  6)) "\"; label ="(vl-prin1-to-string pn)";}}")
     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
)

 

c'est mal barré cette histoire la

 

bonne nuit

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

salut

 

 

j'arrive a avoir une boite de dialogue qui tiens a peu pret la route

 

(defun boitepropdyntest (/ tmp
                        ;;file
                        fuzz
;;;                     ret
                        pn av dcl_id
                              ;;val
) (setq tmp  (vl-filename-mktemp "Tmp.dcl")
       file (open tmp "w")
       ret  nil
       ret2 nil
 )
 (write-line (strcat "DynBlkProps:dialog{label=\"Blocs dynamiques\";"
                     "
             :text{label=\"Nom du bloc : \""
                     (vl-prin1-to-string "Tous les blocs")
                     "
             ;}:boxed_column{label=\"Propriétés dynamiques\";"
             )
             file
 )
 (foreach pn propdynnom
   (write-line (strcat ":row{:toggle {key = \"" pn "\"; label =" (vl-prin1-to-string pn) ";}}") file)
 )
 (write-line (strcat "}:boxed_column{label=\"Attribut\";") file)
 (foreach pn propattributnom
   (write-line (strcat ":row{:toggle {key = \"" pn "\"; label =" (vl-prin1-to-string pn) ";}}") file)
 )
 (write-line "}spacer;ok_cancel;}" file)
 (prompt "\nTOTO 1 :")
 (close file)
 (prompt "\nTOTO 2 :")
 (setq dcl_id (load_dialog tmp))
 (prompt "\nTOTO 3 :")
 (if (not (new_dialog "DynBlkProps" dcl_id))
   (exit)
 )
 (prompt "\nTOTO 4 :")
 (foreach p pop2 (setq test23 pop2) (start_list (car p)) (mapcar 'add_list (cdr p)) (end_list))
 (prompt "\nTOTO 5 :")
 (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\"))
(foreach p propattributnom
(if (assoc p POP2)
(setq val2 (nth (atoi (get_tile p)) (cdr (assoc p POP2))))
(setq val2 (get_tile p)))
(if (and val2 (/= va2l \"\"))
(setq ret2 (cons (cons p val2) ret2))))
(and (not ret2) (setq ret2 T))
(setq sel2 (get_tile \"selset\"))
(done_dialog)
   "
 )
 (prompt "\nTOTO 6 :")
 (action_tile "cancel" "(setq ret nil)")
 (prompt "\nTOTO 7 :")
 (start_dialog)
 (prompt "\nTOTO 8 :")
 (unload_dialog dcl_id)
 (prompt "\nTOTO 9 :")
 (vl-file-delete tmp)
 (prompt "\nTOTO 10 :")
 (setq listeparam nil)
 (setq listeattrib nil)
 (foreach p ret
   (if (= (atoi (cdr p)) 1)
     (setq listeparam (cons (car p) listeparam))
   )
 )
 (foreach p ret2
   (if (= (atoi (cdr p)) 1)
     (setq listeattrib (cons (car p) listeattrib))
   )
 )
)

 

et de récuperer les listes de se que j'ai coché dans cette boite de dialogue

 

(defun c:testselection (/
;;;               propdynnom2
              )
 (setvar "cmdecho" 0)
 (setq osm (getvar "osmode"))
 (prompt "\nSELECTIONNER LES BLOCS PARAMETRIQUE A LIER :")
 (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 '<)))

 (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
                       )
              (setq propdynnom2 (cons (vla-get-propertyname att) propdynnom2))
          )
          (setq compt (1+ compt))
   )
 )
 (SETQ TEST13 (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert 0)))))
                                    'getdynamicblockproperties
                       ))
 (setq propdynnom (remove_doubles (vl-sort propdynnom2 '<)))
 (boitepropdyntest)
 (setq compt 0)
 (prompt "\nTOTO 11 :")
 (setq com (sslength selinsert))
 (prompt "\nTOTO 12 :")
;;;  (setq appli "LIERBLOC" )
 (while (< compt com)
(prompt "\nTOTO 13 :")
  (setq ent (cdr (assoc -1 (entget (ssname selinsert compt))))
        nblier "156"
        appli LIERBLOC
        ladate (rtos (getvar "cdate") 2 8)
        l1
;;;          (strcat "(-3 ("appli"
                 ((1040 . ladate) (1071 . nblier) (1000 . LISTEPARAM) (1000 . listeattrib)
;;;                  ))"
                 )
        )
   (prompt "\nTOTO 14 :")

(x_write)
(prompt "\nTOTO 15 :")
   (setq compt (1+ compt))
 )
 (setvar "osmode" osm)
 (setq poi null)
 (princ)
)

 

mais pas a inserer le tout en tant que XDATA par contre

j'ai des parenthese en trop qui se balade et des guillemets en trop aussi surement

 

je veux bien un peux d'aide svp

 

j'ai trouvé ce bout de code sur CADXP

mais je n'arrive pas a la comprendre :blink:

 

;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;              place une liste en xdata sur une entité en préservant les
;                      xdata des autres applications
;  entrées : l    : liste XDATA correspondant à l'application
;            enam : nom d'entité
;            appli: application
;
;  retourne : sans intéret
;------------------------------------------------------------------------------
(defun x_write (l enam appli / ent l1 lsa)
 (regapp appli)
 (setq lsa (x_listappli)) 
;;;  (setq ent (entget enam lsa))
 (setq ent (if (setq l1 (assoc -3 ent))
               (if (assoc (strcase appli) (cdr l1))
                   (setq l1 (subst (cons appli l) (assoc (strcase appli) (cdr l1)) (cdr l1)))
                   (setq l1 (cons (cons appli l) (cdr l1)))
               )
               (setq l1 (list (cons appli l)))
            )
 )
 (entmod (snoc (cons -3 l1) (entget enam)))
)

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

 

bon ca pas l'air d'interesser grand monde :D :D

mon histoire la

 

apres quelque vus sur le site

je me dis que passer par les XDATA seraint pas forcement la bonne idée

 

LATT de patrick utilise les "dictionnaires"

 

Est ce que ca serait pas plus facile à utiliser ?

est ce que la mise a jour serait dns ce cas automatique ?

 

action sur les attributs mais aussi sur le "parametre de visibilité" ou autre parametres remarque

 

permetant de mettre en relation plusieurs attributs plusieurs fois ?

 

xdata ou dictionnaires ???

 

bon noel

 

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

 

l'idée est de faire un peu comme le programme de patrick avec LATT qui lui lit (lier) des attributs entre eux

attribut par attribut pour les faire identique, additionner ou somme

 

je voudrais LIER des blocs entre eux dans la meme optique

en liant leurs attributs de facon identique pour le moment

ou en liant une (des) proprietés dynamique ou de visibilite

 

les blocs peuvent etre different mais bien sur leurs nom d'attributs doivent etre identique

 

dans un premier temps je selectionne les blocs

je récupere leurs noms d'attributs et leurs nom de proprietes dynamiques

 

dans la boite de dialogue je selectionne ce que je veux lier de facon identique

j'en retire deux listes ( les attributs à lier, et les propriétées a lier )

 

apres l'idée est comme le lisp LATT de patrick si on change un attributs dans un bloc les autres lier se mette a jour de facon identique

 

si on change une propriété dynamique ( ex :longueur ) dans un bloc, les autres changent aussi

 

vous allez me dire il suffit de les selectionner et changer les propriétées dans la boite de propriétées

 

sauf que la j'ai 900 panneaux differents, je voudrais changer les attributs sur des blocs que je vois en facade pour que le bloc qui est en plan prenne les meme attributs et la meme visbilté

 

5 attributs par panneaux

 

c'est plus claire B) B) ou tjrs aussi nuageux :blink: :blink: ? loll :D :D :D :D

 

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

coucou

 

je commence à comprendre

mais au niveau du vocabulaire ??

ce que tu appelles le nom d'attribut, c'est l'étiquette ?

 

pour une meilleure compréhension et un test possible

pourrais-tu mettre un fichier avec des blocs en exemple.

 

dans un premier temps je ne vois pas l'intérêt des XDATAS

mais je vais attendre pour être formel.

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Faire ce que tu demandes nécessite de maitriser les réacteurs en LISP ce qui relève d'une (très) bonne maitrise du langage et de la logique.

Or, sans vouloir t'offenser, à lire ce message il semble que tu aies encore des progrès à faire avant de t'attaquer aux réacteurs.

ce n'est certainement pas en faisant un "patchwork" de bouts de codes glanés ici ou là que tu y arriveras.

Commence par les fondamentaux avec des objectifs moins ambitieux en écrivant toi même le code (pas de copier/coller).

 

Quand je lis :

j'ai des parenthese en trop qui se balade et des guillemets en trop aussi surement

je suis obligé de me dire que tu veux courir avant de tenir debout sur tes jambes...

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

Lien vers le commentaire
Partager sur d’autres sites

hello

 

ouai gile je te dirais que j'ai pas des progres a faire sur les dictionnaires, les réacteurs ou les boites de dialogues tout comme le visual lisp mais franchement tout a apprendre depuis le début, sauf que le début je le puise dans les copier coller de vos propres codes que j'essaie d'analyser et de comprendre ligne par ligne, ce qui , tu l'as dit toi meme n'est une evidence.

 

on a pas tous ta facilité pour l'anglais et la programmation

 

je n'ai pas demandé a se que l'on m'ecrive le lisp non plus, juste savoir si je faisais fausse route vers les XDATA, les idata ou les dictionnaires et j'en passe et des meilleurs

 

l'aide à la programmation fournit par autodesk est pratiquement inéxistante en francais

donc j'ai pas bcp de source a ma disposition

 

ha au fait, je tiens pas trop mal sur mes guiboles merci <_<

 

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

Coucou

 

on a pas tous ta facilité pour l'anglais et la programmation

tu veux que je te raconte comment j'ai commencé ?

(en deux mots internet n'existait pas et on tapait dans l'EDIT du DOS)

et je pense pour le connaitre quelque peu que (Gile) pourrait en raconter aussi

si VRAIMENT tu veux avancer, le copier-coller est TABOU

on commence à faire du vélo avec des roues de sécurités latérales

il ne suffit pas de savoir qu'il faut pédaler pour aller vers l'avant

il faut "l'intégrer"

et les exemples sont légion.

 

allez c'est Noël, je m'emporte mais ce genre de discours a toujours le même effet sur moi

 

amicalement comme toujours...

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é