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

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

Как получить доступ к примитивам листа

Ответ
Поиск в этой теме
Непрочитано 18.01.2014, 17:48 #1
Как получить доступ к примитивам листа
Mozgunov
 
Начинающий проектировщик
 
Санкт-Петербург
Регистрация: 07.02.2008
Сообщений: 443

Добрый день!Подскажите пожалуйста как получить доступ к примитивам листа из vla объекта (vla-get-paperspace odj). Хочу удалить вхождения блоков в пространстве листа. Получил указатель на пространства листа, а дальше не получается.

Последний раз редактировалось Mozgunov, 18.01.2014 в 18:16.
Просмотров: 3376
 
Непрочитано 18.01.2014, 18:49
#2
Кулик Алексей aka kpblc
Moderator

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


Получай указатель на блок листа через
Код:
[Выделить все]
 (Vla-get-block adoc "ИмяЛиста") ; кажется, так
и потом уже по описанию блока проходись.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.01.2014, 18:56
#3
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Код:
[Выделить все]
 
Команда: (Vla-get-block (vla-get-paperspace odbx) "Лист1")
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: Block
Ошибку выдает. odbx получаю вашей функцией _lispru-odbx c autolisp.ru

Мне нужно пройтись по вхождению блоков в пространстве листа и удалить их. Если я их не удаляю, то не получается этот блок из файла удалить потому, что есть вхождения.
А как получить указатели на все примитивы (вхождение блоков) и в листе и в модели? А то если это вхождение блока в модель попадет, то этот блок тоже из блоков не удалится.

Последний раз редактировалось Mozgunov, 18.01.2014 в 19:02.
Mozgunov вне форума  
 
Непрочитано 18.01.2014, 18:59
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Код:
[Выделить все]
 (vl-load-com)
(setq lst nil)
(vlax-for
	  item
	      (vla-get-PaperSpace
		(vla-get-ActiveDocument (vlax-get-acad-object))
	      )
  (setq lst (cons item lst))
)
(foreach obj lst
  (princ (strcat "\nОбъект листа: " (vl-princ-to-string obj)))
)
----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Mozgunov Посмотреть сообщение
Ошибку выдает. odbx получаю вашей функцией _lispru-odbx c autolisp.ru
Потому что vla-get-block надо применять к документу, чтобы получить нужный лист. А потом уже в этом листе перебором с помощью vlax-for искать нужные объекты.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 18.01.2014, 19:03
#5
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Цитата:
Сообщение от Do$ Посмотреть сообщение
Потому что vla-get-block надо применять к документу, чтобы получить нужный лист. А потом уже в этом листе перебором с помощью vlax-for искать нужные объекты.
Спасибо!

----- добавлено через ~7 мин. -----
Код:
[Выделить все]
 (vlax-for item (vla-get-paperspace odbx) (setq lst (cons item lst)))
Так что-то тоже не получается(
Mozgunov вне форума  
 
Непрочитано 18.01.2014, 19:15
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


В каком месте спотыкается выполнение? Какую ошибку выдает?

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от Do$ Посмотреть сообщение
Потому что vla-get-block надо применять к документу, чтобы получить нужный лист.
Что-то сам попробовал эту комбинацию - не получается. Ввел меня Алексей в заблуждение, похоже
Блок листа из документа вот так можно получить:
Код:
[Выделить все]
(vla-get-block (vla-item (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object))) <тут имя листа>))
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 18.01.2014, 19:33
#7
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Код:
[Выделить все]
 (vla-get-block (vla-item (vla-get-Layouts odbx) "Лист1"))
Спасибо. Блок листа удалось получить из документа. А как дальше путешествовать по блоку? И где можно получить список листов?
Мне нужно работать с закрытым документом. А там нужно использовать только функции vla vlax. Если в лиспе я ещё как-то ковыряюсь, то тут что-то проблемы сплошные...
Mozgunov вне форума  
 
Непрочитано 18.01.2014, 19:46
#8
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Mozgunov Посмотреть сообщение
А как дальше путешествовать по блоку?
vlax-for по этому блоку.
Цитата:
Сообщение от Mozgunov Посмотреть сообщение
И где можно получить список листов?
vlax-for по коллекции листов документа (vla-get-Layouts odbx)
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 18.01.2014, 20:00
#9
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Можете написать как список объектов получить в этом объекте (vla-get-block (vla-item (vla-get-Layouts odbx) "Лист1")) ?
Делаю так, но ничего не получается(

Код:
[Выделить все]
 
Команда: (vlax-for item (vla-get-block (vla-item (vla-get-Layouts odbx) "Лист1")) (setq lst item))
nil
Команда: !lst
nil

Mozgunov вне форума  
 
Непрочитано 18.01.2014, 20:19
#10
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


А в листе есть что-то? Если лист ни разу не открывался (не инициализировался), то для него будет nil выдавать.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 18.01.2014, 20:28
#11
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Не было ничего. Сейчас добавил в лист блок и заработало.

Код:
[Выделить все]
 
Команда: (vlax-for item (vla-get-block (vla-item (vla-get-Layouts odbx) 
"Лист1")) (setq lst item))
#<VLA-OBJECT IAcadBlockReference2 000000002fa450b8>
Что дальше делать с IAcadBlockReference2 подскажите?

Понял. Спасибо!

Код:
[Выделить все]
 
(vlax-for item (vla-get-block (vla-item (vla-get-Layouts odbx) "Лист1")) (setq lst (cons item lst)))
(#<VLA-OBJECT IAcadBlockReference2 000000002fa450b8> 
#<VLA-OBJECT IAcadPViewport2 000000002fa9d348> 
#<VLA-OBJECT IAcadBlockReference2 000000002fa450b8> 
#<VLA-OBJECT IAcadPViewport2 000000002fa9d348> . 
#<VLA-OBJECT 
IAcadBlockReference2 000000002fa450b8>)

Последний раз редактировалось Mozgunov, 18.01.2014 в 20:44.
Mozgunov вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить доступ к примитивам листа



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к таблице Access Cleper Программирование 22 02.02.2016 07:05
Как получить доступ к вложенным блокам из VBA? vicont-s Программирование 3 25.04.2009 23:29
Получить доступ к разделу палитры СВОЙСТВА->Геометрия через ком-строку ki AutoCAD 4 17.03.2009 23:56
Кто знаком с системой Vault Олег Вещий Прочее. Программное обеспечение 39 14.11.2008 22:43