sechanbask Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Bonjour, Je cherche à enregistrer une variable type string dans un dessin, seulement les variables USERI1 à 5 et USERR1 à 5 ne peuvent pas recevoir de string et les USERS1 à 5 ne sont pas enregistrés une fois le dessin fermé. Comment faire ?Peut-on écrire dans "Fichier / Propriétés du dessin" Onglet "Personnaliser" ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
didier Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Coucou je crois que (gile) a donné une solution du côté des dictionnairesmais c'est un peu évolué pour moi comme concept. une solution à deux balles :insérer un bloc (caché) avec comme attribut la string que tu souhaites mémorisertu la retrouveras à chaque ouverture et elle sera modifiable. ou encore une Xdata sur un objet qui sera toujours présent dans le fichierdu genre : un point dans un endroit qui ne gêne pas le dessin. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
sechanbask Posté(e) le 26 septembre 2011 Auteur Posté(e) le 26 septembre 2011 merci pour cette solution elle me conviendrait dans les 3/4 des dossiers sur lesquels je travaille, mais là mes plans sont vérifiés par des macros, et les macros ne sont commodes, impossible de négocier. Donc je suis preneur d'une solution plus AutoCADémique... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Tramber Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 En effet, on ne voit que les dictionnaires, sortes d'extensions du dessin. Ce fil va te donner des pistes. Mais il y a la commande PROPDESS, dernier onglet. On peut extraire ces données avec un CHAMP figurez-vous !Et certainement aussi par programmation.Ne serait-ce pas plus simple que les dicos, solution parfaite au demeurant ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
sechanbask Posté(e) le 26 septembre 2011 Auteur Posté(e) le 26 septembre 2011 Je ne comprends pas en quoi le fil peut m'aider car il ne parle que de xdata que je ne peux pas utiliser. La commande PROPDESS est pratique mais en programmation comment accéder à l'onglet et à l'ajout de variable ?? ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Fraid Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Bonjour, Il y a aussi le registre Windows. https://github.com/Fraiddd
Tramber Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Je ne comprends pas en quoi le fil peut m'aider car il ne parle que de xdata que je ne peux pas utiliser.Pourquoi ? La commande PROPDESS est pratique mais en programmation comment accéder à l'onglet et à l'ajout de variable ??Es-tu inscrit sur theswamp ? Il y a cela, par exemple, par ronjonp : (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-getcustombykey (list suminfo "Job No." "123") ) ) (vla-addcustominfo suminfo "Job No." "123") (vla-setcustombykey suminfo "Job No." "123") ) C'est pour écrire les DWGPROP custom, dont je parle. Il faut chercher plus loin pour les lire ! Je regarde 5 minutes. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 trouvé iciAuteur __assume (defun getCustomDwgProp (key / app counter counter2 counter3 doc dwgprops k v) (vl-load-com) (setq App (vlax-Get-Acad-Object) Doc (vla-Get-ActiveDocument App) DwgProps (vla-Get-SummaryInfo Doc) counter 0 counter2 (vla-NumCustomInfo DwgProps) ) (while (< counter counter2) (vla-GetCustomByIndex DwgProps counter 'k 'v) (if (eq key k) (setq counter3 counter) ) (setq counter (+ 1 counter)) ) (setq k nil v nil ) (if counter3 (vla-GetCustomByIndex DwgProps counter3 'k 'v) ) (if v v nil ) )Marche bien. KEY est le titre de ta propriété. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
sechanbask Posté(e) le 26 septembre 2011 Auteur Posté(e) le 26 septembre 2011 je suis un débutant en lisp : j'ai fait un fichier .lsp que j'ai chargé dans autocad et qui contient : (defun c:prde() (getCustomDwgProp "essai") ) (defun getCustomDwgProp (key / app counter counter2 counter3 doc dwgprops k v) (vl-load-com) (setq App (vlax-Get-Acad-Object) Doc (vla-Get-ActiveDocument App) DwgProps (vla-Get-SummaryInfo Doc) counter 0 counter2 (vla-NumCustomInfo DwgProps) ) (while (< counter counter2) (vla-GetCustomByIndex DwgProps counter 'k 'v) (if (eq "fsdf" k) (setq counter3 counter) ) (setq counter (+ 1 counter)) ) (setq k nil v nil ) (if counter3 (vla-GetCustomByIndex DwgProps counter3 'k 'v) ) (if v v nil ) ) et lorsque je le lance, j'ai droit à une seule réponse nil... j'ai dû oublier quelque chose. ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Tramber Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Autant pour moi :(if (eq key k)et non(if (eq "fsdf" k) [c'était un test chez moi]Je modifie mon message. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
sechanbask Posté(e) le 26 septembre 2011 Auteur Posté(e) le 26 septembre 2011 désolé mais j'ai toujours la même erreur après avoir fait la modification et recharger mon lisp : (defun c:prde() (getCustomDwgProp "essai") ) (defun getCustomDwgProp (key / app counter counter2 counter3 doc dwgprops k v) (vl-load-com) (setq App (vlax-Get-Acad-Object) Doc (vla-Get-ActiveDocument App) DwgProps (vla-Get-SummaryInfo Doc) counter 0 counter2 (vla-NumCustomInfo DwgProps) ) (while (< counter counter2) (vla-GetCustomByIndex DwgProps counter 'k 'v) (if (eq key k) (setq counter3 counter) ) (setq counter (+ 1 counter)) ) (setq k nil v nil ) (if counter3 (vla-GetCustomByIndex DwgProps counter3 'k 'v) ) (if v v nil ) ) ça vient de moi ? ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
zebulon_ Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Bonjour, Fraid proposait d'utiliser le registre Windows : cela ne semble pas correspondre à la demande puisque la variable doit être enregistrée pour chaque fichier, si j'ai bien compris. Or le registre semble être plus approprié pour enregistrer des variables communes à tous les fichiers. Les xdata sont très bien également, mais sont rattachés à des objets (qui peuvent malheureusement être effacés, même si on les planque Dieu sait où). Je pense que le plus simple est d'utiliser des dictionnaires via les "ldata" : en plus, c'est un concept très simple d'utilisation. (vlax-ldata-put "mondico" "macle" "ceci est un texte") ;; pour enregistrer(vlax-ldata-get "mondico" "macle") ;; pour récupérer la valeur stockée dans "macle" de "mondico" sachant que la donnée stockée peut être également numérique. C'est peut être plus souple et plus simple que de passer par des propriétés de dessin, quoi qu'on ait pu en dire... AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Tramber Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Ben oui Vincent. On a bien les dicos.Mais ma méthode est un peu plus pratique pour le dessin avec les CHAMPS... sechanbask !Chez moi ca marche très bien !Sinon bascule sur l'option des dicos. Vincent a rappelé les fonctions primaires. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
zebulon_ Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Mais ma méthode est un peu plus pratique pour le dessin avec les CHAMPS... sans aucun doute, mais l'utilisation des champs n'était pas demandée par la question de départ et comme on peut penser, à tort, que les dictionnaires sont compliqués à utiliser, il me semblait opportun de proposer cette voie qui peut résoudre le problème en 2 lignes. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 26 septembre 2011 Posté(e) le 26 septembre 2011 Salut, Je dirais comme zebulon, le plus simple est d'utiliser les fonctions vlax-ldata* :(vlax-ldata-put "dictName" "keyName" value)Crée un dictionnaire nommé "dictName" dans le quel la valeur de value est stockée dans la clé "keyName".Pour récupérer la valeur, il suffit de faire :(vlax-ldata-get "dictName" "keyName") L'inconvénient des ldata c'est que les données ne sont accessibles qu'en LISP (ou ObjectARX).On peut faire la même chose avec des dictionnaires traditionnels (accessible avec tous les langages), j'avais fait des routines équivalentes aux fonctions vlax-ldata* (voir ici). On peut aussi attacher des xdata au calque "0". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
sechanbask Posté(e) le 27 septembre 2011 Auteur Posté(e) le 27 septembre 2011 merci pour tout, j'ai finalement pris l'option pour définir le calque : (defun c:RVR() (setq calque_rev (getstring "\nCalque à utiliser pour les nuages de révision : ")) (vlax-ldata-put "calques" "calque_nuage_rev" calque_rev) ) l'utilisation finale : (defun c:CVB() ; affiche une boite mais pour l'instant c'est tout ;(setq Id(load_dialog "RVV.dcl")) ;(new_dialog "bienvenue" Id) ;(start_dialog) (setq courant_cvb (getvar "clayer")) (setq accroche_cvb (getvar "osmode")) (setvar "osmode" 0) (command "clayer" (vlax-ldata-get "calques" "calque_nuage_rev" )) (command "rectangle" pause pause) (setq der_cvb (entlast) js (ssadd)) (if (= 4 (getvar "INSUNITS")) (command "NUAGEREV" "longueur" "500" "500" "objet" der_cvb "non")) (if (= 5 (getvar "INSUNITS")) (command "NUAGEREV" "longueur" "50" "50" "objet" der_cvb "non")) (if (= 6 (getvar "INSUNITS")) (command "NUAGEREV" "longueur" "0.5" "0.5" "objet" der_cvb "non")) (setvar "osmode" accroche_cvb) (command "clayer" courant_cvb ) ) Je pense que je ferais de même pour les cotations...S'il y a des améliorations surtout dans le CVB, n'hésitez pas. ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
zebulon_ Posté(e) le 27 septembre 2011 Posté(e) le 27 septembre 2011 On peut aussi attacher des xdata au calque "0". c'est rusé, je n'avais jamais pensé à cette option AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
didier Posté(e) le 21 octobre 2011 Posté(e) le 21 octobre 2011 coucou je me permets de rappeler que le forum actuel est DÉBUTERce ne sont pas des codes de débutants. à moins que débuter signifie copier-coller :angry: amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
zebulon_ Posté(e) le 21 octobre 2011 Posté(e) le 21 octobre 2011 Bonjour, tout à fait d'accord. Je pense néanmoins que le concept des vlax-ldata relèvent du niveau débutant. Enregistrer une donnée et la récupérer, c'est quand même la base de l'informatique. C'est un concept qu'on trouve sur n'importe quelle calculatrice un peu scientifique.Il n'en va évidemment pas de même pour les xdata ou l'accès aux propriétés du dessin qui demandent nettement plus d'expérience en lisp ou vlisp. Et copier/coller un code sans le comprendre et le maitriser un minimum et une chose que j'évite. Mais étudier un code et essayer de le comprendre permet toujours de progresser. A moins d'être un génie, c'est toujours en copiant ses maîtres qu'on avance. Alors, copions mais intelligemment. On a tous commencé comme arpette, mais un moment donné il faut passé à autre chose que de balayer l'atelier. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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