首页 / 浏览问题 / 组件GIS / 问题详情
SplitRegion切割后,如何将原图斑覆盖?
9EXP 2021年12月07日
使用产品:iobject 10i  操作系统:win10 x64
数据类型:
问题详细描述:Geometrist.SplitRegion(sourceGeoRegion,splitGeometry,targetGeoRegion1,targetRegion2)成功后,如何把sourceGeoRegion在地图上显示的区域用新的targetRegion1和targetRegion2给替换掉。效果就像idesktop里面的划线切割一样,切完以后就是两个图斑了。
问题重现步骤: 无

1个回答

您好,iObject组件有多种产品,为便于我们更快帮您解决问题,希望您可以准确标识您使用的产品,如iobject .net、iobject Python等。
希望可以帮助到您!
9,343EXP 2021年12月07日
是代码实现的啊 CtrlZ组合键事件或者你其他操作来触发的这个撤回是事件,是业务代码写出来的

dataset里内容的“撤回”或者mapcontrol上绘制内容的“撤回”都是开发自行设计实现的哈。

建议你可以直接百度了解下winfrom实现撤回的开发思路,内部逻辑不管日志式、版本控制式、内存式等等很多种方式都是可以实现的哈,只是说外部触发你可以用观念里常见的CtrlZ来触发你的事件。

意思就是下面这段代码是正确的分割代码,但是iobject没有提供能够对recordset操纵进行撤回的接口,要自己手撕一个?

GeoRegion resultRegion1 = new GeoRegion(), resultRegion2 = new GeoRegion();   // 接受分割后的两个结果
GeoRegion region = recordset.GetGeometry() as GeoRegion;    // 待切割图斑
Geometrist.SplitRegion(region, spilitTarget, resultRegion1, resultRegion2);  // 开始切割

Dictionary<string, object> values = new Dictionary<string, object>();    // 拿到老图斑的字段信息
foreach (FieldInfo field in fieldInfos)
{
    if (field.Name.Substring(0, 2) == "Sm") continue;
    values.Add(field.Name, recordset.GetFieldValue(field.Name));
}
recordset.Delete();  // 删掉老的
recordset.Update();

recordset.AddNew(resultRegion1, values);  // 添加新图斑1,并给字段赋值
recordset.Update();

recordset.AddNew(resultRegion2, values); // 添加新图斑2,并给字段赋值
recordset.Update();

不止gis,对于winform来说很少有控件有你说的撤回api
好吧,主要我看到maopControl里面有个undo可以撤回对要素的节点编辑 拖动啥的,以为是我的切割方法没对无法触发undo
mapcontrol类里的undo是组件产品在此类上额外提供的撤回,您可以在mapcontrol类界面中看到描述,提供的该撤回事件是针对开启了编辑的图层时,对基本对象绘制功能的撤回。(比如Action、复制、剪切、粘贴等这些)

比如你额外使用Split方法去操作的,需要您这边根据您需要的功能自行追加或者来实现撤回事件。

mapcontrol现有的Action和剪切复制粘贴等new或者delete几何对象的方法,所以才有对应的撤回。

对于winfrom来说,哪方做的方法哪方才能做对应方法的撤回实现。
...