[WorldWind学习]20.修改ShapeFileLayer类及托管D3D文字绘制方法

PluginSDK\ShapeFileLayer.cs Line:1027
char[] fieldDataChars = dbfReader.ReadChars(fieldHeaders[j].FieldLength);
string fieldData = new string( fieldDataChars );

byte[] fieldDataChars = dbfReader.ReadBytes(fieldHeaders[j].FieldLength);
string fieldData = System.Text.Encoding.Default.GetString( fieldDataChars );

 [WorldWind学习]20.修改ShapeFileLayer类及托管D3D文字绘制方法

 1 if(m_LabelList.Count > 0)

 2 {

 3     System.Drawing.Color iconColor = System.Drawing.Color.FromArgb(m_IconOpacity, 255, 255, 255);

 4     foreach(Shapefile_Point p in m_LabelList)

 5     {

 6         Vector3 cartesianPoint = MathEngine.SphericalToCartesian(p.Y, p.X, drawArgs.WorldCamera.WorldRadius + drawArgs.WorldCamera.TerrainElevation);

 7         if(!drawArgs.WorldCamera.ViewFrustum.ContainsPoint(cartesianPoint) ||MathEngine.SphericalDistanceDegrees(p.Y, p.X, drawArgs.WorldCamera.Latitude.Degrees, drawArgs.WorldCamera.Longitude.Degrees) > 90.0)

 8         continue;

 9         Vector3 projectedPoint = drawArgs.WorldCamera.Project(cartesianPoint - referenceCenter);

10         

11         m_Sprite.Begin(SpriteFlags.AlphaBlend);

12         if(m_IconTexture != null)

13         {

14             float xscale = (float)m_IconWidth / m_IconTextureDescription.Width;

15             float yscale = (float)m_IconHeight / m_IconTextureDescription.Height;

16             m_Sprite.Transform = Matrix.Scaling(xscale,yscale,0);

17             m_Sprite.Transform *= Matrix.Translation(projectedPoint.X, projectedPoint.Y, 0);

18             m_Sprite.Draw( m_IconTexture,

19                 new Vector3( m_IconWidth>>1, m_IconHeight>>1,0),

20                 Vector3.Empty,

21                 iconColor.ToArgb() );

22 

23             // Reset transform to prepare for text rendering later

24             m_Sprite.Transform = Matrix.Identity;

25         }

26 

27         if(m_ShapeTileArgs.ShowLabels && m_ShapeTileArgs.DataKey != null)

28         {    

29             // Render label

30             if(p.Tag != null)

31             {

32                 // Render name field

33                 const int labelWidth = 1000; // Dummy value needed for centering the text

34                 if(m_IconTexture==null)

35                 {

36                     // Center over target as we have no bitmap

37                     Rectangle rect = new Rectangle(

38                         (int)projectedPoint.X - (labelWidth>>1), 

39                         (int)(projectedPoint.Y - (drawArgs.defaultDrawingFont.Description.Height >> 1)),

40                         labelWidth, 

41                         drawArgs.screenHeight );

42 

43                     drawArgs.defaultDrawingFont.DrawText(m_Sprite, p.Tag.ToString(), rect, DrawTextFormat.Center, m_ShapeTileArgs.LabelColor);

44                 }

45                 else

46                 {

47                     // Adjust text to make room for icon

48                     int spacing = (int)(m_IconWidth * 0.3f);

49                     if(spacing>10)

50                         spacing = 10;

51                     int offsetForIcon = (m_IconWidth>>1) + spacing;

52 

53                     Rectangle rect = new Rectangle(

54                         (int)projectedPoint.X + offsetForIcon, 

55                         (int)(projectedPoint.Y - (drawArgs.defaultDrawingFont.Description.Height >> 1)),

56                         labelWidth, 

57                         drawArgs.screenHeight );

58 

59                     drawArgs.defaultDrawingFont.DrawText(m_Sprite, p.Tag.ToString(), rect, DrawTextFormat.WordBreak, m_ShapeTileArgs.LabelColor);

60                 }

61             }

62         }        

63         m_Sprite.End();

64     }

65 }

有一个文字3D世界坐标点投影到屏幕的过程,在屏幕绘制。

 

你可能感兴趣的:(shape)