Aller au contenu

créer anse de panier en vba ?


Messages recommandés

Posté(e)

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.

Posté(e)

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

Posté(e)

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

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é