public GPoints GetDeepCopy() { GPoints gPoints = new GPoints(); int count = this.m_vtPoints.Count; gPoints.Clear(); for (int i = 0; i < count; i++) { GPoint deepCopy = ((GPoint)this.m_vtPoints[i]).GetDeepCopy(); gPoints.m_vtPoints.Add(deepCopy); } return(gPoints); }
public override void GetSelectedData() { this.method_3(); IMap map = this.m_context.FocusMap; ITopologicalOperator topologicalOperator = (ITopologicalOperator)this.m_pBaseLine; IGeometry geometry = topologicalOperator.Buffer(0.0); map.ClearSelection(); ISelectionEnvironment selectionEnvironment = new SelectionEnvironment(); map.SelectByShape(geometry, selectionEnvironment, false); IEnumFeature enumFeature = (IEnumFeature)map.FeatureSelection; IFeature feature = enumFeature.Next(); while (feature != null) { if (feature.FeatureType == esriFeatureType.esriFTSimpleEdge) { IPolyline egLine = feature.Shape as IPolyline; IPoint newCenter = new PointClass(); egLine.QueryPoint(esriSegmentExtension.esriNoExtension, 0.01, true, newCenter); IEdgeFeature pEgFeature = feature as IEdgeFeature; IFeatureClass pClass = feature.Class as IFeatureClass; INetworkClass pNetworkClass = pClass as INetworkClass; INetElements network = pNetworkClass.GeometricNetwork.Network as INetElements; IPointToEID pntEID = new PointToEIDClass(); pntEID.GeometricNetwork = pNetworkClass.GeometricNetwork; pntEID.SourceMap = m_context.FocusMap; pntEID.SnapTolerance = CommonHelper.ConvertPixelsToMapUnits(m_context.ActiveView, 5.0); double percent; int edgeID; IPoint location; pntEID.GetNearestEdge(newCenter, out edgeID, out location, out percent); if (percent == 0) { feature = enumFeature.Next(); continue; } int userClassID, userID, userSubID; network.QueryIDs(edgeID, esriElementType.esriETEdge, out userClassID, out userID, out userSubID); if (pClass.FeatureClassID == userClassID) { feature = pClass.GetFeature(userID); } else { IEnumDataset dses = pNetworkClass.FeatureDataset.Subsets; dses.Reset(); IDataset ds = dses.Next(); while (ds != null) { if (ds is IFeatureClass) { IFeatureClass pClass2 = ds as IFeatureClass; if (pClass2.FeatureClassID == userClassID) { feature = pClass2.GetFeature(userID); break; } } } } } string smpClassName = CommonUtils.GetSmpClassName(feature.Class.AliasName); IMAware mWAware = feature.Shape as IMAware; bool isMUsing = mWAware.MAware; IBasicLayerInfo lineConfig = PipeConfig.GetBasicLayerInfo(feature.Class.AliasName) as IBasicLayerInfo; if (lineConfig == null && !smpClassName.ToUpper().Contains("JT_JT_L") && !smpClassName.ToUpper().Contains("SY_ZX_L") && !smpClassName.ToUpper().Contains("ZB_LD_R")) { feature = enumFeature.Next(); } else { IGeometry shape = feature.Shape; if (shape.GeometryType != esriGeometryType.esriGeometryPolyline && shape.GeometryType != esriGeometryType.esriGeometryPolygon) { feature = enumFeature.Next(); } else { IPolyline polyline; if (shape.GeometryType == esriGeometryType.esriGeometryPolygon) { polyline = this.PolygonToPolyline((IPolygon)shape); } else { polyline = (IPolyline)shape; } GPoints gPoints = null; if (isMUsing) { gPoints = this.CalculateIntersections(this.m_pBaseLine, polyline); } else { gPoints = this.CalculateIntersections(this.m_pBaseLine, feature, lineConfig); } //string text = "管线性质"; string text = lineConfig.GetFieldName(PipeConfigWordHelper.LineWords.GDXZ); string bstrDatasetName = ""; int num = feature.Fields.FindField(text); if (num != -1) { object obj = feature.get_Value(num); if (obj == null || Convert.IsDBNull(obj)) { bstrDatasetName = ""; } else { bstrDatasetName = obj.ToString(); } } if (gPoints == null) { feature = enumFeature.Next(); } else { int num2 = gPoints.Size(); for (int i = 0; i < num2; i++) { GPoint gPoint = gPoints[i]; PipePoint pipePoint = new PipePoint(); if (smpClassName.ToUpper().Contains("JT_JT_L")) { pipePoint.PointType = PipePoint.SectionPointType.sptRoadBorder; } else if (smpClassName.ToUpper().Contains("SY_ZX_L")) { pipePoint.PointType = PipePoint.SectionPointType.sptMidRoadLine; } else if (smpClassName.ToUpper().Contains("ZB_LD_R")) { pipePoint.PointType = PipePoint.SectionPointType.sptMidGreen; } else { pipePoint.PointType = PipePoint.SectionPointType.sptPipe; } pipePoint.x = gPoint.X; pipePoint.y = gPoint.Y; pipePoint.z = gPoint.Z; pipePoint.m = gPoint.M; pipePoint.bstrDatasetName = bstrDatasetName; // int num3 = feature.Fields.FindField(base.PipeConfig.get_Material()); int num3 = feature.Fields.FindField(lineConfig.GetFieldName(PipeConfigWordHelper.LineWords.GXCZ)); if (num3 == -1) { pipePoint.strMaterial = ""; } else { object obj2 = feature.get_Value(num3); if (obj2 != null) { pipePoint.strMaterial = feature.get_Value(num3).ToString(); } else { pipePoint.strMaterial = ""; } } // num3 = feature.Fields.FindField(base.PipeConfig.get_Diameter()); num3 = feature.Fields.FindField(lineConfig.GetFieldName(PipeConfigWordHelper.LineWords.GJ)); string text2; if (num3 != -1 && feature.get_Value(num3) != null) { text2 = feature.get_Value(num3).ToString(); } else { text2 = ""; } num3 = feature.Fields.FindField(lineConfig.GetFieldName(PipeConfigWordHelper.LineWords.DMCC)); string text3; if (num3 != -1 && feature.get_Value(num3) != null) { text3 = feature.get_Value(num3).ToString(); } else { text3 = ""; } if (text2 != "") { pipePoint.strPipeWidthHeight = text2; } if (text3 != "") { pipePoint.strPipeWidthHeight = text3; } Color featureColor = CommonUtils.GetFeatureColor(map, feature.Class.AliasName, feature); pipePoint.Red = (int)featureColor.R; pipePoint.Green = (int)featureColor.G; pipePoint.Blue = (int)featureColor.B; this.m_arrPipePoints.Add(pipePoint); } feature = enumFeature.Next(); } } } } map.ClearSelection(); IPointCollection pointCollection = (IPointCollection)this.m_pBaseLine; int pointCount = pointCollection.PointCount; if (pointCount != 0) { for (int j = 0; j < pointCount; j++) { IPoint point = pointCollection.get_Point(j); double x = point.X; double y = point.Y; PipePoint pipePoint2 = new PipePoint(); pipePoint2.x = x; pipePoint2.y = y; pipePoint2.PointType = PipePoint.SectionPointType.sptDrawPoint; this.m_arrPipePoints.Add(pipePoint2); } this.fEswZsmwIx((PipePoint)this.m_arrPipePoints[this.m_arrPipePoints.Count - 2]); this.method_1(); if (this.method_2()) { this.method_5(this.m_arrPipePointsDraw, this.m_arrPipePoints); this.method_4(); this.method_7(this.m_arrPipePointsDraw); } } }
private double method_2(IPolyline polyline, IPolyline polyline2) { IPointCollection pointCollection = (IPointCollection)polyline; int pointCount = pointCollection.PointCount; double result; if (pointCount == 0) { result = 0.0; } else { GPolyLine gPolyLine = new GPolyLine(); gPolyLine.Clear(); for (int i = 0; i < pointCount; i++) { IPoint point = pointCollection.get_Point(i); double x = point.X; double y = point.Y; double z = point.Z; double m = point.M; gPolyLine.PushBack(new GPoint { X = x, Y = y, Z = z, M = m }); } pointCollection = (IPointCollection)polyline2; pointCount = pointCollection.PointCount; if (pointCount == 0) { result = 0.0; } else { GPolyLine gPolyLine2 = new GPolyLine(); gPolyLine2.Clear(); for (int j = 0; j < pointCount; j++) { IPoint point2 = pointCollection.get_Point(j); double x2 = point2.X; double y2 = point2.Y; double z2 = point2.Z; double m2 = point2.M; gPolyLine2.PushBack(new GPoint { X = x2, Y = y2, Z = z2, M = m2 }); } GPoints gPoints = new GPoints(); gPoints = gPolyLine.GetInterPtsToPolyLineWithHeight(gPolyLine2); long num = (long)gPoints.Size(); double num2 = -1.0; int num3 = 0; while ((long)num3 < num) { GPoint gPoint = gPoints[num3]; double num4 = this.method_5(gPoint.M, gPoint.Z); if (num3 == 0) { num2 = num4; } else if (num2 > num4) { num2 = num4; } num3++; } result = num2; } } return(result); }