Dim pFeature1 As IFeature Dim tmpPoint1 As IPoint Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long) 'Adds a point to a shapefile Dim pMap As IMap Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Set pMap = pMxDoc.FocusMap Dim pDataset As IDataset Dim pFeature1 As IFeature 'Dim tmpPoint1 As IPoint 'Get the first layer in the map Dim pFeatLyr As IGeoFeatureLayer Set pFeatLyr = pMap.Layer(0) 'Create a point from the mouse down click Dim tmpPoint As IPoint Set tmpPoint = New Point Set tmpPoint = pMxDoc.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y) 'Get the feature class Dim pFClass As IFeatureClass Set pFClass = pFeatLyr.FeatureClass 'QI from IFeatureclass to IDataset 'Dim pDataset As IDataset Set pDataset = pFClass 'Get the Workspace from the IDataset Dim pWorkspace As IWorkspace Set pWorkspace = pDataset.Workspace 'QI from IWorkspace to IWorkspaceEdit Dim pWorkspaceEdit As IWorkspaceEdit Set pWorkspaceEdit = pWorkspace 'Start editing if needed If Not pWorkspaceEdit.IsBeingEdited Then pWorkspaceEdit.StartEditing (True) End If 'Start an edit operation pWorkspaceEdit.StartEditOperation 'Create the new point feature Dim pFeature As IFeature Dim dblDist As Double If button = 2 Then Set pFeature1 = Nothing Set tmpPoint1 = Nothing Exit Sub End If If pFeature1 Is Nothing Then If tmpPoint1 Is Nothing Then Set tmpPoint1 = tmpPoint Else Set pFeature = pFClass.CreateFeature Set pFeature.Shape = tmpPoint If Not tmpPoint1 Is Nothing Then dblDist = 0 dblDist = GetDistance1(pFeature) pFeature.Value(pFeature.Class.Fields.FindField("Distance_")) = dblDist pFeature.Value(pFeature.Class.Fields.FindField("SiteNum")) = (dblDist / 5.28) + InputBox("Enter Address Range") & "" pFeature.Store End If Set pFeature1 = pFeature End If Else Set pFeature = pFClass.CreateFeature Set pFeature.Shape = tmpPoint If Not pFeature1 Is Nothing Then dblDist = 0 dblDist = GetDistance(pFeature1, pFeature) pFeature.Value(pFeature.Class.Fields.FindField("Distance_")) = dblDist pFeature.Value(pFeature.Class.Fields.FindField("SiteNum")) = (dblDist / 5.28) + InputBox("Enter Address Range") & "" pFeature.Store End If Set pFeature1 = pFeature End If 'Complete the edit operation 'pWorkspaceEdit.StopEditOperation pMxDoc.ActiveView.Refresh pMxDoc.UpdateContents End Sub Function GetDistance1(pFeature1 As IFeature) As Double Dim pGeom1 As IGeometry Dim pGeom2 As IGeometry Dim pProx As IProximityOperator Dim dblDist As Double Set pGeom1 = tmpPoint1 Set pGeom2 = pFeature1.Shape Set pProx = pGeom2 dblDist = pProx.ReturnDistance(pGeom1) 'MsgBox dblDist GetDistance1 = dblDist End Function Function GetDistance(pFeature1 As IFeature, pFeature2 As IFeature) As Double Dim pGeom1 As IGeometry Dim pGeom2 As IGeometry Dim pProx As IProximityOperator Dim dblDist As Double Set pGeom1 = pFeature1.Shape Set pGeom2 = pFeature2.Shape Set pProx = pGeom2 dblDist = pProx.ReturnDistance(pGeom1) 'MsgBox dblDist GetDistance = dblDist End Function
Solved! Go to Solution.
import arcpy from arcpy import env env.workspace = r"C:\temp\python\test.gdb" env.overwriteOutput = 1 input = arcpy.GetParameterAsText(0) # Create empty Point and Array objects point = arcpy.Point() array = arcpy.Array() # A list that will hold each the Polyline object featureList = [] rows = arcpy.SearchCursor(input) for row in rows: geom = row.Shape point.X = geom.centroid.X point.Y = geom.centroid.Y # Add each point to the array array.add(point) # Create the polyline polyline = arcpy.Polyline(array) # Clear the array for future use array.removeAll() featureList.append(polyline) del row, rows # Copy the polyline to file geodatabase to create a Shape_Length field arcpy.CopyFeatures_management(featureList, "line_test") rows = arcpy.SearchCursor("line_test") for row in rows: # Create a variable to store the length length = row.Shape_Length arcpy.AddMessage(length) del row, rows # Convert the line's end point to a point arcpy.FeatureVerticesToPoints_management("line_test", "point_test", "END") # Add a field to store the length from the point1 to point2 arcpy.AddField_management("point_test", "Length", "DOUBLE") rows = arcpy.UpdateCursor("point_test") for row in rows: row.Length = length rows.updateRow(row) del row, rows arcpy.Delete_management("line_test")
import arcpy from arcpy import env env.workspace = r"C:\temp\python\test.gdb" env.overwriteOutput = 1 input = arcpy.GetParameterAsText(0) # Create empty Point and Array objects point = arcpy.Point() array = arcpy.Array() # A list that will hold each the Polyline object featureList = [] rows = arcpy.SearchCursor(input) for row in rows: geom = row.Shape point.X = geom.centroid.X point.Y = geom.centroid.Y # Add each point to the array array.add(point) # Create the polyline polyline = arcpy.Polyline(array) # Clear the array for future use array.removeAll() featureList.append(polyline) del row, rows # Copy the polyline to file geodatabase to create a Shape_Length field arcpy.CopyFeatures_management(featureList, "line_test") rows = arcpy.SearchCursor("line_test") for row in rows: # Create a variable to store the length length = row.Shape_Length arcpy.AddMessage(length) del row, rows # Convert the line's end point to a point arcpy.FeatureVerticesToPoints_management("line_test", "point_test", "END") # Add a field to store the length from the point1 to point2 arcpy.AddField_management("point_test", "Length", "DOUBLE") rows = arcpy.UpdateCursor("point_test") for row in rows: row.Length = length rows.updateRow(row) del row, rows arcpy.Delete_management("line_test")
import arcpy import pythonaddins class ToolClass2(object): """Implementation for Tool_addin.tool (Tool)""" def __init__(self): self.enabled = True self.cursor = 3 self.shape = "Line" def onLine(self, line_geometry): arcpy.env.workspace = r"C:\temp\python\test.gdb" arcpy.CopyFeatures_management(line_geometry, "line_test") rows = arcpy.SearchCursor("line_test") for row in rows: length = row.Shape_Length print length del row, rows arcpy.FeatureVerticesToPoints_management("line_test", "point_test", "END") arcpy.AddField_management("point_test", "Length", "DOUBLE") rows = arcpy.UpdateCursor("point_test") for row in rows: row.Length = length rows.updateRow(row) del row, rows arcpy.Delete_management("line_test")
import arcpy from arcpy import env import pythonaddins import os class PointTool(object): """Implementation for Point_addin.PointTool (Tool)""" def __init__(self): self.enabled = True self.cursor=3 self.shape = "Line" def onLine(self, line_geometry): env.workspace = r"C:\temp\Point_test.shp" env.overwriteOutput = 1 # Start an edit session. Must provide the worksapce. edit = arcpy.da.Editor(env.workspace) # Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) edit.startEditing(False, True) # Start an edit operation edit.startOperation() # Create empty Point and Array objects point = arcpy.Point() array = arcpy.Array() # A list that will hold each the Polyline object featureList = [] rows = arcpy.SearchCursor("Line_test") for row in rows: geom = row.Shape point.X = geom.centroid.X point.Y = geom.centroid.Y # Add each point to the array array.add(point) # Create the polyline polyline = arcpy.Polyline(array) # Clear the array for future use array.removeAll() featureList.append(polyline) del row, rows # Copy the polyline to file geodatabase to create a Shape_Length field arcpy.CopyFeatures_management(featureList, "line_test") rows = arcpy.SearchCursor("line_test") for row in rows: # Create a variable to store the length length = row.Shape_Length arcpy.AddMessage(length) del row, rows # Convert the line's end point to a point # Insert a row into the table. with arcpy.da.InsertCursor(env.workspace, ('SHAPE@', 'Distance_')) as icur: icur.insertRow([(x,y), 'line_test']) del row, rows arcpy.Delete_management("line_test") # Stop the edit operation. edit.stopOperation() # Stop the edit session and save the changes edit.stopEditing(True) arcpy.RefreshActiveView()
import arcpy from arcpy import env import pythonaddins import os class PointTool(object): """Implementation for Point_addin.PointTool (Tool)""" def __init__(self): self.enabled = True self.cursor=3 self.shape = "Line" def onLine(self, line_geometry): fc = "C:\Temp\Test_points.shp" workspace = os.path.dirname(fc) arcpy.env.overwriteOutput = True # Start an edit session. Must provide the worksapce. edit = arcpy.da.Editor(workspace) # Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) edit.startEditing(False, True) # Start an edit operation edit.startOperation() arcpy.CopyFeatures_management(line_geometry, "line_test") rows = arcpy.SearchCursor("line_test") for row in rows: length = row.Shape_Length print length del row, rows arcpy.FeatureVerticesToPoints_management("line_test", "in_memory", "END") arcpy.AddField_management("in_memory", "Length", "DOUBLE") rows = arcpy.UpdateCursor("in_memory") for row in rows: row.Length = length rows.updateRow(row) del row, rows rowss = arcpy.SearchCursor(fc, "", "", "Distance_") cursor = arcpy.da.InsertCursor(fc, ('SHAPE@', 'Distance_')) cursor.insertRow(row.length,) arcpy.Delete_management("in_memory") # Stop the edit operation. edit.stopOperation() # Stop the edit session and save the changes edit.stopEditing(True) arcpy.RefreshActiveView()
import arcpy import pythonaddins class ToolClass2(object): """Implementation for Tool_addin.tool (Tool)""" def __init__(self): self.enabled = True self.cursor = 3 self.shape = "Line" def onLine(self, line_geometry): arcpy.env.workspace = r"C:\temp\python\test.gdb" edit = arcpy.da.Editor(r"C:\temp\python") arcpy.CopyFeatures_management(line_geometry, "line_test") rows = arcpy.SearchCursor("line_test") for row in rows: geom = row.shape X = geom.lastPoint.X Y = geom.lastPoint.Y length = row.Shape_Length del row, rows row_value = (length, (X, Y)) cursor = arcpy.da.InsertCursor(r"C:\temp\python\point_test.shp", ("Distance", "SHAPE@XY")) cursor.insertRow(row_value) del cursor arcpy.Delete_management("line_test") edit.stopOperation() edit.stopEditing(True)