1 | import numpy as np
|
---|
2 |
|
---|
3 |
|
---|
4 | def expwrite(contours, filename):
|
---|
5 | """EXPWRITE - write an Argus file from a dictionary given in input
|
---|
6 |
|
---|
7 | This routine writes an Argus file from a dict containing the fields:
|
---|
8 | x and y of the coordinates of the points.
|
---|
9 | The first argument is the list containing the points coordinates and the
|
---|
10 | second one the file to be written.
|
---|
11 |
|
---|
12 | Usage:
|
---|
13 | expwrite(contours, filename)
|
---|
14 |
|
---|
15 | Example:
|
---|
16 | expwrite(coordstruct, 'domainoutline.exp')
|
---|
17 |
|
---|
18 | See also EXPDOC, EXPREAD, EXPWRITEASVERTICES
|
---|
19 | """
|
---|
20 |
|
---|
21 | fid = open(filename, 'w')
|
---|
22 | #if it is a list we need to loop on several contours
|
---|
23 | if isinstance(contours, list):
|
---|
24 | for contour in contours:
|
---|
25 | #if it is some kind of array it is a contour and we loop on indexes
|
---|
26 | if isinstance(contour['x'], (list, tuple, np.ndarray)):
|
---|
27 | writegeomlist(contour, fid, filename)
|
---|
28 | #else it is an index and we just write it down
|
---|
29 | else:
|
---|
30 | writegeom(contour, fid, filename)
|
---|
31 | #if it is a dict type it means just one contour
|
---|
32 | else:
|
---|
33 | #if it is some kind of array it is a contour and we loop on indexes
|
---|
34 | if isinstance(contours['x'], (list, tuple, np.ndarray)):
|
---|
35 | writegeomlist(contours, fid, filename)
|
---|
36 | #else it is an index and we just write it down
|
---|
37 | else:
|
---|
38 | writegeom(contours, fid, filename)
|
---|
39 |
|
---|
40 | fid.close()
|
---|
41 |
|
---|
42 |
|
---|
43 | def writegeomlist(contour, fid, filename):
|
---|
44 | if len(contour['x']) != len(contour['y']):
|
---|
45 | raise RuntimeError('contours x and y coordinates must be of identical size')
|
---|
46 | if 'name' in contour:
|
---|
47 | fid.write('{}{}\n'.format('## Name:', contour['name']))
|
---|
48 | else:
|
---|
49 | fid.write('{}{}\n'.format('## Name:', filename))
|
---|
50 |
|
---|
51 | fid.write('{}\n'.format('## Icon:0'))
|
---|
52 | fid.write('{}\n'.format('# Points Count Value'))
|
---|
53 | if 'density' in contour:
|
---|
54 | if isinstance(contour['density'], int):
|
---|
55 | fid.write('{} {}\n'.format(np.size(contour['x']), contour['density']))
|
---|
56 | else:
|
---|
57 | fid.write('{} {}\n'.format(np.size(contour['x']), 1.))
|
---|
58 | else:
|
---|
59 | fid.write('{} {}\n'.format(np.size(contour['x']), 1.))
|
---|
60 | fid.write('{}\n'.format('# X pos Y pos'))
|
---|
61 | for x, y in zip(contour['x'], contour['y']):
|
---|
62 | fid.write('%10.10f %10.10f\n' % (x, y))
|
---|
63 | fid.write('\n')
|
---|
64 |
|
---|
65 |
|
---|
66 | def writegeom(contour, fid, filename):
|
---|
67 | if 'name' in contour:
|
---|
68 | fid.write('{}{}\n'.format('## Name:', contour['name']))
|
---|
69 | else:
|
---|
70 | fid.write('{}{}\n'.format('## Name:', filename))
|
---|
71 |
|
---|
72 | fid.write('{}\n'.format('## Icon:0'))
|
---|
73 | fid.write('{}\n'.format('# Points Count Value'))
|
---|
74 | if 'density' in contour:
|
---|
75 | if isinstance(contour['density'], int):
|
---|
76 | fid.write('{} {}\n'.format(1, contour['density']))
|
---|
77 | else:
|
---|
78 | fid.write('{} {}\n'.format(1, 1.))
|
---|
79 | else:
|
---|
80 | fid.write('{} {}\n'.format(1, 1.))
|
---|
81 | fid.write('{}\n'.format('# X pos Y pos'))
|
---|
82 | fid.write('%10.10f %10.10f\n' % (contour['x'], contour['y']))
|
---|
83 | fid.write('\n')
|
---|