Bonjour,
Je souhaiterais savoir s'il existe un technique pour "aligner" de façon rapide les lignes de repère dont le texte est sur la gauche. J'ai essayé avec l'outil "aligner" mais il aligne les zones de textes (trait rouge --> qui n'ont pas toujours le même format), l'alignement n'est possible que pour lignes dont le texte se situe sur la droite.
Je souhaiterais aligner au niveau du trait blanc pour avoir quelque chose de plus cohérent.
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Alignement des lignes de repère sur la gauche
Merci d'avance pour vos réponses.
Résolu ! Accéder à la solution.
Résolu par Y.AUBRY. Accéder à la solution.
C'est vrai que c'est un défaut remarquable de cette commande. Il te reste à utiliser les poignées bleues et aligner à l'aide d'une ligne qui à effacer cette dernière ultérieurement.
Bonjour @marion.lino94
Si une des réponses à votre question résout votre problème, vous a permis de le comprendre ou contribue significativement à sa résolution, voulez vous avoir l'amabilité de cliquer sur le bouton APPROUVER LA SOLUTION en bas de la réponse qui apporte une solution?
Cela aidera les futurs lecteurs qui pourront directement aller à la solution.
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.
Si nos équipes de support technique ont pu vous apporter une solution ou contribuer significativement à vous aider en dehors de ce forum, pouvez vous partager ici la solution trouvée et cliquer sur le bouton APPROUVER LA SOLUTION de façon qu'elle bénéficie à la communauté?
Merci.
Bonjour @marion.lino94,
Tu trouveras dans le fichier MLEADER_ALIGN.zip ci-joint une DLL contenant le code ci-dessous :
Imports AcadAp = Autodesk.AutoCAD.ApplicationServices.Application
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Public Class CmdMLEADER
<CommandMethod("MLEADER_LEFT_ALIGN", "MLLA", CommandFlags.Modal)>
Public Sub MLEADER_LEFT_ALIGN()
Dim doc As Document = AcadAp.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim scu As Matrix3d = ed.CurrentUserCoordinateSystem
'Demande de la position du point d'alignement
Dim ptStart As Point3d
Dim pPtRes As PromptPointResult
Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")
PosX:
pPtOpts.Message = vbLf & "Emplacement en X du point d'alignement : "
pPtRes = doc.Editor.GetPoint(pPtOpts)
If pPtRes.Status <> PromptStatus.OK Then GoTo PosX
ptStart = pPtRes.Value.TransformBy(scu)
Dim X As Double = ptStart.X
'Demande de sélection des lignes de repère multiple (MLeader en anglais)
Dim filter(0) As TypedValue
Try
filter.SetValue(New TypedValue(DxfCode.Start, "MULTILEADER"), 0)
Dim sf As SelectionFilter = New SelectionFilter(filter)
Dim psr As PromptSelectionResult = ed.GetSelection(sf)
Dim ss As SelectionSet = psr.Value
If ss.Count > 0 Then
Using tr As Transaction = doc.Database.TransactionManager.StartTransaction()
For Each id As ObjectId In ss.GetObjectIds()
Dim ent As Entity = TryCast(tr.GetObject(id, OpenMode.ForWrite), Entity)
If TypeOf ent Is MLeader Then
Dim acML As MLeader = CType(ent, MLeader)
If acML.TextAlignmentType = TextAlignmentType.RightAlignment Then 'Si la ligne de repère multiple a un texte avec un alignement à droite
'Alors on déplace la ligne de repère au niveau de la coordonnée en X préalablement définie
acML.TextLocation = New Point3d(X, acML.TextLocation.Y, acML.TextLocation.Z)
End If
End If
Next
tr.Commit()
End Using
End If
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
<CommandMethod("MLEADER_RIGHT_ALIGN", "MLRA", CommandFlags.Modal)>
Public Sub MLEADER_RIGHT_ALIGN()
Dim doc As Document = AcadAp.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim scu As Matrix3d = ed.CurrentUserCoordinateSystem
'Demande de la position du point d'alignement
Dim ptStart As Point3d
Dim pPtRes As PromptPointResult
Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")
PosX:
pPtOpts.Message = vbLf & "Emplacement en X du point d'alignement : "
pPtRes = doc.Editor.GetPoint(pPtOpts)
If pPtRes.Status <> PromptStatus.OK Then GoTo PosX
ptStart = pPtRes.Value.TransformBy(scu)
Dim X As Double = ptStart.X
'Demande de sélection des lignes de repère multiple (MLeader en anglais)
Dim filter(0) As TypedValue
Try
filter.SetValue(New TypedValue(DxfCode.Start, "MULTILEADER"), 0)
Dim sf As SelectionFilter = New SelectionFilter(filter)
Dim psr As PromptSelectionResult = ed.GetSelection(sf)
Dim ss As SelectionSet = psr.Value
If ss.Count > 0 Then
Using tr As Transaction = doc.Database.TransactionManager.StartTransaction()
For Each id As ObjectId In ss.GetObjectIds()
Dim ent As Entity = TryCast(tr.GetObject(id, OpenMode.ForWrite), Entity)
If TypeOf ent Is MLeader Then
Dim acML As MLeader = CType(ent, MLeader)
If acML.TextAlignmentType = TextAlignmentType.LeftAlignment Then 'Si la ligne de repère multiple a un texte avec un alignement à gauche
'Alors on déplace la ligne de repère au niveau de la coordonnée en X préalablement définie
acML.TextLocation = New Point3d(X, acML.TextLocation.Y, acML.TextLocation.Z)
End If
End If
Next
tr.Commit()
End Using
End If
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
<CommandMethod("MLEADER_TOP_ALIGN", "MLTA", CommandFlags.Modal)>
Public Sub MLEADER_TOP_ALIGN()
Dim doc As Document = AcadAp.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim scu As Matrix3d = ed.CurrentUserCoordinateSystem
'Demande de la position du point d'alignement
Dim ptStart As Point3d
Dim pPtRes As PromptPointResult
Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")
PosY:
pPtOpts.Message = vbLf & "Emplacement en Y du point d'alignement : "
pPtRes = doc.Editor.GetPoint(pPtOpts)
If pPtRes.Status <> PromptStatus.OK Then GoTo PosY
ptStart = pPtRes.Value.TransformBy(scu)
Dim Y As Double = ptStart.Y
Dim filter(0) As TypedValue
Try
filter.SetValue(New TypedValue(DxfCode.Start, "MULTILEADER"), 0)
Dim sf As SelectionFilter = New SelectionFilter(filter)
Dim psr As PromptSelectionResult = ed.GetSelection(sf)
Dim ss As SelectionSet = psr.Value
If ss.Count > 0 Then
Using tr As Transaction = doc.Database.TransactionManager.StartTransaction()
For Each id As ObjectId In ss.GetObjectIds()
Dim ent As Entity = TryCast(tr.GetObject(id, OpenMode.ForWrite), Entity)
If TypeOf ent Is MLeader Then
Dim acML As MLeader = CType(ent, MLeader)
'On déplace la ligne de repère au niveau de la coordonnée en Y préalablement définie
acML.TextLocation = New Point3d(acML.TextLocation.X, Y, acML.TextLocation.Z)
End If
Next
tr.Commit()
End Using
End If
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
Pour pouvoir utiliser cette DLL :
- Il faut parfois les débloquer lorsqu'elle sont passé par internet : pour cela, faire un clic-droit dessus puis "Propriétés" puis dans l'onglet général cocher la case "Débloquer"
(Si cette case n'est pas présente c'est que la DLL est déjà débloquée)
Une fois débloquée, taper la commande "NETLOAD" dans AutoCAD et pointer sur le fichier "MLEADER_ALIGN.dll"
Nota : Il est conseillé de mettre cette DLL dans un dossier faisant parti des chemins de recherche de fichiers de support : voir Menu Outils\Options\ onglet fichier
Une fois la DLL chargée, les commandes sont :
Cette DLL est prévue pour un fonctionnement sur les versions de 2021 à 2024 (.NET Framework 4.8) d'AutoCAD, si nécessaire revenir vers moi pour les versions précédentes.
A+ Yoan
Yoan AUBRY
Heueeuuuuu, le sujet concerne une version LT ! 🤔
Christian
Christian REB
Oups... Pas fait attention a cela... Mais ca pourra servir peut-être à d'autres personnes...
A+ Yoan
Yoan AUBRY
Mouais et dans un lointain, pays c'était le Goudron et les Plumes...
Mais effectivement, ça peut servir, mais ce serait tout de même une fonction qui devrait être native toutes versions.
Christian
Christian REB
Bonjour @marion.lino94
On peut aussi réaliser des lignes de repères sans textes et réaliser du texte avec la commande Texte à la suite. Mais pas franchement rapide et cela perd de l'intérêt de la commande...
Bonjour @marion.lino94
La communauté a essayé de répondre à votre question. Si vous pensez qu'une ou plusieurs de ces réponses vous aident, voulez vous avoir l'amabilité de cliquer sur le bouton APPROUVER LA SOLUTION en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.
Si nos équipes de support technique ont pu vous apporter une solution ou contribuer significativement à vous aider en dehors de ce forum, pouvez vous partager ici la solution trouvée et cliquer sur le bouton APPROUVER LA SOLUTION de façon qu'elle bénéficie à la communauté?
Merci.
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.