citymaker connect 8 插件式開發總結之圖層樹

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章