<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FC8FD5F2E646F63>

Similar documents
<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FB6FE5F2E646F63>

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

ASP.NET实现下拉框二级联动组件

untitled

untitled

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

untitled

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Microsoft Word - ch04三校.doc

fvalue = (pdata[y][i] + pdata[y][i + 1]) / 2; pdata[y][nhalfw + i] -= fvalue; fvalue = (pdata[y][nhalfw - 1] + pdata[y][nhalfw - 2]) / 2; pdata[y][nwi

地 理 志 鏡 止 煞, 來 達 到 安 宅 的 效 果 4. 門 神 符 紙 : 於 門 板 繪 製 門 神, 作 為 宅 第 的 守 護, 民 宅 所 使 用 的 門 神 題 材, 多 為 天 官 賜 福 或 文 武 官 員 符 紙 是 以 畫 了 符 咒 的 紙 懸 掛 室 內, 或 加 框

Microsoft Word - 01.DOC

untitled

untitled

1.5招募说明书(草案)

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

第一章 章标题-F2 上空24,下空24

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1

无类继承.key

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

第3章.doc

Chapter 9: Objects and Classes

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

FY.DOC

农业信息 科技教育

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

6 徐 咏 深 圳 市 明 亚 科 技 有 限 公 司 电 子 技 术 助 理 7 谢 庆 辉 深 圳 市 奇 辉 电 力 建 设 工 程 有 限 公 司 电 子 技 术 助 理 8 李 威 深 圳 市 地 铁 三 号 线 投 资 有 限 公 司 通 信 技 术 助 理 9 姚 元 全 深 圳 市

javaexample-02.pdf

Chapter 9: Objects and Classes

@欄目:

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Java

untitled

科 技 与 法 律 Science Technology and Law Vol.89, No.1, 2011 作 品 若 将 打 字 机 也 算 作 字 体 工 具, 那 么 打 字 机 不 是 美 术 作 品, 只 是 一 种 工 业 产 品 字 帖 是 美 术 作 品 么? 笔 者 认 为,

概述

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

深 圳 市 远 东 皓 星 科 技 有 限 公 司 深 圳 市 信 利 通 电 子 有 限 公 司 深 圳 市 兆 力 电 机 有 限 公 司 深 圳 市 深 祥

untitled

Microsoft Word - 新1-12.doc

2004年国家认定企业技术中心科技活动经费支出前100名

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>

4 付 凤 奇 深 圳 市 景 旺 电 子 股 份 有 限 公 司 电 子 技 术 助 理 工 程 师 5 袁 维 中 兴 通 讯 股 份 有 限 公 司 电 子 技 术 助 理 工 程 师 6 李 高 峰 深 圳 市 丰 日 科 技 有 限 公 司 电 子 技 术 助 理 工 程 师 7 叶 秋

untitled

untitled

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

untitled

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

chp6.ppt

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

全国计算机技术与软件专业技术资格(水平)考试

全國寺院宮廟基本資料調查表

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

c_cpp

基于ECO的UML模型驱动的数据库应用开发1.doc

《大话设计模式》第一章

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y

untitled


主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

台北市立大安高工職業學校

3. 反 映 : 4. 五 花 八 门 : 5. 慷 慨 : 6. 参 与 : 7. 慰 劳 : 8. 延 续 : 9. 珍 爱 : 10. 浪 漫 : 三. 找 出 下 列 每 组 词 中 的 近 义 词 或 同 义 词 : 节 日 节 气 节 令 时 节 习 俗 民 俗 仪 式 风 俗 文 献

建模与图形思考

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

Strings

EJB-Programming-3.PDF

Guava学习之Resources

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

java2d-4.PDF

untitled

说 : 荀 子 极 偏 驳, 只 一 句 性 恶, 大 本 已 失 5 朱 熹 说 : 荀 扬 不 惟 说 性 不 是, 从 头 到 底 皆 不 识 6 采 取 的 都 是 这 种 理 论 框 架 另 一 种 理 论 框 架 始 于 20 世 纪 前 期, 这 便 是 诸 子 学 研 究 的 框 架

Microsoft Word - CPE考生使用手冊 docx

( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

EJB-Programming-4-cn.doc

手说TTS开发指南

ebook50-11

,, 1 ( ) 1 / CurrentSeries Int ConnectionString CString Style3D BOOL IsContinue Graph BOOL LegendType Int SeriesName CString SeriesColor OL E

chap07.key

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

C 1

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

1.5招募说明书(草案)

教案模板4-2

可 Web 编程的NativeUI 设计与实现

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题


第 05 期 董房等 : 一种卫星遥测在线状态监测及分析系统的设计 WEB 1 2 总体功能及组成 2.1 总体功能 1 2 3Web 2.2 结构组成 Web WEB WEB 2.3 系统各模块接口关系

回滚段探究

建模与图形思考

标题

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Transcription:

ArcEngine+C# TIN 相关三维功能模块介绍 ( 三 ) TreeView 控件控制 TIN 颜色 作者 : 刘志远 Email:592418843@qq.com

1. 简介 本篇介绍如何写一个带复选框及颜色指示图标的 TreeView 控件, 该控件与 TIN 模型分级设色方案中的各级颜色相关联 通过该 TreeView 控件复选框的勾选状态决定 TIN 模型对应颜色层的显示与隐藏, 再结合颜色选择下拉框控件, 双击 TreeView 中的颜色图标, 弹出颜色选择对话框, 选择颜色后即可实时改变 TIN 模型中对应分级的颜色, 效果图如下 注意观察 TreeView 中复选框为空的颜色层对应 TIN 的样式, 此外, 那个蓝色和紫色的层是经过修改过后的结果 : 颜色选择对话框 运行效果界面截图

2. 思路分析 编写 TIN 颜色关联 TreeView 控件过程同上篇的编写颜色控件类似, 先在项目下添加一个新的 UserControl 控件, 再拖一个 TreeView 控件到 UserControl 上, 将 TreeView 的 Dock 属性设为 Fill,, 最后加入代码 TIN 模型颜色可以通过 ITinRenderer 渲染器接口设置,ITinColorRampRenderer 接口控制渲染器中的色带, 通过遍历获取或设置 ITinColorRampRenderer 中的颜色值, 再将改变后的 ITinRenderer 重新赋给 TIN 模型就行了 隐藏效果只是将对应层的颜色值设为 NullColor 即可 再稍微解释一下 TreeView 中颜色图标的实时联动更新 我是先生成一个动态的 Image 图片对象, 该 Image 的颜色就是从 TIN 模型或颜色对话框中获得的颜色值, 再依次将这些颜色图片存入一个 ImageList 对象中, 再将该 ImageList 对象赋给 TreeView, 通过 ImageList 中图片的索引与 TreeView 中的节点 (Node) 相关联, 这样就达到实时更新显示的效果 3. 完整代码 下面是该控件的完整代码, 具体的解释见代码注释 : using System; using System.Drawing; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Analyst3D; namespace CaseAnalyse /// 模仿 ArcGIS 的 TOCControl 控件, 对 TIN 模型分级渲染颜色进行关联, /// 并通过复选框的勾选状态控制对应色带的显隐, /// 同时可双击颜色图标, 实时修改对应层的颜色 public partial class ColorControlView : UserControl /// 颜色图标清单 private ImageList pimagelist; /// 激活的节点

private TreeNode ptreenode; /// 含有 TIN 的三维控件 static private AxSceneControl _pscenecontrol; // 构造函数 public ColorControlView() InitializeComponent(); treeview1.checkboxes = true; /// 初始化, 关联 TIN 图层颜色列表与 TreeView 控件 /// <param name="pscenecontrol"> 含 TIN 图层的 AxSceneControl 控件 </param> public void IniColorTree(AxSceneControl pscenecontrol) _pscenecontrol = pscenecontrol; ITinLayer ptinlayer = gettinlayer(_pscenecontrol); if (ptinlayer == null) treeview1.nodes.clear(); // 给 TreeView 绑定一个图片列表控件, 该控件记录着所有的颜色图片 pimagelist = new ImageList(); pimagelist.imagesize = new Size(16, 15); treeview1.imagelist = pimagelist; // 获得 TIN 模型的渲染器, 这里假设只有一个渲染层 ITinRenderer prendernew = ptinlayer.getrenderer(0); ITinColorRampRenderer pelevrenderer = prendernew as ITinColorRampRenderer; if (pelevrenderer == null) ISimpleFillSymbol psymbol = null; 调用 Color pcolor = new Color(); string lable = ""; // 遍历渲染层的分级颜色, 并用生成动态临时图标, 将其加入 ImageList 中, 以备 TreeView for (int i = 0; i < pelevrenderer.breakcount; i++)

lable = pelevrenderer.get_label(i); psymbol = pelevrenderer.get_symbol(i) as ISimpleFillSymbol; pcolor = ColorTranslator.FromOle(pSymbol.Color.RGB); Image pimage = getimage(pcolor); pimagelist.images.add(pimage); TreeNode ptn = new TreeNode(); ptn.text = lable; ptn.checked = true; ptn.imageindex = pimagelist.images.count - 1; ptn.tag = pcolor; treeview1.nodes.add(ptn); /// 关联图标 /// <param name="sender"></param> /// <param name="e"></param> private void treeview1_afterselect(object sender, TreeViewEventArgs e) treeview1.selectedimageindex = treeview1.selectednode.imageindex; /// 复选框勾选事件 /// <param name="sender"></param> /// <param name="e"></param> private void treeview1_aftercheck(object sender, TreeViewEventArgs e) // 调用颜色显隐方法 ShowOrHideColor(); treeview1.selectednode = e.node; /// 双击节点事件 /// <param name="sender"></param> /// <param name="e"></param>

private void treeview1_doubleclick(object sender, EventArgs e) if (treeview1.selectednode == null) ptreenode = treeview1.selectednode; // 调用改变颜色方法 ChangeColor(); // 刷新颜色图标 treeview1.selectednode = treeview1.nodes[0]; treeview1.selectednode = ptreenode; /// 获得颜色图标 /// <param name="clr"> 图标颜色 </param> /// <returns></returns> private static Image getimage(color clr) Panel ppanel = new Panel(); ppanel.visible = false; ppanel.width = 16; ppanel.height = 14; Bitmap pbitmap = new Bitmap(16, 14); Rectangle rc = new Rectangle(0, 0, 16, 14); ppanel.backcolor = clr; ppanel.drawtobitmap(pbitmap, rc); Image pimage = (Image)pBitmap; return pimage; /// 切换点选色带对应 TIN 中区域的显示 / 消隐状态 /// 既通过给 TIN 一个新的渲染器来实现 private void ShowOrHideColor() ITinLayer ptinlayer = gettinlayer(_pscenecontrol); if (ptinlayer == null)

ITinRenderer prendernew = ptinlayer.getrenderer(0); ITinColorRampRenderer pelevrenderer = prendernew as ITinColorRampRenderer; ISimpleFillSymbol psymbol = null; int ClassCount = treeview1.nodes.count; // 遍历 TreeView 节点, 并依次设置渲染器样式 for (int i = 0; i < ClassCount; i++) psymbol = pelevrenderer.get_symbol(i) as ISimpleFillSymbol; IRgbColor rgb = new RgbColorClass(); rgb.red = ((Color)treeView1.Nodes[i].Tag).R; rgb.green = ((Color)treeView1.Nodes[i].Tag).G; rgb.blue = ((Color)treeView1.Nodes[i].Tag).B; IColor pc = rgb as IColor; if (!treeview1.nodes[i].checked) pc.nullcolor = true; pc.transparency = 0; psymbol = new SimpleFillSymbolClass(); psymbol.color = pc; // 设置渲染器样式 pelevrenderer.set_symbol(i, psymbol as ISymbol); // 创建 TinEdgeRendererClass 类型的 Renderer ptinlayer.clearrenderers(); // 插入一个渲染模型 ptinlayer.insertrenderer(prendernew, 0); // 刷新渲染 _pscenecontrol.scene.scenegraph.invalidate(ptinlayer, true, false); _pscenecontrol.sceneviewer.redraw(true); _pscenecontrol.scene.scenegraph.refreshviewers(); /// 改变点选色带对应 TIN 区域的颜色 private void ChangeColor() FrmChosePColor fchosecolor = new FrmChosePColor(); if (fchosecolor.showdialog() == DialogResult.OK)

Color color = fchosecolor.purecolorcombobox1.selectedcolor; IRgbColor rgb = new RgbColorClass(); rgb.red = color.r; rgb.green = color.g; rgb.blue = color.b; IColor pc = rgb as IColor; Image pimage = getimage(color); pimagelist.images.add(pimage); ptreenode.imageindex = pimagelist.images.count - 1; ptreenode.tag = color; treeview1.refresh(); ITinLayer ptinlayer = gettinlayer(_pscenecontrol); if (ptinlayer == null) ITinRenderer prendernew = ptinlayer.getrenderer(0); ITinColorRampRenderer pelevrenderer = prendernew as ITinColorRampRenderer; ISimpleFillSymbol psymbol = null; int ClassCount = treeview1.nodes.count; for (int i = 0; i < ClassCount; i++) if (i!= ptreenode.index) continue; psymbol = new SimpleFillSymbolClass(); if (!treeview1.nodes[i].checked) pc.nullcolor = true; pc.transparency = 0; psymbol.color = pc; pelevrenderer.set_symbol(i, psymbol as ISymbol); // 创建 TinEdgeRendererClass 类型的 Renderer ptinlayer.clearrenderers(); ptinlayer.insertrenderer(prendernew, 0);// 插入一个渲染模型 // 渲染的刷新方法.

_pscenecontrol.scene.scenegraph.invalidate(ptinlayer, true, false); _pscenecontrol.sceneviewer.redraw(true); _pscenecontrol.scene.scenegraph.refreshviewers(); /// 获得三维控件中的 TIN 图层 /// <param name="pscenecontrol"> 含 TIN 图层的 AxSceneControl 控件 </param> /// <returns></returns> private static ITinLayer gettinlayer(axscenecontrol pscenecontrol) IScene pscene = pscenecontrol.scene; ITinLayer ptinlayer = null; for (int i = 0; i < pscene.layercount; i++) ILayer lyr = pscene.get_layer(i); if (lyr is ITinLayer) ptinlayer = lyr as ITinLayer; break; return ptinlayer; 最后, 只需要将该控件拖入相应的窗体中, 调用控件的 IniColorTree() 方法, 传入参数 AxSceneControl 即可, 如下 : private void button1_click(object sender, EventArgs e) // 关联色板 this.colorcontrolview1.inicolortree(this.axscenecontrol1); 4. 下一篇简介 下一篇打算介绍如何从 DEM 栅格数据中提取等值线以及如何由 DEM 栅格数据生成 TIN 三维模型 最后把这个系列所设计的功能整合到一个程序中, 以供感兴趣的朋友参考