void CSketch::ReLinkSketch() { CSketchRelinker relinker(m_objects); relinker.Do(); Clear(); for(std::list< std::list<HeeksObj*> >::iterator It = relinker.m_new_lists.begin(); It != relinker.m_new_lists.end(); It++) { for(std::list<HeeksObj*>::iterator It2 = It->begin(); It2 != It->end(); It2++) { Add(*It2, NULL); } } if(relinker.m_new_lists.size() > 1) { m_order = SketchOrderTypeMultipleCurves; } else { CalculateSketchOrder(); } }
void CSketch::ExtractSeparateSketches(std::list<HeeksObj*> &new_separate_sketches, const bool allow_individual_objects /* = false */ ) { CSketch* re_ordered_sketch = NULL; CSketch* sketch = this; if(GetSketchOrder() == SketchOrderHasCircles) { std::list<HeeksObj*>::iterator It; for(It=m_objects.begin(); It!=m_objects.end() ;It++) { HeeksObj* object = *It; CSketch* new_object = new CSketch(); new_object->color = color; new_object->Add(object->MakeACopy(), NULL); new_separate_sketches.push_back(new_object); } } if(GetSketchOrder() == SketchOrderTypeBad) { // Duplicate and reorder the sketch to see if it's possible to make separate connected sketches. re_ordered_sketch = (CSketch*)(this->MakeACopy()); re_ordered_sketch->ReOrderSketch(SketchOrderTypeReOrder); sketch = re_ordered_sketch; } if(sketch->GetSketchOrder() == SketchOrderTypeMultipleCurves) { // Make separate connected sketches from the child elements. CSketchRelinker relinker(sketch->m_objects); relinker.Do(); for(std::list< std::list<HeeksObj*> >::iterator It = relinker.m_new_lists.begin(); It != relinker.m_new_lists.end(); It++) { std::list<HeeksObj*>& list = *It; CSketch* new_object = new CSketch(); new_object->color = color; for(std::list<HeeksObj*>::iterator It2 = list.begin(); It2 != list.end(); It2++) { HeeksObj* object = *It2; new_object->Add(object->MakeACopy(), NULL); } new_separate_sketches.push_back(new_object); } } else { // The sketch does not seem to relink into separate connected shapes. Just export // all the sketch's children as separate objects instead. if (allow_individual_objects) { for (HeeksObj *child = sketch->GetFirstChild(); child != NULL; child = sketch->GetNextChild()) { new_separate_sketches.push_back( child->MakeACopy() ); } } } if(re_ordered_sketch)delete re_ordered_sketch; }
void CSketch::ReLinkSketch() { CSketchRelinker relinker(m_objects); relinker.Do(); std::list<HeeksObj*> new_list; for(std::list< std::list<HeeksObj*> >::iterator It = relinker.m_new_lists.begin(); It != relinker.m_new_lists.end(); It++) { for(std::list<HeeksObj*>::iterator It2 = It->begin(); It2 != It->end(); It2++) { new_list.push_back(*It2); } } wxGetApp().DoUndoable(new ReorderTool(this, new_list)); if(relinker.m_new_lists.size() > 1) { m_order = SketchOrderTypeMultipleCurves; } else { CalculateSketchOrder(); } }