ClusterData* ClusterHelper::Update(){ std::vector<Point*>* reducedPoints = ReducePoints(localcpy); if (AreEnoughPointsForClustering((int)reducedPoints->size())) { FindClusters(reducedPoints); AssignAllPoints(localcpy); } else { if (value) { delete value; } value = new ClusterData(); } return value; }
void CDialogCCD::SaveTemplateFile() { //保存 ////////////////////////////////////////////////// if (g_vecUnit.size() <= 0) { AfxMessageBox("当前没有可保存的模板"); return; } //1.从c:\\bin目录下去txt文件,这里规定死方便操作 CFileDialog _OpenDlg(FALSE, ".txt", "c:\\bin\\模板名称", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*||"); if(_OpenDlg.DoModal()!=IDOK) { return; } CString _strFile = _OpenDlg.GetPathName(); if(_strFile.Find("C:\\bin\\", 0) < 0) { AfxMessageBox("请正确选择路径"); return; } //把轮廓点减少 if (g_vecUnit[0]->m_nType == u_polyline) { AD_PolylineData* _pPolylineTemp = (AD_PolylineData*)g_vecUnit[0]; ReducePoints(_pPolylineTemp->m_vecPoint); } CString _strLine; vector<CString> _vecLine; int _nTrackerPointCount = 0; int _nTrackerArcCount = 0; int _nTrackerCircleCount = 0; for (size_t _i=0; _i<g_vecUnit.size(); _i++) { if (g_vecUnit[_i]->m_nType == u_arc) { _strLine.Format("track arc %d", _nTrackerArcCount++); } else if (g_vecUnit[_i]->m_nType == u_circle) { _strLine.Format("track circle %d", _nTrackerCircleCount++); } else { _strLine.Format("track point %d", _nTrackerPointCount++); } _vecLine.push_back(_strLine); switch (g_vecUnit[_i]->m_nType) { case u_dot: { AD_PointData* _pDotTemp = (AD_PointData*)g_vecUnit[_i]; _strLine.Format("X%lfY%lfZ%lf", _pDotTemp->x, _pDotTemp->y, _pDotTemp->z); _vecLine.push_back(_strLine); } break; case u_line: { AD_LineData* _pLineTemp = (AD_LineData*)g_vecUnit[_i]; _strLine.Format("X%lfY%lfZ%lf", _pLineTemp->x1, _pLineTemp->y1, _pLineTemp->z1); _vecLine.push_back(_strLine); _strLine.Format("X%lfY%lfZ%lf", _pLineTemp->x2, _pLineTemp->y2, _pLineTemp->z2); _vecLine.push_back(_strLine); } break; case u_arc: { AD_ArcData* _pArcTemp = (AD_ArcData*)g_vecUnit[_i]; _strLine.Format("A1%lfA2%lfCX%lfCY%lfCZ%lfR%lf", _pArcTemp->angle1, _pArcTemp->angle2, _pArcTemp->cx, _pArcTemp->cy, _pArcTemp->cz, _pArcTemp->radius); _vecLine.push_back(_strLine); } break; case u_circle: { AD_CircleData* _pCirTemp = (AD_CircleData*)g_vecUnit[_i]; _strLine.Format("CX%lfCY%lfCZ%lfR%lf", _pCirTemp->cx, _pCirTemp->cy, _pCirTemp->cz, _pCirTemp->radius); _vecLine.push_back(_strLine); } break; case u_polyline: { AD_PolylineData* _pPolylineTemp = (AD_PolylineData*)g_vecUnit[_i]; for (size_t _k=0; _k<_pPolylineTemp->m_vecPoint.size(); _k++) { _strLine.Format("X%lfY%lfZ%lf", _pPolylineTemp->m_vecPoint[_k].x, _pPolylineTemp->m_vecPoint[_k].y, _pPolylineTemp->m_vecPoint[_k].z); _vecLine.push_back(_strLine); } if (_pPolylineTemp->flags == 1) { _strLine.Format("X%lfY%lfZ%lf", _pPolylineTemp->m_vecPoint[0].x, _pPolylineTemp->m_vecPoint[0].y, _pPolylineTemp->m_vecPoint[0].z); _vecLine.push_back(_strLine); } } break; case u_spline: { AD_SplineData* _pSplineTemp = (AD_SplineData*)g_vecUnit[_i]; for (size_t _k=0; _k<_pSplineTemp->m_vecPoint.size(); _k++) { _strLine.Format("X%lfY%lfZ%lf", _pSplineTemp->m_vecPoint[_k].x, _pSplineTemp->m_vecPoint[_k].y, _pSplineTemp->m_vecPoint[_k].z); _vecLine.push_back(_strLine); } } break; case u_ellipse: { AD_EllipseData* _pEllispeTemp = (AD_EllipseData*)g_vecUnit[_i]; for (size_t _k=0; _k<_pEllispeTemp->m_vecPoint.size(); _k++) { _strLine.Format("X%lfY%lfZ%lf", _pEllispeTemp->m_vecPoint[_k].x, _pEllispeTemp->m_vecPoint[_k].y, _pEllispeTemp->m_vecPoint[_k].z); _vecLine.push_back(_strLine); } } break; case u_mtext: { //AD_MTextData* _pSplineTemp = (AD_MTextData*)g_vecUnit[_i]; //DrawElementMText(memDC_ ,_pSplineTemp); } break; default: break; } } CFileTxt _fileTemplate; _fileTemplate.CreateFileTxt(_strFile); _fileTemplate.WriteLine(_vecLine); _fileTemplate.CloseFile(); AddTFileList(_strFile); }