 
"""
import rhinoscriptsyntax as rs
import random, sys
import sys
import dm2_lib as dm2
import time
from datetime import datetime

sys.path.append("P:\WWW\lorax234\dm2")
sys.path.append("P:/")       

import rhinoscriptsyntax as rs
"""

##############################
import rhinoscriptsyntax as rs
import random, time, itertools, math
import sys
sys.path.append("P:/WWW/lorax234/dm2/")          ### add your path to rhino's default/search path
sys.path.append("P:/")                               ### add _diag's path
import dm2_lib as dm2
###


dm2.newEmptyLayer("PROJ::track", [0,0,200])

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]

allCoords = []
for crv in rs.ObjectsByLayer("Curves"):
    coords = rs.CurveEditPoints( crv )
    allCoords.extend(coords)


curve1 = rs.AddCurve( allCoords, 1)
if not rs.IsLayer("convCoords: 0"): rs.AddLayer("convCoords: 0")
rs.ObjectLayer(curve1, "convCoords: 0")
"""
print len(allCoords)
convCoords = dm2.pntConvHull(allCoords)

curve1 = rs.AddCurve( convCoords, 2 )
if not rs.IsLayer("convCoords: 0"): rs.AddLayer("convCoords: 0")
rs.ObjectLayer(curve1, "convCoords: 0")
"""

trackCoords = []
for cor in allCoords:
    zVal = random.uniform(20, 300)
    corX = [cor[0], cor[1], cor[2]]
    trackCoords.append( corX )

trackCoords[0][2] = 0
trackCoords[-1][2] = 0.0001

trc = rs.AddCurve( trackCoords, 2 )
if not rs.IsLayer("trc: 0"): rs.AddLayer("trc: 0")
rs.ObjectLayer(trc, "convCoords: 0")

coords = rs.DivideCurve(trc, 500)
rad = 16
allCoords = []
counter = 0
shiftLeft = -1

for cor in coords:
    param = rs.CurveClosestPoint(trc, cor)
    plnX = dm2.plnCurvePerp(trc, param)
    circ = rs.AddCircle( plnX, rad )
    
    if not rs.IsLayer("circ: 0"): rs.AddLayer("circ: 0")
    rs.ObjectLayer(circ, "convCoords: 0")
    circCoords = rs.DivideCurve( circ,7)

    if counter > 6 and counter % 25 >= 0 and counter % 25 < 6:
        if counter % 25 == 0:
            shiftLeft = -1 if random.randint(0, 1) == 0 else 1
        circCoords = shift(circCoords, (counter % 25 + 1) * shiftLeft)
    #rs.DeleteObject( circ)
    allCoords.append(circCoords)

    counter += 1
    
coords_new = rs.DivideCurve(trc, 400)    
radBig = 80
bigCircleCoords = []
counter = 0
for cor in coords_new:
    param = rs.CurveClosestPoint(trc, cor)
    plnX = dm2.plnCurvePerp(trc, param)
    circBig = rs.AddCircle(plnX, radBig)
    
    if not rs.IsLayer("circBig: 0"): rs.AddLayer("circBig: 0")
    rs.ObjectLayer(circBig, "circBig: 0")
    bigCoords = rs.DivideCurve(circBig, 14
   )
    
    bigCoords = shift(bigCoords, (counter % 14))
    
    bigCircleCoords.append(bigCoords)
    counter += 1

dm2.textDots( allCoords[20] )

i = 0

myPoints = [0, 5, 3]

for i in myPoints:
    coords = []
    counter = 0
    for corList in allCoords:
        cor = corList[i]
        coords.append(cor)
        counter += 1
    crv = rs.AddCurve( coords, 2)
    rs.AddPipe( crv, [0,1], [1, 1] )

anzahl = len(allCoords)
for i in range(1, anzahl):
    corList = allCoords[i]
    crv = rs.AddCurve( [corList[0], corList[5], corList[3]], 1) 
    pipe = rs.AddPipe( crv, [0,1], [0.4, 0.4] )
    if not rs.IsLayer("Pipe: 0"): rs.AddLayer("Pipe: 0")
    rs.ObjectLayer(pipe, "Pipe: 0")
    
    p0 = allCoords[i-1][0]
    p1 = allCoords[i-0][5]
    crv = rs.AddLine( p0, p1 )
    pipe = rs.AddPipe( crv, [0,1], [0.2, 0.2] )
    if not rs.IsLayer("Pipe: 1"): rs.AddLayer("Pipe: 1")
    rs.ObjectLayer(pipe, "Pipe: 1")
    
    p0 = allCoords[i-1][5]
    p1 = allCoords[i][0]
    crv = rs.AddLine(p0, p1)
    pipe = rs.AddPipe(crv, [0,1], [0.2, 0.2])
    if not rs.IsLayer("Pipe: 2"): rs.AddLayer("Pipe: 2")
    rs.ObjectLayer(pipe, "Pipe: 2" )
    
    p0 = allCoords[i-1][5]
    p1 = allCoords[i-0][3]
    crv = rs.AddLine( p0, p1 )
    pipe = rs.AddPipe( crv, [0,1], [0.2, 0.2] )
    rs.AddLayer("Pipe: 1")
    rs.ObjectLayer(pipe, "Pipe: 1")
    
    p0 = allCoords[i-1][3]
    p1 = allCoords[i-0][5]
    crv = rs.AddLine( p0, p1 )
    pipe = rs.AddPipe( crv, [0,1], [0.2, 0.2] )
    rs.AddLayer("Pipe: 2")
    rs.ObjectLayer(pipe, "Pipe: 2")
    

anzahl = len(bigCircleCoords)    
for i in range(1, anzahl):
    corList = bigCircleCoords[i]
    crv = rs.AddCurve( [corList[0], corList[5], corList[3], corList[0]], 1) 
    pipe = rs.AddPipe( crv, [0,1], [3, 3] )
    if not rs.IsLayer("Pipe: 3"): rs.AddLayer("Pipe: 3")
    rs.ObjectLayer(pipe, "Pipe: 3")
    
    p0 = bigCircleCoords[i-1][0]
    p1 = bigCircleCoords[i][0]
    crv = rs.AddLine( p0, p1 )
    pipe = rs.AddPipe( crv, [0,1], [2, 2] )
    if not rs.IsLayer("Pipe: 4"): rs.AddLayer("Pipe: 4")
    rs.ObjectLayer(pipe, "Pipe: 4")
    
    p0 = bigCircleCoords[i-1][3]
    p1 = bigCircleCoords[i][3]
    crv = rs.AddLine(p0, p1)
    pipe = rs.AddPipe(crv, [0,1], [2, 2])
    if not rs.IsLayer("Pipe: 5"): rs.AddLayer("Pipe: 5")
    rs.ObjectLayer(pipe, "Pipe: 5" )
    
    p0 = bigCircleCoords[i-1][5]
    p1 = bigCircleCoords[i][5]
    crv = rs.AddLine( p0, p1 )
    pipe = rs.AddPipe( crv, [0,1], [2, 2] )
    if not rs.IsLayer("Pipe: 6"): rs.AddLayer("Pipe: 6")
    rs.ObjectLayer(pipe, "Pipe: 6")
