###################################
### DM2_w22 # AGruber@tugraz.at ###
###     OSM_2_DEALAUNAY         ###
###################################


##############################
import rhinoscriptsyntax as rs      ###
import random, time, sys            ###
sys.path.append("P:/")              ### add LW P:/ to rhino's default search path AND
sys.path.append("P:/WWW/default114/dm2/")     ### add YOUR LW P:/WWW/user/ to rhino's default search path ...
import DM2_lib as dm                ### ... thus DM2_lib.py can be found !
import OSM_lib as osm 
import delaunay_lib as DL           
##############################      
reload (dm)
##############################      
reload (osm)
##############################      
reload(DL)
rs.UnitSystem(4)                                        # km = 5, meters = 4, cm = 3 etc
rs.ShowGrid(None, 0)                                    # grid > 0 = off
rs.ShowGridAxes(None, 1)                                # y/y/z axen display > 0/1 = off/on
rs.ViewDisplayMode(rs.CurrentView(), "Ghosted")
dm.printDisplay(0)                                      # nomen est omen
rs.EnableRedraw(0) ### MAC >> uncomment !
dm.PointRadius(3,2)


#######################
OSMpath = "P:/WWW/default114/dm2/osmData/"
#######################

OSMfile = "wien_uni.osm"
OSMfile = "wien_prater.osm"
OSMfile = "NYC_UN_sm.osm"
osm.move2guinea = 1
#osm.OSM_getBounds(OSMfile=OSMfile, OSMpath=OSMpath, drawRect=1, trim=0, verbose=1)
#osm.OSM_getBounds(OSMfile="wien_uni.osm", OSMpath=OSMpath, drawRect=1, trim=0, verbose=1)
#osm.OSM_getBounds(OSMfile="wien_prater.osm", OSMpath=OSMpath, drawRect=1, trim=0, verbose=1)
#dm.zA()

if 0:
    dm.eAA() # erase absolutely all objects, even hidden & locked
    osm.OSMi(OSMfile, OSMpath, trimBounds=0, do3D=0, minHeight=1.0, heightFac=1.0, randomize=[6.0, 20.0], doAllCurves=1, verbose=0)
    #osm.OSMi("wien_prater.osm", OSMpath, trimBounds=0, do3D=0, minHeight=1.0, heightFac=1.0, randomize=[6.0, 20.0], doAllCurves=1, verbose=0)
    rs.LayerVisible("OSM::diverses", 0)
    rs.ZoomBoundingBox( rs.BoundingBox( rs.ObjectsByName("bounds_*") ) )
    #dm.zA()
if 0:
    ways = []
    ways.extend(  osm.OSM_way_checker("wien_1010.osm", OSMpath, checkKey='uni', checkVal='uni', verbose=0)) #erzeugt curves v gebaeuden
    ways.extend(  osm.OSM_way_checker("wien_1010.osm", OSMpath, checkKey='schul', checkVal='schul', verbose=0))
    #ways.extend(  osm.OSM_way_checker("wien_1010.osm", OSMpath, checkKey='kind', checkVal='kind', verbose=0))
    #ways.extend(  osm.OSM_way_checker("wien_1010.osm", OSMpath, checkKey='gart', checkVal='gart', verbose=0))
    print "len(ways) .", len(ways)
    #rs.SelectObjects(ways)
if 0:
    eduCoords = []
    coords = osm.OSM_getBounds(OSMfile, OSMpath, drawRect=1, trim=0, verbose=0)
    center = dm.pntCentroid(coords)
    vec = rs.VectorSubtract(coords[0], center)
    #vec = rs.VectorScale( vec, 1.33333 )
    anz = 7
    for i in range(anz):
        pass
        #cor = rs.VectorRotate( vec, i*360/anz, [0,0,1] )
        #cor = rs.VectorAdd( center, cor)
        #rs.AddPoint( cor )
        #print i, i*360/anz
        #rs.AddLine( center, cor)
    eduCoords = [rs.VectorAdd( center, rs.VectorScale( rs.VectorRotate( vec, i*360/anz, [0,0,1] ), 1.1 )) for i in range(anz)]
    #rs.AddPoints(eduCoords)
    for i,way in enumerate(ways):
        rs.SelectObject( way )
        center = dm.pntCentroid( rs.CurveEditPoints(way) )
        if rs.IsCurveClosed(way) and center not in eduCoords: # and not "div" in rs.ObjectLayer(way):
            eduCoords.append( center )
    #rs.AddPoints(eduCoords)
    #rs.AddCurve(eduCoords)
    #eduCoords = dm.pnts2cors( eduCoords )
    #eduCoords = dm.pnts2XY0( eduCoords )
    dm.eduCoords = eduCoords
dm.newEmptyLayer("VORO::_voronoi::crvs", [0,200,200])
rs.AddPoints( dm.eduCoords )
minDist=250.5
coords = dm.pntRemoveByDist(coords=dm.eduCoords, minDist=minDist, randomize=1, verbose=0)
dm.newEmptyLayer("VORO::_delaunay::pnts", [210,110,110])
rs.ObjectLayer( rs.AddPoints( coords ), "VORO::_delaunay::pnts" )
if 0:
    dm.newEmptyLayer("VORO", [0,220,20])
    dm.newEmptyLayer("VORO::_delaunay", [0,220,20])
    dm.newEmptyLayer("VORO::_voronoi", [0,220,220])
    dm.newEmptyLayer("VORO::_voronoi::crvs", [0,200,200])
    dm.newEmptyLayer("VORO::_voronoi::srfs", [220,200,100])
    dm.newEmptyLayer("VORO::_voronoi::pnts", [200,0,200])
    dm.newEmptyLayer("VORO::_delaunay::triangles", [110,110,200])
    dm.newEmptyLayer("VORO::_delaunay::lines", [110,110,110])
    rs.LayerVisible("VORO::_delaunay::lines", 0) ### !!!
    dm.newEmptyLayer("VORO::_delaunay::pnts", [210,110,110])
    rs.Redraw()
    rs.ObjectLayer( rs.AddPoints( dm.eduCoords ), "VORO::_delaunay" )
    dm.eDup(1)
    rs.ZoomExtents()
    ptList = rs.ObjectsByLayer("VORO::_delaunay")
    print "||| len(ptList)", len(ptList)
    DL.startDelaunay(ptList)
    if 1:
        DL.startDelaunay(ptList)
        rs.ZoomBoundingBox(rs.BoundingBox(rs.ObjectsByName("delaunayPoints_convHull")))
        rs.Redraw()
        DL.makeDelaunay( ptList, stopAt=1001, makeDelaunaySrfs=0, makeVoronoiPts=1 )
        rs.Redraw(), rs.Sleep(500)
        DL.makeVoronoi( makeSrfs=1 )
        rs.Redraw(), rs.Sleep(500)


#################################

rs.EnableRedraw(1) ### 4 the MACs
dm.printDisplay(1)
dm.PointRadius(2, 2)

rs.CurrentLayer("Default")
rs.LayerVisible("VORO::_voronoi::pnts", 0), rs.Redraw(), rs.Sleep(500)
#rs.LayerVisible("VORO::_voronoi::crvs", 0), rs.Redraw(), rs.Sleep(500)
rs.LayerVisible("VORO::_delaunay::lines", 0), rs.Redraw(), rs.Sleep(500)
#rs.LayerVisible("VORO::_voronoi::srfs", 0)
rs.ZoomExtents()
rs.Command("-zoom Factor 0.75 enter", 0)
#dm.eDup(1)
rs.CurrentLayer("Default")

###############################################
#___4_lazy_experts: automated capture to LW P:/
if 0:
    #rs.ZoomExtents()
    rs.ZoomBoundingBox( rs.BoundingBox( rs.ObjectsByLayer("OSM::buildings::_bldg3D_srf") ) )
    rs.Command("-zoom Factor 0.85 enter", 0) # decrease zoom for better framing
    rs.ViewDisplayMode(rs.CurrentView(), "Ghosted")
    rs.Redraw()
    if 0:
        path = "P:/ue_08/images/"
        name = "demo_ue_08_NYC_"
        # .png / transparent background
        rs.Command("-viewCaptureToFile Width=480  Height=360  Scale=2 DrawCPlaneAxes=No TransparentBackground=Yes "+path+name+".png", 0)
        # .jpg and Scale=4 for webSite submission
        name = name+str(int(time.time()))+".jpg"
        rs.Command("-viewCaptureToFile Width=480  Height=360  Scale=4 TransparentBackground=No  "+path+name, 0)
