|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Высота 3d тела с динамической связью из Excel
Регистрация: 19.05.2020
Сообщений: 18
|
||
Просмотров: 8489
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Штатными средствами, по-моему, невозможно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
C#, lisp, c++, VBA - но это уже программирование, причем не самое элементарное, как мне кажется. По крайней мере по состоянию на 1 января и половину десятого вечера
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,107
|
|
|||
![]() |
|
||||
Регистрация: 19.05.2020
Сообщений: 18
|
Спасибо за ответы в это не легкое время) Буду искать другие средства решения своей задачи.
----- добавлено через ~5 мин. ----- Цитата:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
по событию листа экселя изменения/пересчета ячеек подключиться по COM к акаду из экселя, создать новый Acad3DSolid, вставить его по координатам старого, старый удалить. Если так охота использовать эксель как интерфейсно-расчетный модуль)
|
|||
![]() |
|
||||
Регистрация: 19.05.2020
Сообщений: 18
|
От экселя не уйти, это данность. Ячеек более 1000, нужно получить динамическую связь.
|
|||
![]() |
|
||||
Регистрация: 19.05.2020
Сообщений: 18
|
При изменении значения в ячейке (значение это высота прямоугольника), перестраиваются все прямоугольники у которых связь с данной ячейкой.
----- добавлено через ~4 мин. ----- С помощью вашего способа можно настроить такую связь? |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
видимо, COM-интерфейс в плане работы с 3D урезан в акаде - поэтому, имхо, лучше перейти на работу изнутри самого акада
но при этом придется извращаться, чтобы получить события изменения содержимого из экселя - читал, что такое возможно, но даже не стал заморачиваться в свое время. Хотя можно поставить, например, тот же VSTO бесплатный (надстройка к офису для разработки приложений на .Net) и через те же pipe связать попробовать. Или в VBA через сеть. В общем подвиги велосипедостроения ради сохранения интерфейса/расчетов в эксель) |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
тут бы еще вспомнить за чей счёт сей банкет... написание граблей и велосипедов дело затратное по времени и стоимость этого решения... дальше все всё и так понимают... В любом случае, вопрос задан в теме Автокад и ответ - штатных средств для такого нет |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
люди на VBA пытались и pipe использовать (зачем "колыхать" всю сетевую подсистему, включая антивирусы и фаерволы - для пересылки нескольких байт внутри компа?). Но не срослось у них там чего то - поэтому и предложил VSTO выше - там можно и на события экселя подвесится, и стандартные классы для "трубок" использовать. |
|||
![]() |
|
||||
конструктор Регистрация: 14.08.2014
Псков
Сообщений: 7,326
|
Цитата:
Цитата:
На вба несложно передать параметры для динамического блока. Кроме переменных, надо задать точку вставки. Незнаю, в чем проблема с 3д, как альтернатива - плоские примитивы. |
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Вариант решения.
Несложная часть. 1. Делаем параметрический объект, состоящий из полилинии (квадрат) и команды выдавливания на высоту (H). 2. Связываем параметр высоты выдавливания (H) со значением некоторой экселевской ячейки на каком-то листе в каком-то файле. Сложная часть: как узнать, что нужно обновить параметрический объект, если ячейка с высотой выдавливания (H) в файле exel была изменена и пора пересоздать бокс с новой высотой? Можно, конечно, сделать процедуру принудительного обновления объекта, чтобы по нажатию на некоторую кнопку можно было перегенерировать выбранные объекты. Но это как-то не красиво. Последний раз редактировалось nickname2019, 05.01.2021 в 10:58. |
|||
![]() |
|
||||
Регистрация: 19.05.2020
Сообщений: 18
|
----- добавлено через ~11 мин. -----
Если вы мне расскажите эту часть, а Сергей812, расскажет как настроить обновление по изменению события на листе, то я так понимаю, у меня все получится) Последний раз редактировалось Djo, 11.01.2021 в 15:31. |
|||
![]() |
|
||||
Регистрация: 06.04.2015
Сообщений: 2,754
|
Цитата:
----- добавлено через ~3 мин. ----- Вообще ничего особо сложного в этом не видится. Думаю можно одним VBA экселя обойтись. |
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Цитата:
Но мне больше нравиться связать акадовский объект с ячейкой в экселе. Может, хранить время сохранения экселевского файла в объекте и при несовпадении времени модификации объекта и экселевского файла обновлять объект? |
|||
![]() |
|
||||
Регистрация: 06.04.2015
Сообщений: 2,754
|
|
|||
![]() |
|
||||
конструктор Регистрация: 14.08.2014
Псков
Сообщений: 7,326
|
|
|||
![]() |
|
||||
Регистрация: 06.04.2015
Сообщений: 2,754
|
Цитата:
Цитата:
Можно, только сомневаюсь, что высота выдавливания хранится в объекте твердого тела. |
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Цитата:
"If you need to save an object identifier out to an external file (that is, not a DWG or DXF file), then you cannot use object IDs. The actual value in the object ID (its a memory address) is not the same from session to session." Если вам нужно сохранить идентификатор объекта во внешний файл (то есть не в файл DWG или DXF), то вы не можете использовать идентификаторы объектов. Фактическое значение в идентификаторе объекта (его адрес памяти) не является одинаковым от сеанса к сеансу. "If you are working with multiple drawing files, then you need to save the drawing file name as well as the handle, since handle values are not unique across multiple drawings." Если вы работаете с несколькими файлами чертежей, то вам необходимо сохранить имя файла чертежа, а также дескриптор (handle, а не Id), поскольку значения дескриптора не являются уникальными для нескольких чертежей. P.S. Можно сохранять ID объекта и это будет какое-то время работать, пока случайным образом он не поменяется - тогда будет непонятный крах акада, который трудно будет выявить. Цитата:
Последний раз редактировалось nickname2019, 11.01.2021 в 16:10. |
|||
![]() |
|
||||
конструктор Регистрация: 14.08.2014
Псков
Сообщений: 7,326
|
Djo, посмотрите как пример связи - ссылку (xls-dwg, dvb). Это не эталон конечно, подглючивает сильно, но может быть поможет выбрать какой-либо путь. ссылка
|
|||
![]() |
|
||||
Регистрация: 06.04.2015
Сообщений: 2,754
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Поправил свой прошлый ответ подробнее #30. Имхо, самый оптимальный путь - мутить код в акаде и привязываться с экселю.
|
|||
![]() |
|
||||
Регистрация: 06.04.2015
Сообщений: 2,754
|
|
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Цитата:
Могу связать с параметрами из текстового файла, но это не айс. И автообновление не будет работать тоже. |
|||
![]() |
|
||||
Регистрация: 06.04.2015
Сообщений: 2,754
|
Цитата:
Может просто плагин с GUI по работе с расширенными данными для пользователя написать? |
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Цитата:
Меня не устраивает стандартный функционал работы с динамическими блоками, поэтому я решил все под себя переделать (чтобы можно было вытягивать полилинии внутри динамических блоков и не только). Пока работает плохо. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Не в курсе, как организовывать связь с Excel (не пользовался), но алгоритм для када накидать можно, по-моему, и довольно простой.
Есть блок-кубик (в общем случае 1х1х1), простой, не динамический. У всех блоков заданы масштабы X-Y-Z. Точки вставки тоже есть, соответственно. И угол поворота, если надо. Идентификатор в таком случае не важен, нужно только то, о чем уже сказано. Меняете масштаб по Z в екселе, через организацию связи находятся соответствующие блоки, модифицируются, а новые солиды (если нужны именно они) тут построить по приведенным и найденным данным вполне можно (лисп и т.п.). Именно новые, старые удаляются. Думаю, и с полилиниями и их высотами примерно то же самое можно сделать. Как-то так. |
|||
![]() |
|
||||
Регистрация: 18.11.2019
Сообщений: 1,705
|
Цитата:
Большое количество динамических блоков в чертеже = ужасные тормоза (так было лет пять назад, проверять есть ли тормоза но новых версиях не хочу). Я с динамическими блоками завязал. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как построить 2D разрез 3D тела в пространстве модели в AutoCAD2018 mechanical? | thevsh | Вертикальные решения на базе AutoCAD | 3 | 25.05.2018 10:56 |
Не могу изменить форму 3d тела. | evilmaxx | AutoCAD | 3 | 15.09.2013 16:55 |
Не получается объединить два простых 3D тела | Kandebr | AutoCAD | 4 | 30.03.2011 11:01 |
LISP. Вывод объема 3D тела. | Scorpio_1986 | LISP | 3 | 27.02.2010 13:02 |
Нагрузки на 3D тела в SCADe как прикладывать | Comunikabel | SCAD | 20 | 20.10.2006 07:27 |