|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Поразительно! Ни одна мелочь не ускользнет от твоего зоркого взгляда. Тебя пора номинировать на звание Модератор века ![]() Offtop: Не пойму,что-то изменилось - мой браузер или форум - не могу теперь изменить название ссылки, а теги не очень-то понимаю. Еще и ник не выходит вставить в сообщение никак VVA, и вправду хороший вариант для произвольных полилиний, особенно в связке с лиспом для выделения объектов в области контура. Спасибо. ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Цитата:
[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 |
||||
![]() |