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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Выделение объектов в области контура, AutoCAD

Выделение объектов в области контура, AutoCAD

Ответ
Поиск в этой теме
Непрочитано 23.10.2006, 23:58
Выделение объектов в области контура, AutoCAD
Pain
 
Тегусегальпа
Регистрация: 23.10.2006
Сообщений: 2

Народ мне нужна очень "ерьезная вещ"в автокаде))),а именно.....С помощью замкнутой полилинии я должен обвести облясть с энным каличеством ибьектов и при выделении этой полилинии должны выдилится все обьекты попавшие в контуры полилинии.Заранее говорю блок з0десь неподойдет потомучто эта полилиния должна легко изменять свою форму и соответственнол изменяется количество попавших обьектов в нуть этой самой линии и распределение обьектов по слоям тоже неподходит ибо это небыстрее чем расчет вручную :cry: .Может быть необходимо написать специалный скрипт для решения этой задачи.....может кто подскажет ...или это проще зделать в какой либо другой программе.Да и чтобы избавить вас от лышних вопросов сразу говорю все это нужно в области Градостроительства для быстрого подщета планогаммы расселения городов
Просмотров: 46409
 
Непрочитано 14.05.2009, 23:14
#21
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
skkkk, ссылочку-то подправь. Она в имеющемся виде ведет в никуда
Подправил.
Поразительно! Ни одна мелочь не ускользнет от твоего зоркого взгляда. Тебя пора номинировать на звание Модератор века
Offtop: Не пойму,что-то изменилось - мой браузер или форум - не могу теперь изменить название ссылки, а теги не очень-то понимаю. Еще и ник не выходит вставить в сообщение никак

VVA, и вправду хороший вариант для произвольных полилиний, особенно в связке с лиспом для выделения объектов в области контура. Спасибо.
skkkk вне форума  
 
Непрочитано 14.05.2009, 23:36
#22
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
http://www.caduser.ru/forum/index.ph...D=44&TID=44865
Хотя, пожалуй лучше опубликую тут - ссылки иногда теряются:<...>
Попробуй так:
[url=http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=44&TID=44865]Нужный текст[/url]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.09.2013, 17:03
#23
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Один вопрос, похоже, риторический: в самом базовом Автокаде так и нет возможности выбора объектов внутри указанного существующего контура?

Второе: по поводу отличной программы VVA из п.2 в #4, которая выделяет все объекты в указанном контуре.
Один в ней недостаток - на мой взгляд. Или спорный момент. Программа по команде SCWP (выделить объекты внутри контура) не выделяет те тексты и блоки, части которых выходят за пределы контура, но чьи точки вставки попадают в контур.
Да, по команде SCCP (выделить объекты хоть частично попадающие в контур) эти тексты и блоки выделятся. но вместе с ними выделятся и другие элементы, попадающие хоть частично на контур.
Т.е., по-моему, при выделении объектов внутри контура (SCWP) нужно выделять и тексты, блоки, чьи точки вставки попадают в контур. Даже если их общие габариты выходят за его пределы.
АлексЮстасу вне форума  
 
Непрочитано 02.09.2013, 02:33
#24
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
в самом базовом Автокаде так и нет возможности выбора объектов внутри указанного существующего контура?
Насколько мне известно - нет, могу ошибаться.
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
по-моему, при выделении объектов внутри контура (SCWP) нужно выделять и тексты, блоки, чьи точки вставки попадают в контур. Даже если их общие габариты выходят за его пределы.
Наверное, для такой цели логичнее сделать третью команду, которая включит в набор тексты и блоки, не попавшие целиком внутрь контура. Первые две ведь работают полностью по аналогии со штатными рамкой и секрамкой.
skkkk вне форума  
 
Непрочитано 02.09.2013, 04:57
#25
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от skkkk Посмотреть сообщение
Насколько мне известно - нет, могу ошибаться.
Немного мечтаний... В кад-MicroStation отродясь, т.е. с конца 80-х - точно, есть волшебный инструмент Fence. Это не тип элемента, хотя его форму можно редактировать, а отдельная сущность - граница обработки данных. Fence можно задать рамкой, окружностью, им можно начертить произвольный замкнутый контур, назначить им существующий замкнутый контур, текущий экран, границы файла и границы площади, которую ограничивают линии файла вокруг указанной точки. В нем можно выставить режимы: внутри, внутри и пересекает, вырезаемое внутри границей (Clip), снаружи, снаружи и пересекает, вырезаемое снаружи границей (Void-Clip). И набор специальных команд для элементов с учетом Fence: удалить, разбить, перенести, скопировать и пр. В т.ч. перенести или скопировать в другой файл.
Кроме того, практически для всех обычных команд, действий существует опция Use Fence и настройка его режима в каждой из команд. Т.е. Fence - это потенциальное выделение в указанной границе, которое, задав, можно использовать или не использовать в любой момент и для любого нужного действия с элементами, соответствующими этой границе и заданному режиму. При этом, его можно использовать любое количество раз - просто включить опцию Use Fence при нужных действиях и подстраивать режим. Живет Fence до тех пор, пока его не отменят или не назначат другое. Эффективно чрезвычайно.
А рамка, секрамка, выделение/отмена штучные и пр. в MicroStation тоже есть

Цитата:
Сообщение от skkkk Посмотреть сообщение
Наверное, для такой цели логичнее сделать третью команду, которая включит в набор тексты и блоки, не попавшие целиком внутрь контура. Первые две ведь работают полностью по аналогии со штатными рамкой и секрамкой.
В смысле - включит в набор тексты и блоки, чьи точки вставок попали внутрь контура.
Гм... Вы правы - SCWP и SCCP работают именно так, как рамка и секрамка! Я как-то в пылу сражения об этом не подумал
Offtop: Я теоретизировал так:
- во-первых, геометрически блоки и тексты характеризуются в первую очередь точкой вставки.
- во-вторых, если бы существовал выбор не только элементов внутри многоугольника (контура), но и выбор вне контура, то они должны быть обратны друг другу. А это возможно только по точкам вставки. Т.е. при выборе внутри контура тексты и блоки, чьи точки вставки попадают внутрь, выделяются, а при выборе всего снаружи контура - не выделяются. Иначе они не выделятся ни при выборе внутри контура, ни снаружи, что, по-моему, нонсенс.
Но, возможно, я вообще не прав. Кстати, в том же MicroStation выделение делается так же, как в Автокаде - попадающие на контур/Fence тексты и блоки не выделяются ни при Inside, ни при Void
АлексЮстасу вне форума  
 
Непрочитано 25.10.2013, 17:38
#26
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


В целом реализовано выделение внутри/вне контуров с учетом только точек вставки блоков и текстов.
Заодно, еще шесть вариантов выделения по контурам.
И с учетом предварительного выбора.
И выбор сразу по множеству контуров.
И контуры можно собирать из множества отдельных элементов.
И есть выделение элементов на линиях или пересекающих линии с учетом 3D.
Хотя, и пока только под 2010-2012, и контуры не могут быть криволинейными.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 28.10.2013, 18:59
#27
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Такая засада - и лисп SelectContour, и arx Psi_Sel при определенных условиях не отображают на экране выделение элементов. Хотя, в панели свойств пишется, что выбраны элементы.
Происходит так:
1. Обе программы выбирают указанное относительно контура и этот выбор отображается на экране голубыми ручками элементов.
2. Выключаю или замораживаю какой-то слой.
3. Обе программы выбирают указанное относительно контура, но на экране это не отображается. Хотя в панели свойств пишет о числе выбранных элементов.
Сколько раз программы ни вызывай - на экране выбранное не видно.
Если же просто ткнуть мышкой в экран, то выбор отобразится на экране включенными ручками.
Или если после выключения слоя сделать общий вид или regenall, то выбранное SelectContour или Psi_Sel сразу отображается на экране.
В чем проблема в отображении выбранного после выключения слоев?
Проверял на 2012 и 2014.

Последний раз редактировалось АлексЮстасу, 29.10.2013 в 01:12.
АлексЮстасу вне форума  
 
Непрочитано 10.02.2017, 11:16
#28
Миксер


 
Регистрация: 10.01.2006
Сообщений: 144


VVA, или другой кто умеет писать на LISP, сделайте плиз программе SCWP и SCCP возможность выделять несколько контуров ну и соответственно объекты в них. Ооочень нужно. Ну или как -то направьте
Миксер вне форума  
 
Непрочитано 10.02.2017, 19:42
#29
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Миксер Посмотреть сообщение
... сделайте плиз... возможность выделять несколько контуров ну и соответственно объекты в них.
Это, правда, не SCWP и SCCP, но
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
выделение внутри/вне контуров...
И выбор сразу по множеству контуров.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 15.02.2017, 12:49
#30
Миксер


 
Регистрация: 10.01.2006
Сообщений: 144


АлексЮстасу, спасибо. Но мне нужна для более поздних версий. Возможно ее. как то использовать хотя бы в автокад 2015?
Миксер вне форума  
 
Непрочитано 01.11.2024, 06:55
#31
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Миксер Посмотреть сообщение
возможность выделять несколько контуров ну и соответственно объекты в них.
... Шли годы. А воз и ныне там...
Вариант 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, то будут и не выбранные объекты, и ошибочно выбранные. Т.е. такими программами без внимательного ручного контроля и ручной же доработки пользоваться опасно.

Есть ли альтернативы другими, точными инструментами?
Вложения
Тип файла: zip InOutSel.zip (10.8 Кб, 1 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 03.11.2024 в 07:44. Причина: добавил про отсутствие ограничений на форму контуров + ред. чуть подправили программку
АлексЮстасу вне форума  
 
Непрочитано 10.11.2024, 00:22
#32
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


В SelectContour.lsp VVA есть функция получения для сплайна списка точек с заданной степенью подробности его передачи.
Код:
[Выделить все]
  (defun TraceSpline (obj / startparam endparam ncpts inc param
                            fd ptlst pt1 pt2 ang1 ang2 a)
    (setq startparam (vlax-curve-getStartParam obj)
          endparam (vlax-curve-getEndParam obj)
          ncpts (vlax-get obj 'NumberOfControlPoints)
          inc (/ (- endparam startparam) (* ncpts 7))
          param (+ inc startparam)
          fd (vlax-curve-getfirstderiv obj param)
          ptlst (cons (vlax-curve-getStartPoint obj) ptlst))
    (while (< param endparam)
      (setq pt1 (vlax-curve-getPointAtParam obj param)
            ang1 fd
            param (+ param inc)
            pt2 (vlax-curve-getPointAtParam obj param)
            fd (vlax-curve-getfirstderiv obj param)
            ang2 fd
            a (abs (3d_angw1w2 ang1 ang2)))
      (if (> a 0.00218166)(setq ptlst (cons pt1 ptlst))))
    (if (not (equal
          (setq pt1 (vlax-curve-getEndPoint obj)) (car ptlst) 1e-8))
      (setq ptlst (cons pt1 ptlst)))
    (reverse ptlst)) ;end
Степень подробности здесь определяет, предположу, число 7. Избыточные вершины, предположу, убираются по критерию угла, число 0.00218166. (В функции всего два числа )
Но эта степень подробности связывается с количеством вершин в сплайне. При том, что сплайны одинаковой формы могут быть со всего несколькими вершинами, а могут быть и с сотнями вершин.

Для управления степенью подробности нужен параметр, связанный с величиной отклонения сплайна от линии между соседними полученными точками.
Если не прямой, то хотя бы косвенный - минимальное расстояние между точками. (Т.к. если меньше это расстояние - меньше возможное отклонение).
Хорошо бы сам мастер эту функцию так изменил. Сохранив прореживание избыточных точек.
Или другие программисты...

Поскольку я не программист, то задам еще такой вопрос: в коде есть строка
Код:
[Выделить все]
pt2 (vlax-curve-getPointAtParam obj param)
Это pt2 в этой функции встречается только здесь. Это атавизм или что-то сакральное?
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 10.11.2024 в 04:19. Причина: дополнил про избыточные точки, вопрос про pt2
АлексЮстасу вне форума  
 
Непрочитано 18.11.2024, 04:21
#33
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Для управления степенью подробности нужен параметр, связанный с величиной отклонения сплайна от линии между соседними полученными точками.
Вроде бы удалось сделать с учетом задаваемой точности - величины линейного отклонения.
Пришлось переделать и обработку окружностей-эллипсов, и дуговых сегментов, и полностью - сплайнов.
Со сплайнами пока по-настоящему не получается. На сплайнах длинных и с большим количеством вершин все очень медленно. На крутых поворотах точность падает раза в два, минимум. Сделать точнее можно, но делать будет совсем долго. И может вообще отказаться делать или появятся "самоперересечения", которых на самом деле нет, или т.п.

Добавили выбор относительно всех указанных линий: на линиях, на и пересекаемые линиями, вне линий.
Вложения
Тип файла: zip InOutOnSel_ac_v2.zip (13.9 Кб, 1 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 18.11.2024 в 18:13. Причина: правка программки, еще раз правка
АлексЮстасу вне форума  
 
Непрочитано 20.11.2024, 19:01
#34
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


К оч. грубой точности выбора в 0.001 добавились еще поразительные открытия о штатном выборе _SELECT, ssget - учитывается размер точек в PDSIZE, ширина линий и габариты типов линий.
Т.е. анализ идет не только координат, но и способа отображения объектов на экране. Если изображение точек или линий с габаритным типом выходит за границу контура выбора, то эти объекты не выберутся. А если при выборе учитывать заданные размеры отображения точек и ширину от оси типов линий, то нужно ожидать, что выберутся и ненужные объекты.
Это CAD или Paint?..

Версия 3, лучше учитывающая выбор объектов с точками вставки: блоков, надписей, размеров.
И для удобства и ускорения добавлено окно:
Миниатюры
Нажмите на изображение для увеличения
Название: Окно_InOutOnSel.png
Просмотров: 8
Размер:	10.3 Кб
ID:	265668  
Вложения
Тип файла: zip InOutOnSel_ac_v3.zip (19.5 Кб, 3 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 28.11.2024 в 06:09. Причина: новая версия с учетом точек вставки объектов и с окном, v3
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Выделение объектов в области контура, AutoCAD