|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Vla-getboundingbox для нескольких блоков
Регистрация: 13.02.2016
Сообщений: 64
|
||
Просмотров: 3128
|
|
||||
Регистрация: 10.01.2020
Сообщений: 421
|
Если прям надо именно эту функцию использовать:
1 Получаешь набор объектов с помощью (ssget) 2 Организуешь цикл по всем объектам набора 2.1 Каждый из объектов помещаешь в список из одного этого объекта с помощью (list) 2.2 Применяешь функцию - получаешь список координат 2.3 Этот список дописываешь к итоговому списку (cons ...) 3 Конец |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Через тот же mapcar, к примеру.
Без проверок: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
Спасибо, Алексей! Вариант рабочий.
Попробовал на двух блоках: Код:
Подскажите еще, пожалуйста, как далее по этому списку пройтись и отрисовать полилинии (по 2 координаты на каждую линию)? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Ну, во-первых, скорее всего, понадобится не объединять список точек. Во-вторых, уже получив пары левый-нижний и верхний-правый угол, через тот же mapcar (ну или foreach, на старте не столь уж и важно) - создавать нужные примитивы. Код писать не буду - неинтересно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
Благодарствую!) еще вопрос для общего развития: как можно оперировать данными координатами (строчки "34" и "35")? Например, чтобы нарисованные линии были еще смещены вверх по Y на 100? И лучше всего, чтобы линии не после смещались, а в процессе работы функции entmakex, т.е. некая корректировка координат "на лету".
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
С такими вопросами лучше в https://forum.dwg.ru/showthread.php?t=22894
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
Цитата:
----- добавлено через ~4 мин. ----- koMon, спасибо, добрый человек) приятно учиться на примерах. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
Еще такой интересный вопрос: можно ли получить габариты блока без учета включенного в него текста? Если текст выходит за границы фигуры, то габариты определяются по тексту.
Перенос текста в отдельный слой с последующим его отключением результата не дает. Единственное решение, которое я пока нашел, это удаление текста из блоков. Но можно ли решить данную задачу без удаления? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Чисто теоретически можно. Геморройно только.
Получаешь указатель на описание блока, проходишь по составу, фильтруя элементы, получаешь BoundingBox для каждого элемента, суммируешь. Потом эти точки надо будет трансформировать во вхождение блока (скорее всего, через trans. Хотя могут понадобиться и матрицы, не знаю). И повторяешь операцию вычисления общего BoundingBox по полученным точкам.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Может не сработать, если атрибут отнесен черт знает куда
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
ну да, надежнее или как ты советовал - через определение блока работать, либо применить другой костыль: сделать дубликаты определений блоков без атрибутов, вставляется этот дубликат поверх основного блока (ну и применяются динпараметры изменения размеров блока при необходимости), после измерения габаритов дубликат удаляется.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Если работать лиспом, то это 100% засорять базу чертежа. А пробрасывать все через ObjectDBX тот еще гемор ИМХО.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Но хендлы будут заняты, насколько я понимаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 421
|
Цитата:
Обращаю внимание, что габаритный размер определяется для ОПИСАНИЯ блока, а не вхождения (вставки) блока в чертеже! Т.е. при определении габарита вставки блока нужно еще дополнительно учесть масштаб. Ну и поворот блока тоже надо как-то учитывать Я делал эту программу для автоматической печати чертежей, поэтому у меня вопрос про учет поворота блоков не стоял Код:
Последний раз редактировалось name02, 17.07.2024 в 14:04. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
|
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
Вроде раскурил)) Спасибо большое, всё замечательно. У меня еще вот такой вопрос.
Из кода в п. #12 я мог взять координаты и далее использовать их как захочу, присвоив их переменным minp и maxp: Код:
Как по такому же принципу можно взять координаты вхождения блока (уже транспонированные) и использовать их? ----- добавлено через ~13 мин. ----- Ну, это не критично. В моем случае все блоки с углом поворота 0 градусов. Последний раз редактировалось Gretech89, 18.07.2024 в 12:16. |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
koMon, появилась еще необходимость после разметки блоков полилиниями сместить все блоки в сторону по следующему принципу:
1. Первый блок переместить в точку 0,0; 2) Второй и последующие расставить с шагом 1000 относительно друг друга. См. рис. Я так понимаю без цикла тут не обойтись. Все блоки разные по размеру и нужно их обрабатывать по отдельности. Т.е. положение каждого блока будет зависеть от положения (размера) предыдущего. Код я дополнил, как я это вижу (строчки 60-73). Помогите, пожалуйста, с циклом. Или может это реализуется как-то по-иному? Код:
Последний раз редактировалось Gretech89, 17.09.2024 в 17:19. Причина: Подгрузил рисунок |
|||
![]() |
|
||||
Регистрация: 13.02.2016
Сообщений: 64
|
koMon, при выделении блоков рамкой какие-то блоки могут построиться в обратном порядке, какие-то в хаотичном, относительно их первоначального положения в модели. Например, блоки с именами "01", "02", "03" могут построиться в линию в порядке "03", "02", "01". Какова логика их расстановки? В идеале хотелось бы, чтобы блоки расстанавливались в таком же порядке, как они и стояли в первоначальном положении. Либо по возрастанию в соответствии с их именами ("01", "02", "03").
|
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать "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 |