![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Доброго всем дня, недавно столкнулась с такой для меня проблемой: нужно было написать абстрактно как будет выглядеть интерфейс для работы с коллекциями кривых (контуров) 
		
	
		
		
		
		
		
	
		
		
	
	
	встала задача написать функцию, которая бы перебирала все кривые и оставляла только те их куски, которые бы входили в ограниченный прямоугольник. интерфейсы я задала, задала классы, но вот как теперь это всё заюзать в функции, я не знаю, перерыла кучу литературы-везде описание классов и интерфейсов, а как конкретно их использовать-примера нет. Тема для меня новая, я в делфи больше по базам данных работала, чем с "чистым" ООП кодом...Прошу вашей помощи...Объясните, пожалуйста, как именно в функции использовать классы и интерфейсы. вот, собственно, сам код: Код: 
	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)Задача – написать функцию Function CutContoursByWindow(const Cntrs : IContours; const window : TRect_Float ) : IContour; Функция должна вернуть IContour, состоящий из отрезков входящих контуров, которые (отрезки) попадают внутрь заданного окна, либо пересекают/касаются его границ.  |