Commit: ba5577eea95555d62931462ed2e8de4a7e541213
Author: Martin Felke
Date:   Sun Apr 7 20:38:09 2019 +0200
Branches: sculpt-mode-features
https://developer.blender.org/rBba5577eea95555d62931462ed2e8de4a7e541213

first attempt for CSG operations via voxels, but not functional yet

===================================================================

M       intern/openvdb/CMakeLists.txt
M       intern/openvdb/intern/openvdb_level_set.cc
M       intern/openvdb/intern/openvdb_level_set.h
A       intern/openvdb/intern/openvdb_transform.cc
A       intern/openvdb/intern/openvdb_transform.h
M       intern/openvdb/openvdb_capi.cc
M       intern/openvdb/openvdb_capi.h
M       release/scripts/startup/bl_ui/properties_data_modifier.py
M       source/blender/editors/object/object_edit.c
M       source/blender/makesdna/DNA_modifier_types.h
M       source/blender/makesrna/intern/rna_modifier.c
M       source/blender/modifiers/intern/MOD_remesh.c

===================================================================

diff --git a/intern/openvdb/CMakeLists.txt b/intern/openvdb/CMakeLists.txt
index c231099bb03..b80387de41d 100644
--- a/intern/openvdb/CMakeLists.txt
+++ b/intern/openvdb/CMakeLists.txt
@@ -55,6 +55,7 @@ if(WITH_OPENVDB)
                intern/openvdb_reader.cc
                intern/openvdb_writer.cc
                intern/openvdb_level_set.cc
+               intern/openvdb_transform.cc
                openvdb_capi.cc
                openvdb_util.cc
 
@@ -62,6 +63,7 @@ if(WITH_OPENVDB)
                intern/openvdb_reader.h
                intern/openvdb_writer.h
                intern/openvdb_level_set.h
+               intern/openvdb_transform.h
                openvdb_util.h
        )
 
diff --git a/intern/openvdb/intern/openvdb_level_set.cc 
b/intern/openvdb/intern/openvdb_level_set.cc
index 77dc76dd785..c6eb8e6f122 100644
--- a/intern/openvdb/intern/openvdb_level_set.cc
+++ b/intern/openvdb/intern/openvdb_level_set.cc
@@ -33,15 +33,11 @@ OpenVDBLevelSet::~OpenVDBLevelSet()
 {}
 
 void OpenVDBLevelSet::OpenVDB_mesh_to_level_set(const float *vertices, const 
unsigned int *faces, const unsigned int totvertices,
-                                                                  const 
unsigned int totfaces, const double voxel_size)
+                                                                  const 
unsigned int totfaces, openvdb::math::Transform::Ptr xform)
 {
        std::vector<openvdb::Vec3s> points;
        std::vector<openvdb::Vec3I > triangles;
        std::vector<openvdb::Vec4I > quads;
-       std::vector<openvdb::Vec3s> out_points;
-       std::vector<openvdb::Vec4I > out_quads;
-       std::vector<openvdb::Vec3I > out_tris;
-       const openvdb::math::Transform xform;
 
        for(unsigned int i = 0; i < totvertices; i++) {
                openvdb::Vec3s v(vertices[i * 3 ], vertices[i * 3 + 1], 
vertices[i * 3 + 2]);
@@ -53,8 +49,7 @@ void OpenVDBLevelSet::OpenVDB_mesh_to_level_set(const float 
*vertices, const uns
                triangles.push_back(f);
        }
 
-       openvdb::math::Transform::Ptr transform = 
openvdb::math::Transform::createLinearTransform(voxel_size);
-       this->grid = 
openvdb::tools::meshToLevelSet<openvdb::FloatGrid>(*transform, points, 
triangles, quads, 1);
+       this->grid = openvdb::tools::meshToLevelSet<openvdb::FloatGrid>(*xform, 
points, triangles, quads, 1);
 }
 
 void OpenVDBLevelSet::OpenVDB_volume_to_mesh(OpenVDBVolumeToMeshData *mesh,    
const double isovalue, const double adaptivity, const bool 
relax_disoriented_triangles)
@@ -141,9 +136,9 @@ void 
OpenVDBLevelSet::OpenVDB_CSG_operation(openvdb::FloatGrid::Ptr gridOut, ope
        }
 
        gridOut = gridA->deepCopy();
-       gridA = gridA_copy ->deepCopy();
-       gridB = gridB_copy ->deepCopy();
-};
+       gridA = gridA_copy->deepCopy();
+       gridB = gridB_copy->deepCopy();
+}
 
 openvdb::FloatGrid::Ptr OpenVDBLevelSet::OpenVDB_level_set_get_grid(){
        return this->grid;
@@ -152,83 +147,3 @@ openvdb::FloatGrid::Ptr 
OpenVDBLevelSet::OpenVDB_level_set_get_grid(){
 void OpenVDBLevelSet::OpenVDB_level_set_set_grid(openvdb::FloatGrid::Ptr grid){
        this->grid = grid;
 }
-
-void OpenVDB_level_set_remesh(struct OpenVDBRemeshData *rmd){
-
-       std::vector<openvdb::Vec3s> points;
-       std::vector<openvdb::Vec3I > triangles;
-       std::vector<openvdb::Vec4I > quads;
-       std::vector<openvdb::Vec3s> out_points;
-       std::vector<openvdb::Vec4I > out_quads;
-       std::vector<openvdb::Vec3I > out_tris;
-       const openvdb::math::Transform xform;
-
-       for(int i = 0; i < rmd->totverts; i++) {
-               openvdb::Vec3s v(rmd->verts[i * 3 ], rmd->verts[i * 3 + 1], 
rmd->verts[i * 3 + 2]);
-               points.push_back(v);
-       }
-
-       for(int i = 0; i < rmd->totfaces; i++) {
-               openvdb::Vec3I f(rmd->faces[i * 3 ], rmd->faces[i * 3 + 1], 
rmd->faces[i * 3 + 2]);
-               triangles.push_back(f);
-       }
-
-       openvdb::initialize();
-       openvdb::math::Transform::Ptr transform = 
openvdb::math::Transform::createLinearTransform((double)rmd->voxel_size);
-       const openvdb::FloatGrid::Ptr grid = 
openvdb::tools::meshToLevelSet<openvdb::FloatGrid>(*transform, points, 
triangles, quads, 1);
-
-       if (rmd->filter_type != FILTER_NONE) {
-               openvdb::tools::LevelSetFilter<openvdb::FloatGrid> 
filter(*grid);
-               
filter.setSpatialScheme((openvdb::math::BiasedGradientScheme)rmd->filter_bias);
-
-               switch (rmd->filter_type) {
-                       case FILTER_GAUSSIAN:
-                               filter.gaussian(rmd->filter_width);
-                       break;
-                       case FILTER_MEDIAN:
-                               filter.median(rmd->filter_width);
-                       break;
-                       case FILTER_MEAN:
-                               filter.mean(rmd->filter_width);
-                       break;
-                       case FILTER_MEAN_CURVATURE:
-                               filter.meanCurvature();
-                       break;
-                       case FILTER_LAPLACIAN:
-                               filter.laplacian();
-                       break;
-               }
-       }
-
-       openvdb::tools::volumeToMesh<openvdb::FloatGrid>(*grid, out_points, 
out_tris, out_quads, (double)rmd->isovalue,
-                                                        
(double)rmd->adaptivity, (bool)rmd->relax_disoriented_triangles);
-       rmd->out_verts = (float *)MEM_malloc_arrayN(out_points.size(), 3 * 
sizeof (float), "openvdb remesher out verts");
-       rmd->out_faces = (unsigned int*)MEM_malloc_arrayN(out_quads.size(), 4 * 
sizeof (unsigned int), "openvdb remesh out quads");
-       rmd->out_tris = NULL;
-       if (out_tris.size() > 0) {
-               rmd->out_tris = (unsigned 
int*)MEM_malloc_arrayN(out_tris.size(), 3 * sizeof (unsigned int), "openvdb 
remesh out tris");
-       }
-
-       rmd->out_totverts = out_points.size();
-       rmd->out_tottris = out_tris.size();
-       rmd->out_totfaces = out_quads.size();
-
-       for(int i = 0; i < out_points.size(); i++) {
-               rmd->out_verts[i * 3] = out_points[i].x();
-               rmd->out_verts[i * 3 + 1] = out_points[i].y();
-               rmd->out_verts[i * 3 + 2] = out_points[i].z();
-       }
-
-       for(int i = 0; i < out_quads.size(); i++) {
-               rmd->out_faces[i * 4] = out_quads[i].x();
-               rmd->out_faces[i * 4 + 1] = out_quads[i].y();
-               rmd->out_faces[i * 4 + 2] = out_quads[i].z();
-               rmd->out_faces[i * 4 + 3] = out_quads[i].w();
-       }
-
-       for(int i = 0; i < rmd->out_tottris; i++) {
-               rmd->out_tris[i * 3] = out_tris[i].x();
-               rmd->out_tris[i * 3 + 1] = out_tris[i].y();
-               rmd->out_tris[i * 3 + 2] = out_tris[i].z();
-       }
-}
diff --git a/intern/openvdb/intern/openvdb_level_set.h 
b/intern/openvdb/intern/openvdb_level_set.h
index 20a346334a6..64e717484b8 100644
--- a/intern/openvdb/intern/openvdb_level_set.h
+++ b/intern/openvdb/intern/openvdb_level_set.h
@@ -25,11 +25,10 @@
 #include <openvdb/tools/MeshToVolume.h>
 #include <openvdb/tools/VolumeToMesh.h>
 #include <openvdb/tools/LevelSetFilter.h>
+#include <openvdb/tools/GridTransformer.h>
 #include "openvdb_capi.h"
 
 
-void OpenVDB_level_set_remesh(struct OpenVDBRemeshData *rmd);
-
 struct OpenVDBLevelSet {
 private:
        openvdb::FloatGrid::Ptr grid;
@@ -42,6 +41,9 @@ public:
        void OpenVDB_mesh_to_level_set(const float *vertices, const unsigned 
int *faces, const unsigned int totvertices,
                                                                   const 
unsigned int totfaces, const double voxel_size);
 
+       void OpenVDB_mesh_to_level_set(const float *vertices, const unsigned 
int *faces, const unsigned int totvertices,
+                                                                  const 
unsigned int totfaces, openvdb::math::Transform::Ptr transform);
+
        void OpenVDB_volume_to_mesh(float *vertices, unsigned int *quads, 
unsigned int *triangles,
                                                        unsigned int 
*totvertices, unsigned int *totfaces, unsigned int *tottriangles,
                                                        const double isovalue, 
const double adaptivity, const bool relax_disoriented_triangles);
diff --git a/intern/openvdb/intern/openvdb_transform.cc 
b/intern/openvdb/intern/openvdb_transform.cc
new file mode 100644
index 00000000000..76b9343b00e
--- /dev/null
+++ b/intern/openvdb/intern/openvdb_transform.cc
@@ -0,0 +1,41 @@
+/*
+ * 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) 2015 Blender Foundation.
+ * All rights reserved.
+ */
+
+#include "openvdb_transform.h"
+
+OpenVDBTransform::OpenVDBTransform()
+{}
+
+OpenVDBTransform::~OpenVDBTransform()
+{}
+
+void OpenVDBTransform::OpenVDB_transform_create_linear_transform(double 
voxel_size)
+{
+       this->transform = 
openvdb::math::Transform::createLinearTransform(voxel_size);
+}
+
+openvdb::math::Transform::Ptr 
OpenVDBTransform::OpenVDB_transform_get_transform()
+{
+       return this->transform;
+}
+
+void 
OpenVDBTransform::OpenVDB_transform_set_transform(openvdb::math::Transform::Ptr 
transform)
+{
+       this->transform = transform;
+}
diff --git a/intern/openvdb/intern/openvdb_transform.h 
b/intern/openvdb/intern/openvdb_transform.h
new file mode 100644
index 00000000000..f0b92775310
--- /dev/null
+++ b/intern/openvdb/intern/openvdb_transform.h
@@ -0,0 +1,38 @@
+/*
+ * 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) 2015 Blender Foundation.
+ * All rights reserved.
+ */
+
+ #ifndef OPENVDB_TRANSFORM_H
+ #define OPENVDB_TRANSFORM_H
+ 
+#include <openvdb/openvdb.h>
+
+struct OpenVDBTransform {
+private:
+       openvdb::math::Transform::Ptr transform;
+
+public:
+       OpenVDBTransform();
+       ~OpenVDBTransform();
+       void OpenVDB_transform_create_linear_transform(double voxel_size);
+       openvdb::math::Transform::Ptr OpenVDB_transform_get_transform();
+       void OpenVDB_transform_set_transform(openvdb::math::Transform::Ptr 
transform);
+};
+
+
+ #endif // OPENVDB_TRANSFORM_H
diff --git a/intern/openvdb/openvdb_capi.cc b/intern/openvdb/openvdb_capi.cc
index 5fa18eaf9dd..12d7ec88

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to