来看下面一段代码:
这段代码的本意在于循环当前选择集 ,将选择集中的所有图层要素的geometry合并起来,但是这段代码在执行上出现了问题。
假设选择集中有两个元素,第一个的extent是从1,1 到2,2 ,第二个的extent是从3,3 到4,4 。
循环第一次,pUnionGeometry的值被赋为第一个元素的geometry,此时它的extent是从1,1 到2,2 。但到循环最后一句pFeature = pFeatureCursor.NextFeature();pFeature被赋为第二个元素,这时pUnionGeometry的值也会自动被赋为第二个元素的geometry,此时它的extent变为3,3到4,4,这样显然与程序的初衷是不相符的。
修改方法:将pGeometry = pFeature.Shape;修改为:pGeometry = pFeature.ShapeCopy;
由此可以看出IGeometry的对象只是一个到IFeature.Shape的映射,会随着前者的变化而变化,要得到一个不随之变化的IGeometry,只有保存它的一个副本。