临时笔记,关于穿线…
HRESULT hr = S_OK;
//
// 1 - Retrieve Specification container //
//
CATFrmEditor *pEditor = CATFrmEditor::GetCurrentEditor();
CATPathElement path = pEditor->GetUIActiveObject ( );
CATISpecObject *piSpecOnActive = NULL;
hr = path.Search (IID_CATISpecObject, (void **) &piSpecOnActive );
if (FAILED(hr)||(NULL == piSpecOnActive)) {
cout<<"failed to get interface CATISpecObject from active object"<<endl;
}
// GetFeatContainer returns a smart pointer, we must store the result in a SP
// Otherwise, we will loose the reference on the returned object
CATIContainer_var spSpecCont = piSpecOnActive->GetFeatContainer();
piSpecOnActive->Release();piSpecOnActive=NULL;
CATIPrtContainer_var spPrtCont(spSpecCont);
CATIPrtPart_var spPart = spPrtCont->GetPart();
CATIPrtFactory_var spPrtFactory(spSpecCont);
CATIGSMFactory_var spGSMFactory(spSpecCont);
double point1[3] = { 0.0, 0.0, 0.0};
double point2[3] = { 0.0, 0.0, 100.0};
double point3[3] = { 0.0, 100.0, 100.0};
CATISpecObject_var spPoint1 = spGSMFactory->CreatePoint(point1);
CATISpecObject_var spPoint2 = spGSMFactory->CreatePoint(point2);
CATISpecObject_var spPoint3 = spGSMFactory->CreatePoint(point3);
CATIDescendants_var spDesc(spPart);
spDesc ->Append(spPoint1);
spDesc ->Append(spPoint2);
spDesc ->Append(spPoint3);
spPoint1->Update();
spPoint2->Update();
spPoint3->Update();
CATLISTV(CATISpecObject_var) ListPoints;
CATLISTV(CATISpecObject_var) ListRadius;
ListPoints.Append(spPoint1);
ListPoints.Append(spPoint2);
ListPoints.Append(spPoint3);
ListRadius.Append(NULL_var);
ListRadius.Append(NULL_var);
ListRadius.Append(NULL_var);
CATIGSMPolyline_var spPolyline = spGSMFactory->CreatePolyline(ListPoints, ListRadius, NULL_var);
CATISpecObject_var sp11111(spPolyline);
spDesc ->Append(sp11111);
sp11111->Update();
CATIGSMSweepCircle_var spSweepCircle = spGSMFactory->CreateCircularSweep(NULL_var, NULL_var, NULL_var);
CATGSMCircularSweepCase SweepCase = CATGSMCircularSweep_CenterAndRadius;
hr= spSweepCircle->SetMode(SweepCase);
spSweepCircle->SetGuide(sp11111);
double iElem = 0.001 ;
spSweepCircle->SetRadius(iElem , 1);
CATISpecObject_var sp22222(spSweepCircle);
spDesc ->Append(sp22222);
sp22222->Update();
CATISpecObject_var spVolumicCloseSurface = spPrtFactory->CreateCloseSurface(sp22222);