Скачиваний:
11
Добавлен:
01.05.2014
Размер:
3.31 Кб
Скачать
#include "stdafx.h"
#include "TextInTriangle.h"
#include "Text.h"
#include "Triangle.h"

TextInTriangle::TextInTriangle(): id(++total){
	count++;
	cout << "create TextInTriangle#" << id << endl;

	buildEnclosingRectangle();
}

TextInTriangle::TextInTriangle(Triangle* triangle, string text, COLORREF aColor): Text(text, aColor), Triangle(triangle), id(++total){
	count++;
	cout << "create TextInTriangle#" << id << endl;

	buildEnclosingRectangle();
}

TextInTriangle::TextInTriangle(CPoint p1, CPoint p2, CPoint p3, string text, COLORREF aColor): Text(text, aColor), Triangle(p1, p2, p3, aColor), id(++total){
	count++;
	cout << "create TextInTriangle#" << id << endl;

	buildEnclosingRectangle();
}

TextInTriangle::TextInTriangle(const TextInTriangle* o): Text(o), Triangle(o), id(++total){
	count++;
	cout << "create TextInTriangle#" << id << " via cc" << endl;

	buildEnclosingRectangle();
}

TextInTriangle::TextInTriangle(const TextInTriangle& o): Text(o), Triangle(o), id(++total){
	count++;
	cout << "create TextInTriangle#" << id << " via cc" << endl;
	
	buildEnclosingRectangle();
}

TextInTriangle::~TextInTriangle(){
	count--;
	cout << "destroy TextInTriangle#" << id << endl;
}

void TextInTriangle::buildEnclosingRectangle(){
	Triangle::buildEnclosingRectangle();

	// TODO: set text start point, then draw it
	Text::point1 = this->center;

/*	Text::buildEnclosingRectangle();
*/	
}

ostream& TextInTriangle::print(ostream& os) const{
	os << "TextInTriangle#" << id << ": " << endl
		<< toString();
	return os;
}

TextInTriangle& TextInTriangle::operator= (const TextInTriangle& o){ 
	if(this == &o) 
		return *this;

	Text::operator=(o);
	Triangle::operator=(o);
	buildEnclosingRectangle();
	return *this;
}

// Draw a TextInTriangle object
void TextInTriangle::Draw(CDC* pDC, CElement* pElement, string key)
{
	buildEnclosingRectangle();
	Text::point1 = this->center;
	Text::Draw(pDC/*, pElement*/);

	buildEnclosingRectangle();
	Triangle::Draw(pDC, pElement, key);
}

string TextInTriangle::toString() const {
	return Triangle::toString() + "  Text: " + Text::toString();
}

int TextInTriangle::operator==(const TextInTriangle& o) const {
	return (Text::operator==(o) && Triangle::operator==(o));
};

void TextInTriangle::Move(CSize& aSize)
{
   Triangle::p1 += aSize;			// Move triangle
   Triangle::p2 += aSize;           
   Triangle::point += aSize;   

   Text::point1 += aSize;			// Move text
   Text::point2 += aSize;        

   m_EnclosingRect += aSize;		// Move the enclosing rectangle
}

CRect TextInTriangle::GetBoundRect()
{
   return Triangle::GetBoundRect();             // Return the bounding rectangle
}

// serialization
CArchive& TextInTriangle::load(CArchive& ar) {
	CElement::load(ar);

	ar	>> Triangle::p1 
		>> Triangle::p2
		>> Triangle::point
		>> Text::point1
		>> Text::point2;

	buildEnclosingRectangle();
	return ar;
}

CArchive& TextInTriangle::save(CArchive& ar) { 
	CElement::save(ar);

	ar	<< Triangle::p1 
		<< Triangle::p2
		<< Triangle::point
		<< Text::point1
		<< Text::point2;

	return ar;
}

// initialize static fields 
unsigned long int TextInTriangle::count = 0;
unsigned long int TextInTriangle::total = 0;

Соседние файлы в папке Sketcher05