jireu Posté(e) le 13 février 2019 Posté(e) le 13 février 2019 Bonjour à tous, fraîchement arrivé dans le monde d'Autocad, je m’intéresse au possibilités des lisp. voici mon cas: j'ai un calque "alpha" contenant seulement des polylignes. je voudrais arriver à calculer la longueur totale de ces polylignes et inscrire cette valeur dans une zone de texte dans une légende. pour ce faire, je suis tombé sur la routine de Gile appelée "LongCalque" qui m'a semblé proche de mon vœux. j'ai essayé de la modifier pour faire ce que je souhaite mais je crois que je l'ai plus torturé qu'autre chose :P . l'idée finale étant celle-ci: avoir une zone de texte préformatée dans mon gabarit qui indiquera toujours la longueur totale des polylignes existante sur le calque qui s’appellera toujours "alpha" en attendant je lis l'introduction à Auto lisp proposé par Gile en espérant glaner de précieuses informations. si vous aviez donc quelques idées ou conseil sur ce sujet, je vous en serai reconnaissant :D merci d'avoir lu mon post et bonne journée à vous.
jireu Posté(e) le 13 février 2019 Auteur Posté(e) le 13 février 2019 J'ai avancé sur la partie de calcul . je tape maintenant le nom de la fonction et elle me renvoie directement la somme des longueurs des polylignes. (defun c:long_alpha (/ ent ss i len) ; modifié à partir de la fonction LongCalque de Gile (setq ss (ssget "_X" (list (quote(0 . "LWPOLYLINE")) (quote(410 . "Model")) (quote(8 . "alpha")) ) ) ) (setq len 0) (progn (setq i 0) (while (setq ent (ssname ss i)) (setq len (+ len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent) ) ) i (1+ i) ) (prompt (strcat "\nNombre de polylignes : " (itoa i) "\nLongueur cumulée : " (rtos len) ) ) ) (princ) ) j'imagine que la fonction originale étant faite pour un résultat plus complexe, il n'y a pas forcément besoin de passer par toute les étapes pour mon but.... mais je n'y connais pas encore beaucoup la dedans donc je copie / transforme ! il me reste à trouver comment envoyer le résultat dans la case d'un tableau ou comment appeler cette fonction à partir de la case du tableau pour que le résultat y soit affiché... je cherche :)
jireu Posté(e) le 13 février 2019 Auteur Posté(e) le 13 février 2019 j'ai trouvé un bout de code proposé par Patrick_35 dans un autre post qui me permet de créer un champ perso et d'y envoyer ma valeur. j'ai donc remplacé le groupe "prompt" par ce code: (setq sum (vla-get-summaryinfo (vla-get-activedocument (vlax-get-acad-object)))) (and (vl-catch-all-error-p (vl-catch-all-apply 'vla-addcustominfo (list sum "longueur_poly_alpha" (rtos len)))) (vla-setcustombykey sum "longueur_poly_alpha" (rtos len)) ) ça marche super bien ! Dernier problème, avec ce lisp, si je modifie les polylignes de mon calque je dois le rappeler et faire un regen. Pensez vous qu'il soit possible d'appeler automatiquement ma fonction quand je modifie mes polylignes ou alors est ce que je dois me résigner à appeler manuellement ma fonction et regen. bonne soirée
(gile) Posté(e) le 13 février 2019 Posté(e) le 13 février 2019 Salut, Je pense que comme beaucoup, tu pars dans la mauvaise direction. Tu penses qu'il faut utiliser un LISP pour faire ce que tu veux (ce n'est pas sûr).Tu cherches un LISP qui te sembles correspondre à ce que tu souhaites et tu veux l'adapter malgré le fait que tu ne comprennes pas vraiment comment fonctionne le code (là c'est l'échec assuré). Si tu veux utiliser un champ, commence par creuser ce qu'on peut faire directement avec les champs (sans programmation). Voir ce sujet et aussi celui-là. Si tu veux utiliser un LISP (avec ou sans utilisation d'un champ), et si tu veux le faire par toi-même et il faut accepter de commencer par écrire (tout seul) des routines plus simples pour acquérir les bases plutôt que d'utiliser des bouts de code que tu ne comprends pas. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 13 février 2019 Posté(e) le 13 février 2019 Hello +1 avec Gilles ! On peut déjà faire des trucs Top avec les champs dynamiques + formules ... Aujourd'hui je suis nul (ou presque en Lisp) MAIS tu attaques trop fort ! SVP essayes de faire des choses simples puis tu montes doucement en puissance ... Bye, lecrabe Autodesk Expert Elite Team
didier Posté(e) le 13 février 2019 Posté(e) le 13 février 2019 Coucou Conseil récurrent s'il en est que celui des mes deux confrères que je plussoieFranchement, est-ce tu crois que tu vas épater ta copine avec ta guitare sous prétexte que tu as écouté Jimi Hendrix ?Il faut être humble, tenace, malin, et quand tu écris tes codes, même s'il ne sont pas parfaits, tu ressens une fierté et un plaisir décuplésÉtant autodidacte (comme beaucoup des anciens) j'ai voulu participer à l'aide aux débutant en écrivant mes pages webRegarde le lien dans ma signature et je me ferais un plaisir de me joindre à ceux qui t'aideront depuis ce forum Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
jireu Posté(e) le 14 février 2019 Auteur Posté(e) le 14 février 2019 BonjourMerci pour vos retours constructifs.Je joues souvent avec des chose que je ne comprend pas entièrement pour essayer de les comprendre. Je dois reconnaître que c’est une erreur car je les comprends souvent de travers :P J’etais parti de la réflexion que, comme il existait des lisp permettant le calcul de la somme des longueurs des polylignes, c’est qu’on ne pouvait le faire autrement..Je vais donc explorer le monde merveilleux des champs dynamiques. Didier je suis bloqué sur ton prolégomènes (sur ma tablette, je retombes dessus quelque soit le lien que je choisis) mais sois assuré que je vais lire tes articles dès que j’ai un pc entre les mains Bonne journée
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