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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Возможно ли полем получить ID таблицы?

Возможно ли полем получить ID таблицы?

Ответ
Поиск в этой теме
Непрочитано 28.06.2019, 15:15 #1
Возможно ли полем получить ID таблицы?
AMDen
 
Инженер-проектировщик
 
Санкт-Петербург
Регистрация: 07.07.2016
Сообщений: 723

Всем Здравствуйте!
Пробую разные варианты связей блоков и таблицы. Стараюсь всё сделать только стандартными средствами автокада.
Таблице в автокаде присваивается уникальный ID. Проблема в том что при каждом открытии файла этот ID автоматически меняется.
Хочется иметь поле, где будет отображаться актуальный ID конкретной таблицы.
Возможно ли получить такое поле?
Просмотров: 4171
 
Непрочитано 28.06.2019, 17:00
#2
Кулик Алексей aka kpblc
Moderator

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


Штатных средств нет. А зачем вообще ID-то видеть?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.06.2019, 17:08
#3
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А зачем вообще ID-то видеть?
Упрощенный пример:
В блоке 10-20 полей настроенных на разные ячейки таблицы (одна строка таблицы). Номер строки таблицы указан в одном из атрибутов этого блока. Блок копируется, меняется номер строки и все поля ссылаются на другую строку. Таких блоков может быть много раскопировано.
Если таблица создается заново или блоки нужно скопировать в другой файл, все поля в блоке нужно перенастраивать на новую таблицу.
Вот и появилась мысль забивать ID таблицы в атрибут этого же блока.
AMDen вне форума  
 
Непрочитано 28.06.2019, 17:33
#4
Сергей812


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


имхо, пришла пора заканчивать велосипедостроение штатными средствами акада и переходить на следующий уровень - программный
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.06.2019, 17:50
#5
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
имхо, пришла пора заканчивать велосипедостроение штатными средствами акада и переходить на следующий уровень - программный
Программный уровень хорош (в определенных объемах используется), но нужно иметь возможность вносить корректировки с любого компьютера, где установлен только автокад.
AMDen вне форума  
 
Непрочитано 28.06.2019, 17:58
#6
Сергей812


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


Цитата:
Сообщение от AMDen Посмотреть сообщение
но нужно иметь возможность вносить корректировки с любого компьютера, где установлен только автокад.
и программную надстройку в акад не загрузить?
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.06.2019, 18:02
#7
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


на чужом компьютере в авральном режиме? не всегда возможно.
AMDen вне форума  
 
Непрочитано 28.06.2019, 18:11
#8
Сергей812


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


в авральном режиме и перебивания десятков полей в блоках чревато теми же ошибками...) Ну штатных возможностей действительно нет для модифицируемых полей:
Цитата:
Сообщение от AMDen Посмотреть сообщение
Блок копируется, меняется номер строки и все поля ссылаются на другую строку.
такого варианта использования разработчикам Аутодеска, наверно, даже в голову не приходило)
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.06.2019, 18:16
#9
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
в авральном режиме и перебивания десятков полей в блоках чревато теми же ошибками...
так в том то и суть чтобы найти решение быстрого перебивания стандартными средствами.
Сейчас в пределах одной фиксированной таблицы это работает.

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
такого варианта использования разработчикам Аутодеска, наверно, даже в голову не приходило)
это реализовано
AMDen вне форума  
 
Непрочитано 28.06.2019, 18:42
#10
Сергей812


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


Цитата:
Сообщение от AMDen Посмотреть сообщение
это реализовано
Не знаю, чего там реализовано (очередное лечение по фотографии). Но "нормальные" поля сохраняют связи при закрытии/открытии чертежа:
Цитата:
Сообщение от AMDen Посмотреть сообщение
Таблице в автокаде присваивается уникальный ID. Проблема в том что при каждом открытии файла этот ID автоматически меняется.
т.е. "внутри" все-таки с хэндлом работают, а не с ObjectId.
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.06.2019, 18:56
#11
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
поля сохраняют связи
не спорю. но ID меняется же.

Создается поле ячейки таблицы, например,
%<\AcExpr (Table(%<\_ObjId 3088424335632>%).T10) \f "%lu2%pr2">% (или как оно отображается в окне формулы Table(3088424335632).T10)
Так вот вместо значения "10" после T вставляется поле, ссылающееся на атрибут этого блока, в который уже прописывается номер нужной строки.
AMDen вне форума  
 
Непрочитано 28.06.2019, 19:29
#12
Сергей812


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


Цитата:
Сообщение от AMDen Посмотреть сообщение
но ID меняется же.
Естественно, меняется. Хэндл - это ключ в БД чертежа (и он не может самопроизвольно меняться, иначе просто нарушится целостность БД). А ObjectId генерируется каждый раз заново при открытии чертежа / создании новых объектов. Поэтому даже программно ObjectId не используют для постоянной идентификации объекта, только в пределах открытой сессии документа. Но по хэндлу программно всегда можно получить актуальный ObjectId. Поэтому если не 100% стандартными средствами - то можно исхитриться...
Сергей812 вне форума  
 
Непрочитано 16.09.2019, 21:53
#13
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Так а в общем, в данной задаче, нужно что бы в таблице появлялись данные из атрибутов или в атрибутах данные из строк таблицы?
Theodor вне форума  
 
Автор темы   Непрочитано 17.09.2019, 09:53
#14
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Theodor Посмотреть сообщение
нужно что бы в таблице появлялись данные из атрибутов или в атрибутах данные из строк таблицы?
в атрибутах данные из строк таблицы
AMDen вне форума  
 
Непрочитано 17.09.2019, 10:45
#15
Сергей812


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


Цитата:
Сообщение от AMDen Посмотреть сообщение
где установлен только автокад.
и не установлен Excel?
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.09.2019, 10:52
#16
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Excel установлен везде. Вопрос и был про связку Excel и Автокада (чистого).
AMDen вне форума  
 
Непрочитано 17.09.2019, 11:00
#17
Сергей812


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


Ну так из экселя программно и стучаться через COM в чистый акад (если он не LT). Или там даже файл экселя нельзя загрузить на рабочее месте? Ну тогда им и скорость работы не нужна, имхо - пускай вручную переправляют)
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.09.2019, 11:03
#18
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
стучаться через COM
это как?
AMDen вне форума  
 
Непрочитано 17.09.2019, 11:24
#19
Сергей812


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


Цитата:
Сообщение от AMDen Посмотреть сообщение
это как?
В коде VBA книги эксель:
Код:
[Выделить все]
  ' Получаем объект акада
  Dim lAcadObj As Object
  Set lAcadObj = GetObject(, "AutoCAD.Application")
  ' Получаем активный документ
  Dim lDocObj As Object
  Set lDocObj = lAcadObj.ActiveDocument
a дальше lDocObj эквивалентен ThisDrawing в примерах по VBA в акаде. VBA в экселе доступен всегда (если криворукие админы фирмы все не заблокировали, конечно) , в акаде надстройка редактора VBA при этом вообще не нужна.
Сергей812 вне форума  
 
Непрочитано 17.09.2019, 20:42
#20
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
В коде VBA книги эксель:
Попутный вопрос, ВБА в экселе нормально проглотит автокады разных версий на разных компьютерах? Не будет отрыгивать страшные слова на ссылки к библиотекам типа missing...?
Theodor вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Возможно ли полем получить ID таблицы?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В ячейке одной таблицы есть текст, как сделать чтоб этот текст отображался в ячейки другой таблицы? Basily AutoCAD 2 05.02.2017 16:46
Считывание значение ячейки таблицы в виде Field в AutoLISP tokhot LISP 9 08.01.2017 17:54
Возможно ли в отчете таблицы СПДС управлять высотой строки (или ее скрытием)? AlexV ПО от CSoft 3 08.07.2016 11:37
Как получить (возможно ли) распределенную нагрузку от сосредоточенной силы- цилиндра для пресса Mykrai Машиностроение 16 10.02.2016 08:03
Возможно ли в автокаде часть таблицы сделать не печатной? Emma AutoCAD 2 16.10.2015 09:43