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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ошибка в строке ThisDrawing.ActiveSelectionSet.AddItems

Ошибка в строке ThisDrawing.ActiveSelectionSet.AddItems

Ответ
Поиск в этой теме
Непрочитано 14.07.2006, 13:38 #1
Ошибка в строке ThisDrawing.ActiveSelectionSet.AddItems
mmmx
 
Москва
Регистрация: 06.07.2006
Сообщений: 42

Почему возникает эта ошибка?

В строке
ThisDrawing.ActiveSelectionSet.AddItems ssobjs

Первое сообщение: ключ не найден

Последующие:
Run-time error '-214746259 (80004005)':
Method 'AddItems' of object 'IAcadSelectionSet' Failed


Код:
[Выделить все]
Sub orderEnt()
  Set objAllBlks = ThisDrawing.Blocks
  For Each objBlk In objAllBlks
        
        Dim ssobjs(0) As AcadBlock 'AcadEntity
        Set ssobjs(0) = objBlk
        ThisDrawing.ActiveSelectionSet.AddItems ssobjs
        
        ThisDrawing.SendCommand "_draworder" & vbCr & "текущий" & vbCr & vbCr & "е" & vbCr
    
  Next objBlk
End Sub
Причем такой ход нормально работает, если выбрать объекты таким образом:
Код:
[Выделить все]
Set sset = ThisDrawing.SelectionSets.Add("SSETORDER")
Mode = acSelectionSetAll
sset.Select Mode, , , FType, FData
а потом, выбирая их по одному, заносить в активселекшенсет - все работает.
Просмотров: 3544
 
Непрочитано 14.07.2006, 16:40
#2
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Критическое заблуждение

AcadBlock это неграфический объект Автокада, это всего лишь
описание вхождения блока (объекты, точка вставки и тд)

AcadBlockReference это вставка вышеуказанного объекта как
графического его отображения и лучше не путаться в терминологии
и называть его хотя бы для себя вставкой блока

Насчет ActiveSelectionSet. Намного эффективней второй твой метод
а если хочется использовать активный, простой пример для демонстрации:

Код:
[Выделить все]
  Sub Test()
  Dim oSsets As AcadSelectionSets
  Dim aSset As AcadSelectionSet
  Dim oSset As AcadSelectionSet
  Dim itm As AcadEntity
  Dim blkRef As AcadBlockReference
  Dim blkVar(0) As Object
  ThisDrawing.Regen acActiveViewport
  Set aSset = ThisDrawing.ActiveSelectionSet
  MsgBox "При открытии рисунка" & vbCrLf & _
  "в ActiveSelectionSet  находится" & vbCrLf & _
  CStr(aSset.Count) & " объектов"
  Set oSsets = ThisDrawing.SelectionSets
  For Each oSset In oSsets
  If oSset.Name = "$blkRefs$" Then
  oSset.Delete
  End If
  Next
  Set oSset = oSsets.Add("$blkRefs$")
  aSset.Select acSelectionSetAll
  MsgBox "В данный момент" & vbCrLf & _
  "в ActiveSelectionSet  находится" & vbCrLf & _
  CStr(aSset.Count) & " объектов"
  MsgBox "В данный момент" & vbCrLf & _
  "в именнованом наборе ""$blkRefs$""" & vbCrLf & _
  "находится " & CStr(oSset.Count) & " объектов"
  For Each itm In aSset
  If TypeOf itm Is AcadBlockReference Then
  Set blkVar(0) = itm
  oSset.AddItems blkVar
  End If
  Next itm
  
  MsgBox "В данный момент" & vbCrLf & _
  "в ActiveSelectionSet" & vbCrLf & _
  "остается " & CStr(aSset.Count) & " объектов"
  MsgBox "В данный момент" & vbCrLf & _
  "в именнованый набор ""$blkRefs$""" & vbCrLf & _
  "добавлено " & CStr(oSset.Count) & " объектов"
  oSset.Highlight True

  '' ThisDrawing.Regen acActiveViewport
  End Sub
Личное мнение, ActiveSelectionSet удобнее в программах на VLISP

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 14.07.2006, 18:33
#3
mmmx


 
Регистрация: 06.07.2006
Москва
Сообщений: 42


Если бы второй способ мне годился, я бы не задавал вопросов!

Все дело в том, что требуемый набор объектов (блоков в данном случае) мне гораздо проще получить первым способом!

Насчет неграфического объекта - это я подсознательно чувствовал, только не знал, как прийти к его графическому соответствию. Да и сейчас не знаю... Буду пробовать!
mmmx вне форума  
 
Непрочитано 14.07.2006, 20:00
#4
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


Цитата:
Да и сейчас не знаю...
Достаточно просто взглянуть на объектную модель...
Код:
[Выделить все]
VBA class name:
 AcadBlockReference 
 
Create using:
 ModelSpace.InsertBlock
PaperSpace.InsertBlock
Block.InsertBlock 
 
Access via:
 ModelSpace.Item
PaperSpace.Item
Block.Item
SelectionSet.Item
Group.Item
BigBrother вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ошибка в строке ThisDrawing.ActiveSelectionSet.AddItems