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;