Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Создание объекта.

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
rjdgtn



Зарегистрирован: 26.02.2009
Сообщения: 37

СообщениеДобавлено: Ср 08 Апр 2009 13:05    Заголовок сообщения: Создание объекта. Ответить с цитатой

Здравствуйте, прошу вас посмотреть такой вот код:
Код должен создать на указонном слое точечный(колодец например) объект уазанного стиля.
Но после выполнения функции в указанных коодрдинатах никакого объекта не появляется. что тут не так?

значения //markerID= 00020007B4B7 // markerlayerID=00020007B4B1
используется тестовая БД 500

Код:
void TMainForm::CreateObj(double x,double y)
{
if(!App->ActiveDb->StyleExists(markerID))
        ShowMessage("Стиль с ID:\""+markerlayerID+"\"не найден в текущей БД.");
if(!App->ActiveDb->LayerExists(markerlayerID))
        ShowMessage("Слой с ID:\""+markerID+"\"не найден в текущей БД.");

IIngeoMapObject* obj=App->ActiveDb->MapObjects->AddObject(markerlayerID);
IIngeoContourPart* part=obj->Shapes->Insert(-1,markerID)->Contour->Insert(-1);
part->InsertVertex(-1,x,y,0);
part->Closed=true;
App->ActiveDb->MapObjects->UpdateChanges();
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Ср 08 Апр 2009 16:48    Заголовок сообщения: Ответить с цитатой

Посмотрите пример, особенно на то, как организована работа с объектом IIngeoMapObjects:

http://www.integro.ru/wiki/index.php?title=%D0%98%D0%BD%D0%93%D0%B5%D0%BE:API0002

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
rjdgtn



Зарегистрирован: 26.02.2009
Сообщения: 37

СообщениеДобавлено: Сб 11 Апр 2009 17:37    Заголовок сообщения: Ответить с цитатой

посмотрел и не нашел существенных отличий. вроде тоже самое делаю.

кто-нибудь может сказать что я упустил?
ведь семантические данные необязательно задавать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Пн 13 Апр 2009 15:19    Заголовок сообщения: Ответить с цитатой

Выдержка из IngeoIntfs.chm:
Цитата:
Объект IIngeoMapObjects

--------------------------------------------------------------------------------

Через этот объект осуществляется работа с пространственными объектами ГИС.

Каждое получение ссылки на этот объект начинает новую транзакцию. При последнем освобождении ссылки на этот объект транзакция завершается. Таким образом чтобы какая-либо последовательность действий над объектами происходила внутри одной транзакции, надо ссылку на этот объект сохранить в переменной. Потом через эту ссылку произвести последовательность действий. После чего освободить ссылку.

Вам необходимо запомнить ссылку на объект MapObjects в локальной переменной в начале метода.
Затем вносить изменения в рамках этого объекта.
И в конце метода вызывать метод UpdateChanges у того объекта, который Вы получили в начале метода.
Что-то вроде следующего кода:
Код:
void TMainForm::CreateObj(double x,double y)
{
if(!App->ActiveDb->StyleExists(markerID))
        ShowMessage("Стиль с ID:\""+markerlayerID+"\"не найден в текущей БД.");
if(!App->ActiveDb->LayerExists(markerlayerID))
        ShowMessage("Слой с ID:\""+markerID+"\"не найден в текущей БД.");

IIngeoMapObjects* mapObjects = App->ActiveDb->MapObjects;
IIngeoMapObject* obj=mapObjects->AddObject(markerlayerID);
IIngeoContourPart* part=obj->Shapes->Insert(-1,markerID)->Contour->Insert(-1);
part->InsertVertex(-1,x,y,0);
part->Closed=true;
mapObjects->UpdateChanges();
mapObjects->Release();
}

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
rjdgtn



Зарегистрирован: 26.02.2009
Сообщения: 37

СообщениеДобавлено: Вт 14 Апр 2009 23:47    Заголовок сообщения: Ответить с цитатой

спасибо большое. у меня уже все заработало
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
rjdgtn



Зарегистрирован: 26.02.2009
Сообщения: 37

СообщениеДобавлено: Ср 15 Апр 2009 19:34    Заголовок сообщения: Ответить с цитатой

мой косяк вот так заработало
SetForegroundWindow((HWND)App->MainWindow->Handle);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB