/*! * \brief RectifyToVector::setUpResult * \param cylinder * \return */ bool RectifyToVector::setUpResult(Cylinder &cylinder) { //get and check cylinder if(!this->inputElements.contains(0) || this->inputElements[0].size() != 1){ return false; } QPointer<Geometry> geometry = this->inputElements[0].at(0).geometry; if(geometry.isNull() || !geometry->getIsSolved() || !geometry->hasDirection()){ return false; } //get the sense (positive or negative) double sense = 1.0; if(this->scalarInputParams.stringParameter.contains("sense")){ if(this->scalarInputParams.stringParameter.value("sense").compare("negative") == 0){ sense = -1.0; } } //get the direction to compare OiVec r_reference = geometry->getDirection().getVector(); r_reference.normalize(); OiVec r_cylinder = cylinder.getDirection().getVector(); r_cylinder.normalize(); //calculate the angle between both directions double angle = 0.0; OiVec::dot(angle, r_reference, r_cylinder); angle = qAbs(qAcos(angle)); //invert the normal vector if the angle is greater than 90° if(angle > PI/2.0){ r_cylinder = -1.0 * r_cylinder; } //invert the normal vector if sense is negative r_cylinder = sense * r_cylinder; //set result Direction direction = cylinder.getDirection(); direction.setVector(r_cylinder); cylinder.setCylinder(cylinder.getPosition(), direction, cylinder.getRadius()); return true; }