Aller au contenu

Messages recommandés

Posté(e)

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]

Posté(e)

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

Posté(e)
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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)
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

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é