ArcGISCompare.execOptions.runTransform C# (CSharp) Метод

runTransform() статический приватный Метод

static private runTransform ( MigrationData theMigr, FeatureMappingData theMap, System.Windows.Forms.ProgressBar thePB ) : int
theMigr MigrationData
theMap FeatureMappingData
thePB System.Windows.Forms.ProgressBar
Результат int
        internal static int runTransform(MigrationData theMigr, FeatureMappingData theMap, ProgressBar thePB)
        {
            IFields outFields;
              IQueryFilter QF;
              IFeature outF;
              IRow outR = null;
              String FldName, PKPre;
              String defValue = "";
              String recPriKey = "";
              AttributeMappingData theAttMap;
              ITopologicalOperator theTopo;
              DataLossEntries theDL;
              IMAware MM;
              IZAware ZZ;
              IGeometry GG;
              Boolean hasConversion = false;
              IZ ZF;
              IPoint PP;
              IPolygon AA;
              IPolyline LL;
              IMCollection MColl;
              IMSegmentation2 MSeg;
              int inType, outType, L1, L2;
              Double inVal;
              Int32 M, T;
              Int32 PKNum;
              int inPos, sNum;
              ITable outTB = null;
              esriFieldType TIn;
              esriFieldType TOut;

              IFeatureClass srcFC = GeoDbProcs.GetFeatureClass(theMigr.srcWS, theMap.srcFC);
              IFeatureClass destFC = GeoDbProcs.GetFeatureClass(theMigr.destWS, theMap.destFC);

              int MoveQty = GeoDbProcs.GetFeatureCount(theMap.srcFC, theMigr.srcWS);
              int FeatCnt = GeoDbProcs.GetFeatureCount(theMap.destFC, theMigr.destWS);

              IEnumIndex theSPIndexes = destFC.Indexes.FindIndexesByFieldName(destFC.ShapeFieldName);
              theSPIndexes.Reset();

              IIndex theSP = theSPIndexes.Next();
              if (theSP != null) { destFC.DeleteIndex(theSP); }

              IWorkspaceEdit outWE = (IWorkspaceEdit)theMigr.destWS;

              outWE.StartEditing(false);
              outWE.StartEditOperation();

              thePB.Visible = true;
              thePB.Maximum = MoveQty;
              thePB.Value = 0;

              Boolean FirstRecord = true;
              IFeatureCursor allFeats = srcFC.Search(null, false);

              if (theMigr.splitNon) { outTB = GeoDbProcs.GetTable(theMigr.destWS, theMigr.preSplit + theMap.destFC); }
              IFeature srcF = allFeats.NextFeature();

              int PKCounter = FeatCnt + 1;

              while (srcF != null)
              {
            try
            {
              if (theMigr.splitNon) { outR = outTB.CreateRow(); }
              outF = destFC.CreateFeature();
              outFields = outF.Fields;

              // populate the indicated default values
              for (int m = 1; m < outFields.FieldCount; m++)
            if (outFields.get_Field(m).Type != esriFieldType.esriFieldTypeGeometry)
              if (outFields.get_Field(m).Editable)
                if (outFields.get_Field(m).DefaultValue != null) { outF.set_Value(m, outFields.get_Field(m).DefaultValue); }

              // translate and reproject the geometry
              for (int m = 1; m < outFields.FieldCount; m++)
              {
            if (outFields.get_Field(m).Type == esriFieldType.esriFieldTypeGeometry)
            {
            # region geometryTransformation
              switch (theMap.zmTransform)
              {
                case 0:  // No M or Z Value Changes
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:  // geometry is Point
                      GG = srcF.ShapeCopy;
                      PP = (IPoint)GG;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)PP;
                        IPolygon newP = (IPolygon)theTopo.Buffer(1.0);
                        ZZ = (IZAware)newP;
                        if (ZZ.ZAware != true)
                        {
                          ZZ.ZAware = true;
                          IPolygon thePoly = (IPolygon)ZZ;
                          IZ thePZ = (IZ)thePoly;
                          thePZ.SetConstantZ(PP.Z);
                          newP = (IPolygon)thePZ;
                        }
                        outF.Shape = newP;
                      }
                      else if (theMap.geomTransform == 4) { GeoDbProcs.DeleteFeature(destFC, outF.OID); }
                      else { outF.Shape = PP; }
                      break;
                    case esriGeometryType.esriGeometryPolyline: // geometry is line
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      if (theMap.geomTransform == 3 && theMigr.PolylineToPt)
                      {
                      }
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        outF.Shape = theL;
                      }
                      else { outF.Shape = AA; }
                      break;
                    default:
                      outF.Shape = srcF.ShapeCopy;
                      break;
                  }
                  break;
                case 1:  // remove Z values on source geometries
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:
                      GG = srcF.Shape;
                      PP = (IPoint)GG;
                      ZZ = (IZAware)PP;
                      if (ZZ.ZAware)
                      {
                        ZZ.DropZs();
                        ZZ.ZAware = false;
                      }
                      PP = (IPoint)ZZ;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)PP;
                        IGeometry theP = theTopo.Buffer(1.0);
                        outF.Shape = theP;
                      }
                      else { outF.Shape = PP; }
                      break;
                    case esriGeometryType.esriGeometryPolyline:
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      ZZ = (IZAware)LL;
                      if (ZZ.ZAware)
                      {
                        ZZ.DropZs();
                        ZZ.ZAware = false;
                      }
                      LL = (IPolyline)ZZ;
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      ZZ = (IZAware)AA;
                      if (ZZ.ZAware)
                      {
                        ZZ.DropZs();
                        ZZ.ZAware = false;
                      }
                      AA = (IPolygon)ZZ;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        outF.Shape = theL;
                      }
                      else { outF.Shape = AA; }
                      break;
                  }
                  break;
                case 2:  // add default Z Values
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:
                      GG = srcF.Shape;
                      PP = (IPoint)GG;
                      ZZ = (IZAware)PP;
                      if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                      PP = (IPoint)ZZ;
                      PP.Z = theMigr.DefZ;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)GG;
                        IGeometry theP = theTopo.Buffer(1.0);
                        ZZ = (IZAware)theP;
                        if (ZZ.ZAware != true)
                        {
                          ZZ.ZAware = true;
                          IPolygon thePoly = (IPolygon)ZZ;
                          IZ thePZ = (IZ)thePoly;
                          thePZ.SetConstantZ(theMigr.DefZ);
                          theP = (IPolygon)thePZ;
                        }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 4) { GeoDbProcs.DeleteFeature(destFC, outF.OID); }
                      else { outF.Shape = PP; }
                      break;
                    case esriGeometryType.esriGeometryPolyline:
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      ZZ = (IZAware)LL;
                      if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                      LL = (IPolyline)ZZ;
                      ZF = (IZ)LL;
                      ZF.SetConstantZ(theMigr.DefZ);
                      LL = (IPolyline)ZF;
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        ZZ = (IZAware)theP;
                        if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                        theP.Z = theMigr.DefZ;
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        ZZ = (IZAware)theL;
                        if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                        theL = (IGeometry)ZZ;
                        ZF = (IZ)theL;
                        ZF.SetConstantZ(theMigr.DefZ);
                        theL = (IGeometry)ZF;
                        outF.Shape = theL;
                      }
                      else
                      {
                        ZZ = (IZAware)AA;
                        if (ZZ.ZAware != true)
                        {
                          ZZ.ZAware = true; }
                          AA = (IPolygon)ZZ;
                          ZF = (IZ)AA;
                          ZF.SetConstantZ(theMigr.DefZ);
                          AA = (IPolygon)ZF;
                        outF.Shape = AA;
                      }
                      break;
                  }
                  break;
                case 3:  // remove M values
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:
                      GG = srcF.Shape;
                      PP = (IPoint)GG;
                      MM = (IMAware)PP;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      PP = (IPoint)MM;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)PP;
                        IGeometry theP = theTopo.Buffer(1.0);
                        ZZ = (IZAware)theP;
                        if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                        theP = (IPolygon)ZZ;
                        ZF = (IZ)theP;
                        ZF.SetConstantZ(PP.Z);
                        theP = (IPolygon)ZF;
                        outF.Shape = theP;
                      }
                      else
                      {
                        outF.Shape = PP;
                      }
                      break;
                    case esriGeometryType.esriGeometryPolyline:
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      MM = (IMAware)LL;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      LL = (IPolyline)MM;
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      MM = (IMAware)AA;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      AA = (IPolygon)MM;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        outF.Shape = theL;
                      }
                      else { outF.Shape = AA; }
                      break;
                  }
                  break;
                case 4:  // Add M's to geometry
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:
                      GG = srcF.Shape;
                      PP = (IPoint)GG;
                      MM = (IMAware)PP;
                      if (MM.MAware != true) { MM.MAware = true; }
                      PP = (IPoint)MM;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)PP;
                        IGeometry theP = theTopo.Buffer(1.0);
                        outF.Shape = theP;
                      }
                      else
                      {
                        outF.Shape = PP;
                      }
                      outF.Shape = PP;
                      break;
                    case esriGeometryType.esriGeometryPolyline:
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      MM = (IMAware)LL;
                      if (MM.MAware != true) { MM.MAware = true; }
                      LL = (IPolyline)MM;
                      MColl = (IMCollection)LL;
                      MSeg = (IMSegmentation2)MColl;
                      MSeg.SetMsAsDistance(true);
                      LL = (IPolyline)MSeg;
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      MM = (IMAware)AA;
                      if (MM.MAware != true) { MM.MAware = true; }
                      AA = (IPolygon)MM;
                      MColl = (IMCollection)AA;
                      MSeg = (IMSegmentation2)MColl;
                      MSeg.SetMsAsDistance(true);
                      AA = (IPolygon)MSeg;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        outF.Shape = theL;
                      }
                      else { outF.Shape = AA; }
                      break;
                  }
                  break;
                case 5:  // remove both M and Z Values
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:
                      GG = srcF.Shape;
                      PP = (IPoint)GG;
                      MM = (IMAware)PP;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      PP = (IPoint)MM;
                      ZZ = (IZAware)PP;
                      ZZ.DropZs();
                      ZZ.ZAware = false;
                      PP = (IPoint)ZZ;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)PP;
                        IGeometry theP = theTopo.Buffer(1.0);
                        outF.Shape = theP;
                      }
                      else
                      {
                        outF.Shape = PP;
                      }
                      outF.Shape = PP;
                      break;
                    case esriGeometryType.esriGeometryPolyline:
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      MM = (IMAware)LL;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      LL = (IPolyline)MM;
                      ZZ = (IZAware)LL;
                      ZZ.DropZs();
                      ZZ.ZAware = false;
                      LL = (IPolyline)ZZ;
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      MM = (IMAware)AA;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      AA = (IPolygon)MM;
                      ZZ = (IZAware)AA;
                      ZZ.DropZs();
                      ZZ.ZAware = false;
                      AA = (IPolygon)ZZ;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        outF.Shape = theL;
                      }
                      else { outF.Shape = AA; }
                      break;
                  }
                  break;
                case 6:  // Add M and Z Values
                  switch (srcF.Shape.GeometryType)
                  {
                    case esriGeometryType.esriGeometryPoint:
                      GG = srcF.Shape;
                      PP = (IPoint)GG;
                      ZZ = (IZAware)PP;
                      if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                      PP = (IPoint)ZZ;
                      PP.Z = theMigr.DefZ;
                      MM = (IMAware)PP;
                      if (MM.MAware != true) { MM.MAware = true; }
                      PP = (IPoint)MM;
                      if (theMap.geomTransform == 4 && theMigr.ptToPolygon)
                      {
                        theTopo = (ITopologicalOperator)PP;
                        IGeometry theP = theTopo.Buffer(1.0);
                        outF.Shape = theP;
                      }
                      else
                      {
                        outF.Shape = PP;
                      }
                      outF.Shape = PP;
                      break;
                    case esriGeometryType.esriGeometryPolyline:
                      GG = srcF.Shape;
                      LL = (IPolyline)GG;
                      ZZ = (IZAware)LL;
                      if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                      LL = (IPolyline)ZZ;
                      ZF = (IZ)LL;
                      ZF.SetConstantZ(theMigr.DefZ);
                      LL = (IPolyline)ZF;
                      MM = (IMAware)LL;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      LL = (IPolyline)MM;
                      outF.Shape = LL;
                      break;
                    case esriGeometryType.esriGeometryPolygon:
                      GG = srcF.Shape;
                      AA = (IPolygon)GG;
                      if (theMap.geomTransform == 1)
                      {
                        IArea theA = (IArea)AA;
                        IPoint theP = null;
                        if (theMigr.PolygonToPtI) { theP = theA.LabelPoint; }
                        if (theMigr.PolygonToPtA) { theP = theA.Centroid; }
                        outF.Shape = theP;
                      }
                      else if (theMap.geomTransform == 2)
                      {
                        theTopo = (ITopologicalOperator)AA;
                        IGeometry theL = theTopo.Boundary;
                        outF.Shape = theL;
                      }
                      else { outF.Shape = AA; }
                      ZZ = (IZAware)AA;
                      if (ZZ.ZAware != true) { ZZ.ZAware = true; }
                      AA = (IPolygon)ZZ;
                      ZF = (IZ)AA;
                      ZF.SetConstantZ(theMigr.DefZ);
                      AA = (IPolygon)ZF;
                      MM = (IMAware)AA;
                      if (MM.MAware == true)
                      {
                        MM.DropMs();
                        MM.MAware = false;
                      }
                      AA = (IPolygon)MM;
                      break;
                  }
                  break;
              }
            #endregion
            }
            else
            {
            # region fieldTransformation
              FldName = outFields.get_Field(m).Name;
              theAttMap = getAttributeMapping(theMap, FldName);
              if (theAttMap != null)
              {
                switch (theAttMap.transform)
                {
                  case -1:  //the field is not mapped
                    break;
                  case 0:  // the field is translatable As Is
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                      if (srcF.get_Value(inPos).ToString() != "") { outF.set_Value(m, srcF.get_Value(inPos)); }
                    if (FirstRecord) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " As Is"); }
                    break;
                  case 18: // insertion of constant values for nulls
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                      if (srcF.get_Value(inPos).ToString() != "") { outF.set_Value(m, srcF.get_Value(inPos)); }
                    if (FirstRecord) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " inserting " + defValue + " for NULLS"); }
                    break;
                  case 23:  // overwrite with a constant or place a constant in all records
                    switch (outF.Fields.get_Field(m).Type)
                    {
                      case esriFieldType.esriFieldTypeString:
                        outF.set_Value(m, theAttMap.constant.ToString());
                        break;
                      case esriFieldType.esriFieldTypeDouble:
                        outF.set_Value(m, Convert.ToDouble(theAttMap.constant));
                        break;
                      case esriFieldType.esriFieldTypeSingle:
                        outF.set_Value(m, Convert.ToSingle(theAttMap.constant));
                        break;
                      case esriFieldType.esriFieldTypeInteger:
                        outF.set_Value(m, Convert.ToInt32(theAttMap.constant));
                        break;
                      case esriFieldType.esriFieldTypeSmallInteger:
                        outF.set_Value(m, Convert.ToInt16(theAttMap.constant));
                        break;
                      case esriFieldType.esriFieldTypeDate:
                        outF.set_Value(m, Convert.ToDateTime(theAttMap.constant));
                        break;
                    }
                    if (FirstRecord) { theAttMap.AddResults("Placed Constant " + theAttMap.constant.ToString() + " into " + FldName + " Overwriting Existing Data"); }
                    break;
                  case 4:  // shorten a character/string field
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                      if (srcF.get_Value(inPos).ToString() != "")
                      {
                        if (srcF.get_Value(inPos).ToString().Length <= outF.Fields.get_Field(m).Length)
                        {
                          outF.set_Value(m, srcF.get_Value(inPos));
                        }
                        else
                        {
                          theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in shortening a String Field"));
                          outF.set_Value(m, srcF.get_Value(inPos).ToString().Substring(0, outF.Fields.get_Field(m).Length));
                        }
                      }
                    if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                    break;
                  case 10:  // converting numeric to string
                  case 11:
                  case 12:
                  case 13:
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                      if (srcF.get_Value(inPos).ToString().Length <= outF.Fields.get_Field(m).Length) { outF.set_Value(m, srcF.get_Value(inPos)); }
                      else
                      {
                        theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in converting Numeric Data Type to String"));
                        outF.set_Value(m, srcF.get_Value(inPos).ToString().Substring(0, outF.Fields.get_Field(m).Length));
                      }
                      if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                      if (theAttMap.dataLoss == 0) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " converting numeric Data Type"); }
                    break;
                  case 5: // converting string to integer
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                    {
                      Int32 i = 0;
                      Boolean result = Int32.TryParse(srcF.get_Value(inPos).ToString(), out i);
                      if (result != true)
                      {
                        theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in converting String to Long Integer"));
                      }
                      if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                      if (theAttMap.dataLoss == 0) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " converting Data Type"); }
                    }
                    break;
                 case 6:
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                    {
                      Double i = 0;
                      Boolean result = Double.TryParse(srcF.get_Value(inPos).ToString(), out i);
                      if (result != true) { theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in converting String to Double")); }
                      if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                      if (theAttMap.dataLoss == 0) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " converting Data Type"); }
                    }
                    break;
                  case 14:
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                    {
                      int i = 0;
                      Boolean result = int.TryParse(srcF.get_Value(inPos).ToString(), out i);
                      if (result != true) { theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in converting String to Short Integer")); }
                    if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                    if (theAttMap.dataLoss == 0) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " converting Data Type"); }
                    }
                    break;
                  case 3:   // double/single to int/shortInt
                  case 16:
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                    {
                      inVal = (Double)srcF.get_Value(inPos);
                      if (inVal == Convert.ToInt32(inVal)) { outF.set_Value(m, Convert.ToInt32(inVal)); }
                      else
                      {
                        outF.set_Value(m, Convert.ToInt32(inVal));
                        theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in converting Decimal to Integer"));
                      }
                      if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                      if (theAttMap.dataLoss == 0) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " converting Data Type"); }
                    }
                    break;
                  case 8:  // long integer to datetime
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                    {
                      String yearEquiv = srcF.get_Value(inPos).ToString();
                      if (yearEquiv.Length != 8) { theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "Data Loss in converting Integer to DateTime")); }
                      else
                      {
                        DateTime theD = new DateTime(Convert.ToInt16(yearEquiv.Substring(0, 4)), Convert.ToInt16(yearEquiv.Substring(5, 2)), Convert.ToInt16(yearEquiv.Substring(7, 2)));
                        outF.set_Value(m, theD);
                      }
                      if (theAttMap.dataLoss == 1) { theAttMap.AddResults("Data Loss in Moving " + srcF.get_Value(inPos) + " to " + FldName); }
                      if (theAttMap.dataLoss == 0) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " converting Data Type"); }
                    }
                    break;
                  case 17:  // populating the Primary Keys
                    PKPre = theMigr.preK;
                    recPriKey = PKPre + PKCounter.ToString("0000000#");
                    outF.set_Value(m, recPriKey);
                    if (FirstRecord) { theAttMap.AddResults("Primary Key Values Auto-populated beginning with " + PKPre + PKCounter.ToString("0000000#")); }
                    PKCounter += 1;
                    break;
                  case 21:  // Autopopulate the SubTypeID
                    Int32 theST = Convert.ToInt32(theAttMap.constant);
                    outF.set_Value(m, theST);
                    if (FirstRecord) { theAttMap.AddResults("SubtypeID populated with " + theAttMap.constant.ToString()); }
                    break;
                  case 20:  // domain Value Conversion (reserved for future use
                    inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theAttMap.srcFC, theAttMap.srcAtt);
                    if (srcF.get_Value(inPos) != null)
                      if (srcF.get_Value(inPos).ToString() != "")
                      {
                        hasConversion = false;
                        if (theAttMap.theConversions != null)
                        {
                          foreach (ValueMappingData theConversion in theAttMap.theConversions)
                            if (theConversion.srcV.ToString().ToLower() == srcF.get_Value(inPos).ToString().ToLower())
                            {
                              hasConversion = true;
                              outF.set_Value(m, theConversion.destV.ToString());
                            }
                          if (hasConversion == false)
                          {
                            theAttMap.AddDataLoss(new DataLossEntries(theAttMap.serialNumber, theAttMap.srcFC, theAttMap.destFC, theAttMap.srcAtt, srcF.OID, "No Conversion Specified for " + srcF.get_Value(inPos)));
                          }
                        }
                      }
                      if (FirstRecord) { theAttMap.AddResults(srcF.Fields.get_Field(inPos).Name + " into " + FldName + " As Is"); }
                    break;
                }
              }
            #endregion
            }
              }
              if (theMigr.splitNon)
              {
            for (int n = 0; n < outTB.Fields.FieldCount; n++)
            {
              if (outTB.Fields.get_Field(n).Editable == true)
              {
                FldName = outTB.Fields.get_Field(n).Name;
                int b = srcFC.Fields.FindField(FldName);
                TIn = srcFC.Fields.get_Field(b).Type;
                TOut = outTB.Fields.get_Field(n).Type;
                L1 = srcFC.Fields.get_Field(b).Length;
                L2 = outTB.Fields.get_Field(n).Length;
                String thePK = theMap.destPK.ToString().ToUpper();
                if (FldName.ToUpper() == theMap.destPK.ToString().ToUpper()) { outR.set_Value(n, recPriKey); }
                else
                {
                  inPos = GeoDbProcs.getFieldPosition(theMigr.srcWS, theMap.srcFC, FldName);
                  if (inPos >= 0) {  outR.set_Value(n, srcF.get_Value(inPos)); }
                }
              }
            }
            outR.Store();
              }
              outF.Store();
              thePB.Increment(1);
              if (MoveQty >= 10)
              {
            int Moved = Convert.ToInt32(MoveQty / 10);
            if (thePB.Value % Moved == 0)
            {
              outWE.StopEditOperation();
              outWE.StopEditing(true);
              outWE.StartEditing(false);
              outWE.StartEditOperation();
            }
              }
              Application.DoEvents();
            }
            catch (Exception ex)