<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    內(nèi)蒙古java團(tuán)隊

    j2se,j2ee開發(fā)組
    posts - 139, comments - 212, trackbacks - 0, articles - 65
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    ArcEngine中實(shí)現(xiàn)捕捉功能

    Posted on 2007-03-08 16:42 帥子 閱讀(3232) 評論(2)  編輯  收藏 所屬分類: J2EE技術(shù)專區(qū)
    ArcEngine中實(shí)現(xiàn)捕捉功能

    捕捉功能主要使用ArcEngine中的兩個接口

    1. IHitTest用于作點(diǎn)擊測試
    2. IFeatureCache 用于建立做緩存
    由于數(shù)據(jù)庫中有多個FeatureClass ,而每個FeatureClass又可以做多種點(diǎn)擊測試
    所以這里有會有好幾種捕捉方案。
    我們稱呼每一個可以執(zhí)行捕捉的對象叫捕捉代理,所有的代理在一個捕捉環(huán)境中
    方案1:每個代理負(fù)責(zé)測試一種FeatureClass的一種點(diǎn)擊方式
    方案2:每個代理負(fù)責(zé)測試一種FeatureClass的所有點(diǎn)擊方式
    方案3:一代理負(fù)責(zé)測試所有的FeatureClass的一種點(diǎn)擊方式
    方案4:一個代理負(fù)責(zé)測試所有FeatureClass的所有點(diǎn)擊方式
    在實(shí)際使用過程中 我們使用的是第一種方案。但是我個人認(rèn)為第二種方案比較好。當(dāng)然這只是個人推測
    沒有測試數(shù)據(jù)證明。
    下面給出第一種方案的代碼:
    /// <summary>
    ?/// IFeatureSnapAgent 的摘要說明。
    ?/// </summary>
    ?public interface IFeatureSnapAgent:ISnapAgent,ISnapAgentFeedback
    ?{
    ??IFeatureCache FeatureCache
    ??{
    ???get;
    ??}
    ??IFeatureClass? FeatureClass
    ??{
    ???get;
    ???set;
    ??}
    ??esriGeometryHitPartType HitPartType
    ??{
    ???get;
    ???set;
    ??}
    ??/// <summary>
    ??/// 為捕捉連接事件,當(dāng)捕捉發(fā)生的時候,就會觸發(fā)事件。
    ??/// </summary>
    ??/// <param name="handler"></param>
    ??void AddSnapedEventHandler(GeometrySnapedEventHandler handler);
    ??/// <summary>
    ??/// 不再監(jiān)聽捕捉事件
    ??/// </summary>
    ??/// <param name="handler"></param>
    ??void RemoveSnapedEventHandler(GeometrySnapedEventHandler handler);
    ?}
    ?/// <summary>
    ?/// 默認(rèn)的要素捕捉代理
    ?/// </summary>
    ?public class DefaultFeatureSnapAgent :IFeatureSnapAgent,IEditEvents,ESRI.ArcGIS .esriSystem .IPersistVariant??
    ?{
    ??#region 構(gòu)造函數(shù)
    ??/// <summary>
    ??/// 為代理指定別名。注意該代理目前還沒有關(guān)聯(lián)到任何目標(biāo)FeatureClass
    ??/// 要使得該代理起作用,必須要為他設(shè)置FeatureClass.
    ??/// </summary>
    ??/// <param name="name">名稱(請確保唯一)</param>
    ??public DefaultFeatureSnapAgent(string name):this(name,null)
    ??{
    ???
    ??}
    ??/// <summary>
    ??/// 將使用該FeatureClass的別名做代理的名稱
    ??/// </summary>
    ??/// <param name="feaClass"></param>
    ??public DefaultFeatureSnapAgent(IFeatureClass feaClass):this(feaClass.AliasName,feaClass)
    ??{

    ??}
    ??/// <summary>
    ??/// 完全初始化捕捉代理
    ??/// </summary>
    ??/// <param name="name">名稱(請確保唯一)</param>
    ??/// <param name="feaClass">目標(biāo)FeatureClass</param>
    ??public DefaultFeatureSnapAgent(string name,IFeatureClass feaClass)
    ??{
    ???m_snapAgentName=name;
    ???m_bCacheHasCreated=false;
    ???m_hitPartType=esriGeometryHitPartType.esriGeometryPartNone;
    ???this.m_isSnapWorking=true;
    ???this.m_featureClass=feaClass;
    ???this.m_snapFeedbackText="";
    ???
    ??}
    ??#endregion
    ??#region IFeatureSnapAgent 成員
    ??private event GeometrySnapedEventHandler??? m_snapSubsciber;
    ??/// <summary>
    ??/// FeatureClass緩沖區(qū)。
    ??/// </summary>
    ??private IFeatureCache m_featureCache;
    ??/// <summary>
    ??/// 該代理將捕捉在該FeatureClass上的Feature.和Geometry
    ??/// </summary>
    ??private IFeatureClass m_featureClass;
    ??/// <summary>
    ??/// 點(diǎn)擊測試的有效類型。
    ??/// </summary>
    ??protected esriGeometryHitPartType m_hitPartType;
    ??/// <summary>
    ??/// 緩沖區(qū)對象是否已經(jīng)被創(chuàng)建了。跟是否建立了緩沖沒有關(guān)系。
    ??/// </summary>
    ??private bool?? m_bCacheHasCreated;
    ??
    ??/// <summary>
    ??/// 緩沖區(qū)對象
    ??/// </summary>
    ??public IFeatureCache FeatureCache
    ??{
    ???get
    ???{
    ????return m_featureCache;
    ???}
    ??}
    ??/// <summary>
    ??/// 目標(biāo)FeatureClass。SnapAgent將針對該FeatureClass做捕捉
    ??/// </summary>
    ??public IFeatureClass FeatureClass
    ??{
    ???get
    ???{
    ????return m_featureClass;
    ???}
    ???set
    ???{
    ????m_featureClass=value;
    ???}
    ??}
    ??
    ??/// <summary>
    ??/// 點(diǎn)擊測試類型。哪些點(diǎn)擊類型會被測試
    ??/// </summary>
    ??public ESRI.ArcGIS.Geometry.esriGeometryHitPartType HitPartType
    ??{
    ???get
    ???{
    ????// TODO:? 添加 DefaultFeatureSnapAgent.HitPartType getter 實(shí)現(xiàn)
    ????return m_hitPartType;
    ???}
    ???set
    ???{
    ????
    ????m_hitPartType=value;
    ???}
    ??}

    ??/// <summary>
    ??///? 創(chuàng)建緩沖區(qū)對象。
    ??/// </summary>
    ??private void CreateFeatureCache()
    ??{
    ???m_featureCache=new ESRI.ArcGIS.Carto.FeatureCacheClass();
    ???m_bCacheHasCreated=true;
    ??}
    ??/// <summary>
    ??///? 填充緩沖區(qū)。如果還沒有創(chuàng)建緩沖區(qū)對象,就先創(chuàng)建緩沖區(qū)對象。
    ??///? 如果已經(jīng)擁有緩沖區(qū),而且當(dāng)前點(diǎn)依然在該緩沖區(qū)內(nèi)部,那么不會填充生成新的緩沖。
    ??///? 由于緩沖是在捕捉方法內(nèi)部被使用的。所以可以保證m_featureClass必然不會為空引用。
    ??/// </summary>
    ??/// <param name="point">當(dāng)前點(diǎn)</param>
    ??/// <param name="size">緩沖區(qū)大小</param>
    ??private void FillCache(IPoint point,double size)
    ??{
    ???if(!m_bCacheHasCreated)
    ???{
    ????CreateFeatureCache();
    ???}
    ???if(!m_featureCache.Contains (point))
    ???{
    ????m_featureCache.Initialize(point,size);
    ????m_featureCache.AddFeatures(this.m_featureClass);
    ???}
    ??}
    ??/// <summary>
    ??/// 添加事件偵聽者。捕捉發(fā)生后,事件將會被發(fā)送到該偵聽者。
    ??/// </summary>
    ??/// <param name="handler"></param>
    ??public void AddSnapedEventHandler(GeometrySnapedEventHandler handler)
    ??{
    ???m_snapSubsciber+=handler;
    ??}
    ??/// <summary>
    ??/// 移去事件偵聽者。
    ??/// </summary>
    ??/// <param name="handler"></param>
    ??public void RemoveSnapedEventHandler(GeometrySnapedEventHandler handler)
    ??{

    ???m_snapSubsciber-=handler;
    ??}
    ??#endregion
    ??#region ISnapAgent 成員
    ??private string m_snapAgentName;
    ??/// <summary>
    ??/// SnapAgent是否在工作。代表用戶是打開還是關(guān)閉了SnapAgent
    ??/// 初始化的時候默認(rèn)是打開的。
    ??/// </summary>
    ??private bool?? m_isSnapWorking;
    ??public string Name
    ??{
    ???get
    ???{
    ????return m_snapAgentName;
    ???}
    ??}
    ??public bool IsWorking()
    ??{
    ???return this.m_isSnapWorking ;
    ??}
    ??/// <summary>
    ??///? 捕捉。
    ??/// </summary>
    ??/// <param name="metry"></param>
    ??/// <param name="snapPoint"></param>
    ??/// <param name="tolerance"></param>
    ??/// <returns></returns>
    ??public virtual bool Snap(IGeometry metry, IPoint snapPoint, double tolerance)
    ??{
    ???/*
    ??? * 捕捉的過程:
    ??? * 首先使用當(dāng)前位置、目標(biāo)圖層、和誤差的10倍構(gòu)造一個緩沖區(qū)。
    ??? * 對緩沖區(qū)中的每個Feature,找到他包含的每一個Geometry。
    ??? * 對Geometry做點(diǎn)擊測試。
    ??? */
    ???if(!this.m_isSnapWorking)
    ???{
    ????//捕捉代理已經(jīng)被用戶關(guān)閉了。不會有任何捕捉動作發(fā)生
    ????return false;
    ???}
    ???if(m_featureClass==null)
    ???{
    ????//沒有目標(biāo)圖層。不能做捕捉動作。此時應(yīng)該報錯
    ????//但是目前只是返回false。
    ????return false;
    ???}
    ???FillCache(snapPoint,tolerance*10);
    ???//當(dāng)前被測試的Feature
    ???IFeature??????????? feature=null;
    ???//當(dāng)前被測試的幾何圖形
    ???IGeometry?????????? curMetry=null;
    ???//當(dāng)前被測試的Feature的索引和緩沖區(qū)中擁有的feature的個數(shù)。
    ???int featureIndex,featureCount;
    ???featureCount=m_featureCache.Count;
    ???for(featureIndex=0;featureIndex<featureCount;featureIndex++)
    ???{
    ????feature=m_featureCache.get_Feature(featureIndex);
    ????if(feature!=null)
    ????{
    ?????curMetry=feature.Shape;
    ?????IPoint hitPoint=new ESRI.ArcGIS .Geometry.PointClass ();
    ?????double hitDist=0;
    ?????int hitPartIndex=-1;
    ?????bool bRightSide=false;
    ?????int hitSegmentIndex=-1;
    ?????IHitTest hitTest=(IHitTest)curMetry;
    ?????if(hitTest.HitTest (snapPoint,tolerance,this.m_hitPartType,hitPoint,ref hitDist
    ??????,ref hitPartIndex,ref hitSegmentIndex,ref bRightSide))
    ?????{

    ??????GeometrySnapEventArgs args=new GeometrySnapEventArgs (hitPoint,curMetry,
    ???????feature,this.m_featureClass,hitPartIndex,hitSegmentIndex,tolerance,
    ???????hitDist,this.m_hitPartType,bRightSide);
    ??????SetFeedback("FeatureSnapAgent"+this.Name+"捕捉到了!");
    ??????LaunchSnapEvent(args);??
    ??????snapPoint.X=hitPoint.X;
    ??????snapPoint.Y=hitPoint.Y;
    ??????return true;
    ?????}
    ?????
    ?????
    ?????
    ?????
    ????}
    ???}

    ???
    ???return false;
    ??}
    ??
    ??/// <summary>
    ??/// 打開捕捉代理
    ??/// </summary>
    ??public void TurnOn()
    ??{
    ???this.m_isSnapWorking=true;
    ??}
    ??/// <summary>
    ??/// 關(guān)閉捕捉代理
    ??/// </summary>
    ??public void TurnOff()
    ??{
    ???this.m_isSnapWorking =false;
    ??}
    ??private void LaunchSnapEvent(SnapEventArgs args)
    ??{
    ???
    ???if(this.m_snapSubsciber!=null&&args!=null)
    ???{
    ????this.m_snapSubsciber(this,args);
    ???}
    ??}
    ??#endregion
    ??#region Object 成員
    ??/// <summary>
    ??/// 名字是一個agent的唯一標(biāo)志。
    ??/// </summary>
    ??/// <param name="obj"></param>
    ??/// <returns></returns>
    ??public override bool Equals(object obj)
    ??{
    ???if(! (obj is DefaultFeatureSnapAgent))
    ???{
    ????return false;
    ???}
    ???DefaultFeatureSnapAgent agent=(DefaultFeatureSnapAgent)obj;
    ???return this.m_snapAgentName.Equals(agent.m_snapAgentName);
    ???
    ??}
    ??
    ??public override int GetHashCode()
    ??{
    ???return this.m_snapAgentName.GetHashCode();
    ??}
    ??#endregion
    ??#region IEditEvents 成員

    ??public void AfterDrawSketch(IObject obj)
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.AfterDrawSketch 實(shí)現(xiàn)
    ??}

    ??public void OnChangeFeature(IObject obj)
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnChangeFeature 實(shí)現(xiàn)
    ??}

    ??public void OnConflictsDetected()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnConflictsDetected 實(shí)現(xiàn)
    ??}

    ??public void OnCreateFeature(IObject obj)
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnCreateFeature 實(shí)現(xiàn)
    ??}

    ??public void OnCurrentLayerChanged()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnCurrentLayerChanged 實(shí)現(xiàn)
    ??}

    ??public void OnCurrentTaskChanged()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnCurrentTaskChanged 實(shí)現(xiàn)
    ??}

    ??public void OnDeleteFeature(IObject obj)
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnDeleteFeature 實(shí)現(xiàn)
    ??}

    ??public void OnRedo()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnRedo 實(shí)現(xiàn)
    ??}

    ??public void OnSelectionChanged()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnSelectionChanged 實(shí)現(xiàn)
    ??}

    ??public void OnSketchFinished()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnSketchFinished 實(shí)現(xiàn)
    ??}

    ??public void OnSketchModified()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnSketchModified 實(shí)現(xiàn)
    ??}

    ??public void OnStartEditing()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnStartEditing 實(shí)現(xiàn)
    ??}

    ??public void OnStopEditing(Boolean save)
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnStopEditing 實(shí)現(xiàn)
    ??}

    ??public void OnUndo()
    ??{
    ???// TODO:? 添加 DefaultFeatureSnapAgent.OnUndo 實(shí)現(xiàn)
    ??}

    ??#endregion
    ??#region ISnapFeedback 成員
    ??private string m_snapFeedbackText;
    ??public string SnapText
    ??{
    ???get
    ???{
    ????return this.m_snapFeedbackText;
    ???}
    ??}
    ??private void SetFeedback(string feedback)
    ??{
    ???this.m_snapFeedbackText=feedback;
    ??}
    ??#endregion
    ??#region IPersistVariant 成員
    ??public ESRI.ArcGIS .esriSystem .UID? ID
    ??{
    ???get
    ???{
    ????ESRI.ArcGIS .esriSystem .UID uid=new ESRI.ArcGIS .esriSystem .UIDClass ();
    ????uid.Value ="ls.gis.Editor.DefaultFeatureSnapAgent"+this.m_snapAgentName;
    ????return uid;
    ???}
    ??}
    ??public void Load(ESRI.ArcGIS .esriSystem .IVariantStream vs)
    ??{
    ???this.m_snapAgentName =(string)vs.Read ();
    ???this.m_isSnapWorking =(bool)vs.Read ();
    ???string hitPartStr=(string)vs.Read ();
    ???this.m_hitPartType =(esriGeometryHitPartType)Enum.Parse (this.m_hitPartType .GetType (),hitPartStr,false);
    ???bool hasFeatureClass=(bool)vs.Read ();
    ???if(hasFeatureClass)
    ???{
    ????ESRI.ArcGIS .esriSystem .IName name=(ESRI.ArcGIS .esriSystem .IName)vs.Read ();
    ????this.m_featureClass =(IFeatureClass)name.Open ();
    ???}
    ??}
    ??public void Save(ESRI.ArcGIS .esriSystem .IVariantStream vs)
    ??{
    ???vs.Write (this.m_snapAgentName);
    ???vs.Write (this.m_isSnapWorking );
    ???vs.Write (this.m_hitPartType.ToString ());
    ???if(this.m_featureClass !=null)
    ???{
    ????vs.Write (true);
    ????IDataset dataset=(IDataset)this.m_featureClass ;
    ????vs.Write (dataset.FullName );
    ???}
    ???else
    ???{
    ????vs.Write (false);
    ???}
    ???

    ??}
    ??#endregion
    ??
    ?}


    ?public class DefaultSnapAgentEnvironment:ISnapAgentEnvironment
    ?{
    ??private double???? m_tolerance;
    ??private SnapToleranceUnit?? m_snapToleranceUnit;
    ??private ArrayList? m_snapAgentArray;
    ??/// <summary>
    ??/// 用于轉(zhuǎn)換誤差單位
    ??/// </summary>
    ??private IActiveView m_activeView;
    ??/// <summary>
    ??/// 如果誤差單位為地圖單位,那么可以調(diào)用這個構(gòu)造函數(shù)。
    ??/// 如果誤差單位為象素。那么應(yīng)該調(diào)用有參數(shù)的構(gòu)造方法。
    ??/// 如果在調(diào)用時不能確定參數(shù)activeView,那么也可以先調(diào)用該方法構(gòu)造對象。
    ??/// 然后用屬性ActiveView來設(shè)置該參數(shù)的值。
    ??/// </summary>
    ??public DefaultSnapAgentEnvironment():this(null)
    ??{
    ???
    ??}
    ??public DefaultSnapAgentEnvironment(IActiveView activeView)
    ??{
    ???m_snapAgentArray=new ArrayList ();
    ???m_tolerance=7;
    ???m_snapToleranceUnit=SnapToleranceUnit.UnitPixels;
    ???this.m_activeView=activeView;
    ??}
    ??/// <summary>
    ??///? 用于轉(zhuǎn)換誤差的單位。如果沒有設(shè)置,或者設(shè)置為null,
    ??///? 那么誤差的單位將不會被轉(zhuǎn)換,而直接被認(rèn)為是地圖單位。
    ??/// </summary>
    ??public IActiveView ActivView
    ??{
    ???set
    ???{
    ????this.m_activeView=value;
    ???}
    ???get
    ???{
    ????return this.m_activeView;
    ???}
    ??}
    ??#region ISnapAgentEnvironment 成員??

    ??public void AddSnapAgent(ISnapAgent agent)
    ??{
    ???if(agent==null)
    ???{
    ????return;
    ???}
    ???if(this.m_snapAgentArray.Contains(agent))
    ???{
    ????return;
    ???}
    ???this.m_snapAgentArray.Add(agent);
    ??}

    ??public void ClearSnapAgent()
    ??{
    ???this.m_snapAgentArray.Clear();
    ??}
    ??/// <summary>
    ??/// 如果索引越界,那么返回null,而不會拋出異常。
    ??/// </summary>
    ??/// <param name="index"></param>
    ??/// <returns></returns>
    ??public ISnapAgent GetSnapAgent(int index)
    ??{
    ???if(index<this.m_snapAgentArray.Count&&index>=0)
    ???{
    ????return (ISnapAgent)this.m_snapAgentArray[index];
    ???}
    ???else
    ???{
    ????return null;
    ???}
    ??}
    ??/// <summary>
    ??/// 如果不存在,回返回null
    ??/// </summary>
    ??/// <param name="name"></param>
    ??/// <returns></returns>
    ??ISnapAgent ls.gis.Editor.ISnapAgentEnvironment.GetSnapAgent(string name)
    ??{
    ???ISnapAgent retAgent=null;
    ???int retAgentIndex=-1;
    ???for(int index=0; index<this.m_snapAgentArray.Count;index++)
    ???{
    ????retAgent=(ISnapAgent)this.m_snapAgentArray[index];
    ????if(retAgent.Name.Equals(name))
    ????{
    ?????retAgentIndex=index;
    ?????break;
    ????}
    ???}
    ???return GetSnapAgent(retAgentIndex);
    ??}

    ??public void RemoveSnapAgent(string name)
    ??{
    ???ISnapAgent retAgent=null;
    ???int retAgentIndex=-1;
    ???for(int index=0; index<this.m_snapAgentArray.Count;index++)
    ???{
    ????retAgent=(ISnapAgent)this.m_snapAgentArray[index];
    ????if(retAgent.Name.Equals(name))
    ????{
    ?????retAgentIndex=index;
    ?????break;
    ????}
    ???}
    ???this.RemoveSnapAgent(retAgentIndex);
    ??}
    ??/// <summary>
    ??///
    ??/// </summary>
    ??/// <param name="index"></param>
    ??public void RemoveSnapAgent(int index)
    ??{
    ???if(index<0||index>=this.m_snapAgentArray.Count)
    ???{
    ????return ;
    ???}
    ???this.m_snapAgentArray.RemoveAt(index);
    ??}

    ??public bool SnapPoint(IPoint point)
    ??{
    ???for(int index=0;index<this.m_snapAgentArray.Count;index++)
    ???{
    ????ISnapAgent agent=(ISnapAgent)this.m_snapAgentArray[index];
    ????if(agent.Snap(null,point,ConvertTolerance(this.m_tolerance)))
    ????{??????
    ?????return true;
    ????}
    ???}
    ???return false;
    ??}

    ??public int SnapAgentCount
    ??{
    ???get
    ???{
    ????// TODO:? 添加 FeatureSnapAgentEnvironment.SnapAgentCount getter 實(shí)現(xiàn)
    ????return this.m_snapAgentArray.Count;
    ???}
    ??}

    ??public double SnapAgentTolerance
    ??{
    ???get
    ???{
    ????// TODO:? 添加 FeatureSnapAgentEnvironment.SnapAgentTolerance getter 實(shí)現(xiàn)
    ????return this.m_tolerance;
    ???}
    ???set
    ???{
    ????this.m_tolerance=value;
    ???}
    ??}
    ??public SnapToleranceUnit SnapToleranceUnit
    ??{
    ???get
    ???{
    ????return this.m_snapToleranceUnit;
    ???}
    ???set
    ???{
    ????this.m_snapToleranceUnit=value;
    ???}
    ??}
    ??
    ??#endregion
    ??private double ConvertTolerance(double tolerance)
    ??{
    ???double retValue=tolerance;
    ???if(this.m_activeView ==null)
    ???{
    ????//不能做轉(zhuǎn)換
    ????retValue=tolerance;
    ???}
    ???else
    ???{
    ????if(this.m_snapToleranceUnit.Equals (SnapToleranceUnit.UnitPixels))
    ????{
    ?????//需要轉(zhuǎn)換
    ?????retValue=ls.gis.Common .CommonCooperation.ConvertPixelsToMapUnits (this.m_activeView ,tolerance);
    ????}
    ????else
    ????{?//不需要轉(zhuǎn)換
    ?????retValue=tolerance;
    ????}
    ???}
    ???return retValue;
    ??}
    ??private double ConvertTolerance()
    ??{
    ???return this.ConvertTolerance (this.m_tolerance);
    ??}
    ??

    ?}


    評論

    # re: ArcEngine中實(shí)現(xiàn)捕捉功能  回復(fù)  更多評論   

    2008-01-23 16:21 by cai_zd
    ISnapAgent在ArcEngine中沒有找到

    # re: ArcEngine中實(shí)現(xiàn)捕捉功能  回復(fù)  更多評論   

    2009-01-08 12:34 by ddddddd
    一大堆接口都不是AE里的
    應(yīng)該叫“ArcObjects中實(shí)現(xiàn)捕捉功能”
    主站蜘蛛池模板: 日韩免费电影网站| 在线观看人成网站深夜免费| 亚洲导航深夜福利| 日本高清色本免费现在观看| www成人免费观看网站| 久久午夜无码免费| 亚洲日韩国产精品乱-久| 亚洲国产成人精品91久久久| 欧洲人成在线免费| 大桥未久亚洲无av码在线| **毛片免费观看久久精品| 亚洲AV无码不卡无码| 成人毛片免费观看视频大全| 一区二区免费国产在线观看| 亚洲国产成人久久综合野外| 久久综合给合久久国产免费 | 免费毛片在线视频| 亚洲女子高潮不断爆白浆| 亚洲色欲一区二区三区在线观看| 免费在线视频你懂的| 亚欧国产一级在线免费| 国内精品久久久久影院亚洲| 亚洲精品国产成人片| 无码国产精品一区二区免费式芒果 | 91亚洲自偷手机在线观看| 国产无遮挡色视频免费视频| 瑟瑟网站免费网站入口| 亚洲精品无码鲁网中文电影| 午夜成人免费视频| 19禁啪啪无遮挡免费网站| selaoban在线视频免费精品| 亚洲综合一区二区三区四区五区 | 亚洲免费视频网址| 97人伦色伦成人免费视频| 老司机福利在线免费观看| 亚洲一级毛片免费看| 免费a在线观看播放| 国产va在线观看免费| 黄色网址免费在线观看| 猫咪免费人成在线网站| 亚洲午夜精品一区二区麻豆|