1、IRender相關的對象都是由AxRenderControl.ObjectManager進行管理的(創建、刪除、刷新等)。IFeatureLayer也屬於IRender的子類。
如:
RenderControlServices.Instance().AxRenderControl.ObjectManager.DeleteObject(oldFLayer.Guid);
獲取某個渲染對象的方法:
IRObject obj = RenderControlServices.Instance().AxRenderControl.ObjectManager.GetObjectById(rootGuid);
2、ProjectTree由兩種方式共同控制:RenderControlServices.Instance().AxRenderControl.ProjectTree與DevExpress組件的TreeListNode(通過ProjectTreeServices.ProjectTree獲取)
1)通過ProjectTreeServices.ProjectTree可以獲取到TreeList,從而得到node,得到了node,就可以向上或向下獲取其他。
2)TreeListNode 存儲有四類數值:
node.GetValue(0)得到名稱;
node.GetValue(1)得到節點類型;
node.GetValue(2)得到該節點對應的對象值;
node.GetValue(2).ToString()得到GUID的字符串類型,從而得到GUID
節點類型TreeNodeType分爲TreeNodeType.NT_DATASET、TreeNodeType.NT_GROUP、TreeNodeType.NT_FEATURELAYER等
使用方法:
TreeNodeType nodeType = (TreeNodeType)node.GetValue(1);
3)通過GUID將RenderControlServices.Instance().AxRenderControl.ProjectTree與TreeListNode關聯起來。
4) 更新節點值只需要SetValue就可以;
5)ProjectTreeServices.GetSelectedTreeNodesGuid()獲取選中的節點的GUID;
6)如何獲取根節點的Guid?
Guid rootID = RenderControlServices.Instance().AxRenderControl.ProjectTree.RootID;
3、你必須自己維護兩棵樹。
4
、創建的渲染對象,在connect二次開發時,需要使用ProjectTreeService將渲染對象創建到圖層樹上,否則圖層樹上出不來:ProjectTreeServices.CreateRenderObject(newGroupGuid, modifier);
5、ProjectTreeServices裏有對node的一些常用操作方法,對RenderControlServices.Instance().AxRenderControl.ProjectTree與DevExpress組件的TreeListNode混雜操作,你就不必擔心兩棵樹的同步問題了,還是很方便的。如:
ProjectTreeServices.CreateRenderObject(fdsGroupGuid, newFLayer, true);
ProjectTreeServices.CreateGroup;
ProjectTreeServices.LockGroup;
注意:ProjectTreeServices.LockGroup;最好是操作完成最後再調用,否則無法摺疊!Lock即摺疊!以下操作方法是錯誤的:
//string path = string.Empty;
//Guid tempGuid = newGroupGuid;
//while (tempGuid != RenderControlServices.Instance().AxRenderControl.ProjectTree.RootID)
//{
// path = RenderControlServices.Instance().AxRenderControl.ProjectTree.GetItemName(tempGuid) + "\\";
//}
//ProjectTreeServices.ProjectTree.FindNodeByKeyID(newGroupGuid).Expanded = false;
6、通過ProjectTreeServices是顯示在圖層樹上的,也就是說,如果只用AxRenderControl.ObjectManager創建的對象,並不會自動顯示在圖層樹上。
modifier = RenderControlServices.Instance().AxRenderControl.ObjectManager.CreateTerrainModifier(polygon as IPolygon, guid);
ProjectTreeServices.CreateRenderObject(newGroupGuid, modifier);
樹木的界面表現還必須使用TreeListNode來操作,但是建議還是使用ProjectTreeServices定義的相關方法來做。
7、知道某一節點Guid,獲取父節點及兄弟節點:
AxRenderControl.ProjectTree.GetNextItem(currentGuid, gviItemCode.gviItemCodeParent)
gviItemCodeChild | 當前節點的第一個孩子節點 |
gviItemCodeFirstVisible | 樹上第一個可見節點 |
gviItemCodeNext | 當前節點後相鄰的兄弟節點 |
gviItemCodeNextVisible | 當前節點後相鄰的可見兄弟節點 |
gviItemCodeParent | 當前節點的父親節點 |
gviItemCodePrevious | 當前節點前相鄰的兄弟節點 |
gviItemCodePreviousVisible | 當前節點前相鄰的可見兄弟節點 |
gviItemCodeRoot | 樹的根節點 |
歡迎批評指正,轉載請註明出處和作者QQ:3133952829