##############################
import rhinoscriptsyntax as rs
import random, time, itertools, math
import dm2_lib as dm2
##############################

#reload( dm2 )


rs.UnitSystem(4)                                        # km = 5, meters = 4, cm = 3 etc
rs.Command("-groundplane Options On=No enter enter", 0) # groundplane > 0 = off
rs.ShowGrid(None, 0)                                    # grid > 0 = off
rs.ShowGridAxes(None, 0)                                # y/y/z axen display > 0 = off
rs.ViewDisplayMode(view=None, mode="Ghosted")			# shadeMode fuer current view
rs.Command("cplane w t enter", 0)						# cPlane World Top

rs.EnableRedraw(0)
rs.UnselectAllObjects()
rs.Redraw()

dm2.newEmptyLayer( "PROJ", [32, 32, 32] )
dm2.newEmptyLayer( "PROJ::crv", [200,  0, 0] )
dm2.newEmptyLayer( "PROJ::srf", [ 100,  100, 200] )
dm2.newEmptyLayer( "PROJ::tmp",  [200,  32, 200] )
rs.Redraw()


#################################
###########HU07##################
#################################

midLineNam = "crv_398987317"

'''
1. id von curve in var speichern
    rs.ObjectsByName(..)[0]
2. grips aktivieren
    rs.EnableObjectGrips(..)
3. coords lesen u speichern
    rs.ObjectGripLocations(..)
4. grips de_aktivieren
5. zu jeder ==== for cor in coords:
    rs.VectorAdd(cor, [0,0,100]
    oder gleich
    cor[2] = 100 ... [2] == z_coor !
5. rs.AddCurve(...)
'''

rs.LayerVisible( "OSM", 1 )
rs.Redraw()

rs.UnselectAllObjects()
#kircheID = rs.ObjectsByName( "_bldg3D_higBy_hig_430787273" )[0]
campanileID = rs.ObjectsByName( "_bldg3D_higBy_hig_431614308")[0]

#rs.SelectObject( kirche )
#rs.SelectObject( campanile )

#rs.ZoomBoundingBox( rs.BoundingBox( [kircheID, campanileID] ) )
rs.Redraw()
#rs.Sleep(1000)
#rs.ZoomBoundingBox( rs.BoundingBox( [kircheID] ) )


def getSurfacePoints( objID ):
    rs.Command("solidPtOn selID "+str(objID)+" enter enter", 0)
    coords = rs.ObjectGripLocations( objID )
    rs.Command("pointsOff enter", 0)
    return coords


#Saeulen
pillar_1_ID = rs.ObjectsByName( "_bldg3D_higBy_hig_431003679")[0]
pillar_2_ID = rs.ObjectsByName( "_bldg3D_higBy_hig_431003588")[0]

coords1 = getSurfacePoints( pillar_1_ID )
rs.AddCurve( coords1, 1 )
centerY = dm2.pntCentroid( coords1 )

coords2 = getSurfacePoints( pillar_2_ID )
rs.AddCurve( coords2, 1 )
centerZ = dm2.pntCentroid( coords2 )

#Mittelpunkt zwischen Saeulen
midpt = dm2.pntInbetween (centerY, centerZ)
rs.AddPoint(midpt)


#### Mittelpunkt campanile ###
coords = getSurfacePoints( campanileID )
rs.AddCurve( coords, 1 )
centerX = dm2.pntCentroid( coords )


rs.AddPoint( centerX )


### Startpunkt ###

ptX = [ coords[3][0], coords[1][1], centerX[2] ]
crv = rs.AddLine( centerX, ptX )
rs.ScaleObject( crv, centerX, [1.7, 2, 2] )


ptX = rs.CurveEndPoint( crv )
rs.AddPoint( ptX )

rs.DeleteObject(crv)


hoehe = centerX[2]
print hoehe
coords = []

winkel = 420 # degress
steps = 31
steigg = hoehe/steps

ang = winkel/steps
for i in range(steps):
    vec = rs.VectorSubtract(ptX, centerX)
    vec = rs.VectorRotate( vec, ang , [0,0,1] )
    vec = rs.VectorScale( vec, 1.01 )
    ptX = rs.VectorAdd(centerX, vec)
    #coords.append(ptX) 
    ptX = rs.VectorAdd(ptX, [0,0,steigg] )
    #crv = rs.AddLine( centerX, ptX ) 
    coords.append(ptX) 

anz = 20
coords.reverse()
coords.append(midpt)


crv = rs.AddCurve( coords , 2)
coords = rs.DivideCurve( crv, anz )
ptX = coords [0]
antCircPts = 18
allCoords = []


for i in range(anz+1):
    cen = coords[i]
    para = rs.CurveClosestPoint(crv, cen)
    plnX = rs.CurvePerpFrame(crv, para)
    rs.AddPoint( plnX[0] )
    circ = rs.AddCircle(plnX, 5)
    cirPts = rs.DivideCurve( circ, antCircPts, 0)
    rs.DeleteObject( circ )
    allCoords.append( cirPts )


for i in range(0,antCircPts):
	coords = []
	for listX in allCoords:
		coords.append(listX[i])
	if i>6: rs.ObjectColor(rs.AddCurve(coords, 1), [0,200,0] )
	rs.ObjectColor(rs.AddCurve(coords, 3), [0,200,0])






###Konsruktion###

stutze = rs.ObjectsByName( "_bldg3D_higBy_hig_252637693")[0]
coords_stutze = getSurfacePoints( stutze )
center_stutze = dm2.pntCentroid( coords_stutze )


###Platform
platform_pt = [ coords_stutze [2][0], coords_stutze [1][1], 100]

rs.ObjectColor(rs.AddLine (ptX, platform_pt), [0,200,0])

rs.AddPoints


####Tragwerk

stutze_pt = [ coords_stutze [2][0], coords_stutze [1][1], center_stutze[2]]

for ptX in coords: 
	rs.ObjectColor(rs.AddLine (ptX, stutze_pt), [0,200,0])

rs.DeleteObject(crv)





#rs.LayerVisible( "OSM", 0 )
rs.Redraw()


rs.CurrentLayer("Default")