32 lines
1000 B
C++
32 lines
1000 B
C++
// AreaDxf.cpp
|
|
// Copyright (c) 2011, Dan Heeks
|
|
// This program is released under the BSD license. See the file COPYING for details.
|
|
|
|
#include "AreaDxf.h"
|
|
#include "Area.h"
|
|
|
|
AreaDxfRead::AreaDxfRead(CArea* area, const char* filepath):CDxfRead(filepath), m_area(area){}
|
|
|
|
void AreaDxfRead::StartCurveIfNecessary(const double* s)
|
|
{
|
|
Point ps(s);
|
|
if((m_area->m_curves.size() == 0) || (m_area->m_curves.back().m_vertices.size() == 0) || (m_area->m_curves.back().m_vertices.back().m_p != ps))
|
|
{
|
|
// start a new curve
|
|
m_area->m_curves.push_back(CCurve());
|
|
m_area->m_curves.back().m_vertices.push_back(ps);
|
|
}
|
|
}
|
|
|
|
void AreaDxfRead::OnReadLine(const double* s, const double* e)
|
|
{
|
|
StartCurveIfNecessary(s);
|
|
m_area->m_curves.back().m_vertices.push_back(Point(e));
|
|
}
|
|
|
|
void AreaDxfRead::OnReadArc(const double* s, const double* e, const double* c, bool dir)
|
|
{
|
|
StartCurveIfNecessary(s);
|
|
m_area->m_curves.back().m_vertices.push_back(CVertex(dir?1:0, Point(e), Point(c)));
|
|
}
|