//============================================================================= // E3FFW_3DMF_Group : handle groups. //----------------------------------------------------------------------------- TQ3Status E3FFW_3DMF_Group(TQ3ViewObject theView, void *fileFormatPrivate, TQ3GroupObject theGroup, TQ3ObjectType objectType, const void *objectData) { #pragma unused(objectType) #pragma unused(objectData) TQ3Status qd3dStatus; TQ3GroupPosition position; TQ3Object subObject; TQ3DisplayGroupState groupState; TQ3Boolean wroteReference; if(Q3Group_GetType (theGroup) == kQ3GroupTypeDisplay){ Q3DisplayGroup_GetState (theGroup, &groupState); if((groupState & kQ3DisplayGroupStateMaskIsWritten) != kQ3DisplayGroupStateMaskIsWritten) return kQ3Success; } // submit the group start tag qd3dStatus = e3ffw_3DMF_TraverseObject_CheckRef (theView, (TE3FFormatW3DMF_Data*)fileFormatPrivate, theGroup, Q3Object_GetLeafType (theGroup), theGroup->FindLeafInstanceData (), &wroteReference); // If we actually wrote a reference instead of a group start tag, then we don't // want to write contents and group end. if (wroteReference == kQ3True) { return qd3dStatus; } // submit the group contents for(Q3Group_GetFirstPosition (theGroup, &position); (position != NULL) && (qd3dStatus == kQ3Success); Q3Group_GetNextPosition (theGroup, &position)) { qd3dStatus = Q3Group_GetPositionObject (theGroup, position, &subObject); if(qd3dStatus != kQ3Success) break; qd3dStatus = Q3Object_Submit (subObject, theView); Q3Object_Dispose (subObject); } // submit the group end tag if(qd3dStatus == kQ3Success) qd3dStatus = E3FFW_3DMF_TraverseObject (theView, (TE3FFormatW3DMF_Data*)fileFormatPrivate, NULL, 0x656E6467 /* endg - EndGroup*/, NULL); return(qd3dStatus); }
//------------------------------------------------------------------------------------------- // change the geometry of the object type with number num McoStatus LogoWin2::ChangeGeometry (McoQ3DType type, long num) { TQ3Status status; TQ3Object object = NULL; TQ3GroupPosition position; unsigned long triGridLibNum; McoQ3DObject *gammutObj; if (Document.fModel == nil) return MCO_OBJECT_NOT_INITIALIZED; status = Q3Group_GetFirstPositionOfType(Document.fModel, kQ3ShapeTypeGeometry, &position); while (status == kQ3Success && position != nil) { gammutObj = getObject(object); if (gammutObj->IsTypeNum(type,num)) { status = Q3Group_GetNextPosition(Document.fModel, &position); object = Q3Group_RemovePosition(Document.fModel, position); Q3Object_Dispose(object); removeObject(object); object = NULL; break; } Q3Group_GetNextPositionOfType(Document.fModel, kQ3ShapeTypeGeometry, &position); } object = NewPolyGCIELabRef(); //object = NewLogoObject(); if (object == NULL) return MCO_FAILURE; addObject(object,type,num); if (position != nil) Q3Group_AddObjectBefore (Document.fModel, position, object); else Q3Group_AddObject (Document.fModel, object); AddResourceTextureToGroup( LW_TEXTURE, Document.fModel); Q3Object_Dispose(object); return MCO_SUCCESS; }