Тема: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст
TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст
ниправильна!
AcDbBlockReference - это тип объекта
Описания блоков объединены в коллекцию:
Thisdrawing.Blocks
надо выцепить нужное описание блока из этой коллекции и с ним работать
вот кусок рабочего кода:
Sub MirrorAnotationBlock(AnotBlkRef As AcadBlockReference) Dim AnotBlk As AcadBlock Dim BPnt As Variant Dim str1 As String Dim AnotText As AcadMText Dim eObj As AcadEntity Dim minP As Variant Dim maxP As Variant Dim MirPnt1(0 To 2) As Double Dim MirPnt2(0 To 2) As Double Dim ALine As AcadLine Dim sg As Integer Dim Width As Double Set AnotBlk = ThisDrawing.Blocks.Item(AnotBlkRef.Name) For Each eObj In AnotBlk Select Case TypeName(eObj) Case "IAcadMText2" Set AnotText = eObj Select Case AnotText.AttachmentPoint Case acAttachmentPointTopLeft sg = 1 AnotText.AttachmentPoint = acAttachmentPointTopRight Exit For Case acAttachmentPointTopRight sg = -1 AnotText.AttachmentPoint = acAttachmentPointTopLeft Exit For End Select End Select Next end sub
В процедуру передается вхождение блока, которое я выбираю прямо на чертеже. по этому вхождению ищем описание
и далее работаем с ним
а как найти все блоки на чертеже и войти в них для редактирования
см. SelectionSet
Вот кусок кода. Работает. Однако в блоке текст не заменяется. В отладчике все путем.
Dim tmp As String
Dim AnotBlk As AcadBlock
Dim textObjMtext As AcadMText
Dim textObjText As AcadText
Dim count_block As Long
Dim count_block_in_block As Long
Dim i, j As Long
count_block = ThisDrawing.Blocks.Count
For i = 0 To count_block - 1
Set AnotBlk = ThisDrawing.Blocks.Item(i)
count_block_in_block = AnotBlk.Count
For j = 0 To count_block_in_block - 1
type_objects = AnotBlk.Item(j).ObjectName
'-----------------------
'------------------Mtext
'-----------------------
If type_objects = "AcDbMText" Then
Set textObjMtext = AnotBlk.Item(j)
tmp = textObjMtext.TextString
tmp = ChangeChar(tmp)
textObjMtext.TextString = tmp
End If
'-----------------------
'-------------------Text
'-----------------------
If type_objects = "AcDbText" Then
Set textObjText = AnotBlk.Item(j)
tmp = textObjText.TextString
tmp = ChangeChar(tmp)
textObjText.TextString = tmp
End If
Next j
Next i
Вопрос
Почему не сохраняется изменненый текст в блоках
_regen из коммандной строки надо дать
а программно каждому объекту (которые есть BlockReference) .Update
или если меняется действительно много Thisdrawing.Application.Update
_regen
СПАСИБО
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст
Форум работает на PunBB, при поддержке Informer Technologies, Inc