zebulon_ Posté(e) le 9 août 2007 Posté(e) le 9 août 2007 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 champdans la catégorie de champs, j'ai choisi : Objetdans le type d'objet, j'ai sélectionné : une fenêtre fmultdans le propriétés, j'ai pris : échelle personnaliséedans 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écimalle %ct1 pour avoir l'inversele %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 ? AmicalementZebulon_ 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)
lili2006 Posté(e) le 11 août 2007 Posté(e) le 11 août 2007 Bonjour à tous, Cela semble interessant, zebulon_, mais comment charge t'on ce code ? ce n'est pas un Lisp, si? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
zebulon_ Posté(e) le 13 août 2007 Auteur Posté(e) le 13 août 2007 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. AmicalementZebulon_ 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)
lili2006 Posté(e) le 13 août 2007 Posté(e) le 13 août 2007 Bonjour à tous, Merci de ta réponse zebulon_, j'attend donc la suite des opérations,....@+ Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
zebulon_ Posté(e) le 13 août 2007 Auteur Posté(e) le 13 août 2007 ;;; 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... AmicalementZebulon_ 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)
lili2006 Posté(e) le 13 août 2007 Posté(e) le 13 août 2007 Rebonjour, J'ai chargé le code est l'ai nommé "textsty". Pourtant autocad me dis : "Commande inconnue "TEXTSTY". Appuyez sur F1 pour obtenir de l'aide.". Qu'ais-je raté ?? Merci d'avance zebulon_ Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
zebulon_ Posté(e) le 13 août 2007 Auteur Posté(e) le 13 août 2007 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. AmicalementZebulon_ 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)
lili2006 Posté(e) le 13 août 2007 Posté(e) le 13 août 2007 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/
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant