ocga-cli 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ocga/__init__.py ADDED
@@ -0,0 +1,8 @@
1
+ from importlib.metadata import version, PackageNotFoundError
2
+ from .ocga_engine import ocga_process2
3
+
4
+ try:
5
+ __version__ = version("ocga")
6
+ except PackageNotFoundError:
7
+ # package is not installed, e.g. when running from local source
8
+ __version__ = "unknown"
ocga/cli.py ADDED
@@ -0,0 +1,26 @@
1
+ """
2
+ Computer Generated Architecture OSM
3
+ Command line interface to OCGA engine
4
+ """
5
+ import argparse
6
+ from .ocga_engine import ocga_process2
7
+
8
+ def main():
9
+ parser = argparse.ArgumentParser(
10
+ prog='ocga',
11
+ description='ocga scripting engine',
12
+ epilog='Created by Zkir 2024-2026')
13
+
14
+ parser.add_argument('-i', '--input', required=True, type=str, help='input file, should be osm-xml' )
15
+ parser.add_argument('-o', '--output', required=True, type=str, help='output osm-xml with created parts' )
16
+ parser.add_argument('-r', '--rules', required=True, type=str, help='transformation rules in .ocga file' )
17
+ args = parser.parse_args()
18
+
19
+ input_file_name = args.input
20
+ output_file_name = args.output
21
+ rules_file_name = args.rules
22
+
23
+ ocga_process2(input_file_name, output_file_name, rules_file_name, None, strip_rules_names=True)
24
+
25
+ if __name__ == '__main__':
26
+ main()
ocga/mdlMisc.py ADDED
@@ -0,0 +1,269 @@
1
+ from datetime import datetime
2
+
3
+ lstColorCodes=[
4
+ ['aliceblue', '#F0F8FF'],
5
+ ['antiquewhite', '#FAEBD7'],
6
+ ['aqua', '#00FFFF'],
7
+ ['aquamarine', '#7FFFD4'],
8
+ ['azure', '#F0FFFF'],
9
+ ['beige', '#F5F5DC'],
10
+ ['bisque', '#FFE4C4'],
11
+ ['black', '#000000'],
12
+ ['blanchedalmond', '#FFEBCD'],
13
+ ['blue', '#0000FF'],
14
+ ['blueviolet', '#8A2BE2'],
15
+ ['brown', '#A52A2A'],
16
+ ['burlywood', '#DEB887'],
17
+ ['cadetblue', '#5F9EA0'],
18
+ ['chartreuse', '#7FFF00'],
19
+ ['chocolate', '#D2691E'],
20
+ ['coral', '#FF7F50'],
21
+ ['cornflowerblue', '#6495ED'],
22
+ ['cornsilk', '#FFF8DC'],
23
+ ['crimson', '#DC143C'],
24
+ ['cyan', '#00FFFF'],
25
+ ['darkblue', '#00008B'],
26
+ ['darkcyan', '#008B8B'],
27
+ ['darkgoldenrod', '#B8860B'],
28
+ ['darkgray', '#A9A9A9'],
29
+ ['darkgreen', '#006400'],
30
+ ['darkgrey', '#A9A9A9'],
31
+ ['darkkhaki', '#BDB76B'],
32
+ ['darkmagenta', '#8B008B'],
33
+ ['darkolivegreen', '#556B2F'],
34
+ ['darkorange', '#FF8C00'],
35
+ ['darkorchid', '#9932CC'],
36
+ ['darkred', '#8B0000'],
37
+ ['darksalmon', '#E9967A'],
38
+ ['darkseagreen', '#8FBC8F'],
39
+ ['darkslateblue', '#483D8B'],
40
+ ['darkslategray', '#2F4F4F'],
41
+ ['darkslategrey', '#2F4F4F'],
42
+ ['darkturquoise', '#00CED1'],
43
+ ['darkviolet', '#9400D3'],
44
+ ['deeppink', '#FF1493'],
45
+ ['deepskyblue', '#00BFFF'],
46
+ ['dimgray', '#696969'],
47
+ ['dimgrey', '#696969'],
48
+ ['dodgerblue', '#1E90FF'],
49
+ ['firebrick', '#B22222'],
50
+ ['floralwhite', '#FFFAF0'],
51
+ ['forestgreen', '#228B22'],
52
+ ['fuchsia', '#FF00FF'],
53
+ ['gainsboro', '#DCDCDC'],
54
+ ['ghostwhite', '#F8F8FF'],
55
+ ['gold', '#FFD700'],
56
+ ['goldenrod', '#DAA520'],
57
+ ['gray', '#808080'],
58
+ ['green', '#008000'],
59
+ ['greenyellow', '#ADFF2F'],
60
+ ['grey', '#808080'],
61
+ ['honeydew', '#F0FFF0'],
62
+ ['hotpink', '#FF69B4'],
63
+ ['indianred', '#CD5C5C'],
64
+ ['indigo', '#4B0082'],
65
+ ['ivory', '#FFFFF0'],
66
+ ['khaki', '#F0E68C'],
67
+ ['lavender', '#E6E6FA'],
68
+ ['lavenderblush', '#FFF0F5'],
69
+ ['lawngreen', '#7CFC00'],
70
+ ['lemonchiffon', '#FFFACD'],
71
+ ['lightblue', '#ADD8E6'],
72
+ ['lightcoral', '#F08080'],
73
+ ['lightcyan', '#E0FFFF'],
74
+ ['lightgoldenrodyellow', '#FAFAD2'],
75
+ ['lightgray', '#D3D3D3'],
76
+ ['lightgreen', '#90EE90'],
77
+ ['lightgrey', '#D3D3D3'],
78
+ ['lightpink', '#FFB6C1'],
79
+ ['lightsalmon', '#FFA07A'],
80
+ ['lightseagreen', '#20B2AA'],
81
+ ['lightskyblue', '#87CEFA'],
82
+ ['lightslategray', '#778899'],
83
+ ['lightslategrey', '#778899'],
84
+ ['lightsteelblue', '#B0C4DE'],
85
+ ['lightyellow', '#FFFFE0'],
86
+ ['lime', '#00FF00'],
87
+ ['limegreen', '#32CD32'],
88
+ ['linen', '#FAF0E6'],
89
+ ['magenta', '#FF00FF'],
90
+ ['maroon', '#800000'],
91
+ ['mediumaquamarine', '#66CDAA'],
92
+ ['mediumblue', '#0000CD'],
93
+ ['mediumorchid', '#BA55D3'],
94
+ ['mediumpurple', '#9370DB'],
95
+ ['mediumseagreen', '#3CB371'],
96
+ ['mediumslateblue', '#7B68EE'],
97
+ ['mediumspringgreen', '#00FA9A'],
98
+ ['mediumturquoise', '#48D1CC'],
99
+ ['mediumvioletred', '#C71585'],
100
+ ['midnightblue', '#191970'],
101
+ ['mintcream', '#F5FFFA'],
102
+ ['mistyrose', '#FFE4E1'],
103
+ ['moccasin', '#FFE4B5'],
104
+ ['navajowhite', '#FFDEAD'],
105
+ ['navy', '#000080'],
106
+ ['oldlace', '#FDF5E6'],
107
+ ['olive', '#808000'],
108
+ ['olivedrab', '#6B8E23'],
109
+ ['orange', '#FFA500'],
110
+ ['orangered', '#FF4500'],
111
+ ['orchid', '#DA70D6'],
112
+ ['palegoldenrod', '#EEE8AA'],
113
+ ['palegreen', '#98FB98'],
114
+ ['paleturquoise', '#AFEEEE'],
115
+ ['palevioletred', '#DB7093'],
116
+ ['papayawhip', '#FFEFD5'],
117
+ ['peachpuff', '#FFDAB9'],
118
+ ['peru', '#CD853F'],
119
+ ['pink', '#FFC0CB'],
120
+ ['plum', '#DDA0DD'],
121
+ ['powderblue', '#B0E0E6'],
122
+ ['purple', '#800080'],
123
+ ['red', '#FF0000'],
124
+ ['rosybrown', '#BC8F8F'],
125
+ ['royalblue', '#4169E1'],
126
+ ['saddlebrown', '#8B4513'],
127
+ ['salmon', '#FA8072'],
128
+ ['sandybrown', '#F4A460'],
129
+ ['seagreen', '#2E8B57'],
130
+ ['seashell', '#FFF5EE'],
131
+ ['sienna', '#A0522D'],
132
+ ['silver', '#C0C0C0'],
133
+ ['skyblue', '#87CEEB'],
134
+ ['slateblue', '#6A5ACD'],
135
+ ['slategray', '#708090'],
136
+ ['slategrey', '#708090'],
137
+ ['snow', '#FFFAFA'],
138
+ ['springgreen', '#00FF7F'],
139
+ ['steelblue', '#4682B4'],
140
+ ['tan', '#D2B48C'],
141
+ ['teal', '#008080'],
142
+ ['thistle', '#D8BFD8'],
143
+ ['tomato', '#FF6347'],
144
+ ['turquoise', '#40E0D0'],
145
+ ['violet', '#EE82EE'],
146
+ ['wheat', '#F5DEB3'],
147
+ ['white', '#FFFFFF'],
148
+ ['whitesmoke', '#F5F5F5'],
149
+ ['yellow', '#FFFF00'],
150
+ ['yellowgreen', '#9ACD32']
151
+ ]
152
+
153
+
154
+ def getColourName(strRgbCode):
155
+ strColorName = "black"
156
+
157
+ if not strRgbCode.startswith("#"):
158
+ raise Exception ("wrong color format")
159
+ if len(strRgbCode) == 4:
160
+ r1 = int(strRgbCode[1: 2],16) * 16
161
+ g1 = int(strRgbCode[2: 3],16) * 16
162
+ b1 = int(strRgbCode[3: 4],16) * 16
163
+ else:
164
+ r1 = int(strRgbCode[1: 3],16)
165
+ g1 = int(strRgbCode[3: 5],16)
166
+ b1 = int(strRgbCode[5: 7],16)
167
+ minDistance = (r1 * r1) + g1 * g1 + b1 * b1
168
+
169
+ for color in lstColorCodes:
170
+ if not color[1].startswith("#"):
171
+ raise Exception("wrong color format")
172
+
173
+ r2 = int(color[1][1: 3],16)
174
+ g2 = int(color[1][3: 5],16)
175
+ b2 = int(color[1][5: 7],16)
176
+ Distance = (r1 - r2) ** 2 + (g1 - g2) ** 2 + (b1 - b2) ** 2
177
+
178
+ if Distance < minDistance:
179
+ strColorName = color[0].lower()
180
+ minDistance = Distance
181
+
182
+ return strColorName
183
+
184
+
185
+ def getColorDistance(strColorName1, strColorName2):
186
+
187
+ r1 = 0
188
+ r2 = 0
189
+ g1 = 0
190
+ g2 = 0
191
+ b1 = 0
192
+ b2 = 0
193
+ for color in lstColorCodes:
194
+ if strColorName1.upper() == color[0].upper():
195
+ r1 = int(color[1][1: 3], 16)
196
+ g1 = int(color[1][3: 5], 16)
197
+ b1 = int(color[1][5: 7], 16)
198
+ if strColorName2.upper() == color[0].upper():
199
+ r2 = int(color[1][1: 3], 16)
200
+ g2 = int(color[1][3: 5], 16)
201
+ b2 = int(color[1][5: 7], 16)
202
+ fn_return_value = (r1 - r2) ** 2 + (g1 - g2) ** 2 + (b1 - b2) ** 2
203
+ return fn_return_value
204
+
205
+
206
+ def composeQuadrantName(dsfLat, dsfLon):
207
+ if dsfLat >= 0:
208
+ fn_return_value = '+'
209
+ else:
210
+ fn_return_value = '-'
211
+ fn_return_value = fn_return_value + ('00' + str(dsfLat))[-2:]
212
+ if dsfLon >= 0:
213
+ fn_return_value = fn_return_value + '+'
214
+ else:
215
+ fn_return_value = fn_return_value + '-'
216
+ fn_return_value = fn_return_value + ('000' + str(dsfLon))[-3:]
217
+
218
+ return fn_return_value
219
+
220
+
221
+ def getTimeStamp():
222
+ dateTimeObj = datetime.now()
223
+ return str(dateTimeObj.year)+'.'+str(dateTimeObj.month).zfill(2)+'.'+str(dateTimeObj.day).zfill(2)+" "+str(dateTimeObj.hour).zfill(2) + ':'+ str(dateTimeObj.minute).zfill(2) + ':' + str(dateTimeObj.second).zfill(2)
224
+
225
+ def safeString(s):
226
+ s=s.replace("\xab","\"")
227
+ s=s.replace("\xbb","\"")
228
+ return s
229
+
230
+ #====================================================================================
231
+ # home-brew relational DB interface
232
+ # plain text files pipe (|) separated
233
+ #====================================================================================
234
+ def endcodeDatString(s):
235
+ # we only need to encode pipe simbol
236
+ s=s.replace(r'|', r'&#124;')
237
+ return s
238
+
239
+ def decodeDatString(s):
240
+ s=s.replace(r"&#124;", r"|")
241
+ return s
242
+
243
+ def loadDatFile(strInputFile, encoding="utf-8"):
244
+ cells = []
245
+ filehandle = open(strInputFile, 'r', encoding=encoding)
246
+ txt = filehandle.readline().strip()
247
+ while len(txt) != 0:
248
+ if not txt.startswith("#"):
249
+ row = txt.strip().split("|")
250
+ for i in range(len(row)):
251
+ row[i] = decodeDatString(row[i].strip())
252
+ if len(row)>1:
253
+ cells.append(row)
254
+ txt = filehandle.readline()
255
+ # end of while
256
+ filehandle.close()
257
+ return cells
258
+
259
+ def saveDatFile(cells,strOutputFile):
260
+
261
+ filehandle = open(strOutputFile, 'w', encoding="utf-8" )
262
+ for row in cells:
263
+ txt = ""
264
+ for field in row:
265
+ if txt!="":
266
+ txt = txt + "|"
267
+ txt = txt + endcodeDatString(field)
268
+ filehandle.write(txt+'\n')
269
+ filehandle.close()