// Get all positions (vertices) from XMarkerList PositionsVector getAllPositionsFromXMarkerList(const ml::XMarkerList positionsList, const std::string allowedPositionTypes, double pointSize) { PositionsVector result; PositionStruct newPosition; StringVector allowedPositionTypesVector = stringSplit(allowedPositionTypes, ",", false); size_t positionsListLength = positionsList.size(); for (int i = 0; i < positionsListLength; i++) { ml::XMarker thisPosition = positionsList[i]; // If thisPoint is of allowed type if ( ("all" == allowedPositionTypes) || ( std::find(allowedPositionTypesVector.begin(), allowedPositionTypesVector.end(), intToString(thisPosition.type)) != allowedPositionTypesVector.end() ) ) { newPosition.position.x = thisPosition.x(); newPosition.position.y = thisPosition.y(); newPosition.position.z = thisPosition.z(); newPosition.color = Vector3(0); // Not defined by XMarkerList newPosition.alpha = 1; // Not defined by XMarkerList newPosition.size = pointSize; result.push_back(newPosition); } } return result; }
// Get bounding box edges from positions ModelBoundingBoxStruct GetBoundingBoxFomPositions(PositionsVector positions) { ModelBoundingBoxStruct result; MLdouble smallestX = 0; MLdouble smallestY = 0; MLdouble smallestZ = 0; MLdouble biggestX = 0; MLdouble biggestY = 0; MLdouble biggestZ = 0; for (int i = 0; i < positions.size(); i++) { PositionStruct thisPosition = positions[i]; if (thisPosition.position.x < smallestX) { smallestX = thisPosition.position.x; } if (thisPosition.position.x > biggestX) { biggestX = thisPosition.position.x; } if (thisPosition.position.y < smallestY) { smallestY = thisPosition.position.y; } if (thisPosition.position.y > biggestY) { biggestY = thisPosition.position.y; } if (thisPosition.position.z < smallestZ) { smallestZ = thisPosition.position.z; } if (thisPosition.position.z > biggestZ) { biggestZ = thisPosition.position.z; } } result.start.x = smallestX; result.start.y = smallestY; result.start.z = smallestZ; result.end.x = biggestX; result.end.y = biggestY; result.end.z = biggestZ; return result; }
// Get bounding box edges from positions ModelBoundingBoxStruct PDFTools::GetBoundingBoxFomPositions(PositionsVector positions) { ModelBoundingBoxStruct result; MLdouble smallestX = ML_DOUBLE_MAX; MLdouble smallestY = ML_DOUBLE_MAX; MLdouble smallestZ = ML_DOUBLE_MAX; MLdouble biggestX = ML_DOUBLE_MAX * -1; MLdouble biggestY = ML_DOUBLE_MAX * -1; MLdouble biggestZ = ML_DOUBLE_MAX * -1; for (PositionsVector::size_type i = 0; i < positions.size(); i++) { PositionStruct thisPosition = positions[i]; if (thisPosition.position.x < smallestX) { smallestX = thisPosition.position.x; } if (thisPosition.position.x > biggestX) { biggestX = thisPosition.position.x; } if (thisPosition.position.y < smallestY) { smallestY = thisPosition.position.y; } if (thisPosition.position.y > biggestY) { biggestY = thisPosition.position.y; } if (thisPosition.position.z < smallestZ) { smallestZ = thisPosition.position.z; } if (thisPosition.position.z > biggestZ) { biggestZ = thisPosition.position.z; } } result.start.x = smallestX; result.start.y = smallestY; result.start.z = smallestZ; result.end.x = biggestX; result.end.y = biggestY; result.end.z = biggestZ; return result; }
TrackedObject(const cv::Rect& rect):numDetectedFrames(1), numFramesNotDetected(0) { lastPositions.push_back(rect); id=getNextId(); };