예제 #1
0
        public ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature SelectElementsToCollapse(ESRI.ArcGIS.Schematic.ISchematicInMemoryFeatureNode node, ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature relatedFeatures)
        {
            // get feature
            ESRI.ArcGIS.Geodatabase.IFeature esriFeature;
            esriFeature = node as ESRI.ArcGIS.Geodatabase.IFeature;
            if (esriFeature == null)
            {
                return(null);
            }

            // get feature class
            ESRI.ArcGIS.Geodatabase.IFeatureClass esriFeatureClass;
            esriFeatureClass = esriFeature.Class as ESRI.ArcGIS.Geodatabase.IFeatureClass;

            // if not the right feature class do nothing
            if (esriFeatureClass.AliasName != "plants")
            {
                return(null);
            }

            bool okToCollapse = true;

            relatedFeatures.Reset();

            // Test if you want to collapse related element
            //ESRI.ArcGIS.Schematic.ISchematicElement schemElement = relatedElements.Next();
            //while ((schemElement != null) && okToCollapse)
            //{
            //  okToCollapse = CanCollapseElement(schemElement);
            //  schemElement = relatedElements.Next();
            //}

            if (!okToCollapse)
            {
                return(null);                // if nothing to collapse return nothing
            }
            else if (relatedFeatures.Count == 0)
            {
                EnumCollapsedElts enumCollapse = new EnumCollapsedElts();                 // create a list of feature to collapse

                // get incident links
                ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeatureLink enumLinks;
                enumLinks = node.GetIncidentLinks(ESRI.ArcGIS.Schematic.esriSchematicEndPointType.esriSchematicOriginOrExtremityNode);

                if (enumLinks == null)
                {
                    return(enumCollapse);
                }
                if (enumLinks.Count > 1)
                {
                    enumLinks.Reset();
                    ESRI.ArcGIS.Schematic.ISchematicInMemoryFeatureLink schemLink;
                    // for each link
                    schemLink = enumLinks.Next();
                    if (schemLink != null)
                    {
                        enumCollapse.Add((ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature)node);                         // Add node to collapse

                        while (schemLink != null)
                        {
                            enumCollapse.Add((ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature)schemLink);                             // Add link to collapse
                            schemLink = enumLinks.Next();
                        }
                    }
                }
                return(enumCollapse);
            }
            else
            {
                return(relatedFeatures);
            }
        }
		public ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature SelectElementsToCollapse(ESRI.ArcGIS.Schematic.ISchematicInMemoryFeatureNode node, ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature relatedFeatures)
		{
			// get feature
			ESRI.ArcGIS.Geodatabase.IFeature esriFeature;
			esriFeature = node as ESRI.ArcGIS.Geodatabase.IFeature;
			if (esriFeature == null) return null;

			// get feature class
			ESRI.ArcGIS.Geodatabase.IFeatureClass esriFeatureClass;
			esriFeatureClass = esriFeature.Class as ESRI.ArcGIS.Geodatabase.IFeatureClass;

			// if not the right feature class do nothing
			if (esriFeatureClass.AliasName != "plants") return null;

			bool okToCollapse = true;

			relatedFeatures.Reset();

			// Test if you want to collapse related element
			//ESRI.ArcGIS.Schematic.ISchematicElement schemElement = relatedElements.Next();
			//while ((schemElement != null) && okToCollapse)
			//{
			//  okToCollapse = CanCollapseElement(schemElement);
			//  schemElement = relatedElements.Next();
			//}

			if (!okToCollapse)
				return null; // if nothing to collapse return nothing
			else if (relatedFeatures.Count == 0)
			{
				EnumCollapsedElts enumCollapse = new EnumCollapsedElts(); // create a list of feature to collapse

				// get incident links
				ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeatureLink enumLinks;
				enumLinks = node.GetIncidentLinks(ESRI.ArcGIS.Schematic.esriSchematicEndPointType.esriSchematicOriginOrExtremityNode);

				if (enumLinks == null) return enumCollapse;
				if (enumLinks.Count > 1)
				{
					enumLinks.Reset();
					ESRI.ArcGIS.Schematic.ISchematicInMemoryFeatureLink schemLink;
					// for each link
					schemLink = enumLinks.Next();
					if (schemLink != null)
					{
						enumCollapse.Add((ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature)node); // Add node to collapse

						while (schemLink != null)
						{
							enumCollapse.Add((ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature)schemLink); // Add link to collapse
							schemLink = enumLinks.Next();
						}
					}
				}
				return enumCollapse;
			}
			else
			{
				return relatedFeatures;
			}
		}