좌표축을 따라 다각형 이동

Oct 13 2020

C #으로 ArcObjects를 사용하여 BaseTool을 만들고 있습니다. 도구는 다각형을 줄이고 좌표 축을 따라 이동해야합니다. 다각형을 줄일 수있었습니다. 이 PutCoords()함수 를 사용하여 다각형을 오프셋 하고 싶을 때 왼쪽 하단 모서리로 매우 많이 이동합니다. 이는 PutCoords()함수의 매개 변수 값에서 발생 합니다.

private void ExtendPolygon(ref IFeature pPolygonFt)
    {            
        IMxDocument pDoc = m_application.Document as IMxDocument;
        IMap pMap = pDoc.Maps.get_Item(0);
        IArea pArea;
        pArea = pPolygonFt.Shape as IArea;            
        IPoint Center = pArea.Centroid; 
        Center.PutCoords(-1, -1);
        ITransform2D pTrans = pPolygonFt.Shape as ITransform2D;
        pTrans.Scale(Center, 0.5, 0.5);
        IEnvelope pPolyEnvelope = pPolygonFt.Extent;
        IFeatureLayer pFtLayer = pMap.get_Layer(1) as FeatureLayer;
        IFeatureClass pOutClass = pFtLayer.FeatureClass;
        IFeature ExtFt = pOutClass.CreateFeature();
        ExtFt.Shape = pPolygonFt.Shape; 
        pArea = ExtFt.Shape as IArea;
        ExtFt.set_Value(2, pArea.Area);
        ExtFt.Store();
        pDoc.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        pMap.SelectFeature(pMap.get_Layer(1), ExtFt);
        pDoc.ActivatedView.Extent = pPolyEnvelope;
        pDoc.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
    }

Visual Studio 2015, ArcMap 10.5, ArcObjects 10.5를 사용하고 있습니다.

이 상황을 어떻게 해결할 수 있습니까? 아니면 좌표축을 따라 다각형을 다른 방법으로 이동할 수 있습니까?

Move (-dx, -dy)를 사용할 때. 다각형이 원래 위치에서 매우 먼 거리로 이동하고 내가 원하는 위치가 아닙니다. 다른 값을 입력했지만 아무것도 변경되지 않습니다.

답변

1 KadirŞahbaz Oct 13 2020 at 00:37

좌표를 설정 Center한다고해서 다각형이 해당 좌표로 옮겨지는 것은 아닙니다. 중심은 다각형 자체를 나타내는 것이 아니라 점일뿐입니다. 다각형의 중심과 같은 좌표를 가진 점에 대한 좌표를 Center.PutCoords(-1, -1);설정 (-1, -1)하는 것입니다.

그런 식으로 사용하십시오.

private void ExtendPolygon(ref IFeature pPolygonFt)
    {
        ...         
        ...           
        IPoint Center = pArea.Centroid; 
        ITransform2D pTrans = pPolygonFt.Shape as ITransform2D;
        dx = Center.X - 1
        dy = center.Y - 1
        pTrans.Scale(Center, 0.5, 0.5);
        pTrans.Move(-dx, -dy)
        ...
        ...
    }