Доброго всем дня, недавно столкнулась с такой для меня проблемой: нужно было написать абстрактно как будет выглядеть интерфейс для работы с коллекциями кривых (контуров)
встала задача написать функцию, которая бы перебирала все кривые и оставляла только те их куски, которые бы входили в ограниченный прямоугольник.
интерфейсы я задала, задала классы, но вот как теперь это всё заюзать в функции, я не знаю, перерыла кучу литературы-везде описание классов и интерфейсов, а как конкретно их использовать-примера нет. Тема для меня новая, я в делфи больше по базам данных работала, чем с "чистым" ООП кодом...Прошу вашей помощи...Объясните, пожалуйста, как именно в функции использовать классы и интерфейсы.
вот, собственно, сам код:
Код:
TRect_Float= record
X1, Y1, X2, Y2 : double; // Прямоугольник. Стороны параллельны осям координат. Для простоты гарантируется что X1<X2, Y1<Y2
End;
IContourPoint = interface
Function GetX : double;
Function GetY : double;
End;
IContourBit = interface
Function GetPointCount : integer
Function IsClosed : Boolean; //флажок замкнутости контура. Тру – последняя точка соединена с первой.
Function GetPoint(const idx : integer) : IContourPoint; // Nil если (idx < 0) or (idx >= GetPointCount)
End;
IContour = interface
Function GetContourBitCount : integer;
Function GetContourBit(const idx : integer) : IContourBit;
End;
IContours = interface
Function GetContourCount: integer;
Function GetContour(const idx : integer) : IContour;
End;
IContourEdit = interface (IContour)
procedure AddContourBit( const bit: IContourBit );
procedure Clear;
end;
IContourBitEdit = interface (IContourBit)
procedure AddPoint( const x, y, value: double ); // Value всегда надо задавать равным 0
procedure SetClosed( const closed: boolean );
procedure Clear;
end;
Точка, кусочек контура, контур, коллекция контуров, и редактирующие интерфейсы.
Так же есть классы которые имплементируют эти интерфейсы:
TContourBitEdit = class(TInterfacedObject, IContourBit, IContourBitEdit)
TContourEdit = class(TInterfacedObject, IContour, IContourEdit)
Незамкнутый контурбит (IsClosed = false) состоит из N-1 отрезков соединяющих i –ю и i +1-ю точки, i от 0 до N -1. В замкнутом контурбите есть еще один отрезок, от 0й точки до N-1-й.
Задача – написать функцию
Function CutContoursByWindow(const Cntrs : IContours; const window : TRect_Float ) : IContour; Функция должна вернуть IContour, состоящий из отрезков входящих контуров, которые (отрезки) попадают внутрь заданного окна, либо пересекают/касаются его границ.