Tekst is alomtegenwoordig in AutoCAD-tekeningen: maatteksten, notities, titelbordinformatie, stuklijsten. Via de .NET API werk je met twee klassen: DBText (enkelvoudige tekstregel, vroeger TEXT) en MText (meervoudige opmaaktekst, vroeger MTEXT). Dit artikel toont je hoe je beide aanmaakt, leest, zoekt en aanpast.
DBText vs MText — wanneer gebruik je wat?
DBText is snel en lichtgewicht: één regel, geen opmaak. Gebruik het voor eenvoudige labels, tagnummers of titels. MText ondersteunt meerdere regels, inline-opmaak (vet, cursief, kleur) en word-wrap op een vaste breedte. Gebruik het voor notities, instructies of lange beschrijvingen.
DBText aanmaken
[CommandMethod("MAKETTEKST")]
public void MaakTekst()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
using (var tr = db.TransactionManager.StartTransaction())
{
var ms = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
var tekst = new DBText
{
Position = new Point3d(50, 100, 0),
TextString = "Revisie A — datum: 2025-01-15",
Height = 5.0,
Rotation = 0.0, // radialen
HorizontalMode = TextHorizontalMode.TextLeft,
VerticalMode = TextVerticalMode.TextBase,
// Tekststijl: "" = huidige stijl, of geef stijlnaam op
TextStyleId = db.Textstyle
};
ms.AppendEntity(tekst);
tr.AddNewlyCreatedDBObject(tekst, true);
tr.Commit();
}
}
MText aanmaken met inline opmaak
MText gebruikt een eigen opmaaknotatie: \P voor nieuwe alinea, {\C1;tekst} voor kleur, {\H2x;tekst} voor dubbele hoogte, {\L tekst} voor onderstrepen.
[CommandMethod("MAKEMTEKST")]
public void MaakMTekst()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
using (var tr = db.TransactionManager.StartTransaction())
{
var ms = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
var mtekst = new MText
{
Location = new Point3d(50, 80, 0),
Width = 120.0, // tekstvakbreedte; 0 = geen wrap
TextHeight = 4.5,
Attachment = AttachmentPoint.TopLeft,
// Opmaak: vet + normaal + nieuwe alinea
Contents = "{\fArial|b1;OPGELET}\PLET OP: deze aansluiting staat onder spanning.\PSpanning: {\C1;230 V AC}"
};
ms.AppendEntity(mtekst);
tr.AddNewlyCreatedDBObject(mtekst, true);
tr.Commit();
}
}
Bestaande tekst lezen
Je kunt alle tekst in modelspace overlopen en de inhoud ophalen. Dit is handig voor rapportage of export naar Excel.
public List LeesTeksten(Database db, Transaction tr)
{
var resultaten = new List();
var ms = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
foreach (ObjectId id in ms)
{
var obj = tr.GetObject(id, OpenMode.ForRead);
if (obj is DBText dt)
resultaten.Add($"TEXT | pos({dt.Position.X:F1},{dt.Position.Y:F1}) | {dt.TextString}");
else if (obj is MText mt)
resultaten.Add($"MTEXT | pos({mt.Location.X:F1},{mt.Location.Y:F1}) | {mt.Text}");
// mt.Text geeft platte tekst, mt.Contents geeft ruwe opmaakstring
}
return resultaten;
}
Zoeken en vervangen in alle tekst
Een klassieker: alle tekstvermeldingen van een projectnummer bijwerken na een hernummering.
public int ZoekEnVervang(Database db, Transaction tr, string zoek, string vervang)
{
int count = 0;
var ms = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
foreach (ObjectId id in ms)
{
var obj = tr.GetObject(id, OpenMode.ForRead);
if (obj is DBText dt && dt.TextString.Contains(zoek))
{
dt.UpgradeOpen();
dt.TextString = dt.TextString.Replace(zoek, vervang);
count++;
}
else if (obj is MText mt && mt.Contents.Contains(zoek))
{
mt.UpgradeOpen();
mt.Contents = mt.Contents.Replace(zoek, vervang);
count++;
}
}
return count;
}
Tekststijl aanmaken en toepassen
Tekststijlen bepalen het lettertype en de standaardhoogte. Maak een eigen stijl aan om consistentie af te dwingen over alle tekeningen.
public ObjectId MaakTekststijl(Database db, Transaction tr, string naam, string lettertype)
{
var tst = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForRead);
if (tst.Has(naam))
return tst[naam];
var stijl = new TextStyleTableRecord
{
Name = naam,
FileName = lettertype, // bv. "Arial.ttf" of "romans.shx"
TextSize = 0 // 0 = hoogte vrij per entiteit
};
tst.UpgradeOpen();
var stijlId = tst.Add(stijl);
tr.AddNewlyCreatedDBObject(stijl, true);
return stijlId;
}
Tekst uitlijnen op een punt
DBText heeft zowel HorizontalMode als VerticalMode. Let op: als je een uitlijning anders dan links/basis instelt, moet je ook AlignmentPoint (niet Position) vullen.
var tekst = new DBText
{
HorizontalMode = TextHorizontalMode.TextCenter,
VerticalMode = TextVerticalMode.TextVerticalMid,
TextString = "GECENTREERD",
Height = 5.0
};
// Bij centrering: AlignmentPoint gebruiken, Position = Origin laten
tekst.AlignmentPoint = new Point3d(100, 50, 0);
tekst.AdjustAlignment(db); // verplicht na wijziging uitlijning
MText leesbreedte en bijsluiting
Stel Width = 0 in als je geen automatische regelafbreking wilt. Attachment bepaalt het anker van de rechthoek (TopLeft, MiddleCenter, enz.). Gebruik dit samen met Location voor precies positioneren in titelbordcellen.
Veelgemaakte fouten
TextString vs Contents — DBText.TextString is de platte tekst. MText.Contents bevat opmaakcodes; MText.Text geeft de platte versie. Gebruik Contents als je opmaak wil bewaren.
Hoogte 0 bij stijl — als de tekststijl een vaste hoogte heeft (TextSize != 0), overschrijft die de height die je op de entiteit zet. Controleer de stijl als tekst niet de verwachte grootte heeft.
AdjustAlignment vergeten — na het wijzigen van HorizontalMode of VerticalMode moet je AdjustAlignment(db) aanroepen, anders berekent AutoCAD de positie niet opnieuw.
Samenvatting
DBText is je keuze voor eenvoudige, snelle labels. MText is krachtiger voor notities met opmaak en meerdere regels. Met zoek-en-vervang in C# kun je tekeningen in bulk bijwerken — een taak die handmatig uren kost maar geautomatiseerd in seconden verloopt.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.