pros2i Posté(e) le 7 mars 2009 Posté(e) le 7 mars 2009 Bonjour, En autolisp, et Autocad 2009 j'essaye de corrigé un programme lisp qui fonctionne avec Autocad 2000 afin de modifier le nombre de chiffre apres la virgule pour une cotation et y compris la tolerance (setvar "CMDECHO" 0) (setq StyleCourrant (getvar "DIMSTYLE")) (setq default (getvar "DIMTDEC")) (setq Ens (ssget)) (setq Texte (strcat (strcat "Nombre de décimales pour les cotations <" (rtos default) "> : "))) (setq Valeur (getreal Texte)) (if (= Valeur nil) (setq Valeur default)) (if (> Valeur 8) (setq Valeur 8)) (setq corr (expt 10 Valeur)) (setq EnsCot (ssget "P" '((0 . "DIMENSION")))) (setq i 0) (setq cpt (sslength EnsCot)) (repeat cpt (setq Entite (entget (ssname EnsCot i))) (setq NomEnt (cdar Entite)) (setq Tol_Ent (entget (ssname EnsCot i) '("TOLERANCE"))) (setq Tol_Ent_Min (entget (ssname EnsCot i) '("TOLE_MIN"))) (setq Tol_Ent_Max (entget (ssname EnsCot i) '("TOLE_MAX"))) (setq Ech_Ent (entget (ssname EnsCot i) '("SCALE"))) (setq StylCot (cdr (assoc 3 Entite))) (if (/= StylCot "*SANSNOM") (command "COT" "_RESTORE" StylCot "Quitter") (progn (setq StylCot (cdr (assoc 1000 (cdr (car (cdr (assoc -3 DefCot))))))) (if (/= StylCot nil) (command "COT" "_RESTORE" StylCot "Quitter")) ) ) (setvar "DIMTDEC" Valeur) (setvar "DIMTOL" 1) (setq TolP (cdr (assoc 1040 (cdr (car (cdr (assoc -3 Tol_Ent_Min ))))))) (if (/= TolP nil) (setvar "DIMTP" (/ (float (fix (* TolP corr))) corr))) (setq TolM (cdr (assoc 1040 (cdr (car (cdr (assoc -3 Tol_Ent_Max ))))))) (if (/= TolM nil) (setvar "DIMTM" (/ (float (fix (* TolM corr))) corr))) (command "COT" "_UPDATE" NomEnt "" "Quitter") (setq i (1+ i)) ) (if (/= StyleCourrant "*SANSNOM") (command "COT" "_RESTORE" StyleCourrant "Quitter")) (setvar "DIMTDEC" default) (setvar "CMDECHO" 1) (princ) La valeur Tolp est nil et ca bloque. Je ne trouve pas la solution. Une piste à me donner. Merci Pat [Edité le 18/4/2009 par pros2i]
bonuscad Posté(e) le 8 mars 2009 Posté(e) le 8 mars 2009 Bonjour, Ne pouvant appliquer ta routine, je ne peux voir exactement ce que tu veux produire.Cependant je te propose de te tourner vers l'activeX qui sera beaucoup plus simple pour modifié tes cotations (cela t'évitera "d'éplucher" les tables de code DXF) Voici un exemple qu'il t'appartiendra de compléter et d'ajuster. ((lambda ( / ) (while (null (setq js (ssget "_+.:E:S" '((0 . "DIMENSION")))))) (cond (js (vl-load-com) (setq ename (vlax-ename->vla-object (ssname js 0))) (vlax-put ename 'ToleranceDisplay 1) (vlax-put ename 'TolerancePrecision 2) (vlax-put ename 'PrimaryUnitsPrecision 4) ) ) )) Pour avoir les propriétés que tu peux modifier, sert toi de la commande suivante sur l'objet que tu veux modifier: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) t) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pros2i Posté(e) le 11 mars 2009 Auteur Posté(e) le 11 mars 2009 Bonjour, Ne pouvant appliquer ta routine, je ne peux voir exactement ce que tu veux produire.Cependant je te propose de te tourner vers l'activeX qui sera beaucoup plus simple pour modifié tes cotations (cela t'évitera "d'éplucher" les tables de code DXF) Voici un exemple qu'il t'appartiendra de compléter et d'ajuster. ((lambda ( / ) (while (null (setq js (ssget "_+.:E:S" '((0 . "DIMENSION")))))) (cond (js (vl-load-com) (setq ename (vlax-ename->vla-object (ssname js 0))) (vlax-put ename 'ToleranceDisplay 1) (vlax-put ename 'TolerancePrecision 2) (vlax-put ename 'PrimaryUnitsPrecision 4) ) ) )) Pour avoir les propriétés que tu peux modifier, sert toi de la commande suivante sur l'objet que tu veux modifier: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) t) Merci je vais regarder. Pat
pros2i Posté(e) le 13 mars 2009 Auteur Posté(e) le 13 mars 2009 Bonjour Bonuscad, Pour avoir les propriétés que tu peux modifier, sert toi de la commande suivante sur l'objet que tu veux modifier: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) t) J'ai essayé ta commande mais j'obtiens cela : ; erreur: no function definition: VLAX-ENAME->VLA-OBJECT Que dois-je installer ou cocher ? Merci Pat
bonuscad Posté(e) le 13 mars 2009 Posté(e) le 13 mars 2009 Que dois-je installer ou cocher Comme dans la routine proposée, (vl-load-com) doit être exécuté au moins 1 fois dans la session pour avoir accès aux fonction (vlax-????) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pros2i Posté(e) le 13 mars 2009 Auteur Posté(e) le 13 mars 2009 Merci Bonuscad Que dois-je installer ou cocher Comme dans la routine proposée, (vl-load-com) doit être exécuté au moins 1 fois dans la session pour avoir accès aux fonction (vlax-????) OK maintenant cela fonctionne, Je regarde maintenant ton 1er script Pat
pros2i Posté(e) le 13 mars 2009 Auteur Posté(e) le 13 mars 2009 Encore Merci, Maintenant cela fonctionne, plus qu'à comprendre les différents paramètres. Existe-t-il un listing ? Merci Pat
bonuscad Posté(e) le 13 mars 2009 Posté(e) le 13 mars 2009 Existe-t-il un listing ? Désolé, comprends pas! Tu veux dire un récapitulatif des fonction (vlax-????)Si c'est cela, pour ma part je regarde l'aide des programmeur d'Autocad en VBA (les fonctions sont similaires). Il n'y a rien en aide autolisp (ou très peu, seule les vlax-curve) :mad: Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pros2i Posté(e) le 13 mars 2009 Auteur Posté(e) le 13 mars 2009 Si c'est cela, pour ma part je regarde l'aide des programmeur d'Autocad en VBA (les fonctions sont similaires). :mad: OK je vais regarder. Merci Pat
(gile) Posté(e) le 13 mars 2009 Posté(e) le 13 mars 2009 Salut, Un petit truc :Dans l'éditeur Visual LISP, faire CTRL+F1 (ou l'icone [?]) et dans la boite dialogue entrer vla-get-NomDeLaPropriété ou vla-NomDeLaMéthode et l'aide s'ouvre directement à la bonne page. On peut aussi sélectionner la fonction dans le code (double clic) et faire CTRL+F1 ensuite. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pros2i Posté(e) le 14 mars 2009 Auteur Posté(e) le 14 mars 2009 Salut, Un petit truc :Dans l'éditeur Visual LISP, faire CTRL+F1 (ou l'icone [?]) et dans la boite dialogue entrer vla-get-NomDeLaPropriété ou vla-NomDeLaMéthode et l'aide s'ouvre directement à la bonne page. On peut aussi sélectionner la fonction dans le code (double clic) et faire CTRL+F1 ensuite. Merci pour l'information Pat
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