dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Вычислить наличие полей в Текстах, МТекстах, Атрибутах

VBA. Вычислить наличие полей в Текстах, МТекстах, Атрибутах

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 14.01.2015, 11:22 #1
VBA. Вычислить наличие полей в Текстах, МТекстах, Атрибутах
art_rrc
 
Минск
Регистрация: 28.01.2013
Сообщений: 356

art_rrc вне форума Вставить имя

Доброго времени суток. Подскажите пожалуйста, если ли в VBA (AutoCAD 2015) методы, позволяющие "вытянуть" содержимое текста вместе с формулами? Т.к. простой .TextString возвращает уже преобразованный результат..
Пример:
На экране текст выглядит как "1-1" или "#-#", Но на самом деле, там забито такое выражение:
"%<\AcObjProp Object(%<\_ObjId 8796076505568>%).TextString>%-%<\AcObjProp Object(%<\_ObjId 8796076505568>%).TextString>%"
Так вот, можно как-нибудь его заполучить?
Спасибо.
Просмотров: 2445
 
Непрочитано 14.01.2015, 11:38
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,735


FieldCode ?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 14.01.2015, 12:57
#3
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 356


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
FieldCode ?
Attr = DynBlockObj.GetAttributes
"AttrTextStr = Attr(i).FieldCode"
Выдает ошибку.
Не знает такого метода по всей видимости..(

Код:
[Выделить все]
Sub art_FieldBase()
Dim dynBlObj As AcadBlockReference
'On Error Resume Next
'Call ClearSelectionSets
Set SelSet1 = ThisDrawing.SelectionSets.Add("Set1_FieldBase")
SelSet1.SelectOnScreen
If SelSet1.Count = 0 Then GoTo DavayDoSvidaniya
'Обновление пространства модели
ThisDrawing.Regen acActiveViewport
For Each Item In SelSet1
    If Item.ObjectName = "AcDbBlockReference" Then
        Set dynBlObj = Item
        Call GetAttr(dynBlObj, "_1ПОЗИЦИЯ", strText)
        'Call SetLineUp(dynBlObj)
        MsgBox (strText)
        
    End If
    Next
DavayDoSvidaniya:
SelSet1.Delete
End Sub

Public Sub GetAttr(DynBlockObj As AcadBlockReference, AttrName As String, AttrTextStr)
Attr = DynBlockObj.GetAttributes
For i = 0 To UBound(Attr)
    If Attr(i).TagString = AttrName Then
    'AttrTextStr = Attr(i).TextString
    AttrTextStr = Attr(i).FieldCode
    End If
Next
End Sub
Миниатюры
Нажмите на изображение для увеличения
Название: FieldCode.png
Просмотров: 56
Размер:	20.3 Кб
ID:	141911  
art_rrc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.01.2015, 13:18
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,641
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от art_rrc Посмотреть сообщение
GoTo DavayDoSvidaniya
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.01.2015, 13:24
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 2,909


хм
trir вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.01.2015, 15:35
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,735


Н-да, с атрибутами не все так просто FieldCode в VBA существует только для текстов
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 01:55
#7
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 159


Коллеги, а определить наличие кода/поля именно в атрибутах - нашлось все таки какое-нибудь VBA решение?
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 07:09
#8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,774


Theodor, я извиняюсь, а в чем сложность то? Ну да, надо написать не одну строчку, а пяток - десять, но все таки в чем сложность то?
ЗЫ.
Маленькое уточнение, Theodor ставит вопрос о проверке наличия поля в атрибуте, это VBA может, а вот прочитать значение кода этого поля - нет.
__________________
_бложиг

Последний раз редактировалось Boxa, 22.01.2018 в 07:28. Причина: Добавил ЗЫ.
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 07:54
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,735


Да ладно, не может! Может:
Код:
[Выделить все]
Public Sub test()
Dim sTextString As String
Dim sFldString As String
Dim oEnt As AcadEntity
Dim oMtext As AcadMText
  For Each oEnt In ThisDrawing.ModelSpace
    If oEnt.ObjectName = "AcDbMText" Then
      Set oMtext = oEnt
      sTextString = oMtext.TextString
      sFldString = oMtext.FieldCode
      MsgBox "TextString = " & sTextString & vbCr & "FieldCode = " & sFldString
    End If
  Next oEnt
End Sub
----- добавлено через 26 сек. -----
С атрибутами такой же метод, думаю.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 08:09
#10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,774


Кулик Алексей aka kpblc, вопрос про АТРИБУТЫ, у атрибута нет метода FieldCode
__________________
_бложиг
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 08:27
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,735


У многострочного атрибута, кажется, есть.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 08:42
#12
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,774


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У многострочного атрибута, кажется, есть.
Очень может быть, т.к. по сути для атрибута будет установлена метка MTextAttribute и поле будет браться из вложенного объекта МТекст

там что то типа этого:
Код:
[Выделить все]
 
if (arAttr.IsMTextAttribute)
{
  MText mtx = arAttr.MTextAttribute;
  arAttr.MTextAttribute = mtx;
  arAttr.UpdateMTextAttribute();
  brRefBlock.RecordGraphicsModified(true);
}
__________________
_бложиг
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 12:05
#13
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 159


Цитата:
Сообщение от Boxa Посмотреть сообщение
Маленькое уточнение, Theodor ставит вопрос о проверке наличия поля в атрибуте, это VBA может
И как это узнать, наличие поля? каким методом? если применительно к однострочному атрибуту? С мультитекстами понятно, попробовал, работает.
Хотя бы узнать о наличии, фиг с ним с кодом.
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 12:10
#14
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,774


Theodor, посмотреть содержимое ExtensionDictionary для атрибута.
Код:
[Выделить все]
Sub IsAttributesHasFIELD() 
   Dim HasFIELD As Boolean
   HasFIELD = False
   Dim blockRefObj As AcadObject
   Dim basePnt As Variant
   On Error Resume Next
   ThisDrawing.Utility.GetEntity blockRefObj, basePnt, "Select an object"

   Dim varAttributes As Variant
   varAttributes = blockRefObj.GetAttributes
  
   For Each I In varAttributes
    If I.HasExtensionDictionary Then
         Dim EDictionary As AcadDictionary
         Set EDictionary = I.GetExtensionDictionary
         If EDictionary.Count > 0 Then
             For Each f In EDictionary
                 If f.Name = "ACAD_FIELD" Then
                     HasFIELD = True
                     Exit For
                 End If
             Next
         End If
     End If
    Next
   
    MsgBox CStr(HasFIELD)
End Sub
__________________
_бложиг
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.01.2018, 12:17
#15
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 159


Цитата:
Сообщение от Boxa Посмотреть сообщение
посмотреть содержимое ExtensionDictionary для атрибута.
Ого! Интересно! Спасибо, попробую. Давно задумывался об изучении расширенных словарей, думаю там много полезных тайн.

----- добавлено через ~20 мин. -----
Boxa, еще раз спасибо, все получилось!!!
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Вычислить наличие полей в Текстах, МТекстах, Атрибутах

РЕВЕРС. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# .net Создание Layout для чертежей, оформленных в модели bargool Готовые программы 527 20.09.2017 01:15

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||