PHILPHIL Posté(e) le 3 décembre 2011 Partager Posté(e) le 3 décembre 2011 HELLO patrick a ecrit LATT qui relie les attibuts entre eux est'il possible de relier des blocs entre euxpour aller plus vite en selectionnant ce que l'on voudrait lier a l'interieur des blocsdes attributs de meme noms ( ca va de soit)des tables de blocsun parametre de visibilitéou des propriétés dynamiques de meme non monsieur TOTODESK si tu nous lis a+ phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
PHILPHIL Posté(e) le 14 décembre 2011 Auteur Partager Posté(e) le 14 décembre 2011 BONJOUR toujours dans mon idée de lier des blocs je cherche la methode avantj'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 dynamiques2°: une boite de dialogue avec les attributs et parametres a cocher a mettre en commun3°: 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 date1070 numéro en commun entre bloc lier1000 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 parametres5°: 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 caqui 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 memej'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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
PHILPHIL Posté(e) le 16 décembre 2011 Auteur Partager Posté(e) le 16 décembre 2011 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 contrej'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 CADXPmais 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))) ) FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
PHILPHIL Posté(e) le 21 décembre 2011 Auteur Partager Posté(e) le 21 décembre 2011 salut bon ca pas l'air d'interesser grand monde :D :D mon histoire la apres quelque vus sur le siteje 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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 21 décembre 2011 Partager Posté(e) le 21 décembre 2011 Coucou il faut se dire que sur CadXP, quand on n'a pas de réponsesc'est soit insoluble soit mal expliqué à ce jour, ton message a été lu 163 foisqu'en penses-tu ? perso j'ai pas pigé. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
PHILPHIL Posté(e) le 21 décembre 2011 Auteur Partager Posté(e) le 21 décembre 2011 hello l'idée est de faire un peu comme le programme de patrick avec LATT qui lui lit (lier) des attributs entre euxattribut par attribut pour les faire identique, additionner ou somme je voudrais LIER des blocs entre eux dans la meme optiqueen liant leurs attributs de facon identique pour le momentou 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 blocsje 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 identiquej'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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 21 décembre 2011 Partager Posté(e) le 21 décembre 2011 coucou je commence à comprendremais au niveau du vocabulaire ??ce que tu appelles le nom d'attribut, c'est l'étiquette ? pour une meilleure compréhension et un test possiblepourrais-tu mettre un fichier avec des blocs en exemple. dans un premier temps je ne vois pas l'intérêt des XDATASmais je vais attendre pour être formel. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 21 décembre 2011 Partager Posté(e) le 21 décembre 2011 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 surementje 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 More sharing options...
PHILPHIL Posté(e) le 21 décembre 2011 Auteur Partager Posté(e) le 21 décembre 2011 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 francaisdonc j'ai pas bcp de source a ma disposition ha au fait, je tiens pas trop mal sur mes guiboles merci <_< phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 22 décembre 2011 Partager Posté(e) le 22 décembre 2011 Coucou on a pas tous ta facilité pour l'anglais et la programmationtu 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 aussisi VRAIMENT tu veux avancer, le copier-coller est TABOUon commence à faire du vélo avec des roues de sécurités latéralesil ne suffit pas de savoir qu'il faut pédaler pour aller vers l'avantil 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... Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
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