public override void Update(IPageLayout ipageLayout_0) { if (this.Element != null) { (ipageLayout_0 as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, this.Element, null); IPoint position = this.GetPosition(ipageLayout_0); (this.Element as TableElement).RowNumber = this.RowNumber; (this.Element as TableElement).ColumnNumber = this.ColumnNumber; IEnvelope to = this.Element.Geometry.Envelope; (this.Element as TableElement).CreateTable(ipageLayout_0 as IActiveView, position, this.sortedList_0); IEnvelope envelope = this.Element.Geometry.Envelope; this.Element.QueryBounds((ipageLayout_0 as IActiveView).ScreenDisplay, envelope); try { IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(envelope, to); (base.m_pElement as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation); } catch { } (ipageLayout_0 as IActiveView).GraphicsContainer.UpdateElement(base.m_pElement); (ipageLayout_0 as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, base.m_pElement, null); this.Save(); } }
private void method_0(bool bool_0) { double width = this.ienvelope_0.Width; double height = this.ienvelope_0.Height; if (width == 0.0) { this.ienvelope_0.Width = 1.0; this.ienvelope_1.Width = 1.0; } if (height == 0.0) { this.ienvelope_0.Height = 1.0; this.ienvelope_1.Height = 1.0; } IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(this.ienvelope_0, this.ienvelope_1); ITransform2D transformd = this.ielement_0 as ITransform2D; if (bool_0) { transformd.Transform(esriTransformDirection.esriTransformForward, transformation); } else { transformd.Transform(esriTransformDirection.esriTransformReverse, transformation); } }
public bool GetTK(IPageLayout ipageLayout_0) { IEnvelope envelope; IEnvelope envelope2; if (this.string_2.Length == 0) { return(false); } IMapFrame frame = (ipageLayout_0 as IActiveView).GraphicsContainer.FindFrame((ipageLayout_0 as IActiveView).FocusMap) as IMapFrame; if ((this.double_1 != 0.0) || (this.double_2 != 0.0)) { ipageLayout_0.Page.PutCustomSize(this.double_1 + 6.0, this.double_2 + 6.0); envelope = (frame as IElement).Geometry.Envelope; envelope2 = new EnvelopeClass(); if (this.double_1 == 0.0) { this.double_1 = envelope.Width; } if (this.double_2 == 0.0) { this.double_2 = envelope.Height; } envelope2.PutCoords(envelope.XMin, envelope.YMin, envelope.XMin + this.double_1, envelope.YMin + this.double_2); IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(envelope, envelope2); ITransform2D transformd = frame as ITransform2D; transformd.Transform(esriTransformDirection.esriTransformForward, transformation); double dx = 0.0; double dy = 0.0; if (envelope.XMin < 2.0) { dx = 2.0; } if (envelope.YMin < 2.0) { dy = 2.0; } if ((dx != 0.0) && (dy != 0.0)) { transformd.Move(dx, dy); } } if (this.double_0 > 0.0) { envelope = (frame as IElement).Geometry.Envelope; double num3 = (envelope.Width * this.double_0) / 100.0; double num4 = (envelope.Height * this.double_0) / 100.0; IEnvelope extent = (frame.Map as IActiveView).Extent; envelope2 = new EnvelopeClass(); envelope2.PutCoords(extent.XMin, extent.YMin, extent.XMin + num3, extent.YMin + num4); (frame.Map as IActiveView).Extent = envelope2; } frame.Border = null; return(true); }
public void Apply() { if (this.bool_1) { try { double xMin = double.Parse(this.txtX.Text); double yMin = double.Parse(this.txtY.Text); double num3 = double.Parse(this.txtWidth.Text); double num4 = double.Parse(this.txtHeight.Text); IEnvelope to = new EnvelopeClass(); to.PutCoords(xMin, yMin, xMin + num3, yMin + num4); IEnvelope envelope = this.ielement_0.Geometry.Envelope; if ((num3 == 0.0) || (num4 == 0.0)) { if (this.ielement_0 is ILineElement) { IPointCollection geometry = this.ielement_0.Geometry as IPointCollection; if (geometry.PointCount == 2) { object missing = System.Type.Missing; IPointCollection points2 = new PolylineClass(); PointClass class2 = new PointClass { X = xMin, Y = yMin }; IPoint inPoint = class2; PointClass class3 = new PointClass { X = xMin + num3, Y = yMin + num4 }; IPoint point2 = class3; points2.AddPoint(inPoint, ref missing, ref missing); points2.AddPoint(point2, ref missing, ref missing); this.ielement_0.Geometry = points2 as IGeometry; } } } else { IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(envelope, to); (this.ielement_0 as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation); } this.bool_1 = false; } catch { MessageBox.Show("数据输入错误,请检查!"); } } }
private void method_5(IElement ielement_0, double double_0) { IEnvelope from = base.m_pElement.Geometry.Envelope; IEnvelope envelope = ielement_0.Geometry.Envelope; envelope.Expand(double_0, double_0, true); IEnvelope to = new EnvelopeClass(); to.PutCoords(from.XMin, from.YMin, from.XMin + envelope.Width, from.YMin + envelope.Height); IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(from, to); (base.m_pElement as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation); }
public override IElement GetElement(IPageLayout ipageLayout_0) { IElement element = base.GetElement(ipageLayout_0); if (this.bool_0) { IEnvelope envelope = (MapFrameAssistant.GetFocusMapFrame(ipageLayout_0) as IElement).Geometry.Envelope; IEnvelope from = element.Geometry.Envelope; IEnvelope to = element.Geometry.Envelope; to.PutCoords(from.XMin, from.YMin, from.XMin + envelope.Width, from.YMax); IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(from, to); (element as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation); } return(element); }
//仿射变换 private void AffineAdjust() { AffineTransformation2DClass affineTrans = new AffineTransformation2DClass(); int nCount = m_NewDisplacement.ControlPointsCount; IPoint[] fromPoints = new IPoint[nCount]; IPoint[] toPoints = new IPoint[nCount]; for (int i = 0; i < nCount; i++) { fromPoints[i] = m_NewDisplacement.OriginPoints.get_Point(i); toPoints[i] = m_NewDisplacement.TargetPoints.get_Point(i); } affineTrans.DefineFromControlPoints(fromPoints, toPoints); execAdjust(affineTrans); }
public override IElement GetElement(IPageLayout ipageLayout_0) { IElement element = base.GetElement(ipageLayout_0); if (this.SizeStyle != MapCartoTemplateLib.SizeStyle.Fixed) { double num; IEnvelope envelope = (MapFrameAssistant.GetFocusMapFrame(ipageLayout_0) as IElement).Geometry.Envelope; IEnvelope from = element.Geometry.Envelope; if (from.IsEmpty) { return(element); } IEnvelope to = element.Geometry.Envelope; if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.SameAsInsideWidth) { num = (from.Height * envelope.Width) / from.Width; to.PutCoords(from.XMin, from.YMin, from.XMin + envelope.Width, from.YMin + num); } else if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.SameAsInsideHeight) { num = (from.Width * envelope.Height) / from.Height; to.PutCoords(from.XMin, from.YMin, from.XMin + num, from.YMin + envelope.Height); } else { double num2; if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.InsideWidthScale) { num2 = envelope.Width * this.SizeScale; num = (from.Height * num2) / from.Width; to.PutCoords(from.XMin, from.YMin, from.XMin + num2, from.YMin + num); } else if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.InsideWidthScale) { num = envelope.Height * this.SizeScale; num2 = (from.Width * num) / from.Height; to.PutCoords(from.XMin, from.YMin, from.XMin + num2, from.YMin + num); } } IAffineTransformation2D transformation = new AffineTransformation2DClass(); transformation.DefineFromEnvelopes(from, to); (element as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation); } return(element); }
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); }
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 bool ComputeShapeDistortionParameters(IPoint[] FabricPoints, IPoint[] AdjustedTraversePoints, out double RotationInRadians, out double Scale, out double ShpStdErrX, out double ShpStdErrY) { Scale = 1; RotationInRadians = 0; ShpStdErrX = 0; ShpStdErrY = 0; IAffineTransformation2D3GEN affineTransformation2D = new AffineTransformation2DClass(); try { affineTransformation2D.DefineConformalFromControlPoints(ref FabricPoints, ref AdjustedTraversePoints); } catch { return false; } RotationInRadians = affineTransformation2D.Rotation; Scale = affineTransformation2D.XScale; Scale = affineTransformation2D.YScale; Scale = 1 / Scale; //the inverse of this computed scale is stored int iLen = FabricPoints.GetLength(0) * 2; double[] inPoints = new double[iLen]; double[] outPoints = new double[iLen]; double[] adjTrav = new double[iLen]; int x = 0; int y = 0; for (int j = 0; j < FabricPoints.GetLength(0); j++) { x = j * 2; y = x + 1; inPoints[x] = FabricPoints[j].X;//x inPoints[y] = FabricPoints[j].Y;//y adjTrav[x] = AdjustedTraversePoints[j].X;//x adjTrav[y] = AdjustedTraversePoints[j].Y;//y } affineTransformation2D.TransformPointsFF(esriTransformDirection.esriTransformForward, ref inPoints, ref outPoints); //now build a list of the diffs for x and y between transformed and the AdjustedTraverse Results int iLen2 = FabricPoints.GetLength(0); double[] errX = new double[iLen2]; double[] errY = new double[iLen2]; x = 0; y = 0; double dSUMX = 0; double dSUMY = 0; for (int j = 0; j < iLen2; j++) { x = j * 2; y = x + 1; errX[j] = adjTrav[x] - outPoints[x] + 100000;//x errY[j] = adjTrav[y] - outPoints[y] + 100000;//y dSUMX += errX[j]; dSUMY += errY[j]; } double dMean = 0; double dStdDevX = 0; double dStdDevY = 0; double dRange; int iOutliers = 0; GetStatistics(errX, dSUMX, 1, out dMean, out dStdDevX, out dRange, out iOutliers); GetStatistics(errY, dSUMY, 1, out dMean, out dStdDevY, out dRange, out iOutliers); ShpStdErrX = dStdDevX; ShpStdErrY = dStdDevY; return true; }
/// <summary> /// Parse the RPC parameters file associated with the image and create an RPCXform /// to bea applied to the inputDataset as a geomtric function. /// </summary> /// <param name="rpcPath">Path to the rpc parameters file.</param> /// <param name="inputDataset">Input dataset to apply the xform on.</param> /// <returns>Function raster dataset created.</returns> private IFunctionRasterDataset ApplyRPC(string rpcPath, IRasterDataset inputDataset) { IFunctionRasterDataset opFrd = null; try { // Open the RPC file and create Geometric transform IGeodataXform finalXForm = null; IRPCXform rpcXForm = GetRPCXForm(rpcPath); IFunctionRasterDataset idFrd = null; if (!(inputDataset is IFunctionRasterDataset)) { IRasterFunction identityFunction = new IdentityFunctionClass(); idFrd = new FunctionRasterDatasetClass(); idFrd.Init(identityFunction, inputDataset); } else idFrd = (IFunctionRasterDataset)inputDataset; IRasterInfo datasetRasterInfo = idFrd.RasterInfo; IEnvelope datasetExtent = datasetRasterInfo.Extent; ISpatialReference datasetSrs = ((IGeoDataset)idFrd).SpatialReference; long dRows = datasetRasterInfo.Height; long dCols = datasetRasterInfo.Width; IEnvelope pixelExtent = new EnvelopeClass(); pixelExtent.PutCoords(-0.5, 0.5 - dRows, -0.5 + dCols, 0.5); bool noAffineNeeded = ((IClone)pixelExtent).IsEqual((IClone)datasetExtent); if (!noAffineNeeded) { // Tranform ground space to pixel space. IAffineTransformation2D affineXform = new AffineTransformation2DClass(); affineXform.DefineFromEnvelopes(datasetExtent, pixelExtent); IGeometricXform geoXform = new GeometricXformClass(); geoXform.Transformation = affineXform; finalXForm = geoXform; } // Transform from pixel space back to ground space to set as the forward transform. IEnvelope groundExtent = ((IGeoDataset)idFrd).Extent; groundExtent.Project(datasetSrs); IAffineTransformation2D affineXform2 = new AffineTransformation2DClass(); affineXform2.DefineFromEnvelopes(pixelExtent, groundExtent); IGeometricXform forwardXForm = new GeometricXformClass(); forwardXForm.Transformation = affineXform2; rpcXForm.ForwardXform = forwardXForm; // Create the composite transform that changes ground values to pixel space // then applies the rpc transform which will transform them back to ground space. ICompositeXform compositeXForm = new CompositeXformClass(); compositeXForm.Add(finalXForm); compositeXForm.Add(rpcXForm); finalXForm = (IGeodataXform)compositeXForm; // Then apply the transform on the raster using the geometric function. if (finalXForm != null) { IRasterFunction geometricFunction = new GeometricFunctionClass(); IGeometricFunctionArguments geometricFunctionArgs = null; // Get the geomtric function arguments if supplied by the user (in the UI). if (myRasterTypeOperation != null && ((IRasterTypeProperties)myRasterTypeOperation).OrthorectificationParameters != null) geometricFunctionArgs = ((IRasterTypeProperties)myRasterTypeOperation).OrthorectificationParameters; else geometricFunctionArgs = new GeometricFunctionArgumentsClass(); // Append the xform to the existing ones from the image. geometricFunctionArgs.AppendGeodataXform = true; geometricFunctionArgs.GeodataXform = finalXForm; geometricFunctionArgs.Raster = inputDataset; opFrd = new FunctionRasterDatasetClass(); opFrd.Init(geometricFunction, geometricFunctionArgs); } return opFrd; } catch (Exception exc) { string error = exc.Message; return opFrd; } }
public void transform2D() { IAffineTransformation2D3GEN affineTransformation2D = new AffineTransformation2DClass(); affineTransformation2D.DefineFromControlPoints(ref fromPoints, ref toPoints); //单点转换 //double[] inPoints = new double[3]; //double[] outPoints = new double[3]; //inPoints[0] = 501557.117; //inPoints[1] = 4041000.863; //inPoints[2] = 1651.875; //affineTransformation2D.TransformPointsFF(esriTransformDirection.esriTransformForward, ref inPoints, ref outPoints); IWorkspaceFactory shapefileworkspaceF = new ShapefileWorkspaceFactoryClass(); IWorkspace workspace = shapefileworkspaceF.OpenFromFile(workspaceName, 0); IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; IFeatureClass pFeatureClass = featureWorkspace.OpenFeatureClass(shapefileName) as IFeatureClass; IFeatureClass pFeatureClass1 = featureWorkspace.CreateFeatureClass("test", pFeatureClass.Fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); for (int i = 0; i < pFeatureClass.FeatureCount(null); i++) { IFeature pFeature = (IFeature)pFeatureClass.GetFeature(i); IFeature pFeature1 = pFeatureClass1.CreateFeature(); pFeature1.Shape = pFeature.ShapeCopy; IGeometry pGeometry = (IGeometry)pFeature1.Shape; ITransform2D transform2D = pGeometry as ITransform2D; transform2D.Transform(esriTransformDirection.esriTransformForward, affineTransformation2D as ITransformation); pFeature1.Store(); } }