stephenlecomptejr
asked on
How to grab insertion point of mtext?
I'm trying to take the following URL https://www.experts-exchange.com/questions/21389353/Insert-Mtext-Using-VBA-with-user-defined-location.html?query=need+insertion+point+for+mtext&clearTAFilter=true and decipher it to allow me to take the following code (listed below) and find the insertion point of mtext so that I can print out the values to a text file alonside of the mtext's values. Could you please guide me in the correct direction to change the following code to also print out the insertion point of the mtext found? Thank you for all the help in the past.
Public Sub ExtractText()
Dim acadapp As AutoCAD.AcadApplication
Dim acadDoc As AutoCAD.AcadDocument
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Dim objBlkCol As AcadBlocks
Dim objBlk As AcadBlock
Dim intType(0) As Integer
Dim varData(0) As Variant
Dim objBlkRef As AutoCAD.AcadBlockReference
Dim objAttRef As AutoCAD.AcadAttributeRefer ence
Dim vAtts As Variant
Dim aCode(1) As Integer
Dim aValue(1) As Variant
Dim vCode As Variant
Dim vValue As Variant
Dim iLoop As Integer
Dim iLoop2 As Integer
Dim I As Long
Dim J As Long
Dim intI As Integer
Dim sSelect As String
Dim rstDataDwg As DAO.Recordset
Dim rstData As DAO.Recordset
Dim lDwgID As Long
Dim strPath As String
Dim lBlock As Long
Dim lAtt As Long
Dim bAttChk As Boolean
Dim obj As AcadObject
Dim objEntity As AcadEntity
Dim strKeyWords As String
Dim varAttributeRef As Variant
Dim objBlockDef As AcadBlock
Dim strFileName As String
Dim intFileID As Integer
' Initialize the keywords string.
strKeyWords = ""
txtStatus = "opening dwg..."
DoEvents
Set acadDoc = GetObject(txtPath)
Set acadapp = acadDoc.Application
Set objSelCol = acadDoc.SelectionSets
Set objBlkCol = acadDoc.Blocks
' Get all of the text entities and block attributes in model space.
For Each objEntity In acadDoc.ModelSpace
I = I + 1
txtStatus = "Found: " & objEntity.ObjectName & " at: " & I & " out of ?"
DoEvents
If TypeOf objEntity Is AcadMText Then
txtStatus = "Found: " & objEntity.ObjectName & " at: " & I & " out of ?" & " --- found text: " & objEntity.TextString
strKeyWords = strKeyWords & objEntity.TextString & vbCrLf
'strKeyWords = strKeyWords & objEntity.Start & vbTab & objEntity.End <--- doesn't work
'need additional start and end point of object...
End If
Next objEntity
Set objBlkCol = Nothing
Set objSelCol = Nothing
Set acadapp = Nothing
' Write the keywords out to a file.
strFileName = Left(acadDoc.FullName, Len(acadDoc.FullName) - 4)
strFileName = strFileName & "_keywords.txt"
Set acadDoc = Nothing
intFileID = FreeFile
Open strFileName For Output As intFileID
Print #intFileID, strKeyWords
Close #intFileID
End Sub
Public Sub ExtractText()
Dim acadapp As AutoCAD.AcadApplication
Dim acadDoc As AutoCAD.AcadDocument
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Dim objBlkCol As AcadBlocks
Dim objBlk As AcadBlock
Dim intType(0) As Integer
Dim varData(0) As Variant
Dim objBlkRef As AutoCAD.AcadBlockReference
Dim objAttRef As AutoCAD.AcadAttributeRefer
Dim vAtts As Variant
Dim aCode(1) As Integer
Dim aValue(1) As Variant
Dim vCode As Variant
Dim vValue As Variant
Dim iLoop As Integer
Dim iLoop2 As Integer
Dim I As Long
Dim J As Long
Dim intI As Integer
Dim sSelect As String
Dim rstDataDwg As DAO.Recordset
Dim rstData As DAO.Recordset
Dim lDwgID As Long
Dim strPath As String
Dim lBlock As Long
Dim lAtt As Long
Dim bAttChk As Boolean
Dim obj As AcadObject
Dim objEntity As AcadEntity
Dim strKeyWords As String
Dim varAttributeRef As Variant
Dim objBlockDef As AcadBlock
Dim strFileName As String
Dim intFileID As Integer
' Initialize the keywords string.
strKeyWords = ""
txtStatus = "opening dwg..."
DoEvents
Set acadDoc = GetObject(txtPath)
Set acadapp = acadDoc.Application
Set objSelCol = acadDoc.SelectionSets
Set objBlkCol = acadDoc.Blocks
' Get all of the text entities and block attributes in model space.
For Each objEntity In acadDoc.ModelSpace
I = I + 1
txtStatus = "Found: " & objEntity.ObjectName & " at: " & I & " out of ?"
DoEvents
If TypeOf objEntity Is AcadMText Then
txtStatus = "Found: " & objEntity.ObjectName & " at: " & I & " out of ?" & " --- found text: " & objEntity.TextString
strKeyWords = strKeyWords & objEntity.TextString & vbCrLf
'strKeyWords = strKeyWords & objEntity.Start & vbTab & objEntity.End <--- doesn't work
'need additional start and end point of object...
End If
Next objEntity
Set objBlkCol = Nothing
Set objSelCol = Nothing
Set acadapp = Nothing
' Write the keywords out to a file.
strFileName = Left(acadDoc.FullName, Len(acadDoc.FullName) - 4)
strFileName = strFileName & "_keywords.txt"
Set acadDoc = Nothing
intFileID = FreeFile
Open strFileName For Output As intFileID
Print #intFileID, strKeyWords
Close #intFileID
End Sub
ASKER
I tried that and I get a Run-time error '451'
Property let procedure not defined and property get procedure did not return an object
with the highlight on that exact line statement.
Property let procedure not defined and property get procedure did not return an object
with the highlight on that exact line statement.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
yea - norrin radd again to the rescue.
I'm sure glad you have not "retired" fulltime.
I just need some more instruction on how the insertion points work.
When I print out the insertion point of a specific mtext that contains the text: #52.1 for instance and I do a mltext.insertionpoint(0) and it gives me 1316624.97411137 - what exactly does that value mean?
All I know is that where the text was originally inserted into the drawing.
Is this number 1316624.97411137 the number for the X coordinate only since I requested mltext.insertionpoint(0)?
Is the y coordinate available as mltext.insertionpoint(1)?
or the full insertion point is just that 1316624.97411137 only with the 1316624 as the X and the 97411137 as the Y?
I'm sure glad you have not "retired" fulltime.
I just need some more instruction on how the insertion points work.
When I print out the insertion point of a specific mtext that contains the text: #52.1 for instance and I do a mltext.insertionpoint(0) and it gives me 1316624.97411137 - what exactly does that value mean?
All I know is that where the text was originally inserted into the drawing.
Is this number 1316624.97411137 the number for the X coordinate only since I requested mltext.insertionpoint(0)?
Is the y coordinate available as mltext.insertionpoint(1)?
or the full insertion point is just that 1316624.97411137 only with the 1316624 as the X and the 97411137 as the Y?
"Is this number 1316624.97411137 the number for the X coordinate only since I requested mltext.insertionpoint(0)?
Is the y coordinate available as mltext.insertionpoint(1)?"
yup you got it, y is mltext.insertionpoint(1), z is mltext.insertionpoint(2)
when ever you are after points of any kind 99.999% of the time you are going to have to get it in an array of x,y,z,
"I'm sure glad you have not "retired" fulltime."
nah, slowed down a little but not retired, funny, I almost made a career change recently though, thats kinda scary.
Is the y coordinate available as mltext.insertionpoint(1)?"
yup you got it, y is mltext.insertionpoint(1), z is mltext.insertionpoint(2)
when ever you are after points of any kind 99.999% of the time you are going to have to get it in an array of x,y,z,
"I'm sure glad you have not "retired" fulltime."
nah, slowed down a little but not retired, funny, I almost made a career change recently though, thats kinda scary.
Ps omc was close, but I had to do that acadentity to acadmtext (Set mltext = objEntity) switch-a-roo to get to the insertionpoints, i was going to mention that earlier.....
strKeyWords = strKeyWords & objEntity.Insertionpoint(0
instead of
strKeyWords = strKeyWords & objEntity.Start & vbTab & objEntity.End <--- doesn't work
?