2010-07-22 18 views
1

J'ai essayé de tracer une carte sur axmapcontrol et d'utiliser le même ITable pour créer un graphe de nuage de points dans IDataGraphwindow2. Malheureusement, le graphique apparaît avec des données correctes, mais aucun événement de clic sur le graphique ne fonctionne. Le clic gauche montre une erreur de mémoire et le clic droit affiche un menu désactivé. Pour le clic gauche, je pense que DataGraphTUI.dll est responsable. Lorsque nous chargeons l'IDataGraphWindow2, nous n'initialisons pas cela, car cela donne probablement une erreur.Comment utiliser la fenêtre datagraph d'arcgis par programme

Veuillez trouver le code ci-dessous.

IDataGraphWindow2 pDGWin; 
IDataGraphT dataGraphT = new DataGraphTClass(); 
IWorkspace shapefileWorkspace = null; 
IWorkspaceFactory shapefileWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); 
shapefileWorkspace = shapefileWorkspaceFactory.OpenFromFile("C:\\abc.shp "), 0); 
featureWorkspace = (IFeatureWorkspace)shapefileWorkspace; 

featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension("c:\\abc.shp")); 

ITable gobjJoinedTable = (ITable)featureLayer.FeatureClass; 

LoadaxMap(); /// a method to load up the axmapcontrol 

dataGraphT.UseSelectedSet = true; 
dataGraphT.HighlightSelection = true; 
dataGraphT.GeneralProperties.Title = "Scatter Graph"; 
dataGraphT.LegendProperties.Visible = false; 
dataGraphT.get_AxisProperties(0).Title = "Y Axis"; 
dataGraphT.get_AxisProperties(0).Logarithmic = false; 
dataGraphT.get_AxisProperties(2).Title = "X Axis"; 
dataGraphT.get_AxisProperties(2).Logarithmic = false; 

ISeriesProperties seriesProps = dataGraphT.AddSeries("scatter_plot"); 
seriesProps.SourceData = axMap.get_Layer(0) as ITable; // axMap is the map control. Itable direct binding also works here 

seriesProps.SetField(0, "abc.shp-fieldname"); // you may add any fieldname 
seriesProps.SetField(1, "abc.shp-fieldname"); 

dataGraphT.Update(null); 
dataGraphT.UseSelectedSet = true; 
dataGraphT.HighlightSelection = false; 
dataGraphT.Update(null); 
pDGWin = new DataGraphWindowClass(); 
pDGWin.DataGraphBase = dataGraphT; 
pDGWin.PutPosition(546, 155, 1040, 540); 
pDGWin.Show(true); 

L'erreur de mémoire est violation d'accès à l'adresse 0F4E358B dans le module 'DatagraphTUI.dll'. Lecture de l'adresse 00000000

+0

Essayez gis.stackexchange.com – Nate

+0

J'avais besoin d'une fonctionnalité où je peux tracer des données dans un graphique. Si l'utilisateur sélectionne certaines données du graphique à la souris, il peut voir les mêmes données tracées dans le axmapcontrol. Normalement, ceci est bien fait par ArcGIS 9 datagraphwindow. Mais dynamiquement (j'ai essayé C#) vous ne pouvez pas le faire fonctionner comme je l'ai codé ci-dessus. Ainsi, vous pouvez utiliser MS Charts ou Devexpress like Charts pour effectuer la fonction de tracé et de sélection. Lors de la sélection, vous pouvez récupérer les valeurs et les tracer dans axMapcontrol. – subho

Répondre

2

Avait le même problème lors de l'affichage du graphique. fixe en utilisant cette ligne de code:

graphWindow.Application = ArcMap.Application 

Tout ce qu'il a besoin est une référence à l'application ArcMap.