Aller au contenu

Contour avec texte surface


Hydro8

Messages recommandés

Bonjour

 

Dans mon métier de géomètre il m'arrive de devoir réaliser des contours (pas forcément de pièce) et ensuite d'inscrire la surface de ce contour.

 

Chaque contour possède un numéro qui s'incrémente, par exemple 13b1 / 13b2 etc...

 

Du coup pour le moment il s'agit d'un texte multiligne avec en gros le numéro et en dessous la surface.

 

1) Serait-il possible d'inscrire la surface du contour directement quand on le créer ? J'utilise ce lisp pour créer le contour :

 

(defun c:msurfacefraction (/ CLAORIG)

 (defun *error*  (msg)
   (setvar "clayer" CLAORIG)
   (setvar "plinewid" 0)
   (and msg
        (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*"))
        (princ (strcat "\nErreur: " msg))
   )
 )
 (setvar "plinewid" 0.0)
 (setq CLAORIG (getvar "CLAYER"))

 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")

 (command "contour")

 (while (> (getvar "cmdactive") 0)

   (command pause)

 (princ)
 )

 (setvar "clayer" CLAORIG)
 (setvar "plinewid" 0)
 (princ)

) 
 

 

2) Serait-il possible d'insérer le texte multiligne avec la surface et en incrémentant le numéro de surface ?

 

Merci beaucoup pour votre aide !

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 206
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Images postées

Salut Hydro8.

 

Je viens de te faire un code qui devrait te convenir :

;;; ***********************************************************
;;; Dessine un contour, puis place un texte incrémenté et la   
;;; surface dans un multitexte       Pour Hydro8 de CadXP.com  
;;; ***********************************************************
(defun c:Hydro8 (/ old_osmd PrefixIncrement ValIncrement Option Surf Pt_Ins MText)
 (princ "\nDéveloppé par Denis H.")
;;; Active le début de l'undo
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (setq NbDec (getvar "luprec"))
 (setq PrefixIncrement (vlax-ldata-get "DenisH" "PrefixIncrement" "13B"))
 (if (= PrefixIncrement nil)
   (vlax-ldata-put "DenisH" "PrefixIncrement" "13B")
 ) ;_ Fin de if
 (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement" 1))
 (if (= ValIncrement nil)
   (vlax-ldata-put "DenisH" "ValIncrement" 1)
 ) ;_ Fin de if
 (initget "Préfix Nombre")
 (setq Option (getkword
                (strcat "\nOptions des textes [Préfix/Nombre] <" PrefixIncrement (itoa ValIncrement) "> : ")
              ) ;_ Fin de getkword
 ) ;_ Fin de setq
 (cond ((= Option "Préfix")
        (setq PrefixIncrement
               (getstring (strcat "\nSaisir le préfix de l'incrémentation <" PrefixIncrement "> : ")) ;_ Fin de getstring
        ) ;_ Fin de setq
        (vlax-ldata-put "DenisH" "PrefixIncrement" PrefixIncrement)
       )
       ((= Option "Nombre")
        (setq ValIncrement (getint (strcat "\nSaisir le prochain numéro de l'incrémentation " (itoa ValIncrement) " : "))) ;_ Fin de getstring
        (vlax-ldata-put "DenisH" "ValIncrement" ValIncrement)
       )
 ) ;_ Fin de cond
 (princ "\nSaisisser le contour :")
 (setq old_osmd (getvar "osmode"))
 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")
 (command "_.pline"
          (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
 ) ;_ Fin de command
 (setq Surf (getpropertyvalue (entlast) "Area"))
 (setq Pt_Ins (getpoint "Cliquer l'emplacement du texte :"))
 (setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 NbDec)))
 (vlax-ldata-put "DenisH" "ValIncrement" (+ 1 ValIncrement))
 (command "_.-MTEXT" Pt_Ins "R" 0 "J" "MC" "H" 1.75 Pt_Ins MText "")
 (getvar "osmode" old_osmd)
 (setvar "plinewid" 0)
;;; Fin de l'undo
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

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

C'est top !

 

Ca fonctionne bien, j'ai quelque questions :

 

- j'ai vu que tu recupères l'air de la propriété de l'objet. Est ce possible de l'avoir arrondie à une décimale ?

 

- est-il possible d'avoir le choix de cliquer pour avoir le contour comme la commande "contour" ? Cliquer chaque points sera super quand on aura des surfaces à exclure dans la surface principal mais souvent on a une simple polyligne à suivre avec pleins de points, il serait plus sûr de faire un contour automatique.

 

- est-il possible de sortir un listing des surfaces ? Je n'ai jamais utilisé encore ce genre de fonction mais ça pourrait bien servir au lieu de recopier bêtement chaque surface sur excel.

 

En tout cas merci beaucoup pour ton aide et désolé pour mes questions :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Pour changer le nombre de décimales, il suffit de remplacer NbDec dans cette ligne par 1 :

(setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 NbDec)))

 

Donnera

(setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 1)))

 

Pour le reste, faut-il créer une polyligne du contour ?

 

Je regarde, mais ça ne devrait pas être trop compliqué...

 

Je reviens...

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

J'ai modifier la routine, elle demande maintenant si tu veux créer un contour ou si tu veux créer une polyligne...

;;; ***********************************************************
;;; Dessine un contour, puis place un texte incrémenté et la   
;;; surface dans un multitexte       Pour Hydro8 de CadXP.com  
;;; ***********************************************************
(defun c:Hydro8 (/ old_osmd PrefixIncrement ValIncrement Option1 Option2 Surf Pt_Ins MText)
 (princ "\nDéveloppé par Denis H.")
;;; Active le début de l'undo
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
;;;  (setq NbDec (getvar "luprec"))
 (setq PrefixIncrement (vlax-ldata-get "DenisH" "PrefixIncrement" "13B"))
 (if (= PrefixIncrement nil)
   (vlax-ldata-put "DenisH" "PrefixIncrement" "13B")
 ) ;_ Fin de if
 (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement" 1))
 (if (= ValIncrement nil)
   (vlax-ldata-put "DenisH" "ValIncrement" 1)
 ) ;_ Fin de if
 (initget "Préfix Nombre")
 (setq Option1 (getkword
                 (strcat "\nOptions des textes [Préfix/Nombre] <" PrefixIncrement (itoa ValIncrement) "> : ") ;_ Fin de strcat
               ) ;_ Fin de getkword
 ) ;_ Fin de setq
 (cond ((= Option1 "Préfix")
        (setq PrefixIncrement
               (getstring (strcat "\nSaisir le préfix de l'incrémentation <" PrefixIncrement "> : ")) ;_ Fin de getstring
        ) ;_ Fin de setq
        (vlax-ldata-put "DenisH" "PrefixIncrement" PrefixIncrement)
       )
       ((= Option1 "Nombre")
        (setq ValIncrement (getint (strcat "\nSaisir le prochain numéro de l'incrémentation " (itoa ValIncrement) " : "))) ;_ Fin de getstring
        (vlax-ldata-put "DenisH" "ValIncrement" ValIncrement)
       )
 ) ;_ Fin de cond
 (setq old_osmd (getvar "osmode"))
 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")
 (initget 1 "Contour Polyligne")
 (setq Option2 (getkword "\nOptions des textes [Contour/Polyligne] : ") ;_ Fin de strcat
 ) ;_ Fin de getkword
 (cond ((= Option2 "Contour") ;_ Fin de setq
        (princ "\nChoisir le contour :")
        (command "-contour" "O" "O" "P" "" pause "")
       )
       ((= Option2 "Polyligne")
        (princ "\nSaisisser le contour :")
        (command "_.pline"
                 (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
        ) ;_ Fin de command
       )
 ) ;_ Fin de command
 (setq Surf (getpropertyvalue (entlast) "Area"))
 (setq Pt_Ins (getpoint "Cliquer l'emplacement du texte :"))
 (setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 2)))
 (vlax-ldata-put "DenisH" "ValIncrement" (+ 1 ValIncrement))
 (command "_.-MTEXT" Pt_Ins "R" 0 "J" "MC" "H" 1.75 Pt_Ins MText "")
 (getvar "osmode" old_osmd)
 (setvar "plinewid" 0)
;;; Fin de l'undo
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

 

Cette routine aurait besoin d'être "retouchée" pour être plus conviviale, mais elle fonctionne comme ça...

 

PS 1 : j'ai un peu retouché le lisp pour qu'il pose deux questions, les texte/incrémentation puis, Contour/Polyligne.

 

PS 2 : Correction d'une erreur de parenthèses...

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

Ca fonctionne chez moi, retélécharge le code...

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

Oui j'ai vu ton edit après, cela fonctionne au top ! Bravo !!

 

Petites question, est-il possible de sortir un listing des surfaces ? Je n'ai jamais utilisé encore ce genre de fonction mais ça pourrait bien servir au lieu de recopier bêtement chaque surface sur excel.

Lien vers le commentaire
Partager sur d’autres sites

Content que ça fonctionne.
Oui, on peut écrire les textes incrémentés et leur surface dans un fichier texte.

Je regarde ça...

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

Voici le code qui écrit, dans un fichier du même nom que le DWG avec l’extension ".surf"

 

Tu peux l'ouvrir avec le blocnote. Voici le code :

;;; ***********************************************************
;;; Dessine un contour, puis place un texte incrémenté et la   
;;; surface dans un multitexte       Pour Hydro8 de CadXP.com  
;;; ***********************************************************
(defun c:Hydro8 (/ old_osmd PrefixIncrement ValIncrement Option1 Option2 Surf Pt_Ins MText)
 (princ "\nDéveloppé par Denis H.")
;;; Active le début de l'undo
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
;;;  (setq NbDec (getvar "luprec"))
 (setq PrefixIncrement (vlax-ldata-get "DenisH" "PrefixIncrement" "13B"))
 (if (= PrefixIncrement nil)
   (vlax-ldata-put "DenisH" "PrefixIncrement" "13B")
 ) ;_ Fin de if
 (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement" 1))
 (if (= ValIncrement nil)
   (vlax-ldata-put "DenisH" "ValIncrement" 1)
 ) ;_ Fin de if
 (initget "Préfix Nombre")
 (setq Option1 (getkword
                 (strcat "\nOptions des textes [Préfix/Nombre] <" PrefixIncrement (itoa ValIncrement) "> : ") ;_ Fin de strcat
               ) ;_ Fin de getkword
 ) ;_ Fin de setq
 (cond ((= Option1 "Préfix")
        (setq PrefixIncrement
               (getstring (strcat "\nSaisir le préfix de l'incrémentation <" PrefixIncrement "> : ")) ;_ Fin de getstring
        ) ;_ Fin de setq
        (vlax-ldata-put "DenisH" "PrefixIncrement" PrefixIncrement)
       )
       ((= Option1 "Nombre")
        (setq ValIncrement (getint (strcat "\nSaisir le prochain numéro de l'incrémentation " (itoa ValIncrement) " : "))) ;_ Fin de getstring
        (vlax-ldata-put "DenisH" "ValIncrement" ValIncrement)
       )
 ) ;_ Fin de cond
 (setq old_osmd (getvar "osmode"))
 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")
 (initget 1 "Contour Polyligne")
 (setq Option2 (getkword "\nOptions des textes [Contour/Polyligne] : ") ;_ Fin de strcat
 ) ;_ Fin de getkword
 (cond ((= Option2 "Contour") ;_ Fin de setq
        (princ "\nChoisir le contour :")
        (command "-contour" "O" "O" "P" "" pause "")
       )
       ((= Option2 "Polyligne")
        (princ "\nSaisisser le contour :")
        (command "_.pline"
                 (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
        ) ;_ Fin de command
       )
 ) ;_ Fin de command
 (setq Surf (getpropertyvalue (entlast) "Area"))
 (setq Pt_Ins (getpoint "Cliquer l'emplacement du texte :"))
 (setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 2)))
 (vlax-ldata-put "DenisH" "ValIncrement" (+ 1 ValIncrement))
 (command "_.-MTEXT" Pt_Ins "R" 0 "J" "MC" "H" 1.75 Pt_Ins MText "")
 (setq Fichier (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)))
 (setq Fichier (strcat (getvar "dwgprefix") Fichier ".Surf"))
 (setq FichierEcrit (open Fichier "a"))
 (write-line (strcat PrefixIncrement (itoa ValIncrement) " = " (rtos Surf 2 2)) FichierEcrit)
 (close FichierEcrit)
 (getvar "osmode" old_osmd)
 (setvar "plinewid" 0)
;;; Fin de l'undo
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

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

J'ai essayé ta version avec l'export du fichier .surf mais du coup je trouve ce fichier où ensuite ? Car il ne se passe rien de différent.

 

Edit : j'ai rien dit, j'ai mal lu et mal testé.

 

C'est surement beaucoup demandé car ça fait une commande en plus à developper mais est-il possible de faire un export global une fois qu'on a réalisé toutes les surfaces ?

 

J'ai essayé de mettre un valeur par défaut pour le choix Contour / Polyligne mais ça ne fonctionne pas. J'ai essayé :

 

(setq Option2 (getkword "\nOptions des textes [Contour/Polyligne] <C> : ") ;

Lien vers le commentaire
Partager sur d’autres sites

Pour trouver le fichier des surfaces, il est au même endroit que le Dwg.

 

Pour l'option par défaut, je regarde ça...

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

Voici le code avec le choix "Contour" par défaut :

;;; ***********************************************************
;;; Dessine un contour, puis place un texte incrémenté et la   
;;; surface dans un multitexte      Pour Hydro8 de CadXP.com   
;;; ***********************************************************
(defun c:Hydro8 (/ old_osmd PrefixIncrement ValIncrement Option1 Option2 Surf Pt_Ins MText)
 (princ "\nDéveloppé par Denis H.")
;;; Active le début de l'undo
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
;;;  (setq NbDec (getvar "luprec"))
 (setq PrefixIncrement (vlax-ldata-get "DenisH" "PrefixIncrement" "13B"))
 (if (= PrefixIncrement nil)
   (vlax-ldata-put "DenisH" "PrefixIncrement" "13B")
 ) ;_ Fin de if
 (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement" 1))
 (if (= ValIncrement nil)
   (vlax-ldata-put "DenisH" "ValIncrement" 1)
 ) ;_ Fin de if
 (initget "Préfix Nombre")
 (setq Option1 (getkword
                 (strcat "\nOptions des textes [Préfix/Nombre] <" PrefixIncrement (itoa ValIncrement) "> : ") ;_ Fin de strcat
               ) ;_ Fin de getkword
 ) ;_ Fin de setq
 (cond ((= Option1 "Préfix")
        (setq PrefixIncrement
               (getstring (strcat "\nSaisir le préfix de l'incrémentation <" PrefixIncrement "> : ")) ;_ Fin de getstring
        ) ;_ Fin de setq
        (vlax-ldata-put "DenisH" "PrefixIncrement" PrefixIncrement)
       )
       ((= Option1 "Nombre")
        (setq ValIncrement (getint (strcat "\nSaisir le prochain numéro de l'incrémentation " (itoa ValIncrement) " : "))) ;_ Fin de getstring
        (vlax-ldata-put "DenisH" "ValIncrement" ValIncrement)
       )
 ) ;_ Fin de cond
 (setq old_osmd (getvar "osmode"))
 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")
 (initget "Contour Polyligne")
 (setq Option2 (getkword "\nOptions des textes [Contour/Polyligne] <Contour> : ") ;_ Fin de strcat
 ) ;_ Fin de getkword
 (cond ((or (= Option2 "Contour") ;_ Fin de setq
            (= Option2 "")
            (= Option2 nil)
        ) ;_ Fin de or
        (princ "\nChoisir le contour :")
        (command "-contour" "O" "O" "P" "" pause "")
       )
       ((= Option2 "Polyligne")
        (princ "\nSaisisser le contour :")
        (command "_.pline"
                 (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
        ) ;_ Fin de command
       )
 ) ;_ Fin de command
 (setq Surf (getpropertyvalue (entlast) "Area"))
 (setq Pt_Ins (getpoint "\nCliquer l'emplacement du texte :"))
 (setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 2)))
 (vlax-ldata-put "DenisH" "ValIncrement" (+ 1 ValIncrement))
 (command "_.-MTEXT" Pt_Ins "R" 0 "J" "MC" "H" 1.75 Pt_Ins MText "")
 ;;Écriture dans un fichier.
 (setq Fichier (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)))
 (setq Fichier (strcat (getvar "dwgprefix") Fichier ".Surf"))
 (setq FichierEcrit (open Fichier "a"))
 (write-line (strcat PrefixIncrement (itoa ValIncrement) " = " (rtos Surf 2 2)) FichierEcrit)
 (close FichierEcrit)
 (getvar "osmode" old_osmd)
 (setvar "plinewid" 0)
;;; Fin de l'undo
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

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

Ca fonctionne au top !

 

Derniers petits problèmes pour la forme :

 

- est il possible après avoir modifier le préfix / nombre de revenir à ce menu ? Car quand je change le préfix après je ne peux pas changer le nombre (par exemple passé de 1a20 à 2a1).

 

- est il possible de rien faire quand on clique sur entrée pour choisir l'emplacement de texte ? Pour le moment cela fait une erreur car pas d'emplacement. Pour éviter que certaines personnes se retrouvent avec l'erreur quand elles ont trop fait entrée / espace.

Lien vers le commentaire
Partager sur d’autres sites

- est il possible après avoir modifier le préfix / nombre de revenir à ce menu ? Car quand je change le préfix après je ne peux pas changer le nombre (par exemple passé de 1a20 à 2a1).

 

je pense que c'est fait, mais il doit y avoir une solution plus propre.

 

- est il possible de rien faire quand on clique sur entrée pour choisir l'emplacement de texte ? Pour le moment cela fait une erreur car pas d'emplacement. Pour éviter que certaines personnes se retrouvent avec l'erreur quand elles ont trop fait entrée / espace.

 

Je n'ai pas bien compris, faut-il obliger l'utilisateur à cliquer un point ou faut-il ne rien faire si l'utilisateur refuse de cliquer le point d'insertion du texte ?

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

je pense que c'est fait, mais il doit y avoir une solution plus propre.

 

Quand je change le préfixe, il passe automatiquement à Contour/Polyligne.

 

Je n'ai pas bien compris, faut-il obliger l'utilisateur à cliquer un point ou faut-il ne rien faire si l'utilisateur refuse de cliquer le point d'insertion du texte ?

 

En gros, si c'est possible mes connaissances en lisp étant basique, si l'utilisateur fait autre chose que clique un point (appuyer sur entrée / espace par exemple, il ne se passe rien. Seul un échap termine la commande.

 

Je viens d'y penser, est-il possible d'enchainer les commandes ? Ou faut-il obligatoirement relancer la commande du début pour une question d'incrémentation ?

Lien vers le commentaire
Partager sur d’autres sites

Je pense que ça répond à tes besoins :

;;; ***********************************************************
;;; Dessine un contour, puis place un texte incrémenté et la   
;;; surface dans un multitexte      Pour Hydro8 de CadXP.com   
;;; ***********************************************************
(defun c:Hydro8 (/ old_osmd PrefixIncrement ValIncrement Option1 Option2 Surf Pt_Ins MText)
 (princ "\nDéveloppé par Denis H.")
;;; Active le début de l'undo
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (setq old_osmd (getvar "osmode"))
 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")
 (setq PrefixIncrement (vlax-ldata-get "DenisH" "PrefixIncrement" "13B"))
 (if (= PrefixIncrement nil)
   (vlax-ldata-put "DenisH" "PrefixIncrement" "13B")
 ) ;_ Fin de if
 (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement" 1))
 (if (= ValIncrement nil)
   (vlax-ldata-put "DenisH" "ValIncrement" 1)
 ) ;_ Fin de if
 (while (/= (type Option1) 'LIST)
   (initget "Préfix Nombre Suivant")
   (setq Option1 (getkword
                   (strcat "\nOptions des textes [Préfix/Nombre/Suivant] <" PrefixIncrement (itoa ValIncrement) "> : ") ;_ Fin de strcat
                 ) ;_ Fin de getkword
   ) ;_ Fin de setq
   (princ Option1)
   (cond ((= Option1 "Préfix")
          (setq PrefixIncrement
                 (getstring (strcat "\nSaisir le préfix de l'incrémentation <" PrefixIncrement "> : ")) ;_ Fin de getstring
          ) ;_ Fin de setq
          (vlax-ldata-put "DenisH" "PrefixIncrement" PrefixIncrement)
         )
         ((= Option1 "Nombre")
          (setq ValIncrement (getint (strcat "\nSaisir le prochain numéro de l'incrémentation " (itoa ValIncrement) " : "))) ;_ Fin de getstring
          (if (or (/= ValIncrement "") (/= ValIncrement nil) (/= ValIncrement 0))
            (vlax-ldata-put "DenisH" "ValIncrement" ValIncrement)
            (vlax-ldata-put "DenisH" "ValIncrement" 0)
          ) ;_ Fin de if
         )
         ((= Option1 "Suivant")
          (initget "Contour Polyligne")
          (setq Option2 (getkword "\nOptions des textes [Contour/Polyligne] <Contour> : ") ;_ Fin de strcat
          ) ;_ Fin de getkword
          (cond ((or (= Option2 "Contour") ;_ Fin de setq
                     (= Option2 "")
                     (= Option2 nil)
                 ) ;_ Fin de or
                 (princ "\nChoisir le contour :")
                 (command "-contour" "O" "O" "P" "" pause "")
                )
                ((= Option2 "Polyligne")
                 (princ "\nSaisisser le contour :")
                 (command "_.pline"
                          (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
                 ) ;_ Fin de command
                )
          ) ;_ Fin de command
          (setq Surf (getpropertyvalue (entlast) "Area"))
          (while (/= (setq Pt_Ins (getpoint "\nCliquer l'emplacement du texte :")) ;_ Fin de setq
                     nil
                 ) ;_ Fin de /=
            (setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P" (rtos Surf 2 2)))
            (vlax-ldata-put "DenisH" "ValIncrement" (+ 1 ValIncrement))
            (command "_.-MTEXT" Pt_Ins "R" 0 "J" "MC" "H" 1 Pt_Ins MText "")
            ;;Écriture dans un fichier.
            (setq Fichier (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)))
            (setq Fichier (strcat (getvar "dwgprefix") Fichier ".Surf"))
            (setq FichierEcrit (open Fichier "a"))
            (write-line (strcat PrefixIncrement (itoa ValIncrement) " = " (rtos Surf 2 2)) FichierEcrit)
            (close FichierEcrit)
            (cond ((= Option2 "Contour")
                   (princ "\nChoisir le contour :")
                   (command "-contour" "O" "O" "P" "" pause "")
                  )
                  ((= Option2 "Polyligne")
                   (princ "\nSaisisser le contour :")
                   (command "_.pline"
                            (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
                   ) ;_ Fin de command
                  )
            ) ;_ Fin de cond
          ) ;_ Fin de while
          (getvar "osmode" old_osmd)
          (setvar "plinewid" 0)
;;; Fin de l'undo
          (vla-endundomark doc)
         )
   ) ;_ Fin de cond
 ) ;_ Fin de while
 (princ)
) ;_ Fin de defun

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

Pour la partie préfix / nombre ça fonctionne au top.

 

Pour la partie insérer le texte :

 

- pour le contour, ça boucle sur l'insertion du texte non la création du contour.

 

- pour la polyligne, je peux faire une poly, insérer le texte, refaire une poly différente mais le deuxième texte aura le même nombre et la même surface que la première.

 

 

J'ai ajouté un peu de texte sur le mtext qui est insérer :

 

(setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\P S= " (rtos Surf 2 1) "m² \\P ING"))

 

Mais l'exposant ² est toujours précédé de "Â". Je n'ai pas trouvé de solution sur internet, les personnes utilise l'exposant directement à priori.

 

Question bonus, est-il possible de mettre la première ligne du MTEXT dans une autre hauteur de texte que le reste ?

Lien vers le commentaire
Partager sur d’autres sites

Je regarde ce que tu m'as dis, effectivement, il y a problème...

 

Pour le sympole "²", je pense qu'il faut écrire "\C0178", mais je regarde aussi...

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

Bon, je vais y arrivé... ;)

 

Voici la dernière version, seul problème, on ne peut l'arrêter que par [ESC], la touche [ENTREE] génère une erreur, ce qui arrête la commande.

 

Mais je pense que ça fait ce que tu voulais... :

;;; ***********************************************************
;;; Dessine un contour, puis place un texte incrémenté et la   
;;; surface dans un multitexte      Pour Hydro8 de CadXP.com   
;;; ***********************************************************
(defun c:Hydro8 (/ old_osmd PrefixIncrement ValIncrement Option1 Option2 MText EcritText)
 (princ "\nDéveloppé par Denis H. (v:1.6)")
;;; Active le début de l'undo
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (defun EcritText (/ Surf Pt_Ins)
   (setq Surf (getpropertyvalue (entlast) "Area"))
   (setq Pt_Ins (getpoint "\nCliquer l'emplacement du texte :")) ;_ Fin de setq
   (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement"))
   (setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\PS=" (rtos Surf 2 1) "m²\\PING"))
   (vlax-ldata-put "DenisH" "ValIncrement" (+ 1 ValIncrement))
   (command "_.-MTEXT" Pt_Ins "J" "MC" "H" 1.0 Pt_Ins MText "")
   ;;Écriture dans un fichier.
   (setq Fichier (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)))
   (setq Fichier (strcat (getvar "dwgprefix") Fichier ".Surf"))
   (setq FichierEcrit (open Fichier "a"))
   (write-line (strcat PrefixIncrement (itoa ValIncrement) " = " (rtos Surf 2 1)) FichierEcrit)
   (close FichierEcrit)
 ) ;_ Fin de defun
 (setq old_osmd (getvar "osmode"))
 (command "calque" "E" "MARTY-SURFACES_FRACTIONS" "co" "u" "255,0,255" "MARTY-SURFACES_FRACTIONS" "")
 (setq PrefixIncrement (vlax-ldata-get "DenisH" "PrefixIncrement" "13B"))
 (if (= PrefixIncrement nil)
   (vlax-ldata-put "DenisH" "PrefixIncrement" "13B")
 ) ;_ Fin de if
 (setq ValIncrement (vlax-ldata-get "DenisH" "ValIncrement" 1))
 (if (= ValIncrement nil)
   (vlax-ldata-put "DenisH" "ValIncrement" 1)
 ) ;_ Fin de if
 (while (/= (type Option1) 'LIST)
   (initget "Préfix Nombre Suivant")
   (setq Option1 (getkword
                   (strcat "\nOptions des textes [Préfix/Nombre/Suivant] <" PrefixIncrement (itoa ValIncrement) "> : ") ;_ Fin de strcat
                 ) ;_ Fin de getkword
   ) ;_ Fin de setq
   (princ Option1)
   (cond ((= Option1 "Préfix")
          (setq PrefixIncrement
                 (getstring (strcat "\nSaisir le préfix de l'incrémentation <" PrefixIncrement "> : ")) ;_ Fin de getstring
          ) ;_ Fin de setq
          (vlax-ldata-put "DenisH" "PrefixIncrement" PrefixIncrement)
         )
         ((= Option1 "Nombre")
          (setq ValIncrement (getint (strcat "\nSaisir le prochain numéro de l'incrémentation " (itoa ValIncrement) " : "))) ;_ Fin de getstring
          (if (or (/= ValIncrement "") (/= ValIncrement nil) (/= ValIncrement 0))
            (vlax-ldata-put "DenisH" "ValIncrement" ValIncrement)
            (vlax-ldata-put "DenisH" "ValIncrement" 0)
          ) ;_ Fin de if
         )
         ((= Option1 "Suivant")
          (initget "Contour Polyligne")
          (setq Option2 (getkword "\nOptions des textes [Contour/Polyligne] <Contour> : ") ;_ Fin de strcat
          ) ;_ Fin de getkword
          (cond ((or (= Option2 "Contour") (= Option2 nil)) ;_ Fin de or
                 (while (princ "\nChoisir le contour :") (command "-contour" "O" "O" "P" "" pause "") (EcritText))
                )
                ((= Option2 "Polyligne")
                 (while (princ "\nSaisisser le contour :")
                   (command "_.pline"
                            (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while
                   ) ;_ Fin de command
                   (EcritText)
                 ) ;_ Fin de while
                )
          ) ;_ Fin de cond
         )
   ) ;_ Fin de cond
 ) ;_ Fin de while
 (getvar "osmode" old_osmd)
 (setvar "plinewid" 0)
;;; Fin de l'undo
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

 

Pour le symbole du carré "²", c'est une question de police, chez moi, ça fonctionne nickel...

 

PS : j'ai enlevé les drapeaux...

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

Pour la police j'ai choisi arial :blink:

 

La police ARIAL comporte ce symbole, qui fonctionne très bien chez moi.

 

J'ai le message d'erreur sur la variable clayer quand je dois choisir l'emplacement du texte que ça soit en contour ou polyligne.

 

Je n'ai aucun problème avec le calque, l'aurais-tu verrouillé, gelé...?

 

J'ai oublié une de tes requètes, la hauteur différente entre les lignes du texte, remplace la ligne

(setq MText (strcat PrefixIncrement (itoa ValIncrement) "\\PS=" (rtos Surf 2 1) "m²\\PING"))

par cette ligne :

(setq MText (strcat "\\H2" PrefixIncrement (itoa ValIncrement) "\\P\\H1S=" (rtos Surf 2 1) "m²\\PING"))

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

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é