Тема: AcGeView Coords
как преобразовать координаты мыши(x, y) в 3d view
координаты(x, y, z)?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → AcGeView Coords
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
как преобразовать координаты мыши(x, y) в 3d view
координаты(x, y, z)?
Примерно так:
BOOL TransScreenCoordinatesToAcGePoint3d(CPoint point, AcGePoint3d &pt3d) { CView *pView = acedGetAcadDwgView(); if(!pView)return FALSE; int windnum = acedGetWinNum(point.x,point.y); CRect r; pView->GetClientRect(&r); pView->ClientToScreen(&r); acedDwgPoint ptOut; AcGePoint3d p3d; point.x -=r.left; point.y -=r.top; BOOL res = acedCoordFromPixelToWorld(windnum,point,ptOut); if (res) p3d = AcGePoint3d(ptOut[0],ptOut[1],ptOut[2]); return res; }
как-то непереносимо...
может лучше так..??
AcGePoint3d toEye(long x, long y)
{
AcGePoint3d eyePt(x,y,0);
AcDbViewportTableRecord* vp = 0;
acdbOpenAcDbObject((AcDbObject*&)vp,acedActiveViewportId(),AcDb::kForRead);
AcGsView* view = vp->gsView();
eyePt.transformBy((view->screenMatrix() * view->projectionMatrix()).inverse());
return eyePt;
}
> rolik
Сформулируй четко что тебе нужно. Покажи кусок кода, в которых эти методы не работают. Это конечно если ты хочешь получить помощь...
void cContourWnd::OnLButtonUp(UINT flags, CPoint pt)
{
AcGePoint3d rayPos;
AcGeVector3d rayDir;
AcGeVector3d vr;
AcGePoint3d cPt;
AcGePlane plane(AcGePoint3d(0, 0, 0), AcGeVector3d(0, 0, 1));
AcGePoint3d v(pt.x, pt.y, 0);
v.transformBy((m_pView->screenMatrix() * m_pView->projectionMatrix()).inverse());
/*
m_pView->setView(AcGePoint3d(0, 0, 100), AcGePoint3d(0, 0, 0), AcGeVector3d(0, 0, 1));
так камера уже установлена
ну вот при клике от центра слева v.x < 0, справа v.x > 0
так должно быть но нет а мне еше надо шчитать пересечение
plane(0, 0, 1).intersect(ray(view.position), v)
*/
}
> rolik
А так?
void cContourWnd::OnLButtonUp(UINT flags, CPoint pt) { AcGePoint3d rayPos; AcGeVector3d rayDir; AcGeVector3d vr; AcGePoint3d cPt; AcGePlane plane(AcGePoint3d(0, 0, 0), AcGeVector3d(0, 0, 1)); AcGePoint3d v(pt.x, pt.y, 0); v.transformBy((m_pView->screenMatrix() * m_pView->worldToDeviceMatrix().inverse()); }
Возможно (не проверял) еще нужно преобразовать координаты pt из оконных в экранные (при помощи ClientToScreen).
да x как бы совпадает но не совсем
а y никак при замене знака все летет к чертям
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → AcGeView Coords
Форум работает на PunBB, при поддержке Informer Technologies, Inc