|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
100%
|
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Очень любопытно, как удалось сделать на лиспе такую визуализацию, когда выноска висит на курсоре и ждет от пользователя указания точки ее расположения? grvecs или создание мультивыноски с последующим программным "хватанием" за ручку? Мне в свое время такое не удалось. Поглядывал в сторону grvecs, учитывая, что мне нужно было это только для shx-шрифтов, но даже для них этот подход показался мне слишком неоправданно трудоемким. А схватить программно за ручку мне не удалось. Пришлось обратиться к более мощному языку - в итоге было реализовано (не мной) при помощи jig с оберткой для возможности вызова из-под лиспа.
|
|||
|
||||
skkkk, это банальный (grread) я видел использование jig, но для более крутых задач. по мне так использование (grread) для подобных целей вполне себе оправданно. но дело в том, что выноска не создаётся из векторов..., а конкретно так модифицируется как созданный объект автокада. минус есть навскидку один. нельзя в объект открытый для редактирования вставить поле. эта операция сразу рушит всю красоту.
кстати (grvecs) та ещё зараза! НЕВОЗМОЖНО затереть нарисованные вектора если проехаться по не пустому экрану. так что лучше без него. Последний раз редактировалось koMon, 04.10.2019 в 17:14. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Интересно. Не доходил в свое время до таких возможностей grread.
А если нужно поставить выноску слева от выносной линии (или снизу), можно ли это сделать простым переносом курсора на другую сторону или только нажатием горячих клавиш? Цитата:
А так прикольно. Любопытно было бы посмотреть фрагмент кода, который "занимается" визуализацией выноски. |
|||
|
||||
как неофитствующий апологет фанатствующему (имхо) - а как еще можно подвесить на курсор что-либо? если есть такая возможнность - поделись!
Цитата:
конечно же можно. но ведь всегда хочется красотиши производительной и неописуённой. а так-то весь код можно уместить строчек в 10. entget (ssget), getpoint, getpoint, vla-addmleader..., что никак не увеличит производительность/снизит время на отрисовку/корректировку выносок. так например текущий код (версия 10) уже насчитывает около 700 строк, но не является оптимизированным, поскольку пишется эпизодически по приходу идей с мая месяца... |
||||
|
||||
skkkk, мне приятен твой неподдельный проявленный интерес
============================================================ Пользовательская команда MTL_TO_MLEADER ============================================================ Конвертация М/Текста, Выноски в Мтекст-Мвыноску с выбранным стилем Мтекст-Мвыноски. Базовая точка Мвыноски выбирается относительно прямоугольника, описывающего текст. Точка полки отслеживается и фиксируется <ЛКМ>, <Enter> "на глаз", <ПКМ> с точным указанием. <Space> устанавливает ординату полки мвыноски по последней ординате, установленной <ЛКМ>, <Enter>, <ПКМ> в направлении вектора от базовой точки до точки полки, <Tab> устанавливает таким же образом абсциссу полки мвыноски. При выборе существующей Мвыноски перемещается точка полки. Нажатие <1> при активной Мвыноске позволяет переместить корневую точку Мвыноски, <e,E,у,У> вызывает команду Textedit для редактирования текущего содержимого МТекста Мвыноски. Если в редактируемое поле ввести текст по шаблону [Стартовое целое число][+/-][Целое число инкремента], то при создании следующей МВыноски (см. ниже) [Стартовое целое число] будет инкрементально изменено в соответсвии с введённым шаблоном. <d,D,в,В> воостанавливает показ выключенного диалога выбора стиля МВыноски. Если на приглашение выбрать конвертируемый объект кликнуть в поле чертежа, создастся Мвыноскка с текстом "DUMYY" ЛНТ - левая нижняя точка ЛВТ - левая верхняя точка ПВТ - правая верхняя точка ПНТ - правая нижняя точка НСТ - нижняя средняя точка ВСТ - верхняя средняя точка ============================================================ koMon - май, июнь, июль, сентябрь, октябрь 2019... ============================================================ |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Если говорить в рамках лиспа, я рассматривал три варианта: 1. _MOVE с программным выбором объекта и запросом точки вставки, равно как его аналог из Экспрессов (acet-move-чтототам). 2. _INSERT с запросом точки вставки. 3. _CUTCLIP+_PASTECLIP с запросом точки вставки. Применительно к визуализации вставки мультивыноски в свое время я решил использовать третий вариант. Созданый мною код для этого делал следующее: 1. Создавал в укромном месте мультитекст нужного содержания в нужном стиле с нужным количеством строк и прочее. (вначале вообще прототипом был прямоугольный контейнер баундингбокс, однако была потребность контролировать не только размер выноски, но и ее содержимое.) 2. Выполнял его _CUTCLIP+_PASTECLIP, вешал на курсор этот текст, ожидая от юзера точки вставки. Можно было (и правильнее) делать через _INSERT, но кода было больше и я поленился. 3. Затем четко по образцу этого текста создавал мультивыноску в том же месте. В общем-то, получилось неплохо для кода, который написан для своих на коленке, однако для продукта было как-то несерьезно. Резиновая нить от выноски до точки ее указания, понятно, не отрисовывалась, точку указания выноски в момент болтания на курсоре текста, я помечал крестиком, который после установки выноски удалялся. Долго пытался найти способ, как программно ухватиться за ручку - это тут же решило бы все проблемы - создается мультивыноска, и вот она уже болтается на курсоре. Не нашел. Пытался копать в сторону (grvecs) - реально задумывался уже над тем, чтобы векторами отрисовывать все буквы шрифта и резиновую нить, однако вовремя одумался и отказался от этой глупой затеи. Обратился за разработкой к программисту посерьезнее. Это была одна из двух хотелок, которая мне не удалась на лиспе за мою не слишком обширную практику. Попробовал. Мне понравилось, как ведет себя выноска. Фактически также, как и jig, за исключением разве что курсора в форме квадрата, который при определенных зумах экрана мешает восприятию текста. Блин, вот как ты это сделал на лиспе? По видео (точнее гифке) заметил, что все выноски ты ставишь в одну сторону, решил, что для установки ее с другой стороны (относительное положение полки и выносной линии имею в виду) потребуется ввод чего-то с клавы. Но видимо, я очень слабо въехал в этот "гррид". Не знаю, кому как, но для меня это очень круто, правда. В моих глазах ты - прям как паровозик, который смог. Любопытно, где я показал себя фанатствующим)) |
|||
|
||||
никаких подвохов, чес слово!) просто для меня 1,2,3 неприемлемы в программировании этой задачи, да и не этой так же...
ну как? на форуме с 2008 года (я посмотрел историю твоих сообщений) и сразу в лисп. я так понимаю пишешь иногда. ну чем не фанат поклонник последователь лиспа? ----- добавлено через ~5 мин. ----- вот кстати. я тут потихоньку выписываю выбор блока и как раз вот в самом этом месте эта самая хрень и подошла. с адекватной графикой всё норм, а вот с атрибутами да тестами не очень( я про миниатюры блока... ----- добавлено через ~1 мин. ----- если я не ошибаюсь, то его можно изменить ----- добавлено через ~16 мин. ----- не ошибался Последний раз редактировалось koMon, 09.10.2019 в 09:45. |
||||
|
||||
koMon, MTL_TO_MLEADER прикольно выглядит, но... сразу косяк словил: при работе в листе, выноска ставится в модели...
И можно поподробней за механику? Я как раз мультивыносками время от времени балуюсь. В моих костылях пока только показывается резиновая линия от точки вставки и сразу готовая выноска без красивой визуализации. з.ы. колись, это SetDoglegDirection, SetLeaderLineVertices и (grread t 9 0 )?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 14.10.2019 в 11:09. |
||||
|
||||
Цитата:
Код:
Цитата:
как подметил skkkk, pick box порой бывает не удобен, поэтому (grread t 12 0) Последний раз редактировалось koMon, 14.10.2019 в 14:17. |
||||
|
||||
У меня это дело сделано везде. Давно написана функция о пяти строчках, которая "вычисляет" пространство и подставляется по умолчанию...
А в чем сакральный смысл писать (vlax-make-safearray vlax-vbDouble '(10 . 15)) а не (vlax-make-safearray vlax-vbDouble '(0 . 5)) ?? В остальном идею вроде понял, осталось реализовать.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
|
||||
|
||||
11
<i,I,ш,Ш> фиксирует (разфиксирует) вертикальность выносной линии мвыноски. |
||||
|
||||
Vladimir_Sergeevich любезно подсказал, что полка (ориентация текста и не только текста) мвыноски необязательно должна быть горизонтальной, а может иметь произвольный угол и кстати если таскать текст (...) повёрнутой штатно мвыноски, то положение полки относительно перпендикуляра к тексту меняется соответственно.
<r,R,к,К> инициирует поворот текста МВыноски относительно точки полки. изменён механизм слежения за полкой относительно перпендикуляра к направлению текста. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Всё, я так не играю.
Цитата:
В свое время (год 2010-й это был, если не ошибаюсь), я убил столько времени, чтобы это реализовать (мой тернистый путь я где-то выше излагал), но даже ни на йоту не приблизился к подобному решению. Причем, я и англоязычные ресурсы шерстил - и ни фига. Библией, конечно, был Полещук - там такого нет, но ведь я не грешил тем, что ограничивался им. Видимо, надо принять, что кому-то дано становиться дамками, а кто-то так и будет ходить всю жизнь в пешках. Вы прям молодцы, в моих глазах - Кибальчиши, как минимум! К сожалению, пока не располагаю временем, чтобы углубиться и понять, как это работает, хотя от любопытства распирает, хоть и понимаю, что это только усугубит мои мысли о моей ограниченности в программировании. Может, к пенсии дорасту (если доживу). |
|||
|
||||
skkkk, просто нужно захотеть решить определённую задачу и понимая, что расширенный лисп располагает ресурсами к её решению, решить её. Полещука не читал, хотя имею скачанную копию, и к тому же это ведь фактически перевод разнообразных оригинальных источников, да и как показывают редкие отзывы, ещё и с ошибками(.
----- добавлено через ~20 мин. ----- механизм прост до безобразия): существующая мвыноска меняется под изменившиеся условия её использования с помощью свойств и методов её объекта. |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP Объединение нескольких объектов многострочного текста в один | Cren | LISP | 8 | 26.02.2016 08:57 |
LISP. Выравнивание текста по двум точкам. | Krieger | Готовые программы | 10 | 24.12.2011 16:02 |
Преобразование вершин TIN модели (треугольников) в точки с координатой Z | WeMaN | Разное | 16 | 09.07.2009 13:49 |
Преобразование вершин горизонталей в точки | WeMaN | Программирование | 4 | 05.03.2009 10:17 |
Rotate текстовых элементов относительно точки вставки | plaz | AutoCAD | 2 | 19.09.2003 08:37 |