[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 );
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文字绘制方法的更多相关文章
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
- C++学习20 虚基类详解
多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次.如下图所示: 类A派生出类B和类C,类D继承自类B和类 ...
- 动态修改Python类和实例的方法(转)
相信很多朋友在编程的时候都会想修改一下已经写好的程序行为代码,而最常见的方式就是通过子类来重写父类的一些不满足需求的方法.比如说下面这个例子. class Dog: def bark(self): p ...
- Python小白学习之如何添加类属性和类方法,修改类私有属性
如何添加类属性和类方法,修改类私有属性 2018-10-26 11:42:24 类属性.定义类方法.类实例化.属性初始化.self参数.类的私有变量的个人学习笔记 直接上实例: class play ...
- 9_13学习完整修改和查询&&实体类,数据访问类
完整修改和查询:中间变量运用. 1.先查 2.执行操作 ---------------------------------------------------- namespace ADO.NET_小 ...
- Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)
1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...
- Java学习-041-颜色工具类(RGB,HEX)
在日常的网页开发中,经常需要进行颜色数值获取.转换,例如获取红色,获取蓝色,获取绿色,RGB转十六进制颜色,十六进制颜色转RGB等,因而在学习过程中,写了一个小工具类,仅供各位小主参考! 多不闲言,直 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Entity Framework 学习初级篇2--ObjectContext类的介绍
转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685014.html 本节,简单的介绍EF中的ObjectContext.ObjectQuer ...
随机推荐
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)
题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...
- SegmentedControl的使用
原文 http://blog.csdn.net/hmt20130412/article/details/38390493 @UISegmentedControl类似于UIButton,它可以提供多个选 ...
- 【渗透测试学习平台】 web for pentester -8.XML
example1: http://192.168.91.139/xml/example1.php?xml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%2 ...
- unix:/tmp/php-cgi.sock
为什么要用unix:/tmp/php-cgi.sock,最主要的特征就是unix socket比tcp快,当网站流量大的时候,服务器的优化是分毫必争的. 当我们用php-fpm来管理我们的php启动时 ...
- font-size对展示的影响
实例: <head> <style type="text/css"> span{display: inline-bloc ...
- 图片文字混排的垂直居中、inline-block块元素和行内元素混排的垂直居中问题
图片.文字混排: 不管图片和文字的前后位置,都要给 图片 设置 vertical-algin,而不是谁在前面给谁设置. 此方法兼容IE7+ 和其它主流浏览器.IE7-没有测. inline-block ...
- Excel 2010 最熟悉的陌生功能:筛选器(将当前所选内容添加到筛选器)
使用excel2010版的同学,在进行筛选时,肯定都对这句话很熟悉:将当前所选内容添加到筛选器.但很多同学天天看到,却不知道什么是筛选器?它有什么作用. 其实,这里所指的筛选器就是储存筛选结果的一个虚 ...
- Android SharedPreferences保存第一次的信息
private void setHomeTimeZone() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPrefere ...
- Java初学者笔记二:关于类的常见知识点汇总
一.Java的类: Java的类是Java的基本概念了,基本的定义语法我就不提了,自己也不会忘了的,下面分成几个模块介绍: 1.Java的类定义时候的修饰符 2.Java的类的继承与派生 二.Java ...
- Minix2.0操作系统公用头文件说明
以下头文件均在目录include/下: ansi.h: 用来检测编译器是否遵循标准C,如果是的话,_ANSI就被定义为31415,如果不是的,则_ANSI未定义.通过这个宏来诊测. limits.h: ...