I would like to extract length of an edge. Not from Geometry but from Mesh, as geometric length and length based on summing up individual element edge lengths is different.
Please use the below script to extract the total length of all element edges corresponding to edges in a selected named selection
import math ################################################################ #Input # Provide the name of the Edge Named Selection EdgeNamedSelection = DataModel.GetObjectsByName('Selection')[0] ################################################################ ##################################################### # Distance calculation function def CalculateDistance(i,j): Nodei_xyz = MeshDetails.NodeXYZById(i) Nodej_xyz = MeshDetails.NodeXYZById(j) dx = Nodei_xyz[0]-Nodej_xyz[0] dy = Nodei_xyz[1]-Nodej_xyz[1] dz = Nodei_xyz[2]-Nodej_xyz[2] d = dx **2 + dy ** 2 + dz**2 return math.sqrt(d)*1000 ##################################################### MeshDetails=DataModel.MeshDataByName(DataModel.MeshDataNames[0]) EdgeNodes=[] for edge in EdgeNamedSelection.Location: EdgeNodes.extend(MeshDetails.MeshRegionById(edge).NodeIds) EdgeElements = MeshDetails.ElementIdsFromNodeIds(EdgeNodes) EdgeElements = sorted(EdgeElements) EdgeLength = 0 DistancePairs = [] for E in EdgeElements: print('') print('') ElementNodes = sorted(MeshDetails.ElementById(E).NodeIds) NodesOnEdge = [N for N in ElementNodes if N in EdgeNodes] if NodesOnEdge in DistancePairs: # It means that this distance was calculated before .. continue if len(NodesOnEdge)==3: print('ELEMENT :',E) Node1 = NodesOnEdge[0] Node2 = NodesOnEdge[1] Node3= NodesOnEdge[2] D = [[CalculateDistance(Node1,Node2),Node1,Node2]] D += [[CalculateDistance(Node1,Node3),Node1,Node3]] D += [[CalculateDistance(Node2,Node3),Node2,Node3]] D = sorted(D) print(D) print(D[0][0]+D[1][0]) EdgeLength +=D[0][0]+D[1][0] print(' .. Distance from',D[0][1],'to',D[0][2],'is',D[0][0]) print(' .. Distance from',D[1][1],'to',D[1][2],'is',D[1][0]) print('.. Total edge distance :',EdgeLength) elif len(NodesOnEdge)==2: print('ELEMENT :',E) Node1 = NodesOnEdge[0] Node2 = NodesOnEdge[1] D = CalculateDistance(Node1,Node2) EdgeLength +=D print(' .. Distance from',Node1,'to',Node2,'is',D) else: continue DistancePairs +=[NodesOnEdge] print('TOTAL EDGE LENGTH :',EdgeLength)