2011-02-23 10:52:22 +00:00
|
|
|
/*
|
2008-04-16 22:40:48 +00:00
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
2008-04-16 22:40:48 +00:00
|
|
|
* of the License, or (at your option) any later version.
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
*
|
|
|
|
|
* Contributor(s): Janne Karhu
|
|
|
|
|
* Brecht Van Lommel
|
|
|
|
|
*
|
2008-04-16 22:40:48 +00:00
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
*/
|
|
|
|
|
|
2011-02-27 20:37:56 +00:00
|
|
|
/** \file blender/blenlib/intern/BLI_kdtree.c
|
|
|
|
|
* \ingroup bli
|
|
|
|
|
*/
|
|
|
|
|
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
2009-11-10 20:43:45 +00:00
|
|
|
#include "BLI_math.h"
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
#include "BLI_kdtree.h"
|
2012-10-22 13:00:02 +00:00
|
|
|
#include "BLI_utildefines.h"
|
2013-09-01 20:17:56 +00:00
|
|
|
#include "BLI_strict_flags.h"
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
typedef struct KDTreeNode_head {
|
2017-10-28 17:48:45 +11:00
|
|
|
uint left, right;
|
2015-11-17 16:39:29 +11:00
|
|
|
float co[3];
|
|
|
|
|
int index;
|
|
|
|
|
} KDTreeNode_head;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
|
|
|
|
typedef struct KDTreeNode {
|
2017-10-28 17:48:45 +11:00
|
|
|
uint left, right;
|
2014-03-18 09:05:07 +11:00
|
|
|
float co[3];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
int index;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint d; /* range is only (0-2) */
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
} KDTreeNode;
|
|
|
|
|
|
|
|
|
|
struct KDTree {
|
|
|
|
|
KDTreeNode *nodes;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint totnode;
|
|
|
|
|
uint root;
|
2014-01-04 01:56:02 +11:00
|
|
|
#ifdef DEBUG
|
|
|
|
|
bool is_balanced; /* ensure we call balance first */
|
2017-10-28 17:48:45 +11:00
|
|
|
uint maxsize; /* max size of the tree */
|
2014-01-04 01:56:02 +11:00
|
|
|
#endif
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
};
|
|
|
|
|
|
2013-09-01 08:58:46 +00:00
|
|
|
#define KD_STACK_INIT 100 /* initial size for array (on the stack) */
|
|
|
|
|
#define KD_NEAR_ALLOC_INC 100 /* alloc increment for collecting nearest */
|
|
|
|
|
#define KD_FOUND_ALLOC_INC 50 /* alloc increment for collecting nearest */
|
|
|
|
|
|
2017-10-28 17:48:45 +11:00
|
|
|
#define KD_NODE_UNSET ((uint)-1)
|
2015-11-17 16:39:29 +11:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
/**
|
|
|
|
|
* Creates or free a kdtree
|
|
|
|
|
*/
|
2017-10-28 17:48:45 +11:00
|
|
|
KDTree *BLI_kdtree_new(uint maxsize)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
|
|
|
|
KDTree *tree;
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
tree = MEM_mallocN(sizeof(KDTree), "KDTree");
|
|
|
|
|
tree->nodes = MEM_mallocN(sizeof(KDTreeNode) * maxsize, "KDTreeNode");
|
2012-05-12 15:02:10 +00:00
|
|
|
tree->totnode = 0;
|
2015-11-17 16:39:29 +11:00
|
|
|
tree->root = KD_NODE_UNSET;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2014-01-04 01:56:02 +11:00
|
|
|
#ifdef DEBUG
|
|
|
|
|
tree->is_balanced = false;
|
2014-01-14 17:11:55 +06:00
|
|
|
tree->maxsize = maxsize;
|
2014-01-04 01:56:02 +11:00
|
|
|
#endif
|
|
|
|
|
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
return tree;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BLI_kdtree_free(KDTree *tree)
|
|
|
|
|
{
|
2012-03-24 06:18:31 +00:00
|
|
|
if (tree) {
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
MEM_freeN(tree->nodes);
|
|
|
|
|
MEM_freeN(tree);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
/**
|
|
|
|
|
* Construction: first insert points, then call balance. Normal is optional.
|
|
|
|
|
*/
|
2014-03-18 09:05:07 +11:00
|
|
|
void BLI_kdtree_insert(KDTree *tree, int index, const float co[3])
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
2012-05-12 15:02:10 +00:00
|
|
|
KDTreeNode *node = &tree->nodes[tree->totnode++];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2014-01-14 17:11:55 +06:00
|
|
|
#ifdef DEBUG
|
2014-01-14 23:49:21 +06:00
|
|
|
BLI_assert(tree->totnode <= tree->maxsize);
|
2014-01-14 17:11:55 +06:00
|
|
|
#endif
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
/* note, array isn't calloc'd,
|
|
|
|
|
* need to initialize all struct members */
|
|
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
node->left = node->right = KD_NODE_UNSET;
|
2009-11-10 20:43:45 +00:00
|
|
|
copy_v3_v3(node->co, co);
|
2013-09-01 20:17:56 +00:00
|
|
|
node->index = index;
|
|
|
|
|
node->d = 0;
|
2014-01-04 01:56:02 +11:00
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
tree->is_balanced = false;
|
|
|
|
|
#endif
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2017-10-28 17:48:45 +11:00
|
|
|
static uint kdtree_balance(KDTreeNode *nodes, uint totnode, uint axis, const uint ofs)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
|
|
|
|
KDTreeNode *node;
|
|
|
|
|
float co;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint left, right, median, i, j;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (totnode <= 0)
|
2015-11-17 16:39:29 +11:00
|
|
|
return KD_NODE_UNSET;
|
2012-03-24 06:18:31 +00:00
|
|
|
else if (totnode == 1)
|
2015-11-17 16:39:29 +11:00
|
|
|
return 0 + ofs;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
|
|
|
|
/* quicksort style sorting around median */
|
2012-05-12 15:02:10 +00:00
|
|
|
left = 0;
|
|
|
|
|
right = totnode - 1;
|
|
|
|
|
median = totnode / 2;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
while (right > left) {
|
2012-05-12 15:02:10 +00:00
|
|
|
co = nodes[right].co[axis];
|
|
|
|
|
i = left - 1;
|
|
|
|
|
j = right;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
while (1) {
|
2012-05-12 15:02:10 +00:00
|
|
|
while (nodes[++i].co[axis] < co) ;
|
|
|
|
|
while (nodes[--j].co[axis] > co && j > left) ;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
if (i >= j)
|
|
|
|
|
break;
|
|
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
SWAP(KDTreeNode_head, *(KDTreeNode_head *)&nodes[i], *(KDTreeNode_head *)&nodes[j]);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
SWAP(KDTreeNode_head, *(KDTreeNode_head *)&nodes[i], *(KDTreeNode_head *)&nodes[right]);
|
2012-03-24 06:18:31 +00:00
|
|
|
if (i >= median)
|
2012-05-12 15:02:10 +00:00
|
|
|
right = i - 1;
|
2012-03-24 06:18:31 +00:00
|
|
|
if (i <= median)
|
2012-05-12 15:02:10 +00:00
|
|
|
left = i + 1;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* set node and sort subnodes */
|
2012-05-12 15:02:10 +00:00
|
|
|
node = &nodes[median];
|
|
|
|
|
node->d = axis;
|
2015-11-17 16:39:29 +11:00
|
|
|
axis = (axis + 1) % 3;
|
|
|
|
|
node->left = kdtree_balance(nodes, median, axis, ofs);
|
|
|
|
|
node->right = kdtree_balance(nodes + median + 1, (totnode - (median + 1)), axis, (median + 1) + ofs);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
return median + ofs;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BLI_kdtree_balance(KDTree *tree)
|
|
|
|
|
{
|
2015-11-17 16:39:29 +11:00
|
|
|
tree->root = kdtree_balance(tree->nodes, tree->totnode, 0, 0);
|
2014-01-04 01:56:02 +11:00
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
tree->is_balanced = true;
|
|
|
|
|
#endif
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2014-03-18 09:05:07 +11:00
|
|
|
static float squared_distance(const float v2[3], const float v1[3], const float n2[3])
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
|
|
|
|
float d[3], dist;
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
d[0] = v2[0] - v1[0];
|
|
|
|
|
d[1] = v2[1] - v1[1];
|
|
|
|
|
d[2] = v2[2] - v1[2];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2014-03-29 22:23:27 +11:00
|
|
|
dist = len_squared_v3(d);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-02-28 14:05:00 +00:00
|
|
|
/* can someone explain why this is done?*/
|
2012-03-24 06:18:31 +00:00
|
|
|
if (n2 && (dot_v3v3(d, n2) < 0.0f)) {
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
dist *= 10.0f;
|
2012-02-28 14:05:00 +00:00
|
|
|
}
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
|
|
|
|
return dist;
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-28 17:48:45 +11:00
|
|
|
static uint *realloc_nodes(uint *stack, uint *totstack, const bool is_alloc)
|
2013-09-01 08:58:46 +00:00
|
|
|
{
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *stack_new = MEM_mallocN((*totstack + KD_NEAR_ALLOC_INC) * sizeof(uint), "KDTree.treestack");
|
|
|
|
|
memcpy(stack_new, stack, *totstack * sizeof(uint));
|
|
|
|
|
// memset(stack_new + *totstack, 0, sizeof(uint) * KD_NEAR_ALLOC_INC);
|
2013-09-01 08:58:46 +00:00
|
|
|
if (is_alloc)
|
|
|
|
|
MEM_freeN(stack);
|
|
|
|
|
*totstack += KD_NEAR_ALLOC_INC;
|
|
|
|
|
return stack_new;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
/**
|
|
|
|
|
* Find nearest returns index, and -1 if no node is found.
|
|
|
|
|
*/
|
2014-03-18 09:05:07 +11:00
|
|
|
int BLI_kdtree_find_nearest(
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTree *tree, const float co[3],
|
2014-03-18 09:05:07 +11:00
|
|
|
KDTreeNearest *r_nearest)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTreeNode *nodes = tree->nodes;
|
|
|
|
|
const KDTreeNode *root, *min_node;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *stack, defaultstack[KD_STACK_INIT];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
float min_dist, cur_dist;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint totstack, cur = 0;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2014-01-04 01:56:02 +11:00
|
|
|
#ifdef DEBUG
|
|
|
|
|
BLI_assert(tree->is_balanced == true);
|
|
|
|
|
#endif
|
|
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
if (UNLIKELY(tree->root == KD_NODE_UNSET))
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
return -1;
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
stack = defaultstack;
|
2013-09-01 08:58:46 +00:00
|
|
|
totstack = KD_STACK_INIT;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
root = &nodes[tree->root];
|
2012-05-12 15:02:10 +00:00
|
|
|
min_node = root;
|
2014-03-18 09:05:07 +11:00
|
|
|
min_dist = len_squared_v3v3(root->co, co);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (co[root->d] < root->co[root->d]) {
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->right;
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->left;
|
2008-01-03 22:43:51 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->left;
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->right;
|
2008-01-03 22:43:51 +00:00
|
|
|
}
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
while (cur--) {
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTreeNode *node = &nodes[stack[cur]];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
|
|
|
|
cur_dist = node->co[node->d] - co[node->d];
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
if (cur_dist < 0.0f) {
|
|
|
|
|
cur_dist = -cur_dist * cur_dist;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
if (-cur_dist < min_dist) {
|
2014-03-18 09:05:07 +11:00
|
|
|
cur_dist = len_squared_v3v3(node->co, co);
|
2012-05-12 15:02:10 +00:00
|
|
|
if (cur_dist < min_dist) {
|
|
|
|
|
min_dist = cur_dist;
|
|
|
|
|
min_node = node;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->left;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->right;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2012-03-24 06:18:31 +00:00
|
|
|
else {
|
2012-05-12 15:02:10 +00:00
|
|
|
cur_dist = cur_dist * cur_dist;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
if (cur_dist < min_dist) {
|
2014-03-18 09:05:07 +11:00
|
|
|
cur_dist = len_squared_v3v3(node->co, co);
|
2012-05-12 15:02:10 +00:00
|
|
|
if (cur_dist < min_dist) {
|
|
|
|
|
min_dist = cur_dist;
|
|
|
|
|
min_node = node;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->right;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->left;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2013-09-01 08:58:46 +00:00
|
|
|
if (UNLIKELY(cur + 3 > totstack)) {
|
2013-09-01 20:17:56 +00:00
|
|
|
stack = realloc_nodes(stack, &totstack, defaultstack != stack);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
if (r_nearest) {
|
|
|
|
|
r_nearest->index = min_node->index;
|
|
|
|
|
r_nearest->dist = sqrtf(min_dist);
|
|
|
|
|
copy_v3_v3(r_nearest->co, min_node->co);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (stack != defaultstack)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
MEM_freeN(stack);
|
|
|
|
|
|
|
|
|
|
return min_node->index;
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-06 21:29:06 +11:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A version of #BLI_kdtree_find_nearest which runs a callback
|
|
|
|
|
* to filter out values.
|
|
|
|
|
*
|
|
|
|
|
* \param filter_cb: Filter find results,
|
|
|
|
|
* Return codes: (1: accept, 0: skip, -1: immediate exit).
|
|
|
|
|
*/
|
|
|
|
|
int BLI_kdtree_find_nearest_cb(
|
|
|
|
|
const KDTree *tree, const float co[3],
|
|
|
|
|
int (*filter_cb)(void *user_data, int index, const float co[3], float dist_sq), void *user_data,
|
|
|
|
|
KDTreeNearest *r_nearest)
|
|
|
|
|
{
|
|
|
|
|
const KDTreeNode *nodes = tree->nodes;
|
|
|
|
|
const KDTreeNode *min_node = NULL;
|
|
|
|
|
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *stack, defaultstack[KD_STACK_INIT];
|
2015-12-06 21:29:06 +11:00
|
|
|
float min_dist = FLT_MAX, cur_dist;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint totstack, cur = 0;
|
2015-12-06 21:29:06 +11:00
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
BLI_assert(tree->is_balanced == true);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (UNLIKELY(tree->root == KD_NODE_UNSET))
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
stack = defaultstack;
|
|
|
|
|
totstack = KD_STACK_INIT;
|
|
|
|
|
|
|
|
|
|
#define NODE_TEST_NEAREST(node) \
|
|
|
|
|
{ \
|
|
|
|
|
const float dist_sq = len_squared_v3v3((node)->co, co); \
|
|
|
|
|
if (dist_sq < min_dist) { \
|
|
|
|
|
const int result = filter_cb(user_data, (node)->index, (node)->co, dist_sq); \
|
|
|
|
|
if (result == 1) { \
|
|
|
|
|
min_dist = dist_sq; \
|
|
|
|
|
min_node = node; \
|
|
|
|
|
} \
|
|
|
|
|
else if (result == 0) { \
|
|
|
|
|
/* pass */ \
|
|
|
|
|
} \
|
|
|
|
|
else { \
|
|
|
|
|
BLI_assert(result == -1); \
|
|
|
|
|
goto finally; \
|
|
|
|
|
} \
|
|
|
|
|
} \
|
|
|
|
|
} ((void)0)
|
|
|
|
|
|
|
|
|
|
stack[cur++] = tree->root;
|
|
|
|
|
|
|
|
|
|
while (cur--) {
|
|
|
|
|
const KDTreeNode *node = &nodes[stack[cur]];
|
|
|
|
|
|
|
|
|
|
cur_dist = node->co[node->d] - co[node->d];
|
|
|
|
|
|
|
|
|
|
if (cur_dist < 0.0f) {
|
|
|
|
|
cur_dist = -cur_dist * cur_dist;
|
|
|
|
|
|
|
|
|
|
if (-cur_dist < min_dist) {
|
|
|
|
|
NODE_TEST_NEAREST(node);
|
|
|
|
|
|
|
|
|
|
if (node->left != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->left;
|
|
|
|
|
}
|
|
|
|
|
if (node->right != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->right;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
cur_dist = cur_dist * cur_dist;
|
|
|
|
|
|
|
|
|
|
if (cur_dist < min_dist) {
|
|
|
|
|
NODE_TEST_NEAREST(node);
|
|
|
|
|
|
|
|
|
|
if (node->right != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->right;
|
|
|
|
|
}
|
|
|
|
|
if (node->left != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->left;
|
|
|
|
|
}
|
|
|
|
|
if (UNLIKELY(cur + 3 > totstack)) {
|
|
|
|
|
stack = realloc_nodes(stack, &totstack, defaultstack != stack);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#undef NODE_TEST_NEAREST
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
finally:
|
|
|
|
|
if (stack != defaultstack)
|
|
|
|
|
MEM_freeN(stack);
|
|
|
|
|
|
|
|
|
|
if (min_node) {
|
|
|
|
|
if (r_nearest) {
|
|
|
|
|
r_nearest->index = min_node->index;
|
|
|
|
|
r_nearest->dist = sqrtf(min_dist);
|
|
|
|
|
copy_v3_v3(r_nearest->co, min_node->co);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return min_node->index;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-28 17:48:45 +11:00
|
|
|
static void add_nearest(KDTreeNearest *ptn, uint *found, uint n, int index,
|
2013-09-01 20:17:56 +00:00
|
|
|
float dist, const float *co)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
2017-10-28 17:48:45 +11:00
|
|
|
uint i;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
if (*found < n) (*found)++;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
for (i = *found - 1; i > 0; i--) {
|
|
|
|
|
if (dist >= ptn[i - 1].dist)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
break;
|
|
|
|
|
else
|
2012-05-12 15:02:10 +00:00
|
|
|
ptn[i] = ptn[i - 1];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
ptn[i].index = index;
|
|
|
|
|
ptn[i].dist = dist;
|
2009-11-10 20:43:45 +00:00
|
|
|
copy_v3_v3(ptn[i].co, co);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
/**
|
|
|
|
|
* Find n nearest returns number of points found, with results in nearest.
|
|
|
|
|
* Normal is optional, but if given will limit results to points in normal direction from co.
|
|
|
|
|
*
|
|
|
|
|
* \param r_nearest An array of nearest, sized at least \a n.
|
|
|
|
|
*/
|
2014-03-18 09:05:07 +11:00
|
|
|
int BLI_kdtree_find_nearest_n__normal(
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTree *tree, const float co[3], const float nor[3],
|
2014-03-18 09:05:07 +11:00
|
|
|
KDTreeNearest r_nearest[],
|
2017-10-28 17:48:45 +11:00
|
|
|
uint n)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
{
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTreeNode *nodes = tree->nodes;
|
|
|
|
|
const KDTreeNode *root;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *stack, defaultstack[KD_STACK_INIT];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
float cur_dist;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint totstack, cur = 0;
|
|
|
|
|
uint i, found = 0;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2014-01-04 01:56:02 +11:00
|
|
|
#ifdef DEBUG
|
|
|
|
|
BLI_assert(tree->is_balanced == true);
|
|
|
|
|
#endif
|
|
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
if (UNLIKELY((tree->root == KD_NODE_UNSET) || n == 0))
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
return 0;
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
stack = defaultstack;
|
2013-09-01 08:58:46 +00:00
|
|
|
totstack = KD_STACK_INIT;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
root = &nodes[tree->root];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2014-03-18 09:05:07 +11:00
|
|
|
cur_dist = squared_distance(root->co, co, nor);
|
2013-09-01 20:17:56 +00:00
|
|
|
add_nearest(r_nearest, &found, n, root->index, cur_dist, root->co);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (co[root->d] < root->co[root->d]) {
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->right;
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->left;
|
2008-01-03 22:43:51 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->left;
|
2015-11-17 16:39:29 +11:00
|
|
|
if (root->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = root->right;
|
2008-01-03 22:43:51 +00:00
|
|
|
}
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
while (cur--) {
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTreeNode *node = &nodes[stack[cur]];
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
|
|
|
|
cur_dist = node->co[node->d] - co[node->d];
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
if (cur_dist < 0.0f) {
|
|
|
|
|
cur_dist = -cur_dist * cur_dist;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
if (found < n || -cur_dist < r_nearest[found - 1].dist) {
|
2014-03-18 09:05:07 +11:00
|
|
|
cur_dist = squared_distance(node->co, co, nor);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
if (found < n || cur_dist < r_nearest[found - 1].dist)
|
|
|
|
|
add_nearest(r_nearest, &found, n, node->index, cur_dist, node->co);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->left;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->right;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2012-03-24 06:18:31 +00:00
|
|
|
else {
|
2012-05-12 15:02:10 +00:00
|
|
|
cur_dist = cur_dist * cur_dist;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
if (found < n || cur_dist < r_nearest[found - 1].dist) {
|
2014-03-18 09:05:07 +11:00
|
|
|
cur_dist = squared_distance(node->co, co, nor);
|
2013-09-01 20:17:56 +00:00
|
|
|
if (found < n || cur_dist < r_nearest[found - 1].dist)
|
|
|
|
|
add_nearest(r_nearest, &found, n, node->index, cur_dist, node->co);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->right;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->left;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
2013-09-01 08:58:46 +00:00
|
|
|
if (UNLIKELY(cur + 3 > totstack)) {
|
2013-09-01 20:17:56 +00:00
|
|
|
stack = realloc_nodes(stack, &totstack, defaultstack != stack);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
for (i = 0; i < found; i++)
|
2013-09-01 20:17:56 +00:00
|
|
|
r_nearest[i].dist = sqrtf(r_nearest[i].dist);
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (stack != defaultstack)
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
MEM_freeN(stack);
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
return (int)found;
|
Particles
=========
Merge of the famous particle patch by Janne Karhu, a full rewrite
of the Blender particle system. This includes:
- Emitter, Hair and Reactor particle types.
- Newtonian, Keyed and Boids physics.
- Various particle visualisation and rendering types.
- Vertex group and texture control for various properties.
- Interpolated child particles from parents.
- Hair editing with combing, growing, cutting, .. .
- Explode modifier.
- Harmonic, Magnetic fields, and multiple falloff types.
.. and lots of other things, some more info is here:
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite
http://wiki.blender.org/index.php/BlenderDev/Particles_Rewrite_Doc
The new particle system cannot be backwards compatible. Old particle
systems are being converted to the new system, but will require
tweaking to get them looking the same as before.
Point Cache
===========
The new system to replace manual baking, based on automatic caching
on disk. This is currently used by softbodies and the particle system.
See the Cache API section on:
http://wiki.blender.org/index.php/BlenderDev/PhysicsSprint
Documentation
=============
These new features still need good docs for the release logs, help
for this is appreciated.
2007-11-26 22:09:57 +00:00
|
|
|
}
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
static int range_compare(const void *a, const void *b)
|
2009-07-20 23:52:53 +00:00
|
|
|
{
|
|
|
|
|
const KDTreeNearest *kda = a;
|
|
|
|
|
const KDTreeNearest *kdb = b;
|
|
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (kda->dist < kdb->dist)
|
2009-07-20 23:52:53 +00:00
|
|
|
return -1;
|
2012-03-24 06:18:31 +00:00
|
|
|
else if (kda->dist > kdb->dist)
|
2009-07-20 23:52:53 +00:00
|
|
|
return 1;
|
|
|
|
|
else
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2014-09-11 12:34:30 +10:00
|
|
|
static void add_in_range(
|
|
|
|
|
KDTreeNearest **r_foundstack,
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *r_foundstack_tot_alloc,
|
|
|
|
|
uint found,
|
2014-09-11 12:34:30 +10:00
|
|
|
const int index, const float dist, const float *co)
|
2009-07-20 23:52:53 +00:00
|
|
|
{
|
|
|
|
|
KDTreeNearest *to;
|
|
|
|
|
|
2014-09-11 12:34:30 +10:00
|
|
|
if (UNLIKELY(found >= *r_foundstack_tot_alloc)) {
|
|
|
|
|
*r_foundstack = MEM_reallocN_id(
|
|
|
|
|
*r_foundstack,
|
|
|
|
|
(*r_foundstack_tot_alloc += KD_FOUND_ALLOC_INC) * sizeof(KDTreeNode),
|
|
|
|
|
__func__);
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
|
|
|
|
|
2014-09-11 12:34:30 +10:00
|
|
|
to = (*r_foundstack) + found;
|
2009-07-20 23:52:53 +00:00
|
|
|
|
|
|
|
|
to->index = index;
|
2013-09-01 08:58:46 +00:00
|
|
|
to->dist = sqrtf(dist);
|
2009-11-10 20:43:45 +00:00
|
|
|
copy_v3_v3(to->co, co);
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
2013-09-01 08:58:46 +00:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
/**
|
|
|
|
|
* Range search returns number of points found, with results in nearest
|
|
|
|
|
* Normal is optional, but if given will limit results to points in normal direction from co.
|
|
|
|
|
* Remember to free nearest after use!
|
|
|
|
|
*/
|
2014-03-18 09:05:07 +11:00
|
|
|
int BLI_kdtree_range_search__normal(
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTree *tree, const float co[3], const float nor[3],
|
2014-03-18 09:05:07 +11:00
|
|
|
KDTreeNearest **r_nearest, float range)
|
2009-07-20 23:52:53 +00:00
|
|
|
{
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTreeNode *nodes = tree->nodes;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *stack, defaultstack[KD_STACK_INIT];
|
2012-05-12 15:02:10 +00:00
|
|
|
KDTreeNearest *foundstack = NULL;
|
2015-11-18 08:41:25 +11:00
|
|
|
float range_sq = range * range, dist_sq;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint totstack, cur = 0, found = 0, totfoundstack = 0;
|
2009-07-20 23:52:53 +00:00
|
|
|
|
2014-01-04 01:56:02 +11:00
|
|
|
#ifdef DEBUG
|
|
|
|
|
BLI_assert(tree->is_balanced == true);
|
|
|
|
|
#endif
|
|
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
if (UNLIKELY(tree->root == KD_NODE_UNSET))
|
2009-07-20 23:52:53 +00:00
|
|
|
return 0;
|
|
|
|
|
|
2012-05-12 15:02:10 +00:00
|
|
|
stack = defaultstack;
|
2013-09-01 08:58:46 +00:00
|
|
|
totstack = KD_STACK_INIT;
|
2009-07-20 23:52:53 +00:00
|
|
|
|
2015-12-06 15:57:10 +11:00
|
|
|
stack[cur++] = tree->root;
|
2009-07-20 23:52:53 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
while (cur--) {
|
2015-11-17 16:39:29 +11:00
|
|
|
const KDTreeNode *node = &nodes[stack[cur]];
|
2009-07-20 23:52:53 +00:00
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (co[node->d] + range < node->co[node->d]) {
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->left;
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
2012-03-24 06:18:31 +00:00
|
|
|
else if (co[node->d] - range > node->co[node->d]) {
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->right;
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2015-11-18 08:41:25 +11:00
|
|
|
dist_sq = squared_distance(node->co, co, nor);
|
|
|
|
|
if (dist_sq <= range_sq) {
|
|
|
|
|
add_in_range(&foundstack, &totfoundstack, found++, node->index, dist_sq, node->co);
|
|
|
|
|
}
|
2009-07-20 23:52:53 +00:00
|
|
|
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->left != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->left;
|
2015-11-17 16:39:29 +11:00
|
|
|
if (node->right != KD_NODE_UNSET)
|
2012-05-12 15:02:10 +00:00
|
|
|
stack[cur++] = node->right;
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
|
|
|
|
|
2013-09-01 08:58:46 +00:00
|
|
|
if (UNLIKELY(cur + 3 > totstack)) {
|
2013-09-01 20:17:56 +00:00
|
|
|
stack = realloc_nodes(stack, &totstack, defaultstack != stack);
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (stack != defaultstack)
|
2009-07-20 23:52:53 +00:00
|
|
|
MEM_freeN(stack);
|
|
|
|
|
|
2012-03-24 06:18:31 +00:00
|
|
|
if (found)
|
2009-07-20 23:52:53 +00:00
|
|
|
qsort(foundstack, found, sizeof(KDTreeNearest), range_compare);
|
|
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
*r_nearest = foundstack;
|
2009-07-20 23:52:53 +00:00
|
|
|
|
2013-09-01 20:17:56 +00:00
|
|
|
return (int)found;
|
2009-07-20 23:52:53 +00:00
|
|
|
}
|
2015-11-18 09:01:55 +11:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A version of #BLI_kdtree_range_search which runs a callback
|
|
|
|
|
* instead of allocating an array.
|
|
|
|
|
*
|
|
|
|
|
* \param search_cb: Called for every node found in \a range, false return value performs an early exit.
|
|
|
|
|
*
|
|
|
|
|
* \note the order of calls isn't sorted based on distance.
|
|
|
|
|
*/
|
|
|
|
|
void BLI_kdtree_range_search_cb(
|
|
|
|
|
const KDTree *tree, const float co[3], float range,
|
|
|
|
|
bool (*search_cb)(void *user_data, int index, const float co[3], float dist_sq), void *user_data)
|
|
|
|
|
{
|
|
|
|
|
const KDTreeNode *nodes = tree->nodes;
|
2015-12-06 15:57:10 +11:00
|
|
|
|
2017-10-28 17:48:45 +11:00
|
|
|
uint *stack, defaultstack[KD_STACK_INIT];
|
2015-11-18 09:01:55 +11:00
|
|
|
float range_sq = range * range, dist_sq;
|
2017-10-28 17:48:45 +11:00
|
|
|
uint totstack, cur = 0;
|
2015-11-18 09:01:55 +11:00
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
BLI_assert(tree->is_balanced == true);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (UNLIKELY(tree->root == KD_NODE_UNSET))
|
2015-11-18 21:40:29 +11:00
|
|
|
return;
|
2015-11-18 09:01:55 +11:00
|
|
|
|
|
|
|
|
stack = defaultstack;
|
|
|
|
|
totstack = KD_STACK_INIT;
|
|
|
|
|
|
2015-12-06 15:57:10 +11:00
|
|
|
stack[cur++] = tree->root;
|
2015-11-18 09:01:55 +11:00
|
|
|
|
|
|
|
|
while (cur--) {
|
|
|
|
|
const KDTreeNode *node = &nodes[stack[cur]];
|
|
|
|
|
|
|
|
|
|
if (co[node->d] + range < node->co[node->d]) {
|
|
|
|
|
if (node->left != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->left;
|
|
|
|
|
}
|
|
|
|
|
else if (co[node->d] - range > node->co[node->d]) {
|
|
|
|
|
if (node->right != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->right;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
dist_sq = len_squared_v3v3(node->co, co);
|
|
|
|
|
if (dist_sq <= range_sq) {
|
|
|
|
|
if (search_cb(user_data, node->index, node->co, dist_sq) == false) {
|
|
|
|
|
goto finally;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (node->left != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->left;
|
|
|
|
|
if (node->right != KD_NODE_UNSET)
|
|
|
|
|
stack[cur++] = node->right;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (UNLIKELY(cur + 3 > totstack)) {
|
|
|
|
|
stack = realloc_nodes(stack, &totstack, defaultstack != stack);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
finally:
|
|
|
|
|
if (stack != defaultstack)
|
|
|
|
|
MEM_freeN(stack);
|
|
|
|
|
}
|
2017-09-03 22:34:49 +10:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Use when we want to loop over nodes ordered by index.
|
|
|
|
|
* Requires indices to be aligned with nodes.
|
|
|
|
|
*/
|
|
|
|
|
static uint *kdtree_order(const KDTree *tree)
|
|
|
|
|
{
|
|
|
|
|
const KDTreeNode *nodes = tree->nodes;
|
|
|
|
|
uint *order = MEM_mallocN(sizeof(uint) * tree->totnode, __func__);
|
|
|
|
|
for (uint i = 0; i < tree->totnode; i++) {
|
|
|
|
|
order[nodes[i].index] = i;
|
|
|
|
|
}
|
|
|
|
|
return order;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
|
/** \name BLI_kdtree_calc_duplicates_fast
|
|
|
|
|
* \{ */
|
|
|
|
|
|
|
|
|
|
struct DeDuplicateParams {
|
|
|
|
|
/* Static */
|
|
|
|
|
const KDTreeNode *nodes;
|
|
|
|
|
float range;
|
|
|
|
|
float range_sq;
|
|
|
|
|
int *duplicates;
|
|
|
|
|
int *duplicates_found;
|
|
|
|
|
|
|
|
|
|
/* Per Search */
|
|
|
|
|
float search_co[3];
|
|
|
|
|
int search;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static void deduplicate_recursive(const struct DeDuplicateParams *p, uint i)
|
|
|
|
|
{
|
|
|
|
|
const KDTreeNode *node = &p->nodes[i];
|
|
|
|
|
if (p->search_co[node->d] + p->range <= node->co[node->d]) {
|
|
|
|
|
if (node->left != KD_NODE_UNSET) {
|
|
|
|
|
deduplicate_recursive(p, node->left);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (p->search_co[node->d] - p->range >= node->co[node->d]) {
|
|
|
|
|
if (node->right != KD_NODE_UNSET) {
|
|
|
|
|
deduplicate_recursive(p, node->right);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if ((p->search != node->index) && (p->duplicates[node->index] == -1)) {
|
|
|
|
|
if (compare_len_squared_v3v3(node->co, p->search_co, p->range_sq)) {
|
|
|
|
|
p->duplicates[node->index] = (int)p->search;
|
|
|
|
|
*p->duplicates_found += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (node->left != KD_NODE_UNSET) {
|
|
|
|
|
deduplicate_recursive(p, node->left);
|
|
|
|
|
}
|
|
|
|
|
if (node->right != KD_NODE_UNSET) {
|
|
|
|
|
deduplicate_recursive(p, node->right);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Find duplicate points in \a range.
|
|
|
|
|
* Favors speed over quality since it doesn't find the best target vertex for merging.
|
|
|
|
|
* Nodes are looped over, duplicates are added when found.
|
|
|
|
|
* Nevertheless results are predictable.
|
|
|
|
|
*
|
|
|
|
|
* \param range: Coordinates in this range are candidates to be merged.
|
|
|
|
|
* \param use_index_order: Loop over the coordinates ordered by #KDTreeNode.index
|
|
|
|
|
* At the expense of some performance, this ensures the layout of the tree doesn't influence
|
|
|
|
|
* the iteration order.
|
|
|
|
|
* \param duplicates: An array of int's the length of #KDTree.totnode
|
|
|
|
|
* Values initialized to -1 are candidates to me merged.
|
|
|
|
|
* Setting the index to it's own position in the array prevents it from being touched,
|
|
|
|
|
* although it can still be used as a target.
|
|
|
|
|
* \returns The numebr of merges found (includes any merges already in the \a duplicates array).
|
|
|
|
|
*
|
|
|
|
|
* \note Merging is always a single step (target indices wont be marked for merging).
|
|
|
|
|
*/
|
|
|
|
|
int BLI_kdtree_calc_duplicates_fast(
|
|
|
|
|
const KDTree *tree, const float range, bool use_index_order,
|
|
|
|
|
int *duplicates)
|
|
|
|
|
{
|
|
|
|
|
int found = 0;
|
|
|
|
|
struct DeDuplicateParams p = {
|
|
|
|
|
.nodes = tree->nodes,
|
|
|
|
|
.range = range,
|
|
|
|
|
.range_sq = range * range,
|
|
|
|
|
.duplicates = duplicates,
|
|
|
|
|
.duplicates_found = &found,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (use_index_order) {
|
|
|
|
|
uint *order = kdtree_order(tree);
|
|
|
|
|
for (uint i = 0; i < tree->totnode; i++) {
|
|
|
|
|
const uint node_index = order[i];
|
|
|
|
|
const int index = (int)i;
|
|
|
|
|
if (ELEM(duplicates[index], -1, index)) {
|
|
|
|
|
p.search = index;
|
|
|
|
|
copy_v3_v3(p.search_co, tree->nodes[node_index].co);
|
|
|
|
|
deduplicate_recursive(&p, tree->root);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
MEM_freeN(order);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
for (uint i = 0; i < tree->totnode; i++) {
|
|
|
|
|
const uint node_index = i;
|
|
|
|
|
const int index = p.nodes[node_index].index;
|
|
|
|
|
if (ELEM(duplicates[index], -1, index)) {
|
|
|
|
|
p.search = index;
|
|
|
|
|
copy_v3_v3(p.search_co, tree->nodes[node_index].co);
|
|
|
|
|
deduplicate_recursive(&p, tree->root);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return found;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \} */
|