vinc59 Posté(e) le 9 février 2007 Posté(e) le 9 février 2007 Bonjour à tous est ce que quelqu'un peut me dire comment créer une anse de panier en vba avec des polylines merci de vos réponses vinc
winfield Posté(e) le 9 février 2007 Posté(e) le 9 février 2007 Bonsoir,Vite fait sur le gaz, je dirai : 2 clics pour les extrémités, un pour le rayon et le tour est joué ;) Non, je plaisante ! ? Une anse, pas simple............Il y en a des petites, des grosses, des fines, des toutes bariolées comme un ara etc.Peux-tu donner un peu plus de précison s'il te plait ? Même si je ne peux pas t'aider, d'autres, sont plus que capable de t'aider, mais auront sûrement besoin de ces infos.Bonne soirée Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
(gile) Posté(e) le 9 février 2007 Posté(e) le 9 février 2007 Salut, Je cause pas VBA, mais comme le problème m'amusais, j'ai fait un petit LISP : 2 clics pour les extrémités, un troisième (ou une distance entrée au clavier) pour la hauteur et le tour est joué. ;) L'anse est une anse de panier à trois centres (polyligne constituée de 3 arcs), à 5, 7, 9 ou plus c'est beaucoup plus compliqué et autant faire une demi ellipse. D'ailleurs, quand la variable PELLIPSE est à 1 la polyligne créée est composée de deux anses à 7 centres. ;;; ADP Crée une anse de panier (polyligne à 3 arcs) (defun c:adp (/ doc sp p1 p2 p3 p4 p5 a1 a2 r z pline) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) sp (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace doc) (vla-get-ModelSpace doc) ) ) (initget 1) (setq p1 (getpoint "\nDépart de l'anse: ") p2 p1 ) (while (equal p1 p2) (setq p2 (getpoint p1 "\nExtrémité de l'anse: ")) ) (setq p3 (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2)) p1 p2) p4 p3 ) (while (equal p3 p4) (setq p4 (polar p3 (+ (angle p2 p1) (/ pi 2)) (getdist p3 "\nHauteur de l'anse: ") ) ) ) (setq a1 (atan (distance p3 p4) (distance p1 p3)) a2 (atan (distance p1 p3) (distance p3 p4)) r (/ (* (distance p1 p4) (+ 1 (cos a1) (- (sin a1)))) (* 2 (sin a1)) ) p5 (polar p4 (+ (angle p1 p2) (/ pi 2)) r) z (trans '(0 0 1) 1 0 T) ) (vla-StartUndoMark doc) (setq pline (vlax-Invoke sp 'addLightWeightPolyline (apply 'append (mapcar '(lambda (p) (setq p (trans p 1 z)) (list (car p) (cadr p)) ) (list p1 (polar p5 (- (angle p5 p4) a1) r) (polar p5 (+ (angle p5 p4) a1) r) p2 ) ) ) ) ) (vla-setBulge pline 0 (/ (sin (/ a2 4.0)) (cos (/ a2 4.0)))) (vla-setBulge pline 1 (/ (sin (/ a1 2.0)) (cos (/ a1 2.0)))) (vla-setBulge pline 2 (/ (sin (/ a2 4.0)) (cos (/ a2 4.0)))) (vla-put-elevation pline (caddr (trans p1 1 z))) (vla-EndUndoMark doc) (princ) )[Edité le 10/2/2007 par (gile)] [Edité le 11/2/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 10 février 2007 Posté(e) le 10 février 2007 Si quelqu'un voulais s'amuser à traduire en VBA, je donne la méthode que j'ai employée. Il s'agit une transposition d'une des méthodes graphiques utilisées pour tracer les anses de panier à 3 centres. http://img222.imageshack.us/img222/7557/adprz1.png Connaissant les points de départ et de fin de l'anse (p1 et p2) et sa hauteur (distance entre p3 et p4), la méthode graphique consiste en reporter, à partir de p4, la différence entre la distance p1p3 et la distance p3p4 sur les segments p1p4 et p2p4.Les médiatrices des segments restants sont les droites sur lesquelles seront les rayons communs aux arcs.Les centres des arcs sont les intersections de chacune des médiatrices avec la droite p1p2 et l'intersection des deux médiatrices. Pour dessiner la polyligne, il faut déterminer les sommets p6 et p7 et les angles a1 et a2 qui seviront à définir la courbure des arcs (bulge). Trouver les angles a1 et a2 peut se faire par la trigonométrie ou par addition/soustraction des angles des différents segments connus. Les sommets p6 et p7 peuvent être définis par leurs coordonnées polaires à partir du point p5 et du rayon de l'arc central r.Le point p5 peut être défini par ses coordonnées polaires à partir du point p4 et du rayon r. Pour trouver le rayon r, on peut utiliser les fonctions trigonométriques dans le triangle rectangle dont les sommets sont p5, p4 et pt.La distance entre pt et p4 est donnée par la méthode graphique : p4pt = (p1p4 + p1p3 - p3p4) / 2.D'où r = (p1p4 + p1p3 - p3p4) / 2 p3p4 ou r = (p1p4 (1 + cos a1 - sin a1)) / 2 sin a1. Connaissant r, on peut définir le centre p5, puis, de ce centre, les sommets p6 et p7 avec leurs coordonnées polaires. La courbure (bulge) des polyarcs est la tangente du quart de l'angle de l'arc. [Edité le 11/2/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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