jfcantin197733 Posté(e) le 3 août 2010 Posté(e) le 3 août 2010 Bonjour J'ai posté un message hier et je n'ai eu aucune réponse. Je crois ne pas avoir été assez précis dans ma question. Je veux coder le bouton qui permer de traqcer ligne en VBA pour Autocad 2002. Je ne comprend rien au Lisp (si ce bouton est codé en lisp). Mon but est que lorsque l'on pique le premier point, on a la possibilité d'entrer la longueur de la ligne. Je veux que la longueur soit entrée en pied et soit convertie en mètre. Je suis bloqué dans mon code pour lui kimposé une longeur à la ligne.Je suis capable de dessiner mon point avec deux points mais je ne trouve pas comment faire pour piquer deux point et lui imposer une longueur. Dim kwordList_Distance As String Dim basePnt As Variant Dim returnPnt As Variant Dim ReturnString_Distance As Variant basePnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ") ActiveDocument.Utility.InitializeUserInput 128, kwordList_Distance ReturnString_Distance = ActiveDocument.Utility.GetKeyword("Distance: ") If ReturnString_Distance <> "" Then ReturnString_Distance = ReturnString_Distance * 0.3048 returnPnt = ThisDrawing.Utility.GetPoint(basePnt, "Enter a point: ") End If Dim lineObj As AcadLine Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt) 'Ici je ne sais pas comment coder cette partie lineObj.Length = ReturnString_Distance merci de votre aide
SachaM Posté(e) le 3 août 2010 Posté(e) le 3 août 2010 Bonjour,modifie le code de la facon suivante, Dim lineObj As AcadLine [surligneur] 'déterminer la longueur avant de l'ajouter dans le dessinlineObj.Length = ReturnString_Distance[/surligneur] Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt) Sacha
jfcantin197733 Posté(e) le 3 août 2010 Auteur Posté(e) le 3 août 2010 merci de ton aide Le problème est que le code que j'ai mis en exemple ne fonctionne pas. Ma variable est un VariantDim ReturnString_Distance As Variant lineObj.Length = ReturnString_Distance = ERREUR lorsque je démarre le code Ca me dit:Compile error:Can't assign to read-only property Humm comment puis-je régler ce problème J'ai trouvé que Utility.PolarPoint pourrait me donner un coup de main mais je veux que l'angle soit défini par la ligne qui est active lorsque le getpoint est faite. Comment récupérer l'angle. merci d'avance de ton aide, c'est tres apprécié. [Edité le 3/8/2010 par jfcantin197733]
(gile) Posté(e) le 3 août 2010 Posté(e) le 3 août 2010 Salut, mais je veux que l'angle soit défini par la ligne qui est active lorsque le getpoint est faite. Comment récupérer l'angle. Pour ça, il faudrait une méthode VBA qui retourne la position du curseur en dynamique (commela fonction LISP grread) mais je crains que ça n'existe pas (mes connaissances en VBA sont limitées). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
rom1_am Posté(e) le 4 août 2010 Posté(e) le 4 août 2010 Bonjour, La propriété 'Length' est en lecture seule, on ne peut pas régler la longueur de la ligne par cette propriété.Soit tu peux demander l'angle au lieu du 2ème point puis calculer le 2ème point avec Polarpoint: If ReturnString_Distance <> "" Then ReturnString_Distance = ReturnString_Distance * 0.3048 ' returnPnt = ThisDrawing.Utility.GetPoint(basePnt, "Enter a point: ") angle = ThisDrawing.Utility.GetAngle(basePnt, "Enter a point: ") returnPnt = ThisDrawing.Utility.PolarPoint(basePnt, angle, ReturnString_Distance) End If Soit tu peux tracer ta ligne une première fois pour récupérer l'angle puis la supprimer et la retracer à la bonne longueur: Dim lineObj As AcadLine Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt) Dim AngleLigne AngleLigne = lineObj.angle returnPnt = ThisDrawing.Utility.PolarPoint(basePnt, AngleLigne, ReturnString_Distance) lineObj.Delete Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt) (il y a surement d'autres manières plus élégantes mais ça devrait marcher) a+ [Edité le 4/8/2010 par rom1_am] _______________________________R.A.Développeur AutoCAD C#.netwww.danialu.fr
jfcantin197733 Posté(e) le 4 août 2010 Auteur Posté(e) le 4 août 2010 Bonjour J'allais vous montrer ma solution mais j'ai vu que j'avais une réponse... Si je compare mon code avec le tien, ta facon de faire est tres élégante.... Merci mille fois c'est tres apprécié. Une derniere chose... mais celle ci est peux lié a du Lisp... Lorsque je clique sur le bouton pour tracer une ligne (bouton d'Autocad), ca me demande de cliquer un point. Apres avoir cliqué un point je vois toujours la ligne pour l'allignement de la futur ligne, même si j'entre une distance. Avec mon code, aussitot que je suis rendu au GetPoint, la ligne s'efface, je rentre ma distance, j'appuis sur Enter et la ligne réaparaît. Existe-t-il une facon de ne jamais faire disparaite cette ligne pour que mon bouton soit identique à celui du bouton de la ligne d'Autocad ? merci de ton aide
SachaM Posté(e) le 4 août 2010 Posté(e) le 4 août 2010 Bonjour, il est normal que la ligne s'interomp vu que tu demande a l'utilisateur d'entrer un nombre,si tu demande d'entré le nombre avant le 1er point la ligne ne disparait pas. Sacha
jfcantin197733 Posté(e) le 4 août 2010 Auteur Posté(e) le 4 août 2010 Bonjour Je savais que c'était normal que la ligne disparaisse étant donné le getpoint. Mais si on compare mon code avec le bouton de la ligne d'Autocad, on peux entrer une valeur sans que la ligne s'efface avec le bouton de la ligne d'Autocad. Je me demande comment est-il possible d'arriver à cela avec VBA.... Si c'est possible merci
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