This code will create two blocks that have a light weight polyline of a triangle and a trapezoid. We want the two object to have a specific gap between them without intersecting. WE CAN DO THIS! No Calculus required. We do this by exploding the block and then offsetting the polyline a specific distance with method

. It then determines if there is an intersection between the two offset objects by using the **Offset**

method . If it does find an intersection, it will iterate and move the second object until there is no longer and intersection. Block 1 is a triangle and block two is a trapezoid. From the image below you can see there are two intersection points. **IntersectWith**

It is important that the block is first exploded before using the intersect method, or else the method will find an intersection of the bounding box and not the actual object as shown in the 3rd image below.

Option Explicit Sub findIntersect() Dim acadApp As AcadApplication Dim acadDoc As AcadDocument Dim basepoint1(0 To 2) As Double Dim basepoint2(0 To 2) As Double Dim basePoint2move(0 To 2) As Double Dim basepointblock(0 To 2) As Double Dim intersect1 As Variant Dim intersect2 As Variant Dim intPoints As Variant Dim iterateDist As Double Dim objblock1 As AcadBlock Dim objblock2 As AcadBlock Dim objBlockRef As AcadBlockReference Dim objss As AcadSelectionSet Dim offsetDist As Double Dim plineObjLW As AcadLWPolyline Dim ProceedNext As Long Dim shapeName1 As String Dim shapeName2 As String Dim vertices() As Double 'get access to autocad application Set acadApp = GetObject(, "AutoCAD.Application") Set acadDoc = acadApp.Documents.Add 'set some variables offsetDist = 0.1 iterateDist = 0.01 shapeName1 = "triangle" shapeName2 = "rectangle" 'define the two blocks basepointblock(0) = 0: basepointblock(1) = 0: basepointblock(2) = 0 Set objblock1 = acadDoc.Blocks.Add(basepointblock, shapeName1) Set objblock2 = acadDoc.Blocks.Add(basepointblock, shapeName2) 'add the triangle to the block ReDim vertices(5) vertices(0) = 0: vertices(1) = 0 vertices(2) = 5: vertices(3) = 0 vertices(4) = 3: vertices(5) = 5 Set plineObjLW = objblock1.AddLightWeightPolyline(vertices) plineObjLW.Closed = True 'add the trapizoid to the block ReDim vertices(7) vertices(0) = 0: vertices(1) = 0 vertices(2) = 2: vertices(3) = 0 vertices(4) = 3: vertices(5) = 2 vertices(6) = -1: vertices(7) = 2 Set plineObjLW = objblock2.AddLightWeightPolyline(vertices) plineObjLW.Closed = True 'insert the block 1 into model space, then explode and offset basepoint1(0) = 0 basepoint1(1) = 0 basepoint1(2) = 0 Set objBlockRef = acadDoc.ModelSpace.InsertBlock(basepoint1, shapeName1, 1, 1, 1, 0) intersect1 = objBlockRef.Explode On Error Resume Next intersect1 = intersect1(0).Offset(offsetDist) If Err.Number <> 0 Then intersect1 = intersect1(1).Offset(offsetDist) Err.Clear End If On Error GoTo 0 'insert the block 2 into model space, then explode and offset basepoint2(0) = 5.1 basepoint2(1) = 0 basepoint2(2) = 0 Set objBlockRef = acadDoc.ModelSpace.InsertBlock(basepoint2, shapeName2, 1, 1, 1, 0) intersect2 = objBlockRef.Explode On Error Resume Next intersect2 = intersect2(0).Offset(offsetDist) If Err.Number <> 0 Then intersect2 = intersect2(1).Offset(offsetDist) Err.Clear End If On Error GoTo 0 'move block 2 until it no longer intersects block 1 Do Until ProceedNext = 1 On Error Resume Next intPoints = intersect1(0).IntersectWith(intersect2(0), acExtendNone) On Error GoTo 0 If VarType(intPoints) <> vbEmpty And IsArray(intPoints) = True Then If UBound(intPoints) > -1 Then basePoint2move(0) = basepoint2(0) + iterateDist intersect2(0).Move basepoint2, basePoint2move basepoint2(0) = basepoint2(0) + iterateDist Else ProceedNext = 1 End If Else ProceedNext = 1 End If Loop 'erase all objects Set objss = acadDoc.SelectionSets.Add("ToErase") objss.Select acSelectionSetAll objss.Erase objss.Delete 're insert the blocks into model space Set objBlockRef = acadDoc.ModelSpace.InsertBlock(basepoint1, shapeName1, 1, 1, 1, 0) Set objBlockRef = acadDoc.ModelSpace.InsertBlock(basepoint2, shapeName2, 1, 1, 1, 0) End Sub