Aller au contenu

Cotation dans le bon calque


gepetto

Messages recommandés

Hello,

 

Il y a fort longtemps, j'avais trouver sur ce forum un lisp qui permet de mettre la cote dans le bon style et le bon calque.

 

J'aurai voulu y apporter une petit modif, et c'est pour cela que je demande votre aide.

 

j'aimerai que les repères soit aussi mis automatiquement dans le bon style et le bon calque.

 

Je vous remercie

Amicalement

 

;;; créer un calque
(defun calque (NewLayer ColLayer TlLayer)
(if (not (tblsearch "LTYPE" TlLayer))
(command "_LINETYPE" "_L" TlLayer "acadiso" "")
)
(if (not (tblsearch "LAYER" NewLayer))
(command "_layer" "_M" NewLayer "_CO" ColLayer "" "_LT" TlLayer "" "")
(command "_LAYER" "_T" NewLayer "_ON" NewLayer "_S" NewLayer "")
)
)

;-------------------------------------------------------------------------- ----

(defun place_cote (TYP_COT)
(cond
((= TYP_COT "lin")
(princ (strcat "\nCotation linéaire au 1:" (substr TYP_ECH 5)))
(command "_dimlinear")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ali")
(princ (strcat "\nCotation alignée au 1:" (substr TYP_ECH 5)))
(command "_dimaligned")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "con")
(princ (strcat "\nCotation continue au 1:" (substr TYP_ECH 5)))
(command "_dimcontinue")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "lig")
(princ (strcat "\nCotation ligne de base au 1:" (substr TYP_ECH 5)))
(command "_dimbaseline")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ord")
(princ (strcat "\nCotation ordonnée au 1:" (substr TYP_ECH 5)))
(command "_dimordinate")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ray")
(princ (strcat "\nCotation rayon au 1:" (substr TYP_ECH 5)))
(command "_dimradius")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ang")
(princ (strcat "\nCotation angulaire au 1:" (substr TYP_ECH 5)))
(command "_dimangular")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "dia")
(princ (strcat "\nCotation diamètre au 1:" (substr TYP_ECH 5)))
(command "_dimdiameter")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "rep")
(princ (strcat "\nCotation repère au 1:" (substr TYP_ECH 5)))
(command "_leader")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
)
)
;-------------------------------------------------------------------------- ----


;-------------------------------------------------------------------------- ----
(defun init_cct (/ prefix cfgname cfg)
(if (not TYP_COT) 
(setq TYP_COT "lin")
)
(if (not TYP_ECH)
(setq TYP_ECH "cot-50")
)
)
;-------------------------------------------------------------------------- ----


;-------------------------------------------------------------------------- ----
(defun do_accept_cct ()
(setq TYP_COT (get_tile "typ_cot"))
(setq TYP_ECH (get_tile "typ_ech"))
(done_dialog 1)
)
;-------------------------------------------------------------------------- ----



;-------------------------------------------------------------------------- ----
(defun do_cct_dimstyle (ECH)
(cond
((= ECH "cot-1") "COTE-01")
((= ECH "cot-2") "COTE-02")
((= ECH "cot-3") "COTE-03")
((= ECH "cot-5") "COTE-05")
((= ECH "cot-10") "COTE-10")
((= ECH "cot-20") "COTE-20")
((= ECH "cot-25") "COTE-25")
((= ECH "cot-50") "COTE-50")
((= ECH "cot-75") "COTE-75")
((= ECH "cot-100") "COTE-100")
) 
)
;-------------------------------------------------------------------------- ----

;-------------------------------------------------------------------------- ----
(defun do_cct_layer (ECH)
(cond
((= ECH "cot-1") "COTE-01")
((= ECH "cot-2") "COTE-02")
((= ECH "cot-3") "COTE-03")
((= ECH "cot-5") "COTE-05")
((= ECH "cot-10") "COTE-10")
((= ECH "cot-20") "COTE-20")
((= ECH "cot-25") "COTE-25")
((= ECH "cot-50") "COTE-50")
((= ECH "cot-75") "COTE-75")
((= ECH "cot-100") "COTE-100")
) 
)
;-------------------------------------------------------------------------- ----



;-------------------------------------------------------------------------- ----
; programme principal
;-------------------------------------------------------------------------- ----
(defun c:CCT (/ OLD_CMD WHAT_NEXT DCL_ID old_CLAY)
(if (= (getvar "cmdactive") 1)
(command "_exit")
)
;; (setvar "DIMASSOC" 1) ; cotation non associative
;; (setvar "DIMASSOC" 2) ; cotation associative
(init_cct)
(setq dcl_id (load_dialog "cct.dcl"))
(if (not (new_dialog "Cct" dcl_id)) (exit))
(set_tile "typ_cot" TYP_COT)
(set_tile "typ_ech" TYP_ECH)

(action_tile "accept" "(do_accept_cct)")
(action_tile "cancel" "(done_dialog 0)")

(setq what_next (start_dialog))
(unload_dialog dcl_id)
(if (= what_next 1) ;OK
(progn
;(setq old_CLAY (getvar "CLAYER"))             ; reprend le calque d'avant pour que ca fonctionne enlever le ;
(setq OLD_CMD (getvar "cmdecho"))
(setvar "cmdecho" 1)
(setq CCT_DIMSTYLE (do_cct_dimstyle TYP_ECH))
(if (not (tblsearch "DIMSTYLE" CCT_DIMSTYLE))
(alert (strcat "Le style de cote " CCT_DIMSTYLE " n'existe pas"))
(progn
(calque (do_cct_layer TYP_ECH) "251" "CONTINUOUS") ;; la couleur 251 pour le calque
(command "_dimstyle" "_r" CCT_DIMSTYLE) ;; restaurer le style de cote
(place_cote TYP_COT)
)
) 
(setvar "cmdecho" OLD_CMD)
;(setvar "clayer" old_CLAY)                   ; reprend le calque d'avant pour que ca fonctionne enlever le ;
)
)
(princ)
)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour gepetto,

 

qu'entends-tu par "repère" ?

 

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)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Gepetto,

 

Sans utiliser de lisp, tu peux te créer des outils de cotation et de ligne de repère dans une palette d'outils et tu peux paramétrer ces outils de manière à ce que ta cotation ou ta ligne de repère se mette directement dans le bon calque et que le style de cote ou de ligne de repère soit directement le bon.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Oui c'et une solution que j'avais envisager, mais qui ne me convenais guère, surtout qu'après j'avais découvert ce magnifique lisp. que je voudrai la moindre modifier

Ca ne me convenais guère, car ca faisais beaucoup de bouton à mettre dans la palettes et trouvais ca moyennent intuitif.

 

Merci de ta proposition

 

Bonne journée

Lien vers le commentaire
Partager sur d’autres sites

Oui c'et une solution que j'avais envisager, mais qui ne me convenais guère, surtout qu'après j'avais découvert ce magnifique lisp. que je voudrai la moindre modifier

Ca ne me convenais guère, car ca faisais beaucoup de bouton à mettre dans la palettes et trouvais ca moyennent intuitif.

 

Merci de ta proposition

 

Bonne journée

 

Tu peux renommer les outils par des noms plus intuitifs tel que que "Cotation calpinage", "Cotation intérieure", etc, par exemple.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

(initcommandversion 2) ;; pour que l'éditeur s'ouvre

(command "_mleader")

 

à la place de

 

(command "_leader")

 

 

Mais ce n'est pas tout. La commande _leader crée un objet de type "cote", alors qu'un _mleader crée un objet de type "Ligne de repère multiple".

 

Dans le lisp, il y a une ligne

 

(command "_dimstyle" "_r" CCT_DIMSTYLE) ;; restaurer le style de cote

 

qu'il faut laisser, mais qui n'agira pas sur l'aspect des lignes de repère multiples. Il faut donc créer des styles de lignes de repère et les restaurer de la même manière que les styles de cotes.

 

(command "_mleaderstyle" CCT_DIMSTYLE) ;; restaurer le style de repère multiple

 

juste avant (place_cote ...)

 

Amicalement

Vincent

 

PS : pour la petite histoire, le lisp dont nous parlons a connu sa première mouture pour la version 12 d'autocad (12 pas 2012 !). A l'époque, il n'était question ni de ligne de repères multiples, ni de cotes annotatives, ni de palettes.

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)

Lien vers le commentaire
Partager sur d’autres sites

Salut vincent

 

Merci de ton aide, j'ai modifier le fichier comme tu me l'a demander, mais je dois avoir fais qqch de faux.

j'ai une sorte de boucle de repérage qui se crée, et fait planter autocar.

 

Voici ce que j'ai modifier

EN suite ou dois-je mettre l'équivalence style de côte et échelle cote?

 

Merci de ton aide

 

 

 

"Fichier lsp"

 

 

[;;; créer un calque
(defun calque (NewLayer ColLayer TlLayer)
(if (not (tblsearch "LTYPE" TlLayer))
(command "_LINETYPE" "_L" TlLayer "acadiso" "")
)
(if (not (tblsearch "LAYER" NewLayer))
(command "_layer" "_M" NewLayer "_CO" ColLayer "" "_LT" TlLayer "" "")
(command "_LAYER" "_T" NewLayer "_ON" NewLayer "_S" NewLayer "")
)
)

;-------------------------------------------------------------------------- ----

(defun place_cote (TYP_COT)
(cond
((= TYP_COT "lin")
(princ (strcat "\nCotation linéaire au 1:" (substr TYP_ECH 5)))
(command "_dimlinear")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ali")
(princ (strcat "\nCotation alignée au 1:" (substr TYP_ECH 5)))
(command "_dimaligned")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "con")
(princ (strcat "\nCotation continue au 1:" (substr TYP_ECH 5)))
(command "_dimcontinue")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "lig")
(princ (strcat "\nCotation ligne de base au 1:" (substr TYP_ECH 5)))
(command "_dimbaseline")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ord")
(princ (strcat "\nCotation ordonnée au 1:" (substr TYP_ECH 5)))
(command "_dimordinate")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ray")
(princ (strcat "\nCotation rayon au 1:" (substr TYP_ECH 5)))
(command "_dimradius")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "ang")
(princ (strcat "\nCotation angulaire au 1:" (substr TYP_ECH 5)))
(command "_dimangular")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "dia")
(princ (strcat "\nCotation diamètre au 1:" (substr TYP_ECH 5)))
(command "_dimdiameter")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)
)
((= TYP_COT "rep")
(princ (strcat "\nCotation repère au 1:" (substr TYP_ECH 5)))
(command "_mleader")
(while (not (zerop (getvar "cmdactive")))
(command pause)
)	
)
)
)
;-------------------------------------------------------------------------- ----


;-------------------------------------------------------------------------- ----
(defun init_cct (/ prefix cfgname cfg)
(if (not TYP_COT) 
(setq TYP_COT "lin")
)
(if (not TYP_ECH)
(setq TYP_ECH "cot-50")
)
)
;-------------------------------------------------------------------------- ----


;-------------------------------------------------------------------------- ----
(defun do_accept_cct ()
(setq TYP_COT (get_tile "typ_cot"))
(setq TYP_ECH (get_tile "typ_ech"))
(done_dialog 1)
)
;-------------------------------------------------------------------------- ----



;-------------------------------------------------------------------------- ----
(defun do_cct_dimstyle (ECH)
(cond
((= ECH "cot-1") "COTE-01")
((= ECH "cot-2") "COTE-02")
((= ECH "cot-3") "COTE-03")
((= ECH "cot-5") "COTE-05")
((= ECH "cot-10") "COTE-10")
((= ECH "cot-20") "COTE-20")
((= ECH "cot-25") "COTE-25")
((= ECH "cot-50") "COTE-50")
((= ECH "cot-75") "COTE-75")
((= ECH "cot-100") "COTE-100")
) 
)
;-------------------------------------------------------------------------- ----

;-------------------------------------------------------------------------- ----
(defun do_cct_layer (ECH)
(cond
((= ECH "cot-1") "COTE-01")
((= ECH "cot-2") "COTE-02")
((= ECH "cot-3") "COTE-03")
((= ECH "cot-5") "COTE-05")
((= ECH "cot-10") "COTE-10")
((= ECH "cot-20") "COTE-20")
((= ECH "cot-25") "COTE-25")
((= ECH "cot-50") "COTE-50")
((= ECH "cot-75") "COTE-75")
((= ECH "cot-100") "COTE-100")
) 
)
;-------------------------------------------------------------------------- ----
;----------------------------------------------------------------------- ----

(defun do_cct_layer (rep)
(cond
((= ECH "cot-1") "repère01")
((= ECH "cot-2") "repère02")
((= ECH "cot-3") "repère03")
((= ECH "cot-5") "repère05")
((= ECH "cot-10") "repère10")
((= ECH "cot-20") "repère20")
((= ECH "cot-25") "repère25")
((= ECH "cot-50") "repère50")
((= ECH "cot-75") "repère75")
((= ECH "cot-100") "repère100")
) 




;-------------------------------------------------------------------------- ----
; programme principal
;-------------------------------------------------------------------------- ----
(defun c:CCT (/ OLD_CMD WHAT_NEXT DCL_ID old_CLAY)
(if (= (getvar "cmdactive") 1)
(command "_exit")
)
;; (setvar "DIMASSOC" 1) ; cotation non associative
;; (setvar "DIMASSOC" 2) ; cotation associative
(init_cct)
(setq dcl_id (load_dialog "cct.dcl"))
(if (not (new_dialog "Cct" dcl_id)) (exit))
(set_tile "typ_cot" TYP_COT)
(set_tile "typ_ech" TYP_ECH)

(action_tile "accept" "(do_accept_cct)")
(action_tile "cancel" "(done_dialog 0)")

(setq what_next (start_dialog))
(unload_dialog dcl_id)
(if (= what_next 1) ;OK
(progn
;(setq old_CLAY (getvar "CLAYER"))             ; reprend le calque d'avant pour que ca fonctionne enlever le ;
(setq OLD_CMD (getvar "cmdecho"))
(setvar "cmdecho" 1)
(setq CCT_DIMSTYLE (do_cct_dimstyle TYP_ECH))
(if (not (tblsearch "DIMSTYLE" CCT_DIMSTYLE))
(alert (strcat "Le style de cote " CCT_DIMSTYLE " n'existe pas"))
(progn
(calque (do_cct_layer TYP_ECH) "251" "CONTINUOUS") ;; la couleur 251 pour le calque
(command "_dimstyle" "_r" CCT_DIMSTYLE) ;; restaurer le style de cote
(command "_mleaderstyle" CCT_DIMSTYLE) ;; restaurer le style de repère multiple 
(place_cote TYP_COT)
)
) 
(setvar "cmdecho" OLD_CMD)
;(setvar "clayer" old_CLAY)                   ; reprend le calque d'avant pour que ca fonctionne enlever le ;
)
)
(princ)[code]dcl_settings : default_dcl_settings { audit_level = 0 ;}

Cct : dialog {
label = "PLACER UNE COTE";
: row {
: boxed_radio_column {
label = "Type de cotation";
key = typ_cot;
: radio_button {
label = "Linéaire";
mnemonic = "L";
key = lin;
}
: radio_button {
label = "Alignée";
mnemonic = "A";
key = ali;
}
: radio_button {
label = "conTinue";
mnemonic = "T";
key = con;
}
: radio_button {
label = "ligne de Base";
mnemonic = "B";
key = lig;
}
: radio_button {
label = "Ordonnée";
mnemonic = "O";
key = ord;
}
: radio_button {
label = "Rayon";
mnemonic = "R";
key = ray;
}
: radio_button {
label = "anGulaire";
mnemonic = "G";
key = ang;
}
: radio_button {
label = "Diamètre";
mnemonic = "D";
key = dia;
}
: radio_button {
label = "Repère";
mnemonic = "E";
key = rep;
}
}
: boxed_radio_column {
label = "ECHELLE";
key = typ_ech;
: radio_button {
label = "Echelle 1:1";
key = "cot-1";
}
: radio_button {
label = "Echelle 1:2";
key = "cot-2";
}
: radio_button {
label = "Echelle 1:3";
key = "cot-3";
}
: radio_button {
label = "Echelle 1:5";
key = "cot-5";
}
: radio_button {
label = "Echelle 1:10";
key = "cot-10";
}
: radio_button {
label = "Echelle 1:20";
key = "cot-20";
}
: radio_button {
label = "Echelle 1:25";
key = "cot-25";
}
: radio_button {
label = "Echelle 1:50";
key = "cot-50";
}
: radio_button {
label = "Echelle 1:75";
key = "cot-75";
}
: radio_button {
label = "Echelle 1:100";
key = "cot-100";
}
}
}
spacer_1;
ok_cancel;
}

)

/code]

et le fichier dcl

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

(while (not (zerop (getvar "cmdactive")))

(command pause)

)

 

je ne pense pas que ça serve à grand chose. je pense même que c'est ça qui fait entrer dans une boucle sans fin.

 

et avant la ligne (command "_mleader") il faut

 

(initcommandversion 2) ;; pour que l'éditeur s'ouvre

 

sinon on a une commande _mleader en ligne de commande. C'est moins bien.

 

 

Je pense que, jusqu'à présent, tu as des styles de cote préétablis dans un fichier dwt. Il faut faire pareil avec les styles de mleader, avec les mêmes noms, taille de texte, de flèche et facteurs d'échelle que les styles de cotes.

 

Enfin, il y a

(if (not (tblsearch "DIMSTYLE" CCT_DIMSTYLE))

qui ne vérifie que l'existance du style de cote. Si le style de mleader n'existe pas, la commande _mleaderstyle va se planter. Donc il faut aussi vérifier si le style de _mleader existe. Pour ce faire, il faut passer par les dictionnaires : les mleader ne sont plus stockées dans les tableaux commes les styles de cotes, les calques, les vues etc... mais dans le dictionnaire "ACAD_MLEADERSTYLE". Le progrès...

 

Amicalement

Vincent

 

PS : si tu n'aboutis pas, tu peux m'envoyer un MP pour s'échanger les mails. Ainsi, tu pourras m'envoyer ton dwt, et les fichiers lsp et dcl

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)

Lien vers le commentaire
Partager sur d’autres sites

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é