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

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

Как изменить атрибут предварительно выделеного блока VBA

Ответ
Поиск в этой теме
Непрочитано 12.05.2012, 09:50 #1
Как изменить атрибут предварительно выделеного блока VBA
shprot
 
Регистрация: 08.02.2011
Сообщений: 33

Имеется блок который пользователь уже выделил мышкой, как изменить атрибут этого блока (объект выделен до запуска макроса). Собственно не ясно как получить сам выделенный объект. Заранее спасибо.
Просмотров: 4650
 
Непрочитано 12.05.2012, 10:16
#2
Кулик Алексей aka kpblc
Moderator

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


См.метод GetAttributes у вхождения блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.05.2012, 14:11
#3
shprot


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


Спасибо, но тут вопрос больше в том как получить доступ к объекту блока (он. динамический) вот это не пойму. Наверно как то через AcadSelectionSet, но как?

Вот что у меня
Код:
[Выделить все]
Sub test()
Dim newObjs As AcadObject, sset As AcadSelectionSet
MsgBox ThisDrawing.ActiveSelectionSet.Count

Set sset = ThisDrawing.ActiveSelectionSet
For Each newObjs In sset
If newObjs.ObjectName = "AcDbBlockReference" Then 
 If newObjs.EffectiveName = "Стена" Then
 'здесь будет обработка блока
 Exit For
End If
End If
Next

sset.Clear
Set sset = Nothing

End Sub
Код:
[Выделить все]
MsgBox ThisDrawing.ActiveSelectionSet.Count
показывает что перед выполнением макроса ActiveSelectionSet >0
выходит что его нужно очистить, значит не срабатывает

Код:
[Выделить все]
sset.Clear
Set sset = Nothing
Подскажите пожалуйста по чему это может быть?

Последний раз редактировалось shprot, 13.05.2012 в 00:08.
shprot вне форума  
 
Непрочитано 13.05.2012, 09:35
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Так попробуй
Код:
[Выделить все]
' selection test:
Dim fType(0 To 2) As Integer
Dim fData(0 To 2) As Variant
Dim dxfCode, dxfValue
fType(0) = 0: fData(0) = "INSERT"
fType(1) = 66: fData(1) = 1

fType(2) = 2: fData(2) = "`U*," & blkName '<-- измени имя блока на соответствующее
dxfCode = fType: dxfValue = fData
     Dim oSset As AcadSelectionSet
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("MySset")
          End With

oSset.Select acSelectionSetAll, , , dxfCode, dxfValue
If oSset.Count = 0 Then
MsgBox "Nothing selected"
Exit Sub
~`o'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 14.05.2012, 13:22
#5
shprot


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


Подскажите как изменить правильно имя блока? Сделав так:
Код:
[Выделить все]
fType(2) = 2: fData(2) = "Стена наружная" '<-- измени имя блока на соответствующее
блок не обнаруживается.
shprot вне форума  
 
Непрочитано 14.05.2012, 14:14
#6
Agens


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


Чистим набор "blocks"
Цитата:
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets

For Each objSelSet In objSelCol
If objSelSet.Name = "blocks" Then
objSelSet.Delete
Exit For
End If
Next
выбираем только блоки
Цитата:
Set objSelSet = ThisDrawing.SelectionSets.Add("blocks")

mode = acSelectionSetAll
objSelSet.Select mode, 0, 0

Set SelectOnlyOnScreen = objSelSet
Set SelectOnlyOnScreen = objSelSet

перебираем набор из всех блоков чертежа
Цитата:
For I = 0 To acSelSet.Count - 1
On Error Resume Next

Dim varAttributes As Variant
varAttributes = objSelSet.Item(I).GetAttributes

Dim strAttributes As String
strAttributes = ""
Dim j As Integer
For j = LBound(varAttributes) To UBound(varAttributes)
strAttributes = strAttributes + vbCrLf + _
" Tag: " + varAttributes(j).TagString + vbCrLf + _
" Value: " + varAttributes(j).TextString

Next j

Next I

Последний раз редактировалось Agens, 14.05.2012 в 14:29.
Agens вне форума  
 
Непрочитано 14.05.2012, 16:28
#7
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Так попробуй:
Код:
[Выделить все]
fType(2) = 2: fData(2) = "`U*," & "Стена наружная" '<-- измени имя блока на соответствующее
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 15.05.2012, 14:25
#8
shprot


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


Олег (jr.) , не работает, все так же не пишет "Nothing selected"

Agens , спасибо но мне нужно обрабатывать именно только один ранее выделенный (до запуска макроса) пользователем блок. Как я понял у Вас все блоки обрабатываются, поясните может я что-то не понимаю.
shprot вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить атрибут предварительно выделеного блока VBA

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Серия ИИ-03-02 Железобетонные изделия Клименко Ярослав Поиск литературы, чертежей, моделей и прочих материалов 45 22.02.2023 04:57
Изменить точку вставки блока Apelsinov AutoCAD 43 04.02.2022 18:34
Изменить атрибут блока Jоhnny AutoCAD 3 22.06.2011 09:59
Можно ли создать многострочный атрибут блока, который будет динамически растягиваться? ACAD 2007. Vavapet Динамические блоки 2 01.03.2011 15:00
Изменить поле (формула) атрибута блока EfremenkoDO Программирование 5 08.04.2010 11:43