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

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

Лисп простой пользовательской выноски

Ответ
Поиск в этой теме
Непрочитано 21.03.2016, 10:37
Лисп простой пользовательской выноски
Сет
 
Регистрация: 19.11.2014
Сообщений: 2,435

Указал в заголовке, что речь о простой выноске, но может она и не простая. Прошу помощи в реализации, если это просто решается или подсказать направление куда думать, если сложная реализация.

Внешний вид выноски представлен на картинке во вложении.

Порядок запросов на ввод пользователя:
1. Введите верхний текст.
2. Укажите первую точку выноски.
3. Укажите вторую точку выноски.
4. Укажите третью точку выноски.

Как это должно работать.
1. Выноска должна быть ВСЕГДА на определенном слое, даже если активен другой. Изменить слой можно только вручную.
2. Выносная линия - это полилиния нулевой шириной, ее толщина определяется по слою.
3. Текст - вероятно мультитекст, так как нужно выравнивание. Шрифт текста, высота текста и отступ от полки - фиксированы в программе.
4. Положение текста определяется автоматически, в зависимости от введенных значений точек и выравнивается по краю горизонтальной полки.
5. В процессе задания точек хотелось бы видеть промежуточные сегменты, как это видно при отрисовке, например, полилинии. Промежуточная отрисовка текста - не важна.
6. Задание точек должно реагировать на режим ОРТО.
7. Ввод нижнего текста должен быть опциональным. Не знаю можно ли это реализовать без дополнительного запроса на нижний текст. По умолчанию текста нет.
8. Отрисовка точки на конце выноски - тоже опциональна. По идее можно сделать дополнительный запрос на точку, но хотелось бы, чтобы всегда работало значение по умолчанию - без точки. А если она нужна - это бы задавалось как-то дополнительно.

Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 340
Размер:	2.5 Кб
ID:	167235  

Просмотров: 18330
 
Непрочитано 22.03.2016, 19:44
1 | #41
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


функция лиспа initget, насколько помню

----- добавлено через ~11 мин. -----
Например
Код:
[Выделить все]
 (defun c:Test( / lVar)
  (initget 128 "Point BottomText")
  (setq lVar (getpoint "\Выберите точку: [Point/BottomText]"))
)

Последний раз редактировалось Сергей812, 22.03.2016 в 20:38.
Сергей812 вне форума  
 
Автор темы   Непрочитано 22.03.2016, 20:05
#42
Сет


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
функция лиспа initget
Но она как-то не так работает. В команде Прямоугольник клик на ключевое слово активирует что-то вроде подфункции - идет новый запрос. Здесь же клик на ключевое слово - это вариант ответа на текущий запрос.

----- добавлено через ~11 мин. -----
Или как раз определенный ответ на текущий запрос и запускает подпрограмму через что типа (if (= 1Var "P") ... ) ?
Сет вне форума  
 
Непрочитано 22.03.2016, 20:16
#43
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


логично потому что после функции запроса данных у пользователя getXXX должна идти обработка результатов, что пользователь вернул - координаты точки или ключевое слово.. что в лиспе, что в том же NetApi.. и на основании анализа возвращенного значения запускается тот или иной кусок кода..
Сергей812 вне форума  
 
Непрочитано 22.03.2016, 22:46
1 | #44
skkkk


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


Код:
[Выделить все]
 (initget 128 "Раз Два Три") ;;; задаем возможные значения ключевых слов
(setq pt (getpoint "\nУкажите точку или [Раз/Два/Три] <Раз>")) ;;; в квадратных скобках через слэш перечисляем варианты после приглашения
(if (null pt) (setq pt "Раз")) ;;; назначаем значение, если нажата правая кнопка мыши (значение по умолчанию)
;;;далее обработка значений:
(cond ;;;задаем условия
  (	(= pt "Раз") ;;; если pt = Раз,
	(princ "\nРаз") ;;; то что-то делаем
	(princ "\nСюда еще можно что-то добавить")
  )
  (	(= pt "Два")
	(princ "\nДва")
  )
;;;и так далее
)
skkkk вне форума  
 
Автор темы   Непрочитано 22.03.2016, 23:03
#45
Сет


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


skkkk, я доделал выноску с практически всеми реализованными "хотелками". Осталось несколько нюансов некритичных для понимания того результата, которого я хочу добиться. Во вложении тестовый чертеж и лисп - посмотри, можно ли такой функционал реализовать через мультивыноски по-простому

Из нереализованных "хотелок":
1. Автовключение режима ОРТО после указания первой точки выноски и возврат к исходному состоянию после отрисовки выноски (вроде понятно как делать, просто надо уделить время).
2. В качестве точки я рисую круг, а надо бы кольцо с внутренним диаметром 0 (не нашел в методах ActiveX функции типа AddDonut - нужна помощь).
3. При отрисовке выноски с текстом снизу и сверху хотелось бы, чтобы строка большего размера выравнивалась по краю полки, а строка меньшего размера - по центру строки большего размера (это не знаю как сделать, полагаю что сложно, потому готов смириться с тем, что есть сейчас - выравнивание верхнего и нижнего текста по краю полки).
Вложения
Тип файла: dwg
DWG 2004
MyLeader.dwg (135.9 Кб, 35 просмотров)
Тип файла: lsp MyLeader.lsp (5.2 Кб, 65 просмотров)
Сет вне форума  
 
Непрочитано 22.03.2016, 23:07
#46
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Сет Посмотреть сообщение
Автовключение режима ОРТО после указания первой точки выноски и возврат к исходному состоянию после отрисовки выноски (вроде понятно как делать, просто надо уделить время).
Системная переменная orthomode
Цитата:
Сообщение от Сет Посмотреть сообщение
В качестве точки я рисую круг, а надо бы кольцо с внутренним диаметром 0 (не нашел в методах ActiveX функции типа AddDonut - нужна помощь).
Ее нет. donut - замкнутая полилиния из 2 сегментов с 2 вершинами и предустановленной шириной сегмента. Так что добавляй полилинию и устанавливай все соответствующие параметры. Кстати, vla-addrectangle тоже не существует.

P.S. Код не смотрел и не анализировал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2016, 02:01
1 | #47
skkkk


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
сейчас лишь первый этап-техническая реализация. А когда это решение будет опробовано на большом объеме работы - автор ТС зря надеется, что ему не придется углубляться, имхо)
Согласен. Дальше - больше.
Цитата:
Сообщение от Сет Посмотреть сообщение
skkkk, я доделал выноску с практически всеми реализованными "хотелками". Осталось несколько нюансов некритичных для понимания того результата, которого я хочу добиться.
Знаю это приятное чувство, когда теперь тебе для какой-то рутинной операции нужно сделать в три раза меньше кликов, чем раньше. И эти "в три раза" умножаются тысячекратно, ежедневно прибавляя. И вообще блаженство, когда ты сделал эту программу сам.
Цитата:
Сообщение от Сет Посмотреть сообщение
Во вложении тестовый чертеж и лисп - посмотри, можно ли такой функционал реализовать через мультивыноски по-простому
Посмотрел, все запустилось, выноска построилась, беглое тестирование ошибок не выявило. Можно через мультивыноски реализовать такое. Не знаю, как насчет по-простому программно, но думаю, что не особо по-сложному. Кстати, в моем вложении выноска уже настроена была почти так, как надо. Сейчас прикладываю файл с выноской, которая чуть подправлена с учетом третьей "хотелки" - сделал выравнивание по центру и добавил величину полки = 100. В выноске появились две дополнительные треугольные ручки, от которых я в свое время с радостью избавился, но, кажется, в случае с вертикальной выносной линией они будут удобны. Попробуй.

Чтобы код работал в любом файле, алгоритм я вижу примерно таким:
1. Создать слой (если нет в чертеже). Решения на форуме есть.
2. Создать стиль текста, стиль мультивыноски (если нет в чертеже). Коды уже также на форуме имеются, надо найти, разобраться с нужными настройками стиля и прописать их в коде - заточить под себя.
3. Ввод текста, указание первой, второй, третьей точки - все как ты уже реализовал. Между вводом первой и второй точки включить режим ОРТО. В принципе, твой код почти целиком можно взять за основу, только не создавать тексты, а создать полилинии, как временные примитивы для визуализации отрисовки выносной линии и полки, затем сразу удалить их. Потом на основе введенных данных рассчитать все необходимые параметры мультивыноски, и создать ее программно, при помощи кода VVA из приведенной мною ранее ссылки. Хотя, может, тексты придется и создать в том же стиле для определения их габаритов (см. ниже).
4. Назначить созданной мультивыноске "правильный" межстрочный интервал для устранения проблемы прилипания к полке при помощи другого кода VVA (ссылку я тоже приводил). Там в коде также предусмотрена возможность автоматического преобразования создаваемых мультивыносок с использованием реактора.
5. Назначить мультивыноске другие необходимые свойства, вычисленные перед отрисовкой: отступ от полки и/или величина полки, положение текста относительно выносной линии (справа-слева), слой, блок-круг на конце или нет (кстати, отпадает необходимость возиться с "хотелкой" №2) и прочее - явно не все вспомнил. Самое трудное и муторное тут на мой взгляд - это вычисление отступа от полки (и/или величины полки) в зависимости от указанной третьей точки - похоже, нужно будет вычислять ширину текста через его boundingbox и сравнивать ее с длиной отрезка между второй и третьей точками, а разницу назначать параметру "величина полки" или "отступ от полки" - в зависимости от того, понравятся ли треугольные ручки (лень искать имена свойств ActiveX - их можно узнать, сняв с мультивыноски дамп и, если надо, заглянув в англо-русский словарь).
6. Добавить обработчик ошибок (см. *error*, например в теме "Научите лиспу..."), чтобы при выходе из программы по Esc восстанавливать значения переменных и удалять временные примитивы.

Таким образом, пожалуй, всю эту работу ты проделал не зря. Во-первых уже с пользой для производства, - но останавливаться рано. А во-вторых, как оказалось, с заделом на развитие и с минимумом лишних движений. Осталось теперь создать мультивыноску, являющуюся точной копией этих временных примитивов. Коды для всех этих задач точно видел в Сети, надо найти, "подпилить", рассчитать смещение текста и все это объединить.
Удачи в этом увлекательном деле .
Offtop: Посмотрим, как оно будет: только ли эту задачку захочешь решить?
Вложения
Тип файла: dwg
DWG 2010
MyLeader.dwg (155.1 Кб, 28 просмотров)

Последний раз редактировалось skkkk, 23.03.2016 в 02:17.
skkkk вне форума  
 
Автор темы   Непрочитано 23.03.2016, 08:47
#48
Сет


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Знаю это приятное чувство, когда теперь тебе для какой-то рутинной операции нужно сделать в три раза меньше кликов, чем раньше. И эти "в три раза" умножаются тысячекратно, ежедневно прибавляя. И вообще блаженство, когда ты сделал эту программу сам.
Я немного программирую на С++, поэтому чувство подчинения компьютера своей воле изведано давно

Цитата:
Сообщение от skkkk Посмотреть сообщение
Сейчас прикладываю файл с выноской, которая чуть подправлена с учетом третьей "хотелки" - сделал выравнивание по центру и добавил величину полки = 100. В выноске появились две дополнительные треугольные ручки, от которых я в свое время с радостью избавился, но, кажется, в случае с вертикальной выносной линией они будут удобны. Попробуй.
Я не понял, ты просто нарисовал мультивыноску и настроил ее свойства, чтобы она выглядела как у меня? Ну я не сомневался, что это возможно. Вся суть в программной реализации. В принципе действительно основу я создал и все что остается - это нарисовать мультивыноску и задать ей нужные свойства... Попробую как время будет.

Цитата:
Сообщение от skkkk Посмотреть сообщение
похоже, нужно будет вычислять ширину текста через его boundingbox
А можно пример использования этой функции?
Вообще говоря было бы неплохо расширить функционал моей выноски следующим образом. Если я указываю третью точку кликом на экране - это точка становится концом полки. Если же я в ответ на запрос третьей точки жму Enter - полка рисуется автоматически по длине текста. При этом положение полки (слева или справа) определяется текущим положением курсора относительно второй точки. Это возможно?
Сет вне форума  
 
Непрочитано 23.03.2016, 11:14
1 | #49
skkkk


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


Цитата:
Сообщение от Сет Посмотреть сообщение
Я немного программирую на С++
А почему тогда теперь LISP? Это не шаг назад?

Цитата:
Сообщение от Сет Посмотреть сообщение
Я не понял, ты просто нарисовал мультивыноску и настроил ее свойства, чтобы она выглядела как у меня?
Именно, причем сделал я это для того, чтоб ты сравнил, какая из настроенных выносок тебе более подойдет - эта или та, что я прикладывал ранее? Разница в появлении треугольных ручек. Попробуй. Программно это сделать реально.
Цитата:
Сообщение от Сет Посмотреть сообщение
А можно пример использования этой функции?
Можно. Там после выполнения кода в переменные 'minp 'maxp заносятся координаты левого нижнего и правого верхнего углов прямоугольника, ограничивающего объект. Координаты записываются в виде массива, затем функцией vlax-safearray->list преобразовываются в привычный вид.

Цитата:
Сообщение от Сет Посмотреть сообщение
Если я указываю третью точку кликом на экране - это точка становится концом полки.
Это уже есть.
Цитата:
Сообщение от Сет Посмотреть сообщение
Если же я в ответ на запрос третьей точки жму Enter - полка рисуется автоматически по длине текста.
Тут уже можно просто программно создать выноску указанием двух точек, функцией VVA.
Третья точка для этой выноски пока не нужна, она нужна только для определения стороны, в которую будет повернута выноска.
Цитата:
Сообщение от Сет Посмотреть сообщение
При этом положение полки (слева или справа) определяется текущим положением курсора относительно второй точки. Это возможно?
Определить текущее положение курсора (см. функцию grread):
Код:
[Выделить все]
 (setq temp_point (getpoint p2 "\nУкажите третью точку [НижнийТекст/Точка]:")) ;;; запрашиваем точку как обычно
(if (null temp_point) ;;; если после указания точка не задана, т.е., нажата правая кнопка или Enter (пустой ввод)
	(progn
		(setq pt (cadr (grread T))) ;;;  в переменной pt запомнится точка, в которой был курсор при нажатии правой кнопки
		;;; ...................
	)
)
Далее надо пораскинуть мозгами. Либо рисовать выноску сначала в той точке, которая у нас сохранилась здесь в переменной pt - так она точно встанет в ту сторону, а затем программно "подвинуть" точку излома полки над первой точкой. Либо посмотреть тут и после отрисовки принудительно поворачивать выноску в сторону, где был правый клик.
skkkk вне форума  
 
Автор темы   Непрочитано 23.03.2016, 11:31
#50
Сет


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
А почему тогда теперь LISP? Это не шаг назад?
Врядли. Во-первых я не совсем понимаю как писать arx-приложения для автокад, нужно изучать вопрос. Во-вторых, насколько я понимаю ObjectArx сложнее чем ЛИСП. Погружаться в ObjectArx ради простой выноски... разумно ли это? Это все равно как потратить 5 лет на обучение в медуниверситете, чтобы подобрать себе таблетку от головной боли


Цитата:
Сообщение от skkkk Посмотреть сообщение
Разница в появлении треугольных ручек
Я наблюдаю только одну треугольную ручку - она изменяет отступ от выносной линии до полки, фактически меняет длину полки. Без этой ручки длину полки же никак не изменить?Если так, то я считаю эта ручка однозначно нужна.

Цитата:
Сообщение от skkkk Посмотреть сообщение
Тут уже можно просто программно создать выноску указанием двух точек
Собственно это и подразумевал. Далеко не всегда есть необходимость делать длинную полку выноски. Порой достаточно автоширины. Тогда выноска строится в два клика и курсором указываем направление полки. Если есть функции, отслеживающие положение курсора, - тогда все замечательно.
Сет вне форума  
 
Непрочитано 23.03.2016, 11:58
#51
skkkk


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


Цитата:
Сообщение от Сет Посмотреть сообщение
Я наблюдаю только одну треугольную ручку - она изменяет отступ от выносной линии до полки, фактически меняет длину полки. Без этой ручки длину полки же никак не изменить?Если так, то я считаю эта ручка однозначно нужна.
Странно. У меня две. См. вложение. Длину полки без ручки можно менять еще отступом от полки, но только через панель свойств или программно. По месту, в отдельно взятой выноске, длину полки можно регулировать только этой ручкой. Думаю, ручных корректировок положения полки не избежать, поэтому треугольные ручки я бы оставил в данном случае. Я просто пользуюсь выноскам таким образом, что выносная линия у них всегда под углом к вертикали, и ширина полки у меня зависит исключительно от размеров текста, поэтому их убрал - мешались.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 43
Размер:	20.6 Кб
ID:	167366  
skkkk вне форума  
 
Автор темы   Непрочитано 23.03.2016, 12:37
#52
Сет


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Странно. У меня две.
Левая ручка полку отзеркаливает? Это тоже было бы полезно.

У меня выноска выглядит так.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 32
Размер:	8.2 Кб
ID:	167370  
Сет вне форума  
 
Непрочитано 23.03.2016, 13:14
#53
skkkk


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


Видимо, Автокад поновее. У меня 2011. Левая ручка, к сожалению, выноску не зеркалит - вообще не понимаю ее назначения. А поскольку не зеркалит - без нее гораздо удобнее. Квадратная ручка должна быть на изломе - это логично. Разработчики это поняли. А отзеркаливание выноски можно настроить на двойной клик по выносной линии (см. Операции при двукратном нажатии в Адаптации). При этом двойной клик на тексте мультивыноски также будет вызывать редактор.
skkkk вне форума  
 
Автор темы   Непрочитано 23.03.2016, 13:22
#54
Сет


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Видимо, Автокад поновее. У меня 2011.
У меня 2016.
Сет вне форума  
 
Непрочитано 23.03.2016, 13:51
1 | #55
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
Видимо, Автокад поновее. У меня 2011. Левая ручка, к сожалению, выноску не зеркалит - вообще не понимаю ее назначения.
Вот чем хорош ЛИСП, что не надо учитывать версию Автокада.
У меня ЛИСП "простой выноски" работает еще с ДОС-версии
Попутно в "Похожие темы" увидел дискуссию 2009 года http://forum.dwg.ru/showthread.php?t=40090
>Сет
В ней кстати разбираются ошибки ЛИСП"а, которые есть в твоём тексте
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 23.03.2016, 17:08
#56
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Сообщение от skkkk Посмотреть сообщение
А почему тогда теперь LISP? Это не шаг назад?
http://konspekta.net/studopediaorg/b...s/image256.jpg

Нет, это не шаг назад, это переход в другое измерение.
Sleekka вне форума  
 
Непрочитано 23.03.2016, 18:02
#57
skkkk


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


Offtop: Sleekka, проблемно-ориентированные языки - это у них проблемы с ориентацией, или они ориентированы на решение проблем, или проблемы с определением их ориентации?
skkkk вне форума  
 
Непрочитано 24.03.2016, 08:40
#58
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Просто разные области применения у LISP и NET/ObjectARX - если нужен голый функционал, то на лиспе (если им владеешь в достаточной степени) зачастую будет написать проще. Если нужны развитые средства интерфейса, поддержка работы с БД, с XML и т.д. -то проще уже перейти на ООП, где это все реализовано. И сосредоточить усилия именно на практическую реализацию своих хотелок) Благо информации по тому же NET API за последние несколько лет стало гораздо больше, в том числе и на русском языке.

Цитата:
Сообщение от Сет Посмотреть сообщение
Врядли. Во-первых я не совсем понимаю как писать arx-приложения для автокад, нужно изучать вопрос. Во-вторых, насколько я понимаю ObjectArx сложнее чем ЛИСП. Погружаться в ObjectArx ради простой выноски... разумно ли это? Это все равно как потратить 5 лет на обучение в медуниверситете, чтобы подобрать себе таблетку от головной боли
Обычно этим не ограничивается.. потом появляется желание, чтобы данные сами подставлялись, синхронизировались с тем же Excel и т.д.-есть умельцы, что делают это на лиспе, ну это уже маэстро с многолетним опытом.
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.03.2016, 14:27
#59
Сет


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Далее надо пораскинуть мозгами. Либо рисовать выноску сначала в той точке, которая у нас сохранилась здесь в переменной pt - так она точно встанет в ту сторону, а затем программно "подвинуть" точку излома полки над первой точкой. Либо посмотреть тут и после отрисовки принудительно поворачивать выноску в сторону, где был правый клик.
Что-то никак не пойму - как заставить полку рисоваться слева (выносная линия вертикальная)? Какое свойство мультивыноски за это в ответе? Программно двигать точку излома влево - не вариант.
Сет вне форума  
 
Непрочитано 27.03.2016, 16:38
#60
VVA

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


Цитата:
Сообщение от Сет Посмотреть сообщение
Что-то никак не пойму - как заставить полку рисоваться слева (выносная линия вертикальная)?
Сделай ее "псевдовертикальной". Сделай отступ по Х в нужную (в данном случае влево) для тебя сторону на несущественное для тебя значение (например на 0.001). Этим ты "покажешь" мультивыноске желаемую сторону отрисовки полки
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп простой пользовательской выноски

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комрады, не работает простой лисп по копированию отрезка. MegaMost LISP 10 07.09.2015 00:23
Как визуализировать создаваемый объект? Glorius Программирование 27 08.08.2015 22:59
мой первый лисп, выноска, пинайте! baaba LISP 17 20.10.2009 15:42
Помогите продумать поворот части выноски! Tonic Программирование 40 02.07.2007 20:21
Сброс связи линии выноски и MTEXTа выноски kabzzz AutoCAD 3 19.04.2006 12:57