Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Mon habitude est de mettre les titres et les échelles des fmults, sous forme de textes, directement dans l'espace papier. Mon but est de remplacer le simple texte dans lequel j'écris l'échelle par un champ, lié à la fenêtre fmult, et qui affiche l'échelle automatiquement. L'intérêt, c'est qu'on peut repérer une échelle "à la con" (genre 1:42.568 ème) du premier coup d'oeil. L'autre intérêt, c'est que l'échelle à côté du titre change si l'échelle de la fmult change.

 

 

Donc j'ai lancé la commande champ

dans la catégorie de champs, j'ai choisi : Objet

dans le type d'objet, j'ai sélectionné : une fenêtre fmult

dans le propriétés, j'ai pris : échelle personnalisée

dans le format, j'ai pris : 1:#

 

ce qui me donne cette merveilleuse formule magique :

%<\AcObjProp Object(%<\_ObjId 2130439776>%).CustomScale \f "1:%lu2%ct1%qf2816">%

 

Alors si j'ai bien compris :

le %lu2 pour le format décimal

le %ct1 pour avoir l'inverse

le %qf2816, plus mystérieux, mais ça doit être pour supprimer le zéro de droite

 

Si je travaille en espace objet en mm et en espace papier en mm, c'est nickel puisque cela m'affiche par exemple 1:25 pour une échelle personnalisée de 0.040

 

Par contre, si je travaille en espace objet en m et en espace papier en mm, il me faut un facteur de multiplication, puisque le 1/25ème donne une échelle personnalisée de 1000/25, soit 40. Si je lui applique la formule ci dessus, cela m'affiche 1:0.025. C'est déjà pas mal, mais si je pouvais multiplier 0.025 par 1000, ça serait mieux.

 

Après quelques recherches, il semble que le code %ct9[1000] donne satisfaction, mais il n'est pas accessible directement par la commande champ.

 

J'ai adapté le lisp que j'ai trouvé ici pour en faire ceci :

 

(vl-load-com)
;;référence à l'espace papier
(setq *paper-space*
      (vla-get-PaperSpace
        (vla-get-ActiveDocument (vlax-get-acad-object))
      )
)
;;Fonction qui nécessite une entité fenêtre et un point
(defun LinkedFmult (ent pt / obj objID ip width str)
 ;;convertir entité en objet
 (setq obj   (vlax-ename->vla-object ent)
       ;;Récupérer l'ID de l'objet
       objID (vla-get-objectid obj)
       ;;convertir le point
       ip    (vlax-3D-Point pt)
       ;;définir la largeur du texte à 0
       width 0.0
       ;;définir la chaîne du champ
       str   (strcat
               "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
               (rtos objID 2 0)
               ">%).CustomScale \\f \"1:%lu2%ct1%qf2816%ct9[1000]\">%"
             )
 )
  ;;Créer le MTEXT qui contient le champ
 (vla-addMText *paper-space* ip width str)
)


;; A = la fenêtre fmult et B = Point d'insertion du texte
(setq a (car (entsel)) b (getpoint "\nPoint d'insertion : "))
;;Appel de la fonction
(linkedfmult a b)

 

où j'ai rajouté le %ct9[1000] dans la formule et, du coup, ça m'affiche 1:25.

 

Tous ceux qui, un jour, ont imprimé un plan soit disant au 1:50 et qui en réalité était au 1:45 ou au 1:55, avec lequel un métreur a fait sont chiffrage en se servant de son bon vieux kutch, seront sans doute intéressés par cette méthode ?

 

Amicalement

Zebulon_

 

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)

Posté(e)

Bonjour,

 

si, c'est un lisp. Il est un peu brut de décoffrage. Je vais un peu le fignoler et le déposer tout à l'heure.

 

Amicalement

Zebulon_

 

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)

Posté(e)

;;; créer un style de texte
(defun textsty (StyTxName H)
 (if (not (tblsearch "STYLE" StyTxName))
   (command "_style" StyTxName "arial.ttf" H "1.00" "0.00" "_N" "_N")
   (command "_textstyle" StyTxName)
 )     
)


;;; 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 "")
 )
)



;;Fonction qui nécessite une entité fenêtre et un point
(defun LinkedFmult (ent pt / *paper-space* obj objID ip width str CLAYER)
 ;;référence à l'espace papier
 (setq *paper-space*
      (vla-get-PaperSpace
        (vla-get-ActiveDocument (vlax-get-acad-object))
      )
 )
 ;;convertir entité en objet
 (setq obj   (vlax-ename->vla-object ent)
       ;;Récupérer l'ID de l'objet
       objID (vla-get-objectid obj)
       ;;convertir le point
       ip    (vlax-3D-Point pt)
       ;;définir la largeur du texte à 0
       width 0.0
       ;;définir la chaîne du champ
       str   (strcat
               "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
               (rtos objID 2 0)
               ">%).CustomScale \\f \"1:%lu2%ct1%qf2816%ct9[1000]\">%"
             )
 )
 (setq CLAYER (getvar "CLAYER"))
 ;; créer un calque "TXT30-1000" de couleur 7
 (calque "TXT30-1000" "7" "Continuous")
 ;; créer un style de texte de 3mm de haut
 (textsty "TXT30-1000" "3")
  ;;Créer le MTEXT qui contient le champ
 (vla-addMText *paper-space* ip width str)
 (setvar "CLAYER" CLAYER)
)


(defun c:txtech (/ e a pointins)
 (vl-load-com)
 (if (/= (getvar "TILEMODE") 0)
   (alert "Uniquement en espace papier !!!")
   (progn
     (setq e (car (entsel)))
     (if e
       (progn
         (setq a (entget e))
         (if (/= (cdr (assoc 0 a)) "VIEWPORT")
           (alert "Ce n'est pas une fenêtre !!!")
           (progn
             (setq POINTINS (getpoint "\nPoint d'insertion : "))
             (if POINTINS
               (linkedfmult e POINTINS)
             )
           )
         )
       )
     )
   )
 )
 (princ)
) 

 

Voilà, vite fait...

 

Amicalement

Zebulon_

 

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)

Posté(e)

Bonjour,

 

dans le lisp, la fonction qui donne la nouvelle commande est précédée par c: (c comme command). Ce n'est donc pas textsty dont il s'agit (ce n'est qu'un sous-programme de la fonction principale) mais de txtech.

 

Amicalement

Zebulon_

 

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)

Posté(e)

Re,

 

Ok zebulon_, j'avais mal décripter ton code (faut dire aussi que je suis novice dans ce domaine et simple "testeur" car pas utilisateur courant de AutoCAD mais plutôt Covadis : j'enseigne en bts géomètre, par contre je suis trés curieux de nature,...). Tout est rentré dans l'ordre et ce code peut être trés utile (en corrigeant les projets des étudiants, par exemple,...).

 

Merci à toi et bonne journée.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

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é