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

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

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

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

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

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

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

Как это сделать?
Просмотров: 9533
 
Непрочитано 28.08.2008, 11:25
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


А если их на экране несколько? или экранов несколько?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.08.2008, 11:55
#3
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object))(vla-get-OwnerID (vlax-ename->vla-object(car(entsel)))))
;#<VLA-OBJECT IAcadPaperSpace3 1974a784>
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.08.2008, 12:07
#4
DonVik


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


Цитата:
А если их на экране несколько?
Вот я и хочу к тому же еще хранить координаты блоков ) дабы потом их показать
Цитата:
или экранов несколько?
Мониторов? Исключено.
Цитата:
kpblc
Ага OwnerID...
Поняв буду рыть в этом направлении, мне правда бы в VBA но попробую разобраться
DonVik вне форума  
 
Непрочитано 28.08.2008, 12:07
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,890
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Код:
[Выделить все]
(cdr(assoc 410 (entget (car (entsel "\nВыбери блок")))))
Допустим в переменной Blk у тебя указатель на VLA объект любого примитива.
Код:
[Выделить все]
(setq blk (vlax-ename->vla-object (car (entsel "\nВыбери блок"))))
Тогда имя его пространства
Код:
[Выделить все]
(setq layoutname (cdr(assoc 410 (entget (vlax-vla-object->ename blk)))))
Перейти в него
Код:
[Выделить все]
(setvar "CTAB" layoutname)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.08.2008, 12:09
#6
DonVik


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


Цитата:
VVA
хм... А можно на VBA если не сложно?

Координаты получил через GetBoundingBox
Остается разобраться в примерах вышеприведенных и понять как это на VBA делается )

Последний раз редактировалось DonVik, 28.08.2008 в 12:21.
DonVik вне форума  
 
Непрочитано 28.08.2008, 12:40
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,890
<phrase 1= Отправить сообщение для VVA с помощью Skype™


DonVik, Я с VBA не дружу . Здесь проси или Алексея или fixo.
Ну а установить переменнную CTAB можно и в VBA.

*** Размышления
Через SendCommand можно из VBA послать в активный документ на выполнение и строчку(ки) на лисп. Перевести AcadBlockReference VBA в ename и (или) vla-object неверное можно через ObjectID
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.08.2008, 12:58
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Цитата:
Сообщение от VVA Посмотреть сообщение
DonVik, Я с VBA не дружу
VVA не дружит с VBA.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.08.2008, 13:05
#9
DonVik


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


Цитата:
Я с VBA не дружу
Да я тоже потому прогу пишу на Делфях, но там такое же АПИ какое VBA использует поэтому как не крути а приходится...
Цитата:
Через SendCommand можно из VBA послать в активный документ на выполнение и строчку(ки) на лисп
Да вот и я подумал о том же, только как мне в эти строчки передать мой обьект?

Вот ща попробую получить обьект примером Крыса, а потом уж твоим примером слинять на нужный Лайоут )
DonVik вне форума  
 
Непрочитано 28.08.2008, 13:17
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,890
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Ну еще если можно в VBA "выковырять" метку примитива (это та, что хранится в 5 поле), то ее можно преобразовать в ename черех лисп-функция handent
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.08.2008, 13:19
#11
DonVik


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


Фуххх.
Не пойму, когда пишу в командной строке
Код:
[Выделить все]
(vla-get-OwnerID entsel)
Выдает ошибку:
Цитата:
error: no function definition: VLA-GET-OWNERID
DonVik вне форума  
 
Непрочитано 28.08.2008, 13:27
#12
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


entsel в скобках надо писать - (entsel)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.08.2008, 13:37
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,890
<phrase 1= Отправить сообщение для VVA с помощью Skype™


DonVik,
Сначала (vl-load-com)! (один раз за сеанс)
Код:
[Выделить все]
(vl-load-com)
(setq objID (vla-get-ObjectID (vlax-ename->vla-object (car(entsel)))))
Обратно в объект
Код:
[Выделить все]
(vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object)) objID)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.08.2008, 13:51
#14
Кулик Алексей aka kpblc
Moderator

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


Вроде так будет на VBA:
Код:
[Выделить все]
ThisDrawing.ObjectIdToObject(obj.ObjectID)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.08.2008, 13:56
#15
ssn

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


когда то ту мне подсказали сделать определение так

Dim oLayout As AcadLayout
Dim oID As Long
Set oLayout = Acdoc.Layouts("Model") (ну а думаю любой из списка)
oID = oLayout.Block.ObjectID

If ssetObj.Item(v).OwnerID = oID Then

End If
ssn вне форума  
 
Автор темы   Непрочитано 28.08.2008, 16:37
#16
DonVik


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


Цитата:
If ssetObj.Item(v).OwnerID = oID Then
Я проверил у них разные ID... Не прокатило короче.

Надыбал метод GetXData но никак не пойму как его юзать, мож кто подскажет?
DonVik вне форума  
 
Непрочитано 28.08.2008, 16:44
#17
ssn

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


дак да, разные ID...
а разве это не у разных лейаутов разные ID?
принадлежность к определённому листу по ID...
нет?
ssn вне форума  
 
Непрочитано 28.08.2008, 16:49
#18
Кулик Алексей aka kpblc
Moderator

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


Стоп. Xdata тут ни при чем.
У тебя вообще, указатель на вхождение блока получен? И на вхождение ли? Проверь значение obj.ObjectName.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.08.2008, 17:02
#19
Vildar

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


ИМХО нужно искать каждый блок из твоего набора на каждом листе по отдельности, способом от ssn.
Vildar вне форума  
 
Непрочитано 28.08.2008, 17:27
#20
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,890
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от DonVik Посмотреть сообщение
Я проверил у них разные ID... Не прокатило короче.

Надыбал метод GetXData но никак не пойму как его юзать, мож кто подскажет?
Одинаковае у них ObjectID
Я взял первый попавшийся код на VBA. Блок выделяешь рамочкой.
Код:
[Выделить все]
Sub SS()

   Dim objItemEntity As AcadEntity
   Dim objItemEntity2 As AcadEntity
   Dim selSetAll As AcadSelectionSet
   Dim selSetSelected As AcadSelectionSet
   Dim objRemove(0) As AcadEntity
   Dim varPnt1 As Variant, varPnt2 As Variant

    With ThisDrawing.SelectionSets
    While .Count > 0
          .Item(0).Delete
    Wend
        Set selSetSelected = .Add("$frame$")
        Set selSetAll = .Add("$all$")
    End With

With ThisDrawing.Utility

   .InitializeUserInput 1
    varPnt1 = .GetPoint(, vbCr & "Pick the first corner: ")
    varPnt2 = .GetCorner(varPnt1, vbCr & "Pick other corner: ")

    selSetSelected.Select acSelectionSetWindow, varPnt1, varPnt2
    selSetAll.Select acSelectionSetAll

   For Each objItemEntity In selSetSelected
   varPnt1 = objItemEntity.ObjectID
   MsgBox (varPnt1)

      Next
End With

End Sub
То же на лиспе
Код:
[Выделить все]
(vl-load-com)
(setq objID (vla-get-ObjectID (vlax-ename->vla-object (car(entsel)))))
(alert (VL-PRINC-TO-STRING objID))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > На каком лайоуте находится выбранный блок?

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

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


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