Страница 1 из 1
Как узнать слой, которому принадлежит кликнутый объект?
Добавлено: 28 фев 2011, 11:50
Tereha
В обработки двойного клика на axMapControl есть координаты X,Y , соответствующие точке клика, а как узнать какому слою она принадлежит, а еще лучше объекту. Есть подозрение , что если player - это слой, которому принадлежит объект, то доступ можно получить с помощью доступа типа
Код: Выделить всё
pFc = pLayer.FeatureClass
strOIDName = pFc.OIDFieldName
' Get the selected features from the layer
Dim pFSel As IFeatureSelection
pFSel = pLayer
Dim pSelSet As ISelectionSet
pSelSet = pFSel.SelectionSet
'Dim pFCur As IFeatureCursor 'declared up top
pSelSet.Search(Nothing, False, pFCur)
Я пишу на C# , поэтому в коде только идея
Re: Как узнать слой, которому принадлежит кликнутый объект?
Добавлено: 28 фев 2011, 15:43
Tereha
Получаю ActiveView следующим образом
Код: Выделить всё
private ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler m_ActiveViewEventsSelectionChanged;
m_map = (ESRI.ArcGIS.Carto.IMap)axMapControl1.ActiveView.FocusMap; // Explict Cast
//Create an instance of the delegate, add it to SelectionChanged event
m_ActiveViewEventsSelectionChanged = new ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler(OnActiveViewEventsSelectionChanged);
((ESRI.ArcGIS.Carto.IActiveViewEvents_Event)(m_map)).SelectionChanged += m_ActiveViewEventsSelectionChanged;
Можно ли в этой ситуации понять на каком символе клик или нужно что-то еще?
Re: Как узнать слой, которому принадлежит кликнутый объект?
Добавлено: 03 мар 2011, 16:10
Tereha
Вот как то так работает
Код: Выделить всё
private void OnActiveViewEventsSelectionChanged()
{
ICompositeLayer layer1;
IFeatureLayer layer;
layer1 = axMapControl1.get_Layer(2) as ESRI.ArcGIS.Carto.ICompositeLayer;
layer = layer1.get_Layer(0) as ESRI.ArcGIS.Carto.IFeatureLayer;
IBasicMap map = null;
ILayer layer2 = null;
layer.Selectable = true;
Object other = null;
Object index = null;
esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
axTOCControl1.GetSelectedItem(ref item, ref map, ref layer2, ref other, ref index);
IGeoFeatureLayer player;
player = layer2 as IGeoFeatureLayer;
player.Selectable = true;
ESRI.ArcGIS.Geodatabase.IFeatureClass pFc;// = player as ESRI.ArcGIS.Geodatabase.IFeatureClass;
string strOIDName;
pFc = player.FeatureClass;
if(pFc!=null)
strOIDName = pFc.OIDFieldName;
ESRI.ArcGIS.Carto.IFeatureSelection pFSel;
pFSel = player as ESRI.ArcGIS.Carto.IFeatureSelection;
ESRI.ArcGIS.Geodatabase.ISelectionSet pSelSet;
pSelSet = pFSel.SelectionSet;
ESRI.ArcGIS.Geodatabase.ICursor pFCur;
pSelSet.Search(null, false, out pFCur);
int nlay = pFCur.FindField("Centr_lesn");
string centr = pFCur.NextRow().get_Value(nlay).ToString();
this.label2.Text = centr;
IFeatureSelection featureSelection = layer2 as IFeatureSelection;
ESRI.ArcGIS.Geodatabase.ISelectionSet selectionSet = featureSelection.SelectionSet;
}
Спасибо!