26 сент. 2011 г.

Открытие данных ArcGIS с помощью IGxDialog

На днях пришлось немного доделывать одну функцию. Раньше она открывала shp файл с помощью стандартного в .NET класса OpenFileDialog. Необходимо было добавить возможность открытия любого Feature Class: shp, personal GDB, file GDB, SDE.
Оказалось, что порывшись в документации можно найти много интересного и "сделать всё красиво". Как бонус: получаем возможность задать тип геометрии (point, polyline, polygon) для feature class на этапе выбора в окне.
public static IFeatureClass OpenArcGisFeatureClassFromDialog(int hwnd, string dialogTitle, esriGeometryType possibleInputFeatureClassGeometry)
{
	IFeatureClass result = null;
	IGxDialog gxDialog = new GxDialog();
	IEnumGxObject gxEnum;

	switch (possibleInputFeatureClassGeometry)
	{
		case esriGeometryType.esriGeometryPoint:
			gxDialog.ObjectFilter = new GxFilterPointFeatureClasses();
			break;
		case esriGeometryType.esriGeometryPolyline:
			gxDialog.ObjectFilter = new GxFilterPolylineFeatureClasses();
			break;
		case esriGeometryType.esriGeometryPolygon:
			gxDialog.ObjectFilter = new GxFilterPolygonFeatureClasses();
			break;
		default:
			gxDialog.ObjectFilter = new GxFilterFeatureClasses();
			break;
	}
	gxDialog.AllowMultiSelect = false;
	gxDialog.Title = dialogTitle;

	if (gxDialog.DoModalOpen(hwnd, out gxEnum) && gxEnum != null)
	{
		IGxObject gxObject = gxEnum.Next();
		if (gxObject is IGxDataset)
		{
			IGxDataset gxDataset = (IGxDataset) gxObject;
			if (gxDataset.Dataset is IFeatureClass)
				result = (IFeatureClass)gxDataset.Dataset;
		}
	}

	gxDialog.InternalCatalog.Close();
	Marshal.FinalReleaseComObject(gxDialog);

	return result;
}

Комментариев нет:

Отправить комментарий