Sub slot_creation() ' Create a new part document, using the default part template. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument ' Set a reference to the component definition. Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition ' Create a new sketch on the X-Y work plane. Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes(3)) Dim tg As TransientGeometry Set tg = ThisApplication.TransientGeometry Dim pi As Double pi = Atn(1) * 4 Dim results As SketchEntitiesEnumerator Set results = oSketch.AddStraightSlotByCenterToCenter(tg.CreatePoint2d(0, 10), tg.CreatePoint2d(6, 10), 2) ThisApplication.ActiveView.Fit ' Create a profile. Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid ' Create a base extrusion 1cm thick. Dim oExtrudeDef As ExtrudeDefinition Set oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, kJoinOperation) Call oExtrudeDef.SetDistanceExtent(1, kNegativeExtentDirection) Dim oExtrude1 As ExtrudeFeature Set oExtrude1 = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef) ''''''''''''''''''''''''''''''''''' ' Get the active part document. Dim oDoc As PartDocument Set oDoc = ThisApplication.ActiveDocument If oDoc Is Nothing Then MsgBox "No part document!" & vbCrLf & "Please open a part with solids in it for this sample to run.", vbCritical, "Autodesk Inventor" Exit Sub End If Dim oCompDef As PartComponentDefinition Set oCompDef = oDoc.ComponentDefinition If oCompDef.SurfaceBodies.Count = 0 Then MsgBox "No solids to move!" & vbCrLf & "Please open a part with solids in it for this sample to run.", vbCritical, "Autodesk Inventor" Exit Sub End If Dim oBodies As ObjectCollection Set oBodies = ThisApplication.TransientObjects.CreateObjectCollection ' Specify a body to move. oBodies.Add oCompDef.SurfaceBodies(1) ' Create a MoveFeatureDefinition. Dim oMoveDef As MoveDefinition Set oMoveDef = oCompDef.Features.MoveFeatures.CreateMoveDefinition(oBodies) ' Set the move operations onto the bodies. Dim oFreeDrag As FreeDragMoveOperation Set oFreeDrag = oMoveDef.AddFreeDrag(1, 1, 1) Dim oMoveAlongRay As MoveAlongRayMoveOperation Set oMoveAlongRay = oMoveDef.AddMoveAlongRay(oCompDef.WorkAxes(2), True, 2) Dim oRotateAboutAxis As RotateAboutLineMoveOperation Set oRotateAboutAxis = oMoveDef.AddRotateAboutAxis(oCompDef.WorkAxes(3), True, 0.5) ' Create the move feature. Dim oMoveFeature As MoveFeature Set oMoveFeature = oCompDef.Features.MoveFeatures.Add(oMoveDef) ''''''''''''''''''''''''''''''''''''''''' 'reference are defined ? Dim oDisOne As Parameter Dim oDisTwo As Parameter On Error Resume Next Set oDisOne = oMoveFeature.DistanceOne If Err.Number > 0 Then 'no distance defined 'get plane the hole locates at Dim oPlane As Face Set oPlane = oMoveFeature.Plane 'get out edge loop Dim oOutLoop As EdgeLoop Dim oEachLoop As EdgeLoop For Each oEachLoop In oPlane.EdgeLoops If oEachLoop.IsOuterEdgeLoop Then Set oOutLoop = oEachLoop Exit For End If Next 'iterate each edge and filter out the linear lines Dim oEachEdge As Edge For Each oEachEdge In oOutLoop.Edges If TypeOf oEachEdge.Geometry Is LineSegment Then Dim oLine As LineSegment Set oLine = oEachEdge.Geometry 'caculate the distance of hole center and the edge Dim oDis As Double oDis = oLine.DistanceTo(tg.CreatePoint2d(0, 0)) Dim oLineDir As UnitVector Set oLineDir = oLine.Direction Debug.Print "distance to the vector (" & oLineDir.X & "," & oLineDir.Y & "," & oLineDir.Z & ") is: " & oDis End If Next Else 'distance are defined Set oDisTwo = oPlaceDef.DistanceTwo Debug.Print "distance one: " & oDisOne.Value & " distance two: " & oDisTwo.Value End If Err.Clear End Sub http://adndevblog.typepad.com/manufacturing/2016/02/get-reference-distance-of-hole-feature.html