[Bf-blender-cvs] [ab5407f1379] temp-geometry-nodes-distribute-points-cleanup: Temporary - to be rewritten soon
Dalai Felinto
noreply at git.blender.org
Fri Dec 11 02:00:48 CET 2020
Commit: ab5407f1379fce4cea269c3877e60f2ea84b84f0
Author: Dalai Felinto
Date: Thu Dec 10 18:50:22 2020 +0100
Branches: temp-geometry-nodes-distribute-points-cleanup
https://developer.blender.org/rBab5407f1379fce4cea269c3877e60f2ea84b84f0
Temporary - to be rewritten soon
===================================================================
M source/blender/nodes/CMakeLists.txt
M source/blender/nodes/geometry/node_geometry_util.hh
M source/blender/nodes/geometry/nodes/cyHeap.h
M source/blender/nodes/geometry/nodes/cySampleElim.hh
M source/blender/nodes/geometry/nodes/node_geo_point_distribute.cc
A source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
===================================================================
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index a367f40dca7..2fef29ecd11 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -146,6 +146,7 @@ set(SRC
geometry/nodes/node_geo_object_info.cc
geometry/nodes/node_geo_subdivision_surface.cc
geometry/nodes/node_geo_point_distribute.cc
+ geometry/nodes/node_geo_point_distribute_poisson_disk.cc
geometry/nodes/node_geo_point_instance.cc
geometry/nodes/node_geo_random_attribute.cc
geometry/nodes/node_geo_transform.cc
diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh
index ec389961615..c97463cdc22 100644
--- a/source/blender/nodes/geometry/node_geometry_util.hh
+++ b/source/blender/nodes/geometry/node_geometry_util.hh
@@ -42,4 +42,10 @@ namespace blender::nodes {
void update_attribute_input_socket_availabilities(bNode &node,
const StringRef name,
const GeometryNodeAttributeInputMode mode);
-}
+
+void poisson_disk_point_elimination(Vector<float3> const *input_points,
+ Vector<float3> *output_points,
+ float maximum_distance,
+ float3 boundbox);
+
+} // namespace blender::nodes
diff --git a/source/blender/nodes/geometry/nodes/cyHeap.h b/source/blender/nodes/geometry/nodes/cyHeap.h
index cfc34e684a5..b731868eddc 100644
--- a/source/blender/nodes/geometry/nodes/cyHeap.h
+++ b/source/blender/nodes/geometry/nodes/cyHeap.h
@@ -1,45 +1,47 @@
+
// cyCodeBase by Cem Yuksel
// [www.cemyuksel.com]
//-------------------------------------------------------------------------------
-//! \file cyHeap.h
+//! \file cyHeap.h
//! \author Cem Yuksel
//!
//! \brief A general-purpose heap class
-//!
+//!
//! This file includes a general-purpose heap class.
//!
//-------------------------------------------------------------------------------
//
// Copyright (c) 2016, Cem Yuksel <cem at cemyuksel.com>
// All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in all
+//
+// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
-//
+//
//-------------------------------------------------------------------------------
+#pragma warning(push, 0)
#ifndef _CY_HEAP_H_INCLUDED_
-#define _CY_HEAP_H_INCLUDED_
+# define _CY_HEAP_H_INCLUDED_
//-------------------------------------------------------------------------------
-#include <assert.h>
-#include <stdint.h>
+# include <assert.h>
+# include <stdint.h>
//-------------------------------------------------------------------------------
namespace cy {
@@ -49,231 +51,307 @@ namespace cy {
//!
//! The main data can be kept in an external array or within the Heap class.
-template <typename DATA_TYPE, typename SIZE_TYPE=size_t>
-class Heap
-{
-public:
- //////////////////////////////////////////////////////////////////////////!//!//!
- //!@name Constructor and Destructor
-
- Heap() : size(0), heapItemCount(0), data(nullptr), heap(nullptr), heapPos(nullptr), deleteData(false) {}
- ~Heap() { Clear(); }
-
- //////////////////////////////////////////////////////////////////////////!//!//!
- //!@name Initialization methods
-
- //! Deletes all data owned by the class.
- void Clear() { ClearData(); ClearHeap(); }
-
- //! Copies the main data items from an array into the internal storage of this class.
- void CopyData( DATA_TYPE const *items, SIZE_TYPE itemCount )
- {
- ClearData();
- size = itemCount;
- data = new DATA_TYPE[size];
- for ( SIZE_TYPE i=0; i<size; i++ ) data[i] = items[i];
- deleteData = true;
- }
-
- //! Moves the main data items from an array to the internal storage of this class.
- //! Modifying this array externally can invalidate the heap structure.
- //! The given array must NOT be deleted externally.
- //! The given items pointer still points to the same data, but the class claims
- //! ownership of the data. Therefore, when the class object is deleted, the data
- //! items are deleted as well. If this is not desirable, use SetDataPointer.
- void MoveData( DATA_TYPE *items, SIZE_TYPE itemCount )
- {
- ClearData();
- data = items;
- size = itemCount;
- deleteData = true;
- }
-
- //! Sets the data pointer of this class. This method is used for sharing the items
- //! array with other structures. Unlike setting the main data using the MoveData
- //! method, when SetDataPointer is used, the class does NOT claim ownership
- //! of the data. Therefore, it does not deallocate memory used for the main data
- //! when it is deleted, and the data items must be deleted externally.
- //! However, the data items must NOT be deleted while an object of this class is used.
- void SetDataPointer( DATA_TYPE *items, SIZE_TYPE itemCount )
- {
- ClearData();
- data = items;
- size = itemCount;
- deleteData = false;
- }
-
- //! The Build method builds the heap structure using the main data. Therefore,
- //! the main data must be set using either CopyData, MoveData, or SetDataPointer
- //! before calling the Build method.
- void Build()
- {
- ClearHeap();
- heapItemCount = size;
- heap = new SIZE_TYPE[ size + 1 ];
- heapPos = new SIZE_TYPE[ size ];
- for ( SIZE_TYPE i=0; i< heapItemCount; i++ ) heapPos[i] = i+1;
- for ( SIZE_TYPE i=1; i<=heapItemCount; i++ ) heap [i] = i-1;
- if ( heapItemCount <= 1 ) return;
- for ( SIZE_TYPE ix = heapItemCount/2; ix>0; ix-- ) HeapMoveDown(ix);
- }
-
- //////////////////////////////////////////////////////////////////////////!//!//!
- //!@name Access and manipulation methods
-
- //! Returns the item from the main data with the given id.
- DATA_TYPE const & GetItem( SIZE_TYPE id ) const { assert(id<size); return data[id]; }
-
- //! Sets the item with the given id and updates the heap structure accordingly.
- //! Returns false if the item is not in the heap anymore (removed by Pop) or if its heap position is not changed.
- bool SetItem( SIZE_TYPE id, DATA_TYPE const &item ) { assert(id<size); data[id]=item; return MoveItem(id); }
-
- //! Moves the item with the given id to the correct position in the heap.
- //! This method is useful for fixing the heap position after an item is modified externally.
- //! Returns false if the item is not in the heap anymore (removed by Pop) or if its heap position is not changed.
- bool MoveItem( SIZE_TYPE id ) { return HeapOrder(heapPos[id]); }
-
- //! Moves the item with the given id towards the top of the heap.
- //! This method is useful for fixing the heap position after an item is modified externally to increase its priority.
- //! Returns false if the item is not in the heap anymore (removed by Pop) or if its heap position is not changed.
- bool MoveItemUp( SIZE_TYPE id ) { return HeapMoveUp(heapPos[id]); }
-
- //! Moves the item with the given id towards the top of the heap.
- //! This method is useful for fixing the heap position after an item is modified externally to decrease its priority.
- //! Returns false if the item is not in the heap anymore (removed by Pop) or if its heap position is not changed.
- bool MoveItemDown( SIZE_TYPE id ) { return HeapMoveDown(heapPos[id]); }
-
- //! Returns if the item with the given id is in the heap or removed by Pop.
- bool IsInHeap( SIZE_TYPE id ) const { assert(id<size); return heapPos[id]<=heapItemCount; }
-
- //! Returns the number of items in the heap.
- SIZE_TYPE NumItemsInHeap() const { return heapItemCount; }
-
- //! Returns the item from the heap with the given heap position.
- //! Note that items that are removed from the heap appear in the inverse order
- //! with which they were removed after the last item in the heap.
- DATA_TYPE const & GetFromHeap( SIZE_TYPE heapIndex ) const { assert(heapIndex<size); return data[heap[heapIndex+1]]; }
-
- //! Returns the id of the item from the heap with the given heap position.
- //! Note that items that are removed from the heap appear in the inverse order
- //! with which they were removed after the last item in the heap.
- SIZE_TYPE GetIDFromHeap( SIZE_TYPE heapIndex ) const { assert(heapIndex<size); return heap[heapIndex+1]; }
-
- //! Returns the item at the top of
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list