现在的位置: 首页 > 综合 > 正文

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

2013年10月07日 ⁄ 综合 ⁄ 共 2464字 ⁄ 字号 评论关闭

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;

抱歉!评论已关闭.