[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58494] branches/soc-2013-rigid_body_sim/ extern: Add HACD (Hierarchical Approximate Convex Decomposition) library

Sergej Reich sergej.reich at googlemail.com
Mon Jul 22 09:20:37 CEST 2013


Revision: 58494
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58494
Author:   sergof
Date:     2013-07-22 07:20:37 +0000 (Mon, 22 Jul 2013)
Log Message:
-----------
Add HACD (Hierarchical Approximate Convex Decomposition) library

This is the version bundled with bullet.
We should probably use a more recent version but there are different
repositories out there, so we have to test first.

Modified Paths:
--------------
    branches/soc-2013-rigid_body_sim/extern/CMakeLists.txt

Added Paths:
-----------
    branches/soc-2013-rigid_body_sim/extern/HACD/
    branches/soc-2013-rigid_body_sim/extern/HACD/CMakeLists.txt
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.h
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.inl
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdGraph.cpp
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdGraph.h
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdHACD.cpp
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdHACD.h
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdICHull.cpp
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdICHull.h
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdManifoldMesh.cpp
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdManifoldMesh.h
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdVector.h
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdVector.inl
    branches/soc-2013-rigid_body_sim/extern/HACD/hacdVersion.h

Modified: branches/soc-2013-rigid_body_sim/extern/CMakeLists.txt
===================================================================
--- branches/soc-2013-rigid_body_sim/extern/CMakeLists.txt	2013-07-22 07:20:32 UTC (rev 58493)
+++ branches/soc-2013-rigid_body_sim/extern/CMakeLists.txt	2013-07-22 07:20:37 UTC (rev 58494)
@@ -35,6 +35,7 @@
 	if(NOT WITH_SYSTEM_BULLET)
 		add_subdirectory(bullet2)
 	endif()
+	add_subdirectory(HACD)
 endif()
 
 # now only available in a branch

Added: branches/soc-2013-rigid_body_sim/extern/HACD/CMakeLists.txt
===================================================================
--- branches/soc-2013-rigid_body_sim/extern/HACD/CMakeLists.txt	                        (rev 0)
+++ branches/soc-2013-rigid_body_sim/extern/HACD/CMakeLists.txt	2013-07-22 07:20:37 UTC (rev 58494)
@@ -0,0 +1,47 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# 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,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# The Original Code is Copyright (C) 2006, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Sergej Reich
+#
+# ***** END GPL LICENSE BLOCK *****
+
+SET(SRC
+	hacdGraph.cpp
+	hacdHACD.cpp
+	hacdICHull.cpp
+	hacdManifoldMesh.cpp
+	
+	hacdCircularList.h
+	hacdGraph.h
+	hacdHACD.h
+	hacdICHull.h
+	hacdManifoldMesh.h
+	hacdVector.h
+	hacdVersion.h
+	hacdCircularList.inl
+	hacdVector.inl
+)
+
+SET(INC
+	.
+)
+
+blender_add_lib(extern_hacd "${SRC}" "${INC}" "${INC_SYS}")

Added: branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.h
===================================================================
--- branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.h	                        (rev 0)
+++ branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.h	2013-07-22 07:20:37 UTC (rev 58494)
@@ -0,0 +1,80 @@
+/* Copyright (c) 2011 Khaled Mamou (kmamou at gmail dot com)
+ All rights reserved.
+ 
+ 
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+ 
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ 
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ 
+ 3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#pragma once
+#ifndef HACD_CIRCULAR_LIST_H
+#define HACD_CIRCULAR_LIST_H
+#include<stdlib.h>
+#include "hacdVersion.h"
+namespace HACD
+{
+	//!	CircularListElement class.
+	template < typename T > class CircularListElement
+	{
+    public:
+        T &                                     GetData() { return m_data; }
+        const T &                               GetData() const { return m_data; }
+        CircularListElement<T> * &				GetNext() { return m_next; }
+        CircularListElement<T> * &				GetPrev() { return m_prev; }
+        const CircularListElement<T> * &		GetNext() const { return m_next; }
+        const CircularListElement<T> * &		GetPrev() const { return m_prev; }        
+        //!	Constructor
+												CircularListElement(const T & data) {m_data = data;}
+												CircularListElement(void){}
+        //! Destructor
+												~CircularListElement(void){}
+    private:
+        T										m_data;
+        CircularListElement<T> *				m_next; 
+        CircularListElement<T> *				m_prev;
+
+												CircularListElement(const CircularListElement & rhs);
+	};
+    
+    
+	//!	CircularList class.
+	template < typename T > class CircularList
+	{
+	public:
+        CircularListElement<T> *  &             GetHead() { return m_head;}        
+		const CircularListElement<T> *          GetHead() const { return m_head;}
+		bool                                    IsEmpty() const { return (m_size == 0);}
+		size_t                                  GetSize() const { return m_size; }
+		const T &                               GetData() const { return m_head->GetData(); }        
+		T &                                     GetData() { return m_head->GetData();}
+		bool                                    Delete() ;
+        bool                                    Delete(CircularListElement<T> * element);
+		CircularListElement<T> *                Add(const T * data = 0);
+		CircularListElement<T> *                Add(const T & data);
+		bool                                    Next();
+		bool                                    Prev();
+		void									Clear() { while(Delete());};
+        const CircularList&						operator=(const CircularList& rhs);
+		//!	Constructor											
+												CircularList()
+												{ 
+													m_head = 0; 
+													m_size = 0;
+												}
+												CircularList(const CircularList& rhs);
+		//! Destructor
+		virtual								    ~CircularList(void) {Clear();};
+	private:
+		CircularListElement<T> *				m_head;		//!< a pointer to the head of the circular list
+		size_t									m_size;		//!< number of element in the circular list
+        
+	};
+}
+#include "hacdCircularList.inl"
+#endif

Added: branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.inl
===================================================================
--- branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.inl	                        (rev 0)
+++ branches/soc-2013-rigid_body_sim/extern/HACD/hacdCircularList.inl	2013-07-22 07:20:37 UTC (rev 58494)
@@ -0,0 +1,163 @@
+#pragma once
+#ifndef HACD_CIRCULAR_LIST_INL
+#define HACD_CIRCULAR_LIST_INL
+#include<stdlib.h>
+#include "hacdVersion.h"
+namespace HACD
+{
+	template < typename T > 
+	inline bool CircularList<T>::Delete(CircularListElement<T> * element)
+	{
+        if (!element)
+        {
+            return false;
+        }
+		if (m_size > 1)
+		{
+			CircularListElement<T> * next = element->GetNext();
+			CircularListElement<T> * prev = element->GetPrev();
+			delete element;
+			m_size--;
+            if (element == m_head)
+            {
+                m_head = next;
+            }
+			next->GetPrev() = prev;
+			prev->GetNext() = next;
+			return true;
+		}
+		else if (m_size == 1)
+		{
+			delete m_head;
+			m_size--;
+			m_head = 0;
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+    
+	template < typename T > 
+	inline bool CircularList<T>::Delete()
+	{
+		if (m_size > 1)
+		{
+			CircularListElement<T> * next = m_head->GetNext();
+			CircularListElement<T> * prev = m_head->GetPrev();
+			delete m_head;
+			m_size--;
+			m_head = next;
+			next->GetPrev() = prev;
+			prev->GetNext() = next;
+			return true;
+		}
+		else if (m_size == 1)
+		{
+			delete m_head;
+			m_size--;
+			m_head = 0;
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+	template < typename T > 
+	inline CircularListElement<T> * CircularList<T>::Add(const T * data)
+	{
+		if (m_size == 0)
+		{
+			if (data)
+			{
+				m_head = new CircularListElement<T>(*data);
+			}
+			else
+			{
+				m_head = new CircularListElement<T>();
+			}
+			m_head->GetNext() = m_head->GetPrev() = m_head;
+		}
+		else
+		{
+			CircularListElement<T> * next = m_head->GetNext();
+			CircularListElement<T> * element = m_head;
+			if (data)
+			{
+				m_head = new CircularListElement<T>(*data);
+			}
+			else
+			{
+				m_head = new CircularListElement<T>;
+			}
+			m_head->GetNext() = next;
+			m_head->GetPrev() = element;
+			element->GetNext() = m_head;
+			next->GetPrev() = m_head;
+		}
+		m_size++;
+		return m_head;
+	}
+	template < typename T > 
+	inline CircularListElement<T> * CircularList<T>::Add(const T & data)
+	{
+		const T * pData = &data;
+		return Add(pData);
+	}
+	template < typename T > 
+	inline bool CircularList<T>::Next()
+	{
+		if (m_size == 0)
+		{
+			return false;
+		}
+		m_head = m_head->GetNext();
+		return true;
+	}
+	template < typename T > 
+	inline bool CircularList<T>::Prev()
+	{
+		if (m_size == 0)
+		{
+			return false;
+		}
+		m_head = m_head->GetPrev();
+		return true;
+	}
+	template < typename T > 
+	inline CircularList<T>::CircularList(const CircularList& rhs)
+	{
+		if (rhs.m_size > 0)
+		{
+			CircularListElement<T> * current = rhs.m_head;
+			do
+			{
+				current = current->GetNext();
+				Add(current->GetData());
+			}
+			while ( current != rhs.m_head );
+		}
+	}
+    template < typename T > 
+	inline const CircularList<T>& CircularList<T>::operator=(const CircularList& rhs)
+	{
+        if (&rhs != this)
+        {
+            Clear();
+            if (rhs.m_size > 0)
+            {
+                CircularListElement<T> * current = rhs.m_head;
+                do
+                {
+                    current = current->GetNext();
+                    Add(current->GetData());
+                }
+                while ( current != rhs.m_head );
+            }
+        }
+        return (*this);
+	}
+}
+#endif

Added: branches/soc-2013-rigid_body_sim/extern/HACD/hacdGraph.cpp

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list