
from gvsig import *
from geom import *

def main():

  layer = currentLayer()
  if layer== None:
    msgbox("Selecciona la capa")
    return
  layertype = layer.getTypeVectorLayer()
  if layertype.isSubTypeOf(POINT):
    addToPoint(layer)
  elif layertype.isSubTypeOf(CURVE):
    addToLine(layer)
  elif layertype.isSubTypeOf(SURFACE):
    addToPolygon(layer)
  else:
    msgbox("Tipo de capa no soportado")
    
def addToPoint(layer):
  layer.edit()
  schema = layer.getSchema()
  xName=generateUniqColumnName(schema,"X")
  schema.append(xName, "Double", size=15, precision = 3)
  yName=generateUniqColumnName(schema,"Y")
  schema.append(yName, "Double", size=15, precision = 3)
  zName=generateUniqColumnName(schema,"Z")
  schema.append(zName, "Double", size=15, precision = 3)
  layer.updateSchema(schema)

  for feature in layer.features():
    feature.edit()
    point = feature.geometry()
    feature.set(xName,point.getX())
    feature.set(yName,point.getY())
    if point.getDimension()>2:
      feature.set(zName,point.getCoordinateAt(2))
    layer.update(feature)
    
  layer.commit() 


def addToPolygon(layer):
  layer.edit()
  schema = layer.getSchema()
  areaName=generateUniqColumnName(schema,"Area")
  schema.append(areaName, "Double", size=15, precision = 3)
  perimeterName=generateUniqColumnName(schema,"Perimetro")
  schema.append(perimeterName, "Double", size=15, precision = 3)

  layer.updateSchema(schema)

  for feature in layer.features():
    feature.edit()
    polygon = feature.geometry()
    feature.set(areaName,polygon.area())
    feature.set(perimeterName,polygon.perimeter())

    layer.update(feature)

def addToLine(layer):
  layer.edit()
  schema = layer.getSchema()
  perimeterName=generateUniqColumnName(schema,"Perimetro")
  schema.append(perimeterName, "Double", size=15, precision = 3)

  layer.updateSchema(schema)

  for feature in layer.features():
    feature.edit()
    line = feature.geometry()
    feature.set(perimeterName,line.perimeter())

    layer.update(feature)
    
  layer.commit() 

def generateUniqColumnName(schema, name):
   contador = 1
   name2 = name
   while True:
     attr = schema.get(name2)
     if attr == None:
       return name2
     contador += 1
     name2 = "%s%s" % (name , contador)

