Coverage for /Volumes/workspace/numpy-stl/stl/main.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import sys
2import random
3import argparse
5from . import stl
8def _get_parser(description):
9 parser = argparse.ArgumentParser(description=description)
10 parser.add_argument('infile', nargs='?', type=argparse.FileType('rb'),
11 default=sys.stdin, help='STL file to read')
12 parser.add_argument('outfile', nargs='?', type=argparse.FileType('wb'),
13 default=sys.stdout, help='STL file to write')
14 parser.add_argument('--name', nargs='?', help='Name of the mesh')
15 parser.add_argument(
16 '-n', '--use-file-normals', action='store_true',
17 help='Read the normals from the file instead of recalculating them')
18 parser.add_argument(
19 '-r', '--remove-empty-areas', action='store_true',
20 help='Remove areas with 0 surface areas to prevent errors during '
21 'normal calculation')
22 parser.add_argument('-s', '--disable-speedups', action='store_true',
23 help='Disable Cython speedups')
24 return parser
27def _get_name(args):
28 names = [
29 args.name,
30 getattr(args.outfile, 'name', None),
31 getattr(args.infile, 'name', None),
32 'numpy-stl-%06d' % random.randint(0, 1e6),
33 ]
35 for name in names: # pragma: no branch
36 if name and isinstance(name, str) and not name.startswith('<'):
37 return name
40def main():
41 parser = _get_parser('Convert STL files from ascii to binary and back')
42 parser.add_argument('-a', '--ascii', action='store_true',
43 help='Write ASCII file (default is binary)')
44 parser.add_argument('-b', '--binary', action='store_true',
45 help='Force binary file (for TTYs)')
47 args = parser.parse_args()
48 name = _get_name(args)
49 stl_file = stl.StlMesh(filename=name,
50 fh=args.infile,
51 calculate_normals=False,
52 remove_empty_areas=args.remove_empty_areas,
53 speedups=not args.disable_speedups)
55 if args.binary:
56 mode = stl.BINARY
57 elif args.ascii:
58 mode = stl.ASCII
59 else:
60 mode = stl.AUTOMATIC
62 stl_file.save(name, args.outfile, mode=mode,
63 update_normals=not args.use_file_normals)
66def to_ascii():
67 parser = _get_parser('Convert STL files to ASCII (text) format')
68 args = parser.parse_args()
69 name = _get_name(args)
70 stl_file = stl.StlMesh(filename=name, fh=args.infile,
71 calculate_normals=False,
72 remove_empty_areas=args.remove_empty_areas,
73 speedups=not args.disable_speedups)
74 stl_file.save(name, args.outfile, mode=stl.ASCII,
75 update_normals=not args.use_file_normals)
78def to_binary():
79 parser = _get_parser('Convert STL files to binary format')
80 args = parser.parse_args()
81 name = _get_name(args)
82 stl_file = stl.StlMesh(filename=name, fh=args.infile,
83 calculate_normals=False,
84 remove_empty_areas=args.remove_empty_areas,
85 speedups=not args.disable_speedups)
86 stl_file.save(name, args.outfile, mode=stl.BINARY,
87 update_normals=not args.use_file_normals)