Browse Source

fixed operator overloading in MatrixXd, added UI for gradient

Former-commit-id: e125a087779bd33550201768a8203db98b46d811
Daniele Panozzo 9 years ago
parent
commit
7625f322fb
3 changed files with 26 additions and 25 deletions
  1. 22 24
      python/204_Gradient.py
  2. 1 1
      python/py_igl/py_barycenter.cpp
  3. 3 0
      python/py_vector.cpp

+ 22 - 24
python/204_Gradient.py

@@ -1,4 +1,5 @@
 import igl
+from iglhelpers import *
 
 V = igl.eigen.MatrixXd()
 F = igl.eigen.MatrixXi()
@@ -15,39 +16,36 @@ U = U.col(0)
 G = igl.eigen.SparseMatrixd()
 igl.grad(V,F,G)
 
-
 # Compute gradient of U
 GU = (G*U).MapMatrix(F.rows(),3)
 
 # Compute gradient magnitude
 GU_mag = GU.rowwiseNorm()
 
-
-  # igl::viewer::Viewer viewer;
-  # viewer.data.set_mesh(V, F);
+viewer = igl.viewer.Viewer()
+viewer.data.set_mesh(V, F)
 
 # Compute pseudocolor for original function
 C = igl.eigen.MatrixXd()
 
 igl.jet(U,True,C)
 
-#
-# # Or for gradient magnitude
-# # igl.jet(GU_mag,True,C)
-#
-#   # viewer.data.set_colors(C);
-#
-# # Average edge length divided by average gradient (for scaling)
-# max_size = igl.avg_edge_length(V,F) / GU_mag.mean()
-#
-# # Draw a black segment in direction of gradient at face barycenters
-# BC = igl.eigen.MatrixXd()
-# igl.barycenter(V,F,BC)
-
-  # const RowVector3d black(0,0,0);
-  # viewer.data.add_edges(BC,BC+max_size*GU, black);
-  #
-  # // Hide wireframe
-  # viewer.core.show_lines = false;
-  #
-  # viewer.launch();
+# Or for gradient magnitude
+# igl.jet(GU_mag,True,C)
+
+viewer.data.set_colors(C);
+
+# Average edge length divided by average gradient (for scaling)
+max_size = igl.avg_edge_length(V,F) / GU_mag.mean()
+
+# Draw a black segment in direction of gradient at face barycenters
+BC = igl.eigen.MatrixXd()
+igl.barycenter(V,F,BC)
+
+black = p2e(np.array([[0.0,0.0,0.0]]))
+viewer.data.add_edges(BC,BC+max_size*GU, black)
+
+# Hide wireframe
+viewer.core.show_lines = False
+
+viewer.launch()

+ 1 - 1
python/py_igl/py_barycenter.cpp

@@ -2,7 +2,7 @@ m.def("barycenter", []
 (
   const Eigen::MatrixXd& V,
   const Eigen::MatrixXi& F,
-  Eigen::MatrixXd BC
+  Eigen::MatrixXd& BC
 )
 {
   return igl::barycenter(V,F,BC);

+ 3 - 0
python/py_vector.cpp

@@ -71,6 +71,9 @@ py::class_<Type> bind_eigen_2(py::module &m, const char *name,
         .def("resizeLike", [](Type &m, const Type &m2) { m.resizeLike(m2); })
         .def("conservativeResize", [](Type &m, size_t s0, size_t s1) { m.conservativeResize(s0, s1); })
 
+
+        .def("mean", [](const Type &m) {return m.mean();})
+
         /* Component-wise operations */
         .def("cwiseAbs", &Type::cwiseAbs)
         .def("cwiseAbs2", &Type::cwiseAbs2)