Показать сообщение отдельно
  #1  
Старый 30.06.2011, 09:41
winged_kissa winged_kissa вне форума
Прохожий
 
Регистрация: 30.06.2011
Сообщения: 1
Репутация: 10
Вопрос интерфейсы, классы и функция

Доброго всем дня, недавно столкнулась с такой для меня проблемой: нужно было написать абстрактно как будет выглядеть интерфейс для работы с коллекциями кривых (контуров)
встала задача написать функцию, которая бы перебирала все кривые и оставляла только те их куски, которые бы входили в ограниченный прямоугольник.
интерфейсы я задала, задала классы, но вот как теперь это всё заюзать в функции, я не знаю, перерыла кучу литературы-везде описание классов и интерфейсов, а как конкретно их использовать-примера нет. Тема для меня новая, я в делфи больше по базам данных работала, чем с "чистым" ООП кодом...Прошу вашей помощи...Объясните, пожалуйста, как именно в функции использовать классы и интерфейсы.
вот, собственно, сам код:
Код:
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, состоящий из отрезков входящих контуров, которые (отрезки) попадают внутрь заданного окна, либо пересекают/касаются его границ.