Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
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); |
|
Вернуться к началу |
|
|
|