<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Offset polygonZ in arcpy in Transportation Questions</title>
    <link>https://community.esri.com/t5/transportation-questions/offset-polygonz-in-arcpy/m-p/378268#M1249</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Arcinfo 10.0 SP5&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Python 2.6&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Win 7 Ultimate SP1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been trying to find a way to offset a polygonZ in arcmap.&amp;nbsp; My application involves earthwork where a single bounding polygonZ is to be offset inward at 200ft horizontally and vertically at 100ft after which there will be a flat 20 ft bench and the process repeats. My ultimate goal is to create a TIN that I can Contour.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I created the code below which creates something close to what I need however there is a problem.&amp;nbsp; I have included three files "ArcScene, PlanView, CrossSection'.&amp;nbsp; The first two are 3D and 2D viewpoints of the output from the included code.&amp;nbsp; The last is a cross section of what the output should look like.&amp;nbsp; Upon inspection of the contours in the first two files you will see that the benches are sloped across their width which needs to be flat. The benches however need to be sloped along their length. This is due to the fact that I was forced to interpolate each buffer to the DEM and then raise it to the appropriate elevation using the Plus3D() tool. The bounding polygon mentioned above was interpolated by the same dem which is represented in the PlanView drawing by the labeled contour lines which shows how the DEM is a plane on a slight slope.&amp;nbsp; So in short I need to start with a 3D line or polygon and offset while preserving the 3D values so the benches can be flat across their width.&amp;nbsp; I am also open to any raster based methods anyone may have to offer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If anyone has any recommendations of how this could be accomplished in ArcMap I would greatly appreciate your ideas and suggestions.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Todd Hawley &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
import arcpy, sys, string
from arcpy import env
from arcpy import AddMessage
from arcpy import SearchCursor
from arcpy import UpdateCursor
from arcpy import AddError
env.workspace = "c:/1/Program.gdb"

env.overwriteOutput = True

#Input Polygon
P_CropLine = sys.argv[1]
#DEM
P_DEM = sys.argv[2]
# Distance Values for Berm, Ditch, and Benches
P_BermHeight = float(sys.argv[3])
P_BermWidth = float(sys.argv[4])
P_DitchDepth = float(sys.argv[5])
P_DitchWidth = float(sys.argv[6])
P_VertInter = float(sys.argv[7])
P_BenchWidth = float(sys.argv[8])
P_TotalHeight = float(sys.argv[9])
#Variable for Generalize Tool
P_Gen = float(sys.argv[10])

P_Output = sys.argv[11]

# Begin Function section
#Used to Create new Fields in a table
def FieldNameExists(tablename, fieldname, fieldtype):

&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldList = arcpy.ListFields(tablename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldPresent = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for field in fieldList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if field.baseName == fieldname:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldPresent = 1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if fieldPresent ==0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(tablename, fieldname, fieldtype,"","","","","NULLABLE", "")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif fieldPresent ==1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.DeleteField_management(tablename, fieldname)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(tablename, fieldname, fieldtype,"","","","", "NULLABLE" , "")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del fieldList
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del field

&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error in FieldNameExists Function',e)

#Called during when exception is raised
def fException (string, ex):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddError("\n!!!" + string + "!!!\n")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddError("Line " + str(tb.tb_lineno))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage('\n' + str(ex.message))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage("!!!Error in fException Function!!!\n")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage("Line \n" + str(tb.tb_lineno))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage("\n" + str(e.message))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(0)
#add various ID fields
def fAddPointID(tbl):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(tbl,'PT_ID','short')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_PT_ID = UpdateCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Ucur_PT_ID:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.setValue('PT_ID',i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_PT_ID.updateRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del item
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Ucur_PT_ID
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error while creating PT_ID',e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
def fAddPartID(tbl):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(tbl,'Prt_ID','short')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Prt_ID = UpdateCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Ucur_Prt_ID:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.setValue('Prt_ID',i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Prt_ID.updateRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del item
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Ucur_Prt_ID
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error while creating PT_ID',e)

def fOutput(infc):
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(infc, P_Output)

&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error in fOutput Function', e)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
# Clear features from feature class
def fClearFeat(tbl):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.DeleteFeatures_management(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error spliting crop line',e)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
# uses a feature class that new buffer outputs are appended to.
def fCollect(tbl,outfeat,IND):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Part = UpdateCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Ucur_Part:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.setValue('Part_ID',IND)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Part.updateRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Ucur_Part
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scur_Col = SearchCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Icur_Col = arcpy.InsertCursor(outfeat)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Scur_Col:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Icur_Col.insertRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Icur_Col
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Scur_Col
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error adding to collection', e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#End Function Section

try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Variable to provide ID for all polygons at the same vertical stage
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID = 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Temp feature classes
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Input = arcpy.CreateFeatureclass_management('in_memory','input','polygon')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_OS = arcpy.CreateFeatureclass_management('in_memory', 'OS', 'polygon')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Pri =&amp;nbsp; arcpy.CreateFeatureclass_management('in_memory', 'Pri', 'polygon','','','disabled')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_3D = arcpy.CreateFeatureclass_management('in_memory', 'F3D','polygon')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Collect = arcpy.CreateFeatureclass_management('in_memory','Collect', 'polygon','','','enabled')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Out = arcpy.CreateFeatureclass_management('in_memory', 'out','polyline')

&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_Collect,'Part_ID', 'short')
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_Input,'Part_ID', 'short')
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_Pri,'Part_ID,','short')

&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Copy Input, InterpolateShap and add to collection
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(P_CropLine, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d(P_DEM,IM_Pri,IM_3D,0.01,'','linear','TRUE')

&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_3D,'Part_ID','short')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D,IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create outside top of berm
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BermHeight *-2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Plus_3d(P_DEM,P_BermHeight,'rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1',IM_OS,IM_3D,0.01,'','linear','TRUE')

&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D,IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create inside top of berm
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BermWidth*-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1',IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.management.Delete('rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create outside bottom of ditch
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID +=1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BermHeight * -2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d(P_DEM,IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create inside bottom of ditch
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID +=1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_DitchWidth * -1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d(P_DEM,IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)&amp;nbsp;&amp;nbsp; 
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Begin slope section
&amp;nbsp;&amp;nbsp;&amp;nbsp; CumHeight = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; Lift = 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; level = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Buffer polygon and interpolate to appropriate height until elevation reaches P_Total_Height Var
&amp;nbsp;&amp;nbsp;&amp;nbsp; while CumHeight &amp;lt; P_TotalHeight:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Buffer until 100 lift is created then create flat bench
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while level &amp;lt; 100:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partID+= 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; level += P_VertInter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CumHeight += P_VertInter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lift += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_VertInter * -2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Plus_3d(P_DEM,Lift * P_VertInter,'rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1',IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.management.Delete('rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create flat bench
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partID +=1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; level = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BenchWidth * -1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Plus_3d(P_DEM,Lift * P_VertInter,'rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1', IM_OS, IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.management.Delete('rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D, IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D,IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)

&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.FeatureToLine_management(IM_Collect, IM_Out)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fOutput(IM_Out)

except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error spliting crop line',e)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 17:28:28 GMT</pubDate>
    <dc:creator>ToddHawley</dc:creator>
    <dc:date>2021-12-11T17:28:28Z</dc:date>
    <item>
      <title>Offset polygonZ in arcpy</title>
      <link>https://community.esri.com/t5/transportation-questions/offset-polygonz-in-arcpy/m-p/378268#M1249</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Arcinfo 10.0 SP5&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Python 2.6&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Win 7 Ultimate SP1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been trying to find a way to offset a polygonZ in arcmap.&amp;nbsp; My application involves earthwork where a single bounding polygonZ is to be offset inward at 200ft horizontally and vertically at 100ft after which there will be a flat 20 ft bench and the process repeats. My ultimate goal is to create a TIN that I can Contour.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I created the code below which creates something close to what I need however there is a problem.&amp;nbsp; I have included three files "ArcScene, PlanView, CrossSection'.&amp;nbsp; The first two are 3D and 2D viewpoints of the output from the included code.&amp;nbsp; The last is a cross section of what the output should look like.&amp;nbsp; Upon inspection of the contours in the first two files you will see that the benches are sloped across their width which needs to be flat. The benches however need to be sloped along their length. This is due to the fact that I was forced to interpolate each buffer to the DEM and then raise it to the appropriate elevation using the Plus3D() tool. The bounding polygon mentioned above was interpolated by the same dem which is represented in the PlanView drawing by the labeled contour lines which shows how the DEM is a plane on a slight slope.&amp;nbsp; So in short I need to start with a 3D line or polygon and offset while preserving the 3D values so the benches can be flat across their width.&amp;nbsp; I am also open to any raster based methods anyone may have to offer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If anyone has any recommendations of how this could be accomplished in ArcMap I would greatly appreciate your ideas and suggestions.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Todd Hawley &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
import arcpy, sys, string
from arcpy import env
from arcpy import AddMessage
from arcpy import SearchCursor
from arcpy import UpdateCursor
from arcpy import AddError
env.workspace = "c:/1/Program.gdb"

env.overwriteOutput = True

#Input Polygon
P_CropLine = sys.argv[1]
#DEM
P_DEM = sys.argv[2]
# Distance Values for Berm, Ditch, and Benches
P_BermHeight = float(sys.argv[3])
P_BermWidth = float(sys.argv[4])
P_DitchDepth = float(sys.argv[5])
P_DitchWidth = float(sys.argv[6])
P_VertInter = float(sys.argv[7])
P_BenchWidth = float(sys.argv[8])
P_TotalHeight = float(sys.argv[9])
#Variable for Generalize Tool
P_Gen = float(sys.argv[10])

P_Output = sys.argv[11]

# Begin Function section
#Used to Create new Fields in a table
def FieldNameExists(tablename, fieldname, fieldtype):

&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldList = arcpy.ListFields(tablename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldPresent = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for field in fieldList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if field.baseName == fieldname:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldPresent = 1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if fieldPresent ==0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(tablename, fieldname, fieldtype,"","","","","NULLABLE", "")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif fieldPresent ==1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.DeleteField_management(tablename, fieldname)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddField_management(tablename, fieldname, fieldtype,"","","","", "NULLABLE" , "")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del fieldList
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del field

&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error in FieldNameExists Function',e)

#Called during when exception is raised
def fException (string, ex):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddError("\n!!!" + string + "!!!\n")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddError("Line " + str(tb.tb_lineno))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage('\n' + str(ex.message))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage("!!!Error in fException Function!!!\n")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import traceback, sys
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb = sys.exc_info()[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage("Line \n" + str(tb.tb_lineno))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddMessage("\n" + str(e.message))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(0)
#add various ID fields
def fAddPointID(tbl):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(tbl,'PT_ID','short')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_PT_ID = UpdateCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Ucur_PT_ID:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.setValue('PT_ID',i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_PT_ID.updateRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del item
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Ucur_PT_ID
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error while creating PT_ID',e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
def fAddPartID(tbl):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(tbl,'Prt_ID','short')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Prt_ID = UpdateCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Ucur_Prt_ID:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.setValue('Prt_ID',i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Prt_ID.updateRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del item
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Ucur_Prt_ID
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error while creating PT_ID',e)

def fOutput(infc):
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(infc, P_Output)

&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error in fOutput Function', e)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
# Clear features from feature class
def fClearFeat(tbl):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.DeleteFeatures_management(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error spliting crop line',e)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
# uses a feature class that new buffer outputs are appended to.
def fCollect(tbl,outfeat,IND):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Part = UpdateCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Ucur_Part:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.setValue('Part_ID',IND)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ucur_Part.updateRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Ucur_Part
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scur_Col = SearchCursor(tbl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Icur_Col = arcpy.InsertCursor(outfeat)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in Scur_Col:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Icur_Col.insertRow(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Icur_Col
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; del Scur_Col
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error adding to collection', e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#End Function Section

try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Variable to provide ID for all polygons at the same vertical stage
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID = 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Temp feature classes
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Input = arcpy.CreateFeatureclass_management('in_memory','input','polygon')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_OS = arcpy.CreateFeatureclass_management('in_memory', 'OS', 'polygon')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Pri =&amp;nbsp; arcpy.CreateFeatureclass_management('in_memory', 'Pri', 'polygon','','','disabled')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_3D = arcpy.CreateFeatureclass_management('in_memory', 'F3D','polygon')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Collect = arcpy.CreateFeatureclass_management('in_memory','Collect', 'polygon','','','enabled')
&amp;nbsp;&amp;nbsp;&amp;nbsp; IM_Out = arcpy.CreateFeatureclass_management('in_memory', 'out','polyline')

&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_Collect,'Part_ID', 'short')
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_Input,'Part_ID', 'short')
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_Pri,'Part_ID,','short')

&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Copy Input, InterpolateShap and add to collection
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(P_CropLine, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d(P_DEM,IM_Pri,IM_3D,0.01,'','linear','TRUE')

&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FieldNameExists(IM_3D,'Part_ID','short')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D,IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create outside top of berm
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BermHeight *-2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Plus_3d(P_DEM,P_BermHeight,'rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1',IM_OS,IM_3D,0.01,'','linear','TRUE')

&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D,IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create inside top of berm
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BermWidth*-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1',IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.management.Delete('rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create outside bottom of ditch
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID +=1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BermHeight * -2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d(P_DEM,IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create inside bottom of ditch
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; partID +=1
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_DitchWidth * -1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d(P_DEM,IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)&amp;nbsp;&amp;nbsp; 
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Begin slope section
&amp;nbsp;&amp;nbsp;&amp;nbsp; CumHeight = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; Lift = 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; level = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Buffer polygon and interpolate to appropriate height until elevation reaches P_Total_Height Var
&amp;nbsp;&amp;nbsp;&amp;nbsp; while CumHeight &amp;lt; P_TotalHeight:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Buffer until 100 lift is created then create flat bench
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while level &amp;lt; 100:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partID+= 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; level += P_VertInter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CumHeight += P_VertInter
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lift += 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_VertInter * -2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Plus_3d(P_DEM,Lift * P_VertInter,'rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1',IM_OS,IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.management.Delete('rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D,IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D, IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Create flat bench
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partID +=1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; level = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Buffer_analysis(IM_Pri,IM_OS,P_BenchWidth * -1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Plus_3d(P_DEM,Lift * P_VertInter,'rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.InterpolateShape_3d('rast1', IM_OS, IM_3D,0.01,'','linear','TRUE')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.management.Delete('rast1')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_OS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCollect(IM_3D, IM_Collect,partID)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(IM_3D,IM_Pri)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fClearFeat(IM_3D)

&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.FeatureToLine_management(IM_Collect, IM_Out)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fOutput(IM_Out)

except Exception as e:
&amp;nbsp;&amp;nbsp;&amp;nbsp; fException('Error spliting crop line',e)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 17:28:28 GMT</pubDate>
      <guid>https://community.esri.com/t5/transportation-questions/offset-polygonz-in-arcpy/m-p/378268#M1249</guid>
      <dc:creator>ToddHawley</dc:creator>
      <dc:date>2021-12-11T17:28:28Z</dc:date>
    </item>
  </channel>
</rss>

