About the Implementing extended criteria for some predefined schematic rules Sample
[C#]
EnumCollapsedElts.cs
namespace CustomExtCriteriaCS
{
public class EnumCollapsedElts : ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature
{
private System.Collections.Generic.List<ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature> m_listElements;
private int m_maxElements;
private int m_currentIndex;
public EnumCollapsedElts()
{
m_listElements = new System.Collections.Generic.List<ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature>();
m_maxElements = 100; // Default
}
~EnumCollapsedElts()
{
m_listElements = null;
}
public int MaxElements
{
get
{
return m_maxElements;
}
set
{
m_maxElements = value;
}
}
public void Initialize(ref ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature relatedElements)
{
m_currentIndex = 0;
m_listElements = new System.Collections.Generic.List<ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature>();
relatedElements.Reset();
ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature schemElement = relatedElements.Next();
// add all Schematic feature to the list
while ((schemElement != null) && (m_listElements.Count < m_maxElements))
{
m_listElements.Add(schemElement);
schemElement = relatedElements.Next();
}
}
#region IEnumSchematicElement Implementations
public int Count
{
get
{
return m_listElements.Count;
}
}
public ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature Next()
{
if (m_currentIndex < (m_listElements.Count - 1))
{
// return the element at m_currentIndex, then increment it
return m_listElements[m_currentIndex++];
}
else
{
return null;
}
}
public void Reset()
{
m_currentIndex = 0;
}
#endregion
public void Add(ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature value)
{
if (m_listElements == null)
{
m_listElements = new System.Collections.Generic.List<ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature>();
}
if (m_listElements.Count < m_maxElements)
{
m_listElements.Add(value);
}
}
}
}
[Visual Basic .NET]
EnumCollapsedElts.vb
Option Strict Off Option Explicit On Public Class EnumCollapsedElts Implements ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature Private m_listElements As Generic.List(Of ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature) Private m_maxElements As Integer Private m_currentIndex As Integer Public Sub New() m_listElements = New Generic.List(Of ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature) m_maxElements = 100 ' Default End Sub Protected Overrides Sub Finalize() m_listElements = Nothing MyBase.Finalize() End Sub Public Property MaxElements() As Integer Get Return m_maxElements End Get Set(ByVal value As Integer) m_maxElements = value End Set End Property Public Sub Initialize(ByRef relatedElements As ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature) On Error Resume Next m_currentIndex = 0 m_listElements = New Generic.List(Of ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature) relatedElements.Reset() Dim schemElement As ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature = relatedElements.Next ' add all Schematic feature to the list While (schemElement IsNot Nothing AndAlso m_listElements.Count < m_maxElements) m_listElements.Add(schemElement) schemElement = relatedElements.Next End While End Sub #Region "IEnumSchematicElement Implementations" Private ReadOnly Property Count() As Integer _ Implements ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature.Count Get Return m_listElements.Count End Get End Property Private Function [Next]() As ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature _ Implements ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature.Next If m_currentIndex < m_listElements.Count - 1 Then m_currentIndex = m_currentIndex + 1 Return m_listElements(m_currentIndex - 1) Else Return Nothing End If End Function Private Sub Reset() _ Implements ESRI.ArcGIS.Schematic.IEnumSchematicInMemoryFeature.Reset m_currentIndex = 0 End Sub #End Region Public Sub Add(ByVal value As ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature) If m_listElements Is Nothing Then m_listElements = New Generic.List(Of ESRI.ArcGIS.Schematic.ISchematicInMemoryFeature) End If If m_listElements.Count < m_maxElements Then m_listElements.Add(value) End If End Sub End Class