#-------------------------------------------------------------------------------
# Name:        surfpoints
# Purpose:
#
# Author:      a.studenikin
#
# Created:     27.01.2015
# Copyright:   (c) a.studenikin 2015
# Licence:     <your licence>
#-------------------------------------------------------------------------------

import arcpy
import os
from arcpy import env

viewpoints=arcpy.GetParameterAsText(0)
env.workspace=os.path.dirname(viewpoints)
raster=arcpy.GetParameterAsText(1)
lines=arcpy.GetParameterAsText(2)

pointnum=''
onepointfc='onepoint'
dset='allpoints'
scyname='scyline'
scynamebar='onesurf'
points='points'
minrad=100000
maxrad=0

if not arcpy.Exists(dset):
    arcpy.CreateFeatureDataset_management(env.workspace, dset)

if not arcpy.Exists(onepointfc):
    arcpy.CreateFeatureclass_management(env.workspace, onepointfc,'POINT',viewpoints,'','ENABLED')
curI=arcpy.InsertCursor(onepointfc)
curU=arcpy.UpdateCursor(onepointfc)
curS=arcpy.SearchCursor(viewpoints)

linerowS=curS.next()

while linerowS:
    curI.insertRow(linerowS)
    linerowI=curI.next()
    linerowU=curU.next()
    pointnum=linerowS.getValue("Num")

    fromAzim=linerowS.getValue("AZIMUTH1")
    toAzim=linerowS.getValue("AZIMUTH2")
    if pointnum>196:
        arcpy.AddMessage("        point"+str(pointnum)+"..........")
        arcpy.Skyline_3d(onepointfc, scyname+str(pointnum), raster, "1000 meters", "0 meters", "", "FULL_DETAIL", fromAzim, toAzim, "1", "0 Meters", "NO_SEGMENT_SKYLINE", "100", "VERTICAL_ANGLE", "SKYLINE_MAXIMUM", "NO_CURVATURE", "NO_REFRACTION", "0,13", "0", "NO_CREATE_SILHOUETTES")
        arcpy.SkylineBarrier_3d(onepointfc, scyname+str(pointnum), scynamebar+str(pointnum), minrad, maxrad,'NO_CLOSED')
        arcpy.Intersect3DLineWithMultiPatch_3d(lines, scynamebar+str(pointnum), 'IDS_ONLY', os.path.join(dset,points+str(pointnum)))
    if arcpy.Exists(scyname+str(pointnum)):
        arcpy.Delete_management(scyname+str(pointnum))
    if arcpy.Exists(scynamebar+str(pointnum)):
        arcpy.Delete_management(scynamebar+str(pointnum))

    curU.deleteRow(linerowU)
    linerowS=curS.next()

if arcpy.Exists(onepointfc):
    arcpy.Delete_management(onepointfc)
del curI, curS, curU, linerowI, linerowS, linerowU

