steelbe Posté(e) le 25 avril 2012 Posté(e) le 25 avril 2012 Bonsoir à tous, Je suis de retour sur ce forum pour relancer un sujet que j'aivais édité concernant la mise à jour d'informationsdans un cartouche.En resumé, vous crée un projet avec des plan de debits et d'assemblage.Ces dossier de plans peut contenir de 20 à 200 plans.En cas de reconduction, une mise à jour des specifications peinture peuvent changer. L'idée est de créer un code Lisp qui mettra à jour la spec peinture sur tous les plans concernés.Pour cela, j'ai commencé à écrire un code avec une boîte de dialogue avec 6 list_box pour mettre à jour les informations.Suite à un sujet de (Gile) sur les dictionnaires j'ai commencé le code de la manière suivante:1)(defun c:specpeinture (/ id REFERENCE_1 EP_1 TEINTE_1 REFERENCE_2 EP_2 TEINTE_2) (setq id (load_dialog "peinture_form.dcl")) (if (not (new_dialog "peinture_form" id)) (exit)) (setq REFERENCE_1 (list "PENGUARD EXPRESS" "HARDTOP XP" "select 3" "select 4" "select 5" "select 6" "nselect 7")) (start_list "REFERENCE_1" 5) (mapcar 'add_list REFERENCE_1) (end_list) (setq EP_1 (list "10" "20" "30" "40" "50" "60" "70" "80" "90" "100" "150" "180")) (start_list "EP_1" 5) (mapcar 'add_list EP_1) (end_list) (setq TEINTE_1 (list "RAL.9001" "RAL.9002" "BUFF" "GRIS" "BLANC")) (start_list "TEINTE_1" 5) (mapcar 'add_list TEINTE_1) (end_list) ;;Les trois liste crées se repète mais avec la reference _2, ep_2 etc..... (set_tile "REFENECE_1" (CAR "REFENECE_1")) (set_tile "EP_1" (CAR "EP_1")) (set_tile "TEINTE_1" (CAR "TEINTE_1")) (action_tile "annuler" "(done_dialog 0)") (action_tile "accept" "(getdic)" "(updatdic)") 2)La création du dictionnaire et l'ajout de données(defund (getdic) (setq xname (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")))) ;; Ajouter le dicitonnaire au dictionnaire des objets nommés (dictadd (namedobjdict) "SPECIFICATIONS_PEINTURE" xname) ;; retrouver le dictionnaire (setq dict (dictsearch (namedobjdict) "SPECIFICATIONS PEINTURE")) ;; créer des objets LDATA avec des données (vlax-ldata-put "SPECIFICATIONS_PEINTURE" "REF_1" "PENGUARD EXPRESS") (vlax-ldata-put "SPECIFICATIONS_PEINTURE" "E_1" '(40)) (vlax-ldata-put "SPECIFICATIONS_PEINTURE" "TEI_1" "BUFF") (vlax-ldata-put "SPECIFICATIONS_PEINTURE" "REF_2" "HARDTOP XP") (vlax-ldata-put "SPECIFICATIONS_PEINTURE" "E_2" '(80)) (vlax-ldata-put "SPECIFICATIONS_PEINTURE" "TEI_2" "RAL.9002") 3)La mise à jour du dictionnaire(defund (updatedic) ;; retrouver le dictionnaire (setq dict (dictsearch (namedobjdict) "SPECIFICATIONS PEINTURE")) ;; Metre à jour le dictionnaire (dictrename (SPECIFICATIONS PEINTURE) "REFENECE_1" "REF_1") (dictrename (SPECIFICATIONS PEINTURE) "EP_1" "E_1") (dictrename (SPECIFICATIONS PEINTURE) "TEINTE_1" "TEI_1") )4)C'est à ce niveau que je bloc car je ne sais pas comment faire apparaître les données du dictionnairedans le template sous la forme d'un tableau. Ma première idée à été de creer un block avec des attributs mais cela prendrait trop de temps car tous les plans contenant ce block devront être mise à jour manuellement.Dans le cas d'une quantité importante de plan cette opération devient très côuteux en temps pour la mise à jour. Pourriez-vous m'éclairer sur la methode à appliquer pour s'implifier cette mise à jour en fesant le lien entre les données du dictionnaire et son apparition sur le template. Merci d'avance pour votre aide sur cette fonction steelbe
Patrick_35 Posté(e) le 26 avril 2012 Posté(e) le 26 avril 2012 Salut A te lire, tu as des spec communes à plusieurs dessins.Plutôt que d'utiliser les dictionnaires, pourquoi ne pas se servir d'un fichier extérieur ?La mise à jour sera plus facile, un peu comme les xrefs. Pour répondre à ta question, regarde du coté de (vlax-ldata-get ...) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
steelbe Posté(e) le 26 avril 2012 Auteur Posté(e) le 26 avril 2012 Bonsoir Patrick_35, Cette idée de Xref ne ma pas traversé l'esprit car l'idée que j'avais était de créer une icône dans la barre d'outil pour faire apparaitre une boite de dialogue et définir les nouvelles spec se qui métrait les information à jour.Ce fichier extérieur serait pour moi un fichier excel que je collerais avec un lien dans le template source.Cette solution je l'ais essayé et elle fonctionne car à chaque ouverture d'un plan, les données se mettent à jour.Mais je souhaitais simplifier cette procédure en qui serait si je peu dire (invisible)donc la source seait inaccessible à d'autre utilisateurs qui voudraient ajouter leur petit grain au fichier source.Je regarderai la fonction (vlax-ldata-get) pour voir se qu'elle peut m'apporter de plus. Je reviendrai vers toi pour t'informer du résultat si j'y arrive. Merci :)
steelbe Posté(e) le 7 juin 2012 Auteur Posté(e) le 7 juin 2012 Bonjour Patrick, Suite au message de la dernière fois, j'ai redefinis seque je souhaite faire et cela se feradeux étape.La première est de definir les valeurs que je souhaite voir apparaître dans lors d'une mise à jour.donc:1)la création d'une boite de dialogue pour definir les valeus d'attibuts et les enregistrer dans un fichierau format .csv2)je clickerai sur un autre icône pour faire la mise à jour. En ce moment j'ai crée un DCL pour selectionner les valeurs que je souhaite voir apparaitre lorsque la mise à jour se fera. cette boîte de dialogue se compose de neuf combo_box.(setq Reference_1 (list "---" "BARRIER 77" "PENGURAD EXPRESS" "HARDTOP XP")) (start_list "Reference_1") (mapcar 'add_list Reference_1) (end_list) (setq Thickness_1 (list "---""40" "80" "120" "140" "160" "180")) (start_list "Thickness_1") (mapcar 'add_list Thickness_1) (end_list) (setq Color_1 (list "---" "BUFF" "RAL.5073" "RAL.9001" "RAL.9002")) (start_list "Color_1") (mapcar 'add_list Color_1) (end_list) etc.............. ; Default attributes from the combo_box (setq Reference_1 (get_tile "Reference_1")) (setq Thickness_1 (get_tile "Thickness_1")) (setq Color_1 (get_tile "Color_1")) etc............. (if ddiag1 (progn (setq blockname "HYPERSPECIFICATIONCOAT") je bloc sur l'écriture des données dans un fichier csv car je souhaite faire apparaîtredans la colonne A le nom du bloc, colonne B les Tags, colonne C les valeurs associéesex:ex: colonne A Colonne B Colonne C HYPERSPECIFICATIONCOAT REFERENCE_1 valeur du (setq Reference_1 (get_tile "Reference_1")) HYPERSPECIFICATIONCOAT THICKNESS_1 valeur du (setq Thickness_1 (get_tile "Thickness_1")) HYPERSPECIFICATIONCOAT COLOR_1 valeur du (setq Color_1 (get_tile "Color_1")) Quelle methode puis-je utiliser pour récupérer le nom du block ses attributes ainsi que les valeurs que j'aurai préalablement choisi dans le DCL. Quand j'aurai résolu ce problème je passerai au deuxième code pour faire les mise à jour Si je pouvais obtenir de l'aide sur la methode à employer pour rassembler l'ensemble de ces informations cela me perméttra d'avancer. Les Tags et leur valeurs provienne du DCL le nom du block je l'ai défini sous la forme:(setq blockname "HYPERSPECIFICATIONCOAT") Merci d'avance steelbe
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