Python CProfile::AppendTextForSketch(HeeksObj* object, CProfileParams::eCutMode cut_mode) { Python python; if(object) { // decide if we need to reverse the kurve bool reversed = false; bool initially_ccw = false; if(m_profile_params.m_tool_on_side != CProfileParams::eOn) { if(object) { switch(object->GetType()) { case CircleType: case AreaType: initially_ccw = true; break; case SketchType: SketchOrderType order = heeksCAD->GetSketchOrder(object); if(order == SketchOrderTypeCloseCCW)initially_ccw = true; break; } } if(m_speed_op_params.m_spindle_speed<0)reversed = !reversed; if(cut_mode == CProfileParams::eConventional)reversed = !reversed; if(m_profile_params.m_tool_on_side == CProfileParams::eRightOrInside)reversed = !reversed; } // write the kurve definition python << WriteSketchDefn(object, initially_ccw != reversed); if((m_profile_params.m_start_given == false) && (m_profile_params.m_end_given == false)) { python << _T("kurve_funcs.set_good_start_point(curve, ") << (reversed ? _T("True") : _T("False")) << _T(")\n"); } // start - assume we are at a suitable clearance height // get offset side string wxString side_string; switch(m_profile_params.m_tool_on_side) { case CProfileParams::eLeftOrOutside: if(reversed)side_string = _T("right"); else side_string = _T("left"); break; case CProfileParams::eRightOrInside: if(reversed)side_string = _T("left"); else side_string = _T("right"); break; default: side_string = _T("on"); break; } // roll on switch(m_profile_params.m_tool_on_side) { case CProfileParams::eLeftOrOutside: case CProfileParams::eRightOrInside: { if(m_profile_params.m_auto_roll_on) { python << wxString(_T("roll_on = 'auto'\n")); } else { python << wxString(_T("roll_on = area.Point(")) << m_profile_params.m_roll_on_point[0] / theApp.m_program->m_units << wxString(_T(", ")) << m_profile_params.m_roll_on_point[1] / theApp.m_program->m_units << wxString(_T(")\n")); } } break; default: { python << _T("roll_on = None\n"); } break; } // rapid across to it //python << wxString::Format(_T("rapid(%s)\n"), roll_on_string.c_str()).c_str(); switch(m_profile_params.m_tool_on_side) { case CProfileParams::eLeftOrOutside: case CProfileParams::eRightOrInside: { if(m_profile_params.m_auto_roll_off) { python << wxString(_T("roll_off = 'auto'\n")); } else { python << wxString(_T("roll_off = area.Point(")) << m_profile_params.m_roll_off_point[0] / theApp.m_program->m_units << wxString(_T(", ")) << m_profile_params.m_roll_off_point[1] / theApp.m_program->m_units << wxString(_T(")\n")); } } break; default: { python << _T("roll_off = None\n"); } break; } bool tags_cleared = false; for(CTag* tag = (CTag*)(m_tags->GetFirstChild()); tag; tag = (CTag*)(m_tags->GetNextChild())) { if(!tags_cleared)python << _T("kurve_funcs.clear_tags()\n"); tags_cleared = true; python << _T("kurve_funcs.add_tag(area.Point(") << tag->m_pos[0] / theApp.m_program->m_units << _T(", ") << tag->m_pos[1] / theApp.m_program->m_units << _T("), ") << tag->m_width / theApp.m_program->m_units << _T(", ") << tag->m_angle * M_PI/180 << _T(", ") << tag->m_height / theApp.m_program->m_units << _T(")\n"); } //extend_at_start, extend_at_end python << _T("extend_at_start= ") << m_profile_params.m_extend_at_start / theApp.m_program->m_units << _T("\n"); python << _T("extend_at_end= ") << m_profile_params.m_extend_at_end / theApp.m_program->m_units<< _T("\n"); //lead in lead out line length python << _T("lead_in_line_len= ") << m_profile_params.m_lead_in_line_len / theApp.m_program->m_units << _T("\n"); python << _T("lead_out_line_len= ") << m_profile_params.m_lead_out_line_len / theApp.m_program->m_units<< _T("\n"); // profile the kurve python << wxString::Format(_T("kurve_funcs.profile(curve, '%s', tool_diameter/2, offset_extra, roll_radius, roll_on, roll_off, depthparams, extend_at_start,extend_at_end,lead_in_line_len,lead_out_line_len )\n"), side_string.c_str()); } python << _T("absolute()\n"); return(python); }
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; }