1
1
2
2
import sys
3
+ import os
3
4
import vtk
4
5
import igl
5
6
from vtk .util import numpy_support
6
7
import numpy as np
7
8
import math
9
+ import random
8
10
from scipy .sparse import csr_matrix , coo_matrix
9
11
10
12
13
+ vtk_out = vtk .vtkOutputWindow ()
14
+ vtk_out .SetInstance (vtk_out )
15
+
16
+
17
+ #Make Shader
18
+
19
+
20
+ rootPath = os .path .dirname ( os .path .abspath ( __file__ ))
21
+ with open ( os .path .join ( rootPath , "shaders" , "normalmap.glsl" ), 'r' ) as shaderFile :
22
+ FragmentShaderText = shaderFile .read ()
23
+
24
+ with open ( os .path .join ( rootPath , "shaders" , "vertexShader.glsl" ), 'r' ) as shaderFile :
25
+ VertexShaderText = shaderFile .read ()
26
+
27
+
11
28
def tutte (V , F ):
12
29
13
30
#Get Boundary and Edge
14
31
L = igl .boundary_loop (F )
15
- E = igl .edges (F )
16
32
sizeL = len (L )
17
33
18
34
@@ -24,6 +40,8 @@ def tutte(V, F):
24
40
25
41
26
42
#Iterate over edge, build some kind of sparse matrix,,
43
+ E = igl .edges (F )
44
+
27
45
I = []
28
46
J = []
29
47
Val = []
@@ -67,20 +85,43 @@ def tutte(V, F):
67
85
# print(A.shape)
68
86
U = igl .min_quad_with_fixed (A , B_flat , b , bc , Aeq , Beq , False )
69
87
70
- return U [1 ]
88
+ return U [1 ], bc
71
89
72
90
73
91
def MakeActor (polydata ):
74
- mapper = vtk .vtkPolyDataMapper ()
92
+ mapper = vtk .vtkOpenGLPolyDataMapper ()
75
93
mapper .SetInputData (polydata )
76
94
95
+ # mapper.SetVertexShaderCode(VertexShaderText)
96
+ # mapper.SetFragmentShaderCode(FragmentShaderText)
97
+ polydata .GetPointData ().RemoveArray ("Normals" )
98
+
77
99
78
100
actor = vtk .vtkActor ()
79
101
actor .SetMapper (mapper )
80
102
81
103
return actor
82
104
83
105
106
+ def MakeBoundaryActor (boundary ):
107
+ print (boundary .shape )
108
+ boundary3D = np .concatenate ( [boundary , np .zeros ((len (boundary ),1 ) )], axis = 1 )
109
+ print (boundary3D )
110
+
111
+ polydata = vtk .vtkPolyData ()
112
+ points = vtk .vtkPoints ()
113
+ points .SetData ( numpy_support .numpy_to_vtk (boundary3D ) )
114
+ polydata .SetPoints (points )
115
+
116
+ mapper = vtk .vtkOpenGLSphereMapper ()
117
+ mapper .SetRadius (.005 )
118
+ mapper .SetInputData (polydata )
119
+
120
+ actor = vtk .vtkActor ()
121
+ actor .SetMapper (mapper )
122
+
123
+ return actor
124
+
84
125
85
126
if __name__ == "__main__" :
86
127
iren = vtk .vtkRenderWindowInteractor ()
@@ -103,26 +144,28 @@ def MakeActor(polydata):
103
144
reader .Update ()
104
145
polydata = reader .GetOutput ()
105
146
actor = MakeActor (polydata )
147
+ actor .SetScale (.01 , .01 , .01 )
106
148
ren .AddActor (actor )
107
- # polydata.GetPointData().RemoveArray("Normals")
108
-
149
+
109
150
110
151
# Get V and F from polydatqa
111
152
V = numpy_support .vtk_to_numpy ( polydata .GetPoints ().GetData ())
112
153
F = numpy_support .vtk_to_numpy ( polydata .GetPolys ().GetData () )
113
154
F = F .reshape ( int (len (F )/ 4 ), 4 )
114
155
F = F [:, 1 :]
115
156
116
- U_tutte = tutte (V , F )
157
+ U_tutte , boundary = tutte (V , F )
117
158
V_tutte = np .concatenate ((U_tutte , np .zeros ( (len (U_tutte ),1 ) ) ), axis = 1 ) #Make three-dimensional
118
159
160
+ boundaryActor = MakeBoundaryActor (boundary )
161
+ ren .AddActor (boundaryActor )
119
162
120
163
tutte_points = numpy_support .numpy_to_vtk ( V_tutte )
121
164
tuttePoly = vtk .vtkPolyData ()
122
165
tuttePoly .DeepCopy (polydata )
123
166
tuttePoly .GetPoints ().SetData (tutte_points )
124
167
tutteActor = MakeActor (tuttePoly )
125
- tutteActor .SetScale ( 100 , 100 , 100 )
168
+ # tutteActor.SetScale( 100, 100, 100 )
126
169
127
170
ren .AddActor (tutteActor )
128
171
0 commit comments