|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Vla-getboundingbox для нескольких блоков
Регистрация: 13.02.2016
Сообщений: 54
|
||
Просмотров: 3013
|
|
||||
Регистрация: 10.01.2020
Сообщений: 415
|
Если прям надо именно эту функцию использовать:
1 Получаешь набор объектов с помощью (ssget) 2 Организуешь цикл по всем объектам набора 2.1 Каждый из объектов помещаешь в список из одного этого объекта с помощью (list) 2.2 Применяешь функцию - получаешь список координат 2.3 Этот список дописываешь к итоговому списку (cons ...) 3 Конец |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 54
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Через тот же mapcar, к примеру.
Без проверок: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 54
|
Спасибо, Алексей! Вариант рабочий.
Попробовал на двух блоках: Код:
Подскажите еще, пожалуйста, как далее по этому списку пройтись и отрисовать полилинии (по 2 координаты на каждую линию)? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ну, во-первых, скорее всего, понадобится не объединять список точек. Во-вторых, уже получив пары левый-нижний и верхний-правый угол, через тот же mapcar (ну или foreach, на старте не столь уж и важно) - создавать нужные примитивы. Код писать не буду - неинтересно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 54
|
Благодарствую!) еще вопрос для общего развития: как можно оперировать данными координатами (строчки "34" и "35")? Например, чтобы нарисованные линии были еще смещены вверх по Y на 100? И лучше всего, чтобы линии не после смещались, а в процессе работы функции entmakex, т.е. некая корректировка координат "на лету".
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
С такими вопросами лучше в https://forum.dwg.ru/showthread.php?t=22894
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 54
|
Цитата:
----- добавлено через ~4 мин. ----- koMon, спасибо, добрый человек) приятно учиться на примерах. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 54
|
Еще такой интересный вопрос: можно ли получить габариты блока без учета включенного в него текста? Если текст выходит за границы фигуры, то габариты определяются по тексту.
Перенос текста в отдельный слой с последующим его отключением результата не дает. Единственное решение, которое я пока нашел, это удаление текста из блоков. Но можно ли решить данную задачу без удаления? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Чисто теоретически можно. Геморройно только.
Получаешь указатель на описание блока, проходишь по составу, фильтруя элементы, получаешь BoundingBox для каждого элемента, суммируешь. Потом эти точки надо будет трансформировать во вхождение блока (скорее всего, через trans. Хотя могут понадобиться и матрицы, не знаю). И повторяешь операцию вычисления общего BoundingBox по полученным точкам.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Может не сработать, если атрибут отнесен черт знает куда
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
ну да, надежнее или как ты советовал - через определение блока работать, либо применить другой костыль: сделать дубликаты определений блоков без атрибутов, вставляется этот дубликат поверх основного блока (ну и применяются динпараметры изменения размеров блока при необходимости), после измерения габаритов дубликат удаляется.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Если работать лиспом, то это 100% засорять базу чертежа. А пробрасывать все через ObjectDBX тот еще гемор ИМХО.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать "attsync" для одного или нескольких выбранных блоков? | Nike | Программирование | 17 | 21.12.2016 09:15 |
Редактирование одновременно нескольких блоков без атрибутов | Кукурузо_Джон_Горыныч | AutoCAD | 17 | 08.07.2016 11:40 |
Копирование текста из нескольких текстовых блоков | sergey8477 | AutoCAD | 5 | 04.03.2015 12:49 |
Максимальные размеры полистиролбетонных блоков. Перевязка | gdenisn | Конструкции зданий и сооружений | 18 | 20.08.2012 22:34 |
Замена списка блоков соответствующим списком блоков, но другого масштаба | АKA | AutoCAD | 12 | 11.03.2012 06:25 |