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

cоздание точечных объектов

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



Зарегистрирован: 26.01.2007
Сообщения: 70
Откуда: Vladivostok-Kurgan

СообщениеДобавлено: Вт 25 Ноя 2008 15:37    Заголовок сообщения: cоздание точечных объектов Ответить с цитатой

Здравствуйте.
Пытаюсь реализовать задачу создания точечных объетов на точках вделенного лин или площад объеекта
Код:
IApp:=GetActiveIngeoApp;
IDObj:=IApp.Selection.IDs[0];
MapObjects:= IApp.ActiveDb.MapObjects;
MapObject:=MapObjects.GetObject(IDObj);
 for i:=0 to MapObject.Shapes.Count - 1 do
  begin
  Shape:=MapObject.Shapes;
  Contour:= Shape.Item[i].Contour;
  for j:= 0 to Contour.Count - 1 do
   begin
   Part:=Contour.Item[j];
   for k:=0 to Part.VertexCount-1 do
    begin
    Part.GetVertex(k,x,y,z);
    NewObjects:=IApp.ActiveDb.MapObjects;
    NewObject:=NewObjects.AddObject(Edit1.Text);
    NewShape:=NewObject.Shapes;
    NewShape.Insert(-1,Edit2.Text);
    NewContour:=NewShape.Item[i].Contour;
    NewContour.Insert(-1);
    NewPart:=NewContour.Insert(-1);
    NewPart.InsertVertex(k,x+10,y+10,z);  //индекс массива выходит з пределы диапазона
    NewPart.Closed;
    NewObject.SemData.SetValue('PointName','Point',k+1,0);
    NewObjects.UpdateChanges;
    end;
   end;
  end;

Выдает сообщение об ошибке "Индекс массива выходит за пределы диапазона" в строчке IsertVertex.
В чем ошибка?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
RuslanG



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

СообщениеДобавлено: Вт 25 Ноя 2008 16:59    Заголовок сообщения: Ответить с цитатой

Код:
NewPart.InsertVertex(k,x+10,y+10,z);  //индекс массива выходит з пределы диапазона

Вместо k необходимо задать -1:
Код:
NewPart.InsertVertex(-1,x+10,y+10,z);

Свойство NewPart.Closed вызывать не нужно, т.к. это ни к чему не приведет.
Во-первых, для одноточечных контуров оно не используется.
Во-вторых, если вам нужно установить признак замыкания у многоугольника, то следует писать так:
Код:
NewPart.Closed := True;

Еще раз замечу, что в Вашем примере признак замыкания устанавливать нет необходимости.

_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
gstof



Зарегистрирован: 26.01.2007
Сообщения: 70
Откуда: Vladivostok-Kurgan

СообщениеДобавлено: Вт 25 Ноя 2008 20:52    Заголовок сообщения: Ответить с цитатой

Да, конечно. Спаибо большое.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

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


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