| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать поле в Autocad при помощи VBA?

Как создать поле в Autocad при помощи VBA?

Ответ
Поиск в этой теме
Непрочитано 20.10.2015, 00:02 1 | #1
Как создать поле в Autocad при помощи VBA?
allrather
 
Минск
Регистрация: 27.02.2011
Сообщений: 169

Ребзя, доброго времени суток!
Необходима информация о том, как создать поле в автокад при помощи VBA (поле на любое свойство блока, текста или примитива)?
Устроит любой пример.. Заранее, очень признателен.


ВОПРОС РЕШЕН!!!
Все сводится к получению ObjId, а затем все просто, по примеру автокада (Нажмите на изображение для увеличения
Название: Screen Shot 001.JPG
Просмотров: 400
Размер:	187.2 Кб
ID:	158792).
Пример получения ObjId для атрибутов блока - Нажмите на изображение для увеличения
Название: Screen Shot 002.JPG
Просмотров: 413
Размер:	38.3 Кб
ID:	158793
Формирование поля - Нажмите на изображение для увеличения
Название: Screen Shot 003.JPG
Просмотров: 367
Размер:	65.9 Кб
ID:	158794


Последний раз редактировалось allrather, 20.10.2015 в 07:41.
Просмотров: 10724
 
Непрочитано 27.10.2015, 20:24
#2
kefirrr


 
Регистрация: 29.12.2014
Сообщений: 28


а можно вас попросить выложить макрос с файлом dwg, чтобы покрутить и понять
kefirrr вне форума  
 
Автор темы   Непрочитано 27.10.2015, 23:51
#3
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


kefirrr, уехал на денек на Родину. Отдохнуть. С собой только айпад.
Завтра вернусь к рабочему месту вечерком, там и сброшу что-либо.
Если не терпится, то на скринах с моего предыдущего поста должно быть все достаточно понятно. Там создается поле применительно к атрибутам динамического блока.
allrather вне форума  
 
Непрочитано 06.11.2015, 10:11
#4
Oleg15


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


Обещали пример dwg, что-то решётки вставляюся только
Oleg15 вне форума  
 
Автор темы   Непрочитано 06.11.2015, 14:41
#5
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


kefirrr, Oleg15, что-то я забегался и подзабыл. Извиняюсь.
Прикрепляю видео с пояснением, код и сам автокад.

https://www.youtube.com/watch?v=RUglFkd7EHo

Код:
[Выделить все]
Sub AddField()
Dim ss As AcadSelectionSet
Dim field As String
Dim objEnt As AcadEntity
Dim objBRef As AcadBlockReference
On Error Resume Next
ThisDrawing.SelectionSets("SS").Delete
Set ss = ThisDrawing.SelectionSets.Add("SS")
ss.SelectOnScreen
For Each objEnt In ss
    Set objBRef = objEnt
     att = objBRef.GetAttributes
        For i = LBound(att) To UBound(att)
            If att(i).TagString = "НОМЕР" Then
            field = att(i).ObjectID
            End If
        Next
Next
pp = ThisDrawing.Utility.GetPoint(, vbCrLf & "Точка вставки")
Set objBRef = ThisDrawing.ModelSpace.insertblock(pp, "тест", 1, 1, 1, 0)
    att = objBRef.GetAttributes
        For i = LBound(att) To UBound(att)
            If att(i).TagString = "НОМЕР" Then
            att(i).TextString = "%<\AcObjProp Object(%<\_ObjId " & field & ">%).TextString>%"
            End If
        Next
ThisDrawing.Regen acActiveViewport
End Sub
Вложения
Тип файла: dwg
DWG 2013
Чертеж.dwg (137.4 Кб, 893 просмотров)
allrather вне форума  
 
Непрочитано 06.11.2015, 17:48
#6
Oleg15


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


Спасибо большое, все заработало на моих блоках
Oleg15 вне форума  
 
Непрочитано 16.12.2015, 12:12
#7
kefirrr


 
Регистрация: 29.12.2014
Сообщений: 28


Мега вещь!!!
Спасибо большое. Никогда не продавала большого значения полям, да что скрывать, я не понимала для чего они нужны. А с вашим примером они могут сократить время разработки чертежа.
kefirrr вне форума  
 
Непрочитано 12.12.2017, 13:05
#8
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 425
<phrase 1=


Добрый день!
Как вставить поле в таблицу?
Поле это атрибут блока. Надо этот атрибут в виде поля записать в ячейку таблицы.
Предложенное выше решение выдаёт ####. Регенерация не помогает. Но если зайти в ячейку, потыкать там мышкой, а потом нажать "Ок" и регенерировать, то тогда выдаёт правильное значение.
Alexeipost вне форума  
 
Непрочитано 12.12.2017, 15:59
#9
Boxa

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


Цитата:
Сообщение от Alexeipost Посмотреть сообщение
Поле это атрибут блока.
А если внимательно прочитать
Цитата:
Сообщение от Alexeipost Посмотреть сообщение
Предложенное выше решение
то окажется, что это не так. В рамках VBA, поле это просто заковыристо сформированная строка, а если копнуть глубже, то объект добавляемый в базу чертежа (типа линии или текста). Кто Вам мешает вставить эту строку в ячейку таблицы и вызвать регенерацию? Что останавливает?
Boxa вне форума  
 
Непрочитано 12.12.2017, 17:59
#10
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 425
<phrase 1=


Вставляю в ячейку %<Ac......... + objectid атрибута + textstring (тут пишу по памяти, а так орфография и пунктуация правильная), но в ячейке появляется ####. Регенерация не помогает (делал пять раз подряд). Но помогает если зайти в ячейку, зайти в поле, ничего не менять, нажать "Ок", выйти из ячейки и сделать регенерацию.
Alexeipost вне форума  
 
Непрочитано 20.12.2017, 12:32
#11
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 425
<phrase 1=


Сам же отвечу на свой вопрос.
Так в ячейке появляется ####
Код:
[Выделить все]
MyTable.SetCellValue i + 1, 0, "%<\AcObjProp Object(%<\_ObjId " & varAttribs(0).ObjectID & ">%).Textstring>%"
а вот так всё работает)))
Код:
[Выделить все]
MyTable.SetText i + 1, 0, "%<\AcObjProp Object(%<\_ObjId " & varAttribs(0).ObjectID & ">%).Textstring>%"
Alexeipost вне форума  
 
Непрочитано 03.06.2018, 00:21
#12
Theodor


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


Коллеги, доброго времени суток.
Подскажите, а как избавиться от поля в мультитексте?
Я получаю objMText.textstring мультитекста, а там нет кодов поля, лишь конечное значение. Пытался переписать objMText.textstring=myMText.textstring - не помогает.
Предположил, что надо поковыряться в расширенных словарях данного мультитекста, там есть словарь "ACAD_FIELD". Возникла идея от него избавится, но как-то не получилось! Что не так делаю?
Код:
[Выделить все]
 
' objMText - ранее выбранный объект мультитекста
 Dim arrExtDicAttr As AcadDictionary
 Dim vExtDicAttr As Variant
 Set arrExtDicAttr = objMText.GetExtensionDictionary
 If arrExtDicAttr.Count > 0 Then
  For Each vExtDicAttr In arrExtDicAttr
   If vExtDicAttr.name = "ACAD_FIELD" Then
    MsgBox "есть поля"
    vExtDicAttr.Erase ' как бы хотелось грохнуть словарь, но рычит VBA
   Exit For
  End If
  Next vExtDicAttr
 End If
Theodor вне форума  
 
Непрочитано 03.06.2018, 01:20
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


arrExtDicAttr.Remove ?
Сергей812 вне форума  
 
Непрочитано 03.06.2018, 01:37
#14
Theodor


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
arrExtDicAttr.Remove ?
то же рычит...
в случаях erase или delete - говорит "на объект ссылаются другие объекты". а при remove говорит
Цитата:
wrong number of arguments or invalid property assignment
Может удалять словарь не совсем правильно. Может его как-то еще почистить.
Еще нашел метод .fieldcode, он выдает весь текст с кодами, но записать вместо него без кодов не получается.
Theodor вне форума  
 
Непрочитано 03.06.2018, 06:14
#15
Boxa

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


Цитата:
Сообщение от Theodor Посмотреть сообщение
Я получаю objMText.textstring мультитекста, а там нет кодов поля, лишь конечное значение. Пытался переписать objMText.textstring=myMText.textstring - не помогает.
там есть ограничения, посмотрите в справке.
Boxa вне форума  
 
Непрочитано 18.12.2020, 03:04
#16
Moi Imena


 
Регистрация: 14.03.2016
Сообщений: 34


Здраствуйте. Подскажите пожалуйста а как сделать вариант данного макроса в котором бы создавался не блок а мтекст или мультивыноска ?
PS: в vba дуб дубом
Moi Imena вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать поле в Autocad при помощи VBA?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ACADVER (Системная переменная) Makswell Справочник команд 19 13.10.2016 05:58
Как создать большую карту в AutoCAD 3d Map на основе существующей в автокаде? SilvioManuel Прочее ПО от Autodesk 3 18.08.2014 14:51
AutoCAD Architechure 2012 - как создать собственную палитру и кинуть на нее блоки? MaximuS_G AutoCAD 14 09.12.2011 23:00
Создать предмет при помощи поверхности Куна Кетрин AutoCAD 69 26.01.2009 21:59