예제 #1
0
//=============================================================================
//      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);
}
예제 #2
0
//-------------------------------------------------------------------------------------------
// 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;
}