Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
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; }
On 26/10/2007 at 05:10, xxxxxxxx wrote:
where in your code do you run into problems?
cheers, Matthias
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;
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; > } > _