cadpolo Posté(e) le 11 mai 2005 Posté(e) le 11 mai 2005 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 .....
Serge Posté(e) le 11 mai 2005 Posté(e) le 11 mai 2005 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
cadpolo Posté(e) le 12 mai 2005 Auteur Posté(e) le 12 mai 2005 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'avancemais c'est déja très sympa de m'avoir ecrit ce code ...... Salut .........
Serge Posté(e) le 12 mai 2005 Posté(e) le 12 mai 2005 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
cadpolo Posté(e) le 1 juin 2005 Auteur Posté(e) le 1 juin 2005 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:
cadpolo Posté(e) le 15 juin 2005 Auteur Posté(e) le 15 juin 2005 Salut ...SERGE.. Désolé ton code marche sans probleme "" erreur de saisie """"""". Tchao
JFTxJ Posté(e) le 19 août 2005 Posté(e) le 19 août 2005 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."
DenisHen Posté(e) le 17 décembre 2005 Posté(e) le 17 décembre 2005 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)
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