Adding a Geometrical Object to a CATIA part

The CATGeoFactory allows you to create geometry that is not able to be created interactively (i.e. a NURBS surface). However, since the CATGeoFactory only creates geometry, you cannot view it in CATIA unless you make it a feature. There are two ways to do this: with a procedural report or without a procedural report. The option to do it with a procedural report makes the feature parametric, but it is far more complicated. Doing it without a procedural report is much simpiler and will be illistrated in the example below. To read more about how to create a feature using a procedural report (parametric) see the article in the CAA V5 Encyclopedia "Integrating a New Geometrical Feature in the Update Mechanism".

The example below creates a datum feature from a NURBS surface and adds it to the procedural report. See the wiki article Creating a NURBS Surface in CAA RADE for more details on how to create a NURBS surface.

Before making a datum feature you need to make a CATBody. In the case of a NURBS surface, you need to make a skin from the CATNurbsSurface. Then get the result to instanciate a CATBody. See the code below:

CATSurLimits surMaxLimits ;
piSurf1->GetMaxLimits(surMaxLimits) ;
CATSoftwareConfiguration * pConfig = new CATSoftwareConfiguration();
CATTopData topdata(pConfig);
CATTopSkin * pSkinOpe =::CATCreateTopSkin(piGeomFactory,&topdata,piSurf1,&surMaxLimits); 

// Gets the resulting body
CATBody * piSkinBody = pSkinOpe->GetResult();

// Deletes the operator
delete pSkinOpe;

Next you will instanciate the datum from the CATBody:

CATIDatumFactory_var spDatumFactory;
spDatumFactory = pSpecContainer;
CATISpecObject* oDatumFeature;
spDatumFactory->InstanciateDatum(piSkinBody, oDatumFeature);

Last you update the datum and add it to the procedural view:

spCurObj = oDatumFeature;


Note that the CATSoftwareConfiguration was released. This is done to free up memory.