[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