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

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

Новые команды для работы с полилинией

Ответ
Поиск в этой теме
Непрочитано 14.09.2006, 13:30 4 |
Новые команды для работы с полилинией
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,991

Данный набор программ является коллективным продуктом участников форумов autocad.ru и dwg.ru с моими доработками.
Захотелось собрать все программы для работы с полилиниями воедино и оформить как полагается.

=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
PL-JOIN -Объединение выбранных полилиний
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-JOIN3D -Объединение 3D полилиний
PL-L2A -Замена линейного сегмента в полилинии дуговым сегментом.
PL-A2L -Замена дугового сегмента в полилинии линейным сегментом.
PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество
сегментов или через указанное расстояние
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество
сегментов или через указанное расстояние
PL-VxAdd -Добавляет новую вершину к полилинии
ENTREVS -Реверс объекта
ENTREV -Реверс объектов (множественный выбор)
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
PL-VxDel -Удаление выбранной вершины
pl-VxOpt -Удаление совпадающих вершин из полилинии
PL-NoArc -Аппроксимация дуговых сегментов полилинии
PL-Clone -Построение полилинии путем копирования ее сегментов
PL-VxMove -Перемещение вершин полилинии
PL-Vx1 -Изменение начала полилинии
ConvTo2d -Преобразование линейных объектов в 2D полилинии
ConvTo3d -Преобразование линейных объектов в 3D полилинии
MPL -Построение средней линии Более продвинутая версия Rollin_Ball.lsp Find MidBoundary between two polylines.
R3P -Прямоугольгик по 3-м точкам
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Реверс дуговых сегментов полилинии из #79
На дуговых сегментах полилинии тип линий может быть "вверх тормашками", причем реверс не помогает. Этот артефакт можно побороть, если в полилинии включить "генерацию типа линий".

Панели, лисп и инструкции здесь http://dwg.ru/dnl/607
Иконки для темной темы здесь
Обсуждаем, критикуем, предлагаем

Миниатюры
Нажмите на изображение для увеличения
Название: plrevers.jpg
Просмотров: 15428
Размер:	30.3 Кб
ID:	21079  


Последний раз редактировалось VVA, 08.09.2023 в 13:25. Причина: ссылка на иконки для темной темы
Просмотров: 369089
 
Автор темы   Непрочитано 17.07.2014, 15:44
#441
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Скачал еще раз с сайта. Грузил и lisp и fas. Автокад 2013 русский

Цитата:
Команда:
Команда: (LOAD "D:/!!!/Новые команды для работы с полилинией dnl607/Pltools/LISP/pltools.lsp")
---- Pltools loading ... ok
=========== Доступные команды PLTOOLS=================
Редакция 23.06.2014
PL-JOIN -Объединение выбранных полилиний
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с указанными полилиниями, линиями, дугами
PL-JOIN3D -Объединение 3D полилиний
PL-A2L -Замена линейного сегмента в полилинии дуговым сегментом.
PL-L2A -Замена дугового сегмента в полилинии линейным сегментом.
PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество
сегментов или через указанное расстояние
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество
сегментов или через указанное расстояние
PL-VxAdd -Добавляет новую вершину к полилинии
ENTREVS -Реверс объекта
ENTREV -Реверс объектов (множественный выбор)
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
PL-VxDel -Удаление выбранной вершины
pl-VxOpt -Удаление совпадающих вершин из полилинии
PL-NoArc -Аппроксимация дуговых сегментов полилинии
PL-Clone -Построение полилинии путем копирования ее сегментов
PL-VxMove -Перемещение вершин полилинии (командная строка)
PL-Vx1 -Изменение начала полилинии (командная строка)
ConvTo2d -Преобразование линейных объектов в 2D полилинии
ConvTo3d -Преобразование линейных объектов в 3D полилинии
MPL -Построение средней линии
R3P -Прямоугольгик по 3-м точкам
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Команда: PL-VFI

Укажите допуск <0.001 >:
Укажите режущие кромки (POLYLINE LINE ARC CIRCLE)
Выберите объекты: Противоположный угол: найдено: 13

Выберите объекты:
Режим продолжения кромки [С продолжением/Без продолжения] <Без продолжения>:
Выберите полилинии для вставки вершин
Выберите объекты: найдено: 1

Выберите объекты:
Добавлено 12 вершин в 1 полилиний

Команда:
Команда:
Команда: (LOAD "D:/!!!/Новые команды для работы с полилинией dnl607/Pltools/pltools.fas")
---- MIP Pltools loading ... ok

Команда: PL-VFI

Укажите допуск <0.001 >:
Укажите режущие кромки (POLYLINE LINE ARC CIRCLE)
Выберите объекты: Противоположный угол: найдено: 13

Выберите объекты:
Режим продолжения кромки [С продолжением/Без продолжения] <Без продолжения>:
Выберите полилинии для вставки вершин
Выберите объекты: найдено: 1

Выберите объекты:
Добавлено 12 вершин в 1 полилиний
Вложения
Тип файла: dwg
DWG 2007
Drawing.dwg (93.3 Кб, 3475 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.07.2014, 09:56
#442
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Эм... На 2012-ом заработал... На 2014 и 2015 - отказывался почему-то.
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 18.07.2014, 10:46
1 | #443
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


В 2015 не заработал, буду разбираться

----- добавлено через ~3 ч. -----
Дело оказалось в этом
Цитата:
IAcadDocument
ObjectIDToObject32 - Method (Removed; use ObjectIDToObject)
Внес изменения. Выложил по старому адресу. После проверки модератором будет доступно для скачивания
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.08.2014, 14:10
#444
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Созрело предложение для новой функции в коллекцию.
Ситуация: есть много (очень) полилиний генерируемых программой, а именно организация рельефа в горизонталях.
У многих полилиний надо убирать один сегмент, не затрагивая смежные. (по факту делаю "разорвать" и указываю первую и вторую точки)
на приложеном рисунке - красным обозначены сегменты, которые надо вырезать. в облаке участок уже разорванных объектов.
Может есть уже у кого то подобное, или вдруг появится желание из спортивного интереса накодить? сам такое не осилю
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 108
Размер:	11.3 Кб
ID:	134049  
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.08.2014, 14:21
#445
skkkk


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


Vladimir_Sergeevich, не понял, надо, чтоб при клике на сегмент он исчезал?
skkkk вне форума  
 
Непрочитано 21.08.2014, 14:40
#446
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


все верно. сейчас это у меня занимает 3 клика, причем 2 из них прицельные.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.08.2014, 14:40
#447
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,737


А _TRIM вам не поможет?
Кочетков Андрей вне форума  
 
Непрочитано 21.08.2014, 14:46
#448
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


_trim будет еще более трудоемко, т.к. работаю уже на плане, где очень много всего интересного. или по отдельности выбирать каждую полилинию и получаем примерно то же что и "разорвать" - те же 3 клика, но есть вероятность подцепить не нужную линию и обрежется совсем не то что надо.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.08.2014, 16:31
#449
АлексЮстасу

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


Раз чертите дороги и т.п., то Вам в руки Map/Civil - в нем есть Корректировка/Очистка чертежей (Drawing cleanup). С помощью Drawing cleanup разбиваете длинные прямые линии относительно коротких ломаных на их пересечениях, не разбивая короткие. Удаляете что нужно, и сшиваете оставшееся от прямых длинных тем же Drawing cleanup.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 21.08.2014, 17:11
#450
skkkk


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


Vladimir_Sergeevich, на болоте есть несколько рабочих вариантов.
Но все они удаляют только один сегмент, после чего команду надо вызывать заново. На мой взгляд, это не совсем удобно. Я переработал один из вариантов от Lee Mac, который обрабатывает любые полилинии: добавил цикл с завершением по Enter, обработку промаха, отмену случайно удаленного сегмента по Ctrl+Z ну и подсказки с отчетами в комстроке. Прошу теста, критики и предложений.
Код:
[Выделить все]
 ;;; Программа удаляет указанные сегменты полилинии (цикл) 
;;; Завершение цикла указания сегментов по клавише Enter/Пробел/ПКМ
;;; Случайно удаленные сегменты восстанавливаются без прерывания программы
;;; выбором опции "Отменить", нажатием Ctrl+Z или вводом ключевого слова 
;;; или букв О, Г, U, J (вариации при разных раскладках)
;;; Обсуждение http://forum.dwg.ru/showthread.php?t=8284&page=23 начиная с #450
(vl-load-com)
(defun C:DELSEGS 
	( / *error* ; локальный обработчик ошибок
		adoc ; активный документ
		en ; обрабатываемый примитив, ключевое слово или T (для цикла)
		counter ; счетчик удаленных сегментов
		oldCMDECHO ; начальное значение переменной CMDECHO
		view_before_undo ; вид чертежа до начала вызова отмены
		view_after_undo ; вид чертежа после отмены
		p ; начальный параметр указанного сегмента
	)
	
	(defun *error* (msg)   
		(if oldCMDECHO (setvar "CMDECHO" oldCMDECHO))
		(vla-EndUndoMark adoc)
		(princ msg)
		(princ)
	) ;end of defun *error*
	(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)) 
		  en T 
		  counter 0 
		  oldCMDECHO (getvar "CMDECHO")
	) ;end of setq
	(vla-StartUndoMark adoc)
	(setvar "CMDECHO" 0)
	(while en
		(initget "Отменить Г J U _Undo Undo Undo Undo")
		(setq en (entsel "\nУкажите сегменты для удаления <Завершить> или [Отменить] : "))
		(cond 
		;cond #1: если выбрана опция "Отменить", нажато Ctrl+Z или введено ключевое слово
		  (	(= en "Undo")
			(if (> counter 0) 
				(progn ; проверяем, меняется ли при отмене вид чертежа (пан/зум)
					(setq view_before_undo (getvar "VIEWCTR"))
					(vl-cmdf "_u")
					(setq view_after_undo (getvar "VIEWCTR"))
					(while view_after_undo ; и отменяем до тех пор, пока меняется 
						(if (not (equal view_after_undo view_before_undo 1E-6))
							(progn
								(setq view_before_undo (getvar "VIEWCTR"))
								(vl-cmdf "_u")
								(setq view_after_undo (getvar "VIEWCTR"))
							) ;end of progn
							(progn ; если вид не поменялся, значит, сегмент восстановлен
								(princ "Сегмент восстановлен")
								(setq counter (1- counter) en T)
								(setq view_after_undo nil)
							) ;end of progn
						) ;end of if
					) ;end of while
				) ;end of progn
				(princ "Нечего отменять")
			) ;end of if
		  ) ;end of cond #1
		  
		;cond #2: если пользователь помахнулся мимо объекта
		  (	(and (null en) (= (getvar "ERRNO") 7))
			(setq en T) ;повторяем цикл
		  ) ;end of cond #2
		  
		;cond #3: если пользователь нажал Enter или ПКМ (пустой ввод)
		  (	(null en)
			(princ (strcat "\nФункция завершена. " 
							(if (> counter 0) (strcat "Удалено сегментов: " (vl-princ-to-string counter)) "")
					)
			)
		  ) ;end of cond #3
		  
		;cond #4: если указанный объект - не полилиния 
		  (	(not (wcmatch (cdr (assoc 0 (entget (car en)))) "*POLYLINE"))
			(princ "\nЭто не полилиния.")
			(setq en T) ;повторяем цикл
		  ) ;end of cond #4
		  
		;cond #5: если все предыдущие условия не выполнены, т.е., если объект указан, и он - полилиния  
		  ( t 
			(setq p ; вычисляем начальный параметр указанного сегмента
				(fix
					(vlax-curve-getParamAtPoint (car en)
						(vlax-curve-getClosestPointToProjection
							(car en)
							(trans (cadr en) 1 0)
							'(0.0 0.0 1.0)
						)
					)
				)
			) ;end of setq
			(command "_.break" en "_F"
				"_non" (trans (vlax-curve-getPointAtParam (car en)     p ) 0 1) ;начальная точка сегмента
				"_non" (trans (vlax-curve-getPointAtParam (car en) (1+ p)) 0 1) ;конечная точка сегмента
			) ;end of command
			(setq counter (1+ counter))
		  ) ;end of cond #5
		) ;end of cond
	) ;end of while
	(*error* "")
) ;end of defun
Вложения
Тип файла: lsp DELSEGS.lsp (3.6 Кб, 33 просмотров)

Последний раз редактировалось skkkk, 28.08.2014 в 02:27. Причина: Описание изменений см. ниже по тексту
skkkk вне форума  
 
Непрочитано 22.08.2014, 08:49
#451
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Раз чертите дороги и т.п., то Вам в руки Map/Civil
Кто ж мне его купит, если голый автокад - уже дорого и начали закупать LT

2 skkkk, то что доктор прописал - дело пошло раз в 5 быстрей
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 22.08.2014, 16:02
#452
АлексЮстасу

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
добавил цикл с завершением по Enter, обработку промаха, отмену случайно удаленного сегмента по Ctrl+Z ну и подсказки с отчетами в комстроке.
По-моему, лисп отличный!
Вполне неплохо бы его добавить в PLTOOLS. Лисп родственный действиям из PLTOOLS, в котором и работа с удалением элементов полининий (например, удаление вершин), и действия с сегментами.
Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
Кто ж мне его купит, если голый автокад - уже дорого и начали закупать LT
Дорого, согласен. Хотя, и сравнимо с голым Автокадом. Вроде бы в Civil/Map много активно используемого дорожниками.
Но разве на LT лиспы идут?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 23.08.2014, 14:23
#453
skkkk


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


Чуть подправил код в #450. Добавил метки отмены. Теперь Ctrl+Z в момент выполнения команды отменяет по одному удаленному сегменту, а по завершении команды Ctrl+Z вернет ВСЕ сегменты, удаленные в процессе последнего вызова. Так, мне кажется, правильней.
skkkk вне форума  
 
Непрочитано 23.08.2014, 15:03
#454
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от skkkk Посмотреть сообщение
Теперь Ctrl+Z в момент выполнения команды отменяет по одному удаленному сегменту
судя по строчкам 13 и 14 механизм работы initget тебе не понятен.
gomer вне форума  
 
Непрочитано 23.08.2014, 15:57
#455
skkkk


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


gomer, да вроде понятен.... А что не так? В 13-ой строке я разрешил функции (entsel), которая в 14-ой, принимать в качестве аргумента строку "u". Такое строковое значение посылается в командную строку при нажатии Ctrl+Z. Биты не задействовал, т.к. entsel'у они до лампочки.
Расскажи, пожалуйста, как правильно?
skkkk вне форума  
 
Непрочитано 23.08.2014, 18:25
1 | #456
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от skkkk Посмотреть сообщение
что не так?
Вот ты видишь суслика? И я не вижу, а он есть... если у команды есть опции, юзер должен их видеть. вроде мелочь, а приятно... Ну вот сидишь ты, режешь, захотел отменить. Будешь отрывать руку от мыши? использовать другую руку? Сейчас можно просто кликнуть в ком строке опцию и продолжать. Я 100500 раз уже писал: смотрите как работают штатные команды и делайте так же. Ну, и последнее, ты ж не постоянно в английской раскладке работаешь, или кто еще, а программа должна в любом случае работать у самых извращенных пользователей...
gomer вне форума  
 
Непрочитано 23.08.2014, 20:36
#457
skkkk


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


А, вот ты о чем...
Цитата:
Сообщение от gomer Посмотреть сообщение
смотрите как работают штатные команды и делайте так же
Так ведь внося изменения, кои я описал в #453, я руководствовался как раз этой мыслью. Хотел повторить принцип, например, отрисовки полилинии. В момент отрисовки жмешь Ctrl+Z - отменяется последний сегмент, жмешь после завершения команды - убирается вся полилиния. Но недоповторил.
Цитата:
Сообщение от gomer Посмотреть сообщение
Ну вот сидишь ты, режешь, захотел отменить. Будешь отрывать руку от мыши? использовать другую руку?
Не-а! У меня сочетание Ctrl+Z запилено прям на мыше многокнопочной.. В общем случае, в 2011-м нужно нажать будет стрелку вниз или опцию ввести, т.е., оторвать-таки руку...
Цитата:
Сообщение от gomer Посмотреть сообщение
Сейчас можно просто кликнуть в ком строке опцию и продолжать.
Это, видимо, нововведения, которые появились после 2011-го, я их еще не имел счастья опробовать. Звучит заманчиво. Подотстал что-то я.
В общем, внемля конструктивной критике, вношу изменения в #450, спасибо тебе, gomer. Теперь прошу замечаний по изменениям.

----- добавлено через ~4 мин. -----
Но вот, пока тестировал новый вариант, наткнулся на такой неприятный момент, как-то сразу мною упущенный. Если при удалении сегментов происходило зумирование или панорамирование, то они включаются в действие отмены, и отмена происходит не до конца. Как сделать, чтоб она шла до конца, понятно. Но непонятно, как исключить зум и пан из отмены или включить их в один шаг с восстановлением сегмента? Есть какой-то здравый простой способ, или придется отслеживать историю изменений вида и перед отменой возвращать сначала предыдущий вид? В случае, например, с отрисовкой полилинии вид при отмене сегмента не меняется.
skkkk вне форума  
 
Непрочитано 25.08.2014, 09:50
#458
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
завершении команды Ctrl+Z вернет ВСЕ сегменты
не заметил...

Цитата:
Сообщение от skkkk Посмотреть сообщение
происходило зумирование или панорамирование, то они включаются в действие отмены, и отмена происходит не до конца.
у тебя на ctrl+z срабатывает счетчик и для параномирования. может проще вообще без счетчика сделать?
или надо придумывать замену штатному _undo (как то уже столкнулся в одной рисовалке банальной - заменл на (entdel (entlast)).)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 26.08.2014, 15:54
#459
skkkk


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


Вроде получилось разобраться. Обновил в #450. Тестируем.
skkkk вне форума  
 
Непрочитано 26.08.2014, 19:17
1 | #460
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ну раз ты такой настырный, то что у тебя делают строчки 74-76? Не то же, что и 04-09?
Если говорить об уважении к пользователю и русскому языку и логике, то как минимум так
Код:
[Выделить все]
 (entsel "\nУкажите сегмент сегмент полилинии для удаления или [Отменить] <Завершить>: ")
Логичный вопрос: а что мы хотим отменить и что завершить?
С инитгет ты так и не разобрался, это печаль
Да и что стоит тебе отформатировать код, чтоб это ВЫГЛЯДЕЛО, добавить комментарии, чтоб все было ПОНЯТНО. Добавить файл с исходниками, чтоб люди могли сразу скачать и пользоваться. Тыжпрограммист, небось не чайники починяешь.
Ну и еще одну помидорку кину: с какого бодуна у тебя флаг оказался счетчиком?
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск