private IPolygon polylinetoPolygon(IPolyline pPolyline) { IPointCollection pPtC; ESRI.ArcGIS.Geometry.IPoint pPt0, pPtn; ESRI.ArcGIS.Geometry.ILine pSeg = new LineClass(); IPolygon polygon = new PolygonClass(); ISegmentCollection segmentCollection = (ISegmentCollection)pPolyline; int segmentCount = segmentCollection.SegmentCount; ISegmentCollection segmentCollection2 = (ISegmentCollection)polygon; object value = Missing.Value; object value2 = Missing.Value; for (int i = 0; i < segmentCount; i++) { segmentCollection2.AddSegment(segmentCollection.get_Segment(i), ref value, ref value2); } if (!pPolyline.IsClosed) { pPtC = pPolyline as IPointCollection; pPt0 = pPtC.get_Point(0); polygon.ToPoint = pPt0; //pPtn = pPtC.get_Point(pPtC.PointCount - 1); //pSeg.PutCoords(pPtn, pPt0); //segmentCollection2.AddSegment((ISegment)pSeg, ref value, ref value2); } polygon.SimplifyPreserveFromTo(); return(polygon); }
//添加SEGMENT private void addSegmentColllectionToolStripMenuItem_Click(object sender, EventArgs e) { ISegment[] segmentArray = new ISegment[10]; IPolyline polyline = new PolylineClass(); ISegmentCollection segmentCollection = new PolylineClass(); for (int i = 0; i < 10; i++) { ILine line = new LineClass(); IPoint fromPoint = new PointClass(); fromPoint.PutCoords(i * 10, i * 10); IPoint toPoint = new PointClass(); toPoint.PutCoords(i * 15, i * 15); line.PutCoords(fromPoint, toPoint); segmentArray[i] = line as ISegment; segmentCollection.AddSegment(line as ISegment, Type.Missing, Type.Missing); } //也可通过IGeometryBridge对象的AddSegments方法进行整个segment数据的添加 //IGeometryBridge geometryBridge = new GeometryEnvironmentClass(); //geometryBridge.AddSegments(segmentCollection, ref segmentArray); polyline = segmentCollection as IPolyline; addFeature("polyline", polyline as IGeometry); this.axMapControl1.Extent = polyline.Envelope; this.axMapControl1.Refresh(); }
/// <summary> /// 通过起点和终点创建线段(IPolyline对象) /// </summary> /// <param name="pt1">起点</param> /// <param name="pt2">终点</param> /// <returns></returns> public static IPolyline CreatePolyline(IPoint pt1, IPoint pt2) { //a. 创建Line对象(也可是其他Segment对象), //b. QI到Segment对象 //c. 创建Path对象,通过Path的addSegment,将最初的Line添加进Path中 //d. 创建GeometryCollection对象,通过AddGeometry,将path添加进GeometryCollection中 //e. 将GeometryCollection QI到 IPolyline ILine line = new LineClass(); // 创建一个Line对象 line.PutCoords(pt1, pt2); // 设置LIne对象的起始终止点 ISegment segment = line as ISegment; // QI到ISegment ISegmentCollection path = new PathClass(); // 创建一个Path对象 object o = Type.Missing; path.AddSegment(segment, ref o, ref o);// 通过Isegmentcoletcion接口为Path对象添加Segment对象 // 创建一个Polyline对象 IGeometryCollection polyline = new PolylineClass(); polyline.AddGeometry(path as IGeometry, ref o, ref o); IPolyline resultPolyline = polyline as IPolyline; return(resultPolyline); }
public void CanGetMonotonicityTypeEmpty() { ISegment segmentNaNFirst = new LineClass { FromPoint = CreatePoint(0, 0, double.NaN), ToPoint = CreatePoint(0, 1, 0) }; ISegment segmentNaNSecond = new LineClass { FromPoint = CreatePoint(0, 0, 99999.88), ToPoint = CreatePoint(0, 1, double.NaN) }; ISegment segmentNaNBoth = new LineClass { FromPoint = CreatePoint(0, 0, double.NaN), ToPoint = CreatePoint(0, 1, double.NaN) }; Assert.IsTrue(MeasureUtils.GetMonotonicityType(segmentNaNFirst) == esriMonotinicityEnum.esriValuesEmpty); Assert.IsTrue(MeasureUtils.GetMonotonicityType(segmentNaNSecond) == esriMonotinicityEnum.esriValuesEmpty); Assert.IsTrue(MeasureUtils.GetMonotonicityType(segmentNaNBoth) == esriMonotinicityEnum.esriValuesEmpty); }
/// <summary> /// 两点之间的连线是否与线相交 /// </summary> /// <param name="mFPoint"></param> /// <param name="mLPoint"></param> /// <param name="lineFeature"></param> /// <returns>true:相交;false:不相交</returns> private bool IsIntersect(IPoint mFPoint, IPoint mLPoint, IFeature lineFeature) { //声明线要素 //IPolyline mPLine = new PolylineClass(); //mPLine.FromPoint = mFPoint; //mPLine.ToPoint = mLPoint; //声明点集 //IPointCollection mPointCol = new PolylineClass(); //object obj = System.Reflection.Missing.Value; //mPointCol.AddPoint(mFPoint, ref obj, ref obj); //mPointCol.AddPoint(mLPoint, ref obj, ref obj); //mPLine = mPointCol as IPolyline; ILine pLine = new LineClass(); pLine.PutCoords(mFPoint, mLPoint); ISegmentCollection pSegCol = new PolylineClass(); object obj = Type.Missing; pSegCol.AddSegment(pLine as ISegment, ref obj, ref obj); IRelationalOperator pRelOpera = pSegCol as IRelationalOperator; if (pRelOpera.Disjoint(lineFeature.Shape)) { //不相交 return(false); } else { //相交 return(true); } }
//构造垂直线上点法 private void button9_Click(object sender, EventArgs e) { delFeature("point"); IPoint[] points = new IPoint[2]; for (int i = 0; i < 2; i++) { points[i] = new PointClass(); } points[0].PutCoords(0, 0); points[1].PutCoords(20, 0); ISegment segment; ILine line = new LineClass(); line.FromPoint = points[0]; line.ToPoint = points[1]; segment = line as ISegment; IPoint fromPoint = new PointClass(); fromPoint.X = points[0].X + 10; fromPoint.Y = points[0].Y + 10; IConstructPoint constructPoint = new PointClass(); constructPoint.ConstructPerpendicular(segment, esriSegmentExtension.esriNoExtension, fromPoint, 3, false); addFeature("point", points[0]); addFeature("point", points[1]); addFeature("point", constructPoint as IPoint); axMapControl1.Refresh(); }
/// <summary> /// 在三维场景中由两点生成线的绘制 20110609 /// </summary> /// <param name="Point1">前一个点要素</param> /// <param name="Point2">后一点要素</param> /// <param name="r"></param> /// <param name="g"></param> /// <param name="b"></param> /// <param name="Width">线符号宽</param> /// <returns></returns> public static IElement PointToPolyline(IPoint Point1, IPoint Point2, int r, int g, int b, double Width) { ILine line = new LineClass(); line.PutCoords(Point1, Point2); object missing = Type.Missing; ISegmentCollection segColl = new PolylineClass(); segColl.AddSegment(line as ISegment, ref missing, ref missing); IPolyline pPolyline = new PolylineClass(); pPolyline = segColl as IPolyline; IZAware pZAware = new PolylineClass(); pZAware = pPolyline as IZAware; pZAware.ZAware = true; IElement lineElement = new LineElementClass(); ISimpleLine3DSymbol pSimpleLine3DSymbol = new SimpleLine3DSymbolClass(); pSimpleLine3DSymbol.Style = esriSimple3DLineStyle.esriS3DLSWall; pSimpleLine3DSymbol.ResolutionQuality = 1; ILineSymbol pLineSymbol = pSimpleLine3DSymbol as ILineSymbol; pLineSymbol.Color = getRGB(r, g, b); pLineSymbol.Width = Width; lineElement.Geometry = pZAware as IGeometry; ILineElement lineElement2 = lineElement as ILineElement; lineElement2.Symbol = pLineSymbol; return(lineElement); }
//两点构造线段的Segment private ISegment MadeLineSeg_2Point(IPoint pPoint1, IPoint pPoint2) { ILine pLine = new LineClass(); pLine.PutCoords(pPoint1, pPoint2); return((ISegment)pLine); }
public CurveConstruction BezierTo([NotNull] IPoint p0, [NotNull] IPoint p1, [NotNull] IPoint pe) { ILine tangentFrom = new LineClass(); tangentFrom.FromPoint = Curve.ToPoint; tangentFrom.ToPoint = p0; ILine tangentTo = new LineClass(); tangentTo.FromPoint = p1; tangentTo.ToPoint = pe; IConstructBezierCurve bezier = new BezierCurveClass(); bezier.ConstructTangentsAtEndpoints(tangentFrom, tangentTo); object missing = Type.Missing; ((ISegmentCollection)Curve).AddSegment((ISegment)bezier, ref missing, ref missing); return(this); }
/// <summary> /// ���ݵ㼯���������Ҫ�� /// </summary> /// <params name="featureLayer"></params> /// <params name="lstPoint"></params> public void CreateLine(IFeatureLayer featureLayer, List<IPoint> lstPoint, int ID) { //try //{ IFeatureClass featureClass = featureLayer.FeatureClass; if (featureClass.ShapeType == esriGeometryType.esriGeometryPolyline) { IPointCollection multipoint = new MultipointClass(); if (lstPoint.Count < 2) { MessageBox.Show(@"��ѡ���������������ϵ�����", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ISegmentCollection pPath = new PathClass(); ILine pLine; ISegment pSegment; object o = Type.Missing; for (int i = 0; i < lstPoint.Count - 1; i++) { pLine = new LineClass(); pLine.PutCoords(lstPoint[i], lstPoint[i + 1]); pSegment = pLine as ISegment; pPath.AddSegment(pSegment, ref o, ref o); } IGeometryCollection pPolyline = new PolylineClass(); pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o); IDataset dataset = (IDataset)featureClass; IWorkspace workspace = dataset.Workspace; IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit; workspaceEdit.StartEditing(true); workspaceEdit.StartEditOperation(); IFeature feature = featureClass.CreateFeature(); IGeometry geometry = pPolyline as IGeometry; DrawCommon.HandleZMValue(feature, geometry);//����ͼ��Zֵ���� feature.Shape = pPolyline as PolylineClass; int iFieldID = feature.Fields.FindField(GIS_Const.FIELD_BID); feature.Value[iFieldID] = ID.ToString(); feature.Store(); workspaceEdit.StopEditOperation(); workspaceEdit.StopEditing(false); IEnvelope envelop = feature.Shape.Envelope; DataEditCommon.g_pMyMapCtrl.ActiveView.Extent = envelop; DataEditCommon.g_pMyMapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); } else { MessageBox.Show(@"��ѡ����ͼ�㡣", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information); } //} //catch //{ // return; //} }
}//end of stepBack #endregion #region staticMembers public static PointClass stepForward(IPoint startPoint, IPoint endPoint) { ILog mLog = LogManager.GetLogger("moverLog"); ILog eLog = LogManager.GetLogger("Error"); PointClass newPoint = new PointClass(); ILine line = new LineClass(); mLog.Debug("inside stepForward(IPoint startPoint, IPoint endPoint)"); mLog.Debug("start point is " + PointToString(startPoint)); mLog.Debug("end point is " + PointToString(endPoint)); line.FromPoint = startPoint; line.ToPoint = endPoint; double angle = line.Angle; mLog.Debug("the angle we are going to move at is " + angle.ToString()); double stepLength = .5; try { double newX = endPoint.X + stepLength * System.Math.Cos(angle); double newY = endPoint.Y + stepLength * System.Math.Sin(angle); newPoint.X = newX; newPoint.Y = newY; } catch (System.Exception ex) { eLog.Debug(ex); } mLog.Debug("leaving stepForward with a point value of " + PointToString(newPoint)); return(newPoint); }//end of stepForward
public static PointClass stepBack(IPoint startPoint, IPoint endPoint) { ILog eLog = LogManager.GetLogger("Error"); PointClass newPoint = new PointClass(); ILine line = new LineClass(); line.FromPoint = startPoint; line.ToPoint = endPoint; double angle = line.Angle; double stepLength = -.05; try { double newX = endPoint.X + stepLength * System.Math.Cos(angle); double newY = endPoint.Y + stepLength * System.Math.Sin(angle); newPoint.X = newX; newPoint.Y = newY; } catch (System.Exception ex) { eLog.Debug(ex); } return(newPoint); }//end of stepForward
/// <summary> /// 私有方法:重写方法系统 OnLoad 方法 (窗体加载事件) /// </summary> /// <param name="e"></param> protected override void OnLoad(EventArgs e) { //base.OnLoad(e); //打开双缓冲(双缓存),防止闪烁 DoubleBuffered = true; //h = base.ClientSize.Height - 1; h = (base.ClientSize.Height / gridHeight - 1) * gridHeight; // w = (base.ClientSize.Width / gridWidth - 1) * gridWidth; w = base.ClientSize.Width - 1; divmain = (int)((float)w / (float)gridWidth); val1 = new float[divmain]; val = new float[w]; //创建一个 Timer 控件 tmrRefresh = new Timer(); //设置Timer时间 tmrRefresh.Interval = interval; //开始Timer tmrRefresh.Enabled = true; //绑定事件 tmrRefresh.Tick += new EventHandler(tmrRefresh_Tick); for (int i = 0; i < channelcount; i++) { LineClass line = new LineClass(); line.name = "Line" + i.ToString(); LineList.Add(line); } }
private IPolyline assemblePolyLine(List <LineSeg> segs) { IPolyline ln = new PolylineClass(); double dsq = m_dtol * m_dtol; ISegmentCollection path = new PathClass(); // List<LineSeg> sorted = new List<LineSeg>();; // for (int i = 0; i < segs.Count; i++) { // LineSeg prior = (i > 0 ? sorted[i-1] : null); // LineSeg next = (i < segs.Count-1 ? segs[i+1] : null); // sorted.Add(appropriatelySwapped(dsq,prior,segs[i],next)); // } // for (int i = 0; i < /*sorted*/ segs.Count; i++) { LineSeg l = /*sorted*/ segs[i]; ILine part = new LineClass(); IPoint fromp = new PointClass(); fromp.X = l.Start.X; fromp.Y = l.Start.Y; IPoint top = new PointClass(); top.X = l.End.X; top.Y = l.End.Y; part.FromPoint = fromp; part.ToPoint = top; object ignored = System.Reflection.Missing.Value; path.AddSegment((ISegment)part, ref __missing, ref __missing); } (ln as IGeometryCollection).AddGeometry((IGeometry)path, ref __missing, ref __missing); ln.SpatialReference = m_spref; return(ln); }
public static double GetAngle(IPoint from, IPoint to) { ILine pLine = new LineClass(); pLine.PutCoords(from, to); return(pLine.Angle); }
public void PutCoords(IPoint[] controlPoints) { if (controlPoints.Length < 2) { throw new ArgumentException("传入的标绘元素控制点个数与元素最小控制点数不匹配"); } //GetControlPoints() this.ControlPoints = controlPoints; //GetShape() object objBefore = Type.Missing; object objAfter = Type.Missing; ISegmentCollection segment = new PathClass(); for (int i = 0; i < controlPoints.Length - 1; i++) { ILine line = new LineClass { FromPoint = controlPoints[i], ToPoint = controlPoints[i + 1] }; segment.AddSegment((ISegment)line, objBefore, objAfter); } IPath path = (IPath)segment; IGeometryCollection polyline = new PolylineClass(); polyline.AddGeometry(path, ref objBefore, ref objAfter); IGeometry geometry = (IGeometry)polyline; // ITopologicalOperator topo = polyline as ITopologicalOperator; // topo.Simplify(); this.Shape = geometry; }
public static double GetAngleRadianByPolyline(IPolyline polyline) { ILine pLine = new LineClass(); pLine.PutCoords(polyline.FromPoint, polyline.ToPoint); return(pLine.Angle); }
public static double GetAngleDegreeByPolyline(IPolyline polyline) { ILine pLine = new LineClass(); pLine.PutCoords(polyline.FromPoint, polyline.ToPoint); return((180 * pLine.Angle) / Math.PI); }
private IGeometryCollection GenerateYardSticks(IGeometryCollection verticesColl) { IPoint startPT = new PointClass(); IPoint endPT = new PointClass(); IGeometryCollection yardstickColl = new GeometryBagClass(); ISegmentCollection yardsegColl = new PolylineClass(); object obj = Type.Missing; for (int i = 0; i < verticesColl.GeometryCount; i++) { if (i < verticesColl.GeometryCount - 1) { ILine pLine = new LineClass(); startPT = verticesColl.get_Geometry(i) as IPoint; endPT = verticesColl.get_Geometry(i + 1) as IPoint; pLine.PutCoords(startPT, endPT); yardsegColl.AddSegment(pLine as ISegment, ref obj, ref obj); } else { MessageBox.Show(i + " yardsticks generated"); } } IPolyline pPolyline = (IPolyline)yardsegColl; yardstickColl.AddGeometry(pPolyline, ref obj, ref obj); return(yardstickColl); }
public static IGeometryCollection ConstructPolygon(List <IPoint> pointArray) { //创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象 object o = Type.Missing; ISegmentCollection pSegCollection = new RingClass(); for (int i = 0; i < pointArray.Count - 1; i++) { IPoint from = pointArray[i]; IPoint to = pointArray[i + 1]; ILine pLine = new LineClass(); //设置Line对象的起始终止点 pLine.PutCoords(from, to); //QI到ISegment ISegment pSegment = pLine as ISegment; pSegCollection.AddSegment(pSegment, ref o, ref o); } //QI到IRing接口封闭Ring对象,使其有效 IRing pRing = pSegCollection as IRing; pRing.Close(); //使用Ring对象构建Polygon对象 IGeometryCollection pGeometryColl = new PolygonClass(); pGeometryColl.AddGeometry(pRing, ref o, ref o); return(pGeometryColl); }
public static IGeometryCollection ConstructPolygon(IPoint[] pointArray) { //创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象 object o = Type.Missing; ISegmentCollection pSegCollection = new RingClass(); for (int i = 0; i < pointArray.Length - 1; i++) { IPoint from = pointArray[i]; IPoint to = pointArray[i + 1]; ILine pLine = new LineClass(); //设置Line对象的起始终止点 pLine.PutCoords(from, to); //QI到ISegment ISegment pSegment = pLine as ISegment; pSegCollection.AddSegment(pSegment, ref o, ref o); } //QI到IRing接口封闭Ring对象,使其有效 IRing pRing = pSegCollection as IRing; pRing.Close(); //使用Ring对象构建Polygon对象 IGeometryCollection pGeometryColl = new PolygonClass(); pGeometryColl.AddGeometry(pRing, ref o, ref o); //释放AO对象 System.Runtime.InteropServices.Marshal.ReleaseComObject(pRing); return(pGeometryColl); }
public static ILine ConstructLine(IPoint from, IPoint to) { ILine pline = new LineClass(); pline.PutCoords(from, to); return(pline); }
//将收集到的点转换成线 private IPolyline CreatePolyline(IPointCollection pPointcollection) { int PointNumber = int.Parse(pPointcollection.PointCount.ToString()); object o = Type.Missing; //线数组 ISegmentCollection pSegmentCollection = new PolylineClass(); IZAware z = pSegmentCollection as IZAware; IMAware m = pSegmentCollection as IMAware; z.ZAware = true; m.MAware = true; for (int i = 0; i < PointNumber - 1; i++) { ILine pLine = new LineClass(); pLine.PutCoords(pPointcollection.get_Point(i), pPointcollection.get_Point(i + 1)); pSegmentCollection.AddSegment((ISegment)pLine, ref o, ref o); } IPolyline pPolyline = new PolylineClass(); pPolyline = pSegmentCollection as IPolyline; return(pPolyline); }
private void pictureBox_MouseMove(object sender, MouseEventArgs e) { isDrag = true; // 자유곡선 처리. 움직이는 좌표 받아와서 계속 라인 그려줌. if (e.Button == MouseButtons.Left && setShape.Equals("pen")) { // 불러오기 했을때 더블클릭시 선 그려짐 방지 if (isOpened) { isOpened = false; isDrag = false; return; } // 마우스 클릭한 상태에서 이동하는 실시간 좌표 값 저장 movePoint.X = e.X; movePoint.Y = e.Y; // 선 객체 생성 LineClass myPen = new LineClass(previousPoint, movePoint); myPen.setPen(currentPen); shapes_pen.AddLast(myPen); draw_pen(g, currentPen, previousPoint, movePoint); } }
private static double GetAngleOfSegment(IPoint FromPoint, IPoint ToPoint) { //double testa = DegreeToRadian(Math.Atan((inSegment.ToPoint.Y - inSegment.FromPoint.Y) / (inSegment.ToPoint.X - inSegment.FromPoint.X))); ////degrees(atan((top - bottom)/(right - left))) ILine line = new LineClass(); double outAngle; double pi = 4 * System.Math.Atan(1); line.PutCoords(FromPoint, ToPoint); //if (line.Angle < 0) // outAngle = (180 * line.Angle) / pi; //else // outAngle = (180 - (line.Angle * 180) / 3.14159265358979); outAngle = (180 - (line.Angle * 180) / 3.14159265358979); //double dangle = Math.Abs(line.Angle) * 360 / (2 * pi); //line.FromPoint = inSegment.FromPoint; //line.ToPoint = inSegment.ToPoint; //outAngle = (int)System.Math.Round(((180 * line.Angle) / pi), 0); //outAngle = line.Angle; //outAngle = outAngle + 90; if (outAngle < 0) { outAngle += 360; } if (outAngle > 360) { outAngle -= 360; } return(outAngle); }
private bool isValidMove(IntVector2 _testPoint, LineClass _lineIn, bool checkUsedArray) { IntVector2 testPointReverse = _lineIn.getReverse(_testPoint); if (isOutsideGameGrid(_testPoint)) { return(false); } if (isOutsideGameGrid(testPointReverse)) { return(false); } if (isSquareABlocker(_testPoint)) { return(false); } if (isSquareABlocker(testPointReverse)) { return(false); } if (!_lineIn.isValidMove(_testPoint)) { return(false); } if (checkUsedArray) { if (usedArray [_testPoint.x, _testPoint.y]) { return(false); } if (usedArray [testPointReverse.x, testPointReverse.y]) { return(false); } } else { for (int i = 0; i < linesList.Count; ++i) { if (i != activeLine) { if (linesList [i].hitsLine(_testPoint)) { return(false); } if (linesList [i].hitsLine(testPointReverse)) { return(false); } } } } return(true); }
static private double Length(IPoint pt1, IPoint pt2) { ILine line = new LineClass(); line.FromPoint = pt1; line.ToPoint = pt2; return(line.Length); }
/// <summary> /// 通过起点和终点创建直线 /// </summary> /// <param name="fromPoint">起点的ESRI点几何形状接口</param> /// <param name="toPoint">终点的ESRI点几何形状接口</param> /// <returns>ESRI直线几何形状接口</returns> public static ILine CreateLineByTwoPoints(IPoint fromPoint, IPoint toPoint) { ILine line = new LineClass(); line.FromPoint = fromPoint; line.ToPoint = toPoint; return(line); }
private void route_Search_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.start_time.EditValue == "" || this.end_time.EditValue == "") { MessageBox.Show("请选择起止日期"); return; } SqlHelper help = new SqlHelper(); String sql = "select * from route where tm between '" + this.start_time.EditValue + "' and '" + this.end_time.EditValue + "'"; DataTable dt = help.getMySqlRead(sql); ISimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(); simpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle; IColor color = GisClass.GetRgbColor(0, 255, 0); simpleMarkerSymbol.Color = color; ILineElement lineElement = new LineElementClass(); IElement ele1 = lineElement as IElement; ISegment pSegment; ILine pLine = null; object o = Type.Missing; ISegmentCollection pPath = new PathClass(); for (int i = 0; i < dt.Rows.Count; i++) { IMarkerElement markerEle = new MarkerElementClass(); IElement ele = markerEle as IElement; IPoint point = new PointClass(); markerEle.Symbol = simpleMarkerSymbol; point.PutCoords(Double.Parse(dt.Rows[i]["x"].ToString()), Double.Parse(dt.Rows[i]["y"].ToString())); ele.Geometry = point; pGraphicsContainer.AddElement(ele, 0); //逐段添加线 if (i > 0 && i < dt.Rows.Count) { IPoint point1 = new PointClass(); point1.PutCoords(Double.Parse(dt.Rows[i - 1]["x"].ToString()), Double.Parse(dt.Rows[i - 1]["y"].ToString())); pLine = new LineClass(); pLine.PutCoords(point1, point); pSegment = pLine as ISegment; pPath.AddSegment(pSegment, ref o, ref o); } axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); } IGeometryCollection pPolyline = new PolylineClass(); pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o); IPolyline polyline = pPolyline as IPolyline; //获取范围 IEnvelope ev = polyline.Envelope; this.axMapControl1.ActiveView.Extent = ev; ele1.Geometry = pPolyline as IPolyline; pGraphicsContainer.AddElement(ele1, 0); }
public override void OnMouseMove(int Button, int Shift, int X, int Y) { IPoint pt = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); pt = GIS.GraphicEdit.SnapSetting.getSnapPoint(pt); if (m_NewPolygonFeedback == null) { return; } m_NewPolygonFeedback.MoveTo(pt); if (m_ptCollection.PointCount == 0) { return; } double d_Total = 0; double d_segment = 0; double d_Area = 0;//20140219 lyf IPoint lastPt = m_ptCollection.get_Point(m_ptCollection.PointCount - 1); ILine line = new LineClass(); line.PutCoords(lastPt, pt); //节距离 d_segment = line.Length; m_frmMeasureResult.Segment = d_segment; ///20140219 lyf 当前点和起始点距离,计算周长用 IPoint firstPt = m_ptCollection.get_Point(0); ILine tempLastLine = new LineClass(); tempLastLine.PutCoords(pt, firstPt); try { IPolyline polyline = m_ptCollection as IPolyline; if (polyline.IsEmpty) { d_Total = d_segment; d_Area = 0; } else { d_Total = polyline.Length + d_segment + tempLastLine.Length; d_Area = CaculateArea(pt); } } catch { } //赋值给总长度 m_frmMeasureResult.Total = d_Total; m_frmMeasureResult.Area = d_Area; m_frmMeasureResult.PolygonResultChange(); }
private double GetAngle(IPoint from, IPoint to) { ILine line = new LineClass() { FromPoint = from, ToPoint = to }; return(line.Angle); }
public double ComputeDistance(Point location1, Point location2) { double dResult = 0; Line oLine = new LineClass(); Points oPointsCol = new PointsClass(); oPointsCol.Add(location1); oPointsCol.Add(location2); oLine.Parts.Add(oPointsCol); dResult = this.ComputeDistance(oLine); return dResult; }
/// <summary> /// 面转线 /// </summary> /// <params name="pPolyline"></params> /// <returns></returns> public static IPolyline PolygonToPolyline(IPolygon Polygon) { IPolyline pPolyline = null; if (Polygon != null && Polygon.IsEmpty == false) { IGeometryCollection pPolygonGeoCol = Polygon as IGeometryCollection; ISegment pSegment = null; ILine pline = new LineClass(); ISegmentCollection pLineSegment = new PolylineClass(); for (int i = 0; i < pPolygonGeoCol.GeometryCount; i++) { ISegmentCollection pPolygonSegCol = pPolygonGeoCol.get_Geometry(i) as ISegmentCollection; //for (int j = 0; j < pPolygonSegCol.SegmentCount; j++) //{ // pSegment = pPolygonSegCol.get_Segment(j); // pline = pSegment as ILine; //} pLineSegment.AddSegmentCollection(pPolygonSegCol); } pPolyline = (IPolyline)pLineSegment; } return pPolyline; }
private static double GetAngleOfSegment(IPoint FromPoint, IPoint ToPoint) { //double testa = DegreeToRadian(Math.Atan((inSegment.ToPoint.Y - inSegment.FromPoint.Y) / (inSegment.ToPoint.X - inSegment.FromPoint.X))); ////degrees(atan((top - bottom)/(right - left))) ILine line = new LineClass(); double outAngle; double pi = 4 * System.Math.Atan(1); line.PutCoords(FromPoint, ToPoint); //if (line.Angle < 0) // outAngle = (180 * line.Angle) / pi; //else // outAngle = (180 - (line.Angle * 180) / 3.14159265358979); outAngle = (180 - (line.Angle * 180) / 3.14159265358979); //double dangle = Math.Abs(line.Angle) * 360 / (2 * pi); //line.FromPoint = inSegment.FromPoint; //line.ToPoint = inSegment.ToPoint; //outAngle = (int)System.Math.Round(((180 * line.Angle) / pi), 0); //outAngle = line.Angle; //outAngle = outAngle + 90; if (outAngle < 0) { outAngle += 360; } if (outAngle > 360) { outAngle -= 360; } return outAngle; }
private void createpolygon(IPointCollection ippoints) { ISegmentCollection ppath = new PathClass(); IGeometryCollection ppolyline = new PolylineClass(); if (ippoints.PointCount >= 3) { int i; object o = Type.Missing; if (ippoints.PointCount >= 4) { ippoints.RemovePoints(ippoints.PointCount - 2, 1); } ippoints.AddPoint(ippoints.get_Point(0)); for (i = 0; i < ippoints.PointCount - 1; i++) { ILine pline = new LineClass(); pline.PutCoords(ippoints.get_Point(i), ippoints.get_Point(i + 1)); ISegment psegment = pline as ISegment; ppath.AddSegment(psegment, ref o, ref o); ppolyline.AddGeometry(ppath as IGeometry, ref o, ref o); } ipPolyResult = ppolyline as IPolyline; ISegmentCollection pRing = new RingClass(); IGeometryCollection pGeometryColl = new PolygonClass(); for (int j = 0; j < ppolyline.GeometryCount; j++) { pRing.AddSegmentCollection(ppolyline.get_Geometry(j) as ISegmentCollection); pGeometryColl.AddGeometry(pRing as IGeometry, ref o, ref o); } ipolygon = pGeometryColl as IPolygon; } }
public static ISegment MakeOneHatch(IPolyline pSubPL, double dist, double m, double numhatch, double dTxtInterval, double dHatchLen, double dHatchOffset) { ILine pL = new LineClass(); int result; ISegmentM pSegM; Math.DivRem((int)numhatch, (int)dTxtInterval, out result); if (!(result == 0)) { if (dHatchOffset == 0) pSubPL.QueryNormal(esriSegmentExtension.esriNoExtension, dist, false, (dHatchLen * 0.5), pL); else if (dHatchOffset > 0) pSubPL.QueryNormal(esriSegmentExtension.esriNoExtension, dist, false, (dHatchLen * 0.5) + dHatchOffset, pL); else if (dHatchOffset < 0) { pSubPL.ReverseOrientation(); pSubPL.QueryNormal(esriSegmentExtension.esriNoExtension, pSubPL.Length - dist, false, dHatchLen + Math.Abs(dHatchOffset), pL); pSubPL.ReverseOrientation(); } } ICurve pCurve; if (dHatchOffset != 0) { pL.GetSubcurve(Math.Abs(dHatchOffset), pL.Length, false, out pCurve); pSegM = pCurve as ISegmentM; } else pSegM = pL as ISegmentM; pSegM.SetMs(m, m); return pSegM as ISegment; }
public override void OnMouseDown(int Button, int Shift, int X, int Y) { if (Button == 2) return; INewLineFeedback pLineFeed; if (m_pPoint1 == null) { m_pPoint1 = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); m_pPoint1 = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint1); m_pFeedback = new NewLineFeedbackClass(); pLineFeed = (INewLineFeedback)m_pFeedback; pLineFeed.Start(m_pPoint1); if (m_pFeedback != null) m_pFeedback.Display = m_hookHelper.ActiveView.ScreenDisplay; } else if (m_pPoint2 == null) { ///20140216 lyf ICursor pCursor = null; m_selectionSet.Search(null, false, out pCursor); IFeatureCursor pFeatureCursor = pCursor as IFeatureCursor; IFeature m_pFeature = pFeatureCursor.NextFeature(); if (pCursor != null) { pCursor = null; ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pCursor); } if (m_pFeature == null) { MessageBox.Show(@"��ѡҪ��Ϊ�գ�������ѡ��Ҫ�ء�", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } m_pPoint2 = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); m_pPoint2 = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint2); //�ߺ�Ҫ�ض���ȫ�ˣ���ʼ���� //IFeatureLayer pFeatureLayer = m_pCurrentLayer as IFeatureLayer; IFeatureClass pFeatureClass = m_featureLayer.FeatureClass; ILine nLine = new LineClass();//�������� nLine.PutCoords(m_pPoint1, m_pPoint2); ITransformation nTransformation = new AffineTransformation2DClass(); IAffineTransformation2D nAffineTransformation2D = nTransformation as IAffineTransformation2D; nAffineTransformation2D.DefineReflection(nLine); //����༭ IWorkspaceEdit pWorkspaceEdit = DataEditCommon.g_CurWorkspaceEdit;// GetWorkspaceEdit(); ITransform2D nTransform2D = m_pFeature.Shape as ITransform2D;//����Ŀ�� nTransform2D.Transform(esriTransformDirection.esriTransformForward, nTransformation); if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry0Dimension) { pWorkspaceEdit.StartEditOperation(); IFeature pNewFeature = pFeatureClass.CreateFeature(); IPoint pNewPoint = nTransform2D as IPoint; pNewFeature.Shape = pNewPoint; pNewFeature.Store(); pWorkspaceEdit.StopEditOperation(); DataEditCommon.g_pMyMapCtrl.Map.ClearSelection(); DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature); } else if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry1Dimension) { pWorkspaceEdit.StartEditOperation(); IFeature pNewFeature = pFeatureClass.CreateFeature(); IPolyline pNewPolyline = nTransform2D as IPolyline;//�������� pNewFeature.Shape = pNewPolyline; pNewFeature.Store(); pWorkspaceEdit.StopEditOperation(); DataEditCommon.g_pMyMapCtrl.Map.ClearSelection(); DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature); } else if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry2Dimension) { pWorkspaceEdit.StartEditOperation(); IFeature pNewFeature = pFeatureClass.CreateFeature(); IPolygon pNewPolygon = nTransform2D as IPolygon;//�������� pNewFeature.Shape = pNewPolygon; pNewFeature.Store(); pWorkspaceEdit.StopEditOperation(); DataEditCommon.g_pMyMapCtrl.Map.ClearSelection(); DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature); } else { } pLineFeed = (INewLineFeedback)m_pFeedback; pLineFeed.AddPoint(m_pPoint2); pLineFeed.Stop();//��קֹͣ m_pFeature = null; m_pPoint1 = null; m_pPoint2 = null; } m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); }
private static void CreateToAndTurnPoints(ICurve mainCurve, IPoint joinPoint, out IPoint toPoint, out IPoint turnPoint, double doglegDistance, bool distAsPercent) { IPoint closestPointOnMain = null; IProximityOperator lineProxOp = null; ILine tempLine = null; ICurve pCur = null; IPoint tempPt2 = null; IConstructPoint constTempPt2 = null; toPoint = null; turnPoint = null; try { closestPointOnMain = new PointClass(); lineProxOp = mainCurve as IProximityOperator; closestPointOnMain = lineProxOp.ReturnNearestPoint(joinPoint, esriSegmentExtension.esriNoExtension); //Create temp line to main tempLine = new LineClass(); tempLine.FromPoint = closestPointOnMain; tempLine.ToPoint = joinPoint; toPoint = closestPointOnMain; double dist; if (distAsPercent) { pCur = (ICurve)tempLine; dist = pCur.Length * (doglegDistance / 100); } else { if (tempLine.Length < doglegDistance) { dist = 0; } else {//Adjust distance if needed dist = doglegDistance; } } //Create the "to" point for new line - tap location on main //IPoint tempPt1 = new PointClass(); //IConstructPoint constTempPt1 = (IConstructPoint)tempPt1; //constTempPt1.ConstructAlong(tempLine, esriSegmentExtension.esriNoExtension, dist, false); // toPoint = (IPoint)constTempPt1; //Create dogleg (turn) point for new line if needed if (dist > 0) { tempPt2 = new PointClass(); constTempPt2 = (IConstructPoint)tempPt2; constTempPt2.ConstructAlong(tempLine, esriSegmentExtension.esriNoExtension, dist, false); turnPoint = (IPoint)constTempPt2; } else turnPoint = null; } catch (Exception ex) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ErrorInThe") + "CreateToAndTurnPoints: " + ex.Message); } finally { closestPointOnMain = null; lineProxOp = null; tempLine = null; pCur = null; tempPt2 = null; constTempPt2 = null; } }
public static string AddLaterals(IApplication app, List<AddLateralDetails> addLateralsDetails, IFeature inFeatures, bool logOperation, bool suppressDialog, bool store, bool ForceSourcePointConnection, IFeatureLayer pEditLayer) { string resetFlow = ""; bool useDefaultTemplate; List<IFeature> ComplFeat = new List<IFeature>(); IMap map = null; IEditor editor = null; IMouseCursor appCursor = null; IMxDocument mxdoc = null; IFeatureLayer pointFLayer = null; IFeatureLayer matchLineFLayer = null; IFeatureLayer targetLineFLayer = null; IEditLayers eLayers = null; ISelectionSet2 pointSelSet = null; IFeatureSelection pointFeatureSelection = null; IEditTemplate pLateralLineEditTemp = null; List<pointAlongSettings> pointAlongLayers = null; pointAlongSettings pointAlongLayer = null; ICursor pointCursor = null; IFeature pointFeature = null; //ProgressBar ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = null; ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = null; ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog = null; // Create a CancelTracker ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = null; try { if (Control.ModifierKeys == Keys.Control) { useDefaultTemplate = false; } else { useDefaultTemplate = true; } bool boolSelectedEdges = false; if (Control.ModifierKeys == Keys.Shift) { boolSelectedEdges = true; } else { boolSelectedEdges = false; } //Get edit session bool LatCreated = false; editor = Globals.getEditor(app); if (editor.EditState != esriEditState.esriStateEditing) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("MustBEditg"), _caption); editor = null; return ""; } //Change mouse cursor to wait - automatically changes back (ArcGIS Desktop only) appCursor = new MouseCursorClass(); appCursor.SetCursor(2); mxdoc = (IMxDocument)app.Document; map = editor.Map; for (int k = 0; k < addLateralsDetails.Count; k++) { bool FCorLayerPoint = true; if (pEditLayer != null) { if (pEditLayer.Name == addLateralsDetails[k].Point_LayerName) { pointFLayer = pEditLayer; } else { continue; } } else { pointFLayer = (IFeatureLayer)Globals.FindLayer(map, addLateralsDetails[k].Point_LayerName, ref FCorLayerPoint); } if (inFeatures != null) { if (pointFLayer == null) continue; if (pointFLayer.FeatureClass == null) continue; if (inFeatures.Class.CLSID.ToString() != pointFLayer.FeatureClass.CLSID.ToString()) continue; if (inFeatures.Class.ObjectClassID.ToString() != pointFLayer.FeatureClass.ObjectClassID.ToString()) continue; if (inFeatures.Class.AliasName.ToString() != pointFLayer.FeatureClass.AliasName.ToString()) continue; } //Report any problems before exiting if (pointFLayer == null) { continue; } bool FCorLayerMatch = true; bool FCorLayerTarget = true; matchLineFLayer = (IFeatureLayer)Globals.FindLayer(map, addLateralsDetails[k].MainLine_LayerName, ref FCorLayerMatch); targetLineFLayer = (IFeatureLayer)Globals.FindLayer(map, addLateralsDetails[k].LateralLine_LayerName, ref FCorLayerTarget); // IFeatureLayerDefinition2 pFeatLayerdef = matchLineFLayer as IFeatureLayerDefinition2; if (matchLineFLayer == null) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsMess_1") + "'" + addLateralsDetails[k].MainLine_LayerName + "'.", _caption); return ""; } if (matchLineFLayer.FeatureClass == null) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsMess_1") + "'" + addLateralsDetails[k].MainLine_LayerName + "'.", _caption); return ""; } if (matchLineFLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPolyline) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsMess_2") + "'" + addLateralsDetails[k].MainLine_LayerName + "'.", _caption); return ""; } if (targetLineFLayer == null) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsMess_3") + "'" + addLateralsDetails[k].LateralLine_LayerName + "'.", _caption); return ""; } if (targetLineFLayer.FeatureClass == null) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsMess_3") + "'" + addLateralsDetails[k].LateralLine_LayerName + "'.", _caption); return ""; } if (targetLineFLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPolyline) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsMess_4") + "'" + addLateralsDetails[k].LateralLine_LayerName + "'.", _caption); return ""; } //Confirm the other layers are the correct shape type if (pointFLayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint || matchLineFLayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline) return ""; //Confirm that target layer is editable and is a line layer eLayers = (IEditLayers)editor; if (!(eLayers.IsEditable(targetLineFLayer)) || (targetLineFLayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline)) return ""; //Confirm that the two line layers are different Feature classes if ((matchLineFLayer.FeatureClass.CLSID == targetLineFLayer.FeatureClass.CLSID) && (matchLineFLayer.FeatureClass.AliasName == targetLineFLayer.FeatureClass.AliasName)) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ConstructionToolsError_1") , A4LGSharedFunctions.Localizer.GetString("ConstructionToolsError_2") ); return ""; } //Verify that some points are selected pointFeatureSelection = (IFeatureSelection)pointFLayer; if (pointFeatureSelection.SelectionSet.Count == 0) continue; pointSelSet = pointFeatureSelection.SelectionSet as ISelectionSet2; if (useDefaultTemplate) { //pLateralLineEditTemp = Globals.PromptAndGetEditTemplate(app, targetLineFLayer, addLateralsDetails[k].LateralLine_EditTemplate); pLateralLineEditTemp = Globals.PromptAndGetEditTemplateGraphic(targetLineFLayer, addLateralsDetails[k].LateralLine_EditTemplate); } else { pLateralLineEditTemp = Globals.PromptAndGetEditTemplateGraphic(targetLineFLayer, ""); //pLateralLineEditTemp = Globals.PromptAndGetEditTemplate(app, targetLineFLayer, ""); } if (addLateralsDetails[k].PointAlong != null) { if (addLateralsDetails[k].PointAlong.Length > 0) { pointAlongLayers = new List<pointAlongSettings>(); // IEditTemplate pPointAlongEditTemp; for (int j = 0; j < addLateralsDetails[k].PointAlong.Length; j++) { pointAlongLayer = new pointAlongSettings(); bool FCorLayerPointsAlong = true; pointAlongLayer.PointAlongLayer = (IFeatureLayer)Globals.FindLayer(map, addLateralsDetails[k].PointAlong[j].LayerName, ref FCorLayerPointsAlong); if (pointAlongLayer == null) { if (MessageBox.Show(addLateralsDetails[k].PointAlong[j].LayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsAsk_1") , A4LGSharedFunctions.Localizer.GetString("Warning") , MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return ""; } else if (pointAlongLayer.PointAlongLayer == null) { if (MessageBox.Show(addLateralsDetails[k].PointAlong[j].LayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsAsk_1") , A4LGSharedFunctions.Localizer.GetString("Warning") , MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return ""; } else if (pointAlongLayer.PointAlongLayer.FeatureClass == null) { if (MessageBox.Show(addLateralsDetails[k].PointAlong[j].LayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsAsk_2") , A4LGSharedFunctions.Localizer.GetString("Warning") , MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return ""; } else if (pointAlongLayer.PointAlongLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint) { MessageBox.Show(addLateralsDetails[k].PointAlong[j].LayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsAsk_3") , A4LGSharedFunctions.Localizer.GetString("Warning") ); return ""; } pointAlongLayer.PolygonIntersectSide = addLateralsDetails[k].PointAlong[j].PolygonOffsetSide; if (pointAlongLayer.PolygonIntersectSide == null) { pointAlongLayer.PolygonIntersectSide = "TO"; } bool FCorLayerTemp = true; pointAlongLayer.PolygonIntersectLayer = (IFeatureLayer)Globals.FindLayer(map, addLateralsDetails[k].PointAlong[j].PolygonOffsetLayerName, ref FCorLayerTemp); pointAlongLayer.FoundAsLayer = FCorLayerTemp; if (pointAlongLayer == null) { if (MessageBox.Show(addLateralsDetails[k].PointAlong[j].LayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsAsk_1") , A4LGSharedFunctions.Localizer.GetString("Warning") , MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return ""; } else if (pointAlongLayer.PolygonIntersectLayer != null) { if (pointAlongLayer.PolygonIntersectLayer.FeatureClass != null) { //Confirm that target layer is editable and is a line layer if (pointAlongLayer.PolygonIntersectLayer != null) { if (pointAlongLayer.PolygonIntersectLayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { MessageBox.Show(addLateralsDetails[k].PointAlong[j].PolygonOffsetLayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsError_3")); return ""; } } } } //Confirm that target layer is editable and is a line layer if (pointAlongLayer.PointAlongLayer != null) { if (!(eLayers.IsEditable(pointAlongLayer.PointAlongLayer)) || (pointAlongLayer.PointAlongLayer.FeatureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint)) { MessageBox.Show(addLateralsDetails[k].PointAlong[j].LayerName + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsError_4")); return ""; } if (useDefaultTemplate) { pointAlongLayer.PointAlongEditTemplate = Globals.PromptAndGetEditTemplateGraphic(pointAlongLayer.PointAlongLayer, addLateralsDetails[k].PointAlong[j].EditTemplate); //pointAlongLayer.PointAlongEditTemplate = Globals.PromptAndGetEditTemplate(app, pointAlongLayer.PointAlongLayer, addLateralsDetails[k].PointAlong[j].EditTemplate); } else { pointAlongLayer.PointAlongEditTemplate = Globals.PromptAndGetEditTemplateGraphic(pointAlongLayer.PointAlongLayer, ""); //pointAlongLayer.PointAlongEditTemplate = Globals.PromptAndGetEditTemplate(app, pointAlongLayer.PointAlongLayer, ""); } } //if (addLateralsDetails[k].PointAlong[j].Distance < 0) // pointAlongLayer.PointAlongDistance = 0; //else pointAlongLayer.PointAlongDistance = (double)addLateralsDetails[k].PointAlong[j].Distance; //if (addLateralsDetails[k].PointAlong[j].DistanceIsPercent != null) pointAlongLayer.DistanceIsPercent = (bool)addLateralsDetails[k].PointAlong[j].DistanceIsPercent; //else // pointAlongLayer.DistanceIsPercent =false; pointAlongLayers.Add(pointAlongLayer); //Verify subtype is valid for target point //if (targetPointFLayer != null) //{ // ISubtypes targetPointSubtypes = targetPointFLayer[j].FeatureClass as ISubtypes; // //string targetPointSubtypeName = targetPointSubtypes.get_SubtypeName(_targetPointSubtype); // if ((targetPointSubtypes == null) || (!targetPointSubtypes.HasSubtype))// || (String.IsNullOrEmpty(targetPointSubtypeName))) // addLateralsDetails[k].PointAlong[j].Subtype = -1; // else // { // try // { // string SubVal = targetPointSubtypes.get_SubtypeName(addLateralsDetails[k].PointAlong[j].Subtype); // // addLateralsDetails[k].PointAlong[j].Subtype = SubVal // //targetPointSubtype[k] = addLateralsDetails[k].PointAlong[j].Subtype; // } // catch // { // addLateralsDetails[k].PointAlong[j].Subtype = targetPointSubtypes.DefaultSubtypeCode; // } // } //} //else //{ // addLateralsDetails[k].PointAlong[j].Subtype = -1; //} //addLateralsDetails[k].PointAlong[j].Distance // addLateralsDetails[k].PointAlong[j].DistanceIsPercent // addLateralsDetails[k].PointAlong[j].FieldToPopulate // addLateralsDetails[k].PointAlong[j].ValueToPopulate } } } //**************************************** int total; total = pointSelSet.Count; int i = 0; // Create a CancelTracker trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass(); // Set the properties of the Step Progressor System.Int32 int32_hWnd = app.hWnd; if (suppressDialog == false) { progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass(); stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd); stepProgressor.MinRange = 0; stepProgressor.MaxRange = total; stepProgressor.StepValue = 1; stepProgressor.Message = _caption; // Create the ProgressDialog. This automatically displays the dialog progressDialog = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast // Set the properties of the ProgressDialog progressDialog.CancelEnabled = true; progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("AddLine") + i.ToString() + A4LGSharedFunctions.Localizer.GetString("Of") + total.ToString() + "."; progressDialog.Title = _caption; progressDialog.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriProgressGlobe; progressDialog.ShowDialog(); } // Create an edit operation enabling undo/redo if (logOperation) { try { editor.StartOperation(); } catch { logOperation = false; } } IPoint fromPoint = null; IPoint selPt1 = null; IPoint selPt2 = null; ILine distanceLine = null; object Missing = null; IEnvelope env = null; IEnumIDs selIds = null; IFeature pointFeature2 = null; List<int> completedOIDArrayList = null; ITopologicalOperator topoOp = null; IPolygon poly = null; ISpatialFilter sFilter = null; IFeatureCursor lineCursor = null; INetworkFeature pNF = null; IFeature testPointFeature = null; int featOID1, featOID2, nearbyCount; try { // ISelectionSet2 sel = pointSelSet as ISelectionSet2; pointSelSet.Update(null, false, out pointCursor); completedOIDArrayList = new List<int>(); while ((pointFeature = (IFeature)pointCursor.NextRow()) != null) { try { //if (inFeatures != null) //{ // if (pointFeature.OID != inFeatures.OID) // { // continue; // } //} i += 1; if (suppressDialog == false) { //Update progress bar progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("AddLine") + i.ToString() + A4LGSharedFunctions.Localizer.GetString("Of") + total.ToString() + "." + Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("CurrentOID") + pointFeature.OID; stepProgressor.Step(); } ESRI.ArcGIS.esriSystem.IStatusBar statusBar = app.StatusBar; statusBar.set_Message(0, i.ToString()); //Check if the cancel button was pressed. If so, stop process bool boolean_Continue = trackCancel.Continue(); if (!boolean_Continue) { break; } if (!ComplFeat.Contains(pointFeature)) { //Get the "from" point for new line (start from selected point) fromPoint = pointFeature.ShapeCopy as IPoint; //Create new feature(s) env = new EnvelopeClass(); //Dual Laterals When Two Selected if (total == 2 && addLateralsDetails[k].Dual_When_Two_Selected) { if (suppressDialog == false) { //Update progress bar progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("AddLine") + i.ToString() + A4LGSharedFunctions.Localizer.GetString("Of") + total.ToString() + "." + Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("CurrentOID") + pointFeature.OID; stepProgressor.Step(); } //Obtain both starting points selIds = pointSelSet.IDs; selIds.Reset(); featOID1 = selIds.Next(); featOID2 = selIds.Next(); pointFeature2 = pointFLayer.FeatureClass.GetFeature(featOID2); selPt1 = pointFeature.ShapeCopy as IPoint; selPt2 = pointFeature2.ShapeCopy as IPoint; //Measure distance distanceLine = new LineClass(); distanceLine.PutCoords(selPt1, selPt2); if (distanceLine.Length <= addLateralsDetails[k].Dual_Max_Distance_When_Two_Selected) { LatCreated = CreateDual(ref app, ref editor, pointFeature, pointFeature2, distanceLine, matchLineFLayer, targetLineFLayer, pLateralLineEditTemp, pointAlongLayers, addLateralsDetails[k].DeleteExistingLines, addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].Dual_Option_Make_Square, addLateralsDetails[k].FromToFields, addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].Hook_DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, store, addLateralsDetails[k].SearchOnLayer, addLateralsDetails[k].SearchDistance, addLateralsDetails[k].Hook_Angle, boolSelectedEdges); if (LatCreated) ComplFeat.Add(pointFeature2); if (LatCreated) ComplFeat.Add(pointFeature); //CreateDualOld(pointFeature, pointFeature2, distanceLine, matchLineFLayer, // lineFeature, targetLineFLayer, targetPointFLayer, addLateralsDetails[k].DeleteExistingLines, // addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].Dual_Option_Make_Square, // addLateralsDetails[k].Point_FieldToCalcFromMain, addLateralsDetails[k].Main_FieldToCalcForPoint, // addLateralsDetails[k].Point_PrefixForMainValue, addLateralsDetails[k].LateralLine_ValueToPopulate, // addLateralsDetails[k].LateralLine_FieldToPopulate, targetLineSubValue, // addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, // addLateralsDetails[k].PointAlong); //_targetPointDistance, _targetPointDistanceIsPercent, _targetPointSubtype, _targetPointValue, _targetPointFieldName); break; } //Create two single laterals if the duals are not created else { LatCreated = CreateSingle(ref app, ref editor, pointFeature, matchLineFLayer, targetLineFLayer, pLateralLineEditTemp, pointAlongLayers, addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, addLateralsDetails[k].FromToFields, addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].Hook_DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, store, addLateralsDetails[k].SearchOnLayer, addLateralsDetails[k].SearchDistance, addLateralsDetails[k].Hook_Angle, boolSelectedEdges); if (LatCreated) ComplFeat.Add(pointFeature); LatCreated = CreateSingle(ref app, ref editor, pointFeature2, matchLineFLayer, targetLineFLayer, pLateralLineEditTemp, pointAlongLayers, addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, addLateralsDetails[k].FromToFields, addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].Hook_DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, store, addLateralsDetails[k].SearchOnLayer, addLateralsDetails[k].SearchDistance, addLateralsDetails[k].Hook_Angle, boolSelectedEdges); if (LatCreated) ComplFeat.Add(pointFeature2); //CreateSingleOld(pointFeature, matchLineFLayer, lineFeature, targetLineFLayer, targetPointFLayer, // addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, // addLateralsDetails[k].Point_FieldToCalcFromMain, addLateralsDetails[k].Main_FieldToCalcForPoint, // addLateralsDetails[k].Point_PrefixForMainValue, addLateralsDetails[k].LateralLine_ValueToPopulate, // addLateralsDetails[k].LateralLine_FieldToPopulate, targetLineSubValue, // addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, // addLateralsDetails[k].PointAlong); //CreateSingleOld(pointFeature2, matchLineFLayer, lineFeature, targetLineFLayer, targetPointFLayer, // addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, // addLateralsDetails[k].Point_FieldToCalcFromMain, addLateralsDetails[k].Main_FieldToCalcForPoint, // addLateralsDetails[k].Point_PrefixForMainValue, addLateralsDetails[k].LateralLine_ValueToPopulate, // addLateralsDetails[k].LateralLine_FieldToPopulate, targetLineSubValue, // addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, // addLateralsDetails[k].PointAlong); break; } } //Dual Laterals when Nearby else if ((total != 1) & addLateralsDetails[k].Dual_When_Nearby) { //Check that this feature has not already been completed if (completedOIDArrayList.Contains(pointFeature.OID)) continue; selPt1 = pointFeature.ShapeCopy as IPoint; nearbyCount = 0; pointFeature2 = null; //Determine if extactly one other point is within the specified max distance topoOp = selPt1 as ITopologicalOperator; poly = topoOp.Buffer(addLateralsDetails[k].Dual_Max_Distance_When_Nearby / 2) as IPolygon; sFilter = new SpatialFilterClass(); sFilter.Geometry = poly; sFilter.GeometryField = pointFLayer.FeatureClass.ShapeFieldName; sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; if (addLateralsDetails[k].SearchOnLayer) lineCursor = pointFLayer.Search(sFilter, false); else lineCursor = pointFLayer.FeatureClass.Search(sFilter, false); while ((testPointFeature = lineCursor.NextFeature()) != null) { if (testPointFeature.OID != pointFeature.OID) { //Check that this nearby feature has not already been completed if (!completedOIDArrayList.Contains(pointFeature.OID)) { pointFeature2 = testPointFeature; nearbyCount += 1; } } if (nearbyCount > 1) break; } if (nearbyCount == 1) { selPt2 = pointFeature2.ShapeCopy as IPoint; //Measure distance distanceLine = new LineClass(); distanceLine.PutCoords(selPt1, selPt2); LatCreated = CreateDual(ref app, ref editor, pointFeature, pointFeature2, distanceLine, matchLineFLayer, targetLineFLayer, pLateralLineEditTemp, pointAlongLayers, addLateralsDetails[k].DeleteExistingLines, addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].Dual_Option_Make_Square, addLateralsDetails[k].FromToFields, addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].Hook_DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, store, addLateralsDetails[k].SearchOnLayer, addLateralsDetails[k].SearchDistance, addLateralsDetails[k].Hook_Angle, boolSelectedEdges); if (LatCreated) ComplFeat.Add(pointFeature2); if (LatCreated) ComplFeat.Add(pointFeature); //CreateDualOld(pointFeature, pointFeature2, distanceLine, matchLineFLayer, // lineFeature, targetLineFLayer, targetPointFLayer, addLateralsDetails[k].DeleteExistingLines, // addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].Dual_Option_Make_Square, // addLateralsDetails[k].Point_FieldToCalcFromMain, addLateralsDetails[k].Main_FieldToCalcForPoint, // addLateralsDetails[k].Point_PrefixForMainValue, addLateralsDetails[k].LateralLine_ValueToPopulate, // addLateralsDetails[k].LateralLine_FieldToPopulate, targetLineSubValue, // addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, // addLateralsDetails[k].PointAlong); //Add 2nd OID to completed list completedOIDArrayList.Add(pointFeature2.OID); } //Create a single lateral if 1 nearby not found else { LatCreated = CreateSingle(ref app, ref editor, pointFeature, matchLineFLayer, targetLineFLayer, pLateralLineEditTemp, pointAlongLayers, addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, addLateralsDetails[k].FromToFields, addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].Hook_DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, store, addLateralsDetails[k].SearchOnLayer, addLateralsDetails[k].SearchDistance, addLateralsDetails[k].Hook_Angle, boolSelectedEdges); if (LatCreated) ComplFeat.Add(pointFeature); //CreateSingleOld(pointFeature, matchLineFLayer, lineFeature, targetLineFLayer, targetPointFLayer, // addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, // addLateralsDetails[k].Point_FieldToCalcFromMain, addLateralsDetails[k].Main_FieldToCalcForPoint, // addLateralsDetails[k].Point_PrefixForMainValue, addLateralsDetails[k].LateralLine_ValueToPopulate, // addLateralsDetails[k].LateralLine_FieldToPopulate, targetLineSubValue, // addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, // addLateralsDetails[k].PointAlong); } } //Single Laterals else { LatCreated = CreateSingle(ref app, ref editor, pointFeature, matchLineFLayer, targetLineFLayer, pLateralLineEditTemp, pointAlongLayers, addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, addLateralsDetails[k].FromToFields, addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].Hook_DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, store, addLateralsDetails[k].SearchOnLayer, addLateralsDetails[k].SearchDistance, addLateralsDetails[k].Hook_Angle, boolSelectedEdges); if (LatCreated) ComplFeat.Add(pointFeature); //CreateSingleOld(pointFeature, matchLineFLayer, lineFeature, targetLineFLayer, targetPointFLayer, // addLateralsDetails[k].LateralLine_StartAtMain, addLateralsDetails[k].DeleteExistingLines, // addLateralsDetails[k].Point_FieldToCalcFromMain, addLateralsDetails[k].Main_FieldToCalcForPoint, // addLateralsDetails[k].Point_PrefixForMainValue, addLateralsDetails[k].LateralLine_ValueToPopulate, // addLateralsDetails[k].LateralLine_FieldToPopulate, targetLineSubValue, // addLateralsDetails[k].Hook_DoglegDistance, addLateralsDetails[k].DistanceIsPercent, addLateralsDetails[k].TolerenceForDelete, // addLateralsDetails[k].PointAlong); } } } catch (Exception ex) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ErrorInThe") + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsLbl_2") + "\n" + ex.Message, ex.Source); } finally { } // addLateralsDetails[k].InitDefaults(); if (addLateralsDetails[k].Reset_Flow != null) { resetFlow = addLateralsDetails[k].Reset_Flow; if (resetFlow.ToUpper() == "DIGITIZED") { Globals.GetCommand("A4WaterUtilities_EstablishFlowDigitized", app).Execute(); } else if (resetFlow.ToUpper() == "ROLE") { Globals.GetCommand("A4WaterUtilities_EstablishFlowAncillary", app).Execute(); } else if (resetFlow.ToUpper() == "Ancillary".ToUpper()) { Globals.GetCommand("A4WaterUtilities_EstablishFlowAncillary", app).Execute(); } else { } } } if (ForceSourcePointConnection) { foreach (IFeature sourcePnt in ComplFeat) { if (sourcePnt != null) { if (sourcePnt.Shape.IsEmpty != true) { if (sourcePnt is INetworkFeature) { pNF = (INetworkFeature)sourcePnt; try { pNF.Connect(); } catch { } } } } } } } catch (Exception ex) { editor.AbortOperation(); MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ErrorInThe") + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsLbl_2") + "\n" + ex.Message, ex.Source); } finally { // Cleanup if (progressDialog != null) progressDialog.HideDialog(); if (lineCursor != null) Marshal.ReleaseComObject(lineCursor); pNF = null; fromPoint = null; selPt1 = null; selPt2 = null; distanceLine = null; Missing = null; env = null; selIds = null; pointFeature2 = null; completedOIDArrayList = null; topoOp = null; poly = null; sFilter = null; lineCursor = null; testPointFeature = null; } if (logOperation) { try { // Stop the edit operation editor.StopOperation(_caption); } catch { logOperation = false; } } //88 } return resetFlow; } catch (Exception ex) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ErrorInThe") + A4LGSharedFunctions.Localizer.GetString("ConstructionToolsLbl_2") + "\n" + ex.Message, ex.Source); return ""; } finally { ComplFeat.Clear(); if (map != null) { (map as IActiveView).Refresh(); } if (progressDialog != null) progressDialog.HideDialog(); ComplFeat = null; map = null; editor = null; appCursor = null; mxdoc = null; pointFLayer = null; matchLineFLayer = null; targetLineFLayer = null; eLayers = null; pointSelSet = null; pointFeatureSelection = null; pLateralLineEditTemp = null; pointAlongLayers = null; pointAlongLayer = null; pointCursor = null; pointFeature = null; //ProgressBar progressDialogFactory = null; stepProgressor = null; progressDialog = null; // Create a CancelTracker trackCancel = null; } }
private void pictureBox_MouseUp(object sender, MouseEventArgs e) { if (isDrag == true) { isChanged = true; g = pictureBox1.CreateGraphics(); // 현재 위치 받아옴 currentPoint = new Point(e.X, e.Y); // 그리기 모양 지정 if (setShape.Equals("circle")) { width = System.Math.Abs(currentPoint.X - previousPoint.X); height = System.Math.Abs(currentPoint.Y - previousPoint.Y); // 드래그하는 위치에 따라 도형의 시작 위치를 바꿔줌. if (previousPoint.X > currentPoint.X && previousPoint.Y > currentPoint.Y) { previousPoint = currentPoint; } else if (previousPoint.Y > currentPoint.Y) { previousPoint.Y = currentPoint.Y; } else if (previousPoint.X > currentPoint.X) { previousPoint.X = currentPoint.X; } // 원형 객체 생성 RectangleClass myCircle = new RectangleClass(previousPoint, currentPoint, width, height); myCircle.setPen(currentPen); shapes_cir.AddLast(myCircle); draw_circle(g, currentPen, previousPoint, currentPoint); } if (setShape.Equals("rectangle")) { width = System.Math.Abs(currentPoint.X - previousPoint.X); height = System.Math.Abs(currentPoint.Y - previousPoint.Y); // 드래그하는 위치에 따라 도형의 시작 위치를 바꿔줌. if (previousPoint.X > currentPoint.X && previousPoint.Y > currentPoint.Y) { previousPoint = currentPoint; } else if (previousPoint.Y > currentPoint.Y) { previousPoint.Y = currentPoint.Y; } else if (previousPoint.X > currentPoint.X) { previousPoint.X = currentPoint.X; } // 사각형 객체 생성 RectangleClass myRectangle = new RectangleClass(previousPoint, currentPoint, height, width); myRectangle.setPen(currentPen); shapes_rec.AddLast(myRectangle); draw_rectangle(g, currentPen, previousPoint, currentPoint); } if (setShape.Equals("line")) { // 선 객체 생성 LineClass myLine = new LineClass(previousPoint, currentPoint); myLine.setPen(currentPen); shapes_line.AddLast(myLine); draw_line(g, currentPen, previousPoint, currentPoint); } } isDrag = false; }
private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { IActiveView pActiveView = axMapControl1.ActiveView.FocusMap as IActiveView; IPoint pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y); object Missing = Type.Missing; switch (m_BasicOperationTool) { case "isMeasure": if (!m_bInUse) break; bool bFirstTime = false; if (m_pLineSymbol == null) bFirstTime = true; pActiveView.ScreenDisplay.StartDrawing(pActiveView.ScreenDisplay.hDC, -1); if (bFirstTime == true) { IRgbColor pRgbColor = new RgbColorClass(); m_pLineSymbol = new SimpleLineSymbolClass(); m_pLineSymbol.Width = 2; pRgbColor.Red = 223; pRgbColor.Green = 223; pRgbColor.Blue = 223; m_pLineSymbol.Color = pRgbColor; ISymbol pSymbol = m_pLineSymbol as ISymbol; pSymbol.ROP2 = esriRasterOpCode.esriROPXOrPen; //�����ı����� m_pTextSymbol = new TextSymbolClass(); m_pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter; m_pTextSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVACenter; m_pTextSymbol.Size = 16; pSymbol = m_pTextSymbol as ISymbol; stdole.IFontDisp fnt = (stdole.IFontDisp)new stdole.StdFontClass(); fnt.Name = "Arial"; fnt.Size = Convert.ToDecimal(20); m_pTextSymbol.Font = fnt; pSymbol.ROP2 = esriRasterOpCode.esriROPXOrPen; //�������Ի��ı� m_pTextPoint = new PointClass(); } else { pActiveView.ScreenDisplay.SetSymbol(m_pTextSymbol as ISymbol); pActiveView.ScreenDisplay.DrawText(m_pTextPoint, m_pTextSymbol.Text); pActiveView.ScreenDisplay.SetSymbol(m_pLineSymbol as ISymbol); if (m_pLinePolyline.Length > 0) pActiveView.ScreenDisplay.DrawPolyline(m_pLinePolyline); } //����㵽�յ�֮������߲������ı��ĽǶ� ILine pLine = new LineClass(); pLine.PutCoords(m_pStartPoint, pPoint); double angle = pLine.Angle; angle = angle * (180 / 3.1415926); if ((angle > 90) || (angle < 180)) angle = angle + 180; if ((angle < 0) || (angle > -90)) angle = angle - 180; if ((angle < -90) || (angle > -180)) angle = angle - 180; if (angle > 180) angle = angle - 180; //Ϊ�˻����ı�������ı��ľ��룬�ǶȺ͵� double deltaX = pPoint.X - m_pStartPoint.X; double deltaY = pPoint.Y - m_pStartPoint.Y; m_pTextPoint.X = m_pStartPoint.X + deltaX / 2; m_pTextPoint.Y = m_pStartPoint.Y + deltaY / 2; m_pTextSymbol.Angle = angle; int distance = Convert.ToInt32(Math.Sqrt((deltaX * deltaX) + (deltaY * deltaY))); m_pTextSymbol.Text = "[" + distance.ToString() + "]"; //�����ı� pActiveView.ScreenDisplay.SetSymbol(m_pTextSymbol as ISymbol); pActiveView.ScreenDisplay.DrawText(m_pTextPoint, m_pTextSymbol.Text); //��ö���� IPolyline pPolyline = new PolylineClass(); ISegmentCollection pSegColl = pPolyline as ISegmentCollection; pSegColl.AddSegment(pLine as ISegment, ref Missing, ref Missing); m_pLinePolyline = GetSmashedLine(pActiveView.ScreenDisplay, m_pTextSymbol as ISymbol, m_pTextPoint, pPolyline); //���ƶ���� pActiveView.ScreenDisplay.SetSymbol(m_pLineSymbol as ISymbol); if (m_pLinePolyline.Length > 0) { pActiveView.ScreenDisplay.DrawPolyline(m_pLinePolyline); } pActiveView.ScreenDisplay.FinishDrawing(); break; } }
public override void OnMouseMove(int Button, int Shift, int X, int Y) { IPoint pt = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); pt = GIS.GraphicEdit.SnapSetting.getSnapPoint(pt); if (m_NewLineFeedback == null) return; m_NewLineFeedback.MoveTo(pt); if (m_ptColl.PointCount == 0) return; double d_Total = 0; double d_segment = 0; IPoint lastPt = m_ptColl.get_Point(m_ptColl.PointCount - 1); ILine line = new LineClass(); line.PutCoords(lastPt, pt); //�ھ��� d_segment = line.Length; _MsgInfo.Segment = d_segment; try { IPolyline polyline = m_ptColl as IPolyline; if (polyline.IsEmpty) { d_Total = d_segment; } else { d_Total = polyline.Length + d_segment; } } catch { } //��ֵ���ܳ��� _MsgInfo.Total = d_Total; _MsgInfo.LineResultChange(); }
public bool SetDynamicValues(IObject inObject, string mode, out List<IObject> ChangeFeatureList, out List<IObject> NewFeatureList) { ChangeFeatureList = null; NewFeatureList = null; IFeature inFeature = null; // IRow inRow = null; IMSegmentation mseg = null; INetworkFeature netFeat = null; IJunctionFeature iJuncFeat = null; IEdgeFeature iEdgeFeat = null; //ProgressBar ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = null; ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = null; ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog = null; // Create a CancelTracker ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass(); try { if (AAState._PerformUpdates && AAState._dv == null) { AAState.WriteLine("Dynamic Value Table is missing - Name in Config:" + AAState._defaultsTableName); // MessageBox.Show("The Attribute Assistant is turned on, but the Dynamic Value table is missing, please add the table and toggle the extension on"); AAState._PerformUpdates = false; return false; } if (AAState._PerformUpdates && AAState._dv != null) { if (inObject == null) return false; if (inObject.Table == AAState._tab) { AAState.WriteLine("Dynamic Value Table is the table that is edited, skipping"); return false; } //Convert row to feature (test for feature is null before using - this could be a table update) inFeature = inObject as IFeature; // inRow = inObject as IRow; string modeVal; if (AAState._dv.Table.Columns[mode].DataType == System.Type.GetType("System.String")) { modeVal = "(" + mode + " = '1' or " + mode + " = 'Yes' or " + mode + " = 'YES' or " + mode + " = 'True' or " + mode + " = 'TRUE')"; } else { modeVal = mode + " = 1"; } System.Int32 int32_hWnd = ArcMap.Application.hWnd; progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass(); stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd); stepProgressor.MinRange = 0; stepProgressor.MaxRange = inObject.Fields.FieldCount; stepProgressor.StepValue = 1; stepProgressor.Message = "Attribute Assistant Progress"; // Create the ProgressDialog. This automatically displays the dialog progressDialog = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast // Set the properties of the ProgressDialog progressDialog.CancelEnabled = true; progressDialog.Description = "Checking rules for " + inObject.Class.AliasName; progressDialog.Title = "Attribute Assistant Progress"; progressDialog.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriProgressGlobe; progressDialog.ShowDialog(); //for each field in this row/feature // Skip orphan junctions (saves time) if (Globals.isOrpanJunction(inFeature)) return false; //Get table name for this feature _currentDataset = inObject.Class as IDataset; _currentDatasetNameItems = _currentDataset.Name.Split('.'); tableName = _currentDatasetNameItems[_currentDatasetNameItems.GetLength(0) - 1]; stepProgressor.Message = "Checking rules for edited feature: " + inObject.Class.AliasName; progressDialog.Description = "Checking rules for edited feature: " + inObject.Class.AliasName; AAState.WriteLine("***********************************************************"); AAState.WriteLine("############ " + DateTime.Now + " ################"); AAState.WriteLine(""); AAState.WriteLine(" Setting sort order: Field - RUNORDER"); if (AAState._dv.Table.Columns.Contains("RUN_WEIGHT")) AAState._dv.Sort = "RUN_WEIGHT DESC"; AAState.WriteLine(" Querying table for Last Value for layer: " + inObject.Class.AliasName); AAState.WriteLine(" Query Used: (TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND VALUEMETHOD = 'Last_Value'"); AAState._dv.RowFilter = "(TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND VALUEMETHOD = 'Last_Value'"; AAState.WriteLine(" Number of results: " + AAState._dv.Count.ToString()); if (AAState._dv.Count > 0) { IRowChanges pRowChLast = inObject as IRowChanges; for (int retRows = 0; retRows < AAState._dv.Count; retRows++) { DataRowView drv = AAState._dv[retRows]; AAState.WriteLine(" Looking for " + drv["FIELDNAME"].ToString()); int fldLoc = inObject.Fields.FindField(drv["FIELDNAME"].ToString()); if (fldLoc > 0) { AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + " field found at position: " + fldLoc); if (pRowChLast.get_ValueChanged(fldLoc)) { AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + " Has Changed"); try { if (inObject.get_Value(fldLoc) != null) { if (inObject.get_Value(fldLoc) != DBNull.Value) { if (AAState.lastValueProperties.GetProperty(drv["FIELDNAME"].ToString()) != null) { AAState.WriteLine(" Setting Last Value"); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": " + inObject.get_Value(fldLoc).ToString()); AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), inObject.get_Value(fldLoc)); } else { AAState.WriteLine(" Setting Last Value"); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": " + inObject.get_Value(fldLoc)); AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), inObject.get_Value(fldLoc)); } } else { if (mode == "ON_CREATE") { AAState.WriteLine(" Skipping null on create"); } else { AAState.WriteLine(" Setting Last Value"); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": NULL"); AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), null); } } } else { if (mode == "ON_CREATE") { AAState.WriteLine(" Skipping null on create"); } else { AAState.WriteLine(" Setting Last Value"); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": NULL"); AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), null); } } } catch { //AAState.WriteLine(" Error Setting Last Value " + inObject.Fields.get_Field(intFldIdxs[0]).Name); } } else { AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + " Has not changed"); } } } pRowChLast = null; // pRowChLast. } //if (inObject != null) //{ // inChanges = inObject as IRowChanges; // if (intFldIdxs.Count > 0) // { // if (intFldIdxs[0] > -1) // { // changed = inChanges.get_ValueChanged(intFldIdxs[0]); // if (changed) // // if (fieldName.ToUpper() != "SHAPE") // try // { // // if (AAState.lastValueProperties. // // AAState.WriteLine(" Setting Last Value"); // if (AAState.lastValueProperties.GetProperty(strFldNames[0]) != null) // { // AAState.WriteLine(" Setting Last Value"); // AAState.WriteLine(" " + strFldNames[0] + ": " + inObject.get_Value(intFldIdxs[0]).ToString()); // AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); // } // else // { // AAState.WriteLine(" Setting Last Value"); // AAState.WriteLine(" " + strFldNames[0] + ": " + inObject.get_Value(intFldIdxs[0]).ToString()); // AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); // } // } // catch // { // //AAState.WriteLine(" Error Setting Last Value " + inObject.Fields.get_Field(intFldIdxs[0]).Name); // } // } // } //} AAState.WriteLine(" Querying table for rules for layer: " + inObject.Class.AliasName); AAState.WriteLine(" Query Used: (TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND " + modeVal); AAState._dv.RowFilter = "(TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND " + modeVal; AAState.WriteLine(" Number of results: " + AAState._dv.Count.ToString()); //AAState._processCount; if (AAState._processCount > 2) { System.Threading.Thread.Sleep(400); } if (AAState._processCount > 15) { MessageBox.Show("You have more than 15 processes running, more than likely your rules are causing an infinite loop. Any rule that creates a new feature with * as the table name can cause this issue."); return false; } if (AAState._dv.Count > 0) { bool proc = false; AAState.WriteLine(" Looping through the rows"); for (int retRows = 0; retRows < AAState._dv.Count; retRows++) { DataRowView drv = AAState._dv[retRows]; AAState.WriteLine(" ------------------------------------------------"); AAState.WriteLine(" Row Info"); AAState.WriteLine(" Row Number " + (retRows + 1).ToString()); AAState.WriteLine(" TableName: " + drv["TABLENAME"].ToString()); AAState.WriteLine(" FieldName: " + drv["FIELDNAME"].ToString()); AAState.WriteLine(" ValueInfo: " + drv["VALUEINFO"].ToString()); AAState.WriteLine(" ValueMethod: " + drv["VALUEMETHOD"].ToString()); AAState.WriteLine(" On Create: " + drv["ON_CREATE"].ToString()); AAState.WriteLine(" On Change: " + drv["ON_CHANGE"].ToString()); if (AAState._dv.Table.Columns.Contains("RUNORDER")) AAState.WriteLine(" Order: " + drv["RUNORDER"].ToString()); AAState.WriteLine(""); AAState.WriteLine(" Checking for Subtype Restriction"); valFC = drv["TABLENAME"].ToString().Trim(); if (valFC.Contains("|")) { AAState.WriteLine(" Subtype restriction Found"); string[] spliVal = valFC.Split('|'); List<string> validSubtypes = new List<string>(spliVal[1].Split(',')); List<string> inValidSubtypes; if (spliVal.GetLength(0) == 3) { inValidSubtypes = new List<string>(spliVal[2].Split(',')); } else { inValidSubtypes = new List<string>(); } int obSubVal; ISubtypes pSub = inObject.Class as ISubtypes; if (pSub != null) { if (pSub.HasSubtype) { if (inObject.get_Value(pSub.SubtypeFieldIndex).ToString() != "") { obSubVal = Convert.ToInt32(inObject.get_Value(pSub.SubtypeFieldIndex).ToString()); if (validSubtypes.Contains("*")) { if (inValidSubtypes.Contains(obSubVal.ToString())) { AAState.WriteLine(" Skipping, not the subtype defined"); proc = false; continue; } else { AAState.WriteLine(" Subtype is valid"); } } else if (validSubtypes.Contains(obSubVal.ToString())) { AAState.WriteLine(" Subtype is valid"); } else { AAState.WriteLine(" Skipping, not the subtype defined"); proc = false; continue; } } else { AAState.WriteLine(" Skipping, subtype is not set"); proc = false; continue; } } else { AAState.WriteLine(" ERROR: Layer does not have subtypes"); } } else { AAState.WriteLine(" ERROR: Layer does not have subtypes"); } } valMethod = drv["VALUEMETHOD"].ToString().ToUpper().Trim(); valData = drv["VALUEINFO"].ToString().Trim(); if (valData.Contains(Environment.NewLine)) { valData = valData.Substring(0, valData.IndexOf(Environment.NewLine)); } List<string> strFldNames = new List<string>(); List<int> intFldIdxs = new List<int>(); fieldObj = null; if (drv["FIELDNAME"] != null && drv["FIELDNAME"].ToString().Trim() != "" && drv["FIELDNAME"].ToString().Trim() != "*" && drv["FIELDNAME"].ToString().Trim() != "#") { strFldNames = new List<string>(drv["FIELDNAME"].ToString().Trim().Split(',')); foreach (string strFldName in strFldNames) { if (inObject.Fields.FindField(strFldName) >= 0) { int tem = inObject.Fields.FindField(strFldName); intFldIdxs.Add(tem); fieldObj = inObject.Fields.get_Field(tem); AAState.WriteLine(" Field Name: " + strFldName + " was found at index: " + tem); proc = true; } else if (inObject.Fields.FindFieldByAliasName(strFldName) >= 0) { int tem = inObject.Fields.FindFieldByAliasName(strFldName); intFldIdxs.Add(tem); fieldObj = inObject.Fields.get_Field(tem); AAState.WriteLine(" Field Name: " + strFldName + " was found at index: " + tem); proc = true; } else { intFldIdxs.Add(-1); AAState.WriteLine(" " + strFldName + " Field not found"); // strFldNames.Remove fieldObj = null; proc = false; } } } else if (drv["FIELDNAME"].ToString() == "#") { AAState.WriteLine(" Field is set to edited field"); IRowChanges pRowCh = null; IField pTmpFld = null; pRowCh = inObject as IRowChanges; for (int i = 0; i < inObject.Fields.FieldCount; i++) { pTmpFld = inObject.Fields.get_Field(i); if (pTmpFld.Type != esriFieldType.esriFieldTypeGlobalID && pTmpFld.Type != esriFieldType.esriFieldTypeOID && pTmpFld.Type != esriFieldType.esriFieldTypeGeometry && pTmpFld.Name.ToUpper() != "SHAPE_LENGTH" && pTmpFld.Name.ToUpper() != "SHAPE.LEN" && pTmpFld.Name.ToUpper() != "SHAPE_AREA" && pTmpFld.Name.ToUpper() != "SHAPE.AREA") { if (pRowCh.get_ValueChanged(i) == true) { AAState.WriteLine(" Adding " + pTmpFld.Name + " to field array"); strFldNames.Add(pTmpFld.Name); intFldIdxs.Add(i); proc = true; } } } pRowCh = null; pTmpFld = null; } else { AAState.WriteLine(" Field is not specified, empty, or set for all."); fieldObj = null; proc = true; } if (proc) { try { switch (valMethod) { case "FIELD_TRIGGER"://Value|FieldToChange|Value try { AAState.WriteLine(" Trying: FIELD_TRIGGER"); if (inFeature != null & valData != null) { // Parse arguments args = valData.Split('|'); string valToCheck = ""; string fldToChange = ""; string valToSet = ""; if (args.GetLength(0) == 3) { valToCheck = args[0]; fldToChange = args[1]; valToSet = args[2]; } else { AAState.WriteLine(" ERROR: Incorrect Value info was not found"); continue; } IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; //Globals.GetFieldIndex(inObject.Fields, if (intFldIdxs.Count == 0) { AAState.WriteLine(" ERROR: Field Not Set"); continue; } if (intFldIdxs[0] == -1) { AAState.WriteLine(" ERROR: Field Not Found"); continue; } if (pRowCh.get_ValueChanged(intFldIdxs[0])) { AAState.WriteLine(" Listed field changed"); if (inObject.get_Value(intFldIdxs[0]).ToString() == valToCheck) { AAState.WriteLine(" Values Match"); int chngFldIdx = Globals.GetFieldIndex(inObject.Fields, fldToChange); if (chngFldIdx == -1) { AAState.WriteLine(" ERROR: Field Not Found"); continue; } try { inObject.set_Value(chngFldIdx, valToSet); AAState.WriteLine(" Value Set"); } catch { AAState.WriteLine(" ERROR: Could not store Value: " + valToSet); } } } pRowCh = null; } } catch (Exception ex) { AAState.WriteLine(" ERROR: FIELD_TRIGGER: " + ex.Message); } finally { AAState.WriteLine(" Finished: FIELD_TRIGGER"); } break; case "VALIDATE_ATTRIBUTE_LOOKUP": { AAState.WriteLine(" Trying VALIDATE_ATTRIBUTE_LOOKUP"); IRowChanges pRowCh = null; ISQLSyntax sqlSyntax = null; IQueryFilter pQFilt = null; try { if ((valData != null) && (inFeature != null)) { pRowCh = inObject as IRowChanges; bool valueChanged = false; for (int i = 0; i < intFldIdxs.Count; i++) { if (pRowCh.get_ValueChanged(intFldIdxs[i]) == true) { valueChanged = true; break; } } if (valueChanged == false) { AAState.WriteLine(" VALIDATE_ATTRIBUTE_LOOKUP: Target value(s) did not change, skipping"); continue; } sourceLayerName = ""; string[] sourceFieldNames = null; //string[] destFieldNames = null; // Parse arguments args = valData.Split('|'); if (args.Length == 2) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); } else { AAState.WriteLine(" ERROR: the valuemethod is not defined properly for this rule"); continue; } if ((sourceFieldNames != null) && (sourceFieldNames.Length > 0)) { AAState.WriteLine(" Looking for layer: " + sourceLayerName); boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; } IFields pFlds = null; //IWorkspace pWork = null; IDataset pDs = null; string layNameFnd = ""; bool matchingLayFnd = false; IStandaloneTable pTbl = null; if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { pFlds = sourceLayer.FeatureClass.Fields; pDs = sourceLayer.FeatureClass as IDataset; layNameFnd = sourceLayer.Name; matchingLayFnd = true; } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " data source is not set"); continue; } } else { pTbl = Globals.FindStandAloneTable(AAState._editor.Map, sourceLayerName) as IStandaloneTable; if (pTbl != null) { if (pTbl.Table != null) { pFlds = pTbl.Table.Fields; pDs = pTbl.Table as IDataset; layNameFnd = pTbl.Name; matchingLayFnd = true; } } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " data source is not set"); continue; } } if (matchingLayFnd == false) { AAState.WriteLine(" ERROR: " + sourceLayerName + " was not found"); continue; } sqlSyntax = (ISQLSyntax)(pDs.Workspace); string specChar = sqlSyntax.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_WildcardManyMatch); AAState.WriteLine(" Lookup layer " + layNameFnd + " was Found: " + sourceLayerName); AAState.WriteLine(" Checking for field in Lookup table"); // string missingFieldMess = null; if (sourceFieldNames.Length != intFldIdxs.Count) { AAState.WriteLine(" Number of listed fields do not match"); continue; } int[] sourceFieldNums = new int[sourceFieldNames.Length]; // missingFieldMess = ""; pQFilt = new QueryFilterClass(); string sqlString = ""; string sqlStringUpper = ""; for (int i = 0; i < sourceFieldNames.Length; i++) { sourceFieldNums[i] = Globals.GetFieldIndex(pFlds, sourceFieldNames[i].Trim()); if (sourceFieldNums[i] < 0) { AAState.WriteLine(" Fields Missing: " + sourceFieldName[i]); break; } if (pFlds.get_Field(sourceFieldNums[i]).Type == esriFieldType.esriFieldTypeString) { if (sqlString == "") { sqlString = pFlds.get_Field(sourceFieldNums[i]).Name + "" + " = '" + inObject.get_Value(intFldIdxs[i]).ToString() + "'"; sqlStringUpper = "UPPER(" + pFlds.get_Field(sourceFieldNums[i]).Name + ")" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[i]).ToString().ToUpper().Replace(" ", specChar) + specChar + "'"; } else { sqlString = sqlString + " AND " + pFlds.get_Field(sourceFieldNums[i]).Name + "" + " = '" + inObject.get_Value(intFldIdxs[i]).ToString() + "'"; sqlStringUpper = sqlStringUpper + " AND " + "UPPER(" + pFlds.get_Field(sourceFieldNums[i]).Name + ")" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[i]).ToString().ToUpper().Replace(" ", specChar) + specChar + "'"; } } else { if (sqlString == "") { sqlString = pFlds.get_Field(sourceFieldNums[i]).Name + " = " + inObject.get_Value(intFldIdxs[i]); sqlStringUpper = pFlds.get_Field(sourceFieldNums[i]).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[i]) + specChar; } else { sqlString = sqlString + " AND " + pFlds.get_Field(sourceFieldNums[i]).Name + " = " + inObject.get_Value(intFldIdxs[i]); sqlStringUpper = sqlStringUpper + " AND " + pFlds.get_Field(sourceFieldNums[i]).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[i]) + specChar; } } } pQFilt.WhereClause = sqlString; //if (inObject.get_Value(intFldIdxs[0]).ToString().Trim() == "") //{ // if (mode == "ON_CREATE") // { // AAState.WriteLine(" Field Found"); // continue; // } // pQFilt.WhereClause = "1=1"; //} //else //{ //} AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); int intRecFound = 0; if (sourceLayer == null) { intRecFound = pTbl.Table.RowCount(pQFilt); } else { intRecFound = sourceLayer.FeatureClass.FeatureCount(pQFilt); } AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound != 1) { //if (inObject.get_Value(intFldIdxs[0]).ToString().Trim() == "") //{ // pQFilt.WhereClause = "1=1"; //} //else //{ pQFilt.WhereClause = sqlStringUpper; // } AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); if (sourceLayer == null) { intRecFound = pTbl.Table.RowCount(pQFilt); } else { intRecFound = sourceLayer.FeatureClass.FeatureCount(pQFilt); } AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound == 0) { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(" Prompting for user input"); ICursor pCurs = null; if (sourceLayer == null) { pCurs = pTbl.Table.Search(pQFilt, true); } else { pCurs = sourceLayer.FeatureClass.Search(pQFilt, true) as ICursor; } pQFilt = null; List<string> pLst = Globals.CursorToList(ref pCurs, sourceFieldNums); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; string selectVal = Globals.showOptionsForm(pLst, "Select an value to store", ComboBoxStyle.DropDownList); if (selectVal == "||Cancelled||") { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(" Value selected: " + selectVal); string[] strVals = selectVal.Split('|'); for (int i = 0; i < sourceFieldNums.Length; i++) { inObject.set_Value(intFldIdxs[i], strVals[i]); } } } } else { AAState.WriteLine(" One Exact match was found"); } pQFilt = null; } else { AAState.WriteLine(" ERROR: Invalid Value Info: " + valData); } } else { AAState.WriteLine(" ERROR: Not a feature or missing Value Info"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: VALIDATE_ATTRIBUTE_LOOKUP" + Environment.NewLine + ex.Message); } finally { pQFilt = null; sqlSyntax = null; pRowCh = null; AAState.WriteLine(" Finished: VALIDATE_ATTRIBUTE_LOOKUP"); } break; } case "ANGLE": try { AAState.WriteLine(" Trying: ANGLE"); if (inFeature != null) { if (intFldIdxs.Count == 0) { AAState.WriteLine(" Field not found"); continue; } if ((inFeature.Class as IFeatureClass).ShapeType != esriGeometryType.esriGeometryPolyline) { AAState.WriteLine(" Input feature is not a line"); continue; } bool boolGeo = true; if (valData.Trim() != "") { if (valData.ToUpper() == "A") { boolGeo = false; } } AAState.WriteLine(" Getting Angle for feature"); IPolyline pLyLine = inFeature.Shape as IPolyline; ILine pLine = new LineClass(); pLine.ToPoint = pLyLine.FromPoint; pLine.FromPoint = pLyLine.ToPoint; double angArth = pLine.Angle * 180 / Math.PI; if (angArth < 0) { angArth = 360 + angArth; } double angGeo = 270 - angArth; if (angGeo < 0) { angGeo = 360 + angGeo; } double ang; if (boolGeo) { ang = angGeo; } else { ang = angArth; } AAState.WriteLine(" Angle Calculated: " + ang); try { inObject.set_Value(intFldIdxs[0], ang); AAState.WriteLine(" Angle Stored"); } catch { AAState.WriteLine(" Could not store angle"); } pLine = null; pLyLine = null; AAState.WriteLine(" Done"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: ANGLE: " + ex.Message); } finally { AAState.WriteLine(" Finished: ANGLE"); } break; case "CREATE_PERP_LINE"://Layer to Search For|Offset Distante or Field|Search distance to look for a line|UseSnapPoint|TargetLayer|TargetLayerTemplate try { AAState.WriteLine(" Trying: CREATE_PERP_LINE"); if (inFeature != null & valData != null) { sourceLayerName = ""; double offsetVal = 5; bool useSnapPnt = false; string targetLayerName = ""; IFeatureLayer targetLayer = null; string targetLayerTemp = ""; // Parse arguments args = valData.Split('|'); int fldOff = -1; if (args.GetLength(0) == 6) { // sourceLayerName = args[0].ToString(); sourceLayerNames = args[0].ToString().Split(','); //offsetVal = Convert.ToDouble(args[1]); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse(args[2], out searchDistance); Boolean.TryParse(args[3], out useSnapPnt); targetLayerName = args[4]; targetLayerTemp = args[5]; } else if (args.GetLength(0) == 5) { // sourceLayerName = args[0].ToString(); sourceLayerNames = args[0].ToString().Split(','); //offsetVal = Convert.ToDouble(args[1]); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse(args[2], out searchDistance); Boolean.TryParse(args[3], out useSnapPnt); targetLayerName = args[4]; targetLayerTemp = ""; } else { AAState.WriteLine(" ERROR: Incorrect Value info was not found"); continue; } if (intFldIdxs.Count > 0) { AAState.WriteLine(" WARNING: Input fields are not used for this tool"); continue; } targetLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, targetLayerName, ref boolLayerOrFC); if (targetLayer == null) { AAState.WriteLine(" ERROR: Target layer not found. " + targetLayerName); continue; } if (targetLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPolyline) { AAState.WriteLine(" ERROR: Target layer is not a line layer. " + targetLayerName); continue; } for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") sourceLayerName = args[i].ToString(); if (i == 0) i++; boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer == null) { AAState.WriteLine(" ERROR/WARNING: " + sourceLayer + " was not found"); continue; } IFeatureClass iFC = inFeature.Class as IFeatureClass; if (sourceLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { AAState.WriteLine(" ERROR: " + sourceLayer + " is a polygon layer"); break; } if (sourceLayer != null) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } IPoint snapPnt = null; while ((sourceFeature = fCursor.NextFeature()) != null) { double dAlong = 0; if (sourceFeature.Class != inFeature.Class) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); pIntPnt = null; //AAState.WriteLine(" Value set to: " + strDis); //inObject.set_Value(intFldIdxs[0], strDis); //break; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); pIntPnt = null; //AAState.WriteLine(" Value set to: " + strDis); // inObject.set_Value(intFldIdxs[0], strDis); // break; } AAState.WriteLine(" Distance found: " + dAlong); IPoint pNewPt = new PointClass(); IConstructPoint2 pConsPoint = pNewPt as IConstructPoint2; if (fldOff != -1) { string temp = inObject.get_Value(fldOff).ToString(); if (Globals.IsNumeric(temp)) { Double.TryParse(temp, out offsetVal); } } AAState.WriteLine(" Offset Value: " + offsetVal); pConsPoint.ConstructOffset (sourceFeature.Shape as ICurve, esriSegmentExtension.esriNoExtension, dAlong, false, offsetVal); AAState.WriteLine(" Offset Constrcuted"); AAState.WriteLine(" Creating Line"); IPolyline pTempLine = new PolylineClass(); if (useSnapPnt && snapPnt != null) { if (snapPnt.IsEmpty) { AAState.WriteLine(" Using feature Point"); pTempLine.ToPoint = inFeature.ShapeCopy as IPoint; } else { AAState.WriteLine(" Using Snap Point"); pTempLine.ToPoint = snapPnt; } } else { AAState.WriteLine(" Using feature Point"); pTempLine.ToPoint = inFeature.ShapeCopy as IPoint; } pTempLine.FromPoint = pNewPt; AAState.WriteLine(" Line Created"); IEditTemplate pTemp = null; IFeature pFeat = null; AAState.WriteLine(" Looking for Edit Template"); if (targetLayerTemp != "") pTemp = Globals.GetEditTemplate(targetLayerTemp, targetLayer); if (pTemp != null) { AAState.WriteLine(" Template found"); pFeat = Globals.CreateFeature(pTempLine, pTemp, AAState._editor, ArcMap.Application, false, false, false); } else { AAState.WriteLine(" Template not found and creating a feature without it"); pFeat = Globals.CreateFeature(pTempLine, targetLayer, AAState._editor, ArcMap.Application, false, false, false); } AAState.WriteLine(" Feature Created"); if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } AAState.WriteLine(" Added to the new feature list"); NewFeatureList.Add(pFeat); pTemp = null; pNewPt = null; pConsPoint = null; snapPnt = null; AAState.WriteLine(" Finished"); break; } //else if (inObject.Fields.get_Field(intFldIdxs[0]).IsNullable) // inObject.set_Value(intFldIdxs[0], null); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: CREATE_PERP_LINE: " + ex.Message); } finally { AAState.WriteLine(" Finished: CREATE_PERP_LINE"); } break; case "AUTONUMBER"://Layer to Search For|Offset Distante or Field|Search distance to look for a line try { AAState.WriteLine(" Trying: AUTONUMBER"); if (inObject != null) { if (intFldIdxs.Count == 0) { AAState.WriteLine(" Field not found"); continue; } AAState.WriteLine(" Getting Max value for Field: " + strFldNames[0]); string res = Globals.GetFieldStats(inObject.Class as IFeatureClass, strFldNames[0], Globals.statsType.Max); AAState.WriteLine(" Value returned: " + res); if (res == "External component has thrown an exception.") { AAState.WriteLine(" The field specified was not a numeric field"); } else { if (Globals.IsNumeric(res)) { AAState.WriteLine(" Value is numeric"); AAState.WriteLine(" Trying to Incriment " + res); long val = (Convert.ToInt64(res) + 1); AAState.WriteLine(" Incrimented to " + res); try { AAState.WriteLine(" Trying to set value " + res); inObject.set_Value(intFldIdxs[0], val); AAState.WriteLine(" Value set" + res); } catch (Exception ex) { AAState.WriteLine(" ERROR: Could not set value: " + ex.Message.ToString()); } } else { AAState.WriteLine(" Value is not numeric: " + res); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: AUTONUMBER: " + ex.Message); } finally { AAState.WriteLine(" Finished: AUTONUMBER"); } break; case "COPY_LINKED_RECORD"://Feature Layer|Field To Copy|Primary Key Field|Foreign Key Field { try { AAState.WriteLine(" Trying: COPY_LINKED_RECORD"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 4) { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } } else { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } if (inFeature == null) { AAState.WriteLine(" ERROR: The input features is null"); break; } string[] targetLayerNames; string targetFieldName = ""; found = false; AAState.WriteLine(" Getting Value Info"); targetLayerNames = args[0].ToString().Split(','); targetFieldName = args[1].ToString(); string targetLayerName = ""; string sourceIDFieldName = args[2].ToString(); string targetIDFieldName = args[3].ToString(); AAState.WriteLine(" Checking values"); if (targetFieldName != null) { AAState.WriteLine(" Checking Field in Edited Layer"); int fldIDSourecIdx = inObject.Fields.FindField(sourceIDFieldName); if (fldIDSourecIdx > -1 && intFldIdxs.Count > 0) { if (inObject.get_Value(fldIDSourecIdx) != null && inObject.get_Value(fldIDSourecIdx) != DBNull.Value) { if (inObject.get_Value(fldIDSourecIdx).ToString() != "") { for (int i = 0; i < targetLayerNames.Length; i++) { targetLayerName = targetLayerNames[i].ToString(); if (targetLayerName != "") { // Get layer AAState.WriteLine(" Checking for join record"); bool FCorLayerSource = true; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, targetLayerName, ref FCorLayerSource); if (sourceLayer != null) { int fldValToCopyIdx = sourceLayer.FeatureClass.Fields.FindField(targetFieldName); int fldIDTargetIdx = sourceLayer.FeatureClass.Fields.FindField(targetIDFieldName); if (fldIDTargetIdx > -1 && fldValToCopyIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Name + "" + " = '" + inObject.get_Value(fldIDSourecIdx).ToString() + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Name + " = " + inObject.get_Value(fldIDSourecIdx); } IFeatureCursor pCurs; pCurs = sourceLayer.FeatureClass.Search(pQFilt, true); IFeature pRow; while ((pRow = pCurs.NextFeature()) != null) { AAState.WriteLine(" Trying to Copy Value from Record"); try { inObject.set_Value(intFldIdxs[0], pRow.get_Value(fldValToCopyIdx)); break; } catch { AAState.WriteLine(" ERROR: Could not Copy: " + inObject.get_Value(fldValToCopyIdx) + " to field: " + strFldNames[0]); } pRow = null; } pRow = null; AAState.WriteLine(" Value successfully copied"); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; } else { AAState.WriteLine(" ERROR: ID or Field to populate was not found"); } } else { ITable pTable = Globals.FindTable(AAState._editor.Map, targetLayerName); if (pTable != null) { int fldValToCopyIdx = pTable.Fields.FindField(targetFieldName); int fldIDTargetIdx = pTable.Fields.FindField(targetIDFieldName); if (fldIDTargetIdx > -1 && fldValToCopyIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (pTable.Fields.get_Field(fldIDTargetIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + pTable.Fields.get_Field(fldIDTargetIdx).Name + "" + " = '" + inObject.get_Value(fldIDSourecIdx).ToString() + "'"; } else { pQFilt.WhereClause = pTable.Fields.get_Field(fldIDTargetIdx).Name + " = " + inObject.get_Value(fldIDSourecIdx); } ICursor pCurs; pCurs = pTable.Search(pQFilt, true); IRow pRow; while ((pRow = pCurs.NextRow()) != null) { AAState.WriteLine(" Trying to Copy Value from Record"); try { inObject.set_Value(intFldIdxs[0], pRow.get_Value(fldValToCopyIdx)); break; } catch { AAState.WriteLine(" ERROR: Could not Copy: " + inObject.get_Value(fldValToCopyIdx) + " to field: " + strFldNames[0]); } pRow = null; } pRow = null; AAState.WriteLine(" Value successfully copied"); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; } else { AAState.WriteLine(" ERROR: ID or Field to populate was not found"); } } else { AAState.WriteLine(" ERROR: Table to populate not found: " + sourceLayerName); } pTable = null; } } } } } } else { AAState.WriteLine(" ERROR: ID or Field to Copy was not found"); } //if ((!found) && (inObject.Fields.get_Field(intFldIdxs[0]).IsNullable)) //{ // inObject.set_Value(intFldIdxs[0], null); //} } } catch (Exception ex) { AAState.WriteLine(" ERROR: COPY_LINKED_RECORD" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: COPY_LINKED_RECORD"); // intFldIdxs[0] = -1; } break; } case "OFFSET"://Layer to Search For|Offset Distante or Field|Search distance to look for a line try { AAState.WriteLine(" Trying: OFFSET"); if (inFeature != null & valData != null) { sourceLayerName = ""; double offsetVal = 5; // Parse arguments args = valData.Split('|'); int fldOff = -1; if (args.GetLength(0) >= 3) { // sourceLayerName = args[0].ToString(); sourceLayerNames = args[0].ToString().Split(','); //offsetVal = Convert.ToDouble(args[1]); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse(args[2], out searchDistance); } else if (args.GetLength(0) >= 2) { // sourceLayerName = args[0].ToString(); sourceLayerNames = args[0].ToString().Split(','); //offsetVal = Convert.ToDouble(args[1]); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse("1", out searchDistance); } else { AAState.WriteLine(" ERROR: Incorrect Value info was not found"); continue; } if (intFldIdxs.Count != 2) { AAState.WriteLine(" ERROR: 2 fields in fieldname are required for this tool"); continue; } // Get layer for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") sourceLayerName = args[i].ToString(); if (i == 0) i++; boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer == null) { AAState.WriteLine(" ERROR/WARNING: " + sourceLayer + " was not found"); continue; } IFeatureClass iFC = inFeature.Class as IFeatureClass; if (sourceLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { AAState.WriteLine(" ERROR: " + sourceLayer + " is a polygon layer"); break; } if (sourceLayer != null) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } while ((sourceFeature = fCursor.NextFeature()) != null) { double dAlong = 0; if (sourceFeature.Class != inFeature.Class) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; pIntPnt = null; //AAState.WriteLine(" Value set to: " + strDis); //inObject.set_Value(intFldIdxs[0], strDis); //break; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; pIntPnt = null; //AAState.WriteLine(" Value set to: " + strDis); // inObject.set_Value(intFldIdxs[0], strDis); // break; } AAState.WriteLine(" Distance found: " + dAlong); IPoint pNewPt = new PointClass(); IConstructPoint2 pConsPoint = pNewPt as IConstructPoint2; if (fldOff != -1) { string temp = inObject.get_Value(fldOff).ToString(); if (Globals.IsNumeric(temp)) { Double.TryParse(temp, out offsetVal); } } pConsPoint.ConstructOffset (sourceFeature.Shape as ICurve, esriSegmentExtension.esriNoExtension, dAlong, false, offsetVal); inObject.set_Value(intFldIdxs[0], pNewPt.X); inObject.set_Value(intFldIdxs[1], pNewPt.Y); pNewPt = null; pConsPoint = null; } //else if (inObject.Fields.get_Field(intFldIdxs[0]).IsNullable) // inObject.set_Value(intFldIdxs[0], null); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: OFFSET: " + ex.Message); } finally { AAState.WriteLine(" Finished: OFFSET"); } break; case "SIDE": { AAState.WriteLine(" Trying: SIDE"); try { //Layer|IDField|IDField source if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" Feature and valueinfo is valid"); AAState.WriteLine(" Splitting up value info: " + valData); sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; string inputFieldName = ""; args = valData.Split('|'); if (args.Length < 2) { AAState.WriteLine(" ERROR: SIDE: Value info does not have enough parameters"); continue; } switch (args.Length) { case 3: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); inputFieldName = args[2].ToString(); break; default: AAState.WriteLine(" ERROR: SIDE: Value info does not have enough parameters"); continue; } int fldValToCopyIdx = inObject.Fields.FindField(inputFieldName); if (fldValToCopyIdx > -1) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { // Get layer AAState.WriteLine(" " + sourceLayerName + " Layer found"); int fldValTargetJoinIdx = Globals.GetFieldIndex(sourceLayer, sourceFieldName); if (fldValTargetJoinIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (sourceLayer.FeatureClass.Fields.get_Field(fldValTargetJoinIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + sourceLayer.FeatureClass.Fields.get_Field(fldValTargetJoinIdx).Name + "" + " = '" + inObject.get_Value(fldValToCopyIdx).ToString() + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fldValTargetJoinIdx).Name + " = " + inObject.get_Value(fldValToCopyIdx); } AAState.WriteLine(" Where Clause: " + pQFilt.WhereClause); int cnt = sourceLayer.FeatureClass.FeatureCount(pQFilt); AAState.WriteLine(" Feature Found: " + cnt); if (cnt > 0) { fCursor = sourceLayer.FeatureClass.Search(pQFilt, true); while ((sourceFeature = fCursor.NextFeature()) != null) { bool side = false; if (Globals.GetPointOnLine(inFeature.Shape, sourceFeature.Shape, 450, out side) != null) { if (side) { AAState.WriteLine(" Right Side"); inFeature.set_Value(intFldIdxs[0], "Right"); } else { AAState.WriteLine(" Left Side"); inFeature.set_Value(intFldIdxs[0], "Left"); } if (fCursor != null) Marshal.ReleaseComObject(fCursor); fCursor = null; continue; } } if (fCursor != null) Marshal.ReleaseComObject(fCursor); fCursor = null; } pQFilt = null; } } } } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: SIDE" + Environment.NewLine + ex.Message); } finally { if (fCursor != null) Marshal.ReleaseComObject(fCursor); fCursor = null; // pRowCh = null AAState.WriteLine(" Finished: SIDE"); } break; } case "PROMPT": { //Loop through all fields list in the fieldname //If blank or null, prompt user for value //Store Value // IRowChanges pRowCh = null; IDomain pDom = default(IDomain); ISubtypes pSubType = null; List<Globals.DomSubList> lst = null; Globals.DomSubList dmRetVal = null; // ICodedValueDomain pCV = null; try { if ((inObject != null)) // (valData != null) && { // pRowCh = inObject as IRowChanges; //if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false) //{ // AAState.WriteLine(" PROMPT: Target value did not change, skipping"); // continue; //} //else //{ pSubType = (ISubtypes)inObject.Class; if (pSubType.HasSubtype) { int intSub; if (intFldIdxs.Contains(pSubType.SubtypeFieldIndex)) { lst = Globals.SubtypeToList(pSubType); if (inObject.get_Value(pSubType.SubtypeFieldIndex) == null || inObject.get_Value(pSubType.SubtypeFieldIndex) == "" || inObject.get_Value(pSubType.SubtypeFieldIndex) == DBNull.Value) { dmRetVal = Globals.showValuesOptionsForm(lst, "Provide a value for " + inObject.Class.AliasName + ":" + pSubType.SubtypeFieldName, "Provide a value for " + inObject.Class.AliasName + ":" + pSubType.SubtypeFieldName, ComboBoxStyle.DropDownList); inObject.set_Value(pSubType.SubtypeFieldIndex, dmRetVal.Value); intSub = Convert.ToInt32(dmRetVal.Value); } else { intSub = Convert.ToInt32(inObject.get_Value(pSubType.SubtypeFieldIndex)); } // intSub = (int)inObject.get_Value(pSubType.SubtypeFieldIndex); for (int l = 0; l < strFldNames.Count; l++) { if (intFldIdxs[l] == pSubType.SubtypeFieldIndex) continue; if (intFldIdxs[l] != -1) { pDom = pSubType.get_Domain(intSub, inObject.Fields.get_Field(intFldIdxs[l]).Name); //pDom = inObject.Fields.get_Field(intFldIdxs[l]).Domain; if (pDom == null) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + inObject.Class.AliasName + ":" + strFldNames[l], "Provide a value for " + inObject.Class.AliasName + ":" + strFldNames[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } else { if (pDom is CodedValueDomain) { //pCV = default(ICodedValueDomain); lst = Globals.DomainToList(pDom); if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { dmRetVal = Globals.showValuesOptionsForm(lst, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDownList); try { inObject.set_Value(intFldIdxs[l], dmRetVal.Value); } catch { } lst = null; } } else { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } } // IList<string> pVals = new List<string>(); // string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); // inObject.set_Value(intFldIdxs[0], strRetVal); } else { AAState.WriteLine(" PROMPT: " + strFldNames[l] + " was not found"); } } } else { if (inObject.get_Value(pSubType.SubtypeFieldIndex) == null) intSub = pSubType.DefaultSubtypeCode; else intSub = Convert.ToInt32(inObject.get_Value(pSubType.SubtypeFieldIndex)); for (int l = 0; l < strFldNames.Count; l++) { if (intFldIdxs[l] != -1) { pDom = pSubType.get_Domain(intSub, inObject.Fields.get_Field(intFldIdxs[l]).Name); //pDom = inObject.Fields.get_Field(intFldIdxs[l]).Domain; if (pDom == null) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } else { if (pDom is CodedValueDomain) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { //pCV = default(ICodedValueDomain); lst = Globals.DomainToList(pDom); dmRetVal = Globals.showValuesOptionsForm(lst, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDownList); try { inObject.set_Value(intFldIdxs[l], dmRetVal.Value); } catch { } lst = null; } } else { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } } // IList<string> pVals = new List<string>(); // string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); // inObject.set_Value(intFldIdxs[0], strRetVal); } else { AAState.WriteLine(" PROMPT: " + strFldNames[l] + " was not found"); } } } } else { for (int l = 0; l < strFldNames.Count; l++) { if (intFldIdxs[l] != -1) { pDom = inObject.Fields.get_Field(intFldIdxs[l]).Domain; if (pDom == null) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } else { if (pDom is CodedValueDomain) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { //pCV = default(ICodedValueDomain); lst = Globals.DomainToList(pDom); dmRetVal = Globals.showValuesOptionsForm(lst, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDownList); try { inObject.set_Value(intFldIdxs[l], dmRetVal.Value); } catch { } lst = null; } } else { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } } // IList<string> pVals = new List<string>(); // string strRetVal = Globals.showValuesOptionsForm(pVals, "Provide a value for " + strFldNames[l], "Provide a value for " + strFldNames[l], ComboBoxStyle.DropDown); // inObject.set_Value(intFldIdxs[0], strRetVal); } else { AAState.WriteLine(" PROMPT: " + strFldNames[l] + " was not found"); } } } //} } } catch (Exception ex) { AAState.WriteLine(" ERROR: PROMPT" + Environment.NewLine + ex.Message); } finally { // pRowCh = null AAState.WriteLine(" Finished: PROMPT"); pDom = null; pSubType = null; lst = null; dmRetVal = null; } break; } //Not Used case "VALIDATE_ATTRIBUTE_LOOKUP_old_NOT USED": { AAState.WriteLine(" Trying VALIDATE_ATTRIBUTE_LOOKUP"); IRowChanges pRowCh = null; ISQLSyntax sqlSyntax = null; IQueryFilter pQFilt = null; try { if ((valData != null) && (inFeature != null)) { pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false) { AAState.WriteLine(" VALIDATE_ATTRIBUTE_LOOKUP: Target value did not change, skipping"); continue; } sourceLayerName = ""; string[] sourceFieldNames = null; //string[] destFieldNames = null; // Parse arguments args = valData.Split('|'); if (args.Length == 2) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); } else { AAState.WriteLine(" ERROR: the valuemethod is not defined properly for this rule"); continue; } if ((sourceFieldNames != null) && (sourceFieldNames.Length > 0)) { AAState.WriteLine(" Looking for layer: " + sourceLayerName); boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { sqlSyntax = (ISQLSyntax)(((IDataset)sourceLayer.FeatureClass).Workspace); string specChar = sqlSyntax.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_WildcardManyMatch); AAState.WriteLine(" Lookup layer " + sourceLayer.Name + " was Found: " + sourceLayerName); string missingFieldMess = null; int[] sourceFieldNums = new int[sourceFieldNames.Length]; AAState.WriteLine(" Checking for field in Lookup table"); int fnum = sourceLayer.FeatureClass.FindField(sourceFieldNames[0].Trim()); if (fnum < 0) { fnum = sourceLayer.FeatureClass.Fields.FindFieldByAliasName(sourceFieldNames[0].Trim()); } if (fnum != -1) { AAState.WriteLine(" Field Found"); pQFilt = new QueryFilterClass(); if (inObject.get_Value(intFldIdxs[0]).ToString().Trim() == "") { if (mode == "ON_CREATE") { AAState.WriteLine(" Field Found"); continue; } pQFilt.WhereClause = "1=1"; } else { if (sourceLayer.FeatureClass.Fields.get_Field(fnum).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + sourceLayer.FeatureClass.Fields.get_Field(fnum).Name + "" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[0]).ToString() + specChar + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fnum).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[0]) + specChar; } } AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); int intRecFound = sourceLayer.FeatureClass.FeatureCount(pQFilt); AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound != 1) { if (inObject.get_Value(intFldIdxs[0]).ToString().Trim() == "") { pQFilt.WhereClause = "1=1"; } else { if (sourceLayer.FeatureClass.Fields.get_Field(fnum).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "UPPER(" + sourceLayer.FeatureClass.Fields.get_Field(fnum).Name + ")" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[0]).ToString().ToUpper() + specChar + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fnum).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[0]) + specChar; } } AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); intRecFound = sourceLayer.FeatureClass.FeatureCount(pQFilt); AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound == 0) { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(" Prompting for user input"); IFeatureCursor pFCurs = sourceLayer.FeatureClass.Search(pQFilt, true); pQFilt = null; ICursor pCurs = pFCurs as ICursor; List<string> pLst = Globals.CursorToList(ref pCurs, fnum); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; if (pFCurs != null) Marshal.ReleaseComObject(pFCurs); pFCurs = null; string selectVal = Globals.showOptionsForm(pLst, "Select an value to store", ComboBoxStyle.DropDownList); if (selectVal == "||Cancelled||") { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(" Value selected: " + selectVal); inObject.set_Value(intFldIdxs[0], selectVal as object); } } } else { AAState.WriteLine(" One Exact match was found"); } pQFilt = null; } else { AAState.WriteLine(" ERROR: Cant find field " + missingFieldMess); } } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " data source is not set"); } } else { IStandaloneTable pTbl = Globals.FindStandAloneTable(AAState._editor.Map, sourceLayerName) as IStandaloneTable; if (pTbl != null) { if (pTbl.Table != null) { sqlSyntax = (ISQLSyntax)(((IDataset)pTbl).Workspace); string specChar = sqlSyntax.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_WildcardManyMatch); AAState.WriteLine(" Lookup layer " + pTbl.Name + " was Found: " + sourceLayerName); string missingFieldMess = null; int[] sourceFieldNums = new int[sourceFieldNames.Length]; AAState.WriteLine(" Checking for field in Lookup table"); int fnum = pTbl.Table.FindField(sourceFieldNames[0].Trim()); if (fnum < 0) { fnum = pTbl.Table.Fields.FindFieldByAliasName(sourceFieldNames[0].Trim()); } if (fnum != -1) { AAState.WriteLine(" Field Found"); pQFilt = new QueryFilterClass(); if (inObject.get_Value(intFldIdxs[0]).ToString().Trim() == "") { if (mode == "ON_CREATE") { AAState.WriteLine(" Empty Value on Create, skipping"); continue; } pQFilt.WhereClause = "1=1"; } else { if (pTbl.Table.Fields.get_Field(fnum).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + pTbl.Table.Fields.get_Field(fnum).Name + "" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[0]).ToString() + specChar + "'"; } else { pQFilt.WhereClause = pTbl.Table.Fields.get_Field(fnum).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[0]) + specChar; } } AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); int intRecFound = pTbl.Table.RowCount(pQFilt); AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound != 1) { if (inObject.get_Value(intFldIdxs[0]).ToString().Trim() == "") { pQFilt.WhereClause = "1=1"; } else { if (pTbl.Table.Fields.get_Field(fnum).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "UPPER(" + pTbl.Table.Fields.get_Field(fnum).Name + ")" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[0]).ToString().ToUpper() + specChar + "'"; } else { pQFilt.WhereClause = pTbl.Table.Fields.get_Field(fnum).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[0]) + specChar; } } AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); intRecFound = pTbl.Table.RowCount(pQFilt); AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound == 0) { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(" Prompting for user input"); ICursor pCurs = pTbl.Table.Search(pQFilt, true); List<string> pLst = Globals.CursorToList(ref pCurs, fnum); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; string selectVal = Globals.showOptionsForm(pLst, "Select an value to store", ComboBoxStyle.DropDownList); if (selectVal == "||Cancelled||") { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(" Value selected: " + selectVal); inObject.set_Value(intFldIdxs[0], selectVal as object); } //AAState.WriteLine(" Value selected: " + selectVal); //inObject.set_Value(intFldIdxs[0], selectVal as object); } } else { AAState.WriteLine(" One Exact match was found"); } pQFilt = null; } else { AAState.WriteLine(" ERROR: Cant find field " + missingFieldMess); } } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " data source is not set"); } pTbl = null; } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " was not found"); } } } else { AAState.WriteLine(" ERROR: Invalid Value Info: " + valData); } } else { AAState.WriteLine(" ERROR: Not a feature or missing Value Info"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: VALIDATE_ATTRIBUTE_LOOKUP" + Environment.NewLine + ex.Message); } finally { pQFilt = null; sqlSyntax = null; pRowCh = null; AAState.WriteLine(" Finished: VALIDATE_ATTRIBUTE_LOOKUP"); } break; } case "CASCADE_ATTRIBUTE": { AAState.WriteLine(" Trying: CASCADE_ATTRIBUTE"); string flds; string targetLayer; IRowChanges pRowCh = null; //IFeature pNewFeat = null; try { if ((valData != null) && (inObject != null)) { AAState.WriteLine(" Feature and valueinfo is valid"); AAState.WriteLine(" Splitting up value info: " + valData); //field name is the field to Check //value|Layer|tempalte|Cut or Copy|field-toField args = valData.Split('|'); if (args.Length < 2) { AAState.WriteLine(" ERROR: CASCADE_ATTRIBUTE: Value info does not have enough parameters"); continue; } targetLayer = args[0]; flds = args[1]; bool bPrompt; if (args.Length == 3) { if (args[2].ToUpper() == "T" || args[2].ToUpper() == "TRUE" || args[2].ToUpper() == "YES") { bPrompt = true; } else { bPrompt = false; } } else { bPrompt = true; } pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false) { AAState.WriteLine(" CASCADE_ATTRIBUTE: Target value did not change, skipping"); continue; } bool boolFoundAsLayer = true; sourceLayer = Globals.FindLayer(ArcMap.Application, args[0].ToString(), ref boolFoundAsLayer) as IFeatureLayer; if (sourceLayer == null) { AAState.WriteLine(" ERROR: CASCADE_ATTRIBUTE: Target layer was not found"); continue; } int intTargFld = -1; intTargFld = sourceLayer.FeatureClass.Fields.FindField(flds); if (intTargFld == -1) { intTargFld = sourceLayer.FeatureClass.Fields.FindFieldByAliasName(flds); if (intTargFld != -1) { flds = sourceLayer.FeatureClass.Fields.get_Field(intTargFld).Name; } } if (intTargFld > -1) { if (pRowCh.get_OriginalValue(intFldIdxs[0]).ToString().Trim() == "") continue; IQueryFilter pQFilt = new QueryFilterClass(); if (sourceLayer.FeatureClass.Fields.get_Field(intTargFld).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = flds + " = '" + pRowCh.get_OriginalValue(intFldIdxs[0]) + "'"; } else { pQFilt.WhereClause = flds + " = " + pRowCh.get_OriginalValue(intFldIdxs[0]) + ""; } int featCnt = sourceLayer.FeatureClass.FeatureCount(pQFilt); if (featCnt == 0) { AAState.WriteLine(" Skipping, no Matching records found"); } else { string promptLayname; //if (boolFoundAsLayer) //{ // promptLayname = sourceLayer.Name; //} //else //{ promptLayname = Globals.getClassName(sourceLayer); //} if (bPrompt) { if (MessageBox.Show("You are about to change " + featCnt + " rows in the " + promptLayname + " Feature Class, proceed?", "Cascade", MessageBoxButtons.YesNo) == DialogResult.Yes) { AAState.WriteLine(" User accepted prompt"); } else { AAState.WriteLine(" User declined prompt"); } } else { AAState.WriteLine(" Prompt surpressed"); } } IFeatureCursor pCalcCursor = sourceLayer.FeatureClass.Update(pQFilt, false); IFeature updateFeat; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } while ((updateFeat = pCalcCursor.NextFeature()) != null) { updateFeat.set_Value(intTargFld, inObject.get_Value(intFldIdxs[0])); ChangeFeatureList.Add(updateFeat); } updateFeat = null; //ICalculator pCalc = new CalculatorClass(); // pCalc.Cursor = pCalcCursor as ICursor; // //pCalc.PreExpression = "Dim OldValue As String" + Environment.NewLine + // // "OldValue = Trim ( [" + flds + "])" + Environment.NewLine + // // "Dim newValue As String" + Environment.NewLine + // // "newValue = " + pRowCh.get_ValueChanged(intFldIdxs[0]); // if (sourceLayer.FeatureClass.Fields.get_Field(intTargFld).Type == esriFieldType.esriFieldTypeString) // { // pCalc.PreExpression = "Dim newValue" + Environment.NewLine + // "newValue = \"" + inObject.get_Value(intFldIdxs[0]).ToString() + "\""; // } // else // { // pCalc.PreExpression = "Dim newValue" + Environment.NewLine + // "newValue = " + inObject.get_Value(intFldIdxs[0]).ToString() ; // } // pCalc.Expression = "newValue"; //// pCalc.Expression = inObject.get_Value(intFldIdxs[0]).ToString(); // pCalc.Field = flds; // pCalc.ShowErrorPrompt = true; // pCalc.Calculate(); // if (pCalcCursor != null) // { // Marshal.ReleaseComObject(pCalcCursor); // } // pCalc = null; if (pCalcCursor != null) { Marshal.ReleaseComObject(pCalcCursor); } pCalcCursor = null; pQFilt = null; } else { AAState.WriteLine(" ERROR: CASCADE_ATTRIBUTE: Field was not found"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: CASCADE_ATTRIBUTE" + Environment.NewLine + ex.Message); } finally { sourceLayer = null; pRowCh = null; // pNewFeat = null; AAState.WriteLine(" Finished: CASCADE_ATTRIBUTE"); } break; } case "COPY_FEATURE": { AAState.WriteLine(" Trying: COPY_FEATURE"); IFeatureLayer pTargetFL; string[] FldPairs; string targetValue; IRowChanges pRowCh = null; IFeature pNewFeat = null; try { if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" Feature and valueinfo is valid"); AAState.WriteLine(" Splitting up value info: " + valData); //field name is the field to Check //value|Layer|tempalte|Cut or Copy|field-toField args = valData.Split('|'); if (args.Length < 2) { AAState.WriteLine(" ERROR: COPY_FEATURE: Value info does not have enough parameters"); continue; } targetValue = args[0]; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false) { AAState.WriteLine(" COPY_FEATURE: Field listed in the Field Name did not change, skipping"); continue; } if (inFeature.get_Value(intFldIdxs[0]).ToString() != targetValue.ToString()) { AAState.WriteLine(" COPY_FEATURE: Target value did not match listed value, skipping"); continue; } //changed = true; bool FCorLayerTarget = true; pTargetFL = Globals.FindLayer(ArcMap.Application, args[1].ToString(), ref FCorLayerTarget) as IFeatureLayer; if (pTargetFL == null) { AAState.WriteLine(" ERROR: COPY_FEATURE: Target layer was not found"); continue; } if (Globals.IsEditable(ref pTargetFL, ref AAState._editor) == false) { AAState.WriteLine(" ERROR: COPY_FEATURE: Target layer is not editable"); continue; } if (pTargetFL.FeatureClass.ShapeType != (inFeature.Class as IFeatureClass).ShapeType) { AAState.WriteLine(" ERROR: COPY_FEATURE: Target layer and Source layer are different geometry types"); continue; } FldPairs = null; //value|Layer|tempalte|Cut or Copy|field-toField IEditTemplate pEditTemp = null; string sourceAction = "COPY"; string fldMatching = null; switch (args.Length) { //case 2: // break; case 3: if (args[2].Trim() != "") { //pEditTemp = Globals.PromptAndGetEditTemplate(ArcMap.Application, pTargetFL, args[2].Trim()); pEditTemp = Globals.PromptAndGetEditTemplateGraphic(pTargetFL, args[2].Trim()); } else { pEditTemp = null; } break; case 4: if (args[2].Trim() != "") { //pEditTemp = Globals.PromptAndGetEditTemplate(ArcMap.Application, pTargetFL, args[2].Trim()); pEditTemp = Globals.PromptAndGetEditTemplateGraphic(pTargetFL, args[2].Trim()); } else { pEditTemp = null; } sourceAction = args[3].ToUpper().Trim(); //fldMatching = args[4].Trim(); break; case 5: if (args[2].Trim() != "") { //pEditTemp = Globals.PromptAndGetEditTemplate(ArcMap.Application, pTargetFL, args[2].Trim()); pEditTemp = Globals.PromptAndGetEditTemplateGraphic(pTargetFL, args[2].Trim()); } else { pEditTemp = null; } sourceAction = args[3].ToUpper().Trim(); fldMatching = args[4].Trim(); break; } if (pEditTemp != null) { pNewFeat = Globals.CreateFeature(inFeature.ShapeCopy, pEditTemp, AAState._editor, ArcMap.Application, false, false, false); } else { pNewFeat = Globals.CreateFeature(inFeature.ShapeCopy, pTargetFL, AAState._editor, ArcMap.Application, false, false, false); } pEditTemp = null; if (fldMatching != null) { if (fldMatching == "") { FldPairs = new string[] { }; } else { FldPairs = fldMatching.Split(','); } } else { FldPairs = new string[] { }; } //pNewFeat = pTargetFL.FeatureClass.CreateFeature(); //pNewFeat.Shape = inFeature.Shape; List<string> targFilds = new List<string>(); foreach (string strFlpPair in FldPairs) { string[] fldMatch = strFlpPair.Split('-'); if (fldMatch.Length != 2) { AAState.WriteLine(" ERROR: COPY_FEATURE: Field pairing is not properly defined"); } else { string strSrcFldName = fldMatch[0]; string strTarFldName = fldMatch[1]; int intSrcFldIdx = Globals.GetFieldIndex((inFeature.Class as IFeatureClass).Fields, (strSrcFldName)); int intTarFldIdx = Globals.GetFieldIndex(pTargetFL.FeatureClass.Fields, strTarFldName); if (intSrcFldIdx == -1 || intTarFldIdx == -1) { AAState.WriteLine(" ERROR: COPY_FEATURE: Either the source or target field was not found"); } else { targFilds.Add(strTarFldName.ToUpper()); try { pNewFeat.set_Value(intTarFldIdx, inFeature.get_Value(intSrcFldIdx)); } catch { AAState.WriteLine(" ERROR: COPY_FEATURE: Setting value: " + strFlpPair); } } } } IFields pTarFields = pTargetFL.FeatureClass.Fields; IField pTarField = null; for (int i = 0; i < pTarFields.FieldCount; i++) { pTarField = pTarFields.get_Field(i); if (pTarField.Type != esriFieldType.esriFieldTypeGlobalID && pTarField.Type != esriFieldType.esriFieldTypeOID && pTarField.Type != esriFieldType.esriFieldTypeGeometry && pTarField.Name.ToUpper() != "SHAPE_LENGTH" && pTarField.Name.ToUpper() != "SHAPE.LEN" && pTarField.Name.ToUpper() != "SHAPE_AREA" && pTarField.Name.ToUpper() != "SHAPE.AREA") { if (targFilds.Contains(pTarField.Name.ToUpper()) == false) { int fldIdx = inFeature.Fields.FindField(pTarField.Name); if (fldIdx > 0) { try { pNewFeat.set_Value(i, inFeature.get_Value(fldIdx)); } catch { AAState.WriteLine(" WARNING: COPY_FEATURE: Setting value: " + pTarField.Name); } } } } } pTarFields = null; pTarField = null; if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //pNewFeat.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); NewFeatureList.Add(pNewFeat); if (sourceAction == "CUT") { MessageBox.Show("CUT is not supported at the moment"); } } else { AAState.WriteLine(" ERROR: Value info was not correct"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: COPY_FEATURE" + Environment.NewLine + ex.Message); } finally { pTargetFL = null; pRowCh = null; pNewFeat = null; AAState.WriteLine(" Finished: COPY_FEATURE"); } break; } case "VALIDATE_CONNECTIVITY": { AAState.WriteLine(" Trying: VALIDATE_CONNECTIVITY"); try { // if (netFeat != null) //IRowChanges pRowCh = inObject as IRowChanges; //changed = true; //if (mode != "ON_CREATE") //{ //} if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" Feature and valueinfo is valid"); AAState.WriteLine(" Checking if feature is in a geometric network"); bool validFeat = false; if (inFeature is INetworkFeature) { AAState.WriteLine(" Feature is in a geometric network"); AAState.WriteLine(" Splitting up value info: " + valData); args = valData.Split('|'); int connectionCnt = Globals.getConnectionCount(inFeature); foreach (string fldConPair in args) { string[] fldCon = fldConPair.Split(','); if (fldCon.Length == 1) { AAState.WriteLine(" No values for the specified fields"); if (Globals.IsNumeric(fldCon[0])) { if (connectionCnt == Convert.ToInt32(fldCon[0])) { AAState.WriteLine(" Valid Connection Rule Found"); validFeat = true; break; } } else { AAState.WriteLine(" ERROR: Connection value is not numeric"); } } else { if (intFldIdxs.Count == 0) { AAState.WriteLine(" No values for the specified fields"); if (fldCon.Length == 2) { if (connectionCnt == Convert.ToInt32(fldCon[1])) { AAState.WriteLine(" Valid Connection Rule Found"); validFeat = true; break; } } if (fldCon.Length > 2) { if (connectionCnt >= Convert.ToInt32(fldCon[1]) && connectionCnt <= Convert.ToInt32(fldCon[2])) { AAState.WriteLine(" Valid Connection Rule Found"); validFeat = true; break; } } } else if (inFeature.get_Value(intFldIdxs[0]).ToString() == fldCon[0]) { if (fldCon.Length == 2) { if (connectionCnt == Convert.ToInt32(fldCon[1])) { AAState.WriteLine(" Valid Connection Rule Found"); validFeat = true; break; } } if (fldCon.Length > 2) { if (connectionCnt >= Convert.ToInt32(fldCon[1]) && connectionCnt <= Convert.ToInt32(fldCon[2])) { AAState.WriteLine(" Valid Connection Rule Found"); validFeat = true; break; } } //iSJunc.EdgeFeatureCount <= 1 } } } if (validFeat == false) { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } } else { AAState.WriteLine(" ERROR: Feature is not a geometric network feature"); } } else { AAState.WriteLine(" ERROR: Value info was not correct"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: VALIDATE_CONNECTIVITY" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: VALIDATE_CONNECTIVITY"); } break; } case "VALIDATE_ATTRIBUTES": { AAState.WriteLine(" Trying: VALIDATE_ATTRIBUTES"); try { if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" Feature and valueinfo is valid"); IRowChanges pRowCh = inObject as IRowChanges; changed = true; if (intFldIdxs != null && intFldIdxs.Count > 0 && mode != "ON_CREATE") { for (int fldIdx = 0; fldIdx < intFldIdxs.Count; fldIdx++) { AAState.WriteLine(" Row to monitor specified"); changed = pRowCh.get_ValueChanged(intFldIdxs[fldIdx]); AAState.WriteLine(" " + strFldNames[fldIdx] + " changed value was " + changed); if (changed) break; } } if (changed) { args = valData.Split('|'); args = args[0].Split(','); AAState.WriteLine(" Checking fields to compare: " + args); if (args.Length > 0) { // IList<string> pFldsToEval = new List<String>(args); //pFldsToEval = args.ToList(); AAState.WriteLine(" Getting templates for feature class"); IList<ILayer> pLayList = Globals.FindLayersByClassID(((IMxDocument)ArcMap.Application.Document).FocusMap, inObject.Class.ObjectClassID); if (pLayList != null) { if (pLayList.Count > 0) { AAState.WriteLine(" " + pLayList.Count + " Layers found"); bool ValidComb = false; foreach (ILayer pLay in pLayList) { AAState.WriteLine(" Checking " + pLay.Name); if (pLay is IFeatureLayer) { AAState.WriteLine(" Layer is a featurelayer"); // IList<string> pEditTemplateNames = Globals.GetEditTemplateNames(ArcMap.Application, (IFeatureLayer)pLay); //IList<IEditTemplate> pEditTemplates = Globals.GetEditTemplates(ArcMap.Application, (IFeatureLayer)pLay); //foreach (string IEditTemplate in pEditTemplates) //{ //Globals.GetEditTemplate(pEditTemplateName, //} AAState.WriteLine(" Getting Edit Template Manager"); IEditTemplateManager pEdTmpManager = Globals.GetEditTemplateManager((IFeatureLayer)pLay); AAState.WriteLine(" Checking templates"); ValidComb = Globals.FeatureIsValidTemplate(pEdTmpManager, inFeature, args); AAState.WriteLine(" Template Found Status: " + ValidComb.ToString()); if (ValidComb == true) break; } } if (ValidComb == false) { AAState.WriteLine(" Abort Edit"); AAState._editor.AbortOperation(); return false; } } else { AAState.WriteLine(" WARNING: No layers where found!"); } } else { AAState.WriteLine(" WARNING: No layers where found!"); } } } else { AAState.WriteLine(" Monitored fields where not changed"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: VALIDATE_ATTRIBUTES" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: VALIDATE_ATTRIBUTES"); } break; } //case "SPLIT_INTERSECTING_FEATURE": // { // AAState.WriteLine(" Trying: SPLIT_INTERSECTING_FEATURE"); // try // { // if ((valData != null) && (inFeature != null)) // { // intersectLayerName = ""; // intersectLayer = null; // args = valData.Split('|'); // if (args.Length > 0) // { // AAState.WriteLine(" " + args.Length + " Layers listed "); // for (int i = 0; i < args.Length; i++) // { // intersectLayerName = args[i].Trim(); // AAState.WriteLine(" Searching for " + intersectLayerName); // boolLayerOrFC = true; // if (intersectLayerName.Contains("(")) // { // string[] tempSplt = intersectLayerName.Split('('); // intersectLayerName = tempSplt[0]; // intersectLayer = Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC) as IFeatureLayer; // if (tempSplt[1].ToUpper().Contains("LAYER)")) // { // boolLayerOrFC = true; // } // else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) // { // boolLayerOrFC = true; // } // else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) // { // boolLayerOrFC = false; // } // else if (tempSplt[1].ToUpper().Contains("CLASS)")) // { // boolLayerOrFC = false; // } // else if (tempSplt[1].ToUpper().Contains("FEATURE)")) // { // boolLayerOrFC = false; // } // else // { // boolLayerOrFC = true; // } // } // else // { // intersectLayer = Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC) as IFeatureLayer; // } // if (intersectLayer != null) // { // AAState.WriteLine(" Layer Found " + intersectLayerName); // if (intersectLayer.FeatureClass != null) // { // AAState.WriteLine(" Datasource is valid for " + intersectLayerName); // // sFilter = new SpatialFilterClass(); // sFilter = Globals.createSpatialFilter(intersectLayer, inFeature, false); // AAState.WriteLine(" Checking source Geometry Type"); // AAState.WriteLine(" Searching " + intersectLayerName + "for intersected feature"); // //if (boolLayerOrFC) // //{ // // fCursor = intersectLayer.Search(sFilter, true); // //} // //else // //{ // // fCursor = intersectLayer.FeatureClass.Search(sFilter, true); // //} // pFS = (IFeatureSelection)intersectLayer; // if (boolLayerOrFC) // { // if (pFS.SelectionSet.Count > 0) // { // pFS.SelectionSet.Search(sFilter, true, out cCurs); // fCursor = cCurs as IFeatureCursor; // } // else // { // fCursor = intersectLayer.Search(sFilter, true); // } // } // else // { // fCursor = intersectLayer.FeatureClass.Search(sFilter, true); // } // IFeature intsersectFeature; // int idx = 1; // while ((intsersectFeature = fCursor.NextFeature()) != null) // { // if (intsersectFeature.Class != inFeature.Class) // { // AAState.WriteLine(" Splitting Intersected Feature number: " + idx); // idx++; // IFeatureEdit2 featureEdit = intsersectFeature as IFeatureEdit2; // ISet featset = featureEdit.SplitWithUpdate(inFeature.Shape); // AAState.WriteLine(" Adding split features to array to call the AA ext"); // if (featset.Count > 0) // { // if (NewFeatureList == null) // { // NewFeatureList = new List<IObject>(); // } // object featobj; // while ((featobj = featset.Next()) != null) // { // IFeature feature = featobj as IFeature; // //feature.Store(); // if (feature != null) // { // NewFeatureList.Add(feature as IObject); // } // feature = null; // } // } // AAState.WriteLine(" Split feature " + intersectLayerName + " into " + featset.Count); // if (intsersectFeature != null) // { // Marshal.ReleaseComObject(intsersectFeature); // } // featureEdit = null; // featset = null; // } // else if (intsersectFeature.Class == inFeature.Class && intsersectFeature.OID != inFeature.OID) // { // AAState.WriteLine(" Splitting Intersected Feature number: " + idx); // idx++; // IFeatureEdit2 featureEdit = intsersectFeature as IFeatureEdit2; // ISet featset = featureEdit.SplitWithUpdate(inFeature.Shape); // AAState.WriteLine(" Adding split features to array to call the AA ext"); // if (featset.Count > 0) // { // if (NewFeatureList == null) // { // NewFeatureList = new List<IObject>(); // } // object featobj; // while ((featobj = featset.Next()) != null) // { // IFeature feature = featobj as IFeature; // if (feature != null) // { // NewFeatureList.Add(feature as IObject); // } // feature = null; // // feature.Store(); // } // } // AAState.WriteLine(" Split feature " + intersectLayerName + " into " + featset.Count); // if (intsersectFeature != null) // { // Marshal.ReleaseComObject(intsersectFeature); // } // featureEdit = null; // featset = null; // } // } // intsersectFeature = null; // } // } // else // { // AAState.WriteLine(" Warning: Can't find intersecting layer: " + intersectLayerName); // } // } // } // else // { // AAState.WriteLine(" ERROR: Unsupported Value Info: " + valData); // } // } // else // { // AAState.WriteLine(" ERROR: not a feature or no Value Info"); // } // } // catch (Exception ex) // { // AAState.WriteLine(" ERROR: SPLIT_INTERSECTING_FEATURE" + Environment.NewLine + ex.Message); // } // finally // { // AAState.WriteLine(" Finished: SPLIT_INTERSECTING_FEATURE"); // } // break; // } case "SPLIT_INTERSECTING_FEATURE": { AAState.WriteLine(" Trying: SPLIT_INTERSECTING_FEATURE"); try { if ((valData != null) && (inFeature != null)) { intersectLayerName = ""; intersectLayer = null; args = valData.Split('|'); if (args.Length > 0) { AAState.WriteLine(" " + args.Length + " Layers listed "); for (int i = 0; i < args.Length; i++) { intersectLayerName = args[i].Trim(); AAState.WriteLine(" Searching for " + intersectLayerName); boolLayerOrFC = true; if (intersectLayerName.Contains("(")) { string[] tempSplt = intersectLayerName.Split('('); intersectLayerName = tempSplt[0]; intersectLayer = Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { intersectLayer = Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC) as IFeatureLayer; } if (intersectLayer != null) { AAState.WriteLine(" Layer Found " + intersectLayerName); if (intersectLayer.FeatureClass != null) { AAState.WriteLine(" Datasource is valid for " + intersectLayerName); double snapTol = Globals.GetXYTolerance(intersectLayer); // sFilter = new SpatialFilterClass(); sFilter = Globals.createSpatialFilter(intersectLayer, inFeature, false); AAState.WriteLine(" Checking source Geometry Type"); AAState.WriteLine(" Searching " + intersectLayerName + "for intersected feature"); //if (boolLayerOrFC) //{ // fCursor = intersectLayer.Search(sFilter, true); //} //else //{ // fCursor = intersectLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)intersectLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = intersectLayer.Search(sFilter, true); } } else { fCursor = intersectLayer.FeatureClass.Search(sFilter, true); } IFeature intsersectFeature; int idx = 1; while ((intsersectFeature = fCursor.NextFeature()) != null) { if (intsersectFeature.Class != inFeature.Class) { AAState.WriteLine(" Splitting Intersected Feature number: " + idx); idx++; // IFeatureEdit2 featureEdit = intsersectFeature as IFeatureEdit2; //ISet featset = featureEdit.SplitWithUpdate(inFeature.ShapeCopy); if (intsersectFeature is INetworkFeature) { AAState.WriteLine(" Line to split is a Geometric Network line, this operation is not valid for these types of features"); } else { ISet featset = Globals.splitLineWithPoint(intsersectFeature, inFeature.ShapeCopy as IPoint, snapTol, null, "{0:0.00}", ArcMap.Application); if (featset != null) { AAState.WriteLine(" Adding split features to array to call the AA ext"); if (featset.Count > 0) { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } object featobj; while ((featobj = featset.Next()) != null) { IFeature feature = featobj as IFeature; //feature.Store(); if (feature != null) { NewFeatureList.Add(feature as IObject); } feature = null; } } AAState.WriteLine(" Split feature " + intersectLayerName + " into " + featset.Count); } else { AAState.WriteLine(" Split return no features"); } featset = null; } } if (intsersectFeature != null) { Marshal.ReleaseComObject(intsersectFeature); } //featureEdit = null; else if (intsersectFeature.Class == inFeature.Class && intsersectFeature.OID != inFeature.OID) { AAState.WriteLine(" Splitting Intersected Feature number: " + idx); idx++; if (intsersectFeature is INetworkFeature) { AAState.WriteLine(" Line to split is a Geometric Network line, this operation is not valid for these types of features"); } else { // IFeatureEdit2 featureEdit = intsersectFeature as IFeatureEdit2; //ISet featset = featureEdit.SplitWithUpdate(inFeature.Shape); ISet featset = Globals.splitLineWithPoint(intsersectFeature, inFeature.ShapeCopy as IPoint, snapTol, null, "{0:0.00}", ArcMap.Application); if (featset == null) { AAState.WriteLine(" Error splitting feature, the feature may be a geometric network feature"); } else { AAState.WriteLine(" Adding split features to array to call the AA ext"); if (featset.Count > 0) { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } object featobj; while ((featobj = featset.Next()) != null) { IFeature feature = featobj as IFeature; if (feature != null) { NewFeatureList.Add(feature as IObject); } feature = null; // feature.Store(); } } AAState.WriteLine(" Split feature " + intersectLayerName + " into " + featset.Count); } featset = null; } if (intsersectFeature != null) { Marshal.ReleaseComObject(intsersectFeature); } } } intsersectFeature = null; } } else { AAState.WriteLine(" Warning: Can't find intersecting layer: " + intersectLayerName); } } } else { AAState.WriteLine(" ERROR: Unsupported Value Info: " + valData); } } else { AAState.WriteLine(" ERROR: not a feature or no Value Info"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: SPLIT_INTERSECTING_FEATURE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: SPLIT_INTERSECTING_FEATURE"); } break; } case "NEAREST_FEATURE_ATTRIBUTES": { AAState.WriteLine(" Trying NEAREST_FEATURE_ATTRIBUTES"); try { if ((valData != null) && (inFeature != null)) { sourceLayerName = ""; string[] sourceFieldNames = null; string[] destFieldNames = null; searchDistance = 0; // Parse arguments args = valData.Split('|'); if (args.Length == 3) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); destFieldNames = args[2].ToString().Split(','); AAState.WriteLine(" WARNING: search distance as not specified, defaulting to 0"); } else if (args.Length == 4) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); destFieldNames = args[2].ToString().Split(','); Double.TryParse(args[3], out searchDistance); } else { AAState.WriteLine(" ERROR: the valuemethod is not defined properly for this rule"); continue; } if ((sourceFieldNames != null) && (destFieldNames != null) && (sourceFieldNames.Length > 0) && (destFieldNames.Length > 0) && (sourceFieldNames.Length == destFieldNames.Length)) { AAState.WriteLine(" Looking for layer: " + sourceLayerName); boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { AAState.WriteLine(" " + sourceLayer.Name + " layer Found: " + sourceLayerName); string missingFieldMess = null; int[] sourceFieldNums = new int[sourceFieldNames.Length]; int[] destFieldNums = new int[destFieldNames.Length]; AAState.WriteLine(" Checking Field Mapping"); for (int i = 0; i < sourceFieldNums.Length; i++) { int fnum = sourceLayer.FeatureClass.FindField(sourceFieldNames[i].Trim()); if (fnum < 0) { missingFieldMess = sourceFieldNames[i].Trim() + " in table " + sourceLayerName; break; } sourceFieldNums[i] = fnum; } if (missingFieldMess == null) { for (int i = 0; i < destFieldNums.Length; i++) { int fnum = inFeature.Fields.FindField(destFieldNames[i].Trim()); if (fnum < 0) { missingFieldMess = destFieldNames[i].Trim() + " in table " + tableName; break; } destFieldNums[i] = fnum; } } if (missingFieldMess == null) { AAState.WriteLine(" Field Mapping verified"); // found source and destination fields. //sFilter = new SpatialFilterClass(); if (searchDistance > 0) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); //searchEnvelope = inFeature.ShapeCopy.Envelope; //searchEnvelope.Expand(searchDistance, searchDistance, false); //sFilter.Geometry = searchEnvelope; } else { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); //sFilter.Geometry = inFeature.ShapeCopy; } // sFilter.GeometryField = sourceLayer.FeatureClass.ShapeFieldName; // sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; AAState.WriteLine(" Searching for Nearest Feature"); //if (boolLayerOrFC) //{ // fCursor = sourceLayer.Search(sFilter, false); //} //else //{ // fCursor = sourceLayer.FeatureClass.Search(sFilter, false); //} pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, false, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, false); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, false); } sourceFeature = fCursor.NextFeature(); nearestFeature = null; proxOp = (IProximityOperator)inFeature.Shape; lastDistance = searchDistance; if (sourceFeature != null) { AAState.WriteLine(" Features Found, looping for closest"); while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { //distance = proxOp.ReturnDistance(sourceFeature.Shape); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { //distance = proxOp.ReturnDistance(sourceFeature.Shape); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } sourceFeature = fCursor.NextFeature(); } } if (nearestFeature != null) { AAState.WriteLine(" Closest Feature is " + lastDistance + " Away with OID of " + nearestFeature.OID); for (int i = 0; i < sourceFieldNums.Length; i++) { try { AAState.WriteLine(" Trying to copy " + sourceFieldNames[i] + " to " + destFieldNames[i]); inObject.set_Value(destFieldNums[i], nearestFeature.get_Value(sourceFieldNums[i])); } catch { AAState.WriteLine(" ERROR: copying " + sourceFieldNames[i] + " to " + destFieldNames[i]); } } } else { AAState.WriteLine(" No Feature was found, default fields"); for (int i = 0; i < destFieldNums.Length; i++) { IField field = inObject.Fields.get_Field(destFieldNums[i]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(destFieldNums[i], null); } } else { inObject.set_Value(destFieldNums[i], newval); } } } } else { AAState.WriteLine(" ERROR: Cant find field " + missingFieldMess); } } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " data source is not set"); } } else { AAState.WriteLine(" ERROR: " + sourceLayerName + " was not found"); } } else { AAState.WriteLine(" ERROR: Invalid Value Info: " + valData); } } else { AAState.WriteLine(" ERROR: Not a feature or missing Value Info"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: NEAREST_FEATURE_ATTRIBUTES" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: NEAREST_FEATURE_ATTRIBUTES"); } break; } case "MINIMUM_LENGTH": { try { AAState.WriteLine(" Trying MINIMUM_LENGTH"); double minlength; AAState.WriteLine(" Evaluating Minimum length value"); if (Double.TryParse(valData, out minlength)) { if (inFeature != null) { ICurve curve = inFeature.Shape as ICurve; if (curve != null) { if (curve.Length < minlength) { String mess = "Line is shorter than " + String.Format("{0:0.00}", minlength) + " " + Globals.GetSpatRefUnitName(inFeature.Shape.SpatialReference, true) + ", aborting edit."; AAState.WriteLine(" " + mess); MessageBox.Show(mess, "Line too short"); AAState._editor.AbortOperation(); return false; } } else { AAState.WriteLine(" ERROR: Feature is not a Line"); } } } } catch (Exception ex) { AAState.WriteLine(" Error MINIMUM_LENGTH \n" + ex.Message); } finally { AAState.WriteLine(" Finished MINIMUM_LENGTH"); } break; } case "LINK_TABLE_ASSET": try { intersectLayerName = ""; intersectTable = null; intersectLayer = null; List<string> intersectLayerFieldNameList = new List<string>(); List<int> intersectFieldPosList = new List<int>(); AAState.WriteLine(" Trying LINK_TABLE_ASSET"); args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // Feature Layer only intersectLayerName = args[0].ToString(); break; case 2: // Feature Layer| Field to copy intersectLayerName = args[0].ToString(); intersectLayerFieldNameList = new List<string>(args[1].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); break; case 3: // Feature Layer| Field to copy | for future intersectLayerName = args[0].ToString(); intersectLayerFieldNameList = new List<string>(args[1].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); //sequenceColumnName = args[2].ToString(); break; default: AAState.WriteLine(" ERROR: Unsupported Value Method: " + valData); continue; // break; } bool FCorLayerIntersect = true; intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref FCorLayerIntersect); intersectTable = Globals.FindStandAloneTable(AAState._editor.Map, intersectLayerName); if (intersectLayer != null) { ////Find Area Field foreach (string intersectLayerFieldName in intersectLayerFieldNameList) { intersectFieldPos = intersectLayer.FeatureClass.Fields.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(" ERROR: Asset feature Layer Field(" + intersectLayerFieldName + ") not found"); break; } else { intersectFieldPosList.Add(intersectFieldPos); } } intersectLayerSelection = (IFeatureSelection)intersectLayer; if (intersectLayerSelection.SelectionSet.Count == 0) { AAState.WriteLine(" ERROR: No assests selected in " + intersectLayerName); break; } if (intersectLayerSelection.SelectionSet.Count > 1) { AAState.WriteLine(" ERROR: To many assests are selected in " + intersectLayerName); break; } intersectLayerSelection.SelectionSet.Search(null, true, out cCurs); } else if (intersectTable != null) { if (intersectTable.Table == null) { AAState.WriteLine(" ERROR: Asset Layer(" + intersectLayerName + ") not found"); break; } ////Find Area Field //intersectFieldPos = intersectTable.Table.Fields.FindField(intersectLayerFieldName); //if (intersectFieldPos < 0) //{ // AAState.WriteLine(" ERROR: Asset Layer Field(" + intersectLayerFieldName + ") not found"); // break; //} foreach (string intersectLayerFieldName in intersectLayerFieldNameList) { intersectFieldPos = intersectTable.Table.Fields.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(" ERROR: Asset Layer Field(" + intersectLayerFieldName + ") not found"); break; } else { intersectFieldPosList.Add(intersectFieldPos); } } intersectTableSelection = (ITableSelection)intersectTable; if (intersectTableSelection.SelectionSet.Count == 0) { AAState.WriteLine(" ERROR: No assests selected in " + intersectLayerName); break; } if (intersectTableSelection.SelectionSet.Count > 1) { AAState.WriteLine(" ERROR: To many assests are selected in " + intersectLayerName); break; } intersectTableSelection.SelectionSet.Search(null, true, out cCurs); } else { AAState.WriteLine(" ERROR: Asset Layer(" + intersectLayerName + ") not found"); break; } IRow row; while ((row = cCurs.NextRow()) != null) { int idx = 0; foreach (int fldIdxInt in intersectFieldPosList) { if (idx >= intFldIdxs.Count) continue; string val = row.get_Value(fldIdxInt).ToString(); if (inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[idx], val); else if (inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeSmallInteger || inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeInteger) { if (Globals.IsNumeric(val)) { inObject.set_Value(intFldIdxs[idx], Convert.ToInt32(val)); } else { AAState.WriteLine(" ERROR: Field is a number and Value is not" + val); } } else if (inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeSingle || inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeDouble) { if (Globals.IsNumeric(val)) { inObject.set_Value(intFldIdxs[idx], Convert.ToDouble(val)); } else { AAState.WriteLine(" ERROR: Field is a number and Value is not:" + val); } } else { inObject.set_Value(intFldIdxs[idx], val); } idx++; } } if (row != null) Marshal.ReleaseComObject(cCurs); row = null; } catch (Exception ex) { AAState.WriteLine(" ERROR: LINK_TABLE_ASSET" + Environment.NewLine + ex.Message); } finally { if (cCurs != null) { Marshal.ReleaseComObject(cCurs); GC.Collect(300); GC.WaitForFullGCComplete(); cCurs = null; } AAState.WriteLine(" Finished: LINK_TABLE_ASSET"); } break; case "GET_ADDRESS_FROM_CENTERLINE": AAState.WriteLine(" Trying GET_ADDRESS_FROM_CENTERLINE"); List<IPoint> pPnts = null; try { if ((valData != null) && (inFeature != null)) { sourceLayerName = ""; string[] sourceFieldNames = null; searchDistance = 0; // Parse arguments args = valData.Split('|'); if (args.Length == 2) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); searchDistance = 2; AAState.WriteLine(" WARNING: search distance as not specified, defaulting to 0"); } else if (args.Length == 3) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); Double.TryParse(args[2], out searchDistance); } else { AAState.WriteLine(" ERROR: the valuemethod is not defined properly for this rule"); continue; } //Globals.GetAddressInfo( if (sourceFieldNames.Length != 5) { AAState.WriteLine(" ERROR: the valuemethod fields part does not have enough fields listed"); continue; } //AAState.WriteLine(" Looking for layer: " + sourceLayerName); boolLayerOrFC = false; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } // Globals.GetNearestFeature((inObject as IFeature).Shape, pPnts = Globals.GetGeomCenter(inObject as IFeature); if (pPnts.Count != 0) { AddressInfo pRetValu = Globals.GetAddressInfo(ArcMap.Application, pPnts[0] as IPoint, sourceLayerName, sourceFieldNames[0].Trim(), sourceFieldNames[1].Trim(), sourceFieldNames[2].Trim(), sourceFieldNames[3].Trim(), sourceFieldNames[4].Trim(), false, searchDistance); if (pRetValu != null) { if (pRetValu.Messages == "") { bool rightSide = true; IPoint pPnt = Globals.GetPointOnLine((inObject as IFeature).Shape as IPoint, pRetValu.StreetGeometry as IPolyline, 400, out rightSide); try { if (strFldNames.Count == 2) { if (intFldIdxs[0] != -1) { if (rightSide) { inObject.set_Value(intFldIdxs[0], pRetValu.RightAddress); } else { inObject.set_Value(intFldIdxs[0], pRetValu.LeftAddress); } } if (intFldIdxs[1] != -1) inObject.set_Value(intFldIdxs[1], pRetValu.StreetName); } else { if (intFldIdxs[0] != -1) { if (rightSide) { inObject.set_Value(intFldIdxs[0], pRetValu.RightAddress + " " + pRetValu.StreetName); } else { inObject.set_Value(intFldIdxs[0], pRetValu.LeftAddress + " " + pRetValu.StreetName); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Error setting field values, GET_ADDRESS_FROM_CENTERLINE" + Environment.NewLine + ex.Message); } } else { AAState.WriteLine(" ERROR: Error getting address info from the centerline: " + pRetValu.Messages); } } else { AAState.WriteLine(" ERROR: Error getting address info from the centerline, GET_ADDRESS_FROM_CENTERLINE"); } } else { AAState.WriteLine(" ERROR: Error getting Location, GET_ADDRESS_FROM_CENTERLINE"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: GET_ADDRESS_FROM_CENTERLINE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: GET_ADDRESS_FROM_CENTERLINE"); pPnts = null; } break; case "GET_ADDRESS_USING_GEOCODER": { IReverseGeocoding reverseGeocoding = null; IAddressGeocoding addressGeocoding = null; IPoint revGCLoc = null; IFields matchFields = null; IField shapeField = null; IReverseGeocodingProperties reverseGeocodingProperties = null; IPropertySet addressProperties = null; IAddressInputs addressInputs = null; IFields addressFields = null; object key = null; object value = null; try { AAState.WriteLine(" Trying GET_ADDRESS_USING_GEOCODER"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 2) { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } } else { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } AAState.WriteLine(" Trying to get address locator"); reverseGeocoding = Globals.OpenLocator(args[0], args[1]); if (reverseGeocoding == null) { AAState.WriteLine(" ERROR: Reverse Address not locator found"); break; } AAState.WriteLine(" Reverse Address locator found"); AAState.WriteLine(" Retrieving Location to reverse geocode"); revGCLoc = Globals.GetGeomCenter(inFeature)[0]; AAState.WriteLine(" Location retrieved"); // Create a Point at which to find the address. addressGeocoding = (IAddressGeocoding)reverseGeocoding; matchFields = addressGeocoding.MatchFields; int shpFld = matchFields.FindField("Shape"); shapeField = matchFields.get_Field(shpFld); AAState.WriteLine(" Setting distance"); // Set the search tolerance for reverse geocoding. reverseGeocodingProperties = (IReverseGeocodingProperties)reverseGeocoding; reverseGeocodingProperties.SearchDistance = 100; reverseGeocodingProperties.SearchDistanceUnits = esriUnits.esriFeet; reverseGeocoding.InitDefaults(); // Find the address nearest the Point. addressProperties = reverseGeocoding.ReverseGeocode(revGCLoc, false); // Print the address properties. addressInputs = (IAddressInputs)reverseGeocoding; addressFields = addressInputs.AddressFields; addressProperties.GetAllProperties(out key, out value); string tempVal = ""; for (int i = 0; i < addressFields.FieldCount; i++) { IField addressField = addressFields.get_Field(i); if (tempVal == "") { tempVal = addressProperties.GetProperty(addressField.Name).ToString(); } else { tempVal = tempVal + ", " + addressProperties.GetProperty(addressField.Name).ToString(); } } inFeature.set_Value(intFldIdxs[0], tempVal); } catch (Exception ex) { AAState.WriteLine(" ERROR: GET_ADDRESS_USING_GEOCODER" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: GET_ADDRESS_USING_GEOCODER"); reverseGeocoding = null; addressGeocoding = null; revGCLoc = null; matchFields = null; shapeField = null; reverseGeocodingProperties = null; addressProperties = null; addressInputs = null; addressFields = null; key = null; value = null; } break; } case "GET_ADDRESS_USING_ARCGIS_SERVICE": //ARGS: url try { IPoint revGCLoc = null; AAState.WriteLine(" Trying GET_ADDRESS_USING_ARCGIS_SERVICE"); if (fieldObj.Type == esriFieldType.esriFieldTypeString) { if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { args = valData.Split('|'); revGCLoc = Globals.GetGeomCenter(inFeature)[0]; int wkid = inFeature.Shape.SpatialReference.FactoryCode; if (revGCLoc != null) { //Test for user specified URL if (valData.Trim() != "") { if (args.Length == 2) { wkid = Convert.ToInt32(args[1]); } if (Globals.IsUrl(args[0])) { locatorURL = args[0]; /////locatorURL.TrimEnd(char[] ); if (!(locatorURL.EndsWith(reverseGeocodeStr))) { if (!(locatorURL.EndsWith(GeocodeStr))) { if (!(locatorURL.EndsWith("/"))) { locatorURL += "/" + GeocodeStr + "/" + reverseGeocodeStr; } else { locatorURL += GeocodeStr + "/" + reverseGeocodeStr; } } else { if (!(locatorURL.EndsWith("/"))) { locatorURL += "/" + reverseGeocodeStr; } else { locatorURL += reverseGeocodeStr; } } } } else if (args[0] == "TA_Streets_US_10") { locatorURL = _agsOnlineLocators + args[0] + GeocodeStr + "/" + reverseGeocodeStr; // wkid = 102100; } else if (args[0] == "TA_Address_NA_10" || args[0] == "TA_Address_EU") { locatorURL = _agsOnlineLocators + args[0] + GeocodeStr + "/" + reverseGeocodeStr; // wkid = 4326; } //Default to AGS Online USA geocode service else if (_agsOnlineLocators.Substring(_agsOnlineLocators.LastIndexOf('/', _agsOnlineLocators.Length - 2)).Contains("Locator")) { locatorURL = _agsOnlineLocators + "TA_Address_NA_10" + GeocodeStr + "/" + reverseGeocodeStr; // wkid = 4326; } else { locatorURL = _agsOnlineLocators + GeocodeStr + "/" + reverseGeocodeStr; ; // wkid = 4326; } } else { if (_agsOnlineLocators.Substring(_agsOnlineLocators.LastIndexOf('/', _agsOnlineLocators.Length - 2)).Contains(GeocodeStr)) { locatorURL = _agsOnlineLocators + "/" + reverseGeocodeStr; // wkid = 4326; } else { _agsOnlineLocators = _agsOnlineLocators + "/" + GeocodeStr; locatorURL = _agsOnlineLocators + "/" + reverseGeocodeStr; // wkid = 4326; } } if (!locatorURL.ToUpper().Contains("/REST/")) { AAState.WriteLine(" ERROR: Thre url to the geocoder is not to the rest endpoint"); } else { //Copy point from this current feature _copyPoint = revGCLoc;//inFeature.ShapeCopy as IPoint; //Project point to WGS84 StreamReader reader = null; HttpWebRequest request = null; try { // Create the web request request = WebRequest.Create(_agsOnlineLocators) as HttpWebRequest; // Get response using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { // Get the response stream reader = new StreamReader(response.GetResponseStream()); string resp = reader.ReadToEnd(); resp = resp.Substring(resp.IndexOf("Spatial Reference:")); resp = resp.Substring(0, resp.IndexOf("<br/>")); resp = resp.Substring(resp.IndexOf("</b>") + 4); wkid = Convert.ToInt32(resp.Split(' ')[0]); //XmlDictionaryReader xr = JsonReaderWriterFactory.CreateJsonReaderreader.ReadToEnd(), XmlDictionaryReaderQuotas.Max); //doc.Load(reader.ReadToEnd()); // Console application output // Console.WriteLine(reader.ReadToEnd()); } } catch { AAState.WriteLine(" Error getting service projection information"); wkid = 4326; } finally { reader = null; request = null; } _copyPoint.Project(Globals.CreateSpatRef(wkid)); //Include location parameters in URL string results = Globals.FormatLocationRequest(locatorURL, _copyPoint.X, _copyPoint.Y, 100); //Send and receieve the request WebRequest req = null; WebResponse res = null; XmlDictionaryReader xr = null; XmlDocument doc = null; try { req = WebRequest.Create(results); res = req.GetResponse(); //Convert response from JSON to XML doc = new XmlDocument(); using (Stream s = res.GetResponseStream()) { xr = JsonReaderWriterFactory.CreateJsonReader(s, XmlDictionaryReaderQuotas.Max); doc.Load(xr); xr.Close(); s.Close(); string val = ""; for (int h = 0; h < doc.DocumentElement.FirstChild.ChildNodes.Count - 1; h++) { if (doc.DocumentElement.FirstChild.ChildNodes[h].Name.Contains("Match") == false) { if (val == "") { val = doc.DocumentElement.FirstChild.ChildNodes[h].InnerText; } else { val = val + ", " + doc.DocumentElement.FirstChild.ChildNodes[h].InnerText; } } } val = val.Trim(); inFeature.set_Value(intFldIdxs[0], val); } } catch { } finally { req = null; res = null; xr = null; doc = null; } } } else { AAState.WriteLine(" Could not get location to Reverse Geocode"); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: GET_ADDRESS_USING_ARCGIS_SERVICE: " + ex.Message); } finally { AAState.WriteLine(" Finished: GET_ADDRESS_USING_ARCGIS_SERVICE"); } break; case "TIMESTAMP": try { AAState.WriteLine(" Trying: TIMESTAMP"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length > 0) { try { //if (args[0].ToString() == "DATE") //{ // if (fieldObj.Type == esriFieldType.esriFieldTypeDate) // inObject.set_Value(intFldIdxs[0], DateTime.Now.Date); // else if (fieldObj.Type == esriFieldType.esriFieldTypeString) // inObject.set_Value(intFldIdxs[0], DateTime.Now.Date.ToString()); //} //else if (args[0].ToString() == "TIME") //{ // if (fieldObj.Type == esriFieldType.esriFieldTypeDate) // inObject.set_Value(intFldIdxs[0], DateTime.Now.TimeOfDay); // else if (fieldObj.Type == esriFieldType.esriFieldTypeString) // inObject.set_Value(intFldIdxs[0], DateTime.Now.TimeOfDay.ToString()); //} //else //{ if (fieldObj.Type == esriFieldType.esriFieldTypeDate) inObject.set_Value(intFldIdxs[0], DateTime.Now); else if (fieldObj.Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString(args[0])); // } } catch { AAState.WriteLine(" ERROR: Date/Time Format is invalid"); } } else { AAState.WriteLine(" Value info is empty"); if (fieldObj.Type == esriFieldType.esriFieldTypeDate) inObject.set_Value(intFldIdxs[0], DateTime.Now); else if (fieldObj.Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } else { AAState.WriteLine(" Value info is empty"); if (fieldObj.Type == esriFieldType.esriFieldTypeDate) inObject.set_Value(intFldIdxs[0], DateTime.Now); else if (fieldObj.Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } catch (Exception ex) { AAState.WriteLine(" ERROR: TIMESTAMP " + ex.Message); } finally { AAState.WriteLine(" Finished: TIMESTAMP"); } break; case "LAST_VALUE": try { AAState.WriteLine(" Trying: LAST_VALUE"); bool CheckForValue = false; if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length > 0) { if (args[0].ToString().ToUpper() == "TRUE") { CheckForValue = true; } } //if (args.Length != 2) //{ // AAState.WriteLine(" ERROR: Format of valdata incorrect"); // break; //} } else { AAState.WriteLine(" Value info is empty"); } if (CheckForValue && (inObject.get_Value(intFldIdxs[0]) != null && inObject.get_Value(intFldIdxs[0]) != DBNull.Value)) { } else { if (mode == "ON_CREATE") { lastValue = AAState.lastValueProperties.GetProperty(strFldNames[0]); if (lastValue != null) { inObject.set_Value(intFldIdxs[0], lastValue); AAState.WriteLine(" " + strFldNames[0] + ": " + lastValue); } else { if (inObject.get_Value(intFldIdxs[0]) != null) { AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); } } } else if (mode == "ON_CHANGE")//&& inObject.get_Value(intFldIdxs[0]) == null { IRowChanges pRowCh = inObject as IRowChanges; changed = pRowCh.get_ValueChanged(intFldIdxs[0]); if (!changed) { lastValue = AAState.lastValueProperties.GetProperty(strFldNames[0]); if (lastValue != null) { inObject.set_Value(intFldIdxs[0], lastValue); AAState.WriteLine(" " + strFldNames[0] + ": " + lastValue); } } } } } catch (Exception ex) { //if (mode == "ON_CREATE") //{ // if (inObject.get_Value(intFldIdxs[0]) != null) // { // AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); // } //} //else //{ AAState.WriteLine(" ERROR: LAST_VALUE " + ex.Message); // } } finally { AAState.WriteLine(" Finished: LAST_VALUE"); } break; case "X_COORDINATE": try { AAState.WriteLine(" Trying: X_COORDINATE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.Shape as IPoint; inFeature.set_Value(intFldIdxs[0], _copyPoint.X); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.Shape as IPolyline; if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].X); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.FromPoint.X); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.ToPoint.X); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].X); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].X); } else { AAState.WriteLine(" ERROR: Unsupported Geometry"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: X_COORDINATE: " + ex.Message); } finally { AAState.WriteLine(" Finished: X_COORDINATE"); } break; case "Y_COORDINATE": try { AAState.WriteLine(" Trying: Y_COORDINATE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.Shape as IPoint; inFeature.set_Value(intFldIdxs[0], _copyPoint.Y); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.Shape as IPolyline; if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].Y); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.FromPoint.Y); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.ToPoint.Y); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].Y); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].Y); } else { AAState.WriteLine(" ERROR: Unsupported Geometry"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Y_COORDINATE: " + ex.Message); } finally { AAState.WriteLine(" Finished: Y_COORDINATE"); } break; case "LATITUDE": try { AAState.WriteLine(" Trying: LATITUDE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.ShapeCopy as IPoint; _copyPoint.Project(AAState._sr1); inFeature.set_Value(intFldIdxs[0], _copyPoint.Y); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.ShapeCopy as IPolyline; _copyPolyline.Project(AAState._sr1); if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].Y); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.FromPoint.Y); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.ToPoint.Y); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].Y); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; _copyPolygon.Project(AAState._sr1); inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].Y); } else { AAState.WriteLine(" ERROR: Unsupported Geometry"); } } } catch (Exception ex) { AAState.WriteLine(" Error: LATITUDE: " + ex.Message); } finally { AAState.WriteLine(" Finished: LATITUDE"); } break; case "LONGITUDE": try { AAState.WriteLine(" Trying: LONGITUDE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.ShapeCopy as IPoint; _copyPoint.Project(AAState._sr1); inFeature.set_Value(intFldIdxs[0], _copyPoint.X); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.Shape as IPolyline; _copyPolyline.Project(AAState._sr1); if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].X); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.FromPoint.X); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.ToPoint.X); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].X); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; _copyPolygon.Project(AAState._sr1); inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].X); } else { AAState.WriteLine(" ERROR: Unsupported Geometry"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: LONGITUDE: " + ex.Message); } finally { AAState.WriteLine(" Finished: LONGITUDE"); } break; case "FIELD": try { AAState.WriteLine(" Trying: Field"); // verify that field to copy exists if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); fieldCopy = inObject.Fields.FindField(args[0] as string); if (fieldCopy > -1) { bool useDisplayValue = true; if (args.Length == 2) { if (args[1].ToUpper() == "CODE") useDisplayValue = false; } //if (mode == "ON_CREATE") //{ try { if (useDisplayValue) { inObject.set_Value(intFldIdxs[0], Globals.GetDomainDisplay(inObject.get_Value(fieldCopy), inObject as IFeature, inObject.Fields.get_Field(fieldCopy))); AAState.WriteLine(" Value set"); } else { inObject.set_Value(intFldIdxs[0], inObject.get_Value(fieldCopy)); AAState.WriteLine(" Value set"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: " + ex.Message); } //if (mode == "ON_CHANGE") //{ // //copy value only if current field is empty // if (inObject.get_Value(intFldIdxs[0]).ToString() == "") // inObject.set_Value(intFldIdxs[0], inObject.get_Value(fieldCopy)); //} } else { AAState.WriteLine(" " + valData + " is not found"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Field: " + ex.Message); } finally { AAState.WriteLine(" Finished: Field"); } break; //CURRENT_USER //Value Data options: //U - windows username only //W or (blank) - full username including domain i.e. domain\username //D - database user if available and not dbo case "CURRENT_USER": try { AAState.WriteLine(" Trying: CURRENT_USER"); lastEditorName = AAState._currentUserInfo.GetCurrentUser(valData, fieldObj.Length); AAState.WriteLine(" Usernmae: " + lastEditorName); if (!String.IsNullOrEmpty(lastEditorName)) { inObject.set_Value(intFldIdxs[0], lastEditorName); } } catch (Exception ex) { AAState.WriteLine(" ERROR: CURRENT_USER: "******" Finished: CURRENT_USER"); } break; case "JUNCTION_ROTATION": try { AAState.WriteLine(" Trying: JUNCTION_ROTATION"); if ((inFeature != null)) { AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic; args = null; AAState.rCalc.UseDiameter = false; AAState.rCalc.DiameterFieldName = ""; AAState.rCalc.SpinAngle = 0; if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length == 0) { // if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic; } else if (args.Length == 1) { if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; } else if (args.Length == 2) { if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; if (Globals.IsNumeric(args[1].ToString())) AAState.rCalc.SpinAngle = Convert.ToDouble(args[1]); } else if (args.Length == 3) { if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; if (Globals.IsNumeric(args[1].ToString())) AAState.rCalc.SpinAngle = Convert.ToDouble(args[1]); AAState.rCalc.UseDiameter = true; AAState.rCalc.DiameterFieldName = args[2].ToString(); } else { AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic; } } AAState.WriteLine(" " + AAState.rCalc.RotationType.ToString() + " is being used"); rotationAngle = AAState.rCalc.GetRotationUsingConnectedEdges(inFeature); if (rotationAngle == null) { AAState.WriteLine(" Rotation Angle not found or errored out"); continue; } //Accept optional second argument to provide extra rotation //if ((args != null) && (args.Length > 1) && (Globals.IsInteger(args[1]))) // rotationAngle += System.Convert.ToInt32(args[1]); if (rotationAngle != -1) { AAState.WriteLine(" Rotation Angle set to: " + rotationAngle.ToString()); inObject.set_Value(intFldIdxs[0], rotationAngle); AAState.WriteLine(" Rotation Angle set"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: JUNCTION_ROTATION \r\n" + ex.Message); } finally { AAState.WriteLine(" Finished: JUNCTION_ROTATION"); } break; //For Release: 1.2 //New Dynamic Value Method: Length - stores calculated length of line feature case "LENGTH": try { AAState.WriteLine(" Trying: LENGTH"); if (inFeature != null) { curve = (ICurve)inFeature.Shape; if (curve != null) { inObject.set_Value(intFldIdxs[0], curve.Length); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: LENGTH: " + ex.Message); } finally { AAState.WriteLine(" Finished: LENGTH"); } break; //Release: 1.2 //New Dynamic Value Method: SET_MEASURES - stores calculated M values (from 0 to length of line) for line feature //Value Data options: //P = Percent - Ms will be zero to 100 //default - Ms will be zero to length of line case "SET_MEASURES": try { AAState.WriteLine(" Trying: SET_MEASURES"); if (inFeature != null) { curve = inFeature.Shape as ICurve; mseg = inFeature.Shape as IMSegmentation; if (curve != null && mseg != null) if (valData != null && valData != "" && valData.Substring(0, 1).ToUpper() == "P") mseg.SetAndInterpolateMsBetween(0, 100); else mseg.SetAndInterpolateMsBetween(0, curve.Length); } } catch (Exception ex) { AAState.WriteLine(" ERROR: SET_MEASURES: " + ex.Message); } finally { AAState.WriteLine(" Finished: SET_MEASURES"); } break; //case "EDGE_INTERSECT_SECOND": // try // { // if (inFeature != null) // { // netFeat = inFeature as INetworkFeature; // if (netFeat != null) // { // if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) // { // iJuncFeat = (IJunctionFeature)netFeat; // // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; // ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; // if (iSJunc == null) // break; // if (iSJunc.EdgeFeatureCount <= 1) // break; // iEdgeFeat = iSJunc.get_EdgeFeature(1); // // verify that field (in junction) to copy exists // IRow pRow = iEdgeFeat as IRow; // juncField = pRow.Fields.FindField(valData as string); // if (juncField > -1) // { // inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); // } // } // } // } // } // catch // { // } // break; //case "EDGE_INTERSECT_FIRST": // try // { // if (inFeature != null) // { // netFeat = inFeature as INetworkFeature; // if (netFeat != null) // { // if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) // { // iJuncFeat = (IJunctionFeature)netFeat; // // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; // ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; // if (iSJunc == null) // break; // if (iSJunc.EdgeFeatureCount <= 0) // break; // iEdgeFeat = iSJunc.get_EdgeFeature(0); // IRow pRow = iEdgeFeat as IRow; // juncField = pRow.Fields.FindField(valData as string); // if (juncField > -1) // { // inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); // } // } // } // } // } // catch // { // } // break; //Release: 2.0 //New Dynamic Value Method: TO_EDGE_FIELD transfers a field value from a connected egde feature to a junction feature //Takes value from the frist edge whose "TO" point connects with this junction case "TO_EDGE_FIELD": try { AAState.WriteLine(" Trying: TO_EDGE_FIELD"); if (inFeature != null) { if (valData == null) { AAState.WriteLine(" Value info is null"); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" Layer restriction found, Class name of junction is: " + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" Layer restriction does not match, breaking"); continue; } AAState.WriteLine(" Layer restriction matches, checking for field restriction"); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(" Values Match"); } else { AAState.WriteLine(" Values dont match Match"); continue; } } else { AAState.WriteLine(" " + netRestrictField + " was not found"); } } else { AAState.WriteLine(" Missing Field restriction and value info"); } } iJuncFeat = (IJunctionFeature)iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(pRow.Fields, netField); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); } else { AAState.WriteLine(" " + netField + " field not found in edge"); } pRow = null; break; } } catch { } iSJunc = null; } } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_EDGE_FIELD: " + ex.Message); } finally { AAState.WriteLine(" Finished: TO_EDGE_FIELD"); } break; //Release: 2.0 //New Dynamic Value Method: FROM_EDGE_FIELD transfers a field value from a connected egde feature to a junction feature //Takes value from the frist edge whose "FROM" point connects with this junction case "FROM_EDGE_FIELD": try { AAState.WriteLine(" Trying: FROM_EDGE_FIELD"); if (inFeature != null) { if (valData == null) { AAState.WriteLine(" Value info is null"); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" Layer restriction found, Class name of junction is: " + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" Layer restriction does not match, breaking"); continue; } AAState.WriteLine(" Layer restriction matches, checking for field restriction"); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(" Values Match"); } else { AAState.WriteLine(" Values dont match Match"); continue; } } else { AAState.WriteLine(" " + netRestrictField + " was not found"); } } else { AAState.WriteLine(" Missing Field restriction and value info"); } } iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(pRow.Fields, netField); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); } else { AAState.WriteLine(" " + iSJunc + " field not found"); } pRow = null; break; } } catch { AAState.WriteLine(" error "); } iSJunc = null; } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: FROM_EDGE_FIELD: " + ex.Message); } finally { AAState.WriteLine(" Finished: FROM_EDGE_FIELD"); } break; case "TO_EDGE_STATS": try { if (valData == null) break; args = valData.Split('|'); string statType = "MAX"; switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[0].ToString(); statType = args[1].ToString(); break; default: break; } AAState.WriteLine(" Trying: TO_EDGE_STATS"); int AverageCount = 0; double result = -999999.1; string textRes = ""; if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(" Feature is a network feature"); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(" Feature is a junction feature"); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(" Checking if Edge is From or To"); iJuncFeat = iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(" Edge is a To-Edge"); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(" Getting Field From To-Edge"); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" ERROR/WARNING: Non numeric value returned: " + test); AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { AAState.WriteLine(" Checking if Edge is From Edge, skipping"); } } catch { } }//end loop try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Value was not set on feature: " + ex.Message); } } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: TO_EDGE_STATS"); } break; case "FROM_EDGE_STATS": try { if (valData == null) break; args = valData.Split('|'); string statType = "MAX"; switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[0].ToString(); statType = args[1].ToString(); break; default: break; } AAState.WriteLine(" Trying: FROM_EDGE_STATS"); int AverageCount = 0; double result = -999999.1; string textRes = ""; if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(" Feature is a network feature"); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(" Feature is a junction feature"); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(" Checking if Edge is From or To"); iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(" Edge is a From-Edge"); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(" Getting Field From From-Edge"); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" ERROR/WARNING: Non numeric value returned: " + test); AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { AAState.WriteLine(" Checking if Edge is To Edge, skipping"); } } catch { } }//end loop try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Value was not set on feature: " + ex.Message); } } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: TO_EDGE_STATS"); } break; case "EDGE_STATS": try { if (valData == null) break; args = valData.Split('|'); string statType = "MAX"; switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[0].ToString(); statType = args[1].ToString(); break; default: break; } AAState.WriteLine(" Trying: EDGE_STATS"); int AverageCount = 0; double result = -999999.1; string textRes = ""; if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(" Feature is a network feature"); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(" Feature is a junction feature"); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(" Getting Field From Edge"); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" ERROR/WARNING: Non numeric value returned: " + test); AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } catch { } }//end loop try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Value was not set on feature: " + ex.Message); } } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: TO_EDGE_STATS"); } break; case "TO_EDGE_MULTI_FIELD_INTERSECT": try { if (valData == null) break; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int popFldIdx = 0; if (args.GetLength(0) >= 2) { AAState.WriteLine(" Parsing Valueinfo"); sourceFieldName = args[0].ToString(); string[] fieldsToPop = args[1].ToString().Split(','); AAState.WriteLine(" Trying: TO_EDGE_MULTI_FIELD_INTERSECT"); if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(" Feature is a network feature"); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(" Feature is a junction feature"); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(" Checking if Edge is From or To"); iJuncFeat = iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(" Edge is a To-Edge"); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(" Getting Field From To-Edge"); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (fieldsToPop.Length == popFldIdx) break; int tempFieldNum = inObject.Fields.FindField(fieldsToPop[popFldIdx]); if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, test); popFldIdx++; } } else { AAState.WriteLine(" Checking if Edge is From Edge, skipping"); } } catch { } }//end loop } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: TO_EDGE_STATS"); } break; case "FROM_EDGE_MULTI_FIELD_INTERSECT": try { if (valData == null) break; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int popFldIdx = 0; if (args.GetLength(0) >= 2) { AAState.WriteLine(" Parsing Valueinfo"); sourceFieldName = args[0].ToString(); string[] fieldsToPop = args[1].ToString().Split(','); AAState.WriteLine(" Trying: FROM_EDGE_MULTI_FIELD_INTERSECT"); if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(" Feature is a network feature"); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(" Feature is a junction feature"); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(" Checking if Edge is From or To"); iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(" Edge is a From-Edge"); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(" Getting Field From From-Edge"); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (fieldsToPop.Length == popFldIdx) break; int tempFieldNum = inObject.Fields.FindField(fieldsToPop[popFldIdx]); if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, test); popFldIdx++; } } else { AAState.WriteLine(" Checking if Edge is To Edge, skipping"); } } catch { } }//end loop } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: TO_EDGE_STATS"); } break; case "FROM_JUNCTION_FIELD": try { AAState.WriteLine(" Trying: FROM_JUNCTION_FIELD"); if (valData == null) { AAState.WriteLine(" Value info is null"); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.FromJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" Layer restriction found, Class name of junction is: " + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" Layer restriction does not match, breaking"); break; } AAState.WriteLine(" Layer restriction matches, checking for field restriction"); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(" Values Match"); } else { AAState.WriteLine(" Values dont match Match"); break; } } else { AAState.WriteLine(" " + netRestrictField + " was not found"); } } else { AAState.WriteLine(" Missing Field restriction and value info"); } } // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netField); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], ((IFeature)iJuncFeat).get_Value(juncField)); } else AAState.WriteLine(" " + netField + " field not found"); } else AAState.WriteLine(" not an edge feature"); } else AAState.WriteLine(" Not a network feature"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: FROM_JUNCTION_FIELD: " + ex.Message); } finally { AAState.WriteLine(" Finished: FROM_JUNCTION_FIELD"); } break; //Release: 1.2 //New Dynamic Value Method: TO_JUNCTION_FIELD transfers a field value from a junction connected at terminal end of a line feature case "TO_JUNCTION_FIELD": try { AAState.WriteLine(" Trying: TO_JUNCTION_FIELD"); if (valData == null) { AAState.WriteLine(" Value info is null"); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.ToJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" Layer restriction found, Class name of junction is: " + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" Layer restriction does not match, breaking"); break; } AAState.WriteLine(" Layer restriction matches, checking for field restriction"); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(" Values Match"); } else { AAState.WriteLine(" Values dont match Match"); break; } } else { AAState.WriteLine(" " + netRestrictField + " was not found"); } } else { AAState.WriteLine(" Missing Field restriction and value info"); } } // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netField); //juncField = ((IFeature)iJuncFeat).Fields.FindField(valData as string); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], ((IFeature)iJuncFeat).get_Value(juncField)); } else { AAState.WriteLine(" " + netField + " field not found"); } } } else { AAState.WriteLine(" not an edge feature"); } } else { AAState.WriteLine(" not an geometric network feature"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: TO_JUNCTION_FIELD:" + ex.Message); } finally { AAState.WriteLine(" Finished: TO_JUNCTION_FIELD"); } break; //Release: 1.2 //New Dynamic Value Method: GENERATE_ID - uses value in specificed table and increments it as specified case "GENERATE_ID": try { AAState.WriteLine(" Trying: GENERATE_ID"); if (AAState._gentab != null) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; formatString = ""; // Parse arguments if (valData == null) break; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only sequenceColumnName = args[0].ToString(); break; case 2: // sequenceColumnName|sequenceFixedWidth sequenceColumnName = args[0].ToString(); sequenceFixedWidth = args[1].ToString(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString sequenceColumnName = args[0].ToString(); sequenceFixedWidth = args[1].ToString(); formatString = args[2].ToString(); break; default: break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); if (sequencePadding > 25) { AAState.WriteLine(" WARNING: you are trying to pad your id with a more than 25 - 0's"); AAState.WriteLine(" WARNING: " + sequencePadding + " 0's is what you have"); } else if (sequencePadding > 50) { MessageBox.Show("You are trying to add 50 places to your ID, this is not supported, please fix your dynamic value table"); } qFilter = new QueryFilterClass(); qFilter.WhereClause = "SEQNAME = '" + sequenceColumnName + "'"; cCurs = AAState._gentab.Update(qFilter, false); sequenceColumnNum = AAState._gentab.Fields.FindField("SEQCOUNTER"); //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = cCurs.NextRow(); if (row == null) { break; } if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); sequenceValue += 1; // _editEvents.OnChangeFeature -= OnChangeFeature; // _editEvents.OnCreateFeature -= OnCreateFeature; row.set_Value(sequenceColumnNum, sequenceValue); AAState.WriteLine(" " + row.Fields.get_Field(sequenceColumnNum).AliasName + " changed to " + sequenceValue); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; row.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; // _editEvents.OnChangeFeature += OnChangeFeature; // _editEvents.OnCreateFeature += OnCreateFeature; if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { AAState.WriteLine(" ERROR: GENERATE_ID: Sequence Not Found"); } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || formatString.ToLower().IndexOf("[seq]") == -1) { string setVal = (sequenceValue.ToString("D" + sequencePadding) + sequencePostfix).ToString(); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < setVal.Length && inObject.Fields.get_Field(intFldIdxs[0]).Length != 0) { AAState.WriteLine(" ERROR: " + sequenceValue + " is to long for field " + row.Fields.get_Field(sequenceColumnNum).AliasName); } else { inObject.set_Value(intFldIdxs[0], sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); AAState.WriteLine(" " + inObject.Fields.get_Field(intFldIdxs[0]).AliasName + " set to " + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); } } else { int locIdx = formatString.ToUpper().IndexOf("[SEQ]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 5); formatString = formatString.Insert(locIdx, sequenceValue.ToString("D" + sequencePadding)); } //formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding)); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < formatString.Length && inObject.Fields.get_Field(intFldIdxs[0]).Length != 0) { AAState.WriteLine(" ERROR: " + formatString + " is to long for field " + row.Fields.get_Field(sequenceColumnNum).AliasName); } else { inObject.set_Value(intFldIdxs[0], formatString); AAState.WriteLine(" " + inObject.Fields.get_Field(intFldIdxs[0]).AliasName + " set to " + formatString); } } else { inObject.set_Value(intFldIdxs[0], sequenceValue); AAState.WriteLine(" " + sequenceColumnNum + " changed to " + sequenceValue); } } } else { AAState.WriteLine(" ERROR: GENERATE_ID table is not found"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: GENERATE_ID: " + ex.Message); } finally { if (cCurs != null) { Marshal.ReleaseComObject(cCurs); GC.Collect(300); GC.WaitForFullGCComplete(); cCurs = null; } AAState.WriteLine(" Finished: GENERATE_ID"); } break; case "GENERATE_ID_BY_INTERSECT": try { AAState.WriteLine(" Trying: GENERATE_ID_BY_INTERSECT"); if (AAState._gentab != null && inFeature != null && !(inFeature.Shape.IsEmpty)) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; //genIdAreaFieldName = ""; intersectLayerName = ""; intersectLayerFieldName = ""; formatString = ""; intersectFieldPos = -1; // Parse arguments if (valData == null) break; args = valData.Split('|'); if (args.GetLength(0) < 3) { AAState.WriteLine(" ERROR: Improper value method"); break; } switch (args.GetLength(0)) { case 3: //columnName intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); // genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); break; case 4: // columnName|sequenceFixedWidth //sequenceFixedWidth formats the sequence with leading zeros to create specified width intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); //genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); sequenceFixedWidth = Convert.ToString(0); formatString = args[3].ToString(); break; case 5: // columnName|sequenceFixedWidth|formatString //formatString must contain [seq] and [id] and may contain [area] plus any desired text intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); //genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); sequenceFixedWidth = args[3].ToString(); formatString = args[4].ToString(); break; default: break; } //Find Area Layer // FindLayerByName(areaLayerName, out areaLayer); boolLayerOrFC = true; if (intersectLayerName.Contains("(")) { string[] tempSplt = intersectLayerName.Split('('); intersectLayerName = tempSplt[0]; intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC); } if (intersectLayer == null) { AAState.WriteLine(" ERROR: Intersecting feature Layer(" + intersectLayerName + ") not found"); break; } //Find Area Field intersectFieldPos = intersectLayer.FeatureClass.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(" ERROR: Intersecting feature Layer Field(" + intersectLayerFieldName + ") not found"); break; } //Find GenID Area Field //genIdAreaFieldPos = areaLayer.FeatureClass.FindField(genIdAreaFieldName); //if (genIdAreaFieldPos < 0) break; //Perform spatial search IGeometry pSearchGeo = (IGeometry)inFeature.ShapeCopy; pSearchGeo.SpatialReference = (inFeature.Class as IGeoDataset).SpatialReference; pSearchGeo.Project((intersectLayer as IGeoDataset).SpatialReference); //sFilter = new SpatialFilterClass(); //sFilter.Geometry = pSearchGeo; //sFilter.GeometryField = intersectLayer.FeatureClass.ShapeFieldName; //sFilter.SubFields = intersectLayerFieldName; //sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; sFilter = Globals.createSpatialFilter(intersectLayer, inFeature, false); //if (boolLayerOrFC) //{ // fCursor = intersectLayer.Search(sFilter, true); //} //else //{ // fCursor = intersectLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)intersectLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = intersectLayer.Search(sFilter, true); } } else { fCursor = intersectLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); intersectValue = "-9999.1"; if (sourceFeature == null) { AAState.WriteLine(" ERROR: Intersecting feature not found"); break; } else { while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { intersectValue = sourceFeature.get_Value(intersectFieldPos).ToString(); break; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { intersectValue = sourceFeature.get_Value(intersectFieldPos).ToString(); break; } sourceFeature = fCursor.NextFeature(); } } if (intersectValue == "-9999.1") { AAState.WriteLine(" ERROR: Intersecting feature not found"); break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); if (sequencePadding > 25) { AAState.WriteLine(" WARNING: you are trying to pad your id with a more than 25 - 0's"); AAState.WriteLine(" WARNING: " + sequencePadding + " 0's is what you have"); } sequenceColumnName = sequenceColumnName + intersectValue; AAState.WriteLine(" Looking for a field called " + sequenceColumnName + " in the generate ID table"); qFilter = new QueryFilterClass(); qFilter.WhereClause = "SEQNAME = '" + sequenceColumnName + "'"; cCurs = AAState._gentab.Update(qFilter, false); sequenceColumnNum = AAState._gentab.Fields.FindField("SEQCOUNTER"); //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = cCurs.NextRow(); if (row == null) { break; } if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); sequenceValue += 1; row.set_Value(sequenceColumnNum, sequenceValue); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; row.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { AAState.WriteLine(" ERROR: Sequence number not found"); } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || (formatString.ToUpper().IndexOf("[SEQ]") == -1 && formatString.ToUpper().IndexOf("[ID]") == -1)) inObject.set_Value(intFldIdxs[0], intersectValue + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); else { int locIdx = formatString.ToUpper().IndexOf("[ID]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 4); formatString = formatString.Insert(locIdx, intersectValue); } // formatString = formatString.Replace("[id]", intersectValue); // formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding)); locIdx = formatString.ToUpper().IndexOf("[SEQ]"); if (locIdx >= 0) { string sequenceValuePad = sequenceValue.ToString("D" + sequencePadding); formatString = formatString.Remove(locIdx, 5); formatString = formatString.Insert(locIdx, sequenceValuePad.ToString()); } // inObject.set_Value(intFldIdxs[0], formatString); } else inObject.set_Value(intFldIdxs[0], sequenceValue); } } else { AAState.WriteLine(" ERROR: GENERATE_ID table is not found"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: GENERATE_ID_BY_INTERSECT: " + ex.Message); } finally { AAState.WriteLine(" Finished: GENERATE_ID_BY_INTERSECT"); } break; //Modified for Release 1.2 (No longer uses ICalculator) //Requires valid VBScript expression //Can include string, numeric, and date fields by name in square brackets [] //Example: DateDiff("yyyy",[INSTALLDATE],Now()) case "GENERATE_ID_OLD": try { AAState.WriteLine(" Trying: GENERATE_ID"); if (AAState._gentab != null) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; formatString = ""; // Parse arguments if (valData == null) break; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only sequenceColumnName = args[0].ToString(); break; case 2: // sequenceColumnName|sequenceFixedWidth sequenceColumnName = args[0].ToString(); sequenceFixedWidth = args[1].ToString(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString sequenceColumnName = args[0].ToString(); sequenceFixedWidth = args[1].ToString(); formatString = args[2].ToString(); break; default: break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); if (sequencePadding > 25) { AAState.WriteLine(" WARNING: you are trying to pad your id with a more than 25 - 0's"); AAState.WriteLine(" WARNING: " + sequencePadding + " 0's is what you have"); } else if (sequencePadding > 50) { MessageBox.Show("You are trying to add 50 places to your ID, this is not supported, please fix your dynamic value table"); } //Check for sequence column in generate id table sequenceColumnNum = AAState._gentab.FindField(sequenceColumnName); if (AAState._gentab.FindField(sequenceColumnName) >= 0) { //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = AAState._gentab.Update(null, false).NextRow(); if (row == null) { break; } if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); sequenceValue += 1; // _editEvents.OnChangeFeature -= OnChangeFeature; // _editEvents.OnCreateFeature -= OnCreateFeature; row.set_Value(sequenceColumnNum, sequenceValue); AAState.WriteLine(" " + row.Fields.get_Field(sequenceColumnNum).AliasName + " changed to " + sequenceValue); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; row.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; // _editEvents.OnChangeFeature += OnChangeFeature; // _editEvents.OnCreateFeature += OnCreateFeature; if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { AAState.WriteLine(" ERROR: GENERATE_ID: Sequence Not Found"); } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || formatString.ToLower().IndexOf("[seq]") == -1) { string setVal = (sequenceValue.ToString("D" + sequencePadding) + sequencePostfix).ToString(); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < setVal.Length && inObject.Fields.get_Field(intFldIdxs[0]).Length != 0) { AAState.WriteLine(" ERROR: " + sequenceValue + " is to long for field " + row.Fields.get_Field(sequenceColumnNum).AliasName); } else { inObject.set_Value(intFldIdxs[0], sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); AAState.WriteLine(" " + inObject.Fields.get_Field(intFldIdxs[0]).AliasName + " set to " + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); } } else { int locIdx = formatString.ToUpper().IndexOf("[SEQ]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 5); formatString = formatString.Insert(locIdx, sequenceValue.ToString("D" + sequencePadding)); } //formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding)); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < formatString.Length && inObject.Fields.get_Field(intFldIdxs[0]).Length != 0) { AAState.WriteLine(" ERROR: " + formatString + " is to long for field " + row.Fields.get_Field(sequenceColumnNum).AliasName); } else { inObject.set_Value(intFldIdxs[0], formatString); AAState.WriteLine(" " + inObject.Fields.get_Field(intFldIdxs[0]).AliasName + " set to " + formatString); } } else { inObject.set_Value(intFldIdxs[0], sequenceValue); AAState.WriteLine(" " + sequenceColumnNum + " changed to " + sequenceValue); } } } else { AAState.WriteLine(" Sequence Field not found"); } } else { AAState.WriteLine(" ERROR: GENERATE_ID table is not found"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: GENERATE_ID: " + ex.Message); } finally { AAState.WriteLine(" Finished: GENERATE_ID"); } break; case "GENERATE_ID_BY_INTERSECT_OLD": try { AAState.WriteLine(" Trying: GENERATE_ID_BY_INTERSECT"); if (AAState._gentab != null && inFeature != null && !(inFeature.Shape.IsEmpty)) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; //genIdAreaFieldName = ""; intersectLayerName = ""; intersectLayerFieldName = ""; formatString = ""; intersectFieldPos = -1; // Parse arguments if (valData == null) break; args = valData.Split('|'); if (args.GetLength(0) < 3) { AAState.WriteLine(" ERROR: Improper value method"); break; } switch (args.GetLength(0)) { case 3: //columnName intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); // genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); break; case 4: // columnName|sequenceFixedWidth //sequenceFixedWidth formats the sequence with leading zeros to create specified width intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); //genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); sequenceFixedWidth = Convert.ToString(0); formatString = args[3].ToString(); break; case 5: // columnName|sequenceFixedWidth|formatString //formatString must contain [seq] and [id] and may contain [area] plus any desired text intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); //genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); sequenceFixedWidth = args[3].ToString(); formatString = args[4].ToString(); break; default: break; } //Find Area Layer // FindLayerByName(areaLayerName, out areaLayer); boolLayerOrFC = true; if (intersectLayerName.Contains("(")) { string[] tempSplt = intersectLayerName.Split('('); intersectLayerName = tempSplt[0]; intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC); } if (intersectLayer == null) { AAState.WriteLine(" ERROR: Intersecting feature Layer(" + intersectLayerName + ") not found"); break; } //Find Area Field intersectFieldPos = intersectLayer.FeatureClass.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(" ERROR: Intersecting feature Layer Field(" + intersectLayerFieldName + ") not found"); break; } //Find GenID Area Field //genIdAreaFieldPos = areaLayer.FeatureClass.FindField(genIdAreaFieldName); //if (genIdAreaFieldPos < 0) break; //Perform spatial search IGeometry pSearchGeo = (IGeometry)inFeature.ShapeCopy; pSearchGeo.SpatialReference = (inFeature.Class as IGeoDataset).SpatialReference; pSearchGeo.Project((intersectLayer as IGeoDataset).SpatialReference); //sFilter = new SpatialFilterClass(); //sFilter.Geometry = pSearchGeo; //sFilter.GeometryField = intersectLayer.FeatureClass.ShapeFieldName; //sFilter.SubFields = intersectLayerFieldName; //sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; sFilter = Globals.createSpatialFilter(intersectLayer, inFeature, false); //if (boolLayerOrFC) //{ // fCursor = intersectLayer.Search(sFilter, true); //} //else //{ // fCursor = intersectLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)intersectLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = intersectLayer.Search(sFilter, true); } } else { fCursor = intersectLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); intersectValue = "-9999.1"; if (sourceFeature == null) { AAState.WriteLine(" ERROR: Intersecting feature not found"); break; } else { while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { intersectValue = sourceFeature.get_Value(intersectFieldPos).ToString(); break; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { intersectValue = sourceFeature.get_Value(intersectFieldPos).ToString(); break; } sourceFeature = fCursor.NextFeature(); } } if (intersectValue == "-9999.1") { AAState.WriteLine(" ERROR: Intersecting feature not found"); break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); if (sequencePadding > 25) { AAState.WriteLine(" WARNING: you are trying to pad your id with a more than 25 - 0's"); AAState.WriteLine(" WARNING: " + sequencePadding + " 0's is what you have"); } sequenceColumnName = sequenceColumnName + intersectValue; AAState.WriteLine(" Looking for a field called " + sequenceColumnName + " in the generate ID table"); sequenceColumnNum = AAState._gentab.FindField(sequenceColumnName); if (sequenceColumnNum > -1) { AAState.WriteLine(" Field Found"); //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = AAState._gentab.Update(qFilter, false).NextRow(); if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); sequenceValue += 1; row.set_Value(sequenceColumnNum, sequenceValue); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; row.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { AAState.WriteLine(" ERROR: Sequence number not found"); } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || (formatString.ToUpper().IndexOf("[SEQ]") == -1 && formatString.ToUpper().IndexOf("[ID]") == -1)) inObject.set_Value(intFldIdxs[0], intersectValue + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); else { int locIdx = formatString.ToUpper().IndexOf("[ID]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 4); formatString = formatString.Insert(locIdx, intersectValue); } // formatString = formatString.Replace("[id]", intersectValue); // formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding)); locIdx = formatString.ToUpper().IndexOf("[SEQ]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 5); formatString = formatString.Insert(locIdx, sequenceValue.ToString()); } // inObject.set_Value(intFldIdxs[0], formatString); } else inObject.set_Value(intFldIdxs[0], sequenceValue); } } else { AAState.WriteLine(" ERROR: Field NOT Found"); } } else { AAState.WriteLine(" ERROR: GENERATE_ID table is not found"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: GENERATE_ID_BY_INTERSECT: " + ex.Message); } finally { AAState.WriteLine(" Finished: GENERATE_ID_BY_INTERSECT"); } break; //Modified for Release 1.2 (No longer uses ICalculator) //Requires valid VBScript expression //Can include string, numeric, and date fields by name in square brackets [] //Example: DateDiff("yyyy",[INSTALLDATE],Now()) case "GENERATE_ID_BY_AREA": try { AAState.WriteLine(" Trying: GENERATE_ID_BY_AREA"); if (AAState._gentab != null && inFeature != null && !(inFeature.Shape.IsEmpty)) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; genIdAreaFieldName = ""; areaLayerName = ""; areaLayerFieldName = ""; formatString = ""; // Parse arguments if (valData == null) break; args = valData.Split('|'); if (args.GetLength(0) < 3) { AAState.WriteLine(" ERROR: Improper Value Method"); break; } switch (args.GetLength(0)) { case 4: //columnName areaLayerName = args[0].ToString(); areaLayerFieldName = args[1].ToString(); genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[3].ToString(); break; case 5: // columnName|sequenceFixedWidth //sequenceFixedWidth formats the sequence with leading zeros to create specified width areaLayerName = args[0].ToString(); areaLayerFieldName = args[1].ToString(); genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[3].ToString(); sequenceFixedWidth = args[4].ToString(); break; case 6: // columnName|sequenceFixedWidth|formatString //formatString must contain [seq] and may contain [area] plus any desired text areaLayerName = args[0].ToString(); areaLayerFieldName = args[1].ToString(); genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[3].ToString(); sequenceFixedWidth = args[4].ToString(); formatString = args[5].ToString(); break; default: break; } //Find Area Layer // FindLayerByName(areaLayerName, out areaLayer); boolLayerOrFC = true; if (areaLayerName.Contains("(")) { string[] tempSplt = areaLayerName.Split('('); areaLayerName = tempSplt[0]; areaLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, areaLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { areaLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, areaLayerName, ref boolLayerOrFC); } if (areaLayer == null) { AAState.WriteLine(" ERROR: Area Layer not found: " + areaLayerName); break; } //Find Area Field areaFieldPos = areaLayer.FeatureClass.FindField(areaLayerFieldName); if (areaFieldPos < 0) { AAState.WriteLine(" ERROR: Area Layer field not found: " + areaLayerFieldName); break; } //Find GenID Area Field //genIdAreaFieldPos = areaLayer.FeatureClass.FindField(genIdAreaFieldName); //if (genIdAreaFieldPos < 0) break; //Perform spatial search //sFilter = new SpatialFilterClass(); //sFilter.Geometry = (IGeometry)inFeature.ShapeCopy; //sFilter.GeometryField = areaLayer.FeatureClass.ShapeFieldName; //sFilter.SubFields = areaLayerFieldName; //sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; Globals.createSpatialFilter(areaLayer, inFeature, false); //if (boolLayerOrFC) //{ // fCursor = areaLayer.Search(sFilter, true); //} //else //{ // fCursor = areaLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)areaLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = areaLayer.Search(sFilter, true); } } else { fCursor = areaLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); areaValue = "-9999.1"; if (sourceFeature == null) { AAState.WriteLine(" ERROR: Intersecting feature not found"); break; } else { while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { areaValue = sourceFeature.get_Value(areaFieldPos).ToString(); break; } if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { areaValue = sourceFeature.get_Value(areaFieldPos).ToString(); break; } sourceFeature = fCursor.NextFeature(); } } if (areaValue == "-9999.1") { AAState.WriteLine(" ERROR: Intersecting feature not found"); break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); sequenceColumnNum = AAState._gentab.FindField(sequenceColumnName); if (sequenceColumnNum > -1) { qFilter = new QueryFilterClass(); qFilter.SubFields = areaLayerFieldName + "," + sequenceColumnName; ISQLSyntax sqlSyntax = (ISQLSyntax)AAState._editor.EditWorkspace; char[] charBuf = sqlSyntax.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierPrefix).ToCharArray(); string strSC = new string(charBuf); switch (strSC) { case "": qFilter.WhereClause = genIdAreaFieldName + " = '" + areaValue + "'"; break; case "[": qFilter.WhereClause = "[" + genIdAreaFieldName + "]" + " = '" + areaValue + "'"; break; default: qFilter.WhereClause = "\"" + genIdAreaFieldName + "\" = '" + areaValue + "'"; break; } //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = AAState._gentab.Update(qFilter, false).NextRow(); if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); sequenceValue += 1; sequenceValue += 1; row.set_Value(sequenceColumnNum, sequenceValue); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; row.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { //TODO raise error } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || formatString.IndexOf("[seq]") == -1) inObject.set_Value(intFldIdxs[0], areaValue + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); else { formatString = formatString.Replace("[area]", areaValue); formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding)); inObject.set_Value(intFldIdxs[0], formatString); } else inObject.set_Value(intFldIdxs[0], sequenceValue); } } } else { AAState.WriteLine(" ERROR: GENERATE_ID table is not found"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: GENERATE_ID_BY_AREA: " + ex.Message); } finally { AAState.WriteLine(" Finished: GENERATE_ID_BY_AREA"); } break; //Modified for Release 1.2 (No longer uses ICalculator) //Requires valid VBScript expression //Can include string, numeric, and date fields by name in square brackets [] //Example: DateDiff("yyyy",[INSTALLDATE],Now()) case "EXPRESSION": try { AAState.WriteLine(" Trying: EXPRESSION"); if (inObject != null & valData != null) { int intTargetFld = -1; if (intFldIdxs.Count == 0) { } else { intTargetFld = intFldIdxs[0]; } newValue = valData; for (int i = 0; i <= inObject.Fields.FieldCount; i++) { string strTmpFldName; int intTmpIdx; if (i == inObject.Fields.FieldCount) { testField = inObject.Fields.get_Field(intFldIdxs[0]); strTmpFldName = "#"; intTmpIdx = intFldIdxs[0]; } else { testField = inObject.Fields.get_Field(i); strTmpFldName = testField.Name; intTmpIdx = i; } int indFld = newValue.ToUpper().IndexOf("[" + strTmpFldName.ToUpper() + "]"); while (indFld >= 0) { AAState.WriteLine(" replace field: " + testField.Name + " with a value"); int fldLen = strTmpFldName.Length; string tmpStr1 = newValue.Substring(0, indFld + 1); string tmpStr2 = newValue.Substring(indFld + fldLen + 1); newValue = tmpStr1 + "_REPLACE_VAL_" + tmpStr2; switch (testField.Type) { case esriFieldType.esriFieldTypeString: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "") { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } } // newValue = newValue.Replace("[" + testField.Name + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); break; case esriFieldType.esriFieldTypeDate: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "" || inObject.get_Value(intTmpIdx) == DBNull.Value) { if (newValue.Contains("IsNull([" + "_REPLACE_VAL_" + "])")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull([" + "_REPLACE_VAL_" + "])")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL([" + "_REPLACE_VAL_" + "])")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\"");//"\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "CDATE(\"" + inObject.get_Value(intTmpIdx).ToString() + "\")"); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "CDATE(\"" + inObject.get_Value(intTmpIdx).ToString() + "\")"); } } // newValue = newValue.Replace("[" + testField.Name + "]", "CDATE(\"" + inObject.get_Value(intTmpIdx).ToString() + "\")"); break; default: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "") { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\"");// "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "" + inObject.get_Value(intTmpIdx).ToString() + ""); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", inObject.get_Value(intTmpIdx).ToString()); } } // newValue = newValue.Replace("[" + testField.Name + "]", inObject.get_Value(intTmpIdx).ToString()); break; } indFld = newValue.ToUpper().IndexOf("[" + testField.Name.ToUpper() + "]"); } } //MessageBox.Show(newValue); try { AAState.WriteLine(" Checking to verify there is a field to store the expression"); if (intTargetFld > -1) { newValue = script.Eval(newValue).ToString(); if (newValue.ToUpper() == "<Null>".ToUpper()) { AAState.WriteLine(" Setting Null"); inObject.set_Value(intTargetFld, DBNull.Value); } else if (inObject.get_Value(intTargetFld).ToString() != newValue) { AAState.WriteLine(" Setting Value to: " + newValue.Trim()); inObject.set_Value(intTargetFld, newValue.Trim()); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: evaluating the expression for feature in " + inObject.Class.AliasName + " with OID of " + inObject.OID); AAState.WriteLine(" " + ex.Message); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: EXPRESSION: " + ex.Message); } finally { AAState.WriteLine(" Finished: EXPRESSION"); } break; // GUID values are calculated into text fields or into native GUID field types // When using text field you have an optional argument (valdata) to specify the format // N-none 32 chars, D-dash 36, B-braces 38, P-Parenthesis 38 case "GUID": try { if (inObject != null) { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeGUID) inObject.set_Value(intFldIdxs[0], System.Guid.NewGuid().ToString("B")); else if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString && inObject.Fields.get_Field(intFldIdxs[0]).Length >= 32) { valData = valData.Trim(); if (valData != "N" && valData != "D" && valData != "B" && valData != "P") if (inObject.Fields.get_Field(intFldIdxs[0]).Length >= 38) valData = "B"; //Default to braces else if (inObject.Fields.get_Field(intFldIdxs[0]).Length < 36) valData = "N"; else valData = "D"; inObject.set_Value(intFldIdxs[0], System.Guid.NewGuid().ToString(valData)); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: EXPRESSION: " + ex.Message); } finally { AAState.WriteLine(" Finished: EXPRESSION"); } break; case "CREATE_LINKED_RECORD"://Feature Layer|Field To Copy|Field To Populate|Primary Key Field|Foreign Key Field { try { AAState.WriteLine(" Trying: CREATE_LINKED_RECORD"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 5) { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } } else { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } if (inFeature == null) { AAState.WriteLine(" ERROR: The input features is null"); break; } sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(" Getting Value Info"); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); string targetFieldName = args[2].ToString(); string sourceIDFieldName = args[3].ToString(); string targetIDFieldName = args[4].ToString(); AAState.WriteLine(" Checking values"); if (sourceFieldName != null) { AAState.WriteLine(" Checking Fields in Source Layer"); int fldValToCopyIdx = inObject.Fields.FindField(sourceFieldName); int fldIDToCopyIdx = inObject.Fields.FindField(sourceIDFieldName); if (fldValToCopyIdx > -1 && fldIDToCopyIdx > -1) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { // Get layer AAState.WriteLine(" Checking for table to populate"); bool FCorLayerSource = true; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref FCorLayerSource); if (sourceLayer != null) { } else { ITable pTable = Globals.FindTable(AAState._editor.Map, sourceLayerName); if (pTable != null) { int fldValToPopIdx = pTable.Fields.FindField(targetFieldName); int fldIDToPopIdx = pTable.Fields.FindField(targetIDFieldName); if (fldValToPopIdx > -1 && fldIDToPopIdx > -1) { AAState.WriteLine(" Trying to create a row in the target table"); IRow pNewRow = pTable.CreateRow(); AAState.WriteLine(" Row Created"); AAState.WriteLine(" Trying to Copy ID"); try { pNewRow.set_Value(fldIDToPopIdx, inObject.get_Value(fldIDToCopyIdx)); } catch { AAState.WriteLine(" ERROR: Could not Copy: " + inObject.get_Value(fldIDToCopyIdx) + " to field: " + targetIDFieldName); } AAState.WriteLine(" ID successfully copied"); AAState.WriteLine(" Trying to Copy Value"); try { pNewRow.set_Value(fldValToPopIdx, inObject.get_Value(fldValToCopyIdx)); } catch { AAState.WriteLine(" ERROR: Could not Copy: " + inObject.get_Value(fldValToCopyIdx) + " to field: " + targetFieldName); } //AAState.WriteLine(" Value successfully copied"); ////} //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //pNewRow.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } IObject featobj = pNewRow as IObject; if (featobj != null) { NewFeatureList.Add(featobj); } //featobj.Store(); AAState.WriteLine(" Row successfully stored"); } else { AAState.WriteLine(" ERROR: ID or Field to populate was not found"); } } else { AAState.WriteLine(" ERROR: Table to populate not found: " + sourceLayerName); } } } } } else { AAState.WriteLine(" ERROR: ID or Field to Copy was not found"); } //if ((!found) && (inObject.Fields.get_Field(intFldIdxs[0]).IsNullable)) //{ // inObject.set_Value(intFldIdxs[0], null); //} } } catch (Exception ex) { AAState.WriteLine(" ERROR: CREATE_LINKED_RECORD" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: CREATE_LINKED_RECORD"); // intFldIdxs[0] = -1; } break; } case "UPDATE_INTERSECTING_FEATURE"://Intersected Feature|FieldIntersectingFeatureToChange|FromFieldinModifiedFeature { try { IFeatureCursor fLocalCursor = null; IFeature sourceFeatureLocal = null; AAState.WriteLine(" Trying: UPDATE_INTERSECTING_FEATURE"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 3) { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } } else { AAState.WriteLine(" ERROR: Format of valdata incorrect"); break; } if (inFeature == null) { AAState.WriteLine(" ERROR: The input features is null"); break; } sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(" Getting Value Info"); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); string targetFieldName = args[2].ToString(); AAState.WriteLine(" Checking values"); if (sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (Globals.IsEditable(ref sourceLayer, ref AAState._editor)) { if (inObject.Class.ObjectClassID != sourceLayer.FeatureClass.ObjectClassID) { sourceField = sourceLayer.FeatureClass.FindField(sourceFieldName); if (sourceField > -1) { //sFilter = new SpatialFilterClass(); sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); int fldIdx = inFeature.Fields.FindField(targetFieldName); AAState.WriteLine(" " + targetFieldName + " at index " + fldIdx); string test = targetFieldName; if (fldIdx > -1) { test = inFeature.get_Value(fldIdx).ToString(); AAState.WriteLine(" Value Found " + test); } AAState.WriteLine(" Value used " + test); //if (boolLayerOrFC) //{ // fLocalCursor = sourceLayer.Search(sFilter, false); //} //else //{ // fLocalCursor = sourceLayer.FeatureClass.Search(sFilter, false); //} pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, false, out cCurs); fLocalCursor = cCurs as IFeatureCursor; } else { fLocalCursor = sourceLayer.Search(sFilter, false); } } else { fLocalCursor = sourceLayer.FeatureClass.Search(sFilter, false); } while ((sourceFeatureLocal = fLocalCursor.NextFeature()) != null) { try { if (sourceFeatureLocal.Class.ObjectClassID != inFeature.Class.ObjectClassID) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeString) { sourceFeatureLocal.set_Value(sourceField, test); //} //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); ////AAState.indent = AAState.indent.Substring(0, AAState.indent.Length-13); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } else { if (Globals.IsNumeric(test)) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSmallInteger || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeInteger) { sourceFeatureLocal.set_Value(sourceField, Convert.ToInt32(test)); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } else if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeDouble || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSingle) { sourceFeatureLocal.set_Value(sourceField, Convert.ToDouble(test)); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } else { sourceFeatureLocal.set_Value(sourceField, test as object); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; // break; } } else { sourceFeatureLocal.set_Value(sourceField, test as object); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; // break; } } } else if (sourceFeatureLocal.Class == inFeature.Class && sourceFeatureLocal.OID != inFeature.OID) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeString) { sourceFeatureLocal.set_Value(sourceField, test); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } else { if (Globals.IsNumeric(test)) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSmallInteger || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeInteger) { sourceFeatureLocal.set_Value(sourceField, Convert.ToInt32(test)); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } else if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeDouble || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSingle) { sourceFeatureLocal.set_Value(sourceField, Convert.ToDouble(test)); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; // break; } else { sourceFeatureLocal.set_Value(sourceField, test as object); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } } else { sourceFeatureLocal.set_Value(sourceField, test as object); //AAState.WriteLine(" INFO: New feature being store, AA rules will fire on it now"); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.indent = AAState.indent + " "; //string rowFiltPre = AAState._dv.RowFilter; //sourceFeatureLocal.Store(); //AAState._dv.RowFilter = rowFiltPre; //AAState.indent = AAState.indent.Substring(0, AAState.indent.Length - " ".Length); //AAState.WriteLine(" _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_"); //AAState.WriteLine(" INFO: New Feature Complete"); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; //sourceFeatureLocal.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } } } } catch { AAState.WriteLine(" ERROR setting value"); } finally { } //if (found) //{ // break; //} } } else { AAState.WriteLine(" ERROR: Source field not found: " + sourceFieldName); } } else { AAState.WriteLine(" ERROR: Source field not found: " + sourceFieldName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer is not editable: " + sourceLayerName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer not found: " + sourceLayerName); } } } if (found) { break; } //if ((!found) && (inObject.Fields.get_Field(intFldIdxs[0]).IsNullable)) //{ // inObject.set_Value(intFldIdxs[0], null); //} } fLocalCursor = null; sourceFeatureLocal = null; } catch (Exception ex) { AAState.WriteLine(" ERROR: UPDATE_INTERSECTING_FEATURE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(" Finished: UPDATE_INTERSECTING_FEATURE"); // intFldIdxs[0] = -1; } break; } case "MULTI_FIELD_INTERSECT": try { AAState.WriteLine(" Trying: MULTI_FIELD_INTERSECT"); if (inFeature != null & valData != null) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int popFldIdx = 0; if (args.GetLength(0) > 2) { AAState.WriteLine(" Parsing Valueinfo"); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); string[] fieldsToPop = args[2].ToString().Split(','); if (args.GetLength(0) == 4) { AAState.WriteLine(" Search distance specified"); if (Globals.IsDouble(args[3])) { searchDistance = Convert.ToDouble(args[3]); } else { searchDistance = 0.0; } } else { searchDistance = 0.0; } if (sourceFieldName != null) { AAState.WriteLine(" Looping Through Layers"); for (int i = 0; i < sourceLayerNames.Length; i++) { if (fieldsToPop.Length == popFldIdx) break; sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { sourceField = sourceLayer.FeatureClass.FindField(sourceFieldName); if (sourceField > -1) { //sFilter = new SpatialFilterClass(); //if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) //{ //searchEnvelope = Globals.CalcSearchExtent(sourceLayer, inFeature, searchDistance); // sFilter.Geometry = searchEnvelope; //} //else //{ // sFilter.Geometry = inFeature.ShapeCopy; //} //sFilter.GeometryField = sourceLayer.FeatureClass.ShapeFieldName; //sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); //if (boolLayerOrFC) //{ // fCursor = sourceLayer.Search(sFilter, true); //} //else //{ // fCursor = sourceLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } while ((sourceFeature = fCursor.NextFeature()) != null) { if (sourceFeature.Class != inFeature.Class) { if (fieldsToPop.Length == popFldIdx) break; string test = sourceFeature.get_Value(sourceField).ToString(); int tempFieldNum = inObject.Fields.FindField(fieldsToPop[popFldIdx]); popFldIdx++; if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, sourceFeature.get_Value(sourceField)); } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { if (fieldsToPop.Length == popFldIdx) break; string test = sourceFeature.get_Value(sourceField).ToString(); int tempFieldNum = inObject.Fields.FindField(fieldsToPop[popFldIdx]); popFldIdx++; if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, sourceFeature.get_Value(sourceField)); } } } } else { AAState.WriteLine(" ERROR: Source field not found: " + sourceFieldName); } } else { AAState.WriteLine(" ERROR/WARNING: Datasource is invalid: " + sourceLayerName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer not found: " + sourceLayerName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer string is empty"); } } } else { AAState.WriteLine(" ERROR: Field name is invalid"); } } else { AAState.WriteLine(" ERROR: Invalid Value method definition"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: MULTI_FIELD_INTERSECT: " + ex.Message); } finally { AAState.WriteLine(" Finished: MULTI_FIELD_INTERSECT"); } break; case "INTERSECT_STATS": try { AAState.WriteLine(" Trying: INTERSECT_STATS"); if (inFeature != null & valData != null) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int AverageCount = 0; if (args.GetLength(0) > 2) { AAState.WriteLine(" Parsing Valueinfo"); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); string statType = args[2].ToString(); if (args.GetLength(0) == 4) { AAState.WriteLine(" Search distance specified"); if (Globals.IsDouble(args[3])) searchDistance = Convert.ToDouble(args[3]); else searchDistance = 0.0; } else { searchDistance = 0.0; } double result = -999999.1; string textRes = ""; if (sourceFieldName != null) { AAState.WriteLine(" Looping Through Layers"); for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { sourceField = sourceLayer.FeatureClass.FindField(sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); //if (boolLayerOrFC) //{ // fCursor = sourceLayer.Search(sFilter, true); //} //else //{ // fCursor = sourceLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { string test = sourceFeature.get_Value(sourceField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" ERROR/WARNING: Non numeric value returned: " + test); AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { string test = sourceFeature.get_Value(sourceField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" ERROR/WARNING: Non numeric value returned: " + test); AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } sourceFeature = fCursor.NextFeature(); } } else { AAState.WriteLine(" ERROR: Source field not found: " + sourceFieldName); } } else { AAState.WriteLine(" ERROR/WARNING: Datasource is invalid: " + sourceLayerName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer not found: " + sourceLayerName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer string is empty"); } } try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Value was not set on feature: " + ex.Message); } } else { AAState.WriteLine(" ERROR: Field name is invalid"); } } else { AAState.WriteLine(" ERROR: Invalid Value method definition"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: INTERSECT_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: INTERSECT_STATS"); } break; case "FEATURE_STATS": try { AAState.WriteLine(" Trying: FEATURE_STATS"); if (inFeature != null & valData != null) { sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int AverageCount = 0; if (args.GetLength(0) > 1) { AAState.WriteLine(" Parsing Valueinfo"); string[] sourceFieldNames = args[0].ToString().Split(','); string statType = args[1].ToString(); double result = -999999.1; string textRes = ""; if (sourceFieldNames != null) { AAState.WriteLine(" Looping Through Fields"); for (int i = 0; i < sourceFieldNames.Length; i++) { sourceFieldName = sourceFieldNames[i].ToString(); if (sourceFieldName != "") { sourceField = inObject.Fields.FindField(sourceFieldName); if (sourceField > -1) { string test = inObject.get_Value(sourceField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" ERROR/WARNING: Non numeric value returned: " + test); AAState.WriteLine(" ERROR: Unsupported stat type: " + test); break; } } } } } try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: Value was not set on feature: " + ex.Message); } } else { AAState.WriteLine(" ERROR: Field name is invalid"); } } else { AAState.WriteLine(" ERROR: Invalid Value method definition"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: FEATURE_STATS: " + ex.Message); } finally { AAState.WriteLine(" Finished: FEATURE_STATS"); } break; case "INTERSECTING_EDGE": try { if (valData == null) break; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[1].ToString(); break; default: break; } AAState.WriteLine(" Trying: INTERSECTING_EDGE"); if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(" Feature is a network feature"); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(" Feature is a junction feature"); iJuncFeat = (IJunctionFeature)netFeat; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(" Edge Count: " + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(" Getting Field From Edge"); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); AAState.WriteLine(" Attempting to store: " + test); inObject.set_Value(intFldIdxs[0], test); continue; } catch { } }//end loop try { } catch (Exception ex) { AAState.WriteLine(" ERROR: Value was not set on feature: " + ex.Message); } } else { AAState.WriteLine(" No Connected Edges Found"); } } else { AAState.WriteLine(" not an junction feature"); } } else { AAState.WriteLine(" Not a Geometric Network Feature"); } } } catch (Exception ex) { AAState.WriteLine(" ERROR: INTERSECTING_EDGE: " + ex.Message); } finally { AAState.WriteLine(" Finished: INTERSECTING_EDGE"); } break; case "INTERSECTING_FEATURE": try { AAState.WriteLine(" Trying: INTERSECTING_FEATURE"); if (inFeature != null & valData != null) { AAState.WriteLine(" Starting to process rule"); sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(" Value Info is: " + valData); // Parse arguments args = valData.Split('|'); //if (args.GetLength(0) >= 2) if (args.Length >= 2) { AAState.intersectOptions strOpt = AAState.intersectOptions.First; switch (args.Length) { case 2: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); break; case 3: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); switch (args[2].ToString().ToUpper()) { case "PROMPT": strOpt = AAState.intersectOptions.PromptMulti; break; case "P": strOpt = AAState.intersectOptions.PromptMulti; break; case "CENTROID": strOpt = AAState.intersectOptions.Centroid; break; case "C": strOpt = AAState.intersectOptions.Centroid; break; case "F": strOpt = AAState.intersectOptions.First; break; case "FIRST": strOpt = AAState.intersectOptions.First; break; } break; default: break; } if (sourceFieldName != null) { List<Globals.OptionsToPresent> pFoundFeat = new List<Globals.OptionsToPresent>(); for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } // Get layer if (sourceLayer != null) { AAState.WriteLine(" Layer Found: " + sourceLayer.Name); sourceField = sourceLayer.FeatureClass.FindField(sourceFieldName); AAState.WriteLine(" " + sourceFieldName + ": at " + sourceField); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, strOpt == AAState.intersectOptions.Centroid); if (sFilter == null) { AAState.WriteLine(" Filter is null, this will cause an error"); continue; } //if (boolLayerOrFC) //{ // fCursor = sourceLayer.Search(sFilter, true); //} //else //{ // fCursor = sourceLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { AAState.WriteLine(" Searching on Layer"); if (pFS.SelectionSet.Count > 0) { AAState.WriteLine(" Searching on Selection Set"); pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; AAState.WriteLine(" Cursor created"); } else { AAState.WriteLine(" No Selected Features"); fCursor = sourceLayer.Search(sFilter, true); AAState.WriteLine(" Cursor created"); } } else { AAState.WriteLine(" Searching on feature Class"); fCursor = sourceLayer.FeatureClass.Search(sFilter, true); AAState.WriteLine(" Cursor created"); } if (fCursor == null) { AAState.WriteLine(" Cursor is null"); continue; } AAState.WriteLine(" Starring Loop of found features"); while ((sourceFeature = fCursor.NextFeature()) != null) { AAState.WriteLine(" Checking Class"); if (sourceFeature.Class != inFeature.Class) { AAState.WriteLine(" Different FCs"); if (strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(sourceFeature.Fields.FindField(sourceLayer.DisplayField)).ToString(); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display; } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID; } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else { string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(" Setting Value: " + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(" Value Set"); found = true; } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { AAState.WriteLine(" Same FC"); if (strOpt == AAState.intersectOptions.PromptMulti) { //pFoundFeat.Add(sourceFeature.OID.ToString()); Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(sourceFeature.Fields.FindField(sourceLayer.DisplayField)).ToString(); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display; } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID; } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else { string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(" Setting Value: " + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(" Value Set"); found = true; } } if (found == true) break; } if (found == false && AAState._CheckEnvelope && pFoundFeat.Count == 0) { sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects; // sFilter.SpatialRelDescription = "T*T***T*T"; //if (boolLayerOrFC) //{ // fCursor = sourceLayer.Search(sFilter, true); //} //else //{ // fCursor = sourceLayer.FeatureClass.Search(sFilter, true); //} pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); while (sourceFeature != null) { if (strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(sourceFeature.Fields.FindField(sourceLayer.DisplayField)).ToString(); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display; } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID; } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); //pFoundFeat.Add(sourceFeature.OID.ToString()); } else { if (found) { break; } string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(" Setting Value: " + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(" Value Set"); found = true; } sourceFeature = fCursor.NextFeature(); } } if (found) { break; } } else { AAState.WriteLine(" ERROR: Source field not found: " + sourceFieldName); } } else { AAState.WriteLine(" ERROR/WARNING: Source Layer not found: " + sourceLayerName); } } } if (pFoundFeat.Count > 0 && strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent strRetVal = Globals.showOptionsForm(pFoundFeat, "Select A feature", "Select A feature", ComboBoxStyle.DropDownList); if (strRetVal != null) { sourceFeature = sourceLayer.FeatureClass.GetFeature(strRetVal.OID); string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(" Setting Value: " + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(" Value Set"); found = true; } } //if (!found) //{ // //IField field = inObject.Fields.get_Field(intFldIdxs[0]); // //object newval = field.DefaultValue; // //if (newval == null) // //{ // // if (field.IsNullable) // // { // // AAState.WriteLine(" Setting Value default null value"); // // inObject.set_Value(intFldIdxs[0], null); // // AAState.WriteLine(" Value Set"); // // } // //} // //else // //{ // // AAState.WriteLine(" Setting Value default value"); // // inObject.set_Value(intFldIdxs[0], newval); // // AAState.WriteLine(" Value Set"); // //} //} } else { AAState.WriteLine(" ERROR: INTERSECTING_FEATURE: source field name is null"); } } else { AAState.WriteLine(" ERROR: INTERSECTING_FEATURE: Value Info is not in the expected format"); } } else { AAState.WriteLine(" ERROR: INTERSECTING_FEATURE: Input Feature or Value Info is null"); } } catch (Exception ex) { AAState.WriteLine(" ERROR: INTERSECTING_FEATURE: " + ex.Message); } finally { AAState.WriteLine(" Finished: INTERSECTING_FEATURE"); } break; case "INTERSECTING_RASTER": try { AAState.WriteLine(" Trying: INTERSECTING_RASTER"); if (inFeature != null & valData != null) { sourceLayerName = ""; formatString = ""; found = false; // Parse arguments args = valData.Split('|'); if (args.Length < 1) break; switch (args.Length) { case 1: sourceLayerNames = args[0].ToString().Split(','); break; case 2: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); break; default: break; } // Get layer for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); IPoint pLoc = Globals.GetGeomCenter(inFeature)[0]; if (pLoc != null) { string cellVal = GetCellValue(sourceLayerName, pLoc, AAState._editor.Map);// Globals.GetCellValue(sourceLayerName, pLoc, _editor.Map); AAState.WriteLine(" ERROR/WARING: No cell value or raster was found: " + sourceLayerName); if (cellVal != null && cellVal != "" && cellVal != "No Raster") { if (formatString == null || formatString == "" || (inObject.Fields.get_Field(intFldIdxs[0]).Type != esriFieldType.esriFieldTypeString)) { inObject.set_Value(intFldIdxs[0], cellVal); found = true; break; } else { // formatString = formatString.Replace("[value]",cellVal); formatString = formatString + cellVal; inObject.set_Value(intFldIdxs[0], formatString); found = true; break; } } } } if (!(found) && inObject.Fields.get_Field(intFldIdxs[0]).IsNullable) inObject.set_Value(intFldIdxs[0], null); } } catch (Exception ex) { AAState.WriteLine(" ERROR: INTERSECTING_RASTER: " + ex.Message); } finally { AAState.WriteLine(" Finished: INTERSECTING_RASTER"); } break; case "INTERSECTING_LAYER_DETAILS": try { AAState.WriteLine(" Trying: INTERSECTING_LAYER_DETAILS"); if (inFeature != null & valData != null) { sourceLayerName = ""; formatString = ""; found = false; List<string> matchPattern = null; // Parse arguments args = valData.Split('|'); if (args.Length >= 1) { AAState.intersectOptions strOpt = AAState.intersectOptions.First; switch (args.Length) { case 1: sourceLayerNames = args[0].ToString().Split(','); formatString = "P"; break; case 2: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); break; case 3: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); switch (args[2].ToString().ToUpper()) { case "PROMPT": strOpt = AAState.intersectOptions.PromptMulti; break; case "P": strOpt = AAState.intersectOptions.PromptMulti; break; case "CENTROID": strOpt = AAState.intersectOptions.Centroid; break; case "C": strOpt = AAState.intersectOptions.Centroid; break; case "F": strOpt = AAState.intersectOptions.First; break; case "FIRST": strOpt = AAState.intersectOptions.First; break; } break; case 4: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); switch (args[2].ToString().ToUpper()) { case "PROMPT": strOpt = AAState.intersectOptions.PromptMulti; break; case "P": strOpt = AAState.intersectOptions.PromptMulti; break; case "CENTROID": strOpt = AAState.intersectOptions.Centroid; break; case "C": strOpt = AAState.intersectOptions.Centroid; break; case "F": strOpt = AAState.intersectOptions.First; break; case "FIRST": strOpt = AAState.intersectOptions.First; break; } matchPattern = new List<string>(args[3].ToString().Split(',')); //matchPattern = .ToList<string>(); break; default: break; } List<Globals.OptionsToPresent> strFiles = new List<Globals.OptionsToPresent>(); // Get layer for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); //AAState.WriteLine(" Getting Features Centeroid"); //IPoint pLoc = Globals.GetGeomCenter(inFeature); IGeometry pGeo = inFeature.ShapeCopy; List<IGeometry> pGeos = new List<IGeometry>(); if (pGeo != null) { if (strOpt == AAState.intersectOptions.Centroid) { List<IPoint> pGeoPnts = Globals.GetGeomCenter(pGeo); pGeos = pGeoPnts.ConvertAll(new Converter<IPoint, IGeometry>(Globals.PointToGeometry)); } else { pGeos.Add(pGeo); } // AAState.WriteLine(" Centroid Found"); AAState.WriteLine(" Getting list of " + sourceLayerName + " Layers"); IEnumLayer pEnum = Globals.GetLayers(AAState._editor.Map, sourceLayerName); if (pEnum != null) { AAState.WriteLine(" List retrieved of " + sourceLayerName + " Layers"); AAState.WriteLine(" Starting Loop"); ILayer pLay = pEnum.Next(); //ISpatialFilter pSpatFilt; while (pLay != null) { intersectLayerDetailsFunctions(pLay, pGeos, strOpt, ref found, ref strFiles, ref inObject, intFldIdxs[0], matchPattern); if (found) { AAState.WriteLine(" Exiting Layer Loop"); break; } pLay = pEnum.Next(); } pLay = null; pEnum = null; } else { bool FCorLayerTemp = true; ILayer pLay = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref FCorLayerTemp); if (pLay != null) { intersectLayerDetailsFunctions(pLay, pGeos, strOpt, ref found, ref strFiles, ref inObject, intFldIdxs[0], matchPattern); } pLay = null; } if (pEnum != null) Marshal.ReleaseComObject(pEnum); pEnum = null; } else { AAState.WriteLine(" ERROR: Geo not Found"); } if (found) { AAState.WriteLine(" Exiting Layer Loop"); break; } pGeo = null; pGeos = null; } if (strOpt == AAState.intersectOptions.PromptMulti && strFiles.Count > 0) { Globals.OptionsToPresent strRetVal = Globals.showOptionsForm(strFiles, "Select a intersect layer", "Select a intersect layer", ComboBoxStyle.DropDownList); if (strRetVal != null) { try { inObject.set_Value(intFldIdxs[0], strRetVal.Display); } catch { MessageBox.Show("Error Setting the value in the Intersecting_Layer_Details"); } found = true; } } } else { AAState.WriteLine(" ERROR: Value info is not correct"); } //if (!(found) && inObject.Fields.get_Field(intFldIdxs[0]).IsNullable) // inObject.set_Value(intFldIdxs[0], null); } } catch (Exception ex) { AAState.WriteLine(" ERROR: INTERSECTING_LAYER_DETAILS: " + ex.Message); } finally { AAState.WriteLine(" Finished: INTERSECTING_LAYER_DETAILS"); } break; case "INTERSECTING_FEATURE_DISTANCE": try { AAState.WriteLine(" Trying: INTERSECTING_FEATURE_DISTANCE"); if (inFeature != null & valData != null) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; // Parse arguments args = valData.Split('|'); if (args.GetLength(0) >= 2) { // sourceLayerName = args[0].ToString(); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); } // Get layer if (sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") sourceLayerName = args[i].ToString(); if (i == 0) i++; boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer == null) { AAState.WriteLine(" ERROR/WARNING: " + sourceLayerName + " was not found"); continue; } IFeatureClass iFC = inFeature.Class as IFeatureClass; if (sourceLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { AAState.WriteLine(" ERROR: " + sourceLayer + " is a polygon layer"); break; } if (sourceLayer != null) { sourceField = sourceLayer.FeatureClass.FindField(sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } while ((sourceFeature = fCursor.NextFeature()) != null) { if (sourceFeature.Class != inFeature.Class) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; double dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; string strUnit = Globals.GetSpatRefUnitName(Globals.GetLayersCoordinateSystem(sourceLayer.FeatureClass), true); if (strUnit == "Foot" && dAlong != 1) { strUnit = "Feet"; } else if (strUnit == "Meter" && dAlong != 1) { strUnit = "Meters"; } string strDis = dAlong + " " + strUnit + " along " + sourceLayer.Name + " with " + sourceLayer.FeatureClass.Fields.get_Field(sourceField).AliasName + " of " + sourceFeature.get_Value(sourceField); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong + " " + strUnit + ": " + sourceFeature.get_Value(sourceField); AAState.WriteLine(" Text is to long, defaulting to length along: " + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } else { strDis = dAlong.ToString(); AAState.WriteLine(" Text is to long, defaulting to length along: " + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } } else { AAState.WriteLine(" Value set to: " + strDis); inObject.set_Value(intFldIdxs[0], strDis); break; } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; double dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; string strUnit = Globals.GetSpatRefUnitName(Globals.GetLayersCoordinateSystem(sourceLayer.FeatureClass), true); if (strUnit == "Foot" && dAlong != 1) { strUnit = "Feet"; } else if (strUnit == "Meter" && dAlong != 1) { strUnit = "Meters"; } string strDis = dAlong + " " + strUnit + " along " + sourceLayer.Name + " with " + sourceLayer.FeatureClass.Fields.get_Field(sourceField).AliasName + " of " + sourceFeature.get_Value(sourceField); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong + " " + strUnit + ": " + sourceFeature.get_Value(sourceField); AAState.WriteLine(" Text is to long, defaulting to length along: " + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } else { strDis = dAlong.ToString(); AAState.WriteLine(" Text is to long, defaulting to length along: " + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } } else { AAState.WriteLine(" Value set to: " + strDis); inObject.set_Value(intFldIdxs[0], strDis); break; } } } //else if (inObject.Fields.get_Field(intFldIdxs[0]).IsNullable) // inObject.set_Value(intFldIdxs[0], null); } else { AAState.WriteLine(" ERROR: " + sourceLayer + ": field: " + sourceFieldName + " was not found"); } } else { } } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: INTERSECTING_FEATURE_DISTANCE: " + ex.Message); } finally { AAState.WriteLine(" Finished: INTERSECTING_FEATURE_DISTANCE"); } break; //Release: 1.2 //New Dynamic Value Method: NEARSET_FEATURE - similiar to INTERSECTING_FEATURE but requires a search distance. case "NEAREST_FEATURE": try { AAState.WriteLine(" Trying: NEAREST_FEATURE"); if (inFeature != null & valData != null) { string sourceMatField = ""; string targetMatField = ""; sourceLayerName = ""; sourceFieldName = ""; searchDistance = 0; found = false; // Parse arguments args = valData.Split('|'); switch (args.Length) { case 2: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); break; case 3: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); Double.TryParse(args[2], out searchDistance); break; case 4: AAState.WriteLine(" ERROR: Incorrect value method"); break; case 5: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); Double.TryParse(args[2], out searchDistance); sourceMatField = args[3].ToString(); targetMatField = args[4].ToString(); break; default: AAState.WriteLine(" ERROR: Incorrect value method"); break; } if (sourceLayerNames.Length > 0 & sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { bool FCorLayerSource = true; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref FCorLayerSource) as IFeatureLayer; if (sourceLayer != null) { sourceField = sourceLayer.FeatureClass.FindField(sourceFieldName); if (sourceField > -1) { //sFilter = new SpatialFilterClass(); //if (searchDistance > 0) //{ // searchEnvelope = inFeature.ShapeCopy.Envelope; // searchEnvelope.Expand(searchDistance, searchDistance, false); // sFilter.Geometry = searchEnvelope; //} //else // sFilter.Geometry = inFeature.ShapeCopy; //sFilter.GeometryField = sourceLayer.FeatureClass.ShapeFieldName; //sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { AAState.WriteLine(" Searching the layer"); if (pFS.SelectionSet.Count > 0) { AAState.WriteLine(" There is a seleciton set, only checking selected features"); pFS.SelectionSet.Search(sFilter, false, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, false); } } else { AAState.WriteLine(" Searching the feature class"); fCursor = sourceLayer.FeatureClass.Search(sFilter, false); } nearestFeature = null; proxOp = (IProximityOperator)inFeature.ShapeCopy; lastDistance = searchDistance; while ((sourceFeature = fCursor.NextFeature()) != null) { if (sourceFeature.Class != inFeature.Class) { AAState.WriteLine(" Feature Classes are different"); if (targetMatField == "" && sourceMatField == "") { AAState.WriteLine(" No matching fields specified"); try { IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } catch { MessageBox.Show("Error in the Nearest Feature - Proximity Operator. This may be caused by corrupt data in the layer, Please run Check/Repair Geometry GP tool on your layer"); return false; } } else { AAState.WriteLine(" matching fields specified"); int idxTargetFld = Globals.GetFieldIndex(sourceLayer, targetMatField); int idxSourceFld = Globals.GetFieldIndex(inObject.Fields, sourceMatField); if (idxSourceFld >= 0 && idxTargetFld >= 0) { AAState.WriteLine(" Fields Found"); if (inObject.get_Value(idxSourceFld).ToString() == sourceFeature.get_Value(idxTargetFld).ToString()) { AAState.WriteLine(" Values Match"); //distance = proxOp.ReturnDistance(sourceFeature.Shape); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } else { AAState.WriteLine(" Values does not Match: " + inObject.get_Value(idxSourceFld).ToString() + " - " + sourceFeature.get_Value(idxTargetFld).ToString()); } } else { AAState.WriteLine(" Fields Not Found"); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; //distance = proxOp.ReturnDistance(sourceFeature.Shape); if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { AAState.WriteLine(" matching fields specified"); int idxTargetFld = Globals.GetFieldIndex(sourceLayer, targetMatField); int idxSourceFld = Globals.GetFieldIndex(inObject.Fields, sourceMatField); if (idxSourceFld >= 0 && idxTargetFld >= 0) { AAState.WriteLine(" Fields Found"); if (inObject.get_Value(idxSourceFld).ToString() == sourceFeature.get_Value(idxTargetFld).ToString()) { AAState.WriteLine(" Values Match"); // distance = proxOp.ReturnDistance(sourceFeature.Shape); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } } else { AAState.WriteLine(" Fields Not Found"); //distance = proxOp.ReturnDistance(sourceFeature.Shape); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } } // sourceFeature = fCursor.NextFeature(); } if (nearestFeature != null) { AAState.WriteLine(" Feature found: " + nearestFeature.Class.AliasName + ":" + nearestFeature.OID); inObject.set_Value(intFldIdxs[0], nearestFeature.get_Value(sourceField)); found = true; break; } } else { AAState.WriteLine(" ERROR: " + sourceLayer + ": field: " + sourceFieldName + " was not found"); } } else { AAState.WriteLine(" ERROR: " + sourceLayer + " was not found"); } } else { AAState.WriteLine(" ERROR: Empty source layer name"); } } if (!found) { //IField field = inObject.Fields.get_Field(intFldIdxs[0]); //object newval = field.DefaultValue; //if (newval == null) //{ // if (field.IsNullable) // { // inObject.set_Value(intFldIdxs[0], null); // } //} //else //{ // inObject.set_Value(intFldIdxs[0], newval); //} } } } } catch (Exception ex) { AAState.WriteLine(" ERROR: NEAREST_FEATURE: " + ex.Message); } finally { AAState.WriteLine(" Finished: NEAREST_FEATURE"); } break; default: // MessageBox.Show(valMethod + " for layer " + tableName + " is not a valid method, check the dynamic value table", "Attribute Assistant"); AAState.WriteLine("ERROR: " + valMethod + " for layer " + tableName + " is not a valid method, check the dynamic value table"); break; } } catch (Exception ex) { MessageBox.Show("TableName:" + tableName + " FieldName:" + strFldNames[0] + System.Environment.NewLine + "ValueMethod:" + valMethod + " ValueData:" + valData + System.Environment.NewLine + "Message: " + ex.Message, "Attribute Assistant Message"); AAState.WriteLine("ERROR: TableName:" + tableName + " FieldName:" + strFldNames[0] + System.Environment.NewLine + "ValueMethod:" + valMethod + " ValueData:" + valData + System.Environment.NewLine + "Message: " + ex.Message); } } else { AAState.WriteLine(" Rule not processed"); } try { if (intFldIdxs.Count > 0 && strFldNames.Count > 0) { for (int p = 0; p < strFldNames.Count; p++) { // string fldname = strFldNames[p]; IRowChanges inChanges = inObject as IRowChanges; bool changed = inChanges.get_ValueChanged(intFldIdxs[p]); if (changed) // if (fieldName.ToUpper() != "SHAPE") try { // if (AAState.lastValueProperties. // AAState.WriteLine(" Setting Last Value"); if (AAState.lastValueProperties.GetProperty(strFldNames[p]) != null) { AAState.WriteLine(" Setting Last Value"); if (mode == "ON_CREATE" && (inObject.get_Value(intFldIdxs[p]) == null || inObject.get_Value(intFldIdxs[p]).ToString() == "")) { AAState.WriteLine(" Null Value in the create Method, not storing in last value array"); } else { AAState.WriteLine(" " + strFldNames[p] + ": " + inObject.get_Value(intFldIdxs[p]).ToString()); AAState.lastValueProperties.SetProperty(strFldNames[p], inObject.get_Value(intFldIdxs[p])); } } else { if (mode == "ON_CREATE" && (inObject.get_Value(intFldIdxs[p]) == null || inObject.get_Value(intFldIdxs[p]).ToString() == "")) { AAState.WriteLine(" Null Value in the create Method, not storing in last value array"); } else { AAState.WriteLine(" Setting Last Value"); AAState.WriteLine(" " + strFldNames[p] + ": " + inObject.get_Value(intFldIdxs[p]).ToString()); AAState.lastValueProperties.SetProperty(strFldNames[p], inObject.get_Value(intFldIdxs[p])); } } } catch { //AAState.WriteLine(" Error Setting Last Value " + inObject.Fields.get_Field(intFldIdxs[0]).Name); } } } } catch { AAState.WriteLine(" Error Setting Last Value"); } //if (inObject != null) //{ // inChanges = inObject as IRowChanges; // if (intFldIdxs.Count > 0) // { // if (intFldIdxs[0] > -1) // { // changed = inChanges.get_ValueChanged(intFldIdxs[0]); // if (changed) // // if (fieldName.ToUpper() != "SHAPE") // try // { // // if (AAState.lastValueProperties. // // AAState.WriteLine(" Setting Last Value"); // if (AAState.lastValueProperties.GetProperty(strFldNames[0]) != null) // { // AAState.WriteLine(" Setting Last Value"); // AAState.WriteLine(" " + strFldNames[0] + ": " + inObject.get_Value(intFldIdxs[0]).ToString()); // AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); // } // else // { // AAState.WriteLine(" Setting Last Value"); // AAState.WriteLine(" " + strFldNames[0] + ": " + inObject.get_Value(intFldIdxs[0]).ToString()); // AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); // } // } // catch // { // //AAState.WriteLine(" Error Setting Last Value " + inObject.Fields.get_Field(intFldIdxs[0]).Name); // } // } // } //} AAState.WriteLine(" ------------------------------------------------"); } } //for (int intFldIdxs[0] = 0; intFldIdxs[0] <= inObject.Fields.FieldCount; intFldIdxs[0]++) //{ // stepProgressor.Step(); // bool editable = true; // if (intFldIdxs[0] == inObject.Fields.FieldCount) // { // fieldObj = null; // fieldName = ""; // stepProgressor.Message = "Checking rules for field null fields in" + inObject.Class.AliasName; // progressDialog.Description = "Checking rules for field null fields in" + inObject.Class.AliasName; // AAState.WriteLine("***********************************************************"); // AAState.WriteLine(""); // AAState.WriteLine("############ " + DateTime.Now + " ################"); // editable = true; // // intFldIdxs[0]++; // } // else // { // fieldObj = inObject.Fields.get_Field(intFldIdxs[0]); // fieldName = fieldObj.Name; // stepProgressor.Message = "Checking rules for field " + fieldName + " in " + inObject.Class.AliasName; // progressDialog.Description = "Checking rules for field " + fieldName + " in " + inObject.Class.AliasName; // AAState.WriteLine("***********************************************************"); // AAState.WriteLine(""); // AAState.WriteLine("############ " + fieldName + " ################"); // AAState.WriteLine("############ " + DateTime.Now + " ################"); // AAState.WriteLine("Is field - " + fieldName + " Editable = " + fieldObj.Editable); // editable = fieldObj.Editable; // } // bool proc = false; // if (editable == true && fieldObj != null) // { // AAState.WriteLine("Checking rules for field " + fieldName + " in " + inObject.Class.AliasName); // AAState._dv.RowFilter = "(TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') And FIELDNAME = '" + fieldName + "' and " + modeVal; // //AAState._dv.rw // AAState.WriteLine(" Row Query: " + "TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') And FIELDNAME = '" + fieldName + "' and " + modeVal); // if (AAState._dv.Count == 0) // { // AAState._dv.RowFilter = "TABLENAME = '*' And FIELDNAME = '" + fieldName + "' and " + modeVal; // AAState.WriteLine(" Query using " + fieldName + " did not produce any results, trying all fields"); // AAState.WriteLine(" Row Query: " + "TABLENAME = '*' And FIELDNAME = '" + fieldName + "' and " + modeVal); // } // if (AAState._dv.Count == 0) // { // AAState.WriteLine(" No entries found"); // proc = false; // } // else // { // proc = true; // } // } // else if (editable && fieldObj == null) // { // fieldName = ""; // AAState._dv.RowFilter = "(TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') And (FIELDNAME = '" + fieldName + "' or FIELDNAME IS NULL) and " + modeVal; // //AAState._dv.rw // AAState.WriteLine(" Row Query: " + "TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') And (FIELDNAME = '" + fieldName + "' or FIELDNAME IS NULL) and " + modeVal); // if (AAState._dv.Count == 0) // { // AAState._dv.RowFilter = "TABLENAME = '*' And (FIELDNAME = '" + fieldName + "' or FIELDNAME IS NULL) and " + modeVal; // AAState.WriteLine(" Query using " + fieldName + " did not produce any results, trying all fields"); // AAState.WriteLine(" Row Query: " + "TABLENAME = '*' And And (FIELDNAME = '" + fieldName + "' or FIELDNAME IS NULL) and " + modeVal); // } // if (AAState._dv.Count == 0) // { // AAState.WriteLine(" No entries found"); // proc = false; // } // else // { // proc = true; // } // } //} } return false; } catch (Exception ex) { MessageBox.Show("Problem in setup." + System.Environment.NewLine + "Message:" + ex.Message, "Attribute Assistant Message"); AAState.WriteLine("Error in setup"); return false; } finally { if (AAState._tab == inObject.Class || AAState._gentab == inObject.Class) { AAState.reInitExt(); } if (progressDialog != null) { progressDialog.HideDialog(); } AAState.WriteLine("DONE"); AAState.WriteLine("---------------------------------------"); if (fCursor != null) { Marshal.ReleaseComObject(fCursor); GC.Collect(300); GC.WaitForFullGCComplete(); } inFeature = null; mseg = null; netFeat = null; iEdgeFeat = null; iJuncFeat = null; progressDialogFactory = null; stepProgressor = null; progressDialog = null; trackCancel = null; } }
/// <summary> /// 绘制曲线部分 /// </summary> /// <params name="lyr">推断断层</params> /// <params name="newplines">延长点构造的线</params> /// <params name="originlines">原始点构造的线</params> private void AddCurveToMap(IFeatureLayer lyr, List<IPolyline> newplines, List<IPolyline> originlines) { IFeatureClass Featureclass = lyr.FeatureClass; IWorkspaceEdit workspace = (IWorkspaceEdit)(Featureclass as IDataset).Workspace; workspace.StartEditing(true); workspace.StartEditOperation(); object missing = Type.Missing; //揭露断层上的曲线对象 IGeometry geom = new PolylineClass(); geom.SpatialReference = Global.spatialref; IGeometryCollection outgeomcols = geom as IGeometryCollection; IFeature fea = Featureclass.CreateFeature(); ISegmentCollection newpath = new PathClass(); int kindpos = Featureclass.Fields.FindField(GIS.GIS_Const.FIELD_TYPE); int bidpos = Featureclass.Fields.FindField(GIS.GIS_Const.FIELD_BID); for (int i = 0; i < newplines.Count; i++) { ILine lin = new LineClass(); lin.SpatialReference = Global.spatialref; //直线段 IPath path = new PathClass(); if (i == 0) { lin.FromPoint = newplines[i].FromPoint; lin.ToPoint = originlines[i].ToPoint; } else if (i == originlines.Count - 1) { lin.FromPoint = originlines[i].FromPoint; lin.ToPoint = newplines[i].ToPoint; } else { lin.FromPoint = originlines[i].FromPoint; lin.ToPoint = originlines[i].ToPoint; } newpath.AddSegment(lin as ISegment, ref missing, ref missing); //曲线段 if (i < newplines.Count - 1) { IBezierCurveGEN bezier = new BezierCurveClass(); IPoint[] pntcontrols = new IPoint[4]; pntcontrols[0] = originlines[i].ToPoint; pntcontrols[1] = newplines[i].ToPoint; pntcontrols[2] = newplines[i + 1].FromPoint; pntcontrols[3] = originlines[i + 1].FromPoint; bezier.PutCoords(ref pntcontrols); newpath.AddSegment(bezier as ISegment, ref missing, ref missing); } } outgeomcols.AddGeometry(newpath as IGeometry, ref missing, ref missing); int index = fea.Fields.FindField(GIS_Const.FIELD_SHAPE); IGeometryDef geometryDef = fea.Fields.get_Field(index).GeometryDef as IGeometryDef; if (geometryDef.HasZ) { IZAware pZAware = (IZAware)outgeomcols; pZAware.ZAware = true; } fea.Shape = outgeomcols as IPolyline; fea.set_Value(kindpos, 1); fea.set_Value(bidpos, BID); fea.Store(); //外围曲线绘制 ITopologicalOperator2 top = outgeomcols as ITopologicalOperator2; if (!top.IsSimple) top.Simplify(); IConstructCurve curve = new PolylineClass(); curve.ConstructOffset(outgeomcols as IPolyline, -3, ref missing, ref missing); IPolyline plinnew = curve as IPolyline; plinnew.SpatialReference = Global.spatialref; plinnew.FromPoint = newplines[0].FromPoint; plinnew.ToPoint = newplines[newplines.Count - 1].ToPoint; IFeature outcurve = Featureclass.CreateFeature(); outcurve.set_Value(kindpos, 2); outcurve.set_Value(bidpos, BID); outcurve.Shape = plinnew; outcurve.Store(); //结束编辑 workspace.StopEditOperation(); workspace.StopEditing(true); //定位跳转 Global.commonclss.JumpToGeometry(plinnew); }
private void createpolyline(IPointCollection ippoints) { ISegmentCollection ppath = new PathClass(); IGeometryCollection ppolyline = new PolylineClass(); if (ippoints.PointCount >= 2) { int i; for (i = 0; i < ippoints.PointCount - 1; i++) { ILine pline = new LineClass(); pline.PutCoords(ippoints.get_Point(i), ippoints.get_Point(i + 1)); ISegment psegment = pline as ISegment; object o = Type.Missing; ppath.AddSegment(psegment, ref o, ref o); ppolyline.AddGeometry(ppath as IGeometry, ref o, ref o); } ipPolyResult = ppolyline as IPolyline; } }
/// <summary> /// 绘制揭露断层图元 /// </summary> /// <params name="faultage"></params> private void DrawJldc(Faultage faultage) { ////1.获得当前编辑图层 //DrawSpecialCommon drawspecial = new DrawSpecialCommon(); //string sLayerAliasName = LibCommon.LibLayerNames.DEFALUT_EXPOSE_FAULTAGE;//“揭露断层”图层 //IFeatureLayer featureLayer = drawspecial.GetFeatureLayerByName(sLayerAliasName); //if (featureLayer == null) //{ // MessageBox.Show("未找到" + sLayerAliasName + "图层,无法绘制揭露断层图元。"); // return; //} ////2.生成要素(要根据中心点获取起止点) ////中心点 //double centrePtX = Convert.ToDouble(this.txtCoordinateX.Text.ToString()); //double centrePtY = Convert.ToDouble(this.txtCoordinateY.Text.ToString()); //IPoint centrePt = new PointClass(); //centrePt.X = centrePtX; //centrePt.Y = centrePtY; //// 图形坐标Z //zwy 20140526 add //double dCoordinateZ = 0; //if (!double.TryParse(this.txtCoordinateZ.Text.Trim(), out dCoordinateZ)) //{ // MessageBox.Show("输入的Z坐标不是有效数值,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; //} //centrePt.Z = dCoordinateZ; //double angle = Convert.ToDouble(this.txtAngle.Text.ToString());//倾角 //double length = 10;//默认长度为20,左右各10 ////计算起止点 //IPoint fromPt = new PointClass(); //IPoint toPt = new PointClass(); //CalculateEndpoints(centrePt, angle, length, ref fromPt, ref toPt); //DataEditCommon.g_CurWorkspaceEdit.StartEditing(false); //DataEditCommon.g_CurWorkspaceEdit.StartEditOperation(); //IFeature pFeature = featureLayer.FeatureClass.CreateFeature(); //ILine line = new LineClass(); //line.PutCoords(fromPt, toPt); //object Missing = Type.Missing; //ISegment segment = line as ISegment; //ISegmentCollection newLine = new PolylineClass(); //newLine.AddSegment(segment, ref Missing, ref Missing); //IPolyline polyline = newLine as IPolyline; //DataEditCommon.ZMValue(pFeature, polyline); //zwy 20140526 add //pFeature.Shape = polyline; ////2.1断层标注(DCBZ) //string strMC = this.txtFaultageName.Text;//断层名称 //string strLC = this.txtGap.Text;//落差 //string strQJ = this.txtAngle.Text;//倾角 //string strDCBZ = strMC + " " + "H=" + strLC + "m" + " " + "<" + strQJ + "°"; ////断层标注字段赋值(该字段值保持在图层属性中) //int index = featureLayer.FeatureClass.Fields.FindField("FAULTAGE_NAME"); //pFeature.set_Value(index, strDCBZ); ////要素ID字段赋值(对应属性表中BindingID) //int iFieldID = pFeature.Fields.FindField(GIS_Const.FIELD_BID); //pFeature.Value[iFieldID] = faultage.bid.ToString(); //pFeature.Store(); //DataEditCommon.g_CurWorkspaceEdit.StopEditOperation(); //DataEditCommon.g_CurWorkspaceEdit.StopEditing(true); ////2.2给生成的断层赋符号 //int ID = pFeature.OID; //string path = Application.StartupPath + @"\symbol.ServerStyle";//【这里用到了自己定义的符号库】 ////默认为正断层(符号) //string sGalleryClassName = "123"; //string symbolName = "123"; ; //if (this.rbtnFrontFaultage.Checked)//正断层 //{ // sGalleryClassName = "123"; // symbolName = "123"; //} //else if (this.rbtnOppositeFaultage.Checked)//逆断层 //{ // sGalleryClassName = "1234"; // symbolName = "1234"; //} //ILineSymbol lineSymbol = GetSymbol(path, sGalleryClassName, symbolName); //ILayer layer = featureLayer as ILayer; //SpecialLineRenderer(layer, ID, lineSymbol); //AddAnnotate(layer, GIS_Const.FILE_DCBZ); ////缩放到新增的线要素,并高亮该要素 //GIS.Common.DataEditCommon.g_pMyMapCtrl.ActiveView.Extent = pFeature.Shape.Envelope; //GIS.Common.DataEditCommon.g_pMyMapCtrl.ActiveView.Extent.Expand(1.5, 1.5, true); //GIS.Common.DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(featureLayer, pFeature); //GIS.Common.DataEditCommon.g_pMyMapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null); var pLayer = DataEditCommon.GetLayerByName(DataEditCommon.g_pMap, LayerNames.DEFALUT_EXPOSE_FAULTAGE); var featureLayer = (IFeatureLayer)pLayer; if (pLayer == null) { MessageBox.Show(@"未找到揭露断层图层,无法绘制揭露断层图元。"); return; } //2.生成要素(要根据中心点获取起止点) //中心点 IPoint centrePt = new PointClass(); centrePt.X = faultage.coordinate_x; centrePt.Y = faultage.coordinate_y; centrePt.Z = faultage.coordinate_z; var trend = faultage.trend; //走向 var length = faultage.length / 2; //默认长度为20,左右各10 //计算起止点 IPoint fromPt = new PointClass(); IPoint toPt = new PointClass(); CalculateEndpoints(centrePt, trend, length, ref fromPt, ref toPt); ILine line = new LineClass(); line.PutCoords(fromPt, toPt); var missing = Type.Missing; var segment = (ISegment)line; ISegmentCollection newLine = new PolylineClass(); newLine.AddSegment(segment, ref missing, ref missing); var polyline = (IPolyline)newLine; var list = new List<ziduan> { new ziduan("bid", faultage.bid), new ziduan("FAULTAGE_NAME", faultage.name), new ziduan("addtime", DateTime.Now.ToString(CultureInfo.InvariantCulture)), new ziduan("GAP", faultage.gap), new ziduan("ANGLE", faultage.angle.ToString(CultureInfo.InvariantCulture)), new ziduan("TREND", faultage.trend.ToString(CultureInfo.InvariantCulture)), new ziduan("SEPARATION", faultage.separation), new ziduan("type", faultage.type) }; var pfeature = DataEditCommon.CreateNewFeature(featureLayer, polyline, list); if (pfeature == null) return; MyMapHelp.Jump(polyline); DataEditCommon.g_pMyMapCtrl.ActiveView.PartialRefresh( (esriViewDrawPhase)34, null, null); }
public override void OnMouseDown(int Button, int Shift, int X, int Y) { if (Button == 2) return; IPoint pt = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); pt = GIS.GraphicEdit.SnapSetting.getSnapPoint(pt); IGraphicsContainer graphicContainer = m_hookHelper.ActiveView.GraphicsContainer; IEnvelope pEnvBounds = null; //��ȡ��һ�ι켣�ߵķ�Χ,�Ա�ȷ��ˢ�·�Χ try { if (m_TracePolygon != null) { m_TracePolygon.QueryEnvelope(pEnvBounds); pEnvBounds.Expand(4, 4, true); //���ο�����������4��(����2������),Ŀ����Ϊ�˱�֤�г����ˢ������ } else pEnvBounds = m_hookHelper.ActiveView.Extent; } catch { pEnvBounds = m_hookHelper.ActiveView.Extent; } #region ������� if (m_NewPolygonFeedback == null) { //�Ƴ�element RemoveElements(); //ˢ�� m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); Application.DoEvents(); m_NewPolygonFeedback = new NewPolygonFeedbackClass(); //�����ȵõ�symbol,������symbol ISimpleLineSymbol simpleLineSymbol = m_NewPolygonFeedback.Symbol as ISimpleLineSymbol; simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid; simpleLineSymbol.Width = 2; simpleLineSymbol.Color = TransColorToAEColor(Color.Blue); m_simpleFillSymbol.Outline = simpleLineSymbol; m_NewPolygonFeedback.Display = m_hookHelper.ActiveView.ScreenDisplay; m_NewPolygonFeedback.Start(pt); } else { m_NewPolygonFeedback.AddPoint(pt); } if (m_ptCollection == null) { m_ptCollection = new PolylineClass(); } //��¼�ڵ� object obj = Type.Missing; m_ptCollection.AddPoint(pt, ref obj, ref obj); #endregion #region ���ƽ�� try { IElement vertexElement = createElement_x(pt); // graphicContainer = m_hookHelper.ActiveView as IGraphicsContainer; //g.AddElement(vertexElement, 0); //g.MoveElementToGroup(vertexElement, m_VertexElement); m_VertexElement.AddElement(vertexElement); //ˢ�� m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, vertexElement, pEnvBounds); } catch { } #endregion try { if (m_ptCollection.PointCount >= 2) { IPoint fromPt = m_ptCollection.get_Point(m_ptCollection.PointCount - 2); //�����ڶ����� IPoint toPt = m_ptCollection.get_Point(m_ptCollection.PointCount - 1); //����һ���� ILine line = new LineClass(); line.PutCoords(fromPt, toPt); #region ���ƹ켣�� try { object missing = Type.Missing; ISegmentCollection segColl = new PolylineClass(); segColl.AddSegment(line as ISegment, ref missing, ref missing); IPolyline polyline = new PolylineClass(); polyline = segColl as IPolyline; IElement traceElement = createElement_x(polyline); //graphicContainer = m_hookHelper.ActiveView as IGraphicsContainer; m_TraceElement.AddElement(traceElement); m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, traceElement, pEnvBounds); } catch { } #endregion #region ���㵥�ߵij���,���������ʾ�ڵ����е�ƫ������ //try //{ // double angle = line.Angle; // if ((angle > (Math.PI / 2) && angle < (Math.PI)) || (angle > -Math.PI && angle < -(Math.PI / 2))) // ����90��С�ڵ���180 // angle += Math.PI; // //��ע��Yֵƫ���� // double d_OffsetY = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.FromPoints(9); // //��ע�� // double d_CenterX = (fromPt.X + toPt.X) / 2; // double d_CenterY = (fromPt.Y + toPt.Y) / 2 + d_OffsetY; //����ƫ�� // IPoint labelPt = new PointClass(); // labelPt.PutCoords(d_CenterX, d_CenterY); // ITextElement txtElement = CreateTextElement(line.Length.ToString("0.00")); // IElement labelelement = txtElement as IElement; // labelelement.Geometry = labelPt; // object oElement = (object)labelelement; // //���ݽǶ���ת // TransformByRotate(ref oElement, labelPt, angle); // ////��ӵ�GraphicsContainer // //g.AddElement(labelelement, 0); // ////�Ƶ�m_LabelElement���� // //g.MoveElementToGroup(labelelement, m_LabelElement); // //��ӵ��� // m_LabelElement.AddElement(labelelement); // //ˢ�� // m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, labelelement, pEnvBounds); //} //catch //{ } #endregion } } catch { } m_frmMeasureResult.PolygonResultChange(); }
private static void ProfileCreateGraph(IApplication app, List<ProfileGraphDetails> ProfileGraph, IPolyline pPolyline, List<mainDetails> SewerColMains, List<manholeDetails> SewerColManholes, List<tapDetails> SewerColTap, int CurrentDetail) { // profile the sewer line and the surface elevation data // pPolyLine is a line composed from the edge results of the network trace IWorkspace pWS = null; ICursor pCursor = null; IMxDocument pMxDoc = null; IMap pMap = null; IZ pPolyLineZ = null; IZAware pZAwareLineZ = null; ISurface pSurface = null; IRasterLayer pRasterLayer = null; //get the elevation layer ILayer pRasLay = null; IPoint pPtOrigFrom = null; IPoint pPtOrigTo = null; IStandaloneTableCollection pStandAloneTabColl = null; IStandaloneTable pStandAloneTabMainLabel = null; ITable pTapTable = null; ITable pMainTable = null; ITable pManholeTable = null; ITable pSurfaceTable = null; ITable pMainLabelTable = null; ITableFields pTableFieldsMainLabel = null; IStandaloneTable pStandAloneTabMain = null; ITableFields pTableFieldsMain = null; IStandaloneTable pStandAloneTabManhole = null; ITableFields pTableFieldsManhole = null; IStandaloneTable pStandAloneTabSurface = null; ITableFields pTableFieldsSurface = null; IStandaloneTable pStandAloneTabTap = null; ITableFields pTableFieldsTap = null; IRowBuffer pRowBuff = null; ICursor pLabelCursor = null; ICursor pTapCursor = null; ISegment pSegment = null; ILine pLine = null; IPoint pFromPnt = null; IPoint pToPnt = null; IPoint pMidPnt = null; IDataGraphBase pDataGraphBase = null; IDataGraphT pDataGraphT = null; IPointCollection pPtCollection = null; IEnumVertex pEnumVertex = null; IPoint pPt = null; ISeriesProperties pAreaSeriesProps = null; IColor pColor = null; String strXDataFldName = null; String strYDataFldName = null; IDataSortSeriesProperties pSortFlds = null; IPointSeriesProperties pScatterSeriesProps2 = null; ISeriesProperties pScatterSeriesProps = null; IBarSeriesProperties pManHoleSeries = null; ILineSeriesProperties pLineSeriesProps2 = null; ISeriesProperties pLineSeriesProps = null; ITrackCancel pCancelTracker = null; IDataGraphWindow2 pDataGraphWin = null; IDataGraphCollection pDataGraphs = null; try { pMxDoc = (IMxDocument)app.Document; pMap = pMxDoc.FocusMap; // Open the Workspace pWS = Globals.CreateInMemoryWorkspace(); //get the elevation layer bool FCorLayerRas = true; pRasLay = Globals.FindLayer(pMap, ProfileGraph[CurrentDetail].Elevation_LayerName, ref FCorLayerRas); if (pRasLay != null) { pRasterLayer = pRasLay as IRasterLayer; // get the surface to interpolate from pSurface = Globals.GetSurface(pRasterLayer); // make the polyline z-aware pZAwareLineZ = (IZAware)pPolyline; pZAwareLineZ.ZAware = true; // work around for InterpolateFromSurface sometimes flipping polyline pPtOrigFrom = pPolyline.FromPoint; pPtOrigTo = pPolyline.ToPoint; pPolyline.Project((pRasterLayer as IGeoDataset).SpatialReference); // add z values to the polyline pPolyLineZ = (IZ)pPolyline; pPolyLineZ.InterpolateFromSurface(pSurface); pPolyline.ReverseOrientation(); } int i; pStandAloneTabColl = (IStandaloneTableCollection)pMap; for (i = pStandAloneTabColl.StandaloneTableCount - 1; i > 0; i--) { if (pStandAloneTabColl.StandaloneTable[i].Name == "Point Table") { pStandAloneTabColl.RemoveStandaloneTable(pStandAloneTabColl.StandaloneTable[i]); continue; } else if (pStandAloneTabColl.StandaloneTable[i].Name == "Surface Table") { pStandAloneTabColl.RemoveStandaloneTable(pStandAloneTabColl.StandaloneTable[i]); continue; } else if (pStandAloneTabColl.StandaloneTable[i].Name == "Line Table") { pStandAloneTabColl.RemoveStandaloneTable(pStandAloneTabColl.StandaloneTable[i]); continue; } else if (pStandAloneTabColl.StandaloneTable[i].Name == "Line Label Table") { pStandAloneTabColl.RemoveStandaloneTable(pStandAloneTabColl.StandaloneTable[i]); continue; } else if (pStandAloneTabColl.StandaloneTable[i].Name == "Points Along Table") { pStandAloneTabColl.RemoveStandaloneTable(pStandAloneTabColl.StandaloneTable[i]); continue; } } pMainTable = Globals.createTableInMemory("Line Table", createLineFields(), pWS); if (pMainTable == null) return; pManholeTable = Globals.createTableInMemory("Point Table", createPointFields(), pWS); if (pManholeTable == null) return; if (pRasterLayer != null) { pSurfaceTable = Globals.createTableInMemory("Surface Table", createSurfaceFields(), pWS); if (pSurfaceTable == null) return; } pMainLabelTable = Globals.createTableInMemory("Line Label Table", createLineLabelFields(), pWS); if (pMainLabelTable == null) return; pTapTable = Globals.createTableInMemory("Points Along Table", createLineLabelFields(), pWS); if (pTapTable == null) return; // add the table to the map so it can be edited // Create a new standalone table and add it to the collection of the focus map pStandAloneTabMainLabel = new StandaloneTableClass(); pStandAloneTabMainLabel.Table = pMainLabelTable; pStandAloneTabColl.AddStandaloneTable(pStandAloneTabMainLabel); pMainLabelTable = (ITable)pStandAloneTabMainLabel;// QI, used in data graph pTableFieldsMainLabel = (ITableFields)pStandAloneTabMainLabel; pStandAloneTabMain = new StandaloneTableClass(); pStandAloneTabMain.Table = pMainTable; pStandAloneTabColl.AddStandaloneTable(pStandAloneTabMain); pMainTable = (ITable)pStandAloneTabMain;// QI, used in data graph pTableFieldsMain = (ITableFields)pStandAloneTabMain; pStandAloneTabManhole = new StandaloneTableClass(); pStandAloneTabManhole.Table = pManholeTable; pStandAloneTabColl.AddStandaloneTable(pStandAloneTabManhole); pManholeTable = (ITable)pStandAloneTabManhole;// QI, used in data graph pTableFieldsManhole = (ITableFields)pStandAloneTabManhole; if (pSurfaceTable != null) { pStandAloneTabSurface = new StandaloneTableClass(); pStandAloneTabSurface.Table = pSurfaceTable; pStandAloneTabColl.AddStandaloneTable(pStandAloneTabSurface); pSurfaceTable = (ITable)pStandAloneTabSurface;// QI, used in data graph pTableFieldsSurface = (ITableFields)pStandAloneTabSurface; } if (pTapTable != null) { pStandAloneTabTap = new StandaloneTableClass(); pStandAloneTabTap.Table = pTapTable; pStandAloneTabColl.AddStandaloneTable(pStandAloneTabTap); pTapTable = (ITable)pStandAloneTabTap;// QI, used in data graph pTableFieldsTap = (ITableFields)pStandAloneTabTap; } // Refresh the TOC pMxDoc.UpdateContents(); // get an insert cursor for the table pCursor = pManholeTable.Insert(true); double minChartVal = 0.0; double maxChartVal = 0.0; int id = 0; foreach (manholeDetails manholeDetail in SewerColManholes) { //SewerElevCollManholesDetails.Add(new object[] { pPt.M, manRim, manInvElev, manInv, manID }); pRowBuff = pManholeTable.CreateRowBuffer(); pRowBuff.set_Value(pRowBuff.Fields.FindField("X"), manholeDetail.M);//0 pRowBuff.set_Value(pRowBuff.Fields.FindField("TOPELEV"), manholeDetail.Top);//1 pRowBuff.set_Value(pRowBuff.Fields.FindField("BOTELEV"), manholeDetail.Bottom);//2 //pRowBuff.set_Value(pRowBuff.Fields.FindField("INVERT"), manholeDetail.Invert);//3 pRowBuff.set_Value(pRowBuff.Fields.FindField("ID"), manholeDetail.ManholeID);//4 if (id == 0) { minChartVal = (double)manholeDetail.Bottom; maxChartVal = (double)manholeDetail.Top; id++; } else { if (minChartVal > (double)manholeDetail.Bottom) minChartVal = (double)manholeDetail.Bottom; if (maxChartVal < (double)manholeDetail.Top) maxChartVal = (double)manholeDetail.Top; } pCursor.InsertRow(pRowBuff); } // flush any writes pCursor.Flush(); Marshal.ReleaseComObject(pCursor); pCursor = pMainTable.Insert(true); pLabelCursor = pMainLabelTable.Insert(true); pTapCursor = pTapTable.Insert(true); foreach (mainDetails mainDetail in SewerColMains) { //SewerElevCollManholesDetails.Add(new object[] { pPt.M, manRim, manInvElev, manInv, manID }); //pRowBuff.set_Value(pRowBuff.Fields.FindField("FROMM"), mainDetail.UpM);//0 //pRowBuff.set_Value(pRowBuff.Fields.FindField("TOM"), mainDetail.DownM);//1 //pRowBuff.set_Value(pRowBuff.Fields.FindField("FROMELEV"), mainDetail.UpElev);//2 //pRowBuff.set_Value(pRowBuff.Fields.FindField("TOELEV"), mainDetail.DownElev);//3 pRowBuff = pMainTable.CreateRowBuffer(); pRowBuff.set_Value(pRowBuff.Fields.FindField("ELEVATION"), mainDetail.UpElev);//2 pRowBuff.set_Value(pRowBuff.Fields.FindField("MEASURE"), mainDetail.UpM);//3 pRowBuff.set_Value(pRowBuff.Fields.FindField("FACILITYID"), mainDetail.MainID);//4 pCursor.InsertRow(pRowBuff); pRowBuff = pMainTable.CreateRowBuffer(); pRowBuff.set_Value(pRowBuff.Fields.FindField("ELEVATION"), mainDetail.DownElev);//2 pRowBuff.set_Value(pRowBuff.Fields.FindField("MEASURE"), mainDetail.DownM);//3 pRowBuff.set_Value(pRowBuff.Fields.FindField("FACILITYID"), mainDetail.MainID);//4 pCursor.InsertRow(pRowBuff); pLine = new LineClass(); pFromPnt = new PointClass(); pToPnt = new PointClass(); pMidPnt = new PointClass(); pFromPnt.Y = mainDetail.UpElev; pFromPnt.X = mainDetail.UpM; pToPnt.Y = mainDetail.DownElev; pToPnt.X = mainDetail.DownM; pLine.PutCoords(pFromPnt, pToPnt); pSegment = pLine as ISegment; pSegment.QueryPoint(esriSegmentExtension.esriNoExtension, 0.5, true, pMidPnt); // pSegM = (ISegmentM)pSegment; // pSegM.SetMs( pRowBuff = pMainLabelTable.CreateRowBuffer(); pRowBuff.set_Value(pRowBuff.Fields.FindField("ELEVATION"), pMidPnt.Y);//2 pRowBuff.set_Value(pRowBuff.Fields.FindField("MEASURE"), pMidPnt.X);//3 pRowBuff.set_Value(pRowBuff.Fields.FindField("FACILITYID"), mainDetail.MainID);//4 pRowBuff.set_Value(pRowBuff.Fields.FindField("LABEL"), mainDetail.Label);//4 pLabelCursor.InsertRow(pRowBuff); double slope = (pToPnt.Y - pFromPnt.Y) / (pToPnt.X - pFromPnt.X); foreach (tapDetails tpDet in SewerColTap) { double distDown; if (tpDet.Added == true) continue; if (pFromPnt.X < pToPnt.X) { if (tpDet.M > pFromPnt.X && tpDet.M < pToPnt.X) { distDown = tpDet.M - pFromPnt.X; } else continue; } else { if (tpDet.M > pToPnt.X && tpDet.M < pFromPnt.X) { distDown = tpDet.M - pToPnt.X; } else continue; } { pSegment.QueryPoint(esriSegmentExtension.esriNoExtension, distDown, false, pMidPnt); //if (pMidPnt.X == tpDet.M) //{ pRowBuff = pTapTable.CreateRowBuffer(); pRowBuff.set_Value(pRowBuff.Fields.FindField("ELEVATION"), pMidPnt.Y);//2 pRowBuff.set_Value(pRowBuff.Fields.FindField("MEASURE"), tpDet.M);//3 pRowBuff.set_Value(pRowBuff.Fields.FindField("FACILITYID"), tpDet.tapID);//4 pRowBuff.set_Value(pRowBuff.Fields.FindField("LABEL"), tpDet.tapLabel);//4 //pRowBuff.set_Value(pRowBuff.Fields.FindField("LABEL"), mainDetail.Label);//4 pTapCursor.InsertRow(pRowBuff); tpDet.Added = true; //SewerColTap.Remove(tpDet); // } } } //if (minChartVal > (double)manholeDetail.InvertElev) // minChartVal = (double)manholeDetail.InvertElev; //if (maxChartVal < (double)manholeDetail.Rim) // maxChartVal = (double)manholeDetail.Rim; } // flush any writes pCursor.Flush(); Marshal.ReleaseComObject(pCursor); pLabelCursor.Flush(); Marshal.ReleaseComObject(pLabelCursor); pTapCursor.Flush(); Marshal.ReleaseComObject(pTapCursor); if (pSurfaceTable != null) { pPtCollection = (IPointCollection)pPolyLineZ; pEnumVertex = pPtCollection.EnumVertices; pEnumVertex.Reset(); int lPartIndex; int lVertexIndex; pEnumVertex.Next(out pPt, out lPartIndex, out lVertexIndex); pCursor = pSurfaceTable.Insert(true); while (pPt != null) { pRowBuff = pSurfaceTable.CreateRowBuffer(); pRowBuff.set_Value(pRowBuff.Fields.FindField("X"), pPt.M);//2 pRowBuff.set_Value(pRowBuff.Fields.FindField("Y"), pPt.Z);//3 pCursor.InsertRow(pRowBuff); pEnumVertex.Next(out pPt, out lPartIndex, out lVertexIndex); } } //============================================================================= // create the graph from the table // create graph pDataGraphBase = new DataGraphTClass(); pDataGraphT = (IDataGraphT)pDataGraphBase; // graph, axis and legend titles. Substitute them for different input layer pDataGraphT.GeneralProperties.Title = ProfileGraph[CurrentDetail].GraphTitle_Name; // "Sewer Main Profile"; pDataGraphT.LegendProperties.Title = ProfileGraph[CurrentDetail].Legend_Name; //"Profile Legend"; // IDataGraphTAxisProperties pHort = pDataGraphT.AxisProperties[0]; pDataGraphT.AxisProperties[0].Title = ProfileGraph[CurrentDetail].LeftAxis_Name; pDataGraphT.AxisProperties[0].AutomaticMaximum = true; pDataGraphT.AxisProperties[0].AutomaticMinimum = true; pDataGraphT.AxisProperties[0].Minimum = minChartVal - 5; pDataGraphT.AxisProperties[0].Maximum = maxChartVal + 5; pDataGraphT.AxisProperties[0].InitDefaults(); //pDataGraphT.AxisProperties[1].AutomaticMaximum = true; //pDataGraphT.AxisProperties[1].AutomaticMinimum = false; //pDataGraphT.AxisProperties[1].Minimum = minChartVal - 5; ////pDataGraphT.AxisProperties[1].Title = "Manholes"; //pDataGraphT.AxisProperties[1].Visible = true; pDataGraphT.AxisProperties[3].Visible = true; pDataGraphT.AxisProperties[3].Title = ProfileGraph[CurrentDetail].TopAxis_Name; pDataGraphT.AxisProperties[2].Title = ProfileGraph[CurrentDetail].BottomAxis_Name; // "Date"; pDataGraphT.AxisProperties[2].ValueFormat = "0"; pDataGraphT.AxisProperties[2].Minimum = 0; pDataGraphT.AxisProperties[2].AutomaticMinimum = false; pDataGraphT.AxisProperties[2].ValueFormat = "#,##0.###"; pDataGraphBase.Name = ProfileGraph[CurrentDetail].Graph_Name; ; // & strTableName layerName; //IDataGraphTGeneralProperties pGenProp = pDataGraphT.GeneralProperties; //pGenProp.Show3D = true; // put the legend below the graph //pDataGraphT.LegendProperties.Alignment = esriDataGraphTLegendBottom // use only for series-specific properties //IPointSeriesProperties pPtSeries; //IAreaSeriesProperties pAreaSeries; //ILineSeriesProperties pLineSeries; //------------------------------------------------------------------------------- // area series - ground elevation int idx = 0; if (pSurfaceTable != null) { // create the area graph for the ground elevation pAreaSeriesProps = pDataGraphT.AddSeries("area:vertical"); //("scatter_plot") '("line:vertical") pAreaSeriesProps.SourceData = pSurfaceTable;// pLayer pAreaSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; pColor = Globals.GetColor(137, 112, 68); pAreaSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB // get the fields to graph - ground elevation strXDataFldName = "X"; //pTable.Fields.Field(i).Name ' "Dist_to_Rds" strYDataFldName = "Y"; // pTable.Fields.Field(i).Name ' "Dist_to_Rds" // pSeriesProps.whereClause = whereClause pAreaSeriesProps.InLegend = true; //show legend ' false = don't show legend pAreaSeriesProps.Name = ProfileGraph[CurrentDetail].Elevation_LayerName;//A4LGSharedFunctions.Localizer.GetString("GeoNetToolsAlias_1"); //pSeriesProps.LabelField = "OBJECTID"; pAreaSeriesProps.ValueFormat = "0 "; pAreaSeriesProps.SetField(0, strXDataFldName); // timefldName pAreaSeriesProps.SetField(1, strYDataFldName); // sort on the X value pSortFlds = (IDataSortSeriesProperties)pAreaSeriesProps; pSortFlds.AddSortingField(strXDataFldName, true, ref idx); } //------------------------------------------------------------------------------- //------Manhole Locations // create the area graph for the ground elevation pAreaSeriesProps = pDataGraphT.AddSeries("bar:minmax"); //("scatter_plot") '("line:vertical") pManHoleSeries = (IBarSeriesProperties)pAreaSeriesProps; pManHoleSeries.BarStyle = esriBarStyle.esriCylinderBar; pManHoleSeries.BarSize = 5; pAreaSeriesProps.SourceData = pManholeTable;// pLayer pAreaSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; pColor = Globals.GetColor(255, 255, 68); pAreaSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB pAreaSeriesProps.InLegend = true; //show legend ' false = don't show legend pAreaSeriesProps.Name = ProfileGraph[CurrentDetail].Point_LayerName;//"Point Locations"; pAreaSeriesProps.HorizontalAxis = 3; pAreaSeriesProps.LabelField = "ID"; pAreaSeriesProps.SetField(0, "X"); pAreaSeriesProps.SetField(1, "BOTELEV"); pAreaSeriesProps.SetField(2, "TOPELEV"); // sort on the X value //pSortFlds = (IDataSortSeriesProperties)pAreaSeriesProps; //idx = 0; //pSortFlds.AddSortingField("X", true, ref idx); //---- // line series - sewer line pColor = Globals.GetColor(76, 230, 0);// green pLineSeriesProps = pDataGraphT.AddSeries("line:vertical"); //("area:vertical") '("scatter_plot") '("line:vertical") pLineSeriesProps.SourceData = pMainTable; // pLayer pLineSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; pLineSeriesProps.PenProperties.Width = 3; pLineSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB // don't have any symbols on the line, just solid pLineSeriesProps2 = (ILineSeriesProperties)pLineSeriesProps;// 'QI pLineSeriesProps2.SymbolProperties.Style = esriDataGraphTSymbolType.esriDataGraphTSymbolNothing; // get the fields to graph strXDataFldName = "MEASURE"; strYDataFldName = "ELEVATION"; pLineSeriesProps.InLegend = true; // show legend ' false = don't show legend pLineSeriesProps.Name = ProfileGraph[CurrentDetail].Line_LayerName;//"Line Profile";// pMainTable.Fields.get_Field(pMainTable.Fields.FindField("ELEVATION")).AliasName; //pSeriesProps.LabelField = "OBJECTID" pLineSeriesProps.ValueFormat = "0 "; pLineSeriesProps.SetField(0, strXDataFldName);// timefldName pLineSeriesProps.SetField(1, strYDataFldName); // sort on the X value pSortFlds = (IDataSortSeriesProperties)pLineSeriesProps; pSortFlds.AddSortingField(strXDataFldName, true, ref idx); //---------- end line series pScatterSeriesProps = pDataGraphT.AddSeries("scatter_plot"); //("area:vertical") '("scatter_plot") '("line:vertical") pScatterSeriesProps.SourceData = pMainLabelTable; // pLayer pScatterSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; pScatterSeriesProps.PenProperties.Width = 3; pScatterSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB // don't have any symbols on the line, just solid pScatterSeriesProps2 = (IPointSeriesProperties)pScatterSeriesProps;// 'QI pScatterSeriesProps2.SymbolProperties.Style = esriDataGraphTSymbolType.esriDataGraphTSymbolCircle; pScatterSeriesProps2.SymbolProperties.Visible = false; pScatterSeriesProps2.SymbolProperties.Color = pColor.RGB; pScatterSeriesProps2.SymbolProperties.BorderProperties.Color = pColor.RGB; pScatterSeriesProps2.SymbolProperties.BorderProperties.Style = esriDataGraphTPenType.esriDataGraphTPenClear; // get the fields to graph strXDataFldName = "MEASURE"; strYDataFldName = "ELEVATION"; pScatterSeriesProps.InLegend = false; // show legend ' false = don't show legend pScatterSeriesProps.Name = A4LGSharedFunctions.Localizer.GetString("GeoNetToolsAlias_14"); //pSeriesProps.LabelField = "OBJECTID" pScatterSeriesProps.ValueFormat = " "; pScatterSeriesProps.HorizontalAxis = 3; pScatterSeriesProps.LabelField = "LABEL"; pScatterSeriesProps.Marks = true; pScatterSeriesProps.SetField(0, strXDataFldName);// timefldName pScatterSeriesProps.SetField(1, strYDataFldName); //pScatterSeriesProps.SetField(2, "LABEL"); // sort on the X value // pSortFlds = (IDataSortSeriesProperties)pScatterSeriesProps; // pSortFlds.AddSortingField(strXDataFldName, true, ref idx); //ISeriesProperties pScatterSeriesProps; pScatterSeriesProps = pDataGraphT.AddSeries("scatter_plot"); //("area:vertical") '("scatter_plot") '("line:vertical") pScatterSeriesProps.SourceData = pTapTable; // pLayer // get the fields to graph strXDataFldName = "MEASURE"; strYDataFldName = "ELEVATION"; pScatterSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; pScatterSeriesProps.PenProperties.Width = 3; pScatterSeriesProps.HorizontalAxis = 5; pScatterSeriesProps.LabelField = "LABEL"; if (ProfileGraph[CurrentDetail].PointAlong_ShowLabels.ToUpper() == "TRUE" && ProfileGraph[CurrentDetail].PointAlong_Labels.Length > 0) { pScatterSeriesProps.Marks = true; } pScatterSeriesProps.InLegend = true; // show legend ' false = don't show legend pScatterSeriesProps.Name = ProfileGraph[CurrentDetail].PointAlong_LayerName;//"Points Along"; //pSeriesProps.LabelField = "OBJECTID" pScatterSeriesProps.ValueFormat = " "; pScatterSeriesProps.SetField(0, strXDataFldName);// timefldName pScatterSeriesProps.SetField(1, strYDataFldName); pColor = Globals.GetColor(255, 0, 0);// green pScatterSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB // don't have any symbols on the line, just solid //IPointSeriesProperties pScatterSeriesProps2; pScatterSeriesProps2 = (IPointSeriesProperties)pScatterSeriesProps;// 'QI pScatterSeriesProps2.SymbolProperties.Style = esriDataGraphTSymbolType.esriDataGraphTSymbolStar; pScatterSeriesProps2.SymbolProperties.Visible = true; pScatterSeriesProps2.SymbolProperties.Color = pColor.RGB; pScatterSeriesProps2.SymbolProperties.BorderProperties.Color = pColor.RGB; pScatterSeriesProps2.SymbolProperties.BorderProperties.Style = esriDataGraphTPenType.esriDataGraphTPenSolid; pDataGraphBase.UseSelectedSet = false; pCancelTracker = new CancelTrackerClass(); pDataGraphT.Update(pCancelTracker); // create data graph window pDataGraphWin = new DataGraphWindowClass(); pDataGraphWin.DataGraphBase = pDataGraphBase; pDataGraphWin.Application = app; // size and position the window pDataGraphWin.PutPosition(0, 0, 900, 250); // add the graph to the project pDataGraphs = (IDataGraphCollection)pMxDoc; //QI pDataGraphs.AddDataGraph(pDataGraphBase); //IDataGraphT ptmp = (IDataGraphT)pDataGraphs.DataGraph[1]; //string fld = ptmp.SeriesProperties[5].GetField(0); //fld = ptmp.SeriesProperties[5].GetField(1); //fld = ptmp.SeriesProperties[5].GetField(2); //fld = ptmp.SeriesProperties[5].LabelField; //fld = ptmp.SeriesProperties[5].Marks.ToString(); // fld = ptmp.SeriesProperties[5].HorizontalAxis; pDataGraphT.AxisProperties[0].AutomaticMaximum = true; pDataGraphT.AxisProperties[0].AutomaticMinimum = true; // pDataGraphT.AxisProperties[0].Minimum = minChartVal - 5; //pDataGraphT.AxisProperties[0].Maximum = maxChartVal + 5; pDataGraphT.AxisProperties[0].InitDefaults(); // show the graph pDataGraphWin.Show(true); //// get an insert cursor for the table //pCursor = null; //pRowBuff = null; //pCursor = pProfTable.Insert(true); //// populate the table //IPoint pPt; //int lPartIndex; //int lVertexIndex; //IEnumVertex pEnumVertex; //pPtCollection = (IPointCollection)pPolyline; //pEnumVertex = pPtCollection.EnumVertices; //pEnumVertex.Reset(); //// add the vertex xyz to the new table //i = 0; //pEnumVertex.Next(out pPt, out lPartIndex, out lVertexIndex); //while (pPt != null) //{ // pRowBuff = pProfTable.CreateRowBuffer(); // pRowBuff.set_Value(pRowBuff.Fields.FindField("X"), pPt.X); // pRowBuff.set_Value(pRowBuff.Fields.FindField("Y"), pPt.Y); // pRowBuff.set_Value(pRowBuff.Fields.FindField("Z"), pPt.Z); // pRowBuff.set_Value(pRowBuff.Fields.FindField("M"), pPt.M); // // keep -99999 as a flag, data will be calculated later, // // right now a graph can't ignore null values // if (SewerElevCollFroms[i] == null || SewerElevCollFroms[i].ToString() == "") // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("UPELEV"), -99999); // if (MessageBox.Show("There is a null value in the Upstream Elevations, Continue?", "Missing Data", MessageBoxButtons.YesNo) == DialogResult.No) // { // return; // } // } // else // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("UPELEV"), SewerElevCollFroms[i]); // } // if (SewerElevCollTos[i] == null || SewerElevCollTos[i].ToString() == "") // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("DOWNELEV"), -99999); // if (MessageBox.Show("There is a null value in the Downstream Elevations, Continue?", "Missing Data", MessageBoxButtons.YesNo) == DialogResult.No) // { // return; // } // } // else // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("DOWNELEV"), SewerElevCollTos[i]); // } // if (SewerElevCollRim[i] == null || SewerElevCollRim[i].ToString() == "") // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("RIMELEV"), -99999); // if (MessageBox.Show("There is a null value in the Rim Elevation, Continue?", "Missing Data", MessageBoxButtons.YesNo) == DialogResult.No) // { // return; // } // } // else // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("RIMELEV"), SewerElevCollRim[i]); // } // if (SewerElevCollInvertElev[i] == null || SewerElevCollInvertElev[i].ToString() == "") // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("INVERTELEV"), -99999); // if (MessageBox.Show("There is a null value in the Invert Elevation, Continue?", "Missing Data", MessageBoxButtons.YesNo) == DialogResult.No) // { // return; // } // } // else // { // pRowBuff.set_Value(pRowBuff.Fields.FindField("INVERTELEV"), SewerElevCollInvertElev[i]); // } // // pRowBuff.set_Value(pRowBuff.Fields.FindField("UPELEV"), SewerElevCollFroms[i]); // //pRowBuff.set_Value(pRowBuff.Fields.FindField("DOWNELEV"), SewerElevCollTos[i]); // // pRowBuff.set_Value(pRowBuff.Fields.FindField("RIMELEV"), SewerElevCollRim[i]); // // pRowBuff.set_Value(pRowBuff.Fields.FindField("INVERTELEV"), SewerElevCollInvertElev[i]); // /** use this code if graph can ignore null data // ' ' skip records with -99999 as sewer elev // ' If SewerElevColl(i) <> -99999 Then // ' pRowBuff.Value(pRowBuff.Fields.FindField("SewerElev")) = SewerElevColl(i) // ' Else // ' pRowBuff.Value(pRowBuff.Fields.FindField("SewerElev")) = Null // ' End If*/ // pCursor.InsertRow(pRowBuff); // pEnumVertex.Next(out pPt, out lPartIndex, out lVertexIndex); // i++; //} //// flush any writes //pCursor.Flush(); //Marshal.ReleaseComObject(pCursor); ///* // ' Calculate a value for an intermediate point between 2 manholes // ' needed because graph requires a value for every record or it gives it a zero. // ' Sewer lines have values at each manhole but a sewerline is composed of many // ' lines - where the laterals break it. // ' ** this may change if they modify the software to ignore null values in a graph // */ //// make a cursor of just the records that have a valid sewer elev //// needed to get the deltaSewerElev of the sewer elev data ////********* //string currentField = "UPELEV"; //for (int k = 0; k < 4; k++) //{ // switch (k) // { // case 0: // currentField = "UPELEV"; // break; // case 1: // currentField = "DOWNELEV"; // break; // case 2: // currentField = "RIMELEV"; // break; // case 3: // currentField = "INVERTELEV"; // break; // } // double Mmin = 0.0; // double Mmax = 0.0; // double minSewerElev = 0.0; // double maxSewerElev = 0.0; // double deltaSewerElev = 0.0; // double deltaM = 0.0; // double newZ = 0.0; // double m = 0.0; // double sewerelev = 0.0; // int j; // IRow pRowSewerElev; // ICursor pCursorSewerElev; // IQueryFilter pQueryFilter; // pQueryFilter = new QueryFilterClass(); // pQueryFilter.WhereClause = currentField + " <> -99999"; // pCursorSewerElev = pProfTable.Search(pQueryFilter, false); // // recreate the cursor as an update cursor // pCursor = null; // pCursor = pProfTable.Update(null, false); // pRowBuff = pCursor.NextRow(); // j = 0; // deltaM = 0; // while (pRowBuff != null) // { // // for the intermediate records, SewerElev will have a value of -99999, // // update them with a calculated value // if ((double)(pRowBuff.get_Value(pRowBuff.Fields.FindField(currentField))) == -99999) // { // m = (double)pRowBuff.get_Value(pRowBuff.Fields.FindField("M")); // newZ = (((m - Mmin) / deltaM) * deltaSewerElev) + sewerelev; // pRowBuff.set_Value(pRowBuff.Fields.FindField(currentField), newZ); // pCursor.UpdateRow(pRowBuff as IRow); // } // else // { // //valid sewer elev record // // calculate the delta sewer elev // if (j == 0) // { // // get the min and max sewer elev values // // get the man and max M value, this is used in the ratio calculation, // // I can't use the whole line length as the M because the slope of the // // sewer pipe can change at each manhole so the calculation has to be // // from manhole to manhole, not the whole line // try // { // pRowSewerElev = pCursorSewerElev.NextRow(); // minSewerElev = (double)pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField(currentField)); // //string tmp = pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField("M")).ToString(); // //if (tmp == "") // // Mmin = 0.0; // //else // // Mmin = Convert.ToDouble(tmp); // Mmin = (double)pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField("M")); // pRowSewerElev = pCursorSewerElev.NextRow(); // maxSewerElev = (double)pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField(currentField)); // Mmax = (double)pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField("M")); // } // catch (Exception Ex) // { // MessageBox.Show(Ex.Message); // } // } // else // { // pRowSewerElev = pCursorSewerElev.NextRow(); // if (pRowSewerElev == null) // { // break; // } // minSewerElev = maxSewerElev; // Mmin = Mmax; // maxSewerElev = (double)pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField(currentField)); // Mmax = (double)pRowSewerElev.get_Value(pRowSewerElev.Fields.FindField("M")); // } // deltaSewerElev = maxSewerElev - minSewerElev; // deltaM = Mmax - Mmin; // // this value is the base value that the calc'd values need as a base // sewerelev = minSewerElev;//pRowBuff.Value(pRowBuff.Fields.FindField("SewerElev")) // j++; // } // pRowBuff = (IRowBuffer)pCursor.NextRow(); // } // pCursor.Flush(); // Marshal.ReleaseComObject(pCursor); // Marshal.ReleaseComObject(pCursorSewerElev); //} ////============================================================================= //// create the graph from the table //IDataGraphBase pDataGraphBase; //IDataGraphT pDataGraphT; //// create graph //pDataGraphBase = new DataGraphTClass(); //pDataGraphT = (IDataGraphT)pDataGraphBase; //// graph, axis and legend titles. Substitute them for different input layer //pDataGraphT.GeneralProperties.Title = "Sewer Main Profile"; //pDataGraphT.LegendProperties.Title = "Profile Legend"; //// IDataGraphTAxisProperties pHort = pDataGraphT.AxisProperties[0]; //pDataGraphT.AxisProperties[0].Title = A4LGSharedFunctions.Localizer.GetString("GeoNetToolsAlias_13"); //pDataGraphT.AxisProperties[0].AutomaticMaximum = true; //pDataGraphT.AxisProperties[0].AutomaticMinimum = true; ////pDataGraphT.AxisProperties[0].Minimum = minChartVal - 5; ////pDataGraphT.AxisProperties[0].Maximum= maxChartVal + 5; ////pDataGraphT.AxisProperties[1].AutomaticMaximum = true; ////pDataGraphT.AxisProperties[1].AutomaticMinimum = false; ////pDataGraphT.AxisProperties[1].Minimum = minChartVal - 5; //////pDataGraphT.AxisProperties[1].Title = "Manholes"; ////pDataGraphT.AxisProperties[1].Visible = true; //pDataGraphT.AxisProperties[3].Visible = true; //pDataGraphT.AxisProperties[3].Title = "Manholes"; //pDataGraphT.AxisProperties[2].Title = "Length (feet)"; // "Date"; //pDataGraphT.AxisProperties[2].ValueFormat = "0"; //pDataGraphT.AxisProperties[2].Minimum = 0; //pDataGraphT.AxisProperties[2].AutomaticMinimum = false; //pDataGraphT.AxisProperties[2].ValueFormat = "#,##0.###"; //pDataGraphBase.Name = "Sewer Main Profile Graph"; // & strTableName layerName; ////IDataGraphTGeneralProperties pGenProp = pDataGraphT.GeneralProperties; ////pGenProp.Show3D = true; //// put the legend below the graph ////pDataGraphT.LegendProperties.Alignment = esriDataGraphTLegendBottom //// use only for series-specific properties ////IPointSeriesProperties pPtSeries; ////IAreaSeriesProperties pAreaSeries; ////ILineSeriesProperties pLineSeries; ////------------------------------------------------------------------------------- //// area series - ground elevation //ISeriesProperties pAreaSeriesProps; //IColor pColor; //// create the area graph for the ground elevation //pAreaSeriesProps = pDataGraphT.AddSeries("area:vertical"); //("scatter_plot") '("line:vertical") //pAreaSeriesProps.SourceData = pProfTable;// pLayer //pAreaSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; //pColor = Globals.GetColor(137, 112, 68); //pAreaSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB //String strXDataFldName; //String strYDataFldName; //// get the fields to graph - ground elevation //strXDataFldName = "M"; //pTable.Fields.Field(i).Name ' "Dist_to_Rds" //strYDataFldName = "Z"; // pTable.Fields.Field(i).Name ' "Dist_to_Rds" ////timefldName = "TSDateTime" ' substitute data/time field name for different dataset ////gageIDFldName = "Name" ' substitute gage ID field name for different dataset //// pSeriesProps.whereClause = whereClause //pAreaSeriesProps.InLegend = true; //show legend ' false = don't show legend //pAreaSeriesProps.Name = A4LGSharedFunctions.Localizer.GetString("GeoNetToolsAlias_1"); ////pSeriesProps.LabelField = "OBJECTID"; //pAreaSeriesProps.ValueFormat = "0 "; //pAreaSeriesProps.SetField(0, strXDataFldName); // timefldName //pAreaSeriesProps.SetField(1, strYDataFldName); //// sort on the X value //IDataSortSeriesProperties pSortFlds; //pSortFlds = (IDataSortSeriesProperties)pAreaSeriesProps; //int idx = 0; //pSortFlds.AddSortingField(strXDataFldName, true, ref idx); ////------------------------------------------------------------------------------- ////------Manhole Locations //IBarSeriesProperties pManHoleSeries; //// create the area graph for the ground elevation //pAreaSeriesProps = pDataGraphT.AddSeries("bar:minmax"); //("scatter_plot") '("line:vertical") //pManHoleSeries = (IBarSeriesProperties)pAreaSeriesProps; //pManHoleSeries.BarStyle = esriBarStyle.esriCylinderBar; //pManHoleSeries.BarSize = 5; //pAreaSeriesProps.SourceData = pManTable;// pLayer //pAreaSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; //pColor = Globals.GetColor(255, 255, 68); //pAreaSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB //pAreaSeriesProps.InLegend = true; //show legend ' false = don't show legend //pAreaSeriesProps.Name = "Manhole Locations"; //pAreaSeriesProps.HorizontalAxis = 3; //pAreaSeriesProps.LabelField = "ID"; //pAreaSeriesProps.SetField(0, "X"); //pAreaSeriesProps.SetField(1, "INVERTELEV"); //pAreaSeriesProps.SetField(2, "RIMELEV"); //// sort on the X value ////pSortFlds = (IDataSortSeriesProperties)pAreaSeriesProps; ////idx = 0; ////pSortFlds.AddSortingField("X", true, ref idx); ////---- //// line series - sewer line //currentField = "UPELEV"; //int currentFieldWidth = 1; //for (int k = 3; k >= 0; k--) //{ // switch (k) // { // case 0: // currentField = "UPELEV"; // pColor = Globals.GetColor(76, 230, 0);// green // currentFieldWidth = 3; // break; // case 1: // currentField = "DOWNELEV"; // pColor = Globals.GetColor(76, 0, 255); // currentFieldWidth = 3; // break; // case 2: // currentField = "RIMELEV"; // pColor = Globals.GetColor(76, 230, 255); // currentFieldWidth = 3; // continue; // //break; // case 3: // currentField = "INVERTELEV"; // pColor = Globals.GetColor(255, 230, 0); // currentFieldWidth = 3; // break; // } // ISeriesProperties pLineSeriesProps; // pLineSeriesProps = pDataGraphT.AddSeries("line:vertical"); //("area:vertical") '("scatter_plot") '("line:vertical") // pLineSeriesProps.SourceData = pProfTable; // pLayer // pLineSeriesProps.ColorType = esriGraphColorType.esriGraphColorCustomAll; // pLineSeriesProps.PenProperties.Width = currentFieldWidth; // pLineSeriesProps.CustomColor = pColor.RGB; // pSymbol.Color.RGB // // don't have any symbols on the line, just solid // ILineSeriesProperties pLineSeriesProps2; // pLineSeriesProps2 = (ILineSeriesProperties)pLineSeriesProps;// 'QI // pLineSeriesProps2.SymbolProperties.Style = esriDataGraphTSymbolType.esriDataGraphTSymbolNothing; // // get the fields to graph // strXDataFldName = "M"; // strYDataFldName = currentField; // pLineSeriesProps.InLegend = true; // show legend ' false = don't show legend // pLineSeriesProps.Name = pProfTable.Fields.get_Field(pProfTable.Fields.FindField(currentField)).AliasName; // //pSeriesProps.LabelField = "OBJECTID" // pLineSeriesProps.ValueFormat = "0 "; // pLineSeriesProps.SetField(0, strXDataFldName);// timefldName // pLineSeriesProps.SetField(1, strYDataFldName); // // sort on the X value // pSortFlds = (IDataSortSeriesProperties)pLineSeriesProps; // pSortFlds.AddSortingField(strXDataFldName, true, ref idx); // //---------- end line series //} //pDataGraphBase.UseSelectedSet = false; //ITrackCancel pCancelTracker; //pCancelTracker = new CancelTrackerClass(); //pDataGraphT.Update(pCancelTracker); ////pDataGraphT.get_AxisProperties(0).AutomaticMaximum = true; ////pDataGraphT.get_AxisProperties(0).AutomaticMinimum= true; ////pDataGraphT.get_AxisProperties(1).AutomaticMaximum = true; ////pDataGraphT.get_AxisProperties(1).AutomaticMinimum = true; ////pDataGraphT.get_AxisProperties(2).AutomaticMaximum = true; ////pDataGraphT.get_AxisProperties(2).AutomaticMinimum = true; ////pDataGraphT.get_AxisProperties(3).AutomaticMaximum = true; ////pDataGraphT.get_AxisProperties(3).AutomaticMinimum = true; //// create data graph window //IDataGraphWindow2 pDataGraphWin; //pDataGraphWin = new DataGraphWindowClass(); //pDataGraphWin.DataGraphBase = pDataGraphBase; //pDataGraphWin.Application = app; //// size and position the window //pDataGraphWin.PutPosition(0, 0, 900, 250); //// add the graph to the project //IDataGraphCollection pDataGraphs; //pDataGraphs = (IDataGraphCollection)pMxDoc; //QI //pDataGraphs.AddDataGraph(pDataGraphBase); ////IDataGraphT ptmp = (IDataGraphT)pDataGraphs.DataGraph[1]; ////string fld = ptmp.SeriesProperties[5].GetField(0); ////fld = ptmp.SeriesProperties[5].GetField(1); ////fld = ptmp.SeriesProperties[5].GetField(2); ////fld = ptmp.SeriesProperties[5].LabelField; ////fld = ptmp.SeriesProperties[5].Marks.ToString(); //// fld = ptmp.SeriesProperties[5].HorizontalAxis; //// show the graph //pDataGraphWin.Show(true); } catch (Exception Ex) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("ErrorInThe") + "ProfileCreateGraph " + Ex.Message); } finally { pWS = null; pCursor = null; pMxDoc = null; pMap = null; pPolyLineZ = null; pZAwareLineZ = null; pSurface = null; pRasterLayer = null; pRasLay = null; pPtOrigFrom = null; pPtOrigTo = null; pStandAloneTabColl = null; pStandAloneTabMainLabel = null; pTapTable = null; pMainTable = null; pManholeTable = null; pSurfaceTable = null; pMainLabelTable = null; pTableFieldsMainLabel = null; pStandAloneTabMain = null; pTableFieldsMain = null; pStandAloneTabManhole = null; pTableFieldsManhole = null; pStandAloneTabSurface = null; pTableFieldsSurface = null; pStandAloneTabTap = null; pTableFieldsTap = null; pRowBuff = null; pLabelCursor = null; pTapCursor = null; pSegment = null; pLine = null; pFromPnt = null; pToPnt = null; pMidPnt = null; pDataGraphBase = null; pDataGraphT = null; pPtCollection = null; pEnumVertex = null; pPt = null; pAreaSeriesProps = null; pColor = null; pSortFlds = null; pScatterSeriesProps2 = null; pScatterSeriesProps = null; pManHoleSeries = null; pLineSeriesProps2 = null; pLineSeriesProps = null; pCancelTracker = null; pDataGraphWin = null; pDataGraphs = null; } }
public override void OnMouseMove(int Button, int Shift, int X, int Y) { IPoint pt = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); pt = GIS.GraphicEdit.SnapSetting.getSnapPoint(pt); if (m_NewPolygonFeedback == null) return; m_NewPolygonFeedback.MoveTo(pt); if (m_ptCollection.PointCount == 0) return; double d_Total = 0; double d_segment = 0; double d_Area = 0;//20140219 lyf IPoint lastPt = m_ptCollection.get_Point(m_ptCollection.PointCount - 1); ILine line = new LineClass(); line.PutCoords(lastPt, pt); //�ھ��� d_segment = line.Length; m_frmMeasureResult.Segment = d_segment; ///20140219 lyf ��ǰ�����ʼ����룬�����ܳ��� IPoint firstPt = m_ptCollection.get_Point(0); ILine tempLastLine = new LineClass(); tempLastLine.PutCoords(pt, firstPt); try { IPolyline polyline = m_ptCollection as IPolyline; if (polyline.IsEmpty) { d_Total = d_segment; d_Area = 0; } else { d_Total = polyline.Length + d_segment+tempLastLine.Length; d_Area = CaculateArea(pt); } } catch { } //��ֵ���ܳ��� m_frmMeasureResult.Total = d_Total; m_frmMeasureResult.Area = d_Area; m_frmMeasureResult.PolygonResultChange(); }
private static void CreateToAndTurnPointsDual(ICurve mainCurve, IPoint midPoint, ILine distanceLine, out IPoint toPoint, out IPoint turnPoint, out IPoint joinPoint, out IPoint sqPoint1, out IPoint sqPoint2, double doglegDistance, bool distAsPercent, bool squareDualLines, double tolerenceForDelete) { sqPoint1 = new PointClass(); sqPoint2 = new PointClass(); toPoint = null; turnPoint = null; joinPoint = null; IPoint closestPointOnMain = null; IProximityOperator lineProxOp = null; ILine tempLine = null; ICurve pCur = null; IPoint tempPt2 = null; IConstructPoint constTempPt2 = null; ILine verticalLine = null; IConstructPoint conSqPoint1 = null; IConstructPoint conSqPoint2 = null; try { closestPointOnMain = new PointClass(); lineProxOp = mainCurve as IProximityOperator; closestPointOnMain = lineProxOp.ReturnNearestPoint(midPoint, esriSegmentExtension.esriNoExtension); //Create temp line to main tempLine = new LineClass(); tempLine.FromPoint = closestPointOnMain; tempLine.ToPoint = midPoint; toPoint = closestPointOnMain; double dist; if (distAsPercent) { pCur = (ICurve)tempLine; dist = pCur.Length * (doglegDistance / 100); } else { if (tempLine.Length < doglegDistance) { dist = 0; } else {//Adjust distance if needed dist = doglegDistance; } } //Create the "to" point for new line - tap location on main //IPoint tempPt1 = new PointClass(); //IConstructPoint constTempPt1 = (IConstructPoint)tempPt1; //constTempPt1.ConstructAlong(tempLine, esriSegmentExtension.esriNoExtension, dist, false); // toPoint = (IPoint)constTempPt1; //Create dogleg (turn) point for new line if needed if (dist > 0) { tempPt2 = new PointClass(); constTempPt2 = (IConstructPoint)tempPt2; constTempPt2.ConstructAlong(tempLine, esriSegmentExtension.esriNoExtension, dist, false); turnPoint = (IPoint)constTempPt2; } else turnPoint = null; //Determine Join Point joinPoint = new PointClass(); verticalLine = new LineClass() as ILine; verticalLine.FromPoint = midPoint; if (turnPoint != null) verticalLine.ToPoint = turnPoint; else verticalLine.ToPoint = closestPointOnMain; if (verticalLine.Length > distanceLine.Length) dist = distanceLine.Length / 2; else if (verticalLine.Length > 10) dist = verticalLine.Length / 2; else dist = verticalLine.Length / 2; //return; verticalLine.QueryPoint(esriSegmentExtension.esriNoExtension, dist, false, joinPoint); if (squareDualLines) { //Create squared turn points conSqPoint1 = sqPoint1 as IConstructPoint; conSqPoint2 = sqPoint2 as IConstructPoint; conSqPoint1.ConstructAngleIntersection(distanceLine.FromPoint, verticalLine.Angle, joinPoint, verticalLine.Angle + (Math.PI / 2)); conSqPoint2.ConstructAngleIntersection(distanceLine.ToPoint, verticalLine.Angle, joinPoint, verticalLine.Angle + (Math.PI / 2)); } } catch (Exception ex) { MessageBox.Show("CreateToAndTurnPointsDual\r\n" + ex.Message); } finally { closestPointOnMain = null; lineProxOp = null; tempLine = null; pCur = null; tempPt2 = null; constTempPt2 = null; verticalLine = null; conSqPoint1 = null; conSqPoint2 = null; } }
public bool HasTangentCurveMatchFeatures(IFeatureClass FeatureClass, IPolycurve inPolycurve, string WhereClause, double AngleToleranceTangentCompareInDegrees, double StraightLinesBreakLessThanInDegrees, double MaximumDeltaInDegrees, double ExcludeTangentsShorterThan, out int outFoundTangentCurvesCount, ref List<string> CurveInfoFromNeighbours) { outFoundTangentCurvesCount = 0; ILine pOriginalChord = new Line(); pOriginalChord.PutCoords(inPolycurve.FromPoint, inPolycurve.ToPoint); IVector3D vecOriginalSelected = new Vector3DClass(); vecOriginalSelected.PolarSet(pOriginalChord.Angle, 0, 1); int idxRadius = FeatureClass.FindField("RADIUS"); if (idxRadius == -1) return false; int idxCenterPointID = FeatureClass.FindField("CENTERPOINTID"); if (idxCenterPointID == -1) return false; object val = null; IGeometryBag pGeomBag = new GeometryBagClass(); IGeometryCollection pGeomColl = (IGeometryCollection)pGeomBag; IGeometry MultiPartPolyLine = new PolylineClass(); //qi IGeoDataset pGeoDS = (IGeoDataset)FeatureClass; ISpatialReference spatialRef = pGeoDS.SpatialReference; MultiPartPolyLine.SpatialReference = spatialRef; IGeometryCollection geometryCollection2 = MultiPartPolyLine as IGeometryCollection; ILine pTangentLineAtEnd = new Line(); //new ILine pTangentLineAtStart = new Line(); //new object objMissing = Type.Missing; for (int i = 0; i < 2; i++) { ILine pThisLine = null; if (i == 0) { inPolycurve.QueryTangent(esriSegmentExtension.esriExtendAtTo, 1.0, true, 0.2, pTangentLineAtEnd); pThisLine = new Line(); pThisLine.PutCoords(pTangentLineAtEnd.FromPoint, pTangentLineAtEnd.ToPoint); pGeomColl.AddGeometry(pThisLine); } else { inPolycurve.QueryTangent(esriSegmentExtension.esriExtendAtFrom, 0.0, true, 0.2, pTangentLineAtStart); pThisLine = new Line(); pThisLine.PutCoords(pTangentLineAtStart.FromPoint, pTangentLineAtStart.ToPoint); pGeomColl.AddGeometry(pThisLine); } //Create a new path for each line. ISegmentCollection newPath = new PathClass(); newPath.AddSegment((ISegment)pThisLine, ref objMissing, ref objMissing); //The spatial reference associated with geometryCollection will be assigned to all incoming paths and segments. geometryCollection2.AddGeometry(newPath as IGeometry, ref objMissing, ref objMissing); } //now buffer the lines IGeometryCollection outBufferedGeometryCol = new GeometryBagClass(); for (int jj = 0; jj < geometryCollection2.GeometryCount; jj++) { IPath pPath = geometryCollection2.get_Geometry(jj) as IPath; IGeometryCollection pPolyL = new PolylineClass(); pPolyL.AddGeometry((IGeometry)pPath); ITopologicalOperator topologicalOperator = (ITopologicalOperator)pPolyL; IPolygon pBuffer = topologicalOperator.Buffer(0.1) as IPolygon; outBufferedGeometryCol.AddGeometry(pBuffer, ref objMissing, ref objMissing); } ITopologicalOperator pUnionedBuffers = null; pUnionedBuffers = new PolygonClass() as ITopologicalOperator; pUnionedBuffers.ConstructUnion((IEnumGeometry)outBufferedGeometryCol); ISpatialFilter pSpatFilt = new SpatialFilter(); pSpatFilt.WhereClause = WhereClause; pSpatFilt.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; pSpatFilt.SearchOrder = esriSearchOrder.esriSearchOrderSpatial; pSpatFilt.Geometry = (IGeometry)pUnionedBuffers; IFeatureCursor pFeatCursLines = null; try { pFeatCursLines = FeatureClass.Search(pSpatFilt, false); } catch (Exception ex) { MessageBox.Show(ex.Message); return false; } IVector3D vecFoundGeom = new Vector3DClass(); IFeature pFeat = pFeatCursLines.NextFeature(); bool bHasTangentStraightLineAtJunction = false; List<int> lstLargeBreak = new List<int>(); while (pFeat != null) { IGeometry pFoundLineGeom = pFeat.ShapeCopy; IPolycurve pFoundLineAsPolyCurve = pFoundLineGeom as IPolycurve; int iRelativeOrientation = GetRelativeOrientation(pFoundLineAsPolyCurve, inPolycurve); //iRelativeOrientation == 1 --> closest points are original TO and found TO //iRelativeOrientation == 2 --> closest points are original TO and found FROM //iRelativeOrientation == 3 --> closest points are original FROM and found TO //iRelativeOrientation == 4 --> closest points are original FROM and found FROM //if the feature has no radius attribute, skip. double dRadius = 0; int iCtrPoint = -1; val = pFeat.get_Value(idxRadius); if (val == DBNull.Value) dRadius = 0; else dRadius = (double)val; val = pFeat.get_Value(idxCenterPointID); IPolycurve pPolyCurve = pFoundLineGeom as IPolycurve; ILine pFoundChordCandidate = new LineClass(); pFoundChordCandidate.PutCoords(pPolyCurve.FromPoint, pPolyCurve.ToPoint); //first check for liklihood that subject line is supposed to stay straight, by //geometry chord bearing angle break test vecFoundGeom.PolarSet(pFoundChordCandidate.Angle, 0, 1); double dDotProd = vecFoundGeom.DotProduct(vecOriginalSelected); double dAngleCheck = Math.Acos(dDotProd) * 180 / Math.PI; //in degrees dAngleCheck = Math.Abs(dAngleCheck); double dLargeAngleBreakInDegrees = 3; if (dAngleCheck > dLargeAngleBreakInDegrees && dAngleCheck < (180 - dLargeAngleBreakInDegrees)) //large angle break non-tangent, greater than 3 degrees { if (!lstLargeBreak.Contains(iRelativeOrientation)) lstLargeBreak.Add(iRelativeOrientation); } if ((dAngleCheck <= StraightLinesBreakLessThanInDegrees || (180 - dAngleCheck) < StraightLinesBreakLessThanInDegrees) && val == DBNull.Value && dRadius == 0 && !(pPolyCurve.Length< ExcludeTangentsShorterThan)) { if (lstLargeBreak.Contains(iRelativeOrientation)) bHasTangentStraightLineAtJunction = true; } if (val == DBNull.Value || dRadius == 0 || pPolyCurve.Length< ExcludeTangentsShorterThan) {//if the feature has a null centrpointID then skip. Marshal.ReleaseComObject(pFeat); pFeat = pFeatCursLines.NextFeature(); continue; } if (Math.Abs(inPolycurve.Length / dRadius * 180 / Math.PI) > MaximumDeltaInDegrees) { //if the resulting curve would have a central angle more than MaximumDeltaInDegrees degrees then skip Marshal.ReleaseComObject(pFeat); pFeat = pFeatCursLines.NextFeature(); continue; } iCtrPoint = (int)val; //if geometry of curve neighbour curves have been cracked then there can be more than one segment //however since all segments would be circular arcs, just need to test the first segment ISegmentCollection pFoundLineGeomSegs = pFoundLineGeom as ISegmentCollection; ISegment pSeg = pFoundLineGeomSegs.get_Segment(0); if (!(pSeg is ICircularArc)) { Marshal.ReleaseComObject(pFeat); pFeat = pFeatCursLines.NextFeature(); continue; } dRadius = (double)pFeat.get_Value(idxRadius); IVector3D vect1 = new Vector3DClass(); IVector3D vect2 = new Vector3DClass(); ILine tang = new Line(); double dUnitSignChange = 1; if (iRelativeOrientation == 1) //closest points are original TO and found TO { dUnitSignChange = -1; vect1.PolarSet(pTangentLineAtEnd.Angle, 0, 1); pFoundLineAsPolyCurve.QueryTangent(esriSegmentExtension.esriExtendAtTo, 1.0, true, 1, tang); vect2.PolarSet(tang.Angle, 0, 1); } else if (iRelativeOrientation == 2)//closest points are original TO and found FROM { vect1.PolarSet(pTangentLineAtEnd.Angle, 0, 1); pFoundLineAsPolyCurve.QueryTangent(esriSegmentExtension.esriExtendAtFrom, 0.0, true, 1, tang); vect2.PolarSet(tang.Angle, 0, 1); } else if (iRelativeOrientation == 3)//closest points are original FROM and found TO { vect1.PolarSet(pTangentLineAtStart.Angle, 0, 1); pFoundLineAsPolyCurve.QueryTangent(esriSegmentExtension.esriExtendAtTo, 1.0, true, 1, tang); vect2.PolarSet(tang.Angle, 0, 1); } else if (iRelativeOrientation == 4)//closest points are original FROM and found FROM { dUnitSignChange = -1; vect1.PolarSet(pTangentLineAtStart.Angle, 0, 1); pFoundLineAsPolyCurve.QueryTangent(esriSegmentExtension.esriExtendAtFrom, 0.0, true, 1, tang); vect2.PolarSet(tang.Angle, 0, 1); } dDotProd = vect1.DotProduct(vect2); dAngleCheck = Math.Acos(dDotProd) * 180 / Math.PI; //in degrees dAngleCheck = Math.Abs(dAngleCheck); if (dAngleCheck < AngleToleranceTangentCompareInDegrees || (180 - dAngleCheck) < AngleToleranceTangentCompareInDegrees) { double dDerivedRadius = dRadius * dUnitSignChange; string sHarvestedCurveInfo = pFeat.OID.ToString() + "," + dDerivedRadius.ToString("#.000") + "," + iCtrPoint.ToString() + "," + "t"; CurveInfoFromNeighbours.Add(sHarvestedCurveInfo); outFoundTangentCurvesCount++; } Marshal.ReleaseComObject(pFeat); pFeat = pFeatCursLines.NextFeature(); } Marshal.FinalReleaseComObject(pFeatCursLines); if (bHasTangentStraightLineAtJunction) return false; //open to logic change to be less conservative bool bHasParallelCurveFeaturesNearby = (outFoundTangentCurvesCount > 0); return bHasParallelCurveFeaturesNearby; }
public bool SetDynamicValues(IObject inObject, string mode, out List<IObject> ChangeFeatureList, out List<IObject> NewFeatureList, out List<IObject> ChangeFeatureGeoList) { NumberFormatInfo nfi = new CultureInfo(A4LGSharedFunctions.Localizer.GetString("AA_CultureInfo"), false).NumberFormat; nfi.NumberGroupSeparator = ""; ChangeFeatureList = null; NewFeatureList = null; ChangeFeatureGeoList = null; IMSegmentation mseg = null; INetworkFeature netFeat = null; IJunctionFeature iJuncFeat = null; IEdgeFeature iEdgeFeat = null; //ProgressBar //ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = null; //ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = null; //ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog = null; //// Create a CancelTracker //ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass(); //trackCancel.CancelOnKeyPress = true; // trackCancel.CancelOnClick = true; try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14d")); if (AAState.PerformUpdates == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14a")); } if (AAState.PerformUpdates && AAState._dv == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14b") + AAState._defaultsTableName); AAState.PerformUpdates = false; return false; } if (AAState.PerformUpdates && AAState._dv != null) { if (AAState._dv.Table == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14c")); return false; } if (inObject == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14e")); return false; } if (inObject.Table == AAState._tab) { if (inObject.get_Value(inObject.Fields.FindField("VALUEMETHOD")).ToString().ToUpper() == "LAST_VALUE") { if (inObject.get_Value(inObject.Fields.FindField("FIELDNAME")) != null) { if (inObject.get_Value(inObject.Fields.FindField("FIELDNAME")) != DBNull.Value) { try { LastValueEntry lstVal = AAState.lastValueProperties.GetProperty(inObject.get_Value(inObject.Fields.FindField("FIELDNAME")).ToString()) as LastValueEntry; if (lstVal != null) { lstVal.On_Manual = Globals.toBoolean(inObject.get_Value(inObject.Fields.FindField("ON_MANUAL")).ToString()); lstVal.On_Create = Globals.toBoolean(inObject.get_Value(inObject.Fields.FindField("ON_CREATE")).ToString()); lstVal.On_ChangeAtt = Globals.toBoolean(inObject.get_Value(inObject.Fields.FindField("ON_CHANGE")).ToString()); if (inObject.Fields.FindField("ON_CHANGEGEO") >= 0) { lstVal.On_ChangeGeo = Globals.toBoolean(inObject.get_Value(inObject.Fields.FindField("ON_CHANGEGEO")).ToString()); } } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14f")); } catch { //property does not exist } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14g")); } return false; } string modeVal; if (AAState._dv.Table.Columns[mode] == null) { AAState.WriteLine(mode + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14h")); mode = mode.Replace("GEO", ""); } if (AAState._dv.Table.Columns[mode].DataType == System.Type.GetType("System.String")) { modeVal = "(" + mode + " = '1' or " + mode + " = 'Yes' or " + mode + " = 'YES' or " + mode + " = 'True' or " + mode + " = 'TRUE')"; } else { modeVal = mode + " = 1"; } //System.Int32 int32_hWnd = ArcMap.Application.hWnd; //progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass(); //stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd); //stepProgressor.MinRange = 0; //stepProgressor.MaxRange = inObject.Fields.FieldCount; //stepProgressor.StepValue = 1; //stepProgressor.Message = "Attribute Assistant Progress"; //// Create the ProgressDialog. This automatically displays the dialog //progressDialog = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast //// Set the properties of the ProgressDialog //progressDialog.CancelEnabled = true; ArcMap.Application.StatusBar.set_Message(0, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14i") + inObject.Class.AliasName); //progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14i") + inObject.Class.AliasName; //progressDialog.Title = "Attribute Assistant Progress"; //progressDialog.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriProgressGlobe; //progressDialog.ShowDialog(); //Optional skip junctions feature class //if (Globals.isOrpanJunction(inFeature)) // return false; //Get table name for this feature _currentDataset = inObject.Class as IDataset; _currentDatasetNameItems = _currentDataset.Name.Split('.'); tableName = _currentDatasetNameItems[_currentDatasetNameItems.GetLength(0) - 1]; ArcMap.Application.StatusBar.set_Message(0, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain10") + inObject.Class.AliasName); //stepProgressor.Message = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain10") + inObject.Class.AliasName; // progressDialog.Description = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain10") + inObject.Class.AliasName; AAState.WriteLine("***********************************************************"); AAState.WriteLine("############ " + DateTime.Now + " ################"); AAState.WriteLine(""); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain11")); if (AAState._dv.Table.Columns.Contains("RUN_WEIGHT")) AAState._dv.Sort = "RUN_WEIGHT DESC"; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14j") + inObject.Class.AliasName); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14k") + "(TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND VALUEMETHOD = 'Last_Value'"); AAState._dv.RowFilter = "(TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND VALUEMETHOD = 'Last_Value'"; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14l") + AAState._dv.Count.ToString()); if (AAState._dv.Count > 0) { IRowChanges pRowChLast = inObject as IRowChanges; for (int retRows = 0; retRows < AAState._dv.Count; retRows++) { DataRowView drv = AAState._dv[retRows]; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14m") + drv["FIELDNAME"].ToString()); int fldLoc = inObject.Fields.FindField(drv["FIELDNAME"].ToString()); if (fldLoc > 0) { AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14n") + fldLoc); if (pRowChLast.get_ValueChanged(fldLoc)) { AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14o") ); try { LastValueEntry lstVal = (AAState.lastValueProperties.GetProperty(drv["FIELDNAME"].ToString()) as LastValueEntry); if (lstVal != null) { if (inObject.get_Value(fldLoc) != null) { if (inObject.get_Value(fldLoc) != DBNull.Value) { if (lstVal.Value != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14p") ); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": " + inObject.get_Value(fldLoc).ToString()); lstVal.Value = inObject.get_Value(fldLoc); AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), lstVal); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14p") ); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": " + inObject.get_Value(fldLoc)); lstVal.Value = inObject.get_Value(fldLoc); AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), lstVal); } } else { if (mode == "ON_CREATE") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14q") ); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14p") ); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": NULL"); lstVal.Value = null; AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), lstVal); } } } else { if (mode == "ON_CREATE") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14q") ); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14p") ); AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + ": NULL"); lstVal.Value = null; AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), lstVal); } } } else { lstVal = new LastValueEntry(); lstVal.Value = inObject.get_Value(fldLoc); lstVal.On_Manual = Globals.toBoolean(drv["ON_MANUAL"].ToString()); lstVal.On_Create = Globals.toBoolean(drv["ON_CREATE"].ToString()); lstVal.On_ChangeAtt = Globals.toBoolean(drv["ON_CHANGE"].ToString()); if (drv["ON_CHANGEGEO"] != null) { lstVal.On_ChangeGeo = Globals.toBoolean(drv["ON_CHANGEGEO"].ToString()); } AAState.lastValueProperties.SetProperty(drv["FIELDNAME"].ToString(), lstVal); } } catch { } } else { AAState.WriteLine(" " + drv["FIELDNAME"].ToString() + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14r") ); } } } pRowChLast = null; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14s") + inObject.Class.AliasName); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14k") + "(TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND " + modeVal); AAState._dv.RowFilter = "(TABLENAME = '*' OR TABLENAME = '" + tableName + "' OR TABLENAME like '" + tableName + "|*' OR TABLENAME like '" + tableName + "|%') AND " + modeVal; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14l") + AAState._dv.Count.ToString()); if (AAState._processCount > 2) { System.Threading.Thread.Sleep(400); } if (AAState._processCount > 15) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14t") ); return false; } if (AAState._dv.Count > 0) { bool proc = false; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14u") ); for (int retRows = 0; retRows < AAState._dv.Count; retRows++) { DataRowView drv = AAState._dv[retRows]; AAState.WriteLine(" ------------------------------------------------"); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14v") ); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14w") + (retRows + 1).ToString()); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14x") + drv["TABLENAME"].ToString()); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14y") + drv["FIELDNAME"].ToString()); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14z") + drv["VALUEINFO"].ToString()); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14aa") + drv["VALUEMETHOD"].ToString()); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ab") + drv["ON_CREATE"].ToString()); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ac") + drv["ON_CHANGE"].ToString()); if (AAState._dv.Table.Columns.Contains("RUNORDER")) AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ad") + drv["RUNORDER"].ToString()); AAState.WriteLine(""); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ae") ); valFC = drv["TABLENAME"].ToString().Trim(); if (valFC.Contains("|")) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14af") ); string[] spliVal = valFC.Split('|'); List<string> validSubtypes = new List<string>(spliVal[1].Split(',')); List<string> inValidSubtypes; if (spliVal.GetLength(0) == 3) { inValidSubtypes = new List<string>(spliVal[2].Split(',')); } else { inValidSubtypes = new List<string>(); } int obSubVal; ISubtypes pSub = inObject.Class as ISubtypes; if (pSub != null) { if (pSub.HasSubtype) { if (inObject.get_Value(pSub.SubtypeFieldIndex).ToString() != "") { obSubVal = Convert.ToInt32(inObject.get_Value(pSub.SubtypeFieldIndex).ToString()); if (validSubtypes.Contains("*")) { if (inValidSubtypes.Contains(obSubVal.ToString())) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ag") ); proc = false; continue; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ah") ); } } else if (validSubtypes.Contains(obSubVal.ToString())) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ah") ); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ag") ); proc = false; continue; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ai") ); proc = false; continue; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14aj") ); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14aj") ); } } valMethod = drv["VALUEMETHOD"].ToString().ToUpper().Trim(); valData = drv["VALUEINFO"].ToString().Trim(); if (valData.Contains(Environment.NewLine)) { valData = valData.Substring(0, valData.IndexOf(Environment.NewLine)); } List<string> strFldNames = new List<string>(); List<string> strFldAlias = new List<string>(); List<int> intFldIdxs = new List<int>(); fieldObj = null; if (drv["FIELDNAME"] != null && drv["FIELDNAME"].ToString().Trim() != "" && drv["FIELDNAME"].ToString().Trim() != "*" && drv["FIELDNAME"].ToString().Trim() != "#") { strFldNames = new List<string>(drv["FIELDNAME"].ToString().Trim().Split(',')); foreach (string strFldName in strFldNames) { if (inObject.Fields.FindField(strFldName) >= 0) { strFldAlias.Add(inObject.Fields.get_Field(inObject.Fields.FindField(strFldName)).AliasName); int tem = inObject.Fields.FindField(strFldName); intFldIdxs.Add(tem); fieldObj = inObject.Fields.get_Field(tem); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ak") + inObject.Fields.get_Field(inObject.Fields.FindField(strFldName)).AliasName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14al") + tem); proc = true; } else if (inObject.Fields.FindFieldByAliasName(strFldName) >= 0) { int tem = inObject.Fields.FindFieldByAliasName(strFldName); intFldIdxs.Add(tem); strFldAlias.Add(inObject.Fields.get_Field(tem).AliasName); fieldObj = inObject.Fields.get_Field(tem); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ak") + strFldName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14al") + tem); proc = true; } else { intFldIdxs.Add(-1); strFldAlias.Add("{Not Found}"); AAState.WriteLine(" " + strFldName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); fieldObj = null; proc = false; } } } else if (drv["FIELDNAME"].ToString() == "#") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14an") ); IRowChanges pRowCh = null; IField pTmpFld = null; pRowCh = inObject as IRowChanges; for (int i = 0; i < inObject.Fields.FieldCount; i++) { pTmpFld = inObject.Fields.get_Field(i); if (pTmpFld.Type != esriFieldType.esriFieldTypeGlobalID && pTmpFld.Type != esriFieldType.esriFieldTypeOID && pTmpFld.Type != esriFieldType.esriFieldTypeGeometry && pTmpFld.Name.ToUpper() != "SHAPE_LENGTH" && pTmpFld.Name.ToUpper() != "SHAPE.LEN" && pTmpFld.Name.ToUpper() != "SHAPE_AREA" && pTmpFld.Name.ToUpper() != "SHAPE.AREA") { if (pRowCh.get_ValueChanged(i) == true) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ao") + pTmpFld.Name + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ap") ); strFldNames.Add(pTmpFld.Name); intFldIdxs.Add(i); proc = true; } } } pRowCh = null; pTmpFld = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14aq") ); fieldObj = null; proc = true; } if (proc) { try { switch (valMethod) { case "FIELD_TRIGGER"://Value|FieldToChange|Value try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "FIELD_TRIGGER" ); if (inFeature != null & valData != null) { // Parse arguments args = valData.Split('|'); string valToCheck = ""; string fldToChange = ""; string valToSet = ""; if (args.GetLength(0) == 3) { valToCheck = args[0]; fldToChange = args[1]; valToSet = args[2]; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14av")); continue; } IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (intFldIdxs.Count == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14aw")); continue; } if (intFldIdxs[0] == -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am")); continue; } if (pRowCh.get_ValueChanged(intFldIdxs[0])) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ax")); if (inObject.get_Value(intFldIdxs[0]).ToString() == valToCheck) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); int chngFldIdx = Globals.GetFieldIndex(inObject.Fields, fldToChange); if (chngFldIdx == -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am")); continue; } try { inObject.set_Value(chngFldIdx, valToSet); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14c") + valToSet); } } } pRowCh = null; } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "FIELD_TRIGGER: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "FIELD_TRIGGER"); } break; case "VALIDATE_ATTRIBUTE_LOOKUP": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "VALIDATE_ATTRIBUTE_LOOKUP"); IRowChanges pRowCh = null; ISQLSyntax sqlSyntax = null; IQueryFilter pQFilt = null; try { if ((valData != null) && (inObject != null)) { pRowCh = inObject as IRowChanges; bool valueChanged = false; for (int i = 0; i < intFldIdxs.Count; i++) { if (pRowCh.get_ValueChanged(intFldIdxs[i]) == true) { valueChanged = true; break; } } if (valueChanged == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain12")); continue; } sourceLayerName = ""; string[] sourceFieldNames = null; // Parse arguments args = valData.Split('|'); if (args.Length == 2) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14d")); continue; } if ((sourceFieldNames != null) && (sourceFieldNames.Length > 0)) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain13") + sourceLayerName); boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; } IFields pFlds = null; IDataset pDs = null; string layNameFnd = ""; bool matchingLayFnd = false; IStandaloneTable pTbl = null; if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { pFlds = sourceLayer.FeatureClass.Fields; pDs = sourceLayer.FeatureClass as IDataset; layNameFnd = sourceLayer.Name; matchingLayFnd = true; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayerName + " data source is not set"); continue; } } else { pTbl = Globals.FindStandAloneTable(AAState._editor.Map, sourceLayerName) as IStandaloneTable; if (pTbl != null) { if (pTbl.Table != null) { pFlds = pTbl.Table.Fields; pDs = pTbl.Table as IDataset; layNameFnd = pTbl.Name; matchingLayFnd = true; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayerName + " data source is not set"); continue; } } if (matchingLayFnd == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); continue; } sqlSyntax = (ISQLSyntax)(pDs.Workspace); string specChar = sqlSyntax.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_WildcardManyMatch); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain14") + layNameFnd + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain15") + sourceLayerName); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain16")); if (sourceFieldNames.Length != intFldIdxs.Count) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain17")); continue; } int[] sourceFieldNums = new int[sourceFieldNames.Length]; pQFilt = new QueryFilterClass(); string sqlString = ""; string sqlStringUpper = ""; string sqlUpp = ""; if (sqlSyntax.GetStringComparisonCase()) { sqlUpp = "UPPER"; } for (int i = 0; i < sourceFieldNames.Length; i++) { sourceFieldNums[i] = Globals.GetFieldIndex(pFlds, sourceFieldNames[i].Trim()); if (sourceFieldNums[i] < 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain18") + sourceFieldName[i]); break; } if (pFlds.get_Field(sourceFieldNums[i]).Type == esriFieldType.esriFieldTypeString) { if (sqlString == "") { sqlString = pFlds.get_Field(sourceFieldNums[i]).Name + "" + " = '" + inObject.get_Value(intFldIdxs[i]).ToString() + "'"; sqlStringUpper = sqlUpp + "(" + pFlds.get_Field(sourceFieldNums[i]).Name + ")" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[i]).ToString().ToUpper().Replace(" ", specChar) + specChar + "'"; } else { sqlString = sqlString + " AND " + pFlds.get_Field(sourceFieldNums[i]).Name + "" + " = '" + inObject.get_Value(intFldIdxs[i]).ToString() + "'"; sqlStringUpper = sqlStringUpper + " AND " + sqlUpp + "(" + pFlds.get_Field(sourceFieldNums[i]).Name + ")" + " LIKE '" + specChar + inObject.get_Value(intFldIdxs[i]).ToString().ToUpper().Replace(" ", specChar) + specChar + "'"; } } else { if (sqlString == "") { sqlString = pFlds.get_Field(sourceFieldNums[i]).Name + " = " + inObject.get_Value(intFldIdxs[i]); sqlStringUpper = pFlds.get_Field(sourceFieldNums[i]).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[i]) + specChar; } else { sqlString = sqlString + " AND " + pFlds.get_Field(sourceFieldNums[i]).Name + " = " + inObject.get_Value(intFldIdxs[i]); sqlStringUpper = sqlStringUpper + " AND " + pFlds.get_Field(sourceFieldNums[i]).Name + " LIKE " + specChar + inObject.get_Value(intFldIdxs[i]) + specChar; } } } pQFilt.WhereClause = sqlString; AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); int intRecFound = 0; if (sourceLayer == null) { intRecFound = pTbl.Table.RowCount(pQFilt); } else { intRecFound = sourceLayer.FeatureClass.FeatureCount(pQFilt); } AAState.WriteLine(" " + intRecFound + " rows found using " + sqlString); if (intRecFound != 1) { pQFilt.WhereClause = sqlStringUpper; AAState.WriteLine(" " + pQFilt.WhereClause + " used to search for matching record"); if (sourceLayer == null) { intRecFound = pTbl.Table.RowCount(pQFilt); } else { intRecFound = sourceLayer.FeatureClass.FeatureCount(pQFilt); } AAState.WriteLine(" " + intRecFound + " rows found"); if (intRecFound == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain19")); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain20")); ICursor pCurs = null; if (sourceLayer == null) { pCurs = pTbl.Table.Search(pQFilt, true); } else { pCurs = sourceLayer.FeatureClass.Search(pQFilt, true) as ICursor; } pQFilt = null; List<string> pLst = Globals.CursorToList(ref pCurs, sourceFieldNums); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; string disFld = ""; for (int j = 0; j < sourceFieldNames.Length - 1; j++) { disFld = disFld == "" ? sourceFieldNames[j] : disFld + "|" + sourceFieldNames[j]; } string selectVal = Globals.showOptionsForm(pLst, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain21") + disFld, ComboBoxStyle.DropDownList); if (selectVal == "||Cancelled||") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain19")); AAState._editor.AbortOperation(); return false; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain22") + selectVal); string[] strVals = selectVal.Split('|'); for (int i = 0; i < sourceFieldNums.Length; i++) { inObject.set_Value(intFldIdxs[i], (strVals[i].Trim())); } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain23")); } pQFilt = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14e") + valData); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14f")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "VALIDATE_ATTRIBUTE_LOOKUP" + Environment.NewLine + ex.Message); } finally { pQFilt = null; sqlSyntax = null; pRowCh = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "VALIDATE_ATTRIBUTE_LOOKUP"); } break; } case "PREVIOUS_VALUE": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "PREVIOUS_VALUE"); IRowChanges pRowCh = null; try { if ((valData != null) && (inObject != null)) { pRowCh = inObject as IRowChanges; bool valueChanged = false; for (int i = 0; i < intFldIdxs.Count; i++) { if (pRowCh.get_ValueChanged(intFldIdxs[i]) == true) { valueChanged = true; break; } } if (valueChanged == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain24")); continue; } string[] sourceFieldNames = null; // Parse arguments args = valData.Split('|'); if (args.Length == 1) { sourceFieldNames = args[0].ToString().Split(','); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14d")); continue; } if ((sourceFieldNames != null) && (sourceFieldNames.Length > 0)) { int flx = inObject.Fields.FindField(sourceFieldNames[0]); if (flx > 0) { inObject.set_Value(flx, pRowCh.get_OriginalValue(intFldIdxs[0])); inObject.Store(); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14e") + valData); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14f")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "PREVIOUS_VALUE" + Environment.NewLine + ex.Message); } finally { pRowCh = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "PREVIOUS_VALUE"); } break; } case "ANGLE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "ANGLE"); if (inFeature != null) { if (intFldIdxs.Count == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain25")); continue; } if ((inFeature.Class as IFeatureClass).ShapeType != esriGeometryType.esriGeometryPolyline) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain26")); continue; } bool boolGeo = true; if (valData.Trim() != "") { if (valData.ToUpper() == "A") { boolGeo = false; } } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain27")); IPolyline pLyLine = inFeature.Shape as IPolyline; ILine pLine = new LineClass(); pLine.ToPoint = pLyLine.FromPoint; pLine.FromPoint = pLyLine.ToPoint; double angArth = pLine.Angle * 180 / Math.PI; if (angArth < 0) { angArth = 360 + angArth; } double angGeo = 270 - angArth; if (angGeo < 0) { angGeo = 360 + angGeo; } double ang; if (boolGeo) { ang = angGeo; } else { ang = angArth; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain28") + ang); try { inObject.set_Value(intFldIdxs[0], ang); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain29")); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain30")); } pLine = null; pLyLine = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain31")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "ANGLE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "ANGLE"); } break; case "CREATE_PERP_LINE"://Layer to Search For|Offset Distante or Field|Search distance to look for a line|UseSnapPoint|TargetLayer|TargetLayerTemplate try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "CREATE_PERP_LINE"); if (inFeature != null & valData != null) { sourceLayerName = ""; double offsetVal = 5; bool useSnapPnt = false; string targetLayerName = ""; IFeatureLayer targetLayer = null; string targetLayerTemp = ""; // Parse arguments args = valData.Split('|'); int fldOff = -1; if (args.GetLength(0) == 6) { sourceLayerNames = args[0].ToString().Split(','); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse(args[2], out searchDistance); Boolean.TryParse(args[3], out useSnapPnt); targetLayerName = args[4]; targetLayerTemp = args[5]; } else if (args.GetLength(0) == 5) { sourceLayerNames = args[0].ToString().Split(','); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse(args[2], out searchDistance); Boolean.TryParse(args[3], out useSnapPnt); targetLayerName = args[4]; targetLayerTemp = ""; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14av")); continue; } if (intFldIdxs.Count > 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain32")); continue; } targetLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, targetLayerName, ref boolLayerOrFC); if (targetLayer == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14g") + targetLayerName); continue; } if (targetLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPolyline) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14h") + targetLayerName); continue; } if (targetLayer is ICadastralFabricSubLayer2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14i") + targetLayerName); continue; } for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") sourceLayerName = args[i].ToString(); if (i == 0) i++; boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14b") + sourceLayer + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); continue; } if (fldOff != -1) { try { string temp = inObject.get_Value(fldOff).ToString(); if (Globals.IsNumeric(temp)) { Double.TryParse(temp, out offsetVal); } } catch { } } IPolyline pTempLine = new PolylineClass(); pTempLine = Globals.CreateAngledLineFromLocationOnLine((IPoint)inFeature.Shape, sourceLayer, boolLayerOrFC, Globals.ConvertDegToRads(90), offsetVal, "true", true, false); IEditTemplate pTemp = null; IFeature pFeat = null; if (targetLayerTemp != "") pTemp = Globals.GetEditTemplate(targetLayerTemp, targetLayer); if (pTemp != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain33")); pFeat = Globals.CreateFeature(pTempLine, pTemp, AAState._editor, ArcMap.Application, false, false, false); } else { pFeat = Globals.CreateFeature(pTempLine, targetLayer, AAState._editor, ArcMap.Application, false, false, false); } if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain34")); NewFeatureList.Add(pFeat); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CREATE_PERP_LINE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "CREATE_PERP_LINE"); } break; case "AUTONUMBER"://Layer to Search For|Offset Distante or Field|Search distance to look for a line try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "AUTONUMBER"); if (inObject != null) { if (intFldIdxs.Count == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain25")); continue; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain35") + strFldNames[0]); string res = Globals.GetFieldStats(inObject.Class as IFeatureClass, strFldNames[0], Globals.statsType.Max); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain36") + res); if (res == "External component has thrown an exception.") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain37")); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cm")); long val = 1; try { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14co")); inObject.set_Value(intFldIdxs[0], val); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14j") + ex.Message.ToString()); } } else { if (Globals.IsNumeric(res)) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cs")); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cr") + res); try { long val = (Convert.ToInt64(res) + 1); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cq") + res); try { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14co") + res); inObject.set_Value(intFldIdxs[0], val); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az") + res); } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14j") + ex.Message.ToString()); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14j") + ex.Message.ToString()); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cp")); long val = 1; inObject.set_Value(intFldIdxs[0], val); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cn") + res); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cm")); long val = 1; try { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14co") + res); inObject.set_Value(intFldIdxs[0], val); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az") + res); } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14j") + ex.Message.ToString()); } } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "AUTONUMBER: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "AUTONUMBER"); } break; case "COPY_LINKED_RECORD"://Feature Layer|Field To Copy|Primary Key Field|Foreign Key Field { try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "COPY_LINKED_RECORD"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 4) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } if (inObject == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ak")); break; } string[] targetLayerNames; string targetFieldName = ""; found = false; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bs")); targetLayerNames = args[0].ToString().Split(','); targetFieldName = args[1].ToString(); string targetLayerName = ""; string sourceIDFieldName = args[2].ToString(); string targetIDFieldName = args[3].ToString(); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bt")); if (targetFieldName != null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cj")); int fldIDSourecIdx = Globals.GetFieldIndex(inObject.Fields, sourceIDFieldName); if (fldIDSourecIdx > -1 && intFldIdxs.Count > 0) { if (inObject.get_Value(fldIDSourecIdx) != null && inObject.get_Value(fldIDSourecIdx) != DBNull.Value) { if (inObject.get_Value(fldIDSourecIdx).ToString() != "") { for (int i = 0; i < targetLayerNames.Length; i++) { targetLayerName = targetLayerNames[i].ToString().Trim(); if (targetLayerName != "") { // Get layer AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cl")); bool FCorLayerSource = true; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, targetLayerName, ref FCorLayerSource); if (sourceLayer != null) { int fldValToCopyIdx = sourceLayer.FeatureClass.Fields.FindField(targetFieldName); int fldIDTargetIdx = sourceLayer.FeatureClass.Fields.FindField(targetIDFieldName); if (fldIDTargetIdx > -1 && fldValToCopyIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Name + "" + " = '" + inObject.get_Value(fldIDSourecIdx).ToString() + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Name + " = " + inObject.get_Value(fldIDSourecIdx); } IFeatureCursor pCurs; pCurs = sourceLayer.FeatureClass.Search(pQFilt, true); IFeature pRow; while ((pRow = pCurs.NextFeature()) != null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cf")); try { inObject.set_Value(intFldIdxs[0], pRow.get_Value(fldValToCopyIdx)); break; } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aw") + inObject.get_Value(fldValToCopyIdx) + " to field: " + strFldNames[0]); } pRow = null; } pRow = null; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cd")); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14k")); } } else { ITable pTable = Globals.FindTable(AAState._editor.Map, targetLayerName); if (pTable != null) { int fldValToCopyIdx = Globals.GetFieldIndex(pTable.Fields, targetFieldName); int fldIDTargetIdx = Globals.GetFieldIndex(pTable.Fields, targetIDFieldName); if (fldIDTargetIdx > -1 && fldValToCopyIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (pTable.Fields.get_Field(fldIDTargetIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + pTable.Fields.get_Field(fldIDTargetIdx).Name + "" + " = '" + inObject.get_Value(fldIDSourecIdx).ToString() + "'"; } else { pQFilt.WhereClause = pTable.Fields.get_Field(fldIDTargetIdx).Name + " = " + inObject.get_Value(fldIDSourecIdx); } ICursor pCurs; pCurs = pTable.Search(pQFilt, true); IRow pRow; bool valSet = false; pRow = pCurs.NextRow(); while (pRow != null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cf")); try { inObject.set_Value(intFldIdxs[0], pRow.get_Value(fldValToCopyIdx)); AAState.WriteLine(" " + pRow.get_Value(fldValToCopyIdx).ToString() + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ch")); valSet = true; break; } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aw") + inObject.get_Value(fldValToCopyIdx) + " to field: " + strFldNames[0]); } pRow = pCurs.NextRow(); } pRow = null; if (valSet) AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cd")); else AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ce")); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14k")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ax") + sourceLayerName); } pTable = null; } } } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ck")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_LINKED_RECORD" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "COPY_LINKED_RECORD"); } break; } case "UPDATE_LINKED_RECORD"://Feature Layer|Field To Copy|Primary Key Field|Foreign Key Field { try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "UPDATE_LINKED_RECORD"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 4) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } if (inObject == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ak")); break; } IRowChanges pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false && mode != "ON_CREATE") { AAState.WriteLine(" PROMPT: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ck")); pRowCh = null; continue; } else { pRowCh = null; string[] targetLayerNames; string targetFieldName = ""; found = false; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bs")); targetLayerNames = args[0].ToString().Split(','); targetFieldName = args[1].ToString(); string targetLayerName = ""; string sourceIDFieldName = args[2].ToString(); string targetIDFieldName = args[3].ToString(); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bt")); if (targetFieldName != null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cj")); int fldIDSourecIdx = Globals.GetFieldIndex(inObject.Fields, sourceIDFieldName); if (fldIDSourecIdx > -1 && intFldIdxs.Count > 0) { if (inObject.get_Value(fldIDSourecIdx) != null && inObject.get_Value(fldIDSourecIdx) != DBNull.Value) { if (inObject.get_Value(fldIDSourecIdx).ToString() != "") { for (int i = 0; i < targetLayerNames.Length; i++) { targetLayerName = targetLayerNames[i].ToString().Trim(); if (targetLayerName != "") { // Get layer AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ci")); bool FCorLayerSource = true; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, targetLayerName, ref FCorLayerSource); if (sourceLayer != null) { int fldValToCopyIdx = sourceLayer.FeatureClass.Fields.FindField(targetFieldName); int fldIDTargetIdx = sourceLayer.FeatureClass.Fields.FindField(targetIDFieldName); if (fldIDTargetIdx > -1 && fldValToCopyIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Name + "" + " = '" + inObject.get_Value(fldIDSourecIdx).ToString() + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fldIDTargetIdx).Name + " = " + inObject.get_Value(fldIDSourecIdx); } IFeatureCursor pCurs; pCurs = sourceLayer.FeatureClass.Search(pQFilt, true); IFeature pRow; bool valSet = false; while ((pRow = pCurs.NextFeature()) != null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cg")); try { pRow.set_Value(fldValToCopyIdx, inObject.get_Value(intFldIdxs[0])); pRow.Store(); AAState.WriteLine(" " + inObject.get_Value(intFldIdxs[0]).ToString() + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ch")); valSet = true; } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aw") + inObject.get_Value(intFldIdxs[0]).ToString() + " to field: " + targetFieldName); } pRow = null; } pRow = null; if (valSet) AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cd")); else AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ce")); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14k")); } } else { ITable pTable = Globals.FindTable(AAState._editor.Map, targetLayerName); if (pTable != null) { int fldValToCopyIdx = Globals.GetFieldIndex(pTable.Fields, targetFieldName); int fldIDTargetIdx = Globals.GetFieldIndex(pTable.Fields, targetIDFieldName); if (fldIDTargetIdx > -1 && fldValToCopyIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (pTable.Fields.get_Field(fldIDTargetIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + pTable.Fields.get_Field(fldIDTargetIdx).Name + "" + " = '" + inObject.get_Value(fldIDSourecIdx).ToString() + "'"; } else { pQFilt.WhereClause = pTable.Fields.get_Field(fldIDTargetIdx).Name + " = " + inObject.get_Value(fldIDSourecIdx); } ICursor pCurs; pCurs = pTable.Search(pQFilt, false); IRow pRow; bool valSet = false; pRow = pCurs.NextRow(); while (pRow != null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cf")); try { pRow.set_Value(fldValToCopyIdx, inObject.get_Value(intFldIdxs[0])); pRow.Store(); AAState.WriteLine(" " + inObject.get_Value(intFldIdxs[0]).ToString() + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ch")); valSet = true; } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aw") + inObject.get_Value(fldValToCopyIdx) + " to field: " + strFldNames[0]); } pRow = pCurs.NextRow(); } pRow = null; if (valSet) AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cd")); else AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ce")); if (pCurs != null) Marshal.ReleaseComObject(pCurs); pCurs = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14k")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ax") + sourceLayerName); } pTable = null; } } } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ay")); } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "UPDATE_LINKED_RECORD" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "UPDATE_LINKED_RECORD"); } break; } case "OFFSET"://Layer to Search For|Offset Distante or Field|Search distance to look for a line try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "OFFSET"); if (inFeature != null & valData != null) { sourceLayerName = ""; double offsetVal = 5; // Parse arguments args = valData.Split('|'); int fldOff = -1; if (args.GetLength(0) >= 3) { sourceLayerNames = args[0].ToString().Split(','); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse(args[2], out searchDistance); } else if (args.GetLength(0) >= 2) { sourceLayerNames = args[0].ToString().Split(','); if (Globals.IsNumeric(args[1])) Double.TryParse(args[1], out offsetVal); else { fldOff = Globals.GetFieldIndex(inObject.Fields, args[1]); } Double.TryParse("1", out searchDistance); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14av")); continue; } if (intFldIdxs.Count != 2) { AAState.WriteLine( A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bn")); continue; } // Get layer for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") sourceLayerName = args[i].ToString(); if (i == 0) i++; boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14b") + sourceLayer + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); continue; } IFeatureClass iFC = inFeature.Class as IFeatureClass; if (sourceLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayer + " is a polygon layer"); break; } if (sourceLayer != null) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } while ((sourceFeature = fCursor.NextFeature()) != null) { double dAlong = 0; if (sourceFeature.Class != inFeature.Class) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; pIntPnt = null; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; pIntPnt = null; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cc") + dAlong); IPoint pNewPt = new PointClass(); IConstructPoint2 pConsPoint = pNewPt as IConstructPoint2; if (fldOff != -1) { string temp = inObject.get_Value(fldOff).ToString(); if (Globals.IsNumeric(temp)) { Double.TryParse(temp, out offsetVal); } } pConsPoint.ConstructOffset (sourceFeature.Shape as ICurve, esriSegmentExtension.esriNoExtension, dAlong, false, offsetVal); inObject.set_Value(intFldIdxs[0], pNewPt.X); inObject.set_Value(intFldIdxs[1], pNewPt.Y); pNewPt = null; pConsPoint = null; } } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "OFFSET: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "OFFSET"); } break; case "SIDE": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "SIDE"); try { //Layer|IDField|IDField source if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cb")); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ca") + valData); sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; string inputFieldName = ""; args = valData.Split('|'); if (args.Length < 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "SIDE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bm")); continue; } switch (args.Length) { case 3: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); inputFieldName = args[2].ToString(); break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "SIDE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bm")); continue; } int fldValToCopyIdx = inObject.Fields.FindField(inputFieldName); if (fldValToCopyIdx > -1) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { // Get layer AAState.WriteLine(" " + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bz")); int fldValTargetJoinIdx = Globals.GetFieldIndex(sourceLayer, sourceFieldName); if (fldValTargetJoinIdx > -1) { IQueryFilter pQFilt = Globals.createQueryFilter(); if (sourceLayer.FeatureClass.Fields.get_Field(fldValTargetJoinIdx).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = "" + sourceLayer.FeatureClass.Fields.get_Field(fldValTargetJoinIdx).Name + "" + " = '" + inObject.get_Value(fldValToCopyIdx).ToString() + "'"; } else { pQFilt.WhereClause = sourceLayer.FeatureClass.Fields.get_Field(fldValTargetJoinIdx).Name + " = " + inObject.get_Value(fldValToCopyIdx); } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bx") + pQFilt.WhereClause); int cnt = sourceLayer.FeatureClass.FeatureCount(pQFilt); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14by") + cnt); if (cnt > 0) { fCursor = sourceLayer.FeatureClass.Search(pQFilt, true); while ((sourceFeature = fCursor.NextFeature()) != null) { bool side = false; if (Globals.GetPointOnLine(inFeature.Shape, sourceFeature.Shape, 450, out side) != null) { if (side) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain38")); inFeature.set_Value(intFldIdxs[0], "Right"); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain39")); inFeature.set_Value(intFldIdxs[0], "Left"); } if (fCursor != null) Marshal.ReleaseComObject(fCursor); fCursor = null; continue; } } if (fCursor != null) Marshal.ReleaseComObject(fCursor); fCursor = null; } pQFilt = null; } } } } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "SIDE" + Environment.NewLine + ex.Message); } finally { if (fCursor != null) Marshal.ReleaseComObject(fCursor); fCursor = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "SIDE"); } break; } case "PROMPT": { //Loop through all fields list in the fieldname //If blank or null, prompt user for value //Store Value IDomain pDom = default(IDomain); ISubtypes pSubType = null; List<Globals.DomSubList> lst = null; Globals.DomSubList dmRetVal = null; try { if ((inObject != null)) { pSubType = (ISubtypes)inObject.Class; if (pSubType.HasSubtype) { int intSub; if (intFldIdxs.Contains(pSubType.SubtypeFieldIndex)) { lst = Globals.SubtypeToList(pSubType); if (inObject.get_Value(pSubType.SubtypeFieldIndex) == null || inObject.get_Value(pSubType.SubtypeFieldIndex) == "" || inObject.get_Value(pSubType.SubtypeFieldIndex) == DBNull.Value) { dmRetVal = Globals.showValuesOptionsForm(lst, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + inObject.Class.AliasName + ":" + pSubType.SubtypeFieldName, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + inObject.Class.AliasName + ":" + pSubType.SubtypeFieldName, ComboBoxStyle.DropDownList); inObject.set_Value(pSubType.SubtypeFieldIndex, dmRetVal.Value); intSub = Convert.ToInt32(dmRetVal.Value); } else { intSub = Convert.ToInt32(inObject.get_Value(pSubType.SubtypeFieldIndex)); } for (int l = 0; l < strFldNames.Count; l++) { if (intFldIdxs[l] == pSubType.SubtypeFieldIndex) continue; if (intFldIdxs[l] != -1) { pDom = pSubType.get_Domain(intSub, inObject.Fields.get_Field(intFldIdxs[l]).Name); if (pDom == null) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + inObject.Class.AliasName + ":" + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + inObject.Class.AliasName + ":" + strFldAlias[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } else { if (pDom is CodedValueDomain) { lst = Globals.DomainToList(pDom); if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { dmRetVal = Globals.showValuesOptionsForm(lst, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDownList); try { inObject.set_Value(intFldIdxs[l], dmRetVal.Value); } catch { } lst = null; } } else { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } } } else { AAState.WriteLine(" PROMPT: " + strFldNames[l] + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } } else { if (inObject.get_Value(pSubType.SubtypeFieldIndex) == null) intSub = pSubType.DefaultSubtypeCode; else intSub = Convert.ToInt32(inObject.get_Value(pSubType.SubtypeFieldIndex)); for (int l = 0; l < strFldNames.Count; l++) { if (intFldIdxs[l] != -1) { pDom = pSubType.get_Domain(intSub, inObject.Fields.get_Field(intFldIdxs[l]).Name); if (pDom == null) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } else { if (pDom is CodedValueDomain) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { lst = Globals.DomainToList(pDom); dmRetVal = Globals.showValuesOptionsForm(lst, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDownList); try { inObject.set_Value(intFldIdxs[l], dmRetVal.Value); } catch { } lst = null; } } else { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } } } else { AAState.WriteLine(" PROMPT: " + strFldNames[l] + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } } } else { for (int l = 0; l < strFldNames.Count; l++) { if (intFldIdxs[l] != -1) { pDom = inObject.Fields.get_Field(intFldIdxs[l]).Domain; if (pDom == null) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } else { if (pDom is CodedValueDomain) { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { lst = Globals.DomainToList(pDom); dmRetVal = Globals.showValuesOptionsForm(lst, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDownList); try { inObject.set_Value(intFldIdxs[l], dmRetVal.Value); } catch { } lst = null; } } else { if (inObject.get_Value(intFldIdxs[l]) == null || inObject.get_Value(intFldIdxs[l]) == "" || inObject.get_Value(intFldIdxs[l]) == DBNull.Value) { IList<string> pVals = new List<string>(); string strRetVal = Globals.showValuesOptionsForm(pVals, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bw") + strFldAlias[l], ComboBoxStyle.DropDown); try { inObject.set_Value(intFldIdxs[l], strRetVal); } catch { } pVals = null; } } } } else { AAState.WriteLine(" PROMPT: " + strFldNames[l] + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "PROMPT" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "PROMPT"); pDom = null; pSubType = null; lst = null; dmRetVal = null; } break; } case "CASCADE_ATTRIBUTE": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "CASCADE_ATTRIBUTE"); string flds; string targetLayer; IRowChanges pRowCh = null; try { if ((valData != null) && (inObject != null)) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cb")); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ca") + valData); //field name is the field to Check //value|Layer|tempalte|Cut or Copy|field-toField args = valData.Split('|'); if (args.Length < 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CASCADE_ATTRIBUTE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bl")); continue; } targetLayer = args[0]; flds = args[1]; bool bPrompt; if (args.Length == 3) { if (args[2].ToUpper() == "T" || args[2].ToUpper() == "TRUE" || args[2].ToUpper() == "YES") { bPrompt = true; } else { bPrompt = false; } } else { bPrompt = true; } pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CASCADE_ATTRIBUTE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bk")); continue; } bool boolFoundAsLayer = true; sourceLayer = Globals.FindLayer(ArcMap.Application, args[0].ToString(), ref boolFoundAsLayer) as IFeatureLayer; if (sourceLayer == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CASCADE_ATTRIBUTE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bj")); continue; } int intTargFld = -1; intTargFld = sourceLayer.FeatureClass.Fields.FindField(flds); if (intTargFld == -1) { intTargFld = sourceLayer.FeatureClass.Fields.FindFieldByAliasName(flds); if (intTargFld != -1) { flds = sourceLayer.FeatureClass.Fields.get_Field(intTargFld).Name; } } if (intTargFld > -1) { bool proceed = true; if (pRowCh.get_OriginalValue(intFldIdxs[0]).ToString().Trim() == "") continue; IQueryFilter pQFilt = new QueryFilterClass(); if (sourceLayer.FeatureClass.Fields.get_Field(intTargFld).Type == esriFieldType.esriFieldTypeString) { pQFilt.WhereClause = flds + " = '" + pRowCh.get_OriginalValue(intFldIdxs[0]) + "'"; } else { pQFilt.WhereClause = flds + " = " + pRowCh.get_OriginalValue(intFldIdxs[0]) + ""; } int featCnt = sourceLayer.FeatureClass.FeatureCount(pQFilt); if (featCnt == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain40")); } else { string promptLayname; promptLayname = Globals.getClassName(sourceLayer); if (bPrompt) { if (MessageBox.Show("You are about to change " + featCnt + " rows in the " + promptLayname + " Feature Class, proceed?", "Cascade", MessageBoxButtons.YesNo) == DialogResult.Yes) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain41")); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain42")); proceed = false; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain43")); } if (proceed) { IFeatureCursor pCalcCursor = sourceLayer.FeatureClass.Update(pQFilt, false); IFeature updateFeat; if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } while ((updateFeat = pCalcCursor.NextFeature()) != null) { updateFeat.set_Value(intTargFld, inObject.get_Value(intFldIdxs[0])); ChangeFeatureList.Add(updateFeat); //if (!trackCancel.Continue()) //{ // AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain19")); // AAState._editor.AbortOperation(); // return false; //} } updateFeat = null; if (pCalcCursor != null) { Marshal.ReleaseComObject(pCalcCursor); } pCalcCursor = null; pQFilt = null; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CASCADE_ATTRIBUTE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bi")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CASCADE_ATTRIBUTE" + Environment.NewLine + ex.Message); } finally { sourceLayer = null; pRowCh = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "CASCADE_ATTRIBUTE"); } break; } case "COPY_FEATURE": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "COPY_FEATURE"); IFeatureLayer pTargetFL; string[] FldPairs; string targetValue; IRowChanges pRowCh = null; IFeature pNewFeat = null; try { if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cb")); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ca") + valData); //field name is the field to Check //value|Layer|tempalte|Cut or Copy|field-toField args = valData.Split('|'); if (args.Length < 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bh")); continue; } targetValue = args[0]; pRowCh = inObject as IRowChanges; if (intFldIdxs.Count > 0) { if (pRowCh.get_ValueChanged(intFldIdxs[0]) == false && mode != "ON_CREATE") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain44")); continue; } if (inFeature.get_Value(intFldIdxs[0]).ToString() != targetValue.ToString()) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain45")); continue; } } bool FCorLayerTarget = true; pTargetFL = Globals.FindLayer(ArcMap.Application, args[1].ToString(), ref FCorLayerTarget) as IFeatureLayer; if (pTargetFL == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bg")); continue; } if (Globals.IsEditable(ref pTargetFL, ref AAState._editor) == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14be")); continue; } if (pTargetFL.FeatureClass.ShapeType != (inFeature.Class as IFeatureClass).ShapeType) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bf")); continue; } FldPairs = null; //value|Layer|tempalte|Cut or Copy|field-toField IEditTemplate pEditTemp = null; string sourceAction = "COPY"; string fldMatching = null; switch (args.Length) { //case 2: // break; case 3: if (args[2].Trim() != "") { pEditTemp = Globals.PromptAndGetEditTemplateGraphic(pTargetFL, args[2].Trim()); } else { pEditTemp = null; } break; case 4: if (args[2].Trim() != "") { pEditTemp = Globals.PromptAndGetEditTemplateGraphic(pTargetFL, args[2].Trim()); } else { pEditTemp = null; } sourceAction = args[3].ToUpper().Trim(); break; case 5: if (args[2].Trim() != "") { pEditTemp = Globals.PromptAndGetEditTemplateGraphic(pTargetFL, args[2].Trim()); } else { pEditTemp = null; } sourceAction = args[3].ToUpper().Trim(); fldMatching = args[4].Trim(); break; } if (pEditTemp != null) { pNewFeat = Globals.CreateFeature(inFeature.ShapeCopy, pEditTemp, AAState._editor, ArcMap.Application, false, false, false); } else { pNewFeat = Globals.CreateFeature(inFeature.ShapeCopy, pTargetFL, AAState._editor, ArcMap.Application, false, false, false); } pEditTemp = null; if (fldMatching != null) { if (fldMatching == "") { FldPairs = new string[] { }; } else { FldPairs = fldMatching.Split(','); } } else { FldPairs = new string[] { }; } List<string> targFilds = new List<string>(); foreach (string strFlpPair in FldPairs) { string[] fldMatch = strFlpPair.Split('-'); if (fldMatch.Length != 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bd")); } else { string strSrcFldName = fldMatch[0]; string strTarFldName = fldMatch[1]; int intSrcFldIdx = Globals.GetFieldIndex((inFeature.Class as IFeatureClass).Fields, (strSrcFldName)); int intTarFldIdx = Globals.GetFieldIndex(pTargetFL.FeatureClass.Fields, strTarFldName); if (intSrcFldIdx == -1 || intTarFldIdx == -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bc")); } else { targFilds.Add(strTarFldName.ToUpper()); try { pNewFeat.set_Value(intTarFldIdx, inFeature.get_Value(intSrcFldIdx)); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14bb") + strFlpPair); } } } } IFields pTarFields = pTargetFL.FeatureClass.Fields; IField pTarField = null; for (int i = 0; i < pTarFields.FieldCount; i++) { pTarField = pTarFields.get_Field(i); if (pTarField.Type != esriFieldType.esriFieldTypeGlobalID && pTarField.Type != esriFieldType.esriFieldTypeOID && pTarField.Type != esriFieldType.esriFieldTypeGeometry && pTarField.Name.ToUpper() != "SHAPE_LENGTH" && pTarField.Name.ToUpper() != "SHAPE.LEN" && pTarField.Name.ToUpper() != "SHAPE_AREA" && pTarField.Name.ToUpper() != "SHAPE.AREA") { if (targFilds.Contains(pTarField.Name.ToUpper()) == false) { int fldIdx = inFeature.Fields.FindField(pTarField.Name); if (fldIdx > 0) { try { pNewFeat.set_Value(i, inFeature.get_Value(fldIdx)); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain46") + pTarField.Name); } } } } } pTarFields = null; pTarField = null; if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(pNewFeat); if (sourceAction == "CUT") { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain47")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain48")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "COPY_FEATURE" + Environment.NewLine + ex.Message); } finally { pTargetFL = null; pRowCh = null; pNewFeat = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "COPY_FEATURE"); } break; } case "VALIDATE_CONNECTIVITY": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "VALIDATE_CONNECTIVITY"); try { if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cb")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain49")); bool validFeat = false; if (inFeature is INetworkFeature) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain50")); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ca") + valData); args = valData.Split('|'); int connectionCnt = Globals.getConnectionCount(inFeature); foreach (string fldConPair in args) { string[] fldCon = fldConPair.Split(','); if (fldCon.Length == 1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain51")); if (Globals.IsNumeric(fldCon[0])) { if (connectionCnt == Convert.ToInt32(fldCon[0])) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain52")); validFeat = true; break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain53")); } } else { if (intFldIdxs.Count == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain51")); if (fldCon.Length == 2) { if (connectionCnt == Convert.ToInt32(fldCon[1])) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain52")); validFeat = true; break; } } if (fldCon.Length > 2) { if (connectionCnt >= Convert.ToInt32(fldCon[1]) && connectionCnt <= Convert.ToInt32(fldCon[2])) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain52")); validFeat = true; break; } } } else if (inFeature.get_Value(intFldIdxs[0]).ToString() == fldCon[0]) { if (fldCon.Length == 2) { if (connectionCnt == Convert.ToInt32(fldCon[1])) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain52")); validFeat = true; break; } } if (fldCon.Length > 2) { if (connectionCnt >= Convert.ToInt32(fldCon[1]) && connectionCnt <= Convert.ToInt32(fldCon[2])) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain52")); validFeat = true; break; } } } } } if (validFeat == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain19")); AAState._editor.AbortOperation(); return false; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain54")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain48")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "VALIDATE_CONNECTIVITY" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "VALIDATE_CONNECTIVITY"); } break; } case "VALIDATE_ATTRIBUTES": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "VALIDATE_ATTRIBUTES"); try { if ((valData != null) && (inFeature != null)) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14cb")); IRowChanges pRowCh = inObject as IRowChanges; changed = true; if (intFldIdxs != null && intFldIdxs.Count > 0 && mode != "ON_CREATE") { for (int fldIdx = 0; fldIdx < intFldIdxs.Count; fldIdx++) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain55")); changed = pRowCh.get_ValueChanged(intFldIdxs[fldIdx]); AAState.WriteLine(" " + strFldNames[fldIdx] + " changed value was " + changed); if (changed) break; } } if (changed) { args = valData.Split('|'); args = args[0].Split(','); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain56") + args); if (args.Length > 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain57")); IList<ILayer> pLayList = Globals.FindLayersByClassID(((IMxDocument)ArcMap.Application.Document).FocusMap, inObject.Class.ObjectClassID); if (pLayList != null) { if (pLayList.Count > 0) { AAState.WriteLine(" " + pLayList.Count + " Layers found"); bool ValidComb = false; foreach (ILayer pLay in pLayList) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain58") + pLay.Name); if (pLay is IFeatureLayer) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain59")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain60")); IEditTemplateManager pEdTmpManager = Globals.GetEditTemplateManager((IFeatureLayer)pLay); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain61")); ValidComb = Globals.FeatureIsValidTemplate(pEdTmpManager, inFeature, args); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain62") + ValidComb.ToString()); if (ValidComb == true) break; } } if (ValidComb == false) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain19")); AAState._editor.AbortOperation(); return false; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain63")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain63")); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain64")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "VALIDATE_ATTRIBUTES" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "VALIDATE_ATTRIBUTES"); } break; } case "SPLIT_INTERSECTING_FEATURE": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "SPLIT_INTERSECTING_FEATURE"); try { if ((valData != null) && (inFeature != null)) { intersectLayerName = ""; intersectLayer = null; args = valData.Split('|'); if (args.Length > 0) { AAState.WriteLine(" " + args.Length + " Layers listed "); for (int i = 0; i < args.Length; i++) { intersectLayerName = args[i].Trim(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain65") + intersectLayerName); boolLayerOrFC = true; if (intersectLayerName.Contains("(")) { string[] tempSplt = intersectLayerName.Split('('); intersectLayerName = tempSplt[0]; intersectLayer = Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { intersectLayer = Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC) as IFeatureLayer; } if (intersectLayer != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain66") + intersectLayerName); if (intersectLayer.FeatureClass != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain67") + intersectLayerName); double snapTol = Globals.GetXYTolerance(intersectLayer); sFilter = Globals.createSpatialFilter(intersectLayer, inFeature, false); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain68")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain69") + intersectLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain70")); pFS = (IFeatureSelection)intersectLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = intersectLayer.Search(sFilter, true); } } else { fCursor = intersectLayer.FeatureClass.Search(sFilter, true); } IFeature intsersectFeature; int idx = 1; while ((intsersectFeature = fCursor.NextFeature()) != null) { if (intsersectFeature.Class != inFeature.Class) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain71") + idx); idx++; if (intsersectFeature is INetworkFeature) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain72")); } else { ISet featset = Globals.splitLineWithPoint(intsersectFeature, inFeature.ShapeCopy as IPoint, snapTol, null, "{0:0.00}", ArcMap.Application); if (featset != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain73")); if (featset.Count > 0) { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } object featobj; while ((featobj = featset.Next()) != null) { IFeature feature = featobj as IFeature; if (feature != null) { NewFeatureList.Add(feature as IObject); } feature = null; } } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain74") + intersectLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain75") + featset.Count); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain76")); } featset = null; } } if (intsersectFeature != null) { Marshal.ReleaseComObject(intsersectFeature); } else if (intsersectFeature.Class == inFeature.Class && intsersectFeature.OID != inFeature.OID) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain71") + idx); idx++; if (intsersectFeature is INetworkFeature) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain72")); } else { ISet featset = Globals.splitLineWithPoint(intsersectFeature, inFeature.ShapeCopy as IPoint, snapTol, null, "{0:0.00}", ArcMap.Application); if (featset == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain77")); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain73")); if (featset.Count > 0) { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } object featobj; while ((featobj = featset.Next()) != null) { IFeature feature = featobj as IFeature; if (feature != null) { NewFeatureList.Add(feature as IObject); } feature = null; } } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain74") + intersectLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain75") + featset.Count); } featset = null; } if (intsersectFeature != null) { Marshal.ReleaseComObject(intsersectFeature); } } } intsersectFeature = null; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain78") + intersectLayerName); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14l") + valData); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14m")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "SPLIT_INTERSECTING_FEATURE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "SPLIT_INTERSECTING_FEATURE"); } break; } case "NEAREST_FEATURE_ATTRIBUTES": { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "NEAREST_FEATURE_ATTRIBUTES"); try { if ((valData != null) && (inFeature != null)) { sourceLayerName = ""; string[] sourceFieldNames = null; string[] destFieldNames = null; searchDistance = 0; // Parse arguments args = valData.Split('|'); if (args.Length == 3) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); destFieldNames = args[2].ToString().Split(','); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain79")); } else if (args.Length == 4) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); destFieldNames = args[2].ToString().Split(','); Double.TryParse(args[3], out searchDistance); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14d")); continue; } if ((sourceFieldNames != null) && (destFieldNames != null) && (sourceFieldNames.Length > 0) && (destFieldNames.Length > 0) && (sourceFieldNames.Length == destFieldNames.Length)) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain13") + sourceLayerName); boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC) as IFeatureLayer; } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { AAState.WriteLine(" " + sourceLayer.Name + " layer Found: " + sourceLayerName); string missingFieldMess = null; int[] sourceFieldNums = new int[sourceFieldNames.Length]; int[] destFieldNums = new int[destFieldNames.Length]; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain80")); for (int i = 0; i < sourceFieldNums.Length; i++) { int fnum = sourceLayer.FeatureClass.FindField(sourceFieldNames[i].Trim()); if (fnum < 0) { missingFieldMess = sourceFieldNames[i].Trim() + " in table " + sourceLayerName; break; } sourceFieldNums[i] = fnum; } if (missingFieldMess == null) { for (int i = 0; i < destFieldNums.Length; i++) { int fnum = inFeature.Fields.FindField(destFieldNames[i].Trim()); if (fnum < 0) { missingFieldMess = destFieldNames[i].Trim() + " in table " + tableName; break; } destFieldNums[i] = fnum; } } if (missingFieldMess == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain81")); // found source and destination fields. if (searchDistance > 0) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); } else { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain82")); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, false, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, false); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, false); } sourceFeature = fCursor.NextFeature(); nearestFeature = null; proxOp = (IProximityOperator)inFeature.Shape; lastDistance = searchDistance; if (sourceFeature != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain83")); while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } } sourceFeature = fCursor.NextFeature(); } } if (nearestFeature != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain84") + lastDistance + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain85") + nearestFeature.OID); for (int i = 0; i < sourceFieldNums.Length; i++) { try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain86") + sourceFieldNames[i] + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain87") + destFieldNames[i]); inObject.set_Value(destFieldNums[i], nearestFeature.get_Value(sourceFieldNums[i])); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14n") + sourceFieldNames[i] + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain87") + destFieldNames[i]); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain88")); for (int i = 0; i < destFieldNums.Length; i++) { IField field = inObject.Fields.get_Field(destFieldNums[i]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(destFieldNums[i], null); } } else { inObject.set_Value(destFieldNums[i], newval); } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14o") + missingFieldMess); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayerName + " data source is not set"); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14e") + valData); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14f")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "NEAREST_FEATURE_ATTRIBUTES" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "NEAREST_FEATURE_ATTRIBUTES"); } break; } case "MINIMUM_LENGTH": { try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "MINIMUM_LENGTH"); double minlength; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain89")); if (Double.TryParse(valData, out minlength)) { if (inFeature != null) { ICurve curve = inFeature.Shape as ICurve; if (curve != null) { if (curve.Length < minlength) { String mess = "Line is shorter than " + String.Format("{0:0.00}", minlength) + " " + Globals.GetSpatRefUnitName(inFeature.Shape.SpatialReference, true) + ", aborting edit."; AAState.WriteLine(" " + mess); MessageBox.Show(mess, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain90")); AAState._editor.AbortOperation(); return false; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14p")); } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "MINIMUM_LENGTH \n" + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "MINIMUM_LENGTH"); } break; } case "LINK_TABLE_ASSET": try { intersectLayerName = ""; intersectTable = null; intersectLayer = null; List<string> intersectLayerFieldNameList = new List<string>(); List<int> intersectFieldPosList = new List<int>(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "LINK_TABLE_ASSET"); args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // Feature Layer only intersectLayerName = args[0].ToString(); break; case 2: // Feature Layer| Field to copy intersectLayerName = args[0].ToString(); intersectLayerFieldNameList = new List<string>(args[1].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); break; case 3: // Feature Layer| Field to copy | for future intersectLayerName = args[0].ToString(); intersectLayerFieldNameList = new List<string>(args[1].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14q") + valData); continue; } bool FCorLayerIntersect = true; intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref FCorLayerIntersect); intersectTable = Globals.FindStandAloneTable(AAState._editor.Map, intersectLayerName); if (intersectLayer != null) { //Find Area Field foreach (string intersectLayerFieldName in intersectLayerFieldNameList) { intersectFieldPos = intersectLayer.FeatureClass.Fields.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14r") +"(" + intersectLayerFieldName + ") not found"); break; } else { intersectFieldPosList.Add(intersectFieldPos); } } intersectLayerSelection = (IFeatureSelection)intersectLayer; if (intersectLayerSelection.SelectionSet.Count == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14s") + intersectLayerName); break; } if (intersectLayerSelection.SelectionSet.Count > 1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14t") + intersectLayerName); break; } intersectLayerSelection.SelectionSet.Search(null, true, out cCurs); } else if (intersectTable != null) { if (intersectTable.Table == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14u") + "(" + intersectLayerName + ") not found"); break; } foreach (string intersectLayerFieldName in intersectLayerFieldNameList) { intersectFieldPos = intersectTable.Table.Fields.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14v") + "(" + intersectLayerFieldName + ") not found"); break; } else { intersectFieldPosList.Add(intersectFieldPos); } } intersectTableSelection = (ITableSelection)intersectTable; if (intersectTableSelection.SelectionSet.Count == 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14s") + intersectLayerName); break; } if (intersectTableSelection.SelectionSet.Count > 1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14t") + intersectLayerName); break; } intersectTableSelection.SelectionSet.Search(null, true, out cCurs); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14u") + "(" + intersectLayerName + ") not found"); break; } IRow row; while ((row = cCurs.NextRow()) != null) { int idx = 0; foreach (int fldIdxInt in intersectFieldPosList) { if (idx >= intFldIdxs.Count) continue; string val = row.get_Value(fldIdxInt).ToString(); if (inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[idx], val); else if (inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeSmallInteger || inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeInteger) { if (Globals.IsNumeric(val)) { inObject.set_Value(intFldIdxs[idx], Convert.ToInt32(val)); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14w") + val); } } else if (inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeSingle || inObject.Fields.get_Field(intFldIdxs[idx]).Type == esriFieldType.esriFieldTypeDouble) { if (Globals.IsNumeric(val)) { inObject.set_Value(intFldIdxs[idx], Convert.ToDouble(val)); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14x") + val); } } else { inObject.set_Value(intFldIdxs[idx], val); } idx++; } } if (row != null) Marshal.ReleaseComObject(cCurs); row = null; } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "LINK_TABLE_ASSET" + Environment.NewLine + ex.Message); } finally { if (cCurs != null) { Marshal.ReleaseComObject(cCurs); GC.Collect(300); GC.WaitForFullGCComplete(); cCurs = null; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "LINK_TABLE_ASSET"); } break; case "GET_ADDRESS_FROM_CENTERLINE": AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "GET_ADDRESS_FROM_CENTERLINE"); List<IPoint> pPnts = null; try { if ((valData != null) && (inFeature != null)) { sourceLayerName = ""; string[] sourceFieldNames = null; searchDistance = 0; // Parse arguments args = valData.Split('|'); if (args.Length == 2) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); searchDistance = 2; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain79")); } else if (args.Length == 3) { sourceLayerName = args[0].ToString().Trim(); sourceFieldNames = args[1].ToString().Split(','); Double.TryParse(args[2], out searchDistance); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14d")); continue; } if (sourceFieldNames.Length != 5) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14y")); continue; } boolLayerOrFC = false; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } pPnts = Globals.GetGeomCenter(inObject as IFeature); if (pPnts.Count != 0) { AddressInfo pRetValu = Globals.GetAddressInfo(ArcMap.Application, pPnts[0] as IPoint, sourceLayerName, sourceFieldNames[0].Trim(), sourceFieldNames[1].Trim(), sourceFieldNames[2].Trim(), sourceFieldNames[3].Trim(), sourceFieldNames[4].Trim(), false, searchDistance); if (pRetValu != null) { if (pRetValu.Messages == "") { bool rightSide = true; IPoint pPnt = Globals.GetPointOnLine((inObject as IFeature).Shape as IPoint, pRetValu.StreetGeometry as IPolyline, 400, out rightSide); try { if (strFldNames.Count == 2) { if (intFldIdxs[0] != -1) { if (rightSide) { inObject.set_Value(intFldIdxs[0], pRetValu.RightAddress); } else { inObject.set_Value(intFldIdxs[0], pRetValu.LeftAddress); } } if (intFldIdxs[1] != -1) inObject.set_Value(intFldIdxs[1], pRetValu.StreetName); } else { if (intFldIdxs[0] != -1) { if (rightSide) { inObject.set_Value(intFldIdxs[0], pRetValu.RightAddress + " " + pRetValu.StreetName); } else { inObject.set_Value(intFldIdxs[0], pRetValu.LeftAddress + " " + pRetValu.StreetName); } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14z") + Environment.NewLine + ex.Message); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aa") + pRetValu.Messages); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ab")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ac")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GET_ADDRESS_FROM_CENTERLINE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "GET_ADDRESS_FROM_CENTERLINE"); pPnts = null; } break; case "GET_ADDRESS_USING_GEOCODER": { IReverseGeocoding reverseGeocoding = null; IAddressGeocoding addressGeocoding = null; IPoint revGCLoc = null; IFields matchFields = null; IField shapeField = null; IReverseGeocodingProperties reverseGeocodingProperties = null; IPropertySet addressProperties = null; IAddressInputs addressInputs = null; IFields addressFields = null; object key = null; object value = null; try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "GET_ADDRESS_USING_GEOCODER"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain91")); reverseGeocoding = Globals.OpenLocator(args[0], args[1]); if (reverseGeocoding == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ae")); break; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain92")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain93")); revGCLoc = Globals.GetGeomCenter(inFeature)[0]; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain94")); // Create a Point at which to find the address. addressGeocoding = (IAddressGeocoding)reverseGeocoding; matchFields = addressGeocoding.MatchFields; int shpFld = matchFields.FindField("Shape"); shapeField = matchFields.get_Field(shpFld); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain95")); // Set the search tolerance for reverse geocoding. reverseGeocodingProperties = (IReverseGeocodingProperties)reverseGeocoding; reverseGeocodingProperties.SearchDistance = 100; reverseGeocodingProperties.SearchDistanceUnits = esriUnits.esriFeet; reverseGeocoding.InitDefaults(); // Find the address nearest the Point. addressProperties = reverseGeocoding.ReverseGeocode(revGCLoc, false); // Print the address properties. addressInputs = (IAddressInputs)reverseGeocoding; addressFields = addressInputs.AddressFields; addressProperties.GetAllProperties(out key, out value); string tempVal = ""; for (int i = 0; i < addressFields.FieldCount; i++) { IField addressField = addressFields.get_Field(i); if (tempVal == "") { tempVal = addressProperties.GetProperty(addressField.Name).ToString(); } else { tempVal = tempVal + ", " + addressProperties.GetProperty(addressField.Name).ToString(); } } inFeature.set_Value(intFldIdxs[0], tempVal); } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GET_ADDRESS_USING_GEOCODER" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "GET_ADDRESS_USING_GEOCODER"); reverseGeocoding = null; addressGeocoding = null; revGCLoc = null; matchFields = null; shapeField = null; reverseGeocodingProperties = null; addressProperties = null; addressInputs = null; addressFields = null; key = null; value = null; } break; } case "GET_ADDRESS_USING_ARCGIS_SERVICE": //ARGS: url try { IPoint revGCLoc = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "GET_ADDRESS_USING_ARCGIS_SERVICE"); if (fieldObj.Type == esriFieldType.esriFieldTypeString) { if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { args = valData.Split('|'); revGCLoc = Globals.GetGeomCenter(inFeature)[0]; int wkid = inFeature.Shape.SpatialReference.FactoryCode; if (revGCLoc != null) { //Test for user specified URL if (valData.Trim() != "") { if (args.Length == 2) { wkid = Convert.ToInt32(args[1]); } if (Globals.IsUrl(args[0])) { locatorURL = args[0]; if (!(locatorURL.EndsWith(reverseGeocodeStr))) { if (!(locatorURL.EndsWith(GeocodeStr))) { if (!(locatorURL.EndsWith("/"))) { locatorURL += "/" + GeocodeStr + "/" + reverseGeocodeStr; } else { locatorURL += GeocodeStr + "/" + reverseGeocodeStr; } } else { if (!(locatorURL.EndsWith("/"))) { locatorURL += "/" + reverseGeocodeStr; } else { locatorURL += reverseGeocodeStr; } } } } //else if (args[0] == "TA_Streets_US_10") //{ // locatorURL = _agsOnlineLocators + args[0] + GeocodeStr + "/" + reverseGeocodeStr; // // wkid = 102100; //} //else if (args[0] == "TA_Address_NA_10" || args[0] == "TA_Address_EU") //{ // locatorURL = _agsOnlineLocators + args[0] + GeocodeStr + "/" + reverseGeocodeStr; // // wkid = 4326; //} ////Default to AGS Online USA geocode service //else if (_agsOnlineLocators.Substring(_agsOnlineLocators.LastIndexOf('/', _agsOnlineLocators.Length - 2)).Contains("Locator")) //{ // locatorURL = _agsOnlineLocators + "TA_Address_NA_10" + GeocodeStr + "/" + reverseGeocodeStr; // // wkid = 4326; //} else { locatorURL = _agsOnlineLocators + GeocodeStr + "/" + reverseGeocodeStr; ; // wkid = 4326; } } else { if (_agsOnlineLocators.Substring(_agsOnlineLocators.LastIndexOf('/', _agsOnlineLocators.Length - 2)).Contains(GeocodeStr)) { locatorURL = _agsOnlineLocators + "/" + reverseGeocodeStr; // wkid = 4326; } else { _agsOnlineLocators = _agsOnlineLocators + "/" + GeocodeStr; locatorURL = _agsOnlineLocators + "/" + reverseGeocodeStr; // wkid = 4326; } } if (!locatorURL.ToUpper().Contains("/REST/")) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14af")); } else { //Copy point from this current feature _copyPoint = revGCLoc;//inFeature.ShapeCopy as IPoint; StreamReader reader = null; HttpWebRequest request = null; try { // Create the web request request = WebRequest.Create(_agsOnlineLocators) as HttpWebRequest; // Get response using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { // Get the response stream reader = new StreamReader(response.GetResponseStream()); string resp = reader.ReadToEnd(); resp = resp.Substring(resp.IndexOf("Spatial Reference:")); resp = resp.Substring(0, resp.IndexOf("<br/>")); resp = resp.Substring(resp.IndexOf("</b>") + 4); wkid = Convert.ToInt32(resp.Split(' ')[0]); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain96")); wkid = 4326; } finally { reader = null; request = null; } _copyPoint.Project(Globals.CreateSpatRef(wkid)); //Include location parameters in URL string results = Globals.FormatLocationRequest(locatorURL, _copyPoint.X, _copyPoint.Y, 100); //Send and receieve the request WebRequest req = null; WebResponse res = null; XmlDictionaryReader xr = null; XmlDocument doc = null; try { req = WebRequest.Create(results); res = req.GetResponse(); //Convert response from JSON to XML doc = new XmlDocument(); using (Stream s = res.GetResponseStream()) { xr = JsonReaderWriterFactory.CreateJsonReader(s, XmlDictionaryReaderQuotas.Max); doc.Load(xr); xr.Close(); s.Close(); string val = ""; for (int h = 0; h < doc.DocumentElement.FirstChild.ChildNodes.Count - 1; h++) { if (doc.DocumentElement.FirstChild.ChildNodes[h].Name.Contains("Match") == false) { if (val == "") { val = doc.DocumentElement.FirstChild.ChildNodes[h].InnerText; } else { if (val.EndsWith(",")) val = val + " " + doc.DocumentElement.FirstChild.ChildNodes[h].InnerText; else val = val + ", " + doc.DocumentElement.FirstChild.ChildNodes[h].InnerText; } } val = val.Trim(); } inFeature.set_Value(intFldIdxs[0], val); } } catch { } finally { req = null; res = null; xr = null; doc = null; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain97")); } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GET_ADDRESS_USING_ARCGIS_SERVICE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "GET_ADDRESS_USING_ARCGIS_SERVICE"); } break; case "TIMESTAMP": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TIMESTAMP"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length > 0) { try { if (fieldObj.Type == esriFieldType.esriFieldTypeDate) { if (args[0].ToString().ToUpper() == "DATE") { inObject.set_Value(intFldIdxs[0], DateTime.Now.Date); } else if (args[0].ToString().Trim() != "") { try { inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString(args[0])); } catch { inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } else { inObject.set_Value(intFldIdxs[0], DateTime.Now); } } else if (fieldObj.Type == esriFieldType.esriFieldTypeString) { if (args[0].ToString().ToUpper() == "DATE") { inObject.set_Value(intFldIdxs[0], DateTime.Now.Date); } else if (args[0].ToString().ToUpper() == "TIME") { inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString("hh:mm:ss tt")); } else if (args[0].ToString().ToUpper() == "TIME24") { // ReadOnlyCollection<System.TimeZoneInfo> timeZones = System.TimeZoneInfo.GetSystemTimeZones(); // string s = System.TimeZoneInfo.ConvertTime(DateTime.Now, timeZones[0]).ToString("HH:mm:ss"); inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString("HH:mm:ss")); } else if (args[0].ToString().ToUpper() == "YEAR") { inObject.set_Value(intFldIdxs[0], DateTime.Now.Year.ToString()); } else if (args[0].ToString().ToUpper() == "MONTH") { inObject.set_Value(intFldIdxs[0], DateTime.Now.Month.ToString()); } else if (args[0].ToString().ToUpper() == "DAY") { inObject.set_Value(intFldIdxs[0], DateTime.Now.DayOfWeek.ToString()); } else if (args[0].ToString().Trim() != "") { try { inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString(args[0])); } catch { inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } else { inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ag")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain98")); if (fieldObj.Type == esriFieldType.esriFieldTypeDate) inObject.set_Value(intFldIdxs[0], DateTime.Now); else if (fieldObj.Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain98")); if (fieldObj.Type == esriFieldType.esriFieldTypeDate) inObject.set_Value(intFldIdxs[0], DateTime.Now); else if (fieldObj.Type == esriFieldType.esriFieldTypeString) inObject.set_Value(intFldIdxs[0], DateTime.Now.ToString()); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TIMESTAMP: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TIMESTAMP"); } break; case "LAST_VALUE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "LAST_VALUE"); bool CheckForValue = false; if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length > 0) { if (args[0].ToString().ToUpper() == "TRUE") { CheckForValue = true; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain98")); } if (CheckForValue && (inObject.get_Value(intFldIdxs[0]) != null && inObject.get_Value(intFldIdxs[0]) != DBNull.Value)) { } else { if (mode == "ON_CREATE") { lastValue = AAState.lastValueProperties.GetProperty(strFldNames[0]) as LastValueEntry; if (lastValue == null) { if (inObject.get_Value(intFldIdxs[0]) != null) { if (inObject.get_Value(intFldIdxs[0]) != DBNull.Value) { AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); } } } else if (lastValue.Value != null) { if (lastValue.Value != DBNull.Value) { inObject.set_Value(intFldIdxs[0], lastValue.Value); AAState.WriteLine(" " + strFldNames[0] + ": " + lastValue.Value); } } else { if (inObject.get_Value(intFldIdxs[0]) != null) { if (inObject.get_Value(intFldIdxs[0]) != DBNull.Value) { AAState.lastValueProperties.SetProperty(strFldNames[0], inObject.get_Value(intFldIdxs[0])); } } } } else if (mode == "ON_CHANGE") { IRowChanges pRowCh = inObject as IRowChanges; changed = pRowCh.get_ValueChanged(intFldIdxs[0]); if (!changed) { lastValue = AAState.lastValueProperties.GetProperty(strFldNames[0]) as LastValueEntry; if (lastValue != null) { if (lastValue.Value != null) { inObject.set_Value(intFldIdxs[0], lastValue.Value); AAState.WriteLine(" " + strFldNames[0] + ": " + lastValue.Value); } } } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "LAST_VALUE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "LAST_VALUE"); } break; case "X_COORDINATE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "X_COORDINATE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.Shape as IPoint; inFeature.set_Value(intFldIdxs[0], _copyPoint.X); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.Shape as IPolyline; if (valData.Trim() == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].X); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.FromPoint.X); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.ToPoint.X); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].X); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; if (valData.Trim() == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].X); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolygon.FromPoint.X); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolygon.ToPoint.X); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].X); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ah")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "X_COORDINATE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "X_COORDINATE"); } break; case "Y_COORDINATE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "Y_COORDINATE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.Shape as IPoint; inFeature.set_Value(intFldIdxs[0], _copyPoint.Y); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.Shape as IPolyline; if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].Y); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.FromPoint.Y); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolyline.ToPoint.Y); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolyline)[0].Y); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; if (valData.Trim() == "") { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].Y); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], _copyPolygon.FromPoint.Y); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], _copyPolygon.ToPoint.Y); } else { inFeature.set_Value(intFldIdxs[0], Globals.GetGeomCenter(_copyPolygon)[0].Y); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ah")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "Y_COORDINATE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "Y_COORDINATE"); } break; case "LATITUDE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "LATITUDE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.ShapeCopy as IPoint; _copyPoint.Project(AAState._sr1); inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPoint.Y.ToString())); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.ShapeCopy as IPolyline; _copyPolyline.Project(AAState._sr1); if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolyline)[0].Y.ToString())); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolyline.FromPoint.Y.ToString())); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolyline.ToPoint.Y.ToString())); } else { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolyline)[0].Y.ToString())); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; _copyPolygon.Project(AAState._sr1); if (valData.Trim() == "") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolygon)[0].Y.ToString())); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolygon.FromPoint.Y.ToString())); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolygon.ToPoint.Y.ToString())); } else { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolygon)[0].Y.ToString())); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ah")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "LATITUDE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "LATITUDE"); } break; case "LONGITUDE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "LONGITUDE"); if ((inFeature != null) && (inFeature.Shape != null) && !(inFeature.Shape.IsEmpty)) { if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) { _copyPoint = inFeature.ShapeCopy as IPoint; _copyPoint.Project(AAState._sr1); inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPoint.X.ToString())); } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { _copyPolyline = inFeature.Shape as IPolyline; _copyPolyline.Project(AAState._sr1); if (valData == "") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolyline)[0].X.ToString())); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolyline.FromPoint.X.ToString())); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolyline.ToPoint.X.ToString())); } else { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolyline)[0].X.ToString())); } } } else if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { _copyPolygon = inFeature.ShapeCopy as IPolygon; _copyPolygon.Project(AAState._sr1); if (valData.Trim() == "") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolygon)[0].X.ToString())); } else { args = valData.Split('|'); if (args[0].ToUpper() == "S") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolygon.FromPoint.X.ToString())); } else if (args[0].ToUpper() == "E") { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), _copyPolygon.ToPoint.X.ToString())); } else { inFeature.set_Value(intFldIdxs[0], Globals.FormatValueToFieldLength(inFeature.Fields.get_Field(intFldIdxs[0]), Globals.GetGeomCenter(_copyPolygon)[0].X.ToString())); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ah")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "LONGITUDE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "LONGITUDE"); } break; case "FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "Field"); // verify that field to copy exists if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); fieldCopy = inObject.Fields.FindField(args[0] as string); if (fieldCopy > -1) { bool useDisplayValue = true; if (args.Length == 2) { if (args[1].ToUpper() == "CODE") useDisplayValue = false; } try { if (useDisplayValue) { inObject.set_Value(intFldIdxs[0], Globals.GetDomainDisplay(inObject.get_Value(fieldCopy), inObject as IFeature, inObject.Fields.get_Field(fieldCopy))); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } else { inObject.set_Value(intFldIdxs[0], inObject.get_Value(fieldCopy)); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + ex.Message); } } else { AAState.WriteLine(" " + valData + " is not found"); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "Field: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "Field"); } break; //CURRENT_USER //Value Data options: //U - windows username only //W or (blank) - full username including domain i.e. domain\username //D - database user if available and not dbo case "CURRENT_USER": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "CURRENT_USER"); lastEditorName = AAState._currentUserInfo.GetCurrentUser(valData, fieldObj.Length); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain99") + lastEditorName); if (!String.IsNullOrEmpty(lastEditorName)) { inObject.set_Value(intFldIdxs[0], lastEditorName); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CURRENT_USER: "******"AttributeAssistantEditorMess_14as") + "CURRENT_USER"); } break; case "JUNCTION_ROTATION": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "JUNCTION_ROTATION"); if ((inFeature != null)) { AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic; args = null; AAState.rCalc.UseDiameter = false; AAState.rCalc.DiameterFieldName = ""; AAState.rCalc.SpinAngle = 0; if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length == 0) { AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic; } else if (args.Length == 1) { if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; } else if (args.Length == 2) { if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; if (Globals.IsNumeric(args[1].ToString())) AAState.rCalc.SpinAngle = Convert.ToDouble(args[1]); } else if (args.Length == 3) { if (args[0].Substring(0, 1).ToLower() == "a") AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic; if (Globals.IsNumeric(args[1].ToString())) AAState.rCalc.SpinAngle = Convert.ToDouble(args[1]); AAState.rCalc.UseDiameter = true; AAState.rCalc.DiameterFieldName = args[2].ToString(); } else { AAState.rCalc.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic; } } AAState.WriteLine(" " + AAState.rCalc.RotationType.ToString() + " is being used"); rotationAngle = AAState.rCalc.GetRotationUsingConnectedEdges(inFeature); if (rotationAngle == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain100")); continue; } //Accept optional second argument to provide extra rotation if (rotationAngle != -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain101") + rotationAngle.ToString()); inObject.set_Value(intFldIdxs[0], rotationAngle); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain102")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "JUNCTION_ROTATION \r\n" + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "JUNCTION_ROTATION"); } break; //For Release: 1.2 //New Dynamic Value Method: Length - stores calculated length of line feature case "LENGTH": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "LENGTH"); if (inFeature != null) { curve = (ICurve)inFeature.Shape; if (curve != null) { inObject.set_Value(intFldIdxs[0], curve.Length); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "LENGTH: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "LENGTH"); } break; //Release: 1.2 //New Dynamic Value Method: SET_MEASURES - stores calculated M values (from 0 to length of line) for line feature //Value Data options: //P = Percent - Ms will be zero to 100 //default - Ms will be zero to length of line case "SET_MEASURES": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "SET_MEASURES"); if (inFeature != null) { curve = inFeature.Shape as ICurve; mseg = inFeature.Shape as IMSegmentation; if (curve != null && mseg != null) if (valData != null && valData != "" && valData.Substring(0, 1).ToUpper() == "P") mseg.SetAndInterpolateMsBetween(0, 100); else mseg.SetAndInterpolateMsBetween(0, curve.Length); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "SET_MEASURES: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "SET_MEASURES"); } break; //case "EDGE_INTERSECT_SECOND": // try // { // if (inFeature != null) // { // netFeat = inFeature as INetworkFeature; // if (netFeat != null) // { // if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) // { // iJuncFeat = (IJunctionFeature)netFeat; // // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; // ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; // if (iSJunc == null) // break; // if (iSJunc.EdgeFeatureCount <= 1) // break; // iEdgeFeat = iSJunc.get_EdgeFeature(1); // // verify that field (in junction) to copy exists // IRow pRow = iEdgeFeat as IRow; // juncField = pRow.Fields.FindField(valData as string); // if (juncField > -1) // { // inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); // } // } // } // } // } // catch // { // } // break; //case "EDGE_INTERSECT_FIRST": // try // { // if (inFeature != null) // { // netFeat = inFeature as INetworkFeature; // if (netFeat != null) // { // if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) // { // iJuncFeat = (IJunctionFeature)netFeat; // // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; // ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; // if (iSJunc == null) // break; // if (iSJunc.EdgeFeatureCount <= 0) // break; // iEdgeFeat = iSJunc.get_EdgeFeature(0); // IRow pRow = iEdgeFeat as IRow; // juncField = pRow.Fields.FindField(valData as string); // if (juncField > -1) // { // inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); // } // } // } // } // } // catch // { // } // break; //Release: 2.0 //New Dynamic Value Method: TO_EDGE_FIELD transfers a field value from a connected egde feature to a junction feature //Takes value from the frist edge whose "TO" point connects with this junction case "TO_EDGE_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TO_EDGE_FIELD"); if (inFeature != null) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); continue; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); continue; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } iJuncFeat = (IJunctionFeature)iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(pRow.Fields, netField); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); } else { AAState.WriteLine(" " + netField + " field not found in edge"); } pRow = null; break; } } catch { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14an")); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } iSJunc = null; } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_EDGE_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_EDGE_FIELD"); } break; //Release: 2.0 //New Dynamic Value Method: FROM_EDGE_FIELD transfers a field value from a connected egde feature to a junction feature //Takes value from the frist edge whose "FROM" point connects with this junction case "FROM_EDGE_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "FROM_EDGE_FIELD"); if (inFeature != null) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); continue; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); continue; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(pRow.Fields, netField); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], pRow.get_Value(juncField)); } else { AAState.WriteLine(" " + iSJunc + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); } pRow = null; break; } } catch { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14an")); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } iSJunc = null; } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "FROM_EDGE_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "FROM_EDGE_FIELD"); } break; case "TO_EDGE_STATS": try { if (valData == null) break; args = valData.Split('|'); string statType = "MAX"; switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[0].ToString(); statType = args[1].ToString(); break; default: break; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TO_EDGE_STATS"); int AverageCount = 0; double result = -999999.1; string textRes = ""; if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain103")); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain104")); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain106")); iJuncFeat = iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain107")); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain108")); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14d") + test); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain109")); } } catch { } }//end loop try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aj") + ex.Message); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_EDGE_STATS"); } break; case "FROM_EDGE_STATS": try { if (valData == null) break; args = valData.Split('|'); string statType = "MAX"; switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[0].ToString(); statType = args[1].ToString(); break; default: break; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "FROM_EDGE_STATS"); int AverageCount = 0; double result = -999999.1; string textRes = ""; if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain103")); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain104")); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain106")); iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain110")); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain111")); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14d") + test); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain112")); } } catch { } }//end loop try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aj") + ex.Message); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_EDGE_STATS"); } break; case "EDGE_STATS": try { if (valData == null) break; args = valData.Split('|'); string statType = "MAX"; switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[0].ToString(); statType = args[1].ToString(); break; default: break; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "EDGE_STATS"); int AverageCount = 0; double result = -999999.1; string textRes = ""; if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain103")); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain104")); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain113")); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14d") + test); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } catch { } }//end loop try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aj") + ex.Message); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_EDGE_STATS"); } break; case "TO_EDGE_MULTI_FIELD_INTERSECT": try { if (valData == null) break; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int popFldIdx = 0; if (args.GetLength(0) >= 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain114")); sourceFieldName = args[0].ToString(); string[] fieldsToPop = args[1].ToString().Split(','); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TO_EDGE_MULTI_FIELD_INTERSECT"); if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain103")); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain104")); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain106")); iJuncFeat = iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain107")); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain108")); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (fieldsToPop.Length == popFldIdx) break; int tempFieldNum = inObject.Fields.FindField(fieldsToPop[popFldIdx]); if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, test); popFldIdx++; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain109")); } } catch { } }//end loop } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_EDGE_STATS"); } break; case "FROM_EDGE_MULTI_FIELD_INTERSECT": try { if (valData == null) break; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int popFldIdx = 0; if (args.GetLength(0) >= 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain114")); sourceFieldName = args[0].ToString(); string[] fieldsToPop = args[1].ToString().Split(','); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "FROM_EDGE_MULTI_FIELD_INTERSECT"); if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain103")); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain104")); iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); iEdgeFeat = iSJunc.get_EdgeFeature(i); try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain106")); iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain110")); IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain111")); juncField = pRow.Fields.FindField(sourceFieldName); string test = pRow.get_Value(juncField).ToString(); if (fieldsToPop.Length == popFldIdx) break; int tempFieldNum = inObject.Fields.FindField(fieldsToPop[popFldIdx]); if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, test); popFldIdx++; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain112")); } } catch { } }//end loop } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_EDGE_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_EDGE_STATS"); } break; case "FROM_JUNCTION_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "FROM_JUNCTION_FIELD"); if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.FromJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); break; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); break; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netField); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], ((IFeature)iJuncFeat).get_Value(juncField)); } else AAState.WriteLine(" " + netField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); } else AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bc")); } else AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain115")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "FROM_JUNCTION_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "FROM_JUNCTION_FIELD"); } break; //Release: 1.2 //New Dynamic Value Method: TO_JUNCTION_FIELD transfers a field value from a junction connected at terminal end of a line feature case "TO_JUNCTION_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TO_JUNCTION_FIELD"); if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.ToJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); break; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); break; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netField); //juncField = ((IFeature)iJuncFeat).Fields.FindField(valData as string); if (juncField > -1) { inObject.set_Value(intFldIdxs[0], ((IFeature)iJuncFeat).get_Value(juncField)); } else { AAState.WriteLine(" " + netField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bc")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bd")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TO_JUNCTION_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TO_JUNCTION_FIELD"); } break; case "UPDATE_TO_JUNCTION_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "UPDATE_TO_JUNCTION_FIELD"); IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.ToJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); break; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); break; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netField); //juncField = ((IFeature)iJuncFeat).Fields.FindField(valData as string); if (juncField > -1) { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ((IFeature)iJuncFeat).set_Value(juncField, inObject.get_Value(intFldIdxs[0])); ChangeFeatureList.Add(((IFeature)iJuncFeat)); } else { AAState.WriteLine(" " + netField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bc")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bd")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "UPDATE_TO_JUNCTION_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "UPDATE_TO_JUNCTION_FIELD"); } break; case "UPDATE_FROM_JUNCTION_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "UPDATE_FROM_JUNCTION_FIELD"); IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: netField = args[0].ToString().Trim(); break; case 2: netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.FromJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); break; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); break; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netField); //juncField = ((IFeature)iJuncFeat).Fields.FindField(valData as string); if (juncField > -1) { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ((IFeature)iJuncFeat).set_Value(juncField, inObject.get_Value(intFldIdxs[0])); ChangeFeatureList.Add(((IFeature)iJuncFeat)); } else { AAState.WriteLine(" " + netField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bc")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bd")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "UPDATE_FROM_JUNCTION_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "UPDATE_FROM_JUNCTION_FIELD"); } break; case "UPDATE_FROM_EDGE_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "UPDATE_FROM_EDGE_FIELD"); if (inFeature != null) { IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); continue; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); continue; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { IFeature pRow = iEdgeFeat as IFeature; // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(pRow.Fields, netField); if (juncField > -1) { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } pRow.set_Value(juncField, inObject.get_Value(intFldIdxs[0])); ChangeFeatureList.Add(((IFeature)pRow)); } else { AAState.WriteLine(" " + iSJunc + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14am") ); } pRow = null; break; } } catch { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14an")); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } iSJunc = null; } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "UPDATE_FROM_EDGE_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "UPDATE_FROM_EDGE_FIELD"); } break; case "UPDATE_TO_EDGE_FIELD": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "UPDATE_TO_EDGE_FIELD"); if (inFeature != null) { IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); continue; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); continue; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } iJuncFeat = (IJunctionFeature)iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { IFeature pRow = iEdgeFeat as IFeature; // verify that field (in junction) to copy exists juncField = Globals.GetFieldIndex(pRow.Fields, netField); if (juncField > -1) { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } pRow.set_Value(juncField, inObject.get_Value(intFldIdxs[0])); ChangeFeatureList.Add(((IFeature)pRow)); } else { AAState.WriteLine(" " + netField + " field not found in edge"); } pRow = null; break; } } catch { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14an")); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } iSJunc = null; } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "UPDATE_TO_EDGE_FIELD: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "UPDATE_TO_EDGE_FIELD"); } break; //***************8 case "TRIGGER_UPDATE_INTERSECTING_FEATURE"://Intersected Feature|FieldIntersectingFeatureToChange|FromFieldinModifiedFeature { try { IFeatureCursor fLocalCursor = null; IFeature sourceFeatureLocal = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TRIGGER_UPDATE_INTERSECTING_FEATURE"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 3) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } if (inFeature == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ak")); break; } bool cont = true; if (intFldIdxs.Count > 1) { IRowChanges inChanges = inObject as IRowChanges; if (inChanges.get_ValueChanged(intFldIdxs[0])) { cont = true; } else { cont = false; } inChanges = null; } if (cont) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bs")); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString().Trim(); string targetFieldName = args[2].ToString().Trim(); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bt")); if (sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0].Trim(); sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (Globals.IsEditable(ref sourceLayer, ref AAState._editor)) { if (inObject.Class.ObjectClassID != sourceLayer.FeatureClass.ObjectClassID) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, false, out cCurs); fLocalCursor = cCurs as IFeatureCursor; } else { fLocalCursor = sourceLayer.Search(sFilter, false); } } else { fLocalCursor = sourceLayer.FeatureClass.Search(sFilter, false); } while ((sourceFeatureLocal = fLocalCursor.NextFeature()) != null) { try { if (sourceFeatureLocal.Class.ObjectClassID != inFeature.Class.ObjectClassID) { if (sourceFieldName == "CREATE") { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(((IFeature)sourceFeatureLocal)); } else if (sourceFieldName == "CHANGEGEO") { if (ChangeFeatureGeoList == null) { ChangeFeatureGeoList = new List<IObject>(); } ChangeFeatureGeoList.Add(((IFeature)sourceFeatureLocal)); } else { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(((IFeature)sourceFeatureLocal)); } } else if (sourceFeatureLocal.Class == inFeature.Class && sourceFeatureLocal.OID != inFeature.OID) { if (sourceFieldName == "CREATE") { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(((IFeature)sourceFeatureLocal)); } else if (sourceFieldName == "CHANGEGEO") { if (ChangeFeatureGeoList == null) { ChangeFeatureGeoList = new List<IObject>(); } ChangeFeatureGeoList.Add(((IFeature)sourceFeatureLocal)); } else { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(((IFeature)sourceFeatureLocal)); } } } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14al")); } finally { } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14b") + sourceLayerName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } } } if (found) { break; } } fLocalCursor = null; sourceFeatureLocal = null; } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TRIGGER_UPDATE_INTERSECTING_FEATURE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TRIGGER_UPDATE_INTERSECTING_FEATURE"); } break; } case "TRIGGER_UPDATE_TO_JUNCTION": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TRIGGER_UPDATE_TO_JUNCTION"); IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.ToJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); break; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); break; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } // verify that field (in junction) to copy exists if (netField == "CREATE") { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(((IFeature)iJuncFeat)); } else if (netField == "CHANGEGEO") { if (ChangeFeatureGeoList == null) { ChangeFeatureGeoList = new List<IObject>(); } ChangeFeatureGeoList.Add(((IFeature)iJuncFeat)); } else { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(((IFeature)iJuncFeat)); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bc")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bd")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TRIGGER_UPDATE_TO_JUNCTION: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TRIGGER_UPDATE_TO_JUNCTION"); } break; case "TRIGGER_UPDATE_FROM_JUNCTION": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TRIGGER_UPDATE_FROM_JUNCTION"); IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } if (inFeature != null) { netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexEdge || inFeature.FeatureType == esriFeatureType.esriFTSimpleEdge) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: netField = args[0].ToString().Trim(); break; case 2: netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iEdgeFeat = (IEdgeFeature)netFeat; iJuncFeat = iEdgeFeat.FromJunctionFeature; if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iJuncFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); break; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iJuncFeat).Fields, netRestrictField); if (intTmpFld > -1) { if (((IFeature)iJuncFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); break; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } if (netField == "CREATE") { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(((IFeature)iJuncFeat)); } else if (netField == "CHANGEGEO") { if (ChangeFeatureGeoList == null) { ChangeFeatureGeoList = new List<IObject>(); } ChangeFeatureGeoList.Add(((IFeature)iJuncFeat)); } else { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(((IFeature)iJuncFeat)); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bc")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bd")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TRIGGER_UPDATE_FROM_JUNCTION: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TRIGGER_UPDATE_FROM_JUNCTION"); } break; case "TRIGGER_UPDATE_FROM_EDGE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TRIGGER_UPDATE_FROM_EDGE"); if (inFeature != null) { IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); continue; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); continue; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } iJuncFeat = iEdgeFeat.ToJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { if (netField == "CREATE") { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(((IFeature)iEdgeFeat)); } else if (netField == "CHANGEGEO") { if (ChangeFeatureGeoList == null) { ChangeFeatureGeoList = new List<IObject>(); } ChangeFeatureGeoList.Add(((IFeature)iEdgeFeat)); } else { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(((IFeature)iEdgeFeat)); } break; } } catch { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14an")); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } iSJunc = null; } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TRIGGER_UPDATE_FROM_EDGE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TRIGGER_UPDATE_FROM_EDGE"); } break; case "TRIGGER_UPDATE_TO_EDGE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "TRIGGER_UPDATE_TO_EDGE"); if (inFeature != null) { IRowChanges pRowCh = null; pRowCh = inObject as IRowChanges; if (pRowCh.get_ValueChanged(intFldIdxs[0]) == true) { if (valData == null) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ba")); break; } netFeat = inFeature as INetworkFeature; if (netFeat != null) { if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { string netField = ""; string netRestrictFC = ""; string netRestrictField = ""; string netRestrictValue = ""; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only netField = args[0].ToString().Trim(); break; case 2: // sequenceColumnName|sequenceFixedWidth netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); break; case 4: // sequenceColumnName|sequenceFixedWidth|formatString netField = args[0].ToString().Trim(); netRestrictFC = args[1].ToString().Trim(); netRestrictField = args[2].ToString().Trim(); netRestrictValue = args[3].ToString().Trim(); break; default: break; } iJuncFeat = (IJunctionFeature)netFeat; // IComplexJunctionFeature iCEd = iJuncFeat as IComplexJunctionFeature; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { if (netRestrictFC != "") { string strClsName = Globals.getClassName(((IDataset)((IFeature)iEdgeFeat).Class)); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bf") + strClsName); if (strClsName != netRestrictFC) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bg")); continue; } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bh")); if (netRestrictField != "" && netRestrictValue != "") { int intTmpFld = Globals.GetFieldIndex(((IFeature)iEdgeFeat).Fields, netRestrictField); if (intTmpFld > -1) { //IFeature pTest = ((IFeature)iEdgeFeat); if (((IFeature)iEdgeFeat).get_Value(intTmpFld).ToString() == netRestrictValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bl")); continue; } } else { AAState.WriteLine(" " + netRestrictField + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bm")); } } iJuncFeat = (IJunctionFeature)iEdgeFeat.FromJunctionFeature; if (((IFeature)iJuncFeat).Shape.Equals(inFeature.Shape)) { if (netField == "CREATE") { if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } NewFeatureList.Add(((IFeature)iEdgeFeat)); } else if (netField == "CHANGEGEO") { if (ChangeFeatureGeoList == null) { ChangeFeatureGeoList = new List<IObject>(); } ChangeFeatureGeoList.Add(((IFeature)iEdgeFeat)); } else { if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(((IFeature)iEdgeFeat)); } break; break; } } catch { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14an")); } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } iSJunc = null; } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14be")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "TRIGGER_UPDATE_TO_EDGE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "TRIGGER_UPDATE_TO_EDGE"); } break; //***********8 //Release: 1.2 //New Dynamic Value Method: GENERATE_ID - uses value in specificed table and increments it as specified case "GENERATE_ID": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "GENERATE_ID"); if (AAState._gentab != null) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; formatString = ""; // Parse arguments if (valData == null) break; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: // sequenceColumnName only sequenceColumnName = args[0].ToString(); break; case 2: // sequenceColumnName|sequenceFixedWidth sequenceColumnName = args[0].ToString(); sequenceFixedWidth = args[1].ToString(); break; case 3: // sequenceColumnName|sequenceFixedWidth|formatString sequenceColumnName = args[0].ToString(); sequenceFixedWidth = args[1].ToString(); formatString = args[2].ToString(); break; default: break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); if (sequencePadding > 25) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain116")); AAState.WriteLine(" WARNING: " + sequencePadding + " 0's is what you have"); } else if (sequencePadding > 50) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain117")); } qFilter = new QueryFilterClass(); qFilter.WhereClause = "SEQNAME = '" + sequenceColumnName + "'"; cCurs = AAState._gentab.Update(qFilter, false); sequenceColumnNum = AAState._gentab.Fields.FindField("SEQCOUNTER"); //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = cCurs.NextRow(); if (row == null) { break; } if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); // _editEvents.OnChangeFeature -= OnChangeFeature; // _editEvents.OnCreateFeature -= OnCreateFeature; int sequenceInt = 1; if (AAState._gentab.Fields.FindField("SEQINTERV") > 0) { if (row.get_Value(AAState._gentab.Fields.FindField("SEQINTERV")) != null) { if (row.get_Value(AAState._gentab.Fields.FindField("SEQINTERV")) != DBNull.Value) sequenceInt = Convert.ToInt32(row.get_Value(AAState._gentab.Fields.FindField("SEQINTERV"))); } } sequenceValue = sequenceValue + sequenceInt; row.set_Value(sequenceColumnNum, sequenceValue); AAState.WriteLine(" " + row.Fields.get_Field(sequenceColumnNum).AliasName + " changed to " + sequenceValue); //AAState.changeFeature -= OnChangeFeature; //AAState.createFeature -= OnCreateFeature; row.Store(); //AAState.changeFeature += OnChangeFeature; //AAState.createFeature += OnCreateFeature; // _editEvents.OnChangeFeature += OnChangeFeature; // _editEvents.OnCreateFeature += OnCreateFeature; if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ao")); } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || formatString.ToLower().IndexOf("[seq]") == -1) { string setVal = (sequenceValue.ToString("D" + sequencePadding) + sequencePostfix).ToString(); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < setVal.Length && inObject.Fields.get_Field(intFldIdxs[0]).Length != 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sequenceValue + " is to long for field " + row.Fields.get_Field(sequenceColumnNum).AliasName); } else { inObject.set_Value(intFldIdxs[0], (sequenceValue.ToString("D" + sequencePadding) + sequencePostfix).Trim()); AAState.WriteLine(" " + inObject.Fields.get_Field(intFldIdxs[0]).AliasName + " set to " + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); } } else { int locIdx = formatString.ToUpper().IndexOf("[SEQ]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 5); formatString = formatString.Insert(locIdx, sequenceValue.ToString("D" + sequencePadding)); } //formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding)); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < formatString.Length && inObject.Fields.get_Field(intFldIdxs[0]).Length != 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + formatString + " is to long for field " + row.Fields.get_Field(sequenceColumnNum).AliasName); } else { inObject.set_Value(intFldIdxs[0], formatString.Trim()); AAState.WriteLine(" " + inObject.Fields.get_Field(intFldIdxs[0]).AliasName + " set to " + formatString); } } else { inObject.set_Value(intFldIdxs[0], sequenceValue); AAState.WriteLine(" " + sequenceColumnNum + " changed to " + sequenceValue); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ap")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + ex.Message); } finally { if (cCurs != null) { Marshal.ReleaseComObject(cCurs); GC.Collect(300); GC.WaitForFullGCComplete(); cCurs = null; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "GENERATE_ID"); } break; case "GENERATE_ID_BY_INTERSECT": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "GENERATE_ID_BY_INTERSECT"); if (AAState._gentab != null && inFeature != null && !(inFeature.Shape.IsEmpty)) { sequenceColumnName = ""; sequenceColumnNum = -1; sequenceValue = -1; sequenceFixedWidth = ""; sequencePadding = 0; //genIdAreaFieldName = ""; intersectLayerName = ""; intersectLayerFieldName = ""; formatString = ""; intersectFieldPos = -1; // Parse arguments if (valData == null) break; args = valData.Split('|'); if (args.GetLength(0) < 3) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ap")); break; } switch (args.GetLength(0)) { case 3: //columnName intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); // genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); break; case 4: // columnName|sequenceFixedWidth //sequenceFixedWidth formats the sequence with leading zeros to create specified width intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); //genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); sequenceFixedWidth = Convert.ToString(0); formatString = args[3].ToString(); break; case 5: // columnName|sequenceFixedWidth|formatString //formatString must contain [seq] and [id] and may contain [area] plus any desired text intersectLayerName = args[0].ToString(); intersectLayerFieldName = args[1].ToString(); //genIdAreaFieldName = args[2].ToString(); sequenceColumnName = args[2].ToString(); sequenceFixedWidth = args[3].ToString(); formatString = args[4].ToString(); break; default: break; } //Find Area Layer // FindLayerByName(areaLayerName, out areaLayer); boolLayerOrFC = true; if (intersectLayerName.Contains("(")) { string[] tempSplt = intersectLayerName.Split('('); intersectLayerName = tempSplt[0]; intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { intersectLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, intersectLayerName, ref boolLayerOrFC); } if (intersectLayer == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aq") +"(" + intersectLayerName + ") not found"); break; } //Find Area Field intersectFieldPos = intersectLayer.FeatureClass.FindField(intersectLayerFieldName); if (intersectFieldPos < 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14as") +"(" + intersectLayerFieldName + ") not found"); break; } //Perform spatial search IGeometry pSearchGeo = Globals.GetGeomCenter((IGeometry)inFeature.ShapeCopy)[0]; pSearchGeo.SpatialReference = (inFeature.Class as IGeoDataset).SpatialReference; pSearchGeo.Project((intersectLayer as IGeoDataset).SpatialReference); sFilter = Globals.createSpatialFilter(intersectLayer, inFeature, false); pFS = (IFeatureSelection)intersectLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = intersectLayer.Search(sFilter, true); } } else { fCursor = intersectLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); intersectValue = "-9999.1"; if (sourceFeature == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14at")); break; } else { while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { intersectValue = sourceFeature.get_Value(intersectFieldPos).ToString(); break; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { intersectValue = sourceFeature.get_Value(intersectFieldPos).ToString(); break; } sourceFeature = fCursor.NextFeature(); } } if (intersectValue == "-9999.1") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14at")); break; } //Check for requested zero padding of sequence number if (sequenceFixedWidth != "") int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding); if (sequencePadding > 25) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain116")); AAState.WriteLine(" WARNING: " + sequencePadding + " 0's is what you have"); } sequenceColumnName = sequenceColumnName + intersectValue; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bn") + sequenceColumnName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bo")); qFilter = new QueryFilterClass(); qFilter.WhereClause = "SEQNAME = '" + sequenceColumnName + "'"; cCurs = AAState._gentab.Update(qFilter, false); sequenceColumnNum = AAState._gentab.Fields.FindField("SEQCOUNTER"); //get value of first row, increment it, and return incremented value for (int j = 0; j < 51; j++) { row = cCurs.NextRow(); if (row == null) { break; } if (row.get_Value(sequenceColumnNum) == null) { sequenceValue = 0; } else if (row.get_Value(sequenceColumnNum).ToString() == "") { sequenceValue = 0; } else sequenceValue = Convert.ToInt32(row.get_Value(sequenceColumnNum)); int sequenceInt = 1; if (AAState._gentab.Fields.FindField("SEQINTERV") > 0) { if (row.get_Value(AAState._gentab.Fields.FindField("SEQINTERV")) != null) { if (row.get_Value(AAState._gentab.Fields.FindField("SEQINTERV")) != DBNull.Value) sequenceInt = Convert.ToInt32(row.get_Value(AAState._gentab.Fields.FindField("SEQINTERV"))); } } sequenceValue = sequenceValue + sequenceInt; row.set_Value(sequenceColumnNum, sequenceValue); row.Store(); if (Convert.ToInt32(row.get_Value(sequenceColumnNum)) == sequenceValue) break; } if (sequenceValue == -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14au")); } else { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString) if (formatString == null || formatString == "" || (formatString.ToUpper().IndexOf("[SEQ]") == -1 && formatString.ToUpper().IndexOf("[ID]") == -1)) inObject.set_Value(intFldIdxs[0], intersectValue + sequenceValue.ToString("D" + sequencePadding) + sequencePostfix); else { int locIdx = formatString.ToUpper().IndexOf("[ID]"); if (locIdx >= 0) { formatString = formatString.Remove(locIdx, 4); formatString = formatString.Insert(locIdx, intersectValue); } locIdx = formatString.ToUpper().IndexOf("[SEQ]"); if (locIdx >= 0) { string sequenceValuePad = sequenceValue.ToString("D" + sequencePadding); formatString = formatString.Remove(locIdx, 5); formatString = formatString.Insert(locIdx, sequenceValuePad.ToString()); } // inObject.set_Value(intFldIdxs[0], formatString); } else inObject.set_Value(intFldIdxs[0], sequenceValue); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ap")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID_BY_INTERSECT: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "GENERATE_ID_BY_INTERSECT"); } break; //Modified for Release 1.2 (No longer uses ICalculator) //Requires valid VBScript expression //Can include string, numeric, and date fields by name in square brackets [] //Example: DateDiff("yyyy",[INSTALLDATE],Now()) case "EXPRESSION": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "EXPRESSION"); if (inObject != null & valData != null) { int intTargetFld = -1; if (intFldIdxs.Count == 0) { } else { intTargetFld = intFldIdxs[0]; } newValue = valData; for (int i = 0; i <= inObject.Fields.FieldCount; i++) { string strTmpFldName; int intTmpIdx; if (i == inObject.Fields.FieldCount) { testField = inObject.Fields.get_Field(intFldIdxs[0]); strTmpFldName = "#"; intTmpIdx = intFldIdxs[0]; } else { testField = inObject.Fields.get_Field(i); strTmpFldName = testField.Name; intTmpIdx = i; } int indFld = newValue.ToUpper().IndexOf("[" + strTmpFldName.ToUpper() + "]"); while (indFld >= 0) { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bp") + testField.Name + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bq")); int fldLen = strTmpFldName.Length; string tmpStr1 = newValue.Substring(0, indFld + 1); string tmpStr2 = newValue.Substring(indFld + fldLen + 1); newValue = tmpStr1 + "_REPLACE_VAL_" + tmpStr2; switch (testField.Type) { case esriFieldType.esriFieldTypeString: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "") { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } } break; case esriFieldType.esriFieldTypeDate: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "" || inObject.get_Value(intTmpIdx) == DBNull.Value) { if (newValue.Contains("IsNull([" + "_REPLACE_VAL_" + "])")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull([" + "_REPLACE_VAL_" + "])")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL([" + "_REPLACE_VAL_" + "])")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\"");//"\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + inObject.get_Value(intTmpIdx).ToString() + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "CDATE(\"" + inObject.get_Value(intTmpIdx).ToString() + "\")"); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "CDATE(\"" + inObject.get_Value(intTmpIdx).ToString() + "\")"); } } break; case esriFieldType.esriFieldTypeDouble: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "") { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "" + inObject.get_Value(intTmpIdx).ToString() + ""); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { double val; Double.TryParse(inObject.get_Value(intTmpIdx).ToString(), out val); // ' string test2 = test.ToString("N",nfi); newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", val.ToString("N", nfi)); } } break; default: if (inObject.get_Value(intTmpIdx) == null || inObject.get_Value(intTmpIdx).ToString() == "") { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("isNull")) { newValue = newValue.Replace("isNull([" + "_REPLACE_VAL_" + "])", "True"); } else if (newValue.Contains("ISNULL")) { newValue = newValue.Replace("ISNULL([" + "_REPLACE_VAL_" + "])", "True"); } else if (inObject.get_Value(intTmpIdx) == null) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx) == DBNull.Value) { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else if (inObject.get_Value(intTmpIdx).ToString() == "") { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "\"" + "\""); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", "" + inObject.get_Value(intTmpIdx).ToString() + ""); } } else { if (newValue.Contains("IsNull")) { newValue = newValue.Replace("IsNull([" + "_REPLACE_VAL_" + "])", "False"); } else { newValue = newValue.Replace("[" + "_REPLACE_VAL_" + "]", inObject.get_Value(intTmpIdx).ToString()); } } break; } indFld = newValue.ToUpper().IndexOf("[" + testField.Name.ToUpper() + "]"); } } try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain118")); if (intTargetFld > -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14br") + newValue); newValue = script.Eval(newValue).ToString(); if (newValue.ToUpper() == "<Null>".ToUpper()) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain119")); inObject.set_Value(intTargetFld, DBNull.Value); } else if (inObject.get_Value(intTargetFld).ToString() != newValue) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain120") + newValue.Trim()); inObject.set_Value(intTargetFld, newValue.Trim()); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14av") + inObject.Class.AliasName + " with OID of " + inObject.OID); AAState.WriteLine(" " + ex.Message); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "EXPRESSION: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "EXPRESSION"); } break; // GUID values are calculated into text fields or into native GUID field types // When using text field you have an optional argument (valdata) to specify the format // N-none 32 chars, D-dash 36, B-braces 38, P-Parenthesis 38 case "GUID": try { if (inObject != null) { if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeGUID) inObject.set_Value(intFldIdxs[0], System.Guid.NewGuid().ToString("B")); else if (inObject.Fields.get_Field(intFldIdxs[0]).Type == esriFieldType.esriFieldTypeString && inObject.Fields.get_Field(intFldIdxs[0]).Length >= 32) { valData = valData.Trim(); if (valData != "N" && valData != "D" && valData != "B" && valData != "P") if (inObject.Fields.get_Field(intFldIdxs[0]).Length >= 38) valData = "B"; //Default to braces else if (inObject.Fields.get_Field(intFldIdxs[0]).Length < 36) valData = "N"; else valData = "D"; inObject.set_Value(intFldIdxs[0], System.Guid.NewGuid().ToString(valData)); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "EXPRESSION: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "EXPRESSION"); } break; case "CREATE_LINKED_RECORD"://Feature Layer|Field To Copy|Field To Populate|Primary Key Field|Foreign Key Field { try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "CREATE_LINKED_RECORD"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length < 5) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } if (inObject == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ak")); break; } sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bs")); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString().Trim(); string targetFieldName = args[2].ToString().Trim(); string sourceIDFieldName = args[3].ToString().Trim(); string targetIDFieldName = args[4].ToString().Trim(); int countFld = 1; if (args.Length == 6) { if (!Globals.IsNumeric(args[5].ToString().Trim())) { int fldx = Globals.GetFieldIndex(inObject.Fields, args[5].ToString().Trim()); if (fldx > 0) { string tempVal = inObject.get_Value(fldx).ToString(); if (Globals.IsNumeric(tempVal)) countFld = Convert.ToInt32(tempVal); } } else { countFld = Convert.ToInt32(args[5].ToString().Trim()); } } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bt")); if (sourceFieldName != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain121")); int fldValToCopyIdx = Globals.GetFieldIndex(inObject.Fields, sourceFieldName); int fldIDToCopyIdx = Globals.GetFieldIndex(inObject.Fields, sourceIDFieldName); if (fldValToCopyIdx > -1 && fldIDToCopyIdx > -1) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { // Get layer AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain122")); bool FCorLayerSource = true; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref FCorLayerSource); if (sourceLayer != null) { AAState.WriteLine(" " + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } else { ITable pTable = Globals.FindTable(AAState._editor.Map, sourceLayerName); if (pTable != null) { int fldValToPopIdx = Globals.GetFieldIndex(pTable.Fields, targetFieldName); int fldIDToPopIdx = Globals.GetFieldIndex(pTable.Fields, targetIDFieldName); if (fldValToPopIdx > -1 && fldIDToPopIdx > -1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain123")); IRow pNewRow; for (int j = 0; j < countFld; j++) { pNewRow = pTable.CreateRow(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain124")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain125")); try { pNewRow.set_Value(fldIDToPopIdx, inObject.get_Value(fldIDToCopyIdx)); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aw") + inObject.get_Value(fldIDToCopyIdx) + " to field: " + targetIDFieldName); } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain126")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain127")); try { pNewRow.set_Value(fldValToPopIdx, inObject.get_Value(fldValToCopyIdx)); } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aw") + inObject.get_Value(fldValToCopyIdx) + " to field: " + targetFieldName); } if (NewFeatureList == null) { NewFeatureList = new List<IObject>(); } IObject featobj = pNewRow as IObject; if (featobj != null) { NewFeatureList.Add(featobj); } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain128")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14k")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ax") + sourceLayerName); } } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ay")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "CREATE_LINKED_RECORD" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "CREATE_LINKED_RECORD"); } break; } case "UPDATE_INTERSECTING_FEATURE"://Intersected Feature|FieldIntersectingFeatureToChange|FromFieldinModifiedFeature { try { IFeatureCursor fLocalCursor = null; IFeature sourceFeatureLocal = null; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "UPDATE_INTERSECTING_FEATURE"); if (!String.IsNullOrEmpty(valData)) { args = valData.Split('|'); if (args.Length != 3) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ad")); break; } if (inFeature == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ak")); break; } bool cont = true; if (intFldIdxs.Count > 1) { IRowChanges inChanges = inObject as IRowChanges; if (inChanges.get_ValueChanged(intFldIdxs[0])) { cont = true; } else { cont = false; } inChanges = null; } if (cont) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bs")); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString().Trim(); string targetFieldName = args[2].ToString().Trim(); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bt")); if (sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0].Trim(); sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (Globals.IsEditable(ref sourceLayer, ref AAState._editor)) { if (inObject.Class.ObjectClassID != sourceLayer.FeatureClass.ObjectClassID) { sourceField = Globals.GetFieldIndex(sourceLayer.FeatureClass.Fields, sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); int fldIdx = Globals.GetFieldIndex(inFeature.Fields, targetFieldName); AAState.WriteLine(" " + targetFieldName + " at index " + fldIdx); string test = targetFieldName; if (fldIdx > -1) { test = inFeature.get_Value(fldIdx).ToString().Trim(); AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bu") + test); } AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bv") + test); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, false, out cCurs); fLocalCursor = cCurs as IFeatureCursor; } else { fLocalCursor = sourceLayer.Search(sFilter, false); } } else { fLocalCursor = sourceLayer.FeatureClass.Search(sFilter, false); } while ((sourceFeatureLocal = fLocalCursor.NextFeature()) != null) { try { if (sourceFeatureLocal.Class.ObjectClassID != inFeature.Class.ObjectClassID) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeString) { sourceFeatureLocal.set_Value(sourceField, test); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } else { if (Globals.IsNumeric(test)) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSmallInteger || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeInteger) { sourceFeatureLocal.set_Value(sourceField, Convert.ToInt32(test)); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; //break; } else if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeDouble || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSingle) { sourceFeatureLocal.set_Value(sourceField, Convert.ToDouble(test)); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } else { sourceFeatureLocal.set_Value(sourceField, test as object); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } } else { sourceFeatureLocal.set_Value(sourceField, test as object); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } } } else if (sourceFeatureLocal.Class == inFeature.Class && sourceFeatureLocal.OID != inFeature.OID) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeString) { sourceFeatureLocal.set_Value(sourceField, test); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } else { if (Globals.IsNumeric(test)) { if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSmallInteger || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeInteger) { sourceFeatureLocal.set_Value(sourceField, Convert.ToInt32(test)); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } else if (sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeDouble || sourceFeatureLocal.Fields.get_Field(sourceField).Type == esriFieldType.esriFieldTypeSingle) { sourceFeatureLocal.set_Value(sourceField, Convert.ToDouble(test)); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } else { sourceFeatureLocal.set_Value(sourceField, test as object); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } } else { sourceFeatureLocal.set_Value(sourceField, test as object); if (ChangeFeatureList == null) { ChangeFeatureList = new List<IObject>(); } ChangeFeatureList.Add(sourceFeatureLocal); found = true; } } } } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14al")); } finally { } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14b") + sourceLayerName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } } } if (found) { break; } } } fLocalCursor = null; sourceFeatureLocal = null; } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "UPDATE_INTERSECTING_FEATURE" + Environment.NewLine + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "UPDATE_INTERSECTING_FEATURE"); } break; } case "MULTI_FIELD_INTERSECT": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "MULTI_FIELD_INTERSECT"); if (inFeature != null & valData != null) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; // Parse arguments args = valData.Split('|'); int popFldIdx = 0; if (args.GetLength(0) > 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain114")); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString().Trim(); string[] fieldsToPop = args[2].ToString().Split(','); if (args.GetLength(0) == 4) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain129")); if (Globals.IsDouble(args[3])) { searchDistance = Convert.ToDouble(args[3]); } else { searchDistance = 0.0; } } else { searchDistance = 0.0; } if (sourceFieldName != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain130")); for (int i = 0; i < sourceLayerNames.Length; i++) { if (fieldsToPop.Length == popFldIdx) break; sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0].Trim(); sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { sourceField = Globals.GetFieldIndex(sourceLayer.FeatureClass.Fields, sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } while ((sourceFeature = fCursor.NextFeature()) != null) { if (sourceFeature.Class != inFeature.Class) { if (fieldsToPop.Length == popFldIdx) break; string test = sourceFeature.get_Value(sourceField).ToString().Trim(); int tempFieldNum = Globals.GetFieldIndex(inObject.Fields, fieldsToPop[popFldIdx]); popFldIdx++; if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, sourceFeature.get_Value(sourceField)); } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { if (fieldsToPop.Length == popFldIdx) break; string test = sourceFeature.get_Value(sourceField).ToString().Trim(); int tempFieldNum = Globals.GetFieldIndex(inObject.Fields, fieldsToPop[popFldIdx]); popFldIdx++; if (tempFieldNum > -1) { inObject.set_Value(tempFieldNum, sourceFeature.get_Value(sourceField)); } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14f") + sourceLayerName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14e")); } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14az")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ba")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "MULTI_FIELD_INTERSECT: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "MULTI_FIELD_INTERSECT"); } break; case "INTERSECT_STATS": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECT_STATS"); if (inFeature != null & valData != null) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int AverageCount = 0; if (args.GetLength(0) > 2) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain114")); sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString().Trim(); string statType = args[2].ToString().Trim(); if (args.GetLength(0) == 4) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain129")); if (Globals.IsDouble(args[3])) searchDistance = Convert.ToDouble(args[3]); else searchDistance = 0.0; } else { searchDistance = 0.0; } double result = -999999.1; string textRes = ""; if (sourceFieldName != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain130")); for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0].Trim(); sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer != null) { if (sourceLayer.FeatureClass != null) { sourceField = Globals.GetFieldIndex(sourceLayer.FeatureClass.Fields, sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); while (sourceFeature != null) { if (sourceFeature.Class != inFeature.Class) { string test = sourceFeature.get_Value(sourceField).ToString().Trim(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14d") + test); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { string test = sourceFeature.get_Value(sourceField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14d") + test); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } sourceFeature = fCursor.NextFeature(); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14f") + sourceLayerName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14e")); } } try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aj") + ex.Message); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14az")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ba")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECT_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECT_STATS"); } break; case "FEATURE_STATS": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "FEATURE_STATS"); if (inFeature != null & valData != null) { sourceFieldName = ""; sourceField = -1; found = false; //LayerToIntersect|Field To Elevate // Parse arguments args = valData.Split('|'); int AverageCount = 0; if (args.GetLength(0) > 1) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain114")); string[] sourceFieldNames = args[0].ToString().Split(','); string statType = args[1].ToString(); double result = -999999.1; string textRes = ""; if (sourceFieldNames != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain131")); for (int i = 0; i < sourceFieldNames.Length; i++) { sourceFieldName = sourceFieldNames[i].ToString(); if (sourceFieldName != "") { sourceField = Globals.GetFieldIndex(inObject.Fields, sourceFieldName); if (sourceField > -1) { string test = inObject.get_Value(sourceField).ToString(); if (Globals.IsNumeric(test)) { double valToTest = Convert.ToDouble(test); if (result == -999999.1) { result = valToTest; } else { switch (statType.ToUpper()) { case "MAX": if (result < valToTest) { result = valToTest; } break; case "MIN": if (result > valToTest) { result = valToTest; } break; case "SUM": result += valToTest; break; case "AVERAGE": result += valToTest; AverageCount++; break; case "MEAN": result += valToTest; AverageCount++; break; case "CONCAT": if (textRes.Contains(valToTest.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + valToTest.ToString())) { } else { if (textRes == "") { textRes += valToTest.ToString(); } else { textRes += ConcatDelim + valToTest.ToString(); } } break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } else { switch (statType.ToUpper()) { case "CONCAT": if (textRes.Contains(test.ToString() + ConcatDelim)) { } else if (textRes.Contains(ConcatDelim + test.ToString())) { } else { if (textRes == "") { textRes += test; } else { textRes += ConcatDelim + test; } } break; default: AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14d") + test); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ai") + test); break; } } } } } try { if (textRes != "") { inObject.set_Value(intFldIdxs[0], textRes); } else if (result != -999999.1) { if (AverageCount != 0) { result = result / AverageCount; } inObject.set_Value(intFldIdxs[0], result); } else { IField field = inObject.Fields.get_Field(intFldIdxs[0]); object newval = field.DefaultValue; if (newval == null) { if (field.IsNullable) { inObject.set_Value(intFldIdxs[0], null); } } else { inObject.set_Value(intFldIdxs[0], newval); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aj") + ex.Message); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14az")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ba")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "FEATURE_STATS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "FEATURE_STATS"); } break; case "INTERSECTING_EDGE": try { if (valData == null) break; args = valData.Split('|'); switch (args.GetLength(0)) { case 1: sourceFieldName = args[0].ToString(); break; case 2: sourceFieldName = args[1].ToString(); break; default: break; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECTING_EDGE"); if (inFeature != null) { netFeat = inFeature as INetworkFeature; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain132")); if (netFeat != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain103")); if (inFeature.FeatureType == esriFeatureType.esriFTComplexJunction || inFeature.FeatureType == esriFeatureType.esriFTSimpleJunction) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain104")); iJuncFeat = (IJunctionFeature)netFeat; ISimpleJunctionFeature iSJunc = iJuncFeat as ISimpleJunctionFeature; if (iSJunc == null) break; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain105") + iSJunc.EdgeFeatureCount); if (iSJunc.EdgeFeatureCount <= 0) break; if (iSJunc.EdgeFeatureCount > 0) { for (int i = 0; i < iSJunc.EdgeFeatureCount; i++) { iEdgeFeat = iSJunc.get_EdgeFeature(i); try { IRow pRow = iEdgeFeat as IRow; // verify that field (in junction) to copy exists AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain113")); juncField = Globals.GetFieldIndex(pRow.Fields, sourceFieldName); string test = pRow.get_Value(juncField).ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain133") + test); inObject.set_Value(intFldIdxs[0], test); continue; } catch { } }//end loop try { } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14aj") + ex.Message); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bi")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bj")); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bk")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECTING_EDGE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECTING_EDGE"); } break; case "INTERSECTING_FEATURE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECTING_FEATURE"); if (inFeature != null & valData != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain134")); sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; found = false; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain135") + valData); // Parse arguments args = valData.Split('|'); //if (args.GetLength(0) >= 2) if (args.Length >= 2) { AAState.intersectOptions strOpt = AAState.intersectOptions.First; switch (args.Length) { case 2: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); break; case 3: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); switch (args[2].ToString().ToUpper()) { case "PROMPT": strOpt = AAState.intersectOptions.PromptMulti; break; case "P": strOpt = AAState.intersectOptions.PromptMulti; break; case "CENTROID": strOpt = AAState.intersectOptions.Centroid; break; case "C": strOpt = AAState.intersectOptions.Centroid; break; case "F": strOpt = AAState.intersectOptions.First; break; case "L": strOpt = AAState.intersectOptions.Last; break; case "FIRST": strOpt = AAState.intersectOptions.First; break; } break; default: break; } if (sourceFieldName != null) { List<Globals.OptionsToPresent> pFoundFeat = new List<Globals.OptionsToPresent>(); for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0].Trim(); sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } // Get layer if (sourceLayer != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain136") + sourceLayer.Name); sourceField = Globals.GetFieldIndex(sourceLayer.FeatureClass.Fields, sourceFieldName); AAState.WriteLine(" " + sourceFieldName + ": at " + sourceField); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, strOpt == AAState.intersectOptions.Centroid); if (sFilter == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain137")); continue; } pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain138")); if (pFS.SelectionSet.Count > 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain139")); pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain140")); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain141")); fCursor = sourceLayer.Search(sFilter, true); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain140")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain142")); fCursor = sourceLayer.FeatureClass.Search(sFilter, true); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain140")); } if (fCursor == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain143")); continue; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain144")); while ((sourceFeature = fCursor.NextFeature()) != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain145")); if (sourceFeature.Class != inFeature.Class) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain146")); if (strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(Globals.GetFieldIndex(sourceFeature.Fields, sourceLayer.DisplayField)).ToString(); pOp.Value = sourceFeature.get_Value(sourceField); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display + " value = " + pOp.Value.ToString(); } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID + " value = " + pOp.Value.ToString(); } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else if (strOpt == AAState.intersectOptions.Last) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(Globals.GetFieldIndex(sourceFeature.Fields, sourceLayer.DisplayField)).ToString(); pOp.Value = sourceFeature.get_Value(sourceField); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display + " value = " + pOp.Value.ToString(); } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID + " value = " + pOp.Value.ToString(); } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else { string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); found = true; } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain148")); if (strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(Globals.GetFieldIndex(sourceFeature.Fields, sourceLayer.DisplayField)).ToString(); pOp.Value = sourceFeature.get_Value(sourceField); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display + " value = " + pOp.Value.ToString(); } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID + " value = " + pOp.Value.ToString(); } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else if (strOpt == AAState.intersectOptions.Last) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(Globals.GetFieldIndex(sourceFeature.Fields, sourceLayer.DisplayField)).ToString(); pOp.Value = sourceFeature.get_Value(sourceField); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display + " value = " + pOp.Value.ToString(); } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID + " value = " + pOp.Value.ToString(); } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else { string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); found = true; } } if (found == true) break; } if (found == false && AAState._CheckEnvelope && pFoundFeat.Count == 0) { sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects; pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); while (sourceFeature != null) { if (strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(Globals.GetFieldIndex(sourceFeature.Fields, sourceLayer.DisplayField)).ToString(); pOp.Value = sourceFeature.get_Value(sourceField); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display + " value = " + pOp.Value.ToString(); } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID + " value = " + pOp.Value.ToString(); } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else if (strOpt == AAState.intersectOptions.Last) { Globals.OptionsToPresent pOp = new Globals.OptionsToPresent(); pOp.Display = sourceFeature.get_Value(Globals.GetFieldIndex(sourceFeature.Fields, sourceLayer.DisplayField)).ToString(); pOp.Value = sourceFeature.get_Value(sourceField); if (pOp.Display.Trim() != "") { pOp.Display = sourceLayer.Name + ": " + pOp.Display + " value = " + pOp.Value.ToString(); } else { pOp.Display = sourceLayer.Name + ": " + sourceFeature.OID + " value = " + pOp.Value.ToString(); } pOp.OID = sourceFeature.OID; pOp.LayerName = sourceLayer.Name; pFoundFeat.Add(pOp); } else { if (found) { break; } string test = sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + test); inObject.set_Value(intFldIdxs[0], sourceFeature.get_Value(sourceField)); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); found = true; } sourceFeature = fCursor.NextFeature(); } } if (found) { break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14am") + sourceFieldName); } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } } } if (pFoundFeat.Count > 0 && strOpt == AAState.intersectOptions.PromptMulti) { Globals.OptionsToPresent strRetVal = Globals.showOptionsForm(pFoundFeat, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain149") + sourceFieldName, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain149") + sourceFieldName, ComboBoxStyle.DropDownList); if (strRetVal != null) { //sourceFeature = sourceLayer.FeatureClass.GetFeature(strRetVal.OID); string test = strRetVal.Value.ToString();//sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + test); inObject.set_Value(intFldIdxs[0], strRetVal.Value); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); found = true; } } else if (pFoundFeat.Count > 0 && strOpt == AAState.intersectOptions.Last) { //sourceFeature = sourceLayer.FeatureClass.GetFeature(pFoundFeat[pFoundFeat.Count - 1].OID); string test = pFoundFeat[pFoundFeat.Count - 1].Value.ToString(); //sourceFeature.get_Value(sourceField).ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + test); inObject.set_Value(intFldIdxs[0], pFoundFeat[pFoundFeat.Count - 1].Value); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); found = true; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain150")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain151")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain152")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECTING_FEATURE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECTING_FEATURE"); } break; case "INTERSECTING_BOOLEAN": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECTING_BOOLEAN"); if (inFeature != null & valData != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain134")); sourceLayerName = ""; string valTrue = ""; string valFalse = ""; found = false; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain135") + valData); // Parse arguments args = valData.Split('|'); //if (args.GetLength(0) >= 2) if (args.Length == 3) { AAState.intersectOptions strOpt = AAState.intersectOptions.First; switch (args.Length) { case 3: sourceLayerNames = args[0].ToString().Split(','); valTrue = args[1].ToString(); valFalse = args[2].ToString(); break; default: break; } for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); if (sourceLayerName != "") { boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0].Trim(); sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } // Get layer if (sourceLayer != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain136") + sourceLayer.Name); sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, strOpt == AAState.intersectOptions.Centroid); if (sFilter == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain137")); continue; } pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain138")); if (pFS.SelectionSet.Count > 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain139")); pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain140")); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain141")); fCursor = sourceLayer.Search(sFilter, true); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain140")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain142")); fCursor = sourceLayer.FeatureClass.Search(sFilter, true); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain140")); } if (fCursor == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain143")); continue; } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain144")); while ((sourceFeature = fCursor.NextFeature()) != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain145")); if (sourceFeature.Class != inFeature.Class) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain146")); found = true; } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain148")); found = true; } if (found == true) break; } if (found == false && AAState._CheckEnvelope) { sFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects; pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } sourceFeature = fCursor.NextFeature(); while (sourceFeature != null) { found = true; break; } } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } if (found) { break; } } else { AAState.WriteLine(" " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14a") + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorWarn_14c") + sourceLayerName); } } if (found) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + valTrue); inObject.set_Value(intFldIdxs[0], valTrue); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain147") + valFalse); inObject.set_Value(intFldIdxs[0], valFalse); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14az")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain153")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain154")); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECTING_BOOLEAN: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECTING_BOOLEAN"); } break; case "INTERSECTING_RASTER": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECTING_RASTER"); if (inFeature != null & valData != null) { sourceLayerName = ""; formatString = ""; found = false; // Parse arguments args = valData.Split('|'); if (args.Length < 1) break; switch (args.Length) { case 1: sourceLayerNames = args[0].ToString().Split(','); break; case 2: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); break; default: break; } // Get layer for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); IPoint pLoc = Globals.GetGeomCenter(inFeature)[0]; if (pLoc != null) { string cellVal = Globals.GetCellValue(sourceLayerName, pLoc, AAState._editor.Map); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain155") + sourceLayerName); if (cellVal != null && cellVal != "" && cellVal != "No Raster") { if (formatString == null || formatString == "" || (inObject.Fields.get_Field(intFldIdxs[0]).Type != esriFieldType.esriFieldTypeString)) { inObject.set_Value(intFldIdxs[0], cellVal); found = true; break; } else { formatString = formatString + cellVal; inObject.set_Value(intFldIdxs[0], formatString); found = true; break; } } } } if (!(found) && inObject.Fields.get_Field(intFldIdxs[0]).IsNullable) inObject.set_Value(intFldIdxs[0], null); } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECTING_RASTER: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECTING_RASTER"); } break; case "INTERSECTING_LAYER_DETAILS": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECTING_LAYER_DETAILS"); if (inFeature != null & valData != null) { sourceLayerName = ""; formatString = ""; found = false; List<string> matchPattern = null; // Parse arguments args = valData.Split('|'); if (args.Length >= 1) { AAState.intersectOptions strOpt = AAState.intersectOptions.First; switch (args.Length) { case 1: sourceLayerNames = args[0].ToString().Split(','); formatString = "P"; break; case 2: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); break; case 3: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); switch (args[2].ToString().ToUpper()) { case "PROMPT": strOpt = AAState.intersectOptions.PromptMulti; break; case "P": strOpt = AAState.intersectOptions.PromptMulti; break; case "CENTROID": strOpt = AAState.intersectOptions.Centroid; break; case "C": strOpt = AAState.intersectOptions.Centroid; break; case "F": strOpt = AAState.intersectOptions.First; break; case "FIRST": strOpt = AAState.intersectOptions.First; break; } break; case 4: sourceLayerNames = args[0].ToString().Split(','); formatString = args[1].ToString(); switch (args[2].ToString().ToUpper()) { case "PROMPT": strOpt = AAState.intersectOptions.PromptMulti; break; case "P": strOpt = AAState.intersectOptions.PromptMulti; break; case "CENTROID": strOpt = AAState.intersectOptions.Centroid; break; case "C": strOpt = AAState.intersectOptions.Centroid; break; case "F": strOpt = AAState.intersectOptions.First; break; case "FIRST": strOpt = AAState.intersectOptions.First; break; } matchPattern = new List<string>(args[3].ToString().Split(',')); break; default: break; } List<Globals.OptionsToPresent> strFiles = new List<Globals.OptionsToPresent>(); // Get layer for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString().Trim(); IGeometry pGeo = inFeature.ShapeCopy; List<IGeometry> pGeos = new List<IGeometry>(); if (pGeo != null) { if (strOpt == AAState.intersectOptions.Centroid) { List<IPoint> pGeoPnts = Globals.GetGeomCenter(pGeo); pGeos = pGeoPnts.ConvertAll(new Converter<IPoint, IGeometry>(Globals.PointToGeometry)); } else { pGeos.Add(pGeo); } AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain156") + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain157")); IEnumLayer pEnum = Globals.GetLayers(AAState._editor.Map, sourceLayerName); if (pEnum != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain158") + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain157")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain159")); ILayer pLay = pEnum.Next(); while (pLay != null) { intersectLayerDetailsFunctions(pLay, pGeos, strOpt, ref found, ref strFiles, ref inObject, intFldIdxs[0], matchPattern); if (found) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain160")); break; } pLay = pEnum.Next(); } pLay = null; pEnum = null; } else { bool FCorLayerTemp = true; ILayer pLay = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref FCorLayerTemp); if (pLay != null) { intersectLayerDetailsFunctions(pLay, pGeos, strOpt, ref found, ref strFiles, ref inObject, intFldIdxs[0], matchPattern); } pLay = null; } if (pEnum != null) Marshal.ReleaseComObject(pEnum); pEnum = null; } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain161")); } if (found) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain160")); break; } pGeo = null; pGeos = null; } if (strOpt == AAState.intersectOptions.PromptMulti && strFiles.Count > 0) { Globals.OptionsToPresent strRetVal = Globals.showOptionsForm(strFiles, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain162") + strFldNames[0], A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain163") + strFldNames[0], ComboBoxStyle.DropDownList); if (strRetVal != null) { try { inObject.set_Value(intFldIdxs[0], strRetVal.Display); } catch { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain164")); } found = true; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain165")); } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECTING_LAYER_DETAILS: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECTING_LAYER_DETAILS"); } break; case "INTERSECTING_FEATURE_DISTANCE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "INTERSECTING_FEATURE_DISTANCE"); if (inFeature != null & valData != null) { sourceLayerName = ""; sourceFieldName = ""; sourceField = -1; // Parse arguments args = valData.Split('|'); if (args.GetLength(0) >= 2) { sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString().Trim(); } // Get layer if (sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") sourceLayerName = args[i].ToString(); if (i == 0) i++; boolLayerOrFC = true; if (sourceLayerName.Contains("(")) { string[] tempSplt = sourceLayerName.Split('('); sourceLayerName = tempSplt[0]; sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); if (tempSplt[1].ToUpper().Contains("LAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURELAYER)")) { boolLayerOrFC = true; } else if (tempSplt[1].ToUpper().Contains("FEATURECLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("CLASS)")) { boolLayerOrFC = false; } else if (tempSplt[1].ToUpper().Contains("FEATURE)")) { boolLayerOrFC = false; } else { boolLayerOrFC = true; } } else { sourceLayer = (IFeatureLayer)Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref boolLayerOrFC); } if (sourceLayer == null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14b") + sourceLayerName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); continue; } IFeatureClass iFC = inFeature.Class as IFeatureClass; if (sourceLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayer + " is a polygon layer"); break; } if (sourceLayer != null) { sourceField = Globals.GetFieldIndex(sourceLayer.FeatureClass.Fields, sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { if (pFS.SelectionSet.Count > 0) { pFS.SelectionSet.Search(sFilter, true, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, true); } } else { fCursor = sourceLayer.FeatureClass.Search(sFilter, true); } while ((sourceFeature = fCursor.NextFeature()) != null) { if (sourceFeature.Class != inFeature.Class) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; double dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; string strUnit = Globals.GetSpatRefUnitName(Globals.GetLayersCoordinateSystem(sourceLayer.FeatureClass), true); if (strUnit == "Foot" && dAlong != 1) { strUnit = "Feet"; } else if (strUnit == "Meter" && dAlong != 1) { strUnit = "Meters"; } string strDis = dAlong + " " + strUnit + " along " + sourceLayer.Name + " with " + sourceLayer.FeatureClass.Fields.get_Field(sourceField).AliasName + A4LGSharedFunctions.Localizer.GetString("Of") + sourceFeature.get_Value(sourceField); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong + " " + strUnit + ": " + sourceFeature.get_Value(sourceField); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain166") + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } else { strDis = dAlong.ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain166") + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain167") + strDis); inObject.set_Value(intFldIdxs[0], strDis); break; } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { IPoint pIntPnt; if (inFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { pIntPnt = Globals.GetIntersection(inFeature.ShapeCopy, sourceFeature.ShapeCopy as IPolyline) as IPoint; } else pIntPnt = inFeature.ShapeCopy as IPoint; IPoint snapPnt = null; double dAlong = Globals.PointDistanceOnLine(pIntPnt, sourceFeature.Shape as IPolyline, 2, out snapPnt); snapPnt = null; string strUnit = Globals.GetSpatRefUnitName(Globals.GetLayersCoordinateSystem(sourceLayer.FeatureClass), true); if (strUnit == "Foot" && dAlong != 1) { strUnit = "Feet"; } else if (strUnit == "Meter" && dAlong != 1) { strUnit = "Meters"; } string strDis = dAlong + " " + strUnit + " along " + sourceLayer.Name + " with " + sourceLayer.FeatureClass.Fields.get_Field(sourceField).AliasName + A4LGSharedFunctions.Localizer.GetString("Of") + sourceFeature.get_Value(sourceField); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong + " " + strUnit + ": " + sourceFeature.get_Value(sourceField); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain166") + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } else { strDis = dAlong.ToString(); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain166") + strDis); if (inObject.Fields.get_Field(intFldIdxs[0]).Length < strDis.Length - 1) { strDis = dAlong.ToString(); inObject.set_Value(intFldIdxs[0], strDis); break; } else { inObject.set_Value(intFldIdxs[0], strDis); break; } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain167") + strDis); inObject.set_Value(intFldIdxs[0], strDis); break; } } } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayer + ": field: " + sourceFieldName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { } } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "INTERSECTING_FEATURE_DISTANCE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "INTERSECTING_FEATURE_DISTANCE"); } break; //Release: 1.2 //New Dynamic Value Method: NEARSET_FEATURE - similiar to INTERSECTING_FEATURE but requires a search distance. case "NEAREST_FEATURE": try { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "NEAREST_FEATURE"); if (inFeature != null & valData != null) { string sourceMatField = ""; string targetMatField = ""; sourceLayerName = ""; sourceFieldName = ""; searchDistance = 0; found = false; // Parse arguments args = valData.Split('|'); switch (args.Length) { case 2: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); break; case 3: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); Double.TryParse(args[2], out searchDistance); break; case 4: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain168")); break; case 5: sourceLayerNames = args[0].ToString().Split(','); sourceFieldName = args[1].ToString(); Double.TryParse(args[2], out searchDistance); sourceMatField = args[3].ToString(); targetMatField = args[4].ToString(); break; default: AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain168")); break; } if (sourceLayerNames.Length > 0 & sourceFieldName != null) { for (int i = 0; i < sourceLayerNames.Length; i++) { sourceLayerName = sourceLayerNames[i].ToString(); if (sourceLayerName != "") { bool FCorLayerSource = true; sourceLayer = Globals.FindLayer(AAState._editor.Map, sourceLayerName, ref FCorLayerSource) as IFeatureLayer; if (sourceLayer != null) { sourceField = Globals.GetFieldIndex(sourceLayer.FeatureClass.Fields, sourceFieldName); if (sourceField > -1) { sFilter = Globals.createSpatialFilter(sourceLayer, inFeature, searchDistance, false); pFS = (IFeatureSelection)sourceLayer; if (boolLayerOrFC) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain169")); if (pFS.SelectionSet.Count > 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain170")); pFS.SelectionSet.Search(sFilter, false, out cCurs); fCursor = cCurs as IFeatureCursor; } else { fCursor = sourceLayer.Search(sFilter, false); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain171")); fCursor = sourceLayer.FeatureClass.Search(sFilter, false); } nearestFeature = null; proxOp = (IProximityOperator)inFeature.ShapeCopy; lastDistance = searchDistance; while ((sourceFeature = fCursor.NextFeature()) != null) { if (sourceFeature.Class != inFeature.Class) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain172")); if (targetMatField == "" && sourceMatField == "") { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain173")); try { IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } pTempGeo = null; } catch { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain174")); return false; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain175")); int idxTargetFld = Globals.GetFieldIndex(sourceLayer, targetMatField); int idxSourceFld = Globals.GetFieldIndex(inObject.Fields, sourceMatField); if (idxSourceFld >= 0 && idxTargetFld >= 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain176")); if (inObject.get_Value(idxSourceFld).ToString() == sourceFeature.get_Value(idxTargetFld).ToString()) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } pTempGeo = null; } else { AAState.WriteLine(" Values does not Match: " + inObject.get_Value(idxSourceFld).ToString() + " - " + sourceFeature.get_Value(idxTargetFld).ToString()); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain177")); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } pTempGeo = null; } } } else if (sourceFeature.Class == inFeature.Class && sourceFeature.OID != inFeature.OID) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain175")); int idxTargetFld = Globals.GetFieldIndex(sourceLayer, targetMatField); int idxSourceFld = Globals.GetFieldIndex(inObject.Fields, sourceMatField); if (idxSourceFld >= 0 && idxTargetFld >= 0) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain176")); if (inObject.get_Value(idxSourceFld).ToString() == sourceFeature.get_Value(idxTargetFld).ToString()) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ay")); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } pTempGeo = null; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain177")); IGeometry pTempGeo = sourceFeature.ShapeCopy; pTempGeo.Project(inFeature.Shape.SpatialReference); distance = proxOp.ReturnDistance(pTempGeo); pTempGeo = null; if (distance <= lastDistance) { nearestFeature = sourceFeature; lastDistance = distance; } pTempGeo = null; } } } if (nearestFeature != null) { AAState.WriteLine(" Feature found: " + nearestFeature.Class.AliasName + ":" + nearestFeature.OID); inObject.set_Value(intFldIdxs[0], nearestFeature.get_Value(sourceField)); found = true; break; } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayer + ": field: " + sourceFieldName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + sourceLayer + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14bb")); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain178")); } } if (!found) { } } } } catch (Exception ex) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "NEAREST_FEATURE: " + ex.Message); } finally { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "NEAREST_FEATURE"); } break; default: AAState.WriteLine("ERROR: " + valMethod + " for layer " + tableName + " is not a valid method, check the dynamic value table"); break; } } catch (Exception ex) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain179") + tableName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain180") + strFldNames[0] + System.Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain181") + valMethod + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain182") + valData + System.Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain183") + ex.Message, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain184")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain185") + tableName + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain180") + strFldNames[0] + System.Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain181") + valMethod + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain182") + valData + System.Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain183") + ex.Message); } } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain186")); } try { if (intFldIdxs.Count > 0 && strFldNames.Count > 0) { for (int p = 0; p < strFldNames.Count; p++) { IRowChanges inChanges = inObject as IRowChanges; bool changed = inChanges.get_ValueChanged(intFldIdxs[p]); if (changed) try { if (AAState.lastValueProperties.GetProperty(strFldNames[p]) != null) { LastValueEntry lstVal = AAState.lastValueProperties.GetProperty(strFldNames[p]) as LastValueEntry; if (lstVal != null) { if (mode == "ON_CREATE" && lstVal.On_Create == false) { string test = ""; } else if (mode == "ON_MANUAL" && lstVal.On_Manual == false) { string test = ""; } else if (mode == "ON_CHANGE" && lstVal.On_ChangeAtt == false) { string test = ""; } else if (mode == "ON_CHANGEGEO" && lstVal.On_ChangeGeo == false) { string test = ""; } else { if (lstVal.Value != null) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14p") ); if (mode == "ON_CREATE" && (inObject.get_Value(intFldIdxs[p]) == null || inObject.get_Value(intFldIdxs[p]).ToString() == "")) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain187")); } else { AAState.WriteLine(" " + strFldNames[p] + ": " + inObject.get_Value(intFldIdxs[p]).ToString()); lstVal.Value = inObject.get_Value(intFldIdxs[p]); AAState.lastValueProperties.SetProperty(strFldNames[p], lstVal); } } else { if (mode == "ON_CREATE" && (inObject.get_Value(intFldIdxs[p]) == null || inObject.get_Value(intFldIdxs[p]).ToString() == "")) { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain187")); } else { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14p") ); AAState.WriteLine(" " + strFldNames[p] + ": " + inObject.get_Value(intFldIdxs[p]).ToString()); lstVal.Value = inObject.get_Value(intFldIdxs[p]); AAState.lastValueProperties.SetProperty(strFldNames[p], lstVal); } } } } } } catch { } } } } catch { AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain188")); } AAState.WriteLine(" ------------------------------------------------"); } } } return true; } catch (Exception ex) { MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain189") + System.Environment.NewLine + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain190") + ex.Message, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain184")); AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain189")); return false; } finally { if (AAState._tab == inObject.Class || AAState._gentab == inObject.Class) { AAState.reInitExt(); } //if (progressDialog != null) //{ // progressDialog.HideDialog(); //} AAState.WriteLine("DONE"); AAState.WriteLine("---------------------------------------"); if (fCursor != null) { Marshal.ReleaseComObject(fCursor); GC.Collect(300); GC.WaitForFullGCComplete(); } inFeature = null; mseg = null; netFeat = null; iEdgeFeat = null; iJuncFeat = null; //progressDialogFactory = null; //stepProgressor = null; //progressDialog = null; //trackCancel = null; ArcMap.Application.StatusBar.set_Message(0, A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain191")); } }
public void points() { string strs = "Marker"; switch (strs) { case "Marker": IMarkerElement pMarkerElement;//对于点,线,面的element定义这里都不一样,他是可实例化的类,而IElement是实例化的类,必须通过 IMarkerElement 初始化负值给 IElement 。 IElement pMElement; IPoint pPoint=new PointClass();//你画的图形式什么就是什么,特别的是LINE则需要定义为POLYLINE pMarkerElement = new MarkerElementClass(); pMElement = pMarkerElement as IElement; RubberPointClass pRubberBand = new RubberPointClass();//你的RUBBERBAND随着你的图形耳边 //pPoint = pRubberBand.TrackNew(axMapControl.ActiveView.ScreenDisplay, null) as IPoint; ////pPoint = pRubberBand.TrackNew(axMapControl.ActiveView.ScreenDisplay, null) as IPoint; //pPoint.X = 101; //pPoint.Y = 37; // pPoint.PutCoords(Convert.ToDouble(101), Convert.ToDouble(37)); //pPoint = axMapControl.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(200, 200); // pPoint.PutCoords(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)); // pPoint = axMapControl.ToMapPoint(334, 344); //pPoint.X = pPoint.X; //pPoint.Y = pPoint.Y; /*00000000000000000000000000000000000经纬度转换坐标*/ //IGlobeDisplay m_globeDisplay = axGlobeControl1.GlobeDisplay; //// IGlobeDisplay pGlobeDisplay = axGlobeControl1.GlobeDisplay; ////axGlobeControl1.GlobeDisplay.ActiveViewer; //ISceneViewer sceneViewer = m_globeDisplay.ActiveViewer; //IGlobeViewUtil globeViewUtil = (IGlobeViewUtil)sceneViewer.Camera; //int winX, winY; ////globeViewUtil.GeographicToWindow(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text), 0, out winX, out winY); ////pPoint.PutCoords(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));//x,y地理坐标 //pPoint=axMapControl.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(0, 0);//x,y为屏幕坐标 ////pPoint.X = Convert.ToDouble(textBox1.Text); ////pPoint.Y = Convert.ToDouble(textBox2.Text); //pPoint.PutCoords(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));//x,y地理坐标 //axMapControl.ActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(pPoint, out winX, out winY); // int mx = winX; //int my = winY; //pPoint=axMapControl.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(200, 400);//x,y为屏幕坐标 //调用GetProject2方法经纬度转换成米 pPoint = GetProject2(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)); //pPoint.PutCoords(Convert.ToDouble(textBox3.Text), Convert.ToDouble(textBox4.Text)); /*00000000000000000000000000000000000*/ // pPoint = axMapControl.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(mx, my); //pPoint.PutCoords(mx, my); //pPoint.X = mx; //pPoint.Y = my; //ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); //pPoint.SpatialReference = pSRF.CreateProjectedCoordinateSystem(2414); //pPoint.Project(pSRF.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954)); pMElement.Geometry = pPoint;//把你在屏幕中画好的图形付给 IElement 储存 IGraphicsContainer pGraphicsContainer = axMapControl.ActiveView as IGraphicsContainer;//把地图的当前view作为图片的容器 // axMapControl.get_Layer(0) // ILayer pLayer = this.axMapControl.get_Layer(1);//所要加的层 pGraphicsContainer.AddElement(pMElement, 0);//显示储存在 IElement 中图形,这样就持久化了。 axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); //axMapControl.Refresh(); break; case "Line": //ILineElement pLineElement; //IElement pLElement; //IPolyline pLine; // IGraphicsContainer pGraphicsContainerl = axMapControl.ActiveView as IGraphicsContainer;//把地图的当前view作为图片的容器 //pLineElement = new LineElementClass(); //pLElement = pLineElement as IElement; //RubberLineClass pRubberBandd = new RubberLineClass(); //pLine = pRubberBandd.TrackNew(axMapControl.ActiveView.ScreenDisplay, null) as IPolyline; //pLElement.Geometry = pLine; //pGraphicsContainerl = axMapControl.ActiveView as IGraphicsContainer;//把地图的当前view作为图片的容器 //pGraphicsContainerl.AddElement(pLElement, 0);//把刚刚的element转到容器上 //axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); //00000000000 //调用GetProject2方法经纬度转换成米 IPoint pPointl=new PointClass();//你画的图形式什么就是什么,特别的是LINE则需要定义为POLYLINE pPointl = GetProject2(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)); IPoint pPointl2=new PointClass();//你画的图形式什么就是什么,特别的是LINE则需要定义为POLYLINE pPointl2 = GetProject2(-120, 40); //创建一个Line对象 ILine pLine2 = new LineClass(); //Polyline pLine2 = new PolylineClass(); //设置Line对象的起始终止点 pLine2.PutCoords(pPointl, pPointl2); //IPointCollection pMultipoint = new MultipointClass(); //object o=Type.Missing; //pMultipoint.AddPoint(pPointl, ref o, ref o); //pMultipoint.AddPoint(pPointl2, ref o, ref o); axMapControl.ActiveView.Refresh();//刷新当前视图 break; case "Fill": IFillShapeElement pFillShapeElement; IElement pgonElemnt; IPolygon pPolygon; pFillShapeElement = new PolygonElementClass(); pgonElemnt = pFillShapeElement as IElement;//Element RubberPolygonClass pRubberBand3 = new RubberPolygonClass();//在屏幕上画个多边形 pPolygon = pRubberBand3.TrackNew(axMapControl.ActiveView.ScreenDisplay, null) as IPolygon; pgonElemnt.Geometry = pPolygon;//把这个多边形转成Element pGraphicsContainer = axMapControl.ActiveView as IGraphicsContainer;//把地图的当前view作为图片的容器 //pGraphicsContainer.DeleteAllElements (); pGraphicsContainer.AddElement(pgonElemnt, 0);//把刚刚的element转到容器上 axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); break; } }
//�õ��Ƕ� public static double GetAngle(ICurve pCurve) { double tmp = 0; if (pCurve != null && !pCurve.IsEmpty) { double PI = 3.1415926535897; //double dist; IPoint pPt1 = pCurve.FromPoint; IPoint pPt2 = pCurve.ToPoint; ILine pLine = new LineClass(); pLine.FromPoint = pPt1; pLine.ToPoint = pPt2; double angle = pLine.Angle; tmp = angle * (180 / PI); if (tmp < 0) tmp = 360 - Math.Abs(tmp); } return tmp; }
///方法1:根据点要素直接生产线要素,《参考绘制巷道》 /// <summary> /// 根据点集坐标绘制线要素 /// </summary> /// <params name="featureLayer"></params> /// <params name="lstPoint"></params> public static void CreateLine(IFeatureLayer featureLayer, List<IPoint> lstPoint, string ID) { try { IFeatureClass featureClass = featureLayer.FeatureClass; if (featureClass.ShapeType == esriGeometryType.esriGeometryPolyline) { IPointCollection multipoint = new MultipointClass(); if (lstPoint.Count < 2) { MessageBox.Show(@"请选择两个及两个以上点数。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ISegmentCollection pPath = new PathClass(); ILine pLine; ISegment pSegment; object o = Type.Missing; for (int i = 0; i < lstPoint.Count - 1; i++) { pLine = new LineClass(); pLine.PutCoords(lstPoint[i], lstPoint[i + 1]); pSegment = pLine as ISegment; pPath.AddSegment(pSegment, ref o, ref o); } IGeometryCollection pPolyline = new PolylineClass(); pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o); IDataset dataset = (IDataset)featureClass; IWorkspace workspace = dataset.Workspace; IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit; workspaceEdit.StartEditing(false); workspaceEdit.StartEditOperation(); IFeature feature = featureClass.CreateFeature(); IGeometry geometry = pPolyline as IGeometry; DrawCommon.HandleZMValue(feature, geometry);//几何图形Z值处理 feature.Shape = pPolyline as PolylineClass; int iFieldID = feature.Fields.FindField("BID"); feature.Value[iFieldID] = ID.ToString(); feature.Store(); workspaceEdit.StopEditOperation(); workspaceEdit.StopEditing(true); IEnvelope envelop = feature.Shape.Envelope; DataEditCommon.g_pMyMapCtrl.ActiveView.Extent = envelop; GIS.Common.DataEditCommon.g_pMyMapCtrl.ActiveView.Extent.Expand(1.5, 1.5, true); GIS.Common.DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(featureLayer, feature); GIS.Common.DataEditCommon.g_pMyMapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null); //DataEditCommon.g_pMyMapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); } else { MessageBox.Show(@"请选择线图层。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch { return; } }
private void DrawFanShaped(double x, double y, IActiveView pActiveView) { double radius = this.radius; double small_radius = this.small_radius; double start_angle = this.start_angle; double central_angle = this.central_angle; if (pActiveView != null) { IGraphicsContainer graphicsContainer = pActiveView as IGraphicsContainer; //画大圆 IPoint pCenterPoint = new PointClass(); pCenterPoint.PutCoords(x, y); ICircularArc pCircularArc = new CircularArcClass(); pCircularArc.PutCoordsByAngle(pCenterPoint, start_angle * Math.PI / 180.0, central_angle * Math.PI / 180.0, radius); IPoint pStartPoint = pCircularArc.FromPoint; IPoint pEndPoint = pCircularArc.ToPoint; ILine pLine1 = new LineClass(); pLine1.PutCoords(pCenterPoint, pStartPoint); ILine pLine2 = new LineClass(); pLine2.PutCoords(pEndPoint, pCenterPoint); ISegmentCollection pRing1 = new PolygonClass(); ISegment pSegment1 = pLine1 as ISegment; pRing1.AddSegment(pSegment1); ISegment pSegment2 = pCircularArc as ISegment; pRing1.AddSegment(pSegment2); ISegment pSegment3 = pLine2 as ISegment; pRing1.AddSegment(pSegment3); //小圆 ICircularArc pCircularArc1 = new CircularArcClass(); pCircularArc1.PutCoordsByAngle(pCenterPoint, start_angle * Math.PI / 180.0, central_angle * Math.PI / 180.0, small_radius); IPoint pStartPoint1 = pCircularArc1.FromPoint; IPoint pEndPoint1 = pCircularArc1.ToPoint; ILine pLine3 = new LineClass(); pLine3.PutCoords(pCenterPoint, pStartPoint1); ILine pLine4 = new LineClass(); pLine4.PutCoords(pEndPoint1, pCenterPoint); ISegmentCollection pRing2 = new PolygonClass(); ISegment pSegment4 = pLine3 as ISegment; pRing2.AddSegment(pSegment4); ISegment pSegment5 = pCircularArc1 as ISegment; pRing2.AddSegment(pSegment5); ISegment pSegment6 = pLine4 as ISegment; pRing2.AddSegment(pSegment6); //简化 ITopologicalOperator pTopoLogical1 = pRing1 as ITopologicalOperator; pTopoLogical1.Simplify(); ITopologicalOperator pTopoLogical2 = pRing2 as ITopologicalOperator; pTopoLogical2.Simplify(); IGeometry geometry = pTopoLogical1.Difference(pTopoLogical2 as IGeometry); //产生一个SimpleFillSymbol符号 IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 255; rgbColor.Green = 0; rgbColor.Blue = 0; ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Color = rgbColor; simpleLineSymbol.Width = 1; ISimpleFillSymbol simpleFillSymbol; simpleFillSymbol = new SimpleFillSymbolClass(); simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSDiagonalCross; //设置颜色 IRgbColor rgbcolor = new RgbColorClass(); rgbcolor.Red = 0; rgbcolor.Green = 0; rgbcolor.Blue = 255; simpleFillSymbol.Color = rgbcolor as IColor; simpleFillSymbol.Outline = simpleLineSymbol; IFillShapeElement fillShapeElement = new PolygonElementClass(); fillShapeElement.Symbol = simpleFillSymbol; IElement pElement = fillShapeElement as IElement; pElement.Geometry = geometry; graphicsContainer.AddElement(pElement, 0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } }
/// <summary> /// 面转线 /// </summary> /// <params name="pPolyline"></params> /// <returns></returns> public static List<ILine> PolygonToListline(IPolygon Polygon) { List<ILine> listline = new List<ILine>(); if (Polygon != null && Polygon.IsEmpty == false) { IGeometryCollection pPolygonGeoCol = Polygon as IGeometryCollection; ISegment pSegment = null; ILine pline = new LineClass(); for (int i = 0; i < pPolygonGeoCol.GeometryCount; i++) { ISegmentCollection pPolygonSegCol = pPolygonGeoCol.get_Geometry(i) as ISegmentCollection; for (int j = 0; j < pPolygonSegCol.SegmentCount; j++) { pSegment = pPolygonSegCol.get_Segment(j); pline = pSegment as ILine; listline.Add(pline); } } } return listline; }
private static double GetAngleOfSegment2(ISegment inSegment) { ILine line = new LineClass(); double outAngle; double pi = 4 * System.Math.Atan(1); line.FromPoint = inSegment.FromPoint; line.ToPoint = inSegment.ToPoint; outAngle = (int)System.Math.Round(((180 * line.Angle) / pi), 0); //outAngle = line.Angle; if (outAngle < 0) { outAngle += 360; } return outAngle; }
private void CreateDongShi(IPoint P0, IPoint P1, IPoint P2, IPoint P3, string hdid, string bid) { ISegmentCollection pPath = new PathClass(); //��һ���߶� ILine pLine = new LineClass(); pLine.PutCoords(P0, P1); //QI��ISegment ISegment pSegment = pLine as ISegment; //����һ��Path���� System.Object o = Type.Missing; //ͨ��ISegmentCollection�ӿ�ΪPath�������Segment���� pPath.AddSegment(pSegment, ref o, ref o); //�ڶ����߶� ILine pLine2 = new LineClass(); pLine2.PutCoords(P1, P2); ISegment pSegment2 = pLine2 as ISegment; //����һ��Path���� //ͨ��ISegmentCollection�ӿ�ΪPath�������Segment���� pPath.AddSegment(pSegment2, ref o, ref o); //�������߶� ILine pLine3 = new LineClass(); pLine3.PutCoords(P2, P3); ISegment pSegment3 = pLine3 as ISegment; //����һ��Path���� //ͨ��ISegmentCollection�ӿ�ΪPath�������Segment���� pPath.AddSegment(pSegment3, ref o, ref o); IGeometryCollection pPolyline = new PolylineClass(); //ͨ��IGeometryCollectionΪPolyline�������Path���� pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o); if (m_pDongshiFeatureLayer != null) { System.Collections.Generic.List<ziduan> list = new System.Collections.Generic.List<ziduan>(); list.Add(new ziduan(GIS_Const.FIELD_HDID, hdid)); list.Add(new ziduan(GIS_Const.FIELD_BID, bid)); DataEditCommon.CreateNewFeature(m_pDongshiFeatureLayer, pPolyline as IGeometry,list); m_hookHelper.ActiveView.Refresh(); } }