Performance improvements
- Better
MemoryResource
New feature
- Serialization support
Bugfixes
- Memory resource could cause memory leak.
- Typos in adapter headers.
Miscellaneous
- Managed types now have a new constructor that takes only the bounding box and the depth.
New features
- Static BVH linear core is added.
Major refactorization with large interface change.
Caution
RayIntersectedAll() has a new, toleranceIncrement parameter, which can be misinterpreted as maxExaminationDistance, causing false positive hits.
Interface changes
- Geometric types and
DIMENSION_NOmoved into theBaseGeometryAdapter(formerlyAdaptorGeneralBasics) BASE_TOLERANCEis added to theBaseGeometryAdapter, and it is applied as default parameter.TFloatScalaris introduced: integer based geometry calculation is very hectic. Internal calculation uses this type and tolerances.- EntityAdapter is introduced: this allows any type of system adoption. For more details see the EntityAdapter.
- Configuration is introduced. For more details see the configuration.h.
Containertypes are renamed toManaged, andCpostfix is changed toM- Split strategy is removed completely: Last iteration (single depth split) was an inferior solution in every aspect to the regular octree. Loose tree is introduces instead.
Visit*()functions are changed:TraverseNodesBreadthFirst()/TraverseNodesDepthFirst()/TraverseNodesByPriority(). Only one lambda is required which- input is
NodeValue(currently std::pair<const NodeID, Node>, but do not rely on in long term), other API function are available to ask node geometry data and entities (GetNodeMinPoint(),GetNodeSize(),GetNodeEntities()). - must return
TraverseControlenum to control the traverse.
- input is
- Out of modelspace entities handling now is configurable. Default behavior is changed to allow.
- Allow = true [Default]: OoM entities will be placed in the Root. Root bounding box will be changed to enclose the new entity.
- Allow = false: OoM entity related operations will be failed, and no changes will be applied to the tree. (E.g. Insert/Update) Creation will be partial.
Insert()is changed: it will split the overflowed node.InsertWithRebalance()is removed in favor ofInsert().InsertIntoLeaf()inherited the original behavior. AnInsertionModeenum controls whether to be restricted to the existing nodes or create new ones.- Efficient bulk insert overload is added.
Query()function is added for complex combined queries: simultanious frustum culling, plane intersection, range search and custom tester.- Custom template
EntityTester-s were added to queries. (Both entityID/Entity and geometry-related testers are allowed.) RangeSearch()function is changes:isFullyContaintemplate parameter is removed andRangeSearchModeenum is added as function parameter.bool-flagged pararellism parameters are replaced withExecutionTags.- Required adapter includes are added to the public headers. For custom include path, a build macro is available. (E.g. Eigen:
#define ORTHOTREE_EIGEN_INCLUDE <my_vendor/Eigen/Geometry>)
New features
- Static octree is implemented. Inmutable orthotree with contiguous memory layout.
- Bulk
Insert()for dynamic octree. - Loose octree option.
- MBR node storage option.
Miscellaneous
- Code is restructured from single to multi header structure.
- Double precision is used in grid calculation for float32 based geometry with larger depth to avoid numerical issues.
RayInsersectionfunctions was not prepared for fast-math compiler options, it is fixed.
Performance improvements
- Loose octree has major performance advantage for picking.
Interface changes
- GetNearestNeighbors()` supports boxes, and changed to be more numerically robust.
RayIntersected*()functions changed to be more numerically robust.
Interface changes
- Exposing of Node's entities responsibility was moved to the Tree class
- General split depth increasement strategy is removed. The one-level deeper solution is applied:
DO_SPLIT_PARENT_ENTITIES - Default EntityID type is changed to
uint32_t Node::GetChildren()is a range now instead ofstd::vector- Naming issues aroung node's max element and max depth ID are solved
- Distance sorted result requirement is added to
GetNearestNeighbors()
Performance improvements
- Box creation
- Both the internal and between-tree version of
CollisionDetection() RayIntersectedFirst()GetNearestNeighbors()
Miscellaneous
- Automatic Benchmark is added
- Children key storage is changed to bitflag for smaller dimensions.
- W4 warning level
Bugfixes
- Minor bugfixes in
InsertWithRebalance() - Minor bugfix in
GetNearestNeighbors()
New benchmarks
- Creation for 6D points
GetNearestNeighbors()for 6D and 63D
Interface changes
std::executionis dropped from the interface.bool IS_PARALLEL_EXECis used instead.Idis replaced toEntity:CollectAllEntitiesInDFS/BFSEraseEntity
New features
InsertUnique()for unique insertion of pointsRangeSearchNodes()for range search of nodesBMI2instruction set to enhanceMortonEncode()/Decode()(UseAVX2)
Maintenance
- Increased performance of
GetNearestNeighbor() AddAndRebalanceandAddUniqueis added to theContainer
Refactorizations
- Morton Z-order space indexing separation
- Grid space indexing separation
Bugfixes
- Container type move constructor fix
New features
- Support of abstract classes
Refactorizations
- Internal geometry module
New features
- Allowing associative container type for the entity-geometries
Maintenance
- Support compilers w/o
std::execution(e.g. Apple Clang)
New features
- Rebalancing insert
- Removing empty nodes during
Erase
New features
- New adaptors: glm, boost, CGAL
- Built-in
RayandPlanetypes
Refactorizations
- New, more capable adaptor concept
- Separated Adapator tests
- Support of
Eigen::HyperplaneandEigen::ParametrizedLine - Support of Unreal Engine
FRay,FPlane
Maintenance
- GCC compile action
- Fix a bug in
Insert()
New features
- New adaptors: Eigen, Unreal Engine, XYZ
- Plane related search and intersection check
- Frustum culling
- User-defined function for Collision detection
- Depth-first search visitor
Refactorizations
- Clang format and naming changes
- entity_id_type and max_element_type are replaced with size_t
- ID generation is removed
- Tolerance is added to the Ray intersection functions
- Bugfixes
- Split strategy performance upgrade
- GCC support
- Bugfixes
New features
- Container type
- Split strategy for boundingbox-type tree
- Collision detection inside the tree
- Ray intersections
- k-Nearest Neighbors
Maintenance
- Benchmarks
- Bugfixes
- First commits