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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить экранные координаты курсора

Как получить экранные координаты курсора

Ответ
Поиск в этой теме
Непрочитано 07.07.2010, 12:52 #1
Как получить экранные координаты курсора
+Alex+
 
Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96

Возможно ли получить экранные координаты курсора средствами Lisp?
Спасибо всем, кто откликнется?
Просмотров: 5516
 
Непрочитано 07.07.2010, 12:56
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Можно к примеру так: (cadr (grread T 9))
P.S. Это координаты в UCS, при помощи trans можно перевести в другие
Do$ вне форума  
 
Автор темы   Непрочитано 07.07.2010, 13:07
#3
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Мне нужно получить не координаты точки под курсором, а экранные координаты курсора, аналогичные или близкие по значениям получаемым через Windows API функцией GetCursorPos.
Ну или можно как-то конвертировать 3D Point (WCS) в экранные координаты (2D Point)
+Alex+ вне форума  
 
Непрочитано 07.07.2010, 13:08
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


(trans (cadr (grread T 9)) 1 2)
оно?

Последний раз редактировалось Do$, 07.07.2010 в 13:11. Причина: Исправился
Do$ вне форума  
 
Автор темы   Непрочитано 07.07.2010, 13:15
#5
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Do$
Нет, не оно, к сожалению...
(trans (cadr (grread T 9)) 1 3) и (trans (cadr (grread T 9)) 1 2) - возвращает 3D Point,
а нужны ее экранные координаты, например '(532 543 0) в пикселях.
+Alex+ вне форума  
 
Непрочитано 07.07.2010, 13:51
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Для чего такое в лиспе? Диалог под курсором расположить?
Do$ вне форума  
 
Автор темы   Непрочитано 07.07.2010, 13:58
#7
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Это нужно для вывода временной панели инструментов.
+Alex+ вне форума  
 
Непрочитано 07.07.2010, 14:02
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от +Alex+ Посмотреть сообщение
Это нужно для вывода временной панели инструментов.
Почему не воспользоваться свойствами Location и Size объекта Window, являющегося свойством Document?
hwd вне форума  
 
Автор темы   Непрочитано 07.07.2010, 14:18
#9
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


hwd
Не понимаю как.
Width и Height можно получить запросто. Но как это приплести к курсору?
+Alex+ вне форума  
 
Непрочитано 07.07.2010, 14:27
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от +Alex+ Посмотреть сообщение
hwd
Не понимаю как.
Width и Height можно получить запросто. Но как это приплести к курсору?
К курсору - никак. Это я написал к тому, что зная позиционинование окна чертежа (или окна приложения) + его размеры, можно указать позицию размещения твоей временной панели так, чтобы она размещалась внутри окна. Могу показать, как получить координаты курсора средствами .Net, но боюсь, что тебе это не сильно поможет (на Лиспе не смогу помочь).
hwd вне форума  
 
Непрочитано 07.07.2010, 15:21
#11
nikе

конструктор Лего
 
Регистрация: 21.10.2005
Краснодар
Сообщений: 204


Напишите на ARX +WinAPI и будет вам счастье. LISP может обратиться только к COM DLL.
nikе вне форума  
 
Непрочитано 07.07.2010, 16:39
#12
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Вопрос интересный
Есть в акаде переменные: viewsize, screensize и viewctr, с помощью grread и этих переменных можно определить положение курсора относительно границ окна активного чертежа. А координаты, которые используются для положения диалога, задаются относительно размеров всего экрана.. Приложил рисунок для наглядности.
Как определить положение окна чертежа относительно всего экрана - ничего не смог придумать .
lisp:
Код:
[Выделить все]
(defun cursor-position (/ px_size)
  (setq px_size (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))))
  ((lambda (lst1 lst2)
     (list (+ (car lst1) (car lst2)) (- (cadr lst2) (cadr lst1)))
   ) ;_ end of lambda
    (reverse
      (cdr (reverse
	     (mapcar '(lambda (c1 c2) (fix (/ (- c1 c2) px_size)))
		     (trans (cadr (grread T 9)) 1 2)
		     (trans (getvar "VIEWCTR") 1 2)
	     ) ;_ end of mapcar
	   ) ;_ end of reverse
      ) ;_ end of cdr
    ) ;_ end of reverse
    (mapcar '(lambda (c) (fix (/ c 2))) (getvar "SCREENSIZE"))
  )
) ;_ end of defun

(defun c:test (/ dialog_number done_dialog_number)
  (if (> (setq dialog_number (load_dialog "cursor_test.dcl")) 0)
    (while (not (member done_dialog_number (list 0 1)))
      (if (new_dialog
	    "position_test"
	    dialog_number
	    ""
	    (cursor-position)
	  ) ;_ end of new_dialog
	(progn
	  (setq done_dialog_number (start_dialog))
	) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of while
    (unload_dialog dialog_number)
  ) ;_ end of if
) ;_ end of defun
DCL (файл сохранить с названием cursor_test.dcl):
Код:
[Выделить все]
position_test:dialog {label="Над курсором!";
ok_cancel;
}
Миниатюры
Нажмите на изображение для увеличения
Название: cursor.jpg
Просмотров: 151
Размер:	58.4 Кб
ID:	41974  
Do$ вне форума  
 
Автор темы   Непрочитано 07.07.2010, 17:38
#13
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Do$, большое спасибо, уже что-то ...
есть над чем подумать.
+Alex+ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить экранные координаты курсора

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить контур сечениея Солида Плоскостью для образмеривания? Startrek AutoCAD 4 22.09.2008 17:06
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
Как получить таблицу свойств объектов такую же как в OrCad passat AutoCAD 1 08.12.2004 01:12