|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Но она как-то не так работает. В команде Прямоугольник клик на ключевое слово активирует что-то вроде подфункции - идет новый запрос. Здесь же клик на ключевое слово - это вариант ответа на текущий запрос.
----- добавлено через ~11 мин. ----- Или как раз определенный ответ на текущий запрос и запускает подпрограмму через что типа (if (= 1Var "P") ... ) ? |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
логично потому что после функции запроса данных у пользователя getXXX должна идти обработка результатов, что пользователь вернул - координаты точки или ключевое слово.. что в лиспе, что в том же NetApi.. и на основании анализа возвращенного значения запускается тот или иной кусок кода..
|
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
skkkk, я доделал выноску с практически всеми реализованными "хотелками". Осталось несколько нюансов некритичных для понимания того результата, которого я хочу добиться. Во вложении тестовый чертеж и лисп - посмотри, можно ли такой функционал реализовать через мультивыноски по-простому
Из нереализованных "хотелок": 1. Автовключение режима ОРТО после указания первой точки выноски и возврат к исходному состоянию после отрисовки выноски (вроде понятно как делать, просто надо уделить время). 2. В качестве точки я рисую круг, а надо бы кольцо с внутренним диаметром 0 (не нашел в методах ActiveX функции типа AddDonut - нужна помощь). 3. При отрисовке выноски с текстом снизу и сверху хотелось бы, чтобы строка большего размера выравнивалась по краю полки, а строка меньшего размера - по центру строки большего размера (это не знаю как сделать, полагаю что сложно, потому готов смириться с тем, что есть сейчас - выравнивание верхнего и нижнего текста по краю полки). |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832
|
Цитата:
Цитата:
P.S. Код не смотрел и не анализировал.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Цитата:
Цитата:
Чтобы код работал в любом файле, алгоритм я вижу примерно таким: 1. Создать слой (если нет в чертеже). Решения на форуме есть. 2. Создать стиль текста, стиль мультивыноски (если нет в чертеже). Коды уже также на форуме имеются, надо найти, разобраться с нужными настройками стиля и прописать их в коде - заточить под себя. 3. Ввод текста, указание первой, второй, третьей точки - все как ты уже реализовал. Между вводом первой и второй точки включить режим ОРТО. В принципе, твой код почти целиком можно взять за основу, только не создавать тексты, а создать полилинии, как временные примитивы для визуализации отрисовки выносной линии и полки, затем сразу удалить их. Потом на основе введенных данных рассчитать все необходимые параметры мультивыноски, и создать ее программно, при помощи кода VVA из приведенной мною ранее ссылки. Хотя, может, тексты придется и создать в том же стиле для определения их габаритов (см. ниже). 4. Назначить созданной мультивыноске "правильный" межстрочный интервал для устранения проблемы прилипания к полке при помощи другого кода VVA (ссылку я тоже приводил). Там в коде также предусмотрена возможность автоматического преобразования создаваемых мультивыносок с использованием реактора. 5. Назначить мультивыноске другие необходимые свойства, вычисленные перед отрисовкой: отступ от полки и/или величина полки, положение текста относительно выносной линии (справа-слева), слой, блок-круг на конце или нет (кстати, отпадает необходимость возиться с "хотелкой" №2) и прочее - явно не все вспомнил. Самое трудное и муторное тут на мой взгляд - это вычисление отступа от полки (и/или величины полки) в зависимости от указанной третьей точки - похоже, нужно будет вычислять ширину текста через его boundingbox и сравнивать ее с длиной отрезка между второй и третьей точками, а разницу назначать параметру "величина полки" или "отступ от полки" - в зависимости от того, понравятся ли треугольные ручки (лень искать имена свойств ActiveX - их можно узнать, сняв с мультивыноски дамп и, если надо, заглянув в англо-русский словарь). 6. Добавить обработчик ошибок (см. *error*, например в теме "Научите лиспу..."), чтобы при выходе из программы по Esc восстанавливать значения переменных и удалять временные примитивы. Таким образом, пожалуй, всю эту работу ты проделал не зря. Во-первых уже с пользой для производства, - но останавливаться рано. А во-вторых, как оказалось, с заделом на развитие и с минимумом лишних движений. Осталось теперь создать мультивыноску, являющуюся точной копией этих временных примитивов. Коды для всех этих задач точно видел в Сети, надо найти, "подпилить", рассчитать смещение текста и все это объединить. Удачи в этом увлекательном деле . Offtop: Посмотрим, как оно будет: только ли эту задачку захочешь решить? Последний раз редактировалось skkkk, 23.03.2016 в 02:17. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Цитата:
Цитата:
А можно пример использования этой функции? Вообще говоря было бы неплохо расширить функционал моей выноски следующим образом. Если я указываю третью точку кликом на экране - это точка становится концом полки. Если же я в ответ на запрос третьей точки жму Enter - полка рисуется автоматически по длине текста. При этом положение полки (слева или справа) определяется текущим положением курсора относительно второй точки. Это возможно? |
|||
|
|||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
А почему тогда теперь LISP? Это не шаг назад?
Цитата:
Можно. Там после выполнения кода в переменные 'minp 'maxp заносятся координаты левого нижнего и правого верхнего углов прямоугольника, ограничивающего объект. Координаты записываются в виде массива, затем функцией vlax-safearray->list преобразовываются в привычный вид. Цитата:
Цитата:
Третья точка для этой выноски пока не нужна, она нужна только для определения стороны, в которую будет повернута выноска. Цитата:
Код:
|
||||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Врядли. Во-первых я не совсем понимаю как писать arx-приложения для автокад, нужно изучать вопрос. Во-вторых, насколько я понимаю ObjectArx сложнее чем ЛИСП. Погружаться в ObjectArx ради простой выноски... разумно ли это? Это все равно как потратить 5 лет на обучение в медуниверситете, чтобы подобрать себе таблетку от головной боли
Я наблюдаю только одну треугольную ручку - она изменяет отступ от выносной линии до полки, фактически меняет длину полки. Без этой ручки длину полки же никак не изменить?Если так, то я считаю эта ручка однозначно нужна. Собственно это и подразумевал. Далеко не всегда есть необходимость делать длинную полку выноски. Порой достаточно автоширины. Тогда выноска строится в два клика и курсором указываем направление полки. Если есть функции, отслеживающие положение курсора, - тогда все замечательно. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Странно. У меня две. См. вложение. Длину полки без ручки можно менять еще отступом от полки, но только через панель свойств или программно. По месту, в отдельно взятой выноске, длину полки можно регулировать только этой ручкой. Думаю, ручных корректировок положения полки не избежать, поэтому треугольные ручки я бы оставил в данном случае. Я просто пользуюсь выноскам таким образом, что выносная линия у них всегда под углом к вертикали, и ширина полки у меня зависит исключительно от размеров текста, поэтому их убрал - мешались.
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Видимо, Автокад поновее. У меня 2011. Левая ручка, к сожалению, выноску не зеркалит - вообще не понимаю ее назначения. А поскольку не зеркалит - без нее гораздо удобнее. Квадратная ручка должна быть на изломе - это логично. Разработчики это поняли. А отзеркаливание выноски можно настроить на двойной клик по выносной линии (см. Операции при двукратном нажатии в Адаптации). При этом двойной клик на тексте мультивыноски также будет вызывать редактор.
|
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Цитата:
У меня ЛИСП "простой выноски" работает еще с ДОС-версии Попутно в "Похожие темы" увидел дискуссию 2009 года http://forum.dwg.ru/showthread.php?t=40090 >Сет В ней кстати разбираются ошибки ЛИСП"а, которые есть в твоём тексте
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
http://konspekta.net/studopediaorg/b...s/image256.jpg
Нет, это не шаг назад, это переход в другое измерение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
Просто разные области применения у LISP и NET/ObjectARX - если нужен голый функционал, то на лиспе (если им владеешь в достаточной степени) зачастую будет написать проще. Если нужны развитые средства интерфейса, поддержка работы с БД, с XML и т.д. -то проще уже перейти на ООП, где это все реализовано. И сосредоточить усилия именно на практическую реализацию своих хотелок) Благо информации по тому же NET API за последние несколько лет стало гораздо больше, в том числе и на русском языке.
Цитата:
|
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Цитата:
|
|||
|
||||
Сделай ее "псевдовертикальной". Сделай отступ по Х в нужную (в данном случае влево) для тебя сторону на несущественное для тебя значение (например на 0.001). Этим ты "покажешь" мультивыноске желаемую сторону отрисовки полки
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Комрады, не работает простой лисп по копированию отрезка. | 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 |