private static void ProfileGetRelatedElevData(IApplication app, List<ProfileGraphDetails> ProfileGraph, IGeometricNetwork pGeometricNet,
IEnumNetEID pResultEdges, IEnumNetEID pResultJunctions, int CurrentDetail,
ref IFeatureLayer pFLManhole, ref IFeatureLayer pFLMain, ref IFeatureLayer pFLTap)
{
List<mainDetails> SewerColMains = null;
List<manholeDetails> SewerColManholes = null;
List<tapDetails> SewerColTap = null;
IEIDHelper pEIDHelperEdges = null;
IEnumEIDInfo pEnumEIDInfoEdges = null;
IEIDHelper pEIDHelperJunctions = null;
IEnumEIDInfo pEnumEIDInfoJunctions = null;
IPolyline pPolyline = null;
IPointCollection pPtColl = null;
IEIDInfo pEIDInfo = null;
IPoint pNewPt = null;
ISegmentCollection pSegColl = null;
IMSegmentation pMSegmentation = null;
IMAware pMAware = null;
IPointCollection pPtCollection = null;
IEnumVertex pEnumVertex;
IHitTest pHtTest = null;
IPoint pHitPntOne = null;
IPoint pHitPntTwo = null;
IFeature pFeature = null;
Hashtable pFeatureAdded = null;
mainDetails mainDet = null;
IEdgeFeature pEdge = null;
IPoint pGeoOne = null;
IPoint pGeoTwo = null;
IField pFld = null;
IJunctionFeature pJunc = null;
tapDetails tapDet = null;
manholeDetails manDet = null;
IFeatureLayer pFl = null;
ISpatialFilter pSpatFilt = null;
IFeatureCursor pFC = null;
try
{
SewerColMains = new List<mainDetails>();
SewerColManholes = new List<manholeDetails>();
SewerColTap = new List<tapDetails>();
pEIDHelperEdges = new EIDHelper();
pEIDHelperEdges.GeometricNetwork = pGeometricNet;
pEIDHelperEdges.ReturnFeatures = true;
pEIDHelperEdges.ReturnGeometries = true;
pEIDHelperEdges.PartialComplexEdgeGeometry = true;
pEnumEIDInfoEdges = pEIDHelperEdges.CreateEnumEIDInfo(pResultEdges);
pEnumEIDInfoEdges.Reset(); //edges
pEIDHelperJunctions = new EIDHelperClass();
pEIDHelperJunctions.GeometricNetwork = pGeometricNet;
pEIDHelperJunctions.ReturnFeatures = true;
pEIDHelperJunctions.ReturnGeometries = true;
pEIDHelperJunctions.PartialComplexEdgeGeometry = true;
pEnumEIDInfoJunctions = pEIDHelperJunctions.CreateEnumEIDInfo(pResultJunctions);
pEnumEIDInfoJunctions.Reset();// junctions
pPolyline = new PolylineClass();
pPolyline.SpatialReference = (pFLMain as IGeoDataset).SpatialReference;
pPtColl = (IPointCollection)pPolyline; //QI
for (int i = 0; i < pEnumEIDInfoJunctions.Count; i++)
{
pEIDInfo = pEnumEIDInfoJunctions.Next();
pNewPt = (IPoint)pEIDInfo.Geometry;
pPtColl.AddPoint(pNewPt);
}
pSegColl = (ISegmentCollection)pPolyline;
pPolyline.Densify(50, 0.01);
pMAware = (IMAware)pPolyline;//'QI
pMAware.MAware = true;
pMSegmentation = (IMSegmentation)pPolyline;
// get the M values, put the distance in m, 0 to Length
pMSegmentation.SetMsAsDistance(false);
pPtCollection = (IPointCollection)pPolyline;
pEnumVertex = pPtCollection.EnumVertices;
pEnumVertex.Reset();
pHtTest = pPolyline as IHitTest;
pHitPntOne = new PointClass();
pHitPntTwo = new PointClass();
double pHitDistOne = -1;
double pHitDistTwo = -1;
int pHitPrtOne = -1;
int pHitPrtTwo = -1;
int pHitSegOne = -1;
int pHitSegTwo = -1;
bool pHitSideOne = false;
bool pHitSideTwo = false;
pFeatureAdded = new Hashtable();
pEnumEIDInfoEdges.Reset(); //edges
int intUpStreamFld = pFLMain.FeatureClass.Fields.FindField(ProfileGraph[CurrentDetail].Line_UpStreamElevationField);
int intDownStreamFld = pFLMain.FeatureClass.Fields.FindField(ProfileGraph[CurrentDetail].Line_DownStreamElevationField);
if (intDownStreamFld < 0)
{
MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19c") + ProfileGraph[CurrentDetail].Line_DownStreamElevationField + A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19b"));
}
if (intUpStreamFld < 0)
{
MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19d") + ProfileGraph[CurrentDetail].Line_UpStreamElevationField + A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19b"));
}
for (int i = 0; i < pResultEdges.Count; i++)
{
pEIDInfo = pEnumEIDInfoEdges.Next();
pFeature = pEIDInfo.Feature;
if (((IDataset)pFeature.Class).Name != ((IDataset)pFLMain.FeatureClass).Name)
continue;
if (pFeatureAdded.ContainsValue(pFeature.OID))
continue;
mainDet = new mainDetails();
pEdge = (IEdgeFeature)pFeature;
pGeoOne = (IPoint)pEdge.FromJunctionFeature.get_OriginalGeometryForJunctionElement(0);
pGeoTwo = (IPoint)pEdge.ToJunctionFeature.get_OriginalGeometryForJunctionElement(0);
pFeature = ((IFeatureClass)pFeature.Class).GetFeature(pFeature.OID);
bool bHitOne = pHtTest.HitTest(pGeoOne, .1,
esriGeometryHitPartType.esriGeometryPartVertex,
pHitPntOne, ref pHitDistOne, ref pHitPrtOne, ref pHitSegOne, ref pHitSideOne);
bool bHitTwo = pHtTest.HitTest(pGeoTwo, .1,
esriGeometryHitPartType.esriGeometryPartVertex,
pHitPntTwo, ref pHitDistTwo, ref pHitPrtTwo, ref pHitSegTwo, ref pHitSideTwo);
if (bHitOne && bHitTwo)
{
if (pHitPntOne.M < pHitPntTwo.M)
{
mainDet.UpM = pHitPntOne.M;
mainDet.DownM = pHitPntTwo.M;
if (intUpStreamFld > 0)
{
if (pFeature.get_Value(intUpStreamFld).ToString() != "")
{
mainDet.UpElev = Convert.ToDouble(pFeature.get_Value(intUpStreamFld));
}
else
mainDet.UpElev = -9999;
}
else
mainDet.UpElev = -9999;
if (intDownStreamFld > 0)
{
if (pFeature.get_Value(intDownStreamFld).ToString() != "")
{
mainDet.DownElev = Convert.ToDouble(pFeature.get_Value(intDownStreamFld));
}
else
mainDet.DownElev = -9999;
}
else
mainDet.DownElev = -9999;
}
else
{
mainDet.DownM = pHitPntOne.M;
mainDet.UpM = pHitPntTwo.M;
if (intUpStreamFld > 0)
{
if (pFeature.get_Value(intUpStreamFld) != null && pFeature.get_Value(intUpStreamFld).ToString() != "")
{
mainDet.DownElev = Convert.ToDouble(pFeature.get_Value(intUpStreamFld));
}
else
mainDet.DownElev = -9999;
}
else
mainDet.DownElev = -9999;
if (intDownStreamFld > 0)
{
if (pFeature.get_Value(intDownStreamFld) != null && pFeature.get_Value(intDownStreamFld).ToString() != "")
{
mainDet.UpElev = Convert.ToDouble(pFeature.get_Value(intDownStreamFld));
}
else
mainDet.UpElev = -9999;
}
else
mainDet.UpElev = -9999;
}
string label = "";
for (int l = 0; l < ProfileGraph[CurrentDetail].Line_Labels.Length; l++)
{
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Line_Labels[l]) > 0)
{
int fldIdx = pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Line_Labels[l]);
pFld = pFeature.Fields.get_Field(fldIdx);
if (pFeature.get_Value(fldIdx) != null)
{
if (label == "")
{
label = Globals.GetDomainDisplay(pFeature.get_Value(fldIdx), pFeature, pFld);
}
else
{
label = label + "\r\n" + Globals.GetDomainDisplay(pFeature.get_Value(fldIdx), pFeature, pFld);
}
}
}
}
mainDet.Label = label;
}
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Line_IDField) > 0)
{
if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Line_IDField)) != null && pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Line_IDField)).ToString() != "")
{
mainDet.MainID = Convert.ToString(pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Line_IDField)));
}
else
mainDet.MainID = "Unk";
}
else
mainDet.MainID = "Unk";
pFeatureAdded.Add(pFeature.OID, pFeature.OID);
SewerColMains.Add(mainDet);
}
pFeatureAdded = new Hashtable();
pEnumEIDInfoJunctions.Reset();
for (int i = 0; i < pEnumEIDInfoJunctions.Count; i++)
{
pEIDInfo = pEnumEIDInfoJunctions.Next();
pFeature = pEIDInfo.Feature;
if (pFLTap != null)
{
if (((IDataset)pFeature.Class).Name == ((IDataset)pFLTap.FeatureClass).Name)
{
pJunc = (IJunctionFeature)pFeature;
pFeature = ((IFeatureClass)pFeature.Class).GetFeature(pFeature.OID);
pHitPntOne = new PointClass();
bool bHit = pHtTest.HitTest(pFeature.Shape as IPoint, .1,
esriGeometryHitPartType.esriGeometryPartVertex,
pHitPntOne, ref pHitDistOne, ref pHitPrtOne, ref pHitSegOne, ref pHitSideOne);
if (bHit)
{
tapDet = new tapDetails();
tapDet.M = pHitPntOne.M;
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].PointAlong_IDField) > 0)
{
if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].PointAlong_IDField)) != null &&
pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].PointAlong_IDField)).ToString() != "")
{
tapDet.tapID = pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].PointAlong_IDField)).ToString();
}
else
tapDet.tapID = "Unk";
}
else
tapDet.tapID = "Unk";
string label = "";
for (int l = 0; l < ProfileGraph[CurrentDetail].PointAlong_Labels.Length; l++)
{
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].PointAlong_Labels[l]) > 0)
{
int fldIdx = pFeature.Fields.FindField(ProfileGraph[CurrentDetail].PointAlong_Labels[l]);
pFld = pFeature.Fields.get_Field(fldIdx);
if (pFeature.get_Value(fldIdx) != null)
{
if (label == "")
{
label = Globals.GetDomainDisplay(pFeature.get_Value(fldIdx), pFeature, pFld);
}
else
{
label = label + "\r\n" + Globals.GetDomainDisplay(pFeature.get_Value(fldIdx), pFeature, pFld);
}
}
}
}
tapDet.tapLabel = label;
SewerColTap.Add(tapDet);
}
}
}
object val;
double elev;
if (((IDataset)pFeature.Class).Name == ((IDataset)pFLManhole.FeatureClass).Name)
{
if (pFeatureAdded.ContainsValue(pFeature.OID))
continue;
pJunc = (IJunctionFeature)pFeature;
pFeature = ((IFeatureClass)pFeature.Class).GetFeature(pFeature.OID);
pHitPntOne = new PointClass();
bool bHit = pHtTest.HitTest(pFeature.Shape as IPoint, .1,
esriGeometryHitPartType.esriGeometryPartVertex,
pHitPntOne, ref pHitDistOne, ref pHitPrtOne, ref pHitSegOne, ref pHitSideOne);
if (bHit)
{
manDet = new manholeDetails();
manDet.M = pHitPntOne.M;
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_TopElevationField) > 0)
{
if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_TopElevationField)) != null &&
pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_TopElevationField)).ToString() != "")
{
val = pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_TopElevationField));
if (Double.TryParse(val.ToString(), out elev))
{
manDet.Top = elev;
}
else
{
manDet.Top = -9999;
}
}
else
manDet.Top = -9999;
}
else
manDet.Top = -9999;
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_BottomElevationField) > 0)
{
if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_BottomElevationField)) != null &&
pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_BottomElevationField)).ToString() != "")
{
val = pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_BottomElevationField));
if (Double.TryParse(val.ToString(), out elev))
{
manDet.Bottom = elev;
if (ProfileGraph[CurrentDetail].Point_BottomElevationTypeField.ToUpper() == "INVERT")
{
manDet.Bottom = manDet.Top - elev;
}
}
else
{
manDet.Bottom = -9999;
}
}
else
manDet.Bottom = -9999;
}
else
manDet.Bottom = -9999;
//if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertElevationField) > 0)
//{
// if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertElevationField)) != null && pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertElevationField)).ToString() != "")
// {
// manDet.InvertElev = (double)pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertElevationField));
// }
// else
// manDet.InvertElev = -9999;
//}
//else
// manDet.InvertElev = -9999;
//if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertField) > 0)
//{
// if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertField)) != null && pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertField)).ToString() != "")
// {
// manDet.Invert = (double)pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_InvertField));
// }
// else
// manDet.Invert = -9999;
//}
//else
// manDet.Invert = -9999;
//if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_RimElevationField) > 0)
//{
// if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_RimElevationField)) != null && pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_RimElevationField)).ToString() != "")
// {
// manDet.Rim = (double)pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_RimElevationField));
// }
// else
// manDet.Rim = -9999;
//}
//else
// manDet.Rim = -9999;
if (pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_IDField) > 0)
{
if (pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_IDField)) != null && pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_IDField)).ToString() != "")
{
manDet.ManholeID = pFeature.get_Value(pFeature.Fields.FindField(ProfileGraph[CurrentDetail].Point_IDField)).ToString();
}
else
manDet.ManholeID = "UNK";
}
else
manDet.ManholeID = "UNK";
pFeatureAdded.Add(pFeature.OID, pFeature.OID);
SewerColManholes.Add(manDet);
}
}
}
if (ProfileGraph[CurrentDetail].Lines_Along != null)
{
if (ProfileGraph[CurrentDetail].Lines_Along.Length > 0)
{
pSpatFilt = new SpatialFilterClass();
pSpatFilt.Geometry = pPolyline;
pSpatFilt.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
for (int i = 0; i < ProfileGraph[CurrentDetail].Lines_Along.Length; i++)
{
bool FCorLayerTemp = true;
pFl = (IFeatureLayer)Globals.FindLayer(app, ProfileGraph[CurrentDetail].Lines_Along[i].Layer_Name, ref FCorLayerTemp);
if (pFl != null)
{
intUpStreamFld = pFl.FeatureClass.Fields.FindField(ProfileGraph[CurrentDetail].Lines_Along[i].Line_UpStreamElevationField);
intDownStreamFld = pFl.FeatureClass.Fields.FindField(ProfileGraph[CurrentDetail].Lines_Along[i].Line_DownStreamElevationField);
int intIdFld = pFl.FeatureClass.Fields.FindField(ProfileGraph[CurrentDetail].Lines_Along[i].Line_IDField);
if (intIdFld < 0)
{
MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19f") + ProfileGraph[CurrentDetail].Lines_Along[i].Line_IDField + A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19e") + ProfileGraph[CurrentDetail].Lines_Along[i].Layer_Name);
}
if (intDownStreamFld < 0)
{
MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19c") + ProfileGraph[CurrentDetail].Lines_Along[i].Line_DownStreamElevationField + A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19e") + ProfileGraph[CurrentDetail].Lines_Along[i].Layer_Name);
}
if (intUpStreamFld < 0)
{
MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19d") + ProfileGraph[CurrentDetail].Lines_Along[i].Line_UpStreamElevationField + A4LGSharedFunctions.Localizer.GetString("GeoNetToolsError_19e") + ProfileGraph[CurrentDetail].Lines_Along[i].Layer_Name);
}
pSpatFilt.GeometryField = pFl.FeatureClass.ShapeFieldName;
pFC = pFl.Search(pSpatFilt, true);
}
}
}
}
ProfileCreateGraph(app, ProfileGraph, pPolyline, SewerColMains, SewerColManholes, SewerColTap, CurrentDetail);
}
catch (Exception Ex)
{
MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ErrorInThe") + "ProfileGetRelatedSewerElevData " + Ex.Message);
}
finally
{
SewerColMains = null;
SewerColManholes = null;
SewerColTap = null;
pEIDHelperEdges = null;
pEnumEIDInfoEdges = null;
pEIDHelperJunctions = null;
if (pEnumEIDInfoJunctions != null)
Marshal.ReleaseComObject(pEnumEIDInfoJunctions);
pEnumEIDInfoJunctions = null;
pPolyline = null;
pPtColl = null;
pEIDInfo = null;
pNewPt = null;
pSegColl = null;
pMSegmentation = null;
pMAware = null;
pPtCollection = null;
pEnumVertex = null;
pHtTest = null;
pHitPntOne = null;
pHitPntTwo = null;
pFeature = null;
pFeatureAdded = null;
mainDet = null;
pEdge = null;
pGeoOne = null;
pGeoTwo = null;
pFld = null;
pJunc = null;
tapDet = null;
manDet = null;
pFl = null;
pSpatFilt = null;
if (pFC != null)
Marshal.ReleaseComObject(pFC);
pFC = null;
}
}