Create TIN (3D Analyst)


Creates a TIN dataset.



CreateTIN_3d (out_tin, {spatial_reference}, {in_features}, {constrained_delaunay})
ParameterExplanationData Type

The output TIN dataset.


The spatial reference of the output TIN.

Coordinate System
[[in_feature_class, height_field, SF_type, tag_value],...]

Add references to one or more feature classes that will be included in the TIN. For each feature class you'll need to set properties that indicate how it's used to define the surface.

in_feature_class: The feature class whose features will be imported into the TIN.

height_field: The field that specifies the source of elevation values for the features. Any numeric field in the feature's attribute table can be used. If the feature supports z-values, the feature geometry can be read by selecting the Shape.Z option. If no height is desired, specify the keyword <None> to create Z-less features whose elevation would be interpolated from the surface.

SF_type: The surface feature type defines how the geometry imported from the features are incorporated into the triangulation for the surface. Options with hard or soft designation refer to whether the feature edges represent distinct breaks in slope or a gradual change when the triangulated surface gets converted to a raster. The following keywords are available:

  • masspointsElevation points that will be imported as nodes
  • hardline or softlineBreaklines that enforce a height value
  • hardclip or softclipPolygon dataset that defines the boundary of the TIN
  • harderase or softerase Polygon dataset that defines holes in the interior portions of the TIN
  • hardreplace or softreplacePolygon dataset that defines areas of constant height
  • hardvaluefill or softvaluefillPolygon dataset that defines tag values for the triangles based on the integer field specified in the tag_value column

tag_value: The integer field from the attribute table of the feature class that will be used when the surface feature type is set to a value fill option. Tag fill is used as a basic form of triangle attribution whose boundaries are enforced in the triangulation as breaklines. The default option is set to <none>.

Value Table

Specifies the triangulation technique used along the breaklines of the TIN.

  • DELAUNAYThe TIN will use Delaunay conforming triangulation, which may densify each segment of the breaklines to produce multiple triangle edges. This is the default.
  • CONSTRAINED_DELAUNAYThe TIN will use constrained Delaunay triangulation, which will add each segment as a single edge. Delaunay triangulation rules are honored everywhere except along breaklines, which will not get densified.

Code Sample

CreateTIN example 1 (Python window)

The following sample demonstrates the use of this tool in the Python window:

import arcpy
from arcpy import env

env.workspace = "C:/data"
arcpy.CreateTin_3d("NewTIN", "Coordinate Systems/Projected Coordinate Systems/State Plane/NAD 1983 (Feet)/NAD 1983 StatePlane California II FIPS 0402 (Feet).prj", "points.shp Shape.Z masspoints", "constrained_delaunay")
CreateTIN example 2 (stand-alone script)

The following sample demonstrates the use of this tool in a stand-alone Python script:

Name: Define Data Boundary of LAS File
Description: This script demonstrates how to delineate data boundaries of 
             LAS files with irregularly clustered points. It is intended for 
             use as a script tool with one input LAS file.
# Import system modules
import arcpy
import exceptions, sys, traceback

# Set local variables
inLas = arcpy.GetParameterAsText(0) #input LAS file
ptSpacing = arcpy.GetParameterAsText(1) # LAS point spacing
classCode = arcpy.GetParameterAsText(2) # List of integers
returnValue = arcpy.GetParameterAsText(3) # List of strings
outTin = arcpy.GetParameterAsText(4) # TIN created to delineate data area
outBoundary = arcpy.GetParameterAsText(5) # Polygon boundary file

    # Execute LASToMultipoint
    arcpy.AddMessage("Creating multipoint features from LAS...")
    lasMP = arcpy.CreateUniqueName('lasMultipoint', 'in_memory')
    arcpy.ddd.LASToMultipoint(inLas, LasMP, ptSpacing, class_code, 
                             "ANY_RETURNS", "", sr, inFormat, zfactor)
    # Execute CreateTin
    arcpy.AddMessage("Creating TIN dataset...")
    arcpy.ddd.CreateTin(outTin, sr, "{0} Shape.Z masspoints"\
                       .format(lasMP), "Delaunay")
    # Execute CopyTin
    arcpy.AddMessage("Copying TIN to delineate data boundary...")
    arcpy.ddd.CopyTin(outTin, "{0}_copy".format(outTin))
    # Execute DelineateTinDataArea
    arcpy.AddMessage("Delineating TIN boundary...")
    maxEdge = ptSpacing * 4
    arcpy.ddd.DelineateTinDataArea(outTin, maxEdge, "PERIMETER_ONLY")
    # Execute TinDomain
    arcpy.AddMessage("Exporting data area to polygon boundary...")
    arcpy.ddd.TinDomain(outTin, outBoundary, "POLYGON")
except arcpy.ExecuteError:
    print arcpy.GetMessages()
    # Get the traceback object
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    # Concatenate error information into message string
    pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
          .format(tbinfo, str(sys.exc_info()[1]))
    msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
    # Return python error messages for script tool or Python Window


Related Topics

Licensing Information

ArcView: Requires 3D Analyst
ArcEditor: Requires 3D Analyst
ArcInfo: Requires 3D Analyst