Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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)? | Непонятен вопрос. Что такое "участок Ингео"? _________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
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; |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
unm
Зарегистрирован: 09.11.2008 Сообщения: 27
|
Добавлено: Чт 16 Июл 2009 10:02 Заголовок сообщения: |
|
|
спасибо огромное, точно буду проставлятся) |
|
Вернуться к началу |
|
|
|