Aller au contenu

Messages recommandés

Posté(e)

Salut

est il possible de memoriser le style de cote en cours dans une variable

pour pourvoir cote un element avec un autre style de cote et revenir automatique a celui memoriser

comme pour les calques

(setq Calq (getvar "CLAYER")).....

Posté(e)

merci

ca marche en ligne de commande

mais j'essaye de rajouter ca a un lisp que tu as cree :) mais ca ne

et je ne suis pas doue

si tu peux le corriger

merci d'avance

 

 ;;; INTRODUCTION du PROGRAMME - Redéfinition de *error*
(defun INTRO_PRG_ERR ()

(vl-load-com)
(vla-StartUndoMark
(vla-get-ActiveDocument (vlax-get-acad-object))) 
(SAVE&SET_VAR "cmdecho" 0)
(command "_undo" "_mark")

(setq Sauv_EXerror *error*) ; enregistrement *error* autocad

; Enregistrement du environnement Actif (SCU / Calque /...
(setq list_env_actif (list (getvar "ucsorg")
(getvar "ucsxdir")
(getvar "ucsydir")
(getvar "ucsicon")
(getvar "clayer")
(getvar "orthomode")
(getvar "dimstyle")
(getvar "osmode")))

; Gestion des Erreur remplaçant celle d'Autocad
(setq *error* REDEF_ERROR) 
)

;;; ROUTINE de GESTION des ERREURS remplaçant celle d'Autocad
(defun REDEF_ERROR (msg)
(if (or (= msg "Fonction annulée")
(= msg "Function cancelled")
(= msg "quitter / sortir abandon")
(= msg "quit / exit abort"))
(princ) 
(princ (strcat "\nErreur: " msg))
)
(command "_undo" "_back")
(END_PRG_ERR)
)

;;; ROUTINE ENREGISTREMENT VARIABLE+MODIF VARIABLE ((gile) cadXP)
(defun SAVE&SET_VAR (var val)
(cond
((getvar var)
(setq SavedSysVarLst
(cons (list 'setvar var (getvar var)) SavedSysVarLst))
(if val
(setvar var val)))
)
)

(defun c:CBC ()
(INTRO_PRG_ERR) 
(setq Calq (getvar "CLAYER"))
(setq dim (getvar "DIMSTYLE")) 
(SAVE&SET_VAR "CLAYER" "CHAINAGE")
(save&SET_VAR "DIMSTYLE" "ech10-cm")
(command "_DIMLINEAR" Pause Pause Pause)
(setvar "CLAYER" Calq)
(setvar "DIMSTYLE" dim) 

(princ)
(END_PRG_ERR) 
)

;;; RESTORE_VAR
;;; Restaure leurs valeurs initiales aux variables système de "SavedSysVarLst"
;;;
;;; ex: (RESTORE_VAR)
;;; -> (getvar "orthomode") : 0
;;; -> (getvar "autosnap") : 63
;;; -> SavedSysVarLst : nil 

(defun restore_var ()
(mapcar 'eval SavedSysVarLst)
(setq SavedSysVarLst nil)
)
;;; FIN de PROGRAMME - ; retour *error* initial
(defun END_PRG_ERR ()

; Restauration de l'environnement Actif enregistré
(command "_ucs" "_w"
"_ucs" "_3" "_non" '(0 0 0)
"_non" (nth 1 list_env_actif)
"_non" (nth 2 list_env_actif)
"_ucs" "_o" "_non" (trans (nth 0 list_env_actif) 0 1))

(setvar "ucsicon" (nth 3 list_env_actif))
(setvar "clayer" (nth 4 list_env_actif))
(setvar "orthomode"(nth 5 list_env_actif))
(setvar "osmode" (nth 6 list_env_actif))
(setvar "dimstyle" (nth 7 list_env_actif))

(mapcar 'eval SavedSysVarLst)

;remise à nil
(setq *error* Sauv_EXerror
list_env_actif nil
SavedSysVarLst nil
Sauv_EXerror nil
scu_init nil) 

(vla-EndUndoMark
(vla-get-ActiveDocument (vlax-get-acad-object)))

)

Posté(e)

Je ne comprends pas bien ce que tu veux faire mais ça me semble bien compliqué, si c'est juste pour pour faire une cote linéaire dans un calque et un style de cote donné.

 

Il y a beaucoup de redondances dans ton code, soit tu fait :

(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))

soit tu fait :

(command "_undo" "_mark")

mais il n'est pas nécessaire de faire 2 fois la même chose.

 

Quant à la variable DIMSTYLE tu la sauvegardes et la restaure 3 fois !

- dans la liste list_env_actif

- avec la routine Save&SetVar

- dans la variable dim

 

Si tu utilises Save&SetVar, sert t'en donc pour toutes les variables système que tu veux sauvegarder puis restaurer. Si tu ne changes pas la valeur de la variable, tu peux faire :

(Save&SetVar"orthomode" nil) et si la valeur de ORTHOMODE est changée pendant les "pause", la valeur initiale sera resaurée quand tu fais (RestoreVar) ou (mapcar 'eval SavedSysVarLst) - là aussi un seul suffit.

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

Posté(e)

salut

en fait je comprend pas trop le lisp donc je bidouille plus qu'autre chose

Je viens de m'apercevoir que la commande dymstyle est en lecture seul donc impossible de lui donner une valeur

par contre par la commande on peut changer le style de cote

donc je vais me rabattre sur des ligne de commande a la suite

merci quand meme pour ton aide

 

 

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é