|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
26.08.2008, 16:00 | #1 | |
Ввод третьей координаты
Москва
Регистрация: 04.04.2008
Сообщений: 97
|
||
Просмотров: 4186
|
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
getpoint в любом случае вернет 3 координаты. Наверное нужно сделать 2 запроса:
1. getpoint - запросить точку, взять только X и Y 2. getreal - Запросить Z Ну и склеить все потом обратно
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Работа в 3D предполагает определенный уровень квалификации пользователя. Ввод точек там довольно сложное (не технически, а для мозгов) дело. GETPOINT позволяет ввести три координаты - и с клавиатуры, да и мышкой (координатные фильтры). Этому надо просто научить.
Но, для облегчения работы, надо делать свои функции с дополнительными опциями. Основаны они всё равно должны быть на GETPOINT, только пользователь должен опционально иметь дополнительные возможности. Квалифицированный - может сообразить, какие именно значения ввести. А кому-то дать возможность выбрать из опции. Например, если просто надо задать Z, то на стороне пользователя может быть приглашение: Ввод точки. Z=3000 Введи точку [Z]: Грамотный пользователь может ввести трехмерную точку сразу. Менее подготовленный - введет двухмерную, но к ней присоединится Z=3000. Если ему надо изменить Z, он может выбрать опцию и ввести Z, причем лучше не через getreal, а через getdist - тогда и высоту можно также "измерить" или ввести числом. Это самый простой случай, "по вертикали". Вместо Z можно включать опции, более понятные - "Поднять", "Опустить". В сложных случаях может понадобиться и задавать направление, наподобие "Вверх-Влево". Это лучше делать визуально или выбором из списка. |
|||
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Спасибо за ответы.
Выполнив этот шаг я пошёл дальше. Конечной целью у меня было вычисление координаты Z в третьей точке, используя для этого метод интерполяции по двум известным точкам. То есть я предлагаю пользователю ввести две точки, по чертежу известны значения Z в них, а потом пользователь указывает на продолжении этой прямой третью, исследуемую точку, где необходимо узнать третью координату. Я не привязываюсь не к каким примитивам. И прошу пользователя указать только интересующие его точки. Решение актуально только в том случае, если пользователь укажет третью точку, лежащую на прямой, образованную первыми двумя точками. Вопрос: как можно сделать так, что бы курсор мышки мог двигаться только вдоль этой прямой. Что бы у пользователя не было возможности ошибиться, выбирая исследуемую точку??? |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Привязать курсор не проблема - режим ОРТО и SNAPANG.
Но здесь принципиальная ошибка - нельзя в этом случае заставлять пользователя вводить именно точку, лежащую на прямой! Режимы и легко отключаются. Надо запрашивать не точку, а расстояние от известной точки до искомой. При этом может использоваться и функция getpoint с резиновой нитью, и SNAPANG (для облегчения), но из введенной точки надо использовать только координаты для вычисления расстояния, а у потом рассчитывать истинные координаты через polar. Это учитывает возможность неточного указания точек. Которое обязательно будет. PS. Для 3D также потребуются и специальные функции для определения координат в пространстве с использованием векторов. Штатные-то предназначены для плоскости. |
|||
|
||||
Регистрация: 06.02.2008
Ярославль
Сообщений: 24
|
[quote=ShaggyDoc;280520]Привязать курсор не проблема - режим ОРТО и SNAPANG.
Вы извините, я не совсем не по теме, можно я спрошу? Мне тоже надо было указать точку на линии/полилинии, затем еще и угол поворота для последующего текста вдоль объекта вычислить. И, если при линии команда "osnap" ловила эту точку (приблизительно, но этого достаточно для последующей вставки текста), то при полилинии я (очень малоопытный лиспист), помучив голову, взяла точку указания (cadr (entsel "..."")) и прошлась по массиву отрезков, составляющих полилинию. Нашла отрезок, к которому эта точка ближе всего, и вычислила упавший на него перпендикуляр. Это так? Этот отрезок (его вершины), повторюсь, нужен для вычисления угла для подписи. Ну, и для единообразия, оставила и для линии вычисление перпеникуляра, оно в отдельной маленькой функции. Дело в том, что, когда использовала тут же команду "osnap" с полилинией, а затем искала перебором отрезок, которому принадлежит точка, то (из-за точности?) отрезок не находился. Не попадала привязанная точка ни на один. Так вот, этот мой алгоритм с перпендикуляром достоин существования, или эту точность можно легко и быстро поставить на место, и отрезок найдется? И я очередной трехколесный изобрела? Ответьте, пожалуйста. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,849
|
ceiba, а если попробовать vlax-curve-getclosestpointto? Например, при построенной линии (отрезке, сплайне, 3Д-полилинии или обычной lightweightpolyline) можно проверить такой лисп:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
[quote=ceiba;281545]
Цитата:
Код:
Получаем список - (примитив точка). По имени примитива с помощью специальной функции определяем точки начала и конца указанного сегмента. Имея три точные точки можно делать что угодно - хоть текст вдоль рисовать, хоть врезать в линию, хоть перпендикуляры строить |
|||
|
||||
Регистрация: 06.02.2008
Ярославль
Сообщений: 24
|
Кулик Алексей aka kpblc: ceiba, а если попробовать vlax-curve-getclosestpointto? Например, при построенной линии (отрезке, сплайне, 3Д-полилинии или обычной lightweightpolyline) можно проверить такой лисп:
Да, Алексей, точку находит, спасибо. Правда, я с ActivX пока еще не связывалась. И чтобы использовать этот код, надо разбираться с VLA-объектами. Обещаю в ближайшем будущем начать эти разборки именно с вашего примера Пока же мне надо уровень просто автолиспа своего поднять. Вот скажите, Вы эти строки прямо сейчас, с маху написали? Я же пока долго рожаю очевидные вещи. Стеснительно, конечно, но могу выложить то, что у меня решает эту задачу. Подписывает коммуникации. Лежащие в наших шаблонных слоях (например, "_VODOPROVOD") - автоматом. В других - предлагает подписать текстом по желанию. Мы решили, что использовать тип линии, содержащий буквы, очень неудобно. Потому как эти буквы могут получиться на пересечениях и на углах. И ломаные приходится править, разрывать, буквы опять невычислимо сдвигаются. Лучше, как в туши планшеты вычерчивают, ставить подпись там, где красиво. Последующее возможное редактирование - другой вопрос, возможно, придумаю еще что-нибудь для прочного приаттачивания введенного текста к отрезку, посмотрим. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Все LISP-функции ruCAD (эта и около тысячи других) приведены в книге "САПР на базе AutoCAD - как это делается". Там есть и все, что вас интересует - и типами линий (генерируемыми автоматически) и подписыванием вдоль линии или с врезкой в разрыв. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Координаты области выделения | Тим Боль | Программирование | 6 | 04.11.2007 16:52 |
Как перевести координаты Модели в координаты Листа? | ===AAA=== | Программирование | 6 | 24.10.2007 22:09 |
Где хранятся координаты полки выноски ОТНОСИТЕЛЬНО ТЕКСТА? | kp+ | Программирование | 2 | 31.07.2006 09:55 |
Динамический ввод или демонический ввод? | TheBuTeK | Динамические блоки | 20 | 13.10.2005 09:36 |