double CSketch::GetArea()const { double area = 0.0; for(std::list<HeeksObj*>::const_iterator It=m_objects.begin(); It!=m_objects.end() ;It++) { HeeksObj* object = *It; switch(object->GetType()) { case ArcType: { double angle = ((HArc*)object)->IncludedAngle(); double radius = ((HArc*)object)->m_radius; double p0x = ((HArc*)object)->A->m_p.X(); double p0y = ((HArc*)object)->A->m_p.Y(); double p1x = ((HArc*)object)->B->m_p.X(); double p1y = ((HArc*)object)->B->m_p.Y(); double pcx = ((HArc*)object)->C->m_p.X(); double pcy = ((HArc*)object)->C->m_p.Y(); area += ( 0.5 * ((pcx - p0x) * (pcy + p0y) - (pcx - p1x) * (pcy + p1y) - angle * radius * radius)); } break; default: // treat all others as lines { double s[3], e[3]; if(!object->GetStartPoint(s))break; if(!object->GetEndPoint(e))break; area += (0.5 * (e[0] - s[0]) * (s[1] + e[1])); } break; } } return area; }