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

Работа с IInPicturePolygonFigure

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



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

СообщениеДобавлено: Ср 08 Июл 2009 21:52    Заголовок сообщения: Работа с IInPicturePolygonFigure Ответить с цитатой

Есть такой код, которым я создаю стиль типа "многоугольник"
Код:

paynt_sym := sty.Painters.Add(inptSymbol)  as IIngeoSymbolPainter;
paynt_sym.PaintMethod := inppmSingle;
anPolygonFigure := paynt_sym.Picture.Figures.Add(inftPolygon) as IInPicturePolygonFigure;

Код:

    paynt_sym : IIngeoSymbolPainter;
    anPolygonFigure :IInPicturePolygonFigure;


Как добавить к anPolygonFigure точки? Я знаю Bottom, Height, Left и т.д. какдой точки. У него есть массив points, но как с ним работать в толк не возму стандартные методы не проходят.

И второй вопрос, как вычисляет площадь участка Ингео по заданным координатам(X1Y1,...XnYx)?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
unm



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

СообщениеДобавлено: Пн 13 Июл 2009 11:19    Заголовок сообщения: Ответить с цитатой

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



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

СообщениеДобавлено: Вт 14 Июл 2009 11:00    Заголовок сообщения: Ответить с цитатой

Цитата:
Как добавить к anPolygonFigure точки?
Код:
function TTestForm.AddStyle(aLayer: IIngeoLayer; aName: String = ''): IIngeoStyle;
begin
   Result := aLayer.Styles.Add;
   Result.Name := aName;
   Result.Update;
end;

function TTestForm.AddSymbolPainter(aStyle: IIngeoStyle;
   aVisibleMin: Double = 0; aVisibleMax: Double = 0; aForZoomScale: Double = 0): IIngeoSymbolPainter;
begin
   Result := aStyle.Painters.Add(inptSymbol) as IIngeoSymbolPainter;
   Result.VisibleMin := aVisibleMin;
   Result.VisibleMax := aVisibleMax;
   Result.PaintMethod := inppmSingle;
   Result.PictureZoomScale := 1/500;
end;

procedure TTestForm.InitBrush(aBrush: IInBrush);
begin
   aBrush.Style := inbsClear;
end;

procedure TTestForm.InitPen(aPen: IInPen);
begin
   with aPen do begin
      Style := inpsSolid;
      WidthInMM := 0;
      ForZoomScale := 0;
      Color := clBlack;
      Mode := inpmCopy;
   end;
end;

function TTestForm.GetPoints: OleVariant;
const
   cPointsCount = 3;
var
   i: Integer;
begin
   Randomize;
   Result := VarArrayCreate([0, cPointsCount - 1, 0, 1], varVariant);
   for i := 0 to cPointsCount - 1 do begin
      Result[i, 0] := Random(100)/100; // координата x
      Result[i, 1] := Random(100)/100; // координата y
   end;
end;

procedure TTestForm.CreatePolygonFigureButtonClick(Sender: TObject);
var
   aLayer: IIngeoLayer;
   aStyle: IIngeoStyle;
   aSymbolPainter: IIngeoSymbolPainter;
   aPolygonFigure: IInPicturePolygonFigure;
   aFigures: IInPictureFigures;
begin
   aLayer := FIngeo.ActiveProjectView.ActiveLayerView.Layer;
   aStyle := AddStyle(aLayer, 'Тестовый стиль');
   aSymbolPainter := AddSymbolPainter(aStyle, 0, 0, 0);

   aSymbolPainter.Picture.X1 := -1;
   aSymbolPainter.Picture.Y1 := -1;
   aSymbolPainter.Picture.X2 := 1;
   aSymbolPainter.Picture.Y2 := 1;

   aFigures := aSymbolPainter.Picture.Figures;

   aPolygonFigure := aFigures.Add(inftPolygon) as IInPicturePolygonFigure;
   aPolygonFigure.Points := GetPoints;;
   aPolygonFigure.Closed := True;
   InitPen(aPolygonFigure.Pen);
   InitBrush(aPolygonFigure.Brush);

   aStyle.Update;
end;

Цитата:
И второй вопрос, как вычисляет площадь участка Ингео по заданным координатам(X1Y1,...XnYx)?
Непонятен вопрос. Что такое "участок Ингео"?
_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
unm



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

СообщениеДобавлено: Ср 15 Июл 2009 13:45    Заголовок сообщения: Ответить с цитатой

за первый вопрос спасибо)

Ну мне интересно как считает Ингео площадь объекта.
Допустим у меня есть объект с одним контуром в котором одна часть. состоящая из координат X1Y1, ... XnYn, по какой формуле или функции посчитать площадь, не занося при этом объект в БД?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



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

СообщениеДобавлено: Ср 15 Июл 2009 14:26    Заголовок сообщения: Ответить с цитатой

Если объект существует:
У части контура (IIngeoContourPart) есть функция Square, которая возвращает площадь части контура.
Функция Square реализована также у пространственного обьекта (IIngeoMapObject) и у контура (IIngeoContour).

Можете также воспользоваться методом GetSquare класса TDPointList, который находится в библиотеке AddonLib.

Ниже представлен код из Geomet.pas.
Код:
function TDPointList.GetSquare: Double;
var
   P1, P2: PDPoint;
   I: Integer;
begin
   Result := 0;
   if List.Count > 2 then
   begin
      for I := 0 to List.Count - 2 do
      begin
         P2 := List.Items[I + 1];
         P1 := List.Items[I];
         Result := Result + (P2^.X - P1^.X) * (P2^.Y + P1^.Y) / 2;
      end;

      P2 := List.Items[0];
      P1 := List.Items[List.Count - 1];
      Result := Result + (P2^.X - P1^.X) * (P2^.Y + P1^.Y) / 2;
   end;
end;

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



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

СообщениеДобавлено: Чт 16 Июл 2009 10:02    Заголовок сообщения: Ответить с цитатой

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

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


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