int AseFile::ReadGroup() { char temp[255]; do { if( !fgets(temp, 255, file) )return 0; if( EqualString( temp, "*GEOMOBJECT ") ) { if(!ReadGeomObject())return 0; continue; } else if( EqualString( temp, "*LIGHTOBJECT") ) { if(!ReadLightObject())return 0;} // else if( EqualString( temp, "*HELPEROBJECT ") ) { if(!ReadGroupHelperObject())return 0; continue; } else ReadUnknown( temp); }while(!FindBracketClose( temp)); // while temp not contain '}' return 1; }
int AseFile::ReadAseFile() { char temp[255]; if(!file)return 0; while( fgets(temp, 255, file) ) { if( EqualString( temp, "*MATERIAL_LIST") ) { if(!ReadMaterial_List())return 0;} else if( EqualString( temp, "*GEOMOBJECT") ) { if(!ReadGeomObject())return 0;} else if( EqualString( temp, "*GROUP") ) { if(!ReadGroup())return 0;} else if( EqualString( temp, "*LIGHTOBJECT") ) { if(!ReadLightObject())return 0;} // else if( EqualString( temp, "*CAMERAOBJECT") ) { if(!ReadCameraObject())return 0;} else ReadUnknown( temp); } return 1; }
bool bgParserASE::Read() { bool hr = true; TCHAR szWordArray[2][MAX_PATH * 4]; // m_ASE 데이터 초기화 ZeroMemory(&m_pModel->m_Scene, sizeof(SceneInfo)); m_pModel->m_MaterialList.clear(); m_pModel->m_ObjectList.clear(); // 파일 앞부분 1회만 등장하는 섹션 읽기 IF_FALSE_RETURN(FindWord(_T("*SCENE"))); IF_FALSE_RETURN(ReadScene()); IF_FALSE_RETURN(FindWord(_T("*MATERIAL_LIST"))); IF_FALSE_RETURN(ReadMaterial()); // 여러번 등장하는 섹션 반복해서 읽기 _tcscpy(szWordArray[0], _T("*GEOMOBJECT")); _tcscpy(szWordArray[1], _T("*HELPEROBJECT")); while (!feof(m_pFile)) { switch (FindWordArray(szWordArray, 2)) { case 0: IF_FALSE_RETURN(ReadGeomObject()); break; case 1: IF_FALSE_RETURN(ReadHelperObject()); break; case -1: // 찾는 단어 없음 (파일의 끝) { ConvertToModel(); // 읽은 데이터를 모델용 데이터로 컨버팅 LinkNode(); // 노드 관계 연결 OperationTM(); // 노드 관계에 따른 행렬 연산 } break; default: // 나머지 (배열 요소가 2개이므로 나올 수 없음) return false; break; } } return hr; }