// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// tchart.cpp - Copyright (c) Гергель В.П. 01.02.2003
//
// Графические конструируемые геометрические объекты - линия

#include "tchart.h"

void TChart :: SetFirstPoint ( TChartRoot *pUnit ) { // вставить начальную точку
  TChartPoint *pPoint = dynamic_cast<TChartPoint *>(pUnit);
  TChart  *pNode  = dynamic_cast<TChart *>(pUnit);
  if ( (pPoint != NULL) || (pNode != NULL) ) {
    if ( Group.GetListLength() == 2 ) Group.DelFirst();
     Group.InsFirst(pUnit);
  }
}

void TChart :: SetLastPoint ( TChartRoot *pUnit ) { // вставить конечную точку

Skipped...

}

void TChart :: Show() { // визуализация рисунка
  if ( IsActive() && !IsVisible() ) {
    TChartLine CurrLine;
    TChartPoint *pPt;
    TChartRoot  *pRt;
    // инициализация
    CurrLine.pLine = this;
    CurrLine.pFp = CurrLine.pLp = NULL;
    while ( !St.empty() ) St.pop(); // очистка стека
    St.push(CurrLine);
    // цикл обхода
    while ( !St.empty() ) {
      CurrLine = St.top(); St.pop();
      while ( CurrLine.pFp == NULL ) { // нахождение начальной точки
        pRt = CurrLine.pLine->GetFirstPoint();
        if ( (pPt = dynamic_cast<TChartPoint *>(pRt)) != NULL ) // точка
          CurrLine.pFp = pPt;
        else { // слева - линия - переход к ее обработке
          St.push(CurrLine);
          CurrLine.pLine = dynamic_cast<TChart *>(pRt);
        }
      }
      if ( CurrLine.pLp == NULL ) { // нахождение конечной точки

Skipped...

      }
      if ( (CurrLine.pFp != NULL) && (CurrLine.pLp != NULL) ) { // отрисовка
        Form1->Image1->Canvas->MoveTo(CurrLine.pFp->GetValueX(),CurrLine.pFp->GetValueY());
        Form1->Image1->Canvas->LineTo(CurrLine.pLp->GetValueX(),CurrLine.pLp->GetValueY());
        // перенос конечной точки текущей линии на предшествующий уровень рекурсии
        pPt = CurrLine.pLp;
        if ( !St.empty() ) {
          CurrLine = St.top(); St.pop();
          if ( CurrLine.pFp == NULL ) CurrLine.pFp = pPt;
          else CurrLine.pLp = pPt;
          St.push(CurrLine);
        }
      }
    } // завершение отрисовки чертежа
    Visible = 1;
  }
}

void TChart :: Hide() { // скрытие рисунка
  if ( IsActive() && IsVisible() ) {
    Form1->Image1->Canvas->Pen->Color = clWhite;
    Visible = 0; Show(); Visible = 0;
    Form1->Image1->Canvas->Pen->Color = clBlack;
  }
}
Хостинг от uCoz