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 |
树的根节点 |
欢迎批评指正,转载请注明出处和作者
---------------------------------------------------------------------------
承接CityMaker各类二次开发、数据生产、数据加工处理等服务。
有意者请联系QQ:[email protected]