This file is indexed.

/usr/lib/python2.7/dist-packages/woo/gts/pygts.py is in python-woo 1.0+dfsg1-1+b4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# pygts - python package for the manipulation of triangulated surfaces
#
#   Copyright (C) 2009 Thomas J. Duck
#   All rights reserved.
#
#   Thomas J. Duck <tom.duck@dal.ca>
#   Department of Physics and Atmospheric Science,
#   Dalhousie University, Halifax, Nova Scotia, Canada, B3H 3J5
#
# NOTICE
#
#   This library is free software; you can redistribute it and/or
#   modify it under the terms of the GNU Library General Public
#   License as published by the Free Software Foundation; either
#   version 2 of the License, or (at your option) any later version.
#
#   This library 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
#   Library General Public License for more details.
#
#   You should have received a copy of the GNU Library General Public
#   License along with this library; if not, write to the
#   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
#   Boston, MA 02111-1307, USA.


# added by eudoxos 29.1.2011, fixes https://bugs.launchpad.net/woo/+bug/668329
## force decimal separator to be always . (decimal point), not , (decimal comma) -- unless LC_ALL is set, then we are stuck
## this was reason for bogus gts imports
## adding to woo main does not solve the problem for some reason
import locale
locale.setlocale(locale.LC_NUMERIC,'C')

## PY3K compatibility
from .._gts import *

def get_coords_and_face_indices(s,unzip=False):
    """Returns the coordinates and face indices of Surface s.

    If unzip is True then four tuples are returned.  The first three 
    are the x, y, and z coordinates for each Vertex on the Surface.  
    The last is a list of tuples, one for each Face on the Surface, 
    containing 3 indices linking the Face Vertices to the coordinate 
    lists.

    If unzip is False then the coordinates are given in a single list 
    of 3-tuples.
    """
    vertices = s.vertices()
    coords = [v.coords() for v in vertices]
    face_indices = s.face_indices(vertices)

    if unzip:
        x,y,z = zip(*coords)
        return x,y,z,face_indices
    else:
        return vertices, coords


def cube():
    """Returns a cube of side length 2 centered at the origin."""
    
    #             
    #       v8 +------+ v5
    #         /      /|
    #        /    v1/ |
    #    v4 +------+  |
    #       |      |  + v6
    #       |(v7)  | /
    #       |      |/
    #    v3 +------+ v2
    #

    v1,v2,v3,v4=Vertex(1,1,1),Vertex(1,1,-1),Vertex(1,-1,-1),Vertex(1,-1,1)
    v5,v6,v7,v8=Vertex(-1,1,1),Vertex(-1,1,-1),Vertex(-1,-1,-1),Vertex(-1,-1,1)

    e12,e23,e34,e14 = Edge(v1,v2), Edge(v2,v3), Edge(v3,v4), Edge(v4,v1)
    e56,e67,e78,e58 = Edge(v5,v6), Edge(v6,v7), Edge(v7,v8), Edge(v8,v5)
    e15,e26,e37,e48 = Edge(v1,v5), Edge(v2,v6), Edge(v3,v7), Edge(v4,v8)
    e13,e16,e18 = Edge(v1,v3), Edge(v1,v6), Edge(v1,v8)
    e27,e47,e57 = Edge(v7,v2), Edge(v7,v4), Edge(v7,v5)

    faces = [ Face(e12,e23,e13), Face(e13,e34,e14),
              Face(e12,e26,e16), Face(e15,e56,e16),
              Face(e15,e58,e18), Face(e14,e48,e18),
              Face(e58,e78,e57), Face(e56,e67,e57),
              Face(e26,e67,e27), Face(e37,e23,e27),
              Face(e37,e47,e34), Face(e78,e48,e47) ]

    faces[0].revert()  # Set the orientation of the first face

    s = Surface()

    for face in faces:
        if not face.is_compatible(s):
            face.revert()
        s.add(face)

    return s


def tetrahedron():
    """Returns a tetrahedron of side length 2*sqrt(2) centered at origin.

    The edges of the tetrahedron are perpendicular to the cardinal
    directions.
    """

    #       v4
    #        +
    #        | \ e6
    #  e5   '|e4 \ 
    #   v1 . +-e3-+ v3
    #       /   . 
    #     ./e1. e2
    #     / .
    #    +
    #   v2


    # Create vertices
    v1 = Vertex(1,1,1)
    v2 = Vertex(-1,-1,1)
    v3 = Vertex(-1,1,-1)
    v4 = Vertex(1,-1,-1)

    # Create edges
    e1 = Edge(v1,v2)
    e2 = Edge(v2,v3)
    e3 = Edge(v3,v1)
    e4 = Edge(v1,v4)
    e5 = Edge(v4,v2)
    e6 = Edge(v4,v3)

    # Create faces
    f1 = Face(e1,e2,e3) # Bottom face
    f2 = Face(e1,e4,e5) # Left face
    f3 = Face(e2,e5,e6) # Right face
    f4 = Face(e3,e4,e6) # Back face

    # Set orientation of first face
    f1.revert()

    # Assemble surface
    s = Surface()
    for face in [f1,f2,f3,f4]:
        if not face.is_compatible(s):
            face.revert()
        s.add(face)

    return s