Aller au contenu

Polyline en VBA


Messages recommandés

Posté(e)

Bonjours a tous,

Je suis dessinateur en construction et j'aimerai me faire une macro qui dessine des polyline.

Mais je dois définir son épaisseur, sa distance par rapport a un objet et lui faire un filet dont je défini le rayon.

Si quelqu'un peu m'aider, ce serai super.

Posté(e)

Tu souhaites faire un polyligne avec des demande à l'utilisateur? ex. "sélectionner le premier point : "?

 

Si c'est une polyligne créée par VBA sans demande à l'utilisateur :

 

Sub Example_LinetypeGeneration()
   ' This example creates a polyline in model space and
   ' queries and changes the linetype generation for
   ' the polyline.
   
   ' To see the effect of changing the linetype generation, set
   ' the linetype of the polyline to something other than continuous,
   ' ByBlock, or ByLayer.
   
   Dim plineObj As AcadPolyline
   Dim points(0 To 14) As Double
   
   ' Define the 2D polyline points
   points(0) = 1: points(1) = 1: points(2) = 0
   points(3) = 1: points(4) = 2: points(5) = 0
   points(6) = 2: points(7) = 2: points(8) = 0
   points(9) = 3: points(10) = 2: points(11) = 0
   points(12) = 4: points(13) = 4: points(14) = 0
       
   ' Create a lightweight Polyline object in model space
   Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)

End Sub

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

oui, c'est bien une polyline avec demande utilisateur.

En fait, je travail dans le dommaine des armatures.

et ça me fait ?????????? de devoir faire plusieur commandes pour dessiner une barre avec plusieur plis (en polyline)

Posté(e)

Je comprends bien ton désarroi... Si je fait du VBA, c'est pour gagner du temps (non en fait pour ne pas en perdre) et peu pour le plaisir de créer.

Je ne connais pas du tout ton domaine, je travaille dans un BE fluides, d'ailleurs, généralement on aime pas (par convention collective) les personnes qui font la structure car ils nous mettent des poutres et des poteaux partout, mais le pire dans tout ça c'est les dalles précontraintes dans lesquelles on doit donner toutes les réservations même pour les tout petits trous...

Afin d'enterrer la hache de guerre : je te donne ce que j'ai fait grâce à Winfield

 

 

Sub rec()
Dim PTA As Variant
Dim PTB As Variant
Dim pt1(1) As Double
Dim pt2(1) As Double
Dim pt3(1) As Double
Dim pt4(1) As Double
Dim Obj_Decal As AcadLWPolyline
Dim points(0 To 15) As Double
'Dim StrCalqueCourantH As String
Dim newlayer1 As AcadLayer
Dim newlayer2 As AcadLayer
INSAUTO.CalqueCourant
'MsgBox StrCalqueCourantH

Set newlayer1 = ThisDrawing.Layers.Add("16--")
ThisDrawing.ActiveLayer = ThisDrawing.Layers("16--")


PTA = ThisDrawing.Utility.GetPoint(, "Indiquez le premier coin.")
PTB = ThisDrawing.Utility.GetCorner(PTA, vbLf & "Indiquez le second coin.")

'PTA = ThisDrawing.Utility.TranslateCoordinates(PTA, acUCS, acWorld, False)
'PTB = ThisDrawing.Utility.TranslateCoordinates(PTB, acUCS, acWorld, False)

pt1(0) = PTA(0): pt1(1) = PTA(1)
pt2(0) = PTB(0): pt2(1) = PTB(1)
pt3(0) = pt2(0): pt3(1) = pt1(1)
pt4(0) = pt1(0): pt4(1) = pt2(1)

points(0) = pt1(0): points(1) = pt1(1)
points(2) = pt3(0): points(3) = pt3(1)
points(4) = pt2(0): points(5) = pt2(1)
points(6) = pt4(0): points(7) = pt4(1)
points(8) = pt1(0): points(9) = pt1(1)
points(10) = pt2(0): points(11) = pt2(1)
points(12) = pt3(0): points(13) = pt3(1)
points(14) = pt4(0): points(15) = pt4(1)

Set Obj_Decal = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
With Obj_Decal
.Closed = True
.Update
End With
'Set newlayer2 = ThisDrawing.Layers.Add("16--COT")
'ThisDrawing.ActiveLayer = ThisDrawing.Layers("16--COT")

'ThisDrawing.Application.Update
ThisDrawing.SendCommand "_qdim" & vbCr
'ThisDrawing.Application.Update
ThisDrawing.ActiveLayer = ThisDrawing.Layers(StrCalqueCourantH)

End Sub

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

J'ai tester ton code, mais ce n'est pas vraiment ce que je cherche.

En fait, je te donne d'autre indications:

J'ai une élévation de poutre par exemple et je dois dessiner des polyline en forme de U ou de L suivant les instructions de l'ingénieur (ATTENTION, la forme de barre ne se limite pas au U ni au L) et cette barre dois se trouver a une distance du bord de ma poutre que je défini, elle doit avoir une épaisseur suivant son diametre (par exemple je veu un diametre 20 alors la polyline dois avoir 2 d'épaisseur) et enfin elle dois avoir un fillet que l'on appelle un rayon de courbure déterminer en fonction du diametre.

En fait, je veu créer une feuille avec un menu déroulant qui me permetrai de selectioner le diametre (donc l'épaisseur de ma barre) et en fonction d'une certaine regle en armature pour le rayon de courbure (a savoir 5x le diametre) pouvoir faire la commande fillet.

Et ensuite sur cette feuille serai ajouter un bouton me permettant de dessiner cette polyline.

Et aussi un textebox qui me donnerai la distance pour décaler la barre du bord de ma poutre.

Posté(e)

Tu travailles avec quel logiciel? si autocad, quelle version?

 

car si tu as une version supérieure ou égale à 2006, je pense que le plus simple sera de faire des demandes dynamiques (à l'écran comme les commandes autocad).

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Ce pas un problème t'en fais pas.

C'est un peu moins pratique car une fois que ta userform est apparue, tu ne peux plus voir une partie de ton plan et tu ne peux pas te déplacer sur ton plan pour voir un truc que t'as pas vérifié avant de lancer la commande.

 

Alors commençons par le début, pour faire un menu déroulant sur une feuille c'est avec combobox.

 

combobox = Zone de liste modifiable

 

appelons la "combobox" combox2 sur la userform "Parametres"

 

dans ton module ou useform qui lance la combobox2

 

With Parametres.ComboBox2
    .Clear 'impératif sinon à chaque fois que tu lances ton application, ça te rajoutera des item en plus
    .AddItem "texte"
    .AddItem "débit"
    .AddItem "diamètre"
    .AddItem "espace"
    End With

 

bon je vais manger, et cette après midi, je ne suis pas là alors bon courage et à bientôt

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

tu as réussi à faire tes polylignes programmables ? J'arrive à rien pour les styles de textes pour l'instant...

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Tu as un début de code pour que je te donne un coup de main, où tu n'arrive pas à débuter?

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

redécrit-moi ton algorithme :

ce que tu veux faire avec l'ordre précis...

 

dit-moi si je me trompe:

-faire apparaitre une form avec une liste avec des plusieurs choix sélectionnables,

-récupérer le choix de l'utilisateur pour connaitre la taille de la polyligne à tracer et connaitre le décalage de la polyligne par rapport à un bord de poutre et faire une sortie pour informer l'utilisateur,

-lancer la commande pour tracer la polyligne avec les éléments précédents.

 

 

J'ai commencé un truc en suivant l'algorithme que j'ai décrit ci-dessus, s'il manque quelque chose prévient-moi car ça peut parfois changer pas mal de mécanismes.

 

J'ai faire une userform dont le nom est : "ParaPolyligne" ne pas mettre les guillemets.

je lui ai fait une combobox dont le nom est "combobox1"

dans le code d'un module j'ai mis :

 

Sub file()
'charge la userform dans la mémoire du PC
Load ParaPolyligne
'décrit la combobox1 en insérant la liste de choix
   With ParaPolyligne.ComboBox1
   .Clear 'impératif sinon à chaque fois que tu lances ton application, ça te rajoutera des item en plus
   .AddItem "10"
   .AddItem "20"
   .AddItem "30"
   .AddItem "40"
   End With
'provoque l'affichage de la userform
ParaPolyligne.Show
End Sub

 

 

et dans le code de la userform, j'ai mis :

Private Sub CommandButton1_Click()
Dim sngElement As Single
'initialise la variable pour qu'elle reçoive le choix que l'utilisateur fait
sngElement = ParaPolyligne.ComboBox1.List(ParaPolyligne.ComboBox1.ListIndex)
MsgBox sngElement
End Sub

 

dit-moi si je suis bon dans le départ... après le reste suivra avec un peu d'aide de ta part pour que tu améliores ton niveau.

 

[Edité le 9/7/2007 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

J'ai testé ton code, il bug à la partie surligner

 

Private Sub CommandButton1_Click()

Dim sngElement As Single

'initialise la variable pour qu'elle reçoive le choix que l'utilisateur fait

[surligneur] sngElement = ParaPolyligne.ComboBox1.List(ParaPolyligne.ComboBox1.ListIndex)[/surligneur]MsgBox sngElement

End Sub

Posté(e)

il faut que tu me donnes le type d'erreur car je ne l'ai pas chez moi...

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

tu as fait une form? Son caption c'est quoi? son (name) c'est quoi?

 

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Salut,

 

Le caption d'une userform ça ne sert qu'à mettre le titre (dans la barre bleue). Le (name) sert à nommé la userform pour qu'elle ne s'appelle plus "Userform". C'est important car si tu as dans ton projet plusieurs userform tu auras du mal à les distinguer puisqu'elles s'appelleront userform1, userform2, etc. Donc pour que le projet marche, il faut que tu mettes dans le (name) : ParaPolyligne. Pour ce qui est du caption met ce que tu veux...

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

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

Bon je vous envoie un bout du code directement sur le .dvb ici présent :

 

http://cjoint.com/?ixwL6xmEAN

 

ce n'est que le début mais il faut bien un début...

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

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é