Я пытаюсь перевести на C ++ небольшую имеющуюся у меня программу на Python, которая открывает файл OBJ и записывает необходимые данные в классы FACES и VERTS.В программе Python она просто просматривает каждую строку и разбивает их на токены, разделенные пробелами.Если строка начинается с буквы «f», последующими токенами будут данные для лиц.Для "v", положение вертов.Для "vt", УФ информация.нормали "vn" для вертов.
До сих пор я мог сделать строку для открытия строки.Но пройти каждую строку и затем записать их в массив строк (массив символов), так сложно.Некоторая помощь, пожалуйста.
Вот пример того, с чего я должен начать:
FILE * pFile;
char myString[100];
pFile = fopen(filename, "r");
while(fgets(myString, 100, pFile)!=NULL) {
char *sep;
int counter = 0;
int mode = 0;
sep = strtok(myString, " ");
while (sep != NULL) {
if (strncmp(sep,"f",1)==0) {
mode = 4;
} else {
if (strncmp(sep,"vn",2)==0) {
mode = 3;
} else {
if (strncmp(sep,"vt",2)==0) {
mode = 2;
} else {
if (strncmp(sep,"v",2)==0) {
mode = 1;
}else {
}
}
}
}
switch (mode) {
case 1 :{
// vertex position
break;
}
case 2 :{
cout << sep << " --> vertex normal" << endl;
break;
}
case 3 :{
cout << sep << " --> vertex UV" << endl;
break;
}
case 4 :{
cout << sep << " --> face " << endl;
break;
}
}
sep = strtok(NULL, " ");
counter++;
}
}
Вместо "SWITCH", в котором ранее устанавливались переменные для "MODE", я бы предпочелесть что-то простое, как:
def openFile(self, filename):
faceCount = 0
for line in open(filename, "r"):
vals = line.split()
if len(vals) > 0:
if vals[0] == "v":
v = map(float, vals[1:4])
self.verts.append(Point(v[0], v[1], v[2]))
if vals[0] == "vn":
n = map(float, vals[1:4])
self.norms.append(Normal(n[0], n[1], n[2]))
if vals[0] == "vt":
vt = map(float, vals[1:3])
self.text.append(UV(vt[0], vt[1]))
if vals[0] == "f":
vertsOut = []
normsOut = []
textOut = []
for f in vals[1:]:
w = f.split("/")
# OBJ Files are 1-indexed so we must subtract 1 below
try:
vertsOut.append(self.verts[int(w[0])-1])
except:
print "Issue with Position of Face %s " % faceCount
try:
textOut.append(self.text[int(w[1])-1])
except:
print "Issue with UV of Face %s " % faceCount
try:
normsOut.append(self.norms[int(w[2])-1])
except:
print "Issue with Normal of Face %s " % faceCount
self.verts[int(w[0])-1].addFace(faceCount)
self.faces[faceCount]= Face(vertsOut,normsOut,textOut)
faceCount += 1
Но это PYTHON.Там намного проще.Пожалуйста помоги.Спасибо!