25/07/2013
Как получить координаты курсора мыши в ПСК?
Следующий код (фильтр сообщений окна) получает и печатает координаты курсора мыши в ПСК. Координаты те же, что показывает AutoCAD в свой строке состояния.
Код - C++: [Выделить]
- BOOL filterMouse(MSG *pMsg)
- {
- if( pMsg->message == WM_MOUSEMOVE )
- {
- acedDwgPoint cpt;
- ads_point ptDCS, norm;
- AcGePoint3d origin;
- AcGeVector3d e0, e1, e2;
- AcGeMatrix3d matUcs2Wcs, matWcs2Ucs;
- // 1: Получаем координаты мыши в ДСК (дисплейная система координат)
- //
- CPoint cPnt (pMsg->lParam) ;
- acedCoordFromPixelToWorld (cPnt, cpt) ;
- ads_point_set ( cpt, ptDCS );
- // 2: Преобразуем координаты из ДСК в ПСК
- //
- ads_point result;
- struct resbuf fromrb, torb;
- fromrb.restype = RTSHORT;
- fromrb.resval.rint = 2; // ДСК
- torb.restype = RTSHORT;
- torb.resval.rint = 1; // ПСК
- // disp == 0 означает, что pt – это точка (а не вектор)
- acedTrans(ptDCS, &fromrb, &torb, FALSE, result);
- // 3: Проецируем точку в ПСК на плоскость XY ПСК
- //
- struct resbuf rbview;
- ads_getvar( _T("viewdir"), &rbview );
- ads_point_set( rbview.resval.rpoint, norm );
- AcGePlane thePlane; // Конструктор по-умолчанию создаёт плоскость XY
- AcGePoint3d pntInUCS( result[X], result[Y], result[Z] );
- AcGeVector3d vecViewdir( norm [X], norm [Y], norm [Z] );
- AcGePoint3d resPnt = pntInUCS.project (thePlane, vecViewdir);
- // 4: Печатаем результат
- //
- ads_printf ( _T("\nКоординаты мыши в ПСК -resPnt %f, %f, %f"),
- resPnt[X],resPnt[Y], resPnt[Z] );
- }
- else if( pMsg->message ==WM_LBUTTONDOWN)
- {
- acedRemoveFilterWinMsg(filterMouse);
- }
- return FALSE; // продолжаем
- }
Вы можете зарегистрировать этот фильтр как-нибудь так:
acedRegisterFilterWinMsg(filterMouse);
А отменить регистрацию так:
acedRemoveFilterWinMsg(filterMouse);
Источник: http://adndevblog.typepad.com/autocad/2013/02/how-to-get-the-mouse-cursor-coordinates-in-ucs.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=138.0
Опубликовано 25.07.2013
Отредактировано 04.08.2013 в 17:19:46
Отредактировано 04.08.2013 в 17:19:46