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 );

 if(m_LabelList.Count > )
{
System.Drawing.Color iconColor = System.Drawing.Color.FromArgb(m_IconOpacity, , , );
foreach(Shapefile_Point p in m_LabelList)
{
Vector3 cartesianPoint = MathEngine.SphericalToCartesian(p.Y, p.X, drawArgs.WorldCamera.WorldRadius + drawArgs.WorldCamera.TerrainElevation);
if(!drawArgs.WorldCamera.ViewFrustum.ContainsPoint(cartesianPoint) ||MathEngine.SphericalDistanceDegrees(p.Y, p.X, drawArgs.WorldCamera.Latitude.Degrees, drawArgs.WorldCamera.Longitude.Degrees) > 90.0)
continue;
Vector3 projectedPoint = drawArgs.WorldCamera.Project(cartesianPoint - referenceCenter); m_Sprite.Begin(SpriteFlags.AlphaBlend);
if(m_IconTexture != null)
{
float xscale = (float)m_IconWidth / m_IconTextureDescription.Width;
float yscale = (float)m_IconHeight / m_IconTextureDescription.Height;
m_Sprite.Transform = Matrix.Scaling(xscale,yscale,);
m_Sprite.Transform *= Matrix.Translation(projectedPoint.X, projectedPoint.Y, );
m_Sprite.Draw( m_IconTexture,
new Vector3( m_IconWidth>>, m_IconHeight>>,),
Vector3.Empty,
iconColor.ToArgb() ); // Reset transform to prepare for text rendering later
m_Sprite.Transform = Matrix.Identity;
} if(m_ShapeTileArgs.ShowLabels && m_ShapeTileArgs.DataKey != null)
{
// Render label
if(p.Tag != null)
{
// Render name field
const int labelWidth = ; // Dummy value needed for centering the text
if(m_IconTexture==null)
{
// Center over target as we have no bitmap
Rectangle rect = new Rectangle(
(int)projectedPoint.X - (labelWidth>>),
(int)(projectedPoint.Y - (drawArgs.defaultDrawingFont.Description.Height >> )),
labelWidth,
drawArgs.screenHeight ); drawArgs.defaultDrawingFont.DrawText(m_Sprite, p.Tag.ToString(), rect, DrawTextFormat.Center, m_ShapeTileArgs.LabelColor);
}
else
{
// Adjust text to make room for icon
int spacing = (int)(m_IconWidth * 0.3f);
if(spacing>)
spacing = ;
int offsetForIcon = (m_IconWidth>>) + spacing; Rectangle rect = new Rectangle(
(int)projectedPoint.X + offsetForIcon,
(int)(projectedPoint.Y - (drawArgs.defaultDrawingFont.Description.Height >> )),
labelWidth,
drawArgs.screenHeight ); drawArgs.defaultDrawingFont.DrawText(m_Sprite, p.Tag.ToString(), rect, DrawTextFormat.WordBreak, m_ShapeTileArgs.LabelColor);
}
}
}
m_Sprite.End();
}
}

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

[WorldWind学习]20.修改ShapeFileLayer类及托管D3D文字绘制方法的更多相关文章

  1. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  2. C++学习20 虚基类详解

    多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次.如下图所示: 类A派生出类B和类C,类D继承自类B和类 ...

  3. 动态修改Python类和实例的方法(转)

    相信很多朋友在编程的时候都会想修改一下已经写好的程序行为代码,而最常见的方式就是通过子类来重写父类的一些不满足需求的方法.比如说下面这个例子. class Dog: def bark(self): p ...

  4. Python小白学习之如何添加类属性和类方法,修改类私有属性

    如何添加类属性和类方法,修改类私有属性 2018-10-26  11:42:24 类属性.定义类方法.类实例化.属性初始化.self参数.类的私有变量的个人学习笔记 直接上实例: class play ...

  5. 9_13学习完整修改和查询&&实体类,数据访问类

    完整修改和查询:中间变量运用. 1.先查 2.执行操作 ---------------------------------------------------- namespace ADO.NET_小 ...

  6. Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

    1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...

  7. Java学习-041-颜色工具类(RGB,HEX)

    在日常的网页开发中,经常需要进行颜色数值获取.转换,例如获取红色,获取蓝色,获取绿色,RGB转十六进制颜色,十六进制颜色转RGB等,因而在学习过程中,写了一个小工具类,仅供各位小主参考! 多不闲言,直 ...

  8. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  9. Entity Framework 学习初级篇2--ObjectContext类的介绍

    转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685014.html 本节,简单的介绍EF中的ObjectContext.ObjectQuer ...

随机推荐

  1. mysql中如何在命令行中,执行一个SQL脚本文件?

    需求描述: 在mysql数据库的使用中,有的时候,需要直接在shell的命令行中,执行某个SQL脚本文件, 比如,要初始化数据库,创建特定的存储过程,创建表等操作,这里进行一个基本的测试. 一般情况, ...

  2. Landpy.ActiveDirecoty,按照Active Record Pattern设计的方便Lib开源发布

    想方便的操作AD吗,不想记住那么多AD Attribute名称和常量?请使用Landpy.ActiveDirecoty库,按照Active Record Pattern设计的AD Lib已经在Code ...

  3. Java集合----概述、Collection接口、Iterator接口

    Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...

  4. UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView

    « 对Cocos2d游戏引擎有一定的了解和实践,并接触过处理3D图形和模型库的OpenGL 在进行游戏界面的绘制工作中,需要处理大量的工作,这些工作有很多共性的操作:并且对于游戏界面的切换,元素动作的 ...

  5. vsftp服务启动失败

    Linux下的服务如果启动失败,一般是看报错和日志进行排查的 报错看不出什么,那么就看下日志记录了什么/var/log/vsftpd.log: 一般是配置文件有问题 /etc/vsftpd/vsftp ...

  6. combobox组合框

    最近在改BUG的时候发现,combobox组合框如果选择的是Dropdown模式在初始化combobox对象时候有如下操作 1.SetDlgItemInt(IDC_WB_FONTSIZECOMBOX, ...

  7. MySql学习—— 查询性能优化 深入理解MySql如何执行查询

    本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...

  8. 【linux】安装rar,并解压被压缩成多个rar的文件

    rar  官网:http://www.rarsoft.com/download.htm 选择  RAR for  linux   (注意你的系统是32位还是64位) 1 安装命令: $ cd /roo ...

  9. Go基础---->go的基础学习(三)

    这里面我们简单的介绍go中面向对象编程的知识. Go的面向对象编程 一.为类型添加方法 package main import "fmt" type Integer int // ...

  10. jquery类似方法的比较(二)

    (1)append()&appendTo()&prepend()$prependTo() (2)after()&before()&insertAfter()&i ...