Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous...

 

Hier, et grace aux nombreux conseils des membres de CadXP, j'ai écris cette petite routine.... Mais il y a beaucoup de trucs à corriger....

- le passage à un SCU local pendant la routine... Dangeureux si l'utilisateur l'interompt...

- l'insertion du texte qui se promène en deux fois ( pour l'ajuster* )

 

*: lors de l'insertion du texte, on ne vois pas sa taille, alors on clique un endroit au hazard dans le dessin, puis, je le sélectionne et le fais déplacer pour que l'utilisateur le positionne correctement...

 

Au début de cette routine, je vérifie l'échelle du dessin (Ech). Mais je vous donne tout...

 

La ligne de commande dans mon MNS :

    [symbole + Ancienne borne]^C^C(c:xPhBorne);\(c:xPhTexte "Borne" "Simplex.shx" "1" "0" "Limites (Borne) ancienne" "1" "c" "3" "Ancienne borne");

 

Puis, les routines de Vlisp :

(defun c:xPhBorne ()
 (if (= (setq Ech (vlax-ldata-get "Phalene" "Ech1")) nil) (PhEch)) ;_ Fin de if
 (setq p1 (getpoint "\nPosition de la borne : "))
 (command "_donut" (/ Ech 1250) (/ Ech 830) p1 "")
 (if (/= (setq Ech (vlax-ldata-get "Phalene" "Ech2")) nil)
   (command "_donut" (/ Ech 1250) (/ Ech 830) p1 "")
   ) ;_ Fin de if
 ) ;_ Fin de defun

 

 	; Ecrit un texte à l'échelle (avec Style de texte et Calque)
; Si cette routine existe, c'est grace à CadXP et à ces membres... Alors un grand merci à eux
(defun c:PhTexte  (NomTxt Police Comp Inclin NomCalq Coul Just Haut Texte / pt1 rot)
; NomTxt : nom du style de texte  /  Police : nom de la police (SHX ou TTF)
; Comp : facteur d'extention/compression  /  Inclin : angle d'inclinaison du texte
; NomCalq : nom du calque  /  Coul : couleur du calque
; Just : justification du texte (milieu, centre gauche...)  /  Haut : hauteur du texte
; Texte : texte à écrire
 (if (not (tblsearch "STYLE" NomTxt)) (command "-style" NomTxt Police "0" Comp Inclin "N" "N" "N"))
 (command "_ucs" "_v")
 (if (= Just "") (setq Just "c"))
 (setvar "CMDECHO" 1)
 (setq Haut (atof Haut))
 (if (= (setq Ech (vlax-ldata-get "Phalene" "Ech1")) nil) (c:PhEch))
 (setq pt1 (getpoint (strcat "\nCentre du texte <" (rtos (car (getvar "lastpoint"))) "," (rtos (cadr (getvar "lastpoint"))) "," (rtos (caddr (getvar "lastpoint"))) ">: ")))
 (if (null pt1) (setq pt1 (getvar "lastpoint")))
 (setq rot (getorient pt1 (strcat "\nOrientation du texte <" (angtos 0) ">: ")))
 (if (not rot) (setq rot 0.0)) ; valeur en radian et dans le sens trigo
   (if (= (setq Ech (vlax-ldata-get "Phalene" "Ech1")) nil) (PhEch))
   (command "-calque" "e" (strcat NomCalq " " (rtos (fix Ech) 2 0)) "co" Coul "" "")
   (setq js (ssadd))
   (command "_.text" "j" "mc" "_none" pt1 (/ (* Haut Ech) 1000.0) (polar pt1 rot 10) Texte)
   (setq js (ssadd (entlast) js))
   (command "_move" js "" "_none" pt1)
   (redraw js 2) ; Ca, ça ne fonctionne pas.... Je cherche encore à utilisation "redraw" correctement
   (command "_ucs" "_w")
 (princ)
 )

 

 ; Xdata de la première échelle
(defun c:PhEch (/ Ech)
 (setq Ech (vlax-ldata-get "Phalene" "Ech1"))
 (if Ech
   ;; si Ech est déjà défini
   (progn
     (if (setq Ech (getreal (strcat "Ancienne échelle primaire (1/" (rtos Ech) ") - Nouvelle échelle primaire : 1/" )))
       ;; Si Ech est re-défini
       (vlax-ldata-put "Phalene" "Ech1" Ech)
       ) ;_ Fin de if
     (princ
       (strcat "\nEchelle primaire = 1/" (rtos (vlax-ldata-get "Phalene" "Ech1")))
       ) ;_ Fin de princ
     ) ;_ Fin de progn

 

     ;; si Ech n'est pas encore défini
   (progn
     (setq Ech (getreal "Échelle du dessin primaire 1/"))
     (vlax-ldata-put "Phalene" "Ech1" Ech)
     (princ
       (strcat "\nEchelle primaire = 1/" (rtos (vlax-ldata-get "Phalene" "Ech1")))
       ) ;_ Fin de princ
     ) ;_ Fin de progn
   ) ;_ Fin de if
 (princ)
 ) ;_ Fin de defun

 

 ; Xdata de la seconde échelle
(defun c:PhEch2 (/ Ech)
 (setq Ech (vlax-ldata-get "Phalene" "Ech2"))
 (if Ech
   ;; si Ech est déjà défini
   (progn
     (if (setq Ech (getreal (strcat "Ancienne échelle secondaire (1/" (rtos Ech) ") - Nouvelle échelle secondaire : 1/" )))
       ;; Si Ech est re-défini
       (vlax-ldata-put "Phalene" "Ech2" Ech)
       ) ;_ Fin de if
     (princ
       (strcat "\nEchelle secondaire = 1/" (rtos (vlax-ldata-get "Phalene" "Ech2")))
       ) ;_ Fin de princ
     ) ;_ Fin de progn

 

     ;; si Ech n'est pas encore défini
   (progn
     (setq Ech (getreal "Échelle secondaire du dessin 1/"))
     (vlax-ldata-put "Phalene" "Ech2" Ech)
     (princ
       (strcat "\nEchelle secondaire = 1/" (rtos (vlax-ldata-get "Phalene" "Ech2")))
       ) ;_ Fin de princ
     ) ;_ Fin de progn
   ) ;_ Fin de if
 (princ)
 ) ;_ Fin de defun

 

Attention aux "x" des les noms des routines... Si non, ça donne c:Phpatati...

 

Merci à tous....

 

Si ces routines existe... C'est grace à vous.... C'est à 70% du copier/coller ! ! !

 

Bonne journée à tous....

 

Et merci encore...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

Comme nous te l'avons déjà expliqué, bonuscad et moi si je me souviens bien, on utilise (defun c:MaFonction ... ) quand on veut créer une commande qu'on appelle en tapant directement MaFonction sur la ligne de commande. Si ce n'est pas le cas, et dans ton cas çà ne semble pas l'être puisque tu fais une macro avec la fonction pincipale et ses arguments et que les sous-routines sont appelées par celle-ci, il est plus simple de faire (defun MaFonction ...) et çà nous éviterait tous ces smilies qui polluent ton message.

 

Ceci dit, pour le changement de SCU (comme pour les changements de variables système dans un LISP), la restauration de l'environnement initial se fait par la redéfinition de la fonction *error*

 

Exemple de fonction de gestion des erreurs:

 

(defun PhTexte_err (msg)
 (if (/= msg "Fonction annulée")
   (princ (strcat "\nErreur: " msg))
 )
 (command "_ucs" "_restore" "scu_init")
 (command "_ucs" "_del" "scu_init")
 (setq	*error*	m:err
m:err nil
 )
 (princ)
) 

 

Il faut ensuite ajouter dans le LISP

 

au début de la fonction principale :

 

(setq m:err *error* ;_ on stocke la fonction *error* initiale
*error* PhTexte_err) ;_ on la remplace par la fonction PhTexte_err
(command "_ucs" "_save" "scu_init") ;_ on sauvegarde le SCU initial dans un SCU nommé

 

à la fin de la fonction principale (c'est la même chose qu'à la fin de PhTexte_err) :

 

(command "_ucs" "_restore" "scu_init")
 (command "_ucs" "_del" "scu_init")
 (setq	*error*	m:err
m:err nil
 )

 

PS : pour le texte, je ne suis pas sûr de bien comprendre ce que tu veux faire, mais si tu veux que l'utilisateur voit le texte et l'insère à l'écran, tu peux faire un bloc nommé "PhTexte" avec ton texte (point d'insertion au "MilieuCentre" du texte) et faire :

 

(command "_.-insert" "PhTexte" pause "" "" ""

)

 

et tu peux, si tu veux, à la suite décomposer et purger le bloc :

 

(command "_.explode" (entlast))
(command "_.-purge" "_blocks" "PhTexte" "" "_yes") 

 

[Edité le 16/6/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci Gile, mais pour une fois que j'avais compris du premier coup....

 

J'ai mis "c:" car j'utilise aussi ces routines depuis le MNS :

  [Première échelle]^c^c(c:xPhEch)
 [Deuxième échelle]^c^c(c:xPhEch2)

 

Pour le gestion des erreurs, j'ai pas encore tout saisie.... Ce sont les astérisques qui me gênent... Mais je trouverais...

 

Pour la sauvegarde du scu, je vais l'intégrer de ce pas dans mes routines...

 

Pour transformer un texte qui n'existe pas en un bloc... Je vais chercher cet après-midi... Si je trouve le temps....

 

Merci encore...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci Gile, mais pour une fois que j'avais compris du premier coup....

 

pas tout à fait ;)

 

Si tu fais (defun C:xPhEch ....), tu peux mettre directement dans ta macro ^C^CxPhEch; ou taper au clavier xPhEch, le C: sert à céfinir un nom de commande utilisable comme les commandes AutoCAD prédéfinies.

 

Si tu fais (defun PhEch ...), tu mets dans ta macro ^C^C(PhEch); ou tu tapes la même chose au clavier (PhEch)

 

[Edité le 16/6/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Voilà ! ! C'est que je voulais , en un premier temps, faire

^C^C(c:xPhEch "x")

Avec x comme importance de l'échelle

x=1 pour la première échelle (qui donne (vlx-ldata...."Echel1"))

x=2 pour la deuxième ........... ( - - - - - - - - - - - - -"Echel2"))

 

Mais comme le code que tu as écris était tellement bien, que j'ai osé le modifier... ;)

 

Et puis aussi, si tout fonctionne avec c: j'ai pensé qu'en faisant ça à toutes mes routines, j'était sûr qu'elles seraient appelées de partout sans erreurs...

 

Mais s'il vaut mieux réfléchir à la source de l'appel de cette routine pour ne pas poser de problèmes dans l'avenir... Je vais les modifier...

 

Sinon, c'est pas "grave" si je les laisse comme-çà pour l'instant ?

 

Merci à toi...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

C'est pas GRAVE, mais si tu tapes xPhTexte à la ligne de commande, comme le permet le (defun c: ...), tu auras le message d'errreur suivant ; erreur: nombre d'arguments insuffisants

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é