এখানে অবশ্যই স্পষ্টত কিছু চলছে 10.0 এসপি 2 দিয়ে।
আমি IRelationalOperator2 এ জ্যামিতি ব্যাগ নিক্ষেপ করতে পারি, অন্যথায় এই পরীক্ষাটি "কাস্ট করতে অক্ষম" বলবে, এবং আমি একটি নাল রেফারেন্স ব্যতিক্রম পাব।
তবে ইসনয়ারের প্রথম কলটিতে আমি ব্যতিক্রম পাই।
System.InvalidCastException occurred
Message=Unable to cast COM object of type 'ESRI.ArcGIS.Geometry.GeometryBagClass' to interface type 'ESRI.ArcGIS.Geometry.IRelationalOperator2'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{839F5C7E-ED5F-4B3F-8F97-C0A9CC4817EE}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Source=ESRI.ArcGIS.Geometry
পরীক্ষাটি এখানে:
private void GBTest(IPoint pnt)
{
// this line does not fail
var relop = new GeometryBagClass() as IRelationalOperator2;
if (relop == null)
Debug.Print("unable to cast"); // this doesn't print out
var coll = relop as IGeometryCollection;
coll.AddGeometry(pnt);
//((ISpatialIndex)coll).AllowIndexing = true;
//((ISpatialIndex)coll).Invalidate();
var pnt2 = ((IClone)pnt).Clone() as IPoint;
((ITransform2D)pnt2).Move(100.0, 100.0);
if (relop.IsNear(pnt2, 1000.0)) // exception here
Debug.Print("test 1 fail");
if (!relop.IsNear(pnt2, 10.0))
Debug.Print("test 2 fail");
}
এখানে আরও একটি পরীক্ষা। আমি কীভাবে ব্যতিক্রম ছাড়াই কাস্ট করতে পারি তা লক্ষ্য করুন, তবে ইসনয়ারকে কল করার সময় একটি অকার্যকর ব্যতিক্রম পান।
private void GBTest(IPoint pnt)
{
var coll = new GeometryBagClass();
((IGeometry)coll).SpatialReference = pnt.SpatialReference;
coll.AddGeometry(pnt);
coll.GeometriesChanged();
var relop = (IRelationalOperator2)coll; // would expect the exception here
var pnt2 = ((IClone)pnt).Clone() as IPoint;
((ITransform2D)pnt2).Move(100.0, 100.0);
if (relop.IsNear(pnt2, 1000.0)) // exception here
Debug.Print("test 1 fail");
if (!relop.IsNear(pnt2, 10.0))
Debug.Print("test 2 fail");
}