jeanmi66 Posté(e) le 17 novembre 2008 Partager Posté(e) le 17 novembre 2008 Bonjour, et bien voilà, je voudrais savoir si on peut récupérer dans une variable l'angle d'une polyligne 2D dans le SCU courant ? Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
bseb67 Posté(e) le 17 novembre 2008 Partager Posté(e) le 17 novembre 2008 Salut! la réponse est bien-sur oui, mais quel angle? car tu peux avoir plusieurs points dansta polyligne, sans qu'ils ne soient alignés. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite... Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 17 novembre 2008 Auteur Partager Posté(e) le 17 novembre 2008 Effectivement, ce serait entre deux pts à chaque fois. L'idéal pour moi serait de cliquer sur les deux pts. Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 17 novembre 2008 Partager Posté(e) le 17 novembre 2008 Bonjour Regarde la fonction angle @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 17 novembre 2008 Partager Posté(e) le 17 novembre 2008 Salut, En cliquant 2 points, il suffit d'utiliser la fonction getorient (angtos (getorient "\nPremier point: ")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 17 novembre 2008 Auteur Partager Posté(e) le 17 novembre 2008 Haaa zut, j'essai mais j'y arrive pas !!!! :( En fait, j'ai des polylignes 2D et un texte simple que j'aimerai copier à certains endroits entre chaque pt constituant la polyligne. Ce serai l'équivalent d'une copie multiple. Mon idée était donc de récupérer dans une variable l'angle entre deux points mais je vois pas comment le rentrer dans une routine de copie multiple ! Quelqu'un peut m'aider svp ? Merci, je continue à chercher en attendant... Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 17 novembre 2008 Partager Posté(e) le 17 novembre 2008 Salut, Merci, je continue à chercher en attendant... Je ne t'ai pas trop laissé cherché...D'après tes souhaits, ceci aurai l'air de convenir. (defun c:MultCopyAlign_text ( / js offset_txt vla_txt p_ent vla_po vla_obj pt deriv alpha) (princ "\nSélectionner le textes à copier/aligner de façon multiple. ") (while (null (setq js (ssget "_+.:E:S" '((0 . "TEXT")))))) (initget 7) (setq offset_txt (getdist "\nDistance de décalage du texte: ")) (vl-load-com) (setq vla_txt (vlax-ename->vla-object (ssname js 0))) (while (setq p_ent (entsel "\nSélectionner la polyligne2D: ")) (cond ((eq (cdr (assoc 0 (entget (car p_ent)))) "LWPOLYLINE") (setq vla_po (vlax-ename->vla-object (car p_ent)) vla_obj (vlax-invoke-method vla_txt 'Copy) pt (vlax-curve-getClosestPointTo vla_po (cadr p_ent)) deriv (vlax-curve-getfirstderiv vla_po (vlax-curve-getparamatpoint vla_po pt)) alpha (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR"))) ) (vlax-put vla_obj 'Alignment 1) (vlax-put vla_obj 'Rotation (if (or (> alpha (* pi 0.5)) (< alpha (- (* pi 0.5)))) (+ alpha pi) alpha)) (vlax-put vla_obj 'TextAlignmentPoint (polar pt (+ alpha (* pi 0.5)) (if (or (> alpha (* pi 0.5)) (< alpha (- (* pi 0.5)))) (+ (vlax-get vla_obj 'Height) offset_txt) offset_txt ) ) ) ) (T (princ "\nN'est pas une polyligne2D!")) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 17 novembre 2008 Auteur Partager Posté(e) le 17 novembre 2008 Bouducon C'est ENOOOOOOOOOORME !!!! Exactement ce que je cherchais !!!!!!!!!!!!!!!!!!!!!! :o Mais quand je vois ton code, j'étais à des années lumière !!!!! Chapeau bas, l'artiste ! Mille merci et... respect ! :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 20 novembre 2008 Auteur Partager Posté(e) le 20 novembre 2008 Une petite précision par rapport au dernier prog de BONUSCAD dans le message précédent... Je travaille souvent en SCU VUE. Dans ce scu, je me débrouille pour que mon dessin (en vue de dessus) soit tjs orienté de manière à avoir l'axe Y du SCU GENERAL entre -PI/2 et +PI/2 d'un cercle trigo, dans ma vue (j'espère être clair). Ce qui fait que les orientation de texte ne prennent pas en compte la différence angulaire entre les deux SCU. Je croyais que je devais changer la variable UCSXDIR en UCSVIEW mais là, le prog de BONUSCAD marche plus. Je dois zapper un truc. Un petit coup de main des maîtres de cet univers svp ? Merci d'avance. Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 20 novembre 2008 Partager Posté(e) le 20 novembre 2008 Salut, Si j'ai bien compris, ça n'a rien à voir avec la vue courante, le texte devant s'aligner à la polyligne.Il y a juste quelques petits oublis de la part de bonuscad.Les fonctions vlax-curve-* fonctionnent toujours en coordonnées SCG alors que le point retourné par (cadr (entsel)) est en coordonnées SCU courant. Il faut donc remplacer :(vlax-curve-getClosestPointTo vla_po (cadr p_ent))par :(vlax-curve-getClosestPointTo vla_po (trans (cadr p_ent) 1 0)) Et dans le même esprit vlax-curve-getFirstDeriv retourne un vecteur défini dans le SCG, donc il est inutile de prendre en compte UCSXDIR.Remplacer :(- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR")))par :(atan (cadr deriv) (car deriv)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 20 novembre 2008 Auteur Partager Posté(e) le 20 novembre 2008 Voilà le résultat : je suis dans mon SCU VUE. Si je résonne avec un cercle trigo attaché, les polyligne se trouvant entre 0 et PI/2 et entre PI et 3PI/2 ne permettent pas d'avoir un texte "à l'endroit", le texte est renversé. Bizarre. Vous savez pourquoi ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 20 novembre 2008 Partager Posté(e) le 20 novembre 2008 J'ai modifié le code de bonuscad, le texte devrait s'afficher "à l'endroit" suivant la vue courante. (defun c:MultCopyAlign_text (/ js offset_txt vla_txt p_ent vla_po vla_obj pt deriv alpha ) (princ "\nSélectionner le textes à copier/aligner de façon multiple. " ) (while (null (setq js (ssget "_+.:E:S" '((0 . "TEXT")))))) (initget 7) (setq offset_txt (getdist "\nDistance de décalage du texte: ")) (vl-load-com) (setq vla_txt (vlax-ename->vla-object (ssname js 0))) (while (setq p_ent (entsel "\nSélectionner la polyligne2D: ")) (cond ((eq (cdr (assoc 0 (entget (car p_ent)))) "LWPOLYLINE") (setq vla_po (vlax-ename->vla-object (car p_ent)) vla_obj (vlax-invoke-method vla_txt 'Copy) pt (vlax-curve-getClosestPointTo vla_po [surligneur](trans (cadr p_ent) 1 0))[/surligneur] deriv (vlax-curve-getfirstderiv vla_po (vlax-curve-getparamatpoint vla_po pt) ) alpha [surligneur](angle '(0 0 0) deriv)[/surligneur] ) (vlax-put vla_obj 'Alignment 1) (vlax-put vla_obj 'Rotation [surligneur] (if (minusp (cos (+ alpha (getvar "VIEWTWIST"))))[/surligneur] (+ alpha pi) alpha ) ) (vlax-put vla_obj 'TextAlignmentPoint (polar pt (+ alpha (* pi 0.5)) [surligneur] (if (minusp (cos (+ alpha (getvar "VIEWTWIST"))))[/surligneur] (+ (vlax-get vla_obj 'Height) offset_txt) offset_txt ) ) ) ) (T (princ "\nN'est pas une polyligne2D!")) ) ) (prin1) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 20 novembre 2008 Auteur Partager Posté(e) le 20 novembre 2008 Pour l'orientation, parfait Giles, merci beaucoup. :D :D :D Le seul Hic, c'est dans le quartier 0 à PI/2, la distance de décalage n'est pas respectée, elle est plus grande, exactement 3 fois plus grande !? Normal ça ? :casstet: Merci ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 20 novembre 2008 Partager Posté(e) le 20 novembre 2008 Il faut faire le même test que pour le calcul de l'angle de rotation dans l'expression (polar ...) qui calcule le point d'insertion. Je modifie le code ci dessus. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 20 novembre 2008 Auteur Partager Posté(e) le 20 novembre 2008 Super, ça marche !!! Bravo Giles, mille merci ! :D :D :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 20 novembre 2008 Partager Posté(e) le 20 novembre 2008 Il y a juste quelques petits oublis de la part de bonuscad. Gentil de ta part, je ne maitrise pas tout simplement aussi bien la 3D que toi. J'ai encore du mal à solutionner simplement (car je voudrais le faire simple et concis) les problèmes de 3D. Je n'ai toujours pas compris et intégré la notion de l'axe arbitraire utilisé par Autocad. (bon je ne m'y penche pas souvent, la cafetière a du mal à suivre) Je pense que si le jour arrive, TILT!, la remise en écriture des codes que j'ai pu faire sera indispensable. Je m'en remet donc à toi pour la correction concernant la 3D et t'en remercie. Car mes résolutions restent encore tortueuses et fumeuses. Enfin comme dirais l'autre: Je l'aurais un jour, je l'aurais Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
jeanmi66 Posté(e) le 24 novembre 2008 Auteur Partager Posté(e) le 24 novembre 2008 Je ne voulais rien insinuer de "méchant" en disant qu'il y avait des oublis : moi, en lisp je m'y met quand j'ai 5 minutes, entre les gamins et le boulo pas facile. Je vous fais donc confiance à vous tous qui êtes forcément meilleur que moi dans ce domaine ;-) Mes remerciements sont sincères. :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
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