天天看點

Arcengine制圖表達的一些了解

Arcgis的制圖表達博大精深,首先是一個圖層轉換為制圖表達圖層,其中的每一個要素都會綁定一個規則ID(Rule_id),

那麼在arcengine中,我們如何去編輯制圖表達呢?

首先選中制圖表達就成了一個問題,因為如果表達有幾何覆寫,也就是表達和資料(Feature)的位置不在一起,甚至偏移很大,普通選擇Element的方法根本無法選中它,

我們是借助影子表

根據圖層得到表達

private IRepresentationClass getRepClassByLayer ( IGeoFeatureLayer pGeoFeatureLayer )

{

 if(pGeoFeatureLayer .Renderer is RepresentationRenderer )

  {

              IRepresentationRenderer  pRepresentationRenderer = (IRepresentationRenderer   )pGeoFeatureLayer .Renderer ;

             return  pRepresentationRenderer .RepresentationClass 

  }

}

然後再根據 IRepresentationClass.GetRepresentation即可獲得要素的表達

每一個RepResentation 都有一個Feature 和一個shape ,這個shape是表達的幾何圖形 ,不是要素的幾何圖形

那麼表達的編輯是如何的呢

首先說一下表達的幾何編輯

幾何編輯比較簡單,說白了就是編輯Representation的shape;

如果是自由制圖表達,則編輯其IRepresentationGraphics

編輯就用ITransform2D接口,即可完成縮放、移動、旋轉

下面說一聲屬性編輯,每一個制圖表達可能有多個規則,每一個規則都有對應的ID,

IRepresentationClass.RepresentationRules 獲得所有的規則;

每一個規則對應了很多個Layer, 幹脆叫規則圖層

規則圖層分 Marker,Line,Filll

這裡涉及到IBasicSymbol接口 以及其三個實作類 BasicFillSymbol,BasicLineSymbol,BasicMarkerSymbol

BasicMarkerSymbol:

在設定基本屬性時将 BasicMarkerSymbol直接轉換成 IGraphicAttributes  然後 IGraphicAttributes  的SetValue 即可設定屬性值

其中BasicMarker的屬性值ID時從 1 開始,其他的都由 0  開始;

BasicFillSymbol,BasicLineSymbol :

都有固定屬性FillPattern/Stroke 用于設定屬性 和 Marker一樣

将FillPattern/Stroke 轉換成IGraphicAttributes 然後設定其屬性值

說完基礎符号,接下來是幾何效果

每一個BasicSymbol 都可以存儲多個幾何效果 IGeometricEffect,IGeometricEffect接口的實作類包含所有的幾何效果,詳細檢視幫助;

怎麼樣将幾何效果添加到規則呢?

IGeometricEffects pGeometricEffects=pBasicSymbol as IGeometricEffects ;

IGeometricEffect pGeometricEffect=new  GeometricEffectCut();//任意一個幾何效果

IGraphicAttribute pGraphicAttribute=pGeometricEffect as IGraphicAttribute ;

pGraphicAttribute.SetValue(1,?);//設定幾何效果的屬性值

pGeometricEffects.Add(pGeometricEffect);

執行個體化IRepresentationRule,調用InsterLayer方法 添加BasicSymbol;

這樣一條簡單的規則就完成了

如何将制定好的規則賦給圖層呢?

1、非自由制圖表達 調用 IRepresentationWorkspaceExtension 的 CreateRepresentationClass方法 給圖層設定表達;如果它已經存在制圖表達則先删除;

2、自由制圖表達,首先調用IRepresentaionGraphic的Next方法找出所有的幾何圖形,記錄下IGeometric,然後用Remove方法删除它,并用新的規則Rule重新添加,

執行所有的Representation都要執行IRepresentation.UpdateFeature()和IRepresentation.Feature.Store();

2017年5月25日16:40:15 新增

發現選擇制圖表達新方法 : IRepresentationRenderer->IIdentify

繼續閱讀