Spehio

我叫杜晓三 | Ecology | Urban | Landscape | GIS | IT
Options:

Archive for March, 2010

对我来说,ssh tunnel就是用来那啥的。ssh连接有个最大问题就是没有断线重连机制,在win下面有以myentunnel为代表的软件来看着它所调用plink.exe来建立的ssh连接是否正常,断线就重新调用一下。
Linux也有类似的东西,Gnome下面有个Gnome SHH Tunnel Manager,简称gstm的能实现,缺点是密码不能保存,每次都要自己输入,且依赖图形界面。KDE下面也有一个,名字很有喜感,叫kstm,就是KDE SSH Tunnel Manager,另外还有一个,忘名字了,暂时找不到,但是遗憾的是没有Xfce SSH Tunnel Manager这个神物。
上网一搜,有类似的方案,主要都是来源于这篇文章,对我来说这个方案并不能完全满足我的需求,第一我不想在桌面上专门开个终端(因为expect是需要与屏幕显示交互的,因此不能后台运行),第二他只是发送字符防止超时断开连接,强壮性不够,下面是改进过的脚本。
Bash语言: 感谢代码发芽网
01 #!/usr/bin/expect
02
03 set timeout 60
04
05 while (1) {
06 spawn /usr/bin/ssh -D 7070 -g ****@*****.****
07 expect {
08 “*(yes/no)?” {
09 send “yes\r\n”
10 expect “*password:” send “****\r\n”
11 }
12 “*password:” {
13 send “****\r\n”
14 }
15 }
16 interact { timeout send “\r\n” }
17 wait
18 [...]

昨天下午下了课,老板给打电话来说帮师兄研究一下如何实现这样如题的功能,具体情境是拿C#用ArcEngine做二次开发的时候,他要开四个MapControl控件,分别显示大气、土壤等等的信息,在每个地图容器里面拖拽放大的时候,其他容器里面的地图联动,鼠标也要在四个窗口里面同步显示。
好的,分成三步来做。以两个MapControl联动为例,做窗口上放了两个ArcGIS Engine MapControl控件,分别命名Map1和Map2。
先实现地图联动,每当地图位置、比例尺发生变化的时候,会触发MapControl的OnExtentUpdated事件,在Map1的响应函数里面写:

Map2.Extent = (IEnvelope)e.newEnvelope;

Map2同理,这样就好了。之前有试过Map2.Extent = Map1.Extent.Envelope的用法,但是联动的时候慢半拍。
接着实现同步操作状态,即鼠标进入MapControl控件的时候,保持一致的漫游、放大、缩小等功能。再放两个ArcGIS Engine ToolBarControl控件,分别命名Bar1和Bar2,添加好漫游、放大、缩小、全图四个按钮,并绑定对应的MapControl控件。
实现的原理是当按下一个ToolBar上按钮的时候,让别的ToolBar的该按钮也处于按下状态。在ToolBar的OnItemClick事件里面写,这里有一点要注意的是ToolBar里面的全图按钮算Command不算Tool(AO里面的强行不合理分类,Command是按下就弹起的按钮,Tool是按下后保持状态的。),在代码里面利用e.index把他排除在同步操作的状态以外。关键代码如下

Bar2.CurrentTool = Bar2.GetItem(e.index).Command as ITool;

Bar1同理,这样效果就出来了。前面几次操作在显示上略有点小问题,我归结到AE的Bug里面,多点几次基本就是无缝同步了,最后出成品的时候,隐藏到其他的ToolBar就好了。
鼠标这个功能比较麻烦,我试过用PicureBox装在个鼠标图片然后用位置控制的方法,但是PictrueBox本身不透明,效果不好,况且暂时也不需要也没必要实现同时弹出右键菜单,跟师兄沟通了一下决定改用在其他地图容器里面画一个大的十字丝来作为鼠标的定位显示,这个功能用NewLineFeedbackClass来实现。
首先做定义两个接口。

private IDisplayFeedback pDisplayFeedback1 = null;
private IScreenDisplay pScreenDisplay1 = null;
在窗体的构造函数里面添加初始化的代码。

pDisplayFeedback1 = new NewLineFeedbackClass();
pScreenDisplay1 = Map1.ActiveView.ScreenDisplay;
pDisplayFeedback1.Display = pScreenDisplay1;
在Map2的OnMouseMove事件里面写响应代码。

((INewLineFeedback)pDisplayFeedback1).Stop(); //结束之前的绘制,DisplayFeedback在执行Start()方法之后开始画,Stop()之后就清掉了。
//下面是画十字丝的,因为没有NewMultiLineFeedbackClass,这个十字丝只能一笔画成,所以就只能在显示区域外面多画了一点。
((INewLineFeedback)pDisplayFeedback1).Start(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(0, e.y));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(Map1.Width + 1, e.y));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(Map1.Width + 1, -1));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(e.x, -1));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(e.x, Map1.Height));
这样就在当鼠标在Map2上时,Map1上会同步打一个十字丝。画出来的是默认宽度为1的黑色线,正好符合我的要求。也可以自定义线形,关键代码如下,加在初始化代码里面。

IRgbColor fcolor = new RgbColorClass();
fcolor.RGB = 0;
ISimpleLineSymbol pSymbol = (ISimpleLineSymbol)pDisplayFeedback1.Symbol;
pSymbol.Color = fcolor;
pSymbol.Width = 1;
pSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
//放在这句之前 pDisplayFeedback1.Display = [...]

偶染小恙

几天前发现脖子上冒出几个红痘痘,略痛不痒,观察几天之后发现越来越严重,进而肩膀上也冒出来几个,不敢怠慢,决定去医院看一下。因为有前车之鉴,我在学校医务室得到一个不靠谱的解答之后,还是决定放弃公费医疗直奔清华大学玉泉医院。
整个看病过程相当简单,给医生看了一下就结了,开药付钱,花掉350个人民的币。
这病叫带状疱疹,第一次发作时的症状就是水痘。仔细研究了一下,这病还挺不简单的,因为发炎的部位是神经,不好好治还会有神经痛的后遗症,于是乖乖吃药。

一顿要吃这么多,并且开的还是两周的剂量。
1号药丸叫比拜克胶囊,功效为清热解毒,一日三次,每次三颗。
2号药丸叫泛昔洛韦片,带状疱疹专杀工具,八小时一次,一次两片。//这个玩意,一盒45,开了我四盒。
3号药丸叫维生素B1,虽然每天有吃善存,不过看样子补充的量还不够。
4号药丸叫甲钴胺胶囊,治周围神经病变,一日一次,一次一粒。//这个玩意儿看着最吓人,也最贵,一盒52,开了我两盒。
另外还有外涂药剂,是中成药,味道闻着不错,只是涂完比较痛。
这两天就全在宿舍静养了,也没什么具体安排,选的课程都听了一遍,比较索然,上学真的是上厌倦了,唯一可惜的是没遇着几个好的上课老师,着实浪费了不少时光。
不写了,脖子这儿越来越疼,我干点别的事情去。

RSS订阅

  •    Feedburner
  • feedsky   FeedSky

杜晓三,这是艺名儿。

厦门呆着,白石村村民。

觉着页面太窄了?上面有个Large可以点。


分类目录

所有文章

最新评论

  • 胸无大志 (4)
    • Spehio: @滚石头 研究所在厦门,第一年在北京是集中上课。
    • 滚石头: 来打声招呼~ 怎么去厦门了,工作了?
    • Spehio: @Noname 俄…这个怎么说,大学阶段小姑娘里面不是谈恋爱那种 的朋友里面最好的一个。
    • Noname: …怎么感觉你和这个人的关系很不一般…… 然后吧……你的右边这“北京呆着”……
  • 新上线维基小说和媒体库两个子站点 (4)
    • Spehio: @秦秦 那个主题就是那样的

我出没的地方

有来有往