# Find Intersect Between Two Block Objects

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 `Offset`. It then determines if there is an intersection between the two offset objects by using the `IntersectWith` 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.

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 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 offsetDist As Double
Dim ProceedNext As Long
Dim shapeName1 As String
Dim shapeName2 As String
Dim vertices() As Double
'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
'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
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
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