//******************************************** // DeleteVertex at the end that are flagged with // sequence_number >= sequence_number //******************************************** int CPath3d::RemovePathEnd(int sequence_number, int ID, double x, double y, double z) { int n = m_ArrayVertex.GetSize()-1; // first verify that the line number is there while (n>=0) { int SeqNum = GetVertex(n)->Get_sequence_number(); if (SeqNum == sequence_number) break; n--; } if (n<0) return 1; // now delete until we find the sequence_number n = m_ArrayVertex.GetSize()-1; while (n>=0) { if (GetVertex(n)->Get_sequence_number() == sequence_number) break; DeleteVertex(n); n--; } if (n<0) return 1; // find which segment we nearly pass through by // finding the minimum distance to all of them double mindist=1e99; int mini=0; n = m_ArrayVertex.GetSize()-2; CVertex3d Point(x,y,z); while (n>=0) { double dist = FindDistPointToSegment(GetVertex(n),&Point,GetVertex(n+1)); if (dist < mindist) { mindist = dist; mini = n; } if (GetVertex(n)->Get_sequence_number() != sequence_number || GetVertex(n)->GetID() == ID) break; n--; } // now delete all of the line number // or until we find the ID n = m_ArrayVertex.GetSize()-1; while (n>=0) { if (GetVertex(n)->Get_sequence_number() != sequence_number || GetVertex(n)->GetID() == ID) break; if (n == mini+1) { // instead of deleting the last segment // that goes through the point // modify it to go to the new point GetVertex(n)->Set(x,y,z); break; } DeleteVertex(n); n--; } if (n<0) return 1; return 0; }
//******************************************** // DeleteVertex at the end that are flagged with // sequence_number >= sequence_number //******************************************** int CPath3d::RemovePathEnd(int sequence_number, int ID, double x, double y, double z) { if (TheFrame) TheFrame->GViewDlg.m_view.OpenGLMutex->Lock(); int n = m_ArrayVertex.GetSize()-1; setup_pointer p=TheFrame->GCodeDlg.Interpreter->p_setup; float xtool = p->tool_table[p->selected_tool_slot].xoffset; float ytool = p->tool_table[p->selected_tool_slot].yoffset; float ztool = p->tool_table[p->selected_tool_slot].length; x -= xtool; y -= ytool; z -= ztool; // first verify that the line number is there while (n>=0) { int SeqNum = GetVertex(n)->Get_sequence_number(); if (SeqNum == sequence_number) break; n--; } if (n<0) { if (TheFrame) TheFrame->GViewDlg.m_view.OpenGLMutex->Unlock(); return 1; } // now delete until we find the sequence_number n = m_ArrayVertex.GetSize()-1; while (n>=0) { if (GetVertex(n)->Get_sequence_number() == sequence_number) break; DeleteVertex(n); n--; } if (n<0) { if (TheFrame) TheFrame->GViewDlg.m_view.OpenGLMutex->Unlock(); return 1; } // find which segment we nearly pass through by // finding the minimum distance to all of them double mindist=1e99; int mini=0; n = m_ArrayVertex.GetSize()-2; CVertex3dFast Point(x,y,z); while (n>=0) { double dist = FindDistPointToSegment(GetVertex(n),&Point,GetVertex(n+1)); if (dist < mindist) { mindist = dist; mini = n; } if (GetVertex(n)->Get_sequence_number() != sequence_number || GetVertex(n)->GetID() == ID) break; n--; } // now delete all of the line number // or until we find the ID n = m_ArrayVertex.GetSize()-1; while (n>=0) { if (GetVertex(n)->Get_sequence_number() != sequence_number || GetVertex(n)->GetID() == ID) break; if (n == mini+1) { // instead of deleting the last segment // that goes through the point // modify it to go to the new point GetVertex(n)->Set(x,y,z); break; } DeleteVertex(n); n--; } if (TheFrame) TheFrame->GViewDlg.m_view.OpenGLMutex->Unlock(); if (n<0) return 1; return 0; }