Compute Distance Between Objects

The attached FRED file contains an embedded script which shows how you can calculate the distance between two objects using the scripting language. The script works by using the TransformPosition command, which takes a starting coordinate system, a new coordinate system and a position vector defined by its x, y, and z components. The x, y and z values, input to the TransformPosition command, are modified in place (by reference) to convert the vector from the starting coordinate system to the new coordinate system. In this manner you can transform the vertex location of a surface (as an example) to global coordinates by using the syntax below, where n is the node number of the surface:

x = 0 : y = 0 : z = 0
TransformPosition( n, -1, x, y, z )

To compute the distance between two surfaces, we call this function twice and then compute the length of the vector connecting the two points using GetLength3D:

x1 = 0 : y1 = 0 : z1 = 0
x2 = 0 : y2 = 0 : z2 = 0
TransformPosition( n1, -1, x1, y1, z1 )
TransformPosition( n2, -1, x2, y2, z2 )
GetLength3D( x2-x1, y2-y1, z2-z1, len )
Print “Distance between two surfaces is ” & len

Note that we don’t necessarily have to convert both vertices to global coordinates. We could alternatively convert one vertex into the coordinate system of the other surface and then retrieve the length of the resulting vector. You may have reason to perform the calculation one way or the other.

Although the example file and script are available separately for download below, the content of the full script is provided here:

Option Explicit

Type T_POINT
n As Long
x As Double
y As Double
z As Double
End Type

Sub Main

Dim p1 As T_POINT, p2 As T_POINT

‘Node number and point on the first object
p1.n = FindFullName( “Geometry.Plane” )
p1.x = 0
p1.y = 0
p1.z = 0

‘Node number and point on the second object
p2.n = FindFullName( “Geometry.Plane 1” )
p2.x = 0
p2.y = 0
p2.z = 0

Print “Distance between objects is ” & CalcDistance(p1, p2) & ” ” & GetUnits()

End Sub

Function CalcDistance( ByVal p1 As Variant, _
ByVal p2 As Variant ) As Double

‘Convert the first point from local to global
TransformPosition(p1.n, -1, p1.x, p1.y, p1.z)

‘Convert the second point from local to global
TransformPosition(p2.n, -1, p2.x, p2.y, p2.z)

‘Compute the length of the vector
Dim dist As Double
GetLength3D(p2.x-p1.x, p2.y-p1.y, p2.z-p1.z, dist)

‘Return the length
Return dist

End Function