[Visual Basic 6.0]'That example demonstrate how to use Hittest
Sub HitTest()
Dim phittest As IHitTest, pt As IPoint, bhit As Boolean, phit As IPoint
Dim dDist As Double, lPartIndex As Long, lSegIndex As Long, bright As Boolean, penv As IEnvelope
Set pt = New Point
pt.PutCoords 10, 10
Set phit = New Point
'esriGeometryPartVertex
'Reset variable
dDist = 0
lPartIndex = 0
lSegIndex = 0
bright = False
bhit = False
Set phittest = createpolyline
bhit = phittest.HitTest(pt, 2, esriGeometryPartVertex, phit, dDist, lPartIndex, lSegIndex, bright)
Debug.Print "************** esriGeometryPartVertex **************"
Debug.Print "Hit point X, Y : " & phit.X & " , " & phit.Y
Debug.Print "Hit Distance : " & dDist
Debug.Print "Part index : " & lPartIndex
Debug.Print "Segment index (In that case it is a vertex index) : " & lSegIndex
'esriGeometryPartBoundary
'Reset variable
Set pt = New Point
pt.PutCoords 10, 10
dDist = 0
lPartIndex = 0
lSegIndex = 0
bright = False
bhit = False
Set phit = New Point
Set phittest = createpolyline
bhit = phittest.HitTest(pt, 2, esriGeometryPartBoundary, phit, dDist, lPartIndex, lSegIndex, bright)
Debug.Print "************** esriGeometryPartBoundary **************"
Debug.Print "Hit point X, Y : " & phit.X & " , " & phit.Y
Debug.Print "Hit Distance : " & dDist
Debug.Print "Part index : " & lPartIndex
Debug.Print "Segment index (In that case it is a segment index) : " & lSegIndex
'esriGeometryPartMidpoint
Set pt = New Point
pt.PutCoords 5, 5
dDist = 0
lPartIndex = 0
lSegIndex = 0
bright = False
bhit = False
Set phit = New Point
Set phittest = createpolyline
bhit = phittest.HitTest(pt, 2, esriGeometryPartMidpoint, phit, dDist, lPartIndex, lSegIndex, bright)
Debug.Print "************** esriGeometryPartMidpoint **************"
Debug.Print "Hit point X, Y : " & phit.X & " , " & phit.Y
Debug.Print "Hit Distance : " & dDist
Debug.Print "Part index : " & lPartIndex
Debug.Print "Segment index (In that case it is a segment index) : " & lSegIndex
'esriGeometryPartCentroid 'Works only for polygon or envelope
Set pt = New Point
pt.PutCoords 50, 50
Set penv = New Envelope
penv.PutCoords 0, 0, 100, 100
dDist = 0
lPartIndex = 0
lSegIndex = 0
bright = False
bhit = False
Set phit = New Point
Set phittest = penv
bhit = phittest.HitTest(pt, 2, esriGeometryPartCentroid, phit, dDist, lPartIndex, lSegIndex, bright)
Debug.Print "************** esriGeometryPartCentroid **************"
Debug.Print "Hit point X, Y : " & phit.X & " , " & phit.Y
Debug.Print "Hit Distance : " & dDist
Debug.Print "Part index (It will always be 0) : " & lPartIndex
Debug.Print "Segment index (It will always be 0) : " & lSegIndex
'esriGeometryPartEndpoint
'Reset variable
Set pt = New Point
pt.PutCoords 40, 40
dDist = 0
lPartIndex = 0
lSegIndex = 0
bright = False
bhit = False
Set phit = New Point
Set phittest = createpolyline
bhit = phittest.HitTest(pt, 2, esriGeometryPartEndpoint, phit, dDist, lPartIndex, lSegIndex, bright)
Debug.Print "************** esriGeometryPartEndpoint **************"
Debug.Print "Hit point X, Y : " & phit.X & " , " & phit.Y
Debug.Print "Hit Distance : " & dDist
Debug.Print "Part index : " & lPartIndex
Debug.Print "Segment index (In that case it is a segment index) : " & lSegIndex
End Sub
Private Function createpolyline() As IPolyline
Dim pt0(4) As IPoint, pt1(4) As IPoint, i As Long
Dim ptc0 As IPointCollection, ptc1 As IPointCollection, pgc As IGeometryCollection
For i = 0 To 4
Set pt0(i) = New Point
pt0(i).PutCoords i * 10, i * 10
Set pt1(i) = New Point
pt1(i).PutCoords i * 10 + 50, i * 10 + 50
Next
Set ptc0 = New Path
ptc0.AddPoints 5, pt0(0)
Set ptc1 = New Path
ptc1.AddPoints 5, pt1(0)
Set pgc = New Polyline
pgc.AddGeometry ptc0
pgc.AddGeometry ptc1
Set createpolyline = pgc
End Function
[C#]public void Driver()
{
IPoint queryPoint = new PointClass();
queryPoint.PutCoords(10, 10);
IGeometry geometry = Createpolyline() as IGeometry;HitTest(queryPoint, geometry, esriGeometryHitPartType.esriGeometryPartVertex, "esriGeometryPartVertex");HitTest(queryPoint, geometry, esriGeometryHitPartType.esriGeometryPartBoundary, "esriGeometryPartBoundary");queryPoint.PutCoords(5,5);
HitTest(queryPoint, geometry, esriGeometryHitPartType.esriGeometryPartMidpoint, "esriGeometryPartMidpoint");
queryPoint.PutCoords(40, 40);
HitTest(queryPoint, geometry, esriGeometryHitPartType.esriGeometryPartEndpoint, "esriGeometryPartEndpoint");IEnvelope envelope = new EnvelopeClass();
envelope.PutCoords(0, 0, 100, 100);
queryPoint.PutCoords(50,50);
geometry = envelope as IGeometry;
//esriGeometryPartCentroid works only for polygon or envelope
HitTest(queryPoint, geometry, esriGeometryHitPartType.esriGeometryPartCentroid, "esriGeometryPartCentroid");
}//This example demonstrate how to use Hittest
public void HitTest(IPoint queryPoint, IGeometry geometry, esriGeometryHitPartType hitType, String header)
{
//esriGeometryPartVertex
//Reset variable
double distance = 0;
int hitPartIndex = 0;
int hitSegmentIndex = 0;
bool isOnRightSide = false;
bool isHit = false;
IPoint hitPoint = new PointClass();
IHitTest hitTest = geometry as IHitTest;isHit = hitTest.HitTest(queryPoint, 2, hitType, hitPoint, ref distance, ref hitPartIndex, ref hitSegmentIndex, ref isOnRightSide);String report = "Hit point X, Y : " + hitPoint.X + " , " + hitPoint.Y +"\n"+
"Hit Distance : " + distance +"\n"+
"Part index : " + hitPartIndex +"\n"+
"Segment index : " + hitSegmentIndex;System.Windows.Forms.MessageBox.Show(report);
}
private IPolyline Createpolyline()
{
IPointCollection pointCollection1 = new PathClass();
IPointCollection pointCollection2 = new PathClass();
object missing = Type.Missing;for(int i = 0; i < 5; i++)
{
IPoint point1 = new PointClass();
point1.PutCoords(i * 10, i * 10);
pointCollection1.AddPoint(point1, ref missing, ref missing);
IPoint point2 = new PointClass();
point2.PutCoords(i * 10 + 50, i * 10 + 50);
pointCollection2.AddPoint(point2, ref missing, ref missing);
}
IGeometryCollection geometryCollection = new PolylineClass();
geometryCollection.AddGeometry(pointCollection1 as IGeometry, ref missing, ref missing);
geometryCollection.AddGeometry(pointCollection2 as IGeometry, ref missing, ref missing);
return geometryCollection as IPolyline;}
[Visual Basic .NET, C++]
No example is available for Visual Basic .NET or C++. To view a Visual Basic 6.0 or C# example, click the Language Filter button
in the upper-left corner of the page.