Tupolev Posté(e) le 16 novembre 2005 Posté(e) le 16 novembre 2005 Bonjour,Je suis un utilisateur débutant en lisp sur autocad et je me fabrique des petites fonctions. J'ai créé un lisp qui sélectionne un ensemble de polylignes calcule leur surface et implante le texte de l'aire sur le premier point de chaque polyligne. J'aimerai bien trouver un moyen de faire en sorte que le texte se place au centre de chaque polyligne. J'ai bien tenté d'utiliser la variable centroid, mais je crois que je l'utilise très très mal:(setq pt1 (getvar "Centroid")) Voilà le code en question où le texte se place sur le premier point de la polyligne;Pseudo code;choisir une région - renvoyer centre - mettre un point au centre(defun c:textaire ( ) (setq jsel (ssget)) (if(= jsel nil) (exit) ) (setq ctr 0) (setq nb(sslength jsel)) (while(< ctr nb) (setq obo(ssname jsel ctr)) (setq ctr(+ 1 ctr)) (setq pt1(cdr (assoc 10 (entget obo)))) (command "aire" "objet" obo) (setq surf(getvar "area")) (setq surf (/ surf 10000)) (setq surftxt(strcat(rtos surf 2 2)" m²")) (command "texte" pt1 "8" "0"surftxt) );fin du while (princ));fin du defun J'espère que quelqu'un pourra m'aider.Merci d'avance! Je déteste modiflistechelle dans la version AutoCAD 2008 ! Mais bon, avec 4 Go de ram et un quadcore ça passe...
LUDWIG Posté(e) le 16 novembre 2005 Posté(e) le 16 novembre 2005 Je n'ai pas trop le temps de préciser, mais ce que je peux te dire, c'est que le centroïd se récupère uniquement sur un objet "région" (me semble-t'il). Donc : 1er étape > créer une région à partir de ta polyligne2ème > récupérer le centroïde3ème > supprimer la région Les "Lispeurs fous" du forums t'en diront certainement plus... Autocad 2021 - Revit 2022 - Windows 10
(gile) Posté(e) le 16 novembre 2005 Posté(e) le 16 novembre 2005 Salut, CENTROID n'est pas une variable système dont on peut récupérer la valeur avec (getvar), mais une propriété des objets SOLID et REGION. Pour récupérer la valeur de CENTROID il faut passer par les fonctions VLISP : (vlax-safearray->list (vlax-variant-value (vla-get-centroid (vlax-ename->vla-object (car (entsel)))))) Cette ligne de code retourne les coordonnées du centre de gravité de l'objet sélectionné (à condition que ce soit un solide ou une région). À ce propos, ce sujet et celui là qui contient un LISP qui place un point sur le centre de gravité d'une structure composée de plusieurs régions ou solides de densité différentes. Les "Lispeurs fous" du forums t'en diront certainement plus... J'ai été "adoubé" Lispeur par Bonuscad le Grand il y a peu, ;) mais je suis fou depuis bien plus longtemps.:mad2: [Edité le 16/11/2005 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tupolev Posté(e) le 17 novembre 2005 Auteur Posté(e) le 17 novembre 2005 Bonjour,D'abord, merci de porter un intérêt à ma requette, j'ai essayé d'intégrer ce morceau de code au programme, mais Autocad me répond dans sa langue: "erreur: no function definition: VLAX-ENAME->VLA-OBJECT", comme j'ignorais jusqu'à aujourd'hui l'exisntence des Vla-object, je manipule tout ça à l'aveugle, j'aimerai bien quelques éclaircissements. sur ce problème...Merci d'avance!François :casstet: Je déteste modiflistechelle dans la version AutoCAD 2008 ! Mais bon, avec 4 Go de ram et un quadcore ça passe...
(gile) Posté(e) le 17 novembre 2005 Posté(e) le 17 novembre 2005 Salut, Normalement çà ne devrait plus être nécessaire pour les versions antérieures à 2002, mais peut-être faut il que tu fasse (vl-load-com) au tout début ou avant ton programme. Cette fonction charge les fonctions VLISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tupolev Posté(e) le 18 novembre 2005 Auteur Posté(e) le 18 novembre 2005 D'abord merci de te donner autant de mal pour mon misérable programme, j'ai bien parcouru les liens que tu m'as indiqué et j'ai repéré cette fonction à charger (vl-load-com) car j'utilise 2002, mais curieusement, ça n'a rien changé, alors je crois que je vais devoir me mettre au script...même si pour l'instant je n'y comprends rien de rien ... Snif.Merci quand même!Fransois Je déteste modiflistechelle dans la version AutoCAD 2008 ! Mais bon, avec 4 Go de ram et un quadcore ça passe...
bonuscad Posté(e) le 18 novembre 2005 Posté(e) le 18 novembre 2005 Salut, Une discussion ou j'ai donné une réponse pour une solution simple avec des polylignes.Bien que cette solution soit exacte que pour des polylignes SANS arrondis, elle peut suffire pour placer un texte "a peu près" au centre (même en cas d'arrondi) Enfin à voir, l'avantage est que cela n'utilise pas les fonction activeX (vl-load-com) et que tu n'auras pas besoin de conversion en région. Alternative en macro Diesel: ^C^C_.undo;_begin;_.id;\_.-boundary;_none;@;;_.area;_object;_last;_.erase;_last;;_.-text;_justify;_bcenter;_none;@;;;$M=Surface=$(getvar,area);_.move;_last;;_none;@;\_.undo;_end;^Z [Edité le 18/11/2005 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
mdsv31 Posté(e) le 18 novembre 2005 Posté(e) le 18 novembre 2005 Juste une question Si l'on fait la moyenne des X et la moyenne des Y des sommets des polyligne, on n' a pas un point qui se trouve a peu pres au centre ? @+ MDSV31 Dessinateur Indépendant
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