|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Выделение объектов в области контура, AutoCAD
Тегусегальпа
Регистрация: 23.10.2006
Сообщений: 2
|
||
Просмотров: 46603
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
А если попробовать группы?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>PAIN Пробуй
Код:
Код:
Код:
***Добавлено*** 2011-03-14 Фрагмент чертежа по прямоугольной, круглой или ломаной границе Команды: SCWP; SCCP Выделение объектов путем указания существующего контура. В качестве контура могут выступать сплайны, полилинии, дуги, круги, элипсы. Контур должен быть выпуклым. Код:
Последний раз редактировалось VVA, 27.06.2012 в 11:40. Причина: Добавил dtr |
|||
![]() |
|
||||
Регистрация: 23.10.2006
Тегусегальпа
Сообщений: 2
|
Большое спасибо что откликнулись))!!
Группы здесь скорее всего не подойдут потому-то они постоянно могут изменятся. В качестве примера вылежал фрагмент расселения, на карте 2 зоны пересекающие друг друга…..и мне нужна такая вещ…При выделении синей или зеленой полилинии должны выделятся ТОЛЬКО все красные точки попавшие в ее контуры. про wpolygon я знаю это немного другое мне нужна именно линия отображающаяся на чертеже а не многоугольный курсор, причем я должен при желании изменить форму или переместить эту линию и соответственно точки попавшие в контур станут другие. Незнаю на сколько всё это решаемо, жду ваших комментариев. Заранее спасибо) [ATTACH]1161695004.jpg[/ATTACH] |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Судя по картинке это не точки а блоки. Попробуйте этот лиспик. Сначала указываете граничную полилинию, потом образцовый блок. Если надо действительно точки то переделать несложно.
Код:
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Тут есть рабочий лисп на эту тему от VVA (корректно второе издание, переработанное и дополненное
![]() Мне, например, надо выделять объекты в области контура (замкнутого, разумеется) точь-в-точь, т.е., именно то, что находится внутри контура, ни больше ни меньше... Лисп же с этой ссылки делает чуть не так. Команда SCWP выделяет только объекты, целиком попавшие в контур, при этом игнорируются те, что находятся по обе стороны контура. А команда SCCP выделяет все те, хотя бы часть которых попала в контур. Лиспом, точнее командой BreakTouching отсюда я разрываю все граничащие с контуром линии. Потом делаю Offset (Подобие) секущего контура внутрь на 0,1мм с удалением исходного секущего контура, и выделяю то, что внутри контура командой SCCP, либо наоборот, Offset наружу и командой SCWP. Подобие нужно потому, как я понял, что наш секущий контур после разрыва всех линий касается этих линий как внутри, так и снаружи себя, что нежелательно в моем случае при использовании ни SCCP, ни SCWP. В принципе, это выход, но очень много манипуляций. Может, можно как-то выбирать объекты внутри контура с их разрывом одной командой? P.S. Изначально хотел, просто донести информацию до кого-то, кому это может пригодиться, но если кто подскажет, как упростить процесс, буду благодарен, хотя и так труда особого не составляет. Вчера коллегу удивил, вырезав из большой карты круглый фрагмент за пятнадцать секунд..... Она break'ом все линии рвала, потом выделяла по одной ![]() Последний раз редактировалось skkkk, 17.01.2014 в 18:37. Причина: Подправил ссылку |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
skkkk, Добавил в #4 dtr (так, для порядку). SCWP и SCCP лучше (обрабатывают дуговые сегменты). Ты все правильно понял и правильно делаешь. В BreakTouching, по-моему, можно вызвать разрыв функцией, но это нужно смотреть.
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 14.03.2011 в 19:40. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Это самое сложное, проще наверное попросить пользователя "ткнуть" мышкой. Как вариант - преобразовать в регион и взять центр тяжести.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Фрагмент чертежа по прямоуг. или кругл. границе
Хотя, пожалуй лучше опубликую тут - ссылки иногда теряются: Код:
Последний раз редактировалось skkkk, 14.05.2009 в 23:46. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
skkkk, ссылочку-то подправь. Она в имеющемся виде ведет в никуда
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Есть еще хороший лисп CookieCutter2 - more fun with ET extrim
Описание Цитата:
Так как там требуется регистрация, то лисп тоже размещу здесь PS. Еще версия http://forum.dwg.ru/showthread.php?t=42985
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 29.03.2012 в 09:39. Причина: Орфография |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Поразительно! Ни одна мелочь не ускользнет от твоего зоркого взгляда. Тебя пора номинировать на звание Модератор века ![]() Offtop: Не пойму,что-то изменилось - мой браузер или форум - не могу теперь изменить название ссылки, а теги не очень-то понимаю. Еще и ник не выходит вставить в сообщение никак VVA, и вправду хороший вариант для произвольных полилиний, особенно в связке с лиспом для выделения объектов в области контура. Спасибо. ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Цитата:
[url=http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=44&TID=44865]Нужный текст[/url]
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Один вопрос, похоже, риторический: в самом базовом Автокаде так и нет возможности выбора объектов внутри указанного существующего контура?
Второе: по поводу отличной программы VVA из п.2 в #4, которая выделяет все объекты в указанном контуре. Один в ней недостаток - на мой взгляд. Или спорный момент. Программа по команде SCWP (выделить объекты внутри контура) не выделяет те тексты и блоки, части которых выходят за пределы контура, но чьи точки вставки попадают в контур. Да, по команде SCCP (выделить объекты хоть частично попадающие в контур) эти тексты и блоки выделятся. но вместе с ними выделятся и другие элементы, попадающие хоть частично на контур. Т.е., по-моему, при выделении объектов внутри контура (SCWP) нужно выделять и тексты, блоки, чьи точки вставки попадают в контур. Даже если их общие габариты выходят за его пределы. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Наверное, для такой цели логичнее сделать третью команду, которая включит в набор тексты и блоки, не попавшие целиком внутрь контура. Первые две ведь работают полностью по аналогии со штатными рамкой и секрамкой. |
|||
![]() |
|
||||
Немного мечтаний... В кад-MicroStation отродясь, т.е. с конца 80-х - точно, есть волшебный инструмент Fence. Это не тип элемента, хотя его форму можно редактировать, а отдельная сущность - граница обработки данных. Fence можно задать рамкой, окружностью, им можно начертить произвольный замкнутый контур, назначить им существующий замкнутый контур, текущий экран, границы файла и границы площади, которую ограничивают линии файла вокруг указанной точки. В нем можно выставить режимы: внутри, внутри и пересекает, вырезаемое внутри границей (Clip), снаружи, снаружи и пересекает, вырезаемое снаружи границей (Void-Clip). И набор специальных команд для элементов с учетом Fence: удалить, разбить, перенести, скопировать и пр. В т.ч. перенести или скопировать в другой файл.
Кроме того, практически для всех обычных команд, действий существует опция Use Fence и настройка его режима в каждой из команд. Т.е. Fence - это потенциальное выделение в указанной границе, которое, задав, можно использовать или не использовать в любой момент и для любого нужного действия с элементами, соответствующими этой границе и заданному режиму. При этом, его можно использовать любое количество раз - просто включить опцию Use Fence при нужных действиях и подстраивать режим. Живет Fence до тех пор, пока его не отменят или не назначат другое. Эффективно чрезвычайно. А рамка, секрамка, выделение/отмена штучные и пр. в MicroStation тоже есть ![]() Цитата:
Гм... Вы правы - SCWP и SCCP работают именно так, как рамка и секрамка! Я как-то в пылу сражения об этом не подумал ![]() Offtop: Я теоретизировал так: - во-первых, геометрически блоки и тексты характеризуются в первую очередь точкой вставки. - во-вторых, если бы существовал выбор не только элементов внутри многоугольника (контура), но и выбор вне контура, то они должны быть обратны друг другу. А это возможно только по точкам вставки. Т.е. при выборе внутри контура тексты и блоки, чьи точки вставки попадают внутрь, выделяются, а при выборе всего снаружи контура - не выделяются. Иначе они не выделятся ни при выборе внутри контура, ни снаружи, что, по-моему, нонсенс. Но, возможно, я вообще не прав. Кстати, в том же MicroStation выделение делается так же, как в Автокаде - попадающие на контур/Fence тексты и блоки не выделяются ни при Inside, ни при Void ![]() |
||||
![]() |
|
||||
В целом реализовано выделение внутри/вне контуров с учетом только точек вставки блоков и текстов.
Заодно, еще шесть вариантов выделения по контурам. И с учетом предварительного выбора. И выбор сразу по множеству контуров. И контуры можно собирать из множества отдельных элементов. И есть выделение элементов на линиях или пересекающих линии с учетом 3D. Хотя, и пока только под 2010-2012, и контуры не могут быть криволинейными.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Такая засада - и лисп SelectContour, и arx Psi_Sel при определенных условиях не отображают на экране выделение элементов. Хотя, в панели свойств пишется, что выбраны элементы.
Происходит так: 1. Обе программы выбирают указанное относительно контура и этот выбор отображается на экране голубыми ручками элементов. 2. Выключаю или замораживаю какой-то слой. 3. Обе программы выбирают указанное относительно контура, но на экране это не отображается. Хотя в панели свойств пишет о числе выбранных элементов. Сколько раз программы ни вызывай - на экране выбранное не видно. Если же просто ткнуть мышкой в экран, то выбор отобразится на экране включенными ручками. Или если после выключения слоя сделать общий вид или regenall, то выбранное SelectContour или Psi_Sel сразу отображается на экране. В чем проблема в отображении выбранного после выключения слоев? Проверял на 2012 и 2014. Последний раз редактировалось АлексЮстасу, 29.10.2013 в 01:12. |
||||
![]() |
|
||||
Цитата:
Цитата:
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Цитата:
Вариант InOutSel с применением многих функций VVA (да будет ему всяко хорошо!) из его же оч. хорошей не раз в этой теме упомянутой SelectContour.lsp. Вариант на lisp, т.е. должен бы работать во всех AutoCAD. Благодаря функциям VVA, контуры выбора могут быть любыми типами полилиний, сплайнами, окружностями, дугами, эллипсами. Контуры могут быть разомкнутыми. Нет ограничений на выпуклость контуров выбора. Контуры могут быть и вогнутыми, и разветвленными. Отличия: 1. Вроде бы, если предварительное увеличение было не до нанометров, то не требуется, чтобы контуры выбора были полностью видны на экране. И вообще видны. 2. 6 способов выбора: Внутри (аналог _WP), внутри и касаются, внутри и пересекаются (аналог _CP), извне, извне и касаются, извне и пересекаются. 3. Выбор производится сразу для всех указанных контуров. Предварительный или последующий выбор нужных контуров. 4. Выбор производится для указанных объектов. Enter означает - для всех. Вариант создавался в первую очередь для учета касаний объектов границы - штатный выбор почти всегда игнорирует касающиеся-примыкающие объекты. Как игнорируют и другие известные мне программы выбора. Конечно, вариант создавался и для множества контуров выбора, и для указания нужного множества объектов, из которых выбирать. Надеюсь, будет полезен. О странном. Выяснилось, что в AutoCAD точность выбора и штатной _SELECT (ВЫБРАТЬ), и функций lisp ssget и vla-selectbypolygon всего лишь 0.001. А на этих функциях написаны все lisp выбора, в т.ч. и SelectContour.lsp, да и остальные. И наш вариант так же. Поэтому, если в dwg координаты (которые внутри хранятся до 12 знаков, кажется) не округлены хотя бы до 0.001, то будут и не выбранные объекты, и ошибочно выбранные. Т.е. такими программами без внимательного ручного контроля и ручной же доработки пользоваться опасно. Есть ли альтернативы другими, точными инструментами?
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 03.11.2024 в 07:44. Причина: добавил про отсутствие ограничений на форму контуров + ред. чуть подправили программку |
||||
![]() |
|
||||
В SelectContour.lsp VVA есть функция получения для сплайна списка точек с заданной степенью подробности его передачи.
Код:
![]() Но эта степень подробности связывается с количеством вершин в сплайне. При том, что сплайны одинаковой формы могут быть со всего несколькими вершинами, а могут быть и с сотнями вершин. Для управления степенью подробности нужен параметр, связанный с величиной отклонения сплайна от линии между соседними полученными точками. Если не прямой, то хотя бы косвенный - минимальное расстояние между точками. (Т.к. если меньше это расстояние - меньше возможное отклонение). Хорошо бы сам мастер эту функцию так изменил. Сохранив прореживание избыточных точек. Или другие программисты... Поскольку я не программист, то задам еще такой вопрос: в коде есть строка Код:
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 10.11.2024 в 04:19. Причина: дополнил про избыточные точки, вопрос про pt2 |
||||
![]() |
|
||||
Цитата:
Пришлось переделать и обработку окружностей-эллипсов, и дуговых сегментов, и полностью - сплайнов. Со сплайнами пока по-настоящему не получается. На сплайнах длинных и с большим количеством вершин все очень медленно. На крутых поворотах точность падает раза в два, минимум. Сделать точнее можно, но делать будет совсем долго. И может вообще отказаться делать или появятся "самоперересечения", которых на самом деле нет, или т.п. Добавили выбор относительно всех указанных линий: на линиях, на и пересекаемые линиями, вне линий.
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 18.11.2024 в 18:13. Причина: правка программки, еще раз правка |
||||
![]() |
|
||||
К оч. грубой точности выбора в 0.001 добавились еще поразительные открытия о штатном выборе _SELECT, ssget - учитывается размер точек в PDSIZE, ширина линий и габариты типов линий.
Т.е. анализ идет не только координат, но и способа отображения объектов на экране. Если изображение точек или линий с габаритным типом выходит за границу контура выбора, то эти объекты не выберутся. А если при выборе учитывать заданные размеры отображения точек и ширину от оси типов линий, то нужно ожидать, что выберутся и ненужные объекты. Это CAD или Paint?.. Версия 3, лучше учитывающая выбор объектов с точками вставки: блоков, надписей, размеров. И для удобства и ускорения добавлено окно:
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 28.11.2024 в 06:09. Причина: новая версия с учетом точек вставки объектов и с окном, v3 |
||||
![]() |