| 172 | } |
| 173 | |
| 174 | void PickingSystem::pruneInvalidSelection() const { |
| 175 | if (atomStorage == nullptr || selectedAtomIds.empty()) { |
| 176 | return; |
| 177 | } |
| 178 | |
| 179 | for (auto it = selectedAtomIds.begin(); it != selectedAtomIds.end();) { |
| 180 | if (!atomStorage->containsAtomId(*it)) { |
| 181 | it = selectedAtomIds.erase(it); |
| 182 | } |
| 183 | else { |
| 184 | ++it; |
| 185 | } |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | // Ray casting алгоритм для point-in-polygon |
| 190 | template <typename T> bool PickingSystem::pointInPolygon(const T& point, std::span<T> polygon) { |
nothing calls this directly
no test coverage detected