Acad::ErrorStatus Bolt::subExplode(AcDbVoidPtrArray& entitySet) const
{
assertReadEnabled();
// РЕЗЬБА
AcDbLine* line;
for (int i = 0; i < m_arRezbaline.length() - 1; i++)
{
line = new AcDbLine();
line->setStartPoint(m_arRezbaline.at(i));
line->setEndPoint(m_arRezbaline.at(i + 1));
line->setNormal(m_vecU.crossProduct(m_vecV).normal());
entitySet.append(line);
}
AcDbLine* _line;
for (int i = 0; i < m_arHatMainline.length() - 1; i++)
{
_line = new AcDbLine();
_line->setStartPoint(m_arHatMainline.at(i));
_line->setEndPoint(m_arHatMainline.at(i + 1));
_line->setNormal(m_vecU.crossProduct(m_vecV).normal());
entitySet.append(_line);
}
// ПОЛУКРУГ
//////////////////////////////////////////////////////////////////////////
// Начало полного бреда
//////////////////////////////////////////////////////////////////////////
// AcGePoint3d center, dir, pt1, pt2;
//
// center.set(m_ptStart[X], m_ptStart[Y], m_ptStart[Z]);
// pt1.set(m_arHatline[0][X], m_arHatline[0][Y], m_arHatline[0][Z]);
// //dir.set(m_arHatline[1][X], m_arHatline[1][Y], m_arHatline[1][Z]);
// pt2.set(m_arHatline[1][X], m_arHatline[1][Y], m_arHatline[1][Z]);
//
// AcGeVector3d v1 = m_ptEdge - center;
// AcGeVector3d v2 = AcGeVector3d::kXAxis;
//
// //dir = center -
// //AcGeVector3d zDir = m_vecU.crossProduct(m_vecV);
// //double rad = m_vecU.angleTo(AcGeVector3d::kXAxis);
// double rad = (m_ptStart.asVector()).angleTo((m_ptStart.asVector() - AcGeVector3d(m_ptStart[X], m_ptStart[Y]+1, m_ptStart[Z])));
// double grad = (rad * 360.0) / M_PI;
//
// rad = v1.angleTo(v2);
// grad = (rad * 360.0) / M_PI;
//
//
// if (grad > 0 && grad <= 90)
// {
// pt2.set(m_arHatline[2][X] - 0.0001, m_arHatline[2][Y] + 0.0001, m_arHatline[2][Z]);
// }
// if (grad > 90 && grad <= 180)
// {
// pt2.set(m_arHatline[2][X] - 0.0001, m_arHatline[2][Y] + 0.0001, m_arHatline[2][Z]);
// }
// if (grad > 180 && grad <= 270)
// {
// pt2.set(m_arHatline[2][X] - 0.0001, m_arHatline[2][Y] + 0.0001, m_arHatline[2][Z]);
// }
// if (grad > 270 && grad <= 360)
// {
// pt2.set(m_arHatline[2][X] - 0.0001, m_arHatline[2][Y] + 0.0001, m_arHatline[2][Z]);
// }
//
// AcGePoint3d centerWcs(center), pt1Wcs(pt1), pt2Wcs(pt2);
//// acdbUcs2Wcs(asDblArray(center), asDblArray(centerWcs), false);
//// acdbUcs2Wcs(asDblArray(pt1), asDblArray(pt1Wcs), false);
//// acdbUcs2Wcs(asDblArray(pt2), asDblArray(pt2Wcs), false);
//
// AcGeVector3d v1Wcs(pt1Wcs - centerWcs);
// AcGeVector3d v2Wcs(pt2Wcs - centerWcs);
//
// double radius = centerWcs.distanceTo(pt1Wcs);
// AcGeVector3d arcNorm = (-1) * v1Wcs.crossProduct(v2Wcs);
//
// AcGeVector3d arcRef = arcNorm.perpVector();
// arcNorm.negate();
//
// double startAngle = v1Wcs.angleTo(arcRef, arcNorm);
// double endAngle = v2Wcs.angleTo(arcRef, arcNorm);
//
// AcDbArc * pArc = new AcDbArc(centerWcs, arcNorm, radius, startAngle, endAngle);
//
// //pArc->setStartAngle(startAngle);
// //pArc->setEndAngle(endAngle);
//
// pArc->setNormal(AcGeVector3d(0.0, 0.0, 1.0));
//
//////////////////////////////////////////////////////////////////////////
// Конец полного бреда
//////////////////////////////////////////////////////////////////////////
AcGeCircArc3d geArc(m_arHatline[0], m_arHatline[1], m_arHatline[2]);
AcDbCurve *pArc = NULL;
AcDbCurve::createFromAcGeCurve(geArc, pArc);
// добавление в набор новых примитивов
if (pArc) entitySet.append(pArc);
return Acad::eOk;
}