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;