Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
583 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA Autocad] dessiner la symétrie d'un point par rapport à une ligne.

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA Autocad] dessiner la symétrie d'un point par rapport à une ligne.

n°2054356
stepos62
Posté le 04-02-2011 à 13:25:52  profilanswer
 

Bonjour,
j'ai besoin d'aide pour un projet personnel.
 
je souhaiterai écrire un programme permettant de dessiner le symétrique d'un point par rapport à une ligne sans passer par la fonction miroir d'autocad.
 
Voila le sujet pour avoir plus d'information...
 
Saisies utilisateur :
P1 Point dont on doit calculer le symétrique
P2 et P3, deux points de la ligne de symétrie
 
Résultat : P4
 
Algorithme :
Déterminer l’orientation du segment P2,P3
Calculer les distances P1P2, P1P3 et P2P3
Ecrire Pythagore pour chaque triangle P1HP2 et P1HP3
Ecrire l’équation du 2nd degré traduisant que P2P3=P2H+HP3
En déduire le distance P1H en résolvant cette équation du 2nd degré, puis en déduire
le symétrique P4 de P1
 
Merci d'avance de votre aide qui me sera très très précieuse!!!

mood
Publicité
Posté le 04-02-2011 à 13:25:52  profilanswer
 

n°2054357
stepos62
Posté le 04-02-2011 à 13:27:15  profilanswer
 

voila un premier jet du programme... je bloque pour la suite
 
 
Sub fonction_miroir()
 
 
Dim Pt1 As Variant, Pt2 As Variant, Pt3 As Variant, angle1 As Variant
 
Dim Ligne1 As AcadLine
Dim Point1 As ACAD_POINT
 
 
 
Pt1 = ThisDrawing.Utility.GetPoint(, "Entrer le point 1: " )
Pt2 = ThisDrawing.Utility.GetPoint(, "Entrer le point 2: " )
Pt3 = ThisDrawing.Utility.GetPoint(Pt2, "Entrer le point 3: " )
'angle1 = ThisDrawing.Utility.AngleToString(
 
Set Point1 = ThisDrawing.ModelSpace.AddPoint(Pt1)
Set Ligne1 = ThisDrawing.ModelSpace.AddLine(Pt2, Pt3)
 
 
End Sub
 
Function Distance1(Pt1, Pt2) As Double
   Distance1 = Sqr((Pt2(0) - Pt1(0)) ^ 2 + (Pt2(1) - Pt1(1)) ^ 2 + (Pt2(2) - Pt1(2)) ^ 2)
   
   End Function
   
   Function Distance2(Pt1, Pt3) As Double
   Distance2 = Sqr((Pt3(0) - Pt1(0)) ^ 2 + (Pt3(1) - Pt1(1)) ^ 2 + (Pt3(2) - Pt1(2)) ^ 2)
   
   End Function
   
   
   Function Distance3(Pt2, Pt3) As Double
   Distance3 = Sqr((Pt3(0) - Pt2(0)) ^ 2 + (Pt3(1) - Pt2(1)) ^ 2 + (Pt3(2) - Pt2(2)) ^ 2)
   
End Function
 
   

n°2058823
otobox
Maison fondée en 2005
Posté le 22-02-2011 à 18:37:19  profilanswer
 

D'abord, tu n'as pas besoin de faire 3 fonctions pour calculer les distances, une seule suffi !


Function Distance2Pts(Pt1, Pt2) As Double
  Distance2Pts = Sqr((Pt2(0) - Pt1(0)) ^ 2 + (Pt2(1) - Pt1(1)) ^ 2 + (Pt2(2) - Pt1(2)) ^ 2)
End Function


Utilisation :

Sub CalculerDistance()
  Point1 = ThisDrawing.Utility.GetPoint(, "Entrer le point 1: " )
  Point2 = ThisDrawing.Utility.GetPoint(, "Entrer le point 2: " )  
  Point3 = ThisDrawing.Utility.GetPoint(, "Entrer le point 3: " )
  msgbox("La distance totale cumulée des points est : " & distance2Pts(Point1, Point2)) + distance2Pts(Point3, Point2))
End Sub


 
Ensuite, pour faire ta symétrie, ça serait plus simple de passer par le produit des déterminants entre le vecteur V1 définissant ton axe de symétrie et le vecteur V2 défini par le point sélectionné et le projeté de ce point sur l'axe de symétrie : le point symétrisé sera le point projeté - V2 ;)
Ca fonctionnera en 3D, je sais, je l'ai déjà fait mais je vais te laisser chercher  :D . C'est pas bien compliqué :)
 
Tu peux aussi utiliser le système de coordonnés utilisateur, mais ça fait utiliser des fonctions que je trouve pas faciles à utiliser, passer par le solution du calcul vectoriel est plus simple à mon avis.
 
Tu peux jeter un coup d'œil sur les exemples que j'ai mis sur mon blog consacré à VBA et AutoCAD :
http://autocadvba.canalblog.com/ar [...] 41514.html
Ça fonctionne en 2D, mais tu ne devrais pas avoir de difficulté à adapter ça en 3D (à partir du moment où tu restes en SCG).


Message édité par otobox le 11-09-2011 à 17:34:10

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2062212
stepos62
Posté le 10-03-2011 à 11:23:20  profilanswer
 

désolé pour la réponse tardive, je passe une période de partiel intense! j'ai bien réussi a faire la symétrie grâce au produit des déterminant! Merci beaucoup pour ton aide. au passage ton blog est sympa ;)
 
cordialement
 
Stepos


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA Autocad] dessiner la symétrie d'un point par rapport à une ligne.

 

Sujets relatifs
[VBA Access]Changer taille et caractère dans un état[VBA WORD] Macro pour faire apparaitre l'assistant
[BATCH/DOS] rechercher/remplacer un ensemble de ligne par d'autresDessiner à la souris
Changer d'imprimante en VBA sous Access 2000Je ne trouve pas la ligne
[VBA Excel] Afficher message lorsque ...[VBA Excel] Macro
Ajouter un champ DE lors d'un envoi de mail en VBA ?Détection d'un séparateur de colonne quelconque (VBA Excel)
Plus de sujets relatifs à : [VBA Autocad] dessiner la symétrie d'un point par rapport à une ligne.


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR