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

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

На каком лайоуте находится выбранный блок?

Ответ
Поиск в этой теме
Непрочитано 28.08.2008, 11:17
На каком лайоуте находится выбранный блок?
DonVik
 
Украина
Регистрация: 07.02.2007
Сообщений: 222

Допустим я получил переменку AcadBlockReference
И такаих переменок у меня целый список, благодаря ему я путешествую по всем блокам и их атрибутам в чертеже.
А как узнать на каком лайоуте находится указанный мною блок?

Задача собственно вот в чем: Я имея список блоков в скажел ListBox'е хочу клацнув по итему получить на экране этот блок, дабы программа сама находила лайоут на котором этот блок перескакивала на него и скалировала чертеж так чтоб этот конкретно блок заполнял собою весь экран.

Может мутно обьяснил... В кратце Хочу видеть выбранный блок )

Как это сделать?
Просмотров: 10751
 
Непрочитано 28.08.2008, 17:32
#21
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


мне кажется в последнем примере надо ещё посмотреть у объектов из набора selSetAll
понятное дело что в наборе selSetSelected будут одинаковые ID.. они же с одного листа выбраны
ssn вне форума  
 
Непрочитано 28.08.2008, 18:17
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


ssn, Я имею ввиду что ObjectID у лиспа и VBA одинаков. Это позволяет через SendCommand запустить лисп выражение из VBA
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.08.2008, 00:15
#23
Кулик Алексей aka kpblc
Moderator

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


Все же вопрос: а как получен указатель на вхождение блока? Вот вариант кода на VBA (за корявость прошу ногами не бить):
Код:
[Выделить все]
Sub GetBySelSet()
Dim objSelSet As AcadSelectionSet
Dim objInSelSet As AcadBlockReference
Dim sSelSetName As String
Dim dxfType(0) As Integer, dxfData(0) As Variant
  sSelSetName = "$Blocks$"
  dxfType(0) = 0: dxfData(0) = "INSERT"
  With ThisDrawing
    On Error Resume Next
    .SelectionSets.Item(sSelSetName).Clear
    .SelectionSets.Item(sSelSetName).Delete
    On Error GoTo 0
    Set objSelSet = .SelectionSets.Add(sSelSetName)
    objSelSet.SelectOnScreen dxfType, dxfData
    If objSelSet.Count > 0 Then
      Set objInSelSet = objSelSet.Item(0)
      MsgBox "Владелец объекта : " & vbCr & _
        "ID: " & CStr(objInSelSet.OwnerID) & vbCr & _
        "ProgName: " & CStr(.ObjectIdToObject(objInSelSet.OwnerID).Name) & vbCr & _
        "RealName: " & CStr(.ObjectIdToObject(objInSelSet.OwnerID).Layout.Name) & vbCr & _
        "IsLayout : " & CStr(.ObjectIdToObject(objInSelSet.OwnerID).IsLayout) _
        , _
        vbOKOnly + vbInformation + vbApplicationModal
    Else
      MsgBox "А выбирать кто будет?", vbOKOnly + vbCritical + vbApplicationModal
    End If
  End With
End Sub
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.08.2008, 13:06
#24
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Цитата:
как получен указатель на вхождение блока?
А вот мне пример показал Vildar :
http://dwg.ru/f/showthread.php?p=280637&#post280637

Ща я окультурю свою разработку, подправлю мелкие ошибочки, и потом уж продолжу рулить эту тему )
DonVik вне форума  
 
Непрочитано 29.08.2008, 14:00
#25
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Примечание selSetBlocksRef.Select acSelectionSetAll - выбирает объекты на всех листах, в том числе и в моделе.
Про ObjectIdToObject не знал, спасибо.
Vildar вне форума  
 
Автор темы   Непрочитано 29.08.2008, 15:01
#26
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Итак я возвращаюсь с тем дурным вопросом.

ssn предлагал мне сравнивать ID "родителя" блока с ID Лайоута
VVA сказал что ID у них одинаковые, этого поста я чет недопонял

Вот попробовал на вкус:
Код:
[Выделить все]
Private Sub UserForm_Initialize()
Dim p As Variant
Dim b As AcadBlockReference
ThisDrawing.Utility.GetEntity b, p
Caption = CStr(b.OwnerID) & " " & CStr(ThisDrawing.ActiveLayout.ObjectID)
End Sub
ID разные...
Мож я чего-то недогоняю?

Есть ли аналог (entget) в VBA?
DonVik вне форума  
 
Непрочитано 29.08.2008, 15:20
#27
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


То что нужно - в примере от Алексея в #23
Vildar вне форума  
 
Автор темы   Непрочитано 29.08.2008, 16:00
#28
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


о-о-о усе узрел Мазай зайца )))

Код:
[Выделить все]
Dim o As AcadBlockReference
Dim p As Variant
ThisDrawing.Utility.GetEntity o, p
Caption = CStr(ThisDrawing.ObjectIdToObject(o.OwnerID).Layout.Name)
Danke Schon ребята, и Кулику персонально )

Лайоуты получил, ща буду мыслить о том как получить координаты этих блоков и показывать их на весь экран при выборе в ЛистБоксе нужного ) Если что отпишу, только наверное уж не сюда а в другую тему.
DonVik вне форума  
 
Непрочитано 29.08.2008, 17:03
#29
Кулик Алексей aka kpblc
Moderator

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


Кхе... А если в одном листе один и тот же блок вставлен несколько раз? Чего делать будем?
Ну переход на лист сделать-то не проблема, а для вида "во весь экран" можно попробовать GetBoundnigBox для получения координат описывающего прямоугольника. А потом уже и Zoom подкатит
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.08.2008, 17:16
#30
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Цитата:
А если в одном листе один и тот же блок вставлен несколько раз? Чего делать будем?
Дык я и не привязываюсь к имени блока.
Главное для меня получить его атрибут - обозначение чертежа, оно то уникально, вот от него все и отталкиваюсь.
Цитата:
для вида "во весь экран" можно попробовать GetBoundnigBox
Угу. Обнаружил такое. Ща уж домой ухожу в понеделок продолжу )
DonVik вне форума  
 
Непрочитано 29.08.2008, 17:20
#31
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от DonVik Посмотреть сообщение
Итак я возвращаюсь с тем дурным вопросом.

ssn предлагал мне сравнивать ID "родителя" блока с ID Лайоута
VVA сказал что ID у них одинаковые, этого поста я чет недопонял
Я сказал, что
Цитата:
Одинаковае у них ObjectID
(имелось ввиду VBA и LISP, а не
Цитата:
ID "родителя" блока с ID Лайоута
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > На каком лайоуте находится выбранный блок?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Болеем за наших на Олимпиаде T-Yoke Разное 472 28.04.2009 17:40
Помогите доделать программу добавления объектов в блок МишаVBA Программирование 1 20.05.2006 01:04