Aller au contenu

comment tracer une Mline en vba ?????


Messages recommandés

Posté(e)

bonjour a tous....

Voila je continue toujours ma petite formation sur le vba pour autocad et surtout sur le vb car très important pour la suite dans autocad ...pas evident.....

Bon j'ai un probleme. .......

je veux utiliser mline pour dessiner des murs ou poutres etc.....

mais cette commoande addmline n'accepte que des points pas comme line qui accepte deux points '"" Getpoint pour le point dep et getpoint point final ""...

mais addmline n'accepte que des points, alors si j'ai bien compris il faudrait que j'utilise la commande dim pour demarer et ensuite redim pour creer un nombre de points à ajouter à points pour creer cette fameuse mline ....

Aussi avec VBA peux t'on lire le fichier le fichier mln pour lire le type de mline que l'on veut inserer .....

Posté(e)

cadpolo,

 

Si j'avais su que j'allais frapper un mur à ma 300-ième intervention ...

Néanmoins, voici une porte de sortie :

 

(remplacer les .... par des espaces)

 

Sub Example_AddMLine()

....' This example adds an Mline in model space

....

....Dim mLineObj As AcadMLine

....Dim returnPnt As Variant

....Dim i As Integer

....Dim vertices As Integer

....

....returnPnt = ThisDrawing.Utility.GetPoint(, "Entrez le point de départ: ")

....Dim vertexList() As Double

....ReDim Preserve vertexList(2)

....For i = 0 To 2: vertexList(i) = returnPnt(i): Next i

....vertices = 1

....

....On Error Resume Next

....Do

........returnPnt = ThisDrawing.Utility.GetPoint(returnPnt, "Entrez le point suivant: ")

........If Err.Number = 0 Then

............ReDim Preserve vertexList(UBound(vertexList) + 3)

............For i = 0 To 2: vertexList(UBound(vertexList) - 2 + i) = returnPnt(i): Next i

............vertices = vertices + 1

........Else

............Err.Clear

............Exit Do

........End If

....Loop

 

....' Create the line in model space

....Set mLineObj = ThisDrawing.ModelSpace.AddMLine(vertexList)

End Sub

 

 

Serge

 

Posté(e)

salut serge .....

 

je te remercie pour ce code .... :)

 

si j'ai bien compris

 

ReDim Preserve vertexList(2) ' on garde en memoire le 1 et 2° point ou sommet

 

For i = 0 To 2: [surligneur] ( on renvois ces points a la commande addmline )[/surligneur] ..vertexList(i) = returnPnt(i)

 

vertices = 1 ' à quoi il sert ?????

ensuite---- [surligneur] on traite les messages d'erreur[/surligneur]

[surligneur] puis on passe à la boucle si l'on veur en rajouter d'autres points [/surligneur]....

 

Mais la aussi :casstet: ................ReDim Preserve vertexList(UBound(vertexList) + 3)

............For i = 0 To 2: vertexList(UBound(vertexList) - 2 + i) = returnPnt(i): Next i

............vertices = vertices + 1

 

Si t'as le temps de répondre merci d'avance

mais c'est déja très sympa de m'avoir ecrit ce code ......

 

Salut .........

Posté(e)

cadpolo,

 

On conserve 3 données: x,y et z. Le tableau commence às l'indice 0. C'est le pourquoi de la boucle de 0 à 2.

 

Vertices signifi sommets en anglais. Puisqu'on a le point de départ, on place sommets=1

 

Le message d'erreur est pour getpoint. Si tu veux arrêter de saisir des points, tu tapes Enter, ce qui cause l'erreur. C'est bête du VBA.

 

Preserve vertexList(UBound(vertexList) + 3) signifie que j'augmente la taille du tableau pour acceuillir le nouveau triplet x,y et z tout en conservant les valeurs initiales.

 

For i = 0 To 2: vertexList(UBound(vertexList) - 2 + i) = returnPnt(i): Next i signifie de placer le x dans l'avant-avant-dernière position du tableau, le y dans l'avant-dernière position puis le z à la dernière.

 

vertices = vertices + 1 signifie qu'il y a un sommet de plus.

 

Et pour finir, mais je n'ai pas vérifié dernièrement, si tu veux utiliser un style de mline en particulier, tu peux faire une recherche dans les dictionnaires du dessin puis l'activer s'il s'y trouve. Le problème est lorsque le style n'y est pas. À l'époque de la R13, j'avais contourné le problème en insérant un dessin vide qui ne contenaiit que mes styles. Aujourd'hui, il y a peut-être mieux, mais j'en doute. J'ai l'impression qu'Autodesk ne veux pas investir dans le concept du mline (ils ont voulu imiter Micro-Station sans plus).

 

Serge

 

  • 3 semaines après...
Posté(e)

sakut....

 

j'ai enfin trouvez le temps pour regarder tes quelques lignes, cela marche pas, correctement car quand je clique sur mon premier point ok et le deuxieme point ok il me trace la mline du permier point vers le point 0,0,0,.....

alors je cherche à comprendre, mais impossible de trouver pourquoi ......

Donc si tu peux m'eclairer la lanterene .... merci ...... :casstet:

  • 2 semaines après...
  • 2 mois après...
Posté(e)

Désolé de me permettre, mais.....

 

J'ai eu à faire beaucoup de tests avec VBA+MLines. Voici mes conclusions et remarques:

(AutoCAD 2005)

 

- Peu importe le MLineType actif, la méthode de VBA ne la prend pas en considération, incluant la largeur (espacement des deux lignes). Nous avons réussit avec la méthode SendCommand, mais, toujours utilisant des données extraient d'une MLine existante, nous avons remarqué une instabilité dans les coordonnées. AutoCAD est à blamer, car la "Command line" ne supporte pas une aussi grande précision décimale que AutoCAD lui-même. Un arrondissement est fait, créant un décallage de la ligne exponentiel.

 

En regardant la différence entre le modèle d'objet de AutoCAD 2005 et 2006, ceci semble résolu en 2006.

 

Je recommendrai à toute personne d'éviter les MLines avec VBA et d'exécuter un "Explode" sur chaque MLine pour éliminer toutes ces erreures.....

 

J'espère que ca te sauvera un peu de temps..... ;-)

Apprentis-expert....

"The human mind, once stretched by a new idea, never regains its original shape."

  • 3 mois après...
Posté(e)

Bonjour, ou bonsoir....

Pour ma par, je cherche à dessiner une Multiligne par-dessus une polyligne (ouverte ou fermée). Le tout en VBA et avec un petit handicap... Il faudrait décider le coté de la polyligne ou la multiligne sera dessinée....

J'espère que tout le monde a compris...

 

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é