VB.NET 在 AutoCAD 中读取文字内容和中心坐标并保存到文本文件
在 AutoCAD 中,可以使用 DBObject 类来获取文本的内容和中心坐标,并将它们保存到数组中,然后将数组的内容输出到文本文件中。以下是一个示例代码:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Public Class TextEntity
Public Property Text As String
Public Property Center As Point3d
End Class
Public Class Program
Public Sub ReadTextEntities()
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Using trans As Transaction = db.TransactionManager.StartTransaction()
Dim textEntities As New List(Of TextEntity)()
' 获取模型空间的块表记录
Dim bt As BlockTable = CType(trans.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
Dim btr As BlockTableRecord = CType(trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForRead), BlockTableRecord)
' 遍历模型空间中的所有实体
For Each objId As ObjectId In btr
Dim entity As Entity = CType(trans.GetObject(objId, OpenMode.ForRead), Entity)
' 判断实体是否是文字
If TypeOf entity Is DBText Then
Dim textEntity As DBText = CType(entity, DBText)
Dim text As String = textEntity.TextString
Dim center As Point3d = textEntity.Position
' 创建 TextEntity 对象并添加到集合中
Dim textObj As New TextEntity() With {
.Text = text,
.Center = center
}
textEntities.Add(textObj)
End If
Next
' 将数组内容输出到文本文件
Dim filePath As String = "C:\output.txt"
Using writer As New System.IO.StreamWriter(filePath)
For Each textObj As TextEntity In textEntities
writer.WriteLine('Text: ' & textObj.Text)
writer.WriteLine('Center: ' & textObj.Center.ToString())
writer.WriteLine()
Next
End Using
trans.Commit()
End Using
End Sub
End Class
在上面的示例代码中,我们首先获取当前文档和数据库的引用,然后开始一个事务。在事务中,我们打开模型空间的块表记录,并遍历其中的所有实体。对于每个实体,我们检查它是否为文字实体(DBText),如果是,我们获取文字内容和中心坐标,并创建一个 TextEntity 对象来保存它们,最后将 TextEntity 对象添加到一个集合中。
在事务完成后,我们将集合中的内容输出到指定的文本文件中。你可以根据实际需要修改输出文件的路径和名称。注意,在使用 StreamWriter 写入文本文件之后,要记得关闭文件流,以确保文件被正确保存和关闭。
希望以上代码可以帮助到你!
原文地址: https://www.cveoy.top/t/topic/nPAY 著作权归作者所有。请勿转载和采集!