61阅读

PS入门教程-LinQ入门教程

发布时间:2018-03-17 所属栏目:IDL

一 : LinQ入门教程

DoNet Framework 3.5 系列

Language Integrated Query

学习指南

Beijing ZJS Express Stock Limited Company

Address: The 11 Floor, Zhaowei Building, Jiangtai Road, Chaoyang District of Beijing.

Postcode: 100016 Name: Liu Xiaohui Email: Xiaohui_liu0406@163.com

Tel: 13488810897 Office: 010-84561144-1816 th

Page 1 of 113

DoNet Framework 3.5 系列

“在Linq To Sql正式推出之前,很多人只是把sql语句形成一个string,然后,通过ADO.NET传给SQL Server,返回结果集。这里的缺陷就是,假如你sql语句写的有问题,只有到运行时才知道, 而Linq To Sql语句是在编译期间就做检查”,那么Linq是个什么东西呢?它能翻译SQL语句?带着疑问…

LINQ:Language Integrated Query 语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换(类似JAVA中Hibernate框架,.NET中的NHibernate),它完全是基于.NET 2.0 的框架。

学习完LINQ完后,你会发现它的优点与缺点。它的优点在于封装了SQL语句,只对对象进行操作(添加、删除、修改和查询),代码量大大减少,让我们重点关心业务逻辑,而非代码上,把我们引入到面向对象编程方式上来;缺点在于追求效益的同时牺牲了性能,比起ADO.NET 性能稍差(ADO.NET更有优势,不需要进行OR转换),另外对一些复杂的SQL语句也不好操作(这里LINQ支持SQL语句),虽然它都支持联合、分组、排序、连接查询等,因此要有选择性的用。

我们学习LINQ框架并非全部硬搬,而是有目的的选择,其实学习任何新的东西都要有的放矢,知道它们的得与失,找出平衡点更好的实践在项目中来。

下面的学习文章来自CNBLOG 网,经整理方便学习研究。

——Joney Liu ^^

Beijing ZJS Express Stock Limited Company

Address: The 11 Floor, Zhaowei Building, Jiangtai Road, Chaoyang District of Beijing.

Postcode: 100016 Name: Liu Xiaohui Email: Xiaohui_liu0406@163.com

Tel: 13488810897 Office: 010-84561144-1816 th

Page 2 of 113

二 : IDL入门教程

IDL入门教程

安徽遥感考古工作站藏书

1

第一章 起步篇...........................................................................................................9

本章概述................................................................................................................................9

书写本书的背景....................................................................................................................9

运用本书..............................................................................................................................10

IDL所需的版本............................................................................................................................10 IDL运行期间所需颜色的数量.....................................................................................................10

本书的风格习惯............................................................................................................................11 本书中所用的IDL程序和数据文件.............................................................................................13 获取更多的帮助...........................................................................................................................15

使用IDL命令.......................................................................................................................15

IDL命令解析................................................................................................................................15 创建变量.......................................................................................................................................18 使用IDL图形窗口........................................................................................................................23

第二章 简单的图形显示.........................................................................................26

本章概述..............................................................................................................................26

IDL中简单的图形显示.......................................................................................................26

创建线画图..........................................................................................................................26

定制线画图..........................................................................................................................29

改变线条的线型和粗细...............................................................................................................29 用符号代替线条显示数据...........................................................................................................29 用不同的颜色绘制线画图...........................................................................................................32 限定线画图的范围.......................................................................................................................32 改变线画图的风格.......................................................................................................................33

在线画图上绘出多种数据集..............................................................................................34

在多个轴的图上显示数据...........................................................................................................36

创建曲面图..........................................................................................................................36

定制曲面图..........................................................................................................................39

旋转曲面图...................................................................................................................................39 为曲面赋色...................................................................................................................................40 修改曲面图外观...........................................................................................................................41

创建阴影曲面图..................................................................................................................42

改变阴影处理参数.......................................................................................................................42 用其它数据集为阴影处理提供参数...........................................................................................43

创建等值线图......................................................................................................................44

选择等值线数目..................................................................................................................46

修改等值线图......................................................................................................................47

改变等值线图的外观...................................................................................................................48 给等值线图赋色...........................................................................................................................49 2

创建填充的等值线图..........................................................................................................50

在显示窗口定位图形输出..................................................................................................51

设置图形边缘...............................................................................................................................52 设置图形位置...............................................................................................................................53 设置图形区域...............................................................................................................................54 创建多个图形...............................................................................................................................54

给图形显示添加文本..........................................................................................................58

找出可用字体的名称...................................................................................................................59 用XYOutS命令添加文本.............................................................................................................59 用矢量字体使用XYOut...............................................................................................................60 排列文本.......................................................................................................................................61 删除文本.......................................................................................................................................61 改变文本的方向...........................................................................................................................62

给图形显示添加线和符号..................................................................................................62

图形显示添加色彩..............................................................................................................63

第三章 图像数据处理.............................................................................................72

本章概要..............................................................................................................................72

图像处理..............................................................................................................................72

显示图像.......................................................................................................................................72 调整图像数据...............................................................................................................................74 显示24位图像.............................................................................................................................76 控制图像显示顺序.......................................................................................................................77 改变图像尺寸...............................................................................................................................77 在显示窗口中定位图像...............................................................................................................78 从显示器中读取图像...................................................................................................................81

IDL中基本的图像处理.......................................................................................................82

直方图均衡化...............................................................................................................................82 平滑图像.......................................................................................................................................66 增强图像棱边...............................................................................................................................68 图像的频域滤波...........................................................................................................................68

第四章 图形显示技术.............................................................................................84

本章概要..............................................................................................................................84

IDL的颜色运用...................................................................................................................84

使用索引颜色模式和RGB颜色模式...........................................................................................84 在24位显示设备上装载色谱表.................................................................................................89 获得色谱表的拷贝.......................................................................................................................89 修改和创建色谱表.......................................................................................................................90 保存自己的色谱表.......................................................................................................................91

创建自己的轴标注..............................................................................................................92

调整轴刻度间隔...........................................................................................................................92 3

格式化轴的标注...........................................................................................................................93

用IDL处理残缺的数据.......................................................................................................96

用IDL建立三维坐标系.......................................................................................................98

建立三维散点图...........................................................................................................................98 从图形原点定位3D坐标轴........................................................................................................100 组合简单图形显示............................................................................................................101 IDL中的动画数据.............................................................................................................103 建立动画工具..............................................................................................................................104 装载动画缓冲区..........................................................................................................................104 运行动画工具..............................................................................................................................104 动画的控制..................................................................................................................................104 存储动画的像素映射图..............................................................................................................105 其它类型图形数据的动画..........................................................................................................105 网格化数据以便图形显示................................................................................................106 德洛内三角形法网格化..............................................................................................................107 数据的球形网格化......................................................................................................................109

第五章 图形显示技巧...........................................................................................111 本章概要............................................................................................................................111 将光标用于图形显示........................................................................................................111 什么时候返回的光标位置?......................................................................................................111 哪一个鼠标键和光标共同作用呢?..........................................................................................112 用光标标注图形输出..................................................................................................................112 在图像上使用Cursor命令...........................................................................................................113 在循环中使用Cursor命令...........................................................................................................114 从显示中删除注释............................................................................................................115 删除注释的异或法......................................................................................................................115 删除注释的设备拷贝法..............................................................................................................117 Z图形缓冲区中的图形显示技巧.....................................................................................121 Z图形缓冲区的实现....................................................................................................................121 一个Z图形缓冲区实例:两个曲面............................................................................................122 用Z图形缓冲区使图像变形........................................................................................................124 Z图形缓冲区中的透明效果........................................................................................................127 将Z图形缓冲区效果与体数据着色相结合................................................................................128

第六章 在IDL中读写数据......................................................................................129 本章概要............................................................................................................................129 打开文件进行读写............................................................................................................130 查找和选择数据文件..................................................................................................................130 获取逻辑设备号..........................................................................................................................132 读写格式化数据................................................................................................................133 4

写自由格式文件..........................................................................................................................133 读写自由格式文件的实例..........................................................................................................136 用确定的文件格式写入..............................................................................................................140 从字符串中读取格式数据..........................................................................................................141 读写非格式化数据............................................................................................................141 读取非格式化图像数据文件......................................................................................................142 写非格式化图像数据文件..........................................................................................................142 非格式化数据文件的一些问题..................................................................................................144 用关联变量存取非格式化数据文件..........................................................................................144 读写常用文件格式的文件................................................................................................147 创建彩色GIF文件........................................................................................................................147 创建彩色JPEG文件.....................................................................................................................148 查询图像文件信息......................................................................................................................150

第七章 图形硬拷贝输出.........................................................................................151 本章概要............................................................................................................................151 选择图形硬拷贝输出设备................................................................................................151 配置图形硬拷贝输出设备................................................................................................152 常用的Device命令关键字...........................................................................................................153 创建PostScript文件......................................................................................................................154 将图形送到硬拷贝设备中................................................................................................154 打印PostScript文件..........................................................................................................155 在运行MacOS系统的计算机上打印PostScript文件..................................................................156 在Windows计算机上打印PostScript文件...................................................................................156 生成封装的PostScript文件输出......................................................................................156 封装PostScript图形的预览..........................................................................................................157 生成彩色的PostScript输出..............................................................................................157 PostScript中的彩色图像与灰度图像..........................................................................................158 在PostScript设备上创建高质量的输出..........................................................................158 显示设备和PostScript设备之间的相同点..................................................................................159 显示设备与PostScript设备之间的不同点..................................................................................159 在横向输出模式中计算PostScript的偏移量..................................................................171 用PS_Form配置PostScript设备......................................................................................172 配置和使用打印设备........................................................................................................173 用打印设备定位图形..................................................................................................................174

第八章......................................................................................................IDL编程基础 188 本章概述............................................................................................................................188 编写IDL批处理文件.........................................................................................................188 5

编写IDL主程序.................................................................................................................189 过程和与函数中变量的作用范围..............................................................................................191 创建定位参数..............................................................................................................................191 定义可选的或必须的定位参数..................................................................................................192 定义关键字..................................................................................................................................193 创建输出型参数..........................................................................................................................196 编写IDL函数.....................................................................................................................198 方括号和函数的调用..................................................................................................................200 使用程序控制语句............................................................................................................201 IDL中表达式的真和假...............................................................................................................201 将多个语句处理成单个语句......................................................................................................201 If…Then…Else控制语句............................................................................................................202 条件表达式..................................................................................................................................203 FOR循环控制语句......................................................................................................................203 WHILE循环控制语句.................................................................................................................204 REPEAT...UNTIL 循环控制语句...............................................................................................204 CASE控制语句............................................................................................................................204 GOTO控制语句...........................................................................................................................205 错误处理控制语句......................................................................................................................205 编译和执行IDL程序模块.................................................................................................207 程序编译规则:..........................................................................................................................208 程序编译和自动运行规则..........................................................................................................208 特殊编译命令..............................................................................................................................209

第九章..................................................................................................编写 IDL 程序 177 本章概述............................................................................................................................177 基本的ImageBar程序.......................................................................................................177 给程序ImageBar增加一个“先擦除”功能...............................................................................181 向ImageBar程序增加颜色敏感功能...........................................................................................181 给ImageBar中的命令传递关键字..............................................................................................183 根据窗口大小改变字符大小......................................................................................................185 程序ImageBar的最终代码..........................................................................................................186 在图形用户界面中包装ImageBar..............................................................................................187

第十章.........................................................................................编写简单的组件程序 230 本章概述............................................................................................................................230 组件程序的结构................................................................................................................230 组件程序如何对事件作出反应........................................................................................231 编写组件定义模块............................................................................................................231 定义和创建程序组件..................................................................................................................232 在屏幕上实现组件......................................................................................................................233 使绘图组件成为当前图形窗口..................................................................................................234 6

在绘图组件窗口上显示图形......................................................................................................234 保存程序运行时所需要的信息..................................................................................................234 创建事件循环和注册程序..........................................................................................................235 运行程序......................................................................................................................................236 创建无阻塞组件程序..................................................................................................................236 编写事件处理模块............................................................................................................237 事件结构中的公共字段..............................................................................................................237 事件处理函数..............................................................................................................................238 将事件处理程序和组件联系起来..............................................................................................239 编写Quit按钮的事件处理程序...................................................................................................240 编写改变图形窗口大小的事件处理程序..................................................................................241 进行小量地修改................................................................................................................242 添加颜色敏感..............................................................................................................................242 采用更高效的内存管理..............................................................................................................243

第十一章.................................................................................................组件编程技巧 210 本章概述............................................................................................................................210 改变颜色表........................................................................................................................210 保护公共块..................................................................................................................................211 一个可选择颜色表的工具..........................................................................................................211 指定Group Leader........................................................................................................................214 给组件程序增加Group Leader....................................................................................................215 在24位显示器上改变颜色表....................................................................................................215 在组件程序中使用指针....................................................................................................217 使用Cleanup过程防止内存泄露.................................................................................................219 使用伪事件进行程序通信................................................................................................220 创建一个具有“记忆功能”的程序..........................................................................................221 保护组件程序的颜色........................................................................................................223 通过组件跟踪事件来保护颜色..................................................................................................224 通过绘图组件事件来保护颜色..................................................................................................225 保存或者发布程序的图形................................................................................................226

第十二章.....................................................................................................对话框程序 247 本章概述............................................................................................................................247 创建模式对话框................................................................................................................247 阻塞的组件程序..........................................................................................................................247 模式组件程序..............................................................................................................................248 编写模式对话框的定义模块......................................................................................................248 编写模式对话框的事件处理模块..............................................................................................252 测试模式对话框程序..................................................................................................................253 创建非模式的对话框........................................................................................................253 7

编写非模式对话框程序..............................................................................................................254 编写非模式对话框的事件处理模块..........................................................................................256 测试非模态对话程序..................................................................................................................257

附录A..................................................................................................组件的事件结构 258 事件结构的定义................................................................................................................258 公共字段的定义..........................................................................................................................258 基本组件的事件结构........................................................................................................259 base组件.......................................................................................................................................259 按钮组件......................................................................................................................................259 绘图组件......................................................................................................................................259 下拉式列表组件..........................................................................................................................259 标签组件......................................................................................................................................260 列表组件......................................................................................................................................260 滑动条组件..................................................................................................................................260 表单组件......................................................................................................................................260 文本组件......................................................................................................................................262 复合组件的事件结构........................................................................................................262 CW_Animate................................................................................................................................262 CW_Arcball..................................................................................................................................262 CW_BGroup.................................................................................................................................262 CW_Clr_Index.............................................................................................................................263 CW_Color_Sel.............................................................................................................................263 CW_DefROI.................................................................................................................................263 CW_Field.....................................................................................................................................263 CW_Form.....................................................................................................................................263 CW_Flisder..................................................................................................................................263 CW_Orient...................................................................................................................................263 CW_PDMenu...............................................................................................................................264 CW_RGBSlider............................................................................................................................264 CW_Zoom....................................................................................................................................264 组件程序的事件结构........................................................................................................264 Xcolors.........................................................................................................................................264 其他组件的事件结构........................................................................................................264 键盘焦点事件..............................................................................................................................264 组件退出请求事件......................................................................................................................265 组建计时器事件..........................................................................................................................265 组件跟踪事件..............................................................................................................................265

附录B.......................................................................................................数据文件描述 266 8

第一章 起步篇

本章概述

本章意在解释写这本书的目的,通过阅读本书能学到什么,以及为读者提供一些能使读者更方便地使用本书中IDL编程例子的信息。将学会如下几点:

1. 本书是如何组织的。

2. 怎样使用本书。

3. 如何下载和组织随本书附带的文件。

4. 如何使用IDL的变量,关键字和命令。

5. 如何创建和运行IDL的矢量和数组。

6. 如何使用IDL的图形窗口。

书写本书的背景

本书是在多年来教科学家和工程师使用和操作IDL(Interactive Data Language)的基础上创作的,而且教学的绝大部分时间是为IDL的开发者Research Systems公司工作。当笔者在回答一个又一个问题之后,笔者意识到多数问题属于一些同类问题。事实是,多数人想用IDL做许多同样的事情。想做的是分析和演示数据,写出高效率的程序来解决科学问题,并且最主要的是快速做完工作。多数人并不想做的事情是阅读计算机软件教科书。IDL是一套大型软件并且在不但壮大。随之而来的是大量的文档资料,笔者知道没有人愿意去读这些资料。如果让某人独自开始学习IDL的奥秘,IDL将是件可怕的事情,甚至对有经验的用户来说也是一样。本书意在使读者掌握IDL,教给读者在日常运行IDL所必需知识的80%。更为重要的是,本书的例子使IDL更容易理解。无论如何,本书将演示如何使用IDL。

本书的读者是IDL初学者,特别是哪些不得不自学IDL的读者。学好IDL需要很长的阶段。多数人不能利用工作中的时间学习IDL,笔者想写一本能满足这两类人学习IDL的书。总之,本书为不喜欢读教科书并能通过例子学得最好的人全面介绍IDL的精髓。本书在IDL编程技术和技巧方面只做了简要概略,而这些技术只能通过练习获取。最根本的是,这是一本笔者在学习IDL时所期望的书。

9

运用本书

笔者曾试图使本书每章能具有独立性,这样能拿起本书就可翻到任何一章去学习最需要的知识。但在安排章节时,或多或少是根据笔者在IDL教学时的顺序安排。如果刚开始学IDL,那么按照书中的顺序从头开始学完本书将更合理。书中后面的几章编程教程是建立在前面几章中讲过的概念和技巧的基础上的。

IDL所需的版本

希望读者在学习本书时使用的是最新的IDL版本。本书写作时使用的是IDL5.2版。使用较早版本可以使用本书中编程例子的大部分,但笔者没有试图使本书中的例子程序与较早的IDL软件版本兼容。特别是,较早版本的用户在使用长文件名(如果在Windows环境下)、指针(必须用句柄代替它)以及方括号来引用数组下标时(必须用圆括号代替它)时存在困难。如果需要升级软件,可以在Research Systems公司的WWW网址 http://www.61k.com上查找关于Research Systems公司和当地IDL代理商的信息,包括如何升级软件的信息。

IDL运行期间所需颜色的数量

书中程序例子是按IDL在256种颜色模式下运行编写的,使用通常称为索引颜色的模式(详细细节参考83页的“使用IDL的颜色”章节)。这意味着所显示的颜色是索引号或是与色彩表相连的颜色,这样在色彩表中的颜色变化时,所显示的颜色也一同变化。启动IDL并在IDL命令行键入如下IDL命令,能发现所用的颜色模式。

IDL>Window

IDL>Print, !D.N_Colors

当!D.N_Colors的值大于或等于256时,仍然能够使用书本中的例子,但必需对代码做一点改变。大多数人使用的颜色值都小于256。比较典型的颜色值介于200与245之间。笔者推测在本书中至少要用150种颜色。那就是说,!D.N_Colors的值应在150至256之间。 少于150种颜色会怎样?

如果在IDL运行中少于150种颜色,并且计算机运行在公用桌面环境(CDE),可以将CDE环境下的颜色数设置为不是“高”的那种。设置为“中”或“低”的情况下,程序将运行良好。在视窗环境操作手册的在线帮助中查找如何改变这个设置。

如果不是用的共用桌面环境,颜色数也少于150,并且不是在PC机或Macintosh计算机上运行IDL的话,那么很可能运行了其它应用程序,该应用程序使用了要分配给IDL的颜色值。网页浏览器很可能就是这样的应用程序。退出当前任务,重新登录,并在重新登录后最先启动IDL。键入以上命令,如果仍然得到少于150种的颜色,那么需要联系Research Systems公司的技术人员,以获取更多的帮助。

如果颜色数少于150种,并且是在PC或Macintosh计算机上运行的IDL,那么,检查显卡以确保设置为256色。一般可通过显示器的控制面板完成。详细细节参考计算机文档资料。 10

多于256种颜色将会怎么样呢?

如果在IDL运行中多于256种颜色,并且IDL是运行在X Window环境下的计算机上,就可让IDL使用8位的伪彩色显示级别。

退出IDL,并重新启动IDL。在做任何操作之前,键入以下命令:

IDL>Device,Pseudo_Color=8.Decomposed=0

为了确认是在使用8位伪彩色显示级别,键入:

IDL>Help, /Device

所显示的信息使读者确信使用的是伪彩色显示级别,并且所使用的颜色数为256或少于256。如果想使用本书中的例子,每次进入IDL时都需要键入DEVICE命令。可以将此命令放在IDL启动文件中。查看IDL文档资料以获取更多的详细资料。

如果在IDL运行中多于256种颜色,并且是在PC或Macintosh计算机上运行IDL,需要检查显示卡的设置参数以确保设置为256色。一般通过显示器或显示面板完成。详细细节参考计算机文档资料。修改参数后必须重新启动IDL。

如果喜欢在16位或24位的颜色模式(在Macintosh和PC计算机上只支持16位,而且如果是24位也将作为16位处理)中工作,那么键入以下命令以确保颜色分解已被关闭: IDL>Device, Get_Visual_Depth=thisDepth

IDL>IF thisDepth GT 8 THEN Device, Decomposed=0

如果在这种模式下对颜色表做些修改,记住这些修改不会在显示窗口中立即更新。必须在显示窗口中刷新图形以查看这些颜色改变是否起作用。详细细节参考83页的“IDL的颜色运用”章节。

创建IDL的启动文件

记住,每次启动IDL来使用本书的命令时,都必须执行以上命令。为此,可以将这些命令输入IDL 的启动文件中。当每次IDL启动时,启动文件中的命令都被执行,这就像在IDL命令提示符下键入这些命令。为了解如何在使用的计算机中创建IDL开始文件,可在IDL命令行键入以下命令,以获取在线帮助:

IDL>? Startup

本书的风格习惯

笔者尽量用统一的风格贯穿全书,这样不会被本书文字的功能和目的所迷惑。首先,在IDL命令行或IDL编辑器窗口所键入的命令总是以Courier字体形式来书写:

Surface, data

在IDL命令行键入的命令都显示在IDL提示符“IDL>”的后面:

IDL>Surface, data

其它的IDL命令都是在文本编辑窗口键入的。可以选择自己的文本编辑器或使用IDL提供的文本编辑器,这由读者决定。

11

大写

在本书中,用大写这种形式来书写IDL命令。这种形式完全是任意的。 IDL对字母的大小写不敏感,但与操作系统打交道的命令(例如:UNIX操作系统对IDL所打开的文件名的大小写敏感)和执行字符串比较命令时除外。大写可以有助于记住命令和关键字名,并且一目了然地知道命令行中哪些单词是函数名。

所有IDL命令和关键字的第一个字母大写。此外,任何有助于记忆的字母也用大写。例如: Surface, data, charsize=2.0, Color=180

XLoadCT

Widget_Control, tlb, Set_UValue=info, /No_Copy

变量名的第一个字母没有用大写字母,但是当变量名中的字母有可能构成单词时使用大写。例如: data=FIndGen(11) buttonValue=thisValue

ptrToData=Ptr_New()

IDL的保留字全部用大写字母,例如:

REPEAT test UNTIL

FOR j=0,10 DO BEGIN

ENDWHILE

在IDL命令行或文本编辑器上,当键入命令时,可以随意使用大写字母。

注释

在IDL命令中,分号右边的任何文本都被视为是注释,IDL解释器将忽略它。简言之,可在IDL的程序中写入注释。通常在分号的前后加上空格,并让注释行缩进三个空格。例如: ; This is the loop part of the program.

FOR j=0,10 DO BEGIN

data=j*2

count=count +j

ENDFOR

偶尔,会在命令行的末端看到一个注释,这是在定义IDL结构变量的字段时,特别这样做的。例如:

info={r:r,$ ; The red color vector

g:g,$ ; The green color vector

b:b,} ; The blue color vector

12

续行符 IDL中的续行符是美元的符号“$”。这表示IDL命令延续到下一命令行(见上例)。在本书中将看到很多续行符。建议在IDL命令行中不使用续行符,应该在IDL命令行行输入完整的IDL命令。IDL命令行将忽略续行符。例如,可以用如下方法键入上述命令:

IDL>info={r:r, g:g, b:b}

在出现输入错误或在以后需修改命令时,这将使得重新键入这些命令变得更加简单。 有时需要完全按照书中出现的IDL命令输入。笔者将告知什么情况下这样做。当在IDL命令行想键入For循环时就需要这样做。在命令行中一次键入多行命令是非常聪明的做法。必须让IDL解释器认为这些命令为一个命令。这就需要在IDL的命令行上正确使用行续符($)和多行命令符(&)。

本书中所用的IDL程序和数据文件

当使用这本书时,许多IDL程序和数据文件已经准备就绪。IDL程序文件经常有一个.pro扩展名,数据文件有一个.dat扩展名。还有一些.txt扩展名的文件。这些是文本文件。 安装程序和数据文件

建议创建一个名为coyote的子目录,并把所有的程序,文本,数据文件都放在其中。coyote子目录通常是IDL目录下的一个子目录(让IDL内部的系统变量!Dir指向这个目录),当然它并非一定要在这个目录下,可以在任何地方创建。IDL主目录是另外一个存放这些文件的好地方。当需要这些文件时,不直接在coyote子目录下修改,而是将这些文件拷贝到当前工作目录下是一个好注意。这样就保留了原始的没有修改的文件。

如果没有选择创建一个coyote子目录,那么就将本书提供的程序将默认这些文件已经放在当前目录中。这个目录是一个启动IDL时的目录,或者是在PC或Macintosh计算机上IDL的Preferences对话框中Startup所指定的目录。

获取IDL的主目录和当前目录

如果不知道IDL的主目录是什么。启动IDL,键入以下命令:

IDL>CD, Current=homeDirectory

IDL>Print, homeDirectory

当前目录不一定是主目录。在IDL运行期间,可以用同样的命令随时获得当前目录: IDL>CD, Current=currentDirectory

IDL>Print, currentDirectory

注意,如果按上述做法装载数据文件时遇到问题,请确保是在所希望的目录下。不用IDL主目录(例如:5.2 Windows版的IDL软件中,IDL5.2就是IDL的主目录)作为工作目录可能会是一个好注意,因为这样很容易删除重要文件。

13

下载本书所用的程序和数据文件

书中文件可以通过互联网以匿名FTP登录下载。如果在使用网络浏览器,进入Coyote's Guide to IDL Programming热连接,网址是:

http://www.61k.com

如果用匿名ftp,文件可以通过网络浏览器在如下网址找到:

ftp://ftp.frii.com/pub/dfanning/outging/coyote

用文本或ASCII模式下载所有的程序和文本文件(例如:那些带.pro或.txt扩展名的文件),用BINARY模式下载所有的数据文件(例如:那些带.dat扩展名的文件)。如果愿意,并且电脑能解压缩zip文件,下载coyotefiles.zip文件就可一次性地将所有的程序、文本文件和数据拷贝下来。

确保Coyote目录在IDL的搜索路径内

无论在什么地方创建coyote目录或储存本书的文件,需要确保这个目录在 IDL搜索路径中。在IDL中,路径用!path系统变量给出。以后将学到更多关于该系统变量的作用,但现在只要知道它是一系列的子目录,当IDL遇到不认识的命令时就这些子目录查找相应的命令。打印该系统变量可以看到当前的IDL搜索路径:

IDL>Print, !path

如果使用的是PC机,这些子目录用分号隔开;在Macintosh或VMS机器上,它们用逗号隔开;在UNIX机器上,它们用冒号隔开。

想在IDL搜索路径中添加coyote目录,当IDL的当前目录在coyote目录下时键入AddPath命令即可(如果没有创建coyote目录,可以将IDL的当前路径改变为存放本书文件的目录名,然后键入AddPath命令)。使用CD命令来转换到IDL的当前的目录。例如,如果coyote目录是IDL主目录下的一个子目录,并且这个主目录是当前目录,可以键入如下命令来在IDL的搜索路径中添加coyote目录:

IDL>CD, 'coyote'

IDL>AddPath

如果每次运行IDL时都想进入coyote目录(或本书文件所在的目录)并且运行AddPath程序,也许会想到将该命令添加到IDL启动文件中(详细细节参考第四页的“创建IDL的启动文件”)。或者,想将coyote目录永久性地添加到IDL的搜索路径中。(这取决于使用的操作系统和IDL的配置文件。关于设置!Path系统变量,可参考IDL的在线帮助)

拷贝数据文件

如果愿意,可从计算机上其它地方拷贝本书所用到的IDL数据文件,不必通过匿名的ftp来下载。为此,可使用CopyData命令,这个命令是刚下载的文件之一。进入coyote目录(或书中文件所在的目录),如果使用的是IDL5版,只需键入CopyData:

IDL>CopyData

如果运行的是IDL更早的版本,将通过Demo关键字为CopyData程序提供IDL的演示目录(演示目录名在IDL先前版本中各不相同,而且不一定被安装)。如在PC机上演示目录经常命名为“C:\RSI\IDLDEMO4”。所以应该键入如下命令:

14

IDL>CopyData,Demo="C:\RSI\IDLDEMO4"

数据文件将从不同的地方被选出并拷贝到当前目录上。本书附有这些数据文件的一个列表,说明了它们的类型和大小。见313页的“附录 B: 数据文件描述”。

获取更多的帮助

当在安装这些程序文件或在IDL编程的其它方面需要帮助时,查看Coyote's Guide to IDL Progamming网页。将找到关于本书和IDL常规编程的信息。如果情况更糟的话,也可以在那里看到一张表格,通过该表格可以直接和笔者联系。Fanning软件顾问和Coyote's Guide to IDLProgramming的网址为:

http://www.61k.com

使用IDL命令

本书是一本实践性很强的书。当阅读它时,笔者宁愿读者坐在电脑前,也不愿读者坐在火炉前。笔者希望读者键入命令并查看发生了什么。为此,本书前半部分的多数命令需要在IDL命令行上键入(如果想保存所键入的命令,可以创建一个日志文件来记下它们。参考第11页的“创建日志命令”)。

随着IDL5.0的问世,IDL慢慢地变得越来越像程序语言。例如,对象图形引擎并不真正地用来在IDL命令行上使用的,而是专门设计用在IDL编程中。但是从命令行键入IDL命令中能学到很多东西。特别是,能学会画出某些东西,测试一些东西,并可用数据文件做实验。称之为“循序渐进”。这是学习IDL的最好方法之一。

下面是刚开始所必需知道的。首先,将看到本书中的许多类似下面的命令:

Contour,peak,lon,lat,XStyle=1,YStyle=1, /Follow,$

Levels=vals,C_Label=[1,0,1,0,0,1,1,0]

如果知道所看到的东西是什么将非常有助于学习。

IDL命令解析 在上面的命令中,单词Contour是IDL命令或所希望运行程序的名字。它必须被完整地拼出。一些命令会很长,但不能缩写。命令行中peak,lon,以及lat是变量。它们可以用来将信息传入或传出命令或程序。XStyle,YStyle,Follow,Levels以及C_Lables为关键字。一般来将关键字对命令来说可选的。如同变量,它们用来将信息传入或传出IDL命令或IDL程序。

定位参数

在以上命令中的三个变量peak,lon,及lat称为定位参数。在这个特殊例子中,这些定位参数为输入变量(例如,它们把数据传入命令),但仅仅看到她们并不能辨认出其是不是输入变量。它们也可以简单地用作输出变量(或者,在某种情况下,它们既可以是输入变量也可以是输出变量)。其命令行语法完全一样。只有通过上下文,通过阅读关于这类命令或程序的公开文档才能辨别。

一个定位参数在命令名的右边有其确定的顺序。(注意,以下讨论的关键字参数不会影响定位 15

参数的顺序)。在这个例子中,peak变量必须在Contour命令右边,在lon变量的左边。lon变量必须在peak变量的右边,lat变量的左边。不能遗漏第二个参数,只给定第一和第三个定位参数。 例如,下面这两条命令的格式是不正确的并会导致错误。第一条命令的定位参数顺序被改变,

第二条命令遗漏了第二个定位参数。

Contour, lon, peak, lat, XStyle=1, YStyle=1, /Follow, $

Levels=vals, C_Labels=[1,0,1,0,0,1,1,0]

Contour, peak, , lat, XStyle=1, YStyle=1, /Follow, $

Levels=vals, C_Labels=[1,0,1,0,0,1,1,0]

一般情况下,命令的定位参数必须给定参数,但并不总是如此。例如,在上面正确的命令中,peak是Contour命令必需的参数,但是lon和lat是可选定位参数。

关键字参数

XStyle,YStyle,Follow,Level和C_Labels都是关键字参数。与定位参数不同,关键字参数能任何顺序出现在命令名右边。它们甚至能出现在定位参数中间而不影响定位参数之间的相对位置。换句话说,关键字参数不能像定位参数那样对待。以下的Contour命令是个有效构造。 Contour, peak, Level=vals, lon, XStyle=1, YStyle=1, $

/Follow, lat, C_Lavels=[1,0,1,0,0,1,1,0]

一般情况下,关键字参数是可选参数。像定位参数一样,它们也能成为命令的输入变量或输出变量。将通过本书或阅读命令的文档得知这一点。

注意在上列命令中关键字的使用方法。关键字能设置为一个特定值(例如,XStyle=1),一个变量(例如,Levels=vals),一个数组(例如,C_Labels=[1,0,1,0,0,1,1,0]),甚至可以用一个斜杠字符来设定(例如,/Follow)。

注意最后的一条语法。有些关键字有二进制特性。换句话说,它们要么on/off, yes/no, true/false, 1/0,等等。能经常发现这些关键字通过/Keyword这种语法来设置或打开。语法/Keyword等同于语法Keyword=1。

事实上,以上Contour命令能被写成这样:

Contour,peak,Levels=vals,lon,/XStyle,/YStyle,$

/Follow,lat,C_Lavels=[1,0,1,0,0,1,1,0]

这个命令和上面的命令是一回事。命令不能写成这样的原因是,它可能错误地暗示了X轴和Y轴关键字有二进制特性,但它们不是,它们能被设置为除0和1以外的其它值。

IDL过程和函数

这个特殊的命令Contour是一个IDL过程。IDL命令要么是过程,像这个命令一样,要么是函数。如下的IDL命令BytScl就是一个函数:

scaled=BytScl(image, Top=199, Min=0, Max=maxValue)

注意Contour过程和BytScl函数的不同。首先,在函数命令中,定位参数和关键字放在一对圆括号中的。在过程命令中,参数和关键字仅排列在一个命令行上。但是,最重要的区别是函数命令显示地返回一个值,等号左边的一个变量用于返回该值。这是IDL中函数命令和过程命令根本的区别。

函数命令总是显示地返回一个值,这个数值必须赋予给一个变量。函数返回值可能是任一种IDL变量,包括数值,数组和结构。在这个例子中,返回值scaled是一个与image定位参数具有 16

相同维数的字节型数组。

有时将看到一个函数和过程写在一起,例如,考虑一下这两个命令:

scaled=BytScl(image,Top=199,Min=0,Max=maxValue)

TV,scaled

第一个命令是一个函数命令,另一个是过程命令,此过程使用函数的返回值作为其定位参数,两个命令写成如下这样在IDL中很常见:

TV,BytScl(image,Top=199,Min=0,Max=maxValue)

在这种情况下,BytScl命令首先被执行并得到一个返回值,此返回值作为TV命令的定位参数。

花一些时间熟悉各种IDL命令,就能立即识别哪个是过程,哪个是函数,但尽量记住这一点:当正在从一个命令中寻找某个值时,要想到这个命令可能是一个函数。在本书后面中将学会怎样写IDL过程和函数。

用IDL命令帮助

IDL有全面的在线帮助系统,能为读者提供有关IDL命令和参数的非常有帮助的信息。通过在IDL命令行中输入一个问号,或在IDL开发环境下拉菜单中选择Help菜单项目获得在线帮助。IDL文档集中的大部份信息都可通过在线帮助获得。为了获得IDL在线系统帮助,仅仅需要在IDL的命令行中输入一个问号,如下:

IDL>?

创建命令日志

也许希望将在命令行里面输入的命令保存为日志或记录。如果是这样,可创建一个日志文件。日志文件是一个IDL批处理文件(参考205页的“创建IDL批处理文件”)。在IDL中用Journal命令打开一个日志文件,并指定想打开的文件名。该文件将是一个用于写信息的新文件。从IDL命令行不能添加日志文件。例如,为了写一个命名为book_commands.pro的日志文件, 键入: IDL>Journal, 'book_commands'

随后所有在IDL命令行上键入的命令都将写入这个日志文件。

IDL>a=[3,5,7,3,6,9]

IDL>Help, a

IDL>Plot, a

当想关闭日志文件时,再次在IDL命令行键入Journal命令,如下:

IDL>Journal

日志文件是能编辑的一个简单的ASCII文本文件。如果愿意,可用任何一个文本编辑,包括由IDL的PC版本附带的编辑器。当想再次执行日志文件中的命令时,在IDL命令行键入@作为开头字母。例如,要执行在上面book_commands.pro文件中的命令,如下:

IDL>@book_commands

确定创建的每个日志文件有唯一的名称。不能添加日志到这些日志文件,所以,如果第二次建立的日志文件名和第一次相同,许多操作系统将会毫无警告地覆盖第一个日志文件。

如果每次建立日志文件时都想要一个唯一文件名,可用下列的IDL程序完成:

PRO Journal_Unique

Journal, String('journal_',Bin_Data(SysTime()),'.pro',$

17

Format='(A,I4,5I2.2,A)') END

然后,用Journal_Unique代替Journal,就可以建立每次都具有唯一文件名的日志文件。

创建变量

在这本书中将创建许多变量。如果以前对变量有所了解将会大有益处。变量名必须以字母开头。它们可以包括其它字母,数字,下划线,美元符号。一个变量名最长可达255个字符。本书的习惯是让变量名的首写字母小写。下面是一些有效的变量名: ptrToData image2 this_image a$handle

变量名有两个重要属性:数据类型和组织结构。数据类型指出属于数据类型中的哪一种。在IDL中有14种基本数据类型。在图表1中将看到每一种数据类型,每个类型创建的变量的字节大小,变量创建方式,数据类型之间强制转换的IDL函数名称。除了数据类型外,一个变量有一个组织结构。有效的组织结构有标量(例如单个数值)、矢量(真正的一维数组)、数组(最高可达8维)和IDL结构(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段)。

数据类型 字节型 16位有符号整型 32位有符号长整型 64位有符号整型 16位无符号整型 32位无符号长整型 64位无符号整型

浮点型 双精度浮点型

复数 双精度复数 字符串 指针 对象

字节数 1 2 4 8 2 4 8 4 8 8 16 0-32767

4 4

创建变量 Var=0B Var=0 Var=0L Var=0LL Var=0U Var=0UL Var=0ULL Var=0.0 Var=0.0D

Var=Complex(0.0,0.0)Var=Dcomplex(0.0D,0.

0D) Var=’’或Var=”” Var=Ptr_New() Var=Obj_New()

数据类型函数 thisVar=Byte(variable) thisVar=Fix(variable) thisVar=Long(variable) thisVar=Long64(variable) thisVar=UInt(variable) thisVar=ULong(variable) thisVar=Ulong64(variable) thisVar=Float(variable) thisVar=Double(variable) thisVar=Complex(variable) thisVar=DComplex(variable) thisVar=String(variable)

None None

表1:IDL中的14种基本数据类型。表中显示了每种数据类型的字节数,创建变量的方法,

用语数据类型之间强制转换的IDL函数

正如所看到的,IDL是一个善于处理矢量或数组数据的软件,所以有大量的IDL命令用于创建不同数据类型的矢量和数组。特别是,有许多创建各类数据类型的数组的函数,该数组的每个元素的初始值为零,而且还有许多创建各类数据类型的数组的函数,该数组的每个元素的初始值为其在数组中的索引位置。在表2中将看到这些函数列表。例如,创建100*100初始值为零的字节型数组,输入:

IDL>array=BytArr(100,100)

18

创建一个有100个元素的浮点型矢量,初始数值为从0到99,输入:

IDL>vector=FIndGen(100)

将在本书中看到使用这些IDL函数的各种方式。

动态改变变量的属性

IDL最强大的功能之一是大多数命令都能在任何数据类型或组织结构上起作用。这是因为IDL在运行时能改变变量的数据类型和组织结构(像世界上其它强大的事物一样,这种动态改变变量的属性的能力也有潜在的巨大危险!必须小心,确信知道正在使用哪种数据)。例如,在IDL中,本质上讲变量是毫无意义的(像在Fortran或者C程序中),因为这种变量的数据类型很容易改变。例如:

num=3 ; Initialize NUM as a scalar integer.

num=num*5.2 ; Variable NUM changes to a float!

变量num被初始化为一个整数,由于数学运算的结果和重新赋值,它被动态地改变成浮点数值。这是因为IDL在数学计算当中为了保证最高的精度,将低精度的数据类型提升为高精度的数据类型。当num被再赋值(在等号的左边),它被提升为一个浮点数去保持等号右边计算的精度。思考下面这个例子:

result=4*x

在这种情形下,是不可能知道变量会产生哪种数据类型和组织结构,因为对x变量一无所知。事实上,结果主要取决于变量x的数据类型和数据结构。如果x是10个元素的浮点矢量,结果将会是10个元素的浮点矢量。如果它是100*200的长整数数组,结果也将是100*200的长整数数组。注意如果x有一个字节的数据类型,那结果将是一个整数数据类型(在这种情形下,组织结构并没有多大影响)。这是由于被整数乘的结果。

记住等号右边的表达式总是在将数据类型和组织结构赋予等号左边的变量前计算的。IDL将变量提升到能保持表达式的计算精度的数据类型。

注意整型变量

关于整型变量想简单地提一提,以免使用它们时遇到麻烦。有两种常见的错误。第一种涉及到整数数学。思考一下这个示例:

result=12/5

也许期望的是一个值为2.4浮点变量,但是它不是的,而是一个值为2的整数。知道为什么吗?是的,方程式右边的两个数字为整数。这是一个整数除法的例子。如此之下,找出错误并不难,但有时问题会更微小。

例如,假如想知道IDL图形窗口的比率。窗口的大小(像素点或整数值)被储存在两个系统变量中。也许会写出如下的IDL代码:

aspect=!D.X_Size / !D.Y_Size

它可以花掉很长的时间找出为什么比率为零。正确的方法是写出代码以强制将一个整数值变成为一个浮点,如下:

aspect=Float(!D.X_Size) / !D.Y_Size

现在的比例变量就是一个所期望的浮点数了。 数据类型

字节型 初始化函数 BytArr 产生索引值的函数 BIndGen

19

16位有符号整型 32位有符号长整型 64位有符号整型 16位无符号整型 32位无符号长整型 64位无符号整型

浮点型 双精度浮点型

复数 双精度复数 字符串 指针 对象

IntArr LonArr Lon64Arr UIntArr ULonArr ULon64Arr FltArr DblArr ComplexArr DComplexArr StrArr PtrArr ObjArr

IndGen LIndGen L64IndGen UIndGen ULIndGen UL64IndGen FIndGen DIndGen CIndGen DCIndGen SIndGen None None

表2: IDL函数可以创建矢量和多维数组,并将其每个元素初始为0或为它们本身的索引号码。

使用整型变量另外一个常遇到的问题是没有意识到IDL的整型在其它编程语言中被称为短整型。或者说,IDL的一个整型只有两个字节长。整型在其它程序语言中有四个字节(四个字节的整数在IDL的整数中是一个长整数)。

两个字节的整数只能大到32767。大于这个值通常由于“溢出”而被IDL当作为负数。用短整数会在两种情况下遇到麻烦。首先,在循环中没有考虑到短整数的因素,例如,假如想读一个数据文件,但不知道有多少行。可以写入如下代码: COUNT=0

WHILE NOT EOF(lun) DO BEGIN READF,lun,temp data(count)=temp COUNT=count+1 ENDWHILE

如果数据文件多于32,768行,这个代码就失败了。原因是count变量初始为一个整数,这个代码更好的写法如下: count=0L

WHILE NOT EOF(lun) DO BEGIN READF,lun,temp data(count)=temp count=count +1L ENDWHILE

现在随便读取多少行都可以。

另外一个常犯这种错误的地方是For循环中。按如下写法来写出For循环命令是一个好注意: FOR j=OL,num-1 DO...

第二种在使用短整型可能会遇到麻烦的方式是,当在读取用其它编程语言生成的数据时(或者反过来)。如果读取用C或Fortran程序生成的整型数据,应该确保在IDL中用长整型来读这些数据。同样,应该用长整型数据来写那些将被C或Fortran程序视为整型来读入的文件。

20

使用矢量和数组

IDL是一种在善于处理矢量和数组中的程序语言(IDL的第一个版本的原形是APL,是一种在数组运算上非常优秀的程序语言)。要成为一个高效的IDL程序员,必须知道怎样对数组进行数学运算。在本书中,将看到许多这方面的例子,但在开始前,需要注意两个重点。

创建矢量

在IDL命令行,可以用一对方括号创建一个矢量(矢量只是一维的数组)或一个数组,如下: IDL>vector=[1,2,3]

这是一个整型矢量,因为数据值为整型值。

可以用Help命令,获取关于数据类型和变量组织结构的信息,如下:

IDL>Help,vector

VECTOR INT =Array[3]

如果想增加从第四个元素到矢量中,在IDL中可以很轻松地完成。只需键入: IDL>vector=[vector,4]

IDL>Print,vector

1 2 3 4

数组下标的应用

假设打算在数组的第二和第三个元素之间添加另外一个元素,数组下标可以帮助完成。数组下标的上界和下界被冒号隔开。例如,指定上述矢量的前三个元素,如下所示: IDL>Print, vector(0:2)

1 2 3

注意,矢量下标的起始值是0,而不是1,并且矢量下标使用圆括弧以示区别。这使得有时很难将一个函数调用和一个数组下标引用区别开来。为了解决这个问题,IDL允许使用方括弧来引用数组下标。也就是说,当运行IDL5时,可以键入:

IDL>Print, vector[0:2]

本书已被修改成使用方括弧引用下标,以避免同函数调用相混淆。倘若正在使用IDL的IDL4.x版本,要运行此命令就得用圆括弧代替方括弧。

要用数组下标将另一个元素插入第二和第三个元素之间,可键入:

IDL>vector=[vector[0:1],5,vector[2:3]]

IDL>Print, vector

1 2 5 3 4

矢量也可用上表中谈到的数组创建函数建立。例如,建立一个值在0到50之间的6个元素浮点矢量,可键入:

IDL>vector=FIndGen(6)*10

IDL>Print,vector

0.000000 10.0000 20.0000 30.0000 40.0000 50.0000

21

数组的建立

数组也可以在IDL命令行中建立。例如,可以建立一个两行三列的数组,如下所示: IDL>array=[[1,2,3],[4,5,6]]

IDL>Print, array

输出IDL输出窗口中将会如下所示:

1 2 3

4 5 6

注意,这等同于先建立一个矢量,然后Reform命令将此变形为一个三行二列的数组,如下所示:

IDL>vector=IndGen(6)+1

IDL>array=Reform(vector,3,2)

IDL>Print, array

这表明矢量和排列是以行的顺序存储在IDL中的。这一点在编写IDL程序的过程中非常重要,因为将经常用到IDL这种数据存储方式的优势。

数组中元素的存取

假设想读出刚建立的数组中位于第一列第二行的元素(元素的值为4),可以键入: IDL>Print,array[0,1]

注意,下标的顺序先是列标,后是行标。这正好与已习惯的线性代数中的矩阵或行列式相反(同时,行标与列标比想象的小1,因为排列下标值的起始值是0而不是1)。

列-行下标源于极大的图像数据,IDL最初就是为处理这种数据而开发的。数据中的一行对应图像的一个独立扫描行。这种数据存储形式使数据操作迅速而精确。决定一套软件是使用列-行下标,还是使用行-列下标,完全可以自由决定。没有任何特殊原因选此弃彼。

可以使用一维下标来存取该数组中的同一个元素。要知道数组元素是以行顺序存储的,所以获得数组中的第四个元素。可以键入以下语句来存取:

IDL>Print, array[3]

用一维下标存取多维数组,这在许多IDL程序中是一个强大的工具。

也可以用一维向量来做数组的下标。例如,倘若要存取数组中的第一,二,四和第六个元素,可键入:

IDL>indices=[0,1,3,5]

IDL>Print,array[indices]

矢量和子数组的提取

IDL可很容易地从数组内提取出矢量和子数组。例如:看看这个拥有随机数据的数组: IDL>data = RandomU(seed, 10, 20)

想提取出第6-10列和第12-15行的数据,可键入:

IDL>subarray = data[5:9, 11:14]

如果要将第8列的数据画出来,可以使用下标*代表所有的行,如下所示:

IDL>Plot, data[7,*]

22

要建立一个第14行的矢量,键入:

IDL>vector = data[*,13]

要建立一个数据为数组中最后5行的数组,键入:

IDL>subarray = data[*,15:19]

IDL>Help, subarray

现在可以看到子数组是一个10列*5行的数组。

同样可以用*代表剩下的所有数据。例如,用数组的最后5列建立一个子数组,也可键入: IDL>subarray = data[5:*,*]

IDL>Help, subarray

通过对本书中范例的练习,会对数组以及数组的处理方法了解得更多。

使用IDL图形窗口

通过对本书中范例的练习,会对IDL图形窗口的了解得更多,但在开始之前,最好先了解下面一些东西。

图形窗口的建立

首先,一个图形窗口可直接用Window命令建立,或是在没有窗口打开的情况下,间接通过运行图形显示命令来打开。例如,可以建立并启动一个窗口,只须键入:

IDL>Window

注意,此窗口的标题栏中有一个0,这是此窗口的索引号。当图形窗口建立后,每个图形窗口都有唯一的一个图形窗口索引号。Window命令如果没有任何定位参数总是创建出索引号为0的图形窗口。称之为“窗口0”。在IDL的一次运行中,最少可同时打开128个图形窗口。可以为0到31号图形窗口指定一个索引号。对于32到127号图形窗口,可以用Window命令带上Free关键字(以下将谈到)来创建,IDL将为它们赋上索引号。例如:想创建一个索引号为10的图形窗口,键入:

IDL>Window, 10

倘若某个索引号图形窗口的窗口已经存在,再用Window命令创建相同索引号图形窗口,Window命令将首先删除旧窗口,然后建立一个带有此索引号的新窗口。

如果愿意(当在IDL程序中建立窗口时,这通常是一个不错的注意),可以用一个未用的索引号或者已经打开但是空白窗口的索引号来创建新的图形窗口。关键字Free即为此目的而设,如下所示:

IDL>Window, /Free

用关键字Free建立的图形窗口,将会具有一个大于31的索引号。关键字Free是建立索引号大于31的常规图形窗口的唯一途径。

确定当前图形窗口

现在在显示器上至少已经打开了三个图形窗口,但只有一个是当前图形窗口。当前图形窗口用于接受图形命令的输出结果。当前图形窗口的索引号总是存储在!D.Window系统变量中。如果没有创建和打开图形窗口,系统变量!D.Window的值为-1。

23

可以创建一个图形窗口,并存储其图形窗口索引号,以便以后删除该窗口或使其成为活动窗口。可键入:

IDL>Window, /Free

IDL> thisWindowIndex = !D.Window

使图形窗口成为当前窗口

为使一个窗口成为当前图形窗口(可在其内显示图形),可使用Wset命令和图形窗口索引号来设定。例如,希望当前图形窗口为10号窗口时,键入:

IDL>Wset, 10

随后所有的图形命令的结果都将显示到10号窗口内。

注意,当一个图形窗口创建完成后,该窗口即成为当前窗口(但是,用Widget_Draw产生的窗口不是这样)。为了在某个窗口内绘制图形,该窗口必须是当前图形窗口。

删除图形窗口

可用Wdelete命令和图形窗口的索引号删除图形窗口。被删除的图形窗口不必是当前图形窗口。例如,删除窗口10,键入:

IDL>Wdelete, 10

删除当前显示器上的所有图形窗口有一个技巧:

IDL>WHILE !D.Window NE –1 DO Wdelete, !D.Window

图形窗口的位置和尺寸

在创建图形窗口时,图形窗口的位置和尺寸是根据内部运算规则确定的。在Window命令中,用关键字可以设置图形窗口的位置和尺寸。例如,用关键字XSize 和YSize创建一个宽200像素,高300像素的窗口,键入:

IDL>Window, 1, XSize=200, YSize=300

可用相对于显示器左上角的像素坐标或设备坐标来定位窗口。例如,用关键字XPos 和YPos将窗口的左上角定位于显示器(75,150)处,键入:

IDL>Window, 2, XPos=75, YPos=150

将图形窗口设置到显示器最前面

创建一个图形窗口时,该窗口拥有输入焦点,同时也成为当前图形窗口。也就是说,对于窗口管理器来讲,该图形窗口现在为激活窗口(仅仅因为一个图形窗口拥有窗口输入焦点,并不意味它是当前图形窗口)。为了输入一个命令,不得不将窗口焦点移回到命令输入窗口。在某些平台上,特别是在PC机上,这会导致图形窗口隐藏到其它窗口后面。

有时,在显示器上一个图形窗口隐藏其它窗口的后面,想将该窗口拖到前面以便能看见。在不改变窗口输入焦点的情况下,要将一个图形窗口显示在前面,可用Wshow命令和图形窗口索引 24

号来完成。

IDL>Wshow, 1

注意,光标和窗口焦点仍在键入IDL命令的命令输入窗口或其它窗口内。

用Wshow命令将窗口显示在前面但并不将窗口改变为当前窗口。如果既想将该窗口拖到前面,又想将其变为当前窗口,那么可同时键入Wshow 和Wset命令:

IDL>Wshow, 2

IDL>Wset, 2

注意,如果输入不带参数的Wshow命令,在显示器上将当前窗口拖到前面。当不清楚哪个是当前图形窗口和只想将当前窗口拖到前面而不从IDL命令窗口移动开焦点时,这个命令是非常有用的。

IDL>Wshow

注意,在PC机和Macintosh机器上,可以用ALT-TAB键或者OPTION-TAB键来循环选择已经在显示器上打开的窗口,让其可见并拥有窗口焦点。

在图形窗口上设置标题

有时希望在图形窗口上设置标题,而不仅仅是图形窗口索引号。可以使用Title关键字将标题设置到窗口上,键入:

IDL>Window, Title=’Example IDL Graphics Commands’

清除图形窗口内容

可以使用Erase命令清除当前图形窗口内容:

IDL>Erase

如果想用一种特定的颜色索引号,去清除当前图形显示(如果在24位颜色模式下可以用一个24位颜色值),可以用color关键字。例如,可以用以下命令实现用炭灰色清除当前图形显示: IDL>TVLCT, 70, 70, 100

IDL>Erase, Color=100

想清除非当前图形窗口(系统变量!D.Window指向的窗口)的内容,必须使该窗口成为当前图形窗口,接着使用Erase命令。

25

三 : SOLIDWORKS2011入门教程

SolidWorks入门

目录

法律通告...........................................................................................................................vi简介.................................................................................................................................viiiSolidWorks软件....................................................................................................................................viii适用读者...........................................................................................................................................viii系统要求...........................................................................................................................................viii文档的组织结构................................................................................................................................viii本文档使用的约定..............................................................................................................................ix

1SolidWorks基础知识....................................................................................................10

概念........................................................................................................................................................10

3D设计.............................................................................................................................................10

基于零部件........................................................................................................................................11

术语........................................................................................................................................................13

用户界面.................................................................................................................................................14

Windows功能...................................................................................................................................14

SolidWorks文档窗口........................................................................................................................14

功能选择和反馈................................................................................................................................16

设计过程.................................................................................................................................................20

设计意图.................................................................................................................................................20

设计方法.................................................................................................................................................20

草图........................................................................................................................................................21

原点..................................................................................................................................................21

基准面...............................................................................................................................................22

尺寸..................................................................................................................................................22

几何关系...........................................................................................................................................25

特征........................................................................................................................................................28

装配体....................................................................................................................................................29

工程图....................................................................................................................................................30

模型编辑.................................................................................................................................................30

2零件..............................................................................................................................33

概述........................................................................................................................................................34

梳妆台面.................................................................................................................................................34

设计方法...........................................................................................................................................34

通过拉伸生成基体特征......................................................................................................................35

将拉伸添加至基体.............................................................................................................................36

ii

四 : nlite入门教程

nlite入门教程

nLite简介

nLite是一款Windows系统瘦身工具,nLite 的出现让很多2000年左右的老机器焕发青春,用nLite制作操作系统也成为当前的热门话题。利用nLite定制过的系统,可以在配置较低的老机器上顺利安装和运行,即使在高档机器上,系统也会运行的更快速和轻松。另外,还可以大大节约安装系统的时间,可以说nLite的出现一定程度上延缓了XP 的退役时间,也为很多人升级电脑提供了一个缓兵之计吧!

nLite现在最新版本是1.4 final, nLite 使用很简单,只要选择好要移除的组件和服务,剩下的事情就可以交nLite去做了。制作的关键是对每个组件和服务能有比较清楚的认识!特别是服务,有些服务移除之后可能会造成一些不可预知的问题,比如某些软件不能安装或者运行。

nLite适用于所有低于Vista 版本的NT 内核 的Windows操作系统的安装程序,另外,它只用于安装前环境,和可布置安装定制的XPlite并不相同。由于nLite是用Microsoft Visual C# v7.0 / Basic .NET开发的,因此用户的计算机中需要安装有Framework 2.0 或更高版本才能正常运行nLite。

准备工作

安装nLite。

官方提供的nLite安装有两种方式:常规安装与自解压安装。从此可见,nLite其实是个绿色软件,所以推荐使用自解压安装,直接解压就可以使用了。第一次运行nLite自动检测你的系统有没有装上Framework,如果没有安装的话,请到微软网站或其它软件下载站先下载安装。当然还必须准备一份系统安装文件,可以从安装盘解压得到。因为nLite处理过程中需要一定的临时空间,所以先确认你的临时文件夹空间足够大,一般不小于2G吧。

准备好之后,就可以运行nLite了,目前的nLite对中文系统支持良好,而且软件也有中文界面可供选择。Let’s go!

下面我们以nLite 定制Windows XP 505M 原版为例,将各种操作过程一一展现出来,做一个全面的解说。

首先,将XP安装光盘上的所有文件及文件夹复制或解压到一个文件夹中(注意路径不要包含中文)。

比如我把它放在E:\XP目录下。

1.打开nLite,默认是英文,这样可以切换成中文界面

进入中文界面后点击“前进”按钮进入下面的页面。用“浏览”按钮或直接输入系统安装文件的存放路径,定位安装文件位置。

下一步是选择预设页面,一般nLite会将以前使用的预设保存起来备用,如果是第一次使用nLite,可用预设是空的,这时直接点击“前进”按钮进入下一步

按“前进” 。进入选择任务页面。

进入“任务选择”页面以后,可以点选相应的任务,可以都选上,也可以选择其中的个别部分,nLite将按顺序执行,nLite 会自动跳过未被选中的任务。 下面对各个任务的功能简单说一下:

1. Service Pack 任务是专门用来将操作系统的Service Pack 补丁包整合到操作系统安装文件的,以XP为例,如果你使用的是已经整合了sp2的XP,那这项可以不选。因为目前没有比SP2更新的Service Pack 补丁包。注意,这里只能整合比你要定制的系统中所含的Service Pack补丁包更新的补丁包,比如你要定制的系统以整合SP1,那么你只能整合比SP1新的补丁包,比如SP2。

2. 修补程序和升级整合包,这里才是整合包的用武之地,很多人不知道整合包是干什么的,整合包就是在这里用。通俗的讲,整合包就是将一个安装软件分解成单个文件后按照操作系统的安装模式重新打包,将其嵌入系统安装文件并随系统一起安装到操作系统的压缩包。整合包有两种,一种是补丁包,比如微软发布的以KB开头的补丁,提取其中的文件并打包后用nLite整合,可以免去安装系统后去微软官方升级的麻烦。另一种是第三方软件整合包,比如迅雷,千千静听。我们想让他们随系统一起安装,就可以用nLite整合相应的整合包就可以

五 : nlite入门教程

nlite入门教程

nLite简介

nLite是一款Windows系统瘦身工具,nLite 的出现让很多2000年左右的老机器焕发青春,用nLite制作操作系统也成为当前的热门话题。[www.61k.com)利用nLite定制过的系统,可以在配置较低的老机器上顺利安装和运行,即使在高档机器上,系统也会运行的更快速和轻松。另外,还可以大大节约安装系统的时间,可以说nLite的出现一定程度上延缓了XP 的退役时间,也为很多人升级电脑提供了一个缓兵之计吧!

nLite现在最新版本是1.4 final, nLite 使用很简单,只要选择好要移除的组件和服务,剩下的事情就可以交nLite去做了。制作的关键是对每个组件和服务能有比较清楚的认识!特别是服务,有些服务移除之后可能会造成一些不可预知的问题,比如某些软件不能安装或者运行。

nLite适用于所有低于Vista 版本的NT 内核 的Windows操作系统的安装程序,另外,它只用于安装前环境,和可布置安装定制的XPlite并不相同。由于nLite是用Microsoft Visual C# v7.0 / Basic .NET开发的,因此用户的计算机中需要安装有Framework 2.0 或更高版本才能正常运行nLite。

准备工作

安装nLite。

官方提供的nLite安装有两种方式:常规安装与自解压安装。从此可见,nLite其实是个绿色软件,所以推荐使用自解压安装,直接解压就可以使用了。第一次运行nLite自动检测你的系统有没有装上Framework,如果没有安装的话,请到微软网站或其它软件下载站先下载安装。当然还必须准备一份系统安装文件,可以从安装盘解压得到。因为nLite处理过程中需要一定的临时空间,所以先确认你的临时文件夹空间足够大,一般不小于2G吧。

准备好之后,就可以运行nLite了,目前的nLite对中文系统支持良好,而且软件也有中文界面可供选择。Let’s go!

下面我们以nLite 定制Windows XP 505M 原版为例,将各种操作过程一一展现出来,做一个全面的解说。

首先,将XP安装光盘上的所有文件及文件夹复制或解压到一个文件夹中(注意路径不要包含中文)。

比如我把它放在E:\XP目录下。

1.打开nLite,默认是英文,这样可以切换成中文界面

nlite nlite入门教程

nlite nlite入门教程

进入中文界面后点击“前进”按钮进入下面的页面。[www.61k.com]用“浏览”按钮或直接输入系统安装文件的存放路径,定位安装文件位置。

nlite nlite入门教程

nlite nlite入门教程

下一步是选择预设页面,一般nLite会将以前使用的预设保存起来备用,如果是第一次使用nLite,可用预设是空的,这时直接点击“前进”按钮进入下一步

nlite nlite入门教程

nlite nlite入门教程

按“前进”。[www.61k.com]进入选择任务页面。

nlite nlite入门教程

nlite nlite入门教程

进入“任务选择”页面以后,可以点选相应的任务,可以都选上,也可以选择其中的个别部分,nLite将按顺序执行,nLite会自动跳过未被选中的任务。(www.61k.com] 下面对各个任务的功能简单说一下:

1. Service Pack 任务是专门用来将操作系统的Service Pack 补丁包整合到操作系统安装文件的,以XP为例,如果你使用的是已经整合了sp2的XP,那这项可以不选。因为目前没有比SP2更新的Service Pack 补丁包。注意,这里只能整合比你要定制的系统中所含的Service Pack补丁包更新的补丁包,比如你要定制的系统以整合SP1,那么你只能整合比SP1新的补丁包,比如SP2。

2. 修补程序和升级整合包,这里才是整合包的用武之地,很多人不知道整合包是干什么的,整合包就是在这里用。通俗的讲,整合包就是将一个安装软件分解成单个文件后按照操作系统的安装模式重新打包,将其嵌入系统安装文件并随系统一起安装到操作系统的压缩包。整合包有两种,一种是补丁包,比如微软发布的以KB开头的补丁,提取其中的文件并打包后用nLite整合,可以免去安装系统后去微软官方升级的麻烦。另一种是第三方软件整合包,比如迅雷,千千静听。我们想让他们随系统一起安装,就可以用nLite整合相应的整合包就可以

nlite nlite入门教程

达到目的。(www.61k.com)目前国内做整合包的领军人物是啄木鸟老兄,其作品大多发布在雨林木风论坛,需要可以在这里下载。另外深度论坛也有部分整合包提供下载。

3. 驱动程序整合,即把驱动程序整合到安装文件之中,免却了装好系统还要一步一步地安装驱动的繁琐过程。这里的驱动程序只能是INF格式的安装文件,不能是EXE形式的安装文件。至于如何获得驱动程序,后面详细讲解。

4. 组件移除,顾名思义,事先移除微软系统中的组件,这是精简的重头戏。这里需要介绍一下微软Vista系统以前的NT内核的操作系统的安装原理,微软是将每种功能细分为组件,然后在系统安装过程中,安装程序调用相应组件的安装文件,将其安装在操作系统中。这一部分是很复杂的,后面我们会做详细的讲解。

5. 无人值守安装,所谓无人值守,通俗讲就是实现系统自动安装。但是nLite的无人值守安装设置选项远比微软的安装管理器强多了。同样在后面我们会详细讲解。

6. 选项页面提供一些特殊的系统设置,后面详细讲解

7. 优化调整,这里有很多系统特性的设置,包括系统服务的设置。

8. 可引导ISO镜像,精简后如果想要刻录成可启动光盘,用于刻录,在这里还能加入其他文件到你精简的系统光盘上,要不然刻录一个用一张700M的CD刻录一个200余M的系统太浪费了,不符合科学发展观。

好了,下面我们开始分开讲解每一部分的功能及其注意事项,下面的内容比较重要,初学者请仔细看,否则精简的系统就会麻烦多多。

选择上图中的8大项菜单(选择后按扭颜色是绿色的)

点击“前进”进入Service Pack补丁包整合页面”。(若你使用的母盘是WinXPSP2,可跳过此项!)

nlite nlite入门教程

nlite nlite入门教程

点击“选择”按钮定位需要整合的Service Pack补丁包,即可开始整合:

nlite nlite入门教程

nlite nlite入门教程

nLite整合效果与直接用Service Pack补丁包的整合参数整合的效果是一样的,其实nLite就是用了整合参数。[www.61k.com]

文件提取步骤:

整合过程:

nlite nlite入门教程

nlite nlite入门教程

整合完成:

nlite nlite入门教程

nlite nlite入门教程

nlite nlite入门教程

nlite nlite入门教程

整合结束后可以点击“前进”进入下一个页面:补丁包和程序整合包整合。[www.61k.com]

nlite nlite入门教程

nlite nlite入门教程

在此页面左下角有个“高级”按钮,可以设置一些整合的选项,根据其说明选择取舍就可以了,在这里就不细述了。[www.61k.com]

在这里有需要注意的就是整合包的顺序原则:

1. 补丁包:补丁包一定放在最前面,举例说明:需要整合补丁包,IE7或

WMP10 .当前的补丁整合包是在SP2基础上制作的,XP的整合SP2的系统中默认的为WMP9,补丁包在最前的理由如下:补丁包是根据原版系统制作,这其中包含WMP9以及IE6的补丁,如果将WMP10和IE7的整合包放在补丁包前面,那么这些整合包整合完成后,已经将系统中原有的的文件替换为WMP10和IE7的,这时候再整合补丁包的话,补丁包中的WMP9以及IE6的文件又被替换了回来(当然版本升级了),这样出现的问题就是系统中的文件IE6与IE7,WMP9和WMP10的文件混杂,不出错的话简直就是天方夜谭了。好了,其它的也与此相似。

2. 应用程序整合包,一般这个没有什么原则,因为对于系统来说文件都

是新增的,不会出现混杂的情况。

nlite nlite入门教程

3. 删除文件性质的整合包,比如我做的输入法精简整合包,切记一定放

在最后,以防其删除的文件又被你通过整合包给整合进来了。(www.61k.com) 4. 大体顺序也是按照1.2.3这样的次序来整合,应该不会出现什么问题。 上面图中的顺序显然存在问题,所以调整如下:

nlite nlite入门教程

nlite nlite入门教程

当然,这个不是必须的了,因为上面这几个包互相不交叉,所以不存在兼容性问题,但是凡事有个开始有个好习惯,以后出错的几率自然就少了。(www.61k.com)OK,继续! 点击“前进”进入下一个页面:驱动程序整合

nlite nlite入门教程

整合多个驱动:

nlite nlite入门教程

nlite nlite入门教程

nLite会检测你指定的文件夹,并将所有能识别的驱动列出来供用户选择:

nlite nlite入门教程

选择后点击“确定”,跳出一个对话框,我们选“文本模式驱动程序”,确定.

nlite nlite入门教程

nlite nlite入门教程

选择后点击“确定”,nLite会列出所有需要整合的驱动,如果选错了或不想整合有些已经列出的驱动,可以点击“移除”按钮取消其整合。[www.61k.com]

nlite nlite入门教程

nlite nlite入门教程

本文标题:PS入门教程-LinQ入门教程
本文地址: http://www.61k.com/1132876.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1