├── impl ├── fonts │ └── tiny.otf ├── apps_v2 │ ├── res │ │ ├── weather │ │ │ ├── 01d.png │ │ │ ├── 01n.png │ │ │ ├── 02d.png │ │ │ ├── 02n.png │ │ │ ├── 03d.png │ │ │ ├── 03n.png │ │ │ ├── 04d.png │ │ │ ├── 04n.png │ │ │ ├── 09d.png │ │ │ ├── 09n.png │ │ │ ├── 10d.png │ │ │ ├── 10n.png │ │ │ ├── 11d.png │ │ │ ├── 11n.png │ │ │ ├── 13d.png │ │ │ ├── 13n.png │ │ │ ├── 50d.png │ │ │ └── 50n.png │ │ ├── tothemoon_darker.png │ │ ├── gif │ │ │ └── horizontal │ │ │ │ ├── fine.gif │ │ │ │ ├── falling.gif │ │ │ │ ├── padoru.gif │ │ │ │ ├── penguin.gif │ │ │ │ └── static.gif │ │ ├── pixel_logo_flipped.png │ │ ├── life_patterns │ │ │ ├── centinal.npy │ │ │ ├── centinal.png │ │ │ ├── pboj_p22.npy │ │ │ ├── pboj_p22.png │ │ │ ├── achim_p144.npy │ │ │ └── achim_p144.png │ │ └── main_screen │ │ │ ├── cloud-bg.png │ │ │ ├── forest-bg.png │ │ │ ├── sakura-bg.png │ │ │ └── cloud-bg-clear.png │ ├── gif_viewer.py │ ├── subcount.py │ ├── stocks.py │ ├── life.py │ ├── weather.py │ ├── pomodoro.py │ ├── spotify_player.py │ ├── notion_v2.py │ └── main_screen.py ├── InputStatus.py ├── modules │ ├── weather_module.py │ ├── notification_module.py │ └── spotify_module.py └── controller_v3.py ├── .gitmodules ├── config template.txt ├── README.md ├── cad ├── knob.STEP └── base swivel cap V2.STEP └── LICENSE /impl/fonts/tiny.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/fonts/tiny.otf -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/01d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/01d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/01n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/01n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/02d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/02d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/02n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/02n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/03d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/03d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/03n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/03n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/04d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/04d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/04n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/04n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/09d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/09d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/09n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/09n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/10d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/10d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/10n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/10n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/11d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/11d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/11n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/11n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/13d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/13d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/13n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/13n.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/50d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/50d.png -------------------------------------------------------------------------------- /impl/apps_v2/res/weather/50n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/weather/50n.png -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "rpi-rgb-led-matrix"] 2 | path = rpi-rgb-led-matrix 3 | url = https://github.com/hzeller/rpi-rgb-led-matrix 4 | -------------------------------------------------------------------------------- /impl/apps_v2/res/tothemoon_darker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/tothemoon_darker.png -------------------------------------------------------------------------------- /impl/apps_v2/res/gif/horizontal/fine.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/gif/horizontal/fine.gif -------------------------------------------------------------------------------- /impl/apps_v2/res/pixel_logo_flipped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/pixel_logo_flipped.png -------------------------------------------------------------------------------- /impl/apps_v2/res/gif/horizontal/falling.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/gif/horizontal/falling.gif -------------------------------------------------------------------------------- /impl/apps_v2/res/gif/horizontal/padoru.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/gif/horizontal/padoru.gif -------------------------------------------------------------------------------- /impl/apps_v2/res/gif/horizontal/penguin.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/gif/horizontal/penguin.gif -------------------------------------------------------------------------------- /impl/apps_v2/res/gif/horizontal/static.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/gif/horizontal/static.gif -------------------------------------------------------------------------------- /impl/apps_v2/res/life_patterns/centinal.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/life_patterns/centinal.npy -------------------------------------------------------------------------------- /impl/apps_v2/res/life_patterns/centinal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/life_patterns/centinal.png -------------------------------------------------------------------------------- /impl/apps_v2/res/life_patterns/pboj_p22.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/life_patterns/pboj_p22.npy -------------------------------------------------------------------------------- /impl/apps_v2/res/life_patterns/pboj_p22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/life_patterns/pboj_p22.png -------------------------------------------------------------------------------- /impl/apps_v2/res/main_screen/cloud-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/main_screen/cloud-bg.png -------------------------------------------------------------------------------- /impl/apps_v2/res/main_screen/forest-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/main_screen/forest-bg.png -------------------------------------------------------------------------------- /impl/apps_v2/res/main_screen/sakura-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/main_screen/sakura-bg.png -------------------------------------------------------------------------------- /impl/apps_v2/res/life_patterns/achim_p144.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/life_patterns/achim_p144.npy -------------------------------------------------------------------------------- /impl/apps_v2/res/life_patterns/achim_p144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/life_patterns/achim_p144.png -------------------------------------------------------------------------------- /impl/apps_v2/res/main_screen/cloud-bg-clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ty-porter/matrix-dashboard/HEAD/impl/apps_v2/res/main_screen/cloud-bg-clear.png -------------------------------------------------------------------------------- /impl/InputStatus.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | class InputStatusEnum(Enum): 4 | NOTHING = 1 5 | SINGLE_PRESS = 2 6 | DOUBLE_PRESS = 3 7 | TRIPLE_PRESS = 4 8 | LONG_PRESS = 5 9 | ENCODER_INCREASE = 6 10 | ENCODER_DECREASE = 7 11 | -------------------------------------------------------------------------------- /config template.txt: -------------------------------------------------------------------------------- 1 | [Pushbullet] 2 | websocket_url = xxx 3 | 4 | [OWM] 5 | token = xxx 6 | lat = 0.0 7 | lon = 0.0 8 | 9 | [Spotify] 10 | client_id = xxx 11 | client_secret = xxx 12 | redirect_uri = xxx 13 | 14 | [Notion] 15 | token_v2 = xxx 16 | source = xxx 17 | 18 | [Notion_V2] 19 | token = xxx 20 | databaseID = xxx 21 | 22 | [Youtube] 23 | key = xxx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # matrix-dashboard 2 | Code and CAD Files for Matrix Dashboard 3 | 4 | --------------- 5 | > [!WARNING] 6 | > This software is provided **AS-IS**. 7 | > 8 | > This project is a fork of the original `matrix-dashboard` repository, which has been removed by the author. 9 | > 10 | > **I am unable to provide ongoing support for this project.** 11 | --------------- 12 | -------------------------------------------------------------------------------- /impl/modules/weather_module.py: -------------------------------------------------------------------------------- 1 | from pyowm.owm import OWM 2 | from threading import Thread 3 | from queue import LifoQueue 4 | import time 5 | 6 | class WeatherModule: 7 | def __init__(self, config): 8 | self.one_call = None 9 | self.queue = LifoQueue() 10 | 11 | if config is not None and 'OWM' in config and 'token' in config['OWM'] and config['OWM']['token'] is not "" and 'lat' in config['OWM'] and 'lon' in config['OWM']: 12 | self.mgr = OWM(config['OWM']['token']).weather_manager() 13 | self.thread = Thread(target = update_weather, args=(self.mgr, self.queue, float(config['OWM']['lat']), float(config['OWM']['lon']),)) 14 | self.thread.start() 15 | else: 16 | print("[Weather Module] Empty OWM API Token") 17 | 18 | def getWeather(self): 19 | if not self.queue.empty(): 20 | self.one_call = self.queue.get() 21 | self.queue.queue.clear() 22 | return self.one_call 23 | 24 | def update_weather(mgr, weather_queue, lat, lon): 25 | lastTimeCall = 0 26 | while True: 27 | currTime = time.time() 28 | if (currTime - lastTimeCall >= 600): 29 | try: 30 | weather_queue.put(mgr.one_call(lat = lat, lon = lon)) 31 | lastTimeCall = currTime 32 | except Exception: 33 | pass -------------------------------------------------------------------------------- /impl/apps_v2/gif_viewer.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from InputStatus import InputStatusEnum 3 | from PIL import Image, ImageSequence, ImageDraw 4 | import time 5 | import os 6 | 7 | white = (230,255,255) 8 | 9 | class GifScreen: 10 | def __init__(self, config, modules, default_actions): 11 | #save the numpy arrays to avoid conversion all the time 12 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 13 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 14 | 15 | location = config.get('Gif Viewer', 'location', fallback=None) 16 | if location is None: 17 | print("[Gif Viewer] Location of gifs is not specified in config") 18 | self.animations = [] 19 | else: 20 | self.animations = loadAnimations(location) 21 | 22 | self.currentIdx = 0 23 | self.selectMode = False 24 | 25 | self.modules = modules 26 | self.default_actions = default_actions 27 | self.cnt = 0 28 | self.was_horizontal = True 29 | 30 | def generate(self, isHorizontal, inputStatus): 31 | if (inputStatus == InputStatusEnum.LONG_PRESS): 32 | self.selectMode = not self.selectMode 33 | 34 | if self.selectMode: 35 | if (inputStatus is InputStatusEnum.ENCODER_INCREASE): 36 | self.currentIdx += 1 37 | self.cnt = 0 38 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 39 | self.currentIdx -= 1 40 | self.cnt = 0 41 | else: 42 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 43 | self.default_actions['toggle_display']() 44 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 45 | self.default_actions['switch_next_app']() 46 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 47 | self.default_actions['switch_prev_app']() 48 | 49 | curr_gif = ImageSequence.Iterator(self.animations[self.currentIdx % len(self.animations)]) 50 | try: 51 | frame = curr_gif[self.cnt].convert('RGB') 52 | except IndexError: 53 | self.cnt = 0 54 | frame = curr_gif[self.cnt].convert('RGB') 55 | self.cnt += 1 56 | 57 | draw = ImageDraw.Draw(frame) 58 | 59 | if (self.selectMode): 60 | draw.rectangle((0,0,self.canvas_width-1,self.canvas_height-1), outline=white) 61 | 62 | time.sleep(0.04) 63 | return frame 64 | 65 | def loadAnimations(location): 66 | print(location) 67 | result = [] 68 | for filename in os.listdir(location): 69 | if filename.endswith(".gif"): 70 | result.append(Image.open(location+'/'+filename)) 71 | return result 72 | -------------------------------------------------------------------------------- /impl/apps_v2/subcount.py: -------------------------------------------------------------------------------- 1 | import time 2 | import urllib.request 3 | import json 4 | from PIL import Image, ImageFont, ImageDraw 5 | import threading 6 | import numpy as np 7 | from InputStatus import InputStatusEnum 8 | from queue import LifoQueue 9 | from ast import literal_eval 10 | 11 | class SubcountScreen: 12 | def __init__(self, config, modules, default_actions): 13 | self.modules = modules 14 | self.default_actions = default_actions 15 | self.bg = Image.open('apps_v2/res/pixel_logo_flipped.png').convert('RGB') 16 | self.font = ImageFont.truetype("fonts/tiny.otf", 5) 17 | self.queue = LifoQueue() 18 | 19 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 20 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 21 | self.subs = 0 22 | 23 | self.name_color = literal_eval(config.get('Youtube', 'name_color',fallback="(255,255,255)")) 24 | self.sub_color = literal_eval(config.get('Youtube', 'sub_color',fallback="(255,255,255)")) 25 | 26 | yt_token = config.get("Youtube", "key", fallback=None) 27 | if yt_token is None: 28 | print("[Subcount] Youtube token is not specified in config") 29 | else: 30 | self.channel_id = config.get('Youtube', 'channel_id', fallback = None) 31 | if self.channel_id is None: 32 | print("[Subcount] Youtube channel id is not specified in config") 33 | else: 34 | self.display_name = config.get('Youtube', 'display_name', fallback=self.channel_id) 35 | threading.Thread(target=fetchYoutubeSubsAsync, args=(self.queue, yt_token, self.channel_id)).start() 36 | 37 | def generate(self, isHorizontal, inputStatus): 38 | if (not self.queue.empty()): 39 | self.subs = self.queue.get() 40 | self.queue.queue.clear() 41 | 42 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 43 | self.default_actions['toggle_display']() 44 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 45 | self.default_actions['switch_next_app']() 46 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 47 | self.default_actions['switch_prev_app']() 48 | 49 | frame = self.bg.copy() 50 | draw = ImageDraw.Draw(frame) 51 | if self.display_name == "bit of a ch.allen.ge": 52 | draw.text((0, 11), "BIT OF A", self.name_color, font=self.font) 53 | draw.text((0, 18), "CH.ALLEN.GE", self.name_color, font=self.font) 54 | else: 55 | draw.text((0, 18), self.display_name.upper(), self.name_color, font=self.font) 56 | draw.text((0, 25), self.subs + " SUBS", self.sub_color, font=self.font) 57 | 58 | return frame 59 | 60 | def fetchYoutubeSubsAsync(queue, key, channel_id): 61 | while True: 62 | data = urllib.request.urlopen("https://www.googleapis.com/youtube/v3/channels?part=statistics&id="+channel_id+"&key="+key).read() 63 | subs = json.loads(data)["items"][0]["statistics"]["subscriberCount"] 64 | queue.put(subs) 65 | time.sleep(60) 66 | -------------------------------------------------------------------------------- /impl/apps_v2/stocks.py: -------------------------------------------------------------------------------- 1 | from PIL import Image, ImageFont, ImageDraw 2 | import numpy as np 3 | import yfinance as yf 4 | import time 5 | import threading 6 | from queue import LifoQueue 7 | 8 | white = (255,255,255) 9 | red = (255,0,0) 10 | green = (0,255,0) 11 | up_arrow = np.asarray([[0,0,1,0,0],[0,1,1,1,0],[1,1,1,1,1]]) 12 | down_arrow = np.asarray([[1,1,1,1,1],[0,1,1,1,0],[0,0,1,0,0]]) 13 | 14 | class StocksVerticalScreen: 15 | def __init__(self, config, modules, default_actions): 16 | self.ticker_symbols = ['DOGE-USD', 'GME', 'AMC', 'TSM', 'AMD'] 17 | self.tiny_font = ImageFont.truetype("fonts/tiny.otf", 5) 18 | self.bg = Image.open('apps_v2/res/tothemoon_darker.png').convert('RGB') 19 | self.queue = LifoQueue() 20 | self.thread = threading.Thread(target=generateFrameAsync, 21 | args=(self.queue, self.ticker_symbols, self.tiny_font, self.bg)) 22 | self.thread.start() 23 | self.frame = self.bg.rotate(90, expand=True) 24 | 25 | def generate(self, isHorizontal, inputStatus): 26 | if not self.queue.empty(): 27 | self.frame = self.queue.get() 28 | self.queue.queue.clear() 29 | return self.frame 30 | 31 | def get_price(symbol): 32 | ticker = yf.Ticker(symbol) 33 | week_data = ticker.history(period='5d') 34 | if (int(week_data['Close'][-1]) < 1.0): 35 | current = "{:.4f}".format(week_data['Close'][-1]) 36 | last_close = "{:.4f}".format(week_data['Close'][-2]) 37 | else: 38 | current = "{:.2f}".format(week_data['Close'][-1]) 39 | last_close = "{:.2f}".format(week_data['Close'][-2]) 40 | return (current, last_close) 41 | 42 | def generateLineArray(text, font): 43 | img = Image.new("RGB", (100,500), (0,0,0)) 44 | draw = ImageDraw.Draw(img) 45 | draw.text((0,0), text, (255,255,255), font=font) 46 | img = img.crop(img.getbbox()) 47 | return np.array(img)[:,:,0]/255 48 | 49 | def placeText(frame, x, y, color, text_arr, isLeftReference): 50 | arr_height = text_arr.shape[0] 51 | arr_width = text_arr.shape[1] 52 | values = np.ones((1, arr_height * arr_width), dtype='uint8') 53 | if (isLeftReference): 54 | np.putmask(frame[y:y+arr_height, x:x+arr_width, 0], text_arr.astype(bool), values * color[0]) 55 | np.putmask(frame[y:y+arr_height, x:x+arr_width, 1], text_arr.astype(bool), values * color[1]) 56 | np.putmask(frame[y:y+arr_height, x:x+arr_width, 2], text_arr.astype(bool), values * color[2]) 57 | else: 58 | np.putmask(frame[y:y+arr_height, x-arr_width:x, 0], text_arr.astype(bool), values * color[0]) 59 | np.putmask(frame[y:y+arr_height, x-arr_width:x, 1], text_arr.astype(bool), values * color[1]) 60 | np.putmask(frame[y:y+arr_height, x-arr_width:x, 2], text_arr.astype(bool), values * color[2]) 61 | 62 | def generateFrameAsync(queue, ticker_symbols, font, bg): 63 | while True: 64 | frame = np.copy(bg) 65 | for i in range(len(ticker_symbols)): 66 | symbol = ticker_symbols[i] 67 | (current, last_close) = get_price(symbol) 68 | 69 | stock_symbol_arr = generateLineArray(symbol.split("-")[0], font) 70 | stock_price_arr = generateLineArray(current, font) 71 | (arrow_color, arrow_arr) = (green, up_arrow) if float(current) - float(last_close) >= 0 else (red, down_arrow) 72 | 73 | placeText(frame, 0, 13*i, white, stock_symbol_arr, True) 74 | placeText(frame, 31, 6+13*i, white, stock_price_arr, False) 75 | placeText(frame, 25, 1+13*i, arrow_color, arrow_arr, True) 76 | 77 | frame = np.rot90(frame) 78 | queue.put(Image.fromarray(frame,'RGB')) 79 | time.sleep(5) -------------------------------------------------------------------------------- /impl/modules/notification_module.py: -------------------------------------------------------------------------------- 1 | from threading import Thread 2 | from queue import Queue 3 | import websocket 4 | import json 5 | import time 6 | from functools import cmp_to_key 7 | 8 | class NotificationModule: 9 | def __init__(self, config): 10 | app_white_list = parseWhiteList(config.get('Notification Module', 'white_list', fallback=None)) 11 | pushbullet_ws = config.get('Notification Module', 'pushbullet_ws', fallback=None) 12 | 13 | self.noti_list = [] 14 | self.noti_queue = Queue() 15 | if pushbullet_ws is None or app_white_list is None or len(app_white_list) == 0: 16 | print("[Notification Module] pushbullet websocket url or app white list is not specified in config") 17 | else: 18 | Thread(target = startService, args=(self.noti_queue, pushbullet_ws, app_white_list,)).start() 19 | 20 | def getNotificationList(self): 21 | needToSort = False 22 | while not self.noti_queue.empty(): 23 | new_noti = self.noti_queue.get() 24 | if new_noti.addToCount: 25 | found = False 26 | for noti in self.noti_list: 27 | if noti.noti_id == new_noti.noti_id: 28 | found = True 29 | if not found: 30 | needToSort = True 31 | self.noti_list.append(new_noti) 32 | else: 33 | for idx, noti in enumerate(self.noti_list): 34 | if noti.noti_id == new_noti.noti_id: 35 | self.noti_list.pop(idx) 36 | if needToSort: 37 | self.noti_list.sort(key=cmp_to_key(Notification.compare)) 38 | 39 | return self.noti_list 40 | 41 | class Notification: 42 | def __init__(self, application, addToCount, noti_id, title, body, noti_time): 43 | self.application = application 44 | self.addToCount = addToCount 45 | self.noti_id = noti_id 46 | self.title = title 47 | self.body = body 48 | self.noti_time = noti_time 49 | 50 | def compare(noti1, noti2): 51 | if noti1.noti_time > noti2.noti_time: 52 | return -1 53 | elif noti1.noti_time < noti2.noti_time: 54 | return 1 55 | else: 56 | return 0 57 | 58 | def on_message(_, message, noti_queue, app_white_list): 59 | message = json.loads(message) 60 | 61 | if (message['type'] == 'push'): 62 | contents = message['push'] 63 | if contents['package_name'] in app_white_list.keys(): 64 | if contents['type'] == 'mirror': 65 | noti_queue.put(Notification(app_white_list[contents['package_name']], True,\ 66 | int(contents['notification_id']), contents['title'], contents['body'], time.time())) 67 | elif contents['type'] == 'dismissal': 68 | noti_queue.put(Notification(app_white_list[contents['package_name']], False,\ 69 | int(contents['notification_id']), '', '', time.time())) 70 | 71 | def on_error(_, error, noti_queue, pushbullet_ws, app_white_list): 72 | print(error) 73 | time.sleep(1000) 74 | startService(noti_queue, pushbullet_ws, app_white_list) 75 | 76 | def on_close(_): 77 | print("### websocket closed ###") 78 | 79 | def startService(noti_queue, pushbullet_ws, app_white_list): 80 | ws = websocket.WebSocketApp(pushbullet_ws, 81 | on_message = lambda ws, message : on_message(ws, message, noti_queue, app_white_list), 82 | on_error = lambda ws, error : on_error(ws, error, noti_queue, pushbullet_ws, app_white_list), 83 | on_close = on_close) 84 | ws.run_forever() 85 | 86 | def parseWhiteList(strList): 87 | if strList is None: 88 | return None 89 | 90 | result = {} 91 | pairs = strList.split(',') 92 | for pair in pairs: 93 | pkg, name = pair.split(':') 94 | result[pkg] = name 95 | return result 96 | -------------------------------------------------------------------------------- /impl/apps_v2/life.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import random 3 | from InputStatus import InputStatusEnum 4 | from datetime import datetime, timedelta 5 | from PIL import Image, ImageSequence, ImageDraw 6 | import os 7 | from scipy.signal import convolve2d 8 | 9 | canvas_height = 32 10 | canvas_width = 64 11 | 12 | class GameOfLifeScreen: 13 | def __init__(self, config, modules, default_actions): 14 | self.modules = modules 15 | self.default_actions = default_actions 16 | self.color = (255,255,255) 17 | self.init_states = [generateRandomState, 18 | lambda : fetchPattern('apps_v2/res/life_patterns/centinal'), 19 | lambda : fetchPattern('apps_v2/res/life_patterns/achim_p144'), 20 | lambda : fetchPattern('apps_v2/res/life_patterns/pboj_p22')] 21 | self.curr_state_idx = 0 22 | self.state = self.init_states[self.curr_state_idx]() 23 | 24 | def generate(self, isHorizontal, inputStatus): 25 | if (inputStatus is InputStatusEnum.SINGLE_PRESS or inputStatus is InputStatusEnum.LONG_PRESS): 26 | if (inputStatus is InputStatusEnum.LONG_PRESS): 27 | self.curr_state_idx = (self.curr_state_idx + 1) % len(self.init_states) 28 | self.state = self.init_states[self.curr_state_idx]() 29 | self.color = generateNewColor() 30 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 31 | self.default_actions['switch_next_app']() 32 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 33 | self.default_actions['switch_prev_app']() 34 | 35 | end_time = datetime.now() + timedelta(seconds=0.1) 36 | 37 | old_state = self.state 38 | frame = Image.new("RGB", (canvas_width, canvas_height), (0,0,0)) #np.zeros((canvas_height, canvas_width, 3), dtype=int) 39 | draw = ImageDraw.Draw(frame) 40 | 41 | new_state = life_step_2(old_state) 42 | for i in range(canvas_height): 43 | for j in range(canvas_width): 44 | if new_state[i][j] == 1: 45 | draw.point((j,i), fill = self.color) 46 | #frame[i][j] = self.color 47 | 48 | self.state = new_state 49 | 50 | while datetime.now() < end_time: 51 | pass 52 | 53 | return frame 54 | 55 | def life_step_2(X): 56 | """Game of life step using scipy tools""" 57 | nbrs_count = convolve2d(X, np.ones((3, 3)), mode='same', boundary='wrap') - X 58 | return (nbrs_count == 3) | (X & (nbrs_count == 2)) 59 | 60 | def getNumNeighbors(state, i, j): 61 | num_on = 0 62 | adjusted_i = i+1 if i+1 < canvas_height else 0 63 | adjusted_j = j+1 if j+1 < canvas_width else 0 64 | 65 | if state[i-1][j-1] == 1: 66 | num_on += 1 67 | if state[i-1][j] == 1: 68 | num_on += 1 69 | if state[i-1][adjusted_j] == 1: 70 | num_on += 1 71 | if state[i][j-1] == 1: 72 | num_on += 1 73 | if state[i][adjusted_j] == 1: 74 | num_on += 1 75 | if state[adjusted_i][j-1] == 1: 76 | num_on += 1 77 | if state[adjusted_i][j] == 1: 78 | num_on += 1 79 | if state[adjusted_i][adjusted_j] == 1: 80 | num_on += 1 81 | return num_on 82 | 83 | def generateRandomState(): 84 | init_state = np.zeros((canvas_height, canvas_width), dtype=int) 85 | for i in range(canvas_height): 86 | for j in range(canvas_width): 87 | init_state[i][j] = random.randint(0,1) 88 | return init_state 89 | 90 | def generateNewColor(): 91 | return (random.randint(50,255), random.randint(50,255), random.randint(50,255)) 92 | 93 | def fetchPattern(fileLocation): 94 | if not os.path.exists(fileLocation + ".npy"): 95 | convertImage(fileLocation) 96 | return np.load(fileLocation + ".npy") 97 | 98 | def convertImage(location): 99 | image = Image.open(location + '.png') 100 | width, height = image.size 101 | image_array = np.array(image.convert("RGB"), dtype=int) 102 | np.save(location + '.npy', (image_array[0:height,0:width,0]//255).astype('int32')) -------------------------------------------------------------------------------- /impl/apps_v2/weather.py: -------------------------------------------------------------------------------- 1 | from PIL import Image, ImageFont, ImageDraw 2 | import os 3 | import numpy as np 4 | import time 5 | from InputStatus import InputStatusEnum 6 | from datetime import datetime 7 | from dateutil import tz 8 | from ast import literal_eval 9 | 10 | class WeatherScreen: 11 | def __init__(self, config, modules, default_actions): 12 | self.modules = modules 13 | self.default_actions = default_actions 14 | self.font = ImageFont.truetype("fonts/tiny.otf", 5) 15 | 16 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 17 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 18 | self.icons = generateIconMap() 19 | 20 | self.text_color = literal_eval(config.get('Weather Screen', 'text_color', fallback="(255,255,255)")) 21 | self.low_color = literal_eval(config.get('Weather Screen', 'low_color', fallback="(255,255,255)")) 22 | self.high_color = literal_eval(config.get('Weather Screen', 'high_color', fallback="(255,255,255)")) 23 | 24 | def generate(self, isHorizontal, inputStatus): 25 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 26 | self.default_actions['toggle_display']() 27 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 28 | self.default_actions['switch_next_app']() 29 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 30 | self.default_actions['switch_prev_app']() 31 | 32 | frame = Image.new("RGB", (self.canvas_width, self.canvas_height), (0,0,0)) 33 | 34 | weather_module = self.modules['weather'] 35 | one_call = weather_module.getWeather() 36 | 37 | if one_call is not None: 38 | forecast = one_call.forecast_daily[0] 39 | rain = round(forecast.precipitation_probability*100) 40 | temps = forecast.temperature('fahrenheit') 41 | min_temp = round(temps['min']) 42 | max_temp = round(temps['max']) 43 | curr_temp = round(one_call.current.temperature('fahrenheit')['temp']) 44 | humidity = round(one_call.current.humidity) 45 | sunrise_timestamp = one_call.forecast_daily[0].sunrise_time() 46 | sunset_timestamp = one_call.forecast_daily[0].sunset_time() 47 | dtsr = datetime.fromtimestamp(sunrise_timestamp, tz=tz.tzlocal()) 48 | dtss = datetime.fromtimestamp(sunset_timestamp, tz=tz.tzlocal()) 49 | weather_icon_name = one_call.current.weather_icon_name 50 | 51 | draw = ImageDraw.Draw(frame) 52 | draw.text((3,3), str(min_temp), self.low_color, font=self.font) 53 | draw.text((13,3), str(curr_temp), self.text_color, font=self.font) 54 | draw.text((23,3), str(max_temp), self.high_color, font=self.font) 55 | 56 | draw.text((3,10), 'RAIN', self.text_color, font=self.font) 57 | draw.text((21,10), str(rain) + '%', self.text_color, font=self.font) 58 | 59 | draw.text((3,24), 'HUMIDITY', self.text_color, font=self.font) 60 | draw.text((37,24), str(humidity) + '%', self.text_color, font=self.font) 61 | 62 | currentTime = datetime.now(tz=tz.tzlocal()) 63 | if (currentTime.hour > dtsr.hour and currentTime.hour <= dtss.hour): 64 | draw.text((3,17), 'SET', self.text_color, font=self.font) 65 | hours = dtss.hour % 12 66 | if (hours == 0): 67 | hours += 12 68 | draw.text((17,17), str(hours) + ':' + convertToTwoDigits(dtss.minute), self.text_color, font=self.font) 69 | else: 70 | draw.text((3,17), 'RISE', self.text_color, font=self.font) 71 | hours = dtsr.hour % 12 72 | if (hours == 0): 73 | hours += 12 74 | draw.text((21,17), str(hours) + ':' + convertToTwoDigits(dtsr.minute), self.text_color, font=self.font) 75 | 76 | if weather_icon_name in self.icons: 77 | frame.paste(self.icons[weather_icon_name], (40,1)) 78 | 79 | return frame 80 | 81 | def generateIconMap(): 82 | icon_map = dict() 83 | for _, _, files in os.walk("apps_v2/res/weather"): 84 | for file in files: 85 | if file.endswith('.png'): 86 | icon_map[file[:-4]] = Image.open('apps_v2/res/weather/' + file).convert("RGB") 87 | return icon_map 88 | 89 | def convertToTwoDigits(num): 90 | if num < 10: 91 | return '0' + str(num) 92 | return str(num) -------------------------------------------------------------------------------- /impl/apps_v2/pomodoro.py: -------------------------------------------------------------------------------- 1 | from InputStatus import InputStatusEnum 2 | import time 3 | from datetime import timedelta, datetime 4 | from PIL import Image, ImageFont, ImageDraw 5 | 6 | class PomodoroScreen: 7 | def __init__(self, config, modules, default_actions): 8 | self.modules = modules 9 | self.default_actions = default_actions 10 | 11 | self.active = False 12 | self.font = ImageFont.truetype("fonts/tiny.otf", 5) 13 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 14 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 15 | 16 | self.work_duration = timedelta(minutes = 25) 17 | self.short_duration = timedelta(minutes = 5) 18 | self.long_duration = timedelta(minutes = 15) 19 | self.cycle_order = "WSWSWL" 20 | self.cycle_idx = 0 21 | self.status = '' 22 | 23 | self.time_left = None 24 | self.last_update_time = None 25 | 26 | def generate(self, isHorizontal, inputStatus): 27 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 28 | self.active = not self.active 29 | self.last_update_time = time.time() 30 | if self.active and self.time_left is None: 31 | status = self.cycle_order[self.cycle_idx] 32 | if status == 'W': 33 | self.status = "W" 34 | self.time_left = self.work_duration 35 | elif status == 'S': 36 | self.status = "S" 37 | self.time_left = self.short_duration 38 | elif status == 'L': 39 | self.status = "L" 40 | self.time_left = self.long_duration 41 | self.cycle_idx += 1 42 | if self.cycle_idx >= len(self.cycle_order): 43 | self.cycle_idx = 0 44 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 45 | self.default_actions['switch_next_app']() 46 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 47 | self.default_actions['switch_prev_app']() 48 | 49 | if self.active: 50 | self.time_left = self.time_left - timedelta(seconds = (time.time() - self.last_update_time)) 51 | self.last_update_time = time.time() 52 | 53 | if self.time_left <= timedelta(seconds=0): 54 | print("time is up") 55 | self.active = False 56 | self.time_left = None 57 | self.last_update_time = None 58 | 59 | # if isHorizontal: 60 | # frame = Image.new("RGB", (self.canvas_width, self.canvas_height), (0,0,0)) 61 | # draw = ImageDraw.Draw(frame) 62 | 63 | # if self.time_left is not None: 64 | # minutes, seconds = divmod(self.time_left.total_seconds(), 60) 65 | # time_str = str(int(round(minutes))) + "m " + str(int(round(seconds))) + "s" 66 | # draw.text((0,0), time_str, (255,255,255), font=self.font) 67 | 68 | # if self.status != '': 69 | # draw.text((0,7), self.status, (255,255,255), font=self.font) 70 | # else: 71 | # if self.status != '': 72 | # draw.text((0,7), self.status + " is Over", (255,255,255), font=self.font) 73 | # else: 74 | bg_color = (255,126,109) 75 | if self.status == "W": 76 | bg_color = (255,126,109) 77 | elif self.status == "S": 78 | bg_color = (142,202,255) 79 | elif self.status == "L": 80 | bg_color = (43,156,255) 81 | 82 | frame = Image.new("RGB", (self.canvas_height, self.canvas_width), bg_color) 83 | draw = ImageDraw.Draw(frame) 84 | 85 | if self.status != '': 86 | if self.status == "W": 87 | draw.text((1,7), 'Work', (255,255,255), font=self.font) 88 | elif self.status == "S": 89 | draw.text((1,7), 'Short', (255,255,255), font=self.font) 90 | draw.text((1,13), 'Break', (255,255,255), font=self.font) 91 | elif self.status == "L": 92 | draw.text((1,7), 'Long', (255,255,255), font=self.font) 93 | draw.text((1,13), 'Break', (255,255,255), font=self.font) 94 | 95 | if self.time_left is None: 96 | y_loc = 19 97 | if self.status == "W": 98 | y_loc = 13 99 | draw.text((1, y_loc), "Is Over", (255,255,255), font=self.font) 100 | else: 101 | minutes, seconds = divmod(self.time_left.total_seconds(), 60) 102 | time_str = str(int(round(minutes))) + "m " + str(int(round(seconds))) + "s" 103 | draw.text((1,1), time_str, (255,255,255), font=self.font) 104 | else: 105 | draw.text((0,10), "POMODORO", (255,255,255), font=self.font) 106 | draw.text((7,26), "PRESS", (255,255,255), font=self.font) 107 | draw.text((13,32), "TO", (255,255,255), font=self.font) 108 | draw.text((7,38), "START", (255,255,255), font=self.font) 109 | 110 | frame = frame.rotate(90, expand=True) 111 | 112 | 113 | return frame 114 | 115 | 116 | -------------------------------------------------------------------------------- /impl/modules/spotify_module.py: -------------------------------------------------------------------------------- 1 | import spotipy 2 | import os 3 | 4 | class SpotifyModule: 5 | def __init__(self, config): 6 | self.invalid = False 7 | 8 | if config is not None and 'Spotify' in config and 'client_id' in config['Spotify'] \ 9 | and 'client_secret' in config['Spotify'] and 'redirect_uri' in config['Spotify']: 10 | 11 | client_id = config['Spotify']['client_id'] 12 | client_secret = config['Spotify']['client_secret'] 13 | redirect_uri = config['Spotify']['redirect_uri'] 14 | if client_id is not "" and client_secret is not "" and redirect_uri is not "": 15 | try: 16 | os.environ["SPOTIPY_CLIENT_ID"] = client_id 17 | os.environ["SPOTIPY_CLIENT_SECRET"] = client_secret 18 | os.environ["SPOTIPY_REDIRECT_URI"] = redirect_uri 19 | 20 | scope = "user-read-currently-playing, user-read-playback-state, user-modify-playback-state" 21 | self.auth_manager = spotipy.SpotifyOAuth(scope=scope) 22 | print(self.auth_manager.get_authorize_url()) 23 | self.sp = spotipy.Spotify(auth_manager=self.auth_manager, requests_timeout=10) 24 | self.isPlaying = False 25 | except Exception as e: 26 | print(e) 27 | self.invalid = True 28 | else: 29 | print("[Spotify Module] Empty Spotify client id or secret") 30 | self.invalid = True 31 | else: 32 | print("[Spotify Module] Missing config parameters") 33 | self.invalid = True 34 | 35 | def isInvalid(self): 36 | return self.invalid 37 | 38 | def getCurrentPlayback(self): 39 | if self.invalid: 40 | return None 41 | 42 | try: 43 | track = self.sp.current_user_playing_track() 44 | if (track is not None): 45 | if (track['item'] is None): 46 | artist = None 47 | title = None 48 | art_url = None 49 | else: 50 | artist = track['item']['artists'][0]['name'] 51 | if len(track['item']['artists']) >= 2: 52 | artist = artist + ", " + track['item']['artists'][1]['name'] 53 | title = track['item']['name'] 54 | art_url = track['item']['album']['images'][0]['url'] 55 | self.isPlaying = track['is_playing'] 56 | return (artist, title, art_url, self.isPlaying, track["progress_ms"], track["item"]["duration_ms"]) 57 | else: 58 | return None 59 | except Exception as e: 60 | print(e) 61 | return None 62 | 63 | def resume_playback(self): 64 | if not self.invalid: 65 | try: 66 | self.sp.start_playback() 67 | except spotipy.exceptions.SpotifyException: 68 | print('no active, trying specific device') 69 | devices = self.sp.devices() 70 | if 'devices' in devices and len(devices['devices']) > 0: 71 | try: 72 | self.sp.start_playback(device_id = devices['devices'][0]['id']) 73 | except Exception as e: 74 | print(e) 75 | except Exception as e: 76 | print(e) 77 | 78 | def pause_playback(self): 79 | if not self.invalid: 80 | try: 81 | self.sp.pause_playback() 82 | except spotipy.exceptions.SpotifyException: 83 | print('problem pausing') 84 | except Exception as e: 85 | print(e) 86 | 87 | def next_track(self): 88 | if not self.invalid: 89 | try: 90 | self.sp.next_track() 91 | except spotipy.exceptions.SpotifyException: 92 | print('no active, trying specific device') 93 | devices = self.sp.devices() 94 | if 'devices' in devices and len(devices['devices']) > 0: 95 | self.sp.next_track(device_id = devices['devices'][0]['id']) 96 | except Exception as e: 97 | print(e) 98 | 99 | def previous_track(self): 100 | if not self.invalid: 101 | try: 102 | self.sp.previous_track() 103 | except spotipy.exceptions.SpotifyException: 104 | print('no active, trying specific device') 105 | devices = self.sp.devices() 106 | if 'devices' in devices and len(devices['devices']) > 0: 107 | self.sp.previous_track(device_id = devices['devices'][0]['id']) 108 | except Exception as e: 109 | print(e) 110 | 111 | def increase_volume(self): 112 | if not self.invalid and self.isPlaying: 113 | try: 114 | devices = self.sp.devices() 115 | curr_volume = devices['devices'][0]['volume_percent'] 116 | self.sp.volume(min(100, curr_volume + 5)) 117 | except Exception as e: 118 | print(e) 119 | 120 | def decrease_volume(self): 121 | if not self.invalid and self.isPlaying: 122 | try: 123 | devices = self.sp.devices() 124 | curr_volume = devices['devices'][0]['volume_percent'] 125 | self.sp.volume(max(0, curr_volume - 5)) 126 | except Exception as e: 127 | print(e) -------------------------------------------------------------------------------- /impl/apps_v2/spotify_player.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from PIL import Image, ImageFont, ImageDraw 3 | import requests 4 | from io import BytesIO 5 | from InputStatus import InputStatusEnum 6 | from ast import literal_eval 7 | 8 | class SpotifyScreen: 9 | def __init__(self, config, modules, default_actions): 10 | self.modules = modules 11 | self.default_actions = default_actions 12 | 13 | self.font = ImageFont.truetype("fonts/tiny.otf", 5) 14 | 15 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 16 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 17 | self.title_color = literal_eval(config.get('Spotify Player', 'title_color',fallback="(255,255,255)")) 18 | self.artist_color = literal_eval(config.get('Spotify Player', 'artist_color',fallback="(255,255,255)")) 19 | self.play_color = literal_eval(config.get('Spotify Player', 'play_color',fallback="(255,255,255)")) 20 | 21 | self.current_art_url = '' 22 | self.current_art_img = None 23 | self.current_title = '' 24 | self.current_artist = '' 25 | 26 | self.title_animation_cnt = 0 27 | self.artist_animation_cnt = 0 28 | 29 | self.is_playing = False 30 | self.control_mode = False 31 | 32 | def generate(self, isHorizontal, inputStatus): 33 | if (inputStatus is InputStatusEnum.LONG_PRESS): 34 | self.control_mode = not self.control_mode 35 | 36 | spotify_module = self.modules['spotify'] 37 | 38 | if not self.control_mode: 39 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 40 | self.default_actions['toggle_display']() 41 | self.title_animation_cnt = 0 42 | self.artist_animation_cnt = 0 43 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 44 | self.default_actions['switch_next_app']() 45 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 46 | self.default_actions['switch_prev_app']() 47 | else: 48 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 49 | if self.is_playing: 50 | spotify_module.pause_playback() 51 | else: 52 | spotify_module.resume_playback() 53 | elif (inputStatus is InputStatusEnum.DOUBLE_PRESS): 54 | spotify_module.next_track() 55 | elif (inputStatus is InputStatusEnum.TRIPLE_PRESS): 56 | spotify_module.previous_track() 57 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE and self.is_playing): 58 | spotify_module.increase_volume() 59 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE and self.is_playing): 60 | spotify_module.decrease_volume() 61 | 62 | response = spotify_module.getCurrentPlayback() 63 | if response is not None: 64 | (artist,title,art_url,self.is_playing, progress_ms, duration_ms) = response 65 | 66 | if (self.current_title != title or self.current_artist != artist): 67 | self.current_artist = artist 68 | self.current_title = title 69 | self.title_animation_cnt = 0 70 | self.artist_animation_cnt = 0 71 | if self.current_art_url != art_url: 72 | self.current_art_url = art_url 73 | 74 | response = requests.get(self.current_art_url) 75 | img = Image.open(BytesIO(response.content)) 76 | self.current_art_img = img.resize((self.canvas_height, self.canvas_height), resample=Image.LANCZOS) 77 | 78 | frame = Image.new("RGB", (self.canvas_width, self.canvas_height), (0,0,0)) 79 | draw = ImageDraw.Draw(frame) 80 | 81 | draw.line((38,15,58,15), fill=(100,100,100)) 82 | draw.line((38,15,38+round(((progress_ms / duration_ms) * 100) // 5),15), fill=(180,180,180)) 83 | 84 | title_len = self.font.getsize(self.current_title)[0] 85 | if title_len > 31: 86 | spacer = " " 87 | draw.text((34-self.title_animation_cnt, 0), self.current_title + spacer + self.current_title, self.title_color, font = self.font) 88 | self.title_animation_cnt += 1 89 | if self.title_animation_cnt == self.font.getsize(self.current_title + spacer)[0]: 90 | self.title_animation_cnt = 0 91 | else: 92 | draw.text((34-self.title_animation_cnt, 0), self.current_title, self.title_color, font = self.font) 93 | 94 | artist_len = self.font.getsize(self.current_artist)[0] 95 | if artist_len > 31: 96 | spacer = " " 97 | draw.text((34-self.artist_animation_cnt, 7), self.current_artist + spacer + self.current_artist, self.artist_color, font = self.font) 98 | self.artist_animation_cnt += 1 99 | if self.artist_animation_cnt == self.font.getsize(self.current_artist + spacer)[0]: 100 | self.artist_animation_cnt = 0 101 | else: 102 | draw.text((34-self.artist_animation_cnt, 7), self.current_artist, self.artist_color, font = self.font) 103 | 104 | draw.rectangle((32,0,33,32), fill=(0,0,0)) 105 | 106 | if self.current_art_img is not None: 107 | frame.paste(self.current_art_img, (0,0)) 108 | 109 | drawPlayPause(draw, self.control_mode, self.is_playing, self.play_color) 110 | 111 | return frame 112 | else: 113 | #not active 114 | frame = Image.new("RGB", (self.canvas_width, self.canvas_height), (0,0,0)) 115 | draw = ImageDraw.Draw(frame) 116 | self.current_art_url = '' 117 | self.is_playing = False 118 | drawPlayPause(draw, self.control_mode, self.is_playing, self.play_color) 119 | draw.text((0,3), "No Devices", self.title_color, font = self.font) 120 | draw.text((0,10), "Currently Active", self.title_color, font = self.font) 121 | 122 | return frame 123 | 124 | def drawPlayPause(draw, control_mode, is_playing, color): 125 | if control_mode: 126 | if not is_playing: 127 | draw.line((45,19,45,25), fill = color) 128 | draw.line((46,20,46,24), fill = color) 129 | draw.line((47,20,47,24), fill = color) 130 | draw.line((48,21,48,23), fill = color) 131 | draw.line((49,21,49,23), fill = color) 132 | draw.line((50,22,50,22), fill = color) 133 | else: 134 | draw.line((45,19,45,25), fill = color) 135 | draw.line((46,19,46,25), fill = color) 136 | draw.line((49,19,49,25), fill = color) 137 | draw.line((50,19,50,25), fill = color) 138 | 139 | -------------------------------------------------------------------------------- /impl/controller_v3.py: -------------------------------------------------------------------------------- 1 | import queue 2 | import math, sys, os, time, copy, inspect 3 | from InputStatus import InputStatusEnum 4 | try: 5 | from gpiozero import Button, RotaryEncoder 6 | except: 7 | class Button: 8 | def __init__(self, num, pull_up=False): 9 | self.num = num 10 | self.pull_up = pull_up 11 | self.when_pressed = lambda : None 12 | self.when_pressed = lambda : None 13 | class RotaryEncoder: 14 | def __init__(self, encoding1, encoding2): 15 | self.encoding1 = encoding1 16 | self.encoding2 = encoding2 17 | self.when_rotated_clockwise = lambda : None 18 | self.when_rotated_counter_clockwise = lambda : None 19 | import configparser 20 | from PIL import Image 21 | 22 | import select 23 | 24 | from apps_v2 import main_screen, notion_v2, subcount, gif_viewer, weather, life, spotify_player 25 | from modules import weather_module, notification_module, spotify_module 26 | 27 | sw = 13 28 | enc_A = 5 29 | enc_B = 6 30 | tilt = 19 31 | 32 | def main(): 33 | brightness = 100 34 | displayOn = True 35 | 36 | config = configparser.ConfigParser() 37 | parsed_configs = config.read('../config.ini') 38 | if len(parsed_configs) == 0: 39 | print("no config file found") 40 | sys.exit() 41 | 42 | canvas_width = config.getint('System', 'canvas_width', fallback=64) 43 | canvas_height = config.getint('System', 'canvas_height', fallback=32) 44 | 45 | black_screen = Image.new("RGB", (canvas_width, canvas_height), (0,0,0)) 46 | 47 | encButton = Button(sw, pull_up = True) 48 | inputStatusDict = {"value" : InputStatusEnum.NOTHING} 49 | encButton.when_pressed = lambda button : encButtonFunc(button, inputStatusDict) 50 | 51 | encoderQueue = queue.Queue() 52 | encoder = RotaryEncoder(enc_A, enc_B) 53 | encoder.when_rotated_clockwise = lambda enc : rotate_clockwise(enc, encoderQueue) 54 | encoder.when_rotated_counter_clockwise = lambda enc : rotate_counter_clockwise(enc, encoderQueue) 55 | encoder_state = 0 56 | 57 | tilt_switch = Button(tilt, pull_up = True) 58 | isHorizontalDict = {'value': True} 59 | tilt_switch.when_pressed = lambda button : tilt_callback(button, isHorizontalDict) 60 | tilt_switch.when_released = lambda button : tilt_callback(button, isHorizontalDict) 61 | 62 | def toggle_display(): 63 | nonlocal displayOn 64 | displayOn = not displayOn 65 | print("Display On: " + str(displayOn)) 66 | 67 | def increase_brightness(): 68 | nonlocal brightness 69 | brightness = min(100, brightness + 5) 70 | 71 | def decrease_brightness(): 72 | nonlocal brightness 73 | brightness = max(0, brightness - 5) 74 | 75 | current_app_idx = 0 76 | def switch_next_app(): 77 | nonlocal current_app_idx 78 | current_app_idx += 1 79 | 80 | def switch_prev_app(): 81 | nonlocal current_app_idx 82 | current_app_idx -= 1 83 | 84 | callbacks = { 85 | 'toggle_display' : toggle_display, 86 | 'increase_brightness' : increase_brightness, 87 | 'decrease_brightness' : decrease_brightness, 88 | 'switch_next_app' : switch_next_app, 89 | 'switch_prev_app' : switch_prev_app 90 | } 91 | 92 | modules = { 93 | 'weather' : weather_module.WeatherModule(config), 94 | 'notifications' : notification_module.NotificationModule(config), 95 | 'spotify' : spotify_module.SpotifyModule(config) 96 | } 97 | 98 | app_list = [main_screen.MainScreen(config, modules, callbacks), 99 | # notion_v2.NotionScreen(config, modules, callbacks), 100 | # weather.WeatherScreen(config, modules, callbacks), 101 | # subcount.SubcountScreen(config, modules, callbacks), 102 | gif_viewer.GifScreen(config, modules, callbacks), 103 | life.GameOfLifeScreen(config, modules, callbacks)] 104 | 105 | currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) 106 | parentdir = os.path.dirname(currentdir) 107 | sys.path.append(parentdir+"/rpi-rgb-led-matrix/bindings/python") 108 | try: 109 | from rgbmatrix import RGBMatrix, RGBMatrixOptions 110 | except ImportError: 111 | from RGBMatrixEmulator import RGBMatrix, RGBMatrixOptions 112 | 113 | options = RGBMatrixOptions() 114 | options.rows = 32 115 | options.cols = 64 116 | options.chain_length = 1 117 | options.parallel = 1 118 | options.brightness = brightness 119 | options.pixel_mapper_config = "U-mapper;Rotate:180" 120 | options.gpio_slowdown = 1 121 | options.pwm_lsb_nanoseconds = 80 122 | options.limit_refresh_rate_hz = 150 123 | options.hardware_mapping = 'regular' # If you have an Adafruit HAT: 'adafruit-hat' 124 | options.drop_privileges = False 125 | matrix = RGBMatrix(options = options) 126 | 127 | rotation_time = math.floor(time.time()) 128 | while(True): 129 | while (not encoderQueue.empty()): 130 | encoder_state += encoderQueue.get() 131 | if (encoder_state > 1): 132 | print("encoder increased") 133 | inputStatusDict['value'] = InputStatusEnum.ENCODER_INCREASE 134 | encoder_state = 0 135 | elif (encoder_state < -1): 136 | print("encoder decreased") 137 | inputStatusDict['value'] = InputStatusEnum.ENCODER_DECREASE 138 | encoder_state = 0 139 | 140 | inputStatusSnapshot = copy.copy(inputStatusDict['value']) 141 | inputStatusDict['value'] = InputStatusEnum.NOTHING 142 | 143 | isHorizontalSnapshot = copy.copy(isHorizontalDict['value']) 144 | 145 | new_rotation_time = math.floor(time.time()) 146 | if new_rotation_time % 10 == 0 and new_rotation_time - rotation_time >= 10: 147 | current_app_idx += 1 148 | rotation_time = new_rotation_time 149 | 150 | frame = app_list[current_app_idx % len(app_list)].generate(isHorizontalSnapshot, inputStatusSnapshot) 151 | if not displayOn: 152 | frame = black_screen 153 | 154 | #matrix.brightness = 100 155 | matrix.SetImage(frame) 156 | time.sleep(0.05) 157 | 158 | def encButtonFunc(enc_button, inputStatusDict): 159 | start_time = time.time() 160 | time_diff = 0 161 | hold_time = 1 162 | 163 | while enc_button.is_active and (time_diff < hold_time): 164 | time_diff = time.time() - start_time 165 | 166 | if (time_diff >= hold_time): 167 | print("long press detected") 168 | inputStatusDict['value'] = InputStatusEnum.LONG_PRESS 169 | else: 170 | enc_button.when_pressed = None 171 | start_time = time.time() 172 | while (time.time() - start_time <= 0.3): 173 | time.sleep(0.1) 174 | if (enc_button.is_pressed): 175 | time.sleep(0.1) 176 | new_start_time = time.time() 177 | while (time.time() - new_start_time <= 0.3): 178 | time.sleep(0.1) 179 | if (enc_button.is_pressed): 180 | print("triple press detected") 181 | inputStatusDict['value'] = InputStatusEnum.TRIPLE_PRESS 182 | enc_button.when_pressed = lambda button : encButtonFunc(button, inputStatusDict) 183 | return 184 | print("double press detected") 185 | inputStatusDict['value'] = InputStatusEnum.DOUBLE_PRESS 186 | enc_button.when_pressed = lambda button : encButtonFunc(button, inputStatusDict) 187 | return 188 | print("single press detected") 189 | inputStatusDict['value'] = InputStatusEnum.SINGLE_PRESS 190 | enc_button.when_pressed = lambda button : encButtonFunc(button, inputStatusDict) 191 | return 192 | 193 | def rotate_clockwise(encoder, encoderQueue): 194 | encoderQueue.put(1) 195 | encoder.value = 0 196 | 197 | def rotate_counter_clockwise(encoder, encoderQueue): 198 | encoderQueue.put(-1) 199 | encoder.value = 0 200 | 201 | def tilt_callback(tilt_switch, isHorizontalDict): 202 | startTime = time.time() 203 | while (time.time() - startTime < 0.25): 204 | pass 205 | isHorizontalDict['value'] = tilt_switch.is_pressed 206 | 207 | def reduceFrameToString(frame): 208 | res = frame.flatten() 209 | return ' '.join(map(str, res)) 210 | 211 | if __name__ == '__main__': 212 | try: 213 | main() 214 | except KeyboardInterrupt: 215 | print('Interrupted with Ctrl-C') 216 | sys.exit(0) 217 | -------------------------------------------------------------------------------- /impl/apps_v2/notion_v2.py: -------------------------------------------------------------------------------- 1 | import time 2 | from PIL import Image, ImageFont, ImageDraw 3 | import threading 4 | from queue import LifoQueue 5 | from InputStatus import InputStatusEnum 6 | import requests, json 7 | from datetime import date 8 | from datetime import timedelta 9 | from ast import literal_eval 10 | 11 | class NotionScreen: 12 | def __init__(self, config, modules, default_actions): 13 | self.modules = modules 14 | self.default_actions = default_actions 15 | 16 | self.font = ImageFont.truetype("fonts/tiny.otf", 5) 17 | self.queue = LifoQueue() 18 | self.tasks = None 19 | self.animation_cnt = [0,0,0,0,0] 20 | 21 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 22 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 23 | 24 | notion_token = config.get('Notion', 'token', fallback=None) 25 | notion_database_id = config.get('Notion', 'database_id', fallback=None) 26 | 27 | self.text_color = literal_eval(config.get('Notion', 'text_color',fallback="(255,255,255)")) 28 | self.todo_color = literal_eval(config.get('Notion', 'todo_color',fallback="(255,100,140)")) 29 | self.doing_color = literal_eval(config.get('Notion', 'doing_color',fallback="(255,202,0)")) 30 | 31 | self.paused = False 32 | 33 | if notion_token is None or notion_database_id is None: 34 | print("[Notion] Notion token and/or databaseID is not specified in config") 35 | else: 36 | threading.Thread(target=fetchNotionAsync, args=(self.queue, notion_token, notion_database_id)).start() 37 | 38 | def generate(self, isHorizontal, inputStatus): 39 | while not self.queue.empty(): 40 | new_tasks = self.queue.get() 41 | if (self.tasks != new_tasks): 42 | self.tasks = new_tasks 43 | self.queue.queue.clear() 44 | self.animation_cnt = [0,0,0,0,0,0,0,0,0,0] 45 | 46 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 47 | self.paused = not self.paused 48 | self.animation_cnt = [0,0,0,0,0,0,0,0,0,0] 49 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 50 | self.default_actions['switch_next_app']() 51 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 52 | self.default_actions['switch_prev_app']() 53 | 54 | frame = None 55 | if isHorizontal: 56 | frame = Image.new("RGB", (self.canvas_width, self.canvas_height), (0,0,0)) 57 | draw = ImageDraw.Draw(frame) 58 | 59 | if self.tasks is None or len(self.tasks) == 0: 60 | draw.text((0, 0), "NO TASKS YET.", self.text_color, font = self.font) 61 | else: 62 | for i in range(len(self.tasks[0:5])): 63 | task_desc = self.tasks[i]["properties"]["Name"]["title"][0]["plain_text"].upper() 64 | task_desc_len = self.font.getsize(self.tasks[i]["properties"]["Name"]["title"][0]["plain_text"].upper())[0] 65 | 66 | if task_desc_len >= self.canvas_width - 3: 67 | spacer = " " 68 | draw.text((3-self.animation_cnt[i], 6*i), task_desc + spacer + task_desc, self.text_color, font=self.font) 69 | if not self.paused: 70 | self.animation_cnt[i] += 1 71 | if self.animation_cnt[i] == self.font.getsize(self.tasks[i]["properties"]["Name"]["title"][0]["plain_text"].upper() + spacer)[0]: 72 | self.animation_cnt[i] = 0 73 | else: 74 | draw.text((3, 6*i), task_desc, self.text_color, font=self.font) 75 | 76 | task_status = self.tasks[i]["properties"]["Status"]["select"]["name"] 77 | if task_status == 'To Do': 78 | status_color = self.todo_color 79 | elif task_status == 'Doing': 80 | status_color = self.doing_color 81 | else: 82 | status_color = (0,0,0) 83 | 84 | draw.rectangle((0, 6*i, 1, 6*i+4), fill=status_color) 85 | draw.rectangle((2, 6*i, 2, 6*i+4), fill=(0,0,0)) 86 | else: 87 | frame = Image.new("RGB", (self.canvas_height, self.canvas_width), (0,0,0)) 88 | draw = ImageDraw.Draw(frame) 89 | 90 | if self.tasks is None or len(self.tasks) == 0: 91 | draw.text((0, 26), "NO TASKS", self.text_color, font = self.font) 92 | else: 93 | for i in range(len(self.tasks[0:9])): 94 | task_desc = self.tasks[i]["properties"]["Name"]["title"][0]["plain_text"].upper() 95 | task_desc_len = self.font.getsize(self.tasks[i]["properties"]["Name"]["title"][0]["plain_text"].upper())[0] 96 | 97 | if task_desc_len >= self.canvas_height - 3: 98 | spacer = " " 99 | draw.text((3-self.animation_cnt[i], 6*i), task_desc + spacer + task_desc, self.text_color, font=self.font) 100 | if not self.paused: 101 | self.animation_cnt[i] += 1 102 | if self.animation_cnt[i] == self.font.getsize(self.tasks[i]["properties"]["Name"]["title"][0]["plain_text"].upper() + spacer)[0]: 103 | self.animation_cnt[i] = 0 104 | else: 105 | draw.text((3, 6*i), task_desc, self.text_color, font=self.font) 106 | 107 | task_status = self.tasks[i]["properties"]["Status"]["select"]["name"] 108 | if task_status == 'To Do': 109 | status_color = self.todo_color 110 | elif task_status == 'Doing': 111 | status_color = self.doing_color 112 | else: 113 | status_color = (0,0,0) 114 | 115 | draw.rectangle((0, 6*i, 1, 6*i+4), fill=status_color) 116 | draw.rectangle((2, 6*i, 2, 6*i+4), fill=(0,0,0)) 117 | 118 | frame = frame.rotate(angle=90, expand=True) 119 | return frame 120 | 121 | 122 | def fetchNotionAsync(queue, token, databaseID): 123 | headers = { 124 | "Authorization" : "Bearer " + token, 125 | "Notion-Version" : "2021-08-16", 126 | "Content-Type" : "application/json" 127 | } 128 | queryURL = f"https://api.notion.com/v1/databases/{databaseID}/query" 129 | 130 | while True: 131 | yesterday = date.today() - timedelta(days=1) 132 | week_from_now = date.today() + timedelta(days=7) 133 | 134 | query_params = { 135 | "sorts" : [ 136 | { 137 | "property" : "Date Due", 138 | "timestamp" : "created_time", 139 | "direction" : "ascending" 140 | }, 141 | ], 142 | "filter" : { 143 | "or" : [ 144 | { 145 | "and" : [ 146 | { 147 | "property" : "Date Due", 148 | "date" : { 149 | "on_or_before" : week_from_now.isoformat() 150 | } 151 | }, 152 | { 153 | "property" : "Status", 154 | "select" : { 155 | "equals" : "Doing" 156 | } 157 | } 158 | ] 159 | }, 160 | { 161 | "and" : [ 162 | { 163 | "property" : "Date Due", 164 | "date" : { 165 | "on_or_before" : week_from_now.isoformat() 166 | } 167 | }, 168 | { 169 | "property" : "Status", 170 | "select" : { 171 | "equals" : "To Do" 172 | } 173 | } 174 | ] 175 | }, 176 | { 177 | "property" : "Status", 178 | "select" : { 179 | "equals" : "Unassigned" 180 | } 181 | }, 182 | { 183 | "property" : "Date Due", 184 | "date" : { 185 | "on_or_after" : yesterday.isoformat() 186 | } 187 | } 188 | ] 189 | } 190 | } 191 | 192 | res = requests.request("POST", queryURL, headers=headers, data = json.dumps(query_params)) 193 | if res.status_code is not 200: 194 | print("[Notion] Status Returned is " + str(res.status_code)) 195 | print(res.json()) 196 | else: 197 | tasks = res.json()["results"] 198 | queue.put(tasks) 199 | time.sleep(30) 200 | 201 | -------------------------------------------------------------------------------- /impl/apps_v2/main_screen.py: -------------------------------------------------------------------------------- 1 | from InputStatus import InputStatusEnum 2 | from PIL import Image, ImageFont, ImageDraw 3 | from datetime import datetime 4 | from dateutil import tz 5 | import time 6 | import threading 7 | 8 | from apps_v2 import pomodoro 9 | 10 | light_pink = (255,219,218) 11 | dark_pink = (219,127,142) 12 | white = (230,255,255) 13 | 14 | salmon = (255,150,162) 15 | tan = (255,205,178) 16 | orange_tinted_white = (248,237,235) 17 | 18 | washed_out_navy = (109,104,117) 19 | 20 | discordColor = (150,170,255) 21 | messengerColor = (60, 220, 255) 22 | snapchatColor = (255, 252, 0) 23 | smsColor = (110, 255, 140) 24 | 25 | spotify_color = (0,255,0) 26 | 27 | class MainScreen: 28 | def __init__(self, config, modules, default_actions): 29 | self.font = ImageFont.truetype("fonts/tiny.otf", 5) 30 | self.modules = modules 31 | self.default_actions = default_actions 32 | 33 | self.canvas_width = config.getint('System', 'canvas_width', fallback=64) 34 | self.canvas_height = config.getint('System', 'canvas_height', fallback=32) 35 | self.cycle_time = config.getint('Main Screen', 'cycle_time', fallback=20) 36 | self.use_24_hour = config.getboolean('Main Screen', 'use_24_hour', fallback=False) 37 | 38 | self.vertical = pomodoro.PomodoroScreen(config, modules, default_actions) 39 | 40 | self.lastGenerateCall = None 41 | self.on_cycle = True 42 | 43 | self.bgs = {'sakura' : Image.open('apps_v2/res/main_screen/sakura-bg.png').convert("RGB"), 44 | 'cloud' : Image.open('apps_v2/res/main_screen/cloud-bg-clear.png').convert("RGBA"), 45 | 'forest' : Image.open('apps_v2/res/main_screen/forest-bg.png').convert("RGB")} 46 | self.theme_list = [self.generateSakura, self.generateCloud, self.generateForest] 47 | 48 | self.currentIdx = 0 49 | self.selectMode = False 50 | 51 | self.old_noti_list = [] 52 | self.queued_frames = [] 53 | 54 | def generate(self, isHorizontal, inputStatus): 55 | if not isHorizontal: 56 | return self.vertical.generate(isHorizontal, inputStatus) 57 | 58 | if (inputStatus == InputStatusEnum.LONG_PRESS): 59 | self.selectMode = not self.selectMode 60 | 61 | if self.selectMode: 62 | if (inputStatus is InputStatusEnum.ENCODER_INCREASE): 63 | self.currentIdx += 1 64 | self.queued_frames = [] 65 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 66 | self.currentIdx -= 1 67 | self.queued_frames = [] 68 | else: 69 | if (inputStatus is InputStatusEnum.SINGLE_PRESS): 70 | self.default_actions['toggle_display']() 71 | elif (inputStatus is InputStatusEnum.ENCODER_INCREASE): 72 | self.default_actions['switch_next_app']() 73 | elif (inputStatus is InputStatusEnum.ENCODER_DECREASE): 74 | self.default_actions['switch_prev_app']() 75 | 76 | if (self.lastGenerateCall == None): 77 | self.lastGenerateCall = time.time() 78 | if (time.time() - self.lastGenerateCall >= self.cycle_time): 79 | self.on_cycle = not self.on_cycle 80 | self.lastGenerateCall = time.time() 81 | 82 | frame = self.theme_list[self.currentIdx % len(self.theme_list)]() 83 | 84 | if (self.selectMode): 85 | draw = ImageDraw.Draw(frame) 86 | draw.rectangle((0,0,self.canvas_width-1,self.canvas_height-1), outline=white) 87 | 88 | return frame 89 | 90 | def generateSakura(self): 91 | currentTime = datetime.now(tz=tz.tzlocal()) 92 | month = currentTime.month 93 | day = currentTime.day 94 | dayOfWeek = currentTime.weekday() + 1 95 | hours = currentTime.hour 96 | if not self.use_24_hour: 97 | hours = hours % 12 98 | if (hours == 0): 99 | hours += 12 100 | minutes = currentTime.minute 101 | 102 | frame = self.bgs['sakura'].copy() 103 | draw = ImageDraw.Draw(frame) 104 | 105 | draw.text((3, 6), padToTwoDigit(hours), light_pink, font=self.font) 106 | draw.text((10, 6), ":", light_pink, font=self.font) 107 | draw.text((13, 6), padToTwoDigit(minutes), light_pink, font=self.font) 108 | 109 | if (self.on_cycle): 110 | #date 111 | draw.text((23, 6), padToTwoDigit(month), dark_pink, font=self.font) 112 | draw.text((30, 6), ".", dark_pink, font=self.font) 113 | draw.text((33, 6), padToTwoDigit(day), dark_pink, font=self.font) 114 | else: 115 | #dayOfWeek 116 | draw.text((23, 6), padToTwoDigit(dayOfWeek), dark_pink, font=self.font) 117 | #weather 118 | weather = self.modules['weather'] 119 | one_call = weather.getWeather() 120 | if (one_call != None): 121 | curr_temp = round(one_call.current.temperature('fahrenheit')['temp']) 122 | draw.text((33, 6), padToTwoDigit(curr_temp), white, font=self.font) 123 | draw.point((41,6), fill=white) 124 | 125 | #notifications 126 | noti_list = self.modules['notifications'].getNotificationList() 127 | counts = countList(noti_list) 128 | 129 | if (counts['Discord'] > 0): 130 | draw.rectangle((37,26,38,27), fill=discordColor) 131 | if (counts['SMS'] > 0): 132 | draw.rectangle((34,26,35,27), fill=smsColor) 133 | if (counts['Snapchat'] > 0): 134 | draw.rectangle((34,29,35,30), fill=snapchatColor) 135 | if (counts['Messenger'] > 0): 136 | draw.rectangle((37,29,38,30), fill=messengerColor) 137 | 138 | self.old_noti_list = noti_list 139 | 140 | return frame 141 | 142 | def generateCloud(self): 143 | currentTime = datetime.now(tz=tz.tzlocal()) 144 | month = currentTime.month 145 | day = currentTime.day 146 | hours = currentTime.hour 147 | if not self.use_24_hour: 148 | hours = hours % 12 149 | if (hours == 0): 150 | hours += 12 151 | minutes = currentTime.minute 152 | seconds = currentTime.second 153 | 154 | noti_list = self.modules['notifications'].getNotificationList() 155 | 156 | threading.Thread(target=generateNotiFramesAsync, 157 | args=(self.queued_frames, noti_list, self.old_noti_list.copy(), self.font, self.canvas_width, self.canvas_height)).start() 158 | 159 | self.old_noti_list = noti_list.copy() 160 | 161 | if len(self.queued_frames) == 0: 162 | frame = Image.new('RGBA',(self.canvas_width, self.canvas_height),washed_out_navy) 163 | else: 164 | frame = self.queued_frames.pop(0) 165 | draw = ImageDraw.Draw(frame) 166 | 167 | frame.paste(self.bgs['cloud'], (0,0), self.bgs['cloud']) 168 | 169 | time_x_off = 2 170 | time_y_off = 25 171 | draw.text((time_x_off, time_y_off), padToTwoDigit(hours), orange_tinted_white, font=self.font) 172 | draw.text((time_x_off+7, time_y_off), ":", orange_tinted_white, font=self.font) 173 | draw.text((time_x_off+10, time_y_off), padToTwoDigit(minutes), orange_tinted_white, font=self.font) 174 | draw.text((time_x_off+17, time_y_off), ":", orange_tinted_white, font=self.font) 175 | draw.text((time_x_off+20, time_y_off), padToTwoDigit(seconds), orange_tinted_white, font=self.font) 176 | 177 | date_x_off = 45 178 | date_y_off = 25 179 | draw.text((date_x_off, date_y_off), padToTwoDigit(month), orange_tinted_white, font=self.font) 180 | draw.text((date_x_off+7, date_y_off), ".", orange_tinted_white, font=self.font) 181 | draw.text((date_x_off+10, date_y_off), padToTwoDigit(day), orange_tinted_white, font=self.font) 182 | 183 | return frame.convert("RGB") 184 | 185 | def generateForest(self): 186 | frame = self.bgs['forest'].copy() 187 | return frame 188 | 189 | 190 | def padToTwoDigit(num): 191 | if num < 10: 192 | return "0" + str(num) 193 | else: 194 | return str(num) 195 | 196 | def countList(noti_list): 197 | counts = {'Discord':0, 'SMS':0, 'Snapchat':0, 'Messenger':0} 198 | for noti in noti_list: 199 | if noti.application in counts.keys(): 200 | counts[noti.application] = counts[noti.application] + 1 201 | return counts 202 | 203 | def generateNotiFramesAsync(queue, noti_list, old_noti_list, font, canvas_width, canvas_height): 204 | for noti in noti_list: 205 | found = False 206 | for old_noti in old_noti_list: 207 | if noti.noti_id == old_noti.noti_id: 208 | found = True 209 | if not found: 210 | color = (0,0,0) 211 | if noti.application == 'Discord': 212 | color = discordColor 213 | elif noti.application == 'SMS': 214 | color = smsColor 215 | elif noti.application == 'Snapchat': 216 | color = snapchatColor 217 | elif noti.application == 'Messenger': 218 | color = messengerColor 219 | 220 | for _ in range(3): 221 | queue.append(Image.new('RGB', (canvas_width, canvas_height), color)) 222 | queue.append(Image.new('RGB', (canvas_width, canvas_height), color)) 223 | queue.append(Image.new('RGB', (canvas_width, canvas_height), (0,0,0))) 224 | queue.append(Image.new('RGB', (canvas_width, canvas_height), (0,0,0))) 225 | 226 | noti_str = noti.application + " | Title: " + noti.title + " | Body: " + noti.body 227 | noti_len = font.getsize(noti_str)[0] 228 | 229 | for i in range(noti_len+canvas_width): 230 | noti_frame = Image.new('RGB', (canvas_width, canvas_height), color) 231 | noti_draw = ImageDraw.Draw(noti_frame) 232 | noti_draw.text((canvas_width-i,1), noti_str, orange_tinted_white, font) 233 | queue.append(noti_frame) 234 | 235 | for _ in range(3): 236 | queue.append(Image.new('RGB', (canvas_width, canvas_height), color)) 237 | queue.append(Image.new('RGB', (canvas_width, canvas_height), color)) 238 | queue.append(Image.new('RGB', (canvas_width, canvas_height), (0,0,0))) 239 | queue.append(Image.new('RGB', (canvas_width, canvas_height), (0,0,0))) -------------------------------------------------------------------------------- /cad/knob.STEP: -------------------------------------------------------------------------------- 1 | ISO-10303-21; 2 | HEADER; 3 | FILE_DESCRIPTION (( 'STEP AP203' ), 4 | '1' ); 5 | FILE_NAME ('knob.STEP', 6 | '2022-05-02T14:05:05', 7 | ( '' ), 8 | ( '' ), 9 | 'SwSTEP 2.0', 10 | 'SolidWorks 2020', 11 | '' ); 12 | FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' )); 13 | ENDSEC; 14 | 15 | DATA; 16 | #1 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ; 17 | #2 = EDGE_LOOP ( 'NONE', ( #356, #285, #131, #40 ) ) ; 18 | #3 = VERTEX_POINT ( 'NONE', #397 ) ; 19 | #4 = APPROVAL_STATUS ( 'not_yet_approved' ) ; 20 | #5 = VERTEX_POINT ( 'NONE', #202 ) ; 21 | #6 = VERTEX_POINT ( 'NONE', #74 ) ; 22 | #7 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 23 | #8 = EDGE_CURVE ( 'NONE', #6, #203, #178, .T. ) ; 24 | #9 = ORIENTED_EDGE ( 'NONE', *, *, #416, .F. ) ; 25 | #10 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 26 | #11 = VECTOR ( 'NONE', #406, 999.9999999999998863 ) ; 27 | #12 = AXIS2_PLACEMENT_3D ( 'NONE', #417, #383, #282 ) ; 28 | #13 = ORIENTED_EDGE ( 'NONE', *, *, #28, .T. ) ; 29 | #14 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 30 | #15 = PLANE ( 'NONE', #181 ) ; 31 | #16 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; 32 | #17 = ADVANCED_FACE ( 'NONE', ( #173 ), #340, .T. ) ; 33 | #18 = EDGE_CURVE ( 'NONE', #206, #5, #324, .T. ) ; 34 | #19 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 35 | #20 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 36 | #21 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.204170427930421283E-15, 0.000000000000000000 ) ) ; 37 | #22 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 38 | #23 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); 39 | #24 = CIRCLE ( 'NONE', #124, 3.075000000000000622 ) ; 40 | #25 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 41 | #26 = ADVANCED_FACE ( 'NONE', ( #38 ), #346, .F. ) ; 42 | #27 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 43 | #28 = EDGE_CURVE ( 'NONE', #179, #418, #242, .T. ) ; 44 | #29 = CIRCLE ( 'NONE', #415, 14.90000000000000036 ) ; 45 | #30 = EDGE_LOOP ( 'NONE', ( #73, #341, #71, #370 ) ) ; 46 | #31 = VERTEX_POINT ( 'NONE', #263 ) ; 47 | #32 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; 48 | #33 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 49 | #34 = EDGE_LOOP ( 'NONE', ( #117, #176, #116 ) ) ; 50 | #35 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 51 | #36 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 52 | #37 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, 0.000000000000000000 ) ) ; 53 | #38 = FACE_OUTER_BOUND ( 'NONE', #46, .T. ) ; 54 | #39 = APPROVAL_DATE_TIME ( #136, #296 ) ; 55 | #40 = ORIENTED_EDGE ( 'NONE', *, *, #215, .F. ) ; 56 | #41 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 9.500000000000000000, 0.000000000000000000 ) ) ; 57 | #42 = DATE_AND_TIME ( #390, #309 ) ; 58 | #43 = VERTEX_POINT ( 'NONE', #373 ) ; 59 | #44 = PLANE ( 'NONE', #317 ) ; 60 | #45 = AXIS2_PLACEMENT_3D ( 'NONE', #109, #114, #293 ) ; 61 | #46 = EDGE_LOOP ( 'NONE', ( #167, #100, #339, #9 ) ) ; 62 | #47 = ORIENTED_EDGE ( 'NONE', *, *, #416, .T. ) ; 63 | #48 = VECTOR ( 'NONE', #190, 1000.000000000000114 ) ; 64 | #49 = FACE_OUTER_BOUND ( 'NONE', #292, .T. ) ; 65 | #50 = ADVANCED_FACE ( 'NONE', ( #394 ), #268, .T. ) ; 66 | #51 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; 67 | #52 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 68 | #53 = VECTOR ( 'NONE', #345, 999.9999999999998863 ) ; 69 | #54 = LOCAL_TIME ( 10, 5, 5.000000000000000000, #287 ) ; 70 | #55 = CARTESIAN_POINT ( 'NONE', ( 1.702259050814821281E-15, -0.9999999999999991118, -13.90000000000000213 ) ) ; 71 | #56 = ADVANCED_FACE ( 'NONE', ( #234 ), #305, .F. ) ; 72 | #57 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; 73 | #58 = FACE_OUTER_BOUND ( 'NONE', #2, .T. ) ; 74 | #59 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; 75 | #60 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #59 ) ; 76 | #61 = EDGE_CURVE ( 'NONE', #43, #360, #367, .T. ) ; 77 | #62 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 9.500000000000000000, -14.90000000000000036 ) ) ; 78 | #63 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #232, #32, ( #369 ) ) ; 79 | #64 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 80 | #65 = ORIENTED_EDGE ( 'NONE', *, *, #319, .F. ) ; 81 | #66 = CARTESIAN_POINT ( 'NONE', ( 1.824723730729556232E-15, -5.204170427930421283E-15, 14.90000000000000036 ) ) ; 82 | #67 = CIRCLE ( 'NONE', #283, 3.075000000000000622 ) ; 83 | #68 = VECTOR ( 'NONE', #320, 1000.000000000000000 ) ; 84 | #69 = VERTEX_POINT ( 'NONE', #388 ) ; 85 | #70 = APPROVAL_DATE_TIME ( #365, #378 ) ; 86 | #71 = ORIENTED_EDGE ( 'NONE', *, *, #135, .T. ) ; 87 | #72 = ORIENTED_EDGE ( 'NONE', *, *, #331, .T. ) ; 88 | #73 = ORIENTED_EDGE ( 'NONE', *, *, #168, .F. ) ; 89 | #74 = CARTESIAN_POINT ( 'NONE', ( 1.273632671113249051E-15, 0.000000000000000000, 9.900000000000005684 ) ) ; 90 | #75 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ; 91 | #76 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 7.806255641895631925E-15, -9.900000000000005684 ) ) ; 92 | #77 = CIRCLE ( 'NONE', #91, 14.90000000000000036 ) ; 93 | #78 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -0.9999999999999991118, 0.000000000000000000 ) ) ; 94 | #79 = AXIS2_PLACEMENT_3D ( 'NONE', #157, #130, #93 ) ; 95 | #80 = ORIENTED_EDGE ( 'NONE', *, *, #18, .T. ) ; 96 | #81 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #106, #358, ( #364 ) ) ; 97 | #82 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 98 | #83 = ORIENTED_EDGE ( 'NONE', *, *, #405, .T. ) ; 99 | #84 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 100 | #85 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, 0.000000000000000000 ) ) ; 101 | #86 = AXIS2_PLACEMENT_3D ( 'NONE', #37, #393, #33 ) ; 102 | #87 = FACE_OUTER_BOUND ( 'NONE', #34, .T. ) ; 103 | #88 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; 104 | #89 = ADVANCED_FACE ( 'NONE', ( #211 ), #102, .T. ) ; 105 | #90 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, -3.075000000000000622 ) ) ; 106 | #91 = AXIS2_PLACEMENT_3D ( 'NONE', #375, #189, #52 ) ; 107 | #92 = CARTESIAN_POINT ( 'NONE', ( 1.212400331155880491E-15, 7.806255641895631925E-15, 9.900000000000005684 ) ) ; 108 | #93 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 109 | #94 = EDGE_CURVE ( 'NONE', #360, #31, #29, .T. ) ; 110 | #95 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #193, 'distance_accuracy_value', 'NONE'); 111 | #96 = CYLINDRICAL_SURFACE ( 'NONE', #385, 3.075000000000000622 ) ; 112 | #97 = CARTESIAN_POINT ( 'NONE', ( 2.670205984563738699, 6.500000000000000000, 1.524999999999999245 ) ) ; 113 | #98 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 114 | #99 = VECTOR ( 'NONE', #240, 1000.000000000000000 ) ; 115 | #100 = ORIENTED_EDGE ( 'NONE', *, *, #362, .F. ) ; 116 | #101 = AXIS2_PLACEMENT_3D ( 'NONE', #187, #271, #272 ) ; 117 | #102 = CYLINDRICAL_SURFACE ( 'NONE', #368, 14.90000000000000036 ) ; 118 | #103 = DATE_AND_TIME ( #259, #54 ) ; 119 | #104 = EDGE_LOOP ( 'NONE', ( #265, #359, #290, #335 ) ) ; 120 | #105 = ORIENTED_EDGE ( 'NONE', *, *, #280, .T. ) ; 121 | #106 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 122 | #107 = FACE_OUTER_BOUND ( 'NONE', #262, .T. ) ; 123 | #108 = ADVANCED_FACE ( 'NONE', ( #208, #336 ), #44, .F. ) ; 124 | #109 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 125 | #110 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #333 ) ) ; 126 | #111 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ; 127 | #112 = ORIENTED_EDGE ( 'NONE', *, *, #275, .F. ) ; 128 | #113 = AXIS2_PLACEMENT_3D ( 'NONE', #119, #120, #88 ) ; 129 | #114 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 130 | #115 = CC_DESIGN_APPROVAL ( #151, ( #364 ) ) ; 131 | #116 = ORIENTED_EDGE ( 'NONE', *, *, #328, .F. ) ; 132 | #117 = ORIENTED_EDGE ( 'NONE', *, *, #244, .F. ) ; 133 | #118 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 134 | #119 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 8.099999999999999645, 0.000000000000000000 ) ) ; 135 | #120 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 136 | #121 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 137 | #122 = AXIS2_PLACEMENT_3D ( 'NONE', #194, #384, #350 ) ; 138 | #123 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 139 | #124 = AXIS2_PLACEMENT_3D ( 'NONE', #20, #308, #121 ) ; 140 | #125 = MECHANICAL_CONTEXT ( 'NONE', #16, 'mechanical' ) ; 141 | #126 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, 0.000000000000000000 ) ) ; 142 | #127 = APPROVAL_PERSON_ORGANIZATION ( #311, #151, #412 ) ; 143 | #128 = EDGE_CURVE ( 'NONE', #142, #270, #235, .T. ) ; 144 | #129 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 145 | #130 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 146 | #131 = ORIENTED_EDGE ( 'NONE', *, *, #377, .T. ) ; 147 | #132 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 148 | #133 = AXIS2_PLACEMENT_3D ( 'NONE', #321, #25, #64 ) ; 149 | #134 = ORIENTED_EDGE ( 'NONE', *, *, #8, .F. ) ; 150 | #135 = EDGE_CURVE ( 'NONE', #142, #360, #304, .T. ) ; 151 | #136 = DATE_AND_TIME ( #205, #209 ) ; 152 | #137 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 7.806255641895631925E-15, 0.000000000000000000 ) ) ; 153 | #138 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #103, #325, ( #364 ) ) ; 154 | #139 = APPROVAL_STATUS ( 'not_yet_approved' ) ; 155 | #140 = ORIENTED_EDGE ( 'NONE', *, *, #216, .T. ) ; 156 | #141 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.204170427930421283E-15, 0.000000000000000000 ) ) ; 157 | #142 = VERTEX_POINT ( 'NONE', #217 ) ; 158 | #143 = AXIS2_PLACEMENT_3D ( 'NONE', #78, #10, #14 ) ; 159 | #144 = ORIENTED_EDGE ( 'NONE', *, *, #94, .T. ) ; 160 | #145 = ORIENTED_EDGE ( 'NONE', *, *, #18, .F. ) ; 161 | #146 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 162 | #147 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 8.099999999999999645, -14.90000000000000036 ) ) ; 163 | #148 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 164 | #149 = EDGE_CURVE ( 'NONE', #5, #418, #67, .T. ) ; 165 | #150 = PLANE ( 'NONE', #155 ) ; 166 | #151 = APPROVAL ( #279, 'UNSPECIFIED' ) ; 167 | #152 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 168 | #153 = CC_DESIGN_SECURITY_CLASSIFICATION ( #239, ( #369 ) ) ; 169 | #154 = VECTOR ( 'NONE', #314, 1000.000000000000000 ) ; 170 | #155 = AXIS2_PLACEMENT_3D ( 'NONE', #85, #274, #57 ) ; 171 | #156 = DESIGN_CONTEXT ( 'detailed design', #59, 'design' ) ; 172 | #157 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 173 | #158 = FACE_OUTER_BOUND ( 'NONE', #241, .T. ) ; 174 | #159 = ADVANCED_FACE ( 'NONE', ( #343 ), #303, .T. ) ; 175 | #160 = AXIS2_PLACEMENT_3D ( 'NONE', #371, #35, #207 ) ; 176 | #161 = CC_DESIGN_APPROVAL ( #378, ( #369 ) ) ; 177 | #162 = ORIENTED_EDGE ( 'NONE', *, *, #184, .T. ) ; 178 | #163 = EDGE_LOOP ( 'NONE', ( #80, #180, #392 ) ) ; 179 | #164 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 180 | #165 = LINE ( 'NONE', #76, #249 ) ; 181 | #166 = VERTEX_POINT ( 'NONE', #246 ) ; 182 | #167 = ORIENTED_EDGE ( 'NONE', *, *, #280, .F. ) ; 183 | #168 = EDGE_CURVE ( 'NONE', #270, #31, #410, .T. ) ; 184 | #169 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 185 | #170 = ORIENTED_EDGE ( 'NONE', *, *, #61, .F. ) ; 186 | #171 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, -3.075000000000000622 ) ) ; 187 | #172 = VERTEX_POINT ( 'NONE', #147 ) ; 188 | #173 = FACE_OUTER_BOUND ( 'NONE', #104, .T. ) ; 189 | #174 = DATE_AND_TIME ( #251, #348 ) ; 190 | #175 = AXIS2_PLACEMENT_3D ( 'NONE', #316, #27, #129 ) ; 191 | #176 = ORIENTED_EDGE ( 'NONE', *, *, #195, .F. ) ; 192 | #177 = ORIENTED_EDGE ( 'NONE', *, *, #377, .F. ) ; 193 | #178 = CIRCLE ( 'NONE', #45, 9.900000000000005684 ) ; 194 | #179 = VERTEX_POINT ( 'NONE', #90 ) ; 195 | #180 = ORIENTED_EDGE ( 'NONE', *, *, #149, .T. ) ; 196 | #181 = AXIS2_PLACEMENT_3D ( 'NONE', #214, #247, #123 ) ; 197 | #182 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 198 | #183 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 199 | #184 = EDGE_CURVE ( 'NONE', #172, #43, #77, .T. ) ; 200 | #185 = VECTOR ( 'NONE', #302, 1000.000000000000000 ) ; 201 | #186 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #42, #236, ( #239 ) ) ; 202 | #187 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, 0.000000000000000000 ) ) ; 203 | #188 = APPROVAL_PERSON_ORGANIZATION ( #329, #378, #226 ) ; 204 | #189 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 205 | #190 = DIRECTION ( 'NONE', ( 8.659560562354963673E-17, -0.7071067811865451302, 0.7071067811865500152 ) ) ; 206 | #191 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 207 | #192 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 208 | #193 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); 209 | #194 = CARTESIAN_POINT ( 'NONE', ( -2.670205984563738255, 6.500000000000000000, 1.524999999999998801 ) ) ; 210 | #195 = EDGE_CURVE ( 'NONE', #179, #69, #411, .T. ) ; 211 | #196 = AXIS2_PLACEMENT_3D ( 'NONE', #22, #273, #118 ) ; 212 | #197 = CIRCLE ( 'NONE', #12, 14.90000000000000036 ) ; 213 | #198 = EDGE_LOOP ( 'NONE', ( #170, #261, #391, #363 ) ) ; 214 | #199 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 215 | #200 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.7071067811865451302, -0.7071067811865500152 ) ) ; 216 | #201 = EDGE_LOOP ( 'NONE', ( #162, #72 ) ) ; 217 | #202 = CARTESIAN_POINT ( 'NONE', ( 2.670205984563738699, 1.734723475976807094E-15, 1.524999999999999245 ) ) ; 218 | #203 = VERTEX_POINT ( 'NONE', #374 ) ; 219 | #204 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -0.9999999999999991118, 0.000000000000000000 ) ) ; 220 | #205 = CALENDAR_DATE ( 2022, 2, 5 ) ; 221 | #206 = VERTEX_POINT ( 'NONE', #306 ) ; 222 | #207 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 223 | #208 = FACE_OUTER_BOUND ( 'NONE', #298, .T. ) ; 224 | #209 = LOCAL_TIME ( 10, 5, 5.000000000000000000, #291 ) ; 225 | #210 = ORIENTED_EDGE ( 'NONE', *, *, #275, .T. ) ; 226 | #211 = FACE_OUTER_BOUND ( 'NONE', #198, .T. ) ; 227 | #212 = LINE ( 'NONE', #408, #278 ) ; 228 | #213 = AXIS2_PLACEMENT_3D ( 'NONE', #21, #152, #344 ) ; 229 | #214 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 230 | #215 = EDGE_CURVE ( 'NONE', #418, #206, #24, .T. ) ; 231 | #216 = EDGE_CURVE ( 'NONE', #270, #142, #318, .T. ) ; 232 | #217 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 13.90000000000000036 ) ) ; 233 | #218 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 234 | #219 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 235 | #220 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 236 | #221 = LINE ( 'NONE', #97, #354 ) ; 237 | #222 = EDGE_CURVE ( 'NONE', #31, #360, #357, .T. ) ; 238 | #223 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 239 | #224 = AXIS2_PLACEMENT_3D ( 'NONE', #223, #256, #220 ) ; 240 | #225 = AXIS2_PLACEMENT_3D ( 'NONE', #182, #51, #183 ) ; 241 | #226 = APPROVAL_ROLE ( '' ) ; 242 | #227 = ORIENTED_EDGE ( 'NONE', *, *, #353, .F. ) ; 243 | #228 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude3', #355 ) ; 244 | #229 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 245 | #230 = EDGE_LOOP ( 'NONE', ( #400, #140 ) ) ; 246 | #231 = ORIENTED_EDGE ( 'NONE', *, *, #61, .T. ) ; 247 | #232 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 248 | #233 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 249 | #234 = FACE_OUTER_BOUND ( 'NONE', #372, .T. ) ; 250 | #235 = CIRCLE ( 'NONE', #196, 13.90000000000000036 ) ; 251 | #236 = DATE_TIME_ROLE ( 'classification_date' ) ; 252 | #237 = ADVANCED_FACE ( 'NONE', ( #87 ), #150, .F. ) ; 253 | #238 = ORIENTED_EDGE ( 'NONE', *, *, #405, .F. ) ; 254 | #239 = SECURITY_CLASSIFICATION ( '', '', #1 ) ; 255 | #240 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.000000000000000000, 8.120738091017667639E-17 ) ) ; 256 | #241 = EDGE_LOOP ( 'NONE', ( #145, #177, #326, #83 ) ) ; 257 | #242 = LINE ( 'NONE', #171, #185 ) ; 258 | #243 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -0.9999999999999991118, 13.90000000000000213 ) ) ; 259 | #244 = EDGE_CURVE ( 'NONE', #69, #166, #212, .T. ) ; 260 | #245 = FACE_OUTER_BOUND ( 'NONE', #230, .T. ) ; 261 | #246 = CARTESIAN_POINT ( 'NONE', ( 2.670205984563738699, 6.500000000000000000, 1.524999999999999245 ) ) ; 262 | #247 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 263 | #248 = CARTESIAN_POINT ( 'NONE', ( 1.763491390772188855E-15, -1.000000000000000000, -13.90000000000000036 ) ) ; 264 | #249 = VECTOR ( 'NONE', #200, 1000.000000000000114 ) ; 265 | #250 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ; 266 | #251 = CALENDAR_DATE ( 2022, 2, 5 ) ; 267 | #252 = ADVANCED_FACE ( 'NONE', ( #277, #245 ), #15, .T. ) ; 268 | #253 = VECTOR ( 'NONE', #146, 1000.000000000000000 ) ; 269 | #254 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #164, #111, ( #369 ) ) ; 270 | #255 = PLANE ( 'NONE', #122 ) ; 271 | #256 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; 272 | #257 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #16 ) ; 273 | #258 = CIRCLE ( 'NONE', #133, 3.075000000000000622 ) ; 274 | #259 = CALENDAR_DATE ( 2022, 2, 5 ) ; 275 | #260 = CYLINDRICAL_SURFACE ( 'NONE', #312, 14.90000000000000036 ) ; 276 | #261 = ORIENTED_EDGE ( 'NONE', *, *, #184, .F. ) ; 277 | #262 = EDGE_LOOP ( 'NONE', ( #396, #231, #144, #227 ) ) ; 278 | #263 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -5.204170427930421283E-15, -14.90000000000000036 ) ) ; 279 | #264 = SHAPE_DEFINITION_REPRESENTATION ( #266, #323 ) ; 280 | #265 = ORIENTED_EDGE ( 'NONE', *, *, #216, .F. ) ; 281 | #266 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #364 ) ; 282 | #267 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 283 | #268 = CONICAL_SURFACE ( 'NONE', #143, 13.90000000000000213, 0.7853981633974501664 ) ; 284 | #269 = ORIENTED_EDGE ( 'NONE', *, *, #328, .T. ) ; 285 | #270 = VERTEX_POINT ( 'NONE', #248 ) ; 286 | #271 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 287 | #272 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 288 | #273 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 289 | #274 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 290 | #275 = EDGE_CURVE ( 'NONE', #322, #3, #380, .T. ) ; 291 | #276 = CC_DESIGN_APPROVAL ( #296, ( #239 ) ) ; 292 | #277 = FACE_BOUND ( 'NONE', #387, .T. ) ; 293 | #278 = VECTOR ( 'NONE', #404, 1000.000000000000000 ) ; 294 | #279 = APPROVAL_STATUS ( 'not_yet_approved' ) ; 295 | #280 = EDGE_CURVE ( 'NONE', #6, #3, #381, .T. ) ; 296 | #281 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #191, #250, ( #333 ) ) ; 297 | #282 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 298 | #283 = AXIS2_PLACEMENT_3D ( 'NONE', #349, #376, #19 ) ; 299 | #284 = LOCAL_TIME ( 10, 5, 5.000000000000000000, #169 ) ; 300 | #285 = ORIENTED_EDGE ( 'NONE', *, *, #195, .T. ) ; 301 | #286 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -3.075000000000000622 ) ) ; 302 | #287 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 303 | #288 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -10.90000000000001990 ) ) ; 304 | #289 = ORIENTED_EDGE ( 'NONE', *, *, #149, .F. ) ; 305 | #290 = ORIENTED_EDGE ( 'NONE', *, *, #94, .F. ) ; 306 | #291 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 307 | #292 = EDGE_LOOP ( 'NONE', ( #269, #13, #289, #238 ) ) ; 308 | #293 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 309 | #294 = ADVANCED_FACE ( 'NONE', ( #49 ), #310, .F. ) ; 310 | #295 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 311 | #296 = APPROVAL ( #139, 'UNSPECIFIED' ) ; 312 | #297 = APPROVAL_ROLE ( '' ) ; 313 | #298 = EDGE_LOOP ( 'NONE', ( #330, #301 ) ) ; 314 | #299 = CARTESIAN_POINT ( 'NONE', ( -2.670205984563738255, 0.000000000000000000, 1.524999999999998801 ) ) ; 315 | #300 = CIRCLE ( 'NONE', #175, 9.900000000000005684 ) ; 316 | #301 = ORIENTED_EDGE ( 'NONE', *, *, #8, .T. ) ; 317 | #302 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 318 | #303 = PLANE ( 'NONE', #113 ) ; 319 | #304 = LINE ( 'NONE', #243, #11 ) ; 320 | #305 = CONICAL_SURFACE ( 'NONE', #160, 9.900000000000005684, 0.7853981633974517207 ) ; 321 | #306 = CARTESIAN_POINT ( 'NONE', ( -2.670205984563738699, 0.000000000000000000, 1.524999999999999245 ) ) ; 322 | #307 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ; 323 | #308 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 324 | #309 = LOCAL_TIME ( 10, 5, 5.000000000000000000, #132 ) ; 325 | #310 = CYLINDRICAL_SURFACE ( 'NONE', #86, 3.075000000000000622 ) ; 326 | #311 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 327 | #312 = AXIS2_PLACEMENT_3D ( 'NONE', #361, #233, #366 ) ; 328 | #313 = ADVANCED_FACE ( 'NONE', ( #107 ), #260, .T. ) ; 329 | #314 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 330 | #315 = LINE ( 'NONE', #62, #68 ) ; 331 | #316 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 332 | #317 = AXIS2_PLACEMENT_3D ( 'NONE', #379, #148, #402 ) ; 333 | #318 = CIRCLE ( 'NONE', #342, 13.90000000000000036 ) ; 334 | #319 = EDGE_CURVE ( 'NONE', #203, #322, #165, .T. ) ; 335 | #320 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 336 | #321 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 6.500000000000000000, 0.000000000000000000 ) ) ; 337 | #322 = VERTEX_POINT ( 'NONE', #288 ) ; 338 | #323 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'knob', ( #228, #79 ), #338 ) ; 339 | #324 = LINE ( 'NONE', #299, #99 ) ; 340 | #325 = DATE_TIME_ROLE ( 'creation_date' ) ; 341 | #326 = ORIENTED_EDGE ( 'NONE', *, *, #244, .T. ) ; 342 | #327 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 343 | #328 = EDGE_CURVE ( 'NONE', #166, #179, #258, .T. ) ; 344 | #329 = PERSON_AND_ORGANIZATION ( #403, #307 ) ; 345 | #330 = ORIENTED_EDGE ( 'NONE', *, *, #362, .T. ) ; 346 | #331 = EDGE_CURVE ( 'NONE', #43, #172, #197, .T. ) ; 347 | #332 = CARTESIAN_POINT ( 'NONE', ( 1.824723730729556232E-15, 9.500000000000000000, 14.90000000000000036 ) ) ; 348 | #333 = PRODUCT ( 'knob', 'knob', '', ( #125 ) ) ; 349 | #334 = CALENDAR_DATE ( 2022, 2, 5 ) ; 350 | #335 = ORIENTED_EDGE ( 'NONE', *, *, #135, .F. ) ; 351 | #336 = FACE_BOUND ( 'NONE', #163, .T. ) ; 352 | #337 = APPROVAL_PERSON_ORGANIZATION ( #199, #296, #297 ) ; 353 | #338 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #95 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #193, #23, #351 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); 354 | #339 = ORIENTED_EDGE ( 'NONE', *, *, #319, .T. ) ; 355 | #340 = CONICAL_SURFACE ( 'NONE', #386, 13.90000000000000213, 0.7853981633974501664 ) ; 356 | #341 = ORIENTED_EDGE ( 'NONE', *, *, #128, .F. ) ; 357 | #342 = AXIS2_PLACEMENT_3D ( 'NONE', #219, #347, #218 ) ; 358 | #343 = FACE_OUTER_BOUND ( 'NONE', #201, .T. ) ; 359 | #344 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 360 | #345 = DIRECTION ( 'NONE', ( 8.659560562354950115E-17, 0.7071067811865462405, -0.7071067811865489050 ) ) ; 361 | #346 = CONICAL_SURFACE ( 'NONE', #398, 9.900000000000005684, 0.7853981633974517207 ) ; 362 | #347 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 363 | #348 = LOCAL_TIME ( 10, 5, 5.000000000000000000, #192 ) ; 364 | #349 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 365 | #350 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -8.120738091017667639E-17 ) ) ; 366 | #351 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); 367 | #352 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 368 | #353 = EDGE_CURVE ( 'NONE', #172, #31, #315, .T. ) ; 369 | #354 = VECTOR ( 'NONE', #352, 1000.000000000000000 ) ; 370 | #355 = CLOSED_SHELL ( 'NONE', ( #294, #56, #17, #313, #108, #89, #252, #159, #50, #26, #237, #389, #399 ) ) ; 371 | #356 = ORIENTED_EDGE ( 'NONE', *, *, #28, .F. ) ; 372 | #357 = CIRCLE ( 'NONE', #213, 14.90000000000000036 ) ; 373 | #358 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; 374 | #359 = ORIENTED_EDGE ( 'NONE', *, *, #168, .T. ) ; 375 | #360 = VERTEX_POINT ( 'NONE', #66 ) ; 376 | #361 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 9.500000000000000000, 0.000000000000000000 ) ) ; 377 | #362 = EDGE_CURVE ( 'NONE', #203, #6, #300, .T. ) ; 378 | #363 = ORIENTED_EDGE ( 'NONE', *, *, #222, .T. ) ; 379 | #364 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #369, #156 ) ; 380 | #365 = DATE_AND_TIME ( #334, #284 ) ; 381 | #366 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 382 | #367 = LINE ( 'NONE', #332, #253 ) ; 383 | #368 = AXIS2_PLACEMENT_3D ( 'NONE', #41, #295, #7 ) ; 384 | #369 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #333, .NOT_KNOWN. ) ; 385 | #370 = ORIENTED_EDGE ( 'NONE', *, *, #222, .F. ) ; 386 | #371 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 7.806255641895631925E-15, 0.000000000000000000 ) ) ; 387 | #372 = EDGE_LOOP ( 'NONE', ( #134, #105, #112, #65 ) ) ; 388 | #373 = CARTESIAN_POINT ( 'NONE', ( 1.824723730729556232E-15, 8.099999999999999645, 14.90000000000000036 ) ) ; 389 | #374 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -9.900000000000005684 ) ) ; 390 | #375 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 8.099999999999999645, 0.000000000000000000 ) ) ; 391 | #376 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 392 | #377 = EDGE_CURVE ( 'NONE', #69, #206, #413, .T. ) ; 393 | #378 = APPROVAL ( #4, 'UNSPECIFIED' ) ; 394 | #379 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 395 | #380 = CIRCLE ( 'NONE', #225, 10.90000000000001990 ) ; 396 | #381 = LINE ( 'NONE', #92, #48 ) ; 397 | #382 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 398 | #383 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 399 | #384 = DIRECTION ( 'NONE', ( 8.120738091017667639E-17, 0.000000000000000000, -1.000000000000000000 ) ) ; 400 | #385 = AXIS2_PLACEMENT_3D ( 'NONE', #126, #382, #98 ) ; 401 | #386 = AXIS2_PLACEMENT_3D ( 'NONE', #204, #401, #327 ) ; 402 | #387 = EDGE_LOOP ( 'NONE', ( #210, #47 ) ) ; 403 | #388 = CARTESIAN_POINT ( 'NONE', ( -2.670205984563738255, 6.500000000000000000, 1.524999999999998801 ) ) ; 404 | #389 = ADVANCED_FACE ( 'NONE', ( #58 ), #96, .F. ) ; 405 | #390 = CALENDAR_DATE ( 2022, 2, 5 ) ; 406 | #391 = ORIENTED_EDGE ( 'NONE', *, *, #353, .T. ) ; 407 | #392 = ORIENTED_EDGE ( 'NONE', *, *, #215, .T. ) ; 408 | #393 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 409 | #394 = FACE_OUTER_BOUND ( 'NONE', #30, .T. ) ; 410 | #395 = APPROVAL_DATE_TIME ( #174, #151 ) ; 411 | #396 = ORIENTED_EDGE ( 'NONE', *, *, #331, .F. ) ; 412 | #397 = CARTESIAN_POINT ( 'NONE', ( 1.334865011070617611E-15, -1.000000000000000000, 10.90000000000001990 ) ) ; 413 | #398 = AXIS2_PLACEMENT_3D ( 'NONE', #137, #84, #229 ) ; 414 | #399 = ADVANCED_FACE ( 'NONE', ( #158 ), #255, .T. ) ; 415 | #400 = ORIENTED_EDGE ( 'NONE', *, *, #128, .T. ) ; 416 | #401 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 417 | #402 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; 418 | #403 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ; 419 | #404 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 8.120738091017667639E-17 ) ) ; 420 | #405 = EDGE_CURVE ( 'NONE', #166, #5, #221, .T. ) ; 421 | #406 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.7071067811865462405, 0.7071067811865489050 ) ) ; 422 | #407 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #36, #75, ( #239 ) ) ; 423 | #408 = CARTESIAN_POINT ( 'NONE', ( -2.670205984563738255, 6.500000000000000000, 1.524999999999998801 ) ) ; 424 | #409 = CIRCLE ( 'NONE', #224, 10.90000000000001990 ) ; 425 | #410 = LINE ( 'NONE', #55, #53 ) ; 426 | #411 = CIRCLE ( 'NONE', #101, 3.075000000000000622 ) ; 427 | #412 = APPROVAL_ROLE ( '' ) ; 428 | #413 = LINE ( 'NONE', #414, #154 ) ; 429 | #414 = CARTESIAN_POINT ( 'NONE', ( -2.670205984563738255, 6.500000000000000000, 1.524999999999998801 ) ) ; 430 | #415 = AXIS2_PLACEMENT_3D ( 'NONE', #141, #267, #82 ) ; 431 | #416 = EDGE_CURVE ( 'NONE', #3, #322, #409, .T. ) ; 432 | #417 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 8.099999999999999645, 0.000000000000000000 ) ) ; 433 | #418 = VERTEX_POINT ( 'NONE', #286 ) ; 434 | ENDSEC; 435 | END-ISO-10303-21; 436 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /cad/base swivel cap V2.STEP: -------------------------------------------------------------------------------- 1 | ISO-10303-21; 2 | HEADER; 3 | FILE_DESCRIPTION (( 'STEP AP203' ), 4 | '1' ); 5 | FILE_NAME ('base swivel cap V2.STEP', 6 | '2022-05-02T14:04:46', 7 | ( '' ), 8 | ( '' ), 9 | 'SwSTEP 2.0', 10 | 'SolidWorks 2020', 11 | '' ); 12 | FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' )); 13 | ENDSEC; 14 | 15 | DATA; 16 | #1 = ORIENTED_EDGE ( 'NONE', *, *, #470, .F. ) ; 17 | #2 = VECTOR ( 'NONE', #135, 1000.000000000000000 ) ; 18 | #3 = LINE ( 'NONE', #429, #717 ) ; 19 | #4 = FACE_OUTER_BOUND ( 'NONE', #224, .T. ) ; 20 | #5 = ADVANCED_FACE ( 'NONE', ( #324 ), #343, .T. ) ; 21 | #6 = LINE ( 'NONE', #1118, #60 ) ; 22 | #7 = EDGE_LOOP ( 'NONE', ( #390, #561, #568, #836 ) ) ; 23 | #8 = AXIS2_PLACEMENT_3D ( 'NONE', #635, #286, #897 ) ; 24 | #9 = PLANE ( 'NONE', #1007 ) ; 25 | #10 = PLANE ( 'NONE', #108 ) ; 26 | #11 = DATE_AND_TIME ( #515, #474 ) ; 27 | #12 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, -3.000000000000000000, 13.50000000000003908 ) ) ; 28 | #13 = VECTOR ( 'NONE', #554, 1000.000000000000000 ) ; 29 | #14 = EDGE_CURVE ( 'NONE', #34, #728, #679, .T. ) ; 30 | #15 = ORIENTED_EDGE ( 'NONE', *, *, #1060, .T. ) ; 31 | #16 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 32 | #17 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 33 | #18 = ORIENTED_EDGE ( 'NONE', *, *, #244, .F. ) ; 34 | #19 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 35 | #20 = PERSON ( 'UNSPECIFIED', 'UNSPECIFIED', 'UNSPECIFIED', ('UNSPECIFIED'), ('UNSPECIFIED'), ('UNSPECIFIED') ) ; 36 | #21 = ORIENTED_EDGE ( 'NONE', *, *, #227, .F. ) ; 37 | #22 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, -18.55256701634527161 ) ) ; 38 | #23 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 0.000000000000000000 ) ) ; 39 | #24 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 40 | #25 = AXIS2_PLACEMENT_3D ( 'NONE', #273, #432, #188 ) ; 41 | #26 = EDGE_CURVE ( 'NONE', #39, #775, #776, .T. ) ; 42 | #27 = LINE ( 'NONE', #122, #839 ) ; 43 | #28 = ADVANCED_FACE ( 'NONE', ( #335 ), #9, .T. ) ; 44 | #29 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, 21.12439348241742820, -13.49999999999996980 ) ) ; 45 | #30 = LOCAL_TIME ( 10, 4, 46.00000000000000000, #808 ) ; 46 | #31 = ORIENTED_EDGE ( 'NONE', *, *, #966, .T. ) ; 47 | #32 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 48 | #33 = PLANE ( 'NONE', #217 ) ; 49 | #34 = VERTEX_POINT ( 'NONE', #87 ) ; 50 | #35 = VECTOR ( 'NONE', #256, 1000.000000000000000 ) ; 51 | #36 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 0.000000000000000000 ) ) ; 52 | #37 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 53 | #38 = ADVANCED_FACE ( 'NONE', ( #351 ), #439, .F. ) ; 54 | #39 = VERTEX_POINT ( 'NONE', #423 ) ; 55 | #40 = APPROVAL ( #1032, 'UNSPECIFIED' ) ; 56 | #41 = LINE ( 'NONE', #385, #1057 ) ; 57 | #42 = ORIENTED_EDGE ( 'NONE', *, *, #953, .T. ) ; 58 | #43 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, -3.000000000000000000, -13.49999999999996980 ) ) ; 59 | #44 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 60 | #45 = ORIENTED_EDGE ( 'NONE', *, *, #649, .T. ) ; 61 | #46 = CIRCLE ( 'NONE', #961, 1.500000000000001332 ) ; 62 | #47 = EDGE_CURVE ( 'NONE', #517, #997, #99, .T. ) ; 63 | #48 = CIRCLE ( 'NONE', #105, 1.600000000000000755 ) ; 64 | #49 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 65 | #50 = VERTEX_POINT ( 'NONE', #177 ) ; 66 | #51 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 67 | #52 = CALENDAR_DATE ( 2022, 2, 5 ) ; 68 | #53 = ORIENTED_EDGE ( 'NONE', *, *, #888, .F. ) ; 69 | #54 = ORIENTED_EDGE ( 'NONE', *, *, #393, .T. ) ; 70 | #55 = EDGE_CURVE ( 'NONE', #150, #157, #755, .T. ) ; 71 | #56 = FACE_OUTER_BOUND ( 'NONE', #230, .T. ) ; 72 | #57 = VERTEX_POINT ( 'NONE', #101 ) ; 73 | #58 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, 0.000000000000000000, 33.50000000000002842 ) ) ; 74 | #59 = DATE_TIME_ROLE ( 'creation_date' ) ; 75 | #60 = VECTOR ( 'NONE', #171, 1000.000000000000000 ) ; 76 | #61 = ORIENTED_EDGE ( 'NONE', *, *, #579, .T. ) ; 77 | #62 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 78 | #63 = VECTOR ( 'NONE', #588, 1000.000000000000000 ) ; 79 | #64 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'base swivel cap V2', ( #502, #603 ), #548 ) ; 80 | #65 = LINE ( 'NONE', #239, #354 ) ; 81 | #66 = EDGE_CURVE ( 'NONE', #829, #604, #3, .T. ) ; 82 | #67 = ORIENTED_EDGE ( 'NONE', *, *, #1048, .T. ) ; 83 | #68 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; 84 | #69 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 85 | #70 = ADVANCED_FACE ( 'NONE', ( #766, #96, #508 ), #758, .T. ) ; 86 | #71 = ORIENTED_EDGE ( 'NONE', *, *, #1097, .F. ) ; 87 | #72 = LINE ( 'NONE', #410, #514 ) ; 88 | #73 = APPROVAL_PERSON_ORGANIZATION ( #773, #40, #347 ) ; 89 | #74 = AXIS2_PLACEMENT_3D ( 'NONE', #630, #721, #110 ) ; 90 | #75 = FACE_OUTER_BOUND ( 'NONE', #802, .T. ) ; 91 | #76 = ORIENTED_EDGE ( 'NONE', *, *, #987, .T. ) ; 92 | #77 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, -18.55256701634527161 ) ) ; 93 | #78 = ORIENTED_EDGE ( 'NONE', *, *, #765, .F. ) ; 94 | #79 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, 18.55256701634533911 ) ) ; 95 | #80 = AXIS2_PLACEMENT_3D ( 'NONE', #426, #524, #779 ) ; 96 | #81 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 20.15256701634534053 ) ) ; 97 | #82 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, -33.96689564855758192 ) ) ; 98 | #83 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, -28.49999999999997158 ) ) ; 99 | #84 = VERTEX_POINT ( 'NONE', #611 ) ; 100 | #85 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 101 | #86 = EDGE_CURVE ( 'NONE', #396, #216, #674, .T. ) ; 102 | #87 = CARTESIAN_POINT ( 'NONE', ( -1.566176470588235725, 2.000000000000000000, -35.46543516246453720 ) ) ; 103 | #88 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 104 | #89 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 105 | #90 = AXIS2_PLACEMENT_3D ( 'NONE', #1020, #338, #907 ) ; 106 | #91 = CIRCLE ( 'NONE', #857, 2.620000000000004103 ) ; 107 | #92 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 108 | #93 = LINE ( 'NONE', #1117, #809 ) ; 109 | #94 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -16.95256701634527019 ) ) ; 110 | #95 = ORIENTED_EDGE ( 'NONE', *, *, #973, .T. ) ; 111 | #96 = FACE_BOUND ( 'NONE', #988, .T. ) ; 112 | #97 = FACE_OUTER_BOUND ( 'NONE', #769, .T. ) ; 113 | #98 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 114 | #99 = CIRCLE ( 'NONE', #278, 12.50000000000000355 ) ; 115 | #100 = VERTEX_POINT ( 'NONE', #81 ) ; 116 | #101 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 12.50000000000000355 ) ) ; 117 | #102 = LINE ( 'NONE', #527, #134 ) ; 118 | #103 = EDGE_CURVE ( 'NONE', #1014, #664, #1018, .T. ) ; 119 | #104 = ORIENTED_EDGE ( 'NONE', *, *, #292, .F. ) ; 120 | #105 = AXIS2_PLACEMENT_3D ( 'NONE', #910, #140, #329 ) ; 121 | #106 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, -12.50000000000000355 ) ) ; 122 | #107 = CYLINDRICAL_SURFACE ( 'NONE', #200, 6.120000000000000107 ) ; 123 | #108 = AXIS2_PLACEMENT_3D ( 'NONE', #509, #675, #88 ) ; 124 | #109 = EDGE_LOOP ( 'NONE', ( #234, #61, #704, #887 ) ) ; 125 | #110 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 126 | #111 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 127 | #112 = ADVANCED_FACE ( 'NONE', ( #936 ), #578, .F. ) ; 128 | #113 = ORIENTED_EDGE ( 'NONE', *, *, #1110, .F. ) ; 129 | #114 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 130 | #115 = EDGE_LOOP ( 'NONE', ( #927, #520, #1116, #647 ) ) ; 131 | #116 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, -3.000000000000000000, -35.46689564855758903 ) ) ; 132 | #117 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 18.55256701634533911 ) ) ; 133 | #118 = VERTEX_POINT ( 'NONE', #584 ) ; 134 | #119 = FACE_OUTER_BOUND ( 'NONE', #984, .T. ) ; 135 | #120 = AXIS2_PLACEMENT_3D ( 'NONE', #744, #400, #1010 ) ; 136 | #121 = EDGE_LOOP ( 'NONE', ( #327, #918, #736, #902 ) ) ; 137 | #122 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, -20.15256701634527303 ) ) ; 138 | #123 = EDGE_CURVE ( 'NONE', #492, #265, #185, .T. ) ; 139 | #124 = ORIENTED_EDGE ( 'NONE', *, *, #128, .T. ) ; 140 | #125 = FACE_OUTER_BOUND ( 'NONE', #121, .T. ) ; 141 | #126 = VECTOR ( 'NONE', #506, 1000.000000000000000 ) ; 142 | #127 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 12.50000000000000355 ) ) ; 143 | #128 = EDGE_CURVE ( 'NONE', #651, #517, #1107, .T. ) ; 144 | #129 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, -12.50000000000000355 ) ) ; 145 | #130 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 146 | #131 = ORIENTED_EDGE ( 'NONE', *, *, #966, .F. ) ; 147 | #132 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 148 | #133 = VERTEX_POINT ( 'NONE', #1090 ) ; 149 | #134 = VECTOR ( 'NONE', #357, 1000.000000000000000 ) ; 150 | #135 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 151 | #136 = VERTEX_POINT ( 'NONE', #753 ) ; 152 | #137 = CC_DESIGN_APPROVAL ( #361, ( #270 ) ) ; 153 | #138 = ORIENTED_EDGE ( 'NONE', *, *, #1097, .T. ) ; 154 | #139 = EDGE_CURVE ( 'NONE', #698, #992, #801, .T. ) ; 155 | #140 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 156 | #141 = ORIENTED_EDGE ( 'NONE', *, *, #244, .T. ) ; 157 | #142 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 158 | #143 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 159 | #144 = ORIENTED_EDGE ( 'NONE', *, *, #485, .F. ) ; 160 | #145 = EDGE_LOOP ( 'NONE', ( #799, #690, #1008, #932 ) ) ; 161 | #146 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 162 | #147 = EDGE_CURVE ( 'NONE', #84, #539, #223, .T. ) ; 163 | #148 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 31.12000000000003652 ) ) ; 164 | #149 = ADVANCED_FACE ( 'NONE', ( #153 ), #743, .F. ) ; 165 | #150 = VERTEX_POINT ( 'NONE', #1104 ) ; 166 | #151 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 167 | #152 = VERTEX_POINT ( 'NONE', #570 ) ; 168 | #153 = FACE_OUTER_BOUND ( 'NONE', #722, .T. ) ; 169 | #154 = PLANE ( 'NONE', #120 ) ; 170 | #155 = ORIENTED_EDGE ( 'NONE', *, *, #1026, .T. ) ; 171 | #156 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 172 | #157 = VERTEX_POINT ( 'NONE', #493 ) ; 173 | #158 = AXIS2_PLACEMENT_3D ( 'NONE', #534, #713, #537 ) ; 174 | #159 = AXIS2_PLACEMENT_3D ( 'NONE', #79, #757, #334 ) ; 175 | #160 = AXIS2_PLACEMENT_3D ( 'NONE', #208, #201, #17 ) ; 176 | #161 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 177 | #162 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 178 | #163 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 179 | #164 = EDGE_CURVE ( 'NONE', #136, #308, #72, .T. ) ; 180 | #165 = ORIENTED_EDGE ( 'NONE', *, *, #328, .F. ) ; 181 | #166 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #663, #319, ( #270 ) ) ; 182 | #167 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -18.55256701634527161 ) ) ; 183 | #168 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, -33.49999999999996447 ) ) ; 184 | #169 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 185 | #170 = DIRECTION ( 'NONE', ( 8.659560562354937789E-17, 0.7071067811865472397, -0.7071067811865479058 ) ) ; 186 | #171 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 187 | #172 = AXIS2_PLACEMENT_3D ( 'NONE', #833, #577, #315 ) ; 188 | #173 = EDGE_CURVE ( 'NONE', #100, #525, #1098, .T. ) ; 189 | #174 = ORIENTED_EDGE ( 'NONE', *, *, #1040, .T. ) ; 190 | #175 = AXIS2_PLACEMENT_3D ( 'NONE', #924, #132, #991 ) ; 191 | #176 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #1096, #59, ( #1063 ) ) ; 192 | #177 = CARTESIAN_POINT ( 'NONE', ( -1.566176470588235725, 2.000000000000000000, 35.46543516246453720 ) ) ; 193 | #178 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 12.50000000000000355 ) ) ; 194 | #179 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 195 | #180 = ORIENTED_EDGE ( 'NONE', *, *, #310, .F. ) ; 196 | #181 = ADVANCED_FACE ( 'NONE', ( #817 ), #671, .F. ) ; 197 | #182 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 198 | #183 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, -33.49999999999996447 ) ) ; 199 | #184 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 200 | #185 = CIRCLE ( 'NONE', #380, 3.200000000000015277 ) ; 201 | #186 = ORIENTED_EDGE ( 'NONE', *, *, #641, .F. ) ; 202 | #187 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 203 | #188 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 204 | #189 = EDGE_LOOP ( 'NONE', ( #394, #104, #640, #708 ) ) ; 205 | #190 = AXIS2_PLACEMENT_3D ( 'NONE', #759, #945, #352 ) ; 206 | #191 = AXIS2_PLACEMENT_3D ( 'NONE', #469, #718, #383 ) ; 207 | #192 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 6.120000000000036522 ) ) ; 208 | #193 = EDGE_CURVE ( 'NONE', #586, #203, #790, .T. ) ; 209 | #194 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, -16.95256701634527019 ) ) ; 210 | #195 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #650, #823, ( #1063 ) ) ; 211 | #196 = VERTEX_POINT ( 'NONE', #529 ) ; 212 | #197 = CYLINDRICAL_SURFACE ( 'NONE', #500, 35.50000000000000711 ) ; 213 | #198 = FACE_BOUND ( 'NONE', #982, .T. ) ; 214 | #199 = AXIS2_PLACEMENT_3D ( 'NONE', #498, #1078, #741 ) ; 215 | #200 = AXIS2_PLACEMENT_3D ( 'NONE', #951, #169, #1038 ) ; 216 | #201 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 217 | #202 = VECTOR ( 'NONE', #162, 1000.000000000000000 ) ; 218 | #203 = VERTEX_POINT ( 'NONE', #783 ) ; 219 | #204 = PLANE ( 'NONE', #847 ) ; 220 | #205 = ORIENTED_EDGE ( 'NONE', *, *, #206, .F. ) ; 221 | #206 = EDGE_CURVE ( 'NONE', #656, #342, #653, .T. ) ; 222 | #207 = AXIS2_PLACEMENT_3D ( 'NONE', #233, #572, #1004 ) ; 223 | #208 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 0.000000000000000000 ) ) ; 224 | #209 = PLANE ( 'NONE', #1017 ) ; 225 | #210 = CIRCLE ( 'NONE', #442, 35.50000000000000711 ) ; 226 | #211 = ADVANCED_FACE ( 'NONE', ( #358 ), #942, .F. ) ; 227 | #212 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 228 | #213 = ORIENTED_EDGE ( 'NONE', *, *, #268, .F. ) ; 229 | #214 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, 21.12439348241742820, 33.50000000000002842 ) ) ; 230 | #215 = APPROVAL_ROLE ( '' ) ; 231 | #216 = VERTEX_POINT ( 'NONE', #264 ) ; 232 | #217 = AXIS2_PLACEMENT_3D ( 'NONE', #639, #976, #807 ) ; 233 | #218 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, -33.49999999999996447 ) ) ; 234 | #219 = ORIENTED_EDGE ( 'NONE', *, *, #485, .T. ) ; 235 | #220 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 236 | #221 = ORIENTED_EDGE ( 'NONE', *, *, #841, .T. ) ; 237 | #222 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 238 | #223 = CIRCLE ( 'NONE', #172, 2.619999999999997442 ) ; 239 | #224 = EDGE_LOOP ( 'NONE', ( #609, #840, #732, #401 ) ) ; 240 | #225 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 241 | #226 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ; 242 | #227 = EDGE_CURVE ( 'NONE', #157, #492, #348, .T. ) ; 243 | #228 = EDGE_LOOP ( 'NONE', ( #825, #174, #812, #1084 ) ) ; 244 | #229 = AXIS2_PLACEMENT_3D ( 'NONE', #254, #842, #420 ) ; 245 | #230 = EDGE_LOOP ( 'NONE', ( #667, #724, #737, #444 ) ) ; 246 | #231 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 33.50000000000002842 ) ) ; 247 | #232 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #625 ) ) ; 248 | #233 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 18.55256701634533911 ) ) ; 249 | #234 = ORIENTED_EDGE ( 'NONE', *, *, #103, .T. ) ; 250 | #235 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 251 | #236 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ; 252 | #237 = ORIENTED_EDGE ( 'NONE', *, *, #471, .T. ) ; 253 | #238 = AXIS2_PLACEMENT_3D ( 'NONE', #770, #854, #182 ) ; 254 | #239 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, -3.000000000000000000, 33.50000000000002842 ) ) ; 255 | #240 = VERTEX_POINT ( 'NONE', #865 ) ; 256 | #241 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 257 | #242 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ; 258 | #243 = ORIENTED_EDGE ( 'NONE', *, *, #490, .T. ) ; 259 | #244 = EDGE_CURVE ( 'NONE', #240, #100, #399, .T. ) ; 260 | #245 = FACE_OUTER_BOUND ( 'NONE', #1059, .T. ) ; 261 | #246 = ORIENTED_EDGE ( 'NONE', *, *, #593, .F. ) ; 262 | #247 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; 263 | #248 = CARTESIAN_POINT ( 'NONE', ( 5.204170427930421283E-15, -3.000000000000000000, -33.96689564855758192 ) ) ; 264 | #249 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #730, #658, ( #270 ) ) ; 265 | #250 = ORIENTED_EDGE ( 'NONE', *, *, #471, .F. ) ; 266 | #251 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, -12.50000000000000355 ) ) ; 267 | #252 = CIRCLE ( 'NONE', #160, 35.50000000000000711 ) ; 268 | #253 = CIRCLE ( 'NONE', #693, 12.50000000000000355 ) ; 269 | #254 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 3.642919299551294898E-14 ) ) ; 270 | #255 = EDGE_CURVE ( 'NONE', #752, #964, #1027, .T. ) ; 271 | #256 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 272 | #257 = CARTESIAN_POINT ( 'NONE', ( -1.566176470588252823, -3.000000000000000000, -35.46543516246453720 ) ) ; 273 | #258 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, -18.55256701634527161 ) ) ; 274 | #259 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 275 | #260 = AXIS2_PLACEMENT_3D ( 'NONE', #1087, #574, #225 ) ; 276 | #261 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 277 | #262 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 278 | #263 = EDGE_CURVE ( 'NONE', #342, #656, #486, .T. ) ; 279 | #264 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, -25.87999999999996703 ) ) ; 280 | #265 = VERTEX_POINT ( 'NONE', #437 ) ; 281 | #266 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 282 | #267 = FACE_OUTER_BOUND ( 'NONE', #569, .T. ) ; 283 | #268 = EDGE_CURVE ( 'NONE', #100, #964, #701, .T. ) ; 284 | #269 = ORIENTED_EDGE ( 'NONE', *, *, #860, .F. ) ; 285 | #270 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #625, .NOT_KNOWN. ) ; 286 | #271 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; 287 | #272 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, -3.000000000000000000, 0.000000000000000000 ) ) ; 288 | #273 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, -3.000000000000000000, 3.642919299551294898E-14 ) ) ; 289 | #274 = ORIENTED_EDGE ( 'NONE', *, *, #676, .T. ) ; 290 | #275 = VECTOR ( 'NONE', #710, 1000.000000000000000 ) ; 291 | #276 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 12.50000000000000355 ) ) ; 292 | #277 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, 28.50000000000003908 ) ) ; 293 | #278 = AXIS2_PLACEMENT_3D ( 'NONE', #512, #1035, #259 ) ; 294 | #279 = ORIENTED_EDGE ( 'NONE', *, *, #818, .F. ) ; 295 | #280 = EDGE_CURVE ( 'NONE', #1080, #39, #768, .T. ) ; 296 | #281 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 297 | #282 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #1063 ) ; 298 | #283 = LINE ( 'NONE', #959, #985 ) ; 299 | #284 = ORIENTED_EDGE ( 'NONE', *, *, #86, .T. ) ; 300 | #285 = VECTOR ( 'NONE', #612, 1000.000000000000000 ) ; 301 | #286 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 302 | #287 = CYLINDRICAL_SURFACE ( 'NONE', #1112, 2.619999999999997442 ) ; 303 | #288 = ORIENTED_EDGE ( 'NONE', *, *, #905, .F. ) ; 304 | #289 = PLANE ( 'NONE', #1075 ) ; 305 | #290 = ORIENTED_EDGE ( 'NONE', *, *, #456, .T. ) ; 306 | #291 = FACE_BOUND ( 'NONE', #465, .T. ) ; 307 | #292 = EDGE_CURVE ( 'NONE', #1080, #306, #6, .T. ) ; 308 | #293 = ORIENTED_EDGE ( 'NONE', *, *, #1042, .T. ) ; 309 | #294 = ADVANCED_FACE ( 'NONE', ( #448 ), #107, .F. ) ; 310 | #295 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 311 | #296 = VERTEX_POINT ( 'NONE', #1033 ) ; 312 | #297 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 313 | #298 = ADVANCED_FACE ( 'NONE', ( #267 ), #441, .F. ) ; 314 | #299 = VECTOR ( 'NONE', #981, 1000.000000000000000 ) ; 315 | #300 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, -3.000000000000000000, 33.50000000000002842 ) ) ; 316 | #301 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 317 | #302 = CC_DESIGN_APPROVAL ( #40, ( #979 ) ) ; 318 | #303 = ORIENTED_EDGE ( 'NONE', *, *, #1091, .T. ) ; 319 | #304 = LINE ( 'NONE', #1093, #946 ) ; 320 | #305 = AXIS2_PLACEMENT_3D ( 'NONE', #277, #869, #598 ) ; 321 | #306 = VERTEX_POINT ( 'NONE', #12 ) ; 322 | #307 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -13.49999999999996980 ) ) ; 323 | #308 = VERTEX_POINT ( 'NONE', #1115 ) ; 324 | #309 = LINE ( 'NONE', #148, #745 ) ; 325 | #310 = EDGE_CURVE ( 'NONE', #368, #1103, #1046, .T. ) ; 326 | #311 = ORIENTED_EDGE ( 'NONE', *, *, #14, .F. ) ; 327 | #312 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 328 | #313 = ORIENTED_EDGE ( 'NONE', *, *, #528, .T. ) ; 329 | #314 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .T. ) ; 330 | #315 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 331 | #316 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 332 | #317 = ORIENTED_EDGE ( 'NONE', *, *, #688, .F. ) ; 333 | #318 = PLANE ( 'NONE', #824 ) ; 334 | #319 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; 335 | #320 = ORIENTED_EDGE ( 'NONE', *, *, #449, .F. ) ; 336 | #321 = VECTOR ( 'NONE', #526, 1000.000000000000000 ) ; 337 | #322 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 338 | #323 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 339 | #324 = FACE_OUTER_BOUND ( 'NONE', #628, .T. ) ; 340 | #325 = LINE ( 'NONE', #1006, #63 ) ; 341 | #326 = APPROVAL_DATE_TIME ( #389, #361 ) ; 342 | #327 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .F. ) ; 343 | #328 = EDGE_CURVE ( 'NONE', #196, #450, #602, .T. ) ; 344 | #329 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 345 | #330 = VERTEX_POINT ( 'NONE', #763 ) ; 346 | #331 = CYLINDRICAL_SURFACE ( 'NONE', #886, 1.600000000000000755 ) ; 347 | #332 = EDGE_LOOP ( 'NONE', ( #78, #911, #599, #576 ) ) ; 348 | #333 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 349 | #334 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 350 | #335 = FACE_OUTER_BOUND ( 'NONE', #711, .T. ) ; 351 | #336 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 352 | #337 = VECTOR ( 'NONE', #954, 1000.000000000000000 ) ; 353 | #338 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 354 | #339 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 355 | #340 = PLANE ( 'NONE', #550 ) ; 356 | #341 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.7071067811865472397, 0.7071067811865479058 ) ) ; 357 | #342 = VERTEX_POINT ( 'NONE', #519 ) ; 358 | #343 = PLANE ( 'NONE', #435 ) ; 359 | #344 = AXIS2_PLACEMENT_3D ( 'NONE', #77, #489, #142 ) ; 360 | #345 = LINE ( 'NONE', #771, #778 ) ; 361 | #346 = EDGE_CURVE ( 'NONE', #157, #698, #682, .T. ) ; 362 | #347 = APPROVAL_ROLE ( '' ) ; 363 | #348 = LINE ( 'NONE', #94, #427 ) ; 364 | #349 = AXIS2_PLACEMENT_3D ( 'NONE', #353, #184, #689 ) ; 365 | #350 = ORIENTED_EDGE ( 'NONE', *, *, #953, .F. ) ; 366 | #351 = FACE_OUTER_BOUND ( 'NONE', #1002, .T. ) ; 367 | #352 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; 368 | #353 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 18.55256701634533911 ) ) ; 369 | #354 = VECTOR ( 'NONE', #917, 1000.000000000000000 ) ; 370 | #355 = ORIENTED_EDGE ( 'NONE', *, *, #428, .F. ) ; 371 | #356 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 0.000000000000000000 ) ) ; 372 | #357 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 373 | #358 = FACE_OUTER_BOUND ( 'NONE', #189, .T. ) ; 374 | #359 = ADVANCED_FACE ( 'NONE', ( #125 ), #33, .F. ) ; 375 | #360 = ORIENTED_EDGE ( 'NONE', *, *, #280, .F. ) ; 376 | #361 = APPROVAL ( #920, 'UNSPECIFIED' ) ; 377 | #362 = VECTOR ( 'NONE', #179, 1000.000000000000000 ) ; 378 | #363 = CYLINDRICAL_SURFACE ( 'NONE', #158, 2.619999999999997442 ) ; 379 | #364 = VERTEX_POINT ( 'NONE', #455 ) ; 380 | #365 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; 381 | #366 = ORIENTED_EDGE ( 'NONE', *, *, #263, .T. ) ; 382 | #367 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 0.000000000000000000 ) ) ; 383 | #368 = VERTEX_POINT ( 'NONE', #116 ) ; 384 | #369 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -13.49999999999996980 ) ) ; 385 | #370 = ORIENTED_EDGE ( 'NONE', *, *, #909, .F. ) ; 386 | #371 = AXIS2_PLACEMENT_3D ( 'NONE', #231, #916, #484 ) ; 387 | #372 = APPROVAL_PERSON_ORGANIZATION ( #44, #443, #215 ) ; 388 | #373 = CYLINDRICAL_SURFACE ( 'NONE', #8, 1.500000000000001332 ) ; 389 | #374 = ADVANCED_FACE ( 'NONE', ( #983 ), #204, .F. ) ; 390 | #375 = LINE ( 'NONE', #797, #677 ) ; 391 | #376 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 392 | #377 = ADVANCED_FACE ( 'NONE', ( #119 ), #546, .F. ) ; 393 | #378 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 394 | #379 = VERTEX_POINT ( 'NONE', #1056 ) ; 395 | #380 = AXIS2_PLACEMENT_3D ( 'NONE', #258, #62, #678 ) ; 396 | #381 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 397 | #382 = ORIENTED_EDGE ( 'NONE', *, *, #47, .T. ) ; 398 | #383 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 399 | #384 = ORIENTED_EDGE ( 'NONE', *, *, #841, .F. ) ; 400 | #385 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 25.88000000000004164 ) ) ; 401 | #386 = ORIENTED_EDGE ( 'NONE', *, *, #772, .F. ) ; 402 | #387 = AXIS2_PLACEMENT_3D ( 'NONE', #895, #402, #837 ) ; 403 | #388 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 404 | #389 = DATE_AND_TIME ( #1088, #1092 ) ; 405 | #390 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .F. ) ; 406 | #391 = EDGE_CURVE ( 'NONE', #1103, #517, #891, .T. ) ; 407 | #392 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 408 | #393 = EDGE_CURVE ( 'NONE', #829, #1080, #283, .T. ) ; 409 | #394 = ORIENTED_EDGE ( 'NONE', *, *, #818, .T. ) ; 410 | #395 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 411 | #396 = VERTEX_POINT ( 'NONE', #624 ) ; 412 | #397 = EDGE_LOOP ( 'NONE', ( #975, #1028, #95, #1052 ) ) ; 413 | #398 = CIRCLE ( 'NONE', #199, 1.600000000000000755 ) ; 414 | #399 = CIRCLE ( 'NONE', #349, 1.600000000000000755 ) ; 415 | #400 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 416 | #401 = ORIENTED_EDGE ( 'NONE', *, *, #415, .T. ) ; 417 | #402 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 418 | #403 = AXIS2_PLACEMENT_3D ( 'NONE', #644, #51, #747 ) ; 419 | #404 = ORIENTED_EDGE ( 'NONE', *, *, #139, .T. ) ; 420 | #405 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, -3.000000000000000000, 3.642919299551294898E-14 ) ) ; 421 | #406 = EDGE_LOOP ( 'NONE', ( #740, #144, #1089, #71 ) ) ; 422 | #407 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 423 | #408 = EDGE_CURVE ( 'NONE', #651, #547, #535, .T. ) ; 424 | #409 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #683 ) ; 425 | #410 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -31.11999999999997257 ) ) ; 426 | #411 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 427 | #412 = ORIENTED_EDGE ( 'NONE', *, *, #123, .T. ) ; 428 | #413 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, 20.15256701634534053 ) ) ; 429 | #414 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #1109 ) ; 430 | #415 = EDGE_CURVE ( 'NONE', #661, #152, #375, .T. ) ; 431 | #416 = ORIENTED_EDGE ( 'NONE', *, *, #456, .F. ) ; 432 | #417 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, -18.55256701634527161 ) ) ; 433 | #418 = AXIS2_PLACEMENT_3D ( 'NONE', #613, #853, #89 ) ; 434 | #419 = CLOSED_SHELL ( 'NONE', ( #803, #955, #848, #294, #377, #555, #298, #786, #460, #798, #756, #795, #359, #70, #1003, #943, #495, #634, #636, #784, #181, #38, #211, #5, #543, #923, #990, #28, #149, #1009, #453, #511, #838, #112, #863, #374 ) ) ; 435 | #420 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 436 | #421 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, 0.000000000000000000, -13.49999999999996980 ) ) ; 437 | #422 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, -3.000000000000000000, 6.120000000000036522 ) ) ; 438 | #423 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 33.50000000000002842 ) ) ; 439 | #424 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 440 | #425 = VECTOR ( 'NONE', #852, 1000.000000000000000 ) ; 441 | #426 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, -18.55256701634527161 ) ) ; 442 | #427 = VECTOR ( 'NONE', #875, 1000.000000000000000 ) ; 443 | #428 = EDGE_CURVE ( 'NONE', #308, #216, #476, .T. ) ; 444 | #429 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, 21.12439348241742820, 13.50000000000003908 ) ) ; 445 | #430 = PLANE ( 'NONE', #190 ) ; 446 | #431 = EDGE_CURVE ( 'NONE', #379, #792, #540, .T. ) ; 447 | #432 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 448 | #433 = ORIENTED_EDGE ( 'NONE', *, *, #973, .F. ) ; 449 | #434 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 450 | #435 = AXIS2_PLACEMENT_3D ( 'NONE', #861, #605, #434 ) ; 451 | #436 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 452 | #437 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, -21.75256701634528511 ) ) ; 453 | #438 = ORIENTED_EDGE ( 'NONE', *, *, #765, .T. ) ; 454 | #439 = PLANE ( 'NONE', #1064 ) ; 455 | #440 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 456 | #441 = CYLINDRICAL_SURFACE ( 'NONE', #80, 1.600000000000000755 ) ; 457 | #442 = AXIS2_PLACEMENT_3D ( 'NONE', #36, #878, #114 ) ; 458 | #443 = APPROVAL ( #814, 'UNSPECIFIED' ) ; 459 | #444 = ORIENTED_EDGE ( 'NONE', *, *, #470, .T. ) ; 460 | #445 = LOCAL_TIME ( 10, 4, 46.00000000000000000, #510 ) ; 461 | #446 = AXIS2_PLACEMENT_3D ( 'NONE', #23, #32, #381 ) ; 462 | #447 = FACE_OUTER_BOUND ( 'NONE', #1094, .T. ) ; 463 | #448 = FACE_OUTER_BOUND ( 'NONE', #7, .T. ) ; 464 | #449 = EDGE_CURVE ( 'NONE', #152, #664, #1066, .T. ) ; 465 | #450 = VERTEX_POINT ( 'NONE', #43 ) ; 466 | #451 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, -13.49999999999996980 ) ) ; 467 | #452 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 468 | #453 = ADVANCED_FACE ( 'NONE', ( #729 ), #287, .F. ) ; 469 | #454 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 33.96689564855758192 ) ) ; 470 | #455 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 33.96689564855758192 ) ) ; 471 | #456 = EDGE_CURVE ( 'NONE', #50, #900, #46, .T. ) ; 472 | #457 = ORGANIZATION ( 'UNSPECIFIED', 'UNSPECIFIED', '' ) ; 473 | #458 = LINE ( 'NONE', #716, #13 ) ; 474 | #459 = ORIENTED_EDGE ( 'NONE', *, *, #1060, .F. ) ; 475 | #460 = ADVANCED_FACE ( 'NONE', ( #616, #198, #1070, #885, #1061, #291, #464, #629 ), #209, .T. ) ; 476 | #461 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 28.50000000000003908 ) ) ; 477 | #462 = FACE_OUTER_BOUND ( 'NONE', #782, .T. ) ; 478 | #463 = ORIENTED_EDGE ( 'NONE', *, *, #292, .T. ) ; 479 | #464 = FACE_BOUND ( 'NONE', #483, .T. ) ; 480 | #465 = EDGE_LOOP ( 'NONE', ( #1, #877 ) ) ; 481 | #466 = AXIS2_PLACEMENT_3D ( 'NONE', #521, #1043, #271 ) ; 482 | #467 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 483 | #468 = ORIENTED_EDGE ( 'NONE', *, *, #1091, .F. ) ; 484 | #469 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, -28.49999999999997158 ) ) ; 485 | #470 = EDGE_CURVE ( 'NONE', #475, #525, #620, .T. ) ; 486 | #471 = EDGE_CURVE ( 'NONE', #118, #34, #538, .T. ) ; 487 | #472 = AXIS2_PLACEMENT_3D ( 'NONE', #692, #424, #1036 ) ; 488 | #473 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, -20.15256701634527303 ) ) ; 489 | #474 = LOCAL_TIME ( 10, 4, 46.00000000000000000, #681 ) ; 490 | #475 = VERTEX_POINT ( 'NONE', #933 ) ; 491 | #476 = CIRCLE ( 'NONE', #191, 2.620000000000004103 ) ; 492 | #477 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 493 | #478 = ORIENTED_EDGE ( 'NONE', *, *, #754, .T. ) ; 494 | #479 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 495 | #480 = EDGE_LOOP ( 'NONE', ( #141, #898, #67, #645 ) ) ; 496 | #481 = FACE_OUTER_BOUND ( 'NONE', #764, .T. ) ; 497 | #482 = MECHANICAL_CONTEXT ( 'NONE', #1109, 'mechanical' ) ; 498 | #483 = EDGE_LOOP ( 'NONE', ( #935, #573 ) ) ; 499 | #484 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ; 500 | #485 = EDGE_CURVE ( 'NONE', #157, #150, #398, .T. ) ; 501 | #486 = CIRCLE ( 'NONE', #542, 2.619999999999997442 ) ; 502 | #487 = CYLINDRICAL_SURFACE ( 'NONE', #934, 1.600000000000000755 ) ; 503 | #488 = ORIENTED_EDGE ( 'NONE', *, *, #310, .T. ) ; 504 | #489 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 505 | #490 = EDGE_CURVE ( 'NONE', #547, #118, #735, .T. ) ; 506 | #491 = AXIS2_PLACEMENT_3D ( 'NONE', #1001, #241, #395 ) ; 507 | #492 = VERTEX_POINT ( 'NONE', #751 ) ; 508 | #493 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -16.95256701634527019 ) ) ; 509 | #494 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, -33.96689564855758192 ) ) ; 510 | #495 = ADVANCED_FACE ( 'NONE', ( #1095 ), #919, .F. ) ; 511 | #496 = ORIENTED_EDGE ( 'NONE', *, *, #263, .F. ) ; 512 | #497 = VECTOR ( 'NONE', #187, 1000.000000000000000 ) ; 513 | #498 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -18.55256701634527161 ) ) ; 514 | #499 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); 515 | #500 = AXIS2_PLACEMENT_3D ( 'NONE', #1050, #281, #549 ) ; 516 | #501 = LINE ( 'NONE', #1105, #960 ) ; 517 | #502 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude6', #419 ) ; 518 | #503 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 519 | #504 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, -12.50000000000000355 ) ) ; 520 | #505 = ORIENTED_EDGE ( 'NONE', *, *, #255, .T. ) ; 521 | #506 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 522 | #507 = AXIS2_PLACEMENT_3D ( 'NONE', #804, #452, #965 ) ; 523 | #508 = FACE_OUTER_BOUND ( 'NONE', #866, .T. ) ; 524 | #509 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 525 | #510 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 526 | #511 = ADVANCED_FACE ( 'NONE', ( #662 ), #318, .T. ) ; 527 | #512 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 0.000000000000000000 ) ) ; 528 | #513 = LINE ( 'NONE', #272, #617 ) ; 529 | #514 = VECTOR ( 'NONE', #146, 1000.000000000000000 ) ; 530 | #515 = CALENDAR_DATE ( 2022, 2, 5 ) ; 531 | #516 = AXIS2_PLACEMENT_3D ( 'NONE', #646, #564, #222 ) ; 532 | #517 = VERTEX_POINT ( 'NONE', #504 ) ; 533 | #518 = LINE ( 'NONE', #855, #337 ) ; 534 | #519 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, 25.88000000000004164 ) ) ; 535 | #520 = ORIENTED_EDGE ( 'NONE', *, *, #874, .F. ) ; 536 | #521 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 0.000000000000000000 ) ) ; 537 | #522 = AXIS2_PLACEMENT_3D ( 'NONE', #167, #851, #850 ) ; 538 | #523 = LINE ( 'NONE', #178, #908 ) ; 539 | #524 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 540 | #525 = VERTEX_POINT ( 'NONE', #413 ) ; 541 | #526 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 542 | #527 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, -3.000000000000000000, -13.49999999999996980 ) ) ; 543 | #528 = EDGE_CURVE ( 'NONE', #992, #698, #967, .T. ) ; 544 | #529 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, -3.000000000000000000, -33.49999999999996447 ) ) ; 545 | #530 = VECTOR ( 'NONE', #212, 1000.000000000000000 ) ; 546 | #531 = EDGE_LOOP ( 'NONE', ( #590, #821, #293, #366 ) ) ; 547 | #532 = VECTOR ( 'NONE', #714, 1000.000000000000000 ) ; 548 | #533 = CONICAL_SURFACE ( 'NONE', #207, 1.600000000000000755, 0.7853981633974488341 ) ; 549 | #534 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 28.50000000000003908 ) ) ; 550 | #535 = LINE ( 'NONE', #129, #896 ) ; 551 | #536 = EDGE_LOOP ( 'NONE', ( #553, #922, #956, #21 ) ) ; 552 | #537 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 553 | #538 = CIRCLE ( 'NONE', #881, 1.500000000000001332 ) ; 554 | #539 = VERTEX_POINT ( 'NONE', #830 ) ; 555 | #540 = LINE ( 'NONE', #214, #532 ) ; 556 | #541 = EDGE_LOOP ( 'NONE', ( #303, #505 ) ) ; 557 | #542 = AXIS2_PLACEMENT_3D ( 'NONE', #705, #1024, #774 ) ; 558 | #543 = ADVANCED_FACE ( 'NONE', ( #481 ), #331, .F. ) ; 559 | #544 = AXIS2_PLACEMENT_3D ( 'NONE', #567, #733, #312 ) ; 560 | #545 = FACE_OUTER_BOUND ( 'NONE', #536, .T. ) ; 561 | #546 = CYLINDRICAL_SURFACE ( 'NONE', #507, 2.620000000000004103 ) ; 562 | #547 = VERTEX_POINT ( 'NONE', #668 ) ; 563 | #548 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #844 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1053, #499, #589 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); 564 | #549 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 565 | #550 = AXIS2_PLACEMENT_3D ( 'NONE', #106, #261, #436 ) ; 566 | #551 = ORIENTED_EDGE ( 'NONE', *, *, #128, .F. ) ; 567 | #552 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 568 | #553 = ORIENTED_EDGE ( 'NONE', *, *, #55, .F. ) ; 569 | #554 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 570 | #555 = ADVANCED_FACE ( 'NONE', ( #903 ), #1012, .F. ) ; 571 | #556 = ORIENTED_EDGE ( 'NONE', *, *, #860, .T. ) ; 572 | #557 = VECTOR ( 'NONE', #558, 1000.000000000000000 ) ; 573 | #558 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 574 | #559 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #856, #601, ( #979 ) ) ; 575 | #560 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 576 | #561 = ORIENTED_EDGE ( 'NONE', *, *, #876, .T. ) ; 577 | #562 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 578 | #563 = EDGE_LOOP ( 'NONE', ( #952, #719 ) ) ; 579 | #564 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 580 | #565 = CIRCLE ( 'NONE', #159, 3.200000000000015277 ) ; 581 | #566 = ORIENTED_EDGE ( 'NONE', *, *, #415, .F. ) ; 582 | #567 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 28.50000000000003908 ) ) ; 583 | #568 = ORIENTED_EDGE ( 'NONE', *, *, #193, .T. ) ; 584 | #569 = EDGE_LOOP ( 'NONE', ( #870, #816, #404, #288 ) ) ; 585 | #570 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, -13.49999999999996980 ) ) ; 586 | #571 = EDGE_CURVE ( 'NONE', #39, #379, #845, .T. ) ; 587 | #572 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 588 | #573 = ORIENTED_EDGE ( 'NONE', *, *, #139, .F. ) ; 589 | #574 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 590 | #575 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 591 | #576 = ORIENTED_EDGE ( 'NONE', *, *, #255, .F. ) ; 592 | #577 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 593 | #578 = CONICAL_SURFACE ( 'NONE', #522, 1.600000000000000755, 0.7853981633974488341 ) ; 594 | #579 = EDGE_CURVE ( 'NONE', #664, #133, #325, .T. ) ; 595 | #580 = CYLINDRICAL_SURFACE ( 'NONE', #1039, 2.620000000000004103 ) ; 596 | #581 = ORIENTED_EDGE ( 'NONE', *, *, #676, .F. ) ; 597 | #582 = PLANE ( 'NONE', #684 ) ; 598 | #583 = ORIENTED_EDGE ( 'NONE', *, *, #571, .F. ) ; 599 | #584 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, -35.46689564855758192 ) ) ; 600 | #585 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, 21.75256701634535617 ) ) ; 601 | #586 = VERTEX_POINT ( 'NONE', #422 ) ; 602 | #587 = AXIS2_PLACEMENT_3D ( 'NONE', #494, #828, #666 ) ; 603 | #588 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 604 | #589 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); 605 | #590 = ORIENTED_EDGE ( 'NONE', *, *, #1040, .F. ) ; 606 | #591 = CIRCLE ( 'NONE', #633, 1.500000000000001332 ) ; 607 | #592 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, -3.000000000000000000, 33.96689564855758192 ) ) ; 608 | #593 = EDGE_CURVE ( 'NONE', #728, #368, #971, .T. ) ; 609 | #594 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 610 | #595 = EDGE_CURVE ( 'NONE', #829, #379, #657, .T. ) ; 611 | #596 = CARTESIAN_POINT ( 'NONE', ( -1.566176470588235725, 2.000000000000000000, -35.46543516246453720 ) ) ; 612 | #597 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 613 | #598 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 614 | #599 = ORIENTED_EDGE ( 'NONE', *, *, #268, .T. ) ; 615 | #600 = FACE_OUTER_BOUND ( 'NONE', #1072, .T. ) ; 616 | #601 = DATE_TIME_ROLE ( 'classification_date' ) ; 617 | #602 = LINE ( 'NONE', #947, #362 ) ; 618 | #603 = AXIS2_PLACEMENT_3D ( 'NONE', #130, #904, #143 ) ; 619 | #604 = VERTEX_POINT ( 'NONE', #813 ) ; 620 | #605 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 621 | #606 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, -12.50000000000000355 ) ) ; 622 | #607 = SHAPE_DEFINITION_REPRESENTATION ( #282, #64 ) ; 623 | #608 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, 18.55256701634533911 ) ) ; 624 | #609 = ORIENTED_EDGE ( 'NONE', *, *, #449, .T. ) ; 625 | #610 = EDGE_CURVE ( 'NONE', #136, #396, #687, .T. ) ; 626 | #611 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 31.12000000000003652 ) ) ; 627 | #612 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 628 | #613 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, -3.000000000000000000, -33.96689564855758192 ) ) ; 629 | #614 = ORIENTED_EDGE ( 'NONE', *, *, #720, .T. ) ; 630 | #615 = CYLINDRICAL_SURFACE ( 'NONE', #446, 12.50000000000000355 ) ; 631 | #616 = FACE_BOUND ( 'NONE', #978, .T. ) ; 632 | #617 = VECTOR ( 'NONE', #266, 1000.000000000000000 ) ; 633 | #618 = CIRCLE ( 'NONE', #793, 6.120000000000000107 ) ; 634 | #619 = ORIENTED_EDGE ( 'NONE', *, *, #1074, .F. ) ; 635 | #620 = CIRCLE ( 'NONE', #387, 1.600000000000000755 ) ; 636 | #621 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 637 | #622 = ORIENTED_EDGE ( 'NONE', *, *, #579, .F. ) ; 638 | #623 = EDGE_CURVE ( 'NONE', #539, #84, #1029, .T. ) ; 639 | #624 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -25.87999999999996703 ) ) ; 640 | #625 = PRODUCT ( 'base swivel cap V2', 'base swivel cap V2', '', ( #482 ) ) ; 641 | #626 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #575, #242, ( #979 ) ) ; 642 | #627 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 643 | #628 = EDGE_LOOP ( 'NONE', ( #1086, #643, #54, #742 ) ) ; 644 | #629 = FACE_OUTER_BOUND ( 'NONE', #715, .T. ) ; 645 | #630 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -18.55256701634527161 ) ) ; 646 | #631 = ORIENTED_EDGE ( 'NONE', *, *, #431, .F. ) ; 647 | #632 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, 33.96689564855758192 ) ) ; 648 | #633 = AXIS2_PLACEMENT_3D ( 'NONE', #592, #336, #597 ) ; 649 | #634 = ADVANCED_FACE ( 'NONE', ( #993 ), #582, .F. ) ; 650 | #635 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, -33.96689564855758192 ) ) ; 651 | #636 = ADVANCED_FACE ( 'NONE', ( #600 ), #430, .F. ) ; 652 | #637 = CONICAL_SURFACE ( 'NONE', #74, 1.600000000000000755, 0.7853981633974488341 ) ; 653 | #638 = ORIENTED_EDGE ( 'NONE', *, *, #754, .F. ) ; 654 | #639 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 35.50000000000000711 ) ) ; 655 | #640 = ORIENTED_EDGE ( 'NONE', *, *, #393, .F. ) ; 656 | #641 = EDGE_CURVE ( 'NONE', #133, #296, #102, .T. ) ; 657 | #642 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 658 | #643 = ORIENTED_EDGE ( 'NONE', *, *, #595, .F. ) ; 659 | #644 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, 18.55256701634533911 ) ) ; 660 | #645 = ORIENTED_EDGE ( 'NONE', *, *, #659, .F. ) ; 661 | #646 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, 18.55256701634533911 ) ) ; 662 | #647 = ORIENTED_EDGE ( 'NONE', *, *, #893, .F. ) ; 663 | #648 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 28.50000000000003908 ) ) ; 664 | #649 = EDGE_CURVE ( 'NONE', #396, #136, #760, .T. ) ; 665 | #650 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 666 | #651 = VERTEX_POINT ( 'NONE', #606 ) ; 667 | #652 = ORIENTED_EDGE ( 'NONE', *, *, #1110, .T. ) ; 668 | #653 = CIRCLE ( 'NONE', #305, 2.619999999999997442 ) ; 669 | #654 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 3.642919299551294898E-14 ) ) ; 670 | #655 = VECTOR ( 'NONE', #316, 1000.000000000000000 ) ; 671 | #656 = VERTEX_POINT ( 'NONE', #938 ) ; 672 | #657 = LINE ( 'NONE', #58, #2 ) ; 673 | #658 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ; 674 | #659 = EDGE_CURVE ( 'NONE', #240, #475, #1045, .T. ) ; 675 | #660 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 676 | #661 = VERTEX_POINT ( 'NONE', #183 ) ; 677 | #662 = FACE_OUTER_BOUND ( 'NONE', #948, .T. ) ; 678 | #663 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 679 | #664 = VERTEX_POINT ( 'NONE', #1113 ) ; 680 | #665 = VECTOR ( 'NONE', #843, 1000.000000000000000 ) ; 681 | #666 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 682 | #667 = ORIENTED_EDGE ( 'NONE', *, *, #173, .F. ) ; 683 | #668 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, -33.96689564855758192 ) ) ; 684 | #669 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 685 | #670 = ORIENTED_EDGE ( 'NONE', *, *, #164, .F. ) ; 686 | #671 = PLANE ( 'NONE', #371 ) ; 687 | #672 = EDGE_CURVE ( 'NONE', #57, #997, #862, .T. ) ; 688 | #673 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 689 | #674 = LINE ( 'NONE', #867, #665 ) ; 690 | #675 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 691 | #676 = EDGE_CURVE ( 'NONE', #306, #775, #513, .T. ) ; 692 | #677 = VECTOR ( 'NONE', #899, 1000.000000000000000 ) ; 693 | #678 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 694 | #679 = LINE ( 'NONE', #596, #1102 ) ; 695 | #680 = CARTESIAN_POINT ( 'NONE', ( -1.566176470588234171, -3.000000000000000000, 35.46543516246453720 ) ) ; 696 | #681 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 697 | #682 = LINE ( 'NONE', #194, #557 ) ; 698 | #683 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; 699 | #684 = AXIS2_PLACEMENT_3D ( 'NONE', #926, #912, #440 ) ; 700 | #685 = VERTEX_POINT ( 'NONE', #680 ) ; 701 | #686 = DIRECTION ( 'NONE', ( 8.659560562354937789E-17, 0.7071067811865472397, -0.7071067811865479058 ) ) ; 702 | #687 = CIRCLE ( 'NONE', #491, 2.620000000000004103 ) ; 703 | #688 = EDGE_CURVE ( 'NONE', #450, #133, #767, .T. ) ; 704 | #689 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 705 | #690 = ORIENTED_EDGE ( 'NONE', *, *, #610, .F. ) ; 706 | #691 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 707 | #692 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -28.49999999999997158 ) ) ; 708 | #693 = AXIS2_PLACEMENT_3D ( 'NONE', #367, #789, #707 ) ; 709 | #694 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 20.15256701634534053 ) ) ; 710 | #695 = EDGE_CURVE ( 'NONE', #997, #364, #523, .T. ) ; 711 | #696 = CC_DESIGN_SECURITY_CLASSIFICATION ( #979, ( #270 ) ) ; 712 | #697 = VECTOR ( 'NONE', #1054, 1000.000000000000000 ) ; 713 | #698 = VERTEX_POINT ( 'NONE', #950 ) ; 714 | #699 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 715 | #700 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, 15.35256701634532561 ) ) ; 716 | #701 = LINE ( 'NONE', #694, #969 ) ; 717 | #702 = EDGE_LOOP ( 'NONE', ( #15, #1000 ) ) ; 718 | #703 = FACE_OUTER_BOUND ( 'NONE', #332, .T. ) ; 719 | #704 = ORIENTED_EDGE ( 'NONE', *, *, #641, .T. ) ; 720 | #705 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, 28.50000000000003908 ) ) ; 721 | #706 = ORIENTED_EDGE ( 'NONE', *, *, #391, .T. ) ; 722 | #707 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 723 | #708 = ORIENTED_EDGE ( 'NONE', *, *, #66, .T. ) ; 724 | #709 = AXIS2_PLACEMENT_3D ( 'NONE', #417, #322, #85 ) ; 725 | #710 = DIRECTION ( 'NONE', ( -1.616184756637943103E-16, 0.000000000000000000, 1.000000000000000000 ) ) ; 726 | #711 = EDGE_LOOP ( 'NONE', ( #1047, #45 ) ) ; 727 | #712 = CIRCLE ( 'NONE', #516, 1.600000000000000755 ) ; 728 | #713 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 729 | #714 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 730 | #715 = EDGE_LOOP ( 'NONE', ( #382, #815, #884, #832, #796, #488, #706 ) ) ; 731 | #716 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 33.96689564855758192 ) ) ; 732 | #717 = VECTOR ( 'NONE', #699, 1000.000000000000000 ) ; 733 | #718 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 734 | #719 = ORIENTED_EDGE ( 'NONE', *, *, #193, .F. ) ; 735 | #720 = EDGE_CURVE ( 'NONE', #880, #203, #868, .T. ) ; 736 | #721 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 737 | #722 = EDGE_LOOP ( 'NONE', ( #890, #459, #614, #76 ) ) ; 738 | #723 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 739 | #724 = ORIENTED_EDGE ( 'NONE', *, *, #930, .T. ) ; 740 | #725 = EDGE_CURVE ( 'NONE', #150, #265, #93, .T. ) ; 741 | #726 = CIRCLE ( 'NONE', #873, 6.120000000000000107 ) ; 742 | #727 = FACE_OUTER_BOUND ( 'NONE', #145, .T. ) ; 743 | #728 = VERTEX_POINT ( 'NONE', #257 ) ; 744 | #729 = FACE_OUTER_BOUND ( 'NONE', #531, .T. ) ; 745 | #730 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 746 | #731 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 747 | #732 = ORIENTED_EDGE ( 'NONE', *, *, #1074, .T. ) ; 748 | #733 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 749 | #734 = DATE_AND_TIME ( #52, #762 ) ; 750 | #735 = CIRCLE ( 'NONE', #260, 1.500000000000001332 ) ; 751 | #736 = ORIENTED_EDGE ( 'NONE', *, *, #695, .F. ) ; 752 | #737 = ORIENTED_EDGE ( 'NONE', *, *, #659, .T. ) ; 753 | #738 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, 0.000000000000000000, -33.49999999999996447 ) ) ; 754 | #739 = EDGE_CURVE ( 'NONE', #1103, #547, #518, .T. ) ; 755 | #740 = ORIENTED_EDGE ( 'NONE', *, *, #725, .F. ) ; 756 | #741 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 757 | #742 = ORIENTED_EDGE ( 'NONE', *, *, #280, .T. ) ; 758 | #743 = CYLINDRICAL_SURFACE ( 'NONE', #90, 6.120000000000000107 ) ; 759 | #744 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 3.642919299551294898E-14 ) ) ; 760 | #745 = VECTOR ( 'NONE', #731, 1000.000000000000000 ) ; 761 | #746 = ORIENTED_EDGE ( 'NONE', *, *, #408, .F. ) ; 762 | #747 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 763 | #748 = CALENDAR_DATE ( 2022, 2, 5 ) ; 764 | #749 = LINE ( 'NONE', #819, #1015 ) ; 765 | #750 = ORIENTED_EDGE ( 'NONE', *, *, #346, .F. ) ; 766 | #751 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 2.000000000000000000, -15.35256701634525633 ) ) ; 767 | #752 = VERTEX_POINT ( 'NONE', #700 ) ; 768 | #753 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -31.11999999999997257 ) ) ; 769 | #754 = EDGE_CURVE ( 'NONE', #296, #196, #777, .T. ) ; 770 | #755 = CIRCLE ( 'NONE', #238, 1.600000000000000755 ) ; 771 | #756 = ADVANCED_FACE ( 'NONE', ( #97 ), #340, .F. ) ; 772 | #757 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 773 | #758 = PLANE ( 'NONE', #466 ) ; 774 | #759 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -33.49999999999996447 ) ) ; 775 | #760 = CIRCLE ( 'NONE', #472, 2.620000000000004103 ) ; 776 | #761 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 777 | #762 = LOCAL_TIME ( 10, 4, 46.00000000000000000, #913 ) ; 778 | #763 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 6.120000000000036522 ) ) ; 779 | #764 = EDGE_LOOP ( 'NONE', ( #750, #219, #1062, #313 ) ) ; 780 | #765 = EDGE_CURVE ( 'NONE', #240, #752, #345, .T. ) ; 781 | #766 = FACE_BOUND ( 'NONE', #541, .T. ) ; 782 | #767 = LINE ( 'NONE', #1019, #285 ) ; 783 | #768 = LINE ( 'NONE', #939, #883 ) ; 784 | #769 = EDGE_LOOP ( 'NONE', ( #124, #944, #849, #746 ) ) ; 785 | #770 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -18.55256701634527161 ) ) ; 786 | #771 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 16.95256701634534124 ) ) ; 787 | #772 = EDGE_CURVE ( 'NONE', #364, #685, #591, .T. ) ; 788 | #773 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 789 | #774 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 790 | #775 = VERTEX_POINT ( 'NONE', #941 ) ; 791 | #776 = LINE ( 'NONE', #1030, #921 ) ; 792 | #777 = LINE ( 'NONE', #168, #497 ) ; 793 | #778 = VECTOR ( 'NONE', #686, 1000.000000000000000 ) ; 794 | #779 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 795 | #780 = EDGE_LOOP ( 'NONE', ( #416, #1005, #386, #370 ) ) ; 796 | #781 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 797 | #782 = EDGE_LOOP ( 'NONE', ( #925, #1067, #551, #269 ) ) ; 798 | #783 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, -3.000000000000000000, -6.119999999999963691 ) ) ; 799 | #784 = ADVANCED_FACE ( 'NONE', ( #4 ), #10, .T. ) ; 800 | #785 = ORIENTED_EDGE ( 'NONE', *, *, #26, .T. ) ; 801 | #786 = ADVANCED_FACE ( 'NONE', ( #447 ), #373, .T. ) ; 802 | #787 = LINE ( 'NONE', #192, #697 ) ; 803 | #788 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 804 | #789 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 805 | #790 = CIRCLE ( 'NONE', #25, 6.120000000000000107 ) ; 806 | #791 = CARTESIAN_POINT ( 'NONE', ( 3.469446951953614189E-15, -3.000000000000000000, -33.96689564855758192 ) ) ; 807 | #792 = VERTEX_POINT ( 'NONE', #300 ) ; 808 | #793 = AXIS2_PLACEMENT_3D ( 'NONE', #654, #673, #929 ) ; 809 | #794 = FACE_OUTER_BOUND ( 'NONE', #115, .T. ) ; 810 | #795 = ADVANCED_FACE ( 'NONE', ( #794 ), #197, .T. ) ; 811 | #796 = ORIENTED_EDGE ( 'NONE', *, *, #593, .T. ) ; 812 | #797 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 0.000000000000000000 ) ) ; 813 | #798 = ADVANCED_FACE ( 'NONE', ( #462 ), #615, .F. ) ; 814 | #799 = ORIENTED_EDGE ( 'NONE', *, *, #86, .F. ) ; 815 | #800 = LINE ( 'NONE', #451, #299 ) ; 816 | #801 = CIRCLE ( 'NONE', #709, 1.600000000000000755 ) ; 817 | #802 = EDGE_LOOP ( 'NONE', ( #18, #438, #468, #213 ) ) ; 818 | #803 = ADVANCED_FACE ( 'NONE', ( #545 ), #637, .F. ) ; 819 | #804 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -28.49999999999997158 ) ) ; 820 | #805 = FACE_OUTER_BOUND ( 'NONE', #780, .T. ) ; 821 | #806 = EDGE_LOOP ( 'NONE', ( #1034, #631, #583, #785 ) ) ; 822 | #807 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 823 | #808 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 824 | #809 = VECTOR ( 'NONE', #170, 1000.000000000000000 ) ; 825 | #810 = VECTOR ( 'NONE', #788, 1000.000000000000000 ) ; 826 | #811 = FACE_OUTER_BOUND ( 'NONE', #702, .T. ) ; 827 | #812 = ORIENTED_EDGE ( 'NONE', *, *, #206, .T. ) ; 828 | #813 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, -3.000000000000000000, 13.50000000000003908 ) ) ; 829 | #814 = APPROVAL_STATUS ( 'not_yet_approved' ) ; 830 | #815 = ORIENTED_EDGE ( 'NONE', *, *, #695, .T. ) ; 831 | #816 = ORIENTED_EDGE ( 'NONE', *, *, #346, .T. ) ; 832 | #817 = FACE_OUTER_BOUND ( 'NONE', #806, .T. ) ; 833 | #818 = EDGE_CURVE ( 'NONE', #604, #306, #957, .T. ) ; 834 | #819 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, -35.46689564855758192 ) ) ; 835 | #820 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #669, #226, ( #625 ) ) ; 836 | #821 = ORIENTED_EDGE ( 'NONE', *, *, #623, .F. ) ; 837 | #822 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 33.50000000000002842 ) ) ; 838 | #823 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ; 839 | #824 = AXIS2_PLACEMENT_3D ( 'NONE', #648, #1081, #235 ) ; 840 | #825 = ORIENTED_EDGE ( 'NONE', *, *, #147, .F. ) ; 841 | #826 = AXIS2_PLACEMENT_3D ( 'NONE', #608, #594, #98 ) ; 842 | #827 = AXIS2_PLACEMENT_3D ( 'NONE', #989, #220, #562 ) ; 843 | #828 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 844 | #829 = VERTEX_POINT ( 'NONE', #1065 ) ; 845 | #830 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 25.88000000000004164 ) ) ; 846 | #831 = PERSON_AND_ORGANIZATION ( #20, #457 ) ; 847 | #832 = ORIENTED_EDGE ( 'NONE', *, *, #874, .T. ) ; 848 | #833 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, 28.50000000000003908 ) ) ; 849 | #834 = AXIS2_PLACEMENT_3D ( 'NONE', #117, #781, #1058 ) ; 850 | #835 = CYLINDRICAL_SURFACE ( 'NONE', #175, 1.500000000000001332 ) ; 851 | #836 = ORIENTED_EDGE ( 'NONE', *, *, #720, .F. ) ; 852 | #837 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 853 | #838 = ADVANCED_FACE ( 'NONE', ( #703 ), #980, .F. ) ; 854 | #839 = VECTOR ( 'NONE', #295, 1000.000000000000000 ) ; 855 | #840 = ORIENTED_EDGE ( 'NONE', *, *, #103, .F. ) ; 856 | #841 = EDGE_CURVE ( 'NONE', #152, #450, #800, .T. ) ; 857 | #842 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 858 | #843 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 859 | #844 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1053, 'distance_accuracy_value', 'NONE'); 860 | #845 = LINE ( 'NONE', #822, #202 ) ; 861 | #846 = CALENDAR_DATE ( 2022, 2, 5 ) ; 862 | #847 = AXIS2_PLACEMENT_3D ( 'NONE', #29, #879, #111 ) ; 863 | #848 = ADVANCED_FACE ( 'NONE', ( #968 ), #363, .F. ) ; 864 | #849 = ORIENTED_EDGE ( 'NONE', *, *, #739, .T. ) ; 865 | #850 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 866 | #851 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 867 | #852 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 868 | #853 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 869 | #854 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 870 | #855 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, -33.96689564855758192 ) ) ; 871 | #856 = DATE_AND_TIME ( #846, #445 ) ; 872 | #857 = AXIS2_PLACEMENT_3D ( 'NONE', #83, #16, #262 ) ; 873 | #858 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 874 | #859 = ORIENTED_EDGE ( 'NONE', *, *, #623, .T. ) ; 875 | #860 = EDGE_CURVE ( 'NONE', #57, #651, #253, .T. ) ; 876 | #861 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 877 | #862 = LINE ( 'NONE', #276, #958 ) ; 878 | #863 = ADVANCED_FACE ( 'NONE', ( #1068 ), #289, .F. ) ; 879 | #864 = APPROVAL_DATE_TIME ( #11, #40 ) ; 880 | #865 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 16.95256701634534124 ) ) ; 881 | #866 = EDGE_LOOP ( 'NONE', ( #972, #290, #314, #556, #1069, #243, #237 ) ) ; 882 | #867 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -25.87999999999996703 ) ) ; 883 | #868 = LINE ( 'NONE', #1106, #425 ) ; 884 | #869 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 885 | #870 = ORIENTED_EDGE ( 'NONE', *, *, #55, .T. ) ; 886 | #871 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 887 | #872 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 888 | #873 = AXIS2_PLACEMENT_3D ( 'NONE', #405, #560, #660 ) ; 889 | #874 = EDGE_CURVE ( 'NONE', #685, #728, #252, .T. ) ; 890 | #875 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.7071067811865472397, 0.7071067811865479058 ) ) ; 891 | #876 = EDGE_CURVE ( 'NONE', #330, #586, #787, .T. ) ; 892 | #877 = ORIENTED_EDGE ( 'NONE', *, *, #1048, .F. ) ; 893 | #878 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 894 | #879 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 895 | #880 = VERTEX_POINT ( 'NONE', #889 ) ; 896 | #881 = AXIS2_PLACEMENT_3D ( 'NONE', #82, #151, #156 ) ; 897 | #882 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 33.50000000000002842 ) ) ; 898 | #883 = VECTOR ( 'NONE', #19, 1000.000000000000000 ) ; 899 | #884 = ORIENTED_EDGE ( 'NONE', *, *, #772, .T. ) ; 900 | #885 = FACE_BOUND ( 'NONE', #563, .T. ) ; 901 | #886 = AXIS2_PLACEMENT_3D ( 'NONE', #1101, #477, #407 ) ; 902 | #887 = ORIENTED_EDGE ( 'NONE', *, *, #1026, .F. ) ; 903 | #888 = EDGE_CURVE ( 'NONE', #775, #792, #963, .T. ) ; 904 | #889 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, -6.119999999999963691 ) ) ; 905 | #890 = ORIENTED_EDGE ( 'NONE', *, *, #876, .F. ) ; 906 | #891 = LINE ( 'NONE', #791, #275 ) ; 907 | #892 = ORIENTED_EDGE ( 'NONE', *, *, #688, .T. ) ; 908 | #893 = EDGE_CURVE ( 'NONE', #34, #50, #210, .T. ) ; 909 | #894 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, 21.12439348241742820, 33.50000000000002842 ) ) ; 910 | #895 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, 18.55256701634533911 ) ) ; 911 | #896 = VECTOR ( 'NONE', #378, 1000.000000000000000 ) ; 912 | #897 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 913 | #898 = ORIENTED_EDGE ( 'NONE', *, *, #173, .T. ) ; 914 | #899 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 915 | #900 = VERTEX_POINT ( 'NONE', #454 ) ; 916 | #901 = LINE ( 'NONE', #218, #1071 ) ; 917 | #902 = ORIENTED_EDGE ( 'NONE', *, *, #672, .F. ) ; 918 | #903 = FACE_OUTER_BOUND ( 'NONE', #480, .T. ) ; 919 | #904 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 920 | #905 = EDGE_CURVE ( 'NONE', #150, #992, #27, .T. ) ; 921 | #906 = EDGE_LOOP ( 'NONE', ( #1011, #384, #566, #42 ) ) ; 922 | #907 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 923 | #908 = VECTOR ( 'NONE', #1022, 1000.000000000000000 ) ; 924 | #909 = EDGE_CURVE ( 'NONE', #900, #364, #458, .T. ) ; 925 | #910 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, 18.55256701634533911 ) ) ; 926 | #911 = ORIENTED_EDGE ( 'NONE', *, *, #930, .F. ) ; 927 | #912 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 928 | #913 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 5, 0, .BEHIND. ) ; 929 | #914 = ORIENTED_EDGE ( 'NONE', *, *, #147, .T. ) ; 930 | #915 = ORIENTED_EDGE ( 'NONE', *, *, #739, .F. ) ; 931 | #916 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ; 932 | #917 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 933 | #918 = ORIENTED_EDGE ( 'NONE', *, *, #909, .T. ) ; 934 | #919 = PLANE ( 'NONE', #1025 ) ; 935 | #920 = APPROVAL_STATUS ( 'not_yet_approved' ) ; 936 | #921 = VECTOR ( 'NONE', #339, 1000.000000000000000 ) ; 937 | #922 = ORIENTED_EDGE ( 'NONE', *, *, #725, .T. ) ; 938 | #923 = ADVANCED_FACE ( 'NONE', ( #56 ), #487, .F. ) ; 939 | #924 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, 33.96689564855758192 ) ) ; 940 | #925 = ORIENTED_EDGE ( 'NONE', *, *, #672, .T. ) ; 941 | #926 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 0.000000000000000000 ) ) ; 942 | #927 = ORIENTED_EDGE ( 'NONE', *, *, #14, .T. ) ; 943 | #928 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, 20.15256701634534053 ) ) ; 944 | #929 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 945 | #930 = EDGE_CURVE ( 'NONE', #100, #240, #48, .T. ) ; 946 | #931 = APPROVAL_PERSON_ORGANIZATION ( #831, #361, #994 ) ; 947 | #932 = ORIENTED_EDGE ( 'NONE', *, *, #428, .T. ) ; 948 | #933 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, 16.95256701634534124 ) ) ; 949 | #934 = AXIS2_PLACEMENT_3D ( 'NONE', #986, #323, #1099 ) ; 950 | #935 = ORIENTED_EDGE ( 'NONE', *, *, #528, .F. ) ; 951 | #936 = FACE_OUTER_BOUND ( 'NONE', #406, .T. ) ; 952 | #937 = DESIGN_CONTEXT ( 'detailed design', #683, 'design' ) ; 953 | #938 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, 31.12000000000003652 ) ) ; 954 | #939 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 0.000000000000000000 ) ) ; 955 | #940 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 956 | #941 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, -3.000000000000000000, 33.50000000000002842 ) ) ; 957 | #942 = PLANE ( 'NONE', #1044 ) ; 958 | #943 = ADVANCED_FACE ( 'NONE', ( #245 ), #999, .T. ) ; 959 | #944 = ORIENTED_EDGE ( 'NONE', *, *, #391, .F. ) ; 960 | #945 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 961 | #946 = VECTOR ( 'NONE', #411, 1000.000000000000000 ) ; 962 | #947 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, -3.000000000000000000, 0.000000000000000000 ) ) ; 963 | #948 = EDGE_LOOP ( 'NONE', ( #859, #914 ) ) ; 964 | #949 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -28.49999999999997158 ) ) ; 965 | #950 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, -3.000000000000000000, -16.95256701634527019 ) ) ; 966 | #951 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 3.642919299551294898E-14 ) ) ; 967 | #952 = ORIENTED_EDGE ( 'NONE', *, *, #987, .F. ) ; 968 | #953 = EDGE_CURVE ( 'NONE', #661, #196, #901, .T. ) ; 969 | #954 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; 970 | #955 = ADVANCED_FACE ( 'NONE', ( #75 ), #533, .F. ) ; 971 | #956 = ORIENTED_EDGE ( 'NONE', *, *, #123, .F. ) ; 972 | #957 = LINE ( 'NONE', #974, #977 ) ; 973 | #958 = VECTOR ( 'NONE', #872, 1000.000000000000000 ) ; 974 | #959 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 13.50000000000003908 ) ) ; 975 | #960 = VECTOR ( 'NONE', #161, 1000.000000000000000 ) ; 976 | #961 = AXIS2_PLACEMENT_3D ( 'NONE', #632, #24, #388 ) ; 977 | #962 = ORIENTED_EDGE ( 'NONE', *, *, #26, .F. ) ; 978 | #963 = LINE ( 'NONE', #882, #530 ) ; 979 | #964 = VERTEX_POINT ( 'NONE', #585 ) ; 980 | #965 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 981 | #966 = EDGE_CURVE ( 'NONE', #118, #368, #749, .T. ) ; 982 | #967 = CIRCLE ( 'NONE', #344, 1.600000000000000755 ) ; 983 | #968 = FACE_OUTER_BOUND ( 'NONE', #228, .T. ) ; 984 | #969 = VECTOR ( 'NONE', #341, 1000.000000000000000 ) ; 985 | #970 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 0.000000000000000000 ) ) ; 986 | #971 = CIRCLE ( 'NONE', #827, 1.500000000000008216 ) ; 987 | #972 = ORIENTED_EDGE ( 'NONE', *, *, #893, .T. ) ; 988 | #973 = EDGE_CURVE ( 'NONE', #792, #604, #65, .T. ) ; 989 | #974 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, 13.50000000000003908 ) ) ; 990 | #975 = ORIENTED_EDGE ( 'NONE', *, *, #595, .T. ) ; 991 | #976 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ; 992 | #977 = VECTOR ( 'NONE', #376, 1000.000000000000000 ) ; 993 | #978 = EDGE_LOOP ( 'NONE', ( #279, #433, #53, #581 ) ) ; 994 | #979 = SECURITY_CLASSIFICATION ( '', '', #236 ) ; 995 | #980 = CONICAL_SURFACE ( 'NONE', #834, 1.600000000000000755, 0.7853981633974488341 ) ; 996 | #981 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 997 | #982 = EDGE_LOOP ( 'NONE', ( #638, #186, #317, #165 ) ) ; 998 | #983 = FACE_OUTER_BOUND ( 'NONE', #109, .T. ) ; 999 | #984 = EDGE_LOOP ( 'NONE', ( #1077, #284, #652, #670 ) ) ; 1000 | #985 = VECTOR ( 'NONE', #37, 1000.000000000000000 ) ; 1001 | #986 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, 18.55256701634533911 ) ) ; 1002 | #987 = EDGE_CURVE ( 'NONE', #203, #586, #726, .T. ) ; 1003 | #988 = EDGE_LOOP ( 'NONE', ( #412, #138 ) ) ; 1004 | #989 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, -3.000000000000000000, -33.96689564855758192 ) ) ; 1005 | #990 = ADVANCED_FACE ( 'NONE', ( #727 ), #580, .F. ) ; 1006 | #991 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 1007 | #992 = VERTEX_POINT ( 'NONE', #473 ) ; 1008 | #993 = FACE_OUTER_BOUND ( 'NONE', #906, .T. ) ; 1009 | #994 = APPROVAL_ROLE ( '' ) ; 1010 | #995 = VECTOR ( 'NONE', #333, 1000.000000000000000 ) ; 1011 | #996 = EDGE_LOOP ( 'NONE', ( #892, #622, #320, #221 ) ) ; 1012 | #997 = VERTEX_POINT ( 'NONE', #127 ) ; 1013 | #998 = CC_DESIGN_APPROVAL ( #443, ( #1063 ) ) ; 1014 | #999 = CYLINDRICAL_SURFACE ( 'NONE', #587, 1.500000000000001332 ) ; 1015 | #1000 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .T. ) ; 1016 | #1001 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -28.49999999999997158 ) ) ; 1017 | #1002 = EDGE_LOOP ( 'NONE', ( #274, #962, #360, #463 ) ) ; 1018 | #1003 = ADVANCED_FACE ( 'NONE', ( #805 ), #835, .T. ) ; 1019 | #1004 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 1020 | #1005 = ORIENTED_EDGE ( 'NONE', *, *, #1023, .F. ) ; 1021 | #1006 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, 21.12439348241742820, -13.49999999999996980 ) ) ; 1022 | #1007 = AXIS2_PLACEMENT_3D ( 'NONE', #949, #503, #940 ) ; 1023 | #1008 = ORIENTED_EDGE ( 'NONE', *, *, #164, .T. ) ; 1024 | #1009 = ADVANCED_FACE ( 'NONE', ( #811 ), #154, .T. ) ; 1025 | #1010 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, -1.000000000000000000 ) ) ; 1026 | #1011 = ORIENTED_EDGE ( 'NONE', *, *, #328, .T. ) ; 1027 | #1012 = CYLINDRICAL_SURFACE ( 'NONE', #403, 1.600000000000000755 ) ; 1028 | #1013 = LINE ( 'NONE', #1049, #321 ) ; 1029 | #1014 = VERTEX_POINT ( 'NONE', #738 ) ; 1030 | #1015 = VECTOR ( 'NONE', #392, 1000.000000000000000 ) ; 1031 | #1016 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 13.50000000000003908 ) ) ; 1032 | #1017 = AXIS2_PLACEMENT_3D ( 'NONE', #970, #552, #301 ) ; 1033 | #1018 = LINE ( 'NONE', #421, #35 ) ; 1034 | #1019 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, -3.000000000000000000, -13.49999999999996980 ) ) ; 1035 | #1020 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, 3.642919299551294898E-14 ) ) ; 1036 | #1021 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 1037 | #1022 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 1038 | #1023 = EDGE_CURVE ( 'NONE', #685, #50, #1076, .T. ) ; 1039 | #1024 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 1040 | #1025 = AXIS2_PLACEMENT_3D ( 'NONE', #307, #68, #247 ) ; 1041 | #1026 = EDGE_CURVE ( 'NONE', #1014, #296, #304, .T. ) ; 1042 | #1027 = CIRCLE ( 'NONE', #826, 3.200000000000015277 ) ; 1043 | #1028 = ORIENTED_EDGE ( 'NONE', *, *, #431, .T. ) ; 1044 | #1029 = CIRCLE ( 'NONE', #544, 2.619999999999997442 ) ; 1045 | #1030 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 33.50000000000002842 ) ) ; 1046 | #1031 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, 16.95256701634534124 ) ) ; 1047 | #1032 = APPROVAL_STATUS ( 'not_yet_approved' ) ; 1048 | #1033 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, -3.000000000000000000, -33.49999999999996447 ) ) ; 1049 | #1034 = ORIENTED_EDGE ( 'NONE', *, *, #888, .T. ) ; 1050 | #1035 = DIRECTION ( 'NONE', ( -0.000000000000000000, 1.000000000000000000, -0.000000000000000000 ) ) ; 1051 | #1036 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 1052 | #1037 = CIRCLE ( 'NONE', #229, 6.120000000000000107 ) ; 1053 | #1038 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 1054 | #1039 = AXIS2_PLACEMENT_3D ( 'NONE', #1079, #479, #49 ) ; 1055 | #1040 = EDGE_CURVE ( 'NONE', #84, #656, #309, .T. ) ; 1056 | #1041 = ORIENTED_EDGE ( 'NONE', *, *, #490, .F. ) ; 1057 | #1042 = EDGE_CURVE ( 'NONE', #539, #342, #41, .T. ) ; 1058 | #1043 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 1059 | #1044 = AXIS2_PLACEMENT_3D ( 'NONE', #1051, #858, #365 ) ; 1060 | #1045 = LINE ( 'NONE', #1031, #1108 ) ; 1061 | #1046 = CIRCLE ( 'NONE', #418, 1.500000000000008216 ) ; 1062 | #1047 = ORIENTED_EDGE ( 'NONE', *, *, #610, .T. ) ; 1063 | #1048 = EDGE_CURVE ( 'NONE', #525, #475, #712, .T. ) ; 1064 | #1049 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 35.50000000000000711 ) ) ; 1065 | #1050 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 2.000000000000000000, 0.000000000000000000 ) ) ; 1066 | #1051 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 13.50000000000003908 ) ) ; 1067 | #1052 = ORIENTED_EDGE ( 'NONE', *, *, #66, .F. ) ; 1068 | #1053 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); 1069 | #1054 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ; 1070 | #1055 = EDGE_CURVE ( 'NONE', #330, #880, #618, .T. ) ; 1071 | #1056 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, 0.000000000000000000, 33.50000000000002842 ) ) ; 1072 | #1057 = VECTOR ( 'NONE', #642, 1000.000000000000000 ) ; 1073 | #1058 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ; 1074 | #1059 = EDGE_LOOP ( 'NONE', ( #131, #1041, #915, #180 ) ) ; 1075 | #1060 = EDGE_CURVE ( 'NONE', #880, #330, #1037, .T. ) ; 1076 | #1061 = FACE_BOUND ( 'NONE', #1083, .T. ) ; 1077 | #1062 = ORIENTED_EDGE ( 'NONE', *, *, #905, .T. ) ; 1078 | #1063 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #270, #937 ) ; 1079 | #1064 = AXIS2_PLACEMENT_3D ( 'NONE', #356, #691, #92 ) ; 1080 | #1065 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999995701, 0.000000000000000000, 13.50000000000003908 ) ) ; 1081 | #1066 = LINE ( 'NONE', #369, #810 ) ; 1082 | #1067 = ORIENTED_EDGE ( 'NONE', *, *, #47, .F. ) ; 1083 | #1068 = FACE_OUTER_BOUND ( 'NONE', #397, .T. ) ; 1084 | #1069 = ORIENTED_EDGE ( 'NONE', *, *, #408, .T. ) ; 1085 | #1070 = FACE_BOUND ( 'NONE', #1100, .T. ) ; 1086 | #1071 = VECTOR ( 'NONE', #467, 1000.000000000000000 ) ; 1087 | #1072 = EDGE_LOOP ( 'NONE', ( #478, #350, #619, #155 ) ) ; 1088 | #1073 = CIRCLE ( 'NONE', #1111, 3.200000000000015277 ) ; 1089 | #1074 = EDGE_CURVE ( 'NONE', #1014, #661, #501, .T. ) ; 1090 | #1075 = AXIS2_PLACEMENT_3D ( 'NONE', #894, #627, #621 ) ; 1091 | #1076 = LINE ( 'NONE', #1085, #655 ) ; 1092 | #1077 = ORIENTED_EDGE ( 'NONE', *, *, #649, .F. ) ; 1093 | #1078 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ; 1094 | #1079 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, 0.000000000000000000, -28.49999999999997158 ) ) ; 1095 | #1080 = VERTEX_POINT ( 'NONE', #1016 ) ; 1096 | #1081 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ; 1097 | #1082 = APPROVAL_DATE_TIME ( #734, #443 ) ; 1098 | #1083 = EDGE_LOOP ( 'NONE', ( #355, #113 ) ) ; 1099 | #1084 = ORIENTED_EDGE ( 'NONE', *, *, #1042, .F. ) ; 1100 | #1085 = CARTESIAN_POINT ( 'NONE', ( -1.566176470588235725, 2.000000000000000000, 35.46543516246453720 ) ) ; 1101 | #1086 = ORIENTED_EDGE ( 'NONE', *, *, #571, .T. ) ; 1102 | #1087 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000000, 2.000000000000000000, -33.96689564855758192 ) ) ; 1103 | #1088 = CALENDAR_DATE ( 2022, 2, 5 ) ; 1104 | #1089 = ORIENTED_EDGE ( 'NONE', *, *, #227, .T. ) ; 1105 | #1090 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, -3.000000000000000000, -13.49999999999996980 ) ) ; 1106 | #1091 = EDGE_CURVE ( 'NONE', #964, #752, #565, .T. ) ; 1107 | #1092 = LOCAL_TIME ( 10, 4, 46.00000000000000000, #69 ) ; 1108 | #1093 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, 21.12439348241742820, -33.49999999999996447 ) ) ; 1109 | #1094 = EDGE_LOOP ( 'NONE', ( #250, #31, #246, #311 ) ) ; 1110 | #1095 = FACE_OUTER_BOUND ( 'NONE', #996, .T. ) ; 1111 | #1096 = DATE_AND_TIME ( #748, #30 ) ; 1112 | #1097 = EDGE_CURVE ( 'NONE', #265, #492, #1073, .T. ) ; 1113 | #1098 = LINE ( 'NONE', #928, #995 ) ; 1114 | #1099 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ; 1115 | #1100 = EDGE_LOOP ( 'NONE', ( #496, #205 ) ) ; 1116 | #1101 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 5.000000000000000000, -18.55256701634527161 ) ) ; 1117 | #1102 = VECTOR ( 'NONE', #1021, 1000.000000000000000 ) ; 1118 | #1103 = VERTEX_POINT ( 'NONE', #248 ) ; 1119 | #1104 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -20.15256701634527303 ) ) ; 1120 | #1105 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -33.49999999999996447 ) ) ; 1121 | #1106 = CARTESIAN_POINT ( 'NONE', ( -23.62209682755465323, 0.000000000000000000, -6.119999999999963691 ) ) ; 1122 | #1107 = LINE ( 'NONE', #251, #126 ) ; 1123 | #1108 = VECTOR ( 'NONE', #761, 1000.000000000000000 ) ; 1124 | #1109 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ; 1125 | #1110 = EDGE_CURVE ( 'NONE', #216, #308, #91, .T. ) ; 1126 | #1111 = AXIS2_PLACEMENT_3D ( 'NONE', #22, #871, #163 ) ; 1127 | #1112 = AXIS2_PLACEMENT_3D ( 'NONE', #461, #723, #297 ) ; 1128 | #1113 = CARTESIAN_POINT ( 'NONE', ( -7.659999999999994813, 0.000000000000000000, -13.49999999999996980 ) ) ; 1129 | #1114 = EDGE_CURVE ( 'NONE', #900, #57, #1013, .T. ) ; 1130 | #1115 = CARTESIAN_POINT ( 'NONE', ( -10.99999999999999645, -3.000000000000000000, -31.11999999999997257 ) ) ; 1131 | #1116 = ORIENTED_EDGE ( 'NONE', *, *, #1023, .T. ) ; 1132 | #1117 = CARTESIAN_POINT ( 'NONE', ( -14.62209682755464968, 0.3999999999999863110, -20.15256701634527303 ) ) ; 1133 | #1118 = CARTESIAN_POINT ( 'NONE', ( -0.8599999999999962119, 0.000000000000000000, 13.50000000000003908 ) ) ; 1134 | ENDSEC; 1135 | END-ISO-10303-21; 1136 | --------------------------------------------------------------------------------