/******************************************************************************/
/*  : GetCrossPoint */
/*  : õλúͽꡣ */
/*  : AcGePoint3dArray PolylineĵС */
/* AcGePoint3d ѡ㡣 */
/* double PickBoxĳȡ */
/* Adesk::Boolean պԡ */
/*  : int λãǰ */
/* int λã󣩡 */
/* AcGePoint3d  */
/* ꂎ : TRUE  */
/* FALSE 쳣 */
/*  :  */
/******************************************************************************/
BOOL GetCrossPoint(AcGePoint3dArray gePoi3dA, AcGePoint3d gePoi3d, double dPickLen, int & iCrsID1, 
int & iCrsID2, AcGePoint3d & gePoi3dCrs, Adesk::Boolean bIsClosed = Adesk::kTrue)
{
ads_point spt1, spt2, spt3, spt4;
AcGePoint3d GePoi3dStart, GePoi3dNext;
int iReturn, iNum;

iNum = gePoi3dA.length();
if (iNum < 2) {
return FALSE;
}

/*õλ*/
for (int i = 0; i < iNum; i++) {
iCrsID1 = i;

//õǰһ
asPnt3d(spt3) = gePoi3dA[iCrsID1];

//õһ
if (i == iNum - 1) {
//ʵǷǱպϡ
if (!bIsClosed) {
break;
} 
else {
iCrsID2 = 0;
}
}
else {
iCrsID2 = i + 1;
}
asPnt3d(spt4) = gePoi3dA[iCrsID2];

spt3[Z] = 0;
spt4[Z] = 0;

/*XǷн㡣*/
spt1[X] = gePoi3d.x + (dPickLen / 2); spt2[X] = gePoi3d.x - (dPickLen / 2);
spt1[Y] = gePoi3d.y; spt2[Y] = gePoi3d.y;
spt1[Z] = 0; spt2[Z] = 0;
iReturn = acdbInters(spt1, spt2, spt3, spt4, 1, asDblArray(gePoi3dCrs));
if (iReturn == RTNORM) {
return TRUE;
}

/*YǷн㡣*/
spt1[X] = gePoi3d.x; spt2[X] = gePoi3d.x;
spt1[Y] = gePoi3d.y + (dPickLen / 2); spt2[Y] = gePoi3d.y - (dPickLen / 2);
spt1[Z] = 0; spt2[Z] = 0;
iReturn = acdbInters(spt1, spt2, spt3, spt4, 1, asDblArray(gePoi3dCrs));
if (iReturn == RTNORM) {
return TRUE;
}
}
return FALSE;
} 

һȫһԶ޸ġ
"ջ"õĶǺܶࡣ
acdbInters //󽻲ĺ
