几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】odgeline3dclosestpointto90 not working (http://www.dimcax.com/hust/showthread.php?t=17673)

yang686526 2009-05-06 08:36 PM

【转帖】odgeline3dclosestpointto90 not working
 
odgeline3d::closestpointto() not working
odgeline3d::closestpointto() not working
hi,
in the examples cpp file odcurvefunction.cpp function closestpointto is used.
code:
odresult oddbcurvepe_line::getclosestpointto(const oddbcurve* curve,
const odgepoint3d& givenpoint,
odgepoint3d& pointoncurve,
bool extend ) const
{
....
else if ( extend )
pointoncurve = odgeline3d(p1,p2).closestpointto(givenpoint);
else
pointoncurve = odgelineseg3d(p1,p2).closestpointto(givenpoint);
return eok;
}
but when i am using the function closestpointto() for odgeline3d.. its crashing saying "not implement".. if it still implement then that sudn't be used in example file.. or i am doing somthing wrong...
my code is.....
code:
oddbxlineptr xline = (oddbxlineptr)m_poddbentity;
odgepoint3d basepoint = xline->basepoint();
odgevector3d unitdir = xline->unitdir();
odgepoint3d secondpoint( basepoint.x - unitdir.x, basepoint.y - unitdir.y, basepoint.z - unitdir.z);
odgeline3d line( basepoint, secondpoint);
pointoncurve = line.closestpointto(givenpoint);
can anybody tell... what i m doing wrong.. i want to calculate the closest point for an infinite line..
thanks.......
.................................................. .........................

you are right. odgeline3d::closestpointto is not implemented.
(it seems that 'extend' case was not tested, in that sample)
you may easily implement oddbcurvepe_line::getclosestpointto otherwise, e.g. like this:
code:
...
else if (extend)
{
odgevector3d v = (p2 - p1).normal();
pointoncurve = p1 + v * v.dotproduct(givenpoint - p1)
}
...
vladimir
thank you for the reply....
.................................................. .........................


所有的时间均为北京时间。 现在的时间是 08:48 PM.