Aller au contenu

Coder en VBA la bouton tracer une ligne ?


Messages recommandés

Posté(e)

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

 

 

Posté(e)

Bonjour,

modifie le code de la facon suivante,

 

Dim lineObj As AcadLine

[surligneur]

'déterminer la longueur avant de l'ajouter dans le dessin

lineObj.Length = ReturnString_Distance[/surligneur]

 

Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt, returnPnt)

 

Sacha

Posté(e)

merci de ton aide

 

 

Le problème est que le code que j'ai mis en exemple ne fonctionne pas.

 

Ma variable est un Variant

Dim 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]

Posté(e)

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

Posté(e)

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#.net

www.danialu.fr

Posté(e)

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

 

 

Posté(e)

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

Posté(e)

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

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é