// ННГУ, ВМК, Курс "Методы программирования-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; } }