void CInputDeviceDesc::Dump(void) { CTextFile cFile; CChars szName; cFile.Init(); ToString(&cFile.mcText); szName.Init("../"); szName.Append(mszFriendlyName.Text()); szName.Append(".txt"); cFile.Write(szName.Text()); szName.Kill(); cFile.Kill(); }
BOOL SaveOBJ(CMesh *pcMesh, char* szFileName) { CTextFile cTextFile; BOOL bTextureCoords; BOOL bVertexNormals; cTextFile.Init(); AddOBJHeading(&cTextFile.mcText); AddOBJName(pcMesh, &cTextFile.mcText); AddOBJVertices(pcMesh, &cTextFile.mcText); bVertexNormals = AddOBJNormals(&pcMesh->mcNormals, &cTextFile.mcText); bTextureCoords = AddOBJTextureCoords(&pcMesh->mcUVs, &cTextFile.mcText); AddOBJFaces(pcMesh, &cTextFile.mcText, bTextureCoords, bVertexNormals); cTextFile.Write(szFileName); cTextFile.Kill(); return FALSE; }
BOOL CConvexHullGenerator::Generate(void) { int iMaxXIndex; int iMinXIndex; CHalfSpaceHelper cHalfSpace; int iFarIndex; SFloat3* psPosition; CArrayExtremeTrianglePtr apcTriangles; CExtremeTriangle* pcTriangle; CExtremeTriangle* pcDeleted; SFreeListIterator sIter; CArrayExtremeTrianglePtr cDeleted; CArrayExtremeTrianglePtr cFixedDeleted; int j; SConvexHullHoleEdge sEdges; int k; int aiIndex[3]; int iIndex; CExtremeTriangle* pcSelected; CTextFile cTextFile; int iTriangle; float fMinX; float fMaxX; iMaxXIndex = FindMaxX(&fMinX); iMinXIndex = FindMinX(&fMaxX); iFarIndex = FindFurthestPoint(iMaxXIndex, iMinXIndex); if (iFarIndex == -1) { gcUserError.Set("Could not find a third point generating Convex Hull."); return FALSE; } apcTriangles.Init(2048); if (!FindFirstPairTriangles(&apcTriangles, iMaxXIndex, iMinXIndex, iFarIndex)) { gcUserError.Set("Could not find the first triangle pair generating Convex Hull."); return FALSE; } cDeleted.Init(512); cFixedDeleted.Init(512); for (iTriangle = 0; iTriangle < apcTriangles.NumElements(); iTriangle++) { pcSelected = *apcTriangles.Get(iTriangle); if ((pcSelected == NULL) || (pcSelected->maiVisible.NumElements() == 0)) { continue; } aiIndex[0] = GetIndex(mpsPoints, iStride, pcSelected->mpsPosition); aiIndex[1] = GetIndex(mpsPoints, iStride, pcSelected->mpsPosition1); aiIndex[2] = GetIndex(mpsPoints, iStride, pcSelected->mpsPosition2); iFarIndex = pcSelected->FindFurthestPoint(mpsPoints, iStride); if (iFarIndex == -1) { gcUserError.Set("Could not find furthest point!"); return FALSE; } cDeleted.FakeSetUsedElements(0); //It's sort of safe to do this. psPosition = GetPosition(mpsPoints, iStride, iFarIndex); pcTriangle = (CExtremeTriangle*)mcTriangles.StartIteration(&sIter); while (pcTriangle) { if (pcTriangle->maiVisible.NumElements() > 0) { if (pcTriangle->NotContains(psPosition)) { cDeleted.Add(&pcTriangle); } } pcTriangle = (CExtremeTriangle*)mcTriangles.Iterate(&sIter); } RemoveDiscontiguousTriangles(pcSelected, &cDeleted, &cFixedDeleted); for (j = 0; j < cDeleted.NumElements(); j++) { pcDeleted = *cDeleted.Get(j); FindEdges(&sEdges, pcDeleted, &cDeleted); for (k = 0; k < sEdges.iNumEdges; k++) { pcTriangle = AddTriangle(GetPosition(mpsPoints, iStride, sEdges.aaiEdgeIndices[k][0]), GetPosition(mpsPoints, iStride, sEdges.aaiEdgeIndices[k][1]), GetPosition(mpsPoints, iStride, iFarIndex)); apcTriangles.Add(&pcTriangle); AddPointsFromTriangles(pcTriangle, &cDeleted, iFarIndex); } } for (j = 0; j < cDeleted.NumElements(); j++) { pcDeleted = *cDeleted.Get(j); pcDeleted->Kill(); mcTriangles.Remove(pcDeleted); iIndex = apcTriangles.FindWithIntKey((int)(size_t)pcDeleted, 0); *(apcTriangles.Get(iIndex)) = NULL; } } cDeleted.Kill(); cFixedDeleted.Kill(); apcTriangles.Kill(); RemoveSlivers(); if (mszHullName) { CChars szTemp; szTemp.Init("Writing Hull file ["); szTemp.Append(mszHullName); szTemp.Append("]\n"); szTemp.Kill(); cTextFile.Init(); DumpTriangleObj(&cTextFile.mcText, iTriangle); cTextFile.Write(mszHullName); cTextFile.Kill(); } return TRUE; }
void TestBufferedFileRead(void) { CFileUtil cFileUtil; CFileBasic cFile; CTextFile cText; char sz[20]; char c; int iCount; int i; char szExpected[20]; cFileUtil.Delete("Test.txt"); cText.Init(); cText.mcText.Append("abcdefghijk"); cText.Write("Test.txt"); cText.Kill(); cFile.Init(BufferedFile(DiskFile("Test.txt"), 3)); cFile.Open(EFM_Read); for (c = 'a'; c <= 'k'; c++) { AssertFalse(cFile.IsEndOfFile()); memset(sz, 0, 20); iCount = (int)cFile.Read(sz, 1, 1); AssertChar(c, sz[0]); AssertChar(0, sz[1]); AssertInt(1, iCount); } AssertTrue(cFile.IsEndOfFile()); cFile.Seek(0); szExpected[2] = 0; for (i = 0; i < 5; i++) { AssertFalse(cFile.IsEndOfFile()); memset(sz, 0, 20); iCount = (int)cFile.Read(sz, 1, 2); szExpected[0] = 'a' + (char)i * 2; szExpected[1] = 'b' + (char)i * 2; AssertString(szExpected, sz); AssertInt(2, iCount); } AssertFalse(cFile.IsEndOfFile()); memset(sz, 0, 20); iCount = (int)cFile.Read(sz, 1, 2); AssertString("k", sz); AssertInt(1, iCount); AssertTrue(cFile.IsEndOfFile()); cFile.Seek(0); szExpected[3] = 0; for (i = 0; i < 3; i++) { AssertFalse(cFile.IsEndOfFile()); memset(sz, 0, 20); iCount = (int)cFile.Read(sz, 1, 3); szExpected[0] = 'a' + (char)i * 3; szExpected[1] = 'b' + (char)i * 3; szExpected[2] = 'c' + (char)i * 3; AssertString(szExpected, sz); AssertInt(3, iCount); } AssertFalse(cFile.IsEndOfFile()); memset(sz, 0, 20); iCount = (int)cFile.Read(sz, 1, 3); AssertString("jk", sz); AssertInt(2, iCount); AssertTrue(cFile.IsEndOfFile()); cFile.Kill(); cFileUtil.Delete("Test.txt"); }