CATFrmEditor*pEditor= _pPathAgent->GetEditor();
CATISO *pISO=pEditor->GetISO();
CATDocument*pDoc=pEditor->GetDocument();
CATIContainer*pContainer=NULL;
if (pEditor!=NULL&&pDoc!=NULL)
{
CATIContainerOfDocument*pConOfDoc=NULL;
if (SUCCEEDED(pDoc->QueryInterface(IID_CATIContainerOfDocument,(void**)&pConOfDoc)))
{
pConOfDoc->GetSpecContainer(pContainer);
}
}
cout<<"Starter"<<endl;
CATPathElement*pPath=_pPathAgent->GetValue();
if (pPath!=NULL)
{
int EleIndex=pPath->GetSize()-1;
CATBaseUnknown*pElement=(*pPath)[EleIndex];
CATIBRepAccess*pBRep=NULL;
if (SUCCEEDED(pElement->QueryInterface(IID_CATIBRepAccess,(void**)&pBRep)))
{
CATLISTV(CATBaseUnknown_var)ListTopCell;
ListTopCell=pBRep->GetCells(2);
if (ListTopCell.Size())
{
for (int i=1;i<=ListTopCell.Size();i++)
{
CATFace_var spFace=(CATFace_var)ListTopCell[i];
if (spFace!=NULL_var)
{
CATSurface*pSurface=spFace->GetSurface();
if (pSurface==NULL)
{
return TRUE;
}
CATSurParam oSurParamEnd,oSurParamStar;
pSurface->GetEndLimit(oSurParamEnd);
pSurface->GetStartLimit(oSurParamStar);
double oEndGlobalParamU,oEndGlobalParamV,oStartGlobalParamU,oStartGlobalParamV;
oSurParamStar.GetParams(oStartGlobalParamU,oStartGlobalParamV);
oSurParamEnd.GetParams(oEndGlobalParamU,oEndGlobalParamV);
double IncrementU=(oEndGlobalParamU-oStartGlobalParamU)/10;
double IncrementV=(oEndGlobalParamV-oStartGlobalParamV)/10;
double CurrentU=0.0;
double CurrentV=0.0;
pISO->Empty();
for (int i=0;i<=10;i++)
{
CurrentU=oStartGlobalParamU+IncrementU*i;
for (int j=0;j<=10;j++)
{
CurrentV=oStartGlobalParamV+IncrementV*j;
CATSurParam CurrentParam;
pSurface->CreateParam(CurrentU,CurrentV,CurrentParam);
CATMathPoint Poinr3D;
pSurface->EvalPoint(CurrentParam,Poinr3D);
double Coord[3];
Poinr3D.GetCoord(Coord);
CATIGSMFactory_var spGSMFact=pContainer;
CATIGSMPoint_var spPoint=spGSMFact->CreatePoint(Coord);
pISO->AddElement(spPoint);
}
}
}
}
}
pBRep->Release();
pBRep=NULL;
}
测试曲面