Changeset 5992:3fb0eb667e02
- Timestamp:
- 08/28/07 23:59:26 (6 years ago)
- Branch:
- default
- Location:
- sage/plot/plot3d
- Files:
-
- 5 edited
-
index_face_set.pxd (modified) (1 diff)
-
index_face_set.pyx (modified) (3 diffs)
-
parametric_surface.pyx (modified) (3 diffs)
-
point_c.pxi (modified) (1 diff)
-
shapes.pyx (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
sage/plot/plot3d/index_face_set.pxd
r5987 r5992 14 14 cdef face_c* _faces 15 15 16 16 17 cdef class FaceIter: 17 18 cdef Py_ssize_t i 18 19 cdef IndexFaceSet set 19 20 21 cdef class EdgeIter: 22 cdef Py_ssize_t i, j 23 cdef object seen 24 cdef IndexFaceSet set 20 25 21 26 cdef class VertexIter: -
sage/plot/plot3d/index_face_set.pyx
r5991 r5992 37 37 include "../../ext/python_list.pxi" 38 38 include "../../ext/python_string.pxi" 39 40 include "point_c.pxi" 39 41 40 42 … … 239 241 cdef Py_ssize_t i, j 240 242 return [[points[self._faces[i].vertices[j]] for j from 0 <= j < self._faces[i].n] for i from 0 <= i < self.fcount] 241 243 244 def edges(self): 245 return EdgeIter(self) 246 247 def edge_list(self): 248 # For consistancy 249 return list(self.edges()) 250 242 251 def vertices(self): 243 252 """ … … 397 406 self.i += 1 398 407 return face 408 409 cdef class EdgeIter: 410 def __init__(self, face_set): 411 self.set = face_set 412 if not self.set.enclosed: 413 raise TypeError, "Must be closed to use the simple iterator." 414 self.i = 0 415 self.j = 0 416 self.seen = {} 417 def __iter__(self): 418 return self 419 def __next__(self): 420 cdef point_c P, Q 421 cdef face_c face = self.set._faces[self.i] 422 while self.i < self.set.fcount: 423 if self.j == face.n: 424 self.i += 1 425 self.j = 0 426 if self.i < self.set.fcount: 427 face = self.set._faces[self.i] 428 else: 429 if self.j == 0: 430 P = self.set.vs[face.vertices[face.n-1]] 431 else: 432 P = self.set.vs[face.vertices[self.j-1]] 433 Q = self.set.vs[face.vertices[self.j]] 434 self.j += 1 435 if self.set.enclosed: # Every edge appears exactly twice, once in each orientation. 436 if point_c_cmp(P, Q) < 0: 437 return ((P.x, P.y, P.z), (Q.x, Q.y, Q.z)) 438 else: 439 if point_c_cmp(P, Q) > 0: 440 P,Q = Q,P 441 edge = ((P.x, P.y, P.z), (Q.x, Q.y, Q.z)) 442 if not edge in self.seen: 443 self.seen[edge] = edge 444 return edge 445 raise StopIteration 446 399 447 400 448 cdef class VertexIter: -
sage/plot/plot3d/parametric_surface.pyx
r5991 r5992 59 59 60 60 cdef inline bint smash_edge(point_c* vs, face_c* f, int a, int b): 61 if point_c_ cmp(vs[f.vertices[a]], vs[f.vertices[b]]):61 if point_c_eq(vs[f.vertices[a]], vs[f.vertices[b]]): 62 62 f.vertices[b] = f.vertices[a] 63 63 f.n = 3 … … 185 185 first = &self._faces[j] 186 186 last = &self._faces[(n-1)*m+j] 187 if point_c_ cmp(self.vs[first.vertices[0]], self.vs[last.vertices[3]]):187 if point_c_eq(self.vs[first.vertices[0]], self.vs[last.vertices[3]]): 188 188 last.vertices[3] = first.vertices[0] 189 189 elif first.vertices[0] != first.vertices[1] or last.vertices[3] != last.vertices[2]: 190 190 enclosed = 0 191 if point_c_ cmp(self.vs[first.vertices[1]], self.vs[last.vertices[2]]):191 if point_c_eq(self.vs[first.vertices[1]], self.vs[last.vertices[2]]): 192 192 last.vertices[2] = first.vertices[1] 193 193 elif first.vertices[0] != first.vertices[1] or last.vertices[3] != last.vertices[2]: … … 197 197 first = &self._faces[i*m] 198 198 last = &self._faces[i*m + m-1] 199 if point_c_ cmp(self.vs[first.vertices[0]], self.vs[last.vertices[1]]):199 if point_c_eq(self.vs[first.vertices[0]], self.vs[last.vertices[1]]): 200 200 last.vertices[1] = first.vertices[0] 201 201 elif first.vertices[0] != first.vertices[3] or last.vertices[1] != last.vertices[2]: 202 202 enclosed = 0 203 if point_c_ cmp(self.vs[first.vertices[3]], self.vs[last.vertices[2]]):203 if point_c_eq(self.vs[first.vertices[3]], self.vs[last.vertices[2]]): 204 204 last.vertices[2] = first.vertices[3] 205 205 elif first.vertices[0] != first.vertices[3] or last.vertices[1] != last.vertices[2]: -
sage/plot/plot3d/point_c.pxi
r5991 r5992 24 24 res.x, res.y, res.z = P[0], P[1], P[2] 25 25 26 cdef inline bint point_c_ cmp(point_c P, point_c Q):26 cdef inline bint point_c_eq(point_c P, point_c Q): 27 27 return P.x == Q.x and P.y == Q.y and P.z == Q.z 28 29 cdef inline int point_c_cmp(point_c P, point_c Q): 30 """ 31 Lexographic order 32 """ 33 if P.x == Q.x: 34 if P.y == Q.y: 35 if P.z == Q.z: 36 return 0 37 elif P.z < Q.z: 38 return -1 39 else: 40 return 1 41 elif P.y < Q.y: 42 return -1 43 else: 44 return 1 45 elif P.x < Q.x: 46 return -1 47 else: 48 return 1 49 28 50 29 51 cdef inline void point_c_add(point_c* res, point_c P, point_c Q): -
sage/plot/plot3d/shapes.pyx
r5991 r5992 191 191 axis = zaxis.cross_product(diff) 192 192 if axis == 0: 193 return cyl 193 return cyl.translate(start) 194 194 else: 195 195 theta = -acos(diff[2]/height)
Note: See TracChangeset
for help on using the changeset viewer.
