|
马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
各位大侠:
我是NXOPEN 的新手,目前遇到一个问题,已经卡住很久了。
我从X3D 文件里提取出来一个面的描述(一连串的点的坐标: 比如point="-4.325 -1.394 0.974, -4.325 -0.146 1.694, -4.35 -0.139 1.669, -4.35 -1.376 0.955"), 我把这个坐标存在了一个link list (point3List)里, 并试图用这些坐标来确认一个part中的face。我用
void evaluateClosestPoint (
const Point3 & reference_point,
double * parameter,
Point3 * closest_point ) const;
来获取一个面上离已知的点最近的点closest_point,然后用这个点再和那个已知点来比较,
bool isEqual (
const Point3 & point,
double tolerance ) const
如果这两个点相同,那么在处理link list里的下一个点。如果坐标中所有点都在这个面上,那么理论上这两个面就印证了。 可是事实上却不工作。
哪位大侠知道更好的函数来解决这个问题呢?也许我用的函数不对,或者太繁琐?我的代码如下:
// check if this point on any face
UgIterator < UgFace > curFace;
while ( !curFace.isFinished ( ) )
{
// point3List 是个link list,含有X3D文档中提取的用来描述一个面的坐标。
point3ListIt = point3List->begin();
while( point3ListIt != point3List->end() )
{
Point3 *closestPoint = new Point3( );
(*curFace)->evaluateClosestPoint ( *point3ListIt, ¶meter_u, ¶meter_v, closestPoint);
// once found the matching face, check the next point
if ( closestPoint->isEqual( *point3ListIt, 0.0000001f) == true)
{
cout<< "current point is equal" << endl;
bMatched = true;
point3ListIt++;
}
// else try next face in the part then
else
{
cout<< "current point is not equal" << endl;
point3ListIt = point3List->begin();
bMatched = false;
break;
}
}
// if all points in this array(Face) matching with this face, the two faces are matching
if(point3ListIt == point3List->end() && bMatched == true)
{
// Get the name of the matching face
faceName = (*curFace)->getName ( );
return faceName;
}
else
{
curFace.findNext( );
}
}
SOS!!!!!!!!!!! |
|