private void processRelates(IFeatureLayer flyr) { string res = ""; string destName = ""; string destServer = ""; string destInstance = ""; string destUser = ""; IRelationshipClassCollection relClassColl = (IRelationshipClassCollection)flyr; IEnumRelationshipClass enumRelClass = relClassColl.RelationshipClasses; enumRelClass.Reset(); IRelationshipClass relClass = enumRelClass.Next(); while (relClass != null) { IDataset dset = (IDataset)relClass; ITable destTable = (ITable)relClass.DestinationClass; IDataset dsetDest = (IDataset)destTable; destName = dsetDest.Name; destServer = dsetDest.Workspace.ConnectionProperties.GetProperty("server").ToString(); destInstance = dsetDest.Workspace.ConnectionProperties.GetProperty("instance").ToString(); destUser = dsetDest.Workspace.ConnectionProperties.GetProperty("user").ToString(); res = res + "(" + destName + "/" + destServer + "/" + destInstance + "/" + destUser + "/" + relClass.OriginPrimaryKey + "/" + relClass.OriginForeignKey + "/" + dset.BrowseName + ")"; relClass = enumRelClass.Next(); } relateinfo = res; }
public void Refresh() { TableList.Clear(); RelationLookup.Clear(); IMap aMap = ArcMap.Document.FocusMap as IMap; IMapLayers2 layers = ArcMap.Document.FocusMap as IMapLayers2; IEnumLayer someLayers = layers.Layers; ILayer aLayer = null; while ((aLayer = someLayers.Next()) != null) { IFeatureLayer2 someFeatlayer = aLayer as IFeatureLayer2; if (someFeatlayer != null) { IFeatureClass featClass = someFeatlayer.FeatureClass as IFeatureClass; if (featClass != null) { IEnumRelationshipClass someRelationships = featClass.RelationshipClasses[esriRelRole.esriRelRoleAny] as IEnumRelationshipClass; if (someRelationships != null) { IRelationshipClass aRelationship = someRelationships.Next(); while (aRelationship != null) { Debug.WriteLine(aRelationship.OriginClass.AliasName + " <--> " + aRelationship.DestinationClass.AliasName); IDataset aDataset = aRelationship.OriginClass as IDataset; IDataset anotherDataset = aRelationship.DestinationClass as IDataset; AddDataset(new IDataset[] { aDataset, anotherDataset }); IDataset aDS = featClass as IDataset; if (aDS != null) { Debug.WriteLine(aDS.Name + "," + aDataset.Name + "," + anotherDataset.Name); string name = aDS.Name.Equals(aDataset.Name, StringComparison.InvariantCultureIgnoreCase) ? anotherDataset.Name : aDataset.Name; if (RelationLookup.ContainsKey(name)) { RelationLookup[name].Add(aRelationship); } else { RelationLookup.Add(name, new List <IRelationshipClass>() { aRelationship }); } } aRelationship = someRelationships.Next(); } } } } } TableList.Sort((a, b) => a.TableName.CompareTo(b.TableName)); }
/// <summary> /// Creates an <see cref="IEnumerable{T}" /> from an <see cref="IEnumRelationshipClass" /> /// </summary> /// <param name="source">An <see cref="IEnumRelationshipClass" /> to create an <see cref="IEnumerable{T}" /> from.</param> /// <returns>An <see cref="IEnumerable{T}" /> that contains the relationship classes from the input source.</returns> public static IEnumerable <IRelationshipClass> AsEnumerable(this IEnumRelationshipClass source) { if (source != null) { source.Reset(); IRelationshipClass relationshipClass = source.Next(); while (relationshipClass != null) { yield return(relationshipClass); relationshipClass = source.Next(); } } }
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { //在地块图层获得关系类 IFeatureClass pFeatClass = pParcelFeatLayer.FeatureClass; IObjectClass pObjectClass = pFeatClass as IObjectClass; IEnumRelationshipClass pEnumRelationshipClass = pObjectClass.get_RelationshipClasses(esriRelRole.esriRelRoleOrigin); pEnumRelationshipClass.Reset(); IRelationshipClass pRelationshipClass = pEnumRelationshipClass.Next(); IRow pOwnerRow; IFeature pParcelFeature; AxMapControl axMap = pMainFrm.getMapControl(); for (int i = 0; i <= pFeatArray.Count - 1; i++) { pParcelFeature = pFeatArray.get_Element(i) as IFeature; ISet pRelatedSet = pRelationshipClass.GetObjectsRelatedToObject(pParcelFeature); pRelatedSet.Reset(); pOwnerRow = pRelatedSet.Next() as IRow; if (pOwnerRow != null) { if (pOwnerRow.get_Value(pOwnerRow.Fields.FindField("TMK")).ToString() == e.Item.Text) { Utility.FlashFeature(pParcelFeature, axMap.ActiveView.FocusMap); break; } } } }
public static bool TableIsRelateLayer(ITable itable_0, ITable itable_1) { try { IRelationshipClassCollection classs = itable_0 as IRelationshipClassCollection; if (classs != null) { IEnumRelationshipClass class2 = classs.FindRelationshipClasses(itable_1 as IObjectClass, esriRelRole.esriRelRoleAny); class2.Reset(); if (class2.Next() != null) { return(true); } } return(false); } catch (COMException exception) { MessageBox.Show(exception.Message, "COM Error: " + exception.ErrorCode.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } catch (Exception exception2) { MessageBox.Show(exception2.Message, ".NET Error: ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } return(false); }
private void btnRemoveRelating_Click(object sender, EventArgs e) { try { IRelationshipClassCollection classs = this.itable_0 as IRelationshipClassCollection; IEnumRelationshipClass relationshipClasses = classs.RelationshipClasses; relationshipClasses.Reset(); string str = this.RelatingDataList.SelectedItem.ToString(); IRelationshipClass relationshipClass = relationshipClasses.Next(); while (relationshipClass != null) { if (str == (relationshipClass as IDataset).Name) { goto Label_0075; } relationshipClass = relationshipClasses.Next(); } if (this.OnJoinAndRelationChange != null) { this.OnJoinAndRelationChange(); } return; Label_0075: (classs as IRelationshipClassCollectionEdit).RemoveRelationshipClass(relationshipClass); this.RelatingDataList.Items.Clear(); this.method_2(this.itable_0); if (this.RelatingDataList.Items.Count > 0) { this.btnRemoveAllRelating.Enabled = true; } else { this.btnRemoveAllRelating.Enabled = false; } } catch (COMException exception) { MessageBox.Show(exception.Message, "COM Error: " + exception.ErrorCode.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } catch (Exception exception2) { MessageBox.Show(exception2.Message, ".NET Error: ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
private void method_1(IEnumRelationshipClass ienumRelationshipClass_0, IObject iobject_0, TreeNode treeNode_0, bool bool_3) { ienumRelationshipClass_0.Reset(); for (IRelationshipClass class2 = ienumRelationshipClass_0.Next(); class2 != null; class2 = ienumRelationshipClass_0.Next()) { try { IObjectClass destinationClass; if (bool_3) { destinationClass = class2.DestinationClass; } else { destinationClass = class2.OriginClass; } TreeNode node = new TreeNode(destinationClass.AliasName) { Tag = destinationClass }; ISet objectsRelatedToObject = class2.GetObjectsRelatedToObject(iobject_0); objectsRelatedToObject.Reset(); for (IRowBuffer buffer = objectsRelatedToObject.Next() as IRowBuffer; buffer != null; buffer = objectsRelatedToObject.Next() as IRowBuffer) { TreeNode node2 = new TreeNode(buffer.get_Value(0).ToString()) { Tag = buffer }; node.Nodes.Add(node2); } if (node.Nodes.Count > 0) { treeNode_0.Nodes.Add(node); } } catch (Exception exception) { exception.ToString(); } } }
/// <summary> /// 获取与标注对应的关联设备 /// </summary> /// <param name="pAnnoFeature"></param> /// <returns></returns> public static IFeature GetLinkedFeature(IAnnotationFeature2 pAnnoFeature) { // 方法一 IFeature pFeature = (IFeature)pAnnoFeature; IFeatureClass pfClass = (IFeatureClass)pFeature.Class; IEnumRelationshipClass pEnumRelation = pfClass.get_RelationshipClasses(esriRelRole.esriRelRoleAny); IRelationshipClass pRelationship = pEnumRelation.Next(); if (pRelationship == null) { return(null); } ISet pSet = pRelationship.GetObjectsRelatedToObject(pFeature); if (pSet == null) { return(null); } object o = pSet.Next(); if (o == null || !(o is IFeature)) { return(null); } pFeature = (IFeature)o; return(pFeature); // 方法二 /* * IFeature pFeature = (IFeature)pAnnoFeature; * IFeatureClass pfClass = (IFeatureClass)pFeature.Class; * IEnumRelationshipClass enumRelCls = * pfClass.get_RelationshipClasses(esriRelRole.esriRelRoleAny); * IRelationshipClass pRelationship = enumRelCls.Next(); * if (pRelationship == null) * return null; * * // 注记的FeatureClass * IFeatureClass pDestionClass = (IFeatureClass)pRelationship.OriginClass; * if (pDestionClass == null) * return null; * * string foreignKey = pRelationship.DestinationPrimaryKey; * if (string.IsNullOrEmpty(foreignKey)) * return null; * * pFeature = pDestionClass.GetFeature(pAnnoFeature.LinkedFeatureID); * return pFeature; */ }
/// <summary> /// 获取与要素设置的releationshipclss对应的标注要素 /// </summary> /// <param name="pFeature">地图要素</param> /// <returns>标注要素</returns> public static IAnnotationFeature2 GetLinkedFeature(IFeature pFeature) { // 方法一 IFeatureClass pfClass = (IFeatureClass)pFeature.Class; IEnumRelationshipClass pEnumRelation = pfClass.get_RelationshipClasses(esriRelRole.esriRelRoleAny); IRelationshipClass pRelationship = pEnumRelation.Next(); if (pRelationship == null) { return(null); } ISet pSet = pRelationship.GetObjectsRelatedToObject(pFeature); if (pSet == null) { return(null); } object o = pSet.Next(); if (o == null || !(o is IAnnotationFeature2)) { return(null); } IAnnotationFeature2 pAnnoFeature = (IAnnotationFeature2)o; return(pAnnoFeature); /* * 方法二 * * // 注记的FeatureClass * IFeatureClass pDestionClass = (IFeatureClass)pRelationship.DestinationClass; * if (pDestionClass == null) * return null; * * string foreignKey = pRelationship.OriginForeignKey; * if (string.IsNullOrEmpty(foreignKey)) * return null; * * string where = foreignKey + "='" + pFeature.OID + "'"; * IAnnotationFeature2 pAnnoFeature = * (IAnnotationFeature2)GeometryHelper.SearchFeature(pDestionClass, where); * * return pAnnoFeature; */ }
private void method_2(ITable itable_1) { try { IRelationshipClassCollection classs = itable_1 as IRelationshipClassCollection; IEnumRelationshipClass relationshipClasses = classs.RelationshipClasses; relationshipClasses.Reset(); for (IRelationshipClass class3 = relationshipClasses.Next(); class3 != null; class3 = relationshipClasses.Next()) { this.RelatingDataList.Items.Add(new ObjectWrap(class3)); } } catch (COMException exception) { MessageBox.Show(exception.Message, "COM Error: " + exception.ErrorCode.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } catch (Exception exception2) { MessageBox.Show(exception2.Message, ".NET Error: ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
/// <summary> /// </summary> /// <param name="writer"></param> /// <param name="objectClass"></param> /// <param name="relClasses"></param> /// <param name="parentCursor"></param> private void ExportRelatedObjects(XmlWriter writer, ObjectClass objectClass, IEnumRelationshipClass relClasses, ICursor parentCursor) { IRelationshipClass class2 = relClasses.Next(); IDataset originClass = null; while (class2 != null) { originClass = (IDataset) class2.OriginClass; if (originClass.Name == objectClass.name) break; originClass = (IDataset) class2.DestinationClass; if (originClass.Name == objectClass.name) break; class2 = relClasses.Next(); } if (class2 == null) return; IDisplayTable displayTableFromDatasetName = GetDisplayTableFromDatasetName(originClass.Name); StartExportObjectClass(writer, objectClass, displayTableFromDatasetName); for (IRow row = parentCursor.NextRow(); row != null; row = parentCursor.NextRow()) { ISet objectsRelatedToObject = class2.GetObjectsRelatedToObject(row as IObject); for (var row2 = objectsRelatedToObject.Next() as IRow; row2 != null; row2 = objectsRelatedToObject.Next() as IRow) { ExportRow(writer, objectClass, displayTableFromDatasetName, row2); } } EndExportObjectClass(writer); }
/// <summary> /// 获取与pfClass对应的标注的FeatureClass /// </summary> /// <param name="pfClass">地图要素类,如杆塔</param> /// <returns>对应的标注的FeatureClass</returns> public static IFeatureClass GetLinkedFeatureClass(IFeatureClass pfClass) { IEnumRelationshipClass enumRelCls = pfClass.get_RelationshipClasses(esriRelRole.esriRelRoleAny); IRelationshipClass pRelationship = enumRelCls.Next(); if (pRelationship == null) { return(null); } // 注记的FeatureClass IFeatureClass pDestionClass = (IFeatureClass)pRelationship.DestinationClass; return(pDestionClass); }
//上朔追踪列出所有地块 private void UpstreamCreateOwnerList(IFeatureLayer pParcelFeatLayer, IArray pFeatArray) { listView1.Columns.Clear(); listView1.Items.Clear(); listView1.Columns.Add("物主", 50, HorizontalAlignment.Left); listView1.Columns.Add("地址", 50, HorizontalAlignment.Center); listView1.Columns.Add("街道", 50, HorizontalAlignment.Center); listView1.Columns.Add("城市", 50, HorizontalAlignment.Center); listView1.Columns.Add("邮编", 50, HorizontalAlignment.Center); //在地块图层获得关系类 IFeatureClass pFeatClass = pParcelFeatLayer.FeatureClass; IObjectClass pObjectClass = pFeatClass as IObjectClass; IEnumRelationshipClass pEnumRelationshipClass = pObjectClass.get_RelationshipClasses(esriRelRole.esriRelRoleOrigin); pEnumRelationshipClass.Reset(); IRelationshipClass pRelationshipClass = pEnumRelationshipClass.Next(); IRow pOwnerRow; for (int i = 0; i <= pFeatArray.Count - 1; i++) { IFeature pParcelFeature = pFeatArray.get_Element(i) as IFeature; ISet pRelatedSet = pRelationshipClass.GetObjectsRelatedToObject(pParcelFeature); pRelatedSet.Reset(); pOwnerRow = pRelatedSet.Next() as IRow; if (pOwnerRow != null) { ListViewItem item = new ListViewItem(); item.SubItems.Clear(); item.SubItems[0].Text = pOwnerRow.get_Value(pOwnerRow.Fields.FindField("TMK")).ToString(); item.SubItems.Add(pOwnerRow.get_Value(pOwnerRow.Fields.FindField("ADDR")).ToString()); item.SubItems.Add(pOwnerRow.get_Value(pOwnerRow.Fields.FindField("STREET")).ToString()); item.SubItems.Add(pOwnerRow.get_Value(pOwnerRow.Fields.FindField("CITY")).ToString()); item.SubItems.Add(pOwnerRow.get_Value(pOwnerRow.Fields.FindField("ZIP")).ToString()); listView1.Items.Add(item); } } }
/// <summary> /// 创建图形要素和标注要素之间的关联关系[使用前确保要素层与标注层,确实存在关联关系] /// </summary> /// <param name="OriginObject">图形要素</param> /// <param name="DestinationObject">标注要素</param> /// <returns></returns> public static IRelationship CreateRelationship(IFeature OriginObject, IAnnotationFeature2 DestinationObject) { IFeatureClass pfClass = (IFeatureClass)OriginObject.Class; IEnumRelationshipClass pEnumRelation = pfClass.get_RelationshipClasses(esriRelRole.esriRelRoleAny); IRelationshipClass pRelationship = pEnumRelation.Next(); if (pRelationship == null) { return(null); } IRelationship pRelation = null; pRelation = pRelationship.CreateRelationship((IObject)OriginObject, (IObject)DestinationObject); return(pRelation); //IObject OriginObject, IObject DestinationObject }
private void method_3(IFeature ifeature_2, TreeNode treeNode_0) { IObjectClass destinationClass; TreeNode node; IEnumRelationship relationshipsForObject; IRelationship relationship2; TreeNode node2; IEnumRelationshipClass class2 = ifeature_2.Class.get_RelationshipClasses(esriRelRole.esriRelRoleOrigin); class2.Reset(); IRelationshipClass class3 = class2.Next(); while (true) { if (class3 == null) { break; } try { destinationClass = class3.DestinationClass; node = new TreeNode(destinationClass.AliasName) { Tag = destinationClass }; relationshipsForObject = class3.GetRelationshipsForObject(ifeature_2); relationshipsForObject.Reset(); relationship2 = relationshipsForObject.Next(); while (relationship2 != null) { if (relationship2.DestinationObject != null) { node2 = new TreeNode(relationship2.DestinationObject.OID.ToString()) { Tag = relationship2.DestinationObject }; node.Nodes.Add(node2); } relationship2 = relationshipsForObject.Next(); } if (node.Nodes.Count > 0) { treeNode_0.Nodes.Add(node); } } catch { } class3 = class2.Next(); } class2 = ifeature_2.Class.get_RelationshipClasses(esriRelRole.esriRelRoleDestination); class2.Reset(); for (class3 = class2.Next(); class3 != null; class3 = class2.Next()) { destinationClass = class3.OriginClass; node = new TreeNode(destinationClass.AliasName) { Tag = destinationClass }; relationshipsForObject = class3.GetRelationshipsForObject(ifeature_2); relationshipsForObject.Reset(); for (relationship2 = relationshipsForObject.Next(); relationship2 != null; relationship2 = relationshipsForObject.Next()) { if (relationship2.OriginObject != null) { node2 = new TreeNode(relationship2.OriginObject.OID.ToString()) { Tag = relationship2.OriginObject }; node.Nodes.Add(node2); } } if (node.Nodes.Count > 0) { treeNode_0.Nodes.Add(node); } } }
private void AddReleationClass(IFeature pFeature, TreeNode pParentNode) { IRelationshipClass class3; IObjectClass destinationClass; TreeNode node; IEnumRelationship relationshipsForObject; IRelationship relationship2; TreeNode node2; IEnumRelationshipClass class2 = pFeature.Class.get_RelationshipClasses(esriRelRole.esriRelRoleOrigin); class2.Reset(); for (class3 = class2.Next(); class3 != null; class3 = class2.Next()) { destinationClass = class3.DestinationClass; if (this.CheckIsEdit(destinationClass as IDataset)) { node = new TreeNode(destinationClass.AliasName) { Tag = destinationClass }; relationshipsForObject = class3.GetRelationshipsForObject(pFeature); relationshipsForObject.Reset(); relationship2 = relationshipsForObject.Next(); while (relationship2 != null) { if (relationship2.DestinationObject != null) { node2 = new TreeNode(relationship2.DestinationObject.OID.ToString()) { Tag = relationship2.DestinationObject }; node.Nodes.Add(node2); } relationship2 = relationshipsForObject.Next(); } if (node.Nodes.Count > 0) { pParentNode.Nodes.Add(node); } } } class2 = pFeature.Class.get_RelationshipClasses(esriRelRole.esriRelRoleDestination); class2.Reset(); for (class3 = class2.Next(); class3 != null; class3 = class2.Next()) { destinationClass = class3.OriginClass; if (this.CheckIsEdit(destinationClass as IDataset)) { node = new TreeNode(destinationClass.AliasName) { Tag = destinationClass }; relationshipsForObject = class3.GetRelationshipsForObject(pFeature); relationshipsForObject.Reset(); for (relationship2 = relationshipsForObject.Next(); relationship2 != null; relationship2 = relationshipsForObject.Next()) { if (relationship2.OriginObject != null) { node2 = new TreeNode(relationship2.OriginObject.OID.ToString()) { Tag = relationship2.OriginObject }; node.Nodes.Add(node2); } } if (node.Nodes.Count > 0) { pParentNode.Nodes.Add(node); } } } }
private void method_6(IFeatureLayer ifeatureLayer_0, IObject iobject_0) { string str; int num; IField field; IFieldInfo info; string str2; List <IAttachment> list = this.method_4(iobject_0); if (list.Count > 0) { this.textBox1.Text = "共有附件" + list.Count; this.button1.Tag = list; this.panel5.AutoSize = false; } else { this.panel5.AutoSize = true; } this.Infolist.Items.Clear(); IRelationshipClassCollection classs = ifeatureLayer_0 as IRelationshipClassCollection; IEnumRelationshipClass relationshipClasses = classs.RelationshipClasses; relationshipClasses.Reset(); relationshipClasses.Next(); ITable displayTable = (ifeatureLayer_0 as IDisplayTable).DisplayTable; if (displayTable == null) { str = "几何数据"; for (num = 0; num < (ifeatureLayer_0 as ILayerFields).FieldCount; num++) { field = (ifeatureLayer_0 as ILayerFields).get_Field(num); info = (ifeatureLayer_0 as ILayerFields).get_FieldInfo(num); if (info.Visible) { this.Infolist.Items.Add(info.Alias); if (field.Type == esriFieldType.esriFieldTypeGeometry) { this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add(str); } else if (field.Type == esriFieldType.esriFieldTypeBlob) { this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add("二进制数据"); } else if (field.Type == esriFieldType.esriFieldTypeOID) { this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add( iobject_0.get_Value(num).ToString()); } else { str2 = this.method_7(iobject_0, field, num); this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add(str2); } } } } else { IRow row = displayTable.GetRow(iobject_0.OID); str = "几何数据"; for (num = 0; num < (ifeatureLayer_0 as ILayerFields).FieldCount; num++) { field = (ifeatureLayer_0 as ILayerFields).get_Field(num); info = (ifeatureLayer_0 as ILayerFields).get_FieldInfo(num); if (info.Visible) { this.Infolist.Items.Add(info.Alias); if (field.Type == esriFieldType.esriFieldTypeGeometry) { this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add(str); } else if (field.Type == esriFieldType.esriFieldTypeBlob) { this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add("二进制数据"); } else if (field.Type == esriFieldType.esriFieldTypeOID) { this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add( row.get_Value(num).ToString()); } else { str2 = this.method_7(row, field, num); this.Infolist.Items[this.Infolist.Items.Count - 1].SubItems.Add(str2); } } } } }