lispo Posté(e) le 24 janvier 2006 Posté(e) le 24 janvier 2006 Bonjour,quelqu'un pourrait m'expliqué comment déssiner un arc sans son centre en VBA ex: (Startpoint,EndPoint,Radius)merci d'avance
ludo07 Posté(e) le 24 janvier 2006 Posté(e) le 24 janvier 2006 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 AcadLWPolylineDim xp(1 To 2) As DoubleDim yp(1 To 2) As DoubleDim points(0 To 3) As Doublexp(1) = 0yp(1) = 0xp(2) = 10yp(2) = 0points(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 polylignepoly1.SetBulge 0, 1poly1.Updatepoly1.Explode End Sub a+ :)
lispo Posté(e) le 24 janvier 2006 Auteur Posté(e) le 24 janvier 2006 Resalut,j'avais deja essayer mais j'arrivais pas a gérer le bulgecomment donner un rayon preciesprenon ton exemple je voudrais lui attribuer un rayon de 60comment tu prend tumerci d'avance
bonuscad Posté(e) le 24 janvier 2006 Posté(e) le 24 janvier 2006 Ca ne parle pas de VBA, mais vois cette DISCUSSION ,elle est instructive. ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 24 janvier 2006 Posté(e) le 24 janvier 2006 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
ludo07 Posté(e) le 24 janvier 2006 Posté(e) le 24 janvier 2006 :) 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 AcadLWPolylineDim xp(1 To 2) As DoubleDim yp(1 To 2) As DoubleDim points(0 To 3) As DoubleDim res, sb1, sb2, sb3 As DoubleDim r, d, d1, d2 As DoubleDim startPnt As VariantDim 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 / 2sb3 = d / rsb2 = Atn(sb3 / Sqr(-sb3 * sb3 + 1))sb1 = sb2 / 2res = Tan(sb1)poly1.SetBulge 0, respoly1.Updatepoly1.Explode End Sub Tiens moi au courant s'il te plait. a+
(gile) Posté(e) le 24 janvier 2006 Posté(e) le 24 janvier 2006 J'ai modifié le LISP ci-dessus, il est maintenant entièrement en langage VisualLISP, plus facile à traduire en VBA, j'imagine. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 27 janvier 2006 Posté(e) le 27 janvier 2006 Salut Lispo, si jamais tu repassais par là j'ai encore un peu ammélioré la LISP pour qu'il fonctionne quelque soit le SCU courant. 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