在MO平台上实现图形编辑功能

作者: 天涯无情 @ 05/01 2007, 10:44

  这两天在做一个MO+VB的小系统,在上学期做的系统基础之上改了改,也差不多够用了,但是这次要求能够有图形的编辑功能。MO本身是没有直接的接口可以调用的,因此就翻了翻资料,硬着头皮拼命找。终于在MO自带的例子当中找到了Edit的代码,它提供的是在一个新建图层上添加对象,删除对象,同时节点的添加,删除和移动。刚一看,还挺兴奋的,总算找到了相关资料(图形编辑的资料网上还是比较少的)。宝贝啊,让我兴奋了挺久的。一运行,感觉还不错。
  而我要实现的功能是:从地图中查找要编辑的空间对象(包含点,线,面),然后对该对象进行编辑;能够在该图层上添加相应的类型对象,能够删除对象;
于是兴致高昂地开始啃那么代码,一看就开始犯晕了,它包含了几个类,东西真多!而且我还要针对我的实际情况进行修改。琢磨了大约一天的时间,总算有了点眉目。今天开始动手把功能全部做出来了。说下整体的实现思路:
1.通过空间查询接口选择一个对象(线图层选择线对象,点图层选择点对象,面图层选择面对象)
2.在动态图层上高亮显示编辑的对象以及它的节点,这一步比较复杂,花费了大量的时间。
判断点击的位置是否靠近对象的节点(节点可以通过对象的parts得到),如果是则直接高亮显示对象以及节点,同时用另一种颜色标识该节点用以表示该节点被选中了;否则只是高亮显示对象以及节点。
在这一步实现的过程中,一定要注意很多图层中的对象拥有子对象,即object.parts.count>1;所以我用了两个变量进行控制:m_selPolyPart表示选中节点所在的子对象索引,m_selVertex表示该节点在该子对象点集中的索引;这样就很容易知道选中节点的位置了,下一步移动节点的时候好控制。
3.编辑节点,包括添加节点,删除节点,移动节点。现在只实现了移动节点的功能,效果与arcgis的效果差不多。

处于编辑状态下的对象:

移动对象某些节点后的贴图:

保存编辑后的贴图,已经没有高亮显示:


科院藏龙卧虎

作者: 天涯无情 @ 04/21 2007, 11:55

  中科院第二届乒乓球团体赛开战了。我代表资环学院参赛,想想这边打球的人应该不是很多把(应该把时间都花在科研或学习上了,或者像我这种转打篮球去了)。去之前还想着出线肯定没有问题,可是最后却全败而退。唉,高手如云啊,特别是那些研究所的,更是厉害。有的人打球还特别有专业素养。看来要多加练习。

  其实是我们队整体实力不济,要不我觉得我的“田忌赛马”的战术还是很成功的。至少我这个位置是发挥成功了,:(,不过去玩了一天还是挺高兴的。

最值得一提的是,还碰到了管院的一位女生,同一个小组的,打球特别厉害,在科院里估计也能排上前3了,人还长的挺漂亮的,属于可爱型那种。输了球,却养了眼。呵呵。。。


逛逛潘家园

作者: 天涯无情 @ 04/15 2007, 23:47

  以前听说过北京的琉璃厂,但是昨天陪黑熊去了潘家园,他说那是北京最大的旧货市场。也不知道是真是假。潘家园挺远的,但是他既然决定去那边,那就去吧,无非是多走点路,只要东西好,东西全就行。

  我们从玉泉路坐地铁到了建国门,然后从建国门南上800内环公交车,坐到华威西里,再往南走一点就到了。这里果然是个旧货市场,什么东西都感觉旧的不行,破瓦罐,铜器,竹简,青铜剑。。。而且看起来好像真的已经有很久的历史一样。不过我也走走看看,长长见识。在那里倒是很多老外,碰上一个都能看见手里拿着点东西,看来他们对中国的传统的东西有着比较浓厚的兴趣。

  无意间竟然看到萨达姆的相关书籍,唉,原来旧货市场也要跟着时代。

  这无意间增加了我对这个市场货源真假产生了怀疑,所以除非是内行人,最好还是离这边远点?为啥?有2例为证。

1。大一暑假去世界公园买了一个修饰品,里面是各种样式的小佛像,总共六个,当时花了5元买了一个。昨天在那里,看到了还挺亲切的,询问一下价格:60元!看来什么东西拿到这边都要升值了。

2。小时候特别钟情宝剑,旧货市场当然不缺少这种东西。刚进去时看到一个藏族人卖青铜剑,都是生锈的,刀刃也很钝。看起来真的是件宝贝,可是800块钱的价格还是让我望而却步。看来我也只有摸摸的份了。又逛了一阵,竟然发现隔几家就出现了同样的剑?难道每一家都能从地底下挖出宝贝来?后来终于忍不住就问了一个卖剑的,120。靠,价格相差太远了,但是感觉东西却差不多。

当然里面也很多好玩的东西:雨花石,古代的相机,钟表,民国时代的银元,老毛的头像等等。所以如果仅仅是钟爱一些小玩意的话,到是可以去逛逛,反正价格又不是很高,被骗了也亏不了多少。


扫雷周

作者: 天涯无情 @ 04/02 2007, 22:16

  已经第六周了,要根据windows API 写个与操作系统提供的扫雷游戏一致的游戏,现在雷区已经做的差不多了,增加对菜单的响应就ok了,贴2个界面上来展示一下。以后有谁想要单击版的扫雷游戏可以找我要,呵呵。

写到这,主要做了以下一些工作:

1。学会了从系统自带的扫雷提取用到的资源:如数字,雷,方块等;

2。做了一个需求分析,不过是参照别人的;

3。利用画线技术,定时器,贴图进行界面的设计;

4。对鼠标事件进行响应,同时写了连续翻雷的递归算法:

 

/**
  @brief    掀开周围没有雷数的方块
    
   利用递归算法
  @param   hwnd 窗口句柄
  @param   iRow 方块行值
  @param   iCol 方块列值
  @return   无返回值
*/
void SettleNoneMine(HWND hwnd, int iRow, int iCol)
{
 RECT newRect;
 if (iRow>=0 && iRow=0 && iCol {
  MineInfo[iRow][iCol].flag = OPEN;
  newRect.left = MINEFLD_LEFTPOS + iCol*MINE_BITMAP_WIDTH;
  newRect.top = MINEFLD_TOPPOS + iRow*MINE_BITMAP_HEIGHT;
  newRect.bottom = newRect.top + MINE_BITMAP_HEIGHT;
  newRect.right = newRect.left + MINE_BITMAP_WIDTH;
  InvalidateRect(hwnd, &newRect, TRUE);
  
  //掀开周边8个方格
  if (MineInfo[iRow][iCol].mineNum == 0)
  {
   if((MineInfo[iRow-1][iCol-1].flag==UNFLAG || MineInfo[iRow-1][iCol-1].flag==QUESTION
    && MineInfo[iRow-1][iCol-1].mineNum!=-1) && (iRow-1>=0 && iCol-1>=0)) //左上角
   {
    SettleNoneMine(hwnd, iRow-1, iCol-1);
   }
   if((MineInfo[iRow-1][iCol].flag==UNFLAG || MineInfo[iRow-1][iCol].flag==QUESTION
    && MineInfo[iRow-1][iCol].mineNum!=-1) && (iRow-1>=0 )) //正上方
   {
    SettleNoneMine(hwnd, iRow-1, iCol);
   }
   if((MineInfo[iRow-1][iCol+1].flag==UNFLAG || MineInfo[iRow-1][iCol+1].flag==QUESTION
    && MineInfo[iRow-1][iCol+1].mineNum!=-1) && (iRow-1>=0 && iCol+1   {
    SettleNoneMine(hwnd, iRow-1, iCol+1);
   }
   if((MineInfo[iRow][iCol-1].flag==UNFLAG || MineInfo[iRow][iCol-1].flag==QUESTION
    && MineInfo[iRow][iCol-1].mineNum!=-1) && (iCol-1>=0)) //正左方
   {
    SettleNoneMine(hwnd, iRow, iCol-1);
   }
   if((MineInfo[iRow][iCol+1].flag==UNFLAG || MineInfo[iRow][iCol+1].flag==QUESTION
    && MineInfo[iRow][iCol+1].mineNum!=-1) && (iCol+1   {
    SettleNoneMine(hwnd, iRow, iCol+1);
   }
   if((MineInfo[iRow+1][iCol-1].flag==UNFLAG || MineInfo[iRow+1][iCol-1].flag==QUESTION
    && MineInfo[iRow+1][iCol-1].mineNum!=-1) && (iRow+1=0)) //左下方
   {
    SettleNoneMine(hwnd, iRow+1, iCol-1);
   }
   if((MineInfo[iRow+1][iCol].flag==UNFLAG || MineInfo[iRow+1][iCol].flag==QUESTION
    && MineInfo[iRow+1][iCol].mineNum!=-1) && (iRow+1   {
    SettleNoneMine(hwnd, iRow+1, iCol);
   }
   if((MineInfo[iRow+1][iCol+1].flag==UNFLAG || MineInfo[iRow+1][iCol+1].flag==QUESTION
    && MineInfo[iRow+1][iCol+1].mineNum!=-1) && (iRow+1   {
    SettleNoneMine(hwnd, iRow+1, iCol+1);
   }
    
  }
 }

}


与明星脸匹配

作者: 天涯无情 @ 03/28 2007, 13:06

  在黄牛blog上看到关于与其他人长相的相似程度的一个网站,大家可以点击这里:http://www.myheritage.com/FP/Company/face-recognition.php

 



  © 感知世界,感知未来, All rights reserved.