第1章 IDL简介 1
1.1 关于本书 1
1.1.1 支持材料 2
1.1.2 印刷上的约定 2
1.1.3 特殊字符 3
1.2 关于IDL 3
1.2.1 IDL巡视 4
1.2.2 获取IDL 4
1.3 运行IDL 4
1.4 在线帮助 5
1.5 各章节主要内容 7
第2章 IDL语法基础 9
2.1 交互式和编译模式 9
2.1.1 交互式模式 9
2.1.2 编译模式 10
2.2 变量 10
2.2.1 数据类型 11
2.2.2 跟踪变量类型 12
2.2.3 数据类型的转换 12
2.2.4 浮点向整型的转换 13
2.2.5 字符串和数字类型之间的转换 14
2.2.6 变量名称 15
2.3 数组简介 16
2.3.1 创建数组 17
2.3.2 数组的存储格式 17
2.3.3 创建数组的函数 18
2.3.4 浮点网格数组 20
2.4 数组的下标 20
2.4.1 数组下标的示例 21
2.4.2 多维数组下标的示例 22
2.4.3 一维下标 23
2.4.4 下标的抽取 24
2.4.5 多维下标的抽取 24
2.5 表达式和运算法则 25
2.5.1 表达式书写规则 26
2.5.2 被整数除时需要谨慎 27
2.5.3 运算符 27
2.5.4 运算的优先级 28
2.5.5 数组的运算操作 28
2.5.7 取小、取大操作和模操作 30
2.5.6 运算符的优先级和数组操作的效率 30
2.5.8 数组与数组的乘法运算 31
2.6 关系运算和布尔运算 33
2.6.1 关系运算符 33
2.6.2 关系运算和布尔运算的联合 37
2.6.3 三重运算符 38
2.6.4 位操作 39
2.7 结构体 40
2.7.1 匿名结构体 40
2.7.3 署名结构体 42
2.7.2 结构体数组 42
2.7.4 结构体的工作 44
2.8 指针 48
2.8.1 指针的类型 49
2.8.2 创建指针 49
2.8.3 释放指针内存 51
2.8.4 验证指针的有效性 51
2.8.5 指针的提领 52
2.8.6 避免指针出现问题 53
2.9.1 数组元素的数目 55
2.9 数组的性质 55
2.9.2 数组的大小和类型 56
2.9.3 最小值和最大值 57
2.9.4 平均值、方差和标准偏差 58
2.9.5 总和 58
2.10 数组中元素的定位 59
2.10.1 查找符合选择条件的值 59
2.10.2 使用where函数时使用一维下标 60
2.10.3 查找不满足选择条件的值 61
2.11 数组的重排列 61
2.11.1 改变数组的维度 62
2.11.2 转换数组中的元素的顺序 63
2.11.3 旋转数组 63
2.11.4 转置数组 64
2.11.5 平移数组 65
2.11.6 数组排序 66
2.11.7 查找惟一的数组值 66
2.12 数组大小的调整 67
2.12.1 通过一个整数因子调整大小 67
2.12.2 调整数组到任意大小 69
2.12.3 使用定制的内插法任意缩放数组 71
2.12.4 删除列或行 72
3.1 定义和编译程序 73
3.1.1 过程 73
第3章 编写IDL程序 73
3.1.2 函数 74
3.1.3 命名和编译源文件 74
3.1.4 手动编译 75
3.1.5 自动编译 75
3.1.6 遇到错误后返回主层次 77
3.2.1 if语句 79
3.2 控制语句 79
3.2.2 case语句 80
3.2.3 for语句 82
3.2.4 while语句 83
3.2.5 repeat语句 84
3.2.6 return语句 . 85
3.2.7 goto语句 86
3.2.8 switch语句 86
3.2.9 break语句 88
3.3 参数和关键字 89
3.2.10 continue语句 89
3.3.1 参数 90
3.3.2 关键字 90
3.3.3 使用参数和关键字 90
3.3.4 自变量传递机制 92
3.3.5 特殊关键字 93
3.3.6 特殊关键字的传递机制 94
3.4 检测参数和关键字 95
3.4.1 检测输入参数和关键字 95
3.4.3 检测布尔关键字 97
3.4.2 不用更改输入参数 97
3.4.4 检测输出参数和关键字 98
3.5 脚本、包含文件和日志 98
3.5.1 脚本 98
3.5.2 包含文件 99
3.5.3 日志 100
3.6 全局变量 100
3.6.1 只读系统变量 100
3.6.2 可写系统变量 101
3.6.3 用户定义系统变量 102
3.6.4 common模块 103
3.7 处理错误 104
3.7.1 截取错误 105
3.7.2 数学错误 106
3.7.3 重设IDL时段 107
3.8 有效地编程 108
3.8.1 节约内存 108
3.8.2 使用高效的方法 109
第4章 输入和输出 110
4.1 标准输入输出 110
4.1.1 写入标准输出 110
4.1.2 从标准输入中读取 113
4.1.3 自由格式的输入 114
4.1.4 从字符串中读取 114
4.1.5 写入一个字符串 115
4.1.6 合法和非法的read自变量 115
4.2 文件操作 116
4.2.1 打开文件 116
4.2.2 选择一个文件 117
4.2.3 获取文件的信息 118
4.2.4 关闭文件 118
4.3.1 读取有格式文件 119
4.3 读写有格式(ASCII)文件 119
4.3.2 写入一个有格式文件 122
4.4 读写无格式(二进制)文件 123
4.4.1 读取无格式文件(单一数据类型) 124
4.4.2 读取无格式文件(混合数据类型) 125
4.4.3 读取Fortran77无格式文件 126
4.4.4 重定位文件指针 127
4.4.5 字节交换(或大端机对小端机) 127
4.4.6 将二进制数据写入无格式文件 129
4.4.7 用程序读写可移植二进制数据 131
4.4.8 通过关联变量读取二进制数据 133
4.4.9 存储和恢复IDL变量 134
4.5 科学的和专业的数据格式 135
4.6 读写netCDF文件 136
4.6.1 从netCDF文件中读取一个变量 137
4.6.2 从netCDF文件中读取一个属性 138
4.6.3 解开netCDF文件中的内容 139
4.6.4 写入netCDF文件 141
4.6.5 标准属性 142
4.6.6 坐标变量 143
4.7 读写HDF文件 143
4.7.1 从HDF文件中读取一个变量 144
4.7.2 使用程序包读取一个变量 145
4.7.3 从HDF文件中读取一个属性 146
4.7.4 解开HDF文件中的内容 147
4.7.5 写入HDF文件 150
4.7.6 坐标变量 151
第5章 直接图形系统 153
5.1 图形设备 153
5.1.1 选择一个图形设备 154
5.1.2 设置图形设备 154
5.2.2 24位显示模式 155
5.2 显示模式 155
5.2.1 8位显示模式 155
5.2.3 显示模式比较 156
5.2.4 获取显示模式的信息 156
5.2.5 选择一种显示模式:Windows和MacOS平台 158
5.2.6 选择显示模式:UNIX平台 158
5.2.7 通过启动文件选择显示模式 160
5.3 图形窗口 161
5.3.1 创建一个窗口 161
5.3.2 对已存在窗口的操作 162
5.3.3 不可见图形窗口(像素映射)和动画 164
5.3.4 创建图形窗口的滚动条 166
5.4 处理颜色 167
5.4.1 使用索引颜色模式和RGB颜色模式 167
5.4.2 颜色表操作 173
5.4.3 在24位显示设备上装载颜色表 173
5.4.4 获得颜色表的拷贝 173
5.4.5 修改和创建颜色表 174
5.4.6 保存自己的颜色表 175
6.1.1 线画图 178
第6章 数据的图形显示 178
6.1 画图概述 178
6.1.2 重叠画 180
6.1.3 散点图 181
6.1.4 极线图 182
6.1.5 图形坐标 182
6.1.6 坐标转换 183
6.1.7 在普通坐标和设备坐标中画图 184
6.1.8 系统变量 184
6.2 图形定位 185
6.2.1 指定一个画图位置 186
6.2.2 计算图形位置 187
6.2.3 定位多个图形 190
6.3 定制线画图 191
6.3.1 一般线画图的性质 191
6.3.2 一般的轴性质 192
6.3.3 设置轴范围和类型 193
6.3.4 创建轴 194
6.3.5 对数轴 195
6.3.6 刻度和标注 196
6.4 画颜色 197
6.4.1 索引颜色 198
6.4.2 分解颜色 199
6.5 标题、标注和符号 200
6.5.1 标题 200
6.5.2 标注 202
6.5.3 数学符号 203
6.6 误差棒、直方图和条形图 205
6.6.1 误差棒图形 205
6.6.2 直方图 207
6.6.3 条形图 209
6.7.1 等值线图概论 211
6.7 等值线图 211
6.7.2 画不规则空间的数据等值线图 214
6.7.3 填充等值线图 215
6.8 网格曲面图和阴影曲面图 216
6.8.1 网格曲面图 217
6.8.2 不规则间距数据集 220
6.8.3 阴影曲面图 222
6.8.4 网格和阴影图相结合 225
6.9 地图 226
6.9.1 创建一个地图投影 226
6.9.2 设置地图投影 229
6.9.3 选择地图范围 231
6.9.4 大陆轮廓线 233
6.9.5 地图的网格线 234
6.9.6 地图投影上的等值线图 236
6.9.7 在地图投影中显示规则网格图像 238
第7章 图像显示 241
7.1 图像基础 241
7.1.1 假彩色图像 241
7.2.1 显示不调整的图像:tv 242
7.2 图像显示的程序 242
7.1.2 真彩色图像 242
7.2.2 显示调整的图像tvscl 243
7.2.3 从下往上显示和从上往下显示 245
7.2.4 tv和tvscl的关键字 245
7.3 定制图像调整 245
7.3.1 通过bytscl调整图像 245
7.3.2 颜色表的分割 248
7.3.3 使用不同颜色表显示多个图像 249
7.3.4 直方图的剪切 251
7.3.5 直方图均衡化 254
7.4 调整图像大小与图形设备匹配 255
7.5 显示真彩图像 258
7.5.1 在24位模式下显示真彩图像 258
7.5.2 在8位模式下显示真彩图像 259
7.6 在PostScript和PRINTER设备上显示图像 260
7.6.1 在设备PostScript上显示假彩色图像 260
7.6.2 在PRINTER设备中显示假彩色图像 262
7.6.3 在PostScript设备中显示真彩色图像 263
7.6.4 在PRINTER设备中显示真彩色图像 264
7.7 图像显示的应用例子 265
第8章 创建图形输出 273
8.1 位图和矢量输出 273
8.2 创建位图输出文件 274
8.2.1 从显示中读取:tvrd 274
8.2.2 从8位显示中读取 275
8.2.3 从24位显示中读取 276
8.2.4 一个tvrd函数包 277
8.2.5 选择一个位图输出格式 279
8.2.6 将一个8位图像存入位图输出文件 279
8.2.7 将一个24位图像保存为位图输出文件 280
8.2.8 将显示内容存储到位图输出文件的一个程序 281
8.3 创建PostScript输出 284
8.3.1 PostScript设备介绍 284
8.3.2 设置PostScript设备 285
8.3.3 手动设置大小和位置 287
8.3.4 自动设置大小和位置 289
8.3.5 彩色PostScript输出 294
8.3.6 在PostScript模式下使用颜色表 295
8.3.7 转换背景和画图颜色 296
8.3.9 PostScript设备字体 297
8.3.8 设置字体 297
8.3.10 TrueType字体 298
8.3.11 在可画区域中定位图形 300
8.3.12 添加一个EPS预览 300
8.4 创建打印机输出 301
8.4.1 选择一台打印机 302
8.4.2 设置Printer设备 303
8.4.3 手动设置大小和位置 304
8.4.4 自动设置大小和位置 306
9.1 介绍GUI编程 311
第9章 图形用户界面 311
9.1.1 GUI成分(组件) 312
9.1.2 GUI编程和程序编程 312
9.1.3 GUI设计 313
9.2 创建组件 315
9.2.1 组件的属性 316
9.2.2 widget_base函数 317
9.2.3 widget_button函数 317
9.2.4 widget_draw函数 319
9.2.5 widget_droplist函数 321
9.2.6 widget_label函数 322
9.2.7 widget_list函数 323
9.2.8 widget_slider函数 324
9.2.9 widget_table函数 325
9.2.10 widget_text函数 327
9.2.11 组件布局 328
9.2.12 命名按钮 331
9.2.13 混合组件 332
9.3 处理已经存在的组件 333
9.3.1 设置组件性质:widget_control 333
9.4 事件和事件处理 334
9.3.2 获取组件信息:widget_info 334
9.4.1 事件结构体 335
9.4.2 事件的管理 337
9.4.3 事件处理器和应用程序状态信息 337
9.4.4 一个程序的多种情况 340
9.5 一个GUI应用程序 344
9.5.1 体会设计含义 345
9.5.2 启动过程 345
9.5.3 事件处理器的过程 349
9.5.4 服务过程 355
9.5.5 编译和运行imgui 358