Я хочу, чтобы кодировать 3D-модели с помощью этого текстового синтаксиса-структуры в Blender:Encode сетки из текстового файла
<p>
c(255,84,22)
fs(-1)
p(-9,-8,27)
p(-9,-23,27)
p(-7,-24,63)
p(-7,-11,63)
</p>
Что релевантно для создания сетки являются следующие:
<p>
отмечает лицо-контейнер (например, в HTMLs)c
маркирует цветp
отмечает координаты вершин (мин. 3 в каждой грани-контейнера)</p>
отмечает конец лицаfs
: игнорировать это
Очевидно, что сетка содержит много этих граней контейнеров, так что это будет на самом деле нужно потратить время на создание этой сетки вручную. Я написал уже рабочий скрипт, но он извлекает только координаты и не содержит лиц.
Теперь я хочу, чтобы реализовать это лицо, так что я расширил сценарий, но он не работает:
faces = [] #Array, where all the vertex Indecies from curFace are stored
verts = [] #Array, where all the vertex coordinates from coords are stored
vertIndex = 0
with open(filepath, 'r') as file:
for line in file:
if not line.startswith('<p>'):
continue #Skip lines which don't contain a <p>
if line.startswith('<p>'):
curFace = []
for container in line: #Do a loop while </p> is reached
if container.startswith('p'):
coords = container.strip('\np()/ ').split(',') #Remove certain characters and split line into 3 parts (XYZ)
coords = list(map(float, coords))
verts.append(coords) #Send the vertex coordinates from the current face to verts[]
curFace.append(vertIndex)
vertIndex += 1
elif container.startswith('</p>'):
faces.append(curFace) #Send the vertex Indecies from the current face to faces[]
break #Stop the face-for-loop and return to main line-for-loop
elif not container.startswith('p') or not container.startswith('</p>'):
continue #Skip lines in the container which don't start with 'p' or '</p>'
mesh.from_pydata(verts,[],faces) #Create the entire mesh with the arrays
P.S .: Это лишь выдержка из основной части. Консоль не показывает ошибок. Может ли кто-нибудь помочь мне здесь?