Extrude parseExtrudeString(const std::string& _str) { // Values specified from the stylesheet are assumed to be meters with no unit suffix float first = 0, second = 0; if (_str == "true") { // "true" means use default properties for both heights, we indicate this with NANs return Extrude(NAN, NAN); } if (_str == "false") { // "false" means perform no extrusion return Extrude(0, 0); } // Parse the first of two possible numbers const char* pos = _str.c_str(); char* end = nullptr; // Get a float if possible & advance pos to the end of the number first = std::strtof(pos, &end); if (pos == end) { // No numbers found, return zero extrusion return Extrude(0, 0); } // Advance and skip the delimiter character pos = end + 1; // Get a float if possible & advance pos to the end of the number second = std::strtof(pos, &end); if (pos == end) { // No second number, so return an extrusion from 0 to the first number return Extrude(0, first); } // Got two numbers, so return an extrusion from first to second return Extrude(first, second); }
//---------------------------------------------------------------------------- void medOpExtrusionHoles::OnEvent(mafEventBase *maf_event) //---------------------------------------------------------------------------- { if (mafEvent *e = mafEvent::SafeDownCast(maf_event)) { switch(e->GetId()) { case ID_NUM_VERTICES: { m_ExtrusionFilter->SetMinNumberofEndPoints(m_NumVertices); m_ExtrusionFilter->Update(); m_Rwi->CameraUpdate(); } break; case ID_REVERSE: { double dir[3]; m_ExtrusionFilter->GetDirection(dir); dir[0]=-dir[0]; dir[1]=-dir[1]; dir[2]=-dir[2]; m_ExtrusionFilter->SetDirection(dir); m_ExtrusionFilter->Update(); m_Rwi->CameraUpdate(); } break; case VME_PICKED: { //Get the picked point int pointID = e->GetArg(); if(pointID>=0) { m_ExtrusionFilter->SetDirectionToDefault(1); SelectHole(pointID); Extrude(); } } break; case ID_EXTRUSION_FACTOR: { Extrude(); } break; case ID_EXTRUDE: { SaveExtrusion(); } break; case ID_RADIUS: { m_Sphere->SetRadius(m_SphereRadius); m_Rwi->CameraUpdate(); } break; case ID_OK: m_Dialog->EndModal(wxID_OK); break; case ID_CANCEL: m_Dialog->EndModal(wxID_CANCEL); break; default: mafEventMacro(*e); } } }