Aller au contenu

longueur totale vers champs de texte


Messages recommandés

Posté(e)

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.

Posté(e)

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 :)

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

Coucou

 

Conseil récurrent s'il en est que celui des mes deux confrères que je plussoie

Franchement, 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 web

Regarde le lien dans ma signature et je me ferais un plaisir de me joindre à ceux qui t'aideront depuis ce forum

 

Amicalement

Posté(e)

Bonjour

Merci 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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité