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. sql 字符串操作

    SQL Server之字符串函数   以下所有例子均Studnet表为例:  计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student ...

  2. 51地图标注接口(EZMarker API)

    功能 在很多时候,您需要您的用户标出一个位置,比如:一个房地产网站,用户在登记新楼盘的时候,就需要在地图上标出这个楼盘的位置,这个时候就可以用到本接口. 地图标注接口(EZMarker API)是我要 ...

  3. SPP-Net

    R-CNN -> SPP-Net -> Fast-RCNN

  4. 工作流JBPM_day01:4-管理流程定义

    工作流JBPM_day01:4-管理流程定义 管理流程(流程定义) 部署(添加) 查询 删除 查看流程图(xxx.png) -- 修改 --> 没有真正的修改,而是使用“再次部署+使用最新版本启 ...

  5. Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)

    线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...

  6. day7—直播内容(元昊老师著)

    *******************************class animal(object): def __init__(self): self.is_handsome=True def e ...

  7. cocos2dx游戏--欢欢英雄传说--添加攻击按钮

    接下来添加攻击按钮用于执行攻击动作.同时修复了上一版移动时的bug.修复后的Player::walkTo()函数: void Player::walkTo(Vec2 dest) { if (_seq) ...

  8. spring AOP底层原理实现——jdk动态代理

    spring AOP底层原理实现——jdk动态代理

  9. oracle数据库sql比较日期

    select * from cc_random_check_info t where check_time > to_date('2016-09-09','yyyy-MM--dd')

  10. mysql增删改查基本语句

    mysql的增删改查属于基本操作,又被简称CRUD,其中删用的较少,毕竟这个功能给用户是是非常危险的,就是客户删除的数据也没有真正的删除,其中查询是十分常用的. 1 mysql数据库增加:create ...