Геометрический объект может быть образован при помощи сборки существующих объектов.
Рассмотрим данный способ построения новых объектов на примере рисунков (чертежей), образованных только их объектов двух базовых типов: точек и линий
while (pN (не принадлежит) TChartPoint)
{
St.push(pN);
pN = pN->GetFirstPoint();
}
//подъем по плексу и рисование
pF = pN;
while (!St.Empty())
{
pN = St.top();
St.Pop();
pL = pN->GetLastPoint(); //рисование линии<pN, pF, pL>
pF = pL;
}
TChartPoint *Show(TChart *pN)
{
if (pN != NULL)
pL = NULL;
else if (pN (принадлежит) TChartPoint)
pL = pN;
else
{
pF = Show(pN->GetFirstPoint());
pL = Show(pN->GetLastPoint()); //рисование линии <pN,pF,pL>
}
return pN;
}
Алгоритмы обхода (итератор)
TSearchMode; // способ обхода
PTGraphNode pCurrNode; // текущая вершина
// Достигнутые, но не обработанные вершины
TDataRoot *pStream;
// Множество вершин, достигнутых в ходе обхода
TBitField *pFound;
Инициализация (Reset)
pStream
и ее отметка в множестве pFound
GoNext
Проверка завершения (IsGraphEnded)
return pCurrNode == NULL // текущее звено?
Переход к следующей вершине графа (GoNext)
pStream
pStream
int Reset (void); // установить на первую вершину
int IsGraphEnded (void) const; // обход завершен?
int GoNext (void); // переход к следующей вершине
PTGraphNode GetCurrNode (void) { return pCurrNode; } // доступ
PTGraphPath GetShortestPath (string fn, string ln); // поиск кратчайшего пути
protected:
virtual void Print (ostream &os); // печать графа
};
typedef TGraph * PTGraph;
// end of tgraph.h