THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/10/2007 at 02:08, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 9.5
Platform: Windows ;
Language(s) : C++ ;
---------
I want to find out and get the face number of count result and vertex number .... but I have a little trouble that my code can't get back the correct result :
my code:
void GetAllPolygon(AtomArray *oPolygons,BaseObject *oPolys)
{
if(oPolys)
{
//MessageDialog("GetType Begin");
if( oPolys->GetType() == Opolygonn ) //||( oPolys->GetType() == Ocylinder)||( oPolys->GetType() == Ocube)||( oPolys->GetType() == Osphere))
{
oPolygons->Append(oPolys);
}
if(oPolys->GetDown())
{
GetAllPolygon(oPolygons,oPolys->GetDown());
}
if(oPolys->GetNext())
{
GetAllPolygon(oPolygons,oPolys->GetNext());
}
}
// MessageDialog("GetNext End");
}
LONG GetAllPolygon(AtomArray * oPolygon)
{
if(!oPolygon)
{
//MessageDialog("Alloc AtomArray Fail that Can't get polygon ");
return 0;
}
BaseDocument *doc=GetActiveDocument();
BaseObject *obj = doc->GetFirstObject();
if(obj)
{
//MessageDialog("To get polyon ");
GetAllPolygon(oPolygon,obj);
}
return oPolygon->GetCount();
}
void SnapPolygonData( AtomArray *oPolygons, LONG lPolygonCnt, LONG& out_iFaceNumCount, LONG& out_iVertexNumCount)
{
LONG nCount = 0;
if ( lPolygonCnt == 0)
{
return;
}
BaseDocument* doc = GetActiveDocument();
//MessageDialog( LongToString(lPolygonCnt) );
for(LONG i = 0;i < lPolygonCnt; i++)
{
PolygonObject *obj=(PolygonObject* )oPolygons->GetIndex(i);
//MessageDialog(obj->GetName());
if ( !obj) break;
LONG lngFace = obj->GetPolygonCount();
LONG lngVertex = obj->GetNgonCount();
out_iFaceNumCount += lngFace;
out_iVertexNumCount += lngVertex;
}
}
bool GetMetaData( LONG& out_iFaceCount, LONG& out_iVertexCount )
{
LONG iFaceNumCount = 0;
LONG iVertexNumCount = 0;
AtomArray* oPolygons = AtomArray::Alloc();
if ( !oPolygons )
{
MessageDialog( "AtomArray Alloc Is Fail" );
return false;
}
//MessageDialog( "AtomArray Alloc Is Succuss" );
LONG lPolygonCnt = GetAllPolygon(oPolygons);
MessageDialog( LongToString(lPolygonCnt) );
SnapPolygonData( oPolygons, lPolygonCnt, iFaceNumCount, iVertexNumCount);
out_iFaceCount = iFaceNumCount;
out_iVertexCount = iVertexNumCount;
AtomArray::Free(oPolygons) ;
return true;
}