捕捉功能主要使用ArcEngine中的两个接口
1. IHitTest用于作点击测试
2. IFeatureCache 用于建立做缓存
由于数据库中有多个FeatureClass ,而每个FeatureClass又可以做多种点击测试
所以这里有会有好几种捕捉方案。
我们称呼每一个可以执行捕捉的对象叫捕捉代理,所有的代理在一个捕捉环境中
方案1:每个代理负责测试一种FeatureClass的一种点击方式
方案2:每个代理负责测试一种FeatureClass的所有点击方式
方案3:一代理负责测试所有的FeatureClass的一种点击方式
方案4:一个代理负责测试所有FeatureClass的所有点击方式
在实际使用过程中 我们使用的是第一种方案。但是我个人认为第二种方案比较好。当然这只是个人推测
没有测试数据证明。
下面给出第一种方案的代码:
/// <summary>
/// IFeatureSnapAgent 的摘要说明。
/// </summary>
public interface IFeatureSnapAgent:ISnapAgent,ISnapAgentFeedback
{
IFeatureCache FeatureCache
{
get;
}
IFeatureClass FeatureClass
{
get;
set;
}
esriGeometryHitPartType HitPartType
{
get;
set;
}
/// <summary>
/// 为捕捉连接事件,当捕捉发生的时候,就会触发事件。
/// </summary>
/// <param name="handler"></param>
void AddSnapedEventHandler(GeometrySnapedEventHandler handler);
/// <summary>
/// 不再监听捕捉事件
/// </summary>
/// <param name="handler"></param>
void RemoveSnapedEventHandler(GeometrySnapedEventHandler handler);
}
/// <summary>
/// 默认的要素捕捉代理
/// </summary>
public class DefaultFeatureSnapAgent :IFeatureSnapAgent,IEditEvents,ESRI.ArcGIS .esriSystem .IPersistVariant
{
#region 构造函数
/// <summary>
/// 为代理 (本文已被浏览 次) | | |