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