|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
100%
|
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Очень любопытно, как удалось сделать на лиспе такую визуализацию, когда выноска висит на курсоре и ждет от пользователя указания точки ее расположения? grvecs или создание мультивыноски с последующим программным "хватанием" за ручку? Мне в свое время такое не удалось. Поглядывал в сторону grvecs, учитывая, что мне нужно было это только для shx-шрифтов, но даже для них этот подход показался мне слишком неоправданно трудоемким. А схватить программно за ручку мне не удалось. Пришлось обратиться к более мощному языку - в итоге было реализовано (не мной) при помощи jig с оберткой для возможности вызова из-под лиспа.
|
|||
![]() |
|
||||
skkkk, это банальный (grread)
![]() кстати (grvecs) та ещё зараза! НЕВОЗМОЖНО затереть нарисованные вектора если проехаться по не пустому экрану. так что лучше без него. Последний раз редактировалось koMon, 04.10.2019 в 17:14. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Интересно. Не доходил в свое время до таких возможностей 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,680
|
Цитата:
![]() Если говорить в рамках лиспа, я рассматривал три варианта: 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,680
|
Всё, я так не играю.
Цитата:
В свое время (год 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 |