#!BPY
""" Released under the Blender Artistic Licence (BAL)
Name: 'POVtree (POV-Ray .inc)'
Blender: 232
Group: 'Import'
Tooltip: 'Import POVtree mesh (.inc)'
"""
__author__ = "pat"
__version__ = "1.2a - 07/11/05 -"
__email__ = ('Author, pat:psycho3d*de')
__url__ = ("Author's website, www.psycho3d.de")
__bpydoc__ ="""\
This script imports POVtree generated trees.
Note:
You'll have to remove doubles after importing.
"""
from Blender import NMesh
from Blender.Window import FileSelector
### little helper
def tri2face(text, mesh):
f = NMesh.Face()
i = 0
e = 0
for i in range(3):
s = text.find("<", e) + 1
e = text.find(">", s)
vertC = text[s : e].split(", ")
vert = NMesh.Vert(float(vertC[0]), -float(vertC[2]), -float(vertC[1]))
mesh.verts.append(vert)
f.v.append(vert)
mesh.faces.append(f)
### main procedure
def import_POVtree(filename):
file = open(filename, "r")
incfile = file.read()
file.close()
folStart = incfile.find("#declare FOLIAGE")
folEnd = incfile.find("#declare", folStart + 1)
blosStart = incfile.find("#declare BLOSSOM")
blosEnd = incfile.find("#declare", blosStart + 1)
woodStart = incfile.find("#declare WOOD")
woodEnd = incfile.find("#declare", woodStart + 1)
if folStart != -1:
foliage = NMesh.New()
triEnd = folStart + 15
triStart = incfile.find("triangle", triEnd, folEnd)
while triStart != -1:
triEnd = incfile.find("}", triStart)
tri2face(incfile[triStart:triEnd], foliage)
triStart = incfile.find("triangle", triEnd, folEnd)
NMesh.PutRaw(foliage)
del foliage
if blosStart != -1:
blossom = NMesh.New()
triEnd = blosStart + 15
triStart = incfile.find("triangle", triEnd, blosEnd)
while triStart != -1:
triEnd = incfile.find("}", triStart)
tri2face(incfile[triStart:triEnd], blossom)
triStart = incfile.find("triangle", triEnd, blosEnd)
NMesh.PutRaw(blossom)
del blossom
if woodStart != -1:
wood = NMesh.New()
triEnd = woodStart + 12
triStart = incfile.find("triangle", triEnd, woodEnd)
while triStart != -1:
triEnd = incfile.find("}", triStart)
tri2face(incfile[triStart:triEnd], wood)
triStart = incfile.find("triangle", triEnd, woodEnd)
NMesh.PutRaw(wood)
### fileSelector callback
def f(filename):
import_POVtree(filename)
##### script start #####
FileSelector(f, "Select POVtree .inc")