get face number count for geometrics
-
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;
} -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/10/2007 at 05:10, xxxxxxxx wrote:
where in your code do you run into problems?
cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2007 at 17:58, xxxxxxxx wrote:
that can't to get polygon object and count face number back when I had added cube to scence after. show me the result of polygon's face and vertex number is 0;
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 02/11/2007 at 04:49, xxxxxxxx wrote:
It seems you don't convert your primitve objects into polygon objects. For instance you have first to convert the cube into a polygon object to access the polygons. The savest way to it is by using SendModelingCommand() to get the current state of your object. Here a little example.
> _
> Bool MenuTest::Execute(BaseDocument *doc)
> {
> StopAllThreads();
>
> BaseObject *op = doc->GetActiveObject();
> if(!op) return TRUE;
>
> BaseObject *res = NULL;
> ModelingCommandData cd;
> cd.doc = doc;
> cd.op = op;
> if(!SendModelingCommand(MCOMMAND_CURRENTSTATETOOBJECT, cd)) return FALSE;
> res = static_cast<BaseObject*>(cd.result->GetIndex(0));
>
> if(!res) return FALSE;
>
> if(res->GetType() == Opolygon)
> {
> GePrint("point count "+LongToString(ToPoly(res)->GetPointCount()));
> }
>
> return TRUE;
> }
> _cheers,
Matthias