-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathob2ply(search_in_subfolders).cs
251 lines (174 loc) · 10.9 KB
/
ob2ply(search_in_subfolders).cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
// èùåò ôàéëû ñ ðàñøèðåíèåì *.ob â ïîäïàïêàõ è êîíâåðòèò èõ â *.ply
using System;
using System.IO;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
sealed class Test
{
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
static List<string> WritePLYList = new List<string>(); // ñþäà áóäåì äîáàâëÿòü âñå ñòðîêè
static string[] readText; // õðàíèò âñå ñòðîêè èç ôàéëà
static int VTXS, POLY4, POLY3; // õðàíÿò êîëè÷åñòâî âåðøèí è ò.ä.
static string[] uv; // 6 0,09163 0,565323 0,109197 0,565733 0,10888 0,602539
static string[] FaceList;
static float[] uv_ar;
static SortedList<int, string> texture_page_list = new SortedList<int, string>();
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
public static int Main(string[] args)
{
int VTXS10 = 10; // êîîðäèíàòû âåðøèí â ôàéëå *.ob - âñåãäà íà÷èíàþòñÿ ñ 11-îé ñòðîêè = 10 èíäåêñ â ìàññèâå
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// òî÷êè âìåñòî çàïÿòûõ // õîòÿ äëÿ obj ýòî íå âàæíî âðîäå áû // êàê è òàáû âìåñòî ïðîáåëîâ
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
string[] files = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.ob", SearchOption.AllDirectories);
Console.WriteLine(files[0]);
foreach (var file in files)
{
readText = File.ReadAllLines(file); // ÷èòàåì âñå ñòðîêè èç ôàéëà
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
VTXS = int.Parse(readText[2].Split(' ')[1]); // âåðøèíû
POLY4 = int.Parse(readText[4].Split(' ')[1]); // êâàäðàòû
POLY3 = int.Parse(readText[5].Split(' ')[1]); // òðåóãîëüíèêè
string[] VertexArray = new string[VTXS]; // êîëè÷åñòâî ñòðîê ñ âåðøèíàìè
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// äîáàâèòü êîììåíòû ñ èìåíàìè òåêñòóð
int POLY = 0; int POLYindex = 0; int j=0; // íà÷èíàÿ ñ ýòîé (ñòðîêè/ýëåìåíòà ìàññèâà ñòðîê) ïðîõîäèì ïî âñåì ñòðîêàì ñ ôåéñàìè
if (POLY4 > 0) { POLYindex = VTXS10 + VTXS + 7 ; POLY = POLY4 ; }
for ( int i = POLYindex ; i < POLYindex + POLY * 5; i+=5 ) // êàæäóþ ñòðîêó ñ íîìåðîì òåêñòóðû
{
if (!texture_page_list.ContainsValue(readText[i + 2]))
{
texture_page_list.Add ( j , readText[i + 2] ) ;
j++;
}
}
// if(hashSet.Add(item)) orderList.Add(item);
if (POLY3 > 0) { POLYindex = VTXS10 + VTXS + 6 + (POLY4 * 5) + 3 ; POLY = POLY3 ; }
for ( int i = POLYindex ; i < POLYindex + POLY * 5; i+=5 ) // êàæäóþ ñòðîêó ñ íîìåðîì òåêñòóðû
{
if (!texture_page_list.ContainsValue(readText[i + 2]))
{
texture_page_list.Add ( j , readText[i + 2] ) ;
j++;
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
WritePLYList.Add("ply"); // ìàãè÷åñêîå ñëîâî
WritePLYList.Add("format ascii 1.0"); // åäèíñòâåííàÿ âåðñèÿ ôîðìàòà
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
foreach (var item in texture_page_list)
{
WritePLYList.Add("comment TextureFile "
// + file.Name + "_"
+ item.Value + ".png");
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// WritePLYList.Add("");
WritePLYList.Add("element vertex " + VTXS); // êîëè÷åñòâî âåðøèí
WritePLYList.Add("property float x");
WritePLYList.Add("property float y");
WritePLYList.Add("property float z");
// WritePLYList.Add("");
WritePLYList.Add("element face " + ( POLY4*2 + POLY3 )); // îáùåå êîëè÷åñòâî òðåóãîëüíûõ ãðàíåé
WritePLYList.Add("property list uchar int vertex_indices");
// "vertex_indices" is a list of ints (ãäå uchar - èõ êîëè÷åñòâî? , à int - ðàçìåð çíà÷åíèé?)
//WritePLYList.Add("property list ushort float texcoord");
WritePLYList.Add("property list uchar float texcoord");
WritePLYList.Add("property int texnumber");
WritePLYList.Add("end_header"); // êîíåö çàãîëîâêà
/*
WritePLYList.Add("");
WritePLYList.Add("comment start of vertex list"); // êîììåíò - íà÷àëî ñïèñêà âåðøèí
WritePLYList.Add("");
*/
/////////////////////
// ÂÅÐØÈÍÛ v x y z /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////
// WritePLYList.Add("");
for ( int vi = 0 ; vi < VTXS ; vi++ ) // ÷èòàòü VTXS ñòðîê ìàññèâà // x,y,z
{
int[] vrtx_ar = readText[VTXS10 + vi].Split(',').Select(n => Convert.ToInt32(n)).ToArray(); // x y z
//VertexArray[vi] = ((-1)*vrtx_ar[1]).ToString() + " " + vrtx_ar[2].ToString() + " " + ((-1)*vrtx_ar[0]).ToString(); // -y z -x
//VertexArray[vi] = ((-1)*vrtx_ar[0]).ToString() + " " + vrtx_ar[2].ToString() + " " + vrtx_ar[1].ToString(); // -x y z
/*ýòî ðàáîòàåò
VertexArray[vi] = Math.Round(-1*vrtx_ar[0]*0.005f , 2).ToString() + " "
+ Math.Round((double)vrtx_ar[2]*0.005f , 2).ToString() + " "
+ Math.Round((double)vrtx_ar[1]*0.005f , 2).ToString(); // -x z y
*/
// à ýòî áåç îêðóãëåíèÿ
VertexArray[vi] = (-1*vrtx_ar[0]*0.005f).ToString() + " "
+ (vrtx_ar[2]*0.005f).ToString() + " "
+ (vrtx_ar[1]*0.005f).ToString(); // -x z y
WritePLYList.Add( VertexArray[vi] );
}
// WritePLYList.Add("");
////////////////////////
// f 1 2 3 (4) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////
uv = new string[POLY3 + POLY4];
FaceList = new string[POLY3 + POLY4];
int POLY_index = 0; // íà÷èíàÿ ñ ýòîé (ñòðîêè/ýëåìåíòà ìàññèâà ñòðîê) ïðîõîäèì ïî âñåì ñòðîêàì ñ ôåéñàìè
if (POLY4 > 0) { POLY_index = VTXS10 + VTXS + 7 ; Method(4, POLY_index); /*WritePLYList.Add("");*/ }
if (POLY3 > 0) { POLY_index = VTXS10 + VTXS + 6 + (POLY4 * 5) + 3 ; Method(3, POLY_index); }
// WritePLYList.Add("");
/////////////////////////////
// ÑÎÇÄÀ¨Ì ÔÀÉËÛ obj è mtl ////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////
string ob_Path = System.IO.Path.GetDirectoryName(file);
Console.WriteLine(ob_Path);
string WriteFilePath = ob_Path + "/" + Path.GetFileNameWithoutExtension(file) + "_ply.ply";
Console.WriteLine(WriteFilePath);
string[] OBJ_write_Text = WritePLYList.ToArray();
File.WriteAllLines(WriteFilePath, OBJ_write_Text);
//----------------------------------------------------------------------------------------------------------------------------------------
// î÷èùàåì âñå êîëëåêöèè, à òî îíè íàêàïëèâàþòñÿ
WritePLYList.Clear();
texture_page_list.Clear();
//----------------------------------------------------------------------------------------------------------------------------------------
}
return 0;
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
private static void Method(int poly_number, int POLYindex)
{
int POLY = 0; string polySTR = ""; // =_=
if (poly_number == 3) { POLY = POLY3; polySTR = "3 "; }
if (poly_number == 4) { POLY = POLY4; polySTR = "3 "; }
for ( int i = POLYindex ; i < POLYindex + POLY * 5 ; i+=5 ) // êàæäóþ ñòðîêó ñ 1,2,3(,4)
{
uv_ar = readText[i + 1].Split(',').Select(n => (Convert.ToSingle(n)/255f)).ToArray();
string texture_page_number = readText[i + 2]; string t_page = "";
foreach (var item in texture_page_list)
if (item.Value == texture_page_number) t_page = item.Key.ToString();
if (uv_ar.Length > 6)
{
string[] tface4 = readText[i].Split(',', ' ');
string face431 = tface4[0] + " " + tface4[1] + " " + tface4[2];
string face432 = tface4[0] + " " + tface4[2] + " " + tface4[3];
string uv_ar_816 = uv_ar[0] + " " + uv_ar[4] + " " + uv_ar[1] + " "
+ uv_ar[5] + " " + uv_ar[2] + " " + uv_ar[6];
string uv_ar_826 = uv_ar[0] + " " + uv_ar[4] + " " + uv_ar[2] + " "
+ uv_ar[6] + " " + uv_ar[3] + " " + uv_ar[7];
WritePLYList.Add(polySTR + face431 + " 6 " + uv_ar_816 + " " + t_page);
WritePLYList.Add(polySTR + face432 + " 6 " + uv_ar_826 + " " + t_page);
}
else
{
//FaceList[j] = readText[i].Replace(',', ' '); // íå òðîãàé. Áóäåì äîáàâëÿòü â ñïèñîê
string[] tface3 = readText[i].Split(',', ' ');
string uv_ar_6 = uv_ar[0] + " " + uv_ar[3] + " " + uv_ar[1] + " " + uv_ar[4] + " " + uv_ar[2] + " " + uv_ar[5];
WritePLYList.Add(polySTR + string.Join(" ", tface3) + " 6 " + uv_ar_6 + " " + t_page);
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
} // êîíåö êëàññà