###################################
### DM2_w25 # AGruber@tugraz.at ###
### pix_2_vec || [R,G,B] >> [x,y,z]
###################################

##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###
sys.path.append("P:/")     ###
import DM_lib as dm        ### dm.reload_lib(dm)
##############################    

#rs.ViewDisplayMode(view=None, mode="wireframe")
rs.ShowGrid(view=None, show=False)
dm.PointRadius(displayModeX=1001, rad=2, styl=2, verbose=0)             # style 0,2 square; 1,3 round: outline, solid .. 4,5 active_point
dm.printDisplay(False)                                                  # nomen est omen
rs.EnableRedraw(False)
rs.Redraw()

dm.ort = "graz"
dm.setSun()
rs.Redraw()
rs.Sleep(2000)
dm.ort = "STOCKHOLM"
dm.setSun()

if 1:
    grayScale = 0
    makeEleva = 10   ### == ~boolean & factor
    makeCurve = 0
    intervall = 4
    img_name = "P:/ue_07/alice.jpg"
    #img_name = "P:/ue_07/michael.jpg"
    #img_name = "P:/ue_07/urs.jpg"
    #img_name = "P:/ue_07/diag.jpg"
    #img_name = "P:/ue_07/diag.png"
    img_name = "P:/ue_07/marilyn_680x680.png"
    img_name = "P:/finale/kleinFranzi/astrid_lindgren.png"

    img_path = img_name
    
    ########
    pixels = dm.getPixels(img_name, steps_x=intervall, steps_y=intervall, verbose=1)
    ########


#pixels = switchList( pixels )

if 1:
    dm.newEmptyLayer("y_dir")
    ### make 3D_grafik from pixels_lists:
    allCoords = []
    for y,row in enumerate(pixels[0:]): ### enumerate = generate counter 0,1,2,3,4,5...
        coords = []
        for x,col in enumerate(row[0:]):
            dm.esc()
            avg = int( (col[0] + col[1] + col[2])/3 ) ### average, for gray_value
            if grayScale:
                col = [avg, avg, avg]
            cor = [x, y, (255-avg)*0.01*makeEleva]
            coords.append( cor )
            if not makeCurve and col != [255,255,255]:
                rs.ObjectColor( rs.AddPoint( cor ), col)
        if makeCurve:
            col = dm.pntCentroid(row)
            crv = rs.AddCurve( coords, makeCurve)
            rs.ObjectColor( crv, col)
        allCoords.append( coords )
        if y%20==0:
            dm.zA()





if 0:
    dm.newEmptyLayer("x_dir")
    pixels = switchList( pixels )
    yLast = y+2
    ### make 3D_grafik from pixels_lists:
    allCoords = []
    for x,row in enumerate(pixels[0:]): ### enumerate = generate counter 0,1,2,3,4,5...
        coords = []
        for y,col in enumerate(row[0:]):
            dm.esc()
            avg = int( (col[0] + col[1] + col[2])/3 ) ### average, for gray_value
            if grayScale:
                col = [avg, avg, avg]
            cor = [x, y+yLast, (255-avg)*0.01*makeEleva]
            coords.append( cor )
            if not makeCurve:
                rs.ObjectColor( rs.AddPoint( cor ), col)
        if makeCurve:
            col = dm.pntCentroid(row)
            crv = rs.AddCurve( coords, makeCurve)
            rs.ObjectColor( crv, col)

        allCoords.append( coords )
        if x%5==0:
            dm.zA()
    if 1:
        for coords in allCoords:
            rs.AddCurve( coords, 1)


dm.newEmptyLayer("PROJ::crv")