#!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:<br>
You'll have to remove doubles after importing.<br>
"""

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")
