На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Вырезка внутреннего площадного объекта из внешнего (C#)

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Вырезка внутреннего площадного объекта из внешнего (C#)
 
Только разбираюсь в устройстве GIS ToolKit и возникли трудности в казалось бы простой операции вырезки одного площадного объекта из внешнего площадного объекта. привожу код на C#, где
MapObj - контур шаблона (то что вырезаем)
MapObj2 - контур из чего вырезаем (он всегда больше чем MapObj)

           MapCross.cObjIn1 = MapObj.C_CONTAINER;
           MapCross.cObjIn2 = MapObj2.C_CONTAINER;
           MapCross.cObjOut = MapObj2.C_CONTAINER;
           MapCross.LocalOut = axGisToolKit.TxLOCALOUT.OUT_SQUARE;
           //Создаём пересечение двух объектов
           MapCross.CreateCross();
           //Проверяем наличие пересечения
           if (MapCross.isCross == true)
           {
               MapOverlay.FlageMessage = true;
               MapOverlay.cMapObjIn = MapObj2.C_CONTAINER;
               MapOverlay.cMapObjTemplet = MapObj.C_CONTAINER;
               if (MapOverlay.CreateOVL(1, 0.001, 0, 0) == 0)
               {
                   MessageBox.Show("Произошла ошибка выполнения вырезки контура!");
               }
               else {
                   //if resultCross == 4 - контур шаблона внутри контура объекта (при возврате 3 и 4 вызывать GetNextObject в цикле)
                   int resultCross = MapOverlay.SetObjectCross(0, 0.001, 0, 1, 0);
                   int resultMetrica = MapOverlay.GetCrossPoints();

                   if (resultCross != 4)
                   {
                       MessageBox.Show("Вырезаемый объект должен быть вне границы вырезки!");
                   }
                   else
                   {
                       while ((int)MapOverlay.GetNextObject()!=0) {
                           //предположив, что в cObjOut будет находиться части после обрезки, сохраняю их как новые объекты
                           MapCross.cObjOut.CommitAsNew();
                       }                    }
               }
           }
           else {
               MessageBox.Show("Области НЕ пересекаются");
           }

В результате ничего. Вероятно я что-то упустил. Буду благодарен за пояснения.
 
Разрезание Вы выполняете с помощью MapOverlay.
У него есть свойство axMapOverlay.cObjectOut.
Используйте его, а не MapCross.cObjOut для CommitAsNew().

В MapCross.cObjOut у Вас находится то, что изначально Вы заполнили в MapObj2. Ваш код просто создаст копии (MapCross.cObjOut.CommitAsNew) объекта MapObj2 по количеству пересечений, которые найдет MapOverlay.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности