using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geometry;
namespace Kingo.RuleCheck.CheckHelper
{
///
/// 合并图形类
///
public class UnionGeometry
{
private IGeometryCollection m_pGeometryCollection = new GeometryBagClass();
public IGeometryCollection GeometryCollection
{
get { return m_pGeometryCollection; }
}
///
/// 添加图形
///
///
///
public bool AddGeometry(IGeometry pGeometry)
{
object missing = Type.Missing;
IClone pClone = pGeometry as IClone;
IGeometry pTemp = pClone.Clone() as IGeometry;
m_pGeometryCollection.AddGeometry(pTemp, ref missing, ref missing);
return true;
}
///
/// 合并图形
///
///
public IGeometry ConstructUnion()
{
if (m_pGeometryCollection.GeometryCount == 0) return null;
if (m_pGeometryCollection.GeometryCount == 1) return m_pGeometryCollection.get_Geometry(0);
if (m_pGeometryCollection.get_Geometry(0).GeometryType == esriGeometryType.esriGeometryPolygon)
{
ITopologicalOperator4 pTopologicalOperator4 = new PolygonClass();
pTopologicalOperator4.ConstructUnion(m_pGeometryCollection as IEnumGeometry);
ITopologicalOperator2 pTopo2 = pTopologicalOperator4 as ITopologicalOperator2;
pTopo2.IsKnownSimple_2 = false;
pTopo2.Simplify();
return pTopo2 as IGeometry;
}
else if (m_pGeometryCollection.get_Geometry(0).GeometryType == esriGeometryType.esriGeometryPolyline)
{
ITopologicalOperator3 pTopologicalOperator3 = new PolylineClass();
pTopologicalOperator3.ConstructUnion(m_pGeometryCollection as IEnumGeometry);
return pTopologicalOperator3 as IGeometry;
}
else if (m_pGeometryCollection.get_Geometry(0).GeometryType == esriGeometryType.esriGeometryPoint)
{
ITopologicalOperator2 pTopologicalOperator2 = new MultipointClass();
pTopologicalOperator2.ConstructUnion(m_pGeometryCollection as IEnumGeometry);
return pTopologicalOperator2 as IGeometry;
}
else
{
return null;
}
}
}
}