Edit Sketch Properties

0 голосов
спросил 23 Май, 10 от Valdemar1 (440 баллов) в категории Программные продукты Esri
Привет всем) Народ меня интересует такой вопрос: как обратиться программно(посредством c#) к таблицe Edit Sketch Properties(в ArcMAp)?

14 Ответы

0 голосов
ответил 24 Май, 10 от Valdemar1 (440 баллов)
Мне это необходимо для перемещение объектов на карте) например сдвинуть объект на заданные координаты(программно посредством c#). Как например есть стандартный инструмент в ArcMap Move/Move to, который перемещает на заданные координаты. Как вообще реализовать данную функцию? у меня возникла идея получить доступ к таблице Edit Sketch Properties, и изменять там данные, а вот каким образом получить этот доступ не знаю((((( может кто-нибудь хоть  что-то подскажет???? очень нужно, заранее огромное спасибо))) я новичок и поэтому строго не судите...ибо я еще учуся
0 голосов
ответил 24 Май, 10 от TDenis (42,620 баллов)
Ну раз учитеся...
Для программного изменения геометрии не нужно это окно.

Находите слой.
IGPUtilities.FindMapLayer
Проверяете, что это слой пространственных объектов.
IFeatureLayer
Находите нужную фигурку в этом слое.
IFeatureLayer.FeatureClass
IFeatureClass.Update

Или перебираете точки и меняете координаты или делаете какое-нибудь афинное преобразование всей фигурки.
IPointCollection
ITransform2D

Сохраняете изменения.
IFeatureCursor.UpdateFeature
Освобождаете курсор.
Marshal.ReleaseComObject

Погуглите по этим ключевым словам, найдёте кучу примеров.
    
0 голосов
ответил 02 Июнь, 10 от Valdemar1 (440 баллов)
что - то у меня не получается все это как то связать...не могу найти нормальные куски кода, где можно посмотреть что и как...что-то запутался я) если не тяжело, то можно примеры какие-нибудь выложить??? где можно посмотреть вообще как все это описывается) в справке читал(Developer help), но что - то как-то там совсем уж кратко написано..и совсем не ясно как использовать(видать сказывается уровень новичка)...эхх а как хочеться то разобраться с этим=)
0 голосов
ответил 03 Июнь, 10 от TDenis (42,620 баллов)
Позволю себе нескромно дать ссылку на свой же креатив:
https://forum.esri-cis.ru/index.php?qa=35739

Если Вы всё это знаете, то давайте по пунктам, что конкретно не получается.
Получилось ли найти слой, в котором Вы собираетесь редактировать данные?
И т.д.
0 голосов
ответил 08 Июнь, 10 от Valdemar1 (440 баллов)
частично я сделал) вообщем у меня сейчас перемещает полигоны на заданные координаты) только дело в том, что перемещает все полигоны, находящиеся на карте, как сделать так чтобы определенный полигон только сдвигался??? спасибо заранее)
0 голосов
ответил 08 Июнь, 10 от Valdemar1 (440 баллов)
то есть например я выбрал кликом мышки заданный полигон и потом уже его сдвигаю)
0 голосов
ответил 08 Июнь, 10 от TDenis (42,620 баллов)
частично я сделал) вообщем у меня сейчас перемещает полигоны на заданные координаты) только дело в том, что перемещает все полигоны, находящиеся на карте, как сделать так чтобы определенный полигон только сдвигался??? спасибо заранее)

image Наверное надо перемещать определённый полигон, а не весь слой!

Кто кроме вас знает, что вы там сделали и как это исправить? Как нам догадаться?
Код хотя бы скиньте что ли.
0 голосов
ответил 08 Июнь, 10 от Valdemar1 (440 баллов)
нужно перемещать определенный полигон)
0 голосов
ответил 08 Июнь, 10 от Valdemar1 (440 баллов)
public void IFeatureWorkspace_OpenFeatureClass_Example(string dataPath, string nameOfShapefile)
        {

            IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath, 0);
            IFeatureClass inputFeatureClass = featureWorkspace.OpenFeatureClass(nameOfShapefile);
            Console.WriteLine("There are {0} features in the {1} feature class", inputFeatureClass.FeatureCount(new QueryFilterClass()), inputFeatureClass.AliasName);

            // Получить курсор для обновления
            IFeatureCursor updateCursor = inputFeatureClass.Update(null, false);
            // Получить первый объект
            IFeature updateFeature = updateCursor.NextFeature();
            
            // Перебрать все объекты
            while (updateFeature != null)
            {
               // Проверить, является ли тип полигоном
               if (updateFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
               {
                    // Получить "геометрию"
                    IGeometry geometry = updateFeature.Shape;
                    
                    // Получить полигон
                    IPolygon polygon = updateFeature.Shape as IPolygon;
                    // Получить коллекцию точек полигона
                    IPointCollection4 pointCollection = polygon as IPointCollection4;
                    //pointCollection.get_Point(1).PutCoords(50,59);
                    ESRI.ArcGIS.Geometry.IAffineTransformation2D affineTransformation2D = new ESRI.ArcGIS.Geometry.AffineTransformation2DClass();
                    affineTransformation2D.Move(200000000000, 30000000000);
                    ESRI.ArcGIS.Geometry.ITransform2D transform2D = polygon as ESRI.ArcGIS.Geometry.ITransform2D;
                    transform2D.Transform(ESRI.ArcGIS.Geometry.esriTransformDirection.esriTransformForward, affineTransformation2D);

                    // Массив для хранения точек
                    ArrayList points = new ArrayList();

                    // Флаг для определения: вычислять ли "серединную" точку
                    bool averagePoint = false;


                    // Перебрать все точки в полигоне
                    int i = 0;
                    while (i < pointCollection.PointCount)
                    {
                        if (averagePoint == false)
                        {
                            // Не вычислять "серединную" точку


                            // Добавить точку в массив точек
                            points.Add(pointCollection.get_Point(i));

                            // Установить флаг на true
                            averagePoint = true;
                        }


                        else
                        {
                            // Вычислить "серединную" точку


                            // Получить начальную точку
            &nbsp
0 голосов
ответил 08 Июнь, 10 от Valdemar1 (440 баллов)
тока в коде еще много лишнего, просто пока что это пробы) вообщем нужно чтобы например по щелчку мыши выбрать определенный полигон, потом нажимаю на свою кнопку и она сдвигает полигон на определенные координаты)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...