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

猜你喜欢

转载自blog.csdn.net/bdbox/article/details/79897824