发表用户:讨论贴
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=4&ID=14284
信息原始来源:James MapInfo技术论坛

文章标题:VC环境中MapX是否有一次删除图层所有图元的函数?

cszcsz79

新手请教:请教一下图层是否有Feature的函数!
用来做某些菜单是否可用!谢谢!查了半天Layer属性也没找到,向高手学习!

cszcsz79

顺便问一下将某一个图层的Feature全部去除的函数?

James.Liu

Layer.allfeatures()函数可以渠道所有图元

没有取出图层所有FEATURE的函数,
1。可以考虑用循环layer.deletefeature来逐个删除图元,

2。如果这个图层是临时图层,可以用layers.remove图层,再用layerinfo对象新建一个同样的图层,这样效率更高些

cszcsz79

CMapXLayer layer = m_ctrlMapX.GetLayers().Item("user");
 CMapXFeature fea;
 for(int i=layer.AllFeatures().GetCount();i>0;)
  {
        layer.DeleteFeature(fea.GetKeyvalue());
  }
帮忙看看为何删除不了。编译通过,运行到layer.DeleteFeature(fea.GetKeyvalue())时报错。
顺便问一下:为什么图层中没有图元了layer.AllFeatures().GetCount()还为1,添加一个图元后变成2?  

James.Liu

layer.DeleteFeature(fea.GetKeyvalue());
之前你没有给FEA对象赋值,fea.GetKeyvalue()当然是个空值了

cszcsz79

如果我不知道FEA对象,只是想删除该层所有的图元,怎么给FEA对象赋值呢?

James.Liu

layer.AllFeatures()得到的是一个features集合

fea?=features.item(1)得到第一个图元

cszcsz79

刘老大,调试成功,谢谢!代码如下:
 CMapXLayer layer = m_ctrlMapX.GetLayers().Item("user");
 layer.SetEditable(TRUE);
 CMapXFeature fea;
 CMapXFeatures features;

 do{
  features=layer.AllFeatures();
  fea =features.Item(1);
  layer.DeleteFeature(fea);
 }
 while(layer.AllFeatures().GetCount()>0);
 layer.Refresh();