Lespounse Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 Bonjour, J'utilise actuellement un lisp pour afficher les surfaces des polylignes de mes dessins et j'aimerais le faire fonctionner sur des hachures ... si quelqu'un peut m'aider ? voici la bête (c'est un lisp que j'ai récupèré sur ce site et que j'ai légèrement modifié): ;; Texte centré sur le centre de gravité et ligne de rappel jusqu'au premier sommet ;; Champs dynamiques (defun c:surprise (/ ad sp ts lp pl sl dl pa sa da ht ip tx) (vl-load-com) (setq ad (vla-get-ActiveDocument (vlax-get-acad-object)) sp (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace ad) (vla-get-ModelSpace ad) ) ts (getvar "TEXTSIZE") lp (getvar "LUPREC") sa (getstring T "\nPrécisez le type de surface ou < Aucun >: " ) da (getint (strcat "\nEntrez le nombre de décimales pour les surfaces <" (itoa lp) ">: " ) ) ) (if (setq ht (getdist (strcat "\nSpécifiez la hauteur de texte <" (rtos ts) ">: ") ) ) (setvar "TEXTSIZE" ht) (setq ht ts) ) (foreach d '(dl da) (or (eval d) (set d lp))) (vla-StartUndoMark ad) (if (ssget '((0 . "LWPOLYLINE"))) (vlax-for o (vla-get-ActiveSelectionSet ad) (setq rg (vlax-invoke sp 'addRegion (list o)) ip (trans (vlax-get (car rg) 'Centroid) 1 0) id (itoa (vla-get-ObjectID o)) ) (vla-addLine sp (vlax-3d-point ip) (vlax-3d-point (vlax-curve-getStartPoint o)) ) (setq tx (vla-addMText sp (vlax-3d-point '(0 0 0)) ht (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " id ">%).Area \\f \"%lu2%pr" (itoa da) (if (= pa sa "") "" (strcat "%ps[ \ , \m² \n " sa "]") ) "\">%" ) ) ) (vla-put-Width tx 0.0) (vla-put-BackgroundFill tx :vlax-true) (vla-put-AttachmentPoint tx acAttachmentPointMiddleCenter) (vla-Move tx (vla-get-InsertionPoint tx) (vlax-3d-point ip)) (mapcar 'vla-delete rg) ) ) (vla-EndUndoMark ad) (princ) ) [Édité par (gile) : formatage et ajout des balises bbcodes]
(gile) Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 Salut,Regarde si TotalArea sur cette page ne te conviendrais pas. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 Super, tu as fait vite ! j'ai essayé ton lisp et il m'affiche le nombre de surfaces sélectionnées et l'aire cumulée.en fait le but n'est pas de calculer mais de faire apparaitre la surface de chaque hachure, à la manière du lisp de mon premier message qui fonctionne trés bien, mais seulement pour les polylignes. [Edité le 11/6/2009 par Lespounse]
(gile) Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 Re, Le LISP ci dessus place le texte (champ) sur le centre de gravité de chaque polyligne.Or obtenir le centre de gravité d'une hachure est plus complexe.J'ai fait une cote mal taillé en mettant le texte sur le centre de l'emprise (BoundigBox) de la hachure. (defun c:surprise (/ ad sp ts lp pl sl dl pa sa da ht ip tx ss) (vl-load-com) (setq ad (vla-get-ActiveDocument (vlax-get-acad-object)) sp (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace ad) (vla-get-ModelSpace ad) ) ts (getvar "TEXTSIZE") lp (getvar "LUPREC") sa (getstring T "\nPrécisez le type de surface ou : " ) da (getint (strcat "\nEntrez le nombre de décimales pour les surfaces (itoa lp) ">: " ) ) ) (if (setq ht (getdist (strcat "\nSpécifiez la hauteur de texte : ") ) ) (setvar "TEXTSIZE" ht) (setq ht ts) ) (foreach d '(dl da) (or (eval d) (set d lp))) (vla-StartUndoMark ad) (if (ssget '((0 . "HATCH"))) (progn (vlax-for o (setq ss (vla-get-ActiveSelectionSet ad)) (setq id (itoa (vla-get-ObjectID o))) (vla-getBoundingBox o 'll 'ur) (setq ip (mapcar (function (lambda (x1 x2) (/ (+ x1 x2) 2))) (vlax-safearray->list ll) (vlax-safearray->list ur) ) ) (setq tx (vla-addMText sp (vlax-3d-point '(0 0 0)) ht (strcat "% id ">%).Area \\f \"%lu2%pr" (itoa da) (if (= pa sa "") "" (strcat "%ps[" sa" \n, m²]") ) "\">%" ) ) ) (vla-put-Width tx 0.0) (vla-put-BackgroundFill tx :vlax-true) (vla-put-AttachmentPoint tx acAttachmentPointMiddleCenter) (vla-Move tx (vla-get-InsertionPoint tx) (vlax-3d-point ip)) (mapcar 'vla-delete rg) ) (vla-delete ss) ) ) (vla-EndUndoMark ad) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 C'est presque ça !serait il possible d'associer une ligne à chaque textmult qui relierait par exemple le centre de la hachure au centre du texte ?et histoire de chipoter, ce serait possible de faire passer le type de surface avant la valeur ?là, ce serait vraiment génial !et merci encore Gile !
(gile) Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 serait il possible d'associer une ligne à chaque textmult qui relierait par exemple le centre de la hachure au centre du texte ? J'ai dit ci-dessus qu'il n'était difficile de déterminer le centre d'une hachure (il faut reconstituer le ou les contours) et que le texte est placé au centre de la "bounding box" de la hachure. ce serait possible de faire passer le type de surface avant la valeur ? Le code ci-dessus est modifié. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 alors pour finir j'aurai besoin d'un lisp qui me permettrait d'associer une ligne (disons d'une longueur définissable lors de l'exécution du lisp) au point d'insertion d'une multitude de textmult qui auraient été sélectionnés au préalable (ou lors de l'exécution du lisp). Le but est en fait d'associer une ligne à des centaines de textmult d'un coup ! merci à l'importance que tu accorde à mon problème ...
(gile) Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 alors pour finir j'aurai besoin d'un lisp... Personnellement, je vais en rester là.Peut-être qu'une âme plus charitable voudra bien se donner la peine de te faire ce dont tu as besoin... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 tant pis,en tout cas merci pour tout ce que tu as déjà fait et excellente continuation à toi
Patrick_35 Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 alors pour finir j'aurai besoin d'un lisp... Personnellement, je vais en rester là. Je comprends (gile) Ce que tu demande est complexe. Il te reste plus qu'à t'y mettre. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 Personnellement, je vais en rester là. Je viens de voir que tu étais modérateur. Alors c'est logique que tu te modères :cool: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 j'ai dit ou fait quelque chose qu'il ne fallait pas ?qu'est-ce qu'il y a à modérer ? et puis le lisp que j'ai proposé au départ liait déjà une ligne à un textmult alors je pensais qu'une simple petite épuration de celui-ci suffirait (quand à m'y mettre je promet que je suis en train de faire le nécessaire mais ça reste quand même compliqué pour quelqu'un qui a découvert le lisp il y a peu !) je continue en tout cas à espérer que quelqu'un pourra m'aider ... :exclam:
Tramber Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 qu'est-ce qu'il y a à modérer ? T'inquiètes, c'est pour faire rire. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 :D tu me rassure ! dis donc, toi qui semble être relativement gradé (avec ta super ceinture rouge)tu ne pourrai pas m'éclairer des fois ? ;)
Tramber Posté(e) le 11 juin 2009 Posté(e) le 11 juin 2009 dis donc, toi qui semble être relativement gradé (avec ta super ceinture rouge)tu ne pourrai pas m'éclairer des fois ? ;) Un jour j'avais même doublé Patrick quand il était encore webmaster. Mon secret ?Je bavarde. blabla bla.Mais je préfère que les gens apprennent. Bien sûr je suis capable, en principe, mais je suis assez lent et je n'ai de temps que pour de tout petit bouts de code et du clavardage. J'ai quand même du monde devant mon écran en permanence. Je suis ceinture rouge en dessin et technique ! Là je fais l'effort de comprendre les demandes.En lisp, je regarde, je corrige, j'aide mais je n'aime pas quand je ne comprends pas vraiment la demande dans l'instant. En gros, j'aide pour des demandes pures de programmeur débutants. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Lespounse Posté(e) le 11 juin 2009 Auteur Posté(e) le 11 juin 2009 Je suis ceinture rouge en dessin et technique ! Là je fais l'effort de comprendre les demandes.En lisp, je regarde, je corrige, j'aide mais je n'aime pas quand je ne comprends pas vraiment la demande dans l'instant. En gros, j'aide pour des demandes pures de programmeur débutants. pour ce qui est du programmeur débutant, je suis ton homme !je n'ai jamais créé de lisp mais j'essaye d'en bidouiller ...Sais tu a qui je peux poser ma dernière question pour accrocher une ligne à des textmult sélectionnés ?j'en ai vraiment besoin et ça fait des heures que je bricole sans arriver à rien !merci
Tramber Posté(e) le 12 juin 2009 Posté(e) le 12 juin 2009 J'ai regardé plus en avant ce que faisais le code.Je l'ai adapté car la boucle ne fonctionne pas chez moi, je ne sais pas pourquoi. Mais ton souhait, je ne le comprends pas. Voilà ! Peut-être un image...... ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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