Arcengine, 节点编辑 删除一个GeoMetry的第几部分第几个点-----部分代码

Arcengine, 节点编辑 删除一个GeoMetry的第几部分第几个点-----部分代码

//删除一个GeoMetry的第几部分第几个点,by yl  landgis@126.com 2005.06.10

function DelGeoMetry(PGeoMetry: IGeoMetry; Partindex: Integer; index: Integer):     IGeoMetry; //判断一个GeoMetry是否正常,对于线最少两个点,面最少三个点 //处理后返回GeoMetry,Onlyone为true表示原只有一个对象,就不许删除, //false表示多个对象,则返回为nil, //     function doWithGeoMetry(PGeoMetry: IGeoMetry; ShapeType: TOleEnum;         Onlyone: boolean):             IGeoMetry;     var         num                             : Integer;         pPointColl                      : IPointCollection;

    begin

        pPointColl := PGeoMetry as IPointCollection;         pPointColl.Get_PointCount(num);         result := nil;         if ShapeType = esriGeometryPolygon then //面最少三个点(节点是4个)         begin             if num < 4 then             begin                 if Onlyone then                     raise exception.Create('面不能少于三个点,该点不能删除');                 Exit;             end;

        end         else             if ShapeType = esriGeometryPolyline then //线最少两个点             begin                 if num < 2 then                 begin                     if Onlyone then                         raise exception.Create('线不能少于两个点,该点不能删除');                     Exit;                 end;

            end             else                 raise exception.Create('数据类型错误');         result := PGeoMetry;

    end;

var     num                                 : Integer;     PGeoMetryCol                        : IGeoMetryCollection;     pPointColl                          : IPointCollection;     DelGeoMetry                         : IGeoMetry;     ShapeType                           : TOleEnum; begin     PGeoMetry.Get_GeometryType(ShapeType);     PGeoMetryCol := PGeoMetry as IGeoMetryCollection;     PGeoMetryCol.Get_GeometryCount(num);     if num = 1 then     begin         pPointColl := PGeoMetry as IPointCollection;

        pPointColl.RemovePoints(index, 1);         PGeoMetry := pPointColl as IGeoMetry;         result := doWithGeoMetry(PGeoMetry, ShapeType, True);     end     else     begin         if Partindex > num then             result := nil;         PGeoMetryCol.Get_Geometry(Partindex, DelGeoMetry);         pPointColl := DelGeoMetry as IPointCollection;

        pPointColl.RemovePoints(index, 1);         DelGeoMetry := pPointColl as IGeoMetry;         DelGeoMetry := doWithGeoMetry(DelGeoMetry, ShapeType, False);         if DelGeoMetry <> nil then         begin             PGeoMetryCol.InsertGeometries(Partindex, 1, DelGeoMetry);             PGeoMetryCol.RemoveGeometries(Partindex + 1, 1);         end         else         begin             PGeoMetryCol.RemoveGeometries(Partindex, 1);         end;         result := PGeoMetryCol as IGeoMetry;     end;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值