File size: 1,272 Bytes
985c397 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // SPDX-License-Identifier: BSD-3-Clause
// 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 Base::Vector3d& startPoint) const
{
Point ps(startPoint.x, startPoint.y);
if (m_area->m_curves.empty() || m_area->m_curves.back().m_vertices.empty()
|| m_area->m_curves.back().m_vertices.back().m_p != ps) {
// start a new curve
m_area->m_curves.emplace_back();
m_area->m_curves.back().m_vertices.emplace_back(ps);
}
}
void AreaDxfRead::OnReadLine(const Base::Vector3d& start, const Base::Vector3d& end, bool /*hidden*/)
{
StartCurveIfNecessary(start);
m_area->m_curves.back().m_vertices.emplace_back(Point(end.x, end.y));
}
void AreaDxfRead::OnReadArc(
const Base::Vector3d& start,
const Base::Vector3d& end,
const Base::Vector3d& center,
bool dir,
bool /*hidden*/
)
{
StartCurveIfNecessary(start);
m_area->m_curves.back()
.m_vertices.emplace_back(dir ? 1 : 0, Point(end.x, end.y), Point(center.x, center.y));
}
|