diff --git a/keyboards/p65bt/build.sh b/keyboards/p65bt/build.sh new file mode 100644 index 000000000000..68624085b1f5 --- /dev/null +++ b/keyboards/p65bt/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd .. +cd .. +make p65bt:default \ No newline at end of file diff --git a/keyboards/p65bt/config.h b/keyboards/p65bt/config.h new file mode 100755 index 000000000000..09eb229b6f1d --- /dev/null +++ b/keyboards/p65bt/config.h @@ -0,0 +1,55 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6065 +#define DEVICE_VER 0x0001 +#define MANUFACTURER i2dev +#define PRODUCT p65bt +#define DESCRIPTION Practice 65 modified keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { F7, F6, F5, F4, F1 } +#define MATRIX_COL_PINS { D1, D0, C6, D7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +//#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION ROW2COL + +/* number of backlight levels */ + +//#ifdef BACKLIGHT_PIN +//#define BACKLIGHT_LEVELS 3 +//#endif +#define BACKLIGHT_LEVELS 6 +//#define BACKLIGHT_BREATHING +#define BREATHING_PERIOD 6 + +/* Set 0 if debouncing isn't needed */ +/* Default debounce is 5 */ +#define DEBOUNCE 10 +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE +#define RGBLIGHT_ANIMATIONS + +#define RGBLED_NUM 20 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#define RGBLIGHT_SLEEP +#define RGBLIGHT_LIMIT_VAL 0 + +#endif \ No newline at end of file diff --git a/keyboards/p65bt/frame/plastic/KBD_Box_FL.STEP b/keyboards/p65bt/frame/plastic/KBD_Box_FL.STEP new file mode 100644 index 000000000000..819d61da3e01 --- /dev/null +++ b/keyboards/p65bt/frame/plastic/KBD_Box_FL.STEP @@ -0,0 +1,1301 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('KBD_Box_FL.STEP', + '2020-06-04T20:29:48', + ( '1' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2019', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = VERTEX_POINT ( 'NONE', #403 ) ; +#2 = DIRECTION ( 'NONE', ( 2.168404344971006896E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( -131.4000000000000057, 9.600000000000040501, -51.57500000000000995 ) ) ; +#4 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5 = CIRCLE ( 'NONE', #1099, 1.499999999999994449 ) ; +#6 = AXIS2_PLACEMENT_3D ( 'NONE', #1022, #1015, #1008 ) ; +#7 = ORIENTED_EDGE ( 'NONE', *, *, #1100, .F. ) ; +#8 = VERTEX_POINT ( 'NONE', #406 ) ; +#9 = ADVANCED_FACE ( 'NONE', ( #418 ), #422, .T. ) ; +#10 = LINE ( 'NONE', #3, #326 ) ; +#11 = LINE ( 'NONE', #915, #299 ) ; +#12 = EDGE_LOOP ( 'NONE', ( #126, #1060, #25, #532, #62, #482 ) ) ; +#13 = ADVANCED_FACE ( 'NONE', ( #441 ), #445, .T. ) ; +#14 = ORIENTED_EDGE ( 'NONE', *, *, #550, .T. ) ; +#15 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#16 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 11.00000000000008704, -50.95000000000000284 ) ) ; +#17 = DIRECTION ( 'NONE', ( 2.478176394252582620E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#18 = ORIENTED_EDGE ( 'NONE', *, *, #134, .T. ) ; +#19 = ORIENTED_EDGE ( 'NONE', *, *, #492, .T. ) ; +#20 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#21 = VECTOR ( 'NONE', #501, 1000.000000000000000 ) ; +#22 = ORIENTED_EDGE ( 'NONE', *, *, #500, .F. ) ; +#23 = EDGE_CURVE ( 'NONE', #181, #1011, #484, .T. ) ; +#24 = FACE_OUTER_BOUND ( 'NONE', #132, .T. ) ; +#25 = ORIENTED_EDGE ( 'NONE', *, *, #389, .T. ) ; +#26 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 17.00000000000000000, 0.0000000000000000000 ) ) ; +#27 = ORIENTED_EDGE ( 'NONE', *, *, #1245, .T. ) ; +#28 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000006217, -2.000000000000001776, -45.57500000000000284 ) ) ; +#29 = VERTEX_POINT ( 'NONE', #509 ) ; +#30 = PLANE ( 'NONE', #756 ) ; +#31 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000000000, -47.57500000000000284 ) ) ; +#32 = PLANE ( 'NONE', #143 ) ; +#33 = FACE_OUTER_BOUND ( 'NONE', #349, .T. ) ; +#34 = VERTEX_POINT ( 'NONE', #516 ) ; +#35 = AXIS2_PLACEMENT_3D ( 'NONE', #1139, #1148, #1152 ) ; +#36 = VECTOR ( 'NONE', #375, 1000.000000000000000 ) ; +#37 = CIRCLE ( 'NONE', #316, 1.500000000000000444 ) ; +#38 = VECTOR ( 'NONE', #519, 1000.000000000000000 ) ; +#39 = VERTEX_POINT ( 'NONE', #520 ) ; +#40 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#41 = FACE_OUTER_BOUND ( 'NONE', #856, .T. ) ; +#42 = ORIENTED_EDGE ( 'NONE', *, *, #1005, .T. ) ; +#43 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 0.0000000000000000000, -52.57500000000000995 ) ) ; +#44 = ORIENTED_EDGE ( 'NONE', *, *, #768, .T. ) ; +#45 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #996, 'distance_accuracy_value', 'NONE'); +#46 = ORIENTED_EDGE ( 'NONE', *, *, #1275, .F. ) ; +#47 = LINE ( 'NONE', #43, #163 ) ; +#48 = SURFACE_STYLE_USAGE ( .BOTH. , #205 ) ; +#49 = DIRECTION ( 'NONE', ( 2.478176394252582620E-16, 1.000000000000000000, -2.877477087497665002E-32 ) ) ; +#50 = EDGE_LOOP ( 'NONE', ( #968, #244, #706, #468, #420, #498 ) ) ; +#51 = EDGE_CURVE ( 'NONE', #577, #314, #524, .T. ) ; +#52 = EDGE_CURVE ( 'NONE', #741, #149, #536, .T. ) ; +#53 = LINE ( 'NONE', #130, #864 ) ; +#54 = VERTEX_POINT ( 'NONE', #555 ) ; +#55 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#56 = LINE ( 'NONE', #101, #241 ) ; +#57 = VECTOR ( 'NONE', #1253, 1000.000000000000000 ) ; +#58 = LINE ( 'NONE', #640, #734 ) ; +#59 = VERTEX_POINT ( 'NONE', #572 ) ; +#60 = EDGE_CURVE ( 'NONE', #306, #115, #590, .T. ) ; +#61 = EDGE_LOOP ( 'NONE', ( #142, #81 ) ) ; +#62 = ORIENTED_EDGE ( 'NONE', *, *, #485, .F. ) ; +#63 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#64 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#65 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#66 = ORIENTED_EDGE ( 'NONE', *, *, #197, .T. ) ; +#67 = ORIENTED_EDGE ( 'NONE', *, *, #23, .F. ) ; +#68 = EDGE_CURVE ( 'NONE', #941, #195, #620, .T. ) ; +#69 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#70 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#71 = VERTEX_POINT ( 'NONE', #629 ) ; +#72 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 15.00000000000000000, 0.0000000000000000000 ) ) ; +#73 = ORIENTED_EDGE ( 'NONE', *, *, #401, .F. ) ; +#74 = ORIENTED_EDGE ( 'NONE', *, *, #963, .T. ) ; +#75 = DIRECTION ( 'NONE', ( 1.156482317317863047E-15, 1.000000000000000000, -1.067115439044338195E-31 ) ) ; +#76 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 11.00000000000008349, -48.10000000000000142 ) ) ; +#77 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.161126824616337130E-16 ) ) ; +#78 = VERTEX_POINT ( 'NONE', #633 ) ; +#79 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#80 = ORIENTED_EDGE ( 'NONE', *, *, #304, .T. ) ; +#81 = ORIENTED_EDGE ( 'NONE', *, *, #119, .F. ) ; +#82 = CARTESIAN_POINT ( 'NONE', ( -3.999999999999614975, 350.9286105475089812, -51.57500000000002416 ) ) ; +#83 = LINE ( 'NONE', #82, #666 ) ; +#84 = CARTESIAN_POINT ( 'NONE', ( -130.4000000000000057, 5.600000000000041389, -52.57500000000000995 ) ) ; +#85 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.966019939440379586E-14, 0.0000000000000000000 ) ) ; +#86 = ORIENTED_EDGE ( 'NONE', *, *, #1261, .T. ) ; +#87 = ORIENTED_EDGE ( 'NONE', *, *, #238, .T. ) ; +#88 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#89 = LINE ( 'NONE', #1037, #474 ) ; +#90 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999467371, 15.00000000000000000, -47.95000000000000284 ) ) ; +#91 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 11.00000000000008349, -49.60000000000000142 ) ) ; +#92 = CARTESIAN_POINT ( 'NONE', ( -5.524060868112218694E-15, 0.0000000000000000000, -47.57499999999995310 ) ) ; +#93 = EDGE_LOOP ( 'NONE', ( #95, #926, #953, #1190 ) ) ; +#94 = ORIENTED_EDGE ( 'NONE', *, *, #237, .F. ) ; +#95 = ORIENTED_EDGE ( 'NONE', *, *, #52, .T. ) ; +#96 = VECTOR ( 'NONE', #560, 1000.000000000000000 ) ; +#97 = LINE ( 'NONE', #90, #562 ) ; +#98 = AXIS2_PLACEMENT_3D ( 'NONE', #176, #167, #822 ) ; +#99 = CIRCLE ( 'NONE', #397, 0.5000000000000004441 ) ; +#100 = CIRCLE ( 'NONE', #1214, 1.500000000000001332 ) ; +#101 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 15.00000000000000000, -49.60000000000000142 ) ) ; +#102 = ORIENTED_EDGE ( 'NONE', *, *, #828, .F. ) ; +#103 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 17.00000000000001421, -52.57500000000000995 ) ) ; +#104 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#105 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 0.0000000000000000000, -38.63072809000077257 ) ) ; +#106 = ORIENTED_EDGE ( 'NONE', *, *, #866, .T. ) ; +#107 = ORIENTED_EDGE ( 'NONE', *, *, #535, .F. ) ; +#108 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 0.0000000000000000000, -47.95000000000000995 ) ) ; +#109 = AXIS2_PLACEMENT_3D ( 'NONE', #543, #542, #533 ) ; +#110 = EDGE_LOOP ( 'NONE', ( #969, #1239 ) ) ; +#111 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.084202172485504311E-16, 0.0000000000000000000 ) ) ; +#112 = VECTOR ( 'NONE', #274, 1000.000000000000000 ) ; +#113 = ADVANCED_FACE ( 'NONE', ( #636 ), #641, .F. ) ; +#114 = AXIS2_PLACEMENT_3D ( 'NONE', #575, #802, #929 ) ; +#115 = VERTEX_POINT ( 'NONE', #691 ) ; +#116 = CYLINDRICAL_SURFACE ( 'NONE', #512, 1.499999999999994449 ) ; +#117 = ORIENTED_EDGE ( 'NONE', *, *, #1126, .T. ) ; +#118 = DIRECTION ( 'NONE', ( -1.084202172485504311E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#119 = EDGE_CURVE ( 'NONE', #292, #434, #708, .T. ) ; +#120 = ORIENTED_EDGE ( 'NONE', *, *, #1231, .T. ) ; +#121 = ORIENTED_EDGE ( 'NONE', *, *, #896, .T. ) ; +#122 = ORIENTED_EDGE ( 'NONE', *, *, #999, .T. ) ; +#123 = ADVANCED_FACE ( 'NONE', ( #721 ), #724, .T. ) ; +#124 = VERTEX_POINT ( 'NONE', #747 ) ; +#125 = CARTESIAN_POINT ( 'NONE', ( 4.336808689942113878E-16, 4.000000000000089706, -45.57500000000000284 ) ) ; +#126 = ORIENTED_EDGE ( 'NONE', *, *, #463, .F. ) ; +#127 = AXIS2_PLACEMENT_3D ( 'NONE', #1243, #673, #423 ) ; +#128 = ORIENTED_EDGE ( 'NONE', *, *, #719, .T. ) ; +#129 = PLANE ( 'NONE', #1057 ) ; +#130 = CARTESIAN_POINT ( 'NONE', ( -136.4000000000000341, 9.600000000000042277, -52.57500000000000995 ) ) ; +#131 = VERTEX_POINT ( 'NONE', #751 ) ; +#132 = EDGE_LOOP ( 'NONE', ( #44, #22, #993, #910, #203, #891 ) ) ; +#133 = FACE_OUTER_BOUND ( 'NONE', #352, .T. ) ; +#134 = EDGE_CURVE ( 'NONE', #149, #195, #758, .T. ) ; +#135 = ORIENTED_EDGE ( 'NONE', *, *, #807, .F. ) ; +#136 = EDGE_LOOP ( 'NONE', ( #154, #1001 ) ) ; +#137 = FACE_BOUND ( 'NONE', #145, .T. ) ; +#138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#139 = EDGE_LOOP ( 'NONE', ( #265, #1158, #1088, #331, #46 ) ) ; +#140 = CARTESIAN_POINT ( 'NONE', ( -131.4000000000000057, 8.100000000000040501, -52.57500000000000995 ) ) ; +#141 = VERTEX_POINT ( 'NONE', #799 ) ; +#142 = ORIENTED_EDGE ( 'NONE', *, *, #376, .F. ) ; +#143 = AXIS2_PLACEMENT_3D ( 'NONE', #325, #738, #568 ) ; +#144 = DIRECTION ( 'NONE', ( 1.156482317317863047E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#145 = EDGE_LOOP ( 'NONE', ( #1027, #997 ) ) ; +#146 = EDGE_CURVE ( 'NONE', #779, #59, #804, .T. ) ; +#147 = DIRECTION ( 'NONE', ( -9.227252531791527858E-17, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#148 = VERTEX_POINT ( 'NONE', #831 ) ; +#149 = VERTEX_POINT ( 'NONE', #837 ) ; +#150 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.156482317317863047E-15, 0.0000000000000000000 ) ) ; +#151 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#152 = ORIENTED_EDGE ( 'NONE', *, *, #535, .T. ) ; +#153 = VERTEX_POINT ( 'NONE', #842 ) ; +#154 = ORIENTED_EDGE ( 'NONE', *, *, #1241, .T. ) ; +#155 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000007105, 4.625929269271460867E-15, -45.57500000000000284 ) ) ; +#156 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -50.94999999999999574 ) ) ; +#157 = EDGE_LOOP ( 'NONE', ( #321, #1198, #695, #1160, #7 ) ) ; +#158 = CARTESIAN_POINT ( 'NONE', ( -137.4000000000000341, 6.100000000000043165, -52.57500000000000995 ) ) ; +#159 = ORIENTED_EDGE ( 'NONE', *, *, #992, .F. ) ; +#160 = PLANE ( 'NONE', #648 ) ; +#161 = EDGE_CURVE ( 'NONE', #736, #153, #37, .T. ) ; +#162 = VECTOR ( 'NONE', #979, 1000.000000000000000 ) ; +#163 = VECTOR ( 'NONE', #40, 1000.000000000000000 ) ; +#164 = FACE_OUTER_BOUND ( 'NONE', #50, .T. ) ; +#165 = LINE ( 'NONE', #208, #1172 ) ; +#166 = ORIENTED_EDGE ( 'NONE', *, *, #719, .F. ) ; +#167 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#168 = VERTEX_POINT ( 'NONE', #871 ) ; +#169 = DIRECTION ( 'NONE', ( -1.445602896647328316E-16, 1.000000000000000000, 1.678528301040291265E-32 ) ) ; +#170 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 15.00000000000000000, -47.57499999999995310 ) ) ; +#171 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -47.95000000000000995 ) ) ; +#172 = LINE ( 'NONE', #171, #951 ) ; +#173 = VERTEX_POINT ( 'NONE', #876 ) ; +#174 = EDGE_LOOP ( 'NONE', ( #1048, #1030, #166, #775 ) ) ; +#175 = LINE ( 'NONE', #170, #1193 ) ; +#176 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#177 = AXIS2_PLACEMENT_3D ( 'NONE', #1258, #1252, #1250 ) ; +#178 = EDGE_CURVE ( 'NONE', #599, #404, #900, .T. ) ; +#179 = VECTOR ( 'NONE', #442, 1000.000000000000000 ) ; +#180 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000000000, 0.0000000000000000000 ) ) ; +#181 = VERTEX_POINT ( 'NONE', #932 ) ; +#182 = VECTOR ( 'NONE', #635, 1000.000000000000000 ) ; +#183 = ORIENTED_EDGE ( 'NONE', *, *, #905, .T. ) ; +#184 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 17.00000000000001421, -51.57500000000002416 ) ) ; +#185 = VECTOR ( 'NONE', #531, 1000.000000000000000 ) ; +#186 = AXIS2_PLACEMENT_3D ( 'NONE', #507, #250, #151 ) ; +#187 = ORIENTED_EDGE ( 'NONE', *, *, #529, .F. ) ; +#188 = ORIENTED_EDGE ( 'NONE', *, *, #739, .F. ) ; +#189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#190 = CARTESIAN_POINT ( 'NONE', ( 1.301042606982627014E-15, 4.000000000000070166, -45.57500000000000284 ) ) ; +#191 = LINE ( 'NONE', #765, #1189 ) ; +#192 = ORIENTED_EDGE ( 'NONE', *, *, #692, .T. ) ; +#193 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#194 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.252606517456510344E-16, 0.0000000000000000000 ) ) ; +#195 = VERTEX_POINT ( 'NONE', #935 ) ; +#196 = LINE ( 'NONE', #335, #1145 ) ; +#197 = EDGE_CURVE ( 'NONE', #243, #912, #939, .T. ) ; +#198 = ORIENTED_EDGE ( 'NONE', *, *, #1282, .T. ) ; +#199 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 15.00000000000000000, -48.10000000000000142 ) ) ; +#200 = EDGE_CURVE ( 'NONE', #356, #290, #950, .T. ) ; +#201 = VECTOR ( 'NONE', #1124, 1000.000000000000000 ) ; +#202 = VECTOR ( 'NONE', #77, 1000.000000000000000 ) ; +#203 = ORIENTED_EDGE ( 'NONE', *, *, #601, .F. ) ; +#204 = VECTOR ( 'NONE', #225, 1000.000000000000000 ) ; +#205 = SURFACE_SIDE_STYLE ('',( #766 ) ) ; +#206 = ORIENTED_EDGE ( 'NONE', *, *, #877, .F. ) ; +#207 = CYLINDRICAL_SURFACE ( 'NONE', #219, 1.499999999999994449 ) ; +#208 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000003553, 17.00000000000001421, -45.57500000000000284 ) ) ; +#209 = ORIENTED_EDGE ( 'NONE', *, *, #672, .F. ) ; +#210 = EDGE_LOOP ( 'NONE', ( #122, #744, #135, #455 ) ) ; +#211 = FACE_OUTER_BOUND ( 'NONE', #1188, .T. ) ; +#212 = ORIENTED_EDGE ( 'NONE', *, *, #213, .T. ) ; +#213 = EDGE_CURVE ( 'NONE', #1, #59, #960, .T. ) ; +#214 = ORIENTED_EDGE ( 'NONE', *, *, #394, .F. ) ; +#215 = CARTESIAN_POINT ( 'NONE', ( -136.4000000000000341, 9.600000000000042277, -51.57500000000000995 ) ) ; +#216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#217 = AXIS2_PLACEMENT_3D ( 'NONE', #322, #318, #312 ) ; +#218 = ORIENTED_EDGE ( 'NONE', *, *, #553, .T. ) ; +#219 = AXIS2_PLACEMENT_3D ( 'NONE', #199, #193, #189 ) ; +#220 = ORIENTED_EDGE ( 'NONE', *, *, #161, .F. ) ; +#221 = ADVANCED_FACE ( 'NONE', ( #998 ), #1003, .T. ) ; +#222 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000006928, -51.57500000000000995 ) ) ; +#223 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 350.9286105475091517, -52.57500000000000995 ) ) ; +#224 = ORIENTED_EDGE ( 'NONE', *, *, #1063, .T. ) ; +#225 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#226 = VERTEX_POINT ( 'NONE', #1033 ) ; +#227 = CARTESIAN_POINT ( 'NONE', ( -137.4000000000000341, 5.600000000000042277, -47.57499999999993889 ) ) ; +#228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#229 = ADVANCED_FACE ( 'NONE', ( #1043, #1051 ), #1056, .T. ) ; +#230 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#231 = ORIENTED_EDGE ( 'NONE', *, *, #500, .T. ) ; +#232 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #464, 'design' ) ; +#233 = VERTEX_POINT ( 'NONE', #1077 ) ; +#234 = ORIENTED_EDGE ( 'NONE', *, *, #1245, .F. ) ; +#235 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.782411586589351722E-16, 0.0000000000000000000 ) ) ; +#236 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000888, 11.00000000000008704, -47.57499999999995310 ) ) ; +#237 = EDGE_CURVE ( 'NONE', #404, #8, #428, .T. ) ; +#238 = EDGE_CURVE ( 'NONE', #29, #292, #1157, .T. ) ; +#239 = LINE ( 'NONE', #92, #202 ) ; +#240 = ORIENTED_EDGE ( 'NONE', *, *, #589, .T. ) ; +#241 = VECTOR ( 'NONE', #242, 1000.000000000000000 ) ; +#242 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#243 = VERTEX_POINT ( 'NONE', #1182 ) ; +#244 = ORIENTED_EDGE ( 'NONE', *, *, #1238, .F. ) ; +#245 = VECTOR ( 'NONE', #628, 1000.000000000000000 ) ; +#246 = DIRECTION ( 'NONE', ( 3.252606517456510837E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#247 = VECTOR ( 'NONE', #921, 1000.000000000000000 ) ; +#248 = LINE ( 'NONE', #413, #201 ) ; +#249 = ORIENTED_EDGE ( 'NONE', *, *, #51, .T. ) ; +#250 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#251 = ORIENTED_EDGE ( 'NONE', *, *, #880, .F. ) ; +#252 = ORIENTED_EDGE ( 'NONE', *, *, #1104, .F. ) ; +#253 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 4.000000000000119904, -48.10000000000000142 ) ) ; +#254 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 11.00000000000008349, -46.60000000000000853 ) ) ; +#255 = ORIENTED_EDGE ( 'NONE', *, *, #674, .T. ) ; +#256 = CARTESIAN_POINT ( 'NONE', ( -131.4000000000000057, 8.100000000000040501, -51.57500000000000995 ) ) ; +#257 = EDGE_LOOP ( 'NONE', ( #1122, #678, #1171, #784 ) ) ; +#258 = EDGE_LOOP ( 'NONE', ( #1257, #878, #159, #586 ) ) ; +#259 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#260 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#261 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000000000, -47.57499999999993179 ) ) ; +#262 = ORIENTED_EDGE ( 'NONE', *, *, #660, .T. ) ; +#263 = EDGE_CURVE ( 'NONE', #302, #356, #852, .T. ) ; +#264 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.161126824616337130E-16 ) ) ; +#265 = ORIENTED_EDGE ( 'NONE', *, *, #1096, .T. ) ; +#266 = CARTESIAN_POINT ( 'NONE', ( -131.4000000000000057, 8.100000000000040501, -38.63072809000077257 ) ) ; +#267 = VECTOR ( 'NONE', #1273, 1000.000000000000000 ) ; +#268 = CYLINDRICAL_SURFACE ( 'NONE', #1163, 1.500000000000001332 ) ; +#269 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 4.000000000000119904, -46.60000000000000853 ) ) ; +#270 = ORIENTED_EDGE ( 'NONE', *, *, #1117, .T. ) ; +#271 = EDGE_CURVE ( 'NONE', #181, #226, #1254, .T. ) ; +#272 = ORIENTED_EDGE ( 'NONE', *, *, #807, .T. ) ; +#273 = FACE_OUTER_BOUND ( 'NONE', #675, .T. ) ; +#274 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#275 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#276 = PLANE ( 'NONE', #722 ) ; +#277 = LINE ( 'NONE', #1256, #669 ) ; +#278 = EDGE_LOOP ( 'NONE', ( #1052, #1034, #252, #1110 ) ) ; +#279 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -50.94999999999999574 ) ) ; +#280 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.966019939440379586E-14, 0.0000000000000000000 ) ) ; +#281 = AXIS2_PLACEMENT_3D ( 'NONE', #1164, #1155, #1143 ) ; +#282 = ORIENTED_EDGE ( 'NONE', *, *, #1005, .F. ) ; +#283 = LINE ( 'NONE', #279, #112 ) ; +#284 = VECTOR ( 'NONE', #1267, 1000.000000000000000 ) ; +#285 = ORIENTED_EDGE ( 'NONE', *, *, #237, .T. ) ; +#286 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#287 = VERTEX_POINT ( 'NONE', #808 ) ; +#288 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000001776, 14.99999999999999822, -47.57499999999995310 ) ) ; +#289 = ADVANCED_FACE ( 'NONE', ( #41 ), #324, .F. ) ; +#290 = VERTEX_POINT ( 'NONE', #84 ) ; +#291 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 350.9286105475091517, -51.57500000000000995 ) ) ; +#292 = VERTEX_POINT ( 'NONE', #1131 ) ; +#293 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#294 = EDGE_CURVE ( 'NONE', #195, #1070, #277, .T. ) ; +#295 = LINE ( 'NONE', #291, #510 ) ; +#296 = DIRECTION ( 'NONE', ( -1.994931997373319954E-14, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#297 = ADVANCED_FACE ( 'NONE', ( #419 ), #1135, .F. ) ; +#298 = ORIENTED_EDGE ( 'NONE', *, *, #1150, .F. ) ; +#299 = VECTOR ( 'NONE', #534, 1000.000000000000000 ) ; +#300 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1031 ) ) ; +#301 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#302 = VERTEX_POINT ( 'NONE', #1284 ) ; +#303 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 15.00000000000000000, -51.57500000000000995 ) ) ; +#304 = EDGE_CURVE ( 'NONE', #887, #141, #1277, .T. ) ; +#305 = ORIENTED_EDGE ( 'NONE', *, *, #304, .F. ) ; +#306 = VERTEX_POINT ( 'NONE', #925 ) ; +#307 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000003553, 17.00000000000001421, -51.57500000000002416 ) ) ; +#308 = EDGE_CURVE ( 'NONE', #287, #887, #1098, .T. ) ; +#309 = EDGE_LOOP ( 'NONE', ( #231, #1197, #192, #18, #656, #346, #1268, #647, #1020, #343, #805, #1116 ) ) ; +#310 = ORIENTED_EDGE ( 'NONE', *, *, #1261, .F. ) ; +#311 = VECTOR ( 'NONE', #4, 1000.000000000000000 ) ; +#312 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#313 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, -2.000000000000001776, -52.57500000000000995 ) ) ; +#314 = VERTEX_POINT ( 'NONE', #369 ) ; +#315 = CIRCLE ( 'NONE', #885, 1.500000000000001332 ) ; +#316 = AXIS2_PLACEMENT_3D ( 'NONE', #844, #855, #867 ) ; +#317 = ORIENTED_EDGE ( 'NONE', *, *, #146, .F. ) ; +#318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#319 = ORIENTED_EDGE ( 'NONE', *, *, #652, .F. ) ; +#320 = VERTEX_POINT ( 'NONE', #503 ) ; +#321 = ORIENTED_EDGE ( 'NONE', *, *, #485, .T. ) ; +#322 = CARTESIAN_POINT ( 'NONE', ( -130.4000000000000057, 6.100000000000042277, -52.57500000000000995 ) ) ; +#323 = DIRECTION ( 'NONE', ( 1.161126824616337130E-16, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#324 = CYLINDRICAL_SURFACE ( 'NONE', #793, 1.500000000000001332 ) ; +#325 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 0.0000000000000000000, -45.57500000000000284 ) ) ; +#326 = VECTOR ( 'NONE', #1279, 1000.000000000000000 ) ; +#327 = EDGE_LOOP ( 'NONE', ( #220, #188 ) ) ; +#328 = VERTEX_POINT ( 'NONE', #627 ) ; +#329 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 11.00000000000008882, -47.57499999999995310 ) ) ; +#330 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#331 = ORIENTED_EDGE ( 'NONE', *, *, #783, .T. ) ; +#332 = CIRCLE ( 'NONE', #1136, 1.500000000000001332 ) ; +#333 = AXIS2_PLACEMENT_3D ( 'NONE', #1244, #1106, #430 ) ; +#334 = VECTOR ( 'NONE', #1217, 1000.000000000000000 ) ; +#335 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 8.100000000000040501, -52.57500000000000995 ) ) ; +#336 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#337 = ORIENTED_EDGE ( 'NONE', *, *, #971, .T. ) ; +#338 = VECTOR ( 'NONE', #421, 1000.000000000000000 ) ; +#339 = VECTOR ( 'NONE', #1167, 1000.000000000000000 ) ; +#340 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.966019939440397572E-14, 0.0000000000000000000 ) ) ; +#341 = ADVANCED_FACE ( 'NONE', ( #943 ), #865, .T. ) ; +#342 = LINE ( 'NONE', #223, #204 ) ; +#343 = ORIENTED_EDGE ( 'NONE', *, *, #496, .T. ) ; +#344 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#345 = VERTEX_POINT ( 'NONE', #236 ) ; +#346 = ORIENTED_EDGE ( 'NONE', *, *, #803, .F. ) ; +#347 = DIRECTION ( 'NONE', ( -1.994931997373319954E-14, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#348 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#349 = EDGE_LOOP ( 'NONE', ( #1125, #607, #462, #1007 ) ) ; +#350 = EDGE_CURVE ( 'NONE', #941, #741, #452, .T. ) ; +#351 = AXIS2_PLACEMENT_3D ( 'NONE', #927, #919, #913 ) ; +#352 = EDGE_LOOP ( 'NONE', ( #785, #827, #889, #717 ) ) ; +#353 = AXIS2_PLACEMENT_3D ( 'NONE', #1210, #1237, #1274 ) ; +#354 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 11.00000000000015454, -44.57500000000002416 ) ) ; +#355 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.891205793294702485E-16, 0.0000000000000000000 ) ) ; +#356 = VERTEX_POINT ( 'NONE', #581 ) ; +#357 = ORIENTED_EDGE ( 'NONE', *, *, #1203, .T. ) ; +#358 = ORIENTED_EDGE ( 'NONE', *, *, #768, .F. ) ; +#359 = ADVANCED_FACE ( 'NONE', ( #667 ), #276, .F. ) ; +#360 = DIRECTION ( 'NONE', ( 3.252606517456510837E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#361 = CIRCLE ( 'NONE', #930, 1.500000000000000444 ) ; +#362 = CIRCLE ( 'NONE', #933, 1.499999999999994449 ) ; +#363 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 4.000000000000118128, -44.57500000000002416 ) ) ; +#364 = DIRECTION ( 'NONE', ( 2.168404344971008128E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#365 = ORIENTED_EDGE ( 'NONE', *, *, #271, .T. ) ; +#366 = EDGE_CURVE ( 'NONE', #725, #302, #248, .T. ) ; +#367 = VERTEX_POINT ( 'NONE', #481 ) ; +#368 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000007105, 0.0000000000000000000, -47.57499999999995310 ) ) ; +#369 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 4.000000000000118128, -47.57500000000000284 ) ) ; +#370 = FACE_OUTER_BOUND ( 'NONE', #982, .T. ) ; +#371 = STYLED_ITEM ( 'NONE', ( #1014 ), #506 ) ; +#372 = VERTEX_POINT ( 'NONE', #1042 ) ; +#373 = ORIENTED_EDGE ( 'NONE', *, *, #845, .F. ) ; +#374 = COLOUR_RGB ( '',0.7529411764705882248, 0.7529411764705882248, 0.7529411764705882248 ) ; +#375 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#376 = EDGE_CURVE ( 'NONE', #434, #292, #541, .T. ) ; +#377 = EDGE_LOOP ( 'NONE', ( #995, #593, #74, #270, #106, #946, #42, #684, #1065, #820 ) ) ; +#378 = VECTOR ( 'NONE', #962, 1000.000000000000000 ) ; +#379 = VECTOR ( 'NONE', #194, 1000.000000000000000 ) ; +#380 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 17.00000000000001421, -52.57500000000000995 ) ) ; +#381 = VECTOR ( 'NONE', #981, 1000.000000000000000 ) ; +#382 = EDGE_CURVE ( 'NONE', #936, #1070, #773, .T. ) ; +#383 = ORIENTED_EDGE ( 'NONE', *, *, #1104, .T. ) ; +#384 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#385 = VERTEX_POINT ( 'NONE', #554 ) ; +#386 = ORIENTED_EDGE ( 'NONE', *, *, #514, .T. ) ; +#387 = EDGE_CURVE ( 'NONE', #328, #577, #1050, .T. ) ; +#388 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 11.00000000000008704, -49.45000000000000284 ) ) ; +#389 = EDGE_CURVE ( 'NONE', #1200, #1226, #392, .T. ) ; +#390 = ORIENTED_EDGE ( 'NONE', *, *, #948, .T. ) ; +#391 = LINE ( 'NONE', #380, #36 ) ; +#392 = LINE ( 'NONE', #1120, #475 ) ; +#393 = VERTEX_POINT ( 'NONE', #313 ) ; +#394 = EDGE_CURVE ( 'NONE', #486, #39, #686, .T. ) ; +#395 = VECTOR ( 'NONE', #987, 1000.000000000000000 ) ; +#396 = ORIENTED_EDGE ( 'NONE', *, *, #238, .F. ) ; +#397 = AXIS2_PLACEMENT_3D ( 'NONE', #801, #794, #790 ) ; +#398 = AXIS2_PLACEMENT_3D ( 'NONE', #1161, #1032, #17 ) ; +#399 = ORIENTED_EDGE ( 'NONE', *, *, #146, .T. ) ; +#400 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#401 = EDGE_CURVE ( 'NONE', #243, #115, #903, .T. ) ; +#402 = FACE_OUTER_BOUND ( 'NONE', #631, .T. ) ; +#403 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, -2.000000000000001776, -51.57500000000002416 ) ) ; +#404 = VERTEX_POINT ( 'NONE', #269 ) ; +#405 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 0.0000000000000000000, -52.57500000000000995 ) ) ; +#406 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 4.000000000000119904, -49.60000000000000142 ) ) ; +#407 = VECTOR ( 'NONE', #737, 1000.000000000000000 ) ; +#408 = EDGE_LOOP ( 'NONE', ( #373, #1132, #1140, #990 ) ) ; +#409 = LINE ( 'NONE', #405, #435 ) ; +#410 = ORIENTED_EDGE ( 'NONE', *, *, #308, .F. ) ; +#411 = VECTOR ( 'NONE', #1025, 1000.000000000000000 ) ; +#412 = AXIS2_PLACEMENT_3D ( 'NONE', #158, #495, #461 ) ; +#413 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 0.0000000000000000000, -47.57499999999993889 ) ) ; +#414 = VERTEX_POINT ( 'NONE', #680 ) ; +#415 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000006217, -2.000000000000001776, -52.57500000000000995 ) ) ; +#416 = DIRECTION ( 'NONE', ( -1.084202172485504311E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#417 = LINE ( 'NONE', #1242, #247 ) ; +#418 = FACE_OUTER_BOUND ( 'NONE', #988, .T. ) ; +#419 = FACE_OUTER_BOUND ( 'NONE', #759, .T. ) ; +#420 = ORIENTED_EDGE ( 'NONE', *, *, #68, .F. ) ; +#421 = DIRECTION ( 'NONE', ( 1.156482317317863047E-15, 1.000000000000000000, -1.342822640832233450E-31 ) ) ; +#422 = CYLINDRICAL_SURFACE ( 'NONE', #1146, 7.000000000000006217 ) ; +#423 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.982541115402063493E-14, 0.0000000000000000000 ) ) ; +#424 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 350.9286105475091517, -45.57500000000000284 ) ) ; +#425 = EDGE_LOOP ( 'NONE', ( #102, #80, #1186, #769 ) ) ; +#426 = ADVANCED_FACE ( 'NONE', ( #922, #703 ), #654, .T. ) ; +#427 = CARTESIAN_POINT ( 'NONE', ( -3.999999999999989786, 15.00000000000000533, -47.57499999999995310 ) ) ; +#428 = CIRCLE ( 'NONE', #35, 1.500000000000001332 ) ; +#429 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#430 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#431 = AXIS2_PLACEMENT_3D ( 'NONE', #574, #567, #559 ) ; +#432 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#433 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#434 = VERTEX_POINT ( 'NONE', #587 ) ; +#435 = VECTOR ( 'NONE', #400, 1000.000000000000000 ) ; +#436 = LINE ( 'NONE', #427, #338 ) ; +#437 = EDGE_CURVE ( 'NONE', #448, #599, #332, .T. ) ; +#438 = LINE ( 'NONE', #782, #1029 ) ; +#439 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#440 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#441 = FACE_OUTER_BOUND ( 'NONE', #210, .T. ) ; +#442 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#443 = CARTESIAN_POINT ( 'NONE', ( -137.4000000000000341, 5.600000000000042277, -38.63072809000077257 ) ) ; +#444 = PLANE ( 'NONE', #1166 ) ; +#445 = PLANE ( 'NONE', #1114 ) ; +#446 = FACE_OUTER_BOUND ( 'NONE', #697, .T. ) ; +#447 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 350.9286105475091517, -51.57500000000000995 ) ) ; +#448 = VERTEX_POINT ( 'NONE', #91 ) ; +#449 = LINE ( 'NONE', #443, #179 ) ; +#450 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#451 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.168404344971006896E-16, -1.161126824616337130E-16 ) ) ; +#452 = LINE ( 'NONE', #598, #863 ) ; +#453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#454 = DIRECTION ( 'NONE', ( 9.227252531791527858E-17, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#455 = ORIENTED_EDGE ( 'NONE', *, *, #213, .F. ) ; +#456 = VECTOR ( 'NONE', #890, 1000.000000000000000 ) ; +#457 = ORIENTED_EDGE ( 'NONE', *, *, #200, .T. ) ; +#458 = COLOUR_RGB ( '',0.7529411764705882248, 0.7529411764705882248, 0.7529411764705882248 ) ; +#459 = CARTESIAN_POINT ( 'NONE', ( 1.757630290475221615E-16, 5.600000000000012967, -47.57499999999995310 ) ) ; +#460 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 11.00000000000008882, -45.57500000000000284 ) ) ; +#461 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#462 = ORIENTED_EDGE ( 'NONE', *, *, #1083, .T. ) ; +#463 = EDGE_CURVE ( 'NONE', #1156, #328, #980, .T. ) ; +#464 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#465 = LINE ( 'NONE', #459, #1010 ) ; +#466 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 11.00000000000015454, -47.57500000000000284 ) ) ; +#467 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -9.227252531791527858E-17 ) ) ; +#468 = ORIENTED_EDGE ( 'NONE', *, *, #294, .F. ) ; +#469 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#470 = EDGE_CURVE ( 'NONE', #29, #591, #795, .T. ) ; +#471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #271, .F. ) ; +#473 = DIRECTION ( 'NONE', ( -1.084202172485504311E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#474 = VECTOR ( 'NONE', #1278, 1000.000000000000000 ) ; +#475 = VECTOR ( 'NONE', #931, 1000.000000000000000 ) ; +#476 = ORIENTED_EDGE ( 'NONE', *, *, #1231, .F. ) ; +#477 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#478 = ORIENTED_EDGE ( 'NONE', *, *, #616, .T. ) ; +#479 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 4.000000000000090594, -49.45000000000000284 ) ) ; +#480 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 15.00000000000000000, 0.0000000000000000000 ) ) ; +#481 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 8.100000000000042277, -52.57500000000000995 ) ) ; +#482 = ORIENTED_EDGE ( 'NONE', *, *, #387, .F. ) ; +#483 = CARTESIAN_POINT ( 'NONE', ( -106.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#484 = LINE ( 'NONE', #489, #732 ) ; +#485 = EDGE_CURVE ( 'NONE', #577, #668, #1137, .T. ) ; +#486 = VERTEX_POINT ( 'NONE', #665 ) ; +#487 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#488 = VECTOR ( 'NONE', #942, 1000.000000000000000 ) ; +#489 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 6.100000000000043165, -38.63072809000077257 ) ) ; +#490 = CIRCLE ( 'NONE', #757, 2.000000000000001776 ) ; +#491 = VECTOR ( 'NONE', #826, 1000.000000000000000 ) ; +#492 = EDGE_CURVE ( 'NONE', #306, #367, #909, .T. ) ; +#493 = ORIENTED_EDGE ( 'NONE', *, *, #687, .F. ) ; +#494 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#496 = EDGE_CURVE ( 'NONE', #287, #668, #58, .T. ) ; +#497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#498 = ORIENTED_EDGE ( 'NONE', *, *, #1067, .F. ) ; +#499 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 15.00000000000000000, -49.45000000000000284 ) ) ; +#500 = EDGE_CURVE ( 'NONE', #385, #372, #1075, .T. ) ; +#501 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#502 = ORIENTED_EDGE ( 'NONE', *, *, #492, .F. ) ; +#503 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 4.000000000000119016, -52.57500000000000995 ) ) ; +#504 = ORIENTED_EDGE ( 'NONE', *, *, #776, .F. ) ; +#505 = CYLINDRICAL_SURFACE ( 'NONE', #600, 1.500000000000001332 ) ; +#506 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'KBD_Box_FL', ( #546, #351 ), #901 ) ; +#507 = CARTESIAN_POINT ( 'NONE', ( -136.4000000000000341, 8.100000000000042277, -52.57500000000000995 ) ) ; +#508 = AXIS2_PLACEMENT_3D ( 'NONE', #363, #360, #355 ) ; +#509 = CARTESIAN_POINT ( 'NONE', ( -102.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#510 = VECTOR ( 'NONE', #286, 1000.000000000000000 ) ; +#511 = VECTOR ( 'NONE', #597, 1000.000000000000000 ) ; +#512 = AXIS2_PLACEMENT_3D ( 'NONE', #754, #230, #1228 ) ; +#513 = VECTOR ( 'NONE', #1054, 1000.000000000000000 ) ; +#514 = EDGE_CURVE ( 'NONE', #591, #434, #1082, .T. ) ; +#515 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #810 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #330, #65, #275 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#516 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -47.95000000000000995 ) ) ; +#517 = ORIENTED_EDGE ( 'NONE', *, *, #778, .T. ) ; +#518 = FACE_OUTER_BOUND ( 'NONE', #895, .T. ) ; +#519 = DIRECTION ( 'NONE', ( 1.445602896647328070E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#520 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 8.100000000000042277, -51.57500000000000995 ) ) ; +#521 = EDGE_CURVE ( 'NONE', #486, #226, #965, .T. ) ; +#522 = ADVANCED_FACE ( 'NONE', ( #1017 ), #1068, .T. ) ; +#523 = LINE ( 'NONE', #288, #1101 ) ; +#524 = LINE ( 'NONE', #528, #185 ) ; +#525 = ORIENTED_EDGE ( 'NONE', *, *, #776, .T. ) ; +#526 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 6.100000000000043165, -52.57500000000000995 ) ) ; +#527 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.084202172485504311E-16, -1.161126824616337130E-16 ) ) ; +#528 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000000000, -47.57499999999993179 ) ) ; +#529 = EDGE_CURVE ( 'NONE', #414, #725, #1204, .T. ) ; +#530 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#531 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#532 = ORIENTED_EDGE ( 'NONE', *, *, #569, .F. ) ; +#533 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#534 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.252606517456510344E-16, 0.0000000000000000000 ) ) ; +#535 = EDGE_CURVE ( 'NONE', #345, #1103, #417, .T. ) ; +#536 = LINE ( 'NONE', #538, #908 ) ; +#537 = VECTOR ( 'NONE', #651, 1000.000000000000000 ) ; +#538 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999112, 4.000000000000089706, -45.57500000000000284 ) ) ; +#539 = ADVANCED_FACE ( 'NONE', ( #570 ), #1130, .F. ) ; +#540 = AXIS2_PLACEMENT_3D ( 'NONE', #354, #347, #340 ) ; +#541 = CIRCLE ( 'NONE', #595, 2.000000000000001776 ) ; +#542 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#543 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 0.0000000000000000000, -38.63072809000077257 ) ) ; +#544 = EDGE_CURVE ( 'NONE', #599, #448, #100, .T. ) ; +#545 = ORIENTED_EDGE ( 'NONE', *, *, #376, .T. ) ; +#546 = MANIFOLD_SOLID_BREP ( '�����-��������3', #564 ) ; +#547 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#548 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#549 = PLANE ( 'NONE', #109 ) ; +#550 = EDGE_CURVE ( 'NONE', #741, #345, #523, .T. ) ; +#551 = FACE_OUTER_BOUND ( 'NONE', #1115, .T. ) ; +#552 = PLANE ( 'NONE', #1170 ) ; +#553 = EDGE_CURVE ( 'NONE', #34, #565, #362, .T. ) ; +#554 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000003553, 17.00000000000001421, -52.57500000000000995 ) ) ; +#555 = CARTESIAN_POINT ( 'NONE', ( -152.2284271247461618, 4.000000000000121680, -45.57500000000004547 ) ) ; +#556 = ORIENTED_EDGE ( 'NONE', *, *, #401, .T. ) ; +#557 = VECTOR ( 'NONE', #1175, 1000.000000000000000 ) ; +#558 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #371 ) ) ; +#559 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#561 = EDGE_CURVE ( 'NONE', #287, #320, #342, .T. ) ; +#562 = VECTOR ( 'NONE', #88, 1000.000000000000000 ) ; +#563 = AXIS2_PLACEMENT_3D ( 'NONE', #698, #707, #716 ) ; +#564 = CLOSED_SHELL ( 'NONE', ( #297, #1012, #862, #797, #1272, #123, #649, #539, #902, #972, #1006, #1142, #359, #699, #594, #1264, #1249, #221, #824, #728, #9, #13, #958, #113, #426, #341, #994, #771, #634, #229, #851, #585, #763, #522, #1218, #1215, #289, #1177 ) ) ; +#565 = VERTEX_POINT ( 'NONE', #156 ) ; +#566 = VECTOR ( 'NONE', #644, 1000.000000000000000 ) ; +#567 = DIRECTION ( 'NONE', ( -9.227252531791527858E-17, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#568 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#569 = EDGE_CURVE ( 'NONE', #668, #1226, #1236, .T. ) ; +#570 = FACE_OUTER_BOUND ( 'NONE', #278, .T. ) ; +#571 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #576, #232 ) ; +#572 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 1.110223024625156540E-13, -51.57500000000000995 ) ) ; +#573 = ORIENTED_EDGE ( 'NONE', *, *, #739, .T. ) ; +#574 = CARTESIAN_POINT ( 'NONE', ( -136.4000000000000341, 8.100000000000042277, -51.57500000000000995 ) ) ; +#575 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 350.9286105475091517, -52.57500000000000995 ) ) ; +#576 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #1016, .NOT_KNOWN. ) ; +#577 = VERTEX_POINT ( 'NONE', #466 ) ; +#578 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#579 = EDGE_CURVE ( 'NONE', #1084, #78, #1246, .T. ) ; +#580 = ORIENTED_EDGE ( 'NONE', *, *, #674, .F. ) ; +#581 = CARTESIAN_POINT ( 'NONE', ( -130.4000000000000057, 5.600000000000041389, -47.57499999999993889 ) ) ; +#582 = EDGE_LOOP ( 'NONE', ( #881, #1225, #1089, #798, #212, #317 ) ) ; +#583 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, -2.000000000000001776, -45.57500000000000284 ) ) ; +#584 = AXIS2_PLACEMENT_3D ( 'NONE', #1181, #772, #683 ) ; +#585 = ADVANCED_FACE ( 'NONE', ( #24 ), #875, .T. ) ; +#586 = ORIENTED_EDGE ( 'NONE', *, *, #1126, .F. ) ; +#587 = CARTESIAN_POINT ( 'NONE', ( -106.3999999999999773, 7.500000000000000000, -47.57499999999995310 ) ) ; +#588 = CARTESIAN_POINT ( 'NONE', ( 1.301042606982627014E-15, 4.000000000000070166, -52.57500000000000995 ) ) ; +#589 = EDGE_CURVE ( 'NONE', #1011, #168, #1173, .T. ) ; +#590 = LINE ( 'NONE', #612, #621 ) ; +#591 = VERTEX_POINT ( 'NONE', #483 ) ; +#592 = LINE ( 'NONE', #583, #974 ) ; +#593 = ORIENTED_EDGE ( 'NONE', *, *, #749, .T. ) ; +#594 = ADVANCED_FACE ( 'NONE', ( #402 ), #606, .F. ) ; +#595 = AXIS2_PLACEMENT_3D ( 'NONE', #1211, #216, #1196 ) ; +#596 = ORIENTED_EDGE ( 'NONE', *, *, #178, .F. ) ; +#597 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -9.227252531791527858E-17 ) ) ; +#598 = CARTESIAN_POINT ( 'NONE', ( -6.716683257846263316E-15, 4.000000000000090594, -47.57499999999995310 ) ) ; +#599 = VERTEX_POINT ( 'NONE', #254 ) ; +#600 = AXIS2_PLACEMENT_3D ( 'NONE', #499, #494, #487 ) ; +#601 = EDGE_CURVE ( 'NONE', #872, #173, #1199, .T. ) ; +#602 = EDGE_LOOP ( 'NONE', ( #788, #478, #688, #86 ) ) ; +#603 = EDGE_CURVE ( 'NONE', #1176, #124, #438, .T. ) ; +#604 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, -2.000000000000001776, -51.57500000000000995 ) ) ; +#605 = DIRECTION ( 'NONE', ( 2.168404344971006896E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#606 = PLANE ( 'NONE', #1213 ) ; +#607 = ORIENTED_EDGE ( 'NONE', *, *, #787, .T. ) ; +#608 = CARTESIAN_POINT ( 'NONE', ( 2.081668171172169302E-15, 9.600000000000013856, -38.63072809000077257 ) ) ; +#609 = ORIENTED_EDGE ( 'NONE', *, *, #1241, .F. ) ; +#610 = LINE ( 'NONE', #604, #511 ) ; +#611 = EDGE_CURVE ( 'NONE', #141, #54, #11, .T. ) ; +#612 = CARTESIAN_POINT ( 'NONE', ( 2.081668171172169302E-15, 9.600000000000013856, -52.57500000000000995 ) ) ; +#613 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168404344971006896E-16, 0.0000000000000000000 ) ) ; +#614 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.168404344971006649E-16, 0.0000000000000000000 ) ) ; +#615 = ORIENTED_EDGE ( 'NONE', *, *, #437, .T. ) ; +#616 = EDGE_CURVE ( 'NONE', #1176, #306, #53, .T. ) ; +#617 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#618 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #1016 ) ) ; +#619 = FILL_AREA_STYLE ('',( #1113 ) ) ; +#620 = LINE ( 'NONE', #624, #245 ) ; +#621 = VECTOR ( 'NONE', #614, 1000.000000000000000 ) ; +#622 = AXIS2_PLACEMENT_3D ( 'NONE', #792, #750, #830 ) ; +#623 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168404344971008128E-16, 0.0000000000000000000 ) ) ; +#624 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 4.000000000000090594, -45.57500000000000284 ) ) ; +#625 = EDGE_LOOP ( 'NONE', ( #396, #609, #386, #545 ) ) ; +#626 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#627 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000000000, -47.57499999999993889 ) ) ; +#628 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#629 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999467371, 4.000000000000090594, -47.95000000000000284 ) ) ; +#630 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #571 ) ; +#631 = EDGE_LOOP ( 'NONE', ( #27, #882, #214, #989, #472, #685 ) ) ; +#632 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 15.00000000000000000, 0.0000000000000000000 ) ) ; +#633 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000021316, 1.110223024625156540E-13, -51.57500000000002416 ) ) ; +#634 = ADVANCED_FACE ( 'NONE', ( #1055 ), #32, .F. ) ; +#635 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#636 = FACE_OUTER_BOUND ( 'NONE', #899, .T. ) ; +#637 = EDGE_LOOP ( 'NONE', ( #282, #251, #502, #1105 ) ) ; +#638 = PLANE ( 'NONE', #701 ) ; +#639 = FACE_OUTER_BOUND ( 'NONE', #408, .T. ) ; +#640 = CARTESIAN_POINT ( 'NONE', ( -2.194425197111276665E-13, 11.00000000000313349, -52.57500000000000995 ) ) ; +#641 = CYLINDRICAL_SURFACE ( 'NONE', #818, 2.999999999999981792 ) ; +#642 = CIRCLE ( 'NONE', #217, 0.5000000000000004441 ) ; +#643 = CIRCLE ( 'NONE', #1234, 1.500000000000000444 ) ; +#644 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#645 = VECTOR ( 'NONE', #690, 1000.000000000000000 ) ; +#646 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 15.00000000000000000, -44.57500000000002416 ) ) ; +#647 = ORIENTED_EDGE ( 'NONE', *, *, #783, .F. ) ; +#648 = AXIS2_PLACEMENT_3D ( 'NONE', #155, #150, #144 ) ; +#649 = ADVANCED_FACE ( 'NONE', ( #446 ), #116, .F. ) ; +#650 = FACE_BOUND ( 'NONE', #693, .T. ) ; +#651 = DIRECTION ( 'NONE', ( -1.445602896647328316E-16, 1.000000000000000000, 1.333894298805422470E-32 ) ) ; +#652 = EDGE_CURVE ( 'NONE', #1220, #148, #5, .T. ) ; +#653 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#654 = PLANE ( 'NONE', #726 ) ; +#655 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#656 = ORIENTED_EDGE ( 'NONE', *, *, #294, .T. ) ; +#657 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#658 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 0.0000000000000000000, -49.45000000000000284 ) ) ; +#659 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.994931997373319639E-14, 0.0000000000000000000 ) ) ; +#660 = EDGE_CURVE ( 'NONE', #71, #850, #361, .T. ) ; +#661 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#662 = VERTEX_POINT ( 'NONE', #742 ) ; +#663 = EDGE_CURVE ( 'NONE', #34, #1220, #172, .T. ) ; +#664 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#665 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 15.00000000000000000, -51.57500000000000995 ) ) ; +#666 = VECTOR ( 'NONE', #75, 1000.000000000000000 ) ; +#667 = FACE_OUTER_BOUND ( 'NONE', #602, .T. ) ; +#668 = VERTEX_POINT ( 'NONE', #713 ) ; +#669 = VECTOR ( 'NONE', #1230, 1000.000000000000000 ) ; +#670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#671 = ORIENTED_EDGE ( 'NONE', *, *, #948, .F. ) ; +#672 = EDGE_CURVE ( 'NONE', #448, #8, #56, .T. ) ; +#673 = DIRECTION ( 'NONE', ( -1.994931997373319954E-14, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#674 = EDGE_CURVE ( 'NONE', #1084, #779, #239, .T. ) ; +#675 = EDGE_LOOP ( 'NONE', ( #961, #310, #73, #504 ) ) ; +#676 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#677 = ORIENTED_EDGE ( 'NONE', *, *, #1041, .T. ) ; +#678 = ORIENTED_EDGE ( 'NONE', *, *, #999, .F. ) ; +#679 = EDGE_CURVE ( 'NONE', #124, #233, #315, .T. ) ; +#680 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 15.00000000000000000, -51.57500000000000995 ) ) ; +#681 = ORIENTED_EDGE ( 'NONE', *, *, #1049, .F. ) ; +#682 = CARTESIAN_POINT ( 'NONE', ( -137.4000000000000341, 6.100000000000043165, -38.63072809000077257 ) ) ; +#683 = DIRECTION ( 'NONE', ( -1.445602896647328316E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#684 = ORIENTED_EDGE ( 'NONE', *, *, #603, .T. ) ; +#685 = ORIENTED_EDGE ( 'NONE', *, *, #23, .T. ) ; +#686 = LINE ( 'NONE', #303, #96 ) ; +#687 = EDGE_CURVE ( 'NONE', #779, #314, #849, .T. ) ; +#688 = ORIENTED_EDGE ( 'NONE', *, *, #60, .T. ) ; +#689 = EDGE_CURVE ( 'NONE', #233, #414, #1276, .T. ) ; +#690 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#691 = CARTESIAN_POINT ( 'NONE', ( -131.4000000000000057, 9.600000000000040501, -52.57500000000000995 ) ) ; +#692 = EDGE_CURVE ( 'NONE', #662, #149, #949, .T. ) ; +#693 = EDGE_LOOP ( 'NONE', ( #1013, #1233 ) ) ; +#694 = EDGE_LOOP ( 'NONE', ( #916, #1093 ) ) ; +#695 = ORIENTED_EDGE ( 'NONE', *, *, #308, .T. ) ; +#696 = CYLINDRICAL_SURFACE ( 'NONE', #729, 0.5000000000000004441 ) ; +#697 = EDGE_LOOP ( 'NONE', ( #1129, #218, #117, #319 ) ) ; +#698 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -47.57499999999995310 ) ) ; +#699 = ADVANCED_FACE ( 'NONE', ( #959 ), #712, .F. ) ; +#700 = EDGE_LOOP ( 'NONE', ( #152, #357, #835, #816, #1229, #681, #390, #365, #128, #1097, #249, #493, #580, #811, #1205, #14 ) ) ; +#701 = AXIS2_PLACEMENT_3D ( 'NONE', #632, #626, #617 ) ; +#702 = FACE_OUTER_BOUND ( 'NONE', #1221, .T. ) ; +#703 = FACE_OUTER_BOUND ( 'NONE', #700, .T. ) ; +#704 = VECTOR ( 'NONE', #1168, 1000.000000000000000 ) ; +#705 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000888, -5.782411586589313265E-16, -52.57500000000000995 ) ) ; +#706 = ORIENTED_EDGE ( 'NONE', *, *, #382, .T. ) ; +#707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#708 = CIRCLE ( 'NONE', #563, 2.000000000000001776 ) ; +#709 = VECTOR ( 'NONE', #711, 1000.000000000000000 ) ; +#710 = ORIENTED_EDGE ( 'NONE', *, *, #1100, .T. ) ; +#711 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#712 = CYLINDRICAL_SURFACE ( 'NONE', #815, 1.500000000000001332 ) ; +#713 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 11.00000000000015454, -52.57500000000000995 ) ) ; +#714 = ORIENTED_EDGE ( 'NONE', *, *, #1096, .F. ) ; +#715 = DIRECTION ( 'NONE', ( 3.252606517456510837E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#716 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#717 = ORIENTED_EDGE ( 'NONE', *, *, #350, .F. ) ; +#718 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 6.100000000000042277, -38.63072809000077257 ) ) ; +#719 = EDGE_CURVE ( 'NONE', #226, #328, #1023, .T. ) ; +#720 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 4.000000000000090594, -49.45000000000000284 ) ) ; +#721 = FACE_OUTER_BOUND ( 'NONE', #625, .T. ) ; +#722 = AXIS2_PLACEMENT_3D ( 'NONE', #608, #605, #613 ) ; +#723 = LINE ( 'NONE', #460, #21 ) ; +#724 = CYLINDRICAL_SURFACE ( 'NONE', #840, 2.000000000000001776 ) ; +#725 = VERTEX_POINT ( 'NONE', #1095 ) ; +#726 = AXIS2_PLACEMENT_3D ( 'NONE', #1090, #323, #264 ) ; +#727 = LINE ( 'NONE', #718, #709 ) ; +#728 = ADVANCED_FACE ( 'NONE', ( #819, #1128 ), #1047, .F. ) ; +#729 = AXIS2_PLACEMENT_3D ( 'NONE', #682, #676, #664 ) ; +#730 = CIRCLE ( 'NONE', #761, 1.499999999999994449 ) ; +#731 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#732 = VECTOR ( 'NONE', #497, 1000.000000000000000 ) ; +#733 = CIRCLE ( 'NONE', #839, 1.500000000000000444 ) ; +#734 = VECTOR ( 'NONE', #659, 1000.000000000000000 ) ; +#735 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#736 = VERTEX_POINT ( 'NONE', #16 ) ; +#737 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 9.227252531791527858E-17 ) ) ; +#738 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#739 = EDGE_CURVE ( 'NONE', #153, #736, #643, .T. ) ; +#740 = LINE ( 'NONE', #588, #379 ) ; +#741 = VERTEX_POINT ( 'NONE', #846 ) ; +#742 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000888, 11.00000000000008704, -52.57500000000000995 ) ) ; +#743 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#744 = ORIENTED_EDGE ( 'NONE', *, *, #1238, .T. ) ; +#745 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 17.00000000000001421, -51.57500000000000995 ) ) ; +#746 = CARTESIAN_POINT ( 'NONE', ( 2.385244779468127899E-15, 11.00000000000008704, -45.57500000000000284 ) ) ; +#747 = CARTESIAN_POINT ( 'NONE', ( -131.4000000000000057, 9.600000000000040501, -51.57500000000000995 ) ) ; +#748 = EDGE_CURVE ( 'NONE', #54, #131, #89, .T. ) ; +#749 = EDGE_CURVE ( 'NONE', #173, #1108, #858, .T. ) ; +#750 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#751 = CARTESIAN_POINT ( 'NONE', ( -152.2284271247461618, 11.00000000000009592, -45.57500000000000284 ) ) ; +#752 = LINE ( 'NONE', #745, #407 ) ; +#753 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#754 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -49.45000000000000284 ) ) ; +#755 = EDGE_LOOP ( 'NONE', ( #944, #457, #1073, #224 ) ) ; +#756 = AXIS2_PLACEMENT_3D ( 'NONE', #26, #20, #15 ) ; +#757 = AXIS2_PLACEMENT_3D ( 'NONE', #69, #63, #55 ) ; +#758 = LINE ( 'NONE', #767, #1091 ) ; +#759 = EDGE_LOOP ( 'NONE', ( #615, #1202, #298, #209 ) ) ; +#760 = VECTOR ( 'NONE', #530, 1000.000000000000000 ) ; +#761 = AXIS2_PLACEMENT_3D ( 'NONE', #658, #657, #653 ) ; +#762 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#763 = ADVANCED_FACE ( 'NONE', ( #1165, #370 ), #444, .T. ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#765 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 15.00000000000000000, -50.95000000000000284 ) ) ; +#766 = SURFACE_STYLE_FILL_AREA ( #619 ) ; +#767 = CARTESIAN_POINT ( 'NONE', ( 4.336808689942113878E-16, 4.000000000000089706, -52.57500000000000995 ) ) ; +#768 = EDGE_CURVE ( 'NONE', #1103, #372, #723, .T. ) ; +#769 = ORIENTED_EDGE ( 'NONE', *, *, #748, .T. ) ; +#770 = PLANE ( 'NONE', #796 ) ; +#771 = ADVANCED_FACE ( 'NONE', ( #1009, #814 ), #552, .F. ) ; +#772 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.445602896647328316E-16, -0.0000000000000000000 ) ) ; +#773 = LINE ( 'NONE', #28, #645 ) ; +#774 = EDGE_LOOP ( 'NONE', ( #1079, #87, #1194, #781 ) ) ; +#775 = ORIENTED_EDGE ( 'NONE', *, *, #521, .F. ) ; +#776 = EDGE_CURVE ( 'NONE', #233, #243, #196, .T. ) ; +#777 = FACE_OUTER_BOUND ( 'NONE', #1183, .T. ) ; +#778 = EDGE_CURVE ( 'NONE', #736, #850, #191, .T. ) ; +#779 = VERTEX_POINT ( 'NONE', #1283 ) ; +#780 = FACE_BOUND ( 'NONE', #694, .T. ) ; +#781 = ORIENTED_EDGE ( 'NONE', *, *, #514, .F. ) ; +#782 = CARTESIAN_POINT ( 'NONE', ( -5.804390077129666902E-15, 9.600000000000013856, -51.57500000000002416 ) ) ; +#783 = EDGE_CURVE ( 'NONE', #320, #917, #740, .T. ) ; +#784 = ORIENTED_EDGE ( 'NONE', *, *, #803, .T. ) ; +#785 = ORIENTED_EDGE ( 'NONE', *, *, #68, .T. ) ; +#786 = CARTESIAN_POINT ( 'NONE', ( -136.4000000000000341, 8.100000000000042277, -38.63072809000077257 ) ) ; +#787 = EDGE_CURVE ( 'NONE', #1108, #385, #165, .T. ) ; +#788 = ORIENTED_EDGE ( 'NONE', *, *, #603, .F. ) ; +#789 = CIRCLE ( 'NONE', #281, 1.499999999999994449 ) ; +#790 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#791 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.084202172485504187E-16, 0.0000000000000000000 ) ) ; +#792 = CARTESIAN_POINT ( 'NONE', ( -130.4000000000000057, 6.100000000000042277, -38.63072809000077257 ) ) ; +#793 = AXIS2_PLACEMENT_3D ( 'NONE', #1109, #336, #834 ) ; +#794 = DIRECTION ( 'NONE', ( -1.161126824616337130E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#795 = CIRCLE ( 'NONE', #98, 2.000000000000001776 ) ; +#796 = AXIS2_PLACEMENT_3D ( 'NONE', #764, #762, #753 ) ; +#797 = ADVANCED_FACE ( 'NONE', ( #1072 ), #966, .T. ) ; +#798 = ORIENTED_EDGE ( 'NONE', *, *, #1000, .F. ) ; +#799 = CARTESIAN_POINT ( 'NONE', ( -157.4000000000000057, 4.000000000000119904, -45.57500000000000284 ) ) ; +#800 = ORIENTED_EDGE ( 'NONE', *, *, #1150, .T. ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( -137.4000000000000341, 6.100000000000043165, -47.57499999999993889 ) ) ; +#802 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#803 = EDGE_CURVE ( 'NONE', #393, #1070, #1260, .T. ) ; +#804 = LINE ( 'NONE', #823, #491 ) ; +#805 = ORIENTED_EDGE ( 'NONE', *, *, #569, .T. ) ; +#806 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 4.000000000000090594, -47.57499999999995310 ) ) ; +#807 = EDGE_CURVE ( 'NONE', #59, #78, #1207, .T. ) ; +#808 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 11.00000000000013323, -52.57500000000000995 ) ) ; +#809 = CIRCLE ( 'NONE', #431, 1.500000000000001332 ) ; +#810 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #330, 'distance_accuracy_value', 'NONE'); +#811 = ORIENTED_EDGE ( 'NONE', *, *, #1067, .T. ) ; +#812 = VECTOR ( 'NONE', #1195, 1000.000000000000000 ) ; +#813 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 6.100000000000042277, -52.57500000000000995 ) ) ; +#814 = FACE_BOUND ( 'NONE', #1222, .T. ) ; +#815 = AXIS2_PLACEMENT_3D ( 'NONE', #786, #79, #841 ) ; +#816 = ORIENTED_EDGE ( 'NONE', *, *, #366, .T. ) ; +#817 = EDGE_CURVE ( 'NONE', #565, #34, #789, .T. ) ; +#818 = AXIS2_PLACEMENT_3D ( 'NONE', #646, #655, #661 ) ; +#819 = FACE_BOUND ( 'NONE', #1208, .T. ) ; +#820 = ORIENTED_EDGE ( 'NONE', *, *, #689, .T. ) ; +#821 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000003553, -2.000000000000001776, -51.57500000000002416 ) ) ; +#822 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#823 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#824 = ADVANCED_FACE ( 'NONE', ( #1134 ), #1127, .F. ) ; +#825 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.252606517456510837E-16, 0.0000000000000000000 ) ) ; +#826 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#827 = ORIENTED_EDGE ( 'NONE', *, *, #134, .F. ) ; +#828 = EDGE_CURVE ( 'NONE', #887, #131, #1080, .T. ) ; +#829 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 4.000000000000119016, -52.57500000000000995 ) ) ; +#830 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#831 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 0.0000000000000000000, -50.94999999999999574 ) ) ; +#832 = AXIS2_PLACEMENT_3D ( 'NONE', #1227, #1223, #1216 ) ; +#833 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 11.00000000000015454, -45.57500000000000284 ) ) ; +#834 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#835 = ORIENTED_EDGE ( 'NONE', *, *, #845, .T. ) ; +#836 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.717264591378869246E-16, 0.0000000000000000000 ) ) ; +#837 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999112, 4.000000000000089706, -52.57500000000000995 ) ) ; +#838 = AXIS2_PLACEMENT_3D ( 'NONE', #970, #873, #859 ) ; +#839 = AXIS2_PLACEMENT_3D ( 'NONE', #479, #473, #469 ) ; +#840 = AXIS2_PLACEMENT_3D ( 'NONE', #731, #735, #743 ) ; +#841 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#842 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999467371, 11.00000000000008704, -47.95000000000000284 ) ) ; +#843 = DIRECTION ( 'NONE', ( 3.252606517456510837E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#844 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 11.00000000000008704, -49.45000000000000284 ) ) ; +#845 = EDGE_CURVE ( 'NONE', #872, #725, #1062, .T. ) ; +#846 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999112, 4.000000000000089706, -47.57499999999995310 ) ) ; +#847 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 4.000000000000170530, -45.57500000000000284 ) ) ; +#848 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168404344971006896E-16, 0.0000000000000000000 ) ) ; +#849 = LINE ( 'NONE', #31, #162 ) ; +#850 = VERTEX_POINT ( 'NONE', #1053 ) ; +#851 = ADVANCED_FACE ( 'NONE', ( #1045 ), #1036, .T. ) ; +#852 = CIRCLE ( 'NONE', #353, 0.5000000000000004441 ) ; +#853 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#854 = EDGE_CURVE ( 'NONE', #414, #173, #1002, .T. ) ; +#855 = DIRECTION ( 'NONE', ( 2.168404344971008128E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#856 = EDGE_LOOP ( 'NONE', ( #476, #573, #517, #677 ) ) ; +#857 = PLANE ( 'NONE', #1191 ) ; +#858 = LINE ( 'NONE', #1270, #537 ) ; +#859 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#860 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.168404344971006649E-16, -9.227252531791526626E-17 ) ) ; +#861 = VECTOR ( 'NONE', #64, 1000.000000000000000 ) ; +#862 = ADVANCED_FACE ( 'NONE', ( #983 ), #978, .F. ) ; +#863 = VECTOR ( 'NONE', #527, 1000.000000000000000 ) ; +#864 = VECTOR ( 'NONE', #853, 1000.000000000000000 ) ; +#865 = PLANE ( 'NONE', #1078 ) ; +#866 = EDGE_CURVE ( 'NONE', #1156, #486, #870, .T. ) ; +#867 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#868 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1031 ), #515 ) ; +#869 = ORIENTED_EDGE ( 'NONE', *, *, #1063, .F. ) ; +#870 = LINE ( 'NONE', #964, #378 ) ; +#871 = CARTESIAN_POINT ( 'NONE', ( -137.4000000000000341, 5.600000000000042277, -52.57500000000000995 ) ) ; +#872 = VERTEX_POINT ( 'NONE', #956 ) ; +#873 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#874 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#875 = PLANE ( 'NONE', #584 ) ; +#876 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000038192, 15.00000000000001421, -51.57500000000002416 ) ) ; +#877 = EDGE_CURVE ( 'NONE', #372, #662, #954, .T. ) ; +#878 = ORIENTED_EDGE ( 'NONE', *, *, #663, .T. ) ; +#879 = FACE_OUTER_BOUND ( 'NONE', #755, .T. ) ; +#880 = EDGE_CURVE ( 'NONE', #367, #39, #937, .T. ) ; +#881 = ORIENTED_EDGE ( 'NONE', *, *, #687, .T. ) ; +#882 = ORIENTED_EDGE ( 'NONE', *, *, #880, .T. ) ; +#883 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 15.00000000000000000, -61.22694280961091096 ) ) ; +#884 = AXIS2_PLACEMENT_3D ( 'NONE', #140, #670, #293 ) ; +#885 = AXIS2_PLACEMENT_3D ( 'NONE', #256, #147, #973 ) ; +#886 = CIRCLE ( 'NONE', #508, 2.999999999999975131 ) ; +#887 = VERTEX_POINT ( 'NONE', #914 ) ; +#888 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.168404344971006649E-16, 0.0000000000000000000 ) ) ; +#889 = ORIENTED_EDGE ( 'NONE', *, *, #52, .F. ) ; +#890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#891 = ORIENTED_EDGE ( 'NONE', *, *, #1203, .F. ) ; +#892 = SHAPE_DEFINITION_REPRESENTATION ( #630, #506 ) ; +#893 = CARTESIAN_POINT ( 'NONE', ( 1.214306433183766544E-15, 5.600000000000012967, -52.57500000000000995 ) ) ; +#894 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 0.0000000000000000000, -52.57500000000000995 ) ) ; +#895 = EDGE_LOOP ( 'NONE', ( #1107, #120, #262, #923 ) ) ; +#896 = EDGE_CURVE ( 'NONE', #168, #290, #907, .T. ) ; +#897 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#898 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #464 ) ; +#899 = EDGE_LOOP ( 'NONE', ( #1266, #710, #1118, #714 ) ) ; +#900 = LINE ( 'NONE', #911, #1187 ) ; +#901 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1123 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1154, #1133, #1111 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#902 = ADVANCED_FACE ( 'NONE', ( #879 ), #857, .T. ) ; +#903 = CIRCLE ( 'NONE', #884, 1.500000000000001332 ) ; +#904 = ORIENTED_EDGE ( 'NONE', *, *, #544, .T. ) ; +#905 = EDGE_CURVE ( 'NONE', #320, #141, #1141, .T. ) ; +#906 = PRODUCT_CONTEXT ( 'NONE', #548, 'mechanical' ) ; +#907 = LINE ( 'NONE', #893, #1074 ) ; +#908 = VECTOR ( 'NONE', #547, 1000.000000000000000 ) ; +#909 = CIRCLE ( 'NONE', #186, 1.500000000000001332 ) ; +#910 = ORIENTED_EDGE ( 'NONE', *, *, #749, .F. ) ; +#911 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 15.00000000000000000, -46.60000000000000853 ) ) ; +#912 = VERTEX_POINT ( 'NONE', #813 ) ; +#913 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#914 = CARTESIAN_POINT ( 'NONE', ( -157.4000000000000057, 11.00000000000017586, -45.57500000000000284 ) ) ; +#915 = CARTESIAN_POINT ( 'NONE', ( 1.301042606982627014E-15, 4.000000000000070166, -45.57500000000000284 ) ) ; +#916 = ORIENTED_EDGE ( 'NONE', *, *, #992, .T. ) ; +#917 = VERTEX_POINT ( 'NONE', #829 ) ; +#918 = ORIENTED_EDGE ( 'NONE', *, *, #589, .F. ) ; +#919 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#920 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#921 = DIRECTION ( 'NONE', ( -1.000000000000000000, 2.168404344971008128E-16, 1.161126824616337130E-16 ) ) ; +#922 = FACE_BOUND ( 'NONE', #61, .T. ) ; +#923 = ORIENTED_EDGE ( 'NONE', *, *, #778, .F. ) ; +#924 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#925 = CARTESIAN_POINT ( 'NONE', ( -136.4000000000000341, 9.600000000000042277, -52.57500000000000995 ) ) ; +#926 = ORIENTED_EDGE ( 'NONE', *, *, #692, .F. ) ; +#927 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#928 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 8.100000000000042277, -51.57500000000000995 ) ) ; +#929 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#930 = AXIS2_PLACEMENT_3D ( 'NONE', #720, #416, #1185 ) ; +#931 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#932 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 6.100000000000043165, -47.57499999999993889 ) ) ; +#933 = AXIS2_PLACEMENT_3D ( 'NONE', #938, #301, #432 ) ; +#934 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 11.00000000000008349, -48.10000000000000142 ) ) ; +#935 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 4.000000000000090594, -52.57500000000000995 ) ) ; +#936 = VERTEX_POINT ( 'NONE', #821 ) ; +#937 = LINE ( 'NONE', #928, #1262 ) ; +#938 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -49.45000000000000284 ) ) ; +#939 = LINE ( 'NONE', #940, #1169 ) ; +#940 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 0.0000000000000000000, -52.57500000000000995 ) ) ; +#941 = VERTEX_POINT ( 'NONE', #806 ) ; +#942 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.168404344971007882E-16, 0.0000000000000000000 ) ) ; +#943 = FACE_OUTER_BOUND ( 'NONE', #174, .T. ) ; +#944 = ORIENTED_EDGE ( 'NONE', *, *, #1049, .T. ) ; +#945 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#946 = ORIENTED_EDGE ( 'NONE', *, *, #394, .T. ) ; +#947 = CARTESIAN_POINT ( 'NONE', ( 2.385244779468127899E-15, 11.00000000000008704, -52.57500000000000995 ) ) ; +#948 = EDGE_CURVE ( 'NONE', #1153, #181, #99, .T. ) ; +#949 = LINE ( 'NONE', #1265, #411 ) ; +#950 = LINE ( 'NONE', #952, #1092 ) ; +#951 = VECTOR ( 'NONE', #384, 1000.000000000000000 ) ; +#952 = CARTESIAN_POINT ( 'NONE', ( -130.4000000000000057, 5.600000000000041389, -38.63072809000077257 ) ) ; +#953 = ORIENTED_EDGE ( 'NONE', *, *, #1282, .F. ) ; +#954 = LINE ( 'NONE', #947, #488 ) ; +#955 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#956 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 15.00000000000000000, -47.57499999999995310 ) ) ; +#957 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#958 = ADVANCED_FACE ( 'NONE', ( #780, #777 ), #770, .F. ) ; +#959 = FACE_OUTER_BOUND ( 'NONE', #637, .T. ) ; +#960 = LINE ( 'NONE', #967, #381 ) ; +#961 = ORIENTED_EDGE ( 'NONE', *, *, #679, .F. ) ; +#962 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.153406566473940767E-16 ) ) ; +#963 = EDGE_CURVE ( 'NONE', #1108, #1200, #752, .T. ) ; +#964 = CARTESIAN_POINT ( 'NONE', ( -5.948694366589352023E-15, 15.00000000000000000, -51.57500000000002416 ) ) ; +#965 = LINE ( 'NONE', #1192, #1149 ) ; +#966 = CYLINDRICAL_SURFACE ( 'NONE', #1119, 2.000000000000001776 ) ; +#967 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 350.9286105475091517, -51.57500000000000995 ) ) ; +#968 = ORIENTED_EDGE ( 'NONE', *, *, #579, .T. ) ; +#969 = ORIENTED_EDGE ( 'NONE', *, *, #437, .F. ) ; +#970 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -49.45000000000000284 ) ) ; +#971 = EDGE_CURVE ( 'NONE', #912, #302, #727, .T. ) ; +#972 = ADVANCED_FACE ( 'NONE', ( #702 ), #696, .F. ) ; +#973 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#974 = VECTOR ( 'NONE', #578, 1000.000000000000000 ) ; +#975 = VECTOR ( 'NONE', #477, 1000.000000000000000 ) ; +#976 = ORIENTED_EDGE ( 'NONE', *, *, #672, .T. ) ; +#977 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#978 = CYLINDRICAL_SURFACE ( 'NONE', #838, 1.499999999999994449 ) ; +#979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#980 = LINE ( 'NONE', #180, #182 ) ; +#981 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#982 = EDGE_LOOP ( 'NONE', ( #198, #206, #358, #107 ) ) ; +#983 = FACE_OUTER_BOUND ( 'NONE', #258, .T. ) ; +#984 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #371 ), #1087 ) ; +#985 = CARTESIAN_POINT ( 'NONE', ( -5.524060868112218694E-15, 15.00000000000000000, -47.57499999999995310 ) ) ; +#986 = ORIENTED_EDGE ( 'NONE', *, *, #561, .T. ) ; +#987 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.153406566473940767E-16 ) ) ; +#988 = EDGE_LOOP ( 'NONE', ( #410, #986, #183, #305 ) ) ; +#989 = ORIENTED_EDGE ( 'NONE', *, *, #521, .T. ) ; +#990 = ORIENTED_EDGE ( 'NONE', *, *, #529, .T. ) ; +#991 = CARTESIAN_POINT ( 'NONE', ( -5.948694366589352023E-15, 15.00000000000000000, -51.57500000000002416 ) ) ; +#992 = EDGE_CURVE ( 'NONE', #148, #1220, #730, .T. ) ; +#993 = ORIENTED_EDGE ( 'NONE', *, *, #787, .F. ) ; +#994 = ADVANCED_FACE ( 'NONE', ( #650, #639 ), #638, .T. ) ; +#995 = ORIENTED_EDGE ( 'NONE', *, *, #854, .T. ) ; +#996 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#997 = ORIENTED_EDGE ( 'NONE', *, *, #660, .F. ) ; +#998 = FACE_OUTER_BOUND ( 'NONE', #377, .T. ) ; +#999 = EDGE_CURVE ( 'NONE', #1, #936, #610, .T. ) ; +#1000 = EDGE_CURVE ( 'NONE', #1, #393, #592, .T. ) ; +#1001 = ORIENTED_EDGE ( 'NONE', *, *, #470, .T. ) ; +#1002 = LINE ( 'NONE', #991, #395 ) ; +#1003 = PLANE ( 'NONE', #1209 ) ; +#1004 = AXIS2_PLACEMENT_3D ( 'NONE', #1059, #1064, #1069 ) ; +#1005 = EDGE_CURVE ( 'NONE', #39, #1176, #809, .T. ) ; +#1006 = ADVANCED_FACE ( 'NONE', ( #551 ), #549, .F. ) ; +#1007 = ORIENTED_EDGE ( 'NONE', *, *, #389, .F. ) ; +#1008 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1009 = FACE_OUTER_BOUND ( 'NONE', #139, .T. ) ; +#1010 = VECTOR ( 'NONE', #451, 1000.000000000000000 ) ; +#1011 = VERTEX_POINT ( 'NONE', #526 ) ; +#1012 = ADVANCED_FACE ( 'NONE', ( #518 ), #505, .F. ) ; +#1013 = ORIENTED_EDGE ( 'NONE', *, *, #817, .F. ) ; +#1014 = PRESENTATION_STYLE_ASSIGNMENT (( #1021 ) ) ; +#1015 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1016 = PRODUCT ( 'KBD_Box_FL', 'KBD_Box_FL', '', ( #906 ) ) ; +#1017 = FACE_OUTER_BOUND ( 'NONE', #93, .T. ) ; +#1018 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 350.9286105475091517, -51.57500000000000995 ) ) ; +#1019 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#1020 = ORIENTED_EDGE ( 'NONE', *, *, #561, .F. ) ; +#1021 = SURFACE_STYLE_USAGE ( .BOTH. , #1028 ) ; +#1022 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 0.0000000000000000000, -45.57500000000000284 ) ) ; +#1023 = LINE ( 'NONE', #985, #267 ) ; +#1024 = DIRECTION ( 'NONE', ( 9.227252531791527858E-17, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1025 = DIRECTION ( 'NONE', ( -2.478176394252582127E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1026 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -9.227252531791527858E-17 ) ) ; +#1027 = ORIENTED_EDGE ( 'NONE', *, *, #1041, .F. ) ; +#1028 = SURFACE_SIDE_STYLE ('',( #1035 ) ) ; +#1029 = VECTOR ( 'NONE', #860, 1000.000000000000000 ) ; +#1030 = ORIENTED_EDGE ( 'NONE', *, *, #463, .T. ) ; +#1031 = STYLED_ITEM ( 'NONE', ( #1280 ), #546 ) ; +#1032 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.478176394252582620E-16, 0.0000000000000000000 ) ) ; +#1033 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 15.00000000000000000, -47.57499999999993889 ) ) ; +#1034 = ORIENTED_EDGE ( 'NONE', *, *, #971, .F. ) ; +#1035 = SURFACE_STYLE_FILL_AREA ( #1038 ) ; +#1036 = PLANE ( 'NONE', #6 ) ; +#1037 = CARTESIAN_POINT ( 'NONE', ( -152.2284271247461618, 15.00000000000000000, -45.57500000000004547 ) ) ; +#1038 = FILL_AREA_STYLE ('',( #1046 ) ) ; +#1039 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 15.00000000000000000, -51.57500000000000995 ) ) ; +#1040 = ORIENTED_EDGE ( 'NONE', *, *, #689, .F. ) ; +#1041 = EDGE_CURVE ( 'NONE', #850, #71, #733, .T. ) ; +#1042 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000002665, 11.00000000000008882, -52.57500000000000995 ) ) ; +#1043 = FACE_BOUND ( 'NONE', #110, .T. ) ; +#1044 = ORIENTED_EDGE ( 'NONE', *, *, #579, .F. ) ; +#1045 = FACE_OUTER_BOUND ( 'NONE', #12, .T. ) ; +#1046 = FILL_AREA_STYLE_COLOUR ( '', #374 ) ; +#1047 = PLANE ( 'NONE', #114 ) ; +#1048 = ORIENTED_EDGE ( 'NONE', *, *, #866, .F. ) ; +#1049 = EDGE_CURVE ( 'NONE', #1153, #356, #465, .T. ) ; +#1050 = LINE ( 'NONE', #261, #311 ) ; +#1051 = FACE_OUTER_BOUND ( 'NONE', #157, .T. ) ; +#1052 = ORIENTED_EDGE ( 'NONE', *, *, #263, .F. ) ; +#1053 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 4.000000000000090594, -50.95000000000000284 ) ) ; +#1054 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.161126824616337130E-16 ) ) ; +#1055 = FACE_OUTER_BOUND ( 'NONE', #582, .T. ) ; +#1056 = PLANE ( 'NONE', #1004 ) ; +#1057 = AXIS2_PLACEMENT_3D ( 'NONE', #125, #118, #111 ) ; +#1058 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1059 = CARTESIAN_POINT ( 'NONE', ( -2.194425197111276665E-13, 11.00000000000313349, -45.57500000000000284 ) ) ; +#1060 = ORIENTED_EDGE ( 'NONE', *, *, #1117, .F. ) ; +#1061 = CARTESIAN_POINT ( 'NONE', ( -5.524060868112218694E-15, 15.00000000000000000, -47.57499999999995310 ) ) ; +#1062 = LINE ( 'NONE', #1061, #513 ) ; +#1063 = EDGE_CURVE ( 'NONE', #168, #1153, #449, .T. ) ; +#1064 = DIRECTION ( 'NONE', ( -1.994931997373319954E-14, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1065 = ORIENTED_EDGE ( 'NONE', *, *, #679, .T. ) ; +#1066 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.994931997373319639E-14, 0.0000000000000000000 ) ) ; +#1067 = EDGE_CURVE ( 'NONE', #1084, #941, #436, .T. ) ; +#1068 = PLANE ( 'NONE', #398 ) ; +#1069 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.994931997373319954E-14, 0.0000000000000000000 ) ) ; +#1070 = VERTEX_POINT ( 'NONE', #415 ) ; +#1071 = CARTESIAN_POINT ( 'NONE', ( -2.194425197111276665E-13, 11.00000000000313349, -45.57500000000000284 ) ) ; +#1072 = FACE_OUTER_BOUND ( 'NONE', #774, .T. ) ; +#1073 = ORIENTED_EDGE ( 'NONE', *, *, #896, .F. ) ; +#1074 = VECTOR ( 'NONE', #888, 1000.000000000000000 ) ; +#1075 = LINE ( 'NONE', #705, #38 ) ; +#1076 = EDGE_CURVE ( 'NONE', #917, #393, #409, .T. ) ; +#1077 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 8.100000000000040501, -51.57500000000000995 ) ) ; +#1078 = AXIS2_PLACEMENT_3D ( 'NONE', #72, #228, #440 ) ; +#1079 = ORIENTED_EDGE ( 'NONE', *, *, #470, .F. ) ; +#1080 = LINE ( 'NONE', #1071, #1147 ) ; +#1081 = ORIENTED_EDGE ( 'NONE', *, *, #197, .F. ) ; +#1082 = LINE ( 'NONE', #1180, #566 ) ; +#1083 = EDGE_CURVE ( 'NONE', #385, #1226, #391, .T. ) ; +#1084 = VERTEX_POINT ( 'NONE', #368 ) ; +#1085 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #548 ) ; +#1086 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1087 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #45 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #996, #977, #955 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1088 = ORIENTED_EDGE ( 'NONE', *, *, #905, .F. ) ; +#1089 = ORIENTED_EDGE ( 'NONE', *, *, #1076, .T. ) ; +#1090 = CARTESIAN_POINT ( 'NONE', ( -5.524060868112218694E-15, 15.00000000000000000, -47.57499999999995310 ) ) ; +#1091 = VECTOR ( 'NONE', #791, 1000.000000000000000 ) ; +#1092 = VECTOR ( 'NONE', #957, 1000.000000000000000 ) ; +#1093 = ORIENTED_EDGE ( 'NONE', *, *, #652, .T. ) ; +#1094 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1095 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 15.00000000000000000, -47.57499999999993889 ) ) ; +#1096 = EDGE_CURVE ( 'NONE', #314, #54, #886, .T. ) ; +#1097 = ORIENTED_EDGE ( 'NONE', *, *, #387, .T. ) ; +#1098 = CIRCLE ( 'NONE', #127, 7.000000000000006217 ) ; +#1099 = AXIS2_PLACEMENT_3D ( 'NONE', #1255, #138, #471 ) ; +#1100 = EDGE_CURVE ( 'NONE', #577, #131, #1102, .T. ) ; +#1101 = VECTOR ( 'NONE', #49, 1000.000000000000000 ) ; +#1102 = CIRCLE ( 'NONE', #540, 2.999999999999975131 ) ; +#1103 = VERTEX_POINT ( 'NONE', #329 ) ; +#1104 = EDGE_CURVE ( 'NONE', #290, #912, #642, .T. ) ; +#1105 = ORIENTED_EDGE ( 'NONE', *, *, #616, .F. ) ; +#1106 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1107 = ORIENTED_EDGE ( 'NONE', *, *, #161, .T. ) ; +#1108 = VERTEX_POINT ( 'NONE', #307 ) ; +#1109 = CARTESIAN_POINT ( 'NONE', ( 0.04999999999999449329, 15.00000000000000000, -49.45000000000000284 ) ) ; +#1110 = ORIENTED_EDGE ( 'NONE', *, *, #200, .F. ) ; +#1111 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1112 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -2.000000000000000000, 0.0000000000000000000 ) ) ; +#1113 = FILL_AREA_STYLE_COLOUR ( '', #458 ) ; +#1114 = AXIS2_PLACEMENT_3D ( 'NONE', #447, #454, #467 ) ; +#1115 = EDGE_LOOP ( 'NONE', ( #1040, #525, #66, #337, #1248, #187 ) ) ; +#1116 = ORIENTED_EDGE ( 'NONE', *, *, #1083, .F. ) ; +#1117 = EDGE_CURVE ( 'NONE', #1200, #1156, #295, .T. ) ; +#1118 = ORIENTED_EDGE ( 'NONE', *, *, #748, .F. ) ; +#1119 = AXIS2_PLACEMENT_3D ( 'NONE', #1019, #344, #1058 ) ; +#1120 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 17.00000000000001421, -45.57500000000000284 ) ) ; +#1121 = ORIENTED_EDGE ( 'NONE', *, *, #60, .F. ) ; +#1122 = ORIENTED_EDGE ( 'NONE', *, *, #382, .F. ) ; +#1123 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1154, 'distance_accuracy_value', 'NONE'); +#1124 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1125 = ORIENTED_EDGE ( 'NONE', *, *, #963, .F. ) ; +#1126 = EDGE_CURVE ( 'NONE', #565, #148, #283, .T. ) ; +#1127 = PLANE ( 'NONE', #1144 ) ; +#1128 = FACE_OUTER_BOUND ( 'NONE', #309, .T. ) ; +#1129 = ORIENTED_EDGE ( 'NONE', *, *, #663, .F. ) ; +#1130 = CYLINDRICAL_SURFACE ( 'NONE', #622, 0.5000000000000004441 ) ; +#1131 = CARTESIAN_POINT ( 'NONE', ( -102.3999999999999773, 7.500000000000000000, -47.57499999999995310 ) ) ; +#1132 = ORIENTED_EDGE ( 'NONE', *, *, #601, .T. ) ; +#1133 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1134 = FACE_OUTER_BOUND ( 'NONE', #257, .T. ) ; +#1135 = CYLINDRICAL_SURFACE ( 'NONE', #333, 1.499999999999994449 ) ; +#1136 = AXIS2_PLACEMENT_3D ( 'NONE', #76, #1251, #280 ) ; +#1137 = LINE ( 'NONE', #833, #1174 ) ; +#1138 = AXIS2_PLACEMENT_3D ( 'NONE', #847, #843, #836 ) ; +#1139 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 4.000000000000119904, -48.10000000000000142 ) ) ; +#1140 = ORIENTED_EDGE ( 'NONE', *, *, #854, .F. ) ; +#1141 = CIRCLE ( 'NONE', #1138, 7.000000000000006217 ) ; +#1142 = ADVANCED_FACE ( 'NONE', ( #273 ), #268, .F. ) ; +#1143 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1144 = AXIS2_PLACEMENT_3D ( 'NONE', #1112, #1094, #1086 ) ; +#1145 = VECTOR ( 'NONE', #429, 1000.000000000000000 ) ; +#1146 = AXIS2_PLACEMENT_3D ( 'NONE', #424, #433, #439 ) ; +#1147 = VECTOR ( 'NONE', #1066, 1000.000000000000000 ) ; +#1148 = DIRECTION ( 'NONE', ( 3.252606517456510837E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1149 = VECTOR ( 'NONE', #453, 1000.000000000000000 ) ; +#1150 = EDGE_CURVE ( 'NONE', #8, #404, #1259, .T. ) ; +#1151 = DIRECTION ( 'NONE', ( 2.168404344971008128E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1152 = DIRECTION ( 'NONE', ( -1.000000000000000000, 5.782411586589351722E-16, 0.0000000000000000000 ) ) ; +#1153 = VERTEX_POINT ( 'NONE', #227 ) ; +#1154 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1155 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1156 = VERTEX_POINT ( 'NONE', #222 ) ; +#1157 = LINE ( 'NONE', #1162, #557 ) ; +#1158 = ORIENTED_EDGE ( 'NONE', *, *, #611, .F. ) ; +#1159 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1160 = ORIENTED_EDGE ( 'NONE', *, *, #828, .T. ) ; +#1161 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999998224, -9.912705577010324563E-16, -45.57500000000000284 ) ) ; +#1162 = CARTESIAN_POINT ( 'NONE', ( -102.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#1163 = AXIS2_PLACEMENT_3D ( 'NONE', #266, #260, #259 ) ; +#1164 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 15.00000000000000000, -49.45000000000000284 ) ) ; +#1165 = FACE_BOUND ( 'NONE', #327, .T. ) ; +#1166 = AXIS2_PLACEMENT_3D ( 'NONE', #746, #364, #623 ) ; +#1167 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1168 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.153406566473940767E-16 ) ) ; +#1169 = VECTOR ( 'NONE', #945, 1000.000000000000000 ) ; +#1170 = AXIS2_PLACEMENT_3D ( 'NONE', #190, #715, #825 ) ; +#1171 = ORIENTED_EDGE ( 'NONE', *, *, #1000, .T. ) ; +#1172 = VECTOR ( 'NONE', #874, 1000.000000000000000 ) ; +#1173 = CIRCLE ( 'NONE', #412, 0.5000000000000004441 ) ; +#1174 = VECTOR ( 'NONE', #450, 1000.000000000000000 ) ; +#1175 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1176 = VERTEX_POINT ( 'NONE', #215 ) ; +#1177 = ADVANCED_FACE ( 'NONE', ( #211 ), #207, .F. ) ; +#1178 = CARTESIAN_POINT ( 'NONE', ( -5.948694366589352023E-15, 0.0000000000000000000, -51.57500000000002416 ) ) ; +#1179 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000888, 11.00000000000008704, -45.57500000000000284 ) ) ; +#1180 = CARTESIAN_POINT ( 'NONE', ( -106.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#1181 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000000888, -5.782411586589313265E-16, -45.57500000000000284 ) ) ; +#1182 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 8.100000000000040501, -52.57500000000000995 ) ) ; +#1183 = EDGE_LOOP ( 'NONE', ( #1044, #255, #399, #272 ) ) ; +#1184 = LINE ( 'NONE', #1179, #339 ) ; +#1185 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1186 = ORIENTED_EDGE ( 'NONE', *, *, #611, .T. ) ; +#1187 = VECTOR ( 'NONE', #924, 1000.000000000000000 ) ; +#1188 = EDGE_LOOP ( 'NONE', ( #596, #904, #976, #94 ) ) ; +#1189 = VECTOR ( 'NONE', #348, 1000.000000000000000 ) ; +#1190 = ORIENTED_EDGE ( 'NONE', *, *, #550, .F. ) ; +#1191 = AXIS2_PLACEMENT_3D ( 'NONE', #1269, #2, #848 ) ; +#1192 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 15.00000000000000000, -61.22694280961091096 ) ) ; +#1193 = VECTOR ( 'NONE', #169, 1000.000000000000000 ) ; +#1194 = ORIENTED_EDGE ( 'NONE', *, *, #119, .T. ) ; +#1195 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1196 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1197 = ORIENTED_EDGE ( 'NONE', *, *, #877, .T. ) ; +#1198 = ORIENTED_EDGE ( 'NONE', *, *, #496, .F. ) ; +#1199 = LINE ( 'NONE', #480, #456 ) ; +#1200 = VERTEX_POINT ( 'NONE', #184 ) ; +#1201 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 4.000000000000119016, -45.57500000000000284 ) ) ; +#1202 = ORIENTED_EDGE ( 'NONE', *, *, #178, .T. ) ; +#1203 = EDGE_CURVE ( 'NONE', #1103, #872, #175, .T. ) ; +#1204 = LINE ( 'NONE', #883, #975 ) ; +#1205 = ORIENTED_EDGE ( 'NONE', *, *, #350, .T. ) ; +#1206 = LINE ( 'NONE', #1201, #812 ) ; +#1207 = LINE ( 'NONE', #1178, #704 ) ; +#1208 = EDGE_LOOP ( 'NONE', ( #1121, #19, #234, #240, #121, #383, #1081, #556 ) ) ; +#1209 = AXIS2_PLACEMENT_3D ( 'NONE', #1018, #1024, #1026 ) ; +#1210 = CARTESIAN_POINT ( 'NONE', ( -130.4000000000000057, 6.100000000000042277, -47.57499999999993889 ) ) ; +#1211 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -47.57499999999995310 ) ) ; +#1212 = AXIS2_PLACEMENT_3D ( 'NONE', #253, #246, #235 ) ; +#1213 = AXIS2_PLACEMENT_3D ( 'NONE', #105, #70, #1159 ) ; +#1214 = AXIS2_PLACEMENT_3D ( 'NONE', #934, #296, #85 ) ; +#1215 = ADVANCED_FACE ( 'NONE', ( #164 ), #160, .T. ) ; +#1216 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1217 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1218 = ADVANCED_FACE ( 'NONE', ( #137, #133 ), #129, .T. ) ; +#1219 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000007105, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1220 = VERTEX_POINT ( 'NONE', #108 ) ; +#1221 = EDGE_LOOP ( 'NONE', ( #671, #869, #918, #67 ) ) ; +#1222 = EDGE_LOOP ( 'NONE', ( #800, #285 ) ) ; +#1223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1224 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, -2.000000000000001776, -52.57500000000000995 ) ) ; +#1225 = ORIENTED_EDGE ( 'NONE', *, *, #1275, .T. ) ; +#1226 = VERTEX_POINT ( 'NONE', #103 ) ; +#1227 = CARTESIAN_POINT ( 'NONE', ( -104.3999999999999773, 7.500000000000000000, -46.57499999999995310 ) ) ; +#1228 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1229 = ORIENTED_EDGE ( 'NONE', *, *, #263, .T. ) ; +#1230 = DIRECTION ( 'NONE', ( -1.156482317317863047E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1231 = EDGE_CURVE ( 'NONE', #153, #71, #97, .T. ) ; +#1232 = VECTOR ( 'NONE', #897, 1000.000000000000000 ) ; +#1233 = ORIENTED_EDGE ( 'NONE', *, *, #553, .F. ) ; +#1234 = AXIS2_PLACEMENT_3D ( 'NONE', #388, #1151, #104 ) ; +#1235 = PLANE ( 'NONE', #832 ) ; +#1236 = LINE ( 'NONE', #894, #760 ) ; +#1237 = DIRECTION ( 'NONE', ( -1.161126824616337130E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1238 = EDGE_CURVE ( 'NONE', #936, #78, #83, .T. ) ; +#1239 = ORIENTED_EDGE ( 'NONE', *, *, #544, .F. ) ; +#1240 = FACE_OUTER_BOUND ( 'NONE', #136, .T. ) ; +#1241 = EDGE_CURVE ( 'NONE', #591, #29, #490, .T. ) ; +#1242 = CARTESIAN_POINT ( 'NONE', ( -6.391422606100602519E-15, 11.00000000000008704, -47.57499999999995310 ) ) ; +#1243 = CARTESIAN_POINT ( 'NONE', ( -150.4000000000000057, 11.00000000000017586, -45.57500000000000284 ) ) ; +#1244 = CARTESIAN_POINT ( 'NONE', ( -152.9000000000000057, 15.00000000000000000, -48.10000000000000142 ) ) ; +#1245 = EDGE_CURVE ( 'NONE', #1011, #367, #47, .T. ) ; +#1246 = LINE ( 'NONE', #1219, #57 ) ; +#1247 = CARTESIAN_POINT ( 'NONE', ( -137.9000000000000341, 0.0000000000000000000, -47.57499999999993889 ) ) ; +#1248 = ORIENTED_EDGE ( 'NONE', *, *, #366, .F. ) ; +#1249 = ADVANCED_FACE ( 'NONE', ( #33 ), #30, .T. ) ; +#1250 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1251 = DIRECTION ( 'NONE', ( -1.994931997373319954E-14, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1252 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1253 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1254 = LINE ( 'NONE', #1247, #284 ) ; +#1255 = CARTESIAN_POINT ( 'NONE', ( -75.70000000000000284, 0.0000000000000000000, -49.45000000000000284 ) ) ; +#1256 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000007105, 4.625929269271460867E-15, -52.57500000000000995 ) ) ; +#1257 = ORIENTED_EDGE ( 'NONE', *, *, #817, .T. ) ; +#1258 = CARTESIAN_POINT ( 'NONE', ( -157.4000000000000057, 0.0000000000000000000, -45.57500000000004547 ) ) ; +#1259 = CIRCLE ( 'NONE', #1212, 1.500000000000001332 ) ; +#1260 = LINE ( 'NONE', #1224, #334 ) ; +#1261 = EDGE_CURVE ( 'NONE', #115, #124, #10, .T. ) ; +#1262 = VECTOR ( 'NONE', #920, 1000.000000000000000 ) ; +#1263 = PLANE ( 'NONE', #177 ) ; +#1264 = ADVANCED_FACE ( 'NONE', ( #1271 ), #1263, .F. ) ; +#1265 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999998224, -9.912705577010324563E-16, -52.57500000000000995 ) ) ; +#1266 = ORIENTED_EDGE ( 'NONE', *, *, #51, .F. ) ; +#1267 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1268 = ORIENTED_EDGE ( 'NONE', *, *, #1076, .F. ) ; +#1269 = CARTESIAN_POINT ( 'NONE', ( 1.214306433183766544E-15, 5.600000000000012967, -38.63072809000077257 ) ) ; +#1270 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000087041, 350.9286105475091517, -51.57500000000002416 ) ) ; +#1271 = FACE_OUTER_BOUND ( 'NONE', #425, .T. ) ; +#1272 = ADVANCED_FACE ( 'NONE', ( #1240 ), #1235, .T. ) ; +#1273 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.161126824616337130E-16 ) ) ; +#1274 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1275 = EDGE_CURVE ( 'NONE', #314, #917, #1206, .T. ) ; +#1276 = LINE ( 'NONE', #1039, #1232 ) ; +#1277 = LINE ( 'NONE', #1281, #861 ) ; +#1278 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1279 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1280 = PRESENTATION_STYLE_ASSIGNMENT (( #48 ) ) ; +#1281 = CARTESIAN_POINT ( 'NONE', ( -157.4000000000000057, 350.9286105475091517, -45.57500000000000284 ) ) ; +#1282 = EDGE_CURVE ( 'NONE', #345, #662, #1184, .T. ) ; +#1283 = CARTESIAN_POINT ( 'NONE', ( -149.3999999999999773, 0.0000000000000000000, -47.57499999999995310 ) ) ; +#1284 = CARTESIAN_POINT ( 'NONE', ( -129.9000000000000057, 6.100000000000042277, -47.57499999999993889 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/keyboards/p65bt/frame/plastic/re3_.zip b/keyboards/p65bt/frame/plastic/re3_.zip new file mode 100644 index 000000000000..da64b5be6c4b Binary files /dev/null and b/keyboards/p65bt/frame/plastic/re3_.zip differ diff --git a/keyboards/p65bt/i2cmaster.h b/keyboards/p65bt/i2cmaster.h new file mode 100644 index 000000000000..0af1f17372d0 --- /dev/null +++ b/keyboards/p65bt/i2cmaster.h @@ -0,0 +1,185 @@ +#ifndef _I2CMASTER_H +#define _I2CMASTER_H 1 +/************************************************************************* +* Title: C include file for the I2C master interface +* (i2cmaster.S or twimaster.c) +* Author: Peter Fleury http://jump.to/fleury +* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ +* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Target: any AVR device +* Usage: see Doxygen manual +**************************************************************************/ + +#ifdef DOXYGEN +/** + @defgroup pfleury_ic2master I2C Master library + @code #include @endcode + + @brief I2C (TWI) Master Software Library + + Basic routines for communicating with I2C slave devices. This single master + implementation is limited to one bus master on the I2C bus. + + This I2c library is implemented as a compact assembler software implementation of the I2C protocol + which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). + Since the API for these two implementations is exactly the same, an application can be linked either against the + software I2C implementation or the hardware I2C implementation. + + Use 4.7k pull-up resistor on the SDA and SCL pin. + + Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module + i2cmaster.S to your target when using the software I2C implementation ! + + Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. + + @note + The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted + to GNU assembler and AVR-GCC C call interface. + Replaced the incorrect quarter period delays found in AVR300 with + half period delays. + + @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury + + @par API Usage Example + The following code shows typical usage of this library, see example test_i2cmaster.c + + @code + + #include + + + #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet + + int main(void) + { + unsigned char ret; + + i2c_init(); // initialize I2C library + + // write 0x75 to EEPROM address 5 (Byte Write) + i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode + i2c_write(0x05); // write address = 5 + i2c_write(0x75); // write value 0x75 to EEPROM + i2c_stop(); // set stop conditon = release bus + + + // read previously written value back from EEPROM address 5 + i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode + + i2c_write(0x05); // write address = 5 + i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode + + ret = i2c_readNak(); // read one byte from EEPROM + i2c_stop(); + + for(;;); + } + @endcode + +*/ +#endif /* DOXYGEN */ + +/**@{*/ + +#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 +#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" +#endif + +#include + +/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ +#define I2C_READ 1 + +/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ +#define I2C_WRITE 0 + + +/** + @brief initialize the I2C master interace. Need to be called only once + @param void + @return none + */ +extern void i2c_init(void); + + +/** + @brief Terminates the data transfer and releases the I2C bus + @param void + @return none + */ +extern void i2c_stop(void); + + +/** + @brief Issues a start condition and sends address and transfer direction + + @param addr address and transfer direction of I2C device + @retval 0 device accessible + @retval 1 failed to access device + */ +extern unsigned char i2c_start(unsigned char addr); + +static inline unsigned char i2c_start_read(unsigned char addr) { + return i2c_start((addr << 1) | I2C_READ); +} + +static inline unsigned char i2c_start_write(unsigned char addr) { + return i2c_start((addr << 1) | I2C_WRITE); +} + +/** + @brief Issues a repeated start condition and sends address and transfer direction + + @param addr address and transfer direction of I2C device + @retval 0 device accessible + @retval 1 failed to access device + */ +extern unsigned char i2c_rep_start(unsigned char addr); + + +/** + @brief Issues a start condition and sends address and transfer direction + + If device is busy, use ack polling to wait until device ready + @param addr address and transfer direction of I2C device + @return none + */ +extern void i2c_start_wait(unsigned char addr); + + +/** + @brief Send one byte to I2C device + @param data byte to be transfered + @retval 0 write successful + @retval 1 write failed + */ +extern unsigned char i2c_write(unsigned char data); + + +/** + @brief read one byte from the I2C device, request more data from device + @return byte read from I2C device + */ +extern unsigned char i2c_readAck(void); + +/** + @brief read one byte from the I2C device, read is followed by a stop condition + @return byte read from I2C device + */ +extern unsigned char i2c_readNak(void); + +/** + @brief read one byte from the I2C device + + Implemented as a macro, which calls either i2c_readAck or i2c_readNak + + @param ack 1 send ack, request more data from device
+ 0 send nak, read is followed by a stop condition + @return byte read from I2C device + */ +extern unsigned char i2c_read(unsigned char ack); +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + + +/**@}*/ +#endif diff --git a/keyboards/p65bt/keymaps/default/keymap.c b/keyboards/p65bt/keymaps/default/keymap.c new file mode 100755 index 000000000000..61c69baaacf8 --- /dev/null +++ b/keyboards/p65bt/keymaps/default/keymap.c @@ -0,0 +1,67 @@ +#include "p65bt.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT_ALL( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_APP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + LAYOUT_ALL( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_TRNS, + KC_TRNS, DEBUG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_LSCR, + KC_TRNS, KC_SLCK, KC_PAUS, OUT_AUTO, OUT_USB, OUT_BT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_INS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_MPLY, KC_MSTP, KC_MFFD, KC_MRWD, KC_TRNS, KC_TRNS, KC_PGDN, KC_HOME, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + LAYOUT_ALL( + KC_TRNS, M(0), M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + if (record->event.pressed) { + switch (id) { + case 0: + SEND_STRING(SS_TAP(X_RCTRL) SS_TAP(X_RCTRL) SS_TAP(X_1)); + return false; + case 1: + SEND_STRING(SS_TAP(X_RCTRL) SS_TAP(X_RCTRL) SS_TAP(X_2)); + return false; + } + } + return MACRO_NONE; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + } else { + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + } else { + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + } else { + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + } else { + } + + if (usb_led & (1 << USB_LED_KANA)) { + } else { + } +} \ No newline at end of file diff --git a/keyboards/p65bt/keymaps/via/keymap.c b/keyboards/p65bt/keymaps/via/keymap.c new file mode 100644 index 000000000000..028f7768ffa9 --- /dev/null +++ b/keyboards/p65bt/keymaps/via/keymap.c @@ -0,0 +1,40 @@ +/* Copyright 2020 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT_ALL( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_APP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + LAYOUT_ALL( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_TRNS, + KC_TRNS, DEBUG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_LSCR, + KC_TRNS, KC_SLCK, KC_PAUS, OUT_AUTO, OUT_USB, OUT_BT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_INS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_MPLY, KC_MSTP, KC_MFFD, KC_MRWD, KC_TRNS, KC_TRNS, KC_PGDN, KC_HOME, KC_TRNS, KC_END, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + LAYOUT_ALL( + KC_TRNS, M(0), M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; diff --git a/keyboards/p65bt/keymaps/via/readme.md b/keyboards/p65bt/keymaps/via/readme.md new file mode 100644 index 000000000000..9335f2cab0e4 --- /dev/null +++ b/keyboards/p65bt/keymaps/via/readme.md @@ -0,0 +1 @@ +# The VIA default keymap for bm60rgb diff --git a/keyboards/p65bt/keymaps/via/rules.mk b/keyboards/p65bt/keymaps/via/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/p65bt/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/p65bt/matrix.c b/keyboards/p65bt/matrix.c new file mode 100644 index 000000000000..a1be45bbea1e --- /dev/null +++ b/keyboards/p65bt/matrix.c @@ -0,0 +1,250 @@ +/* +Copyright 2019 Tom Schucker + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#if defined(__AVR__) +#include +#endif +#include + +#include "debug.h" +#include "p65bt.h" +#include "config.h" +#include "matrix.h" +#include "print.h" +#include "timer.h" +#include "util.h" +#include "wait.h" +#include "pincontrol.h" +#ifdef PROTOCOL_LUFA +#include "lufa.h" +#endif +#include "suspend.h" +#include "adafruit_ble.h" +#include +#include +#include "mcp23017.h" +#include "outputselect.h" + +// The keyboard matrix is attached to the following pins: +// row0: A0 - PF7 +// row1: A1 - PF6 +// row2: A2 - PF5 +// row3: A3 - PF4 +// row4: A4 - PF1 +// col0-15: mcp23017 address 0x20 +static const uint8_t row_pins[MATRIX_ROWS] = {F7, F6, F5, F4, F1}; + +#if DEBOUNCING_DELAY > 0 +static bool debouncing; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; +#endif + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; + +// matrix power saving +#define MATRIX_POWER_SAVE 600000 // 10 minutes +static uint32_t matrix_last_modified; + +#define ENABLE_BLE_MODE_LEDS 0 + +#ifdef DEBUG_MATRIX_SCAN_RATE +static uint32_t scan_timer; +static uint32_t scan_count; +#endif + +static inline void select_row(uint8_t row) { + uint8_t pin = row_pins[row]; + + pinMode(pin, PinDirectionOutput); + digitalWrite(pin, PinLevelLow); +} + +static inline void unselect_row(uint8_t row) { + uint8_t pin = row_pins[row]; + + digitalWrite(pin, PinLevelHigh); + pinMode(pin, PinDirectionInput); +} + +static void unselect_rows(void) { + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + unselect_row(x); + } +} + +static void select_rows(void) { + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + select_row(x); + } +} + +void matrix_power_down(void) { +#if ENABLE_BLE_MODE_LEDS + adafruit_ble_set_mode_leds(false); +#endif +} + +void matrix_power_up(void) { + unselect_rows(); + + memset(matrix, 0, sizeof(matrix)); +#if DEBOUNCING_DELAY > 0 + memset(matrix_debouncing, 0, sizeof(matrix_debouncing)); +#endif + + matrix_last_modified = timer_read32(); +#ifdef DEBUG_MATRIX_SCAN_RATE + scan_timer = timer_read32(); + scan_count = 0; +#endif + +#if ENABLE_BLE_MODE_LEDS + adafruit_ble_set_mode_leds(true); +#endif +} + +void matrix_init(void) { + expander_init(); + expander_config(); + + matrix_power_up(); + set_output(OUTPUT_AUTO); +} + +bool matrix_is_on(uint8_t row, uint8_t col) { + return (matrix[row] & ((matrix_row_t)1 << col)); +} + +matrix_row_t matrix_get_row(uint8_t row) { + return matrix[row]; +} + +static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + // Select row and wait for row selection to stabilize + select_row(current_row); + _delay_us(30); + + current_matrix[current_row] = ~(expander_read_r(EXPANDER_REG_GPIOB) << 8 | expander_read_r(EXPANDER_REG_GPIOA)); + unselect_row(current_row); + + return last_row_value != current_matrix[current_row]; +} + +static uint8_t matrix_scan_raw(void) { + if (!expander_make_ready()) { + return 0; + } + + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + bool matrix_changed = read_cols_on_row( +#if DEBOUNCING_DELAY > 0 + matrix_debouncing, +#else + matrix, +#endif + current_row); + + if (matrix_changed) { +#if DEBOUNCING_DELAY > 0 + debouncing = true; +#endif + matrix_last_modified = timer_read32(); + } + } + +#ifdef DEBUG_MATRIX_SCAN_RATE + scan_count++; + + uint32_t timer_now = timer_read32(); + if (TIMER_DIFF_32(timer_now, scan_timer)>1000) { + print("matrix scan frequency: "); + pdec(scan_count); + print("\n"); + + scan_timer = timer_now; + scan_count = 0; + } +#endif + +#if DEBOUNCING_DELAY > 0 + if (debouncing && (timer_elapsed32(matrix_last_modified) > DEBOUNCING_DELAY)) { + memcpy(matrix, matrix_debouncing, sizeof(matrix)); + debouncing = false; + } +#endif + + return 1; +} + +uint8_t matrix_scan(void) { + if (!matrix_scan_raw()) { + return 0; + } + + // Try to manage battery power a little better than the default scan. + // If the user is idle for a while, turn off some things that draw + // power. + + if (timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) { + matrix_power_down(); + + // Turn on all the rows; we're going to read the columns in + // the loop below to see if we got woken up. + select_rows(); + + while (true) { + suspend_power_down(); + + // See if any keys have been pressed. + if (!~expander_read_r(EXPANDER_REG_GPIOA) || !~expander_read_r(EXPANDER_REG_GPIOB)) { + continue; + } + + // Wake us up + matrix_last_modified = timer_read32(); + suspend_wakeup_init(); + matrix_power_up(); + + // Wake the host up, if appropriate. + if (USB_DeviceState == DEVICE_STATE_Suspended && + USB_Device_RemoteWakeupEnabled) { + USB_Device_SendRemoteWakeup(); + } + break; + } + } + + matrix_scan_quantum(); + return 1; +} + +void matrix_print(void) { + print("\nr/c 0123456789ABCDEF\n"); + + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + print_hex8(row); + print(": "); + print_bin_reverse16(matrix_get_row(row)); + print("\n"); + } +} diff --git a/keyboards/p65bt/mcp23017.c b/keyboards/p65bt/mcp23017.c new file mode 100644 index 000000000000..64ca29345536 --- /dev/null +++ b/keyboards/p65bt/mcp23017.c @@ -0,0 +1,155 @@ +/* Copyright 2018 Mike Roberts + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include "action.h" +#include "lib/lufa/LUFA/Drivers/Peripheral/TWI.h" +#include "lib/lufa/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c" +#include "mcp23017.h" +#include "debug.h" +#include "wait.h" + +static bool initialized; +static bool twi_initialized; + +uint8_t bit_for_pin(uint8_t pin); +uint8_t expander_write(uint8_t reg, uint8_t data); +uint8_t expander_read(uint8_t reg, uint8_t *data); +uint8_t expander_read_r(uint8_t reg); +void expander_config(void); +bool expander_make_ready(void); +unsigned char reverse(unsigned char b); + +// static const char *twi_err_str(uint8_t res) { +// switch (res) { +// case TWI_ERROR_NoError: +// return "OK"; +// case TWI_ERROR_BusFault: +// return "BUSFAULT"; +// case TWI_ERROR_BusCaptureTimeout: +// return "BUSTIMEOUT"; +// case TWI_ERROR_SlaveResponseTimeout: +// return "SLAVETIMEOUT"; +// case TWI_ERROR_SlaveNotReady: +// return "SLAVENOTREADY"; +// case TWI_ERROR_SlaveNAK: +// return "SLAVENAK"; +// default: +// return "UNKNOWN"; +// } +// } + +void expander_init(void) { + if (!twi_initialized) { + TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 400000)); + twi_initialized = true; + } +} + +// set IN and HI +void expander_unselect_all() { + expander_write(EXPANDER_REG_IODIRA, 0xff); + expander_write(EXPANDER_REG_IODIRB, 0xff); + expander_write(EXPANDER_REG_OLATA, 0xff); + expander_write(EXPANDER_REG_OLATB, 0xff); + wait_us(EXPANDER_PAUSE); +} + +// set OUT and LOW +void expander_select(uint8_t pin) { + const uint8_t mask = 0xff & ~(1 << bit_for_pin(pin)); + if (pin < 8) { + expander_write(EXPANDER_REG_IODIRA, mask); + expander_write(EXPANDER_REG_OLATA, mask); + } else { + expander_write(EXPANDER_REG_IODIRB, mask); + expander_write(EXPANDER_REG_OLATB, mask); + } + wait_us(EXPANDER_PAUSE); +} + +void expander_config() { + // set everything to input + expander_write(EXPANDER_REG_IODIRA, 0xff); + expander_write(EXPANDER_REG_IODIRB, 0xff); + + // turn on pull-ups + expander_write(EXPANDER_REG_GPPUA, 0xff); + expander_write(EXPANDER_REG_GPPUB, 0xff); + + // disable interrupts + expander_write(EXPANDER_REG_GPINTENA, 0x0); + expander_write(EXPANDER_REG_GPINTENB, 0x0); + + // polarity + expander_write(EXPANDER_REG_IPOLA, 0x0); + expander_write(EXPANDER_REG_IPOLB, 0x0); + + initialized = true; +} + +bool expander_make_ready() { + if (initialized) { + return true; + } + expander_init(); + expander_config(); + + return initialized; +} + +uint8_t bit_for_pin(uint8_t pin) { + return pin % 8; +} + +uint8_t expander_write(uint8_t reg, unsigned char val) { + uint8_t addr = reg; + uint8_t result = TWI_WritePacket(EXPANDER_ADDR << 1, I2C_TIMEOUT, &addr, sizeof(addr), &val, sizeof(val)); + if (result) { + xprintf("mcp: set_register %d = %d failed: %s\n", reg, val, twi_err_str(result)); + initialized = false; + } + return result == 0; +} + +uint8_t expander_read(uint8_t reg, uint8_t *data) { + uint8_t addr = reg; + uint8_t result = TWI_ReadPacket(EXPANDER_ADDR << 1, I2C_TIMEOUT, &addr, sizeof(addr), data, sizeof(data)); + if (result) { + xprintf("mcp: read pins failed: %s\n", twi_err_str(result)); + initialized = false; + return 0; + } + return result == 0; +} + +uint8_t expander_read_r(uint8_t reg) { + uint8_t addr = reg; + uint8_t buf[1]; + uint8_t result = TWI_ReadPacket(EXPANDER_ADDR << 1, I2C_TIMEOUT, &addr, sizeof(addr), buf, sizeof(buf)); + if (result) { + xprintf("mcp: read pins failed: %s\n", twi_err_str(result)); + initialized = false; + return 0; + } + return buf[0]; +} + +unsigned char reverse(unsigned char b) { + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; +} diff --git a/keyboards/p65bt/mcp23017.h b/keyboards/p65bt/mcp23017.h new file mode 100644 index 000000000000..97584285dc1f --- /dev/null +++ b/keyboards/p65bt/mcp23017.h @@ -0,0 +1,74 @@ +/* Copyright 2018 Mike Roberts + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef MAP23017_H +#define MAP23017_H + +#define EXPANDER_ADDR 0x20 +#define I2C_TIMEOUT 200 // milliseconds +#define EXPANDER_PAUSE 0 // microseconds + +enum EXPANDER_REGISTERS { + EXPANDER_REG_IODIRA = 0x00, + EXPANDER_REG_IODIRB = 0x01, + EXPANDER_REG_IPOLA = 0x02, + EXPANDER_REG_IPOLB = 0x03, + EXPANDER_REG_GPINTENA = 0x04, + EXPANDER_REG_GPINTENB = 0x05, + EXPANDER_REG_DEFVALA = 0x06, + EXPANDER_REG_DEFVALB = 0x07, + EXPANDER_REG_INTCONA = 0x08, + EXPANDER_REG_INTCONB = 0x09, + EXPANDER_REG_IOCONA = 0x0A, + EXPANDER_REG_IOCONB = 0x0B, + EXPANDER_REG_GPPUA = 0x0C, + EXPANDER_REG_GPPUB = 0x0D, + EXPANDER_REG_INTFA = 0x0E, + EXPANDER_REG_INTFB = 0x0F, + EXPANDER_REG_INTCAPA = 0x10, + EXPANDER_REG_INTCAPB = 0x11, + EXPANDER_REG_GPIOA = 0x12, + EXPANDER_REG_GPIOB = 0x13, + EXPANDER_REG_OLATA = 0x14, + EXPANDER_REG_OLATB = 0x15 +}; + +#define GPA0 0x0 +#define GPA1 0x1 +#define GPA2 0x2 +#define GPA3 0x3 +#define GPA4 0x4 +#define GPA5 0x5 +#define GPA6 0x6 +#define GPA7 0x7 +#define GPB0 0x8 +#define GPB1 0x9 +#define GPB2 0xA +#define GPB3 0xB +#define GPB4 0xC +#define GPB5 0xD +#define GPB6 0xE +#define GPB7 0xF + + +void expander_init(void); +void expander_config(void); +void expander_select(uint8_t pin); +void expander_unselect(uint8_t pin); +void expander_unselect_all(void); +uint8_t expander_read_r(uint8_t reg); +bool expander_make_ready(void); + +#endif \ No newline at end of file diff --git a/keyboards/p65bt/p65bt.c b/keyboards/p65bt/p65bt.c new file mode 100755 index 000000000000..96fcf6246831 --- /dev/null +++ b/keyboards/p65bt/p65bt.c @@ -0,0 +1,37 @@ +#include "p65bt.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} +__attribute__((weak)) // overridable +void matrix_init_user(void) { + +} + +__attribute__((weak)) // overridable +void matrix_scan_user(void) { + +} \ No newline at end of file diff --git a/keyboards/p65bt/p65bt.h b/keyboards/p65bt/p65bt.h new file mode 100755 index 000000000000..ce8d6a2e497e --- /dev/null +++ b/keyboards/p65bt/p65bt.h @@ -0,0 +1,26 @@ +#ifndef KB_H +#define KB_H + +#include "quantum.h" + +#define LAYOUT_ALL( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, K013, K014, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, K013, K014}, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114}, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, KC_NO, K212, K213}, \ + { K30, KC_NO, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313}, \ + { K40, K41, K42, KC_NO, KC_NO, KC_NO, K43, KC_NO, KC_NO, K44, K45, K46, K47, K48, K49} \ +} + +extern uint8_t expander_status; +extern uint8_t expander_input_pin_mask; +extern bool i2c_initialized; + +void init_expander(void); + +#endif \ No newline at end of file diff --git a/keyboards/p65bt/rules.mk b/keyboards/p65bt/rules.mk new file mode 100755 index 000000000000..a48e49877427 --- /dev/null +++ b/keyboards/p65bt/rules.mk @@ -0,0 +1,81 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 8000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# + +#BOOTMAGIC_ENABLE ?= undefined # Virtual DIP switch configuration(+1000) +#MOUSEKEY_ENABLE ?= undefined # Mouse keys(+4700) +#EXTRAKEY_ENABLE ?= undefined # Audio control and System control(+450) +#CONSOLE_ENABLE ?= no # Console for debug(+400) +#COMMAND_ENABLE ?= no # Commands for debug and configuration +#SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +#NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +#BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +#AUDIO_ENABLE ?= no +#RGBLIGHT_ENABLE ?= no +#KEY_LOCK_ENABLE ?= undefined +#BLUETOOTH_ENABLE ?= AdafruitBLE # Enable Bluetooth with the Adafruit EZ-Key HID + +SRC = matrix.c mcp23017.c twimaster.c + +# Enable options +CUSTOM_MATRIX ?= yes # We have a custom matrix +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +UNICODE_ENABLE ?= yes # Unicode +VIA_ENABLE ?= yes + +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +MOUSEKEY_ENABLE ?= no # Mouse keys +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +BACKLIGHT_ENABLE ?= no +RGBLIGHT_ENABLE ?= no +CONSOLE_ENABLE ?= no # Console for debug(+400) +NKRO_ENABLE ?= no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work + +BLUETOOTH = AdafruitBLE \ No newline at end of file diff --git a/keyboards/p65bt/twimaster.c b/keyboards/p65bt/twimaster.c new file mode 100644 index 000000000000..04f94b5664b8 --- /dev/null +++ b/keyboards/p65bt/twimaster.c @@ -0,0 +1,208 @@ +/************************************************************************* +* Title: I2C master library using hardware TWI interface +* Author: Peter Fleury http://jump.to/fleury +* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ +* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Target: any AVR device with hardware TWI +* Usage: API compatible with I2C Software Library i2cmaster.h +**************************************************************************/ +#include +#include + +#include "i2cmaster.h" + + +/* define CPU frequency in Mhz here if not defined in Makefile */ +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +/* I2C clock in Hz */ +#define SCL_CLOCK 400000L + + +/************************************************************************* + Initialization of the I2C bus interface. Need to be called only once +*************************************************************************/ +void i2c_init(void) +{ + /* initialize TWI clock + * minimal values in Bit Rate Register (TWBR) and minimal Prescaler + * bits in the TWI Status Register should give us maximal possible + * I2C bus speed - about 444 kHz + * + * for more details, see 20.5.2 in ATmega16/32 secification + */ + + TWSR = 0; /* no prescaler */ + TWBR = 10; /* must be >= 10 for stable operation */ + +}/* i2c_init */ + + +/************************************************************************* + Issues a start condition and sends address and transfer direction. + return 0 = device accessible, 1= failed to access device +*************************************************************************/ +unsigned char i2c_start(unsigned char address) +{ + uint8_t twst; + + // send START condition + TWCR = (1<. + */ +#pragma once +// Some helpers for controlling gpio pins +#include + +enum { + PinDirectionInput = 0, + PinDirectionOutput = 1, + PinLevelHigh = 1, + PinLevelLow = 0, +}; + +// ex: pinMode(B0, PinDirectionOutput); +static inline void pinMode(uint8_t pin, int mode) { + uint8_t bv = _BV(pin & 0xf); + if (mode == PinDirectionOutput) { + _SFR_IO8((pin >> 4) + 1) |= bv; + } else { + _SFR_IO8((pin >> 4) + 1) &= ~bv; + _SFR_IO8((pin >> 4) + 2) &= ~bv; + } +} + +// ex: digitalWrite(B0, PinLevelHigh); +static inline void digitalWrite(uint8_t pin, int mode) { + uint8_t bv = _BV(pin & 0xf); + if (mode == PinLevelHigh) { + _SFR_IO8((pin >> 4) + 2) |= bv; + } else { + _SFR_IO8((pin >> 4) + 2) &= ~bv; + } +} + +// Return true if the pin is HIGH +// digitalRead(B0) +static inline bool digitalRead(uint8_t pin) { return _SFR_IO8(pin >> 4) & _BV(pin & 0xf); }