Python CPocket::AppendTextToProgram() { Python python; CTool *pTool = CTool::Find( m_tool_number ); if (pTool == NULL) { wxMessageBox(_T("Cannot generate GCode for pocket without a tool assigned")); return python; } // End if - then python << CSketchOp::AppendTextToProgram(); HeeksObj* object = wxGetApp().GetIDObject(SketchType, m_sketch); if(object == NULL) { wxMessageBox(wxString::Format(_("Pocket operation - Sketch doesn't exist"))); return python; } int type = object->GetType(); // do areas and circles first, separately { switch(type) { case CircleType: case AreaType: { wxGetApp().ObjectAreaString(object, python); WritePocketPython(python); } break; } } if(type == SketchType) { python << _T("a = area.Area()\n"); python << _T("entry_moves = []\n"); if (object->GetNumChildren() == 0){ wxMessageBox(wxString::Format(_("Pocket operation - Sketch %d has no children"), object->GetID())); return python; } HeeksObj* re_ordered_sketch = NULL; SketchOrderType order = ((CSketch*)object)->GetSketchOrder(); if( (order != SketchOrderTypeCloseCW) && (order != SketchOrderTypeCloseCCW) && (order != SketchOrderTypeMultipleCurves) && (order != SketchOrderHasCircles)) { re_ordered_sketch = object->MakeACopy(); ((CSketch*)re_ordered_sketch)->ReOrderSketch(SketchOrderTypeReOrder); object = re_ordered_sketch; order = ((CSketch*)object)->GetSketchOrder(); if( (order != SketchOrderTypeCloseCW) && (order != SketchOrderTypeCloseCCW) && (order != SketchOrderTypeMultipleCurves) && (order != SketchOrderHasCircles)) { switch (((CSketch*)object)->GetSketchOrder()) { case SketchOrderTypeOpen: { wxMessageBox(wxString::Format(_("Pocket operation - Sketch must be a closed shape - sketch %d"), object->m_id)); delete re_ordered_sketch; return python; } break; default: { wxMessageBox(wxString::Format(_("Pocket operation - Badly ordered sketch - sketch %d"), object->m_id)); delete re_ordered_sketch; return python; } break; } } } if(object) { python << WriteSketchDefn(object); } if(re_ordered_sketch) { delete re_ordered_sketch; } } // End for // reorder the area, the outside curves must be made anti-clockwise and the insides clockwise python << _T("a.Reorder()\n"); WritePocketPython(python); return python; }
Python CProfile::AppendTextToProgram(CMachineState *pMachineState, bool finishing_pass) { Python python; CTool *pTool = CTool::Find( m_tool_number ); if (pTool == NULL) { if(!finishing_pass)wxMessageBox(_T("Cannot generate GCode for profile without a tool assigned")); return(python); } // End if - then if(!finishing_pass || m_profile_params.m_only_finishing_pass) { python << CDepthOp::AppendTextToProgram(pMachineState); if(m_profile_params.m_auto_roll_on || m_profile_params.m_auto_roll_off) { python << _T("roll_radius = float("); python << m_profile_params.m_auto_roll_radius / theApp.m_program->m_units; python << _T(")\n"); } } if(finishing_pass) { python << _T("feedrate_hv(") << m_profile_params.m_finishing_h_feed_rate / theApp.m_program->m_units << _T(", "); python << m_speed_op_params.m_vertical_feed_rate / theApp.m_program->m_units << _T(")\n"); python << _T("flush_nc()\n"); python << _T("offset_extra = 0.0\n"); python << _T("step_down = ") << m_profile_params.m_finishing_step_down << _T("\n"); } else { python << _T("offset_extra = ") << m_profile_params.m_offset_extra / theApp.m_program->m_units << _T("\n"); } CProfileParams::eCutMode cut_mode = finishing_pass ? m_profile_params.m_finishing_cut_mode : m_profile_params.m_cut_mode; #ifdef OP_SKETCHES_AS_CHILDREN for(std::list<HeeksObj*>::iterator It = m_objects.begin(); It != m_objects.end(); It++) { // write a kurve definition HeeksObj* object = *It; if((object == NULL) || (object->GetType() != SketchType) || (object->GetNumChildren() == 0))continue; #else for (std::list<int>::iterator It = m_sketches.begin(); It != m_sketches.end(); It++) { HeeksObj* object = heeksCAD->GetIDObject(SketchType, *It); if((object == NULL) || (object->GetNumChildren() == 0))continue; #endif HeeksObj* re_ordered_sketch = NULL; SketchOrderType sketch_order = heeksCAD->GetSketchOrder(object); if(sketch_order == SketchOrderTypeBad) { re_ordered_sketch = object->MakeACopy(); heeksCAD->ReOrderSketch(re_ordered_sketch, SketchOrderTypeReOrder); object = re_ordered_sketch; } if(sketch_order == SketchOrderTypeMultipleCurves || sketch_order == SketchOrderHasCircles) { std::list<HeeksObj*> new_separate_sketches; heeksCAD->ExtractSeparateSketches(object, new_separate_sketches, false); for(std::list<HeeksObj*>::iterator It = new_separate_sketches.begin(); It != new_separate_sketches.end(); It++) { HeeksObj* one_curve_sketch = *It; python << AppendTextForOneSketch(one_curve_sketch, pMachineState, cut_mode).c_str(); delete one_curve_sketch; } } else { python << AppendTextForOneSketch(object, pMachineState, cut_mode).c_str(); } if(re_ordered_sketch) { delete re_ordered_sketch; } } return python; } // End AppendTextToProgram() method static unsigned char cross16[32] = {0x80, 0x01, 0x40, 0x02, 0x20, 0x04, 0x10, 0x08, 0x08, 0x10, 0x04, 0x20, 0x02, 0x40, 0x01, 0x80, 0x01, 0x80, 0x02, 0x40, 0x04, 0x20, 0x08, 0x10, 0x10, 0x08, 0x20, 0x04, 0x40, 0x02, 0x80, 0x01}; void CProfile::glCommands(bool select, bool marked, bool no_color) { CDepthOp::glCommands(select, marked, no_color); if(marked && !no_color) { if(GetNumSketches() == 1) { // draw roll on point if(!m_profile_params.m_auto_roll_on) { glColor3ub(0, 200, 200); glRasterPos3dv(m_profile_params.m_roll_on_point); glBitmap(16, 16, 8, 8, 10.0, 0.0, cross16); } // draw roll off point if(!m_profile_params.m_auto_roll_on) { glColor3ub(255, 128, 0); glRasterPos3dv(m_profile_params.m_roll_off_point); glBitmap(16, 16, 8, 8, 10.0, 0.0, cross16); } // draw start point if(m_profile_params.m_start_given) { glColor3ub(128, 0, 255); glRasterPos3dv(m_profile_params.m_start); glBitmap(16, 16, 8, 8, 10.0, 0.0, cross16); } // draw end point if(m_profile_params.m_end_given) { glColor3ub(200, 200, 0); glRasterPos3dv(m_profile_params.m_end); glBitmap(16, 16, 8, 8, 10.0, 0.0, cross16); } } } }