Aller au contenu

draw arc


Messages recommandés

Posté(e)

Salut lispo,

 

1) Je pense que tu aurait dû poster ton message dans le forum vba, (mais c'est pas grave)

2) c'est pas lispo que tu aurais du prendre comme surnom mais "vbaO",(je sais je suis pas trés fort pour la blague du matin, désolé...) :cool:

 

Voilà quand même ton vba:

 

Sub arc()

 

Dim poly1 As AcadLWPolyline

Dim xp(1 To 2) As Double

Dim yp(1 To 2) As Double

Dim points(0 To 3) As Double

xp(1) = 0

yp(1) = 0

xp(2) = 10

yp(2) = 0

points(0) = xp(1): points(1) = yp(1)

points(2) = xp(2): points(3) = yp(2)

Set poly1 = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)

'la partie qui suit permet d'arrondir les segment de polyligne

poly1.SetBulge 0, 1

poly1.Update

poly1.Explode

 

End Sub

 

a+ :)

 

Posté(e)

Resalut,

j'avais deja essayer mais j'arrivais pas a gérer le bulge

comment donner un rayon precies

prenon ton exemple je voudrais lui attribuer un rayon de 60

comment tu prend tu

merci d'avance

Posté(e)

Salut, (tu dois bien lire le LISP lispo ?)

 

Je ne connais pas le VBA, mais voici un petit LISP vite fait qui crée un objet arc à partir des points de départ de fin et du rayon. L'arc créé l'est dans le sens trigonométrique, et pour répondre au problème soulevé dans le lien donné par Bonuscad, seul l'arc inférieur au demi-tour est dessiné (comme dans l'option "Départ, fin, rayon" de la commande "Arc").

 

J'ai essayé d'écrire le plus possible en VisualLISP, qui se rapproche du VBA, je crois.

 

C'est la transcription de la méthode graphique consistant à trouver le centre de l'arc par l'intersection de deux arcs de même rayon. Pas très élégant, mais efficace.

 

En espérant que cela te soit d'un quelconque usage.

 

Nouvelle version entièrement VisualLISP

 

(defun c:arc_ser
	 (/	     AcDoc	Util	   ModSp
	  StartPt    EndPt	Radius	   Normal
	  OCS_StartPt		OCS_EndPt  AngStartEnd
	  Arc1	     Arc2	Center	   OCS_Center
	 )
 (vl-load-com)
 (setq	AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
ModSp (vla-get-ModelSpace AcDoc)
Util  (vla-get-Utility AcDoc)
 )
 (vla-StartUndoMark AcDoc)

 ;; Entrée des données par l'utilisateur (coordonnées SCG)

 (vla-InitializeUserInput Util 1)
 (setq StartPt (vla-getPoint Util nil "\nDépart de l'arc: "))
 (vla-InitializeUserInput Util 1)
 (setq
   EndPt (vla-getPoint
    Util
    (vla-TranslateCoordinates Util StartPt acWorld acUCS 0)
    "\nFin de l'arc: "
  )
 )
 (vla-InitializeUserInput Util 1)
 (setq	Radius (vla-getDistance
	 Util
	 (vla-TranslateCoordinates Util EndPt acWorld acUCS 0)
	 "\nRayon de l'arc: "
       )
 )

 ;; Calcul du vecteur Normal du SCO et traduction des points dans le SCO
 ;; pour déterminer l'angle entre les points de départ et de fin

 (setq	Normal (vla-TranslateCoordinates
	 Util
	 (vlax-3d-point '(0 0 1))
	 acUCS
	 acWorld
	 1
       )
 )
 (setq	OCS_StartPt
 (vla-TranslateCoordinates
   Util	StartPt	acWorld	acOCS 0	Normal)
 )
 (setq	OCS_EndPt (vla-TranslateCoordinates
	    Util EndPt acWorld acOCS 0 Normal)
 )
 (setq	AngStartEnd
 (vla-AngleFromXAxis Util OCS_StartPt OCS_EndPt)
 )

 ;; Tracé de 2 arcs temporaires pour trouver le centre
 
 (setq	Arc1 (vla-addArc
       ModSp
       StartPt
       Radius
       AngStartEnd
       (+ AngStartEnd (/ pi 2))
     )
 )
 (setq	Arc2 (vla-addArc
       ModSp
       EndPt
       Radius
       (+ AngStartEnd (/ pi 2))
       (+ AngStartEnd pi)
     )
 )

 ;; Récupération et traduction dans le SCO du centre (intersection des arcs)
 
 (setq Center (vla-IntersectWith Arc1 Arc2 acExtendNone))
 (setq	OCS_Center
 (vla-TranslateCoordinates
   Util	Center acWorld acOCS 0 Normal)
 )

 ;; Suppression des arcs temporaires
 
 (vla-delete Arc1)
 (vla-delete Arc2)

 ;; Tracé de l'arc
 
 (vla-addArc
   ModSp
   Center
   Radius
   (vla-AngleFromXAxis Util OCS_Center OCS_StartPt)
   (vla-AngleFromXAxis Util OCS_Center OCS_EndPt)
 )
 (princ)
)

[Edité le 26/1/2006 par (gile)]

 

[Edité le 27/1/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

:) Resalut lispo,

 

Excuse moi pour le délais, mais j'avous qu'il a fallut que je réfléchisse quelques heures pour trouver la relation entre la fléche de l'arc et le rayon de l'arc.

Pourtant c'était tous simple :P .

 

Du coups je t'ai fais ce programme vba:

 

Sub arc()

 

Dim poly1 As AcadLWPolyline

Dim xp(1 To 2) As Double

Dim yp(1 To 2) As Double

Dim points(0 To 3) As Double

Dim res, sb1, sb2, sb3 As Double

Dim r, d, d1, d2 As Double

Dim startPnt As Variant

Dim endPnt As Variant

 

On Error Resume Next

 

startPnt = ThisDrawing.Utility.GetPoint(, "Point départ de l'arc : ")

endPnt = ThisDrawing.Utility.GetPoint(startPnt, "Point final de l'arc : ")

r = ThisDrawing.Utility.GetReal("Entrez le rayon de l'arc en cm : ")

xp(1) = startPnt(0)

yp(1) = startPnt(1)

xp(2) = endPnt(0)

yp(2) = endPnt(1)

points(0) = xp(1): points(1) = yp(1)

points(2) = xp(2): points(3) = yp(2)

Set poly1 = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)

d2 = ((xp(2) - xp(1)) ^ 2) + ((yp(2) - yp(1)) ^ 2)

d1 = Sqr(d2)

d = d1 / 2

sb3 = d / r

sb2 = Atn(sb3 / Sqr(-sb3 * sb3 + 1))

sb1 = sb2 / 2

res = Tan(sb1)

poly1.SetBulge 0, res

poly1.Update

poly1.Explode

 

End Sub

 

Tiens moi au courant s'il te plait.

 

a+

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é