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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Отслеживание таблиц на чертеже [программно]

Отслеживание таблиц на чертеже [программно]

Ответ
Поиск в этой теме
Непрочитано 07.05.2008, 10:30 #1
Отслеживание таблиц на чертеже [программно]
TwoZero
 
Программист
 
г.Иркутск
Регистрация: 06.03.2008
Сообщений: 52

Есть такая проблема, нужно отследить (узнать объект) таблицы на чертеже, но таблицы эти нужно отслеживать не на текущем чертеже (активном документе) а на только что созданном документе (программным путем) который не активен.
Краткий пример того что мне нужно:
1. Программным путем создается новый документ (он неактивен)
2. Идет вставка примитивов в том числе и таблицы
3. Необходимо отследить объекты таблиц чтобы в дальнейшем заполнить эти таблицы данными (?)

Все таблици на чертеже можно отследить при помощи этого кода, который я написал:
;|=============================================================================
* Функция отслеживает все таблицы в AutoCAD
*
* Локальные переменные:
* table_data - Список с характеристиками примитива таблицы
* table_ent - Примитив таблицы
* n - Вспомогательная перменная (кол-во таблиц на чертеже)
*
=============================================================================|;
(defun SHPIL-BLOCKS_TABLES ( / n table_ent table_data)
(setq table_ent (entnext))

(setq n 0)
(while table_ent
(setq table_data (entget table_ent))

(if (= (cdr (assoc 0 table_data)) "ACAD_TABLE")
(setq n (+ n 1))
); end of if

(setq table_ent (entnext table_ent))
); end of while

(princ (itoa n))
); end of SHPIL-BLOCKS_TABLES

Но этот код отслеживает таблици лиш на текущем чертеже (активном документе), а мне нужно отследить таблици на соседнем документе.
Подскажите как это можно реализовать.
Просмотров: 8442
 
Непрочитано 07.05.2008, 10:36
#2
Кулик Алексей aka kpblc
Moderator

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


Что значит "отслеживает"? Что тебе надо получить от таблицы? Потому как работа через ActiveX более удобна.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.05.2008, 10:42
#3
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что значит "отслеживает"? Что тебе надо получить от таблицы? Потому как работа через ActiveX более удобна.
для того чтобы заполнять определенные яйчейки таблици нужно знать объект таблици, так вот мне этот объект и нужно узнать
TwoZero вне форума  
 
Автор темы   Непрочитано 07.05.2008, 10:50
#4
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


Код:
[Выделить все]
(defun _kpblc-get-table-objects (doc / res)
                                ;|
*    Получение списка объектов ACAD_TABLE документа
*    Параметры вызова:
     doc     обрабатываемый документ. nil -> текущий
|;
  (or doc (setq doc (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for blk_def (vla-get-blocks doc)
    (if (equal (vla-get-islayout blk_def) :vlax-true)
      (vlax-for sub blk_def
        (if (= (vla-get-objectname sub) "AcDbTable")
          (setq res (cons sub res))
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of if
    ) ;_ end of vlax-for
  res
  ) ;_ end of defun

Последний раз редактировалось Кулик Алексей aka kpblc, 07.05.2008 в 11:00.
TwoZero вне форума  
 
Автор темы   Непрочитано 07.05.2008, 10:50
#5
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


Код:
[Выделить все]
(defun _kpblc-get-table-objects-within-blocks (doc / res)
                                              ;|
*    Получение списка объектов ACAD_TABLE документа
*    Параметры вызова:
     doc     обрабатываемый документ. nil -> текущий
|;
  (or doc (setq doc (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for blk_def (vla-get-blocks doc)
    (vlax-for sub blk_def
      (if (= (vla-get-objectname sub) "AcDbTable")
        (setq res (cons sub res))
        ) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of vlax-for
  res
  ) ;_ end of defun

Последний раз редактировалось Кулик Алексей aka kpblc, 07.05.2008 в 11:00.
TwoZero вне форума  
 
Непрочитано 07.05.2008, 10:50
#6
VVA

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


Выбери объект "таблица" в нужном документе с помощью ActiveX. Пример здесь: VxSsetSelect - ActiveX counterpart to 'ssget'
Рабочая ссылка https://web.archive.org/web/20200203...ownload.htm#32
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 13.07.2024 в 21:25. Причина: рабочая ссылка
VVA вне форума  
 
Автор темы   Непрочитано 07.05.2008, 10:51
#7
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


Первый вариант только по протранствам модели/листа, второй пройдет и по блокам (точнее, по описаниям блоков).
Вхождения таблиц в конкретные блоки смысла делать ноль
TwoZero вне форума  
 
Автор темы   Непрочитано 07.05.2008, 10:52
#8
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


ПОСЛЕДНИИ ДВА КОДА И ОТВЕТЫ ПРИНАДЛЕЖАТ КУЛИКУ АЛЕКСЕЮ
TwoZero вне форума  
 
Непрочитано 12.05.2024, 20:56
#9
Ingpro


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


Цитата:
Сообщение от VVA Посмотреть сообщение
VxSsetSelect - ActiveX counterpart to 'ssget'
Ссылка не рабочая, может есть такая же, только рабочая?
Ingpro вне форума  
 
Непрочитано 12.05.2024, 21:47
#10
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Выбери объект "таблица"
Ответ кроется в этих словах, КМК )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 02:10
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Ссылка не рабочая, может есть такая же, только рабочая?
есть такая интересная и бесплатная (в настоящее время) вещь - как веб-архив
Сергей812 вне форума  
 
Непрочитано 13.05.2024, 07:58
#12
name02


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


Это из веб-архива:
Код:
[Выделить все]
 ;MeSsetSelect - ActiveX counterpart to 'ssget'

;
; -- Function MeSsetSelect
; ActiveX counterpart to 'ssget'.
; Copyright:
;   ©2002 MENZI ENGINEERING GmbH, Switzerland
; Arguments [Type]:
;   Nme = Selection set name [STR]
;   Mde = Select mode [INT] 1)
;         Constants:
;         - acSelectionSetWindow 
;         - acSelectionSetCrossing 
;         - acSelectionSetPrevious 
;         - acSelectionSetLast 
;         - acSelectionSetAll 
;   Pt1 = First window corner[list] 2)
;   Pt2 = Next window corner[list]  2)
;   Flt = Dotted pair list '((0 . "Name")...(8 . "Layer"))[list] 3)
; Return [Type]:
;   > New selection set [VLA-OBJECT]
; Notes:
;   1) If nil, SelectOnScreen is used
;   2) For select modes acSelectionSetWindow and acSelectionSetCrossing
;      only, else nil
;   3) Set to nil if not used
;
(defun MeSsetSelect (Nme Mde Pt1 Pt2 Flt / CurSet FltLst FstPnt NxtPnt)
 (setq CurSet (MeSsetMake Nme)
       FstPnt (cond (Pt1 (vlax-3d-point Pt1)) (T nil))
       NxtPnt (cond (Pt2 (vlax-3d-point Pt2)) (T nil))
       FltLst (cond (Flt (MeSsetFilter Flt)) (T nil))
 )
 (if Mde
  (if FltLst
   (vla-select CurSet Mde FstPnt NxtPnt (car FltLst) (cadr FltLst))
   (vla-select CurSet Mde FstPnt NxtPnt)
  )
  (if FltLst
   (vla-SelectOnScreen CurSet (car FltLst) (cadr FltLst))
   (vla-SelectOnScreen CurSet)
  )
 )
 CurSet
)
name02 вне форума  
 
Непрочитано 13.05.2024, 08:38
#13
Кулик Алексей aka kpblc
Moderator

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


Как минимум еще нужна функция MeSsetMake )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2024, 09:38
#14
Ingpro


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Это из веб-архива:
Спасибо!
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
есть такая интересная и бесплатная (в настоящее время) вещь - как веб-архив
Ответ веб-архива:
"Результаты не найдены. Пожалуйста, попробуйте другой поисковый запрос"
Ingpro вне форума  
 
Непрочитано 13.05.2024, 09:42
#15
name02


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


Нужно вводит адрес (URL) страницы
Ищи макросы тут https://web.archive.org/web/20200203...ownload.htm#32
name02 вне форума  
 
Непрочитано 13.05.2024, 09:51
#16
Ingpro


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Нужно вводит адрес (URL) страницы
Ищи макросы тут https://web.archive.org/web/20200203...ownload.htm#32
Благодарю, ссылка рабочая...
Ingpro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Отслеживание таблиц на чертеже [программно]



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор блоков во всем чертеже по маске имени Сыч LISP 16 05.05.2023 18:03
На одной ПК в одном чертеже есть шрифт, а в другом чертеже нет шрифта. Ruslan88 AutoCAD 11 14.06.2020 00:20
Связь таблиц на чертеже s-sergei AutoCAD 12 29.04.2016 14:46
Близко расположенные линии в чертеже сливаются. Wowik53 AutoCAD 50 01.11.2008 21:40