public void Parse(object args) { string path = (string)args; //내용 임시저장 Queue <string> lines = new Queue <string>(); Stack <CNT> stackCNT = new Stack <CNT>(); List <CNT> CntList = new List <CNT>(); FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite); StreamReader reader = new StreamReader(fs); string strLine = string.Empty; string siteName = string.Empty; CNT currentCNT = null; bool isEnd = false; int primCnt = 0; while (reader.EndOfStream == false) { strLine = ReadLine(reader, lines); if (strLine == "CNTB") { //시작 체크 isEnd = false; strLine = ReadLine(reader, lines, 2); //이름으로 생성 CNT newCNT = new CNT(strLine); //root 표시 if (this.CheckSiteName(strLine)) // 파일 이름이면. { this.rootList.Add(newCNT); CntList = new List <CNT>(); this.allCNTList.Add(CntList); } //xyz좌표가져오기 strLine = ReadLine(reader, lines, 1); newCNT.AddXYZ(strLine); //스택에 추가 stackCNT.Push(newCNT); CntList.Add(newCNT); //현재 노드 갱신 if (currentCNT != null && isEnd == false) { currentCNT.AddCNT(newCNT); } currentCNT = newCNT; } else if (strLine == "CNTE") { //그룹 끝 체크 isEnd = true; //부모 노드로 교체 try { currentCNT = stackCNT.Pop().Parent; } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } } else if (strLine == "PRIM") { primCnt++; //타입 읽기 strLine = ReadLine(reader, lines, 2); PRIM newPRIM = new PRIM(strLine); //prim 추가 currentCNT.AddPRIM(newPRIM); //회전 string[] rotationArr = new string[3]; for (int i = 0; i < 3; i++) { rotationArr[i] = ReadLine(reader, lines, 1); } newPRIM.SetRotation(rotationArr); //바운드 string[] boundArr = new string[2]; for (int i = 0; i < 2; i++) { boundArr[i] = ReadLine(reader, lines, 1); } newPRIM.SetBound(boundArr); if (newPRIM.Type == 7 || newPRIM.Type == 1) { //길이 7번( 콘은) 2줄 string[] lengthArr = new string[2]; for (int i = 0; i < 2; i++) { lengthArr[i] = ReadLine(reader, lines, 1); } newPRIM.SetLength(lengthArr); } else if (newPRIM.Type == 11) { //strLine = ReadLine(reader, lines, 6); strLine = ReadLine(reader, lines, 1); int faceCnt = -1; int.TryParse(strLine, out faceCnt); int subfaceCnt = -1; for (int fi = 0; fi < faceCnt; fi++) { subfaceCnt = -1; strLine = ReadLine(reader, lines, 1); int.TryParse(strLine, out subfaceCnt); //보통 1 for (int sfi = 0; sfi < subfaceCnt; sfi++) { int vertaxCnt = -1; strLine = ReadLine(reader, lines, 1); int.TryParse(strLine, out vertaxCnt); newPRIM.AddVertextCount(vertaxCnt); Vertices newVertices = new Vertices(); for (int vi = 0; vi < vertaxCnt; vi++) { strLine = ReadLine(reader, lines, 1); string v = strLine; strLine = ReadLine(reader, lines, 1); string r = strLine; newVertices.AddVertex(v, r); } newPRIM.AddVertices(newVertices); } } } else { //길이 1~8, 9번 1줄 string[] lengthArr = new string[1]; lengthArr[0] = ReadLine(reader, lines, 1); newPRIM.SetLength(lengthArr); } } } }