Aller au contenu

Champs pilotables en VBA ?


Messages recommandés

Posté(e)

Bonjour tous,

 

Je repose une question que j'ai posé en forum AutoCAD 2006 et j'ai même eu une super réponse de Gile avec routine clef en main (Encore merci à lui) dans le domaine du Lisp.

 

Je sais maintenant que les champs dynamiques sont pilotables en Lisp et j'aimerai savoir si on peut les piloter en VBA. En gros : cliquer sur une polyligne et cela insèrerai un texte contenant un champs renseigné par l'aire de la polyligne.

 

Je connais un peu mieux le VBA que le Lisp (Non c'est pas vrai, le Lisp je connait rien du tout...) , je me sens plus à l'aise en VBA pour pondre de routines. J'aimerai donc en faire rapidement en VBA avant de plonger dans le lisp car on a des dossiers urgents au bureau. Donc vos réponses sont les bienvenues. Merci d'avance.

 

PS: Message à Gile, promis je me met au lisp bientôt... :P :D

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

Re,

 

Un champ c'est un TEXTE ou un MTEXE dont la syntaxe est un code.

 

Pour récupérer ce code, tu peux le trouver dans la fenêtre de la commande "champ" en bas sous "Expression de champ:" ou en utilisant FieldCode Method sur un champ (ou un texte en contenant un). :

 

"%%" pour la date, ou

 

"%%).Area \f "%lu6%qf1">%" pour l'aire d'un objet.

 

Dans le dernier cas "2128135232" est l'ID de l'objet (ObjectID Property).

Il faut donc concatener (il doit bien y avoir une fonction VBA pour ce faire) "%%).Area \f "%lu6%qf1">%" pour constituer la chaine de caractère à passer comme argument à addText ou addMtext Method.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

En gros, ce que fait le LISP et comment on devrait pouvoir le traduire en VBA :

 

Sélection de la polyligne (getEntiy Method)

S'assurer que c'est une lwpolyline (Objectname Property)

Et qu'elle est fermée (Closed Property)

Récupérer l'ID (ObjectID Property)

Constituer la chaine en concatenant "%%).Area \\f \"%lu6%qf1\">%" plus les préfixe et suffixe que l'on veut (?)

Créer une région à partir de la polyligne (addRegion Method)

Récupérer le centre de gravité de la région (Centroid Property)

Créer un Mtext (addMtext Method)

Justifier le texte (AttachmentPoint Property -> acAttachmentPointMiddleCenter et InsertionPoint Property)

Supprimer la région (Delete Method)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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

Je pense qu'il est possible de réaliser qqch comme cela.

 

Ca reste simple mais efficace. A améliorer et completer en fonction de tes besoins perso(arrondi des surface...).

 

Ce bout de prog n'est pas vérifié ds tous les sens donc peut produire des bugs de tps en tps.

 

c'est juste une ligne de conduite

 

 

Sub aire_polyligne()

Dim acadutil As Object
Dim points(0 To 5) As Double
Dim acadDoc As Object
Dim aire As Double
Dim moSpace As Object
Dim acadObj As Object
Dim pnt As Variant
Dim startpoint(0 To 2) As Double
Dim annotobj As Object
Dim returnObj As AcadObject
Dim basePnt As Variant

Set acadObj = GetObject(, "AutoCAD.Application")
Set acadDoc = acadObj.ActiveDocument
Set moSpace = acadDoc.ModelSpace
   
   On Error Resume Next
   
   ThisDrawing.Utility.GetEntity returnObj, basePnt, "Sélectionner un objet"
   
   returnObj.Update
   aire = returnObj.Area
   returnObj.Update

'saisie de l'emplacement du texte

pnt = ThisDrawing.Utility.GetPoint(, "Position de l'étiquette ? ")
startpoint(0) = pnt(0)
startpoint(1) = pnt(1)
startpoint(2) = pnt(2)
Set annotobj = moSpace.AddText(aire, startpoint, 1#)

End Sub

 

 

PS : il est aussi possible d'utiliser la fonction "insertion" -> "champ"... d'autocad 2006 (voir les versions antérieures) qui ajoutes le champs aire en fonction de l'objet choisi et le met à jour à l'enregistrement du fichier. Donc action dynamique sympa.

 

 

Je viens de m'appercevoir que ce sujet etait traiter ds l'annonce "routines VBA" le prog est déja réaliser et les champs dynamiques ont déjà été abordés. Donc j'ai réinventé la roue. Désolé.

 

A voir suivant le besoin réel.[Edité le 11/9/2006 par g_barthe]

 

[Edité le 11/9/2006 par g_barthe]

Vous voulez parler de génie climatique et poser vos questions alors venez par ici : http://le-genie-climatique.positifforum.com

Les loisirs créatifs vous tentent : http://pausebroderie.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é