~ubuntu-branches/ubuntu/utopic/blender/utopic-proposed

« back to all changes in this revision

Viewing changes to release/scripts/modules/bpy_types.py

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2012-04-28 12:11:12 UTC
  • mto: (14.1.6 experimental) (1.5.1)
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: package-import@ubuntu.com-20120428121112-2zi0vp8b6vejda8i
Tags: upstream-2.63
ImportĀ upstreamĀ versionĀ 2.63

Show diffs side-by-side

added added

removed removed

Lines of Context:
366
366
        :type edges: iterable object
367
367
        :arg faces:
368
368
 
369
 
           iterator of faces, each faces contains three or four indices to
 
369
           iterator of faces, each faces contains three or more indices to
370
370
           the *vertices* argument. eg: [(5, 6, 8, 9), (1, 2, 3), ...]
371
371
 
372
372
        :type faces: iterable object
373
373
        """
374
374
        self.vertices.add(len(vertices))
375
375
        self.edges.add(len(edges))
376
 
        self.faces.add(len(faces))
 
376
        self.loops.add(sum((len(f) for f in faces)))
 
377
        self.polygons.add(len(faces))
377
378
 
378
379
        vertices_flat = [f for v in vertices for f in v]
379
380
        self.vertices.foreach_set("co", vertices_flat)
383
384
        self.edges.foreach_set("vertices", edges_flat)
384
385
        del edges_flat
385
386
 
386
 
        def treat_face(f):
387
 
            if len(f) == 3:
388
 
                if f[2] == 0:
389
 
                    return f[2], f[0], f[1], 0
390
 
                else:
391
 
                    return f[0], f[1], f[2], 0
392
 
            elif f[2] == 0 or f[3] == 0:
393
 
                return f[2], f[3], f[0], f[1]
394
 
            return f
 
387
        # this is different in bmesh
 
388
        loop_index = 0
 
389
        for i, p in enumerate(self.polygons):
 
390
            f = faces[i]
 
391
            loop_len = len(f)
 
392
            p.loop_start = loop_index
 
393
            p.loop_total = loop_len
 
394
            p.vertices = f
 
395
            loop_index += loop_len
395
396
 
396
 
        faces_flat = [v for f in faces for v in treat_face(f)]
397
 
        self.faces.foreach_set("vertices_raw", faces_flat)
398
 
        del faces_flat
 
397
        # if no edges - calculae them
 
398
        if faces and (not edges):
 
399
            self.update(calc_edges=True)
399
400
 
400
401
    @property
401
402
    def edge_keys(self):
410
411
        return ord_ind(*tuple(self.vertices))
411
412
 
412
413
 
413
 
class MeshFace(StructRNA):
 
414
class MeshTessFace(StructRNA):
414
415
    __slots__ = ()
415
416
 
416
417
    @property
446
447
                    )
447
448
 
448
449
 
 
450
class MeshPolygon(StructRNA):
 
451
    __slots__ = ()
 
452
 
 
453
    @property
 
454
    def edge_keys(self):
 
455
        verts = self.vertices[:]
 
456
        vlen = len(self.vertices)
 
457
        return [ord_ind(verts[i], verts[(i + 1) % vlen]) for i in range(vlen)]
 
458
 
 
459
    @property
 
460
    def loop_indices(self):
 
461
        start = self.loop_start
 
462
        end = start + self.loop_total
 
463
        return range(start, end)
 
464
 
 
465
 
449
466
class Text(bpy_types.ID):
450
467
    __slots__ = ()
451
468
 
654
671
class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
655
672
    __slots__ = ()
656
673
 
657
 
    def path_menu(self, searchpaths, operator, props_default={}):
 
674
    def path_menu(self, searchpaths, operator,
 
675
                  props_default={}, filter_ext=None):
 
676
 
658
677
        layout = self.layout
659
678
        # hard coded to set the operators 'filepath' to the filename.
660
679
 
670
689
        files = []
671
690
        for directory in searchpaths:
672
691
            files.extend([(f, os.path.join(directory, f))
673
 
                           for f in os.listdir(directory)])
 
692
                           for f in os.listdir(directory)
 
693
                           if (not f.startswith("."))
 
694
                           if ((filter_ext is None) or
 
695
                               (filter_ext(os.path.splitext(f)[1])))
 
696
                          ])
674
697
 
675
698
        files.sort()
676
699
 
677
700
        for f, filepath in files:
678
 
 
679
 
            if f.startswith("."):
680
 
                continue
681
 
 
682
 
            preset_name = bpy.path.display_name(f)
683
 
            props = layout.operator(operator, text=preset_name)
 
701
            props = layout.operator(operator, text=bpy.path.display_name(f))
684
702
 
685
703
            for attr, value in props_default.items():
686
704
                setattr(props, attr, value)
697
715
        """
698
716
        import bpy
699
717
        self.path_menu(bpy.utils.preset_paths(self.preset_subdir),
700
 
                       self.preset_operator)
 
718
                       self.preset_operator,
 
719
                       filter_ext=lambda ext: ext.lower() in {".py", ".xml"})