Convert the display extents in Pixels (at the current map scale) and then return out the map units.
[C#]
///<summary>Convert the display extents in Pixels (at the current map scale) and then return out the map units.</summary> /// ///<param name="activeView">An IActiveView interface</param> ///<param name="pixelUnits">A System.Double containing the number of display pixels to convert. Example: 100</param> /// ///<returns>A System.Double containing the number of Map Units, -1 is returned if something went wrong.</returns> /// ///<remarks></remarks> public System.Double ConvertPixelsToMapUnits(ESRI.ArcGIS.Carto.IActiveView activeView, System.Int32 pixelUnits) { if(activeView == null) { return -1; } //Get the ScreenDisplay ESRI.ArcGIS.Display.IScreenDisplay screenDisplay = activeView.ScreenDisplay; //Get the DisplayTransformation ESRI.ArcGIS.Display.IDisplayTransformation displayTransformation = screenDisplay.DisplayTransformation; //Get the device frame which will give us the number of pixels in the X direction ESRI.ArcGIS.Display.tagRECT deviceRECT = displayTransformation.get_DeviceFrame(); System.Int32 pixelExtent = (deviceRECT.right - deviceRECT.left); //Get the map extent of the currently visible area ESRI.ArcGIS.Geometry.IEnvelope envelope = displayTransformation.VisibleBounds; System.Double realWorldDisplayExtent = envelope.Width; //Calculate the size of one pixel if(pixelExtent == 0) { return -1; } System.Double sizeOfOnePixel = (realWorldDisplayExtent / pixelExtent); //Multiply this by the input argument to get the result return (pixelUnits * sizeOfOnePixel); }
[Visual Basic .NET]
'''<summary>Convert the display extents in Pixels (at the current map scale) and then return out the map units.</summary> ''' '''<param name="activeView">An IActiveView interface</param> '''<param name="pixelUnits">A System.Double containing the number of display pixels to convert. Example: 100</param> ''' '''<returns>A System.Double containing the number of Map Units, -1 is returned if something went wrong.</returns> ''' '''<remarks></remarks> Public Function ConvertPixelsToMapUnits(ByVal activeView As ESRI.ArcGIS.Carto.IActiveView, ByVal pixelUnits As System.Int32) As System.Double If activeView Is Nothing Then Return -1 End If 'Get the ScreenDisplay Dim screenDisplay As ESRI.ArcGIS.Display.IScreenDisplay = activeView.ScreenDisplay 'Get the DisplayTransformation Dim displayTransformation As ESRI.ArcGIS.Display.IDisplayTransformation = screenDisplay.DisplayTransformation 'Get the device frame which will give us the number of pixels in the X direction Dim deviceRECT As ESRI.ArcGIS.Display.tagRECT = displayTransformation.DeviceFrame Dim pixelExtent As System.Int32 = (deviceRECT.right - deviceRECT.left) 'Get the map extent of the currently visible area Dim envelope As ESRI.ArcGIS.Geometry.IEnvelope = displayTransformation.VisibleBounds Dim realWorldDisplayExtent As System.Double = envelope.Width 'Calculate the size of one pixel If pixelExtent = 0 Then Return -1 End If Dim sizeOfOnePixel As System.Double = (realWorldDisplayExtent / pixelExtent) 'Multiply this by the input argument to get the result Return (pixelUnits * sizeOfOnePixel) End Function