查看单个帖子
旧 2009-05-06, 08:58 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】odgsview worldtodevicematrix90

odgsview:: worldtodevicematrix()
odgsview:: worldtodevicematrix()
hello again,
i磎 trying to add an oddbline entity to the database in your odamdiapp application.
i'm using the following code into onlbuttonup method in order to obtain wcs coordinates from device coordinates that onlbuttonup uses.
the problem i got is that after the call to transformby() ptaux.z is equal to 1 and the application crashes when it try to redraw:
odgsview* pview = getactiveview();
odgematrix3d mattransform;
mattransform=pview->worldtodevicematrix();
mattransform.invert();
odgepoint3d ptaux;
ptaux.x = m_startpoint.x;
ptaux.y = m_startpoint.y;
ptaux.transformby(mattransform);
pline->setstartpoint(ptaux);
ptaux.x = m_endpoint.x;
ptaux.y = m_endpoint.y;
ptaux.transformby(mattransform);
pline->setendpoint(ptaux);
thanks, best regards to all the team.

i cannot reproduce any crashes on version 1.07. next version of dwgdirect will contain an example of adding oddbline (retrieving coordinates from mouse clicks).
btw, correct way to get wcs coordinates of point is using ucs:
ptwcs = ptdevice * ([ucs->wcs]*[wcs->dev])^(-1) * [ucs->wcs]
where
[ucs->wcs] is matrix transforming 2d ucs coords to 3d wcs,
[wcs->dev] is matrix transforming 3d wcs coords to 2d device.
matrix multiplications' order here like in mathematics (not like in dwgdirect), expression in brackets is inverted as 2d matrix.
sincerely yours,
george udov
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)