// // Created by Sam Gondelman 10/17/2017 // Copyright 2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "Pick.h" const PickFilter PickFilter::NOTHING; int pickTypeMetaTypeId = qRegisterMetaType("PickType"); PickQuery::PickQuery(const PickFilter& filter, const float maxDistance, const bool enabled) : _filter(filter), _maxDistance(maxDistance), _enabled(enabled) { } void PickQuery::enable(bool enabled) { withWriteLock([&] { _enabled = enabled; }); } PickFilter PickQuery::getFilter() const { return resultWithReadLock([&] { return _filter; }); } float PickQuery::getMaxDistance() const { return _maxDistance; } bool PickQuery::isEnabled() const { return resultWithReadLock([&] { return _enabled; }); } void PickQuery::setPrecisionPicking(bool precisionPicking) { withWriteLock([&] { _filter.setFlag(PickFilter::PICK_COARSE, !precisionPicking); }); } void PickQuery::setPickResult(const PickResultPointer& pickResult) { withWriteLock([&] { _prevResult = pickResult; }); } QVector PickQuery::getIgnoreItems() const { return resultWithReadLock>([&] { return _ignoreItems; }); } QVector PickQuery::getIncludeItems() const { return resultWithReadLock>([&] { return _includeItems; }); } PickResultPointer PickQuery::getPrevPickResult() const { return resultWithReadLock([&] { return _prevResult; }); } void PickQuery::setIgnoreItems(const QVector& ignoreItems) { withWriteLock([&] { _ignoreItems = ignoreItems; // We sort these items here so the PickCacheOptimizer can catch cases where two picks have the same ignoreItems in a different order std::sort(_ignoreItems.begin(), _ignoreItems.end(), std::less()); }); } void PickQuery::setIncludeItems(const QVector& includeItems) { withWriteLock([&] { _includeItems = includeItems; // We sort these items here so the PickCacheOptimizer can catch cases where two picks have the same includeItems in a different order std::sort(_includeItems.begin(), _includeItems.end(), std::less()); }); }