JUJUZAZA Posté(e) le 28 novembre 2007 Posté(e) le 28 novembre 2007 Bonjour CADxp Distance ou longueur d'1 polyligne ou d’1 spline Je suis à la recherche d’un lisp qui me permettrait d’obtenir la distance réelle d’une polyligne ou d’une spline, et de générer automatiquement l’affichage de cette distance au dessus de la spline ou polyligne , ou encorre mieux donner libre choix à l’utilisateur de définir la position du texte . Merci [Edité le 28/11/2007 par JUJUZAZA]
(gile) Posté(e) le 28 novembre 2007 Posté(e) le 28 novembre 2007 Salut, Un truc vite fait, ça devrait fonctionner avec tous les objets curvilignes (lignes, polyignes 2d 3d ou lw, arcs, cercles, splines).Le texte prend la hauteur courante et une rotation nulle. (defun c:txt-dist (/ obj endp ins dist nor) (vl-load-com) (if (setq obj (car (entsel))) (if (vl-catch-all-error-p (setq endp (vl-catch-all-apply 'vlax-curve-getEndParam (list obj))) ) (princ "\nEntité non valde.") (if (setq ins (getpoint "\nSpécifiez le point de départ du texte: ")) (progn (setq dist (vlax-curve-getDistAtParam obj endp) nor (trans '(0 0 1) 1 0 T) ) (entmake (list '(0 . "TEXT") (cons 10 (trans ins 1 nor)) (cons 40 (getvar "TEXTSIZE")) (cons 1 (rtos dist)) (cons 50 (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 nor))) (cons 7 (getvar "TEXTSTYLE")) (cons 210 nor) ) ) ) ) ) (princ "\nAncun objet sélectionné.") ) (princ) ) [Edité le 29/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 28 novembre 2007 Posté(e) le 28 novembre 2007 Bonsoir à toutes et tous, (gile), voici le résultat sur une polyligne, de plus, en propriété, j'ai une aire ??? <!--url{0}--> Commande: TXT-DISTChoix de l'objet: _.textStyle de texte courant: "NDP 1-20" Hauteur de texte: 6.00 Annotatif: NonSpécifiez le point de départ du texte ou [Justifier/Style]:Spécifiez l'angle de rotation du texte :Entrez le texte:Commande: 4336.41 Commande inconnue "4336.41". Appuyez sur F1 pour obtenir de l'aide. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Salut et merci pour le test. Le LISP ne fonctionne pas sur 2008 parceque la commande texte a changé (une option de moins à spécifier : la hauteur de texte). Je modifie le LISP (utilisation de entmake à la place de la commande "texte"), il devrait fonctionner avec toutes les versions. Le texte adopte toujours les paramètres courants. PS : Ce qui estaffiché dans la fenêtre de propriété ne dépend aucunement du LISP, les spline, polylignes arcs ont une propriété aire même si ce sont des figures ouvertes. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
JUJUZAZA Posté(e) le 29 novembre 2007 Auteur Posté(e) le 29 novembre 2007 Bonjour Gile Merci bcp. Ton lisp fonctionne super bien .J'ai fait 1 essai sous la v2008 , ça fonctionne aussi !!! je n'ai pas eu de problème .Sauf 1 : la hauteur du texte qui est par défaut sur 2,5 (comment faire pour la faire passer à 0,5 ou une autre hauteur) Dernière question:Peut-on obtenir la somme de ++ polylignes ou splines en faisant 1 sélection fenêtre (avec la souris) . Merci [Edité le 29/11/2007 par JUJUZAZA]
lili2006 Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Bonjour à toutes et tous, C'est ok (gile) ! PS : Ce qui estaffiché dans la fenêtre de propriété ne dépend aucunement du LISP, les spline, polylignes arcs ont une propriété aire même si ce sont des figures ouvertes Bah tient, j'avais jamais remarqué ! Il y à t'il une explication ? Et surtout, à quoi correspond cette aire ??? ! Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 JUJUZAZA, Je disais bien que le LISP créait le texte avec les paramètres (style hauteur ...) courants. Voici une autre version qui demande la hauteur de texte et l'angle de rotation. (defun c:txt-dist (/ obj endp ins dist nor) (vl-load-com) (if (setq obj (car (entsel))) (if (vl-catch-all-error-p (setq endp (vl-catch-all-apply 'vlax-curve-getEndParam (list obj))) ) (princ "\nEntité non valde.") (if (setq ins (getpoint "\nSpécifiez le point de départ du texte: ")) (progn (and (setq ht (getdist (strcat "\nSpécifiez la hauteur (rtos (getvar "TEXTSIZE")) ">: " ) ) ) (setvar "TEXTSIZE" ht) ) (or (setq ang (getangle "Spécifiez l'angle de rotation du texte : ") ) (setq ang 0.0) ) (setq dist (vlax-curve-getDistAtParam obj endp) nor (trans '(0 0 1) 1 0 T) ) (entmake (list '(0 . "TEXT") (cons 10 (trans ins 1 nor)) (cons 40 (getvar "TEXTSIZE")) (cons 1 (rtos dist)) (cons 50 (+ ang (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 nor))) ) (cons 7 (getvar "TEXTSTYLE")) (cons 210 nor) ) ) ) ) ) (princ "\nAncun objet sélectionné.") ) (princ) ) lili2006, Cette aire correspond à l'aire de l'objet s'il était fermé par un segemnt droit entre les extrémités de départ et de fin. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Une autre version qui permet l'accès à toutes les options de la commande "texte".Elle devrait fonction avec toutes les versions d'AutoCAD (testée uniquement sur 2007). (defun c:txt-dist (/ obj endp ins dist nor) (vl-load-com) (if (setq obj (car (entsel))) (if (vl-catch-all-error-p (setq endp (vl-catch-all-apply 'vlax-curve-getEndParam (list obj))) ) (princ "\nEntité non valide.") (vl-cmdf "_.text" pause pause pause (rtos (vlax-curve-getDistAtParam obj endp)) ) ) (princ "\nAncun objet sélectionné.") ) (princ) ) [Edité le 29/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Re, (gile), tout fonctionne à merveille sur la V2008 pour ta première proposition ! => Commande: txt-distChoix de l'objet:Spécifiez le point de départ du texte:Spécifiez la hauteur : 14Spécifiez l'angle de rotation du texte :Commande: Quand à la deuxième, elle demande d'entrer le texte, ce qui n'est pas l'objectif => Commande:TXT-DISTChoix de l'objet: _.textStyle de texte courant: "NDP 1-20" Hauteur de texte: 14.00 Annotatif: NonSpécifiez le point de départ du texte ou [Justifier/Style]:Spécifiez la hauteur :Spécifiez l'angle de rotation du texte : 52792.5Entrez le texte:Entrez le texte: longueur ? "longueur ?", étant le texte que j'ai tapé, bien sûr ! (qui s'affiche bien selon les paramètres demandé ceci dis,...). Est-ce que c'est compliqué de rajouter le suffixe "m" sur la routine ? Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Salut, Je ne comprends pas comment fonctionne la commande texte dans AutoCAD 2008 : dans ton premier message (copie de la fenêtre de texte) tu n'es pas invité à entrer la hauteur de texte (donc une entrée de moins que dans les versions précé dentss) dans le dernier la hauteur est demandée (comme dans les version précédentes) :casstet: La version (entmake) avec un suffixe : (defun c:txt-dist (/ obj endp ins dist nor) (vl-load-com) (if (setq obj (car (entsel))) (if (vl-catch-all-error-p (setq endp (vl-catch-all-apply 'vlax-curve-getEndParam (list obj))) ) (princ "\nEntité non valde.") (if (setq ins (getpoint "\nSpécifiez le point de départ du texte: ")) (progn (and (setq ht (getdist (strcat "\nSpécifiez la hauteur (rtos (getvar "TEXTSIZE")) ">: " ) ) ) (setvar "TEXTSIZE" ht) ) (or (setq ang (getangle "Spécifiez l'angle de rotation du texte : ") ) (setq ang 0.0) ) (setq dist (vlax-curve-getDistAtParam obj endp) nor (trans '(0 0 1) 1 0 T) ) (entmake (list '(0 . "TEXT") (cons 10 (trans ins 1 nor)) (cons 40 (getvar "TEXTSIZE")) (cons 1 (strcat (rtos dist) " m")) (cons 50 (+ ang (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 nor))) ) (cons 7 (getvar "TEXTSTYLE")) (cons 210 nor) ) ) ) ) ) (princ "\nAncun objet sélectionné.") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
JUJUZAZA Posté(e) le 29 novembre 2007 Auteur Posté(e) le 29 novembre 2007 Re, Exact, la dernière version ne fonctionne pas sous la v2008 , j’ai ce message : « Entrez le texte: » au moment d’afficher le texte. Mais le 1er tout fonctionne, EUREKA ! Par contre:Peut-on obtenir la somme de ++ polylignes ou splines en faisant 1 sélection fenêtre totale Merci
lili2006 Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Re, Pour moi cette version est parfaitement aboutie. Cependant, même remarque (pour moi) que dans d'autres posts, comment récupérer la longueur réelle en m sachant que je dessine en cm en EO ? (C'est pas faute d'avoir essayé de replacer cette expression => "(setq len (/ len 100.0))" !!!) Merci encore pour tes explications (gile), je ne savais pas ça : Cette aire correspond à l'aire de l'objet s'il était fermé par un segemnt droit entre les extrémités de départ et de fin. Bonne nuit. [Edité le 29/11/2007 par lili2006] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
JUJUZAZA Posté(e) le 29 novembre 2007 Auteur Posté(e) le 29 novembre 2007 oups je n'ai pas vu ton dernier message (gile) ton lisp fonctionne sur toutes les versions, géniale , tu as ajouté le nom de l'unité (m) . Peux-tu créer la somme de plusieurs polylignes ou splines en faisant 1 sélection fenêtre... Merci
(gile) Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Pour lili2006, toujours pareil, diviser par 100, ajoute (setq dist (/ dist 100)) avnt le (entmake ...)PS : pourquoi ne dessines-tu pas directement en mètres ? Pour jujuzaza, la somme d'après un jeu de sélection (defun c:ss-dist (/ ss n obj endp ins dist nor) (vl-load-com) (setq dist 0.0) (if (setq ss (ssget)) (progn (repeat (setq n (sslength ss)) (setq obj (ssname ss (setq n (1- n)))) (if (not (vl-catch-all-error-p (setq endp (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)) ) ) ) (setq dist (+ dist (vlax-curve-getDistAtParam obj endp))) ) ) (if (setq ins (getpoint "\nSpécifiez le point de départ du texte: ")) (progn (and (setq ht (getdist (strcat "\nSpécifiez la hauteur (rtos (getvar "TEXTSIZE")) ">: " ) ) ) (setvar "TEXTSIZE" ht) ) (or (setq ang (getangle "Spécifiez l'angle de rotation du texte : ") ) (setq ang 0.0) ) (setq nor (trans '(0 0 1) 1 0 T)) (entmake (list '(0 . "TEXT") (cons 10 (trans ins 1 nor)) (cons 40 (getvar "TEXTSIZE")) (cons 1 (rtos dist)) (cons 50 (+ ang (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 nor))) ) (cons 7 (getvar "TEXTSTYLE")) (cons 210 nor) ) ) ) ) ) (princ "\nAncun objet sélectionné.") ) (princ) ) Pour moi et pour essayer de comprendre : j'ai modifié la routine réponse 7, fonctionne-t-elle avec 2008 ? merci d'avance. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 rere, PS : pourquoi ne dessines-tu pas directement en mètres ? La norme de cotation en BE strucure Béton Armé est le cm, alors,.... (Alors qu'en Topographie, c'est le mètre !). J'ai donc deux espaces de travail distinct, c'est clair que ce n'est pas pratique du tout. A quand l'harmonisation des unités dans le secteur du BTP ?? (et les menuisiers, eux sont en mm, bonjour la pagaille,...) Merci encore (gile). Bonne nuit. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 29 novembre 2007 Posté(e) le 29 novembre 2007 Re, Et avec l'unité "m" quand on dessine en cm dans l'EO, cela donne => (defun c:ss-dist (/ ss n obj endp ins dist nor) (vl-load-com) (setq dist 0.0) (if (setq ss (ssget)) (progn (repeat (setq n (sslength ss)) (setq obj (ssname ss (setq n (1- n)))) (if (not (vl-catch-all-error-p (setq endp (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)) ) ) ) (setq dist (+ dist (vlax-curve-getDistAtParam obj endp))) ) ) (if (setq ins (getpoint "\nSpécifiez le point de départ du texte: ")) (progn (and (setq ht (getdist (strcat "\nSpécifiez la hauteur (rtos (getvar "TEXTSIZE")) ">: " ) ) ) (setvar "TEXTSIZE" ht) ) (or (setq ang (getangle "Spécifiez l'angle de rotation du texte : ") ) (setq ang 0.0) ) (setq nor (trans '(0 0 1) 1 0 T)) (setq dist (/ dist 100)) (entmake (list '(0 . "TEXT") (cons 10 (trans ins 1 nor)) (cons 40 (getvar "TEXTSIZE")) (cons 1 (strcat (rtos dist) " m")) (cons 50 (+ ang (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 nor))) ) (cons 7 (getvar "TEXTSTYLE")) (cons 210 nor) ) ) ) ) ) (princ "\nAncun objet sélectionné.") ) (princ) ) Bonne nuit. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
JUJUZAZA Posté(e) le 29 novembre 2007 Auteur Posté(e) le 29 novembre 2007 Super sympa Gile, ... Ce lisp est parfaitement adapté à mes besoins, Vive les Lispeurs :D [Edité le 30/11/2007 par JUJUZAZA]
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