import rhinoscriptsyntax as rs
import sys
sys.path.append( "P:/" )
import random
import dm2_lib as dm2
#####################
rs.EnableRedraw(0)
dm2.eA()

dm2.newEmptyLayer( "SPACESHIP", [0,0,0] )


#1. rad

center0 = [0,0,0]
radius = 90.0
hoehe  = 10.4
divi_speichen = 15

center1 = rs.VectorAdd( center0, [0,0,hoehe] ) 

#ebene 0

circ0 = rs.AddCircle(center0, radius)                  
circ0innen = rs.AddCircle(center0, radius*0.8)    
circ0mini = rs.AddCircle([0,0,-5], radius*0.2)

coords0 = rs.DivideCurve(circ0, divi_speichen, 0)  
coords0innen = rs.DivideCurve(circ0innen, divi_speichen, 0) 
coords0mini = rs.DivideCurve(circ0mini, divi_speichen, 0)

#ebene 1

circ1 = rs.AddCircle(center1, radius)
circ1innen = rs.AddCircle(center1, radius*0.8) 
circ1mini = rs.AddCircle ([0,0,hoehe+5], radius*0.2)
circ1micro = rs.AddCircle ([0,0,hoehe+5], radius*0.1)

coords1 = rs.DivideCurve(circ1, divi_speichen, 0) 
coords1innen = rs.DivideCurve(circ1innen, divi_speichen, 0) 
coords1mini = rs.DivideCurve(circ1mini, divi_speichen, 0)
coords1micro = rs.DivideCurve(circ1micro, divi_speichen, 0)

#speichen ebene0

if 1:

    for cor in range(divi_speichen):
        if cor%3: 
            speichen_0 = []
            speichen_0.append(coords0[cor])
            speichen_0.append(coords0mini[cor])
            crv_speichen_0 = rs.AddCurve(speichen_0, 1)

#speichen ebene1

    for cor in range(divi_speichen):
        if cor%3:
            speichen_1 = []
            speichen_1.append(coords1[cor])
            speichen_1.append(coords1mini[cor])
            crv_speichen_1 = rs.AddCurve(speichen_1, 1)

    aussenCrvs = []
    innenCrvs = []

    for i in range(divi_speichen):
        pu0 = coords0[i] 
        pu1 = coords0innen[i] 
        rs.AddLine( pu0,pu1 )
        po0 = coords1[i] 
        po1 = coords1innen[i] 

        aussenCrv = rs.AddLine( po0, pu0 )
        innenCrv = rs.AddLine( po1, pu1 )
        aussenCrvs.append( aussenCrv )
        innenCrvs.append( innenCrv )

    for i in range(divi_speichen-1):
        lin0 = aussenCrvs[i]
        lin1 = aussenCrvs[i+1]
        if i%2==0:
            #rs.AddLoftSrf( [lin0, lin1] )
            p0 = coords0[i]
            p1 = coords1[i+1]
            centerField = dm2.pntInbetween(p0, p1, 0.5)
            #crv = rs.AddLine( centerField, center0)

#2. rad

center0 = [0,0,0]
radius = 90.0
hoehe  = 10.4
hoehe1 = 50
divi_speichen = 15

center2 = rs.VectorAdd( center0, [0,0,hoehe1] ) 
center3 = rs.VectorAdd( center2, [0,0,hoehe] ) 
center3_1 = rs.VectorAdd( center2, [0,0,hoehe+5] ) 

#ebene 2

circ2 = rs.AddCircle(center2, radius)                  
circ2innen = rs.AddCircle(center2, radius*0.8)    
circ2mini = rs.AddCircle([0,0,hoehe1-5], radius*0.2)
circ2micro = rs.AddCircle([0,0,hoehe1-5], radius*0.1)

coords2 = rs.DivideCurve(circ2, divi_speichen, 0)  
coords2innen = rs.DivideCurve(circ2innen, divi_speichen, 0) 
coords2mini = rs.DivideCurve(circ2mini, divi_speichen, 0)
coords2micro = rs.DivideCurve(circ2micro, divi_speichen, 0)

#ebene 3

circ3 = rs.AddCircle(center3, radius)
circ3innen = rs.AddCircle(center3, radius*0.8) 
circ3mini = rs.AddCircle (center3_1, radius*0.2)

coords3 = rs.DivideCurve(circ3, divi_speichen, 0) 
coords3innen = rs.DivideCurve(circ3innen, divi_speichen, 0) 
coords3mini = rs.DivideCurve(circ3mini, divi_speichen, 0)

#speichen ebene2

if 1:
    
    for cor in range(divi_speichen):
        if cor%3: 
            speichen_2 = []
            speichen_2.append(coords2[cor])
            speichen_2.append(coords2mini[cor])
            crv_speichen_2 = rs.AddCurve(speichen_2, 1)

#speichen ebene3

    for cor in range(divi_speichen):
        if cor%3:
            speichen_3 = []
            speichen_3.append(coords3[cor])
            speichen_3.append(coords3mini[cor])
            crv_speichen_3 = rs.AddCurve(speichen_3, 1)


    aussenCrvs = []
    innenCrvs = []

    for i in range(divi_speichen):
        pu2 = coords2[i] 
        pu3 = coords2innen[i] 
        rs.AddLine( pu2,pu3 )
        po2 = coords3[i] 
        po3 = coords3innen[i] 

        aussenCrv = rs.AddLine( po2, pu2 )
        innenCrv = rs.AddLine( po3, pu3 )
        aussenCrvs.append( aussenCrv )
        innenCrvs.append( innenCrv )

    for i in range(divi_speichen-1):
        lin2 = aussenCrvs[i]
        lin3 = aussenCrvs[i+1]
        if i%2==0:
            #rs.AddLoftSrf( [lin2, lin3] )
            p2 = coords2[i]
            p3 = coords3[i+1]
            centerField = dm2.pntInbetween(p2, p3, 0.5)
            #crv = rs.AddLine( centerField, center0)

#verbindung minis 0 und 1

divi_verb_minis = divi_speichen*4
coords0mini = rs.DivideCurve(circ0mini, divi_verb_minis, 0)
coords1mini = rs.DivideCurve(circ1mini, divi_verb_minis, 0)

if 1:
    
    for cor in range(divi_verb_minis): 
        verb_minis_0_1 = []
        verb_minis_0_1.append(coords0mini[cor])
        verb_minis_0_1.append(coords1mini[cor])
        crv_verb_minis_0_1 = rs.AddCurve(verb_minis_0_1, 1)

#verbindung minis 2 und 3

coords2mini = rs.DivideCurve(circ2mini, divi_verb_minis, 0)
coords3mini = rs.DivideCurve(circ3mini, divi_verb_minis, 0)

if 1:
    
    for cor in range(divi_verb_minis): 
        verb_minis_2_3 = []
        verb_minis_2_3.append(coords2mini[cor])
        verb_minis_2_3.append(coords3mini[cor])
        crv_verb_minis_2_3 = rs.AddCurve(verb_minis_2_3, 1)

#verbindung micros 1 und 2

coords1micro = rs.DivideCurve(circ1micro, divi_verb_minis, 0)
coords2micro = rs.DivideCurve(circ2micro, divi_verb_minis, 0)

if 1:
    
    for cor in range(divi_verb_minis): 
        verb_micros_1_2 = []
        verb_micros_1_2.append(coords1micro[cor])
        verb_micros_1_2.append(coords2micro[cor])
        crv_verb_micros_1_2 = rs.AddCurve(verb_micros_1_2, 1)

#verbindung mini und micro 1

if 1:
    
    for cor in range(divi_verb_minis): 
        verb_mini_micro_1 = []
        verb_mini_micro_1.append(coords1mini[cor])
        verb_mini_micro_1.append(coords1micro[cor])
        crv_verb_mini_micro_1 = rs.AddCurve(verb_mini_micro_1, 1)

#verbindung mini und micro 2

if 1:
    
    for cor in range(divi_verb_minis): 
        verb_mini_micro_2 = []
        verb_mini_micro_2.append(coords2mini[cor])
        verb_mini_micro_2.append(coords2micro[cor])
        crv_verb_mini_micro_2 = rs.AddCurve(verb_mini_micro_2, 1)

#schliessen des zylinder

#hier gibt es probleme, weil der kreis ueber den radius hinausgeht, wie loese ich es?

for i in range(1,50):
    circ3mini = rs.AddCircle (center3_1, radius/ i)
    circ0mini = rs.AddCircle (center0, radius/ i)


dm2.zA()