diff --git a/Images/IMG_0367.jpg b/Images/IMG_0367.jpg new file mode 100644 index 0000000..914f640 --- /dev/null +++ b/Images/IMG_0367.jpg Binary files differ diff --git a/Images/IMG_0368.jpg b/Images/IMG_0368.jpg new file mode 100644 index 0000000..8593261 --- /dev/null +++ b/Images/IMG_0368.jpg Binary files differ diff --git a/Images/IMG_0369.jpg b/Images/IMG_0369.jpg new file mode 100644 index 0000000..cafa73e --- /dev/null +++ b/Images/IMG_0369.jpg Binary files differ diff --git a/Images/IMG_0370.MOV b/Images/IMG_0370.MOV new file mode 100644 index 0000000..6cfefd6 --- /dev/null +++ b/Images/IMG_0370.MOV Binary files differ diff --git a/Images/IMG_0371.MOV b/Images/IMG_0371.MOV new file mode 100644 index 0000000..b5f3bc8 --- /dev/null +++ b/Images/IMG_0371.MOV Binary files differ diff --git a/Images/IMG_0372.jpg b/Images/IMG_0372.jpg new file mode 100644 index 0000000..2dbbd2a --- /dev/null +++ b/Images/IMG_0372.jpg Binary files differ diff --git a/Images/IMG_0373.MOV b/Images/IMG_0373.MOV new file mode 100644 index 0000000..48fa4c2 --- /dev/null +++ b/Images/IMG_0373.MOV Binary files differ diff --git a/Images/IMG_0374.MOV b/Images/IMG_0374.MOV new file mode 100644 index 0000000..c860171 --- /dev/null +++ b/Images/IMG_0374.MOV Binary files differ diff --git a/Images/IMG_0375.MOV b/Images/IMG_0375.MOV new file mode 100644 index 0000000..fabfdb1 --- /dev/null +++ b/Images/IMG_0375.MOV Binary files differ diff --git a/Images/IMG_0376.jpg b/Images/IMG_0376.jpg new file mode 100644 index 0000000..387ffbb --- /dev/null +++ b/Images/IMG_0376.jpg Binary files differ diff --git a/Images/UNO%20Board.jpg b/Images/UNO%20Board.jpg new file mode 100644 index 0000000..f78f388 --- /dev/null +++ b/Images/UNO%20Board.jpg Binary files differ diff --git a/Images/cnc%20shield%203.jpg b/Images/cnc%20shield%203.jpg new file mode 100644 index 0000000..b3a548b --- /dev/null +++ b/Images/cnc%20shield%203.jpg Binary files differ diff --git a/Images/ink%20shield%201.jpg b/Images/ink%20shield%201.jpg new file mode 100644 index 0000000..4342713 --- /dev/null +++ b/Images/ink%20shield%201.jpg Binary files differ diff --git a/Images/ink%20shield%202.jpg b/Images/ink%20shield%202.jpg new file mode 100644 index 0000000..ff55bc7 --- /dev/null +++ b/Images/ink%20shield%202.jpg Binary files differ diff --git a/Models/GBv2/DX8.stl b/Models/GBv2/DX8.stl new file mode 100644 index 0000000..c81943a --- /dev/null +++ b/Models/GBv2/DX8.stl Binary files differ diff --git a/Models/litscher_carbonfab_181126/Printed/2Xgusset2_181126.STEP b/Models/litscher_carbonfab_181126/Printed/2Xgusset2_181126.STEP new file mode 100644 index 0000000..69529bb --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/2Xgusset2_181126.STEP @@ -0,0 +1,766 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('2Xgusset2_181126.STEP', + '2018-11-27T00:50:34', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2018', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = ORIENTED_EDGE ( 'NONE', *, *, #508, .F. ) ; +#2 = LINE ( 'NONE', #647, #458 ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#4 = ORIENTED_EDGE ( 'NONE', *, *, #108, .F. ) ; +#5 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#6 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -2.897000000000000242 ) ) ; +#7 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#8 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#9 = PLANE ( 'NONE', #435 ) ; +#10 = VECTOR ( 'NONE', #657, 1000.000000000000000 ) ; +#11 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#12 = ORIENTED_EDGE ( 'NONE', *, *, #564, .F. ) ; +#13 = LINE ( 'NONE', #568, #408 ) ; +#14 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '2Xgusset2_181126', ( #731, #80 ), #220 ) ; +#15 = EDGE_CURVE ( 'NONE', #362, #55, #216, .T. ) ; +#16 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17 = EDGE_LOOP ( 'NONE', ( #4, #682, #125, #441 ) ) ; +#18 = VECTOR ( 'NONE', #122, 1000.000000000000000 ) ; +#19 = EDGE_CURVE ( 'NONE', #741, #719, #313, .T. ) ; +#20 = PLANE ( 'NONE', #683 ) ; +#21 = ORIENTED_EDGE ( 'NONE', *, *, #722, .T. ) ; +#22 = VERTEX_POINT ( 'NONE', #165 ) ; +#23 = CARTESIAN_POINT ( 'NONE', ( 15.62500000000000000, 0.0000000000000000000, -6.650000000000001243 ) ) ; +#24 = AXIS2_PLACEMENT_3D ( 'NONE', #410, #369, #11 ) ; +#25 = FACE_BOUND ( 'NONE', #646, .T. ) ; +#26 = ORIENTED_EDGE ( 'NONE', *, *, #15, .F. ) ; +#27 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -6.650000000000001243 ) ) ; +#28 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -16.93750000000000000 ) ) ; +#29 = PLANE ( 'NONE', #416 ) ; +#30 = ORIENTED_EDGE ( 'NONE', *, *, #492, .T. ) ; +#31 = EDGE_CURVE ( 'NONE', #22, #677, #594, .T. ) ; +#32 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#33 = EDGE_CURVE ( 'NONE', #406, #362, #137, .T. ) ; +#34 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #661, .NOT_KNOWN. ) ; +#35 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -16.93750000000000000 ) ) ; +#36 = VECTOR ( 'NONE', #306, 1000.000000000000000 ) ; +#37 = LINE ( 'NONE', #487, #300 ) ; +#38 = ORIENTED_EDGE ( 'NONE', *, *, #584, .F. ) ; +#39 = FACE_OUTER_BOUND ( 'NONE', #348, .T. ) ; +#40 = VECTOR ( 'NONE', #586, 1000.000000000000000 ) ; +#41 = CARTESIAN_POINT ( 'NONE', ( 25.40000000000000213, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#42 = CYLINDRICAL_SURFACE ( 'NONE', #58, 1.624999999999999778 ) ; +#43 = ORIENTED_EDGE ( 'NONE', *, *, #495, .F. ) ; +#44 = ADVANCED_FACE ( 'NONE', ( #611 ), #745, .F. ) ; +#45 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -6.650000000000001243 ) ) ; +#46 = EDGE_CURVE ( 'NONE', #150, #463, #439, .T. ) ; +#47 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -2.897000000000000242 ) ) ; +#48 = ORIENTED_EDGE ( 'NONE', *, *, #484, .F. ) ; +#49 = ADVANCED_FACE ( 'NONE', ( #121, #475 ), #184, .F. ) ; +#50 = LINE ( 'NONE', #391, #648 ) ; +#51 = VECTOR ( 'NONE', #623, 1000.000000000000000 ) ; +#52 = VECTOR ( 'NONE', #117, 1000.000000000000000 ) ; +#53 = DIRECTION ( 'NONE', ( -1.476360405086643816E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#54 = ORIENTED_EDGE ( 'NONE', *, *, #405, .T. ) ; +#55 = VERTEX_POINT ( 'NONE', #554 ) ; +#56 = VERTEX_POINT ( 'NONE', #624 ) ; +#57 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #380, 'distance_accuracy_value', 'NONE'); +#58 = AXIS2_PLACEMENT_3D ( 'NONE', #700, #651, #179 ) ; +#59 = ORIENTED_EDGE ( 'NONE', *, *, #15, .T. ) ; +#60 = AXIS2_PLACEMENT_3D ( 'NONE', #553, #559, #616 ) ; +#61 = FACE_BOUND ( 'NONE', #242, .T. ) ; +#62 = FACE_OUTER_BOUND ( 'NONE', #748, .T. ) ; +#63 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, -3.174999999999999822, -11.06250000000000178 ) ) ; +#64 = ORIENTED_EDGE ( 'NONE', *, *, #166, .F. ) ; +#65 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -11.06250000000000178 ) ) ; +#66 = FILL_AREA_STYLE ('',( #366 ) ) ; +#67 = SURFACE_STYLE_FILL_AREA ( #66 ) ; +#68 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, -3.174999999999999822, -16.93750000000000000 ) ) ; +#69 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -12.24619407771256085 ) ) ; +#70 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#71 = VERTEX_POINT ( 'NONE', #321 ) ; +#72 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#73 = EDGE_LOOP ( 'NONE', ( #282, #509, #349, #629 ) ) ; +#74 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -3.174999999999999822, 0.0000000000000000000 ) ) ; +#75 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, 3.174999999999999822, -5.650000000000001243 ) ) ; +#76 = EDGE_CURVE ( 'NONE', #478, #601, #558, .T. ) ; +#77 = ORIENTED_EDGE ( 'NONE', *, *, #714, .T. ) ; +#78 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#79 = VECTOR ( 'NONE', #592, 1000.000000000000000 ) ; +#80 = AXIS2_PLACEMENT_3D ( 'NONE', #493, #16, #436 ) ; +#81 = EDGE_LOOP ( 'NONE', ( #64, #625, #578, #502 ) ) ; +#82 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#83 = AXIS2_PLACEMENT_3D ( 'NONE', #679, #144, #280 ) ; +#84 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#85 = LINE ( 'NONE', #199, #36 ) ; +#86 = CARTESIAN_POINT ( 'NONE', ( 6.650000000000000355, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#87 = FACE_OUTER_BOUND ( 'NONE', #289, .T. ) ; +#88 = EDGE_CURVE ( 'NONE', #393, #577, #248, .T. ) ; +#89 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 1.990051048614447637E-16, -15.62500000000000355 ) ) ; +#90 = ORIENTED_EDGE ( 'NONE', *, *, #156, .F. ) ; +#91 = ADVANCED_FACE ( 'NONE', ( #363 ), #444, .F. ) ; +#92 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#93 = AXIS2_PLACEMENT_3D ( 'NONE', #602, #421, #548 ) ; +#94 = CYLINDRICAL_SURFACE ( 'NONE', #630, 1.624999999999999778 ) ; +#95 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#96 = ORIENTED_EDGE ( 'NONE', *, *, #460, .F. ) ; +#97 = FACE_OUTER_BOUND ( 'NONE', #337, .T. ) ; +#98 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -3.174999999999999822, 0.0000000000000000000 ) ) ; +#99 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#100 = ADVANCED_FACE ( 'NONE', ( #449 ), #295, .F. ) ; +#101 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#102 = VECTOR ( 'NONE', #428, 1000.000000000000000 ) ; +#103 = AXIS2_PLACEMENT_3D ( 'NONE', #86, #32, #615 ) ; +#104 = ADVANCED_FACE ( 'NONE', ( #322 ), #42, .F. ) ; +#105 = ORIENTED_EDGE ( 'NONE', *, *, #341, .T. ) ; +#106 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#107 = VERTEX_POINT ( 'NONE', #239 ) ; +#108 = EDGE_CURVE ( 'NONE', #276, #433, #2, .T. ) ; +#109 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#110 = ORIENTED_EDGE ( 'NONE', *, *, #484, .T. ) ; +#111 = LINE ( 'NONE', #418, #704 ) ; +#112 = EDGE_CURVE ( 'NONE', #668, #677, #575, .T. ) ; +#113 = ORIENTED_EDGE ( 'NONE', *, *, #654, .F. ) ; +#114 = EDGE_CURVE ( 'NONE', #56, #723, #214, .T. ) ; +#115 = CARTESIAN_POINT ( 'NONE', ( 12.37500000000000000, 1.990051048614449609E-16, -5.650000000000000355 ) ) ; +#116 = AXIS2_PLACEMENT_3D ( 'NONE', #740, #338, #631 ) ; +#117 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#118 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#119 = DIRECTION ( 'NONE', ( -0.7071067811865474617, -0.0000000000000000000, -0.7071067811865474617 ) ) ; +#120 = LINE ( 'NONE', #540, #10 ) ; +#121 = FACE_BOUND ( 'NONE', #546, .T. ) ; +#122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#123 = CARTESIAN_POINT ( 'NONE', ( 15.62500000000000000, 0.0000000000000000000, -2.897000000000000242 ) ) ; +#124 = ORIENTED_EDGE ( 'NONE', *, *, #492, .F. ) ; +#125 = ORIENTED_EDGE ( 'NONE', *, *, #114, .F. ) ; +#126 = CARTESIAN_POINT ( 'NONE', ( 25.40000000000000213, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#127 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#128 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#129 = EDGE_LOOP ( 'NONE', ( #470, #269, #373, #412 ) ) ; +#130 = FACE_OUTER_BOUND ( 'NONE', #73, .T. ) ; +#131 = CYLINDRICAL_SURFACE ( 'NONE', #712, 1.624999999999999778 ) ; +#132 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 0.0000000000000000000, -12.37500000000000178 ) ) ; +#133 = EDGE_LOOP ( 'NONE', ( #105, #609, #26, #77 ) ) ; +#134 = AXIS2_PLACEMENT_3D ( 'NONE', #221, #735, #733 ) ; +#135 = PRODUCT_CONTEXT ( 'NONE', #262, 'mechanical' ) ; +#136 = ORIENTED_EDGE ( 'NONE', *, *, #533, .F. ) ; +#137 = LINE ( 'NONE', #160, #147 ) ; +#138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#139 = ORIENTED_EDGE ( 'NONE', *, *, #166, .T. ) ; +#140 = ORIENTED_EDGE ( 'NONE', *, *, #460, .T. ) ; +#141 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#142 = AXIS2_PLACEMENT_3D ( 'NONE', #273, #334, #92 ) ; +#143 = PRESENTATION_STYLE_ASSIGNMENT (( #673 ) ) ; +#144 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#145 = EDGE_LOOP ( 'NONE', ( #608, #181, #621 ) ) ; +#146 = CIRCLE ( 'NONE', #612, 1.624999999999999778 ) ; +#147 = VECTOR ( 'NONE', #730, 1000.000000000000000 ) ; +#148 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#149 = EDGE_CURVE ( 'NONE', #406, #620, #204, .T. ) ; +#150 = VERTEX_POINT ( 'NONE', #75 ) ; +#151 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#152 = DIRECTION ( 'NONE', ( 1.476360405086643816E-16, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#153 = AXIS2_PLACEMENT_3D ( 'NONE', #457, #404, #632 ) ; +#154 = ORIENTED_EDGE ( 'NONE', *, *, #481, .F. ) ; +#155 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#156 = EDGE_CURVE ( 'NONE', #685, #577, #721, .T. ) ; +#157 = ADVANCED_FACE ( 'NONE', ( #265, #62 ), #479, .F. ) ; +#158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#159 = VECTOR ( 'NONE', #141, 1000.000000000000000 ) ; +#160 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 3.174999999999999822, -11.06250000000000178 ) ) ; +#161 = ORIENTED_EDGE ( 'NONE', *, *, #328, .F. ) ; +#162 = LINE ( 'NONE', #561, #552 ) ; +#163 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -3.174999999999999822, -2.897000000000001130 ) ) ; +#164 = ADVANCED_FACE ( 'NONE', ( #415 ), #713, .F. ) ; +#165 = CARTESIAN_POINT ( 'NONE', ( 12.37500000000000000, 1.990051048614449609E-16, 0.0000000000000000000 ) ) ; +#166 = EDGE_CURVE ( 'NONE', #618, #668, #519, .T. ) ; +#167 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#168 = EDGE_CURVE ( 'NONE', #407, #150, #378, .T. ) ; +#169 = EDGE_LOOP ( 'NONE', ( #110, #139 ) ) ; +#170 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -11.06250000000000178 ) ) ; +#171 = VECTOR ( 'NONE', #576, 1000.000000000000000 ) ; +#172 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#173 = CIRCLE ( 'NONE', #669, 1.624999999999999778 ) ; +#174 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#175 = EDGE_LOOP ( 'NONE', ( #377, #455, #218, #351 ) ) ; +#176 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#177 = EDGE_CURVE ( 'NONE', #486, #741, #717, .T. ) ; +#178 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#179 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#180 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#181 = ORIENTED_EDGE ( 'NONE', *, *, #19, .F. ) ; +#182 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.476360405086643816E-16 ) ) ; +#183 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, -3.174999999999999822, -11.06250000000000178 ) ) ; +#184 = PLANE ( 'NONE', #659 ) ; +#185 = ORIENTED_EDGE ( 'NONE', *, *, #390, .F. ) ; +#186 = DIRECTION ( 'NONE', ( -0.7071067811865474617, -0.0000000000000000000, -0.7071067811865474617 ) ) ; +#187 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#188 = AXIS2_PLACEMENT_3D ( 'NONE', #445, #148, #447 ) ; +#189 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#190 = CARTESIAN_POINT ( 'NONE', ( 12.37500000000000000, 1.990051048614449116E-16, -12.24619407771256085 ) ) ; +#191 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -5.650000000000000355 ) ) ; +#192 = ORIENTED_EDGE ( 'NONE', *, *, #504, .T. ) ; +#193 = EDGE_CURVE ( 'NONE', #478, #406, #120, .T. ) ; +#194 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -3.174999999999999822, -25.40000000000000213 ) ) ; +#195 = CARTESIAN_POINT ( 'NONE', ( 6.650000000000000355, 0.0000000000000000000, -12.37500000000000178 ) ) ; +#196 = ORIENTED_EDGE ( 'NONE', *, *, #459, .T. ) ; +#197 = ORIENTED_EDGE ( 'NONE', *, *, #417, .F. ) ; +#198 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#199 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -3.174999999999999822, -2.897000000000001130 ) ) ; +#200 = CIRCLE ( 'NONE', #134, 1.624999999999999778 ) ; +#201 = EDGE_CURVE ( 'NONE', #463, #276, #466, .T. ) ; +#202 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, -3.174999999999999822, -11.06250000000000178 ) ) ; +#203 = ORIENTED_EDGE ( 'NONE', *, *, #296, .F. ) ; +#204 = LINE ( 'NONE', #589, #438 ) ; +#205 = CYLINDRICAL_SURFACE ( 'NONE', #409, 1.624999999999999778 ) ; +#206 = ORIENTED_EDGE ( 'NONE', *, *, #233, .F. ) ; +#207 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#208 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, -25.40000000000000213 ) ) ; +#209 = LINE ( 'NONE', #190, #293 ) ; +#210 = FILL_AREA_STYLE_COLOUR ( '', #167 ) ; +#211 = EDGE_LOOP ( 'NONE', ( #197, #379, #585, #477 ) ) ; +#212 = VECTOR ( 'NONE', #505, 1000.000000000000000 ) ; +#213 = DIRECTION ( 'NONE', ( -0.7071067811865475727, 0.0000000000000000000, 0.7071067811865475727 ) ) ; +#214 = LINE ( 'NONE', #413, #40 ) ; +#215 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#216 = LINE ( 'NONE', #529, #739 ) ; +#217 = FACE_BOUND ( 'NONE', #664, .T. ) ; +#218 = ORIENTED_EDGE ( 'NONE', *, *, #168, .F. ) ; +#219 = VERTEX_POINT ( 'NONE', #547 ) ; +#220 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #355 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #381, #84, #324 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#221 = CARTESIAN_POINT ( 'NONE', ( 2.897000000000000242, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#222 = EDGE_LOOP ( 'NONE', ( #203, #124 ) ) ; +#223 = CIRCLE ( 'NONE', #255, 1.624999999999999778 ) ; +#224 = FACE_BOUND ( 'NONE', #169, .T. ) ; +#225 = FACE_OUTER_BOUND ( 'NONE', #145, .T. ) ; +#226 = ORIENTED_EDGE ( 'NONE', *, *, #485, .F. ) ; +#227 = AXIS2_PLACEMENT_3D ( 'NONE', #344, #356, #178 ) ; +#228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#229 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#230 = VECTOR ( 'NONE', #253, 1000.000000000000000 ) ; +#231 = ADVANCED_FACE ( 'NONE', ( #422 ), #94, .F. ) ; +#232 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, -25.40000000000000213 ) ) ; +#233 = EDGE_CURVE ( 'NONE', #55, #478, #672, .T. ) ; +#234 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#235 = ORIENTED_EDGE ( 'NONE', *, *, #469, .F. ) ; +#236 = EDGE_LOOP ( 'NONE', ( #424, #597 ) ) ; +#237 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#238 = EDGE_CURVE ( 'NONE', #219, #741, #527, .T. ) ; +#239 = CARTESIAN_POINT ( 'NONE', ( 2.897000000000000242, 0.0000000000000000000, -12.37500000000000178 ) ) ; +#240 = ORIENTED_EDGE ( 'NONE', *, *, #607, .T. ) ; +#241 = VECTOR ( 'NONE', #180, 1000.000000000000000 ) ; +#242 = EDGE_LOOP ( 'NONE', ( #695, #1, #12, #250 ) ) ; +#243 = EDGE_CURVE ( 'NONE', #652, #486, #603, .T. ) ; +#244 = AXIS2_PLACEMENT_3D ( 'NONE', #376, #697, #182 ) ; +#245 = LINE ( 'NONE', #340, #642 ) ; +#246 = VECTOR ( 'NONE', #198, 1000.000000000000000 ) ; +#247 = CARTESIAN_POINT ( 'NONE', ( 6.650000000000000355, 3.174999999999999822, -11.06250000000000178 ) ) ; +#248 = CIRCLE ( 'NONE', #699, 1.625000000000001332 ) ; +#249 = EDGE_CURVE ( 'NONE', #463, #71, #635, .T. ) ; +#250 = ORIENTED_EDGE ( 'NONE', *, *, #636, .F. ) ; +#251 = ORIENTED_EDGE ( 'NONE', *, *, #263, .F. ) ; +#252 = CYLINDRICAL_SURFACE ( 'NONE', #142, 1.624999999999999778 ) ; +#253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#254 = DIRECTION ( 'NONE', ( -1.476360405086643816E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#255 = AXIS2_PLACEMENT_3D ( 'NONE', #27, #450, #670 ) ; +#256 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #691 ), #718 ) ; +#257 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#258 = EDGE_LOOP ( 'NONE', ( #534, #48, #309, #303 ) ) ; +#259 = EDGE_CURVE ( 'NONE', #359, #634, #223, .T. ) ; +#260 = ORIENTED_EDGE ( 'NONE', *, *, #33, .F. ) ; +#261 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #262 ) ; +#262 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#263 = EDGE_CURVE ( 'NONE', #407, #56, #689, .T. ) ; +#264 = VECTOR ( 'NONE', #119, 1000.000000000000114 ) ; +#265 = FACE_BOUND ( 'NONE', #236, .T. ) ; +#266 = VECTOR ( 'NONE', #570, 1000.000000000000000 ) ; +#267 = FACE_BOUND ( 'NONE', #513, .T. ) ; +#268 = LINE ( 'NONE', #78, #159 ) ; +#269 = ORIENTED_EDGE ( 'NONE', *, *, #737, .F. ) ; +#270 = FACE_OUTER_BOUND ( 'NONE', #627, .T. ) ; +#271 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#272 = ORIENTED_EDGE ( 'NONE', *, *, #737, .T. ) ; +#273 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -12.24619407771256085 ) ) ; +#274 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#275 = AXIS2_PLACEMENT_3D ( 'NONE', #291, #354, #172 ) ; +#276 = VERTEX_POINT ( 'NONE', #619 ) ; +#277 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #279 ) ) ; +#278 = CIRCLE ( 'NONE', #394, 1.625000000000001332 ) ; +#279 = STYLED_ITEM ( 'NONE', ( #727 ), #731 ) ; +#280 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#281 = ADVANCED_FACE ( 'NONE', ( #130 ), #429, .F. ) ; +#282 = ORIENTED_EDGE ( 'NONE', *, *, #564, .T. ) ; +#283 = EDGE_CURVE ( 'NONE', #531, #719, #50, .T. ) ; +#284 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#285 = EDGE_CURVE ( 'NONE', #372, #107, #200, .T. ) ; +#286 = LINE ( 'NONE', #74, #411 ) ; +#287 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#288 = ADVANCED_FACE ( 'NONE', ( #666 ), #252, .F. ) ; +#289 = EDGE_LOOP ( 'NONE', ( #596, #395, #461, #715 ) ) ; +#290 = ORIENTED_EDGE ( 'NONE', *, *, #588, .T. ) ; +#291 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#292 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#293 = VECTOR ( 'NONE', #491, 1000.000000000000000 ) ; +#294 = CIRCLE ( 'NONE', #680, 1.624999999999999778 ) ; +#295 = PLANE ( 'NONE', #420 ) ; +#296 = EDGE_CURVE ( 'NONE', #569, #640, #353, .T. ) ; +#297 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#298 = CARTESIAN_POINT ( 'NONE', ( 15.62500000000000000, 0.0000000000000000000, -12.24619407771256085 ) ) ; +#299 = PLANE ( 'NONE', #637 ) ; +#300 = VECTOR ( 'NONE', #187, 1000.000000000000000 ) ; +#301 = VERTEX_POINT ( 'NONE', #389 ) ; +#302 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#303 = ORIENTED_EDGE ( 'NONE', *, *, #390, .T. ) ; +#304 = ORIENTED_EDGE ( 'NONE', *, *, #201, .F. ) ; +#305 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#306 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#307 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -11.06250000000000178 ) ) ; +#308 = SURFACE_SIDE_STYLE ('',( #67 ) ) ; +#309 = ORIENTED_EDGE ( 'NONE', *, *, #112, .T. ) ; +#310 = VECTOR ( 'NONE', #452, 1000.000000000000000 ) ; +#311 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#312 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, -3.174999999999999822, -16.93750000000000000 ) ) ; +#313 = LINE ( 'NONE', #98, #499 ) ; +#314 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #57 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #380, #720, #82 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#315 = ORIENTED_EDGE ( 'NONE', *, *, #33, .T. ) ; +#316 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #271, 'distance_accuracy_value', 'NONE'); +#317 = EDGE_LOOP ( 'NONE', ( #161, #526, #516, #396 ) ) ; +#318 = LINE ( 'NONE', #41, #310 ) ; +#319 = AXIS2_PLACEMENT_3D ( 'NONE', #208, #213, #440 ) ; +#320 = FACE_BOUND ( 'NONE', #17, .T. ) ; +#321 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#322 = FACE_OUTER_BOUND ( 'NONE', #258, .T. ) ; +#323 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #661 ) ) ; +#324 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#325 = AXIS2_PLACEMENT_3D ( 'NONE', #307, #599, #305 ) ; +#326 = ORIENTED_EDGE ( 'NONE', *, *, #46, .T. ) ; +#327 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#328 = EDGE_CURVE ( 'NONE', #301, #393, #13, .T. ) ; +#329 = PLANE ( 'NONE', #319 ) ; +#330 = ORIENTED_EDGE ( 'NONE', *, *, #636, .T. ) ; +#331 = VECTOR ( 'NONE', #228, 1000.000000000000000 ) ; +#332 = ORIENTED_EDGE ( 'NONE', *, *, #481, .T. ) ; +#333 = CARTESIAN_POINT ( 'NONE', ( 2.897000000000000242, 1.990051048614447637E-16, -15.62500000000000355 ) ) ; +#334 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#335 = EDGE_CURVE ( 'NONE', #685, #301, #710, .T. ) ; +#336 = AXIS2_PLACEMENT_3D ( 'NONE', #729, #622, #138 ) ; +#337 = EDGE_LOOP ( 'NONE', ( #154, #434, #426, #90 ) ) ; +#338 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#339 = ADVANCED_FACE ( 'NONE', ( #388 ), #329, .F. ) ; +#340 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 1.990051048614449116E-16, -15.62500000000000355 ) ) ; +#341 = EDGE_CURVE ( 'NONE', #743, #536, #162, .T. ) ; +#342 = ORIENTED_EDGE ( 'NONE', *, *, #259, .F. ) ; +#343 = ADVANCED_FACE ( 'NONE', ( #686 ), #385, .F. ) ; +#344 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#345 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#346 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #667, 'design' ) ; +#347 = ADVANCED_FACE ( 'NONE', ( #678, #270 ), #29, .F. ) ; +#348 = EDGE_LOOP ( 'NONE', ( #387, #140, #30, #38 ) ) ; +#349 = ORIENTED_EDGE ( 'NONE', *, *, #193, .F. ) ; +#350 = VECTOR ( 'NONE', #694, 1000.000000000000000 ) ; +#351 = ORIENTED_EDGE ( 'NONE', *, *, #263, .T. ) ; +#352 = ORIENTED_EDGE ( 'NONE', *, *, #626, .T. ) ; +#353 = CIRCLE ( 'NONE', #336, 1.624999999999999778 ) ; +#354 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#355 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #381, 'distance_accuracy_value', 'NONE'); +#356 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#357 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#358 = VECTOR ( 'NONE', #427, 1000.000000000000000 ) ; +#359 = VERTEX_POINT ( 'NONE', #23 ) ; +#360 = VECTOR ( 'NONE', #127, 1000.000000000000000 ) ; +#361 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #691 ) ) ; +#362 = VERTEX_POINT ( 'NONE', #514 ) ; +#363 = FACE_OUTER_BOUND ( 'NONE', #693, .T. ) ; +#364 = ORIENTED_EDGE ( 'NONE', *, *, #654, .T. ) ; +#365 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#366 = FILL_AREA_STYLE_COLOUR ( '', #128 ) ; +#367 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#368 = ORIENTED_EDGE ( 'NONE', *, *, #46, .F. ) ; +#369 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#370 = CIRCLE ( 'NONE', #227, 1.624999999999999778 ) ; +#371 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#372 = VERTEX_POINT ( 'NONE', #333 ) ; +#373 = ORIENTED_EDGE ( 'NONE', *, *, #249, .F. ) ; +#374 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#375 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 0.0000000000000000000, -12.37500000000000178 ) ) ; +#376 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -6.650000000000000355 ) ) ; +#377 = ORIENTED_EDGE ( 'NONE', *, *, #114, .T. ) ; +#378 = LINE ( 'NONE', #191, #102 ) ; +#379 = ORIENTED_EDGE ( 'NONE', *, *, #485, .T. ) ; +#380 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#381 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#382 = VECTOR ( 'NONE', #257, 1000.000000000000000 ) ; +#383 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#384 = EDGE_LOOP ( 'NONE', ( #21, #304, #368, #240 ) ) ; +#385 = PLANE ( 'NONE', #188 ) ; +#386 = ORIENTED_EDGE ( 'NONE', *, *, #243, .F. ) ; +#387 = ORIENTED_EDGE ( 'NONE', *, *, #285, .F. ) ; +#388 = FACE_OUTER_BOUND ( 'NONE', #738, .T. ) ; +#389 = CARTESIAN_POINT ( 'NONE', ( 6.650000000000000355, 1.990051048614447637E-16, -15.62500000000000355 ) ) ; +#390 = EDGE_CURVE ( 'NONE', #677, #22, #675, .T. ) ; +#391 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#392 = VECTOR ( 'NONE', #545, 1000.000000000000000 ) ; +#393 = VERTEX_POINT ( 'NONE', #89 ) ; +#394 = AXIS2_PLACEMENT_3D ( 'NONE', #398, #99, #524 ) ; +#395 = ORIENTED_EDGE ( 'NONE', *, *, #283, .F. ) ; +#396 = ORIENTED_EDGE ( 'NONE', *, *, #88, .F. ) ; +#397 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -3.174999999999999822, -2.897000000000001130 ) ) ; +#398 = CARTESIAN_POINT ( 'NONE', ( 6.650000000000000355, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#399 = VECTOR ( 'NONE', #5, 1000.000000000000000 ) ; +#400 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#401 = VECTOR ( 'NONE', #186, 1000.000000000000114 ) ; +#402 = ADVANCED_FACE ( 'NONE', ( #267, #217, #706 ), #684, .T. ) ; +#403 = VECTOR ( 'NONE', #118, 1000.000000000000000 ) ; +#404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#405 = EDGE_CURVE ( 'NONE', #486, #531, #639, .T. ) ; +#406 = VERTEX_POINT ( 'NONE', #454 ) ; +#407 = VERTEX_POINT ( 'NONE', #726 ) ; +#408 = VECTOR ( 'NONE', #274, 1000.000000000000000 ) ; +#409 = AXIS2_PLACEMENT_3D ( 'NONE', #628, #292, #284 ) ; +#410 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#411 = VECTOR ( 'NONE', #7, 1000.000000000000000 ) ; +#412 = ORIENTED_EDGE ( 'NONE', *, *, #201, .T. ) ; +#413 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -3.174999999999999822, -5.650000000000000355 ) ) ; +#414 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#415 = FACE_OUTER_BOUND ( 'NONE', #490, .T. ) ; +#416 = AXIS2_PLACEMENT_3D ( 'NONE', #557, #327, #507 ) ; +#417 = EDGE_CURVE ( 'NONE', #634, #359, #173, .T. ) ; +#418 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, -3.174999999999999822, -16.93750000000000000 ) ) ; +#419 = ORIENTED_EDGE ( 'NONE', *, *, #249, .T. ) ; +#420 = AXIS2_PLACEMENT_3D ( 'NONE', #170, #176, #747 ) ; +#421 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#422 = FACE_OUTER_BOUND ( 'NONE', #81, .T. ) ; +#423 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, -25.40000000000000213 ) ) ; +#424 = ORIENTED_EDGE ( 'NONE', *, *, #533, .T. ) ; +#425 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -5.650000000000000355 ) ) ; +#426 = ORIENTED_EDGE ( 'NONE', *, *, #746, .F. ) ; +#427 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#428 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.476360405086643816E-16 ) ) ; +#429 = PLANE ( 'NONE', #83 ) ; +#430 = EDGE_LOOP ( 'NONE', ( #226, #342, #660, #113 ) ) ; +#431 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#432 = EDGE_CURVE ( 'NONE', #71, #407, #650, .T. ) ; +#433 = VERTEX_POINT ( 'NONE', #397 ) ; +#434 = ORIENTED_EDGE ( 'NONE', *, *, #328, .T. ) ; +#435 = AXIS2_PLACEMENT_3D ( 'NONE', #247, #70, #431 ) ; +#436 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#437 = LINE ( 'NONE', #480, #230 ) ; +#438 = VECTOR ( 'NONE', #189, 1000.000000000000000 ) ; +#439 = LINE ( 'NONE', #705, #403 ) ; +#440 = DIRECTION ( 'NONE', ( 0.7071067811865474617, 0.0000000000000000000, 0.7071067811865474617 ) ) ; +#441 = ORIENTED_EDGE ( 'NONE', *, *, #459, .F. ) ; +#442 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#443 = ORIENTED_EDGE ( 'NONE', *, *, #746, .T. ) ; +#444 = PLANE ( 'NONE', #244 ) ; +#445 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#446 = CYLINDRICAL_SURFACE ( 'NONE', #24, 1.624999999999999778 ) ; +#447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#448 = VECTOR ( 'NONE', #471, 1000.000000000000000 ) ; +#449 = FACE_OUTER_BOUND ( 'NONE', #133, .T. ) ; +#450 = DIRECTION ( 'NONE', ( 1.476360405086643816E-16, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#451 = ORIENTED_EDGE ( 'NONE', *, *, #238, .T. ) ; +#452 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#453 = ADVANCED_FACE ( 'NONE', ( #320, #61, #225 ), #687, .F. ) ; +#454 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 3.174999999999999822, -16.93750000000000000 ) ) ; +#455 = ORIENTED_EDGE ( 'NONE', *, *, #607, .F. ) ; +#456 = ADVANCED_FACE ( 'NONE', ( #39 ), #205, .F. ) ; +#457 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -3.174999999999999822, 0.0000000000000000000 ) ) ; +#458 = VECTOR ( 'NONE', #365, 1000.000000000000000 ) ; +#459 = EDGE_CURVE ( 'NONE', #433, #56, #724, .T. ) ; +#460 = EDGE_CURVE ( 'NONE', #372, #640, #245, .T. ) ; +#461 = ORIENTED_EDGE ( 'NONE', *, *, #405, .F. ) ; +#462 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#463 = VERTEX_POINT ( 'NONE', #106 ) ; +#464 = ADVANCED_FACE ( 'NONE', ( #97 ), #649, .F. ) ; +#465 = ORIENTED_EDGE ( 'NONE', *, *, #88, .T. ) ; +#466 = LINE ( 'NONE', #367, #382 ) ; +#467 = CIRCLE ( 'NONE', #538, 1.624999999999999778 ) ; +#468 = CARTESIAN_POINT ( 'NONE', ( 2.897000000000000242, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#469 = EDGE_CURVE ( 'NONE', #652, #219, #318, .T. ) ; +#470 = ORIENTED_EDGE ( 'NONE', *, *, #108, .T. ) ; +#471 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #432, .F. ) ; +#473 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#474 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#475 = FACE_OUTER_BOUND ( 'NONE', #544, .T. ) ; +#476 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #528, .F. ) ; +#478 = VERTEX_POINT ( 'NONE', #35 ) ; +#479 = PLANE ( 'NONE', #325 ) ; +#480 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 3.174999999999999822, -11.06250000000000178 ) ) ; +#481 = EDGE_CURVE ( 'NONE', #301, #685, #278, .T. ) ; +#482 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#483 = PLANE ( 'NONE', #93 ) ; +#484 = EDGE_CURVE ( 'NONE', #668, #618, #467, .T. ) ; +#485 = EDGE_CURVE ( 'NONE', #634, #551, #583, .T. ) ; +#486 = VERTEX_POINT ( 'NONE', #232 ) ; +#487 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, 3.174999999999999822, -5.650000000000001243 ) ) ; +#488 = VERTEX_POINT ( 'NONE', #692 ) ; +#489 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#490 = EDGE_LOOP ( 'NONE', ( #196, #251, #472, #272 ) ) ; +#491 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#492 = EDGE_CURVE ( 'NONE', #640, #569, #370, .T. ) ; +#493 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#494 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #728 ) ; +#495 = EDGE_CURVE ( 'NONE', #531, #652, #744, .T. ) ; +#496 = ORIENTED_EDGE ( 'NONE', *, *, #177, .F. ) ; +#497 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -5.650000000000000355 ) ) ; +#498 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#499 = VECTOR ( 'NONE', #571, 1000.000000000000000 ) ; +#500 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 1.476360405086643816E-16 ) ) ; +#501 = ORIENTED_EDGE ( 'NONE', *, *, #508, .T. ) ; +#502 = ORIENTED_EDGE ( 'NONE', *, *, #112, .F. ) ; +#503 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#504 = EDGE_CURVE ( 'NONE', #488, #551, #146, .T. ) ; +#505 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#506 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -3.174999999999999822, -25.40000000000000213 ) ) ; +#507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#508 = EDGE_CURVE ( 'NONE', #620, #743, #567, .T. ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #149, .F. ) ; +#510 = ORIENTED_EDGE ( 'NONE', *, *, #296, .T. ) ; +#511 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#512 = EDGE_LOOP ( 'NONE', ( #96, #136, #656, #510 ) ) ; +#513 = EDGE_LOOP ( 'NONE', ( #326, #419, #709, #582 ) ) ; +#514 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 3.174999999999999822, -11.06250000000000178 ) ) ; +#515 = ADVANCED_FACE ( 'NONE', ( #604, #87 ), #299, .F. ) ; +#516 = ORIENTED_EDGE ( 'NONE', *, *, #156, .T. ) ; +#517 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#518 = LINE ( 'NONE', #638, #241 ) ; +#519 = CIRCLE ( 'NONE', #556, 1.624999999999999778 ) ; +#520 = CARTESIAN_POINT ( 'NONE', ( 12.37500000000000000, 1.990051048614449116E-16, -12.24619407771256085 ) ) ; +#521 = ORIENTED_EDGE ( 'NONE', *, *, #31, .F. ) ; +#522 = AXIS2_PLACEMENT_3D ( 'NONE', #489, #374, #371 ) ; +#523 = ADVANCED_FACE ( 'NONE', ( #542 ), #131, .F. ) ; +#524 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#525 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#526 = ORIENTED_EDGE ( 'NONE', *, *, #335, .F. ) ; +#527 = LINE ( 'NONE', #194, #264 ) ; +#528 = EDGE_CURVE ( 'NONE', #359, #488, #518, .T. ) ; +#529 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -11.06250000000000178 ) ) ; +#530 = ORIENTED_EDGE ( 'NONE', *, *, #243, .T. ) ; +#531 = VERTEX_POINT ( 'NONE', #696 ) ; +#532 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#533 = EDGE_CURVE ( 'NONE', #107, #372, #294, .T. ) ; +#534 = ORIENTED_EDGE ( 'NONE', *, *, #711, .F. ) ; +#535 = AXIS2_PLACEMENT_3D ( 'NONE', #511, #742, #234 ) ; +#536 = VERTEX_POINT ( 'NONE', #183 ) ; +#537 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, -25.40000000000000213 ) ) ; +#538 = AXIS2_PLACEMENT_3D ( 'NONE', #47, #158, #400 ) ; +#539 = SURFACE_STYLE_USAGE ( .BOTH. , #308 ) ; +#540 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -16.93750000000000000 ) ) ; +#541 = CARTESIAN_POINT ( 'NONE', ( 12.37500000000000000, 1.990051048614449609E-16, -2.897000000000000242 ) ) ; +#542 = FACE_OUTER_BOUND ( 'NONE', #430, .T. ) ; +#543 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#544 = EDGE_LOOP ( 'NONE', ( #290, #235, #43, #662 ) ) ; +#545 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#546 = EDGE_LOOP ( 'NONE', ( #185, #521 ) ) ; +#547 = CARTESIAN_POINT ( 'NONE', ( 25.40000000000000213, -3.174999999999999822, 0.0000000000000000000 ) ) ; +#548 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#549 = EDGE_LOOP ( 'NONE', ( #708, #530, #54 ) ) ; +#550 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #279 ), #314 ) ; +#551 = VERTEX_POINT ( 'NONE', #115 ) ; +#552 = VECTOR ( 'NONE', #151, 1000.000000000000000 ) ; +#553 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#554 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -11.06250000000000178 ) ) ; +#555 = FACE_OUTER_BOUND ( 'NONE', #175, .T. ) ; +#556 = AXIS2_PLACEMENT_3D ( 'NONE', #6, #72, #8 ) ; +#557 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 3.174999999999999822, -11.06250000000000178 ) ) ; +#558 = LINE ( 'NONE', #28, #605 ) ; +#559 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#560 = SURFACE_STYLE_FILL_AREA ( #665 ) ; +#561 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, -3.174999999999999822, -11.06250000000000178 ) ) ; +#562 = EDGE_LOOP ( 'NONE', ( #614, #332 ) ) ; +#563 = ORIENTED_EDGE ( 'NONE', *, *, #193, .T. ) ; +#564 = EDGE_CURVE ( 'NONE', #601, #620, #111, .T. ) ; +#565 = FACE_OUTER_BOUND ( 'NONE', #129, .T. ) ; +#566 = ORIENTED_EDGE ( 'NONE', *, *, #417, .T. ) ; +#567 = LINE ( 'NONE', #63, #448 ) ; +#568 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 1.990051048614449116E-16, -15.62500000000000355 ) ) ; +#569 = VERTEX_POINT ( 'NONE', #707 ) ; +#570 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#571 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#572 = FACE_OUTER_BOUND ( 'NONE', #562, .T. ) ; +#573 = LINE ( 'NONE', #653, #399 ) ; +#574 = ADVANCED_FACE ( 'NONE', ( #690 ), #446, .F. ) ; +#575 = LINE ( 'NONE', #298, #52 ) ; +#576 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#577 = VERTEX_POINT ( 'NONE', #132 ) ; +#578 = ORIENTED_EDGE ( 'NONE', *, *, #31, .T. ) ; +#579 = ADVANCED_FACE ( 'NONE', ( #224, #565 ), #483, .F. ) ; +#580 = SHAPE_DEFINITION_REPRESENTATION ( #494, #14 ) ; +#581 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#582 = ORIENTED_EDGE ( 'NONE', *, *, #168, .T. ) ; +#583 = LINE ( 'NONE', #520, #171 ) ; +#584 = EDGE_CURVE ( 'NONE', #107, #569, #633, .T. ) ; +#585 = ORIENTED_EDGE ( 'NONE', *, *, #504, .F. ) ; +#586 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -1.476360405086643816E-16 ) ) ; +#587 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -5.650000000000000355 ) ) ; +#588 = EDGE_CURVE ( 'NONE', #719, #219, #286, .T. ) ; +#589 = CARTESIAN_POINT ( 'NONE', ( 5.650000000000000355, 3.174999999999999822, -16.93750000000000000 ) ) ; +#590 = LINE ( 'NONE', #663, #358 ) ; +#591 = AXIS2_PLACEMENT_3D ( 'NONE', #600, #254, #476 ) ; +#592 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#593 = CARTESIAN_POINT ( 'NONE', ( 12.37500000000000000, 1.990051048614449609E-16, -6.650000000000001243 ) ) ; +#594 = CIRCLE ( 'NONE', #275, 1.624999999999999778 ) ; +#595 = CIRCLE ( 'NONE', #60, 1.625000000000001332 ) ; +#596 = ORIENTED_EDGE ( 'NONE', *, *, #19, .T. ) ; +#597 = ORIENTED_EDGE ( 'NONE', *, *, #285, .T. ) ; +#598 = CARTESIAN_POINT ( 'NONE', ( 15.62500000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#599 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#600 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -5.650000000000000355 ) ) ; +#601 = VERTEX_POINT ( 'NONE', #312 ) ; +#602 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#603 = LINE ( 'NONE', #537, #401 ) ; +#604 = FACE_BOUND ( 'NONE', #222, .T. ) ; +#605 = VECTOR ( 'NONE', #345, 1000.000000000000000 ) ; +#606 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 1.990051048614447637E-16, -15.62500000000000355 ) ) ; +#607 = EDGE_CURVE ( 'NONE', #150, #723, #37, .T. ) ; +#608 = ORIENTED_EDGE ( 'NONE', *, *, #588, .F. ) ; +#609 = ORIENTED_EDGE ( 'NONE', *, *, #626, .F. ) ; +#610 = SURFACE_SIDE_STYLE ('',( #560 ) ) ; +#611 = FACE_OUTER_BOUND ( 'NONE', #512, .T. ) ; +#612 = AXIS2_PLACEMENT_3D ( 'NONE', #587, #53, #414 ) ; +#613 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #667 ) ; +#614 = ORIENTED_EDGE ( 'NONE', *, *, #335, .T. ) ; +#615 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#616 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#617 = AXIS2_PLACEMENT_3D ( 'NONE', #532, #237, #357 ) ; +#618 = VERTEX_POINT ( 'NONE', #541 ) ; +#619 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -3.174999999999999822, -2.897000000000001130 ) ) ; +#620 = VERTEX_POINT ( 'NONE', #68 ) ; +#621 = ORIENTED_EDGE ( 'NONE', *, *, #238, .F. ) ; +#622 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#623 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#624 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -3.174999999999999822, -5.650000000000000355 ) ) ; +#625 = ORIENTED_EDGE ( 'NONE', *, *, #711, .T. ) ; +#626 = EDGE_CURVE ( 'NONE', #55, #536, #573, .T. ) ; +#627 = EDGE_LOOP ( 'NONE', ( #501, #725, #260, #641 ) ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#629 = ORIENTED_EDGE ( 'NONE', *, *, #76, .T. ) ; +#630 = AXIS2_PLACEMENT_3D ( 'NONE', #69, #311, #482 ) ; +#631 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#632 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#633 = LINE ( 'NONE', #375, #392 ) ; +#634 = VERTEX_POINT ( 'NONE', #593 ) ; +#635 = LINE ( 'NONE', #543, #79 ) ; +#636 = EDGE_CURVE ( 'NONE', #536, #601, #590, .T. ) ; +#637 = AXIS2_PLACEMENT_3D ( 'NONE', #701, #581, #473 ) ; +#638 = CARTESIAN_POINT ( 'NONE', ( 15.62500000000000000, 0.0000000000000000000, -12.24619407771256085 ) ) ; +#639 = LINE ( 'NONE', #681, #331 ) ; +#640 = VERTEX_POINT ( 'NONE', #606 ) ; +#641 = ORIENTED_EDGE ( 'NONE', *, *, #149, .T. ) ; +#642 = VECTOR ( 'NONE', #155, 1000.000000000000000 ) ; +#643 = AXIS2_PLACEMENT_3D ( 'NONE', #229, #287, #101 ) ; +#644 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -12.24619407771256085 ) ) ; +#645 = CIRCLE ( 'NONE', #591, 1.624999999999999778 ) ; +#646 = EDGE_LOOP ( 'NONE', ( #192, #364 ) ) ; +#647 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -3.174999999999999822, -2.897000000000001130 ) ) ; +#648 = VECTOR ( 'NONE', #95, 1000.000000000000000 ) ; +#649 = CYLINDRICAL_SURFACE ( 'NONE', #643, 1.624999999999999778 ) ; +#650 = LINE ( 'NONE', #462, #266 ) ; +#651 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#652 = VERTEX_POINT ( 'NONE', #126 ) ; +#653 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -11.06250000000000178 ) ) ; +#654 = EDGE_CURVE ( 'NONE', #551, #488, #645, .T. ) ; +#655 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -3.174999999999999822, 0.0000000000000000000 ) ) ; +#656 = ORIENTED_EDGE ( 'NONE', *, *, #584, .T. ) ; +#657 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#658 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -3.174999999999999822, -5.650000000000001243 ) ) ; +#659 = AXIS2_PLACEMENT_3D ( 'NONE', #3, #207, #498 ) ; +#660 = ORIENTED_EDGE ( 'NONE', *, *, #528, .T. ) ; +#661 = PRODUCT ( '2Xgusset2_181126', '2Xgusset2_181126', '', ( #135 ) ) ; +#662 = ORIENTED_EDGE ( 'NONE', *, *, #283, .T. ) ; +#663 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, -3.174999999999999822, -11.06250000000000178 ) ) ; +#664 = EDGE_LOOP ( 'NONE', ( #315, #59, #671, #563 ) ) ; +#665 = FILL_AREA_STYLE ('',( #210 ) ) ; +#666 = FACE_OUTER_BOUND ( 'NONE', #211, .T. ) ; +#667 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#668 = VERTEX_POINT ( 'NONE', #123 ) ; +#669 = AXIS2_PLACEMENT_3D ( 'NONE', #45, #152, #736 ) ; +#670 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#671 = ORIENTED_EDGE ( 'NONE', *, *, #233, .T. ) ; +#672 = LINE ( 'NONE', #65, #360 ) ; +#673 = SURFACE_STYLE_USAGE ( .BOTH. , #610 ) ; +#674 = ORIENTED_EDGE ( 'NONE', *, *, #76, .F. ) ; +#675 = CIRCLE ( 'NONE', #535, 1.624999999999999778 ) ; +#676 = ORIENTED_EDGE ( 'NONE', *, *, #469, .T. ) ; +#677 = VERTEX_POINT ( 'NONE', #598 ) ; +#678 = FACE_BOUND ( 'NONE', #702, .T. ) ; +#679 = CARTESIAN_POINT ( 'NONE', ( 2.896999999999999797, 3.174999999999999822, -16.93750000000000000 ) ) ; +#680 = AXIS2_PLACEMENT_3D ( 'NONE', #468, #109, #174 ) ; +#681 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#682 = ORIENTED_EDGE ( 'NONE', *, *, #722, .F. ) ; +#683 = AXIS2_PLACEMENT_3D ( 'NONE', #497, #716, #500 ) ; +#684 = PLANE ( 'NONE', #116 ) ; +#685 = VERTEX_POINT ( 'NONE', #195 ) ; +#686 = FACE_OUTER_BOUND ( 'NONE', #384, .T. ) ; +#687 = PLANE ( 'NONE', #153 ) ; +#688 = ADVANCED_FACE ( 'NONE', ( #572 ), #9, .F. ) ; +#689 = LINE ( 'NONE', #425, #212 ) ; +#690 = FACE_OUTER_BOUND ( 'NONE', #317, .T. ) ; +#691 = STYLED_ITEM ( 'NONE', ( #143 ), #14 ) ; +#692 = CARTESIAN_POINT ( 'NONE', ( 15.62500000000000000, 0.0000000000000000000, -5.650000000000000355 ) ) ; +#693 = EDGE_LOOP ( 'NONE', ( #698, #566 ) ) ; +#694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#695 = ORIENTED_EDGE ( 'NONE', *, *, #341, .F. ) ; +#696 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#697 = DIRECTION ( 'NONE', ( -1.476360405086643816E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#698 = ORIENTED_EDGE ( 'NONE', *, *, #259, .T. ) ; +#699 = AXIS2_PLACEMENT_3D ( 'NONE', #383, #215, #474 ) ; +#700 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, 0.0000000000000000000, -12.24619407771256085 ) ) ; +#701 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#702 = EDGE_LOOP ( 'NONE', ( #443, #465 ) ) ; +#703 = CARTESIAN_POINT ( 'NONE', ( 12.24619407771256085, 0.0000000000000000000, -12.37500000000000178 ) ) ; +#704 = VECTOR ( 'NONE', #302, 1000.000000000000000 ) ; +#705 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, 3.174999999999999822, -2.897000000000001130 ) ) ; +#706 = FACE_OUTER_BOUND ( 'NONE', #549, .T. ) ; +#707 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -12.37500000000000178 ) ) ; +#708 = ORIENTED_EDGE ( 'NONE', *, *, #495, .T. ) ; +#709 = ORIENTED_EDGE ( 'NONE', *, *, #432, .T. ) ; +#710 = CIRCLE ( 'NONE', #103, 1.625000000000001332 ) ; +#711 = EDGE_CURVE ( 'NONE', #618, #22, #209, .T. ) ; +#712 = AXIS2_PLACEMENT_3D ( 'NONE', #644, #297, #749 ) ; +#713 = PLANE ( 'NONE', #522 ) ; +#714 = EDGE_CURVE ( 'NONE', #362, #743, #437, .T. ) ; +#715 = ORIENTED_EDGE ( 'NONE', *, *, #177, .T. ) ; +#716 = DIRECTION ( 'NONE', ( -1.476360405086643816E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#717 = LINE ( 'NONE', #423, #18 ) ; +#718 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #316 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #271, #442, #503 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#719 = VERTEX_POINT ( 'NONE', #655 ) ; +#720 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#721 = LINE ( 'NONE', #703, #246 ) ; +#722 = EDGE_CURVE ( 'NONE', #723, #276, #85, .T. ) ; +#723 = VERTEX_POINT ( 'NONE', #658 ) ; +#724 = LINE ( 'NONE', #163, #350 ) ; +#725 = ORIENTED_EDGE ( 'NONE', *, *, #714, .F. ) ; +#726 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, 3.174999999999999822, -5.650000000000000355 ) ) ; +#727 = PRESENTATION_STYLE_ASSIGNMENT (( #539 ) ) ; +#728 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #34, #346 ) ; +#729 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -14.00000000000000178 ) ) ; +#730 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#731 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude3', #734 ) ; +#732 = ADVANCED_FACE ( 'NONE', ( #25, #555 ), #20, .F. ) ; +#733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#734 = CLOSED_SHELL ( 'NONE', ( #464, #456, #288, #231, #49, #339, #515, #402, #453, #347, #281, #157, #100, #343, #732, #164, #579, #104, #523, #91, #44, #574, #688 ) ) ; +#735 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#736 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#737 = EDGE_CURVE ( 'NONE', #71, #433, #268, .T. ) ; +#738 = EDGE_LOOP ( 'NONE', ( #451, #496, #386, #676 ) ) ; +#739 = VECTOR ( 'NONE', #525, 1000.000000000000000 ) ; +#740 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 3.174999999999999822, 0.0000000000000000000 ) ) ; +#741 = VERTEX_POINT ( 'NONE', #506 ) ; +#742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#743 = VERTEX_POINT ( 'NONE', #202 ) ; +#744 = LINE ( 'NONE', #517, #51 ) ; +#745 = CYLINDRICAL_SURFACE ( 'NONE', #617, 1.624999999999999778 ) ; +#746 = EDGE_CURVE ( 'NONE', #577, #393, #595, .T. ) ; +#747 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#748 = EDGE_LOOP ( 'NONE', ( #330, #674, #206, #352 ) ) ; +#749 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Models/litscher_carbonfab_181126/Printed/2Xgusset2_181126.STL b/Models/litscher_carbonfab_181126/Printed/2Xgusset2_181126.STL new file mode 100644 index 0000000..bc52801 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/2Xgusset2_181126.STL Binary files differ diff --git a/Models/litscher_carbonfab_181126/Printed/frame_base_181126.STEP b/Models/litscher_carbonfab_181126/Printed/frame_base_181126.STEP new file mode 100644 index 0000000..be7e829 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/frame_base_181126.STEP @@ -0,0 +1,1601 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('frame_base_181126.STEP', + '2018-11-27T00:41:40', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2018', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2 = ORIENTED_EDGE ( 'NONE', *, *, #1317, .F. ) ; +#3 = EDGE_CURVE ( 'NONE', #1523, #664, #708, .T. ) ; +#4 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#5 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#7 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#8 = CYLINDRICAL_SURFACE ( 'NONE', #851, 1.624999999999994449 ) ; +#9 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#10 = PLANE ( 'NONE', #425 ) ; +#11 = FACE_OUTER_BOUND ( 'NONE', #245, .T. ) ; +#12 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#13 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14 = EDGE_CURVE ( 'NONE', #547, #842, #1042, .T. ) ; +#15 = ORIENTED_EDGE ( 'NONE', *, *, #3, .F. ) ; +#16 = ORIENTED_EDGE ( 'NONE', *, *, #871, .T. ) ; +#17 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#18 = ORIENTED_EDGE ( 'NONE', *, *, #1262, .T. ) ; +#19 = EDGE_LOOP ( 'NONE', ( #35, #423, #1216, #113 ) ) ; +#20 = CARTESIAN_POINT ( 'NONE', ( -36.35000000000000142, -63.34999999999998721, -63.84999999999998721 ) ) ; +#21 = EDGE_CURVE ( 'NONE', #304, #1131, #1385, .T. ) ; +#22 = AXIS2_PLACEMENT_3D ( 'NONE', #733, #612, #861 ) ; +#23 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -59.49999999999998579 ) ) ; +#24 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -55.99999999999997868 ) ) ; +#25 = VECTOR ( 'NONE', #1491, 1000.000000000000000 ) ; +#26 = CIRCLE ( 'NONE', #736, 1.624999999999994449 ) ; +#27 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -63.34999999999998721, 12.49999999999998579 ) ) ; +#28 = VECTOR ( 'NONE', #596, 1000.000000000000000 ) ; +#29 = AXIS2_PLACEMENT_3D ( 'NONE', #23, #1332, #827 ) ; +#30 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -63.34999999999998721, -79.49999999999998579 ) ) ; +#31 = LINE ( 'NONE', #1270, #1396 ) ; +#32 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#33 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#34 = EDGE_CURVE ( 'NONE', #1234, #218, #723, .T. ) ; +#35 = ORIENTED_EDGE ( 'NONE', *, *, #274, .T. ) ; +#36 = ORIENTED_EDGE ( 'NONE', *, *, #34, .F. ) ; +#37 = ORIENTED_EDGE ( 'NONE', *, *, #494, .T. ) ; +#38 = ORIENTED_EDGE ( 'NONE', *, *, #1240, .T. ) ; +#39 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#40 = ORIENTED_EDGE ( 'NONE', *, *, #217, .F. ) ; +#41 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -59.49999999999998579 ) ) ; +#42 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#43 = FACE_OUTER_BOUND ( 'NONE', #806, .T. ) ; +#44 = LINE ( 'NONE', #481, #28 ) ; +#45 = AXIS2_PLACEMENT_3D ( 'NONE', #363, #1354, #454 ) ; +#46 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#47 = AXIS2_PLACEMENT_3D ( 'NONE', #953, #1325, #1456 ) ; +#48 = VERTEX_POINT ( 'NONE', #488 ) ; +#49 = FACE_BOUND ( 'NONE', #898, .T. ) ; +#50 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .T. ) ; +#51 = VERTEX_POINT ( 'NONE', #1220 ) ; +#52 = ORIENTED_EDGE ( 'NONE', *, *, #899, .F. ) ; +#53 = EDGE_LOOP ( 'NONE', ( #1440, #1583 ) ) ; +#54 = AXIS2_PLACEMENT_3D ( 'NONE', #1295, #1043, #677 ) ; +#55 = CIRCLE ( 'NONE', #54, 1.624999999999994449 ) ; +#56 = VECTOR ( 'NONE', #1181, 1000.000000000000000 ) ; +#57 = EDGE_CURVE ( 'NONE', #391, #772, #1433, .T. ) ; +#58 = CYLINDRICAL_SURFACE ( 'NONE', #1135, 1.624999999999994449 ) ; +#59 = LINE ( 'NONE', #977, #836 ) ; +#60 = AXIS2_PLACEMENT_3D ( 'NONE', #706, #1571, #1460 ) ; +#61 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -56.99999999999998579, -43.84999999999999432 ) ) ; +#62 = ORIENTED_EDGE ( 'NONE', *, *, #1488, .F. ) ; +#63 = EDGE_LOOP ( 'NONE', ( #40, #531, #88, #275 ) ) ; +#64 = EDGE_CURVE ( 'NONE', #1490, #1521, #44, .T. ) ; +#65 = ORIENTED_EDGE ( 'NONE', *, *, #1062, .F. ) ; +#66 = ORIENTED_EDGE ( 'NONE', *, *, #1535, .F. ) ; +#67 = ORIENTED_EDGE ( 'NONE', *, *, #280, .F. ) ; +#68 = ORIENTED_EDGE ( 'NONE', *, *, #86, .T. ) ; +#69 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#70 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#71 = ADVANCED_FACE ( 'NONE', ( #1285 ), #74, .T. ) ; +#72 = CYLINDRICAL_SURFACE ( 'NONE', #1144, 3.500000000000003109 ) ; +#73 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#74 = CYLINDRICAL_SURFACE ( 'NONE', #22, 10.00000000000000178 ) ; +#75 = EDGE_CURVE ( 'NONE', #1055, #643, #969, .T. ) ; +#76 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -61.12499999999999289 ) ) ; +#77 = AXIS2_PLACEMENT_3D ( 'NONE', #342, #1265, #1387 ) ; +#78 = ADVANCED_FACE ( 'NONE', ( #392 ), #1268, .F. ) ; +#79 = ORIENTED_EDGE ( 'NONE', *, *, #1496, .F. ) ; +#80 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#81 = ORIENTED_EDGE ( 'NONE', *, *, #150, .T. ) ; +#82 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -59.50000000000000000 ) ) ; +#83 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#84 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -82.99999999999998579 ) ) ; +#85 = ORIENTED_EDGE ( 'NONE', *, *, #764, .T. ) ; +#86 = EDGE_CURVE ( 'NONE', #273, #475, #676, .T. ) ; +#87 = ORIENTED_EDGE ( 'NONE', *, *, #1326, .F. ) ; +#88 = ORIENTED_EDGE ( 'NONE', *, *, #230, .F. ) ; +#89 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#90 = FACE_OUTER_BOUND ( 'NONE', #451, .T. ) ; +#91 = ADVANCED_FACE ( 'NONE', ( #640 ), #58, .F. ) ; +#92 = VECTOR ( 'NONE', #865, 1000.000000000000000 ) ; +#93 = EDGE_CURVE ( 'NONE', #1351, #713, #206, .T. ) ; +#94 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1502 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1561, #1047, #419 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#95 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -82.99999999999998579 ) ) ; +#96 = LINE ( 'NONE', #952, #1286 ) ; +#97 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -59.50000000000000000 ) ) ; +#98 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#99 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#100 = ORIENTED_EDGE ( 'NONE', *, *, #1027, .T. ) ; +#101 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#102 = AXIS2_PLACEMENT_3D ( 'NONE', #82, #1067, #740 ) ; +#103 = ADVANCED_FACE ( 'NONE', ( #1343 ), #1009, .F. ) ; +#104 = CYLINDRICAL_SURFACE ( 'NONE', #487, 1.625000000000001332 ) ; +#105 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #833 ) ; +#106 = EDGE_LOOP ( 'NONE', ( #585, #395 ) ) ; +#107 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#108 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#109 = EDGE_LOOP ( 'NONE', ( #1288, #1309 ) ) ; +#110 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -79.49999999999998579 ) ) ; +#111 = VERTEX_POINT ( 'NONE', #572 ) ; +#112 = EDGE_CURVE ( 'NONE', #1273, #362, #357, .T. ) ; +#113 = ORIENTED_EDGE ( 'NONE', *, *, #508, .T. ) ; +#114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#115 = ADVANCED_FACE ( 'NONE', ( #931 ), #1108, .F. ) ; +#116 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#117 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -63.34999999999998721, -77.87519231907276662 ) ) ; +#118 = EDGE_CURVE ( 'NONE', #526, #1490, #317, .T. ) ; +#119 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -1.092739197465703907E-15 ) ) ; +#120 = VECTOR ( 'NONE', #1584, 1000.000000000000000 ) ; +#121 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#122 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#123 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #710 ), #1032 ) ; +#124 = VERTEX_POINT ( 'NONE', #1058 ) ; +#125 = VERTEX_POINT ( 'NONE', #210 ) ; +#126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#127 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.092739197465703907E-15, -1.000000000000000000 ) ) ; +#128 = ORIENTED_EDGE ( 'NONE', *, *, #1062, .T. ) ; +#129 = ORIENTED_EDGE ( 'NONE', *, *, #880, .T. ) ; +#130 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#131 = STYLED_ITEM ( 'NONE', ( #556 ), #144 ) ; +#132 = ORIENTED_EDGE ( 'NONE', *, *, #296, .F. ) ; +#133 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#134 = AXIS2_PLACEMENT_3D ( 'NONE', #641, #396, #1137 ) ; +#135 = VECTOR ( 'NONE', #1211, 1000.000000000000000 ) ; +#136 = VECTOR ( 'NONE', #33, 1000.000000000000000 ) ; +#137 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -63.34999999999998721, -81.12480768092720496 ) ) ; +#138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#139 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#140 = EDGE_CURVE ( 'NONE', #1112, #1442, #287, .T. ) ; +#141 = VERTEX_POINT ( 'NONE', #729 ) ; +#142 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -52.29999999999999716 ) ) ; +#143 = AXIS2_PLACEMENT_3D ( 'NONE', #1331, #214, #1455 ) ; +#144 = MANIFOLD_SOLID_BREP ( 'gusset cbore Cut-Extrude6', #1184 ) ; +#145 = VERTEX_POINT ( 'NONE', #1381 ) ; +#146 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -54.17500000000000426 ) ) ; +#147 = ORIENTED_EDGE ( 'NONE', *, *, #157, .F. ) ; +#148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#149 = ORIENTED_EDGE ( 'NONE', *, *, #1427, .T. ) ; +#150 = EDGE_CURVE ( 'NONE', #145, #125, #1365, .T. ) ; +#151 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#152 = CIRCLE ( 'NONE', #1519, 3.500000000000003109 ) ; +#153 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -63.34999999999998721, 12.49999999999998579 ) ) ; +#154 = SURFACE_STYLE_FILL_AREA ( #465 ) ; +#155 = LINE ( 'NONE', #1054, #56 ) ; +#156 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#157 = EDGE_CURVE ( 'NONE', #564, #124, #1229, .T. ) ; +#158 = ORIENTED_EDGE ( 'NONE', *, *, #1552, .F. ) ; +#159 = EDGE_LOOP ( 'NONE', ( #1359, #1463, #1312, #38 ) ) ; +#160 = ORIENTED_EDGE ( 'NONE', *, *, #217, .T. ) ; +#161 = AXIS2_PLACEMENT_3D ( 'NONE', #897, #1251, #42 ) ; +#162 = ORIENTED_EDGE ( 'NONE', *, *, #365, .T. ) ; +#163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#164 = ORIENTED_EDGE ( 'NONE', *, *, #1496, .T. ) ; +#165 = EDGE_CURVE ( 'NONE', #412, #1377, #623, .T. ) ; +#166 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#167 = CIRCLE ( 'NONE', #519, 1.625000000000001332 ) ; +#168 = AXIS2_PLACEMENT_3D ( 'NONE', #30, #1091, #602 ) ; +#169 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#170 = FACE_OUTER_BOUND ( 'NONE', #19, .T. ) ; +#171 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -56.99999999999997868, -43.84999999999999432 ) ) ; +#172 = AXIS2_PLACEMENT_3D ( 'NONE', #679, #925, #1182 ) ; +#173 = VERTEX_POINT ( 'NONE', #330 ) ; +#174 = ADVANCED_FACE ( 'NONE', ( #1157 ), #506, .F. ) ; +#175 = VERTEX_POINT ( 'NONE', #1113 ) ; +#176 = ORIENTED_EDGE ( 'NONE', *, *, #584, .T. ) ; +#177 = ORIENTED_EDGE ( 'NONE', *, *, #1303, .T. ) ; +#178 = ORIENTED_EDGE ( 'NONE', *, *, #1005, .F. ) ; +#179 = AXIS2_PLACEMENT_3D ( 'NONE', #574, #560, #1450 ) ; +#180 = ORIENTED_EDGE ( 'NONE', *, *, #783, .T. ) ; +#181 = CIRCLE ( 'NONE', #1503, 1.625000000000001332 ) ; +#182 = LINE ( 'NONE', #371, #1124 ) ; +#183 = CIRCLE ( 'NONE', #1271, 1.625000000000001332 ) ; +#184 = EDGE_CURVE ( 'NONE', #1191, #633, #299, .T. ) ; +#185 = LINE ( 'NONE', #463, #947 ) ; +#186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#187 = VECTOR ( 'NONE', #994, 1000.000000000000000 ) ; +#188 = FACE_BOUND ( 'NONE', #904, .T. ) ; +#189 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#190 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#191 = EDGE_CURVE ( 'NONE', #304, #175, #834, .T. ) ; +#192 = ORIENTED_EDGE ( 'NONE', *, *, #646, .F. ) ; +#193 = EDGE_CURVE ( 'NONE', #1131, #1072, #539, .T. ) ; +#194 = VECTOR ( 'NONE', #512, 1000.000000000000000 ) ; +#195 = ORIENTED_EDGE ( 'NONE', *, *, #1200, .T. ) ; +#196 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#197 = VERTEX_POINT ( 'NONE', #983 ) ; +#198 = ADVANCED_FACE ( 'NONE', ( #1457 ), #913, .F. ) ; +#199 = ORIENTED_EDGE ( 'NONE', *, *, #675, .F. ) ; +#200 = VERTEX_POINT ( 'NONE', #440 ) ; +#201 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#202 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#203 = EDGE_CURVE ( 'NONE', #713, #661, #229, .T. ) ; +#204 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#205 = CIRCLE ( 'NONE', #954, 10.00000000000000178 ) ; +#206 = CIRCLE ( 'NONE', #1475, 3.500000000000003109 ) ; +#207 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#208 = VECTOR ( 'NONE', #318, 1000.000000000000000 ) ; +#209 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#210 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -77.87499999999998579 ) ) ; +#211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#212 = AXIS2_PLACEMENT_3D ( 'NONE', #156, #46, #763 ) ; +#213 = ORIENTED_EDGE ( 'NONE', *, *, #64, .F. ) ; +#214 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#215 = ORIENTED_EDGE ( 'NONE', *, *, #150, .F. ) ; +#216 = VERTEX_POINT ( 'NONE', #1487 ) ; +#217 = EDGE_CURVE ( 'NONE', #1167, #1424, #1570, .T. ) ; +#218 = VERTEX_POINT ( 'NONE', #265 ) ; +#219 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#220 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#221 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#223 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#224 = AXIS2_PLACEMENT_3D ( 'NONE', #80, #201, #320 ) ; +#225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#226 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#227 = CIRCLE ( 'NONE', #1282, 10.00000000000000178 ) ; +#228 = CIRCLE ( 'NONE', #1512, 3.500000000000003109 ) ; +#229 = LINE ( 'NONE', #146, #1500 ) ; +#230 = EDGE_CURVE ( 'NONE', #818, #453, #577, .T. ) ; +#231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#232 = FACE_OUTER_BOUND ( 'NONE', #1437, .T. ) ; +#233 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#234 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#235 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -81.12499999999998579 ) ) ; +#236 = EDGE_LOOP ( 'NONE', ( #982, #1403, #324, #346 ) ) ; +#237 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#238 = PLANE ( 'NONE', #1194 ) ; +#239 = ORIENTED_EDGE ( 'NONE', *, *, #1461, .F. ) ; +#240 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -57.87500000000000000 ) ) ; +#241 = ORIENTED_EDGE ( 'NONE', *, *, #381, .T. ) ; +#242 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.088269684226890842E-17, 1.000000000000000000 ) ) ; +#243 = ORIENTED_EDGE ( 'NONE', *, *, #444, .F. ) ; +#244 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -63.34999999999998721, -82.99999999999998579 ) ) ; +#245 = EDGE_LOOP ( 'NONE', ( #16, #327, #1096, #533 ) ) ; +#246 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#247 = AXIS2_PLACEMENT_3D ( 'NONE', #639, #767, #163 ) ; +#248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#249 = LINE ( 'NONE', #122, #434 ) ; +#250 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#251 = FACE_OUTER_BOUND ( 'NONE', #1416, .T. ) ; +#252 = CIRCLE ( 'NONE', #179, 1.625000000000001332 ) ; +#253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#254 = EDGE_CURVE ( 'NONE', #1424, #818, #268, .T. ) ; +#255 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#256 = AXIS2_PLACEMENT_3D ( 'NONE', #732, #486, #618 ) ; +#257 = ORIENTED_EDGE ( 'NONE', *, *, #406, .F. ) ; +#258 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -59.49999999999998579 ) ) ; +#259 = ORIENTED_EDGE ( 'NONE', *, *, #1287, .T. ) ; +#260 = EDGE_LOOP ( 'NONE', ( #765, #128 ) ) ; +#261 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -57.87500000000000000 ) ) ; +#262 = ORIENTED_EDGE ( 'NONE', *, *, #1507, .F. ) ; +#263 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #131 ) ) ; +#264 = ORIENTED_EDGE ( 'NONE', *, *, #1414, .T. ) ; +#265 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -63.34999999999998721, -63.84999999999998721 ) ) ; +#266 = LINE ( 'NONE', #1340, #667 ) ; +#267 = AXIS2_PLACEMENT_3D ( 'NONE', #583, #1462, #849 ) ; +#268 = LINE ( 'NONE', #858, #1533 ) ; +#269 = CIRCLE ( 'NONE', #1310, 1.625000000000001332 ) ; +#270 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#271 = EDGE_CURVE ( 'NONE', #1351, #173, #1126, .T. ) ; +#272 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -59.49999999999998579 ) ) ; +#273 = VERTEX_POINT ( 'NONE', #449 ) ; +#274 = EDGE_CURVE ( 'NONE', #1191, #1355, #96, .T. ) ; +#275 = ORIENTED_EDGE ( 'NONE', *, *, #254, .F. ) ; +#276 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#277 = ORIENTED_EDGE ( 'NONE', *, *, #705, .F. ) ; +#278 = EDGE_LOOP ( 'NONE', ( #329, #586 ) ) ; +#279 = ORIENTED_EDGE ( 'NONE', *, *, #523, .T. ) ; +#280 = EDGE_CURVE ( 'NONE', #963, #1471, #656, .T. ) ; +#281 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#282 = FACE_BOUND ( 'NONE', #308, .T. ) ; +#283 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#284 = LINE ( 'NONE', #1448, #1059 ) ; +#285 = LINE ( 'NONE', #1484, #891 ) ; +#286 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#287 = LINE ( 'NONE', #1086, #776 ) ; +#288 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#289 = FACE_OUTER_BOUND ( 'NONE', #393, .T. ) ; +#290 = EDGE_CURVE ( 'NONE', #589, #442, #1064, .T. ) ; +#291 = EDGE_LOOP ( 'NONE', ( #407, #758 ) ) ; +#292 = AXIS2_PLACEMENT_3D ( 'NONE', #1074, #1060, #813 ) ; +#293 = ORIENTED_EDGE ( 'NONE', *, *, #296, .T. ) ; +#294 = ADVANCED_FACE ( 'NONE', ( #335, #188, #302, #1128, #877 ), #576, .F. ) ; +#295 = ORIENTED_EDGE ( 'NONE', *, *, #1451, .T. ) ; +#296 = EDGE_CURVE ( 'NONE', #713, #1351, #1459, .T. ) ; +#297 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#298 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -56.99999999999997868, 12.49999999999998579 ) ) ; +#299 = LINE ( 'NONE', #746, #187 ) ; +#300 = AXIS2_PLACEMENT_3D ( 'NONE', #1474, #1231, #499 ) ; +#301 = ADVANCED_FACE ( 'NONE', ( #524 ), #1159, .F. ) ; +#302 = FACE_BOUND ( 'NONE', #53, .T. ) ; +#303 = EDGE_CURVE ( 'NONE', #197, #665, #31, .T. ) ; +#304 = VERTEX_POINT ( 'NONE', #1011 ) ; +#305 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#306 = DIRECTION ( 'NONE', ( 1.387778780781445676E-15, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#307 = EDGE_LOOP ( 'NONE', ( #87, #37, #997, #941 ) ) ; +#308 = EDGE_LOOP ( 'NONE', ( #180, #1122 ) ) ; +#309 = ORIENTED_EDGE ( 'NONE', *, *, #413, .T. ) ; +#310 = ORIENTED_EDGE ( 'NONE', *, *, #165, .T. ) ; +#311 = PLANE ( 'NONE', #1178 ) ; +#312 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -57.87499999999998579 ) ) ; +#313 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#314 = CIRCLE ( 'NONE', #168, 3.500000000000003109 ) ; +#315 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#316 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#317 = CIRCLE ( 'NONE', #962, 3.500000000000003109 ) ; +#318 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#319 = CIRCLE ( 'NONE', #501, 1.625000000000001332 ) ; +#320 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#321 = ORIENTED_EDGE ( 'NONE', *, *, #1142, .F. ) ; +#322 = EDGE_CURVE ( 'NONE', #124, #1471, #1553, .T. ) ; +#323 = VERTEX_POINT ( 'NONE', #1504 ) ; +#324 = ORIENTED_EDGE ( 'NONE', *, *, #1073, .F. ) ; +#325 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#326 = ADVANCED_FACE ( 'NONE', ( #700 ), #510, .T. ) ; +#327 = ORIENTED_EDGE ( 'NONE', *, *, #1339, .T. ) ; +#328 = AXIS2_PLACEMENT_3D ( 'NONE', #474, #980, #466 ) ; +#329 = ORIENTED_EDGE ( 'NONE', *, *, #839, .T. ) ; +#330 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -63.34999999999998721, -47.17499999999999716 ) ) ; +#331 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#332 = AXIS2_PLACEMENT_3D ( 'NONE', #588, #99, #441 ) ; +#333 = CYLINDRICAL_SURFACE ( 'NONE', #1429, 3.500000000000003109 ) ; +#334 = SURFACE_STYLE_FILL_AREA ( #1425 ) ; +#335 = FACE_BOUND ( 'NONE', #1119, .T. ) ; +#336 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#337 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -81.12499999999998579 ) ) ; +#338 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#339 = AXIS2_PLACEMENT_3D ( 'NONE', #1080, #571, #752 ) ; +#340 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#341 = ORIENTED_EDGE ( 'NONE', *, *, #75, .F. ) ; +#342 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#343 = ORIENTED_EDGE ( 'NONE', *, *, #191, .F. ) ; +#344 = EDGE_CURVE ( 'NONE', #1489, #1002, #269, .T. ) ; +#345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#346 = ORIENTED_EDGE ( 'NONE', *, *, #400, .F. ) ; +#347 = ORIENTED_EDGE ( 'NONE', *, *, #889, .T. ) ; +#348 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#349 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -63.34999999999998721, -50.67499999999999716 ) ) ; +#350 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#351 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -63.34999999999998721, -43.84999999999998721 ) ) ; +#352 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#353 = VECTOR ( 'NONE', #518, 1000.000000000000000 ) ; +#354 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#355 = VECTOR ( 'NONE', #1188, 1000.000000000000000 ) ; +#356 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -55.99999999999997868 ) ) ; +#357 = CIRCLE ( 'NONE', #795, 3.500000000000003109 ) ; +#358 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#359 = AXIS2_PLACEMENT_3D ( 'NONE', #27, #985, #1235 ) ; +#360 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -56.99999999999997868, 12.49999999999998579 ) ) ; +#361 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#362 = VERTEX_POINT ( 'NONE', #1498 ) ; +#363 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -50.67499999999999716 ) ) ; +#364 = ORIENTED_EDGE ( 'NONE', *, *, #573, .T. ) ; +#365 = EDGE_CURVE ( 'NONE', #1391, #1212, #1482, .T. ) ; +#366 = VERTEX_POINT ( 'NONE', #881 ) ; +#367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#368 = EDGE_LOOP ( 'NONE', ( #50, #1563, #530, #1311 ) ) ; +#369 = ORIENTED_EDGE ( 'NONE', *, *, #34, .T. ) ; +#370 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -63.34999999999998721, -47.17499999999999716 ) ) ; +#371 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -52.29999999999999716 ) ) ; +#372 = AXIS2_PLACEMENT_3D ( 'NONE', #1536, #189, #790 ) ; +#373 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#374 = VECTOR ( 'NONE', #70, 1000.000000000000000 ) ; +#375 = FACE_OUTER_BOUND ( 'NONE', #1580, .T. ) ; +#376 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -63.34999999999998721, -75.99999999999998579 ) ) ; +#377 = VECTOR ( 'NONE', #855, 1000.000000000000000 ) ; +#378 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#379 = FACE_OUTER_BOUND ( 'NONE', #961, .T. ) ; +#380 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#381 = EDGE_CURVE ( 'NONE', #384, #197, #625, .T. ) ; +#382 = PLANE ( 'NONE', #1346 ) ; +#383 = PLANE ( 'NONE', #600 ) ; +#384 = VERTEX_POINT ( 'NONE', #1004 ) ; +#385 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -77.87499999999998579 ) ) ; +#386 = VECTOR ( 'NONE', #138, 1000.000000000000000 ) ; +#387 = ORIENTED_EDGE ( 'NONE', *, *, #606, .T. ) ; +#388 = EDGE_CURVE ( 'NONE', #683, #366, #1205, .T. ) ; +#389 = EDGE_LOOP ( 'NONE', ( #293, #1081 ) ) ; +#390 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#391 = VERTEX_POINT ( 'NONE', #1261 ) ; +#392 = FACE_OUTER_BOUND ( 'NONE', #1520, .T. ) ; +#393 = EDGE_LOOP ( 'NONE', ( #79, #472, #648, #906 ) ) ; +#394 = CYLINDRICAL_SURFACE ( 'NONE', #876, 3.500000000000003109 ) ; +#395 = ORIENTED_EDGE ( 'NONE', *, *, #534, .T. ) ; +#396 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#397 = EDGE_LOOP ( 'NONE', ( #310, #1446, #1170, #364 ) ) ; +#398 = ORIENTED_EDGE ( 'NONE', *, *, #606, .F. ) ; +#399 = VERTEX_POINT ( 'NONE', #276 ) ; +#400 = EDGE_CURVE ( 'NONE', #1509, #500, #580, .T. ) ; +#401 = LINE ( 'NONE', #1566, #416 ) ; +#402 = ADVANCED_FACE ( 'NONE', ( #232 ), #462, .T. ) ; +#403 = VECTOR ( 'NONE', #1415, 1000.000000000000000 ) ; +#404 = LINE ( 'NONE', #1369, #92 ) ; +#405 = FACE_OUTER_BOUND ( 'NONE', #1540, .T. ) ; +#406 = EDGE_CURVE ( 'NONE', #981, #1078, #932, .T. ) ; +#407 = ORIENTED_EDGE ( 'NONE', *, *, #344, .T. ) ; +#408 = ADVANCED_FACE ( 'NONE', ( #540, #747 ), #1148, .T. ) ; +#409 = ORIENTED_EDGE ( 'NONE', *, *, #773, .F. ) ; +#410 = AXIS2_PLACEMENT_3D ( 'NONE', #1574, #490, #988 ) ; +#411 = ORIENTED_EDGE ( 'NONE', *, *, #971, .T. ) ; +#412 = VERTEX_POINT ( 'NONE', #297 ) ; +#413 = EDGE_CURVE ( 'NONE', #1471, #633, #1230, .T. ) ; +#414 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#415 = CYLINDRICAL_SURFACE ( 'NONE', #45, 1.625000000000001332 ) ; +#416 = VECTOR ( 'NONE', #1189, 1000.000000000000000 ) ; +#417 = LINE ( 'NONE', #261, #1040 ) ; +#418 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -63.34999999999998721, 12.49999999999998579 ) ) ; +#419 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#420 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#421 = ORIENTED_EDGE ( 'NONE', *, *, #1163, .T. ) ; +#422 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#423 = ORIENTED_EDGE ( 'NONE', *, *, #1037, .T. ) ; +#424 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -77.87499999999998579 ) ) ; +#425 = AXIS2_PLACEMENT_3D ( 'NONE', #1147, #658, #837 ) ; +#426 = ORIENTED_EDGE ( 'NONE', *, *, #1088, .F. ) ; +#427 = ADVANCED_FACE ( 'NONE', ( #379 ), #949, .F. ) ; +#428 = ORIENTED_EDGE ( 'NONE', *, *, #594, .T. ) ; +#429 = ORIENTED_EDGE ( 'NONE', *, *, #1515, .F. ) ; +#430 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #131 ), #94 ) ; +#431 = CARTESIAN_POINT ( 'NONE', ( -36.35000000000000142, -56.99999999999997868, -63.84999999999998721 ) ) ; +#432 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -63.34999999999998721, -62.99999999999998579 ) ) ; +#433 = ADVANCED_FACE ( 'NONE', ( #405 ), #1518, .F. ) ; +#434 = VECTOR ( 'NONE', #626, 1000.000000000000000 ) ; +#435 = VECTOR ( 'NONE', #313, 1000.000000000000000 ) ; +#436 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -63.34999999999998721, -43.84999999999999432 ) ) ; +#437 = LINE ( 'NONE', #461, #1395 ) ; +#438 = AXIS2_PLACEMENT_3D ( 'NONE', #448, #221, #1197 ) ; +#439 = LINE ( 'NONE', #838, #377 ) ; +#440 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -62.99999999999998579 ) ) ; +#441 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#442 = VERTEX_POINT ( 'NONE', #385 ) ; +#443 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#444 = EDGE_CURVE ( 'NONE', #611, #200, #1572, .T. ) ; +#445 = ORIENTED_EDGE ( 'NONE', *, *, #322, .F. ) ; +#446 = ORIENTED_EDGE ( 'NONE', *, *, #541, .T. ) ; +#447 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -63.34999999999998721, -43.84999999999999432 ) ) ; +#448 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -63.34999999999998721, -50.67499999999999716 ) ) ; +#449 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -61.12499999999999289 ) ) ; +#450 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -63.34999999999998721, -59.50000000000000000 ) ) ; +#451 = EDGE_LOOP ( 'NONE', ( #1349, #903 ) ) ; +#452 = AXIS2_PLACEMENT_3D ( 'NONE', #973, #591, #121 ) ; +#453 = VERTEX_POINT ( 'NONE', #1304 ) ; +#454 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#455 = EDGE_LOOP ( 'NONE', ( #1333, #1389 ) ) ; +#456 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#457 = AXIS2_PLACEMENT_3D ( 'NONE', #975, #6, #1367 ) ; +#458 = LINE ( 'NONE', #974, #1198 ) ; +#459 = VECTOR ( 'NONE', #250, 1000.000000000000000 ) ; +#460 = FACE_OUTER_BOUND ( 'NONE', #1100, .T. ) ; +#461 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -60.84999999999998721, -93.84999999999999432 ) ) ; +#462 = CYLINDRICAL_SURFACE ( 'NONE', #1057, 10.00000000000000000 ) ; +#463 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#464 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#465 = FILL_AREA_STYLE ('',( #1202 ) ) ; +#466 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#467 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#468 = EDGE_LOOP ( 'NONE', ( #996, #1400, #770, #1238 ) ) ; +#469 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#470 = ORIENTED_EDGE ( 'NONE', *, *, #846, .F. ) ; +#471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #1109, .T. ) ; +#473 = ORIENTED_EDGE ( 'NONE', *, *, #655, .T. ) ; +#474 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -56.99999999999997868, -43.84999999999999432 ) ) ; +#475 = VERTEX_POINT ( 'NONE', #578 ) ; +#476 = AXIS2_PLACEMENT_3D ( 'NONE', #272, #509, #990 ) ; +#477 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#478 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -61.12499999999997868 ) ) ; +#479 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #1305 ) ) ; +#480 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#481 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -54.17500000000000426 ) ) ; +#482 = SHAPE_DEFINITION_REPRESENTATION ( #870, #1210 ) ; +#483 = VECTOR ( 'NONE', #1324, 1000.000000000000000 ) ; +#484 = EDGE_CURVE ( 'NONE', #859, #141, #319, .T. ) ; +#485 = CYLINDRICAL_SURFACE ( 'NONE', #1443, 1.625000000000001332 ) ; +#486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#487 = AXIS2_PLACEMENT_3D ( 'NONE', #657, #505, #1245 ) ; +#488 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -77.87499999999998579 ) ) ; +#489 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#491 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#492 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#493 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .F. ) ; +#494 = EDGE_CURVE ( 'NONE', #772, #1539, #895, .T. ) ; +#495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#496 = EDGE_LOOP ( 'NONE', ( #470, #149, #1545, #516 ) ) ; +#497 = ORIENTED_EDGE ( 'NONE', *, *, #290, .F. ) ; +#498 = ORIENTED_EDGE ( 'NONE', *, *, #950, .F. ) ; +#499 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#500 = VERTEX_POINT ( 'NONE', #1576 ) ; +#501 = AXIS2_PLACEMENT_3D ( 'NONE', #565, #817, #89 ) ; +#502 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -60.84999999999998721, -78.20096189432328515 ) ) ; +#503 = LINE ( 'NONE', #1292, #1372 ) ; +#504 = CYLINDRICAL_SURFACE ( 'NONE', #1015, 9.999999999999994671 ) ; +#505 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#506 = CYLINDRICAL_SURFACE ( 'NONE', #615, 1.625000000000001332 ) ; +#507 = FACE_OUTER_BOUND ( 'NONE', #1388, .T. ) ; +#508 = EDGE_CURVE ( 'NONE', #124, #1191, #856, .T. ) ; +#509 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#510 = PLANE ( 'NONE', #212 ) ; +#511 = ORIENTED_EDGE ( 'NONE', *, *, #910, .T. ) ; +#512 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#513 = ORIENTED_EDGE ( 'NONE', *, *, #561, .T. ) ; +#514 = EDGE_CURVE ( 'NONE', #1523, #818, #1534, .T. ) ; +#515 = FACE_BOUND ( 'NONE', #106, .T. ) ; +#516 = ORIENTED_EDGE ( 'NONE', *, *, #1163, .F. ) ; +#517 = ORIENTED_EDGE ( 'NONE', *, *, #14, .T. ) ; +#518 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#519 = AXIS2_PLACEMENT_3D ( 'NONE', #835, #581, #234 ) ; +#520 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -75.99999999999998579 ) ) ; +#521 = VECTOR ( 'NONE', #1319, 1000.000000000000000 ) ; +#522 = VECTOR ( 'NONE', #847, 1000.000000000000000 ) ; +#523 = EDGE_CURVE ( 'NONE', #564, #963, #1269, .T. ) ; +#524 = FACE_OUTER_BOUND ( 'NONE', #1164, .T. ) ; +#525 = ADVANCED_FACE ( 'NONE', ( #1501 ), #1435, .F. ) ; +#526 = VERTEX_POINT ( 'NONE', #1179 ) ; +#527 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#528 = AXIS2_PLACEMENT_3D ( 'NONE', #1573, #220, #692 ) ; +#529 = EDGE_LOOP ( 'NONE', ( #1014, #924, #644, #1233 ) ) ; +#530 = ORIENTED_EDGE ( 'NONE', *, *, #57, .T. ) ; +#531 = ORIENTED_EDGE ( 'NONE', *, *, #822, .F. ) ; +#532 = ADVANCED_FACE ( 'NONE', ( #507 ), #991, .F. ) ; +#533 = ORIENTED_EDGE ( 'NONE', *, *, #822, .T. ) ; +#534 = EDGE_CURVE ( 'NONE', #145, #883, #252, .T. ) ; +#535 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #1305, .NOT_KNOWN. ) ; +#536 = FACE_OUTER_BOUND ( 'NONE', #1466, .T. ) ; +#537 = FACE_OUTER_BOUND ( 'NONE', #1133, .T. ) ; +#538 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#539 = CIRCLE ( 'NONE', #1264, 1.624999999999994449 ) ; +#540 = FACE_OUTER_BOUND ( 'NONE', #389, .T. ) ; +#541 = EDGE_CURVE ( 'NONE', #842, #547, #603, .T. ) ; +#542 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#543 = ORIENTED_EDGE ( 'NONE', *, *, #514, .T. ) ; +#544 = FACE_OUTER_BOUND ( 'NONE', #1263, .T. ) ; +#545 = ADVANCED_FACE ( 'NONE', ( #289 ), #485, .F. ) ; +#546 = ORIENTED_EDGE ( 'NONE', *, *, #1250, .F. ) ; +#547 = VERTEX_POINT ( 'NONE', #432 ) ; +#548 = EDGE_LOOP ( 'NONE', ( #843, #262 ) ) ; +#549 = ORIENTED_EDGE ( 'NONE', *, *, #1240, .F. ) ; +#550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#551 = ADVANCED_FACE ( 'NONE', ( #11 ), #1176, .F. ) ; +#552 = CIRCLE ( 'NONE', #933, 3.500000000000003109 ) ; +#553 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#554 = AXIS2_PLACEMENT_3D ( 'NONE', #927, #1173, #315 ) ; +#555 = CIRCLE ( 'NONE', #1123, 10.00000000000000000 ) ; +#556 = PRESENTATION_STYLE_ASSIGNMENT (( #1541 ) ) ; +#557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#558 = VECTOR ( 'NONE', #477, 1000.000000000000000 ) ; +#559 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#561 = EDGE_CURVE ( 'NONE', #218, #981, #1366, .T. ) ; +#562 = ORIENTED_EDGE ( 'NONE', *, *, #1048, .T. ) ; +#563 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -81.12499999999998579 ) ) ; +#564 = VERTEX_POINT ( 'NONE', #84 ) ; +#565 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -50.67499999999999716 ) ) ; +#566 = ORIENTED_EDGE ( 'NONE', *, *, #1048, .F. ) ; +#567 = ADVANCED_FACE ( 'NONE', ( #1252, #170 ), #1199, .T. ) ; +#568 = ORIENTED_EDGE ( 'NONE', *, *, #274, .F. ) ; +#569 = ORIENTED_EDGE ( 'NONE', *, *, #1404, .T. ) ; +#570 = PLANE ( 'NONE', #60 ) ; +#571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#572 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -63.34999999999998721, -75.99999999999998579 ) ) ; +#573 = EDGE_CURVE ( 'NONE', #1279, #412, #1141, .T. ) ; +#574 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -79.49999999999998579 ) ) ; +#575 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#576 = PLANE ( 'NONE', #77 ) ; +#577 = CIRCLE ( 'NONE', #864, 10.00000000000000178 ) ; +#578 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -57.87500000000000000 ) ) ; +#579 = AXIS2_PLACEMENT_3D ( 'NONE', #1213, #464, #722 ) ; +#580 = LINE ( 'NONE', #166, #1180 ) ; +#581 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#582 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#583 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#584 = EDGE_CURVE ( 'NONE', #1426, #1521, #777, .T. ) ; +#585 = ORIENTED_EDGE ( 'NONE', *, *, #668, .T. ) ; +#586 = ORIENTED_EDGE ( 'NONE', *, *, #629, .T. ) ; +#587 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -56.99999999999998579, 12.49999999999998401 ) ) ; +#588 = CARTESIAN_POINT ( 'NONE', ( 36.35000000000000142, -56.99999999999997868, -63.84999999999998721 ) ) ; +#589 = VERTEX_POINT ( 'NONE', #1476 ) ; +#590 = ORIENTED_EDGE ( 'NONE', *, *, #140, .F. ) ; +#591 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#592 = ORIENTED_EDGE ( 'NONE', *, *, #1427, .F. ) ; +#593 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#594 = EDGE_CURVE ( 'NONE', #1391, #1442, #1023, .T. ) ; +#595 = FACE_OUTER_BOUND ( 'NONE', #455, .T. ) ; +#596 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#597 = PLANE ( 'NONE', #452 ) ; +#598 = FACE_OUTER_BOUND ( 'NONE', #1012, .T. ) ; +#599 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#600 = AXIS2_PLACEMENT_3D ( 'NONE', #1107, #992, #480 ) ; +#601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#602 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#603 = CIRCLE ( 'NONE', #1255, 3.500000000000003109 ) ; +#604 = PLANE ( 'NONE', #1386 ) ; +#605 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -56.99999999999997868, -63.84999999999998721 ) ) ; +#606 = EDGE_CURVE ( 'NONE', #683, #362, #439, .T. ) ; +#607 = ORIENTED_EDGE ( 'NONE', *, *, #93, .F. ) ; +#608 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#609 = ORIENTED_EDGE ( 'NONE', *, *, #508, .F. ) ; +#610 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#611 = VERTEX_POINT ( 'NONE', #356 ) ; +#612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#613 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#614 = ORIENTED_EDGE ( 'NONE', *, *, #761, .F. ) ; +#615 = AXIS2_PLACEMENT_3D ( 'NONE', #1315, #414, #108 ) ; +#616 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#617 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -54.17500000000000426 ) ) ; +#618 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#619 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#620 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#621 = CYLINDRICAL_SURFACE ( 'NONE', #359, 10.00000000000000000 ) ; +#622 = EDGE_CURVE ( 'NONE', #366, #1273, #59, .T. ) ; +#623 = LINE ( 'NONE', #209, #1301 ) ; +#624 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#625 = CIRCLE ( 'NONE', #916, 1.625000000000001332 ) ; +#626 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#627 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1445 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #237, #358, #1452 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#628 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, 0.0000000000000000000, 12.49999999999998579 ) ) ; +#629 = EDGE_CURVE ( 'NONE', #665, #1018, #1106, .T. ) ; +#630 = ORIENTED_EDGE ( 'NONE', *, *, #254, .T. ) ; +#631 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#632 = ORIENTED_EDGE ( 'NONE', *, *, #406, .T. ) ; +#633 = VERTEX_POINT ( 'NONE', #117 ) ; +#634 = VERTEX_POINT ( 'NONE', #235 ) ; +#635 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -63.34999999999998721, -43.84999999999999432 ) ) ; +#636 = LINE ( 'NONE', #958, #459 ) ; +#637 = VECTOR ( 'NONE', #1215, 1000.000000000000000 ) ; +#638 = LINE ( 'NONE', #1423, #1478 ) ; +#639 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -50.67499999999999716 ) ) ; +#640 = FACE_OUTER_BOUND ( 'NONE', #885, .T. ) ; +#641 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#642 = AXIS2_PLACEMENT_3D ( 'NONE', #1350, #354, #246 ) ; +#643 = VERTEX_POINT ( 'NONE', #1223 ) ; +#644 = ORIENTED_EDGE ( 'NONE', *, *, #1461, .T. ) ; +#645 = EDGE_LOOP ( 'NONE', ( #1582, #1526 ) ) ; +#646 = EDGE_CURVE ( 'NONE', #1260, #782, #404, .T. ) ; +#647 = ORIENTED_EDGE ( 'NONE', *, *, #764, .F. ) ; +#648 = ORIENTED_EDGE ( 'NONE', *, *, #909, .F. ) ; +#649 = AXIS2_PLACEMENT_3D ( 'NONE', #456, #1070, #1434 ) ; +#650 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -81.12499999999998579 ) ) ; +#651 = LINE ( 'NONE', #717, #637 ) ; +#652 = ADVANCED_FACE ( 'NONE', ( #1154 ), #1085, .F. ) ; +#653 = FACE_OUTER_BOUND ( 'NONE', #468, .T. ) ; +#654 = FACE_OUTER_BOUND ( 'NONE', #1136, .T. ) ; +#655 = EDGE_CURVE ( 'NONE', #978, #125, #872, .T. ) ; +#656 = CIRCLE ( 'NONE', #339, 3.500000000000003109 ) ; +#657 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -79.49999999999998579 ) ) ; +#658 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#659 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#660 = AXIS2_PLACEMENT_3D ( 'NONE', #270, #373, #367 ) ; +#661 = VERTEX_POINT ( 'NONE', #1000 ) ; +#662 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#663 = CARTESIAN_POINT ( 'NONE', ( -36.34999999999999432, -63.34999999999998721, -53.84999999999999432 ) ) ; +#664 = VERTEX_POINT ( 'NONE', #502 ) ; +#665 = VERTEX_POINT ( 'NONE', #1207 ) ; +#666 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .T. ) ; +#667 = VECTOR ( 'NONE', #688, 1000.000000000000000 ) ; +#668 = EDGE_CURVE ( 'NONE', #883, #145, #181, .T. ) ; +#670 = VERTEX_POINT ( 'NONE', #868 ) ; +#669 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#671 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#672 = VECTOR ( 'NONE', #4, 1000.000000000000000 ) ; +#673 = CIRCLE ( 'NONE', #1022, 1.625000000000001332 ) ; +#674 = LINE ( 'NONE', #1218, #1549 ) ; +#675 = EDGE_CURVE ( 'NONE', #216, #453, #911, .T. ) ; +#676 = CIRCLE ( 'NONE', #716, 1.624999999999994449 ) ; +#677 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#678 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -60.84999999999998721, -77.87519231907276662 ) ) ; +#679 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#680 = AXIS2_PLACEMENT_3D ( 'NONE', #1281, #1527, #248 ) ; +#681 = ORIENTED_EDGE ( 'NONE', *, *, #1037, .F. ) ; +#682 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#683 = VERTEX_POINT ( 'NONE', #1003 ) ; +#684 = ORIENTED_EDGE ( 'NONE', *, *, #561, .F. ) ; +#685 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -47.17499999999999716 ) ) ; +#686 = ORIENTED_EDGE ( 'NONE', *, *, #541, .F. ) ; +#687 = EDGE_CURVE ( 'NONE', #661, #173, #1201, .T. ) ; +#688 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#689 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#690 = EDGE_LOOP ( 'NONE', ( #62, #1272, #1405, #398 ) ) ; +#691 = ADVANCED_FACE ( 'NONE', ( #1364 ), #382, .F. ) ; +#692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 1.092739197465703907E-15 ) ) ; +#694 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#695 = AXIS2_PLACEMENT_3D ( 'NONE', #1569, #101, #231 ) ; +#696 = FACE_OUTER_BOUND ( 'NONE', #766, .T. ) ; +#697 = LINE ( 'NONE', #1469, #1156 ) ; +#698 = VECTOR ( 'NONE', #202, 1000.000000000000000 ) ; +#699 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#700 = FACE_OUTER_BOUND ( 'NONE', #1186, .T. ) ; +#701 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#702 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#703 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#704 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -82.99999999999998579 ) ) ; +#705 = EDGE_CURVE ( 'NONE', #175, #304, #1410, .T. ) ; +#706 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#707 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#708 = LINE ( 'NONE', #1224, #386 ) ; +#709 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#710 = STYLED_ITEM ( 'NONE', ( #1007 ), #1210 ) ; +#711 = ORIENTED_EDGE ( 'NONE', *, *, #871, .F. ) ; +#712 = ORIENTED_EDGE ( 'NONE', *, *, #839, .F. ) ; +#713 = VERTEX_POINT ( 'NONE', #617 ) ; +#714 = EDGE_LOOP ( 'NONE', ( #343, #731, #614, #66 ) ) ; +#715 = FACE_OUTER_BOUND ( 'NONE', #645, .T. ) ; +#716 = AXIS2_PLACEMENT_3D ( 'NONE', #1524, #907, #749 ) ; +#717 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#718 = CARTESIAN_POINT ( 'NONE', ( -36.35000000000000142, -63.34999999999998721, -53.84999999999999432 ) ) ; +#719 = FACE_OUTER_BOUND ( 'NONE', #368, .T. ) ; +#720 = CYLINDRICAL_SURFACE ( 'NONE', #372, 1.625000000000001332 ) ; +#721 = LINE ( 'NONE', #685, #1139 ) ; +#722 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#723 = CIRCLE ( 'NONE', #1361, 10.00000000000000178 ) ; +#724 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -1.092739197465703907E-15 ) ) ; +#725 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#726 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -63.34999999999998721, -59.49999999999998579 ) ) ; +#727 = EDGE_CURVE ( 'NONE', #611, #842, #1532, .T. ) ; +#728 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#729 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -52.29999999999999716 ) ) ; +#730 = FACE_BOUND ( 'NONE', #1406, .T. ) ; +#731 = ORIENTED_EDGE ( 'NONE', *, *, #21, .T. ) ; +#732 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -63.34999999999998721, -79.49999999999998579 ) ) ; +#733 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -2.434163981490655399E-15, -43.84999999999999432 ) ) ; +#734 = FACE_BOUND ( 'NONE', #1187, .T. ) ; +#735 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -56.99999999999997868, -43.84999999999999432 ) ) ; +#736 = AXIS2_PLACEMENT_3D ( 'NONE', #305, #922, #1160 ) ; +#737 = ORIENTED_EDGE ( 'NONE', *, *, #184, .F. ) ; +#738 = ORIENTED_EDGE ( 'NONE', *, *, #1535, .T. ) ; +#739 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#740 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#741 = EDGE_CURVE ( 'NONE', #200, #611, #228, .T. ) ; +#742 = CIRCLE ( 'NONE', #256, 3.500000000000003109 ) ; +#743 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#744 = AXIS2_PLACEMENT_3D ( 'NONE', #1093, #1099, #471 ) ; +#745 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#746 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -60.84999999999998721, -77.87519231907276662 ) ) ; +#747 = FACE_BOUND ( 'NONE', #278, .T. ) ; +#748 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#750 = EDGE_CURVE ( 'NONE', #1260, #1525, #185, .T. ) ; +#751 = ORIENTED_EDGE ( 'NONE', *, *, #1414, .F. ) ; +#752 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#753 = ORIENTED_EDGE ( 'NONE', *, *, #1088, .T. ) ; +#754 = ORIENTED_EDGE ( 'NONE', *, *, #971, .F. ) ; +#755 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -79.49999999999998579 ) ) ; +#756 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#757 = VERTEX_POINT ( 'NONE', #735 ) ; +#758 = ORIENTED_EDGE ( 'NONE', *, *, #816, .T. ) ; +#759 = VERTEX_POINT ( 'NONE', #587 ) ; +#760 = FACE_BOUND ( 'NONE', #1132, .T. ) ; +#761 = EDGE_CURVE ( 'NONE', #1072, #1131, #1499, .T. ) ; +#762 = VECTOR ( 'NONE', #610, 1000.000000000000000 ) ; +#763 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#764 = EDGE_CURVE ( 'NONE', #200, #547, #697, .T. ) ; +#765 = ORIENTED_EDGE ( 'NONE', *, *, #909, .T. ) ; +#766 = EDGE_LOOP ( 'NONE', ( #940, #1562, #1506, #162 ) ) ; +#767 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#768 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -63.84999999999998721 ) ) ; +#769 = EDGE_LOOP ( 'NONE', ( #609, #1016, #309, #737 ) ) ; +#770 = ORIENTED_EDGE ( 'NONE', *, *, #984, .T. ) ; +#771 = AXIS2_PLACEMENT_3D ( 'NONE', #348, #575, #107 ) ; +#772 = VERTEX_POINT ( 'NONE', #972 ) ; +#773 = EDGE_CURVE ( 'NONE', #782, #759, #792, .T. ) ; +#774 = CYLINDRICAL_SURFACE ( 'NONE', #809, 3.500000000000003109 ) ; +#775 = CIRCLE ( 'NONE', #143, 3.500000000000003109 ) ; +#776 = VECTOR ( 'NONE', #13, 1000.000000000000000 ) ; +#777 = CIRCLE ( 'NONE', #945, 3.500000000000003109 ) ; +#778 = ADVANCED_FACE ( 'NONE', ( #536 ), #1453, .F. ) ; +#779 = AXIS2_PLACEMENT_3D ( 'NONE', #1347, #126, #1353 ) ; +#780 = ORIENTED_EDGE ( 'NONE', *, *, #857, .F. ) ; +#781 = ORIENTED_EDGE ( 'NONE', *, *, #984, .F. ) ; +#782 = VERTEX_POINT ( 'NONE', #1044 ) ; +#783 = EDGE_CURVE ( 'NONE', #1051, #1334, #1530, .T. ) ; +#784 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#785 = ORIENTED_EDGE ( 'NONE', *, *, #1515, .T. ) ; +#786 = ORIENTED_EDGE ( 'NONE', *, *, #668, .F. ) ; +#787 = ORIENTED_EDGE ( 'NONE', *, *, #1552, .T. ) ; +#788 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #710 ) ) ; +#789 = CARTESIAN_POINT ( 'NONE', ( -36.35000000000000142, -56.99999999999997868, -63.84999999999998721 ) ) ; +#790 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#791 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#792 = CIRCLE ( 'NONE', #830, 10.00000000000000000 ) ; +#793 = CIRCLE ( 'NONE', #1492, 10.00000000000000000 ) ; +#794 = CIRCLE ( 'NONE', #744, 3.500000000000003109 ) ; +#795 = AXIS2_PLACEMENT_3D ( 'NONE', #450, #1555, #694 ) ; +#796 = VECTOR ( 'NONE', #939, 1000.000000000000000 ) ; +#797 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -61.12499999999997868 ) ) ; +#798 = PLANE ( 'NONE', #1068 ) ; +#799 = ADVANCED_FACE ( 'NONE', ( #375 ), #774, .F. ) ; +#800 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#801 = ORIENTED_EDGE ( 'NONE', *, *, #1153, .F. ) ; +#802 = ORIENTED_EDGE ( 'NONE', *, *, #400, .T. ) ; +#803 = EDGE_CURVE ( 'NONE', #1334, #1051, #26, .T. ) ; +#804 = ORIENTED_EDGE ( 'NONE', *, *, #1019, .T. ) ; +#805 = ORIENTED_EDGE ( 'NONE', *, *, #203, .F. ) ; +#806 = EDGE_LOOP ( 'NONE', ( #568, #1370, #1374, #513, #426, #1306, #785, #18 ) ) ; +#807 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#808 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#809 = AXIS2_PLACEMENT_3D ( 'NONE', #1302, #662, #1422 ) ; +#810 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -56.99999999999997868, -43.84999999999999432 ) ) ; +#811 = VECTOR ( 'NONE', #1161, 1000.000000000000000 ) ; +#812 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -63.35000000000001563, 12.49999999999998401 ) ) ; +#813 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#814 = VECTOR ( 'NONE', #1308, 1000.000000000000000 ) ; +#815 = ADVANCED_FACE ( 'NONE', ( #654 ), #720, .F. ) ; +#816 = EDGE_CURVE ( 'NONE', #1002, #1489, #1382, .T. ) ; +#817 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#818 = VERTEX_POINT ( 'NONE', #768 ) ; +#819 = ORIENTED_EDGE ( 'NONE', *, *, #303, .T. ) ; +#820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#821 = ORIENTED_EDGE ( 'NONE', *, *, #950, .T. ) ; +#822 = EDGE_CURVE ( 'NONE', #453, #1167, #1246, .T. ) ; +#823 = ORIENTED_EDGE ( 'NONE', *, *, #773, .T. ) ; +#824 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -81.12499999999998579 ) ) ; +#825 = ORIENTED_EDGE ( 'NONE', *, *, #3, .T. ) ; +#826 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#827 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#828 = CIRCLE ( 'NONE', #528, 1.625000000000001332 ) ; +#829 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -79.49999999999998579 ) ) ; +#830 = AXIS2_PLACEMENT_3D ( 'NONE', #360, #116, #960 ) ; +#831 = LINE ( 'NONE', #824, #1125 ) ; +#832 = ADVANCED_FACE ( 'NONE', ( #966 ), #892, .T. ) ; +#833 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#834 = CIRCLE ( 'NONE', #29, 1.624999999999994449 ) ; +#835 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -50.67499999999999716 ) ) ; +#836 = VECTOR ( 'NONE', #253, 1000.000000000000000 ) ; +#837 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#838 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -63.00000000000000000 ) ) ; +#839 = EDGE_CURVE ( 'NONE', #1018, #665, #673, .T. ) ; +#840 = EDGE_LOOP ( 'NONE', ( #901, #164 ) ) ; +#841 = LINE ( 'NONE', #1006, #194 ) ; +#842 = VERTEX_POINT ( 'NONE', #1544 ) ; +#843 = ORIENTED_EDGE ( 'NONE', *, *, #687, .F. ) ; +#844 = ORIENTED_EDGE ( 'NONE', *, *, #484, .T. ) ; +#845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#846 = EDGE_CURVE ( 'NONE', #475, #273, #55, .T. ) ; +#847 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 3.635307873690756337E-16, -1.000000000000000000 ) ) ; +#848 = ORIENTED_EDGE ( 'NONE', *, *, #165, .F. ) ; +#849 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#850 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#851 = AXIS2_PLACEMENT_3D ( 'NONE', #97, #1313, #5 ) ; +#852 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#853 = FACE_OUTER_BOUND ( 'NONE', #1241, .T. ) ; +#854 = CIRCLE ( 'NONE', #771, 1.625000000000001332 ) ; +#855 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#856 = CIRCLE ( 'NONE', #292, 3.500000000000003109 ) ; +#857 = EDGE_CURVE ( 'NONE', #1234, #1509, #929, .T. ) ; +#858 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -63.84999999999998721 ) ) ; +#859 = VERTEX_POINT ( 'NONE', #1419 ) ; +#860 = ORIENTED_EDGE ( 'NONE', *, *, #646, .T. ) ; +#861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#862 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#863 = ORIENTED_EDGE ( 'NONE', *, *, #413, .F. ) ; +#864 = AXIS2_PLACEMENT_3D ( 'NONE', #1206, #98, #222 ) ; +#865 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#866 = ORIENTED_EDGE ( 'NONE', *, *, #1142, .T. ) ; +#867 = ORIENTED_EDGE ( 'NONE', *, *, #750, .T. ) ; +#868 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -56.99999999999998579, 22.49999999999998579 ) ) ; +#869 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -79.49999999999998579 ) ) ; +#870 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #1458 ) ; +#871 = EDGE_CURVE ( 'NONE', #1167, #323, #401, .T. ) ; +#872 = CIRCLE ( 'NONE', #660, 1.625000000000001332 ) ; +#873 = VECTOR ( 'NONE', #1066, 1000.000000000000000 ) ; +#874 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#875 = CIRCLE ( 'NONE', #1399, 1.625000000000001332 ) ; +#876 = AXIS2_PLACEMENT_3D ( 'NONE', #380, #1071, #707 ) ; +#877 = FACE_OUTER_BOUND ( 'NONE', #1242, .T. ) ; +#878 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#879 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#880 = EDGE_CURVE ( 'NONE', #51, #1169, #284, .T. ) ; +#881 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -55.99999999999999289 ) ) ; +#882 = ORIENTED_EDGE ( 'NONE', *, *, #993, .T. ) ; +#883 = VERTEX_POINT ( 'NONE', #337 ) ; +#884 = ORIENTED_EDGE ( 'NONE', *, *, #1360, .F. ) ; +#885 = EDGE_LOOP ( 'NONE', ( #1579, #277, #738, #976 ) ) ; +#886 = CARTESIAN_POINT ( 'NONE', ( 36.35000000000000142, -56.99999999999997868, -53.84999999999999432 ) ) ; +#887 = ORIENTED_EDGE ( 'NONE', *, *, #938, .F. ) ; +#888 = CYLINDRICAL_SURFACE ( 'NONE', #1130, 3.500000000000003109 ) ; +#889 = EDGE_CURVE ( 'NONE', #1521, #1426, #987, .T. ) ; +#890 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#891 = VECTOR ( 'NONE', #743, 1000.000000000000000 ) ; +#892 = PLANE ( 'NONE', #134 ) ; +#893 = VECTOR ( 'NONE', #748, 1000.000000000000000 ) ; +#894 = AXIS2_PLACEMENT_3D ( 'NONE', #1165, #1010, #1266 ) ; +#895 = LINE ( 'NONE', #704, #208 ) ; +#896 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #226, 'design' ) ; +#897 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#898 = EDGE_LOOP ( 'NONE', ( #1075, #1172 ) ) ; +#899 = EDGE_CURVE ( 'NONE', #633, #218, #651, .T. ) ; +#900 = EDGE_CURVE ( 'NONE', #399, #1279, #458, .T. ) ; +#901 = ORIENTED_EDGE ( 'NONE', *, *, #290, .T. ) ; +#902 = ADVANCED_FACE ( 'NONE', ( #1318 ), #238, .T. ) ; +#903 = ORIENTED_EDGE ( 'NONE', *, *, #118, .T. ) ; +#904 = EDGE_LOOP ( 'NONE', ( #1222, #686 ) ) ; +#905 = AXIS2_PLACEMENT_3D ( 'NONE', #1013, #288, #283 ) ; +#906 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .F. ) ; +#907 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#908 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#909 = EDGE_CURVE ( 'NONE', #634, #48, #828, .T. ) ; +#910 = EDGE_CURVE ( 'NONE', #883, #978, #1531, .T. ) ; +#911 = LINE ( 'NONE', #1127, #1021 ) ; +#912 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#913 = CYLINDRICAL_SURFACE ( 'NONE', #998, 1.624999999999994449 ) ; +#914 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#915 = VECTOR ( 'NONE', #1129, 1000.000000000000000 ) ; +#916 = AXIS2_PLACEMENT_3D ( 'NONE', #1393, #1380, #1516 ) ; +#917 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#918 = ORIENTED_EDGE ( 'NONE', *, *, #573, .F. ) ; +#919 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .F. ) ; +#920 = EDGE_CURVE ( 'NONE', #1212, #1509, #227, .T. ) ; +#921 = ORIENTED_EDGE ( 'NONE', *, *, #86, .F. ) ; +#922 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#923 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#924 = ORIENTED_EDGE ( 'NONE', *, *, #1278, .T. ) ; +#925 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#926 = EDGE_LOOP ( 'NONE', ( #1001, #1258, #1392, #549 ) ) ; +#927 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#928 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -80.79903810567668643 ) ) ; +#929 = LINE ( 'NONE', #73, #435 ) ; +#930 = CIRCLE ( 'NONE', #328, 10.00000000000000178 ) ; +#931 = FACE_OUTER_BOUND ( 'NONE', #1293, .T. ) ; +#932 = CIRCLE ( 'NONE', #1417, 10.00000000000000178 ) ; +#933 = AXIS2_PLACEMENT_3D ( 'NONE', #1348, #599, #130 ) ; +#934 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -61.12499999999999289 ) ) ; +#935 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -63.35000000000001563, 12.49999999999998401 ) ) ; +#936 = ADVANCED_FACE ( 'NONE', ( #537 ), #504, .F. ) ; +#937 = ORIENTED_EDGE ( 'NONE', *, *, #388, .F. ) ; +#938 = EDGE_CURVE ( 'NONE', #362, #1273, #152, .T. ) ; +#939 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#940 = ORIENTED_EDGE ( 'NONE', *, *, #1200, .F. ) ; +#941 = ORIENTED_EDGE ( 'NONE', *, *, #880, .F. ) ; +#942 = EDGE_LOOP ( 'NONE', ( #1511, #81, #1049, #1256 ) ) ; +#943 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -56.99999999999997868, -43.84999999999999432 ) ) ; +#944 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#945 = AXIS2_PLACEMENT_3D ( 'NONE', #349, #1097, #17 ) ; +#946 = LINE ( 'NONE', #593, #893 ) ; +#947 = VECTOR ( 'NONE', #1227, 1000.000000000000000 ) ; +#948 = LINE ( 'NONE', #1296, #811 ) ; +#949 = CYLINDRICAL_SURFACE ( 'NONE', #1335, 3.500000000000003109 ) ; +#950 = EDGE_CURVE ( 'NONE', #141, #1489, #182, .T. ) ; +#951 = PLANE ( 'NONE', #1243 ) ; +#952 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -60.84999999999998721, -93.84999999999999432 ) ) ; +#953 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#954 = AXIS2_PLACEMENT_3D ( 'NONE', #351, #1560, #1447 ) ; +#955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#956 = FACE_OUTER_BOUND ( 'NONE', #1217, .T. ) ; +#957 = ORIENTED_EDGE ( 'NONE', *, *, #920, .T. ) ; +#958 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -93.84999999999999432 ) ) ; +#959 = ORIENTED_EDGE ( 'NONE', *, *, #191, .T. ) ; +#960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#961 = EDGE_LOOP ( 'NONE', ( #1077, #1275, #176, #213 ) ) ; +#962 = AXIS2_PLACEMENT_3D ( 'NONE', #378, #1345, #1232 ) ; +#963 = VERTEX_POINT ( 'NONE', #1244 ) ; +#964 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -60.84999999999998721, -81.12480768092720496 ) ) ; +#965 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -56.99999999999997868, -63.84999999999998721 ) ) ; +#966 = FACE_OUTER_BOUND ( 'NONE', #159, .T. ) ; +#967 = LINE ( 'NONE', #671, #403 ) ; +#968 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -63.34999999999998721, -54.17500000000000426 ) ) ; +#969 = LINE ( 'NONE', #852, #522 ) ; +#970 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#971 = EDGE_CURVE ( 'NONE', #1442, #670, #1497, .T. ) ; +#972 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -82.99999999999998579 ) ) ; +#973 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#974 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#975 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#976 = ORIENTED_EDGE ( 'NONE', *, *, #193, .F. ) ; +#977 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -55.99999999999999289 ) ) ; +#978 = VERTEX_POINT ( 'NONE', #650 ) ; +#979 = ORIENTED_EDGE ( 'NONE', *, *, #1507, .T. ) ; +#980 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#981 = VERTEX_POINT ( 'NONE', #1277 ) ; +#982 = ORIENTED_EDGE ( 'NONE', *, *, #920, .F. ) ; +#983 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -49.04999999999999716 ) ) ; +#984 = EDGE_CURVE ( 'NONE', #111, #1539, #1454, .T. ) ; +#985 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#986 = AXIS2_PLACEMENT_3D ( 'NONE', #1537, #1428, #917 ) ; +#987 = CIRCLE ( 'NONE', #438, 3.500000000000003109 ) ; +#988 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#989 = LINE ( 'NONE', #219, #135 ) ; +#990 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#991 = CYLINDRICAL_SURFACE ( 'NONE', #1409, 3.500000000000003109 ) ; +#992 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#993 = EDGE_CURVE ( 'NONE', #141, #859, #1408, .T. ) ; +#994 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#995 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#996 = ORIENTED_EDGE ( 'NONE', *, *, #57, .F. ) ; +#997 = ORIENTED_EDGE ( 'NONE', *, *, #1575, .T. ) ; +#998 = AXIS2_PLACEMENT_3D ( 'NONE', #258, #338, #1481 ) ; +#999 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1000 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -63.34999999999998721, -54.17500000000000426 ) ) ; +#1001 = ORIENTED_EDGE ( 'NONE', *, *, #1303, .F. ) ; +#1002 = VERTEX_POINT ( 'NONE', #1152 ) ; +#1003 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -63.00000000000000000 ) ) ; +#1004 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -52.29999999999999716 ) ) ; +#1005 = EDGE_CURVE ( 'NONE', #1525, #1112, #793, .T. ) ; +#1006 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -49.04999999999999716 ) ) ; +#1007 = PRESENTATION_STYLE_ASSIGNMENT (( #1477 ) ) ; +#1008 = LINE ( 'NONE', #810, #483 ) ; +#1009 = CYLINDRICAL_SURFACE ( 'NONE', #332, 10.00000000000000178 ) ; +#1010 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1011 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -57.87499999999998579 ) ) ; +#1012 = EDGE_LOOP ( 'NONE', ( #607, #1294, #979, #805 ) ) ; +#1013 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -50.67499999999999716 ) ) ; +#1014 = ORIENTED_EDGE ( 'NONE', *, *, #303, .F. ) ; +#1015 = AXIS2_PLACEMENT_3D ( 'NONE', #431, #559, #83 ) ; +#1016 = ORIENTED_EDGE ( 'NONE', *, *, #322, .T. ) ; +#1017 = ORIENTED_EDGE ( 'NONE', *, *, #1276, .F. ) ; +#1018 = VERTEX_POINT ( 'NONE', #1038 ) ; +#1019 = EDGE_CURVE ( 'NONE', #782, #670, #266, .T. ) ; +#1020 = FACE_OUTER_BOUND ( 'NONE', #1444, .T. ) ; +#1021 = VECTOR ( 'NONE', #879, 1000.000000000000000 ) ; +#1022 = AXIS2_PLACEMENT_3D ( 'NONE', #196, #800, #1300 ) ; +#1023 = LINE ( 'NONE', #1082, #1323 ) ; +#1024 = ADVANCED_FACE ( 'NONE', ( #515, #1468, #734, #1508, #49, #730, #544 ), #604, .T. ) ; +#1025 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1026 = ORIENTED_EDGE ( 'NONE', *, *, #705, .T. ) ; +#1027 = EDGE_CURVE ( 'NONE', #859, #1002, #841, .T. ) ; +#1028 = ORIENTED_EDGE ( 'NONE', *, *, #741, .F. ) ; +#1029 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1030 = ORIENTED_EDGE ( 'NONE', *, *, #1109, .F. ) ; +#1031 = EDGE_LOOP ( 'NONE', ( #882, #100, #1376, #498 ) ) ; +#1032 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1151 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1329, #350, #1577 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1033 = ADVANCED_FACE ( 'NONE', ( #1505 ), #1420, .T. ) ; +#1034 = ORIENTED_EDGE ( 'NONE', *, *, #230, .T. ) ; +#1035 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .T. ) ; +#1036 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#1037 = EDGE_CURVE ( 'NONE', #1355, #564, #1168, .T. ) ; +#1038 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -52.29999999999999716 ) ) ; +#1039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1040 = VECTOR ( 'NONE', #850, 1000.000000000000000 ) ; +#1041 = ADVANCED_FACE ( 'NONE', ( #956 ), #888, .F. ) ; +#1042 = CIRCLE ( 'NONE', #1390, 3.500000000000003109 ) ; +#1043 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1044 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -56.99999999999998579, 22.49999999999998579 ) ) ; +#1045 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1046 = ADVANCED_FACE ( 'NONE', ( #595, #282 ), #311, .T. ) ; +#1047 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1048 = EDGE_CURVE ( 'NONE', #1523, #111, #314, .T. ) ; +#1049 = ORIENTED_EDGE ( 'NONE', *, *, #655, .F. ) ; +#1050 = ADVANCED_FACE ( 'NONE', ( #1249 ), #394, .F. ) ; +#1051 = VERTEX_POINT ( 'NONE', #934 ) ; +#1052 = FACE_BOUND ( 'NONE', #109, .T. ) ; +#1053 = ORIENTED_EDGE ( 'NONE', *, *, #816, .F. ) ; +#1054 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#1055 = VERTEX_POINT ( 'NONE', #812 ) ; +#1056 = EDGE_LOOP ( 'NONE', ( #215, #786, #511, #1543 ) ) ; +#1057 = AXIS2_PLACEMENT_3D ( 'NONE', #628, #999, #784 ) ; +#1058 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -75.99999999999998579 ) ) ; +#1059 = VECTOR ( 'NONE', #702, 1000.000000000000000 ) ; +#1060 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1061 = LINE ( 'NONE', #255, #25 ) ; +#1062 = EDGE_CURVE ( 'NONE', #48, #634, #875, .T. ) ; +#1063 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#1064 = CIRCLE ( 'NONE', #1480, 1.625000000000001332 ) ; +#1065 = ADVANCED_FACE ( 'NONE', ( #1155 ), #104, .F. ) ; +#1066 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1067 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1068 = AXIS2_PLACEMENT_3D ( 'NONE', #923, #190, #1039 ) ; +#1069 = ORIENTED_EDGE ( 'NONE', *, *, #1278, .F. ) ; +#1070 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1071 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1072 = VERTEX_POINT ( 'NONE', #797 ) ; +#1073 = EDGE_CURVE ( 'NONE', #500, #1391, #1473, .T. ) ; +#1074 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1075 = ORIENTED_EDGE ( 'NONE', *, *, #993, .F. ) ; +#1076 = ADVANCED_FACE ( 'NONE', ( #715, #1052 ), #10, .T. ) ; +#1077 = ORIENTED_EDGE ( 'NONE', *, *, #118, .F. ) ; +#1078 = VERTEX_POINT ( 'NONE', #1439 ) ; +#1079 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -60.84999999999998721, -81.12480768092720496 ) ) ; +#1080 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -63.34999999999998721, -79.49999999999998579 ) ) ; +#1081 = ORIENTED_EDGE ( 'NONE', *, *, #93, .T. ) ; +#1082 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1083 = AXIS2_PLACEMENT_3D ( 'NONE', #912, #1029, #186 ) ; +#1084 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#1085 = CYLINDRICAL_SURFACE ( 'NONE', #1368, 3.500000000000003109 ) ; +#1086 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, 0.0000000000000000000, 12.49999999999998579 ) ) ; +#1087 = CIRCLE ( 'NONE', #986, 3.500000000000003109 ) ; +#1088 = EDGE_CURVE ( 'NONE', #1279, #981, #503, .T. ) ; +#1089 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1090 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1091 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1092 = ORIENTED_EDGE ( 'NONE', *, *, #1226, .F. ) ; +#1093 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -63.34999999999998721, -79.49999999999998579 ) ) ; +#1094 = ORIENTED_EDGE ( 'NONE', *, *, #112, .F. ) ; +#1095 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -63.34999999999998721, -78.20096189432328515 ) ) ; +#1096 = ORIENTED_EDGE ( 'NONE', *, *, #675, .T. ) ; +#1097 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1098 = ORIENTED_EDGE ( 'NONE', *, *, #803, .F. ) ; +#1099 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1100 = EDGE_LOOP ( 'NONE', ( #754, #590, #178, #1017 ) ) ; +#1101 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -56.99999999999998579, 12.49999999999998401 ) ) ; +#1102 = AXIS2_PLACEMENT_3D ( 'NONE', #61, #908, #1337 ) ; +#1103 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1104 = FACE_OUTER_BOUND ( 'NONE', #529, .T. ) ; +#1105 = LINE ( 'NONE', #1079, #355 ) ; +#1106 = CIRCLE ( 'NONE', #579, 1.625000000000001332 ) ; +#1107 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -53.84999999999999432 ) ) ; +#1108 = CYLINDRICAL_SURFACE ( 'NONE', #47, 3.500000000000003109 ) ; +#1109 = EDGE_CURVE ( 'NONE', #442, #48, #948, .T. ) ; +#1110 = VECTOR ( 'NONE', #1483, 1000.000000000000000 ) ; +#1111 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1112 = VERTEX_POINT ( 'NONE', #935 ) ; +#1113 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -61.12499999999997868 ) ) ; +#1114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1115 = ORIENTED_EDGE ( 'NONE', *, *, #1027, .F. ) ; +#1116 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .F. ) ; +#1117 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1118 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -54.17500000000000426 ) ) ; +#1119 = EDGE_LOOP ( 'NONE', ( #887, #1094 ) ) ; +#1120 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1121 = EDGE_CURVE ( 'NONE', #664, #391, #1087, .T. ) ; +#1122 = ORIENTED_EDGE ( 'NONE', *, *, #803, .T. ) ; +#1123 = AXIS2_PLACEMENT_3D ( 'NONE', #418, #1166, #306 ) ; +#1124 = VECTOR ( 'NONE', #489, 1000.000000000000000 ) ; +#1125 = VECTOR ( 'NONE', #233, 1000.000000000000000 ) ; +#1126 = LINE ( 'NONE', #1567, #1203 ) ; +#1127 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#1128 = FACE_BOUND ( 'NONE', #548, .T. ) ; +#1129 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1130 = AXIS2_PLACEMENT_3D ( 'NONE', #701, #336, #1362 ) ; +#1131 = VERTEX_POINT ( 'NONE', #312 ) ; +#1132 = EDGE_LOOP ( 'NONE', ( #473, #259 ) ) ; +#1133 = EDGE_LOOP ( 'NONE', ( #36, #2, #257, #684 ) ) ; +#1134 = EDGE_LOOP ( 'NONE', ( #1558, #132, #1328, #1356 ) ) ; +#1135 = AXIS2_PLACEMENT_3D ( 'NONE', #41, #527, #1358 ) ; +#1136 = EDGE_LOOP ( 'NONE', ( #1030, #497, #666, #65 ) ) ; +#1137 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1138 = AXIS2_PLACEMENT_3D ( 'NONE', #1344, #7, #469 ) ; +#1139 = VECTOR ( 'NONE', #791, 1000.000000000000000 ) ; +#1140 = VECTOR ( 'NONE', #352, 1000.000000000000000 ) ; +#1141 = LINE ( 'NONE', #9, #1110 ) ; +#1142 = EDGE_CURVE ( 'NONE', #1055, #1260, #555, .T. ) ; +#1143 = ORIENTED_EDGE ( 'NONE', *, *, #846, .T. ) ; +#1144 = AXIS2_PLACEMENT_3D ( 'NONE', #422, #1548, #807 ) ; +#1145 = ADVANCED_FACE ( 'NONE', ( #1431 ), #333, .F. ) ; +#1146 = ORIENTED_EDGE ( 'NONE', *, *, #1262, .F. ) ; +#1147 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#1148 = PLANE ( 'NONE', #1083 ) ; +#1149 = EDGE_LOOP ( 'NONE', ( #493, #129, #158, #848, #264, #630, #1307, #825 ) ) ; +#1150 = ORIENTED_EDGE ( 'NONE', *, *, #750, .F. ) ; +#1151 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1329, 'distance_accuracy_value', 'NONE'); +#1152 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -49.04999999999999716 ) ) ; +#1153 = EDGE_CURVE ( 'NONE', #1377, #399, #967, .T. ) ; +#1154 = FACE_OUTER_BOUND ( 'NONE', #769, .T. ) ; +#1155 = FACE_OUTER_BOUND ( 'NONE', #942, .T. ) ; +#1156 = VECTOR ( 'NONE', #1221, 1000.000000000000000 ) ; +#1157 = FACE_OUTER_BOUND ( 'NONE', #1031, .T. ) ; +#1158 = AXIS2_PLACEMENT_3D ( 'NONE', #1327, #204, #225 ) ; +#1159 = CYLINDRICAL_SURFACE ( 'NONE', #247, 1.625000000000001332 ) ; +#1160 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1161 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1162 = ADVANCED_FACE ( 'NONE', ( #696 ), #798, .T. ) ; +#1163 = EDGE_CURVE ( 'NONE', #273, #1051, #1412, .T. ) ; +#1164 = EDGE_LOOP ( 'NONE', ( #241, #819, #712, #239 ) ) ; +#1165 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#1166 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1167 = VERTEX_POINT ( 'NONE', #1546 ) ; +#1168 = CIRCLE ( 'NONE', #1357, 3.500000000000003109 ) ; +#1169 = VERTEX_POINT ( 'NONE', #928 ) ; +#1170 = ORIENTED_EDGE ( 'NONE', *, *, #900, .T. ) ; +#1171 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999997868, -47.49999999999999289 ) ) ; +#1172 = ORIENTED_EDGE ( 'NONE', *, *, #484, .F. ) ; +#1173 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1174 = ADVANCED_FACE ( 'NONE', ( #251 ), #1341, .F. ) ; +#1175 = SURFACE_SIDE_STYLE ('',( #334 ) ) ; +#1176 = PLANE ( 'NONE', #695 ) ; +#1177 = CIRCLE ( 'NONE', #649, 3.500000000000003109 ) ; +#1178 = AXIS2_PLACEMENT_3D ( 'NONE', #613, #1486, #745 ) ; +#1179 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -47.17499999999999716 ) ) ; +#1180 = VECTOR ( 'NONE', #151, 1000.000000000000000 ) ; +#1181 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 3.635307873690756337E-16, -1.000000000000000000 ) ) ; +#1182 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1183 = EDGE_CURVE ( 'NONE', #759, #1055, #638, .T. ) ; +#1184 = CLOSED_SHELL ( 'NONE', ( #1145, #799, #652, #1528, #1196, #1050, #1208, #427, #174, #301, #1065, #545, #198, #1401, #433, #91, #815, #525, #1550, #1174, #551, #1432, #326, #294, #1162, #832, #1024, #691, #1280, #902, #1314, #532, #408, #1413, #402, #1438, #1033, #71, #936, #103, #78, #1538, #778, #567, #1076, #115, #1046, #1041 ) ) ; +#1185 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -63.34999999999998721, -59.49999999999998579 ) ) ; +#1186 = EDGE_LOOP ( 'NONE', ( #1150, #860, #804, #1542 ) ) ; +#1187 = EDGE_LOOP ( 'NONE', ( #1026, #959 ) ) ; +#1188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1189 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1190 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -79.49999999999998579 ) ) ; +#1191 = VERTEX_POINT ( 'NONE', #678 ) ; +#1192 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#1193 = ORIENTED_EDGE ( 'NONE', *, *, #1183, .F. ) ; +#1194 = AXIS2_PLACEMENT_3D ( 'NONE', #1465, #127, #724 ) ; +#1195 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -47.17499999999999716 ) ) ; +#1196 = ADVANCED_FACE ( 'NONE', ( #653 ), #72, .F. ) ; +#1197 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1198 = VECTOR ( 'NONE', #119, 1000.000000000000000 ) ; +#1199 = PLANE ( 'NONE', #267 ) ; +#1200 = EDGE_CURVE ( 'NONE', #1112, #1212, #155, .T. ) ; +#1201 = CIRCLE ( 'NONE', #1581, 3.500000000000003109 ) ; +#1202 = FILL_AREA_STYLE_COLOUR ( '', #538 ) ; +#1203 = VECTOR ( 'NONE', #139, 1000.000000000000000 ) ; +#1204 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#1205 = CIRCLE ( 'NONE', #161, 3.500000000000003109 ) ; +#1206 = CARTESIAN_POINT ( 'NONE', ( 36.35000000000000142, -63.34999999999998721, -63.84999999999998721 ) ) ; +#1207 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -49.04999999999999716 ) ) ; +#1208 = ADVANCED_FACE ( 'NONE', ( #598 ), #1320, .F. ) ; +#1209 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #226 ) ; +#1210 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'frame_base_181126', ( #144, #1547 ), #627 ) ; +#1211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.088269684226890842E-17, 1.000000000000000000 ) ) ; +#1212 = VERTEX_POINT ( 'NONE', #436 ) ; +#1213 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -50.67499999999999716 ) ) ; +#1214 = ORIENTED_EDGE ( 'NONE', *, *, #64, .T. ) ; +#1215 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#1216 = ORIENTED_EDGE ( 'NONE', *, *, #157, .T. ) ; +#1217 = EDGE_LOOP ( 'NONE', ( #1379, #937, #387, #1291 ) ) ; +#1218 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#1219 = AXIS2_PLACEMENT_3D ( 'NONE', #739, #133, #1479 ) ; +#1220 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -60.84999999999998721, -80.79903810567668643 ) ) ; +#1221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1222 = ORIENTED_EDGE ( 'NONE', *, *, #14, .F. ) ; +#1223 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, -63.34999999999998721, -43.84999999999999432 ) ) ; +#1224 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -60.84999999999998721, -78.20096189432328515 ) ) ; +#1225 = CIRCLE ( 'NONE', #300, 3.500000000000003109 ) ; +#1226 = EDGE_CURVE ( 'NONE', #526, #1426, #721, .T. ) ; +#1227 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1228 = LINE ( 'NONE', #1565, #762 ) ; +#1229 = CIRCLE ( 'NONE', #172, 3.500000000000003109 ) ; +#1230 = CIRCLE ( 'NONE', #779, 3.500000000000003109 ) ; +#1231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1232 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1233 = ORIENTED_EDGE ( 'NONE', *, *, #629, .F. ) ; +#1234 = VERTEX_POINT ( 'NONE', #663 ) ; +#1235 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1236 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -56.99999999999997868, -57.87499999999998579 ) ) ; +#1237 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -63.34999999999998721, -59.50000000000000000 ) ) ; +#1238 = ORIENTED_EDGE ( 'NONE', *, *, #494, .F. ) ; +#1239 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1240 = EDGE_CURVE ( 'NONE', #643, #757, #1008, .T. ) ; +#1241 = EDGE_LOOP ( 'NONE', ( #445, #147, #279, #1556 ) ) ; +#1242 = EDGE_LOOP ( 'NONE', ( #52, #863, #67, #1559, #429, #801, #787, #1418, #781, #566, #543, #1034, #199, #177, #341, #866, #867, #1421, #195, #957, #780, #369 ) ) ; +#1243 = AXIS2_PLACEMENT_3D ( 'NONE', #1084, #1090, #114 ) ; +#1244 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -63.34999999999998721, -82.99999999999998579 ) ) ; +#1245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1246 = LINE ( 'NONE', #886, #353 ) ; +#1247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1248 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1249 = FACE_OUTER_BOUND ( 'NONE', #307, .T. ) ; +#1250 = EDGE_CURVE ( 'NONE', #1490, #526, #1177, .T. ) ; +#1251 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1252 = FACE_BOUND ( 'NONE', #260, .T. ) ; +#1253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1254 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -63.34999999999998721, -50.67499999999999716 ) ) ; +#1255 = AXIS2_PLACEMENT_3D ( 'NONE', #1185, #689, #1316 ) ; +#1256 = ORIENTED_EDGE ( 'NONE', *, *, #910, .F. ) ; +#1257 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1258 = ORIENTED_EDGE ( 'NONE', *, *, #1339, .F. ) ; +#1259 = ORIENTED_EDGE ( 'NONE', *, *, #857, .T. ) ; +#1260 = VERTEX_POINT ( 'NONE', #1036 ) ; +#1261 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -75.99999999999998579 ) ) ; +#1262 = EDGE_CURVE ( 'NONE', #1470, #1355, #1105, .T. ) ; +#1263 = EDGE_LOOP ( 'NONE', ( #1485, #823, #884, #295, #711, #160, #751, #918, #753, #632, #1116, #1336, #428, #411 ) ) ; +#1264 = AXIS2_PLACEMENT_3D ( 'NONE', #709, #582, #1120 ) ; +#1265 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1266 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1267 = CYLINDRICAL_SURFACE ( 'NONE', #1219, 3.500000000000003109 ) ; +#1268 = CYLINDRICAL_SURFACE ( 'NONE', #1522, 3.500000000000003109 ) ; +#1269 = LINE ( 'NONE', #95, #796 ) ; +#1270 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -49.04999999999999716 ) ) ; +#1271 = AXIS2_PLACEMENT_3D ( 'NONE', #869, #725, #845 ) ; +#1272 = ORIENTED_EDGE ( 'NONE', *, *, #622, .T. ) ; +#1273 = VERTEX_POINT ( 'NONE', #1578 ) ; +#1274 = ORIENTED_EDGE ( 'NONE', *, *, #727, .T. ) ; +#1275 = ORIENTED_EDGE ( 'NONE', *, *, #1226, .T. ) ; +#1276 = EDGE_CURVE ( 'NONE', #670, #1525, #1514, .T. ) ; +#1277 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -56.99999999999997868, -63.84999999999998721 ) ) ; +#1278 = EDGE_CURVE ( 'NONE', #197, #384, #167, .T. ) ; +#1279 = VERTEX_POINT ( 'NONE', #1063 ) ; +#1280 = ADVANCED_FACE ( 'NONE', ( #43 ), #951, .F. ) ; +#1281 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -63.34999999999998721, -79.49999999999998579 ) ) ; +#1282 = AXIS2_PLACEMENT_3D ( 'NONE', #447, #1430, #808 ) ; +#1283 = LINE ( 'NONE', #718, #120 ) ; +#1284 = VECTOR ( 'NONE', #1494, 1000.000000000000000 ) ; +#1285 = FACE_OUTER_BOUND ( 'NONE', #926, .T. ) ; +#1286 = VECTOR ( 'NONE', #620, 1000.000000000000000 ) ; +#1287 = EDGE_CURVE ( 'NONE', #125, #978, #854, .T. ) ; +#1288 = ORIENTED_EDGE ( 'NONE', *, *, #761, .T. ) ; +#1289 = ORIENTED_EDGE ( 'NONE', *, *, #523, .F. ) ; +#1290 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1291 = ORIENTED_EDGE ( 'NONE', *, *, #938, .T. ) ; +#1292 = CARTESIAN_POINT ( 'NONE', ( -26.34999999999999787, -56.99999999999997868, -93.84999999999999432 ) ) ; +#1293 = EDGE_LOOP ( 'NONE', ( #1510, #1028, #85, #517 ) ) ; +#1294 = ORIENTED_EDGE ( 'NONE', *, *, #271, .T. ) ; +#1295 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -59.50000000000000000 ) ) ; +#1296 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -77.87499999999998579 ) ) ; +#1297 = AXIS2_PLACEMENT_3D ( 'NONE', #298, #914, #1398 ) ; +#1298 = LINE ( 'NONE', #478, #672 ) ; +#1299 = FACE_OUTER_BOUND ( 'NONE', #1134, .T. ) ; +#1300 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1301 = VECTOR ( 'NONE', #693, 1000.000000000000000 ) ; +#1302 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#1303 = EDGE_CURVE ( 'NONE', #216, #643, #205, .T. ) ; +#1304 = CARTESIAN_POINT ( 'NONE', ( 36.35000000000000142, -63.34999999999998721, -53.84999999999999432 ) ) ; +#1305 = PRODUCT ( 'frame_base_181126', 'frame_base_181126', '', ( #1472 ) ) ; +#1306 = ORIENTED_EDGE ( 'NONE', *, *, #900, .F. ) ; +#1307 = ORIENTED_EDGE ( 'NONE', *, *, #514, .F. ) ; +#1308 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#1309 = ORIENTED_EDGE ( 'NONE', *, *, #193, .T. ) ; +#1310 = AXIS2_PLACEMENT_3D ( 'NONE', #1384, #39, #286 ) ; +#1311 = ORIENTED_EDGE ( 'NONE', *, *, #1326, .T. ) ; +#1312 = ORIENTED_EDGE ( 'NONE', *, *, #75, .T. ) ; +#1313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1314 = ADVANCED_FACE ( 'NONE', ( #90, #1383 ), #570, .T. ) ; +#1315 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -50.67499999999999716 ) ) ; +#1316 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1317 = EDGE_CURVE ( 'NONE', #1078, #1234, #1283, .T. ) ; +#1318 = FACE_OUTER_BOUND ( 'NONE', #397, .T. ) ; +#1319 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1320 = CYLINDRICAL_SURFACE ( 'NONE', #224, 3.500000000000003109 ) ; +#1321 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1322 = AXIS2_PLACEMENT_3D ( 'NONE', #1554, #316, #207 ) ; +#1323 = VECTOR ( 'NONE', #242, 1000.000000000000000 ) ; +#1324 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1325 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1326 = EDGE_CURVE ( 'NONE', #772, #51, #775, .T. ) ; +#1327 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#1328 = ORIENTED_EDGE ( 'NONE', *, *, #203, .T. ) ; +#1329 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1330 = EDGE_LOOP ( 'NONE', ( #68, #1143 ) ) ; +#1331 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1332 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1333 = ORIENTED_EDGE ( 'NONE', *, *, #388, .T. ) ; +#1334 = VERTEX_POINT ( 'NONE', #240 ) ; +#1335 = AXIS2_PLACEMENT_3D ( 'NONE', #1411, #669, #608 ) ; +#1336 = ORIENTED_EDGE ( 'NONE', *, *, #1073, .T. ) ; +#1337 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1338 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1339 = EDGE_CURVE ( 'NONE', #323, #216, #674, .T. ) ; +#1340 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, 22.49999999999998579 ) ) ; +#1341 = CYLINDRICAL_SURFACE ( 'NONE', #1322, 1.625000000000001332 ) ; +#1342 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#1343 = FACE_OUTER_BOUND ( 'NONE', #63, .T. ) ; +#1344 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -59.49999999999998579 ) ) ; +#1345 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1346 = AXIS2_PLACEMENT_3D ( 'NONE', #995, #1378, #874 ) ; +#1347 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -63.34999999999998721, -79.49999999999998579 ) ) ; +#1348 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#1349 = ORIENTED_EDGE ( 'NONE', *, *, #1250, .T. ) ; +#1350 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1351 = VERTEX_POINT ( 'NONE', #1195 ) ; +#1352 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1353 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1354 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1355 = VERTEX_POINT ( 'NONE', #964 ) ; +#1356 = ORIENTED_EDGE ( 'NONE', *, *, #687, .T. ) ; +#1357 = AXIS2_PLACEMENT_3D ( 'NONE', #1529, #1025, #169 ) ; +#1358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1359 = ORIENTED_EDGE ( 'NONE', *, *, #1360, .T. ) ; +#1360 = EDGE_CURVE ( 'NONE', #757, #759, #989, .T. ) ; +#1361 = AXIS2_PLACEMENT_3D ( 'NONE', #20, #467, #601 ) ; +#1362 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1363 = FACE_OUTER_BOUND ( 'NONE', #496, .T. ) ; +#1364 = FACE_OUTER_BOUND ( 'NONE', #1149, .T. ) ; +#1365 = LINE ( 'NONE', #424, #698 ) ; +#1366 = LINE ( 'NONE', #965, #558 ) ; +#1367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1368 = AXIS2_PLACEMENT_3D ( 'NONE', #878, #1253, #1114 ) ; +#1369 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -63.34999999999998721, 22.49999999999998579 ) ) ; +#1370 = ORIENTED_EDGE ( 'NONE', *, *, #184, .T. ) ; +#1371 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1372 = VECTOR ( 'NONE', #542, 1000.000000000000000 ) ; +#1373 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1374 = ORIENTED_EDGE ( 'NONE', *, *, #899, .T. ) ; +#1375 = EDGE_CURVE ( 'NONE', #51, #664, #437, .T. ) ; +#1376 = ORIENTED_EDGE ( 'NONE', *, *, #344, .F. ) ; +#1377 = VERTEX_POINT ( 'NONE', #826 ) ; +#1378 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1379 = ORIENTED_EDGE ( 'NONE', *, *, #622, .F. ) ; +#1380 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1381 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -56.99999999999997868, -77.87499999999998579 ) ) ; +#1382 = CIRCLE ( 'NONE', #894, 1.625000000000001332 ) ; +#1383 = FACE_BOUND ( 'NONE', #291, .T. ) ; +#1384 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#1385 = LINE ( 'NONE', #1236, #1140 ) ; +#1386 = AXIS2_PLACEMENT_3D ( 'NONE', #1171, #420, #550 ) ; +#1387 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1388 = EDGE_LOOP ( 'NONE', ( #1092, #546, #1214, #347 ) ) ; +#1389 = ORIENTED_EDGE ( 'NONE', *, *, #1488, .T. ) ; +#1390 = AXIS2_PLACEMENT_3D ( 'NONE', #726, #1111, #619 ) ; +#1391 = VERTEX_POINT ( 'NONE', #943 ) ; +#1392 = ORIENTED_EDGE ( 'NONE', *, *, #1451, .F. ) ; +#1393 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -50.67499999999999716 ) ) ; +#1394 = AXIS2_PLACEMENT_3D ( 'NONE', #390, #890, #281 ) ; +#1395 = VECTOR ( 'NONE', #820, 1000.000000000000000 ) ; +#1396 = VECTOR ( 'NONE', #631, 1000.000000000000000 ) ; +#1397 = EDGE_CURVE ( 'NONE', #391, #111, #1228, .T. ) ; +#1398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1399 = AXIS2_PLACEMENT_3D ( 'NONE', #361, #1257, #491 ) ; +#1400 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .T. ) ; +#1401 = ADVANCED_FACE ( 'NONE', ( #1363 ), #8, .F. ) ; +#1402 = ORIENTED_EDGE ( 'NONE', *, *, #381, .F. ) ; +#1403 = ORIENTED_EDGE ( 'NONE', *, *, #365, .F. ) ; +#1404 = EDGE_CURVE ( 'NONE', #1470, #963, #742, .T. ) ; +#1405 = ORIENTED_EDGE ( 'NONE', *, *, #112, .T. ) ; +#1406 = EDGE_LOOP ( 'NONE', ( #1402, #1069 ) ) ; +#1407 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -60.84999999999998721, -59.50000000000000000 ) ) ; +#1408 = CIRCLE ( 'NONE', #905, 1.625000000000001332 ) ; +#1409 = AXIS2_PLACEMENT_3D ( 'NONE', #1192, #443, #211 ) ; +#1410 = CIRCLE ( 'NONE', #476, 1.624999999999994449 ) ; +#1411 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -60.84999999999998721, -50.67499999999999716 ) ) ; +#1412 = LINE ( 'NONE', #76, #374 ) ; +#1413 = ADVANCED_FACE ( 'NONE', ( #1299 ), #1267, .F. ) ; +#1414 = EDGE_CURVE ( 'NONE', #412, #1424, #1061, .T. ) ; +#1415 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1416 = EDGE_LOOP ( 'NONE', ( #1115, #844, #821, #1053 ) ) ; +#1417 = AXIS2_PLACEMENT_3D ( 'NONE', #789, #1290, #69 ) ; +#1418 = ORIENTED_EDGE ( 'NONE', *, *, #1575, .F. ) ; +#1419 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -49.04999999999999716 ) ) ; +#1420 = CYLINDRICAL_SURFACE ( 'NONE', #1102, 10.00000000000000178 ) ; +#1421 = ORIENTED_EDGE ( 'NONE', *, *, #1005, .T. ) ; +#1422 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1423 = CARTESIAN_POINT ( 'NONE', ( 80.00000000000000000, 0.0000000000000000000, 12.49999999999998579 ) ) ; +#1424 = VERTEX_POINT ( 'NONE', #605 ) ; +#1425 = FILL_AREA_STYLE ('',( #1551 ) ) ; +#1426 = VERTEX_POINT ( 'NONE', #370 ) ; +#1427 = EDGE_CURVE ( 'NONE', #475, #1334, #417, .T. ) ; +#1428 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1429 = AXIS2_PLACEMENT_3D ( 'NONE', #1407, #1045, #325 ) ; +#1430 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1431 = FACE_OUTER_BOUND ( 'NONE', #690, .T. ) ; +#1432 = ADVANCED_FACE ( 'NONE', ( #1020 ), #383, .F. ) ; +#1433 = CIRCLE ( 'NONE', #457, 3.500000000000003109 ) ; +#1434 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1435 = CYLINDRICAL_SURFACE ( 'NONE', #1557, 1.625000000000001332 ) ; +#1436 = EDGE_CURVE ( 'NONE', #500, #1078, #946, .T. ) ; +#1437 = EDGE_LOOP ( 'NONE', ( #409, #192, #321, #1193 ) ) ; +#1438 = ADVANCED_FACE ( 'NONE', ( #460 ), #621, .T. ) ; +#1439 = CARTESIAN_POINT ( 'NONE', ( -36.35000000000000142, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1440 = ORIENTED_EDGE ( 'NONE', *, *, #889, .F. ) ; +#1441 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1442 = VERTEX_POINT ( 'NONE', #1101 ) ; +#1443 = AXIS2_PLACEMENT_3D ( 'NONE', #829, #944, #955 ) ; +#1444 = EDGE_LOOP ( 'NONE', ( #1259, #802, #1035, #1493 ) ) ; +#1445 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #237, 'distance_accuracy_value', 'NONE'); +#1446 = ORIENTED_EDGE ( 'NONE', *, *, #1153, .T. ) ; +#1447 = DIRECTION ( 'NONE', ( 1.387778780781445478E-15, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1448 = CARTESIAN_POINT ( 'NONE', ( 26.34999999999999787, -60.84999999999998721, -80.79903810567668643 ) ) ; +#1449 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .F. ) ; +#1450 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1451 = EDGE_CURVE ( 'NONE', #757, #323, #930, .T. ) ; +#1452 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1453 = CYLINDRICAL_SURFACE ( 'NONE', #642, 3.500000000000003109 ) ; +#1454 = CIRCLE ( 'NONE', #680, 3.500000000000003109 ) ; +#1455 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1457 = FACE_OUTER_BOUND ( 'NONE', #714, .T. ) ; +#1458 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #535, #896 ) ; +#1459 = CIRCLE ( 'NONE', #1394, 3.500000000000003109 ) ; +#1460 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1461 = EDGE_CURVE ( 'NONE', #384, #1018, #285, .T. ) ; +#1462 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1463 = ORIENTED_EDGE ( 'NONE', *, *, #1183, .T. ) ; +#1464 = SURFACE_SIDE_STYLE ('',( #154 ) ) ; +#1465 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -6.106445183277854064E-14, -93.85000000000006537 ) ) ; +#1466 = EDGE_LOOP ( 'NONE', ( #1289, #681, #1146, #569 ) ) ; +#1467 = AXIS2_PLACEMENT_3D ( 'NONE', #1248, #1495, #1373 ) ; +#1468 = FACE_BOUND ( 'NONE', #840, .T. ) ; +#1469 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -60.84999999999998721, -62.99999999999998579 ) ) ; +#1470 = VERTEX_POINT ( 'NONE', #137 ) ; +#1471 = VERTEX_POINT ( 'NONE', #376 ) ; +#1472 = PRODUCT_CONTEXT ( 'NONE', #833, 'mechanical' ) ; +#1473 = CIRCLE ( 'NONE', #1568, 10.00000000000000178 ) ; +#1474 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -63.34999999999998721, -50.67499999999999716 ) ) ; +#1475 = AXIS2_PLACEMENT_3D ( 'NONE', #331, #223, #1338 ) ; +#1476 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -81.12499999999998579 ) ) ; +#1477 = SURFACE_STYLE_USAGE ( .BOTH. , #1464 ) ; +#1478 = VECTOR ( 'NONE', #557, 1000.000000000000000 ) ; +#1479 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1480 = AXIS2_PLACEMENT_3D ( 'NONE', #1190, #1321, #703 ) ; +#1481 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1482 = LINE ( 'NONE', #635, #136 ) ; +#1483 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1484 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -52.29999999999999716 ) ) ; +#1485 = ORIENTED_EDGE ( 'NONE', *, *, #1019, .F. ) ; +#1486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1487 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000000000, -63.34999999999998721, -53.84999999999999432 ) ) ; +#1488 = EDGE_CURVE ( 'NONE', #366, #683, #552, .T. ) ; +#1489 = VERTEX_POINT ( 'NONE', #142 ) ; +#1490 = VERTEX_POINT ( 'NONE', #1118 ) ; +#1491 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#1492 = AXIS2_PLACEMENT_3D ( 'NONE', #153, #1247, #1371 ) ; +#1493 = ORIENTED_EDGE ( 'NONE', *, *, #1317, .T. ) ; +#1494 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1495 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1496 = EDGE_CURVE ( 'NONE', #442, #589, #183, .T. ) ; +#1497 = CIRCLE ( 'NONE', #1297, 10.00000000000000000 ) ; +#1498 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -63.34999999999998721, -63.00000000000000000 ) ) ; +#1499 = CIRCLE ( 'NONE', #1138, 1.624999999999994449 ) ; +#1500 = VECTOR ( 'NONE', #1239, 1000.000000000000000 ) ; +#1501 = FACE_OUTER_BOUND ( 'NONE', #1056, .T. ) ; +#1502 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1561, 'distance_accuracy_value', 'NONE'); +#1503 = AXIS2_PLACEMENT_3D ( 'NONE', #755, #492, #148 ) ; +#1504 = CARTESIAN_POINT ( 'NONE', ( 70.00000000000001421, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1505 = FACE_OUTER_BOUND ( 'NONE', #236, .T. ) ; +#1506 = ORIENTED_EDGE ( 'NONE', *, *, #594, .F. ) ; +#1507 = EDGE_CURVE ( 'NONE', #173, #661, #1225, .T. ) ; +#1508 = FACE_BOUND ( 'NONE', #1330, .T. ) ; +#1509 = VERTEX_POINT ( 'NONE', #1342 ) ; +#1510 = ORIENTED_EDGE ( 'NONE', *, *, #727, .F. ) ; +#1511 = ORIENTED_EDGE ( 'NONE', *, *, #534, .F. ) ; +#1512 = AXIS2_PLACEMENT_3D ( 'NONE', #624, #1, #728 ) ; +#1513 = CYLINDRICAL_SURFACE ( 'NONE', #1467, 3.500000000000003109 ) ; +#1514 = LINE ( 'NONE', #1204, #521 ) ; +#1515 = EDGE_CURVE ( 'NONE', #399, #1470, #249, .T. ) ; +#1516 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1517 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#1518 = CYLINDRICAL_SURFACE ( 'NONE', #102, 1.624999999999994449 ) ; +#1519 = AXIS2_PLACEMENT_3D ( 'NONE', #1237, #495, #862 ) ; +#1520 = EDGE_LOOP ( 'NONE', ( #1449, #919, #15, #562 ) ) ; +#1521 = VERTEX_POINT ( 'NONE', #968 ) ; +#1522 = AXIS2_PLACEMENT_3D ( 'NONE', #970, #1103, #12 ) ; +#1523 = VERTEX_POINT ( 'NONE', #1095 ) ; +#1524 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -56.99999999999997868, -59.50000000000000000 ) ) ; +#1525 = VERTEX_POINT ( 'NONE', #756 ) ; +#1526 = ORIENTED_EDGE ( 'NONE', *, *, #444, .T. ) ; +#1527 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1528 = ADVANCED_FACE ( 'NONE', ( #853 ), #1513, .F. ) ; +#1529 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1530 = CIRCLE ( 'NONE', #554, 1.624999999999994449 ) ; +#1531 = LINE ( 'NONE', #563, #873 ) ; +#1532 = LINE ( 'NONE', #24, #1284 ) ; +#1533 = VECTOR ( 'NONE', #616, 1000.000000000000000 ) ; +#1534 = LINE ( 'NONE', #553, #814 ) ; +#1535 = EDGE_CURVE ( 'NONE', #175, #1072, #1298, .T. ) ; +#1536 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -56.99999999999997868, -79.49999999999998579 ) ) ; +#1537 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1538 = ADVANCED_FACE ( 'NONE', ( #760, #719 ), #597, .T. ) ; +#1539 = VERTEX_POINT ( 'NONE', #244 ) ; +#1540 = EDGE_LOOP ( 'NONE', ( #592, #921, #421, #1098 ) ) ; +#1541 = SURFACE_STYLE_USAGE ( .BOTH. , #1175 ) ; +#1542 = ORIENTED_EDGE ( 'NONE', *, *, #1276, .T. ) ; +#1543 = ORIENTED_EDGE ( 'NONE', *, *, #1287, .F. ) ; +#1544 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001421, -63.34999999999998721, -55.99999999999997868 ) ) ; +#1545 = ORIENTED_EDGE ( 'NONE', *, *, #783, .F. ) ; +#1546 = CARTESIAN_POINT ( 'NONE', ( 36.35000000000000853, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1547 = AXIS2_PLACEMENT_3D ( 'NONE', #340, #345, #1089 ) ; +#1548 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1549 = VECTOR ( 'NONE', #699, 1000.000000000000000 ) ; +#1550 = ADVANCED_FACE ( 'NONE', ( #1104 ), #415, .F. ) ; +#1551 = FILL_AREA_STYLE_COLOUR ( '', #1517 ) ; +#1552 = EDGE_CURVE ( 'NONE', #1377, #1169, #636, .T. ) ; +#1553 = LINE ( 'NONE', #520, #915 ) ; +#1554 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -50.67499999999999716 ) ) ; +#1555 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1556 = ORIENTED_EDGE ( 'NONE', *, *, #280, .T. ) ; +#1557 = AXIS2_PLACEMENT_3D ( 'NONE', #110, #682, #1441 ) ; +#1558 = ORIENTED_EDGE ( 'NONE', *, *, #271, .F. ) ; +#1559 = ORIENTED_EDGE ( 'NONE', *, *, #1404, .F. ) ; +#1560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1561 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1562 = ORIENTED_EDGE ( 'NONE', *, *, #140, .T. ) ; +#1563 = ORIENTED_EDGE ( 'NONE', *, *, #1121, .T. ) ; +#1564 = EDGE_CURVE ( 'NONE', #589, #634, #831, .T. ) ; +#1565 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001563, -60.84999999999998721, -75.99999999999998579 ) ) ; +#1566 = CARTESIAN_POINT ( 'NONE', ( -80.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1567 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -60.84999999999998721, -47.17499999999999716 ) ) ; +#1568 = AXIS2_PLACEMENT_3D ( 'NONE', #171, #1352, #659 ) ; +#1569 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -53.84999999999999432 ) ) ; +#1570 = CIRCLE ( 'NONE', #410, 10.00000000000000178 ) ; +#1571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1572 = CIRCLE ( 'NONE', #1158, 3.500000000000003109 ) ; +#1573 = CARTESIAN_POINT ( 'NONE', ( -23.25000000000001066, -60.84999999999998721, -79.49999999999998579 ) ) ; +#1574 = CARTESIAN_POINT ( 'NONE', ( 36.35000000000000142, -56.99999999999997868, -63.84999999999998721 ) ) ; +#1575 = EDGE_CURVE ( 'NONE', #1539, #1169, #794, .T. ) ; +#1576 = CARTESIAN_POINT ( 'NONE', ( -70.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1577 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1578 = CARTESIAN_POINT ( 'NONE', ( 23.10000000000001208, -63.34999999999998721, -55.99999999999999289 ) ) ; +#1579 = ORIENTED_EDGE ( 'NONE', *, *, #21, .F. ) ; +#1580 = EDGE_LOOP ( 'NONE', ( #243, #1274, #446, #647 ) ) ; +#1581 = AXIS2_PLACEMENT_3D ( 'NONE', #1254, #1117, #32 ) ; +#1582 = ORIENTED_EDGE ( 'NONE', *, *, #741, .T. ) ; +#1583 = ORIENTED_EDGE ( 'NONE', *, *, #584, .F. ) ; +#1584 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Models/litscher_carbonfab_181126/Printed/frame_base_181126.STL b/Models/litscher_carbonfab_181126/Printed/frame_base_181126.STL new file mode 100644 index 0000000..b3ce6c7 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/frame_base_181126.STL Binary files differ diff --git a/Models/litscher_carbonfab_181126/Printed/frame_vert_181126.STEP b/Models/litscher_carbonfab_181126/Printed/frame_vert_181126.STEP new file mode 100644 index 0000000..9cfc01c --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/frame_vert_181126.STEP @@ -0,0 +1,3277 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('frame_vert_181126.STEP', + '2018-11-27T00:42:36', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2018', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = AXIS2_PLACEMENT_3D ( 'NONE', #2465, #88, #2343 ) ; +#2 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000003902, 39.62699983561905270, -49.99999999999999289 ) ) ; +#4 = ORIENTED_EDGE ( 'NONE', *, *, #1415, .T. ) ; +#3 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#5 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999994449, 0.0000000000000000000 ) ) ; +#6 = EDGE_CURVE ( 'NONE', #3160, #2772, #900, .T. ) ; +#7 = ADVANCED_FACE ( 'NONE', ( #735 ), #344, .F. ) ; +#8 = VERTEX_POINT ( 'NONE', #163 ) ; +#9 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#10 = CIRCLE ( 'NONE', #1181, 2.999999999999999112 ) ; +#11 = EDGE_CURVE ( 'NONE', #2480, #829, #146, .T. ) ; +#12 = LINE ( 'NONE', #1518, #1845 ) ; +#13 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#14 = AXIS2_PLACEMENT_3D ( 'NONE', #750, #1285, #2034 ) ; +#15 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#16 = CIRCLE ( 'NONE', #849, 1.624999999999999778 ) ; +#17 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 36.18094681733414575, 22.49999999999997868 ) ) ; +#18 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.543264972207944962E-15, 1.966907177246537942E-31 ) ) ; +#19 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -54.09999999999999432, -50.67499999999999716 ) ) ; +#20 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#21 = VECTOR ( 'NONE', #2051, 1000.000000000000000 ) ; +#22 = FACE_OUTER_BOUND ( 'NONE', #1155, .T. ) ; +#23 = ORIENTED_EDGE ( 'NONE', *, *, #514, .F. ) ; +#24 = EDGE_LOOP ( 'NONE', ( #898, #2578, #2136, #3116 ) ) ; +#25 = AXIS2_PLACEMENT_3D ( 'NONE', #2721, #205, #727 ) ; +#26 = VERTEX_POINT ( 'NONE', #3206 ) ; +#27 = ORIENTED_EDGE ( 'NONE', *, *, #2482, .T. ) ; +#28 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 59.43094681733413864, -50.00000000000000000 ) ) ; +#29 = CARTESIAN_POINT ( 'NONE', ( 13.75000000000001776, -15.49999999999997868, -53.85000000000000142 ) ) ; +#30 = CARTESIAN_POINT ( 'NONE', ( 13.35000000000004583, -36.99999999999999289, -50.67499999999999716 ) ) ; +#31 = EDGE_CURVE ( 'NONE', #2983, #2770, #385, .T. ) ; +#32 = ORIENTED_EDGE ( 'NONE', *, *, #1844, .T. ) ; +#33 = ADVANCED_FACE ( 'NONE', ( #2009 ), #622, .F. ) ; +#34 = VECTOR ( 'NONE', #217, 1000.000000000000000 ) ; +#35 = ORIENTED_EDGE ( 'NONE', *, *, #979, .F. ) ; +#36 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -52.29999999999999716 ) ) ; +#37 = VERTEX_POINT ( 'NONE', #2520 ) ; +#38 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 56.03884078076433894, -47.49999999999999289 ) ) ; +#39 = VERTEX_POINT ( 'NONE', #741 ) ; +#40 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #268 ) ) ; +#41 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#42 = VERTEX_POINT ( 'NONE', #1000 ) ; +#43 = ORIENTED_EDGE ( 'NONE', *, *, #1685, .T. ) ; +#44 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000004441, 4.551642501394056340E-16, -51.34999999999999432 ) ) ; +#45 = VERTEX_POINT ( 'NONE', #951 ) ; +#46 = ADVANCED_FACE ( 'NONE', ( #2811 ), #230, .F. ) ; +#47 = AXIS2_PLACEMENT_3D ( 'NONE', #2584, #1114, #1231 ) ; +#48 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -47.49999999999998579 ) ) ; +#49 = EDGE_CURVE ( 'NONE', #1978, #2353, #781, .T. ) ; +#50 = EDGE_LOOP ( 'NONE', ( #908, #1578, #1559, #2629 ) ) ; +#51 = VECTOR ( 'NONE', #2563, 1000.000000000000000 ) ; +#52 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#53 = VECTOR ( 'NONE', #18, 1000.000000000000000 ) ; +#54 = FACE_OUTER_BOUND ( 'NONE', #1932, .T. ) ; +#55 = SURFACE_SIDE_STYLE ('',( #1524 ) ) ; +#56 = CYLINDRICAL_SURFACE ( 'NONE', #2587, 4.000000000000001776 ) ; +#57 = ORIENTED_EDGE ( 'NONE', *, *, #1140, .F. ) ; +#58 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 62.82305285390393834, -49.99999999999999289 ) ) ; +#59 = CYLINDRICAL_SURFACE ( 'NONE', #2258, 2.999999999999999112 ) ; +#60 = ORIENTED_EDGE ( 'NONE', *, *, #2384, .T. ) ; +#61 = EDGE_CURVE ( 'NONE', #1324, #2669, #1749, .T. ) ; +#62 = ORIENTED_EDGE ( 'NONE', *, *, #343, .F. ) ; +#63 = FACE_BOUND ( 'NONE', #820, .T. ) ; +#64 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#65 = VERTEX_POINT ( 'NONE', #1011 ) ; +#66 = FACE_BOUND ( 'NONE', #1454, .T. ) ; +#67 = VERTEX_POINT ( 'NONE', #1266 ) ; +#68 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999991468, 57.73489379904925300, -49.99999999999999289 ) ) ; +#69 = EDGE_CURVE ( 'NONE', #1380, #158, #3247, .T. ) ; +#70 = VERTEX_POINT ( 'NONE', #752 ) ; +#71 = VERTEX_POINT ( 'NONE', #2016 ) ; +#72 = PLANE ( 'NONE', #1836 ) ; +#73 = ORIENTED_EDGE ( 'NONE', *, *, #2691, .F. ) ; +#74 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 34.53884078076435316, -49.99999999999999289 ) ) ; +#75 = CARTESIAN_POINT ( 'NONE', ( 12.68765000000000143, 36.23489379904926011, -49.99999999999999289 ) ) ; +#76 = EDGE_LOOP ( 'NONE', ( #1149, #1880 ) ) ; +#77 = EDGE_LOOP ( 'NONE', ( #590, #1689, #635, #2844 ) ) ; +#78 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#79 = AXIS2_PLACEMENT_3D ( 'NONE', #2523, #1246, #1773 ) ; +#80 = VERTEX_POINT ( 'NONE', #764 ) ; +#81 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 41.32305285390394545, -49.99999999999999289 ) ) ; +#82 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -54.09999999999999432, -52.29999999999999716 ) ) ; +#83 = LINE ( 'NONE', #833, #51 ) ; +#84 = CARTESIAN_POINT ( 'NONE', ( 13.75000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#85 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -51.35000000000000142, -47.50000000000000000 ) ) ; +#86 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000003902, 39.62699983561905270, -49.99999999999999289 ) ) ; +#87 = EDGE_CURVE ( 'NONE', #913, #1861, #108, .T. ) ; +#88 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#89 = CYLINDRICAL_SURFACE ( 'NONE', #2013, 11.37500000000000000 ) ; +#90 = FACE_BOUND ( 'NONE', #1513, .T. ) ; +#91 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#92 = CIRCLE ( 'NONE', #2407, 4.000000000000001776 ) ; +#93 = FACE_BOUND ( 'NONE', #2317, .T. ) ; +#94 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 39.68094681733413864, -53.84999999999999432 ) ) ; +#95 = ORIENTED_EDGE ( 'NONE', *, *, #697, .F. ) ; +#96 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#97 = ORIENTED_EDGE ( 'NONE', *, *, #1893, .T. ) ; +#98 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -38.62499999999999289, -50.67499999999999716 ) ) ; +#99 = CIRCLE ( 'NONE', #3172, 1.749999999999998002 ) ; +#100 = CIRCLE ( 'NONE', #1500, 1.749999999999991118 ) ; +#101 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#102 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#103 = VERTEX_POINT ( 'NONE', #258 ) ; +#104 = AXIS2_PLACEMENT_3D ( 'NONE', #58, #1810, #1885 ) ; +#105 = FACE_BOUND ( 'NONE', #563, .T. ) ; +#106 = VERTEX_POINT ( 'NONE', #2025 ) ; +#107 = AXIS2_PLACEMENT_3D ( 'NONE', #1387, #1737, #5 ) ; +#108 = LINE ( 'NONE', #1236, #1068 ) ; +#109 = EDGE_CURVE ( 'NONE', #67, #1812, #2047, .T. ) ; +#110 = VERTEX_POINT ( 'NONE', #2988 ) ; +#111 = DIRECTION ( 'NONE', ( 1.206764157201257538E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#112 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#113 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#114 = EDGE_CURVE ( 'NONE', #1237, #3122, #1546, .T. ) ; +#115 = ADVANCED_FACE ( 'NONE', ( #2433, #1694, #2387 ), #249, .F. ) ; +#116 = ORIENTED_EDGE ( 'NONE', *, *, #1096, .F. ) ; +#117 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#118 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#119 = EDGE_LOOP ( 'NONE', ( #1361, #473 ) ) ; +#120 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#121 = ORIENTED_EDGE ( 'NONE', *, *, #3256, .T. ) ; +#122 = VERTEX_POINT ( 'NONE', #1277 ) ; +#123 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -38.62499999999999289, -50.67499999999999716 ) ) ; +#124 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 41.32305285390394545, -49.99999999999999289 ) ) ; +#125 = VERTEX_POINT ( 'NONE', #2274 ) ; +#126 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, -3.469446951953578444E-17, -47.49999999999999289 ) ) ; +#127 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#128 = AXIS2_PLACEMENT_3D ( 'NONE', #2365, #2891, #112 ) ; +#129 = VECTOR ( 'NONE', #3181, 1000.000000000000000 ) ; +#130 = ADVANCED_FACE ( 'NONE', ( #380 ), #2312, .F. ) ; +#131 = FACE_OUTER_BOUND ( 'NONE', #3020, .T. ) ; +#132 = FACE_OUTER_BOUND ( 'NONE', #632, .T. ) ; +#133 = PLANE ( 'NONE', #1618 ) ; +#134 = EDGE_CURVE ( 'NONE', #2093, #2292, #426, .T. ) ; +#135 = LINE ( 'NONE', #1240, #1093 ) ; +#136 = LINE ( 'NONE', #1605, #2955 ) ; +#137 = VERTEX_POINT ( 'NONE', #2250 ) ; +#138 = AXIS2_PLACEMENT_3D ( 'NONE', #290, #2516, #2057 ) ; +#139 = CARTESIAN_POINT ( 'NONE', ( -13.75000000000000355, -15.49999999999997868, -53.85000000000000142 ) ) ; +#140 = CIRCLE ( 'NONE', #1328, 1.625000000000001332 ) ; +#141 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#142 = EDGE_LOOP ( 'NONE', ( #2924, #440, #2708, #2137 ) ) ; +#143 = LINE ( 'NONE', #1781, #226 ) ; +#144 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#145 = ORIENTED_EDGE ( 'NONE', *, *, #986, .T. ) ; +#146 = LINE ( 'NONE', #1225, #428 ) ; +#147 = AXIS2_PLACEMENT_3D ( 'NONE', #2294, #2796, #2764 ) ; +#148 = ORIENTED_EDGE ( 'NONE', *, *, #872, .F. ) ; +#149 = DIRECTION ( 'NONE', ( -1.000000000000000000, -4.270088556250598741E-15, 0.0000000000000000000 ) ) ; +#150 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#151 = ADVANCED_FACE ( 'NONE', ( #974 ), #1531, .F. ) ; +#152 = FACE_OUTER_BOUND ( 'NONE', #350, .T. ) ; +#153 = CYLINDRICAL_SURFACE ( 'NONE', #128, 2.999999999999999112 ) ; +#154 = AXIS2_PLACEMENT_3D ( 'NONE', #180, #1167, #1675 ) ; +#155 = EDGE_LOOP ( 'NONE', ( #1536, #790, #381, #1483 ) ) ; +#156 = EDGE_CURVE ( 'NONE', #2626, #1317, #143, .T. ) ; +#157 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#158 = VERTEX_POINT ( 'NONE', #486 ) ; +#159 = PLANE ( 'NONE', #1022 ) ; +#160 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 39.62699983561905270, -49.99999999999999289 ) ) ; +#161 = ORIENTED_EDGE ( 'NONE', *, *, #2326, .F. ) ; +#162 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#163 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999991468, 57.73489379904925300, -49.99999999999999289 ) ) ; +#164 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -50.67499999999999716 ) ) ; +#165 = ORIENTED_EDGE ( 'NONE', *, *, #407, .T. ) ; +#166 = VERTEX_POINT ( 'NONE', #3237 ) ; +#167 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#168 = CYLINDRICAL_SURFACE ( 'NONE', #1424, 1.750000000000001554 ) ; +#169 = AXIS2_PLACEMENT_3D ( 'NONE', #3017, #3053, #1541 ) ; +#170 = CARTESIAN_POINT ( 'NONE', ( 13.75000000000001776, -15.49999999999997868, -53.85000000000000142 ) ) ; +#171 = VECTOR ( 'NONE', #3138, 1000.000000000000000 ) ; +#172 = FACE_OUTER_BOUND ( 'NONE', #2594, .T. ) ; +#173 = AXIS2_PLACEMENT_3D ( 'NONE', #2252, #2991, #1226 ) ; +#174 = EDGE_CURVE ( 'NONE', #71, #1837, #860, .T. ) ; +#175 = LINE ( 'NONE', #638, #3228 ) ; +#176 = LINE ( 'NONE', #1035, #1219 ) ; +#177 = FACE_OUTER_BOUND ( 'NONE', #3155, .T. ) ; +#178 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 59.43094681733413864, -53.84999999999999432 ) ) ; +#179 = EDGE_CURVE ( 'NONE', #2268, #70, #2732, .T. ) ; +#180 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999432, 61.12699983561904560, -49.99999999999999289 ) ) ; +#181 = ADVANCED_FACE ( 'NONE', ( #2774, #1959, #1576, #1505, #2544, #1890, #779, #105, #63, #3244, #2678, #1416, #1102, #464 ), #283, .T. ) ; +#182 = AXIS2_PLACEMENT_3D ( 'NONE', #784, #2528, #518 ) ; +#183 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .F. ) ; +#184 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#185 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012434, -35.37499999999998579, -50.67499999999999716 ) ) ; +#186 = EDGE_LOOP ( 'NONE', ( #2701, #1273, #161, #2546 ) ) ; +#187 = VECTOR ( 'NONE', #2950, 1000.000000000000000 ) ; +#188 = EDGE_LOOP ( 'NONE', ( #755, #1079, #1830, #2751 ) ) ; +#189 = ADVANCED_FACE ( 'NONE', ( #2501 ), #250, .F. ) ; +#190 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#191 = EDGE_LOOP ( 'NONE', ( #1750, #653, #793, #612 ) ) ; +#192 = DIRECTION ( 'NONE', ( 5.114001323292979579E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#193 = FACE_BOUND ( 'NONE', #692, .T. ) ; +#194 = ORIENTED_EDGE ( 'NONE', *, *, #662, .T. ) ; +#195 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -53.85000000000000142 ) ) ; +#196 = VECTOR ( 'NONE', #1852, 1000.000000000000000 ) ; +#197 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#198 = EDGE_CURVE ( 'NONE', #507, #65, #1091, .T. ) ; +#199 = VERTEX_POINT ( 'NONE', #1062 ) ; +#200 = ORIENTED_EDGE ( 'NONE', *, *, #788, .T. ) ; +#201 = VERTEX_POINT ( 'NONE', #2296 ) ; +#202 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#203 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#204 = VERTEX_POINT ( 'NONE', #2799 ) ; +#205 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#206 = ORIENTED_EDGE ( 'NONE', *, *, #671, .T. ) ; +#207 = LINE ( 'NONE', #1132, #797 ) ; +#208 = CARTESIAN_POINT ( 'NONE', ( -18.50000000000000355, 15.50000000000001243, -47.49999999999999289 ) ) ; +#209 = ADVANCED_FACE ( 'NONE', ( #2493 ), #2332, .F. ) ; +#210 = AXIS2_PLACEMENT_3D ( 'NONE', #1708, #1484, #2205 ) ; +#211 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999998899, 57.73489379904923879, -47.49999999999999289 ) ) ; +#212 = LINE ( 'NONE', #1968, #1251 ) ; +#213 = CIRCLE ( 'NONE', #2072, 1.749999999999999778 ) ; +#214 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -51.35000000000000142, -53.84999999999999432 ) ) ; +#215 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000003902, 36.23489379904924590, -47.49999999999999289 ) ) ; +#216 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#217 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#218 = CIRCLE ( 'NONE', #1821, 1.750000000000001554 ) ; +#219 = AXIS2_PLACEMENT_3D ( 'NONE', #1889, #117, #859 ) ; +#220 = EDGE_CURVE ( 'NONE', #2089, #2849, #1847, .T. ) ; +#221 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#222 = PLANE ( 'NONE', #1560 ) ; +#223 = ADVANCED_FACE ( 'NONE', ( #131 ), #2551, .F. ) ; +#224 = EDGE_LOOP ( 'NONE', ( #1547, #3097, #3258, #2192 ) ) ; +#225 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#226 = VECTOR ( 'NONE', #216, 1000.000000000000000 ) ; +#227 = ORIENTED_EDGE ( 'NONE', *, *, #2437, .F. ) ; +#228 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -54.09999999999999432, -47.49999999999998579 ) ) ; +#229 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#230 = CYLINDRICAL_SURFACE ( 'NONE', #1426, 1.750000000000001554 ) ; +#231 = ORIENTED_EDGE ( 'NONE', *, *, #1706, .T. ) ; +#232 = EDGE_CURVE ( 'NONE', #2473, #2086, #602, .T. ) ; +#233 = ORIENTED_EDGE ( 'NONE', *, *, #3058, .T. ) ; +#234 = ORIENTED_EDGE ( 'NONE', *, *, #2800, .F. ) ; +#235 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 34.53884078076435316, -49.99999999999999289 ) ) ; +#236 = CARTESIAN_POINT ( 'NONE', ( 11.37499999999999645, 3.995120947995324530E-15, -51.34999999999999432 ) ) ; +#237 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999997868, -47.49999999999999289 ) ) ; +#238 = EDGE_CURVE ( 'NONE', #1350, #2089, #1526, .T. ) ; +#239 = ADVANCED_FACE ( 'NONE', ( #1568, #2149 ), #270, .T. ) ; +#240 = VERTEX_POINT ( 'NONE', #29 ) ; +#241 = EDGE_CURVE ( 'NONE', #3122, #1795, #330, .T. ) ; +#242 = EDGE_LOOP ( 'NONE', ( #1707, #1958 ) ) ; +#243 = EDGE_LOOP ( 'NONE', ( #2116, #596, #2276, #2214 ) ) ; +#244 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -34.06249999999997158, -53.84999999999999432 ) ) ; +#245 = AXIS2_PLACEMENT_3D ( 'NONE', #2014, #3223, #2255 ) ; +#246 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#247 = CARTESIAN_POINT ( 'NONE', ( -13.75000000000000355, -15.49999999999997868, -53.85000000000000142 ) ) ; +#249 = PLANE ( 'NONE', #1923 ) ; +#248 = LINE ( 'NONE', #2278, #2024 ) ; +#250 = CYLINDRICAL_SURFACE ( 'NONE', #3021, 11.37500000000000000 ) ; +#251 = FACE_OUTER_BOUND ( 'NONE', #24, .T. ) ; +#252 = LINE ( 'NONE', #244, #964 ) ; +#253 = VECTOR ( 'NONE', #1636, 1000.000000000000000 ) ; +#254 = AXIS2_PLACEMENT_3D ( 'NONE', #886, #1406, #3123 ) ; +#255 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -50.35000000000007958, -49.04999999999999716 ) ) ; +#256 = PLANE ( 'NONE', #1754 ) ; +#257 = VECTOR ( 'NONE', #2580, 1000.000000000000000 ) ; +#258 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 57.68094681733413154, -50.00000000000000000 ) ) ; +#259 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000003902, 39.62699983561905270, -47.49999999999999289 ) ) ; +#260 = ORIENTED_EDGE ( 'NONE', *, *, #2942, .F. ) ; +#261 = EDGE_CURVE ( 'NONE', #1324, #2419, #1004, .T. ) ; +#262 = DIRECTION ( 'NONE', ( 1.000000000000000000, -4.270088556250598741E-15, 0.0000000000000000000 ) ) ; +#263 = ORIENTED_EDGE ( 'NONE', *, *, #1316, .F. ) ; +#264 = LINE ( 'NONE', #3084, #2852 ) ; +#265 = VECTOR ( 'NONE', #1333, 1000.000000000000114 ) ; +#266 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012434, -35.37499999999998579, -50.67499999999999716 ) ) ; +#267 = VERTEX_POINT ( 'NONE', #2559 ) ; +#268 = PRODUCT ( 'frame_vert_181126', 'frame_vert_181126', '', ( #2616 ) ) ; +#269 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#270 = PLANE ( 'NONE', #2677 ) ; +#271 = ORIENTED_EDGE ( 'NONE', *, *, #877, .F. ) ; +#272 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -50.67499999999999716 ) ) ; +#273 = ORIENTED_EDGE ( 'NONE', *, *, #969, .F. ) ; +#274 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#275 = AXIS2_PLACEMENT_3D ( 'NONE', #353, #1099, #3088 ) ; +#276 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#277 = EDGE_LOOP ( 'NONE', ( #2495, #1239, #2941, #2996 ) ) ; +#278 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#279 = ADVANCED_FACE ( 'NONE', ( #408 ), #1581, .F. ) ; +#280 = AXIS2_PLACEMENT_3D ( 'NONE', #2987, #977, #1235 ) ; +#281 = EDGE_LOOP ( 'NONE', ( #2483, #585, #231, #551 ) ) ; +#282 = PLANE ( 'NONE', #2625 ) ; +#283 = PLANE ( 'NONE', #1869 ) ; +#284 = EDGE_CURVE ( 'NONE', #2171, #1892, #1807, .T. ) ; +#285 = VERTEX_POINT ( 'NONE', #1354 ) ; +#286 = VERTEX_POINT ( 'NONE', #826 ) ; +#287 = EDGE_CURVE ( 'NONE', #2927, #2130, #605, .T. ) ; +#288 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#289 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#290 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -51.35000000000000142, -47.49999999999998579 ) ) ; +#291 = CIRCLE ( 'NONE', #1666, 1.625000000000001332 ) ; +#292 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -36.99999999999999289, -50.67499999999999716 ) ) ; +#293 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#294 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#295 = LINE ( 'NONE', #1288, #3226 ) ; +#296 = VECTOR ( 'NONE', #2840, 1000.000000000000000 ) ; +#297 = FACE_BOUND ( 'NONE', #2279, .T. ) ; +#298 = CIRCLE ( 'NONE', #219, 2.999999999999999112 ) ; +#299 = AXIS2_PLACEMENT_3D ( 'NONE', #1291, #1543, #20 ) ; +#300 = EDGE_CURVE ( 'NONE', #1080, #1032, #1721, .T. ) ; +#301 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 41.32305285390394545, -47.49999999999999289 ) ) ; +#302 = CIRCLE ( 'NONE', #1116, 1.624999999999999778 ) ; +#303 = ORIENTED_EDGE ( 'NONE', *, *, #238, .T. ) ; +#304 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#305 = VERTEX_POINT ( 'NONE', #1856 ) ; +#306 = DIRECTION ( 'NONE', ( -1.000000000000000000, -4.270088556250602685E-15, 0.0000000000000000000 ) ) ; +#307 = EDGE_CURVE ( 'NONE', #3196, #1735, #1946, .T. ) ; +#308 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .F. ) ; +#309 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#310 = FACE_BOUND ( 'NONE', #905, .T. ) ; +#311 = VECTOR ( 'NONE', #1758, 1000.000000000000114 ) ; +#312 = ORIENTED_EDGE ( 'NONE', *, *, #1842, .T. ) ; +#313 = VERTEX_POINT ( 'NONE', #598 ) ; +#314 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#315 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#316 = VERTEX_POINT ( 'NONE', #2090 ) ; +#317 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -53.84999999999999432 ) ) ; +#318 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2446 ), #2834 ) ; +#319 = ORIENTED_EDGE ( 'NONE', *, *, #366, .T. ) ; +#320 = CARTESIAN_POINT ( 'NONE', ( 12.50000000000001243, -15.49999999999997868, -50.49999999999999289 ) ) ; +#321 = ORIENTED_EDGE ( 'NONE', *, *, #438, .T. ) ; +#322 = ORIENTED_EDGE ( 'NONE', *, *, #2482, .F. ) ; +#323 = SURFACE_STYLE_USAGE ( .BOTH. , #55 ) ; +#324 = AXIS2_PLACEMENT_3D ( 'NONE', #28, #1520, #2519 ) ; +#325 = EDGE_CURVE ( 'NONE', #285, #1402, #1727, .T. ) ; +#326 = FACE_OUTER_BOUND ( 'NONE', #703, .T. ) ; +#327 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#328 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -39.93749999999997158, -53.84999999999999432 ) ) ; +#329 = VECTOR ( 'NONE', #561, 1000.000000000000000 ) ; +#330 = CIRCLE ( 'NONE', #2525, 1.750000000000001554 ) ; +#331 = VECTOR ( 'NONE', #2703, 1000.000000000000000 ) ; +#332 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#333 = CIRCLE ( 'NONE', #1069, 1.750000000000001554 ) ; +#334 = LINE ( 'NONE', #2846, #2154 ) ; +#335 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#336 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1064 ), #513 ) ; +#337 = VECTOR ( 'NONE', #609, 1000.000000000000000 ) ; +#338 = ORIENTED_EDGE ( 'NONE', *, *, #2496, .T. ) ; +#339 = VERTEX_POINT ( 'NONE', #2576 ) ; +#340 = ORIENTED_EDGE ( 'NONE', *, *, #2639, .T. ) ; +#341 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012434, -35.37499999999998579, -50.67499999999999716 ) ) ; +#342 = ORIENTED_EDGE ( 'NONE', *, *, #1313, .F. ) ; +#343 = EDGE_CURVE ( 'NONE', #1076, #2161, #1214, .T. ) ; +#344 = CYLINDRICAL_SURFACE ( 'NONE', #1984, 1.750000000000001554 ) ; +#345 = ORIENTED_EDGE ( 'NONE', *, *, #3200, .F. ) ; +#346 = DIRECTION ( 'NONE', ( 1.000000000000000000, -4.270088556250598741E-15, 0.0000000000000000000 ) ) ; +#347 = EDGE_CURVE ( 'NONE', #786, #1199, #452, .T. ) ; +#348 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#349 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .T. ) ; +#350 = EDGE_LOOP ( 'NONE', ( #1933, #1195, #2679, #2215, #1633, #672 ) ) ; +#351 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 56.03884078076433894, -47.49999999999999289 ) ) ; +#352 = LINE ( 'NONE', #2964, #3133 ) ; +#353 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#354 = ORIENTED_EDGE ( 'NONE', *, *, #788, .F. ) ; +#355 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#356 = VERTEX_POINT ( 'NONE', #1864 ) ; +#357 = ORIENTED_EDGE ( 'NONE', *, *, #1600, .T. ) ; +#358 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#359 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#360 = AXIS2_PLACEMENT_3D ( 'NONE', #813, #1717, #934 ) ; +#361 = ORIENTED_EDGE ( 'NONE', *, *, #742, .F. ) ; +#362 = EDGE_CURVE ( 'NONE', #103, #37, #679, .T. ) ; +#363 = EDGE_LOOP ( 'NONE', ( #1113, #769 ) ) ; +#364 = LINE ( 'NONE', #36, #569 ) ; +#365 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000013145, -38.62499999999998579, -50.67499999999999716 ) ) ; +#366 = EDGE_CURVE ( 'NONE', #3196, #3024, #1839, .T. ) ; +#367 = VECTOR ( 'NONE', #1866, 1000.000000000000114 ) ; +#368 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, -3.469446951953578444E-17, -47.49999999999999289 ) ) ; +#369 = PLANE ( 'NONE', #1477 ) ; +#370 = CYLINDRICAL_SURFACE ( 'NONE', #825, 1.750000000000001554 ) ; +#371 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#372 = LINE ( 'NONE', #439, #2718 ) ; +#373 = VECTOR ( 'NONE', #1389, 1000.000000000000000 ) ; +#374 = ORIENTED_EDGE ( 'NONE', *, *, #69, .F. ) ; +#375 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -53.84999999999999432 ) ) ; +#376 = ADVANCED_FACE ( 'NONE', ( #994 ), #1934, .F. ) ; +#377 = ADVANCED_FACE ( 'NONE', ( #2631, #2827 ), #2099, .T. ) ; +#378 = ORIENTED_EDGE ( 'NONE', *, *, #2761, .F. ) ; +#379 = CARTESIAN_POINT ( 'NONE', ( -13.35000000000004405, -35.37499999999999289, -50.67499999999999716 ) ) ; +#380 = FACE_OUTER_BOUND ( 'NONE', #191, .T. ) ; +#381 = ORIENTED_EDGE ( 'NONE', *, *, #2408, .F. ) ; +#382 = CIRCLE ( 'NONE', #2055, 1.749999999999999778 ) ; +#383 = SURFACE_SIDE_STYLE ('',( #1681 ) ) ; +#384 = EDGE_CURVE ( 'NONE', #2169, #39, #1671, .T. ) ; +#385 = LINE ( 'NONE', #418, #187 ) ; +#386 = ORIENTED_EDGE ( 'NONE', *, *, #1047, .T. ) ; +#387 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 56.03884078076433894, -49.99999999999999289 ) ) ; +#388 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#389 = CARTESIAN_POINT ( 'NONE', ( 12.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#390 = ORIENTED_EDGE ( 'NONE', *, *, #1105, .F. ) ; +#391 = VECTOR ( 'NONE', #2867, 1000.000000000000000 ) ; +#392 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#393 = VERTEX_POINT ( 'NONE', #2361 ) ; +#394 = ORIENTED_EDGE ( 'NONE', *, *, #3101, .T. ) ; +#395 = EDGE_LOOP ( 'NONE', ( #349, #3121, #1507, #648 ) ) ; +#396 = CARTESIAN_POINT ( 'NONE', ( 17.25000000000000000, -15.49999999999997868, -50.49999999999999289 ) ) ; +#397 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -54.09999999999998721, 22.49999999999997868 ) ) ; +#398 = EDGE_LOOP ( 'NONE', ( #3197, #1245 ) ) ; +#399 = AXIS2_PLACEMENT_3D ( 'NONE', #1956, #2915, #2223 ) ; +#400 = ORIENTED_EDGE ( 'NONE', *, *, #565, .F. ) ; +#401 = PLANE ( 'NONE', #2428 ) ; +#402 = ADVANCED_FACE ( 'NONE', ( #1280 ), #72, .F. ) ; +#403 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#404 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#405 = AXIS2_PLACEMENT_3D ( 'NONE', #2526, #532, #540 ) ; +#406 = VECTOR ( 'NONE', #794, 1000.000000000000000 ) ; +#407 = EDGE_CURVE ( 'NONE', #1960, #2042, #1665, .T. ) ; +#408 = FACE_OUTER_BOUND ( 'NONE', #1902, .T. ) ; +#409 = LINE ( 'NONE', #211, #680 ) ; +#410 = EDGE_CURVE ( 'NONE', #2990, #1117, #2903, .T. ) ; +#411 = CYLINDRICAL_SURFACE ( 'NONE', #3070, 1.749999999999999778 ) ; +#412 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#413 = CARTESIAN_POINT ( 'NONE', ( 6.812349999999998573, 61.12699983561904560, -49.99999999999999289 ) ) ; +#414 = LINE ( 'NONE', #1058, #3037 ) ; +#415 = ADVANCED_FACE ( 'NONE', ( #1078 ), #1396, .F. ) ; +#416 = LINE ( 'NONE', #2197, #2961 ) ; +#417 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#418 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -49.04999999999999716 ) ) ; +#419 = LINE ( 'NONE', #2485, #2643 ) ; +#420 = EDGE_LOOP ( 'NONE', ( #2659, #1838, #2096, #1234 ) ) ; +#421 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -34.06249999999997158, -53.84999999999999432 ) ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #2942, .T. ) ; +#423 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#424 = ORIENTED_EDGE ( 'NONE', *, *, #2496, .F. ) ; +#425 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#426 = LINE ( 'NONE', #1745, #1018 ) ; +#427 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#428 = VECTOR ( 'NONE', #1464, 1000.000000000000000 ) ; +#429 = AXIS2_PLACEMENT_3D ( 'NONE', #448, #1697, #936 ) ; +#430 = VERTEX_POINT ( 'NONE', #876 ) ; +#431 = CARTESIAN_POINT ( 'NONE', ( 19.49999999999999289, -21.49999999999999289, -49.99999999999999289 ) ) ; +#432 = CIRCLE ( 'NONE', #3153, 2.999999999999999112 ) ; +#433 = FACE_OUTER_BOUND ( 'NONE', #2198, .T. ) ; +#434 = FACE_OUTER_BOUND ( 'NONE', #654, .T. ) ; +#435 = ADVANCED_FACE ( 'NONE', ( #2417 ), #89, .F. ) ; +#436 = ORIENTED_EDGE ( 'NONE', *, *, #1970, .T. ) ; +#437 = ADVANCED_FACE ( 'NONE', ( #1150, #1655 ), #133, .T. ) ; +#438 = EDGE_CURVE ( 'NONE', #2130, #1422, #2302, .T. ) ; +#439 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000003902, 36.23489379904924590, -49.99999999999999289 ) ) ; +#440 = ORIENTED_EDGE ( 'NONE', *, *, #1782, .F. ) ; +#441 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -49.04999999999999716 ) ) ; +#442 = ORIENTED_EDGE ( 'NONE', *, *, #1762, .T. ) ; +#443 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -49.04999999999999716 ) ) ; +#444 = ORIENTED_EDGE ( 'NONE', *, *, #1140, .T. ) ; +#445 = ORIENTED_EDGE ( 'NONE', *, *, #700, .T. ) ; +#446 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -39.93749999999997158, -47.49999999999997158 ) ) ; +#447 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999112, -3.469446951953578444E-17, -53.85000000000000142 ) ) ; +#448 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -36.99999999999999289, -50.67499999999999716 ) ) ; +#449 = LINE ( 'NONE', #824, #1719 ) ; +#450 = DIRECTION ( 'NONE', ( -0.4999999999999992228, 0.8660254037844391517, 0.0000000000000000000 ) ) ; +#451 = FACE_OUTER_BOUND ( 'NONE', #1862, .T. ) ; +#452 = LINE ( 'NONE', #365, #2947 ) ; +#454 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 37.93094681733414575, 22.49999999999997868 ) ) ; +#453 = FACE_OUTER_BOUND ( 'NONE', #2830, .T. ) ; +#455 = FACE_OUTER_BOUND ( 'NONE', #2460, .T. ) ; +#456 = AXIS2_PLACEMENT_3D ( 'NONE', #1311, #2531, #2768 ) ; +#457 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#458 = EDGE_CURVE ( 'NONE', #305, #1705, #1977, .T. ) ; +#459 = CIRCLE ( 'NONE', #324, 1.749999999999999778 ) ; +#460 = CYLINDRICAL_SURFACE ( 'NONE', #562, 2.999999999999999112 ) ; +#461 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#462 = EDGE_CURVE ( 'NONE', #45, #1324, #2824, .T. ) ; +#463 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 41.32305285390394545, -49.99999999999999289 ) ) ; +#464 = FACE_BOUND ( 'NONE', #1026, .T. ) ; +#465 = ORIENTED_EDGE ( 'NONE', *, *, #1087, .F. ) ; +#466 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#467 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#468 = ORIENTED_EDGE ( 'NONE', *, *, #1260, .F. ) ; +#469 = PLANE ( 'NONE', #1094 ) ; +#470 = ORIENTED_EDGE ( 'NONE', *, *, #1228, .F. ) ; +#471 = DIRECTION ( 'NONE', ( -0.4999999999999995004, -0.8660254037844390407, 0.0000000000000000000 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #261, .T. ) ; +#473 = ORIENTED_EDGE ( 'NONE', *, *, #2182, .F. ) ; +#474 = AXIS2_PLACEMENT_3D ( 'NONE', #2709, #1067, #498 ) ; +#475 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#476 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .F. ) ; +#478 = EDGE_CURVE ( 'NONE', #1867, #3245, #2299, .T. ) ; +#479 = VERTEX_POINT ( 'NONE', #396 ) ; +#480 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#481 = VERTEX_POINT ( 'NONE', #915 ) ; +#482 = ORIENTED_EDGE ( 'NONE', *, *, #2309, .F. ) ; +#483 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 57.68094681733413864, 22.49999999999997868 ) ) ; +#484 = ORIENTED_EDGE ( 'NONE', *, *, #827, .F. ) ; +#485 = PLANE ( 'NONE', #3193 ) ; +#486 = CARTESIAN_POINT ( 'NONE', ( -14.35000000000000497, -39.93749999999997158, -53.84999999999999432 ) ) ; +#487 = ORIENTED_EDGE ( 'NONE', *, *, #3117, .F. ) ; +#488 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999997300, 22.49999999999997868 ) ) ; +#489 = FACE_OUTER_BOUND ( 'NONE', #1783, .T. ) ; +#490 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#491 = AXIS2_PLACEMENT_3D ( 'NONE', #272, #309, #1585 ) ; +#492 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#493 = VECTOR ( 'NONE', #2654, 1000.000000000000000 ) ; +#494 = EDGE_LOOP ( 'NONE', ( #1305, #1588, #1070, #1098, #2683, #1440 ) ) ; +#495 = CARTESIAN_POINT ( 'NONE', ( -17.25000000000000000, 15.50000000000001243, -53.85000000000000142 ) ) ; +#496 = VECTOR ( 'NONE', #2070, 1000.000000000000000 ) ; +#497 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -53.85000000000000142 ) ) ; +#498 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#499 = LINE ( 'NONE', #2636, #1007 ) ; +#500 = AXIS2_PLACEMENT_3D ( 'NONE', #1365, #1860, #1638 ) ; +#501 = EDGE_CURVE ( 'NONE', #1837, #71, #1248, .T. ) ; +#502 = FACE_OUTER_BOUND ( 'NONE', #3107, .T. ) ; +#503 = DIRECTION ( 'NONE', ( 1.000000000000000000, 3.543264972207944962E-15, -0.0000000000000000000 ) ) ; +#504 = FACE_OUTER_BOUND ( 'NONE', #2937, .T. ) ; +#505 = ORIENTED_EDGE ( 'NONE', *, *, #3158, .T. ) ; +#506 = FACE_OUTER_BOUND ( 'NONE', #277, .T. ) ; +#507 = VERTEX_POINT ( 'NONE', #3167 ) ; +#508 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#509 = DIRECTION ( 'NONE', ( -7.671001984939500922E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#510 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -49.99999999999999289 ) ) ; +#511 = FACE_OUTER_BOUND ( 'NONE', #1398, .T. ) ; +#512 = ORIENTED_EDGE ( 'NONE', *, *, #3256, .F. ) ; +#513 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #3198 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #120, #1383, #2141 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#514 = EDGE_CURVE ( 'NONE', #37, #204, #2715, .T. ) ; +#515 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#516 = ADVANCED_FACE ( 'NONE', ( #2497, #1529 ), #1951, .T. ) ; +#517 = EDGE_LOOP ( 'NONE', ( #342, #2012 ) ) ; +#518 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#519 = PLANE ( 'NONE', #1451 ) ; +#520 = AXIS2_PLACEMENT_3D ( 'NONE', #1924, #2176, #190 ) ; +#521 = ORIENTED_EDGE ( 'NONE', *, *, #3101, .F. ) ; +#522 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#523 = LINE ( 'NONE', #3194, #1030 ) ; +#524 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#525 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -53.85000000000000142 ) ) ; +#526 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#527 = EDGE_CURVE ( 'NONE', #931, #589, #1604, .T. ) ; +#528 = ORIENTED_EDGE ( 'NONE', *, *, #2926, .T. ) ; +#529 = EDGE_CURVE ( 'NONE', #1517, #822, #2228, .T. ) ; +#530 = VERTEX_POINT ( 'NONE', #2191 ) ; +#531 = ORIENTED_EDGE ( 'NONE', *, *, #1331, .F. ) ; +#532 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.114001323292979579E-16, 0.0000000000000000000 ) ) ; +#533 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#534 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999997300, 22.49999999999997868 ) ) ; +#535 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#536 = VECTOR ( 'NONE', #2201, 1000.000000000000114 ) ; +#537 = ADVANCED_FACE ( 'NONE', ( #2414 ), #925, .F. ) ; +#538 = CYLINDRICAL_SURFACE ( 'NONE', #1001, 1.625000000000001332 ) ; +#539 = FACE_OUTER_BOUND ( 'NONE', #1904, .T. ) ; +#540 = DIRECTION ( 'NONE', ( 5.114001323292979579E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#541 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#542 = LINE ( 'NONE', #495, #1849 ) ; +#543 = AXIS2_PLACEMENT_3D ( 'NONE', #74, #2333, #141 ) ; +#544 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#545 = LINE ( 'NONE', #214, #2456 ) ; +#546 = VERTEX_POINT ( 'NONE', #1752 ) ; +#547 = VERTEX_POINT ( 'NONE', #681 ) ; +#548 = EDGE_CURVE ( 'NONE', #874, #2053, #923, .T. ) ; +#549 = ORIENTED_EDGE ( 'NONE', *, *, #2359, .F. ) ; +#550 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 41.32305285390394545, -47.49999999999999289 ) ) ; +#551 = ORIENTED_EDGE ( 'NONE', *, *, #3091, .F. ) ; +#552 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#553 = EDGE_LOOP ( 'NONE', ( #2459, #578, #1592, #3050, #1553, #2036 ) ) ; +#554 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#555 = CIRCLE ( 'NONE', #579, 1.625000000000001332 ) ; +#556 = CARTESIAN_POINT ( 'NONE', ( 16.93749999999999645, -50.34999999999997300, 22.49999999999997868 ) ) ; +#557 = EDGE_LOOP ( 'NONE', ( #2873, #1935, #2870, #2781 ) ) ; +#558 = ORIENTED_EDGE ( 'NONE', *, *, #969, .T. ) ; +#559 = AXIS2_PLACEMENT_3D ( 'NONE', #1232, #1198, #1738 ) ; +#560 = ORIENTED_EDGE ( 'NONE', *, *, #2687, .T. ) ; +#561 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#562 = AXIS2_PLACEMENT_3D ( 'NONE', #358, #889, #2355 ) ; +#563 = EDGE_LOOP ( 'NONE', ( #2325, #688, #2311, #2693, #2658, #1242 ) ) ; +#564 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#565 = EDGE_CURVE ( 'NONE', #1907, #1971, #1813, .T. ) ; +#566 = ORIENTED_EDGE ( 'NONE', *, *, #1522, .T. ) ; +#567 = CARTESIAN_POINT ( 'NONE', ( -18.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#568 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#569 = VECTOR ( 'NONE', #15, 1000.000000000000000 ) ; +#570 = CIRCLE ( 'NONE', #893, 1.625000000000001332 ) ; +#571 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 34.53884078076435316, -49.99999999999999289 ) ) ; +#572 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999997300, 22.49999999999997868 ) ) ; +#573 = ADVANCED_FACE ( 'NONE', ( #2153 ), #2377, .F. ) ; +#574 = VECTOR ( 'NONE', #2833, 1000.000000000000114 ) ; +#575 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#576 = LINE ( 'NONE', #943, #3002 ) ; +#577 = EDGE_LOOP ( 'NONE', ( #303, #1926 ) ) ; +#578 = ORIENTED_EDGE ( 'NONE', *, *, #2992, .T. ) ; +#579 = AXIS2_PLACEMENT_3D ( 'NONE', #1876, #880, #1648 ) ; +#580 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#581 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999998579, -53.84999999999999432 ) ) ; +#582 = FACE_OUTER_BOUND ( 'NONE', #2750, .T. ) ; +#583 = ORIENTED_EDGE ( 'NONE', *, *, #2548, .T. ) ; +#584 = EDGE_CURVE ( 'NONE', #2268, #2425, #372, .T. ) ; +#585 = ORIENTED_EDGE ( 'NONE', *, *, #347, .T. ) ; +#586 = EDGE_LOOP ( 'NONE', ( #3180, #62, #2320, #2457 ) ) ; +#587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#588 = LINE ( 'NONE', #2236, #1793 ) ; +#589 = VERTEX_POINT ( 'NONE', #2713 ) ; +#590 = ORIENTED_EDGE ( 'NONE', *, *, #300, .T. ) ; +#591 = CARTESIAN_POINT ( 'NONE', ( -13.75000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#592 = AXIS2_PLACEMENT_3D ( 'NONE', #734, #1261, #1249 ) ; +#593 = VERTEX_POINT ( 'NONE', #208 ) ; +#594 = ADVANCED_FACE ( 'NONE', ( #54 ), #2436, .F. ) ; +#595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#596 = ORIENTED_EDGE ( 'NONE', *, *, #2491, .F. ) ; +#597 = VERTEX_POINT ( 'NONE', #3199 ) ; +#598 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 39.68094681733413864, -50.00000000000000000 ) ) ; +#599 = EDGE_CURVE ( 'NONE', #530, #2434, #135, .T. ) ; +#600 = ORIENTED_EDGE ( 'NONE', *, *, #3175, .T. ) ; +#601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#602 = CIRCLE ( 'NONE', #2354, 2.999999999999999112 ) ; +#603 = LINE ( 'NONE', #2920, #2949 ) ; +#604 = FACE_OUTER_BOUND ( 'NONE', #1467, .T. ) ; +#605 = LINE ( 'NONE', #2111, #3035 ) ; +#606 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#607 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#608 = LINE ( 'NONE', #1183, #3190 ) ; +#609 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#610 = EDGE_CURVE ( 'NONE', #2346, #285, #803, .T. ) ; +#611 = VERTEX_POINT ( 'NONE', #1494 ) ; +#612 = ORIENTED_EDGE ( 'NONE', *, *, #1054, .F. ) ; +#613 = AXIS2_PLACEMENT_3D ( 'NONE', #1992, #2240, #3236 ) ; +#614 = EDGE_LOOP ( 'NONE', ( #1651, #706 ) ) ; +#615 = EDGE_CURVE ( 'NONE', #2557, #1960, #1137, .T. ) ; +#616 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#617 = ORIENTED_EDGE ( 'NONE', *, *, #2707, .F. ) ; +#618 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#619 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999994449, 0.0000000000000000000 ) ) ; +#620 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -47.49999999999999289 ) ) ; +#621 = EDGE_CURVE ( 'NONE', #2290, #1013, #1913, .T. ) ; +#622 = CYLINDRICAL_SURFACE ( 'NONE', #1471, 1.625000000000001332 ) ; +#623 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 62.82305285390393834, -49.99999999999999289 ) ) ; +#624 = ORIENTED_EDGE ( 'NONE', *, *, #2156, .F. ) ; +#625 = ORIENTED_EDGE ( 'NONE', *, *, #2980, .T. ) ; +#626 = EDGE_LOOP ( 'NONE', ( #2972, #2908, #2218, #1710 ) ) ; +#627 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.671001984939500922E-16, 0.0000000000000000000 ) ) ; +#628 = EDGE_CURVE ( 'NONE', #2990, #1439, #717, .T. ) ; +#629 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000003902, 36.23489379904924590, -47.49999999999999289 ) ) ; +#630 = DIRECTION ( 'NONE', ( 0.5000000000000008882, -0.8660254037844381525, 0.0000000000000000000 ) ) ; +#631 = ORIENTED_EDGE ( 'NONE', *, *, #1144, .F. ) ; +#632 = EDGE_LOOP ( 'NONE', ( #484, #2048, #442, #2234 ) ) ; +#633 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257538E-15, 6.698886763086040130E-32 ) ) ; +#634 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#635 = ORIENTED_EDGE ( 'NONE', *, *, #1623, .F. ) ; +#636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#637 = EDGE_CURVE ( 'NONE', #2434, #2130, #3036, .T. ) ; +#638 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000002126, 36.23489379904926011, -49.99999999999999289 ) ) ; +#639 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#640 = DIRECTION ( 'NONE', ( -3.543264972207945751E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#641 = CIRCLE ( 'NONE', #1284, 11.37500000000000000 ) ; +#642 = CYLINDRICAL_SURFACE ( 'NONE', #3026, 1.625000000000001332 ) ; +#643 = FACE_OUTER_BOUND ( 'NONE', #1622, .T. ) ; +#644 = CIRCLE ( 'NONE', #2756, 2.999999999999999112 ) ; +#645 = ADVANCED_FACE ( 'NONE', ( #2802 ), #2727, .T. ) ; +#646 = VECTOR ( 'NONE', #2882, 1000.000000000000000 ) ; +#647 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#648 = ORIENTED_EDGE ( 'NONE', *, *, #2810, .T. ) ; +#649 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#650 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -34.06249999999997158, -47.49999999999997158 ) ) ; +#651 = CYLINDRICAL_SURFACE ( 'NONE', #2401, 2.999999999999999112 ) ; +#652 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#653 = ORIENTED_EDGE ( 'NONE', *, *, #1003, .F. ) ; +#654 = EDGE_LOOP ( 'NONE', ( #2549, #2604, #2753, #1259 ) ) ; +#655 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#656 = AXIS2_PLACEMENT_3D ( 'NONE', #2788, #762, #3250 ) ; +#657 = CARTESIAN_POINT ( 'NONE', ( -12.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#658 = ORIENTED_EDGE ( 'NONE', *, *, #3008, .T. ) ; +#659 = ADVANCED_FACE ( 'NONE', ( #1775 ), #2981, .F. ) ; +#660 = ADVANCED_FACE ( 'NONE', ( #172 ), #2836, .F. ) ; +#661 = AXIS2_PLACEMENT_3D ( 'NONE', #2150, #882, #1377 ) ; +#662 = EDGE_CURVE ( 'NONE', #137, #874, #1177, .T. ) ; +#663 = ORIENTED_EDGE ( 'NONE', *, *, #1480, .F. ) ; +#664 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -51.34999999999999432, -49.04999999999999716 ) ) ; +#665 = EDGE_LOOP ( 'NONE', ( #1826, #2593 ) ) ; +#666 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000000350, 36.23489379904926011, -47.50000000000000000 ) ) ; +#667 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -53.84999999999999432 ) ) ; +#668 = ORIENTED_EDGE ( 'NONE', *, *, #1247, .F. ) ; +#669 = VERTEX_POINT ( 'NONE', #996 ) ; +#670 = ORIENTED_EDGE ( 'NONE', *, *, #2907, .F. ) ; +#671 = EDGE_CURVE ( 'NONE', #158, #1549, #252, .T. ) ; +#672 = ORIENTED_EDGE ( 'NONE', *, *, #61, .T. ) ; +#673 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 41.32305285390394545, -49.99999999999999289 ) ) ; +#674 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#675 = AXIS2_PLACEMENT_3D ( 'NONE', #607, #2157, #1634 ) ; +#676 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#677 = VECTOR ( 'NONE', #64, 1000.000000000000000 ) ; +#678 = EDGE_CURVE ( 'NONE', #2277, #2015, #213, .T. ) ; +#679 = LINE ( 'NONE', #1371, #909 ) ; +#680 = VECTOR ( 'NONE', #1986, 1000.000000000000114 ) ; +#681 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -50.35000000000007958, -52.29999999999999716 ) ) ; +#682 = EDGE_CURVE ( 'NONE', #339, #1897, #333, .T. ) ; +#683 = FACE_OUTER_BOUND ( 'NONE', #577, .T. ) ; +#684 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#685 = CYLINDRICAL_SURFACE ( 'NONE', #2813, 1.749999999999998002 ) ; +#686 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#687 = ADVANCED_FACE ( 'NONE', ( #839 ), #411, .F. ) ; +#688 = ORIENTED_EDGE ( 'NONE', *, *, #933, .F. ) ; +#689 = LINE ( 'NONE', #2951, #1621 ) ; +#690 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -47.49999999999997868 ) ) ; +#691 = ORIENTED_EDGE ( 'NONE', *, *, #2491, .T. ) ; +#692 = EDGE_LOOP ( 'NONE', ( #3055, #2128 ) ) ; +#693 = VECTOR ( 'NONE', #2736, 1000.000000000000000 ) ; +#694 = SHAPE_DEFINITION_REPRESENTATION ( #1118, #2286 ) ; +#695 = AXIS2_PLACEMENT_3D ( 'NONE', #160, #1701, #1496 ) ; +#696 = ORIENTED_EDGE ( 'NONE', *, *, #2430, .T. ) ; +#697 = EDGE_CURVE ( 'NONE', #1419, #1380, #1682, .T. ) ; +#698 = LINE ( 'NONE', #1503, #2615 ) ; +#699 = ORIENTED_EDGE ( 'NONE', *, *, #2284, .F. ) ; +#700 = EDGE_CURVE ( 'NONE', #1865, #356, #2954, .T. ) ; +#701 = ORIENTED_EDGE ( 'NONE', *, *, #1548, .F. ) ; +#702 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999998010, -53.84999999999999432 ) ) ; +#703 = EDGE_LOOP ( 'NONE', ( #354, #2617, #2237, #1733 ) ) ; +#704 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999998899, 57.73489379904923879, -47.49999999999999289 ) ) ; +#705 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#706 = ORIENTED_EDGE ( 'NONE', *, *, #3032, .F. ) ; +#707 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#708 = ORIENTED_EDGE ( 'NONE', *, *, #2097, .T. ) ; +#709 = ORIENTED_EDGE ( 'NONE', *, *, #2606, .T. ) ; +#710 = ORIENTED_EDGE ( 'NONE', *, *, #1506, .F. ) ; +#711 = ORIENTED_EDGE ( 'NONE', *, *, #1603, .T. ) ; +#713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#712 = VECTOR ( 'NONE', #899, 1000.000000000000000 ) ; +#714 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 59.43094681733413864, -50.00000000000000000 ) ) ; +#715 = EDGE_CURVE ( 'NONE', #70, #1833, #2638, .T. ) ; +#716 = VECTOR ( 'NONE', #2930, 1000.000000000000000 ) ; +#717 = LINE ( 'NONE', #1788, #1569 ) ; +#718 = LINE ( 'NONE', #447, #2838 ) ; +#719 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#720 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -47.49999999999997868 ) ) ; +#721 = CARTESIAN_POINT ( 'NONE', ( 13.75000000000001066, 15.50000000000001243, -53.85000000000000142 ) ) ; +#722 = VECTOR ( 'NONE', #3047, 1000.000000000000000 ) ; +#723 = EDGE_LOOP ( 'NONE', ( #2065, #1596 ) ) ; +#724 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#725 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 39.68094681733414575, 22.49999999999997868 ) ) ; +#726 = ADVANCED_FACE ( 'NONE', ( #2762, #2918 ), #1129, .T. ) ; +#727 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#728 = LINE ( 'NONE', #3235, #2646 ) ; +#729 = LINE ( 'NONE', #1256, #2608 ) ; +#730 = EDGE_LOOP ( 'NONE', ( #227, #1953, #1115, #780 ) ) ; +#731 = ORIENTED_EDGE ( 'NONE', *, *, #179, .F. ) ; +#732 = VERTEX_POINT ( 'NONE', #123 ) ; +#733 = AXIS2_PLACEMENT_3D ( 'NONE', #19, #1322, #778 ) ; +#734 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 68.00000000000000000, -47.50000000000000000 ) ) ; +#735 = FACE_OUTER_BOUND ( 'NONE', #2322, .T. ) ; +#736 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#737 = ORIENTED_EDGE ( 'NONE', *, *, #946, .T. ) ; +#738 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999112, -3.469446951953578444E-17, -51.34999999999999432 ) ) ; +#739 = AXIS2_PLACEMENT_3D ( 'NONE', #1065, #842, #1077 ) ; +#740 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -54.09999999999999432, -47.50000000000000000 ) ) ; +#741 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 56.03884078076434605, -49.99999999999999289 ) ) ; +#742 = EDGE_CURVE ( 'NONE', #267, #1481, #2884, .T. ) ; +#743 = CIRCLE ( 'NONE', #870, 2.999999999999999112 ) ; +#744 = EDGE_LOOP ( 'NONE', ( #1283, #1222, #148, #1200 ) ) ; +#745 = EDGE_CURVE ( 'NONE', #2849, #818, #3227, .T. ) ; +#746 = EDGE_LOOP ( 'NONE', ( #631, #846, #737, #482 ) ) ; +#747 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -39.93749999999997158, -47.49999999999997868 ) ) ; +#748 = AXIS2_PLACEMENT_3D ( 'NONE', #1250, #998, #2461 ) ; +#749 = ORIENTED_EDGE ( 'NONE', *, *, #2591, .T. ) ; +#750 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#751 = ORIENTED_EDGE ( 'NONE', *, *, #1534, .T. ) ; +#752 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 34.53884078076435316, -49.99999999999999289 ) ) ; +#753 = EDGE_LOOP ( 'NONE', ( #394, #993 ) ) ; +#754 = ADVANCED_FACE ( 'NONE', ( #297, #643 ), #1163, .F. ) ; +#755 = ORIENTED_EDGE ( 'NONE', *, *, #2097, .F. ) ; +#756 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -51.34999999999999432, -50.67499999999999716 ) ) ; +#757 = LINE ( 'NONE', #1620, #677 ) ; +#758 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 37.93094681733414575, 22.49999999999997868 ) ) ; +#759 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#760 = VECTOR ( 'NONE', #91, 1000.000000000000000 ) ; +#761 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#762 = DIRECTION ( 'NONE', ( -0.4999999999999995004, -0.8660254037844390407, 0.0000000000000000000 ) ) ; +#763 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -39.93749999999997158, -47.49999999999997158 ) ) ; +#765 = LINE ( 'NONE', #1780, #1811 ) ; +#766 = ORIENTED_EDGE ( 'NONE', *, *, #1873, .F. ) ; +#767 = EDGE_CURVE ( 'NONE', #611, #913, #1254, .T. ) ; +#768 = CIRCLE ( 'NONE', #1223, 1.625000000000001332 ) ; +#769 = ORIENTED_EDGE ( 'NONE', *, *, #2966, .T. ) ; +#770 = VERTEX_POINT ( 'NONE', #858 ) ; +#771 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#772 = ORIENTED_EDGE ( 'NONE', *, *, #1267, .T. ) ; +#773 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#774 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#775 = FACE_OUTER_BOUND ( 'NONE', #2807, .T. ) ; +#776 = ORIENTED_EDGE ( 'NONE', *, *, #2777, .T. ) ; +#777 = ORIENTED_EDGE ( 'NONE', *, *, #1623, .T. ) ; +#778 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#779 = FACE_BOUND ( 'NONE', #952, .T. ) ; +#780 = ORIENTED_EDGE ( 'NONE', *, *, #1994, .F. ) ; +#781 = LINE ( 'NONE', #2720, #1896 ) ; +#782 = EDGE_CURVE ( 'NONE', #2669, #8, #2257, .T. ) ; +#783 = ORIENTED_EDGE ( 'NONE', *, *, #3091, .T. ) ; +#784 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -53.85000000000000142 ) ) ; +#785 = AXIS2_PLACEMENT_3D ( 'NONE', #2221, #2948, #2706 ) ; +#786 = VERTEX_POINT ( 'NONE', #2612 ) ; +#787 = DIRECTION ( 'NONE', ( -7.671001984939500922E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#788 = EDGE_CURVE ( 'NONE', #201, #2585, #2336, .T. ) ; +#789 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#790 = ORIENTED_EDGE ( 'NONE', *, *, #1736, .F. ) ; +#791 = EDGE_CURVE ( 'NONE', #316, #770, #1566, .T. ) ; +#792 = EDGE_LOOP ( 'NONE', ( #1743, #1753 ) ) ; +#793 = ORIENTED_EDGE ( 'NONE', *, *, #615, .T. ) ; +#794 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.543264972207944962E-15, 0.0000000000000000000 ) ) ; +#795 = ORIENTED_EDGE ( 'NONE', *, *, #621, .T. ) ; +#796 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#797 = VECTOR ( 'NONE', #1875, 1000.000000000000000 ) ; +#798 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -50.67499999999999716 ) ) ; +#799 = DIRECTION ( 'NONE', ( 1.067522139062649685E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#800 = VECTOR ( 'NONE', #2211, 1000.000000000000000 ) ; +#801 = EDGE_LOOP ( 'NONE', ( #531, #465, #436, #2590 ) ) ; +#802 = ADVANCED_FACE ( 'NONE', ( #2946 ), #2859, .F. ) ; +#803 = CIRCLE ( 'NONE', #1909, 2.999999999999999112 ) ; +#804 = EDGE_CURVE ( 'NONE', #931, #2053, #3260, .T. ) ; +#805 = FACE_OUTER_BOUND ( 'NONE', #1323, .T. ) ; +#806 = ADVANCED_FACE ( 'NONE', ( #1552, #1661 ), #3171, .F. ) ; +#807 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.543264972207945751E-15, 0.0000000000000000000 ) ) ; +#808 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#809 = LINE ( 'NONE', #2297, #722 ) ; +#810 = EDGE_CURVE ( 'NONE', #1575, #1761, #1100, .T. ) ; +#811 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#812 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 62.82305285390393834, -47.49999999999999289 ) ) ; +#813 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#814 = ORIENTED_EDGE ( 'NONE', *, *, #2342, .F. ) ; +#815 = DIRECTION ( 'NONE', ( -1.000000000000000000, 3.543264972207944962E-15, 0.0000000000000000000 ) ) ; +#816 = LINE ( 'NONE', #317, #2652 ) ; +#817 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -39.93749999999997158, -53.84999999999999432 ) ) ; +#818 = VERTEX_POINT ( 'NONE', #1966 ) ; +#819 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#820 = EDGE_LOOP ( 'NONE', ( #1609, #1360, #260, #2614, #468, #2209 ) ) ; +#821 = VECTOR ( 'NONE', #1399, 1000.000000000000114 ) ; +#822 = VERTEX_POINT ( 'NONE', #666 ) ; +#823 = VERTEX_POINT ( 'NONE', #1768 ) ; +#824 = CARTESIAN_POINT ( 'NONE', ( 12.68765000000000143, 36.23489379904926011, -47.49999999999999289 ) ) ; +#825 = AXIS2_PLACEMENT_3D ( 'NONE', #1452, #1430, #403 ) ; +#826 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000002126, 39.62699983561905270, -47.49999999999999289 ) ) ; +#827 = EDGE_CURVE ( 'NONE', #3255, #507, #542, .T. ) ; +#828 = ORIENTED_EDGE ( 'NONE', *, *, #2142, .T. ) ; +#829 = VERTEX_POINT ( 'NONE', #2486 ) ; +#830 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -47.49999999999997868 ) ) ; +#831 = VERTEX_POINT ( 'NONE', #2003 ) ; +#832 = VERTEX_POINT ( 'NONE', #738 ) ; +#833 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 62.82305285390393834, -49.99999999999999289 ) ) ; +#834 = CIRCLE ( 'NONE', #1084, 1.625000000000001332 ) ; +#835 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#836 = LINE ( 'NONE', #3082, #196 ) ; +#837 = FACE_OUTER_BOUND ( 'NONE', #1903, .T. ) ; +#838 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -54.09999999999999432, -53.84999999999999432 ) ) ; +#839 = FACE_OUTER_BOUND ( 'NONE', #1359, .T. ) ; +#840 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#841 = EDGE_CURVE ( 'NONE', #530, #1422, #3126, .T. ) ; +#842 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#843 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -50.67499999999999716 ) ) ; +#844 = CIRCLE ( 'NONE', #1433, 11.37500000000000000 ) ; +#845 = VECTOR ( 'NONE', #2820, 1000.000000000000000 ) ; +#846 = ORIENTED_EDGE ( 'NONE', *, *, #2420, .T. ) ; +#847 = LINE ( 'NONE', #2571, #1815 ) ; +#848 = VERTEX_POINT ( 'NONE', #2583 ) ; +#849 = AXIS2_PLACEMENT_3D ( 'NONE', #2438, #2186, #1448 ) ; +#850 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#851 = EDGE_CURVE ( 'NONE', #2621, #611, #176, .T. ) ; +#852 = ORIENTED_EDGE ( 'NONE', *, *, #2080, .T. ) ; +#853 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257538E-15, 6.698886763086040130E-32 ) ) ; +#854 = DIRECTION ( 'NONE', ( -1.000000000000000000, -4.270088556250598741E-15, 0.0000000000000000000 ) ) ; +#855 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999998899, 57.73489379904923879, -49.99999999999999289 ) ) ; +#856 = EDGE_CURVE ( 'NONE', #786, #1562, #2371, .T. ) ; +#857 = ORIENTED_EDGE ( 'NONE', *, *, #1316, .T. ) ; +#858 = CARTESIAN_POINT ( 'NONE', ( -11.37500000000000355, 2.602085213965210642E-15, -53.84999999999999432 ) ) ; +#859 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#860 = CIRCLE ( 'NONE', #733, 1.625000000000001332 ) ; +#861 = EDGE_LOOP ( 'NONE', ( #2287, #3015 ) ) ; +#862 = VECTOR ( 'NONE', #2806, 1000.000000000000000 ) ; +#863 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#864 = EDGE_LOOP ( 'NONE', ( #3087, #1326, #991, #2405 ) ) ; +#865 = DIRECTION ( 'NONE', ( 0.4999999999999981681, 0.8660254037844397068, 0.0000000000000000000 ) ) ; +#866 = FACE_BOUND ( 'NONE', #1584, .T. ) ; +#867 = ORIENTED_EDGE ( 'NONE', *, *, #2366, .T. ) ; +#868 = PLANE ( 'NONE', #2160 ) ; +#869 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#870 = AXIS2_PLACEMENT_3D ( 'NONE', #2785, #3033, #1557 ) ; +#871 = VERTEX_POINT ( 'NONE', #2600 ) ; +#872 = EDGE_CURVE ( 'NONE', #770, #316, #641, .T. ) ; +#873 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#874 = VERTEX_POINT ( 'NONE', #328 ) ; +#875 = ORIENTED_EDGE ( 'NONE', *, *, #2741, .F. ) ; +#876 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 34.53884078076435316, -49.99999999999999289 ) ) ; +#877 = EDGE_CURVE ( 'NONE', #1833, #2139, #416, .T. ) ; +#878 = ORIENTED_EDGE ( 'NONE', *, *, #478, .T. ) ; +#879 = PLANE ( 'NONE', #2740 ) ; +#880 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.206764157201257538E-15, -6.698886763086040130E-32 ) ) ; +#881 = ADVANCED_FACE ( 'NONE', ( #775 ), #2694, .F. ) ; +#882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#883 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 36.18094681733413864, -53.84999999999999432 ) ) ; +#884 = LINE ( 'NONE', #2945, #2256 ) ; +#885 = FACE_OUTER_BOUND ( 'NONE', #1619, .T. ) ; +#886 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999077, 61.12699983561903849, -49.99999999999999289 ) ) ; +#887 = VECTOR ( 'NONE', #3135, 1000.000000000000000 ) ; +#888 = CYLINDRICAL_SURFACE ( 'NONE', #1580, 1.625000000000001332 ) ; +#889 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#890 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#891 = CIRCLE ( 'NONE', #2705, 1.750000000000001554 ) ; +#892 = ADVANCED_FACE ( 'NONE', ( #1381 ), #651, .F. ) ; +#893 = AXIS2_PLACEMENT_3D ( 'NONE', #2023, #2273, #293 ) ; +#894 = ORIENTED_EDGE ( 'NONE', *, *, #2800, .T. ) ; +#895 = EDGE_CURVE ( 'NONE', #1861, #2585, #728, .T. ) ; +#896 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#897 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#898 = ORIENTED_EDGE ( 'NONE', *, *, #1336, .T. ) ; +#899 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#900 = CIRCLE ( 'NONE', #399, 1.625000000000001332 ) ; +#901 = VERTEX_POINT ( 'NONE', #1769 ) ; +#902 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000003902, 36.23489379904924590, -49.99999999999999289 ) ) ; +#903 = LINE ( 'NONE', #1772, #2203 ) ; +#904 = ORIENTED_EDGE ( 'NONE', *, *, #1435, .F. ) ; +#905 = EDGE_LOOP ( 'NONE', ( #2204, #2402 ) ) ; +#906 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -39.93749999999997158, -47.49999999999997868 ) ) ; +#907 = EDGE_CURVE ( 'NONE', #430, #1109, #3238, .T. ) ; +#908 = ORIENTED_EDGE ( 'NONE', *, *, #529, .T. ) ; +#909 = VECTOR ( 'NONE', #1631, 1000.000000000000000 ) ; +#910 = AXIS2_PLACEMENT_3D ( 'NONE', #2984, #2219, #2704 ) ; +#911 = ORIENTED_EDGE ( 'NONE', *, *, #49, .F. ) ; +#912 = EDGE_CURVE ( 'NONE', #2089, #1350, #302, .T. ) ; +#913 = VERTEX_POINT ( 'NONE', #2757 ) ; +#914 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#915 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 61.18094681733413864, -50.00000000000000000 ) ) ; +#916 = EDGE_CURVE ( 'NONE', #1735, #1988, #2423, .T. ) ; +#917 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#918 = LINE ( 'NONE', #1095, #2916 ) ; +#919 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999610, 57.73489379904925300, -47.50000000000000000 ) ) ; +#920 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#921 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 59.43094681733413864, -53.84999999999999432 ) ) ; +#922 = LINE ( 'NONE', #413, #2450 ) ; +#923 = LINE ( 'NONE', #3210, #1412 ) ; +#924 = LINE ( 'NONE', #2642, #337 ) ; +#925 = PLANE ( 'NONE', #1516 ) ; +#926 = CARTESIAN_POINT ( 'NONE', ( 12.50000000000001243, -15.49999999999997868, -47.49999999999999289 ) ) ; +#927 = ORIENTED_EDGE ( 'NONE', *, *, #1873, .T. ) ; +#928 = AXIS2_PLACEMENT_3D ( 'NONE', #1201, #633, #1487 ) ; +#929 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 57.73489379904926011, -49.99999999999999289 ) ) ; +#930 = VECTOR ( 'NONE', #288, 1000.000000000000000 ) ; +#931 = VERTEX_POINT ( 'NONE', #1059 ) ; +#932 = VECTOR ( 'NONE', #1980, 1000.000000000000000 ) ; +#933 = EDGE_CURVE ( 'NONE', #1766, #2962, #1457, .T. ) ; +#934 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#935 = ORIENTED_EDGE ( 'NONE', *, *, #2142, .F. ) ; +#936 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#937 = AXIS2_PLACEMENT_3D ( 'NONE', #3187, #450, #2640 ) ; +#938 = LINE ( 'NONE', #2771, #930 ) ; +#939 = ADVANCED_FACE ( 'NONE', ( #3045 ), #256, .T. ) ; +#940 = ORIENTED_EDGE ( 'NONE', *, *, #1948, .T. ) ; +#941 = ADVANCED_FACE ( 'NONE', ( #2452, #2412 ), #519, .T. ) ; +#942 = ORIENTED_EDGE ( 'NONE', *, *, #1685, .F. ) ; +#943 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000004441, 4.551642501394056340E-16, -53.85000000000000142 ) ) ; +#944 = ORIENTED_EDGE ( 'NONE', *, *, #261, .F. ) ; +#945 = ORIENTED_EDGE ( 'NONE', *, *, #2471, .F. ) ; +#946 = EDGE_CURVE ( 'NONE', #593, #1146, #1601, .T. ) ; +#947 = ORIENTED_EDGE ( 'NONE', *, *, #810, .F. ) ; +#948 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999077, 61.12699983561903849, -47.49999999999999289 ) ) ; +#949 = LINE ( 'NONE', #1827, #1667 ) ; +#950 = DIRECTION ( 'NONE', ( -3.543264972207944962E-15, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#951 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999077, 61.12699983561903849, -49.99999999999999289 ) ) ; +#952 = EDGE_LOOP ( 'NONE', ( #1162, #3216, #624, #1074, #1314, #345 ) ) ; +#953 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#954 = AXIS2_PLACEMENT_3D ( 'NONE', #2464, #203, #2959 ) ; +#955 = EDGE_CURVE ( 'NONE', #1204, #2797, #2369, .T. ) ; +#956 = EDGE_LOOP ( 'NONE', ( #1370, #1470 ) ) ; +#957 = CIRCLE ( 'NONE', #1928, 1.625000000000001332 ) ; +#958 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#959 = LINE ( 'NONE', #463, #2711 ) ; +#960 = EDGE_CURVE ( 'NONE', #481, #204, #1720, .T. ) ; +#961 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#962 = VECTOR ( 'NONE', #2280, 1000.000000000000000 ) ; +#963 = ORIENTED_EDGE ( 'NONE', *, *, #3030, .T. ) ; +#964 = VECTOR ( 'NONE', #515, 1000.000000000000000 ) ; +#965 = PLANE ( 'NONE', #107 ) ; +#966 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999994132, 61.12699983561903849, -49.99999999999999289 ) ) ; +#967 = ADVANCED_FACE ( 'NONE', ( #451 ), #3184, .F. ) ; +#968 = LINE ( 'NONE', #1791, #3000 ) ; +#969 = EDGE_CURVE ( 'NONE', #26, #1795, #2220, .T. ) ; +#970 = ORIENTED_EDGE ( 'NONE', *, *, #2147, .F. ) ; +#971 = ADVANCED_FACE ( 'NONE', ( #1639, #1043 ), #1332, .F. ) ; +#972 = ORIENTED_EDGE ( 'NONE', *, *, #2815, .F. ) ; +#973 = PLANE ( 'NONE', #748 ) ; +#974 = FACE_OUTER_BOUND ( 'NONE', #3061, .T. ) ; +#975 = MANIFOLD_SOLID_BREP ( 'Mirror3', #2755 ) ; +#976 = ORIENTED_EDGE ( 'NONE', *, *, #1438, .T. ) ; +#977 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#978 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#979 = EDGE_CURVE ( 'NONE', #1439, #393, #1213, .T. ) ; +#980 = CARTESIAN_POINT ( 'NONE', ( -18.50000000000000355, -15.49999999999997868, -47.49999999999999289 ) ) ; +#981 = CIRCLE ( 'NONE', #3113, 1.749999999999999778 ) ; +#982 = CYLINDRICAL_SURFACE ( 'NONE', #3048, 1.750000000000001554 ) ; +#983 = PLANE ( 'NONE', #3093 ) ; +#984 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#985 = ORIENTED_EDGE ( 'NONE', *, *, #2101, .T. ) ; +#986 = EDGE_CURVE ( 'NONE', #1146, #593, #10, .T. ) ; +#987 = FACE_BOUND ( 'NONE', #1668, .T. ) ; +#988 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -53.84999999999999432 ) ) ; +#989 = ORIENTED_EDGE ( 'NONE', *, *, #1877, .F. ) ; +#990 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#991 = ORIENTED_EDGE ( 'NONE', *, *, #1355, .T. ) ; +#992 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#993 = ORIENTED_EDGE ( 'NONE', *, *, #2147, .T. ) ; +#994 = FACE_OUTER_BOUND ( 'NONE', #2869, .T. ) ; +#995 = ORIENTED_EDGE ( 'NONE', *, *, #1973, .F. ) ; +#996 = CARTESIAN_POINT ( 'NONE', ( -12.68765000000000143, 39.62699983561905270, -47.49999999999999289 ) ) ; +#997 = AXIS2_PLACEMENT_3D ( 'NONE', #3014, #1083, #1343 ) ; +#998 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.671001984939500922E-16, 0.0000000000000000000 ) ) ; +#1000 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 39.62699983561905270, -49.99999999999999289 ) ) ; +#999 = CIRCLE ( 'NONE', #1421, 1.625000000000001332 ) ; +#1001 = AXIS2_PLACEMENT_3D ( 'NONE', #2620, #1372, #355 ) ; +#1002 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999077, 61.12699983561903849, -49.99999999999999289 ) ) ; +#1003 = EDGE_CURVE ( 'NONE', #2557, #1751, #1436, .T. ) ; +#1004 = LINE ( 'NONE', #1801, #2183 ) ; +#1005 = FACE_OUTER_BOUND ( 'NONE', #1692, .T. ) ; +#1006 = PRESENTATION_STYLE_ASSIGNMENT (( #2864 ) ) ; +#1007 = VECTOR ( 'NONE', #1134, 1000.000000000000000 ) ; +#1008 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1009 = FACE_OUTER_BOUND ( 'NONE', #2726, .T. ) ; +#1010 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1011 = CARTESIAN_POINT ( 'NONE', ( -13.75000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#1012 = PLANE ( 'NONE', #25 ) ; +#1013 = VERTEX_POINT ( 'NONE', #301 ) ; +#1014 = DIRECTION ( 'NONE', ( -3.543264972207945751E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1015 = EDGE_LOOP ( 'NONE', ( #206, #2944, #708, #2074 ) ) ; +#1016 = EDGE_CURVE ( 'NONE', #2632, #2509, #1921, .T. ) ; +#1017 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1018 = VECTOR ( 'NONE', #2006, 1000.000000000000000 ) ; +#1019 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1020 = VERTEX_POINT ( 'NONE', #259 ) ; +#1021 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -39.93749999999997158, -47.49999999999997158 ) ) ; +#1022 = AXIS2_PLACEMENT_3D ( 'NONE', #673, #1178, #3149 ) ; +#1023 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1024 = EDGE_CURVE ( 'NONE', #166, #313, #1482, .T. ) ; +#1025 = VECTOR ( 'NONE', #1586, 1000.000000000000114 ) ; +#1026 = EDGE_LOOP ( 'NONE', ( #3213, #2905, #2362, #995 ) ) ; +#1027 = EDGE_CURVE ( 'NONE', #2010, #1423, #2628, .T. ) ; +#1028 = EDGE_LOOP ( 'NONE', ( #2360, #2513 ) ) ; +#1029 = CARTESIAN_POINT ( 'NONE', ( 12.50000000000001066, 15.50000000000001243, -47.49999999999999289 ) ) ; +#1030 = VECTOR ( 'NONE', #1478, 1000.000000000000000 ) ; +#1031 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -53.85000000000000142 ) ) ; +#1032 = VERTEX_POINT ( 'NONE', #2378 ) ; +#1033 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1034 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000000350, 57.73489379904924590, -47.49999999999999289 ) ) ; +#1035 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -47.49999999999998579 ) ) ; +#1037 = ORIENTED_EDGE ( 'NONE', *, *, #1804, .T. ) ; +#1036 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1038 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -49.04999999999999716 ) ) ; +#1039 = ORIENTED_EDGE ( 'NONE', *, *, #1998, .T. ) ; +#1040 = ORIENTED_EDGE ( 'NONE', *, *, #325, .F. ) ; +#1041 = ORIENTED_EDGE ( 'NONE', *, *, #156, .T. ) ; +#1042 = FACE_OUTER_BOUND ( 'NONE', #2098, .T. ) ; +#1043 = FACE_OUTER_BOUND ( 'NONE', #1922, .T. ) ; +#1044 = ADVANCED_FACE ( 'NONE', ( #582 ), #3146, .F. ) ; +#1045 = VECTOR ( 'NONE', #616, 1000.000000000000000 ) ; +#1046 = CYLINDRICAL_SURFACE ( 'NONE', #675, 2.999999999999999112 ) ; +#1047 = EDGE_CURVE ( 'NONE', #2953, #1347, #2107, .T. ) ; +#1048 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1049 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 62.82305285390393834, -47.49999999999999289 ) ) ; +#1050 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1051 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000003902, 36.23489379904924590, -49.99999999999999289 ) ) ; +#1052 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -53.85000000000000142 ) ) ; +#1053 = FACE_OUTER_BOUND ( 'NONE', #281, .T. ) ; +#1054 = EDGE_CURVE ( 'NONE', #2042, #1960, #99, .T. ) ; +#1055 = VECTOR ( 'NONE', #2179, 1000.000000000000000 ) ; +#1056 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257538E-15, 6.698886763086040130E-32 ) ) ; +#1057 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1058 = CARTESIAN_POINT ( 'NONE', ( -12.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1059 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -34.06249999999997158, -47.49999999999997868 ) ) ; +#1060 = VECTOR ( 'NONE', #1614, 1000.000000000000000 ) ; +#1061 = ORIENTED_EDGE ( 'NONE', *, *, #527, .F. ) ; +#1062 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999998010, -47.49999999999999289 ) ) ; +#1063 = ORIENTED_EDGE ( 'NONE', *, *, #3195, .T. ) ; +#1064 = STYLED_ITEM ( 'NONE', ( #1006 ), #2286 ) ; +#1065 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 37.93094681733413864, -50.00000000000000000 ) ) ; +#1066 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1067 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1068 = VECTOR ( 'NONE', #1792, 1000.000000000000000 ) ; +#1069 = AXIS2_PLACEMENT_3D ( 'NONE', #3229, #2743, #2507 ) ; +#1070 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .F. ) ; +#1071 = FILL_AREA_STYLE_COLOUR ( '', #332 ) ; +#1072 = LINE ( 'NONE', #2712, #2976 ) ; +#1073 = AXIS2_PLACEMENT_3D ( 'NONE', #228, #1215, #2488 ) ; +#1074 = ORIENTED_EDGE ( 'NONE', *, *, #1211, .F. ) ; +#1075 = EDGE_CURVE ( 'NONE', #2015, #2277, #1190, .T. ) ; +#1076 = VERTEX_POINT ( 'NONE', #2698 ) ; +#1077 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1078 = FACE_OUTER_BOUND ( 'NONE', #2469, .T. ) ; +#1079 = ORIENTED_EDGE ( 'NONE', *, *, #134, .F. ) ; +#1080 = VERTEX_POINT ( 'NONE', #1089 ) ; +#1081 = ORIENTED_EDGE ( 'NONE', *, *, #2448, .F. ) ; +#1082 = ORIENTED_EDGE ( 'NONE', *, *, #955, .F. ) ; +#1083 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1084 = AXIS2_PLACEMENT_3D ( 'NONE', #1342, #1863, #850 ) ; +#1085 = VECTOR ( 'NONE', #1767, 1000.000000000000000 ) ; +#1086 = DIRECTION ( 'NONE', ( -3.543264972207944962E-15, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1087 = EDGE_CURVE ( 'NONE', #2793, #1549, #352, .T. ) ; +#1088 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1089 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999432, 61.12699983561904560, -47.49999999999999289 ) ) ; +#1090 = CARTESIAN_POINT ( 'NONE', ( 6.812349999999998573, 61.12699983561904560, -49.99999999999999289 ) ) ; +#1091 = CIRCLE ( 'NONE', #2581, 1.749999999999999778 ) ; +#1092 = FACE_OUTER_BOUND ( 'NONE', #1673, .T. ) ; +#1093 = VECTOR ( 'NONE', #2230, 1000.000000000000000 ) ; +#1094 = AXIS2_PLACEMENT_3D ( 'NONE', #2225, #2479, #221 ) ; +#1095 = CARTESIAN_POINT ( 'NONE', ( 13.75000000000001066, 15.50000000000001243, -53.85000000000000142 ) ) ; +#1096 = EDGE_CURVE ( 'NONE', #2015, #3245, #523, .T. ) ; +#1097 = FACE_OUTER_BOUND ( 'NONE', #1965, .T. ) ; +#1098 = ORIENTED_EDGE ( 'NONE', *, *, #1336, .F. ) ; +#1099 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.206764157201257538E-15, -6.698886763086040130E-32 ) ) ; +#1100 = LINE ( 'NONE', #1499, #1297 ) ; +#1101 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.114001323292979579E-16, 0.0000000000000000000 ) ) ; +#1102 = FACE_BOUND ( 'NONE', #2207, .T. ) ; +#1103 = VECTOR ( 'NONE', #2084, 1000.000000000000000 ) ; +#1104 = ORIENTED_EDGE ( 'NONE', *, *, #1642, .T. ) ; +#1105 = EDGE_CURVE ( 'NONE', #2797, #1204, #1961, .T. ) ; +#1106 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -52.29999999999999716 ) ) ; +#1107 = VECTOR ( 'NONE', #2821, 1000.000000000000000 ) ; +#1108 = AXIS2_PLACEMENT_3D ( 'NONE', #1495, #2956, #1778 ) ; +#1109 = VERTEX_POINT ( 'NONE', #1466 ) ; +#1110 = ORIENTED_EDGE ( 'NONE', *, *, #1144, .T. ) ; +#1111 = CARTESIAN_POINT ( 'NONE', ( -13.35000000000004583, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1112 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1113 = ORIENTED_EDGE ( 'NONE', *, *, #1649, .T. ) ; +#1114 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1115 = ORIENTED_EDGE ( 'NONE', *, *, #2359, .T. ) ; +#1116 = AXIS2_PLACEMENT_3D ( 'NONE', #3161, #2681, #2767 ) ; +#1117 = VERTEX_POINT ( 'NONE', #2492 ) ; +#1118 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #1814 ) ; +#1119 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1120 = EDGE_CURVE ( 'NONE', #45, #848, #1465, .T. ) ; +#1121 = EDGE_LOOP ( 'NONE', ( #3179, #1321 ) ) ; +#1122 = ADVANCED_FACE ( 'NONE', ( #1747, #2126 ), #983, .F. ) ; +#1123 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -51.35000000000000142, -47.49999999999998579 ) ) ; +#1124 = ORIENTED_EDGE ( 'NONE', *, *, #109, .F. ) ; +#1125 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1126 = VERTEX_POINT ( 'NONE', #2041 ) ; +#1127 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -50.67499999999999716 ) ) ; +#1128 = FACE_OUTER_BOUND ( 'NONE', #142, .T. ) ; +#1129 = PLANE ( 'NONE', #2508 ) ; +#1130 = VECTOR ( 'NONE', #736, 1000.000000000000000 ) ; +#1131 = AXIS2_PLACEMENT_3D ( 'NONE', #2120, #1352, #2313 ) ; +#1132 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -54.09999999999999432, -47.49999999999998579 ) ) ; +#1133 = AXIS2_PLACEMENT_3D ( 'NONE', #1111, #853, #2589 ) ; +#1134 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1135 = CIRCLE ( 'NONE', #456, 1.749999999999991118 ) ; +#1136 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -38.62499999999999289, -50.67499999999999716 ) ) ; +#1137 = LINE ( 'NONE', #3178, #2069 ) ; +#1138 = FACE_OUTER_BOUND ( 'NONE', #2553, .T. ) ; +#1139 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #1395 ) ; +#1140 = EDGE_CURVE ( 'NONE', #2772, #3160, #555, .T. ) ; +#1141 = EDGE_LOOP ( 'NONE', ( #3209, #1711 ) ) ; +#1142 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1143 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 56.03884078076433894, -49.99999999999999289 ) ) ; +#1144 = EDGE_CURVE ( 'NONE', #2086, #2473, #1230, .T. ) ; +#1145 = ORIENTED_EDGE ( 'NONE', *, *, #1480, .T. ) ; +#1146 = VERTEX_POINT ( 'NONE', #2782 ) ; +#1147 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1148 = VECTOR ( 'NONE', #526, 1000.000000000000000 ) ; +#1149 = ORIENTED_EDGE ( 'NONE', *, *, #1731, .F. ) ; +#1150 = FACE_BOUND ( 'NONE', #3233, .T. ) ; +#1151 = ORIENTED_EDGE ( 'NONE', *, *, #2992, .F. ) ; +#1152 = ORIENTED_EDGE ( 'NONE', *, *, #1368, .T. ) ; +#1153 = AXIS2_PLACEMENT_3D ( 'NONE', #1591, #3100, #835 ) ; +#1154 = DIRECTION ( 'NONE', ( 3.543264972207944962E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1155 = EDGE_LOOP ( 'NONE', ( #1574, #3124, #904, #2404 ) ) ; +#1156 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -51.35000000000000142, -53.84999999999999432 ) ) ; +#1157 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000002126, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1158 = AXIS2_PLACEMENT_3D ( 'NONE', #3077, #1101, #1346 ) ; +#1159 = ORIENTED_EDGE ( 'NONE', *, *, #2202, .F. ) ; +#1160 = EDGE_CURVE ( 'NONE', #8, #2000, #2969, .T. ) ; +#1161 = ORIENTED_EDGE ( 'NONE', *, *, #2966, .F. ) ; +#1162 = ORIENTED_EDGE ( 'NONE', *, *, #1776, .F. ) ; +#1163 = PLANE ( 'NONE', #3230 ) ; +#1164 = EDGE_CURVE ( 'NONE', #199, #2927, #1693, .T. ) ; +#1165 = ORIENTED_EDGE ( 'NONE', *, *, #1929, .T. ) ; +#1166 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .F. ) ; +#1167 = DIRECTION ( 'NONE', ( 0.4999999999999981681, 0.8660254037844397068, 0.0000000000000000000 ) ) ; +#1168 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1169 = VECTOR ( 'NONE', #3064, 1000.000000000000000 ) ; +#1170 = LINE ( 'NONE', #320, #2524 ) ; +#1171 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -54.09999999999999432, -49.04999999999999716 ) ) ; +#1172 = CARTESIAN_POINT ( 'NONE', ( -13.35000000000004761, -38.62499999999999289, -50.67499999999999716 ) ) ; +#1173 = ADVANCED_FACE ( 'NONE', ( #511 ), #2899, .F. ) ; +#1174 = LINE ( 'NONE', #2695, #1987 ) ; +#1175 = ORIENTED_EDGE ( 'NONE', *, *, #31, .F. ) ; +#1176 = ADVANCED_FACE ( 'NONE', ( #455 ), #1635, .F. ) ; +#1177 = LINE ( 'NONE', #747, #1337 ) ; +#1178 = DIRECTION ( 'NONE', ( -0.4999999999999992228, 0.8660254037844391517, 0.0000000000000000000 ) ) ; +#1179 = VECTOR ( 'NONE', #1358, 1000.000000000000000 ) ; +#1180 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1181 = AXIS2_PLACEMENT_3D ( 'NONE', #2027, #789, #9 ) ; +#1182 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999432, 61.12699983561904560, -49.99999999999999289 ) ) ; +#1183 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1184 = VECTOR ( 'NONE', #1572, 1000.000000000000000 ) ; +#1185 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1186 = AXIS2_PLACEMENT_3D ( 'NONE', #2421, #2935, #425 ) ; +#1187 = EDGE_LOOP ( 'NONE', ( #35, #1498, #2400, #2193 ) ) ; +#1188 = ORIENTED_EDGE ( 'NONE', *, *, #1456, .T. ) ; +#1189 = EDGE_CURVE ( 'NONE', #1883, #1517, #2818, .T. ) ; +#1190 = CIRCLE ( 'NONE', #2661, 1.749999999999999778 ) ; +#1191 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -54.09999999999999432, -50.67499999999999716 ) ) ; +#1192 = VERTEX_POINT ( 'NONE', #1859 ) ; +#1193 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1194 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1195 = ORIENTED_EDGE ( 'NONE', *, *, #1205, .T. ) ; +#1196 = ORIENTED_EDGE ( 'NONE', *, *, #715, .T. ) ; +#1197 = VECTOR ( 'NONE', #2875, 1000.000000000000000 ) ; +#1198 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1199 = VERTEX_POINT ( 'NONE', #98 ) ; +#1200 = ORIENTED_EDGE ( 'NONE', *, *, #1502, .F. ) ; +#1201 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#1202 = PLANE ( 'NONE', #3131 ) ; +#1203 = VECTOR ( 'NONE', #1662, 1000.000000000000114 ) ; +#1204 = VERTEX_POINT ( 'NONE', #3079 ) ; +#1205 = EDGE_CURVE ( 'NONE', #8, #1865, #3063, .T. ) ; +#1206 = ORIENTED_EDGE ( 'NONE', *, *, #362, .T. ) ; +#1207 = ADVANCED_FACE ( 'NONE', ( #1393 ), #153, .F. ) ; +#1208 = PLANE ( 'NONE', #2547 ) ; +#1209 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#1211 = EDGE_CURVE ( 'NONE', #1013, #286, #1894, .T. ) ; +#1212 = PLANE ( 'NONE', #937 ) ; +#1213 = LINE ( 'NONE', #581, #1169 ) ; +#1214 = LINE ( 'NONE', #335, #1045 ) ; +#1215 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1216 = LINE ( 'NONE', #483, #1130 ) ; +#1217 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1218 = FACE_OUTER_BOUND ( 'NONE', #2235, .T. ) ; +#1219 = VECTOR ( 'NONE', #2871, 1000.000000000000000 ) ; +#1220 = LINE ( 'NONE', #2102, #1997 ) ; +#1221 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, -3.469446951953578444E-17, -53.85000000000000142 ) ) ; +#1222 = ORIENTED_EDGE ( 'NONE', *, *, #2389, .T. ) ; +#1223 = AXIS2_PLACEMENT_3D ( 'NONE', #1441, #1473, #652 ) ; +#1224 = CARTESIAN_POINT ( 'NONE', ( -12.68765000000000143, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1225 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 68.00000000000000000, -47.50000000000000000 ) ) ; +#1226 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1227 = ORIENTED_EDGE ( 'NONE', *, *, #2822, .T. ) ; +#1228 = EDGE_CURVE ( 'NONE', #305, #1013, #689, .T. ) ; +#1229 = ORIENTED_EDGE ( 'NONE', *, *, #2227, .F. ) ; +#1230 = CIRCLE ( 'NONE', #1391, 2.999999999999999112 ) ; +#1231 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1232 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -50.67499999999999716 ) ) ; +#1233 = PLANE ( 'NONE', #2499 ) ; +#1234 = ORIENTED_EDGE ( 'NONE', *, *, #1228, .T. ) ; +#1235 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1236 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -51.35000000000000142, -47.49999999999998579 ) ) ; +#1237 = VERTEX_POINT ( 'NONE', #1512 ) ; +#1238 = ADVANCED_FACE ( 'NONE', ( #152, #3252 ), #2663, .T. ) ; +#1239 = ORIENTED_EDGE ( 'NONE', *, *, #31, .T. ) ; +#1240 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -54.09999999999999432, -47.49999999999999289 ) ) ; +#1241 = EDGE_LOOP ( 'NONE', ( #1657, #1286, #234, #1764 ) ) ; +#1242 = ORIENTED_EDGE ( 'NONE', *, *, #1931, .F. ) ; +#1243 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 62.82305285390393834, -49.99999999999999289 ) ) ; +#1244 = ORIENTED_EDGE ( 'NONE', *, *, #2244, .F. ) ; +#1245 = ORIENTED_EDGE ( 'NONE', *, *, #1506, .T. ) ; +#1246 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1247 = EDGE_CURVE ( 'NONE', #1439, #2161, #2582, .T. ) ; +#1248 = CIRCLE ( 'NONE', #3129, 1.625000000000001332 ) ; +#1249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1250 = CARTESIAN_POINT ( 'NONE', ( 12.68765000000000143, 36.23489379904926011, -49.99999999999999289 ) ) ; +#1251 = VECTOR ( 'NONE', #1463, 1000.000000000000114 ) ; +#1252 = ADVANCED_FACE ( 'NONE', ( #433 ), #2081, .F. ) ; +#1253 = EDGE_LOOP ( 'NONE', ( #663, #1206, #2132, #2745 ) ) ; +#1254 = LINE ( 'NONE', #1357, #3152 ) ; +#1255 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1256 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000000350, 57.73489379904924590, -49.99999999999999289 ) ) ; +#1257 = FACE_OUTER_BOUND ( 'NONE', #50, .T. ) ; +#1258 = FACE_OUTER_BOUND ( 'NONE', #1400, .T. ) ; +#1259 = ORIENTED_EDGE ( 'NONE', *, *, #1522, .F. ) ; +#1260 = EDGE_CURVE ( 'NONE', #356, #823, #1072, .T. ) ; +#1261 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1262 = ORIENTED_EDGE ( 'NONE', *, *, #2552, .F. ) ; +#1263 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 56.03884078076434605, -47.49999999999999289 ) ) ; +#1264 = ORIENTED_EDGE ( 'NONE', *, *, #856, .T. ) ; +#1265 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 68.00000000000000000, -47.50000000000000000 ) ) ; +#1266 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 61.18094681733413864, -50.00000000000000000 ) ) ; +#1267 = EDGE_CURVE ( 'NONE', #589, #3132, #903, .T. ) ; +#1268 = LINE ( 'NONE', #1759, #34 ) ; +#1269 = ORIENTED_EDGE ( 'NONE', *, *, #1267, .F. ) ; +#1270 = EDGE_CURVE ( 'NONE', #1761, #2927, #3168, .T. ) ; +#1271 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1272 = AXIS2_PLACEMENT_3D ( 'NONE', #1221, #2232, #3248 ) ; +#1273 = ORIENTED_EDGE ( 'NONE', *, *, #827, .T. ) ; +#1274 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1275 = ORIENTED_EDGE ( 'NONE', *, *, #3243, .F. ) ; +#1276 = CARTESIAN_POINT ( 'NONE', ( -12.68765000000000143, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1277 = CARTESIAN_POINT ( 'NONE', ( -11.37500000000000355, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#1278 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1279 = ORIENTED_EDGE ( 'NONE', *, *, #1205, .F. ) ; +#1280 = FACE_OUTER_BOUND ( 'NONE', #395, .T. ) ; +#1281 = ORIENTED_EDGE ( 'NONE', *, *, #3030, .F. ) ; +#1282 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999998899, 57.73489379904923879, -49.99999999999999289 ) ) ; +#1283 = ORIENTED_EDGE ( 'NONE', *, *, #2062, .T. ) ; +#1284 = AXIS2_PLACEMENT_3D ( 'NONE', #1714, #1955, #2210 ) ; +#1285 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1286 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .F. ) ; +#1287 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1288 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 34.53884078076435316, -49.99999999999999289 ) ) ; +#1290 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1289 = VECTOR ( 'NONE', #580, 1000.000000000000000 ) ; +#1291 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 59.43094681733413864, -50.00000000000000000 ) ) ; +#1292 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1293 = EDGE_CURVE ( 'NONE', #1458, #1204, #2166, .T. ) ; +#1294 = CIRCLE ( 'NONE', #1186, 1.749999999999999778 ) ; +#1295 = CIRCLE ( 'NONE', #613, 1.749999999999999778 ) ; +#1296 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -54.09999999999998721, 22.49999999999997868 ) ) ; +#1297 = VECTOR ( 'NONE', #1474, 1000.000000000000000 ) ; +#1298 = CARTESIAN_POINT ( 'NONE', ( 11.37499999999999645, 3.995120947995324530E-15, -51.34999999999999432 ) ) ; +#1299 = LINE ( 'NONE', #446, #646 ) ; +#1300 = ORIENTED_EDGE ( 'NONE', *, *, #347, .F. ) ; +#1301 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1302 = ORIENTED_EDGE ( 'NONE', *, *, #114, .F. ) ; +#1303 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1432 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2837, #3062, #1577 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1304 = ORIENTED_EDGE ( 'NONE', *, *, #2804, .F. ) ; +#1305 = ORIENTED_EDGE ( 'NONE', *, *, #529, .F. ) ; +#1306 = AXIS2_PLACEMENT_3D ( 'NONE', #2351, #96, #1345 ) ; +#1307 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000002126, 36.23489379904926011, -47.49999999999999289 ) ) ; +#1308 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1309 = ORIENTED_EDGE ( 'NONE', *, *, #458, .T. ) ; +#1310 = AXIS2_PLACEMENT_3D ( 'NONE', #966, #2682, #1501 ) ; +#1311 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1312 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1313 = EDGE_CURVE ( 'NONE', #1799, #1317, #743, .T. ) ; +#1314 = ORIENTED_EDGE ( 'NONE', *, *, #621, .F. ) ; +#1315 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1316 = EDGE_CURVE ( 'NONE', #70, #1459, #588, .T. ) ; +#1317 = VERTEX_POINT ( 'NONE', #1029 ) ; +#1318 = ORIENTED_EDGE ( 'NONE', *, *, #791, .F. ) ; +#1319 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000003902, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1320 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000003902, 39.62699983561905270, -47.49999999999999289 ) ) ; +#1321 = ORIENTED_EDGE ( 'NONE', *, *, #2645, .F. ) ; +#1322 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1323 = EDGE_LOOP ( 'NONE', ( #3253, #1262, #1613, #1479 ) ) ; +#1324 = VERTEX_POINT ( 'NONE', #1282 ) ; +#1325 = EDGE_CURVE ( 'NONE', #1892, #2171, #1699, .T. ) ; +#1326 = ORIENTED_EDGE ( 'NONE', *, *, #1595, .F. ) ; +#1327 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -47.49999999999997158 ) ) ; +#1328 = AXIS2_PLACEMENT_3D ( 'NONE', #2670, #2928, #2196 ) ; +#1329 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1330 = LINE ( 'NONE', #817, #1289 ) ; +#1331 = EDGE_CURVE ( 'NONE', #1549, #2292, #938, .T. ) ; +#1332 = PLANE ( 'NONE', #997 ) ; +#1333 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#1334 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#1335 = CIRCLE ( 'NONE', #2305, 1.625000000000001332 ) ; +#1336 = EDGE_CURVE ( 'NONE', #1919, #669, #2624, .T. ) ; +#1337 = VECTOR ( 'NONE', #1271, 1000.000000000000000 ) ; +#1338 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1339 = CIRCLE ( 'NONE', #2140, 1.625000000000001332 ) ; +#1340 = ORIENTED_EDGE ( 'NONE', *, *, #2030, .T. ) ; +#1341 = LINE ( 'NONE', #1307, #1184 ) ; +#1342 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -54.09999999999999432, -50.67499999999999716 ) ) ; +#1343 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1344 = EDGE_LOOP ( 'NONE', ( #2965, #2734, #57, #378 ) ) ; +#1345 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1346 = DIRECTION ( 'NONE', ( 5.114001323292979579E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1347 = VERTEX_POINT ( 'NONE', #1090 ) ; +#1348 = DIRECTION ( 'NONE', ( -1.000000000000000000, -4.270088556250602685E-15, 0.0000000000000000000 ) ) ; +#1349 = AXIS2_PLACEMENT_3D ( 'NONE', #758, #719, #2527 ) ; +#1350 = VERTEX_POINT ( 'NONE', #2115 ) ; +#1351 = ADVANCED_FACE ( 'NONE', ( #1925 ), #3165, .F. ) ; +#1352 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1353 = ORIENTED_EDGE ( 'NONE', *, *, #238, .F. ) ; +#1354 = CARTESIAN_POINT ( 'NONE', ( -18.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1355 = EDGE_CURVE ( 'NONE', #313, #339, #264, .T. ) ; +#1356 = ORIENTED_EDGE ( 'NONE', *, *, #946, .F. ) ; +#1357 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -54.09999999999999432, -47.49999999999998579 ) ) ; +#1358 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1359 = EDGE_LOOP ( 'NONE', ( #2445, #2350, #2633, #2729 ) ) ; +#1360 = ORIENTED_EDGE ( 'NONE', *, *, #2868, .F. ) ; +#1361 = ORIENTED_EDGE ( 'NONE', *, *, #241, .F. ) ; +#1362 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1363 = VECTOR ( 'NONE', #1831, 1000.000000000000000 ) ; +#1364 = EDGE_CURVE ( 'NONE', #1897, #339, #891, .T. ) ; +#1365 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -50.67499999999999716 ) ) ; +#1366 = PRESENTATION_STYLE_ASSIGNMENT (( #323 ) ) ; +#1367 = CYLINDRICAL_SURFACE ( 'NONE', #1108, 2.999999999999999112 ) ; +#1368 = EDGE_CURVE ( 'NONE', #1705, #286, #2275, .T. ) ; +#1369 = CYLINDRICAL_SURFACE ( 'NONE', #1704, 1.749999999999991118 ) ; +#1370 = ORIENTED_EDGE ( 'NONE', *, *, #2741, .T. ) ; +#1371 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 57.68094681733413864, 22.49999999999997868 ) ) ; +#1372 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1373 = CIRCLE ( 'NONE', #2383, 4.000000000000001776 ) ; +#1374 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1375 = EDGE_CURVE ( 'NONE', #669, #1883, #1425, .T. ) ; +#1376 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999994132, 61.12699983561903849, -49.99999999999999289 ) ) ; +#1377 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1378 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -39.93749999999997158, -47.49999999999997158 ) ) ; +#1379 = VECTOR ( 'NONE', #144, 1000.000000000000000 ) ; +#1380 = VERTEX_POINT ( 'NONE', #3142 ) ; +#1381 = FACE_OUTER_BOUND ( 'NONE', #746, .T. ) ; +#1382 = ORIENTED_EDGE ( 'NONE', *, *, #1931, .T. ) ; +#1383 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1384 = ORIENTED_EDGE ( 'NONE', *, *, #287, .T. ) ; +#1385 = ORIENTED_EDGE ( 'NONE', *, *, #2989, .T. ) ; +#1386 = CARTESIAN_POINT ( 'NONE', ( -13.35000000000004583, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1387 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999965, 36.23489379904924590, -49.99999999999999289 ) ) ; +#1388 = ADVANCED_FACE ( 'NONE', ( #2738 ), #2129, .F. ) ; +#1389 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1390 = ORIENTED_EDGE ( 'NONE', *, *, #527, .T. ) ; +#1391 = AXIS2_PLACEMENT_3D ( 'NONE', #2008, #2082, #315 ) ; +#1392 = EDGE_CURVE ( 'NONE', #2429, #67, #981, .T. ) ; +#1393 = FACE_OUTER_BOUND ( 'NONE', #730, .T. ) ; +#1394 = ORIENTED_EDGE ( 'NONE', *, *, #1364, .T. ) ; +#1395 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#1396 = PLANE ( 'NONE', #254 ) ; +#1397 = EDGE_CURVE ( 'NONE', #1237, #26, #382, .T. ) ; +#1398 = EDGE_LOOP ( 'NONE', ( #2511, #2909, #3102, #145 ) ) ; +#1399 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#1400 = EDGE_LOOP ( 'NONE', ( #2784, #1041, #867, #3174 ) ) ; +#1401 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#1402 = VERTEX_POINT ( 'NONE', #980 ) ; +#1403 = ORIENTED_EDGE ( 'NONE', *, *, #628, .F. ) ; +#1404 = ORIENTED_EDGE ( 'NONE', *, *, #565, .T. ) ; +#1405 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1406 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.114001323292979579E-16, 0.0000000000000000000 ) ) ; +#1407 = LINE ( 'NONE', #2911, #712 ) ; +#1408 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1409 = AXIS2_PLACEMENT_3D ( 'NONE', #292, #2058, #3025 ) ; +#1410 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1411 = VECTOR ( 'NONE', #763, 1000.000000000000000 ) ; +#1412 = VECTOR ( 'NONE', #480, 1000.000000000000000 ) ; +#1413 = CIRCLE ( 'NONE', #661, 1.750000000000001554 ) ; +#1414 = AXIS2_PLACEMENT_3D ( 'NONE', #2125, #1154, #854 ) ; +#1415 = EDGE_CURVE ( 'NONE', #1751, #2557, #1579, .T. ) ; +#1416 = FACE_OUTER_BOUND ( 'NONE', #586, .T. ) ; +#1417 = LINE ( 'NONE', #2100, #2418 ) ; +#1418 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1419 = VERTEX_POINT ( 'NONE', #2007 ) ; +#1420 = ORIENTED_EDGE ( 'NONE', *, *, #3148, .T. ) ; +#1421 = AXIS2_PLACEMENT_3D ( 'NONE', #2323, #2595, #587 ) ; +#1422 = VERTEX_POINT ( 'NONE', #1489 ) ; +#1423 = VERTEX_POINT ( 'NONE', #3207 ) ; +#1424 = AXIS2_PLACEMENT_3D ( 'NONE', #2329, #2095, #595 ) ; +#1425 = LINE ( 'NONE', #1659, #2689 ) ; +#1426 = AXIS2_PLACEMENT_3D ( 'NONE', #2999, #978, #2960 ) ; +#1427 = VECTOR ( 'NONE', #1545, 1000.000000000000000 ) ; +#1428 = LINE ( 'NONE', #812, #1025 ) ; +#1429 = ORIENTED_EDGE ( 'NONE', *, *, #1087, .T. ) ; +#1430 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#1431 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 37.93094681733413864, -53.84999999999999432 ) ) ; +#1432 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #2837, 'distance_accuracy_value', 'NONE'); +#1433 = AXIS2_PLACEMENT_3D ( 'NONE', #2340, #647, #3177 ) ; +#1434 = EDGE_LOOP ( 'NONE', ( #1888, #2441, #1610, #976 ) ) ; +#1435 = EDGE_CURVE ( 'NONE', #2480, #1117, #1268, .T. ) ; +#1436 = CIRCLE ( 'NONE', #1637, 1.749999999999998002 ) ; +#1437 = ORIENTED_EDGE ( 'NONE', *, *, #2533, .T. ) ; +#1438 = EDGE_CURVE ( 'NONE', #2669, #1540, #698, .T. ) ; +#1439 = VERTEX_POINT ( 'NONE', #2263 ) ; +#1440 = ORIENTED_EDGE ( 'NONE', *, *, #1825, .F. ) ; +#1441 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1442 = AXIS2_PLACEMENT_3D ( 'NONE', #1976, #2001, #1033 ) ; +#1443 = ORIENTED_EDGE ( 'NONE', *, *, #671, .F. ) ; +#1444 = CARTESIAN_POINT ( 'NONE', ( -12.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1445 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#1446 = LINE ( 'NONE', #1908, #760 ) ; +#1447 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1448 = DIRECTION ( 'NONE', ( -1.000000000000000000, -4.270088556250602685E-15, 0.0000000000000000000 ) ) ; +#1449 = FACE_OUTER_BOUND ( 'NONE', #3042, .T. ) ; +#1450 = ADVANCED_FACE ( 'NONE', ( #1617, #1920, #66, #310, #2933, #866, #193, #2586, #2619, #2692, #987, #434, #2241, #2167 ), #1012, .F. ) ; +#1451 = AXIS2_PLACEMENT_3D ( 'NONE', #554, #1287, #2049 ) ; +#1452 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 59.43094681733414575, 22.49999999999997868 ) ) ; +#1453 = CIRCLE ( 'NONE', #910, 1.625000000000001332 ) ; +#1454 = EDGE_LOOP ( 'NONE', ( #2091, #2246 ) ) ; +#1455 = ORIENTED_EDGE ( 'NONE', *, *, #3117, .T. ) ; +#1456 = EDGE_CURVE ( 'NONE', #2169, #1766, #729, .T. ) ; +#1457 = LINE ( 'NONE', #1034, #2308 ) ; +#1458 = VERTEX_POINT ( 'NONE', #3215 ) ; +#1459 = VERTEX_POINT ( 'NONE', #3225 ) ; +#1460 = CARTESIAN_POINT ( 'NONE', ( 13.35000000000004761, -38.62499999999999289, -50.67499999999999716 ) ) ; +#1461 = VECTOR ( 'NONE', #564, 1000.000000000000114 ) ; +#1462 = ORIENTED_EDGE ( 'NONE', *, *, #1392, .F. ) ; +#1463 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#1464 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1465 = LINE ( 'NONE', #1002, #2050 ) ; +#1466 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000002126, 36.23489379904926011, -49.99999999999999289 ) ) ; +#1467 = EDGE_LOOP ( 'NONE', ( #2851, #1227, #670, #2248 ) ) ; +#1468 = ADVANCED_FACE ( 'NONE', ( #504 ), #982, .F. ) ; +#1469 = DIRECTION ( 'NONE', ( 0.5000000000000008882, -0.8660254037844381525, 0.0000000000000000000 ) ) ; +#1470 = ORIENTED_EDGE ( 'NONE', *, *, #745, .T. ) ; +#1471 = AXIS2_PLACEMENT_3D ( 'NONE', #1730, #2180, #2427 ) ; +#1472 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -51.34999999999998721, -49.04999999999999716 ) ) ; +#1473 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1474 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1475 = EDGE_LOOP ( 'NONE', ( #1818, #549 ) ) ; +#1476 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1477 = AXIS2_PLACEMENT_3D ( 'NONE', #1650, #2347, #3103 ) ; +#1478 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1479 = ORIENTED_EDGE ( 'NONE', *, *, #1736, .T. ) ; +#1480 = EDGE_CURVE ( 'NONE', #103, #481, #3208, .T. ) ; +#1481 = VERTEX_POINT ( 'NONE', #2026 ) ; +#1482 = CIRCLE ( 'NONE', #2178, 1.749999999999999778 ) ; +#1483 = ORIENTED_EDGE ( 'NONE', *, *, #1828, .T. ) ; +#1484 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1485 = EDGE_CURVE ( 'NONE', #2626, #3144, #432, .T. ) ; +#1486 = ADVANCED_FACE ( 'NONE', ( #2739 ), #2543, .T. ) ; +#1487 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1488 = VECTOR ( 'NONE', #2195, 1000.000000000000000 ) ; +#1489 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -54.09999999999999432, -53.84999999999999432 ) ) ; +#1490 = FACE_BOUND ( 'NONE', #665, .T. ) ; +#1491 = VECTOR ( 'NONE', #541, 1000.000000000000000 ) ; +#1492 = ADVANCED_FACE ( 'NONE', ( #1573 ), #1583, .F. ) ; +#1493 = AXIS2_PLACEMENT_3D ( 'NONE', #897, #1418, #2887 ) ; +#1494 = CARTESIAN_POINT ( 'NONE', ( -16.93749999999999645, -54.09999999999999432, -47.49999999999999289 ) ) ; +#1495 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1496 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#1497 = FACE_OUTER_BOUND ( 'NONE', #2358, .T. ) ; +#1498 = ORIENTED_EDGE ( 'NONE', *, *, #1247, .T. ) ; +#1499 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -51.34999999999999432, 22.49999999999997868 ) ) ; +#1500 = AXIS2_PLACEMENT_3D ( 'NONE', #2315, #304, #522 ) ; +#1501 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#1502 = EDGE_CURVE ( 'NONE', #122, #770, #2853, .T. ) ; +#1503 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 56.03884078076433894, -49.99999999999999289 ) ) ; +#1504 = ORIENTED_EDGE ( 'NONE', *, *, #1502, .T. ) ; +#1505 = FACE_BOUND ( 'NONE', #517, .T. ) ; +#1506 = EDGE_CURVE ( 'NONE', #125, #479, #100, .T. ) ; +#1507 = ORIENTED_EDGE ( 'NONE', *, *, #3095, .F. ) ; +#1508 = ORIENTED_EDGE ( 'NONE', *, *, #198, .T. ) ; +#1509 = CARTESIAN_POINT ( 'NONE', ( -12.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#1510 = VECTOR ( 'NONE', #2786, 1000.000000000000000 ) ; +#1511 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1512 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 39.68094681733413864, -50.00000000000000000 ) ) ; +#1513 = EDGE_LOOP ( 'NONE', ( #878, #658 ) ) ; +#1514 = DIRECTION ( 'NONE', ( -3.543264972207944962E-15, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1515 = ORIENTED_EDGE ( 'NONE', *, *, #1355, .F. ) ; +#1516 = AXIS2_PLACEMENT_3D ( 'NONE', #1985, #1469, #1972 ) ; +#1517 = VERTEX_POINT ( 'NONE', #1539 ) ; +#1518 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -39.93749999999997158, -47.49999999999997158 ) ) ; +#1519 = ORIENTED_EDGE ( 'NONE', *, *, #767, .F. ) ; +#1520 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1521 = EDGE_LOOP ( 'NONE', ( #374, #95, #1696, #3219 ) ) ; +#1522 = EDGE_CURVE ( 'NONE', #1117, #393, #3081, .T. ) ; +#1523 = VERTEX_POINT ( 'NONE', #2 ) ; +#1524 = SURFACE_STYLE_FILL_AREA ( #2324 ) ; +#1525 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1526 = CIRCLE ( 'NONE', #2752, 1.624999999999999778 ) ; +#1527 = FACE_OUTER_BOUND ( 'NONE', #861, .T. ) ; +#1528 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#1529 = FACE_OUTER_BOUND ( 'NONE', #188, .T. ) ; +#1530 = CARTESIAN_POINT ( 'NONE', ( 17.25000000000000711, 15.50000000000001243, -53.85000000000000142 ) ) ; +#1531 = PLANE ( 'NONE', #2092 ) ; +#1532 = FACE_OUTER_BOUND ( 'NONE', #3143, .T. ) ; +#1533 = VECTOR ( 'NONE', #917, 1000.000000000000000 ) ; +#1534 = EDGE_CURVE ( 'NONE', #823, #848, #1695, .T. ) ; +#1535 = ORIENTED_EDGE ( 'NONE', *, *, #851, .F. ) ; +#1536 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .T. ) ; +#1537 = ORIENTED_EDGE ( 'NONE', *, *, #2194, .T. ) ; +#1538 = EDGE_LOOP ( 'NONE', ( #1462, #1981, #1817, #1124 ) ) ; +#1539 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 34.53884078076435316, -47.49999999999999289 ) ) ; +#1540 = VERTEX_POINT ( 'NONE', #38 ) ; +#1541 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1542 = EDGE_CURVE ( 'NONE', #1020, #1919, #1887, .T. ) ; +#1543 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1544 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1545 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.088269684226890842E-17, 1.000000000000000000 ) ) ; +#1546 = LINE ( 'NONE', #725, #1148 ) ; +#1547 = ORIENTED_EDGE ( 'NONE', *, *, #1731, .T. ) ; +#1548 = EDGE_CURVE ( 'NONE', #1865, #2787, #2733, .T. ) ; +#1549 = VERTEX_POINT ( 'NONE', #1608 ) ; +#1550 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000013145, -38.62499999999998579, -50.67499999999999716 ) ) ; +#1551 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1552 = FACE_OUTER_BOUND ( 'NONE', #792, .T. ) ; +#1553 = ORIENTED_EDGE ( 'NONE', *, *, #2408, .T. ) ; +#1554 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1555 = DIRECTION ( 'NONE', ( -3.543264972207945751E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1556 = EDGE_LOOP ( 'NONE', ( #2982, #183 ) ) ; +#1557 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1558 = EDGE_LOOP ( 'NONE', ( #814, #2463, #3080, #1672 ) ) ; +#1559 = ORIENTED_EDGE ( 'NONE', *, *, #907, .F. ) ; +#1560 = AXIS2_PLACEMENT_3D ( 'NONE', #2458, #958, #3031 ) ; +#1561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1562 = VERTEX_POINT ( 'NONE', #3098 ) ; +#1563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1564 = EDGE_CURVE ( 'NONE', #2770, #106, #957, .T. ) ; +#1565 = FACE_OUTER_BOUND ( 'NONE', #1612, .T. ) ; +#1566 = CIRCLE ( 'NONE', #2622, 11.37500000000000000 ) ; +#1567 = CARTESIAN_POINT ( 'NONE', ( -13.35000000000004583, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1568 = FACE_BOUND ( 'NONE', #1556, .T. ) ; +#1569 = VECTOR ( 'NONE', #1999, 1000.000000000000000 ) ; +#1570 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#1571 = FACE_OUTER_BOUND ( 'NONE', #186, .T. ) ; +#1572 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1573 = FACE_OUTER_BOUND ( 'NONE', #2190, .T. ) ; +#1574 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .F. ) ; +#1575 = VERTEX_POINT ( 'NONE', #85 ) ; +#1576 = FACE_BOUND ( 'NONE', #2776, .T. ) ; +#1577 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1578 = ORIENTED_EDGE ( 'NONE', *, *, #1998, .F. ) ; +#1579 = CIRCLE ( 'NONE', #173, 1.749999999999998002 ) ; +#1580 = AXIS2_PLACEMENT_3D ( 'NONE', #1127, #634, #3112 ) ; +#1581 = PLANE ( 'NONE', #104 ) ; +#1582 = EDGE_CURVE ( 'NONE', #1971, #2171, #2816, .T. ) ; +#1583 = PLANE ( 'NONE', #1158 ) ; +#1584 = EDGE_LOOP ( 'NONE', ( #1244, #23 ) ) ; +#1585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1586 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#1587 = ORIENTED_EDGE ( 'NONE', *, *, #362, .F. ) ; +#1588 = ORIENTED_EDGE ( 'NONE', *, *, #1189, .F. ) ; +#1589 = CARTESIAN_POINT ( 'NONE', ( -17.25000000000000000, 15.50000000000001243, -53.85000000000000142 ) ) ; +#1590 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1591 = CARTESIAN_POINT ( 'NONE', ( -1.040834085586084257E-14, -21.49999999999999289, -49.99999999999999289 ) ) ; +#1592 = ORIENTED_EDGE ( 'NONE', *, *, #3095, .T. ) ; +#1593 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1064 ) ) ; +#1594 = ORIENTED_EDGE ( 'NONE', *, *, #767, .T. ) ; +#1595 = EDGE_CURVE ( 'NONE', #313, #166, #2094, .T. ) ; +#1596 = ORIENTED_EDGE ( 'NONE', *, *, #174, .T. ) ; +#1597 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012434, -35.37499999999998579, -50.67499999999999716 ) ) ; +#1598 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999432, 61.12699983561904560, -49.99999999999999289 ) ) ; +#1599 = FACE_OUTER_BOUND ( 'NONE', #2104, .T. ) ; +#1600 = EDGE_CURVE ( 'NONE', #2053, #3132, #816, .T. ) ; +#1601 = CIRCLE ( 'NONE', #147, 2.999999999999999112 ) ; +#1602 = FACE_OUTER_BOUND ( 'NONE', #420, .T. ) ; +#1603 = EDGE_CURVE ( 'NONE', #1575, #530, #836, .T. ) ; +#1604 = LINE ( 'NONE', #690, #1645 ) ; +#1605 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 57.73489379904926011, -49.99999999999999289 ) ) ; +#1606 = VECTOR ( 'NONE', #1943, 1000.000000000000000 ) ; +#1607 = LINE ( 'NONE', #348, #257 ) ; +#1608 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -34.06249999999997158, -53.84999999999999432 ) ) ; +#1609 = ORIENTED_EDGE ( 'NONE', *, *, #3134, .F. ) ; +#1610 = ORIENTED_EDGE ( 'NONE', *, *, #782, .F. ) ; +#1611 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1612 = EDGE_LOOP ( 'NONE', ( #1040, #2728, #1858, #3201 ) ) ; +#1613 = ORIENTED_EDGE ( 'NONE', *, *, #2206, .F. ) ; +#1614 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1615 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000002126, 39.62699983561905270, -47.49999999999999289 ) ) ; +#1616 = VECTOR ( 'NONE', #3120, 1000.000000000000000 ) ; +#1617 = FACE_BOUND ( 'NONE', #1975, .T. ) ; +#1618 = AXIS2_PLACEMENT_3D ( 'NONE', #157, #1644, #1905 ) ; +#1619 = EDGE_LOOP ( 'NONE', ( #972, #3220, #2444, #710 ) ) ; +#1620 = CARTESIAN_POINT ( 'NONE', ( 6.812349999999998573, 61.12699983561904560, -49.99999999999999289 ) ) ; +#1621 = VECTOR ( 'NONE', #1476, 1000.000000000000000 ) ; +#1622 = EDGE_LOOP ( 'NONE', ( #1756, #3249, #1715, #772 ) ) ; +#1623 = EDGE_CURVE ( 'NONE', #3202, #2953, #949, .T. ) ; +#1624 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 57.73489379904926011, -47.49999999999999289 ) ) ; +#1625 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1626 = ORIENTED_EDGE ( 'NONE', *, *, #1857, .T. ) ; +#1627 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -50.35000000000007958, -50.67499999999999716 ) ) ; +#1628 = ORIENTED_EDGE ( 'NONE', *, *, #715, .F. ) ; +#1629 = ADVANCED_FACE ( 'NONE', ( #506 ), #3246, .F. ) ; +#1630 = ORIENTED_EDGE ( 'NONE', *, *, #61, .F. ) ; +#1631 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#1632 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999992356, 57.73489379904925300, -47.50000000000000000 ) ) ; +#1633 = ORIENTED_EDGE ( 'NONE', *, *, #462, .T. ) ; +#1634 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1635 = PLANE ( 'NONE', #2923 ) ; +#1636 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1637 = AXIS2_PLACEMENT_3D ( 'NONE', #1052, #2040, #2769 ) ; +#1638 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1639 = FACE_BOUND ( 'NONE', #614, .T. ) ; +#1640 = LINE ( 'NONE', #441, #1488 ) ; +#1641 = AXIS2_PLACEMENT_3D ( 'NONE', #2394, #869, #2127 ) ; +#1642 = EDGE_CURVE ( 'NONE', #1032, #2940, #1428, .T. ) ; +#1643 = LINE ( 'NONE', #247, #962 ) ; +#1644 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1645 = VECTOR ( 'NONE', #461, 1000.000000000000000 ) ; +#1646 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1647 = LINE ( 'NONE', #2426, #2641 ) ; +#1648 = DIRECTION ( 'NONE', ( -1.067522139062649685E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1649 = EDGE_CURVE ( 'NONE', #597, #240, #1691, .T. ) ; +#1650 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 62.82305285390393834, -49.99999999999999289 ) ) ; +#1651 = ORIENTED_EDGE ( 'NONE', *, *, #1709, .F. ) ; +#1652 = ORIENTED_EDGE ( 'NONE', *, *, #662, .F. ) ; +#1653 = ORIENTED_EDGE ( 'NONE', *, *, #804, .F. ) ; +#1654 = PLANE ( 'NONE', #154 ) ; +#1655 = FACE_OUTER_BOUND ( 'NONE', #1187, .T. ) ; +#1656 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#1657 = ORIENTED_EDGE ( 'NONE', *, *, #1603, .F. ) ; +#1658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1659 = CARTESIAN_POINT ( 'NONE', ( -12.68765000000000143, 39.62699983561905270, -47.49999999999999289 ) ) ; +#1660 = ORIENTED_EDGE ( 'NONE', *, *, #220, .F. ) ; +#1661 = FACE_BOUND ( 'NONE', #2162, .T. ) ; +#1662 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#1663 = EDGE_CURVE ( 'NONE', #597, #479, #3060, .T. ) ; +#1664 = ORIENTED_EDGE ( 'NONE', *, *, #2648, .T. ) ; +#1665 = CIRCLE ( 'NONE', #1493, 1.749999999999998002 ) ; +#1666 = AXIS2_PLACEMENT_3D ( 'NONE', #2500, #1964, #990 ) ; +#1667 = VECTOR ( 'NONE', #2064, 1000.000000000000000 ) ; +#1668 = EDGE_LOOP ( 'NONE', ( #852, #3057 ) ) ; +#1669 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#1670 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999994132, 61.12699983561903849, -49.99999999999999289 ) ) ; +#1671 = LINE ( 'NONE', #2122, #2592 ) ; +#1672 = ORIENTED_EDGE ( 'NONE', *, *, #6, .F. ) ; +#1673 = EDGE_LOOP ( 'NONE', ( #60, #2847, #1279, #3092 ) ) ; +#1674 = FACE_BOUND ( 'NONE', #2478, .T. ) ; +#1675 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#1676 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -34.06249999999997158, -47.49999999999997868 ) ) ; +#1677 = AXIS2_PLACEMENT_3D ( 'NONE', #2046, #3257, #771 ) ; +#1678 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999991468, 57.73489379904925300, -47.49999999999999289 ) ) ; +#1680 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#1679 = CYLINDRICAL_SURFACE ( 'NONE', #245, 1.625000000000001332 ) ; +#1681 = SURFACE_STYLE_FILL_AREA ( #2357 ) ; +#1682 = LINE ( 'NONE', #1378, #2997 ) ; +#1683 = CYLINDRICAL_SURFACE ( 'NONE', #1641, 1.749999999999999778 ) ; +#1684 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 59.43094681733413864, -53.84999999999999432 ) ) ; +#1685 = EDGE_CURVE ( 'NONE', #1422, #1761, #545, .T. ) ; +#1686 = FACE_OUTER_BOUND ( 'NONE', #1739, .T. ) ; +#1687 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1688 = ORIENTED_EDGE ( 'NONE', *, *, #241, .T. ) ; +#1689 = ORIENTED_EDGE ( 'NONE', *, *, #2194, .F. ) ; +#1690 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1691 = CIRCLE ( 'NONE', #1991, 1.749999999999991118 ) ; +#1692 = EDGE_LOOP ( 'NONE', ( #340, #97, #1884, #2439 ) ) ; +#1693 = LINE ( 'NONE', #572, #2967 ) ; +#1694 = FACE_BOUND ( 'NONE', #2895, .T. ) ; +#1695 = LINE ( 'NONE', #1049, #265 ) ; +#1696 = ORIENTED_EDGE ( 'NONE', *, *, #1898, .T. ) ; +#1697 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1698 = EDGE_CURVE ( 'NONE', #137, #931, #2843, .T. ) ; +#1699 = CIRCLE ( 'NONE', #1891, 1.625000000000001332 ) ; +#1700 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000003902, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1701 = DIRECTION ( 'NONE', ( 0.4999999999999981681, 0.8660254037844397068, 0.0000000000000000000 ) ) ; +#1702 = ORIENTED_EDGE ( 'NONE', *, *, #2266, .F. ) ; +#1703 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000013145, -38.62499999999998579, -50.67499999999999716 ) ) ; +#1704 = AXIS2_PLACEMENT_3D ( 'NONE', #2735, #1255, #508 ) ; +#1705 = VERTEX_POINT ( 'NONE', #2474 ) ; +#1706 = EDGE_CURVE ( 'NONE', #1199, #871, #140, .T. ) ; +#1707 = ORIENTED_EDGE ( 'NONE', *, *, #678, .T. ) ; +#1708 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -47.49999999999997158 ) ) ; +#1709 = EDGE_CURVE ( 'NONE', #732, #1192, #768, .T. ) ; +#1710 = ORIENTED_EDGE ( 'NONE', *, *, #1582, .F. ) ; +#1711 = ORIENTED_EDGE ( 'NONE', *, *, #1024, .T. ) ; +#1712 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1713 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -53.84999999999999432 ) ) ; +#1715 = ORIENTED_EDGE ( 'NONE', *, *, #2512, .F. ) ; +#1714 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -53.84999999999999432 ) ) ; +#1716 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1718 = ORIENTED_EDGE ( 'NONE', *, *, #2707, .T. ) ; +#1719 = VECTOR ( 'NONE', #2075, 1000.000000000000000 ) ; +#1720 = LINE ( 'NONE', #3051, #329 ) ; +#1721 = LINE ( 'NONE', #3108, #845 ) ; +#1722 = FACE_OUTER_BOUND ( 'NONE', #77, .T. ) ; +#1723 = ADVANCED_FACE ( 'NONE', ( #2073 ), #2936, .F. ) ; +#1724 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000000350, 57.73489379904924590, -49.99999999999999289 ) ) ; +#1725 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1726 = FACE_OUTER_BOUND ( 'NONE', #2825, .T. ) ; +#1727 = LINE ( 'NONE', #2131, #296 ) ; +#1728 = VECTOR ( 'NONE', #490, 1000.000000000000000 ) ; +#1729 = AXIS2_PLACEMENT_3D ( 'NONE', #620, #1194, #1057 ) ; +#1730 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#1731 = EDGE_CURVE ( 'NONE', #3024, #3196, #1453, .T. ) ; +#1732 = CIRCLE ( 'NONE', #3075, 1.750000000000001554 ) ; +#1733 = ORIENTED_EDGE ( 'NONE', *, *, #895, .T. ) ; +#1734 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1735 = VERTEX_POINT ( 'NONE', #2462 ) ; +#1736 = EDGE_CURVE ( 'NONE', #831, #1883, #2338, .T. ) ; +#1737 = DIRECTION ( 'NONE', ( -0.4999999999999995004, -0.8660254037844390407, 0.0000000000000000000 ) ) ; +#1738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1739 = EDGE_LOOP ( 'NONE', ( #1443, #2117, #560, #1429 ) ) ; +#1740 = ORIENTED_EDGE ( 'NONE', *, *, #637, .T. ) ; +#1741 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -54.09999999999998721, 22.49999999999997868 ) ) ; +#1742 = ADVANCED_FACE ( 'NONE', ( #93, #1686 ), #222, .T. ) ; +#1743 = ORIENTED_EDGE ( 'NONE', *, *, #2062, .F. ) ; +#1744 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 57.68094681733413154, -50.00000000000000000 ) ) ; +#1745 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -47.49999999999997158 ) ) ; +#1746 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1747 = FACE_BOUND ( 'NONE', #956, .T. ) ; +#1748 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1749 = LINE ( 'NONE', #1993, #311 ) ; +#1750 = ORIENTED_EDGE ( 'NONE', *, *, #3148, .F. ) ; +#1751 = VERTEX_POINT ( 'NONE', #721 ) ; +#1752 = CARTESIAN_POINT ( 'NONE', ( -13.75000000000000355, 15.50000000000001243, -53.85000000000000142 ) ) ; +#1753 = ORIENTED_EDGE ( 'NONE', *, *, #2018, .F. ) ; +#1754 = AXIS2_PLACEMENT_3D ( 'NONE', #1021, #1551, #1820 ) ; +#1755 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1756 = ORIENTED_EDGE ( 'NONE', *, *, #2044, .T. ) ; +#1757 = PLANE ( 'NONE', #1073 ) ; +#1758 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#1759 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 68.00000000000000000, -47.50000000000000000 ) ) ; +#1760 = AXIS2_PLACEMENT_3D ( 'NONE', #2170, #1658, #2159 ) ; +#1761 = VERTEX_POINT ( 'NONE', #3128 ) ; +#1762 = EDGE_CURVE ( 'NONE', #546, #65, #419, .T. ) ; +#1763 = EDGE_LOOP ( 'NONE', ( #1161, #3170, #945, #477 ) ) ; +#1764 = ORIENTED_EDGE ( 'NONE', *, *, #599, .F. ) ; +#1765 = ADVANCED_FACE ( 'NONE', ( #1009, #2265 ), #401, .T. ) ; +#1766 = VERTEX_POINT ( 'NONE', #1915 ) ; +#1767 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1768 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 62.82305285390393834, -47.49999999999999289 ) ) ; +#1769 = CARTESIAN_POINT ( 'NONE', ( 3.999999999999999112, -3.469446951953578444E-17, -47.49999999999999289 ) ) ; +#1770 = CIRCLE ( 'NONE', #2231, 1.749999999999991118 ) ; +#1771 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1772 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -47.49999999999997868 ) ) ; +#1773 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1774 = FACE_OUTER_BOUND ( 'NONE', #155, .T. ) ; +#1775 = FACE_OUTER_BOUND ( 'NONE', #1974, .T. ) ; +#1776 = EDGE_CURVE ( 'NONE', #1459, #2139, #2675, .T. ) ; +#1777 = VECTOR ( 'NONE', #1669, 1000.000000000000000 ) ; +#1778 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1779 = AXIS2_PLACEMENT_3D ( 'NONE', #30, #2792, #2567 ) ; +#1780 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -47.49999999999997868 ) ) ; +#1781 = CARTESIAN_POINT ( 'NONE', ( 12.50000000000001243, 15.50000000000001243, -50.49999999999999289 ) ) ; +#1782 = EDGE_CURVE ( 'NONE', #2621, #2632, #924, .T. ) ; +#1783 = EDGE_LOOP ( 'NONE', ( #970, #121, #1802, #1853 ) ) ; +#1784 = VECTOR ( 'NONE', #1646, 1000.000000000000000 ) ; +#1785 = EDGE_CURVE ( 'NONE', #1835, #1402, #2035, .T. ) ; +#1786 = ORIENTED_EDGE ( 'NONE', *, *, #548, .F. ) ; +#1787 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 36.18094681733413864, -53.84999999999999432 ) ) ; +#1788 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#1789 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 36.18094681733414575, 22.49999999999997868 ) ) ; +#1790 = ORIENTED_EDGE ( 'NONE', *, *, #1164, .T. ) ; +#1791 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -53.84999999999999432 ) ) ; +#1792 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1793 = VECTOR ( 'NONE', #2794, 1000.000000000000000 ) ; +#1794 = ORIENTED_EDGE ( 'NONE', *, *, #2710, .F. ) ; +#1795 = VERTEX_POINT ( 'NONE', #1787 ) ; +#1796 = ADVANCED_FACE ( 'NONE', ( #1917 ), #2032, .F. ) ; +#1797 = ORIENTED_EDGE ( 'NONE', *, *, #2907, .T. ) ; +#1798 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1799 = VERTEX_POINT ( 'NONE', #2514 ) ; +#1800 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#1801 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999998899, 57.73489379904923879, -49.99999999999999289 ) ) ; +#1802 = ORIENTED_EDGE ( 'NONE', *, *, #1105, .T. ) ; +#1803 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -53.84999999999999432 ) ) ; +#1804 = EDGE_CURVE ( 'NONE', #2585, #2632, #847, .T. ) ; +#1805 = FACE_OUTER_BOUND ( 'NONE', #3006, .T. ) ; +#1806 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1807 = CIRCLE ( 'NONE', #1133, 1.625000000000001332 ) ; +#1808 = LINE ( 'NONE', #170, #2917 ) ; +#1809 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -50.67499999999999716 ) ) ; +#1810 = DIRECTION ( 'NONE', ( -0.4999999999999992228, 0.8660254037844391517, 0.0000000000000000000 ) ) ; +#1811 = VECTOR ( 'NONE', #1554, 1000.000000000000000 ) ; +#1812 = VERTEX_POINT ( 'NONE', #2848 ) ; +#1813 = CIRCLE ( 'NONE', #429, 1.625000000000001332 ) ; +#1814 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #2133, #2725 ) ; +#1815 = VECTOR ( 'NONE', #815, 1000.000000000000000 ) ; +#1816 = AXIS2_PLACEMENT_3D ( 'NONE', #1846, #1086, #1348 ) ; +#1817 = ORIENTED_EDGE ( 'NONE', *, *, #3218, .T. ) ; +#1818 = ORIENTED_EDGE ( 'NONE', *, *, #1785, .F. ) ; +#1819 = PLANE ( 'NONE', #138 ) ; +#1820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#1821 = AXIS2_PLACEMENT_3D ( 'NONE', #921, #417, #2440 ) ; +#1822 = ORIENTED_EDGE ( 'NONE', *, *, #114, .T. ) ; +#1823 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -51.35000000000000142, -53.84999999999999432 ) ) ; +#1824 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.543264972207944962E-15, 0.0000000000000000000 ) ) ; +#1825 = EDGE_CURVE ( 'NONE', #822, #1020, #1341, .T. ) ; +#1826 = ORIENTED_EDGE ( 'NONE', *, *, #3195, .F. ) ; +#1827 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999432, 61.12699983561904560, -49.99999999999999289 ) ) ; +#1828 = EDGE_CURVE ( 'NONE', #2545, #669, #3232, .T. ) ; +#1829 = ORIENTED_EDGE ( 'NONE', *, *, #841, .F. ) ; +#1830 = ORIENTED_EDGE ( 'NONE', *, *, #1973, .T. ) ; +#1831 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1832 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -47.49999999999999289 ) ) ; +#1833 = VERTEX_POINT ( 'NONE', #75 ) ; +#1834 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1835 = VERTEX_POINT ( 'NONE', #2831 ) ; +#1836 = AXIS2_PLACEMENT_3D ( 'NONE', #86, #865, #2605 ) ; +#1837 = VERTEX_POINT ( 'NONE', #1851 ) ; +#1838 = ORIENTED_EDGE ( 'NONE', *, *, #1368, .F. ) ; +#1839 = CIRCLE ( 'NONE', #275, 1.625000000000001332 ) ; +#1840 = CARTESIAN_POINT ( 'NONE', ( 18.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#1841 = ORIENTED_EDGE ( 'NONE', *, *, #2039, .T. ) ; +#1842 = EDGE_CURVE ( 'NONE', #2962, #2717, #1220, .T. ) ; +#1843 = EDGE_LOOP ( 'NONE', ( #2310, #2863, #1504, #1318 ) ) ; +#1844 = EDGE_CURVE ( 'NONE', #3176, #2020, #2569, .T. ) ; +#1845 = VECTOR ( 'NONE', #961, 1000.000000000000000 ) ; +#1846 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -51.34999999999998721, -50.67499999999999716 ) ) ; +#1847 = LINE ( 'NONE', #1038, #2994 ) ; +#1848 = VECTOR ( 'NONE', #475, 1000.000000000000000 ) ; +#1849 = VECTOR ( 'NONE', #2957, 1000.000000000000000 ) ; +#1850 = VECTOR ( 'NONE', #1066, 1000.000000000000000 ) ; +#1851 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -54.09999999999999432, -52.29999999999999716 ) ) ; +#1852 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#1853 = ORIENTED_EDGE ( 'NONE', *, *, #1293, .F. ) ; +#1854 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2446 ) ) ; +#1855 = EDGE_LOOP ( 'NONE', ( #3242, #2158 ) ) ; +#1856 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 41.32305285390394545, -49.99999999999999289 ) ) ; +#1857 = EDGE_CURVE ( 'NONE', #2990, #1076, #1607, .T. ) ; +#1858 = ORIENTED_EDGE ( 'NONE', *, *, #1994, .T. ) ; +#1859 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -35.37499999999999289, -50.67499999999999716 ) ) ; +#1860 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1861 = VERTEX_POINT ( 'NONE', #1123 ) ; +#1862 = EDGE_LOOP ( 'NONE', ( #1300, #322, #783, #696 ) ) ; +#1863 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#1864 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999994132, 61.12699983561903849, -47.49999999999999289 ) ) ; +#1865 = VERTEX_POINT ( 'NONE', #1376 ) ; +#1866 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#1867 = VERTEX_POINT ( 'NONE', #591 ) ; +#1868 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1869 = AXIS2_PLACEMENT_3D ( 'NONE', #796, #2079, #1023 ) ; +#1870 = EDGE_LOOP ( 'NONE', ( #2472, #1786, #2894, #2059 ) ) ; +#1871 = ADVANCED_FACE ( 'NONE', ( #177 ), #868, .F. ) ; +#1872 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#1873 = EDGE_CURVE ( 'NONE', #3046, #832, #1373, .T. ) ; +#1874 = FACE_OUTER_BOUND ( 'NONE', #2505, .T. ) ; +#1875 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#1876 = CARTESIAN_POINT ( 'NONE', ( 13.35000000000004583, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1877 = EDGE_CURVE ( 'NONE', #1833, #42, #1949, .T. ) ; +#1878 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -54.09999999999999432, -53.84999999999999432 ) ) ; +#1879 = CIRCLE ( 'NONE', #2077, 2.999999999999999112 ) ; +#1880 = ORIENTED_EDGE ( 'NONE', *, *, #366, .F. ) ; +#1881 = VECTOR ( 'NONE', #1798, 1000.000000000000000 ) ; +#1882 = VECTOR ( 'NONE', #2002, 1000.000000000000000 ) ; +#1883 = VERTEX_POINT ( 'NONE', #2431 ) ; +#1884 = ORIENTED_EDGE ( 'NONE', *, *, #2645, .T. ) ; +#1885 = DIRECTION ( 'NONE', ( -0.8660254037844390407, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#1886 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -34.06249999999997158, -47.49999999999997158 ) ) ; +#1887 = LINE ( 'NONE', #1320, #3052 ) ; +#1888 = ORIENTED_EDGE ( 'NONE', *, *, #3134, .T. ) ; +#1889 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1890 = FACE_BOUND ( 'NONE', #494, .T. ) ; +#1891 = AXIS2_PLACEMENT_3D ( 'NONE', #1567, #1056, #799 ) ; +#1892 = VERTEX_POINT ( 'NONE', #1172 ) ; +#1893 = EDGE_CURVE ( 'NONE', #3046, #3166, #576, .T. ) ; +#1894 = LINE ( 'NONE', #1945, #2432 ) ; +#1895 = ADVANCED_FACE ( 'NONE', ( #502 ), #685, .F. ) ; +#1896 = VECTOR ( 'NONE', #992, 1000.000000000000000 ) ; +#1897 = VERTEX_POINT ( 'NONE', #883 ) ; +#1898 = EDGE_CURVE ( 'NONE', #1419, #80, #1299, .T. ) ; +#1899 = ORIENTED_EDGE ( 'NONE', *, *, #1415, .F. ) ; +#1900 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#1901 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1902 = EDGE_LOOP ( 'NONE', ( #1104, #487, #2114, #1537 ) ) ; +#1903 = EDGE_LOOP ( 'NONE', ( #512, #521, #2540, #3106 ) ) ; +#1904 = EDGE_LOOP ( 'NONE', ( #424, #73, #1594, #1664 ) ) ; +#1905 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1906 = ORIENTED_EDGE ( 'NONE', *, *, #2326, .T. ) ; +#1907 = VERTEX_POINT ( 'NONE', #1136 ) ; +#1908 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -54.09999999999999432, -47.49999999999998579 ) ) ; +#1909 = AXIS2_PLACEMENT_3D ( 'NONE', #2667, #1447, #3221 ) ; +#1910 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1911 = AXIS2_PLACEMENT_3D ( 'NONE', #525, #2998, #2260 ) ; +#1912 = EDGE_CURVE ( 'NONE', #42, #305, #608, .T. ) ; +#1913 = LINE ( 'NONE', #2470, #1491 ) ; +#1914 = CIRCLE ( 'NONE', #47, 1.749999999999999778 ) ; +#1915 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000000350, 57.73489379904924590, -47.49999999999999289 ) ) ; +#1916 = CARTESIAN_POINT ( 'NONE', ( 6.812349999999998573, 61.12699983561904560, -47.49999999999999289 ) ) ; +#1917 = FACE_OUTER_BOUND ( 'NONE', #2327, .T. ) ; +#1918 = ADVANCED_FACE ( 'NONE', ( #1497 ), #3085, .F. ) ; +#1919 = VERTEX_POINT ( 'NONE', #2854 ) ; +#1920 = FACE_BOUND ( 'NONE', #2506, .T. ) ; +#1921 = LINE ( 'NONE', #1803, #2270 ) ; +#1922 = EDGE_LOOP ( 'NONE', ( #2688, #1653, #2900, #194 ) ) ; +#1923 = AXIS2_PLACEMENT_3D ( 'NONE', #237, #2490, #713 ) ; +#1924 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 59.43094681733414575, 22.49999999999997868 ) ) ; +#1925 = FACE_OUTER_BOUND ( 'NONE', #626, .T. ) ; +#1926 = ORIENTED_EDGE ( 'NONE', *, *, #912, .T. ) ; +#1927 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 39.62699983561905270, -47.49999999999999289 ) ) ; +#1928 = AXIS2_PLACEMENT_3D ( 'NONE', #756, #1014, #262 ) ; +#1929 = EDGE_CURVE ( 'NONE', #3024, #1988, #1417, .T. ) ; +#1930 = ORIENTED_EDGE ( 'NONE', *, *, #2430, .F. ) ; +#1931 = EDGE_CURVE ( 'NONE', #2717, #1080, #2536, .T. ) ; +#1932 = EDGE_LOOP ( 'NONE', ( #2521, #2382, #3137, #1188 ) ) ; +#1933 = ORIENTED_EDGE ( 'NONE', *, *, #782, .T. ) ; +#1934 = CYLINDRICAL_SURFACE ( 'NONE', #1306, 1.625000000000001332 ) ; +#1935 = ORIENTED_EDGE ( 'NONE', *, *, #895, .F. ) ; +#1936 = ORIENTED_EDGE ( 'NONE', *, *, #2227, .T. ) ; +#1937 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1938 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999994449, 0.0000000000000000000 ) ) ; +#1939 = CIRCLE ( 'NONE', #14, 1.749999999999999778 ) ; +#1940 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1941 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1942 = AXIS2_PLACEMENT_3D ( 'NONE', #655, #1180, #427 ) ; +#1943 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1944 = VECTOR ( 'NONE', #1193, 1000.000000000000000 ) ; +#1945 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 41.32305285390394545, -47.49999999999999289 ) ) ; +#1946 = LINE ( 'NONE', #2376, #2876 ) ; +#1947 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1948 = EDGE_CURVE ( 'NONE', #2020, #2353, #2188, .T. ) ; +#1949 = LINE ( 'NONE', #2647, #2765 ) ; +#1950 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, -3.469446951953578444E-17, -51.34999999999999432 ) ) ; +#1951 = PLANE ( 'NONE', #210 ) ; +#1952 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1953 = ORIENTED_EDGE ( 'NONE', *, *, #325, .T. ) ; +#1954 = ADVANCED_FACE ( 'NONE', ( #3119 ), #469, .T. ) ; +#1955 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1956 = CARTESIAN_POINT ( 'NONE', ( 13.35000000000004583, -36.99999999999999289, -50.67499999999999716 ) ) ; +#1957 = ADVANCED_FACE ( 'NONE', ( #1258 ), #59, .F. ) ; +#1958 = ORIENTED_EDGE ( 'NONE', *, *, #1075, .T. ) ; +#1959 = FACE_BOUND ( 'NONE', #1475, .T. ) ; +#1960 = VERTEX_POINT ( 'NONE', #3009 ) ; +#1961 = CIRCLE ( 'NONE', #79, 2.999999999999999112 ) ; +#1962 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1963 = AXIS2_PLACEMENT_3D ( 'NONE', #2163, #649, #167 ) ; +#1964 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1965 = EDGE_LOOP ( 'NONE', ( #2623, #927, #985, #2056 ) ) ; +#1966 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -51.34999999999998721, -52.29999999999999716 ) ) ; +#1967 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1968 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 62.82305285390393834, -49.99999999999999289 ) ) ; +#1969 = EDGE_LOOP ( 'NONE', ( #1159, #2175, #3192, #566 ) ) ; +#1970 = EDGE_CURVE ( 'NONE', #2793, #2093, #2603, .T. ) ; +#1971 = VERTEX_POINT ( 'NONE', #2285 ) ; +#1972 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#1973 = EDGE_CURVE ( 'NONE', #2093, #1419, #809, .T. ) ; +#1974 = EDGE_LOOP ( 'NONE', ( #711, #2068, #43, #947 ) ) ; +#1975 = EDGE_LOOP ( 'NONE', ( #200, #1037, #3163, #338 ) ) ; +#1976 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#1977 = LINE ( 'NONE', #124, #1203 ) ; +#1978 = VERTEX_POINT ( 'NONE', #1171 ) ; +#1979 = CARTESIAN_POINT ( 'NONE', ( -12.68765000000000143, 39.62699983561905270, -49.99999999999999289 ) ) ; +#1980 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1981 = ORIENTED_EDGE ( 'NONE', *, *, #2888, .T. ) ; +#1982 = ADVANCED_FACE ( 'NONE', ( #3156, #22 ), #1208, .F. ) ; +#1983 = VECTOR ( 'NONE', #1872, 1000.000000000000000 ) ; +#1984 = AXIS2_PLACEMENT_3D ( 'NONE', #454, #1680, #2931 ) ; +#1985 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 56.03884078076433894, -49.99999999999999289 ) ) ; +#1986 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#1987 = VECTOR ( 'NONE', #466, 1000.000000000000000 ) ; +#1988 = VERTEX_POINT ( 'NONE', #3164 ) ; +#1989 = ADVANCED_FACE ( 'NONE', ( #1097 ), #56, .F. ) ; +#1990 = VECTOR ( 'NONE', #150, 1000.000000000000000 ) ; +#1991 = AXIS2_PLACEMENT_3D ( 'NONE', #3234, #724, #2259 ) ; +#1992 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 37.93094681733413864, -50.00000000000000000 ) ) ; +#1993 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999998899, 57.73489379904923879, -49.99999999999999289 ) ) ; +#1994 = EDGE_CURVE ( 'NONE', #2346, #1835, #414, .T. ) ; +#1995 = ADVANCED_FACE ( 'NONE', ( #2110 ), #2886, .F. ) ; +#1996 = LINE ( 'NONE', #988, #1850 ) ; +#1997 = VECTOR ( 'NONE', #3089, 1000.000000000000000 ) ; +#1998 = EDGE_CURVE ( 'NONE', #1109, #822, #175, .T. ) ; +#1999 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2000 = VERTEX_POINT ( 'NONE', #1632 ) ; +#2001 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2002 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2003 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999965, 36.23489379904924590, -49.99999999999999289 ) ) ; +#2004 = ORIENTED_EDGE ( 'NONE', *, *, #2868, .T. ) ; +#2005 = CARTESIAN_POINT ( 'NONE', ( 16.93749999999999645, -50.34999999999997300, 22.49999999999997868 ) ) ; +#2006 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#2007 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -39.93749999999997158, -47.49999999999999289 ) ) ; +#2008 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2009 = FACE_OUTER_BOUND ( 'NONE', #1558, .T. ) ; +#2010 = VERTEX_POINT ( 'NONE', #2577 ) ; +#2011 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2012 = ORIENTED_EDGE ( 'NONE', *, *, #2366, .F. ) ; +#2013 = AXIS2_PLACEMENT_3D ( 'NONE', #2143, #423, #3157 ) ; +#2014 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#2015 = VERTEX_POINT ( 'NONE', #3054 ) ; +#2016 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -54.09999999999999432, -49.04999999999999716 ) ) ; +#2017 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2018 = EDGE_CURVE ( 'NONE', #3022, #122, #844, .T. ) ; +#2019 = ORIENTED_EDGE ( 'NONE', *, *, #287, .F. ) ; +#2020 = VERTEX_POINT ( 'NONE', #3183 ) ; +#2021 = ORIENTED_EDGE ( 'NONE', *, *, #1776, .T. ) ; +#2022 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000002126, 36.23489379904926011, -49.99999999999999289 ) ) ; +#2023 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#2025 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -51.34999999999999432, -52.29999999999999716 ) ) ; +#2024 = VECTOR ( 'NONE', #773, 1000.000000000000000 ) ; +#2026 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -52.29999999999999716 ) ) ; +#2027 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -47.49999999999999289 ) ) ; +#2028 = CIRCLE ( 'NONE', #3136, 1.749999999999999778 ) ; +#2029 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999998010, -53.84999999999999432 ) ) ; +#2030 = EDGE_CURVE ( 'NONE', #3144, #2626, #644, .T. ) ; +#2031 = LINE ( 'NONE', #2037, #53 ) ; +#2032 = PLANE ( 'NONE', #405 ) ; +#2033 = EDGE_LOOP ( 'NONE', ( #1906, #1508 ) ) ; +#2034 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2035 = CIRCLE ( 'NONE', #1729, 2.999999999999999112 ) ; +#2036 = ORIENTED_EDGE ( 'NONE', *, *, #2206, .T. ) ; +#2037 = CARTESIAN_POINT ( 'NONE', ( 19.99999999999997868, -51.34999999999996589, -47.49999999999999289 ) ) ; +#2038 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2039 = EDGE_CURVE ( 'NONE', #1837, #1481, #2564, .T. ) ; +#2040 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2041 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 57.68094681733413154, -53.84999999999999432 ) ) ; +#2042 = VERTEX_POINT ( 'NONE', #84 ) ; +#2043 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -47.49999999999997158 ) ) ; +#2044 = EDGE_CURVE ( 'NONE', #3132, #1423, #968, .T. ) ; +#2045 = EDGE_LOOP ( 'NONE', ( #444, #2611 ) ) ; +#2046 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -51.34999999999999432, 22.49999999999997868 ) ) ; +#2047 = LINE ( 'NONE', #2475, #693 ) ; +#2048 = ORIENTED_EDGE ( 'NONE', *, *, #2080, .F. ) ; +#2049 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2050 = VECTOR ( 'NONE', #2748, 1000.000000000000000 ) ; +#2051 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2052 = ADVANCED_FACE ( 'NONE', ( #1257 ), #2522, .F. ) ; +#2053 = VERTEX_POINT ( 'NONE', #421 ) ; +#2054 = EDGE_LOOP ( 'NONE', ( #2929, #4 ) ) ; +#2055 = AXIS2_PLACEMENT_3D ( 'NONE', #2477, #1746, #1771 ) ; +#2056 = ORIENTED_EDGE ( 'NONE', *, *, #2627, .T. ) ; +#2057 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2058 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2059 = ORIENTED_EDGE ( 'NONE', *, *, #2044, .F. ) ; +#2060 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.671001984939500922E-16, 0.0000000000000000000 ) ) ; +#2061 = ORIENTED_EDGE ( 'NONE', *, *, #384, .T. ) ; +#2062 = EDGE_CURVE ( 'NONE', #122, #3022, #2498, .T. ) ; +#2063 = VERTEX_POINT ( 'NONE', #81 ) ; +#2064 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#2065 = ORIENTED_EDGE ( 'NONE', *, *, #501, .T. ) ; +#2066 = LINE ( 'NONE', #1700, #3185 ) ; +#2067 = FACE_OUTER_BOUND ( 'NONE', #3010, .T. ) ; +#2068 = ORIENTED_EDGE ( 'NONE', *, *, #841, .T. ) ; +#2069 = VECTOR ( 'NONE', #2773, 1000.000000000000000 ) ; +#2070 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2071 = LINE ( 'NONE', #1703, #1777 ) ; +#2072 = AXIS2_PLACEMENT_3D ( 'NONE', #1031, #276, #1017 ) ; +#2073 = FACE_OUTER_BOUND ( 'NONE', #3205, .T. ) ; +#2074 = ORIENTED_EDGE ( 'NONE', *, *, #69, .T. ) ; +#2075 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2076 = ORIENTED_EDGE ( 'NONE', *, *, #1164, .F. ) ; +#2077 = AXIS2_PLACEMENT_3D ( 'NONE', #3162, #1910, #392 ) ; +#2078 = ORIENTED_EDGE ( 'NONE', *, *, #3076, .F. ) ; +#2079 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#2080 = EDGE_CURVE ( 'NONE', #546, #3255, #1914, .T. ) ; +#2081 = PLANE ( 'NONE', #2885 ) ; +#2082 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2083 = ADVANCED_FACE ( 'NONE', ( #2763, #2380 ), #2609, .F. ) ; +#2084 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2085 = ORIENTED_EDGE ( 'NONE', *, *, #2783, .F. ) ; +#2086 = VERTEX_POINT ( 'NONE', #567 ) ; +#2087 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2088 = FILL_AREA_STYLE_COLOUR ( '', #1445 ) ; +#2089 = VERTEX_POINT ( 'NONE', #2919 ) ; +#2090 = CARTESIAN_POINT ( 'NONE', ( 11.37499999999999645, 3.995120947995324530E-15, -53.84999999999999432 ) ) ; +#2091 = ORIENTED_EDGE ( 'NONE', *, *, #2123, .F. ) ; +#2092 = AXIS2_PLACEMENT_3D ( 'NONE', #2747, #3224, #509 ) ; +#2093 = VERTEX_POINT ( 'NONE', #1327 ) ; +#2094 = CIRCLE ( 'NONE', #739, 1.749999999999999778 ) ; +#2095 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#2096 = ORIENTED_EDGE ( 'NONE', *, *, #458, .F. ) ; +#2097 = EDGE_CURVE ( 'NONE', #2292, #1380, #1996, .T. ) ; +#2098 = EDGE_LOOP ( 'NONE', ( #894, #1790, #1384, #2978 ) ) ; +#2099 = PLANE ( 'NONE', #1153 ) ; +#2100 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000013145, -38.62499999999998579, -50.67499999999999716 ) ) ; +#2101 = EDGE_CURVE ( 'NONE', #832, #901, #718, .T. ) ; +#2102 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 56.03884078076434605, -47.49999999999999289 ) ) ; +#2103 = CIRCLE ( 'NONE', #3254, 1.750000000000001554 ) ; +#2104 = EDGE_LOOP ( 'NONE', ( #116, #2443, #2239, #2348 ) ) ; +#2105 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2106 = AXIS2_PLACEMENT_3D ( 'NONE', #534, #1525, #759 ) ; +#2107 = LINE ( 'NONE', #2685, #536 ) ; +#2108 = LINE ( 'NONE', #629, #367 ) ; +#2109 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2110 = FACE_OUTER_BOUND ( 'NONE', #1253, .T. ) ; +#2111 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -51.34999999999998010, -53.84999999999999432 ) ) ; +#2112 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -51.34999999999999432, -50.67499999999999716 ) ) ; +#2113 = VECTOR ( 'NONE', #2958, 1000.000000000000000 ) ; +#2114 = ORIENTED_EDGE ( 'NONE', *, *, #1047, .F. ) ; +#2115 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -50.34999999999998721, -52.29999999999999716 ) ) ; +#2116 = ORIENTED_EDGE ( 'NONE', *, *, #2888, .F. ) ; +#2117 = ORIENTED_EDGE ( 'NONE', *, *, #2970, .F. ) ; +#2118 = AXIS2_PLACEMENT_3D ( 'NONE', #1832, #544, #269 ) ; +#2119 = ADVANCED_FACE ( 'NONE', ( #805 ), #965, .F. ) ; +#2120 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -47.49999999999998579 ) ) ; +#2121 = ORIENTED_EDGE ( 'NONE', *, *, #2566, .T. ) ; +#2122 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000000350, 57.73489379904924590, -49.99999999999999289 ) ) ; +#2123 = EDGE_CURVE ( 'NONE', #1812, #1126, #1732, .T. ) ; +#2124 = ORIENTED_EDGE ( 'NONE', *, *, #2156, .T. ) ; +#2125 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -50.35000000000007958, -50.67499999999999716 ) ) ; +#2126 = FACE_OUTER_BOUND ( 'NONE', #3217, .T. ) ; +#2127 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2128 = ORIENTED_EDGE ( 'NONE', *, *, #791, .T. ) ; +#2129 = PLANE ( 'NONE', #474 ) ; +#2130 = VERTEX_POINT ( 'NONE', #1878 ) ; +#2131 = CARTESIAN_POINT ( 'NONE', ( -18.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2132 = ORIENTED_EDGE ( 'NONE', *, *, #514, .T. ) ; +#2133 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #268, .NOT_KNOWN. ) ; +#2134 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2135 = ADVANCED_FACE ( 'NONE', ( #1138 ), #460, .F. ) ; +#2136 = ORIENTED_EDGE ( 'NONE', *, *, #2865, .F. ) ; +#2137 = ORIENTED_EDGE ( 'NONE', *, *, #2691, .T. ) ; +#2138 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000000350, 57.73489379904924590, -49.99999999999999289 ) ) ; +#2139 = VERTEX_POINT ( 'NONE', #2872 ) ; +#2140 = AXIS2_PLACEMENT_3D ( 'NONE', #1627, #2403, #149 ) ; +#2141 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2142 = EDGE_CURVE ( 'NONE', #2353, #2020, #2229, .T. ) ; +#2143 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#2144 = VECTOR ( 'NONE', #388, 1000.000000000000000 ) ; +#2145 = LINE ( 'NONE', #2856, #2760 ) ; +#2146 = PLANE ( 'NONE', #3241 ) ; +#2147 = EDGE_CURVE ( 'NONE', #110, #1458, #298, .T. ) ; +#2148 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 56.03884078076434605, -49.99999999999999289 ) ) ; +#2149 = FACE_OUTER_BOUND ( 'NONE', #557, .T. ) ; +#2150 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 37.93094681733413864, -53.84999999999999432 ) ) ; +#2151 = CYLINDRICAL_SURFACE ( 'NONE', #1911, 1.749999999999999778 ) ; +#2152 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#2153 = FACE_OUTER_BOUND ( 'NONE', #3059, .T. ) ; +#2154 = VECTOR ( 'NONE', #601, 1000.000000000000000 ) ; +#2155 = ADVANCED_FACE ( 'NONE', ( #1532 ), #369, .F. ) ; +#2156 = EDGE_CURVE ( 'NONE', #286, #2425, #2803, .T. ) ; +#2157 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2158 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .F. ) ; +#2159 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2160 = AXIS2_PLACEMENT_3D ( 'NONE', #2148, #630, #1656 ) ; +#2161 = VERTEX_POINT ( 'NONE', #2880 ) ; +#2162 = EDGE_LOOP ( 'NONE', ( #3130, #766 ) ) ; +#2163 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2164 = EDGE_CURVE ( 'NONE', #39, #2962, #499, .T. ) ; +#2165 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2166 = LINE ( 'NONE', #2289, #1510 ) ; +#2167 = FACE_BOUND ( 'NONE', #1015, .T. ) ; +#2168 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2169 = VERTEX_POINT ( 'NONE', #2138 ) ; +#2170 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2171 = VERTEX_POINT ( 'NONE', #379 ) ; +#2172 = ORIENTED_EDGE ( 'NONE', *, *, #2307, .F. ) ; +#2173 = ADVANCED_FACE ( 'NONE', ( #1449 ), #2415, .F. ) ; +#2174 = ORIENTED_EDGE ( 'NONE', *, *, #916, .F. ) ; +#2175 = ORIENTED_EDGE ( 'NONE', *, *, #11, .F. ) ; +#2176 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#2177 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2178 = AXIS2_PLACEMENT_3D ( 'NONE', #2363, #1142, #639 ) ; +#2179 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2180 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#2181 = LINE ( 'NONE', #948, #1085 ) ; +#2182 = EDGE_CURVE ( 'NONE', #1795, #3122, #1413, .T. ) ; +#2183 = VECTOR ( 'NONE', #2306, 1000.000000000000000 ) ; +#2184 = CIRCLE ( 'NONE', #2565, 4.000000000000001776 ) ; +#2185 = VECTOR ( 'NONE', #1868, 1000.000000000000000 ) ; +#2186 = DIRECTION ( 'NONE', ( -3.543264972207944962E-15, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#2187 = LINE ( 'NONE', #2368, #574 ) ; +#2188 = CIRCLE ( 'NONE', #2321, 1.625000000000001332 ) ; +#2189 = ORIENTED_EDGE ( 'NONE', *, *, #284, .T. ) ; +#2190 = EDGE_LOOP ( 'NONE', ( #2742, #2397, #617, #1455 ) ) ; +#2191 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -54.09999999999999432, -47.50000000000000000 ) ) ; +#2192 = ORIENTED_EDGE ( 'NONE', *, *, #1929, .F. ) ; +#2193 = ORIENTED_EDGE ( 'NONE', *, *, #2202, .T. ) ; +#2194 = EDGE_CURVE ( 'NONE', #2953, #1032, #2304, .T. ) ; +#2195 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2196 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2197 = CARTESIAN_POINT ( 'NONE', ( 12.68765000000000143, 36.23489379904926011, -49.99999999999999289 ) ) ; +#2198 = EDGE_LOOP ( 'NONE', ( #2021, #271, #1628, #857 ) ) ; +#2199 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -39.93749999999997158, -47.49999999999997868 ) ) ; +#2200 = AXIS2_PLACEMENT_3D ( 'NONE', #2112, #640, #346 ) ; +#2201 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#2202 = EDGE_CURVE ( 'NONE', #829, #393, #334, .T. ) ; +#2203 = VECTOR ( 'NONE', #808, 1000.000000000000000 ) ; +#2204 = ORIENTED_EDGE ( 'NONE', *, *, #682, .F. ) ; +#2205 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2206 = EDGE_CURVE ( 'NONE', #831, #430, #2187, .T. ) ; +#2207 = EDGE_LOOP ( 'NONE', ( #2078, #2744, #1519, #1535 ) ) ; +#2208 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2209 = ORIENTED_EDGE ( 'NONE', *, *, #2384, .F. ) ; +#2210 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2211 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2212 = ADVANCED_FACE ( 'NONE', ( #1571 ), #1683, .F. ) ; +#2213 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2214 = ORIENTED_EDGE ( 'NONE', *, *, #2123, .T. ) ; +#2215 = ORIENTED_EDGE ( 'NONE', *, *, #2448, .T. ) ; +#2216 = ORIENTED_EDGE ( 'NONE', *, *, #3243, .T. ) ; +#2217 = DIRECTION ( 'NONE', ( -0.8660254037844391517, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#2218 = ORIENTED_EDGE ( 'NONE', *, *, #1325, .T. ) ; +#2219 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.206764157201257538E-15, -6.698886763086040130E-32 ) ) ; +#2220 = LINE ( 'NONE', #17, #2759 ) ; +#2221 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -53.85000000000000142 ) ) ; +#2223 = DIRECTION ( 'NONE', ( -1.067522139062649685E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2222 = LINE ( 'NONE', #3231, #331 ) ; +#2224 = EDGE_CURVE ( 'NONE', #2251, #3202, #136, .T. ) ; +#2225 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -47.49999999999997158 ) ) ; +#2226 = CIRCLE ( 'NONE', #1414, 1.625000000000001332 ) ; +#2227 = EDGE_CURVE ( 'NONE', #547, #2983, #1339, .T. ) ; +#2228 = LINE ( 'NONE', #2409, #887 ) ; +#2229 = CIRCLE ( 'NONE', #2466, 1.625000000000001332 ) ; +#2230 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2231 = AXIS2_PLACEMENT_3D ( 'NONE', #3203, #1725, #202 ) ; +#2232 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2233 = ADVANCED_FACE ( 'NONE', ( #3154 ), #888, .F. ) ; +#2234 = ORIENTED_EDGE ( 'NONE', *, *, #198, .F. ) ; +#2235 = EDGE_LOOP ( 'NONE', ( #1587, #1794, #2555, #2293 ) ) ; +#2236 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 34.53884078076435316, -49.99999999999999289 ) ) ; +#2237 = ORIENTED_EDGE ( 'NONE', *, *, #87, .T. ) ; +#2238 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -53.85000000000000142 ) ) ; +#2239 = ORIENTED_EDGE ( 'NONE', *, *, #2538, .T. ) ; +#2240 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2241 = FACE_BOUND ( 'NONE', #1870, .T. ) ; +#2242 = AXIS2_PLACEMENT_3D ( 'NONE', #1979, #3189, #192 ) ; +#2243 = EDGE_LOOP ( 'NONE', ( #1063, #2653, #2932, #3240 ) ) ; +#2244 = EDGE_CURVE ( 'NONE', #204, #37, #218, .T. ) ; +#2245 = ORIENTED_EDGE ( 'NONE', *, *, #745, .F. ) ; +#2246 = ORIENTED_EDGE ( 'NONE', *, *, #3218, .F. ) ; +#2247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#2248 = ORIENTED_EDGE ( 'NONE', *, *, #2039, .F. ) ; +#2249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2250 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -39.93749999999997158, -47.49999999999997868 ) ) ; +#2251 = VERTEX_POINT ( 'NONE', #929 ) ; +#2252 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -53.85000000000000142 ) ) ; +#2253 = CYLINDRICAL_SURFACE ( 'NONE', #1442, 2.999999999999999112 ) ; +#2254 = AXIS2_PLACEMENT_3D ( 'NONE', #497, #476, #2975 ) ; +#2255 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2256 = VECTOR ( 'NONE', #2714, 1000.000000000000000 ) ; +#2257 = LINE ( 'NONE', #387, #2562 ) ; +#2258 = AXIS2_PLACEMENT_3D ( 'NONE', #984, #197, #707 ) ; +#2259 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2260 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2261 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -39.93749999999997158, -53.84999999999999432 ) ) ; +#2262 = EDGE_CURVE ( 'NONE', #2161, #829, #1647, .T. ) ; +#2263 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#2264 = VECTOR ( 'NONE', #3150, 1000.000000000000000 ) ; +#2265 = FACE_BOUND ( 'NONE', #2686, .T. ) ; +#2266 = EDGE_CURVE ( 'NONE', #2010, #137, #3083, .T. ) ; +#2267 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -53.85000000000000142 ) ) ; +#2268 = VERTEX_POINT ( 'NONE', #902 ) ; +#2269 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2270 = VECTOR ( 'NONE', #3056, 1000.000000000000000 ) ; +#2271 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 68.00000000000000000, -53.85000000000000142 ) ) ; +#2272 = ORIENTED_EDGE ( 'NONE', *, *, #1120, .T. ) ; +#2273 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257538E-15, 6.698886763086040130E-32 ) ) ; +#2274 = CARTESIAN_POINT ( 'NONE', ( 13.75000000000001776, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2275 = LINE ( 'NONE', #1157, #1616 ) ; +#2276 = ORIENTED_EDGE ( 'NONE', *, *, #109, .T. ) ; +#2277 = VERTEX_POINT ( 'NONE', #139 ) ; +#2278 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 56.03884078076434605, -49.99999999999999289 ) ) ; +#2279 = EDGE_LOOP ( 'NONE', ( #2539, #2174 ) ) ; +#2280 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2281 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -50.34999999999998721, -50.67499999999999716 ) ) ; +#2282 = DIRECTION ( 'NONE', ( 0.5000000000000008882, -0.8660254037844381525, 0.0000000000000000000 ) ) ; +#2283 = AXIS2_PLACEMENT_3D ( 'NONE', #2411, #1940, #1712 ) ; +#2284 = EDGE_CURVE ( 'NONE', #3202, #1080, #2921, .T. ) ; +#2285 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -35.37499999999999289, -50.67499999999999716 ) ) ; +#2286 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'frame_vert_181126', ( #975, #3125 ), #1303 ) ; +#2287 = ORIENTED_EDGE ( 'NONE', *, *, #610, .T. ) ; +#2288 = ORIENTED_EDGE ( 'NONE', *, *, #1825, .T. ) ; +#2289 = CARTESIAN_POINT ( 'NONE', ( 18.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2290 = VERTEX_POINT ( 'NONE', #1927 ) ; +#2291 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999997868, -53.84999999999999432 ) ) ; +#2292 = VERTEX_POINT ( 'NONE', #667 ) ; +#2293 = ORIENTED_EDGE ( 'NONE', *, *, #2244, .T. ) ; +#2294 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -47.49999999999999289 ) ) ; +#2295 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999991468, 57.73489379904925300, -49.99999999999999289 ) ) ; +#2296 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -54.09999999999999432, -53.84999999999999432 ) ) ; +#2297 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -47.49999999999997158 ) ) ; +#2298 = CIRCLE ( 'NONE', #2283, 1.625000000000001332 ) ; +#2299 = CIRCLE ( 'NONE', #1963, 1.749999999999999778 ) ; +#2300 = AXIS2_PLACEMENT_3D ( 'NONE', #178, #1210, #1962 ) ; +#2301 = LINE ( 'NONE', #3251, #1411 ) ; +#2302 = LINE ( 'NONE', #2630, #2144 ) ; +#2303 = VECTOR ( 'NONE', #2375, 1000.000000000000000 ) ; +#2304 = LINE ( 'NONE', #623, #373 ) ; +#2305 = AXIS2_PLACEMENT_3D ( 'NONE', #3039, #1010, #3007 ) ; +#2306 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2307 = EDGE_CURVE ( 'NONE', #1907, #1892, #2071, .T. ) ; +#2308 = VECTOR ( 'NONE', #774, 1000.000000000000114 ) ; +#2309 = EDGE_CURVE ( 'NONE', #2473, #1146, #2337, .T. ) ; +#2310 = ORIENTED_EDGE ( 'NONE', *, *, #2389, .F. ) ; +#2311 = ORIENTED_EDGE ( 'NONE', *, *, #2318, .F. ) ; +#2312 = CYLINDRICAL_SURFACE ( 'NONE', #2254, 1.749999999999998002 ) ; +#2313 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2314 = EDGE_LOOP ( 'NONE', ( #2341, #1356 ) ) ; +#2315 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2316 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2317 = EDGE_LOOP ( 'NONE', ( #1304, #400 ) ) ; +#2318 = EDGE_CURVE ( 'NONE', #2940, #1766, #2722, .T. ) ; +#2319 = CARTESIAN_POINT ( 'NONE', ( 17.25000000000000000, -15.49999999999997868, -53.85000000000000142 ) ) ; +#2320 = ORIENTED_EDGE ( 'NONE', *, *, #2939, .T. ) ; +#2321 = AXIS2_PLACEMENT_3D ( 'NONE', #164, #359, #289 ) ; +#2322 = EDGE_LOOP ( 'NONE', ( #273, #1166, #1822, #1688 ) ) ; +#2323 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -54.09999999999999432, -50.67499999999999716 ) ) ; +#2324 = FILL_AREA_STYLE ('',( #2088 ) ) ; +#2325 = ORIENTED_EDGE ( 'NONE', *, *, #1842, .F. ) ; +#2326 = EDGE_CURVE ( 'NONE', #65, #507, #2801, .T. ) ; +#2327 = EDGE_LOOP ( 'NONE', ( #2124, #2855, #3038, #1152 ) ) ; +#2328 = EDGE_LOOP ( 'NONE', ( #1626, #3068, #668, #1403 ) ) ; +#2329 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 37.93094681733414575, 22.49999999999997868 ) ) ; +#2330 = CYLINDRICAL_SURFACE ( 'NONE', #182, 1.749999999999999778 ) ; +#2331 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#2332 = CYLINDRICAL_SURFACE ( 'NONE', #169, 1.625000000000001332 ) ; +#2333 = DIRECTION ( 'NONE', ( 0.5000000000000008882, -0.8660254037844381525, 0.0000000000000000000 ) ) ; +#2334 = CYLINDRICAL_SURFACE ( 'NONE', #1272, 4.000000000000001776 ) ; +#2335 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2336 = LINE ( 'NONE', #1156, #2185 ) ; +#2337 = LINE ( 'NONE', #657, #1606 ) ; +#2338 = LINE ( 'NONE', #2731, #1882 ) ; +#2339 = ORIENTED_EDGE ( 'NONE', *, *, #1877, .T. ) ; +#2340 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#2341 = ORIENTED_EDGE ( 'NONE', *, *, #986, .F. ) ; +#2342 = EDGE_CURVE ( 'NONE', #1192, #3160, #3034, .T. ) ; +#2343 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2344 = CARTESIAN_POINT ( 'NONE', ( -11.37500000000000355, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#2345 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#2346 = VERTEX_POINT ( 'NONE', #1444 ) ; +#2347 = DIRECTION ( 'NONE', ( -0.4999999999999992228, 0.8660254037844391517, 0.0000000000000000000 ) ) ; +#2348 = ORIENTED_EDGE ( 'NONE', *, *, #3008, .F. ) ; +#2349 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -53.84999999999999432 ) ) ; +#2350 = ORIENTED_EDGE ( 'NONE', *, *, #1096, .T. ) ; +#2351 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#2352 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2353 = VERTEX_POINT ( 'NONE', #443 ) ; +#2354 = AXIS2_PLACEMENT_3D ( 'NONE', #2780, #1834, #535 ) ; +#2355 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2356 = ORIENTED_EDGE ( 'NONE', *, *, #1270, .F. ) ; +#2357 = FILL_AREA_STYLE ('',( #1071 ) ) ; +#2358 = EDGE_LOOP ( 'NONE', ( #1175, #1229, #233, #749 ) ) ; +#2359 = EDGE_CURVE ( 'NONE', #1402, #1835, #2674, .T. ) ; +#2360 = ORIENTED_EDGE ( 'NONE', *, *, #1397, .T. ) ; +#2361 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, 68.00000000000000000, -53.85000000000000142 ) ) ; +#2362 = ORIENTED_EDGE ( 'NONE', *, *, #1898, .F. ) ; +#2363 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 37.93094681733413864, -50.00000000000000000 ) ) ; +#2364 = ORIENTED_EDGE ( 'NONE', *, *, #1706, .F. ) ; +#2365 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2366 = EDGE_CURVE ( 'NONE', #1317, #1799, #1879, .T. ) ; +#2367 = VECTOR ( 'NONE', #2754, 1000.000000000000000 ) ; +#2368 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999965, 36.23489379904924590, -49.99999999999999289 ) ) ; +#2369 = CIRCLE ( 'NONE', #2118, 2.999999999999999112 ) ; +#2370 = CIRCLE ( 'NONE', #2684, 4.000000000000001776 ) ; +#2371 = CIRCLE ( 'NONE', #928, 1.625000000000001332 ) ; +#2372 = ADVANCED_FACE ( 'NONE', ( #1218 ), #370, .F. ) ; +#2373 = VECTOR ( 'NONE', #1690, 1000.000000000000000 ) ; +#2374 = ORIENTED_EDGE ( 'NONE', *, *, #1912, .F. ) ; +#2375 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#2376 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012434, -35.37499999999998579, -50.67499999999999716 ) ) ; +#2377 = CYLINDRICAL_SURFACE ( 'NONE', #559, 1.625000000000001332 ) ; +#2378 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 62.82305285390393834, -47.49999999999999289 ) ) ; +#2379 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -47.49999999999998579 ) ) ; +#2380 = FACE_OUTER_BOUND ( 'NONE', #2574, .T. ) ; +#2381 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 34.53884078076435316, -47.49999999999999289 ) ) ; +#2382 = ORIENTED_EDGE ( 'NONE', *, *, #2164, .F. ) ; +#2383 = AXIS2_PLACEMENT_3D ( 'NONE', #1950, #102, #1209 ) ; +#2384 = EDGE_CURVE ( 'NONE', #2000, #356, #2952, .T. ) ; +#2385 = ORIENTED_EDGE ( 'NONE', *, *, #877, .T. ) ; +#2386 = ADVANCED_FACE ( 'NONE', ( #1726, #2535 ), #1202, .T. ) ; +#2387 = FACE_OUTER_BOUND ( 'NONE', #2328, .T. ) ; +#2388 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999077, 61.12699983561903849, -49.99999999999999289 ) ) ; +#2389 = EDGE_CURVE ( 'NONE', #3022, #316, #3078, .T. ) ; +#2390 = ORIENTED_EDGE ( 'NONE', *, *, #2710, .T. ) ; +#2391 = DIRECTION ( 'NONE', ( -7.671001984939500922E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2392 = ADVANCED_FACE ( 'NONE', ( #683 ), #485, .F. ) ; +#2393 = EDGE_LOOP ( 'NONE', ( #1660, #1353, #2554, #2245 ) ) ; +#2394 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -53.85000000000000142 ) ) ; +#2395 = ORIENTED_EDGE ( 'NONE', *, *, #742, .T. ) ; +#2396 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2397 = ORIENTED_EDGE ( 'NONE', *, *, #1456, .F. ) ; +#2398 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#2399 = ORIENTED_EDGE ( 'NONE', *, *, #912, .F. ) ; +#2400 = ORIENTED_EDGE ( 'NONE', *, *, #2262, .T. ) ; +#2401 = AXIS2_PLACEMENT_3D ( 'NONE', #2517, #1036, #524 ) ; +#2402 = ORIENTED_EDGE ( 'NONE', *, *, #1364, .F. ) ; +#2403 = DIRECTION ( 'NONE', ( 3.543264972207944962E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#2404 = ORIENTED_EDGE ( 'NONE', *, *, #2939, .F. ) ; +#2405 = ORIENTED_EDGE ( 'NONE', *, *, #682, .T. ) ; +#2406 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2407 = AXIS2_PLACEMENT_3D ( 'NONE', #126, #1625, #2352 ) ; +#2408 = EDGE_CURVE ( 'NONE', #2545, #831, #2716, .T. ) ; +#2409 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 34.53884078076435316, -47.49999999999999289 ) ) ; +#2410 = LINE ( 'NONE', #3013, #406 ) ; +#2411 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -36.99999999999999289, -50.67499999999999716 ) ) ; +#2412 = FACE_BOUND ( 'NONE', #2033, .T. ) ; +#2413 = FACE_OUTER_BOUND ( 'NONE', #1763, .T. ) ; +#2414 = FACE_OUTER_BOUND ( 'NONE', #1434, .T. ) ; +#2415 = CYLINDRICAL_SURFACE ( 'NONE', #500, 1.625000000000001332 ) ; +#2416 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, -3.469446951953578444E-17, -53.85000000000000142 ) ) ; +#2417 = FACE_OUTER_BOUND ( 'NONE', #744, .T. ) ; +#2418 = VECTOR ( 'NONE', #1112, 1000.000000000000000 ) ; +#2419 = VERTEX_POINT ( 'NONE', #704 ) ; +#2420 = EDGE_CURVE ( 'NONE', #2086, #593, #1174, .T. ) ; +#2421 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 59.43094681733413864, -50.00000000000000000 ) ) ; +#2422 = ADVANCED_FACE ( 'NONE', ( #885 ), #3115, .F. ) ; +#2423 = CIRCLE ( 'NONE', #1409, 1.625000000000001332 ) ; +#2424 = ADVANCED_FACE ( 'NONE', ( #604 ), #3188, .F. ) ; +#2425 = VERTEX_POINT ( 'NONE', #215 ) ; +#2426 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#2427 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2428 = AXIS2_PLACEMENT_3D ( 'NONE', #2857, #1374, #3109 ) ; +#2429 = VERTEX_POINT ( 'NONE', #1744 ) ; +#2430 = EDGE_CURVE ( 'NONE', #871, #1199, #2494, .T. ) ; +#2431 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999965, 36.23489379904924590, -47.49999999999999289 ) ) ; +#2432 = VECTOR ( 'NONE', #953, 1000.000000000000114 ) ; +#2433 = FACE_BOUND ( 'NONE', #3003, .T. ) ; +#2434 = VERTEX_POINT ( 'NONE', #740 ) ; +#2435 = VECTOR ( 'NONE', #575, 1000.000000000000114 ) ; +#2436 = PLANE ( 'NONE', #2730 ) ; +#2437 = EDGE_CURVE ( 'NONE', #285, #2346, #2454, .T. ) ; +#2438 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -51.34999999999998721, -50.67499999999999716 ) ) ; +#2439 = ORIENTED_EDGE ( 'NONE', *, *, #2101, .F. ) ; +#2440 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2441 = ORIENTED_EDGE ( 'NONE', *, *, #1160, .F. ) ; +#2442 = ADVANCED_FACE ( 'NONE', ( #2067 ), #2938, .F. ) ; +#2443 = ORIENTED_EDGE ( 'NONE', *, *, #678, .F. ) ; +#2444 = ORIENTED_EDGE ( 'NONE', *, *, #1663, .T. ) ; +#2445 = ORIENTED_EDGE ( 'NONE', *, *, #1075, .F. ) ; +#2446 = STYLED_ITEM ( 'NONE', ( #1366 ), #975 ) ; +#2447 = LINE ( 'NONE', #266, #2489 ) ; +#2448 = EDGE_CURVE ( 'NONE', #2787, #45, #212, .T. ) ; +#2449 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2450 = VECTOR ( 'NONE', #2651, 1000.000000000000000 ) ; +#2451 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#2452 = FACE_OUTER_BOUND ( 'NONE', #2537, .T. ) ; +#2453 = CARTESIAN_POINT ( 'NONE', ( 6.812349999999998573, 61.12699983561904560, -47.49999999999999289 ) ) ; +#2454 = CIRCLE ( 'NONE', #954, 2.999999999999999112 ) ; +#2455 = ADVANCED_FACE ( 'NONE', ( #1774 ), #3214, .F. ) ; +#2456 = VECTOR ( 'NONE', #1967, 1000.000000000000000 ) ; +#2457 = ORIENTED_EDGE ( 'NONE', *, *, #11, .T. ) ; +#2458 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -34.06249999999997158, -47.49999999999997158 ) ) ; +#2459 = ORIENTED_EDGE ( 'NONE', *, *, #907, .T. ) ; +#2460 = EDGE_LOOP ( 'NONE', ( #2004, #2986, #1630, #472 ) ) ; +#2461 = DIRECTION ( 'NONE', ( -7.671001984939500922E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2462 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -35.37499999999999289, -50.67499999999999716 ) ) ; +#2463 = ORIENTED_EDGE ( 'NONE', *, *, #3032, .T. ) ; +#2464 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2465 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -50.67499999999999716 ) ) ; +#2466 = AXIS2_PLACEMENT_3D ( 'NONE', #843, #2105, #1901 ) ; +#2467 = EDGE_CURVE ( 'NONE', #26, #1237, #1295, .T. ) ; +#2468 = ADVANCED_FACE ( 'NONE', ( #1490, #539 ), #1757, .T. ) ; +#2469 = EDGE_LOOP ( 'NONE', ( #422, #944, #2680, #2272 ) ) ; +#2470 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 39.62699983561905270, -47.49999999999999289 ) ) ; +#2471 = EDGE_CURVE ( 'NONE', #479, #125, #1135, .T. ) ; +#2472 = ORIENTED_EDGE ( 'NONE', *, *, #1600, .F. ) ; +#2473 = VERTEX_POINT ( 'NONE', #1509 ) ; +#2474 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000002126, 39.62699983561905270, -49.99999999999999289 ) ) ; +#2475 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 61.18094681733414575, 22.49999999999997868 ) ) ; +#2476 = ADVANCED_FACE ( 'NONE', ( #2413 ), #1369, .F. ) ; +#2477 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 37.93094681733413864, -50.00000000000000000 ) ) ; +#2478 = EDGE_LOOP ( 'NONE', ( #165, #2518 ) ) ; +#2479 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#2480 = VERTEX_POINT ( 'NONE', #1265 ) ; +#2481 = ORIENTED_EDGE ( 'NONE', *, *, #1024, .F. ) ; +#2482 = EDGE_CURVE ( 'NONE', #1562, #786, #570, .T. ) ; +#2483 = ORIENTED_EDGE ( 'NONE', *, *, #856, .F. ) ; +#2484 = ADVANCED_FACE ( 'NONE', ( #132 ), #2151, .F. ) ; +#2485 = CARTESIAN_POINT ( 'NONE', ( -13.75000000000000355, 15.50000000000001243, -53.85000000000000142 ) ) ; +#2486 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, 68.00000000000000000, -47.50000000000000000 ) ) ; +#2487 = AXIS2_PLACEMENT_3D ( 'NONE', #798, #1088, #78 ) ; +#2488 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 5.551115123125782702E-17, 1.000000000000000000 ) ) ; +#2490 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2489 = VECTOR ( 'NONE', #552, 1000.000000000000000 ) ; +#2491 = EDGE_CURVE ( 'NONE', #67, #2429, #459, .T. ) ; +#2492 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 68.00000000000000000, -53.85000000000000142 ) ) ; +#2493 = FACE_OUTER_BOUND ( 'NONE', #2243, .T. ) ; +#2494 = CIRCLE ( 'NONE', #2862, 1.625000000000001332 ) ; +#2495 = ORIENTED_EDGE ( 'NONE', *, *, #2606, .F. ) ; +#2496 = EDGE_CURVE ( 'NONE', #2509, #201, #2301, .T. ) ; +#2497 = FACE_BOUND ( 'NONE', #3065, .T. ) ; +#2498 = CIRCLE ( 'NONE', #360, 11.37500000000000000 ) ; +#2499 = AXIS2_PLACEMENT_3D ( 'NONE', #720, #225, #2247 ) ; +#2500 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -50.67499999999999716 ) ) ; +#2501 = FACE_OUTER_BOUND ( 'NONE', #1843, .T. ) ; +#2502 = VECTOR ( 'NONE', #2749, 1000.000000000000000 ) ; +#2503 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2504 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.543264972207944962E-15, 0.0000000000000000000 ) ) ; +#2505 = EDGE_LOOP ( 'NONE', ( #2172, #1404, #2664, #2189 ) ) ; +#2506 = EDGE_LOOP ( 'NONE', ( #2356, #942, #2812, #2019 ) ) ; +#2507 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2508 = AXIS2_PLACEMENT_3D ( 'NONE', #2618, #896, #1405 ) ; +#2509 = VERTEX_POINT ( 'NONE', #838 ) ; +#2510 = DIRECTION ( 'NONE', ( 2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2511 = ORIENTED_EDGE ( 'NONE', *, *, #2420, .F. ) ; +#2512 = EDGE_CURVE ( 'NONE', #589, #2010, #765, .T. ) ; +#2513 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .T. ) ; +#2514 = CARTESIAN_POINT ( 'NONE', ( 18.50000000000001066, 15.50000000000001243, -47.49999999999999289 ) ) ; +#2515 = ORIENTED_EDGE ( 'NONE', *, *, #2030, .F. ) ; +#2516 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2518 = ORIENTED_EDGE ( 'NONE', *, *, #1054, .T. ) ; +#2517 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2519 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2520 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 57.68094681733413154, -53.84999999999999432 ) ) ; +#2521 = ORIENTED_EDGE ( 'NONE', *, *, #933, .T. ) ; +#2522 = PLANE ( 'NONE', #543 ) ; +#2523 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -47.49999999999999289 ) ) ; +#2524 = VECTOR ( 'NONE', #2828, 1000.000000000000000 ) ; +#2525 = AXIS2_PLACEMENT_3D ( 'NONE', #3040, #1334, #294 ) ; +#2526 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000002126, 39.62699983561905270, -49.99999999999999289 ) ) ; +#2527 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2528 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2529 = LINE ( 'NONE', #1886, #171 ) ; +#2530 = AXIS2_PLACEMENT_3D ( 'NONE', #2902, #2914, #3173 ) ; +#2531 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2532 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, 2.602085213965210642E-15, -51.34999999999999432 ) ) ; +#2533 = EDGE_CURVE ( 'NONE', #199, #1575, #2031, .T. ) ; +#2534 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2535 = FACE_BOUND ( 'NONE', #1141, .T. ) ; +#2536 = LINE ( 'NONE', #1624, #1533 ) ; +#2537 = EDGE_LOOP ( 'NONE', ( #2649, #1110 ) ) ; +#2538 = EDGE_CURVE ( 'NONE', #2277, #1867, #1643, .T. ) ; +#2539 = ORIENTED_EDGE ( 'NONE', *, *, #2548, .F. ) ; +#2540 = ORIENTED_EDGE ( 'NONE', *, *, #1293, .T. ) ; +#2541 = ORIENTED_EDGE ( 'NONE', *, *, #220, .T. ) ; +#2542 = ADVANCED_FACE ( 'NONE', ( #1053 ), #642, .F. ) ; +#2543 = PLANE ( 'NONE', #1779 ) ; +#2544 = FACE_BOUND ( 'NONE', #2314, .T. ) ; +#2545 = VERTEX_POINT ( 'NONE', #1276 ) ; +#2546 = ORIENTED_EDGE ( 'NONE', *, *, #1762, .F. ) ; +#2547 = AXIS2_PLACEMENT_3D ( 'NONE', #2656, #1185, #1937 ) ; +#2548 = EDGE_CURVE ( 'NONE', #1988, #1735, #1335, .T. ) ; +#2549 = ORIENTED_EDGE ( 'NONE', *, *, #410, .F. ) ; +#2550 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999994132, 61.12699983561903849, -49.99999999999999289 ) ) ; +#2551 = PLANE ( 'NONE', #3186 ) ; +#2552 = EDGE_CURVE ( 'NONE', #430, #1517, #295, .T. ) ; +#2553 = EDGE_LOOP ( 'NONE', ( #2883, #2515, #528, #2892 ) ) ; +#2554 = ORIENTED_EDGE ( 'NONE', *, *, #2783, .T. ) ; +#2555 = ORIENTED_EDGE ( 'NONE', *, *, #960, .T. ) ; +#2556 = PLANE ( 'NONE', #1131 ) ; +#2557 = VERTEX_POINT ( 'NONE', #1530 ) ; +#2558 = ORIENTED_EDGE ( 'NONE', *, *, #1120, .F. ) ; +#2559 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -56.99999999999997868, -49.04999999999999716 ) ) ; +#2560 = AXIS2_PLACEMENT_3D ( 'NONE', #278, #1048, #761 ) ; +#2561 = FACE_OUTER_BOUND ( 'NONE', #224, .T. ) ; +#2562 = VECTOR ( 'NONE', #1900, 1000.000000000000000 ) ; +#2563 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2564 = LINE ( 'NONE', #3145, #253 ) ; +#2565 = AXIS2_PLACEMENT_3D ( 'NONE', #2877, #1362, #2599 ) ; +#2566 = EDGE_CURVE ( 'NONE', #1705, #2268, #3151, .T. ) ; +#2567 = DIRECTION ( 'NONE', ( -1.206764157201257538E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2568 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#2569 = LINE ( 'NONE', #1106, #1103 ) ; +#2570 = ORIENTED_EDGE ( 'NONE', *, *, #810, .T. ) ; +#2571 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -53.84999999999999432 ) ) ; +#2572 = ADVANCED_FACE ( 'NONE', ( #1092 ), #282, .F. ) ; +#2573 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2574 = EDGE_LOOP ( 'NONE', ( #3211, #1740, #321, #1829 ) ) ; +#2575 = ADVANCED_FACE ( 'NONE', ( #2637 ), #2881, .F. ) ; +#2576 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 39.68094681733413864, -53.84999999999999432 ) ) ; +#2577 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -39.93749999999997158, -47.49999999999997868 ) ) ; +#2578 = ORIENTED_EDGE ( 'NONE', *, *, #1828, .F. ) ; +#2579 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2580 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -9.088269684226890842E-17, 1.000000000000000000 ) ) ; +#2581 = AXIS2_PLACEMENT_3D ( 'NONE', #2316, #2038, #819 ) ; +#2582 = LINE ( 'NONE', #1292, #1427 ) ; +#2583 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999077, 61.12699983561903849, -47.49999999999999289 ) ) ; +#2584 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -53.85000000000000142 ) ) ; +#2585 = VERTEX_POINT ( 'NONE', #1823 ) ; +#2586 = FACE_BOUND ( 'NONE', #2054, .T. ) ; +#2587 = AXIS2_PLACEMENT_3D ( 'NONE', #2416, #1947, #2406 ) ; +#2588 = ORIENTED_EDGE ( 'NONE', *, *, #1392, .T. ) ; +#2589 = DIRECTION ( 'NONE', ( 1.067522139062649685E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2590 = ORIENTED_EDGE ( 'NONE', *, *, #134, .T. ) ; +#2591 = EDGE_CURVE ( 'NONE', #106, #2770, #2601, .T. ) ; +#2592 = VECTOR ( 'NONE', #606, 1000.000000000000114 ) ; +#2593 = ORIENTED_EDGE ( 'NONE', *, *, #3158, .F. ) ; +#2594 = EDGE_LOOP ( 'NONE', ( #308, #558, #2809, #1302 ) ) ; +#2595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#2596 = CIRCLE ( 'NONE', #3222, 2.999999999999999112 ) ; +#2597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2598 = LINE ( 'NONE', #1952, #1944 ) ; +#2599 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2600 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -35.37499999999999289, -50.67499999999999716 ) ) ; +#2601 = CIRCLE ( 'NONE', #2200, 1.625000000000001332 ) ; +#2602 = AXIS2_PLACEMENT_3D ( 'NONE', #3012, #246, #533 ) ; +#2603 = LINE ( 'NONE', #2043, #2502 ) ; +#2604 = ORIENTED_EDGE ( 'NONE', *, *, #628, .T. ) ; +#2605 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#2606 = EDGE_CURVE ( 'NONE', #2983, #547, #2226, .T. ) ; +#2607 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999991468, 57.73489379904925300, -49.99999999999999289 ) ) ; +#2608 = VECTOR ( 'NONE', #1511, 1000.000000000000000 ) ; +#2609 = PLANE ( 'NONE', #2963 ) ; +#2610 = ADVANCED_FACE ( 'NONE', ( #2561 ), #538, .F. ) ; +#2611 = ORIENTED_EDGE ( 'NONE', *, *, #6, .T. ) ; +#2612 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000013145, -38.62499999999998579, -50.67499999999999716 ) ) ; +#2613 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#2614 = ORIENTED_EDGE ( 'NONE', *, *, #1534, .F. ) ; +#2615 = VECTOR ( 'NONE', #2503, 1000.000000000000000 ) ; +#2616 = PRODUCT_CONTEXT ( 'NONE', #873, 'mechanical' ) ; +#2617 = ORIENTED_EDGE ( 'NONE', *, *, #2648, .F. ) ; +#2618 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2619 = FACE_BOUND ( 'NONE', #242, .T. ) ; +#2620 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#2621 = VERTEX_POINT ( 'NONE', #2379 ) ; +#2622 = AXIS2_PLACEMENT_3D ( 'NONE', #1713, #920, #184 ) ; +#2623 = ORIENTED_EDGE ( 'NONE', *, *, #1893, .F. ) ; +#2624 = LINE ( 'NONE', #550, #2435 ) ; +#2625 = AXIS2_PLACEMENT_3D ( 'NONE', #2295, #2060, #787 ) ; +#2626 = VERTEX_POINT ( 'NONE', #389 ) ; +#2627 = EDGE_CURVE ( 'NONE', #901, #3166, #92, .T. ) ; +#2628 = LINE ( 'NONE', #906, #1784 ) ; +#2629 = ORIENTED_EDGE ( 'NONE', *, *, #2552, .T. ) ; +#2630 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -54.09999999999999432, -53.84999999999999432 ) ) ; +#2631 = FACE_OUTER_BOUND ( 'NONE', #553, .T. ) ; +#2632 = VERTEX_POINT ( 'NONE', #2842 ) ; +#2633 = ORIENTED_EDGE ( 'NONE', *, *, #478, .F. ) ; +#2634 = DIRECTION ( 'NONE', ( -0.4999999999999995004, -0.8660254037844390407, 0.0000000000000000000 ) ) ; +#2635 = EDGE_CURVE ( 'NONE', #2063, #1919, #2145, .T. ) ; +#2636 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 56.03884078076434605, -49.99999999999999289 ) ) ; +#2637 = FACE_OUTER_BOUND ( 'NONE', #2697, .T. ) ; +#2638 = LINE ( 'NONE', #3099, #2303 ) ; +#2639 = EDGE_CURVE ( 'NONE', #832, #3046, #2184, .T. ) ; +#2640 = DIRECTION ( 'NONE', ( -0.8660254037844390407, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#2641 = VECTOR ( 'NONE', #162, 1000.000000000000000 ) ; +#2642 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -47.49999999999998579 ) ) ; +#2643 = VECTOR ( 'NONE', #101, 1000.000000000000000 ) ; +#2644 = AXIS2_PLACEMENT_3D ( 'NONE', #2335, #3067, #2579 ) ; +#2645 = EDGE_CURVE ( 'NONE', #3166, #901, #2370, .T. ) ; +#2646 = VECTOR ( 'NONE', #3027, 1000.000000000000000 ) ; +#2647 = CARTESIAN_POINT ( 'NONE', ( 12.68765000000000143, 36.23489379904926011, -49.99999999999999289 ) ) ; +#2648 = EDGE_CURVE ( 'NONE', #913, #201, #207, .T. ) ; +#2649 = ORIENTED_EDGE ( 'NONE', *, *, #232, .T. ) ; +#2650 = CARTESIAN_POINT ( 'NONE', ( -6.812350000000002126, 36.23489379904926011, -49.99999999999999289 ) ) ; +#2651 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2652 = VECTOR ( 'NONE', #1338, 1000.000000000000000 ) ; +#2653 = ORIENTED_EDGE ( 'NONE', *, *, #49, .T. ) ; +#2654 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#2655 = ADVANCED_FACE ( 'NONE', ( #837 ), #1046, .F. ) ; +#2656 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2657 = ADVANCED_FACE ( 'NONE', ( #1527, #90 ), #879, .T. ) ; +#2658 = ORIENTED_EDGE ( 'NONE', *, *, #300, .F. ) ; +#2659 = ORIENTED_EDGE ( 'NONE', *, *, #1211, .T. ) ; +#2660 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000013145, -38.62499999999998579, -50.67499999999999716 ) ) ; +#2661 = AXIS2_PLACEMENT_3D ( 'NONE', #195, #2213, #457 ) ; +#2662 = ORIENTED_EDGE ( 'NONE', *, *, #1260, .T. ) ; +#2663 = PLANE ( 'NONE', #3212 ) ; +#2664 = ORIENTED_EDGE ( 'NONE', *, *, #1582, .T. ) ; +#2665 = ORIENTED_EDGE ( 'NONE', *, *, #2266, .T. ) ; +#2666 = EDGE_CURVE ( 'NONE', #2425, #1459, #2108, .T. ) ; +#2667 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2668 = LINE ( 'NONE', #351, #1983 ) ; +#2669 = VERTEX_POINT ( 'NONE', #1143 ) ; +#2670 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -36.99999999999999289, -50.67499999999999716 ) ) ; +#2671 = FACE_OUTER_BOUND ( 'NONE', #1538, .T. ) ; +#2672 = ADVANCED_FACE ( 'NONE', ( #3114 ), #2146, .T. ) ; +#2673 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2674 = CIRCLE ( 'NONE', #2530, 2.999999999999999112 ) ; +#2675 = LINE ( 'NONE', #2381, #2724 ) ; +#2676 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2677 = AXIS2_PLACEMENT_3D ( 'NONE', #48, #1555, #807 ) ; +#2678 = FACE_BOUND ( 'NONE', #1121, .T. ) ; +#2679 = ORIENTED_EDGE ( 'NONE', *, *, #1548, .T. ) ; +#2680 = ORIENTED_EDGE ( 'NONE', *, *, #462, .F. ) ; +#2681 = DIRECTION ( 'NONE', ( 3.543264972207944962E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#2682 = DIRECTION ( 'NONE', ( 0.4999999999999981681, 0.8660254037844397068, 0.0000000000000000000 ) ) ; +#2683 = ORIENTED_EDGE ( 'NONE', *, *, #1542, .F. ) ; +#2684 = AXIS2_PLACEMENT_3D ( 'NONE', #368, #2134, #3118 ) ; +#2685 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999992895, 62.82305285390393834, -49.99999999999999289 ) ) ; +#2686 = EDGE_LOOP ( 'NONE', ( #2390, #1145 ) ) ; +#2687 = EDGE_CURVE ( 'NONE', #80, #2793, #2529, .T. ) ; +#2688 = ORIENTED_EDGE ( 'NONE', *, *, #548, .T. ) ; +#2689 = VECTOR ( 'NONE', #2396, 1000.000000000000000 ) ; +#2690 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2691 = EDGE_CURVE ( 'NONE', #611, #2509, #1446, .T. ) ; +#2692 = FACE_BOUND ( 'NONE', #363, .T. ) ; +#2693 = ORIENTED_EDGE ( 'NONE', *, *, #1642, .F. ) ; +#2694 = PLANE ( 'NONE', #656 ) ; +#2695 = CARTESIAN_POINT ( 'NONE', ( -18.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2696 = ADVANCED_FACE ( 'NONE', ( #1722 ), #1654, .F. ) ; +#2697 = EDGE_LOOP ( 'NONE', ( #2399, #2541, #875, #2085 ) ) ; +#2698 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#2699 = ORIENTED_EDGE ( 'NONE', *, *, #179, .T. ) ; +#2700 = ADVANCED_FACE ( 'NONE', ( #2671 ), #2795, .F. ) ; +#2701 = ORIENTED_EDGE ( 'NONE', *, *, #2841, .F. ) ; +#2702 = ORIENTED_EDGE ( 'NONE', *, *, #2810, .F. ) ; +#2703 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2704 = DIRECTION ( 'NONE', ( -2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2705 = AXIS2_PLACEMENT_3D ( 'NONE', #1431, #371, #1147 ) ; +#2706 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2707 = EDGE_CURVE ( 'NONE', #1347, #2169, #922, .T. ) ; +#2708 = ORIENTED_EDGE ( 'NONE', *, *, #851, .T. ) ; +#2709 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -39.93749999999997158, -47.49999999999997868 ) ) ; +#2710 = EDGE_CURVE ( 'NONE', #481, #103, #1294, .T. ) ; +#2711 = VECTOR ( 'NONE', #2217, 1000.000000000000114 ) ; +#2712 = CARTESIAN_POINT ( 'NONE', ( -6.812349999999994132, 61.12699983561903849, -47.49999999999999289 ) ) ; +#2713 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -34.06249999999997158, -47.49999999999999289 ) ) ; +#2714 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#2715 = CIRCLE ( 'NONE', #2300, 1.750000000000001554 ) ; +#2716 = LINE ( 'NONE', #1224, #1848 ) ; +#2717 = VERTEX_POINT ( 'NONE', #919 ) ; +#2718 = VECTOR ( 'NONE', #2690, 1000.000000000000000 ) ; +#2719 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -36.99999999999999289, -50.67499999999999716 ) ) ; +#2720 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -49.04999999999999716 ) ) ; +#2721 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -53.84999999999999432 ) ) ; +#2722 = LINE ( 'NONE', #1916, #716 ) ; +#2723 = ADVANCED_FACE ( 'NONE', ( #251 ), #159, .F. ) ; +#2724 = VECTOR ( 'NONE', #113, 1000.000000000000000 ) ; +#2725 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #1395, 'design' ) ; +#2726 = EDGE_LOOP ( 'NONE', ( #625, #2791, #777, #386, #1718, #2061 ) ) ; +#2727 = PLANE ( 'NONE', #592 ) ; +#2728 = ORIENTED_EDGE ( 'NONE', *, *, #610, .F. ) ; +#2729 = ORIENTED_EDGE ( 'NONE', *, *, #2538, .F. ) ; +#2730 = AXIS2_PLACEMENT_3D ( 'NONE', #1724, #471, #1938 ) ; +#2731 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999965, 36.23489379904924590, -49.99999999999999289 ) ) ; +#2732 = LINE ( 'NONE', #1051, #1461 ) ; +#2733 = LINE ( 'NONE', #2550, #862 ) ; +#2734 = ORIENTED_EDGE ( 'NONE', *, *, #2342, .T. ) ; +#2735 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -53.85000000000000142 ) ) ; +#2736 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#2737 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 37.93094681733414575, 22.49999999999997868 ) ) ; +#2738 = FACE_OUTER_BOUND ( 'NONE', #3141, .T. ) ; +#2739 = FACE_OUTER_BOUND ( 'NONE', #2045, .T. ) ; +#2740 = AXIS2_PLACEMENT_3D ( 'NONE', #618, #3127, #1408 ) ; +#2741 = EDGE_CURVE ( 'NONE', #818, #2849, #16, .T. ) ; +#2742 = ORIENTED_EDGE ( 'NONE', *, *, #2318, .T. ) ; +#2743 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#2744 = ORIENTED_EDGE ( 'NONE', *, *, #87, .F. ) ; +#2745 = ORIENTED_EDGE ( 'NONE', *, *, #960, .F. ) ; +#2746 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#2747 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 57.73489379904926011, -49.99999999999999289 ) ) ; +#2748 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2749 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2750 = EDGE_LOOP ( 'NONE', ( #2288, #2702, #1151, #1039 ) ) ; +#2751 = ORIENTED_EDGE ( 'NONE', *, *, #697, .T. ) ; +#2752 = AXIS2_PLACEMENT_3D ( 'NONE', #2281, #3029, #306 ) ; +#2753 = ORIENTED_EDGE ( 'NONE', *, *, #979, .T. ) ; +#2754 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -4.956352788505163391E-17, -1.000000000000000000 ) ) ; +#2755 = CLOSED_SHELL ( 'NONE', ( #1351, #2542, #802, #2610, #892, #2971, #1207, #1957, #2424, #2575, #1629, #209, #435, #2913, #2700, #1468, #660, #1995, #1895, #687, #2476, #2212, #1450, #181, #2484, #2422, #3019, #130, #2372, #7, #3204, #46, #115, #189, #806, #1989, #645, #1982, #437, #659, #2083, #2979, #1122, #3071, #239, #3139, #2468, #2173, #1918, #223, #2392, #2233, #573, #1238, #537, #1176, #415, #2155, #2442, #2572, #2386, #1252, #881, #1796, #2839, #1723, #2912, #377, #2052, #2119, #2455, #2723, #402, #1044, #1765, #1871, #594, #1492, #279, #2696, #151, #3110, #2135, #2657, #2845, #726, #2655, #941, #1173, #971, #1388, #754, #2879, #376, #33, #1486, #1742, #1954, #516, #939, #967, #2897, #2672 ) ) ; +#2756 = AXIS2_PLACEMENT_3D ( 'NONE', #2177, #1734, #2011 ) ; +#2757 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -54.09999999999999432, -47.49999999999998579 ) ) ; +#2758 = LINE ( 'NONE', #2022, #3111 ) ; +#2759 = VECTOR ( 'NONE', #1528, 1000.000000000000000 ) ; +#2760 = VECTOR ( 'NONE', #1611, 1000.000000000000000 ) ; +#2761 = EDGE_CURVE ( 'NONE', #732, #2772, #2835, .T. ) ; +#2762 = FACE_OUTER_BOUND ( 'NONE', #753, .T. ) ; +#2763 = FACE_BOUND ( 'NONE', #723, .T. ) ; +#2764 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2765 = VECTOR ( 'NONE', #914, 1000.000000000000000 ) ; +#2766 = EDGE_LOOP ( 'NONE', ( #691, #2588 ) ) ; +#2767 = DIRECTION ( 'NONE', ( -1.000000000000000000, -4.270088556250602685E-15, 0.0000000000000000000 ) ) ; +#2768 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2769 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2770 = VERTEX_POINT ( 'NONE', #664 ) ; +#2771 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -34.06249999999997158, -53.84999999999999432 ) ) ; +#2772 = VERTEX_POINT ( 'NONE', #1460 ) ; +#2773 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2774 = FACE_BOUND ( 'NONE', #2910, .T. ) ; +#2775 = PLANE ( 'NONE', #2106 ) ; +#2776 = EDGE_LOOP ( 'NONE', ( #1082, #390 ) ) ; +#2777 = EDGE_CURVE ( 'NONE', #42, #2290, #2598, .T. ) ; +#2778 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#2779 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000002126, 39.62699983561905270, -49.99999999999999289 ) ) ; +#2780 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, 15.50000000000001243, -50.49999999999999289 ) ) ; +#2781 = ORIENTED_EDGE ( 'NONE', *, *, #1782, .T. ) ; +#2782 = CARTESIAN_POINT ( 'NONE', ( -12.50000000000000355, 15.50000000000001243, -47.49999999999999289 ) ) ; +#2783 = EDGE_CURVE ( 'NONE', #1350, #818, #1407, .T. ) ; +#2784 = ORIENTED_EDGE ( 'NONE', *, *, #1485, .F. ) ; +#2785 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -47.49999999999999289 ) ) ; +#2786 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2787 = VERTEX_POINT ( 'NONE', #3169 ) ; +#2789 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .T. ) ; +#2788 = CARTESIAN_POINT ( 'NONE', ( 6.812350000000003902, 36.23489379904924590, -49.99999999999999289 ) ) ; +#2790 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2791 = ORIENTED_EDGE ( 'NONE', *, *, #2224, .T. ) ; +#2792 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.206764157201257538E-15, -6.698886763086040130E-32 ) ) ; +#2793 = VERTEX_POINT ( 'NONE', #650 ) ; +#2794 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2795 = CYLINDRICAL_SURFACE ( 'NONE', #520, 1.750000000000001554 ) ; +#2796 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2797 = VERTEX_POINT ( 'NONE', #926 ) ; +#2798 = AXIS2_PLACEMENT_3D ( 'NONE', #1809, #2790, #1050 ) ; +#2799 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 61.18094681733413864, -53.84999999999999432 ) ) ; +#2800 = EDGE_CURVE ( 'NONE', #2434, #199, #603, .T. ) ; +#2801 = CIRCLE ( 'NONE', #1760, 1.749999999999999778 ) ; +#2802 = FACE_OUTER_BOUND ( 'NONE', #1969, .T. ) ; +#2803 = LINE ( 'NONE', #1615, #1179 ) ; +#2804 = EDGE_CURVE ( 'NONE', #1971, #1907, #2298, .T. ) ; +#2805 = CARTESIAN_POINT ( 'NONE', ( -4.000000000000004441, 4.551642501394056340E-16, -47.49999999999999289 ) ) ; +#2806 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#2807 = EDGE_LOOP ( 'NONE', ( #2789, #263, #731, #2866 ) ) ; +#2808 = DIRECTION ( 'NONE', ( -3.543264972207944962E-15, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#2809 = ORIENTED_EDGE ( 'NONE', *, *, #2182, .T. ) ; +#2810 = EDGE_CURVE ( 'NONE', #1523, #1020, #2066, .T. ) ; +#2811 = FACE_OUTER_BOUND ( 'NONE', #243, .T. ) ; +#2812 = ORIENTED_EDGE ( 'NONE', *, *, #438, .F. ) ; +#2813 = AXIS2_PLACEMENT_3D ( 'NONE', #2906, #404, #118 ) ; +#2814 = CARTESIAN_POINT ( 'NONE', ( -17.25000000000000000, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2815 = EDGE_CURVE ( 'NONE', #240, #125, #1808, .T. ) ; +#2816 = LINE ( 'NONE', #1597, #1060 ) ; +#2817 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2818 = LINE ( 'NONE', #2878, #821 ) ; +#2819 = ORIENTED_EDGE ( 'NONE', *, *, #1912, .T. ) ; +#2820 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#2821 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2822 = EDGE_CURVE ( 'NONE', #71, #267, #1640, .T. ) ; +#2823 = ORIENTED_EDGE ( 'NONE', *, *, #501, .F. ) ; +#2824 = LINE ( 'NONE', #2388, #1379 ) ; +#2825 = EDGE_LOOP ( 'NONE', ( #1196, #2339, #2819, #1309, #2121, #2699 ) ) ; +#2826 = CARTESIAN_POINT ( 'NONE', ( -12.68765000000000143, 39.62699983561905270, -49.99999999999999289 ) ) ; +#2827 = FACE_BOUND ( 'NONE', #1028, .T. ) ; +#2828 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2829 = ORIENTED_EDGE ( 'NONE', *, *, #2512, .T. ) ; +#2830 = EDGE_LOOP ( 'NONE', ( #3066, #3140, #989, #2385 ) ) ; +#2831 = CARTESIAN_POINT ( 'NONE', ( -12.50000000000000355, -15.49999999999997868, -47.49999999999999289 ) ) ; +#2832 = CIRCLE ( 'NONE', #2893, 1.625000000000001332 ) ; +#2833 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999993894, 0.0000000000000000000 ) ) ; +#2834 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2861 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2817, #1590, #3074 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2835 = LINE ( 'NONE', #2660, #129 ) ; +#2836 = CYLINDRICAL_SURFACE ( 'NONE', #1349, 1.750000000000001554 ) ; +#2837 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#2838 = VECTOR ( 'NONE', #2449, 1000.000000000000000 ) ; +#2839 = ADVANCED_FACE ( 'NONE', ( #1602 ), #1212, .F. ) ; +#2840 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2841 = EDGE_CURVE ( 'NONE', #3255, #546, #2028, .T. ) ; +#2842 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -53.84999999999999432 ) ) ; +#2843 = LINE ( 'NONE', #2973, #2113 ) ; +#2844 = ORIENTED_EDGE ( 'NONE', *, *, #2284, .T. ) ; +#2845 = ADVANCED_FACE ( 'NONE', ( #1565 ), #1367, .F. ) ; +#2846 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, 68.00000000000000000, -47.50000000000000000 ) ) ; +#2847 = ORIENTED_EDGE ( 'NONE', *, *, #700, .F. ) ; +#2848 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 61.18094681733413864, -53.84999999999999432 ) ) ; +#2849 = VERTEX_POINT ( 'NONE', #1472 ) ; +#2850 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 59.43094681733413864, -53.84999999999999432 ) ) ; +#2851 = ORIENTED_EDGE ( 'NONE', *, *, #174, .F. ) ; +#2852 = VECTOR ( 'NONE', #2152, 1000.000000000000000 ) ; +#2853 = LINE ( 'NONE', #2344, #1107 ) ; +#2854 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 41.32305285390394545, -47.49999999999999289 ) ) ; +#2855 = ORIENTED_EDGE ( 'NONE', *, *, #584, .F. ) ; +#2856 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000007105, 41.32305285390394545, -49.99999999999999289 ) ) ; +#2857 = CARTESIAN_POINT ( 'NONE', ( 19.49999999999998934, 6.938893903907228378E-15, -49.99999999999999289 ) ) ; +#2858 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2859 = CYLINDRICAL_SURFACE ( 'NONE', #2901, 1.625000000000001332 ) ; +#2860 = ORIENTED_EDGE ( 'NONE', *, *, #2164, .T. ) ; +#2861 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #2817, 'distance_accuracy_value', 'NONE'); +#2862 = AXIS2_PLACEMENT_3D ( 'NONE', #2719, #1716, #2249 ) ; +#2863 = ORIENTED_EDGE ( 'NONE', *, *, #2018, .T. ) ; +#2864 = SURFACE_STYLE_USAGE ( .BOTH. , #383 ) ; +#2865 = EDGE_CURVE ( 'NONE', #2063, #2545, #959, .T. ) ; +#2866 = ORIENTED_EDGE ( 'NONE', *, *, #584, .T. ) ; +#2867 = DIRECTION ( 'NONE', ( -7.671001984939501909E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2868 = EDGE_CURVE ( 'NONE', #2419, #1540, #409, .T. ) ; +#2869 = EDGE_LOOP ( 'NONE', ( #2943, #319, #1165, #583 ) ) ; +#2870 = ORIENTED_EDGE ( 'NONE', *, *, #3076, .T. ) ; +#2871 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2872 = CARTESIAN_POINT ( 'NONE', ( 12.68765000000000143, 36.23489379904926011, -47.50000000000000000 ) ) ; +#2873 = ORIENTED_EDGE ( 'NONE', *, *, #1804, .F. ) ; +#2874 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #873 ) ; +#2875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#2876 = VECTOR ( 'NONE', #1119, 1000.000000000000000 ) ; +#2877 = CARTESIAN_POINT ( 'NONE', ( -2.786961821318037377E-15, -3.469446951953578444E-17, -51.34999999999999432 ) ) ; +#2878 = CARTESIAN_POINT ( 'NONE', ( -12.68764999999999965, 36.23489379904924590, -47.49999999999999289 ) ) ; +#2879 = ADVANCED_FACE ( 'NONE', ( #2995 ), #1233, .F. ) ; +#2880 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000000000, -56.99999999999997868, -47.49999999999999289 ) ) ; +#2881 = CYLINDRICAL_SURFACE ( 'NONE', #2798, 1.625000000000001332 ) ; +#2882 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2883 = ORIENTED_EDGE ( 'NONE', *, *, #156, .F. ) ; +#2884 = CIRCLE ( 'NONE', #491, 1.625000000000001332 ) ; +#2885 = AXIS2_PLACEMENT_3D ( 'NONE', #571, #2282, #2345 ) ; +#2886 = CYLINDRICAL_SURFACE ( 'NONE', #2602, 1.750000000000001554 ) ; +#2887 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2888 = EDGE_CURVE ( 'NONE', #2429, #1126, #1216, .T. ) ; +#2889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#2890 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.206764157201257538E-15, -6.698886763086040130E-32 ) ) ; +#2891 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2892 = ORIENTED_EDGE ( 'NONE', *, *, #1313, .T. ) ; +#2893 = AXIS2_PLACEMENT_3D ( 'NONE', #1806, #1019, #1561 ) ; +#2894 = ORIENTED_EDGE ( 'NONE', *, *, #3175, .F. ) ; +#2895 = EDGE_LOOP ( 'NONE', ( #940, #828 ) ) ; +#2896 = VECTOR ( 'NONE', #1315, 1000.000000000000000 ) ; +#2897 = ADVANCED_FACE ( 'NONE', ( #1874 ), #1679, .F. ) ; +#2898 = ORIENTED_EDGE ( 'NONE', *, *, #407, .F. ) ; +#2899 = CYLINDRICAL_SURFACE ( 'NONE', #2644, 2.999999999999999112 ) ; +#2900 = ORIENTED_EDGE ( 'NONE', *, *, #1698, .F. ) ; +#2901 = AXIS2_PLACEMENT_3D ( 'NONE', #1401, #1125, #1941 ) ; +#2902 = CARTESIAN_POINT ( 'NONE', ( -15.50000000000000355, -15.49999999999997868, -47.49999999999999289 ) ) ; +#2903 = LINE ( 'NONE', #375, #1197 ) ; +#2904 = VECTOR ( 'NONE', #1168, 1000.000000000000000 ) ; +#2905 = ORIENTED_EDGE ( 'NONE', *, *, #2687, .F. ) ; +#2906 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -53.85000000000000142 ) ) ; +#2907 = EDGE_CURVE ( 'NONE', #1481, #267, #291, .T. ) ; +#2908 = ORIENTED_EDGE ( 'NONE', *, *, #2307, .T. ) ; +#2909 = ORIENTED_EDGE ( 'NONE', *, *, #232, .F. ) ; +#2910 = EDGE_LOOP ( 'NONE', ( #3191, #1390, #2829, #2665 ) ) ; +#2911 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -52.29999999999999716 ) ) ; +#2912 = ADVANCED_FACE ( 'NONE', ( #453 ), #973, .F. ) ; +#2913 = ADVANCED_FACE ( 'NONE', ( #1005 ), #2334, .F. ) ; +#2914 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2915 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.206764157201257538E-15, -6.698886763086040130E-32 ) ) ; +#2916 = VECTOR ( 'NONE', #2109, 1000.000000000000000 ) ; +#2917 = VECTOR ( 'NONE', #2168, 1000.000000000000000 ) ; +#2918 = FACE_BOUND ( 'NONE', #398, .T. ) ; +#2919 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -50.34999999999998721, -49.04999999999999716 ) ) ; +#2920 = CARTESIAN_POINT ( 'NONE', ( 16.93750000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#2921 = LINE ( 'NONE', #1182, #2264 ) ; +#2922 = VECTOR ( 'NONE', #840, 1000.000000000000000 ) ; +#2923 = AXIS2_PLACEMENT_3D ( 'NONE', #855, #2634, #619 ) ; +#2924 = ORIENTED_EDGE ( 'NONE', *, *, #1016, .F. ) ; +#2925 = ORIENTED_EDGE ( 'NONE', *, *, #1270, .T. ) ; +#2926 = EDGE_CURVE ( 'NONE', #3144, #1799, #2222, .T. ) ; +#2927 = VERTEX_POINT ( 'NONE', #702 ) ; +#2928 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2929 = ORIENTED_EDGE ( 'NONE', *, *, #1003, .T. ) ; +#2930 = DIRECTION ( 'NONE', ( 5.114001323292980565E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2932 = ORIENTED_EDGE ( 'NONE', *, *, #1948, .F. ) ; +#2933 = FACE_BOUND ( 'NONE', #119, .T. ) ; +#2934 = ORIENTED_EDGE ( 'NONE', *, *, #2224, .F. ) ; +#2935 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2936 = PLANE ( 'NONE', #695 ) ; +#2937 = EDGE_LOOP ( 'NONE', ( #2481, #1385, #1394, #1515 ) ) ; +#2938 = PLANE ( 'NONE', #1310 ) ; +#2939 = EDGE_CURVE ( 'NONE', #1076, #2480, #884, .T. ) ; +#2940 = VERTEX_POINT ( 'NONE', #2453 ) ; +#2941 = ORIENTED_EDGE ( 'NONE', *, *, #1564, .T. ) ; +#2942 = EDGE_CURVE ( 'NONE', #848, #2419, #2181, .T. ) ; +#2943 = ORIENTED_EDGE ( 'NONE', *, *, #307, .F. ) ; +#2944 = ORIENTED_EDGE ( 'NONE', *, *, #1331, .T. ) ; +#2945 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#2946 = FACE_OUTER_BOUND ( 'NONE', #1344, .T. ) ; +#2947 = VECTOR ( 'NONE', #2331, 1000.000000000000000 ) ; +#2948 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2950 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2949 = VECTOR ( 'NONE', #1687, 1000.000000000000000 ) ; +#2951 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 41.32305285390394545, -49.99999999999999289 ) ) ; +#2952 = LINE ( 'NONE', #1678, #2373 ) ; +#2953 = VERTEX_POINT ( 'NONE', #1243 ) ; +#2954 = LINE ( 'NONE', #1670, #1990 ) ; +#2955 = VECTOR ( 'NONE', #2858, 1000.000000000000000 ) ; +#2956 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2957 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2958 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2959 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2961 = VECTOR ( 'NONE', #3, 1000.000000000000000 ) ; +#2962 = VERTEX_POINT ( 'NONE', #1263 ) ; +#2963 = AXIS2_PLACEMENT_3D ( 'NONE', #397, #2398, #1217 ) ; +#2964 = CARTESIAN_POINT ( 'NONE', ( -14.34999999999999964, -34.06249999999997158, -47.49999999999997158 ) ) ; +#2965 = ORIENTED_EDGE ( 'NONE', *, *, #1709, .T. ) ; +#2966 = EDGE_CURVE ( 'NONE', #240, #597, #1770, .T. ) ; +#2967 = VECTOR ( 'NONE', #2568, 1000.000000000000000 ) ; +#2968 = ORIENTED_EDGE ( 'NONE', *, *, #2822, .F. ) ; +#2969 = LINE ( 'NONE', #68, #2896 ) ; +#2970 = EDGE_CURVE ( 'NONE', #80, #158, #12, .T. ) ; +#2971 = ADVANCED_FACE ( 'NONE', ( #489 ), #2253, .F. ) ; +#2972 = ORIENTED_EDGE ( 'NONE', *, *, #2804, .T. ) ; +#2973 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -34.06249999999997158, -47.49999999999997868 ) ) ; +#2974 = DIRECTION ( 'NONE', ( -1.000000000000000000, -3.543264972207944962E-15, 0.0000000000000000000 ) ) ; +#2975 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2976 = VECTOR ( 'NONE', #274, 1000.000000000000000 ) ; +#2977 = EDGE_LOOP ( 'NONE', ( #357, #1269, #1061, #3090 ) ) ; +#2978 = ORIENTED_EDGE ( 'NONE', *, *, #637, .F. ) ; +#2979 = ADVANCED_FACE ( 'NONE', ( #1042 ), #2775, .F. ) ; +#2980 = EDGE_CURVE ( 'NONE', #39, #2251, #248, .T. ) ; +#2981 = PLANE ( 'NONE', #1677 ) ; +#2982 = ORIENTED_EDGE ( 'NONE', *, *, #2591, .F. ) ; +#2983 = VERTEX_POINT ( 'NONE', #255 ) ; +#2984 = CARTESIAN_POINT ( 'NONE', ( 20.00000000000012790, -36.99999999999998579, -50.67499999999999716 ) ) ; +#2985 = AXIS2_PLACEMENT_3D ( 'NONE', #41, #52, #568 ) ; +#2986 = ORIENTED_EDGE ( 'NONE', *, *, #1438, .F. ) ; +#2987 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -50.67499999999999716 ) ) ; +#2988 = CARTESIAN_POINT ( 'NONE', ( 12.50000000000001243, -15.49999999999997868, -50.49999999999999289 ) ) ; +#2989 = EDGE_CURVE ( 'NONE', #166, #1897, #3028, .T. ) ; +#2990 = VERTEX_POINT ( 'NONE', #2291 ) ; +#2991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2992 = EDGE_CURVE ( 'NONE', #1109, #1523, #2758, .T. ) ; +#2993 = VECTOR ( 'NONE', #3049, 1000.000000000000000 ) ; +#2994 = VECTOR ( 'NONE', #1312, 1000.000000000000000 ) ; +#2995 = FACE_OUTER_BOUND ( 'NONE', #2977, .T. ) ; +#2996 = ORIENTED_EDGE ( 'NONE', *, *, #3058, .F. ) ; +#2997 = VECTOR ( 'NONE', #229, 1000.000000000000000 ) ; +#2998 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2999 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000005329, 59.43094681733414575, 22.49999999999997868 ) ) ; +#3000 = VECTOR ( 'NONE', #1544, 1000.000000000000000 ) ; +#3001 = VECTOR ( 'NONE', #2613, 1000.000000000000000 ) ; +#3002 = VECTOR ( 'NONE', #890, 1000.000000000000000 ) ; +#3003 = EDGE_LOOP ( 'NONE', ( #1797, #2395 ) ) ; +#3004 = AXIS2_PLACEMENT_3D ( 'NONE', #2650, #627, #2391 ) ; +#3005 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999787, 57.73489379904926011, -49.99999999999999289 ) ) ; +#3006 = EDGE_LOOP ( 'NONE', ( #1340, #3069 ) ) ; +#3007 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3008 = EDGE_CURVE ( 'NONE', #3245, #1867, #1939, .T. ) ; +#3009 = CARTESIAN_POINT ( 'NONE', ( 17.25000000000000711, 15.50000000000001243, -50.49999999999999289 ) ) ; +#3010 = EDGE_LOOP ( 'NONE', ( #2662, #1275, #701, #445 ) ) ; +#3011 = ORIENTED_EDGE ( 'NONE', *, *, #2980, .F. ) ; +#3012 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 59.43094681733414575, 22.49999999999997868 ) ) ; +#3013 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -51.34999999999998010, -47.49999999999998579 ) ) ; +#3014 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -34.06249999999997158, -47.49999999999997868 ) ) ; +#3015 = ORIENTED_EDGE ( 'NONE', *, *, #2437, .T. ) ; +#3016 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3017 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -44.75380592228741961, -50.67499999999999716 ) ) ; +#3018 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3019 = ADVANCED_FACE ( 'NONE', ( #1599 ), #2330, .F. ) ; +#3020 = EDGE_LOOP ( 'NONE', ( #1936, #709 ) ) ; +#3021 = AXIS2_PLACEMENT_3D ( 'NONE', #2532, #1290, #314 ) ; +#3022 = VERTEX_POINT ( 'NONE', #1298 ) ; +#3023 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3024 = VERTEX_POINT ( 'NONE', #1550 ) ; +#3025 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3026 = AXIS2_PLACEMENT_3D ( 'NONE', #1800, #1301, #2510 ) ; +#3027 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -5.551115123125782702E-17, -1.000000000000000000 ) ) ; +#3029 = DIRECTION ( 'NONE', ( 3.543264972207944962E-15, -1.000000000000000000, 5.551115123125782702E-17 ) ) ; +#3028 = LINE ( 'NONE', #1789, #2367 ) ; +#3030 = EDGE_CURVE ( 'NONE', #2251, #2717, #3073, .T. ) ; +#3031 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3032 = EDGE_CURVE ( 'NONE', #1192, #732, #2832, .T. ) ; +#3033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3034 = LINE ( 'NONE', #185, #493 ) ; +#3035 = VECTOR ( 'NONE', #2597, 1000.000000000000000 ) ; +#3036 = LINE ( 'NONE', #1296, #1728 ) ; +#3037 = VECTOR ( 'NONE', #2165, 1000.000000000000000 ) ; +#3038 = ORIENTED_EDGE ( 'NONE', *, *, #2566, .F. ) ; +#3039 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -36.99999999999999289, -50.67499999999999716 ) ) ; +#3040 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 37.93094681733413864, -53.84999999999999432 ) ) ; +#3041 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#3042 = EDGE_LOOP ( 'NONE', ( #911, #505, #32, #935 ) ) ; +#3043 = ORIENTED_EDGE ( 'NONE', *, *, #615, .F. ) ; +#3044 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3045 = FACE_OUTER_BOUND ( 'NONE', #1521, .T. ) ; +#3046 = VERTEX_POINT ( 'NONE', #44 ) ; +#3047 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3048 = AXIS2_PLACEMENT_3D ( 'NONE', #2737, #467, #3018 ) ; +#3049 = DIRECTION ( 'NONE', ( -0.8660254037844397068, 0.4999999999999981681, 0.0000000000000000000 ) ) ; +#3050 = ORIENTED_EDGE ( 'NONE', *, *, #2865, .T. ) ; +#3051 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999998224, 61.18094681733414575, 22.49999999999997868 ) ) ; +#3052 = VECTOR ( 'NONE', #2778, 1000.000000000000000 ) ; +#3053 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#3054 = CARTESIAN_POINT ( 'NONE', ( -17.25000000000000000, -15.49999999999997868, -53.85000000000000142 ) ) ; +#3055 = ORIENTED_EDGE ( 'NONE', *, *, #872, .T. ) ; +#3056 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3057 = ORIENTED_EDGE ( 'NONE', *, *, #2841, .T. ) ; +#3058 = EDGE_CURVE ( 'NONE', #547, #106, #364, .T. ) ; +#3059 = EDGE_LOOP ( 'NONE', ( #2968, #2823, #1841, #361 ) ) ; +#3060 = LINE ( 'NONE', #2319, #496 ) ; +#3061 = EDGE_LOOP ( 'NONE', ( #1382, #699, #2934, #963 ) ) ; +#3062 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#3063 = LINE ( 'NONE', #2607, #391 ) ; +#3064 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -5.551115123125782702E-17 ) ) ; +#3065 = EDGE_LOOP ( 'NONE', ( #1930, #2364 ) ) ; +#3066 = ORIENTED_EDGE ( 'NONE', *, *, #3200, .T. ) ; +#3067 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3068 = ORIENTED_EDGE ( 'NONE', *, *, #343, .T. ) ; +#3069 = ORIENTED_EDGE ( 'NONE', *, *, #1485, .T. ) ; +#3070 = AXIS2_PLACEMENT_3D ( 'NONE', #2267, #13, #3023 ) ; +#3071 = ADVANCED_FACE ( 'NONE', ( #326 ), #1819, .T. ) ; +#3072 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3073 = LINE ( 'NONE', #3005, #1363 ) ; +#3074 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#3075 = AXIS2_PLACEMENT_3D ( 'NONE', #1684, #2889, #127 ) ; +#3076 = EDGE_CURVE ( 'NONE', #1861, #2621, #2410, .T. ) ; +#3077 = CARTESIAN_POINT ( 'NONE', ( 6.812349999999998573, 61.12699983561904560, -49.99999999999999289 ) ) ; +#3078 = LINE ( 'NONE', #236, #800 ) ; +#3079 = CARTESIAN_POINT ( 'NONE', ( 18.50000000000001066, -15.49999999999997868, -47.49999999999999289 ) ) ; +#3080 = ORIENTED_EDGE ( 'NONE', *, *, #2761, .T. ) ; +#3081 = LINE ( 'NONE', #2271, #1881 ) ; +#3082 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -56.99999999999998579, -47.49999999999999289 ) ) ; +#3083 = LINE ( 'NONE', #2199, #1055 ) ; +#3084 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 39.68094681733414575, 22.49999999999997868 ) ) ; +#3085 = CYLINDRICAL_SURFACE ( 'NONE', #1, 1.625000000000001332 ) ; +#3086 = CARTESIAN_POINT ( 'NONE', ( 13.35000000000004405, -35.37499999999999289, -50.67499999999999716 ) ) ; +#3087 = ORIENTED_EDGE ( 'NONE', *, *, #2989, .F. ) ; +#3088 = DIRECTION ( 'NONE', ( -2.135044278125299371E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3089 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#3090 = ORIENTED_EDGE ( 'NONE', *, *, #804, .T. ) ; +#3091 = EDGE_CURVE ( 'NONE', #1562, #871, #2447, .T. ) ; +#3092 = ORIENTED_EDGE ( 'NONE', *, *, #1160, .T. ) ; +#3093 = AXIS2_PLACEMENT_3D ( 'NONE', #488, #1514, #2504 ) ; +#3094 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -4.956352788505162775E-17, -1.000000000000000000 ) ) ; +#3095 = EDGE_CURVE ( 'NONE', #1523, #2063, #3147, .T. ) ; +#3096 = VECTOR ( 'NONE', #503, 1000.000000000000000 ) ; +#3097 = ORIENTED_EDGE ( 'NONE', *, *, #307, .T. ) ; +#3098 = CARTESIAN_POINT ( 'NONE', ( -20.00000000000012434, -35.37499999999998579, -50.67499999999999716 ) ) ; +#3099 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 34.53884078076435316, -49.99999999999999289 ) ) ; +#3100 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3101 = EDGE_CURVE ( 'NONE', #1458, #110, #2596, .T. ) ; +#3102 = ORIENTED_EDGE ( 'NONE', *, *, #2309, .T. ) ; +#3103 = DIRECTION ( 'NONE', ( -0.8660254037844390407, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#3104 = AXIS2_PLACEMENT_3D ( 'NONE', #1570, #2573, #2087 ) ; +#3105 = ORIENTED_EDGE ( 'NONE', *, *, #1027, .T. ) ; +#3106 = ORIENTED_EDGE ( 'NONE', *, *, #955, .T. ) ; +#3107 = EDGE_LOOP ( 'NONE', ( #1899, #1420, #2898, #3043 ) ) ; +#3108 = CARTESIAN_POINT ( 'NONE', ( 12.68764999999999432, 61.12699983561904560, -47.49999999999999289 ) ) ; +#3109 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#3110 = ADVANCED_FACE ( 'NONE', ( #1805, #1674 ), #3259, .T. ) ; +#3111 = VECTOR ( 'NONE', #1308, 1000.000000000000000 ) ; +#3112 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#3113 = AXIS2_PLACEMENT_3D ( 'NONE', #714, #705, #2017 ) ; +#3114 = FACE_OUTER_BOUND ( 'NONE', #1855, .T. ) ; +#3115 = CYLINDRICAL_SURFACE ( 'NONE', #785, 1.749999999999991118 ) ; +#3116 = ORIENTED_EDGE ( 'NONE', *, *, #2635, .T. ) ; +#3117 = EDGE_CURVE ( 'NONE', #1347, #2940, #757, .T. ) ; +#3118 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3119 = FACE_OUTER_BOUND ( 'NONE', #801, .T. ) ; +#3120 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3121 = ORIENTED_EDGE ( 'NONE', *, *, #2635, .F. ) ; +#3122 = VERTEX_POINT ( 'NONE', #94 ) ; +#3123 = DIRECTION ( 'NONE', ( 5.114001323292979579E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3124 = ORIENTED_EDGE ( 'NONE', *, *, #410, .T. ) ; +#3125 = AXIS2_PLACEMENT_3D ( 'NONE', #1329, #636, #863 ) ; +#3126 = LINE ( 'NONE', #1741, #3001 ) ; +#3127 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#3128 = CARTESIAN_POINT ( 'NONE', ( 11.06250000000000000, -51.35000000000000142, -53.84999999999999432 ) ) ; +#3129 = AXIS2_PLACEMENT_3D ( 'NONE', #1191, #2451, #2676 ) ; +#3130 = ORIENTED_EDGE ( 'NONE', *, *, #2639, .F. ) ; +#3131 = AXIS2_PLACEMENT_3D ( 'NONE', #431, #674, #1410 ) ; +#3132 = VERTEX_POINT ( 'NONE', #2349 ) ; +#3133 = VECTOR ( 'NONE', #1748, 1000.000000000000000 ) ; +#3134 = EDGE_CURVE ( 'NONE', #1540, #2000, #2668, .T. ) ; +#3135 = DIRECTION ( 'NONE', ( 0.8660254037844381525, 0.5000000000000008882, 0.0000000000000000000 ) ) ; +#3136 = AXIS2_PLACEMENT_3D ( 'NONE', #2238, #1755, #492 ) ; +#3137 = ORIENTED_EDGE ( 'NONE', *, *, #384, .F. ) ; +#3138 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#3139 = ADVANCED_FACE ( 'NONE', ( #1128 ), #2556, .T. ) ; +#3140 = ORIENTED_EDGE ( 'NONE', *, *, #2777, .F. ) ; +#3141 = EDGE_LOOP ( 'NONE', ( #600, #1652, #1702, #3105 ) ) ; +#3142 = CARTESIAN_POINT ( 'NONE', ( -17.10000000000000142, -39.93749999999997158, -53.84999999999999432 ) ) ; +#3143 = EDGE_LOOP ( 'NONE', ( #751, #2558, #1081, #2216 ) ) ; +#3144 = VERTEX_POINT ( 'NONE', #1840 ) ; +#3145 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -44.75380592228741961, -52.29999999999999716 ) ) ; +#3146 = PLANE ( 'NONE', #3004 ) ; +#3147 = LINE ( 'NONE', #1319, #2993 ) ; +#3148 = EDGE_CURVE ( 'NONE', #1751, #2042, #918, .T. ) ; +#3149 = DIRECTION ( 'NONE', ( -0.8660254037844390407, -0.4999999999999991673, 0.0000000000000000000 ) ) ; +#3150 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3151 = LINE ( 'NONE', #2779, #21 ) ; +#3152 = VECTOR ( 'NONE', #3044, 1000.000000000000000 ) ; +#3153 = AXIS2_PLACEMENT_3D ( 'NONE', #3041, #1563, #2534 ) ; +#3154 = FACE_OUTER_BOUND ( 'NONE', #2393, .T. ) ; +#3155 = EDGE_LOOP ( 'NONE', ( #312, #1281, #3011, #2860 ) ) ; +#3156 = FACE_BOUND ( 'NONE', #76, .T. ) ; +#3157 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3158 = EDGE_CURVE ( 'NONE', #1978, #3176, #999, .T. ) ; +#3159 = VECTOR ( 'NONE', #2746, 1000.000000000000000 ) ; +#3160 = VERTEX_POINT ( 'NONE', #3086 ) ; +#3161 = CARTESIAN_POINT ( 'NONE', ( 14.00000000000000000, -50.34999999999998721, -50.67499999999999716 ) ) ; +#3162 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, 15.50000000000001243, -47.49999999999999289 ) ) ; +#3163 = ORIENTED_EDGE ( 'NONE', *, *, #1016, .T. ) ; +#3164 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -38.62499999999999289, -50.67499999999999716 ) ) ; +#3165 = CYLINDRICAL_SURFACE ( 'NONE', #2985, 1.625000000000001332 ) ; +#3166 = VERTEX_POINT ( 'NONE', #2805 ) ; +#3167 = CARTESIAN_POINT ( 'NONE', ( -17.25000000000000000, 15.50000000000001243, -50.49999999999999289 ) ) ; +#3168 = LINE ( 'NONE', #2029, #3096 ) ; +#3169 = CARTESIAN_POINT ( 'NONE', ( -9.749999999999996447, 62.82305285390393834, -49.99999999999999289 ) ) ; +#3170 = ORIENTED_EDGE ( 'NONE', *, *, #2815, .T. ) ; +#3171 = PLANE ( 'NONE', #1942 ) ; +#3172 = AXIS2_PLACEMENT_3D ( 'NONE', #686, #676, #2673 ) ; +#3173 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3174 = ORIENTED_EDGE ( 'NONE', *, *, #2926, .F. ) ; +#3175 = EDGE_CURVE ( 'NONE', #1423, #874, #1330, .T. ) ; +#3176 = VERTEX_POINT ( 'NONE', #82 ) ; +#3177 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3178 = CARTESIAN_POINT ( 'NONE', ( 17.25000000000000711, 15.50000000000001243, -53.85000000000000142 ) ) ; +#3179 = ORIENTED_EDGE ( 'NONE', *, *, #2627, .F. ) ; +#3180 = ORIENTED_EDGE ( 'NONE', *, *, #2262, .F. ) ; +#3181 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#3182 = FACE_OUTER_BOUND ( 'NONE', #864, .T. ) ; +#3183 = CARTESIAN_POINT ( 'NONE', ( -14.00000000000000178, -56.99999999999997868, -52.29999999999999716 ) ) ; +#3184 = CYLINDRICAL_SURFACE ( 'NONE', #2560, 1.625000000000001332 ) ; +#3185 = VECTOR ( 'NONE', #2208, 1000.000000000000000 ) ; +#3186 = AXIS2_PLACEMENT_3D ( 'NONE', #556, #2808, #1824 ) ; +#3187 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 41.32305285390394545, -49.99999999999999289 ) ) ; +#3188 = CYLINDRICAL_SURFACE ( 'NONE', #280, 1.625000000000001332 ) ; +#3189 = DIRECTION ( 'NONE', ( -1.000000000000000000, -5.114001323292979579E-16, 0.0000000000000000000 ) ) ; +#3190 = VECTOR ( 'NONE', #684, 1000.000000000000000 ) ; +#3191 = ORIENTED_EDGE ( 'NONE', *, *, #1698, .T. ) ; +#3192 = ORIENTED_EDGE ( 'NONE', *, *, #1435, .T. ) ; +#3193 = AXIS2_PLACEMENT_3D ( 'NONE', #2005, #950, #2974 ) ; +#3194 = CARTESIAN_POINT ( 'NONE', ( -17.25000000000000000, -15.49999999999997868, -53.85000000000000142 ) ) ; +#3195 = EDGE_CURVE ( 'NONE', #3176, #1978, #834, .T. ) ; +#3196 = VERTEX_POINT ( 'NONE', #341 ) ; +#3197 = ORIENTED_EDGE ( 'NONE', *, *, #2471, .T. ) ; +#3198 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #120, 'distance_accuracy_value', 'NONE'); +#3199 = CARTESIAN_POINT ( 'NONE', ( 17.25000000000000000, -15.49999999999997868, -53.85000000000000142 ) ) ; +#3200 = EDGE_CURVE ( 'NONE', #2139, #2290, #449, .T. ) ; +#3201 = ORIENTED_EDGE ( 'NONE', *, *, #1785, .T. ) ; +#3202 = VERTEX_POINT ( 'NONE', #1598 ) ; +#3203 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -53.85000000000000142 ) ) ; +#3204 = ADVANCED_FACE ( 'NONE', ( #3182 ), #168, .F. ) ; +#3205 = EDGE_LOOP ( 'NONE', ( #795, #470, #2374, #776 ) ) ; +#3206 = CARTESIAN_POINT ( 'NONE', ( -9.750000000000003553, 36.18094681733413864, -50.00000000000000000 ) ) ; +#3207 = CARTESIAN_POINT ( 'NONE', ( 17.10000000000000142, -39.93749999999997158, -53.84999999999999432 ) ) ; +#3208 = CIRCLE ( 'NONE', #299, 1.749999999999999778 ) ; +#3209 = ORIENTED_EDGE ( 'NONE', *, *, #1595, .T. ) ; +#3210 = CARTESIAN_POINT ( 'NONE', ( 14.34999999999999964, -34.06249999999997158, -53.84999999999999432 ) ) ; +#3211 = ORIENTED_EDGE ( 'NONE', *, *, #599, .T. ) ; +#3212 = AXIS2_PLACEMENT_3D ( 'NONE', #510, #3239, #1278 ) ; +#3213 = ORIENTED_EDGE ( 'NONE', *, *, #1970, .F. ) ; +#3214 = PLANE ( 'NONE', #2242 ) ; +#3215 = CARTESIAN_POINT ( 'NONE', ( 18.50000000000001066, -15.49999999999997868, -50.49999999999999289 ) ) ; +#3216 = ORIENTED_EDGE ( 'NONE', *, *, #2666, .F. ) ; +#3217 = EDGE_LOOP ( 'NONE', ( #1437, #2570, #2925, #2076 ) ) ; +#3218 = EDGE_CURVE ( 'NONE', #1126, #1812, #2103, .T. ) ; +#3219 = ORIENTED_EDGE ( 'NONE', *, *, #2970, .T. ) ; +#3220 = ORIENTED_EDGE ( 'NONE', *, *, #1649, .F. ) ; +#3221 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3222 = AXIS2_PLACEMENT_3D ( 'NONE', #1008, #1274, #2269 ) ; +#3223 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.206764157201257735E-15, 6.698886763086041224E-32 ) ) ; +#3224 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.671001984939500922E-16, 0.0000000000000000000 ) ) ; +#3225 = CARTESIAN_POINT ( 'NONE', ( 9.749999999999996447, 34.53884078076435316, -47.49999999999999289 ) ) ; +#3226 = VECTOR ( 'NONE', #3016, 1000.000000000000000 ) ; +#3227 = CIRCLE ( 'NONE', #1816, 1.624999999999999778 ) ; +#3228 = VECTOR ( 'NONE', #412, 1000.000000000000000 ) ; +#3229 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 37.93094681733413864, -53.84999999999999432 ) ) ; +#3230 = AXIS2_PLACEMENT_3D ( 'NONE', #830, #811, #327 ) ; +#3231 = CARTESIAN_POINT ( 'NONE', ( 18.50000000000001066, 15.50000000000001243, -50.49999999999999289 ) ) ; +#3232 = LINE ( 'NONE', #2826, #2922 ) ; +#3233 = EDGE_LOOP ( 'NONE', ( #27, #1264 ) ) ; +#3234 = CARTESIAN_POINT ( 'NONE', ( 15.50000000000001066, -15.49999999999997868, -53.85000000000000142 ) ) ; +#3235 = CARTESIAN_POINT ( 'NONE', ( -11.06250000000000000, -51.35000000000000142, -47.49999999999998579 ) ) ; +#3236 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3237 = CARTESIAN_POINT ( 'NONE', ( 9.750000000000000000, 36.18094681733413864, -50.00000000000000000 ) ) ; +#3238 = LINE ( 'NONE', #235, #3159 ) ; +#3239 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3240 = ORIENTED_EDGE ( 'NONE', *, *, #1844, .F. ) ; +#3241 = AXIS2_PLACEMENT_3D ( 'NONE', #1386, #2890, #111 ) ; +#3242 = ORIENTED_EDGE ( 'NONE', *, *, #284, .F. ) ; +#3243 = EDGE_CURVE ( 'NONE', #2787, #823, #83, .T. ) ; +#3244 = FACE_BOUND ( 'NONE', #1241, .T. ) ; +#3245 = VERTEX_POINT ( 'NONE', #2814 ) ; +#3246 = CYLINDRICAL_SURFACE ( 'NONE', #2487, 1.625000000000001332 ) ; +#3247 = LINE ( 'NONE', #2261, #932 ) ; +#3248 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3249 = ORIENTED_EDGE ( 'NONE', *, *, #1027, .F. ) ; +#3250 = DIRECTION ( 'NONE', ( 0.8660254037844389297, -0.4999999999999994449, 0.0000000000000000000 ) ) ; +#3251 = CARTESIAN_POINT ( 'NONE', ( -16.93750000000000000, -54.09999999999999432, -53.84999999999999432 ) ) ; +#3252 = FACE_BOUND ( 'NONE', #2766, .T. ) ; +#3253 = ORIENTED_EDGE ( 'NONE', *, *, #1189, .T. ) ; +#3254 = AXIS2_PLACEMENT_3D ( 'NONE', #2850, #3094, #3072 ) ; +#3255 = VERTEX_POINT ( 'NONE', #1589 ) ; +#3256 = EDGE_CURVE ( 'NONE', #110, #2797, #1170, .T. ) ; +#3257 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3258 = ORIENTED_EDGE ( 'NONE', *, *, #916, .T. ) ; +#3259 = PLANE ( 'NONE', #3104 ) ; +#3260 = LINE ( 'NONE', #1676, #2904 ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Models/litscher_carbonfab_181126/Printed/frame_vert_181126.STL b/Models/litscher_carbonfab_181126/Printed/frame_vert_181126.STL new file mode 100644 index 0000000..a206253 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/frame_vert_181126.STL Binary files differ diff --git a/Models/litscher_carbonfab_181126/Printed/gimbal_brkt_back_181126.STEP b/Models/litscher_carbonfab_181126/Printed/gimbal_brkt_back_181126.STEP new file mode 100644 index 0000000..0c0d577 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/gimbal_brkt_back_181126.STEP @@ -0,0 +1,2106 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('gimbal_brkt_back_181126.STEP', + '2018-11-27T00:44:40', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2018', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#2 = EDGE_CURVE ( 'NONE', #508, #1492, #665, .T. ) ; +#3 = EDGE_LOOP ( 'NONE', ( #1791, #290, #369, #511 ) ) ; +#4 = AXIS2_PLACEMENT_3D ( 'NONE', #1756, #461, #162 ) ; +#5 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6 = CIRCLE ( 'NONE', #1469, 1.625000000000004885 ) ; +#7 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#8 = ORIENTED_EDGE ( 'NONE', *, *, #1090, .T. ) ; +#9 = VERTEX_POINT ( 'NONE', #1151 ) ; +#10 = VECTOR ( 'NONE', #998, 1000.000000000000000 ) ; +#11 = CARTESIAN_POINT ( 'NONE', ( 0.1182571663231129083, -32.49999999999999289, 2.524999999999998579 ) ) ; +#12 = ORIENTED_EDGE ( 'NONE', *, *, #1986, .T. ) ; +#13 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#14 = AXIS2_PLACEMENT_3D ( 'NONE', #1840, #1849, #260 ) ; +#15 = EDGE_CURVE ( 'NONE', #238, #1991, #933, .T. ) ; +#16 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#17 = AXIS2_PLACEMENT_3D ( 'NONE', #1988, #517, #1621 ) ; +#18 = ORIENTED_EDGE ( 'NONE', *, *, #42, .F. ) ; +#19 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#20 = FACE_OUTER_BOUND ( 'NONE', #112, .T. ) ; +#21 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#22 = CARTESIAN_POINT ( 'NONE', ( -0.2387847392386130696, -32.51235554260381377, 2.516392374238235696 ) ) ; +#23 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, 2.524999999999998579 ) ) ; +#24 = ORIENTED_EDGE ( 'NONE', *, *, #779, .T. ) ; +#25 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1058, 'distance_accuracy_value', 'NONE'); +#26 = ORIENTED_EDGE ( 'NONE', *, *, #1514, .F. ) ; +#27 = ORIENTED_EDGE ( 'NONE', *, *, #1288, .F. ) ; +#28 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#29 = EDGE_CURVE ( 'NONE', #1975, #815, #2049, .T. ) ; +#30 = PLANE ( 'NONE', #1411 ) ; +#31 = EDGE_CURVE ( 'NONE', #1890, #2068, #283, .T. ) ; +#32 = CIRCLE ( 'NONE', #1345, 3.499999999999999556 ) ; +#33 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, -13.99999999999999467 ) ) ; +#34 = ORIENTED_EDGE ( 'NONE', *, *, #1854, .F. ) ; +#35 = CYLINDRICAL_SURFACE ( 'NONE', #1302, 3.499999999999999556 ) ; +#36 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#37 = EDGE_LOOP ( 'NONE', ( #1311, #1053, #1566, #18 ) ) ; +#38 = ORIENTED_EDGE ( 'NONE', *, *, #1802, .F. ) ; +#39 = ADVANCED_FACE ( 'NONE', ( #1688 ), #958, .F. ) ; +#40 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#41 = CYLINDRICAL_SURFACE ( 'NONE', #435, 1.625000000000004885 ) ; +#42 = EDGE_CURVE ( 'NONE', #380, #745, #1012, .T. ) ; +#43 = CIRCLE ( 'NONE', #1694, 1.625000000000003775 ) ; +#44 = VECTOR ( 'NONE', #959, 1000.000000000000000 ) ; +#45 = VERTEX_POINT ( 'NONE', #1766 ) ; +#46 = ORIENTED_EDGE ( 'NONE', *, *, #1235, .F. ) ; +#47 = ORIENTED_EDGE ( 'NONE', *, *, #2039, .T. ) ; +#48 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#49 = ORIENTED_EDGE ( 'NONE', *, *, #1870, .F. ) ; +#50 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#51 = EDGE_CURVE ( 'NONE', #441, #308, #74, .T. ) ; +#52 = ORIENTED_EDGE ( 'NONE', *, *, #674, .T. ) ; +#53 = ADVANCED_FACE ( 'NONE', ( #451, #1856, #535 ), #973, .T. ) ; +#54 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#55 = ORIENTED_EDGE ( 'NONE', *, *, #228, .T. ) ; +#56 = ORIENTED_EDGE ( 'NONE', *, *, #828, .T. ) ; +#57 = ORIENTED_EDGE ( 'NONE', *, *, #1802, .T. ) ; +#58 = FACE_OUTER_BOUND ( 'NONE', #37, .T. ) ; +#59 = PLANE ( 'NONE', #777 ) ; +#60 = VECTOR ( 'NONE', #102, 1000.000000000000000 ) ; +#61 = CIRCLE ( 'NONE', #446, 1.625000000000003775 ) ; +#62 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000003109, -34.49005222917095637, 1.820199164926734392 ) ) ; +#63 = ADVANCED_FACE ( 'NONE', ( #223 ), #480, .F. ) ; +#64 = AXIS2_PLACEMENT_3D ( 'NONE', #1588, #643, #1745 ) ; +#65 = VECTOR ( 'NONE', #1236, 1000.000000000000000 ) ; +#66 = ORIENTED_EDGE ( 'NONE', *, *, #298, .F. ) ; +#67 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -44.35000000000000142, -12.52712016783451965 ) ) ; +#68 = ORIENTED_EDGE ( 'NONE', *, *, #2, .T. ) ; +#69 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001998, -34.36892805719272559, 1.820199164926735724 ) ) ; +#70 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#71 = ORIENTED_EDGE ( 'NONE', *, *, #546, .F. ) ; +#72 = EDGE_CURVE ( 'NONE', #1161, #1975, #1328, .T. ) ; +#73 = AXIS2_PLACEMENT_3D ( 'NONE', #579, #1063, #746 ) ; +#74 = CIRCLE ( 'NONE', #500, 3.499999999999999556 ) ; +#75 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#76 = EDGE_LOOP ( 'NONE', ( #1896, #1637, #748, #771 ) ) ; +#77 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, -13.99999999999999467 ) ) ; +#78 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 4.387500000000002842 ) ) ; +#79 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -38.00000000000000000, 12.00000000000000000 ) ) ; +#80 = LINE ( 'NONE', #1616, #132 ) ; +#81 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#82 = AXIS2_PLACEMENT_3D ( 'NONE', #1591, #505, #1730 ) ; +#83 = EDGE_CURVE ( 'NONE', #852, #596, #126, .T. ) ; +#84 = STYLED_ITEM ( 'NONE', ( #1906 ), #826 ) ; +#85 = VECTOR ( 'NONE', #1580, 1000.000000000000000 ) ; +#86 = ORIENTED_EDGE ( 'NONE', *, *, #572, .T. ) ; +#87 = AXIS2_PLACEMENT_3D ( 'NONE', #1642, #839, #1318 ) ; +#88 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 12.00000000000000000 ) ) ; +#89 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -31.00000000000000000, 6.742744735705047177 ) ) ; +#90 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, 17.50000000000000355 ) ) ; +#91 = ORIENTED_EDGE ( 'NONE', *, *, #1168, .F. ) ; +#92 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#93 = ORIENTED_EDGE ( 'NONE', *, *, #232, .T. ) ; +#94 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #1007 ) ) ; +#95 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#96 = EDGE_CURVE ( 'NONE', #556, #114, #1273, .T. ) ; +#97 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#98 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#99 = EDGE_CURVE ( 'NONE', #1197, #1926, #586, .T. ) ; +#100 = ORIENTED_EDGE ( 'NONE', *, *, #948, .F. ) ; +#101 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 6.123233995736767268E-17, 1.000000000000000000 ) ) ; +#102 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#103 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#104 = ORIENTED_EDGE ( 'NONE', *, *, #1965, .T. ) ; +#105 = LINE ( 'NONE', #518, #885 ) ; +#106 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -38.00000000000000000, 20.00000000000000000 ) ) ; +#107 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -38.00000000000000000, -10.75000000000000000 ) ) ; +#108 = AXIS2_PLACEMENT_3D ( 'NONE', #1757, #1454, #792 ) ; +#109 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 1.820199164926735946 ) ) ; +#110 = EDGE_CURVE ( 'NONE', #1029, #556, #854, .T. ) ; +#111 = LINE ( 'NONE', #515, #624 ) ; +#112 = EDGE_LOOP ( 'NONE', ( #1827, #946, #93, #149, #330, #47, #762 ) ) ; +#113 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#114 = VERTEX_POINT ( 'NONE', #1185 ) ; +#115 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#116 = ORIENTED_EDGE ( 'NONE', *, *, #99, .T. ) ; +#117 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, -10.49999999999999467 ) ) ; +#118 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -31.00000000000000000, 6.742744735705047177 ) ) ; +#119 = CIRCLE ( 'NONE', #739, 2.524999999999999911 ) ; +#120 = ORIENTED_EDGE ( 'NONE', *, *, #712, .T. ) ; +#121 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#122 = AXIS2_PLACEMENT_3D ( 'NONE', #1400, #2045, #1407 ) ; +#123 = CIRCLE ( 'NONE', #404, 1.625000000000003775 ) ; +#124 = EDGE_CURVE ( 'NONE', #1872, #2068, #813, .T. ) ; +#125 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#126 = CIRCLE ( 'NONE', #64, 3.500000000000000000 ) ; +#127 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -44.35000000000000142, 12.52712016783453031 ) ) ; +#128 = AXIS2_PLACEMENT_3D ( 'NONE', #1857, #1267, #1429 ) ; +#129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#130 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, -13.99999999999999467 ) ) ; +#131 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -15.62500000000000000 ) ) ; +#132 = VECTOR ( 'NONE', #1790, 1000.000000000000000 ) ; +#133 = VERTEX_POINT ( 'NONE', #1815 ) ; +#134 = VECTOR ( 'NONE', #2023, 1000.000000000000000 ) ; +#135 = CIRCLE ( 'NONE', #282, 3.499999999999999556 ) ; +#136 = ORIENTED_EDGE ( 'NONE', *, *, #1951, .T. ) ; +#137 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#138 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#139 = EDGE_CURVE ( 'NONE', #1010, #417, #984, .T. ) ; +#140 = ORIENTED_EDGE ( 'NONE', *, *, #1212, .T. ) ; +#141 = ORIENTED_EDGE ( 'NONE', *, *, #1561, .F. ) ; +#142 = CARTESIAN_POINT ( 'NONE', ( 1.567685661499443661, -33.46413451532266237, 1.980213943134435439 ) ) ; +#143 = ORIENTED_EDGE ( 'NONE', *, *, #1755, .F. ) ; +#144 = ORIENTED_EDGE ( 'NONE', *, *, #2001, .F. ) ; +#145 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#146 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, -3.500000000000000000 ) ) ; +#147 = LINE ( 'NONE', #399, #1270 ) ; +#148 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -17.49999999999999645 ) ) ; +#149 = ORIENTED_EDGE ( 'NONE', *, *, #202, .F. ) ; +#150 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#151 = EDGE_CURVE ( 'NONE', #1108, #703, #1641, .T. ) ; +#152 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#153 = AXIS2_PLACEMENT_3D ( 'NONE', #1933, #1950, #979 ) ; +#154 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -10.49999999999999467 ) ) ; +#155 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 12.00000000000000000 ) ) ; +#156 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#157 = FACE_OUTER_BOUND ( 'NONE', #1366, .T. ) ; +#158 = CIRCLE ( 'NONE', #1611, 3.499999999999999556 ) ; +#159 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, 15.47287983216548035 ) ) ; +#160 = CYLINDRICAL_SURFACE ( 'NONE', #1741, 10.75000000000000000 ) ; +#161 = ORIENTED_EDGE ( 'NONE', *, *, #298, .T. ) ; +#162 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#163 = AXIS2_PLACEMENT_3D ( 'NONE', #592, #2041, #584 ) ; +#164 = ORIENTED_EDGE ( 'NONE', *, *, #1046, .F. ) ; +#165 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#166 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#167 = VECTOR ( 'NONE', #1777, 1000.000000000000000 ) ; +#168 = ORIENTED_EDGE ( 'NONE', *, *, #563, .T. ) ; +#169 = CARTESIAN_POINT ( 'NONE', ( 2.937499999999999556, -37.49999999999999289, 7.137500000000001066 ) ) ; +#170 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#171 = ORIENTED_EDGE ( 'NONE', *, *, #1358, .F. ) ; +#172 = CIRCLE ( 'NONE', #950, 1.750000000000001776 ) ; +#173 = ORIENTED_EDGE ( 'NONE', *, *, #1022, .T. ) ; +#174 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -44.35000000000000142, -3.500000000000000000 ) ) ; +#175 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#176 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -34.99999999999999289, 8.945787085040540987 ) ) ; +#177 = EDGE_CURVE ( 'NONE', #804, #1994, #1352, .T. ) ; +#178 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#179 = CIRCLE ( 'NONE', #1254, 3.499999999999999556 ) ; +#180 = ORIENTED_EDGE ( 'NONE', *, *, #31, .T. ) ; +#181 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -37.49999999999999289, 3.980102097228897738E-16 ) ) ; +#182 = FACE_OUTER_BOUND ( 'NONE', #1596, .T. ) ; +#183 = VECTOR ( 'NONE', #1078, 1000.000000000000000 ) ; +#184 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, -3.500000000000000000 ) ) ; +#185 = CARTESIAN_POINT ( 'NONE', ( -1.690329420563914109, -34.71787850897435135, 1.876017775006497246 ) ) ; +#186 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #489 ) ; +#187 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, -13.99999999999999467 ) ) ; +#188 = ORIENTED_EDGE ( 'NONE', *, *, #989, .F. ) ; +#189 = ORIENTED_EDGE ( 'NONE', *, *, #1157, .F. ) ; +#190 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 1.820199164926735280 ) ) ; +#191 = EDGE_CURVE ( 'NONE', #212, #1374, #428, .T. ) ; +#192 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #84 ), #1984 ) ; +#193 = DIRECTION ( 'NONE', ( 1.445602896647338917E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#194 = AXIS2_PLACEMENT_3D ( 'NONE', #706, #1337, #1163 ) ; +#195 = ADVANCED_FACE ( 'NONE', ( #1398 ), #352, .F. ) ; +#196 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#197 = VERTEX_POINT ( 'NONE', #1801 ) ; +#198 = SHAPE_DEFINITION_REPRESENTATION ( #585, #1073 ) ; +#199 = FACE_OUTER_BOUND ( 'NONE', #2056, .T. ) ; +#200 = CARTESIAN_POINT ( 'NONE', ( 0.2381609655705740625, -35.98769585472312826, 2.516428757264362215 ) ) ; +#201 = ORIENTED_EDGE ( 'NONE', *, *, #434, .T. ) ; +#202 = EDGE_CURVE ( 'NONE', #1590, #657, #1287, .T. ) ; +#203 = ORIENTED_EDGE ( 'NONE', *, *, #1911, .T. ) ; +#204 = CARTESIAN_POINT ( 'NONE', ( 0.4683342126492518465, -35.94025755265452204, 2.483907687731325087 ) ) ; +#205 = ADVANCED_FACE ( 'NONE', ( #1137 ), #732, .F. ) ; +#206 = CLOSED_SHELL ( 'NONE', ( #1475, #393, #702, #599, #1821, #413, #1803, #1683, #1970, #365, #1555, #558, #1547, #205, #1465, #427, #842, #1979, #1014, #1651, #1338, #248, #1064, #1100, #63, #1644, #53, #1369, #215, #383, #1832, #761, #1171, #1489, #1626, #258, #769, #401, #684, #1223, #1319, #903, #717, #695, #1348, #224, #2027, #530, #867, #1025, #195, #1960, #1232, #847, #859, #1483, #1664, #1187, #1397, #39 ) ) ; +#207 = AXIS2_PLACEMENT_3D ( 'NONE', #1780, #50, #687 ) ; +#208 = AXIS2_PLACEMENT_3D ( 'NONE', #900, #95, #1535 ) ; +#209 = LINE ( 'NONE', #1958, #485 ) ; +#210 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#211 = ORIENTED_EDGE ( 'NONE', *, *, #1101, .T. ) ; +#212 = VERTEX_POINT ( 'NONE', #1638 ) ; +#213 = ORIENTED_EDGE ( 'NONE', *, *, #1500, .F. ) ; +#214 = VERTEX_POINT ( 'NONE', #367 ) ; +#215 = ADVANCED_FACE ( 'NONE', ( #1957 ), #1959, .F. ) ; +#216 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#217 = ORIENTED_EDGE ( 'NONE', *, *, #406, .T. ) ; +#218 = CARTESIAN_POINT ( 'NONE', ( 0.1201175835249377322, -36.00000000000000000, 2.524999999999998135 ) ) ; +#219 = EDGE_CURVE ( 'NONE', #1926, #1247, #583, .T. ) ; +#220 = ORIENTED_EDGE ( 'NONE', *, *, #1951, .F. ) ; +#221 = ORIENTED_EDGE ( 'NONE', *, *, #341, .T. ) ; +#222 = VECTOR ( 'NONE', #478, 1000.000000000000000 ) ; +#223 = FACE_OUTER_BOUND ( 'NONE', #1317, .T. ) ; +#224 = ADVANCED_FACE ( 'NONE', ( #279 ), #810, .F. ) ; +#225 = EDGE_LOOP ( 'NONE', ( #1629, #1147, #1542, #1412 ) ) ; +#226 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#227 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#228 = EDGE_CURVE ( 'NONE', #2068, #9, #1165, .T. ) ; +#229 = FACE_BOUND ( 'NONE', #350, .T. ) ; +#230 = ORIENTED_EDGE ( 'NONE', *, *, #1583, .T. ) ; +#231 = LINE ( 'NONE', #184, #1697 ) ; +#232 = EDGE_CURVE ( 'NONE', #1197, #657, #1709, .T. ) ; +#233 = AXIS2_PLACEMENT_3D ( 'NONE', #1781, #1459, #1464 ) ; +#234 = LINE ( 'NONE', #292, #409 ) ; +#235 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#236 = VERTEX_POINT ( 'NONE', #1365 ) ; +#237 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#238 = VERTEX_POINT ( 'NONE', #1045 ) ; +#239 = VERTEX_POINT ( 'NONE', #67 ) ; +#240 = ORIENTED_EDGE ( 'NONE', *, *, #1394, .T. ) ; +#241 = ORIENTED_EDGE ( 'NONE', *, *, #356, .T. ) ; +#242 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 10.50000000000000533 ) ) ; +#243 = ORIENTED_EDGE ( 'NONE', *, *, #2057, .T. ) ; +#244 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, -15.62500000000000000 ) ) ; +#245 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, 12.52712016783453031 ) ) ; +#246 = EDGE_CURVE ( 'NONE', #1169, #1881, #1245, .T. ) ; +#247 = AXIS2_PLACEMENT_3D ( 'NONE', #927, #921, #453 ) ; +#248 = ADVANCED_FACE ( 'NONE', ( #1851 ), #1373, .F. ) ; +#249 = VERTEX_POINT ( 'NONE', #711 ) ; +#250 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#251 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -38.00000000000000000, 1.625000000000003775 ) ) ; +#252 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, 12.52712016783453031 ) ) ; +#253 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -44.35000000000000142, -3.500000000000000000 ) ) ; +#254 = ORIENTED_EDGE ( 'NONE', *, *, #1643, .T. ) ; +#255 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#256 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#257 = ORIENTED_EDGE ( 'NONE', *, *, #291, .F. ) ; +#258 = ADVANCED_FACE ( 'NONE', ( #953 ), #1655, .F. ) ; +#259 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#260 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#261 = VECTOR ( 'NONE', #1961, 1000.000000000000000 ) ; +#262 = EDGE_CURVE ( 'NONE', #1142, #1247, #531, .T. ) ; +#263 = VECTOR ( 'NONE', #269, 1000.000000000000000 ) ; +#264 = LINE ( 'NONE', #1834, #1210 ) ; +#265 = VECTOR ( 'NONE', #317, 1000.000000000000000 ) ; +#266 = VECTOR ( 'NONE', #36, 1000.000000000000000 ) ; +#267 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#268 = VERTEX_POINT ( 'NONE', #245 ) ; +#269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#270 = CYLINDRICAL_SURFACE ( 'NONE', #754, 3.499999999999999556 ) ; +#271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#272 = EDGE_LOOP ( 'NONE', ( #2029, #772, #1807, #479 ) ) ; +#273 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 20.00000000000000000 ) ) ; +#274 = VECTOR ( 'NONE', #913, 1000.000000000000000 ) ; +#275 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -37.49999999999999289, 7.137500000000001066 ) ) ; +#276 = ORIENTED_EDGE ( 'NONE', *, *, #1681, .F. ) ; +#277 = VECTOR ( 'NONE', #193, 1000.000000000000000 ) ; +#278 = LINE ( 'NONE', #89, #661 ) ; +#279 = FACE_OUTER_BOUND ( 'NONE', #272, .T. ) ; +#280 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#281 = VERTEX_POINT ( 'NONE', #545 ) ; +#282 = AXIS2_PLACEMENT_3D ( 'NONE', #941, #1913, #642 ) ; +#283 = LINE ( 'NONE', #345, #1931 ) ; +#284 = DIRECTION ( 'NONE', ( 1.000000000000000000, 9.656470692094402128E-33, 1.577021341797098300E-16 ) ) ; +#285 = CIRCLE ( 'NONE', #1770, 3.500000000000000000 ) ; +#286 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#287 = ORIENTED_EDGE ( 'NONE', *, *, #1986, .F. ) ; +#288 = FACE_OUTER_BOUND ( 'NONE', #1519, .T. ) ; +#289 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#290 = ORIENTED_EDGE ( 'NONE', *, *, #1008, .T. ) ; +#291 = EDGE_CURVE ( 'NONE', #1878, #1010, #1418, .T. ) ; +#292 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 6.673258265667590727 ) ) ; +#293 = EDGE_LOOP ( 'NONE', ( #141, #757, #788, #24 ) ) ; +#294 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#295 = ORIENTED_EDGE ( 'NONE', *, *, #368, .T. ) ; +#296 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#297 = ORIENTED_EDGE ( 'NONE', *, *, #1253, .T. ) ; +#298 = EDGE_CURVE ( 'NONE', #414, #1175, #1799, .T. ) ; +#299 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#300 = AXIS2_PLACEMENT_3D ( 'NONE', #580, #237, #1195 ) ; +#301 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#302 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#303 = EDGE_CURVE ( 'NONE', #9, #1093, #147, .T. ) ; +#304 = CIRCLE ( 'NONE', #1892, 1.750000000000001554 ) ; +#305 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 3.500000000000000000 ) ) ; +#306 = CIRCLE ( 'NONE', #692, 3.499999999999999556 ) ; +#307 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#308 = VERTEX_POINT ( 'NONE', #386 ) ; +#309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#310 = VECTOR ( 'NONE', #121, 1000.000000000000000 ) ; +#311 = CARTESIAN_POINT ( 'NONE', ( -1.084869337128653077, -32.85887122796027882, 2.287184615655441178 ) ) ; +#312 = VERTEX_POINT ( 'NONE', #1647 ) ; +#313 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -30.99999999999999289, 7.137500000000001066 ) ) ; +#314 = AXIS2_PLACEMENT_3D ( 'NONE', #723, #1208, #738 ) ; +#315 = ORIENTED_EDGE ( 'NONE', *, *, #2012, .F. ) ; +#316 = VERTEX_POINT ( 'NONE', #716 ) ; +#317 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#318 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#319 = CIRCLE ( 'NONE', #1679, 10.75000000000000000 ) ; +#320 = ORIENTED_EDGE ( 'NONE', *, *, #789, .F. ) ; +#321 = VERTEX_POINT ( 'NONE', #870 ) ; +#322 = CARTESIAN_POINT ( 'NONE', ( -61.99999999999999289, -44.35000000000000142, 20.00000000000000000 ) ) ; +#323 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#324 = ORIENTED_EDGE ( 'NONE', *, *, #1841, .T. ) ; +#325 = EDGE_CURVE ( 'NONE', #431, #2032, #1057, .T. ) ; +#326 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#327 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#328 = PLANE ( 'NONE', #153 ) ; +#329 = ORIENTED_EDGE ( 'NONE', *, *, #563, .F. ) ; +#330 = ORIENTED_EDGE ( 'NONE', *, *, #462, .F. ) ; +#331 = DIRECTION ( 'NONE', ( -1.577021341797098300E-16, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#332 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #1276 ) ; +#333 = ORIENTED_EDGE ( 'NONE', *, *, #1531, .T. ) ; +#334 = ORIENTED_EDGE ( 'NONE', *, *, #776, .F. ) ; +#335 = AXIS2_PLACEMENT_3D ( 'NONE', #1283, #498, #1918 ) ; +#336 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#337 = EDGE_CURVE ( 'NONE', #1247, #1142, #119, .T. ) ; +#338 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -38.00000000000000000, -20.00000000000000000 ) ) ; +#339 = AXIS2_PLACEMENT_3D ( 'NONE', #705, #54, #843 ) ; +#340 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#341 = EDGE_CURVE ( 'NONE', #1758, #898, #1768, .T. ) ; +#342 = ORIENTED_EDGE ( 'NONE', *, *, #896, .F. ) ; +#343 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#344 = CYLINDRICAL_SURFACE ( 'NONE', #1924, 3.500000000000000000 ) ; +#345 = CARTESIAN_POINT ( 'NONE', ( 2.937500000000000000, -37.49999999999999289, 4.387500000000002842 ) ) ; +#346 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#347 = ORIENTED_EDGE ( 'NONE', *, *, #341, .F. ) ; +#348 = VECTOR ( 'NONE', #1069, 1000.000000000000000 ) ; +#349 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#350 = EDGE_LOOP ( 'NONE', ( #1716, #618 ) ) ; +#351 = CYLINDRICAL_SURFACE ( 'NONE', #1868, 1.625000000000004885 ) ; +#352 = CYLINDRICAL_SURFACE ( 'NONE', #1074, 1.625000000000004885 ) ; +#353 = EDGE_CURVE ( 'NONE', #1446, #236, #1295, .T. ) ; +#354 = CARTESIAN_POINT ( 'NONE', ( 1.699160598116950194, -34.72567439186028793, 1.871249158193690532 ) ) ; +#355 = ORIENTED_EDGE ( 'NONE', *, *, #51, .F. ) ; +#356 = EDGE_CURVE ( 'NONE', #1820, #441, #872, .T. ) ; +#357 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#358 = LINE ( 'NONE', #2063, #1888 ) ; +#359 = ORIENTED_EDGE ( 'NONE', *, *, #679, .T. ) ; +#360 = CARTESIAN_POINT ( 'NONE', ( 1.163284564308174396, -35.56204647671189889, 2.242852459373778196 ) ) ; +#361 = VECTOR ( 'NONE', #457, 1000.000000000000000 ) ; +#362 = LINE ( 'NONE', #473, #1967 ) ; +#363 = ORIENTED_EDGE ( 'NONE', *, *, #572, .F. ) ; +#364 = ORIENTED_EDGE ( 'NONE', *, *, #1845, .T. ) ; +#365 = ADVANCED_FACE ( 'NONE', ( #444 ), #270, .F. ) ; +#366 = ORIENTED_EDGE ( 'NONE', *, *, #1145, .F. ) ; +#367 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -15.62500000000000000 ) ) ; +#368 = EDGE_CURVE ( 'NONE', #1774, #1010, #32, .T. ) ; +#369 = ORIENTED_EDGE ( 'NONE', *, *, #1619, .F. ) ; +#370 = AXIS2_PLACEMENT_3D ( 'NONE', #952, #482, #2065 ) ; +#371 = PLANE ( 'NONE', #1546 ) ; +#372 = VECTOR ( 'NONE', #1850, 1000.000000000000000 ) ; +#373 = EDGE_LOOP ( 'NONE', ( #1573, #869, #686, #426 ) ) ; +#374 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#375 = FACE_OUTER_BOUND ( 'NONE', #892, .T. ) ; +#376 = ORIENTED_EDGE ( 'NONE', *, *, #1531, .F. ) ; +#377 = FACE_BOUND ( 'NONE', #1818, .T. ) ; +#378 = ORIENTED_EDGE ( 'NONE', *, *, #15, .T. ) ; +#379 = EDGE_CURVE ( 'NONE', #2025, #508, #1388, .T. ) ; +#380 = VERTEX_POINT ( 'NONE', #2013 ) ; +#381 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#382 = AXIS2_PLACEMENT_3D ( 'NONE', #1098, #412, #1231 ) ; +#383 = ADVANCED_FACE ( 'NONE', ( #976 ), #1379, .F. ) ; +#384 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -30.99999999999999289, 7.137500000000001066 ) ) ; +#385 = LINE ( 'NONE', #770, #134 ) ; +#386 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, -15.47287983216546969 ) ) ; +#387 = ORIENTED_EDGE ( 'NONE', *, *, #1149, .T. ) ; +#388 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -41.85000000000000142, -12.52712016783451610 ) ) ; +#389 = EDGE_LOOP ( 'NONE', ( #104, #243 ) ) ; +#390 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736766036E-17 ) ) ; +#391 = EDGE_CURVE ( 'NONE', #1392, #816, #871, .T. ) ; +#392 = AXIS2_PLACEMENT_3D ( 'NONE', #783, #1882, #129 ) ; +#393 = ADVANCED_FACE ( 'NONE', ( #1199 ), #344, .F. ) ; +#394 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 7.137500000000001066 ) ) ; +#395 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#396 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#397 = EDGE_LOOP ( 'NONE', ( #548, #670, #1466, #27 ) ) ; +#398 = EDGE_LOOP ( 'NONE', ( #1562, #486, #203, #333 ) ) ; +#399 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -30.99999999999999289, 7.137500000000001066 ) ) ; +#400 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #1140, #1087 ) ; +#401 = ADVANCED_FACE ( 'NONE', ( #550 ), #930, .F. ) ; +#402 = VECTOR ( 'NONE', #1419, 1000.000000000000000 ) ; +#403 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -44.35000000000000142, 3.500000000000000000 ) ) ; +#404 = AXIS2_PLACEMENT_3D ( 'NONE', #635, #1386, #1869 ) ; +#405 = VERTEX_POINT ( 'NONE', #2019 ) ; +#406 = EDGE_CURVE ( 'NONE', #1530, #1649, #1534, .T. ) ; +#407 = AXIS2_PLACEMENT_3D ( 'NONE', #700, #374, #1028 ) ; +#408 = AXIS2_PLACEMENT_3D ( 'NONE', #835, #1304, #346 ) ; +#409 = VECTOR ( 'NONE', #1124, 1000.000000000000000 ) ; +#410 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, -15.62500000000000000 ) ) ; +#411 = ORIENTED_EDGE ( 'NONE', *, *, #72, .T. ) ; +#412 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#413 = ADVANCED_FACE ( 'NONE', ( #1153 ), #568, .F. ) ; +#414 = VERTEX_POINT ( 'NONE', #759 ) ; +#415 = EDGE_LOOP ( 'NONE', ( #1431, #525, #254, #1920 ) ) ; +#416 = PLANE ( 'NONE', #1359 ) ; +#417 = VERTEX_POINT ( 'NONE', #127 ) ; +#418 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, 10.50000000000000533 ) ) ; +#419 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#420 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#421 = AXIS2_PLACEMENT_3D ( 'NONE', #912, #1067, #1560 ) ; +#422 = CIRCLE ( 'NONE', #865, 3.499999999999999556 ) ; +#423 = CIRCLE ( 'NONE', #1334, 1.625000000000004885 ) ; +#424 = ORIENTED_EDGE ( 'NONE', *, *, #1467, .T. ) ; +#425 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#426 = ORIENTED_EDGE ( 'NONE', *, *, #1031, .F. ) ; +#427 = ADVANCED_FACE ( 'NONE', ( #698 ), #1782, .T. ) ; +#428 = CIRCLE ( 'NONE', #1623, 1.625000000000003775 ) ; +#429 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -10.49999999999999467 ) ) ; +#430 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#431 = VERTEX_POINT ( 'NONE', #773 ) ; +#432 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#433 = CIRCLE ( 'NONE', #987, 3.499999999999999556 ) ; +#434 = EDGE_CURVE ( 'NONE', #449, #405, #1335, .T. ) ; +#435 = AXIS2_PLACEMENT_3D ( 'NONE', #1110, #476, #326 ) ; +#436 = CIRCLE ( 'NONE', #1515, 1.625000000000004885 ) ; +#437 = ORIENTED_EDGE ( 'NONE', *, *, #923, .T. ) ; +#438 = CARTESIAN_POINT ( 'NONE', ( -61.99999999999999289, -44.35000000000000142, -20.00000000000000000 ) ) ; +#439 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#440 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#441 = VERTEX_POINT ( 'NONE', #744 ) ; +#442 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, -12.37499999999998934 ) ) ; +#443 = EDGE_CURVE ( 'NONE', #815, #816, #135, .T. ) ; +#444 = FACE_OUTER_BOUND ( 'NONE', #397, .T. ) ; +#445 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, 14.00000000000000533 ) ) ; +#446 = AXIS2_PLACEMENT_3D ( 'NONE', #1030, #1341, #196 ) ; +#447 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#448 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#449 = VERTEX_POINT ( 'NONE', #1238 ) ; +#450 = FACE_OUTER_BOUND ( 'NONE', #1617, .T. ) ; +#451 = FACE_BOUND ( 'NONE', #1088, .T. ) ; +#452 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#453 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#454 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#455 = LINE ( 'NONE', #1441, #1935 ) ; +#456 = CYLINDRICAL_SURFACE ( 'NONE', #1727, 1.625000000000004885 ) ; +#457 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#458 = ORIENTED_EDGE ( 'NONE', *, *, #632, .F. ) ; +#459 = EDGE_CURVE ( 'NONE', #1860, #605, #1360, .T. ) ; +#460 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#461 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#462 = EDGE_CURVE ( 'NONE', #1943, #1590, #1937, .T. ) ; +#463 = LINE ( 'NONE', #798, #648 ) ; +#464 = ORIENTED_EDGE ( 'NONE', *, *, #989, .T. ) ; +#465 = VERTEX_POINT ( 'NONE', #1106 ) ; +#466 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#467 = ORIENTED_EDGE ( 'NONE', *, *, #443, .T. ) ; +#468 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -44.35000000000000142, 0.0000000000000000000 ) ) ; +#469 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#470 = VERTEX_POINT ( 'NONE', #801 ) ; +#471 = CARTESIAN_POINT ( 'NONE', ( 0.4692566325774673586, -32.55995050477877584, 2.483765321114614011 ) ) ; +#472 = ORIENTED_EDGE ( 'NONE', *, *, #151, .T. ) ; +#473 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#474 = FACE_BOUND ( 'NONE', #1977, .T. ) ; +#475 = EDGE_CURVE ( 'NONE', #605, #1342, #234, .T. ) ; +#476 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#477 = AXIS2_PLACEMENT_3D ( 'NONE', #868, #216, #1039 ) ; +#478 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#479 = ORIENTED_EDGE ( 'NONE', *, *, #434, .F. ) ; +#480 = CYLINDRICAL_SURFACE ( 'NONE', #1891, 1.625000000000004885 ) ; +#481 = ORIENTED_EDGE ( 'NONE', *, *, #690, .F. ) ; +#482 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#483 = VERTEX_POINT ( 'NONE', #796 ) ; +#484 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#485 = VECTOR ( 'NONE', #1778, 1000.000000000000000 ) ; +#486 = ORIENTED_EDGE ( 'NONE', *, *, #975, .F. ) ; +#487 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 3.500000000000000000 ) ) ; +#488 = FACE_OUTER_BOUND ( 'NONE', #822, .T. ) ; +#489 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#490 = ORIENTED_EDGE ( 'NONE', *, *, #1372, .T. ) ; +#491 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, 15.62500000000001066 ) ) ; +#492 = VECTOR ( 'NONE', #210, 1000.000000000000000 ) ; +#493 = CYLINDRICAL_SURFACE ( 'NONE', #1974, 1.625000000000004885 ) ; +#494 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#495 = EDGE_CURVE ( 'NONE', #816, #268, #1482, .T. ) ; +#496 = CARTESIAN_POINT ( 'NONE', ( -1.398943254507743150, -33.17522629837441883, 2.109766033331699653 ) ) ; +#497 = ORIENTED_EDGE ( 'NONE', *, *, #779, .F. ) ; +#498 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#499 = ORIENTED_EDGE ( 'NONE', *, *, #1633, .T. ) ; +#500 = AXIS2_PLACEMENT_3D ( 'NONE', #983, #1944, #21 ) ; +#501 = EDGE_LOOP ( 'NONE', ( #1665, #144 ) ) ; +#502 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#504 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#505 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#506 = VECTOR ( 'NONE', #1040, 1000.000000000000000 ) ; +#507 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -44.35000000000000142, 3.500000000000000000 ) ) ; +#508 = VERTEX_POINT ( 'NONE', #1255 ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #721, .F. ) ; +#510 = EDGE_LOOP ( 'NONE', ( #658, #1266, #1034, #1241 ) ) ; +#511 = ORIENTED_EDGE ( 'NONE', *, *, #864, .F. ) ; +#512 = EDGE_CURVE ( 'NONE', #1492, #1645, #645, .T. ) ; +#513 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#514 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#515 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, -12.52712016783451965 ) ) ; +#516 = VECTOR ( 'NONE', #875, 1000.000000000000000 ) ; +#517 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#518 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -10.49999999999999467 ) ) ; +#519 = VERTEX_POINT ( 'NONE', #1565 ) ; +#520 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1280 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1130, #1912, #170 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#521 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, -13.99999999999999467 ) ) ; +#522 = EDGE_CURVE ( 'NONE', #508, #1507, #1260, .T. ) ; +#523 = ORIENTED_EDGE ( 'NONE', *, *, #679, .F. ) ; +#524 = PLANE ( 'NONE', #1830 ) ; +#525 = ORIENTED_EDGE ( 'NONE', *, *, #888, .F. ) ; +#526 = EDGE_CURVE ( 'NONE', #197, #1774, #1812, .T. ) ; +#527 = ORIENTED_EDGE ( 'NONE', *, *, #1202, .F. ) ; +#528 = EDGE_LOOP ( 'NONE', ( #1368, #1635, #378, #1682 ) ) ; +#529 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#530 = ADVANCED_FACE ( 'NONE', ( #1430, #1914 ), #1715, .T. ) ; +#531 = CIRCLE ( 'NONE', #1486, 2.524999999999999911 ) ; +#532 = ORIENTED_EDGE ( 'NONE', *, *, #965, .F. ) ; +#533 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#534 = CYLINDRICAL_SURFACE ( 'NONE', #634, 2.524999999999999911 ) ; +#535 = FACE_BOUND ( 'NONE', #627, .T. ) ; +#536 = ORIENTED_EDGE ( 'NONE', *, *, #1500, .T. ) ; +#537 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#538 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #691, #1948, #1473, #1038, #1159, #1468, #557, #1659, #1771, #993, #836, #1982, #185, #720, #69, #1797 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 2, 2, 2, 4 ), + ( 0.0000000000000000000, 0.0003549619965853918389, 0.0007099239931707836777, 0.001419847986341559115, 0.001774809982926954044, 0.002129771979512349190, 0.002484733976097744119, 0.002839695972683139048 ), + .UNSPECIFIED. ) ; +#539 = ORIENTED_EDGE ( 'NONE', *, *, #246, .T. ) ; +#540 = AXIS2_PLACEMENT_3D ( 'NONE', #1055, #1836, #879 ) ; +#541 = CIRCLE ( 'NONE', #1885, 3.500000000000000000 ) ; +#542 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -38.00000000000000000, 0.0000000000000000000 ) ) ; +#543 = LINE ( 'NONE', #244, #1674 ) ; +#544 = FACE_OUTER_BOUND ( 'NONE', #3, .T. ) ; +#545 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, -12.52712016783451965 ) ) ; +#546 = EDGE_CURVE ( 'NONE', #1758, #1108, #1584, .T. ) ; +#547 = AXIS2_PLACEMENT_3D ( 'NONE', #936, #284, #1568 ) ; +#548 = ORIENTED_EDGE ( 'NONE', *, *, #880, .F. ) ; +#549 = AXIS2_PLACEMENT_3D ( 'NONE', #1572, #309, #1423 ) ; +#550 = FACE_OUTER_BOUND ( 'NONE', #528, .T. ) ; +#551 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#552 = CIRCLE ( 'NONE', #1329, 1.625000000000004885 ) ; +#553 = ORIENTED_EDGE ( 'NONE', *, *, #1205, .T. ) ; +#554 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -37.49999999999999289, 7.137500000000001066 ) ) ; +#555 = ORIENTED_EDGE ( 'NONE', *, *, #232, .F. ) ; +#556 = VERTEX_POINT ( 'NONE', #1593 ) ; +#557 = CARTESIAN_POINT ( 'NONE', ( -1.086415632477145676, -35.63959852890842939, 2.286321139996565055 ) ) ; +#558 = ADVANCED_FACE ( 'NONE', ( #1170 ), #1023, .F. ) ; +#559 = AXIS2_PLACEMENT_3D ( 'NONE', #819, #327, #307 ) ; +#560 = EDGE_CURVE ( 'NONE', #2066, #1772, #1122, .T. ) ; +#561 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736766036E-17 ) ) ; +#562 = VECTOR ( 'NONE', #1675, 1000.000000000000000 ) ; +#563 = EDGE_CURVE ( 'NONE', #239, #1002, #158, .T. ) ; +#564 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, -1.625000000000003775 ) ) ; +#565 = LINE ( 'NONE', #1980, #261 ) ; +#566 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#567 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, 14.00000000000000533 ) ) ; +#568 = CYLINDRICAL_SURFACE ( 'NONE', #1817, 3.499999999999999556 ) ; +#569 = VERTEX_POINT ( 'NONE', #628 ) ; +#570 = CYLINDRICAL_SURFACE ( 'NONE', #1925, 3.499999999999999556 ) ; +#571 = ORIENTED_EDGE ( 'NONE', *, *, #1022, .F. ) ; +#572 = EDGE_CURVE ( 'NONE', #1470, #519, #209, .T. ) ; +#573 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#574 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#575 = ORIENTED_EDGE ( 'NONE', *, *, #2039, .F. ) ; +#576 = CIRCLE ( 'NONE', #578, 1.625000000000003775 ) ; +#577 = EDGE_CURVE ( 'NONE', #441, #470, #689, .T. ) ; +#578 = AXIS2_PLACEMENT_3D ( 'NONE', #1551, #432, #267 ) ; +#579 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 20.00000000000000000 ) ) ; +#580 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, -13.99999999999999467 ) ) ; +#581 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 4.387500000000002842 ) ) ; +#582 = ORIENTED_EDGE ( 'NONE', *, *, #877, .F. ) ; +#583 = LINE ( 'NONE', #1326, #1999 ) ; +#584 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#585 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #400 ) ; +#586 = CIRCLE ( 'NONE', #87, 2.524999999999999911 ) ; +#587 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#588 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#589 = EDGE_LOOP ( 'NONE', ( #539, #1897 ) ) ; +#590 = EDGE_CURVE ( 'NONE', #249, #1274, #423, .T. ) ; +#591 = LINE ( 'NONE', #1383, #562 ) ; +#592 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 20.00000000000000000 ) ) ; +#593 = FACE_OUTER_BOUND ( 'NONE', #1505, .T. ) ; +#594 = VECTOR ( 'NONE', #1121, 1000.000000000000000 ) ; +#595 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#596 = VERTEX_POINT ( 'NONE', #174 ) ; +#597 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#598 = EDGE_CURVE ( 'NONE', #236, #212, #1488, .T. ) ; +#599 = ADVANCED_FACE ( 'NONE', ( #1804 ), #1806, .F. ) ; +#600 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, 20.00000000000000000 ) ) ; +#601 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#602 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#603 = AXIS2_PLACEMENT_3D ( 'NONE', #1112, #302, #5 ) ; +#604 = VECTOR ( 'NONE', #1828, 1000.000000000000000 ) ; +#605 = VERTEX_POINT ( 'NONE', #1463 ) ; +#606 = LINE ( 'NONE', #1453, #956 ) ; +#607 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, -13.99999999999999467 ) ) ; +#608 = ORIENTED_EDGE ( 'NONE', *, *, #29, .T. ) ; +#609 = LINE ( 'NONE', #922, #1956 ) ; +#610 = VECTOR ( 'NONE', #166, 1000.000000000000000 ) ; +#611 = EDGE_LOOP ( 'NONE', ( #1873, #1401, #490, #213 ) ) ; +#612 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#613 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -38.00000000000000000, 20.00000000000000000 ) ) ; +#614 = EDGE_LOOP ( 'NONE', ( #707, #1814, #1693, #809 ) ) ; +#615 = CARTESIAN_POINT ( 'NONE', ( 2.937499999999999556, -37.49999999999999289, 7.137500000000001066 ) ) ; +#616 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 17.50000000000000355 ) ) ; +#617 = LINE ( 'NONE', #491, #492 ) ; +#618 = ORIENTED_EDGE ( 'NONE', *, *, #724, .F. ) ; +#619 = EDGE_CURVE ( 'NONE', #2025, #569, #105, .T. ) ; +#620 = LINE ( 'NONE', #1910, #994 ) ; +#621 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, 14.00000000000000533 ) ) ; +#622 = LINE ( 'NONE', #916, #935 ) ; +#623 = ORIENTED_EDGE ( 'NONE', *, *, #975, .T. ) ; +#624 = VECTOR ( 'NONE', #827, 1000.000000000000000 ) ; +#625 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#626 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#627 = EDGE_LOOP ( 'NONE', ( #1673, #55, #911, #1154 ) ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, -10.49999999999999467 ) ) ; +#629 = ORIENTED_EDGE ( 'NONE', *, *, #1321, .F. ) ; +#630 = CIRCLE ( 'NONE', #1501, 1.625000000000004885 ) ; +#631 = ORIENTED_EDGE ( 'NONE', *, *, #1191, .F. ) ; +#632 = EDGE_CURVE ( 'NONE', #703, #898, #552, .T. ) ; +#633 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#634 = AXIS2_PLACEMENT_3D ( 'NONE', #1050, #722, #2016 ) ; +#635 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#636 = CARTESIAN_POINT ( 'NONE', ( 0.8993307651614713683, -32.73104300035069514, 2.369753785411835789 ) ) ; +#637 = ORIENTED_EDGE ( 'NONE', *, *, #1168, .T. ) ; +#638 = AXIS2_PLACEMENT_3D ( 'NONE', #817, #1776, #1928 ) ; +#639 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 20.00000000000000000 ) ) ; +#640 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#641 = FILL_AREA_STYLE ('',( #1597 ) ) ; +#642 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#643 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#644 = FACE_BOUND ( 'NONE', #1700, .T. ) ; +#645 = LINE ( 'NONE', #1409, #361 ) ; +#646 = CARTESIAN_POINT ( 'NONE', ( 2.937500000000000000, -31.00000000000000000, 4.387500000000002842 ) ) ; +#647 = AXIS2_PLACEMENT_3D ( 'NONE', #602, #286, #1889 ) ; +#648 = VECTOR ( 'NONE', #805, 1000.000000000000000 ) ; +#649 = ORIENTED_EDGE ( 'NONE', *, *, #1965, .F. ) ; +#650 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 17.50000000000000355 ) ) ; +#651 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#652 = ORIENTED_EDGE ( 'NONE', *, *, #1157, .T. ) ; +#653 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -35.99999999999999289, 2.524999999999998135 ) ) ; +#654 = VERTEX_POINT ( 'NONE', #1292 ) ; +#655 = ORIENTED_EDGE ( 'NONE', *, *, #202, .T. ) ; +#656 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#657 = VERTEX_POINT ( 'NONE', #653 ) ; +#658 = ORIENTED_EDGE ( 'NONE', *, *, #806, .F. ) ; +#659 = LINE ( 'NONE', #873, #277 ) ; +#660 = EDGE_CURVE ( 'NONE', #861, #1029, #848, .T. ) ; +#661 = VECTOR ( 'NONE', #395, 1000.000000000000000 ) ; +#662 = AXIS2_PLACEMENT_3D ( 'NONE', #130, #1382, #1867 ) ; +#663 = EDGE_LOOP ( 'NONE', ( #2014, #437, #221, #458 ) ) ; +#664 = LINE ( 'NONE', #23, #222 ) ; +#665 = CIRCLE ( 'NONE', #995, 3.499999999999999556 ) ; +#666 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -17.49999999999999645 ) ) ; +#667 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#668 = ORIENTED_EDGE ( 'NONE', *, *, #1669, .F. ) ; +#669 = VECTOR ( 'NONE', #419, 1000.000000000000000 ) ; +#670 = ORIENTED_EDGE ( 'NONE', *, *, #391, .T. ) ; +#671 = AXIS2_PLACEMENT_3D ( 'NONE', #588, #2006, #1201 ) ; +#672 = VECTOR ( 'NONE', #1713, 1000.000000000000000 ) ; +#673 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#674 = EDGE_CURVE ( 'NONE', #1174, #815, #715, .T. ) ; +#675 = AXIS2_PLACEMENT_3D ( 'NONE', #1143, #165, #996 ) ; +#676 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -44.35000000000000142, 20.00000000000000000 ) ) ; +#677 = LINE ( 'NONE', #442, #1384 ) ; +#678 = ORIENTED_EDGE ( 'NONE', *, *, #110, .F. ) ; +#679 = EDGE_CURVE ( 'NONE', #2032, #1890, #80, .T. ) ; +#680 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#681 = FACE_OUTER_BOUND ( 'NONE', #663, .T. ) ; +#682 = VERTEX_POINT ( 'NONE', #507 ) ; +#683 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -35.99999999999999289, 2.524999999999998135 ) ) ; +#684 = ADVANCED_FACE ( 'NONE', ( #229, #1754, #942, #1233, #1605, #1190, #1503, #644 ), #328, .T. ) ; +#685 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#686 = ORIENTED_EDGE ( 'NONE', *, *, #1333, .F. ) ; +#687 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#688 = LINE ( 'NONE', #1969, #1351 ) ; +#689 = LINE ( 'NONE', #666, #1324 ) ; +#690 = EDGE_CURVE ( 'NONE', #321, #2025, #1533, .T. ) ; +#691 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -35.99999999999999289, 2.524999999999998135 ) ) ; +#692 = AXIS2_PLACEMENT_3D ( 'NONE', #607, #1389, #768 ) ; +#693 = ORIENTED_EDGE ( 'NONE', *, *, #379, .F. ) ; +#694 = VECTOR ( 'NONE', #1556, 1000.000000000000000 ) ; +#695 = ADVANCED_FACE ( 'NONE', ( #1460 ), #1610, .F. ) ; +#696 = VERTEX_POINT ( 'NONE', #1775 ) ; +#697 = VECTOR ( 'NONE', #2038, 1000.000000000000000 ) ; +#698 = FACE_OUTER_BOUND ( 'NONE', #1444, .T. ) ; +#699 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 6.123233995736767268E-17, 1.000000000000000000 ) ) ; +#700 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, 0.0000000000000000000 ) ) ; +#701 = EDGE_CURVE ( 'NONE', #133, #1687, #617, .T. ) ; +#702 = ADVANCED_FACE ( 'NONE', ( #593 ), #1068, .F. ) ; +#703 = VERTEX_POINT ( 'NONE', #1026 ) ; +#704 = EDGE_LOOP ( 'NONE', ( #1609, #161 ) ) ; +#705 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#706 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, 14.00000000000000533 ) ) ; +#707 = ORIENTED_EDGE ( 'NONE', *, *, #353, .T. ) ; +#708 = ORIENTED_EDGE ( 'NONE', *, *, #721, .T. ) ; +#709 = LINE ( 'NONE', #1148, #1036 ) ; +#710 = ORIENTED_EDGE ( 'NONE', *, *, #379, .T. ) ; +#711 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, -12.37499999999998934 ) ) ; +#712 = EDGE_CURVE ( 'NONE', #1446, #1374, #565, .T. ) ; +#713 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, -9.000000000000000000 ) ) ; +#714 = ORIENTED_EDGE ( 'NONE', *, *, #1570, .F. ) ; +#715 = CIRCLE ( 'NONE', #675, 3.499999999999999556 ) ; +#716 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, -20.00000000000000000 ) ) ; +#717 = ADVANCED_FACE ( 'NONE', ( #1722, #967 ), #1314, .T. ) ; +#718 = LINE ( 'NONE', #106, #1964 ) ; +#719 = LINE ( 'NONE', #273, #183 ) ; +#720 = CARTESIAN_POINT ( 'NONE', ( -1.737493380545899857, -34.48925008201292997, 1.832422711800813175 ) ) ; +#721 = EDGE_CURVE ( 'NONE', #1027, #2066, #541, .T. ) ; +#722 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#723 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, 10.00000000000000178, 0.0000000000000000000 ) ) ; +#724 = EDGE_CURVE ( 'NONE', #1331, #1017, #61, .T. ) ; +#725 = ORIENTED_EDGE ( 'NONE', *, *, #948, .T. ) ; +#726 = AXIS2_PLACEMENT_3D ( 'NONE', #926, #294, #920 ) ; +#727 = ORIENTED_EDGE ( 'NONE', *, *, #1128, .F. ) ; +#728 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -38.00000000000000000, 8.893530001090725889 ) ) ; +#729 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, 15.47287983216548035 ) ) ; +#730 = LINE ( 'NONE', #1676, #756 ) ; +#731 = ORIENTED_EDGE ( 'NONE', *, *, #31, .F. ) ; +#732 = CYLINDRICAL_SURFACE ( 'NONE', #207, 1.750000000000001776 ) ; +#733 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, -13.99999999999999467 ) ) ; +#734 = ORIENTED_EDGE ( 'NONE', *, *, #1205, .F. ) ; +#735 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 12.37500000000000000 ) ) ; +#736 = EDGE_CURVE ( 'NONE', #1784, #1952, #1695, .T. ) ; +#737 = AXIS2_PLACEMENT_3D ( 'NONE', #566, #1995, #1861 ) ; +#738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#739 = AXIS2_PLACEMENT_3D ( 'NONE', #1668, #390, #1506 ) ; +#740 = EDGE_LOOP ( 'NONE', ( #1297, #211 ) ) ; +#741 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#742 = LINE ( 'NONE', #1541, #1426 ) ; +#743 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -10.49999999999999467 ) ) ; +#744 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -17.49999999999999645 ) ) ; +#745 = VERTEX_POINT ( 'NONE', #1330 ) ; +#746 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#747 = FACE_OUTER_BOUND ( 'NONE', #1005, .T. ) ; +#748 = ORIENTED_EDGE ( 'NONE', *, *, #1973, .T. ) ; +#749 = PLANE ( 'NONE', #737 ) ; +#750 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -31.00000000000000000, 12.00000000000000000 ) ) ; +#751 = EDGE_LOOP ( 'NONE', ( #855, #1789, #1701, #66 ) ) ; +#752 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#753 = FACE_OUTER_BOUND ( 'NONE', #1104, .T. ) ; +#754 = AXIS2_PLACEMENT_3D ( 'NONE', #420, #113, #103 ) ; +#755 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#756 = VECTOR ( 'NONE', #1837, 1000.000000000000000 ) ; +#757 = ORIENTED_EDGE ( 'NONE', *, *, #1394, .F. ) ; +#758 = FACE_OUTER_BOUND ( 'NONE', #786, .T. ) ; +#759 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 1.625000000000003775 ) ) ; +#760 = ORIENTED_EDGE ( 'NONE', *, *, #1467, .F. ) ; +#761 = ADVANCED_FACE ( 'NONE', ( #917 ), #59, .T. ) ; +#762 = ORIENTED_EDGE ( 'NONE', *, *, #262, .T. ) ; +#763 = PLANE ( 'NONE', #1421 ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -31.00000000000000000, 6.742744735705047177 ) ) ; +#765 = EDGE_CURVE ( 'NONE', #2066, #1027, #2058, .T. ) ; +#766 = AXIS2_PLACEMENT_3D ( 'NONE', #1884, #1249, #595 ) ; +#767 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#768 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#769 = ADVANCED_FACE ( 'NONE', ( #991 ), #371, .T. ) ; +#770 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, 10.00000000000000178, 1.625000000000003775 ) ) ; +#771 = ORIENTED_EDGE ( 'NONE', *, *, #512, .F. ) ; +#772 = ORIENTED_EDGE ( 'NONE', *, *, #1447, .T. ) ; +#773 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -37.49999999999999289, 7.137500000000001066 ) ) ; +#774 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#775 = ORIENTED_EDGE ( 'NONE', *, *, #1145, .T. ) ; +#776 = EDGE_CURVE ( 'NONE', #1470, #1649, #1579, .T. ) ; +#777 = AXIS2_PLACEMENT_3D ( 'NONE', #1176, #551, #1824 ) ; +#778 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#779 = EDGE_CURVE ( 'NONE', #1952, #45, #857, .T. ) ; +#780 = AXIS2_PLACEMENT_3D ( 'NONE', #639, #1746, #812 ) ; +#781 = CYLINDRICAL_SURFACE ( 'NONE', #2002, 3.499999999999999556 ) ; +#782 = CIRCLE ( 'NONE', #1047, 3.499999999999999556 ) ; +#783 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, -13.99999999999999467 ) ) ; +#784 = EDGE_LOOP ( 'NONE', ( #1189, #217, #334, #1731 ) ) ; +#785 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 12.00000000000000000 ) ) ; +#786 = EDGE_LOOP ( 'NONE', ( #320, #376, #1923, #1284 ) ) ; +#787 = CARTESIAN_POINT ( 'NONE', ( 0.2377478263363202171, -32.51220108913953766, 2.516499141398995221 ) ) ; +#788 = ORIENTED_EDGE ( 'NONE', *, *, #736, .T. ) ; +#789 = EDGE_CURVE ( 'NONE', #1093, #1872, #881, .T. ) ; +#790 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -38.00000000000000000, 20.00000000000000000 ) ) ; +#791 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736766036E-17 ) ) ; +#792 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#793 = EDGE_CURVE ( 'NONE', #804, #380, #688, .T. ) ; +#794 = AXIS2_PLACEMENT_3D ( 'NONE', #1234, #271, #1385 ) ; +#795 = LINE ( 'NONE', #750, #669 ) ; +#796 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 12.00000000000000000 ) ) ; +#797 = EDGE_LOOP ( 'NONE', ( #464, #1880, #649, #1962 ) ) ; +#798 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -37.49999999999999289, 7.137500000000001066 ) ) ; +#799 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, 12.37500000000000000 ) ) ; +#800 = SURFACE_STYLE_USAGE ( .BOTH. , #1117 ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, -17.49999999999999645 ) ) ; +#802 = EDGE_LOOP ( 'NONE', ( #2037, #1440 ) ) ; +#803 = LINE ( 'NONE', #615, #1660 ) ; +#804 = VERTEX_POINT ( 'NONE', #713 ) ; +#805 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#806 = EDGE_CURVE ( 'NONE', #1109, #696, #285, .T. ) ; +#807 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#808 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#809 = ORIENTED_EDGE ( 'NONE', *, *, #712, .F. ) ; +#810 = CYLINDRICAL_SURFACE ( 'NONE', #820, 1.750000000000001776 ) ; +#811 = ORIENTED_EDGE ( 'NONE', *, *, #1118, .T. ) ; +#812 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#813 = LINE ( 'NONE', #851, #10 ) ; +#814 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#815 = VERTEX_POINT ( 'NONE', #1375 ) ; +#816 = VERTEX_POINT ( 'NONE', #418 ) ; +#817 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, 0.0000000000000000000 ) ) ; +#818 = VECTOR ( 'NONE', #447, 1000.000000000000000 ) ; +#819 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -38.00000000000000000, 0.0000000000000000000 ) ) ; +#820 = AXIS2_PLACEMENT_3D ( 'NONE', #1033, #255, #1992 ) ; +#821 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#822 = EDGE_LOOP ( 'NONE', ( #1852, #906 ) ) ; +#823 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 17.50000000000000355 ) ) ; +#824 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 1.820199164926735280 ) ) ; +#825 = EDGE_LOOP ( 'NONE', ( #1831, #637, #655, #1783, #631 ) ) ; +#826 = MANIFOLD_SOLID_BREP ( 'scr cbore Cut-Extrude2', #206 ) ; +#827 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#828 = EDGE_CURVE ( 'NONE', #569, #1507, #1930, .T. ) ; +#829 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, 2.524999999999998579 ) ) ; +#830 = AXIS2_PLACEMENT_3D ( 'NONE', #1577, #1563, #1710 ) ; +#831 = ORIENTED_EDGE ( 'NONE', *, *, #526, .T. ) ; +#832 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#833 = VECTOR ( 'NONE', #175, 1000.000000000000000 ) ; +#834 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#835 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, -1.459372823788700896E-15 ) ) ; +#836 = CARTESIAN_POINT ( 'NONE', ( -1.566830076739620825, -35.03760517738894720, 1.980897887713130912 ) ) ; +#837 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#838 = AXIS2_PLACEMENT_3D ( 'NONE', #469, #1442, #1739 ) ; +#839 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736766036E-17 ) ) ; +#840 = EDGE_CURVE ( 'NONE', #483, #1141, #172, .T. ) ; +#841 = VECTOR ( 'NONE', #448, 1000.000000000000000 ) ; +#842 = ADVANCED_FACE ( 'NONE', ( #375 ), #534, .F. ) ; +#843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#844 = VERTEX_POINT ( 'NONE', #252 ) ; +#845 = ORIENTED_EDGE ( 'NONE', *, *, #1478, .F. ) ; +#846 = CARTESIAN_POINT ( 'NONE', ( 1.076505167563247545, -35.63425552073616132, 2.286233149419639510 ) ) ; +#847 = ADVANCED_FACE ( 'NONE', ( #377, #1229 ), #749, .T. ) ; +#848 = LINE ( 'NONE', #1004, #1390 ) ; +#849 = VERTEX_POINT ( 'NONE', #1354 ) ; +#850 = CIRCLE ( 'NONE', #17, 3.499999999999999556 ) ; +#851 = CARTESIAN_POINT ( 'NONE', ( -2.937499999999999556, -30.99999999999999289, 4.387500000000002842 ) ) ; +#852 = VERTEX_POINT ( 'NONE', #403 ) ; +#853 = AXIS2_PLACEMENT_3D ( 'NONE', #1552, #767, #752 ) ; +#854 = CIRCLE ( 'NONE', #1455, 10.75000000000000000 ) ; +#855 = ORIENTED_EDGE ( 'NONE', *, *, #1008, .F. ) ; +#856 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#857 = CIRCLE ( 'NONE', #1449, 1.625000000000004885 ) ; +#858 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#859 = ADVANCED_FACE ( 'NONE', ( #1451 ), #1081, .F. ) ; +#860 = CYLINDRICAL_SURFACE ( 'NONE', #978, 9.000000000000000000 ) ; +#861 = VERTEX_POINT ( 'NONE', #1370 ) ; +#862 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#863 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#864 = EDGE_CURVE ( 'NONE', #1017, #1175, #1347, .T. ) ; +#865 = AXIS2_PLACEMENT_3D ( 'NONE', #1425, #137, #640 ) ; +#866 = ORIENTED_EDGE ( 'NONE', *, *, #1983, .F. ) ; +#867 = ADVANCED_FACE ( 'NONE', ( #1135 ), #1877, .F. ) ; +#868 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#869 = ORIENTED_EDGE ( 'NONE', *, *, #1545, .T. ) ; +#870 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, -12.52712016783451965 ) ) ; +#871 = LINE ( 'NONE', #1227, #2042 ) ; +#872 = CIRCLE ( 'NONE', #647, 3.499999999999999556 ) ; +#873 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, 10.00000000000000000, 20.00000000000000000 ) ) ; +#874 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#875 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#876 = ORIENTED_EDGE ( 'NONE', *, *, #1767, .F. ) ; +#877 = EDGE_CURVE ( 'NONE', #1994, #1692, #278, .T. ) ; +#878 = ORIENTED_EDGE ( 'NONE', *, *, #1405, .T. ) ; +#879 = DIRECTION ( 'NONE', ( -1.445602896647338917E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#880 = EDGE_CURVE ( 'NONE', #1392, #844, #782, .T. ) ; +#881 = LINE ( 'NONE', #384, #1575 ) ; +#882 = EDGE_LOOP ( 'NONE', ( #693, #1183, #56, #1612 ) ) ; +#883 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#884 = VERTEX_POINT ( 'NONE', #1838 ) ; +#885 = VECTOR ( 'NONE', #1942, 1000.000000000000000 ) ; +#886 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#887 = CIRCLE ( 'NONE', #1902, 10.75000000000000000 ) ; +#888 = EDGE_CURVE ( 'NONE', #696, #1109, #1823, .T. ) ; +#889 = FACE_OUTER_BOUND ( 'NONE', #882, .T. ) ; +#890 = LINE ( 'NONE', #176, #266 ) ; +#891 = PLANE ( 'NONE', #547 ) ; +#892 = EDGE_LOOP ( 'NONE', ( #1816, #1949, #1041, #575, #915, #527, #555 ) ) ; +#893 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#894 = ORIENTED_EDGE ( 'NONE', *, *, #1191, .T. ) ; +#895 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, -2.276824562219559311E-15 ) ) ; +#896 = EDGE_CURVE ( 'NONE', #1592, #1878, #1445, .T. ) ; +#897 = ORIENTED_EDGE ( 'NONE', *, *, #896, .T. ) ; +#898 = VERTEX_POINT ( 'NONE', #735 ) ; +#899 = FACE_OUTER_BOUND ( 'NONE', #992, .T. ) ; +#900 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, 10.00000000000000178, 0.0000000000000000000 ) ) ; +#901 = EDGE_LOOP ( 'NONE', ( #1632, #708 ) ) ; +#902 = SURFACE_STYLE_USAGE ( .BOTH. , #1989 ) ; +#903 = ADVANCED_FACE ( 'NONE', ( #758 ), #891, .T. ) ; +#904 = FACE_OUTER_BOUND ( 'NONE', #1509, .T. ) ; +#905 = PLANE ( 'NONE', #1571 ) ; +#906 = ORIENTED_EDGE ( 'NONE', *, *, #806, .T. ) ; +#907 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#908 = ORIENTED_EDGE ( 'NONE', *, *, #1512, .F. ) ; +#909 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#910 = EDGE_CURVE ( 'NONE', #519, #316, #1244, .T. ) ; +#911 = ORIENTED_EDGE ( 'NONE', *, *, #303, .T. ) ; +#912 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -38.00000000000000000, 0.0000000000000000000 ) ) ; +#913 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#914 = CIRCLE ( 'NONE', #1670, 1.625000000000004885 ) ; +#915 = ORIENTED_EDGE ( 'NONE', *, *, #1583, .F. ) ; +#916 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -38.00000000000000000, 12.00000000000000000 ) ) ; +#917 = FACE_OUTER_BOUND ( 'NONE', #1684, .T. ) ; +#918 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, 14.00000000000000533 ) ) ; +#919 = ORIENTED_EDGE ( 'NONE', *, *, #1128, .T. ) ; +#920 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#921 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#922 = CARTESIAN_POINT ( 'NONE', ( -2.937499999999999556, -37.49999999999999289, 4.387500000000002842 ) ) ; +#923 = EDGE_CURVE ( 'NONE', #1108, #1758, #630, .T. ) ; +#924 = EDGE_LOOP ( 'NONE', ( #91, #1808, #894, #230, #1847 ) ) ; +#925 = CIRCLE ( 'NONE', #1009, 1.750000000000001554 ) ; +#926 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, 0.0000000000000000000 ) ) ; +#927 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#928 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -31.00000000000000000, 12.00000000000000000 ) ) ; +#929 = EDGE_LOOP ( 'NONE', ( #1182, #629, #364, #553 ) ) ; +#930 = PLANE ( 'NONE', #163 ) ; +#931 = ORIENTED_EDGE ( 'NONE', *, *, #1973, .F. ) ; +#932 = CYLINDRICAL_SURFACE ( 'NONE', #122, 1.625000000000004885 ) ; +#933 = LINE ( 'NONE', #322, #1250 ) ; +#934 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -41.85000000000000142, 15.47287983216548035 ) ) ; +#935 = VECTOR ( 'NONE', #1569, 1000.000000000000000 ) ; +#936 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -37.49999999999999289, 7.137500000000001066 ) ) ; +#937 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, 20.00000000000000000 ) ) ; +#938 = ORIENTED_EDGE ( 'NONE', *, *, #177, .F. ) ; +#939 = EDGE_CURVE ( 'NONE', #1017, #1331, #576, .T. ) ; +#940 = AXIS2_PLACEMENT_3D ( 'NONE', #1193, #357, #1502 ) ; +#941 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, 14.00000000000000533 ) ) ; +#942 = FACE_BOUND ( 'NONE', #740, .T. ) ; +#943 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#944 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#945 = LINE ( 'NONE', #1862, #60 ) ; +#946 = ORIENTED_EDGE ( 'NONE', *, *, #99, .F. ) ; +#947 = ORIENTED_EDGE ( 'NONE', *, *, #459, .T. ) ; +#948 = EDGE_CURVE ( 'NONE', #605, #1378, #1320, .T. ) ; +#949 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#950 = AXIS2_PLACEMENT_3D ( 'NONE', #1833, #227, #1855 ) ; +#951 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -31.00000000000000000, 6.742744735705047177 ) ) ; +#952 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#953 = FACE_OUTER_BOUND ( 'NONE', #1230, .T. ) ; +#954 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 1.820199164926735946 ) ) ; +#955 = ORIENTED_EDGE ( 'NONE', *, *, #124, .F. ) ; +#956 = VECTOR ( 'NONE', #504, 1000.000000000000000 ) ; +#957 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#958 = CYLINDRICAL_SURFACE ( 'NONE', #1955, 3.500000000000000000 ) ; +#959 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#960 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#961 = ORIENTED_EDGE ( 'NONE', *, *, #1740, .F. ) ; +#962 = EDGE_LOOP ( 'NONE', ( #136, #100, #1414, #1305 ) ) ; +#963 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, 14.00000000000000533 ) ) ; +#964 = ORIENTED_EDGE ( 'NONE', *, *, #526, .F. ) ; +#965 = EDGE_CURVE ( 'NONE', #1174, #1161, #1636, .T. ) ; +#966 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#967 = FACE_OUTER_BOUND ( 'NONE', #1839, .T. ) ; +#968 = CYLINDRICAL_SURFACE ( 'NONE', #1020, 1.625000000000004885 ) ; +#969 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -38.00000000000000000, 6.742744735705047177 ) ) ; +#970 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#971 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#972 = ORIENTED_EDGE ( 'NONE', *, *, #1883, .T. ) ; +#973 = PLANE ( 'NONE', #638 ) ; +#974 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#975 = EDGE_CURVE ( 'NONE', #1422, #9, #803, .T. ) ; +#976 = FACE_OUTER_BOUND ( 'NONE', #1987, .T. ) ; +#977 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#978 = AXIS2_PLACEMENT_3D ( 'NONE', #1256, #152, #807 ) ; +#979 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#980 = ORIENTED_EDGE ( 'NONE', *, *, #1633, .F. ) ; +#981 = ORIENTED_EDGE ( 'NONE', *, *, #1061, .F. ) ; +#982 = SURFACE_STYLE_FILL_AREA ( #641 ) ; +#983 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#984 = CIRCLE ( 'NONE', #194, 3.499999999999999556 ) ; +#985 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, 20.00000000000000000 ) ) ; +#986 = FACE_OUTER_BOUND ( 'NONE', #1376, .T. ) ; +#987 = AXIS2_PLACEMENT_3D ( 'NONE', #439, #778, #1257 ) ; +#988 = ORIENTED_EDGE ( 'NONE', *, *, #96, .F. ) ; +#989 = EDGE_CURVE ( 'NONE', #1274, #249, #1792, .T. ) ; +#990 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#991 = FACE_OUTER_BOUND ( 'NONE', #1661, .T. ) ; +#992 = EDGE_LOOP ( 'NONE', ( #972, #1990, #964, #1327 ) ) ; +#993 = CARTESIAN_POINT ( 'NONE', ( -1.513868622913652207, -35.13480948354850852, 2.022250185110620713 ) ) ; +#994 = VECTOR ( 'NONE', #145, 1000.000000000000000 ) ; +#995 = AXIS2_PLACEMENT_3D ( 'NONE', #1613, #960, #494 ) ; +#996 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#997 = ORIENTED_EDGE ( 'NONE', *, *, #228, .F. ) ; +#998 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#999 = ORIENTED_EDGE ( 'NONE', *, *, #191, .F. ) ; +#1000 = ORIENTED_EDGE ( 'NONE', *, *, #1372, .F. ) ; +#1001 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1002 = VERTEX_POINT ( 'NONE', #117 ) ; +#1003 = ORIENTED_EDGE ( 'NONE', *, *, #1554, .F. ) ; +#1004 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, -10.75000000000000000 ) ) ; +#1005 = EDGE_LOOP ( 'NONE', ( #2015, #472, #171, #347 ) ) ; +#1006 = CARTESIAN_POINT ( 'NONE', ( 0.5819684402028172387, -35.90437358222666830, 2.459459128312195819 ) ) ; +#1007 = PRODUCT ( 'gimbal_brkt_back_181126', 'gimbal_brkt_back_181126', '', ( #1436 ) ) ; +#1008 = EDGE_CURVE ( 'NONE', #1331, #414, #385, .T. ) ; +#1009 = AXIS2_PLACEMENT_3D ( 'NONE', #394, #101, #587 ) ; +#1010 = VERTEX_POINT ( 'NONE', #2051 ) ; +#1011 = VECTOR ( 'NONE', #513, 1000.000000000000000 ) ; +#1012 = CIRCLE ( 'NONE', #1107, 9.000000000000000000 ) ; +#1013 = CARTESIAN_POINT ( 'NONE', ( 1.522931045854593712, -35.14111946159705013, 2.017275682648749235 ) ) ; +#1014 = ADVANCED_FACE ( 'NONE', ( #747 ), #493, .F. ) ; +#1015 = EDGE_LOOP ( 'NONE', ( #315, #523, #1095, #1177 ) ) ; +#1016 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, -15.62500000000000000 ) ) ; +#1017 = VERTEX_POINT ( 'NONE', #1564 ) ; +#1018 = FACE_OUTER_BOUND ( 'NONE', #1846, .T. ) ; +#1019 = CYLINDRICAL_SURFACE ( 'NONE', #408, 2.524999999999999911 ) ; +#1020 = AXIS2_PLACEMENT_3D ( 'NONE', #567, #1364, #1680 ) ; +#1021 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1022 = EDGE_CURVE ( 'NONE', #654, #1511, #1099, .T. ) ; +#1023 = CYLINDRICAL_SURFACE ( 'NONE', #1437, 3.499999999999999556 ) ; +#1024 = CYLINDRICAL_SURFACE ( 'NONE', #780, 1.750000000000001776 ) ; +#1025 = ADVANCED_FACE ( 'NONE', ( #1842, #1258 ), #1689, .T. ) ; +#1026 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 15.62500000000001066 ) ) ; +#1027 = VERTEX_POINT ( 'NONE', #1893 ) ; +#1028 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1029 = VERTEX_POINT ( 'NONE', #107 ) ; +#1030 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -38.00000000000000000, 0.0000000000000000000 ) ) ; +#1031 = EDGE_CURVE ( 'NONE', #483, #405, #719, .T. ) ; +#1032 = LINE ( 'NONE', #1462, #1011 ) ; +#1033 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 20.00000000000000000 ) ) ; +#1034 = ORIENTED_EDGE ( 'NONE', *, *, #83, .T. ) ; +#1035 = EDGE_CURVE ( 'NONE', #844, #1161, #1779, .T. ) ; +#1036 = VECTOR ( 'NONE', #814, 1000.000000000000000 ) ; +#1037 = ORIENTED_EDGE ( 'NONE', *, *, #1212, .F. ) ; +#1038 = CARTESIAN_POINT ( 'NONE', ( -0.4678795832438639168, -35.94037999532388739, 2.483991202826114186 ) ) ; +#1039 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1040 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1041 = ORIENTED_EDGE ( 'NONE', *, *, #337, .T. ) ; +#1042 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1043 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, 12.37500000000000000 ) ) ; +#1044 = CIRCLE ( 'NONE', #1290, 3.500000000000000000 ) ; +#1045 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1046 = EDGE_CURVE ( 'NONE', #596, #852, #1044, .T. ) ; +#1047 = AXIS2_PLACEMENT_3D ( 'NONE', #883, #1363, #573 ) ; +#1048 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, 14.00000000000000533 ) ) ; +#1049 = ORIENTED_EDGE ( 'NONE', *, *, #475, .T. ) ; +#1050 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, -1.459372823788700896E-15 ) ) ; +#1051 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1052 = CIRCLE ( 'NONE', #1160, 2.524999999999999911 ) ; +#1053 = ORIENTED_EDGE ( 'NONE', *, *, #1405, .F. ) ; +#1054 = FACE_OUTER_BOUND ( 'NONE', #924, .T. ) ; +#1055 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, 10.00000000000000000, 20.00000000000000000 ) ) ; +#1056 = FACE_OUTER_BOUND ( 'NONE', #751, .T. ) ; +#1057 = LINE ( 'NONE', #554, #604 ) ; +#1058 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1059 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1060 = EDGE_LOOP ( 'NONE', ( #188, #1899 ) ) ; +#1061 = EDGE_CURVE ( 'NONE', #1994, #1860, #1690, .T. ) ; +#1062 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#1063 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1064 = ADVANCED_FACE ( 'NONE', ( #1056 ), #1192, .F. ) ; +#1065 = EDGE_LOOP ( 'NONE', ( #1666, #897, #1077, #1938 ) ) ; +#1066 = CYLINDRICAL_SURFACE ( 'NONE', #14, 10.75000000000000000 ) ; +#1067 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1068 = CYLINDRICAL_SURFACE ( 'NONE', #339, 3.499999999999999556 ) ; +#1069 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1070 = CIRCLE ( 'NONE', #1871, 3.499999999999999556 ) ; +#1071 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1072 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1073 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'gimbal_brkt_back_181126', ( #826, #2048 ), #520 ) ; +#1074 = AXIS2_PLACEMENT_3D ( 'NONE', #521, #1618, #1972 ) ; +#1075 = ORIENTED_EDGE ( 'NONE', *, *, #42, .T. ) ; +#1076 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1077 = ORIENTED_EDGE ( 'NONE', *, *, #291, .T. ) ; +#1078 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1079 = ORIENTED_EDGE ( 'NONE', *, *, #598, .F. ) ; +#1080 = FACE_BOUND ( 'NONE', #2053, .T. ) ; +#1081 = CYLINDRICAL_SURFACE ( 'NONE', #1787, 3.499999999999999556 ) ; +#1082 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1083 = VERTEX_POINT ( 'NONE', #799 ) ; +#1084 = FACE_OUTER_BOUND ( 'NONE', #1876, .T. ) ; +#1085 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, 20.00000000000000000 ) ) ; +#1086 = VECTOR ( 'NONE', #75, 1000.000000000000000 ) ; +#1087 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #489, 'design' ) ; +#1088 = EDGE_LOOP ( 'NONE', ( #1874, #1474 ) ) ; +#1089 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 4.387500000000002842 ) ) ; +#1090 = EDGE_CURVE ( 'NONE', #1196, #1820, #422, .T. ) ; +#1091 = AXIS2_PLACEMENT_3D ( 'NONE', #1313, #340, #1001 ) ; +#1092 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1093 = VERTEX_POINT ( 'NONE', #313 ) ; +#1094 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -44.35000000000000142, -15.47287983216546969 ) ) ; +#1095 = ORIENTED_EDGE ( 'NONE', *, *, #325, .F. ) ; +#1096 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, 15.47287983216548035 ) ) ; +#1097 = EDGE_LOOP ( 'NONE', ( #509, #387, #12, #1357 ) ) ; +#1098 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, 0.0000000000000000000 ) ) ; +#1099 = LINE ( 'NONE', #600, #672 ) ; +#1100 = ADVANCED_FACE ( 'NONE', ( #681 ), #41, .F. ) ; +#1101 = EDGE_CURVE ( 'NONE', #133, #1083, #2062, .T. ) ; +#1102 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, 14.00000000000000533 ) ) ; +#1103 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #84 ) ) ; +#1104 = EDGE_LOOP ( 'NONE', ( #2035, #1750, #961, #424 ) ) ; +#1105 = ORIENTED_EDGE ( 'NONE', *, *, #1829, .T. ) ; +#1106 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, -12.37499999999998934 ) ) ; +#1107 = AXIS2_PLACEMENT_3D ( 'NONE', #673, #336, #156 ) ; +#1108 = VERTEX_POINT ( 'NONE', #1116 ) ; +#1109 = VERTEX_POINT ( 'NONE', #487 ) ; +#1110 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, 14.00000000000000533 ) ) ; +#1111 = CARTESIAN_POINT ( 'NONE', ( -2.937499999999999556, -30.99999999999999289, 4.387500000000002842 ) ) ; +#1112 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, 14.00000000000000533 ) ) ; +#1113 = ORIENTED_EDGE ( 'NONE', *, *, #793, .T. ) ; +#1114 = LINE ( 'NONE', #1269, #1139 ) ; +#1115 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -38.00000000000000000, 20.00000000000000000 ) ) ; +#1116 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, 15.62500000000001066 ) ) ; +#1117 = SURFACE_SIDE_STYLE ('',( #982 ) ) ; +#1118 = EDGE_CURVE ( 'NONE', #1926, #1197, #1052, .T. ) ; +#1119 = CYLINDRICAL_SURFACE ( 'NONE', #208, 1.625000000000003775 ) ; +#1120 = VECTOR ( 'NONE', #1667, 1000.000000000000000 ) ; +#1121 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1122 = LINE ( 'NONE', #1600, #1863 ) ; +#1123 = VECTOR ( 'NONE', #503, 1000.000000000000000 ) ; +#1124 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1125 = ORIENTED_EDGE ( 'NONE', *, *, #1681, .T. ) ; +#1126 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1127 = ORIENTED_EDGE ( 'NONE', *, *, #560, .T. ) ; +#1128 = EDGE_CURVE ( 'NONE', #1492, #321, #455, .T. ) ; +#1129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1130 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#1131 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001554, -34.01018270469172933, 1.820199164926737057 ) ) ; +#1132 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#1133 = PLANE ( 'NONE', #1308 ) ; +#1134 = ORIENTED_EDGE ( 'NONE', *, *, #1215, .F. ) ; +#1135 = FACE_OUTER_BOUND ( 'NONE', #1800, .T. ) ; +#1136 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1137 = FACE_OUTER_BOUND ( 'NONE', #825, .T. ) ; +#1138 = ORIENTED_EDGE ( 'NONE', *, *, #840, .F. ) ; +#1139 = VECTOR ( 'NONE', #1265, 1000.000000000000000 ) ; +#1140 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #1007, .NOT_KNOWN. ) ; +#1141 = VERTEX_POINT ( 'NONE', #1604 ) ; +#1142 = VERTEX_POINT ( 'NONE', #1578 ) ; +#1143 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, 14.00000000000000533 ) ) ; +#1144 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1145 = EDGE_CURVE ( 'NONE', #1975, #1392, #179, .T. ) ; +#1146 = CARTESIAN_POINT ( 'NONE', ( -1.700215301760179987, -33.77711599244971552, 1.870347773594607910 ) ) ; +#1147 = ORIENTED_EDGE ( 'NONE', *, *, #701, .T. ) ; +#1148 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1149 = EDGE_CURVE ( 'NONE', #1027, #682, #1526, .T. ) ; +#1150 = CIRCLE ( 'NONE', #392, 3.499999999999999556 ) ; +#1151 = CARTESIAN_POINT ( 'NONE', ( 2.937499999999999556, -30.99999999999999289, 7.137500000000001066 ) ) ; +#1152 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1153 = FACE_OUTER_BOUND ( 'NONE', #1065, .T. ) ; +#1154 = ORIENTED_EDGE ( 'NONE', *, *, #789, .T. ) ; +#1155 = ORIENTED_EDGE ( 'NONE', *, *, #406, .F. ) ; +#1156 = VECTOR ( 'NONE', #1702, 1000.000000000000000 ) ; +#1157 = EDGE_CURVE ( 'NONE', #1772, #682, #2054, .T. ) ; +#1158 = VECTOR ( 'NONE', #837, 1000.000000000000000 ) ; +#1159 = CARTESIAN_POINT ( 'NONE', ( -0.5811823395596810160, -35.90466981718790862, 2.459657613498689610 ) ) ; +#1160 = AXIS2_PLACEMENT_3D ( 'NONE', #1264, #791, #971 ) ; +#1161 = VERTEX_POINT ( 'NONE', #159 ) ; +#1162 = CIRCLE ( 'NONE', #82, 1.625000000000004885 ) ; +#1163 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1164 = SURFACE_STYLE_FILL_AREA ( #1537 ) ; +#1165 = LINE ( 'NONE', #1844, #1742 ) ; +#1166 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, 10.00000000000000178, 1.625000000000003775 ) ) ; +#1167 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1168 = EDGE_CURVE ( 'NONE', #1881, #1590, #358, .T. ) ; +#1169 = VERTEX_POINT ( 'NONE', #1762 ) ; +#1170 = FACE_OUTER_BOUND ( 'NONE', #76, .T. ) ; +#1171 = ADVANCED_FACE ( 'NONE', ( #58 ), #860, .T. ) ; +#1172 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -20.00000000000000000 ) ) ; +#1173 = CARTESIAN_POINT ( 'NONE', ( 1.396858905456703326, -35.32706682090083916, 2.111014620165617028 ) ) ; +#1174 = VERTEX_POINT ( 'NONE', #1748 ) ; +#1175 = VERTEX_POINT ( 'NONE', #1917 ) ; +#1176 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#1177 = ORIENTED_EDGE ( 'NONE', *, *, #1911, .F. ) ; +#1178 = CARTESIAN_POINT ( 'NONE', ( 0.8913931167346792472, -35.76011424531951377, 2.364559938071701950 ) ) ; +#1179 = EDGE_CURVE ( 'NONE', #1687, #1606, #1550, .T. ) ; +#1180 = FACE_OUTER_BOUND ( 'NONE', #398, .T. ) ; +#1181 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1182 = ORIENTED_EDGE ( 'NONE', *, *, #701, .F. ) ; +#1183 = ORIENTED_EDGE ( 'NONE', *, *, #619, .T. ) ; +#1184 = ORIENTED_EDGE ( 'NONE', *, *, #177, .T. ) ; +#1185 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -38.00000000000000000, 12.00000000000000000 ) ) ; +#1186 = ORIENTED_EDGE ( 'NONE', *, *, #965, .T. ) ; +#1187 = ADVANCED_FACE ( 'NONE', ( #1520 ), #1744, .F. ) ; +#1188 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1189 = ORIENTED_EDGE ( 'NONE', *, *, #1433, .T. ) ; +#1190 = FACE_BOUND ( 'NONE', #1060, .T. ) ; +#1191 = EDGE_CURVE ( 'NONE', #1169, #1968, #1493, .T. ) ; +#1192 = CYLINDRICAL_SURFACE ( 'NONE', #4, 1.625000000000003775 ) ; +#1193 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1194 = ORIENTED_EDGE ( 'NONE', *, *, #765, .F. ) ; +#1195 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1196 = VERTEX_POINT ( 'NONE', #388 ) ; +#1197 = VERTEX_POINT ( 'NONE', #829 ) ; +#1198 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1199 = FACE_OUTER_BOUND ( 'NONE', #1097, .T. ) ; +#1200 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1201 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1202 = EDGE_CURVE ( 'NONE', #657, #1968, #538, .T. ) ; +#1203 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1204 = ORIENTED_EDGE ( 'NONE', *, *, #1785, .T. ) ; +#1205 = EDGE_CURVE ( 'NONE', #1606, #1687, #1325, .T. ) ; +#1206 = PRESENTATION_STYLE_ASSIGNMENT (( #800 ) ) ; +#1207 = AXIS2_PLACEMENT_3D ( 'NONE', #1432, #1126, #1929 ) ; +#1208 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1209 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -6.123233995736767268E-17, -1.000000000000000000 ) ) ; +#1210 = VECTOR ( 'NONE', #1355, 1000.000000000000000 ) ; +#1211 = FACE_OUTER_BOUND ( 'NONE', #225, .T. ) ; +#1212 = EDGE_CURVE ( 'NONE', #1002, #470, #850, .T. ) ; +#1213 = FACE_BOUND ( 'NONE', #1472, .T. ) ; +#1214 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, 12.52712016783453031 ) ) ; +#1215 = EDGE_CURVE ( 'NONE', #1653, #238, #659, .T. ) ; +#1216 = AXIS2_PLACEMENT_3D ( 'NONE', #1076, #1082, #452 ) ; +#1217 = ORIENTED_EDGE ( 'NONE', *, *, #29, .F. ) ; +#1218 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 6.673258265667590727 ) ) ; +#1219 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, 10.00000000000000178, -1.625000000000003775 ) ) ; +#1220 = ORIENTED_EDGE ( 'NONE', *, *, #1785, .F. ) ; +#1221 = VECTOR ( 'NONE', #944, 1000.000000000000000 ) ; +#1222 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1223 = ADVANCED_FACE ( 'NONE', ( #904 ), #524, .T. ) ; +#1224 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1225 = EDGE_CURVE ( 'NONE', #316, #1649, #606, .T. ) ; +#1226 = AXIS2_PLACEMENT_3D ( 'NONE', #834, #40, #1457 ) ; +#1227 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 10.50000000000000533 ) ) ; +#1228 = ORIENTED_EDGE ( 'NONE', *, *, #690, .T. ) ; +#1229 = FACE_OUTER_BOUND ( 'NONE', #1905, .T. ) ; +#1230 = EDGE_LOOP ( 'NONE', ( #1640, #1601, #38, #1300, #173, #1747, #2024, #1134, #845, #86, #1843, #1000 ) ) ; +#1231 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1232 = ADVANCED_FACE ( 'NONE', ( #199 ), #781, .F. ) ; +#1233 = FACE_BOUND ( 'NONE', #1909, .T. ) ; +#1234 = CARTESIAN_POINT ( 'NONE', ( -61.99999999999999289, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1235 = EDGE_CURVE ( 'NONE', #1991, #1530, #1032, .T. ) ; +#1236 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1237 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 3.500000000000000000 ) ) ; +#1238 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 7.137500000000001066 ) ) ; +#1239 = AXIS2_PLACEMENT_3D ( 'NONE', #1481, #529, #1167 ) ; +#1240 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, -17.49999999999999645 ) ) ; +#1241 = ORIENTED_EDGE ( 'NONE', *, *, #1643, .F. ) ; +#1242 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1243 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1244 = LINE ( 'NONE', #438, #1156 ) ; +#1245 = CIRCLE ( 'NONE', #1278, 1.750000000000001554 ) ; +#1246 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#1247 = VERTEX_POINT ( 'NONE', #1298 ) ; +#1248 = CIRCLE ( 'NONE', #559, 1.625000000000003775 ) ; +#1249 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1250 = VECTOR ( 'NONE', #667, 1000.000000000000000 ) ; +#1251 = ORIENTED_EDGE ( 'NONE', *, *, #1035, .T. ) ; +#1252 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, 14.00000000000000533 ) ) ; +#1253 = EDGE_CURVE ( 'NONE', #268, #281, #1662, .T. ) ; +#1254 = AXIS2_PLACEMENT_3D ( 'NONE', #949, #977, #1129 ) ; +#1255 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -17.49999999999999645 ) ) ; +#1256 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, 0.0000000000000000000 ) ) ; +#1257 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1258 = FACE_OUTER_BOUND ( 'NONE', #1810, .T. ) ; +#1259 = ORIENTED_EDGE ( 'NONE', *, *, #1447, .F. ) ; +#1260 = LINE ( 'NONE', #148, #841 ) ; +#1261 = ORIENTED_EDGE ( 'NONE', *, *, #1263, .T. ) ; +#1262 = EDGE_LOOP ( 'NONE', ( #34, #241, #1708, #1037 ) ) ; +#1263 = EDGE_CURVE ( 'NONE', #238, #197, #1491, .T. ) ; +#1264 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, -1.459372823788700896E-15 ) ) ; +#1265 = DIRECTION ( 'NONE', ( -1.577021341797098053E-16, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1266 = ORIENTED_EDGE ( 'NONE', *, *, #1858, .T. ) ; +#1267 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 6.123233995736767268E-17, 1.000000000000000000 ) ) ; +#1268 = ORIENTED_EDGE ( 'NONE', *, *, #923, .F. ) ; +#1269 = CARTESIAN_POINT ( 'NONE', ( 2.937499999999999556, -37.49999999999999289, 7.137500000000001066 ) ) ; +#1270 = VECTOR ( 'NONE', #1513, 1000.000000000000000 ) ; +#1271 = ORIENTED_EDGE ( 'NONE', *, *, #1420, .F. ) ; +#1272 = CARTESIAN_POINT ( 'NONE', ( -0.5808003746104986043, -32.59512723314627181, 2.459789763493370529 ) ) ; +#1273 = LINE ( 'NONE', #969, #610 ) ; +#1274 = VERTEX_POINT ( 'NONE', #1353 ) ; +#1275 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1276 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#1277 = ORIENTED_EDGE ( 'NONE', *, *, #1561, .T. ) ; +#1278 = AXIS2_PLACEMENT_3D ( 'NONE', #78, #1521, #863 ) ; +#1279 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1280 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #1130, 'distance_accuracy_value', 'NONE'); +#1281 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1282 = VECTOR ( 'NONE', #48, 1000.000000000000000 ) ; +#1283 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -44.35000000000000142, 0.0000000000000000000 ) ) ; +#1284 = ORIENTED_EDGE ( 'NONE', *, *, #1963, .T. ) ; +#1285 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1286 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1287 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #190, #62, #354, #1013, #1173, #360, #846, #1178, #1794, #1006, #204, #200, #218, #683 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 2, 2, 4 ), + ( 0.008512232951964052510, 0.009221370799936789986, 0.009930508647909529196, 0.01028507757189589186, 0.01063964649588225453, 0.01099421541986861546, 0.01134878434385497813 ), + .UNSPECIFIED. ) ; +#1288 = EDGE_CURVE ( 'NONE', #844, #268, #2044, .T. ) ; +#1289 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1290 = AXIS2_PLACEMENT_3D ( 'NONE', #1415, #1136, #1275 ) ; +#1291 = ORIENTED_EDGE ( 'NONE', *, *, #1525, .T. ) ; +#1292 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, 12.52712016783453031 ) ) ; +#1293 = STYLED_ITEM ( 'NONE', ( #1206 ), #1073 ) ; +#1294 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, -13.99999999999999467 ) ) ; +#1295 = CIRCLE ( 'NONE', #421, 1.625000000000003775 ) ; +#1296 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, -15.47287983216546969 ) ) ; +#1297 = ORIENTED_EDGE ( 'NONE', *, *, #1321, .T. ) ; +#1298 = CARTESIAN_POINT ( 'NONE', ( 3.092233167847067027E-16, -31.00000000000000000, -2.525000000000002132 ) ) ; +#1299 = ORIENTED_EDGE ( 'NONE', *, *, #475, .F. ) ; +#1300 = ORIENTED_EDGE ( 'NONE', *, *, #1841, .F. ) ; +#1301 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1302 = AXIS2_PLACEMENT_3D ( 'NONE', #1721, #289, #1391 ) ; +#1303 = EDGE_CURVE ( 'NONE', #884, #1692, #1595, .T. ) ; +#1304 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#1305 = ORIENTED_EDGE ( 'NONE', *, *, #1767, .T. ) ; +#1306 = DIRECTION ( 'NONE', ( -1.000000000000000000, -9.656470692094402128E-33, -1.577021341797098300E-16 ) ) ; +#1307 = EDGE_LOOP ( 'NONE', ( #919, #1228, #710, #68 ) ) ; +#1308 = AXIS2_PLACEMENT_3D ( 'NONE', #1115, #656, #1286 ) ; +#1309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1310 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1311 = ORIENTED_EDGE ( 'NONE', *, *, #793, .F. ) ; +#1312 = FACE_BOUND ( 'NONE', #1598, .T. ) ; +#1313 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1314 = PLANE ( 'NONE', #1720 ) ; +#1315 = VERTEX_POINT ( 'NONE', #728 ) ; +#1316 = ORIENTED_EDGE ( 'NONE', *, *, #96, .T. ) ; +#1317 = EDGE_LOOP ( 'NONE', ( #26, #1825, #2047, #1558 ) ) ; +#1318 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1319 = ADVANCED_FACE ( 'NONE', ( #474, #1180 ), #416, .T. ) ; +#1320 = LINE ( 'NONE', #785, #1795 ) ; +#1321 = EDGE_CURVE ( 'NONE', #1083, #133, #6, .T. ) ; +#1322 = ORIENTED_EDGE ( 'NONE', *, *, #1420, .T. ) ; +#1323 = CARTESIAN_POINT ( 'NONE', ( -2.937499999999999556, -37.49999999999999289, 4.387500000000002842 ) ) ; +#1324 = VECTOR ( 'NONE', #1309, 1000.000000000000000 ) ; +#1325 = CIRCLE ( 'NONE', #1705, 1.625000000000004885 ) ; +#1326 = CARTESIAN_POINT ( 'NONE', ( 3.092233167847066534E-16, -44.35000000000000142, -2.525000000000001243 ) ) ; +#1327 = ORIENTED_EDGE ( 'NONE', *, *, #1719, .T. ) ; +#1328 = CIRCLE ( 'NONE', #1410, 3.499999999999999556 ) ; +#1329 = AXIS2_PLACEMENT_3D ( 'NONE', #19, #1765, #821 ) ; +#1330 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -34.99999999999999289, 6.673258265667590727 ) ) ; +#1331 = VERTEX_POINT ( 'NONE', #251 ) ; +#1332 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, 15.62500000000001066 ) ) ; +#1333 = EDGE_CURVE ( 'NONE', #405, #449, #925, .T. ) ; +#1334 = AXIS2_PLACEMENT_3D ( 'NONE', #33, #1471, #1759 ) ; +#1335 = CIRCLE ( 'NONE', #128, 1.750000000000001554 ) ; +#1336 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1337 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1338 = ADVANCED_FACE ( 'NONE', ( #1658 ), #1119, .F. ) ; +#1339 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #1293 ), #1443 ) ; +#1340 = ORIENTED_EDGE ( 'NONE', *, *, #15, .F. ) ; +#1341 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1342 = VERTEX_POINT ( 'NONE', #1218 ) ; +#1343 = EDGE_CURVE ( 'NONE', #1342, #745, #742, .T. ) ; +#1344 = AXIS2_PLACEMENT_3D ( 'NONE', #1301, #343, #1188 ) ; +#1345 = AXIS2_PLACEMENT_3D ( 'NONE', #918, #440, #1864 ) ; +#1346 = ORIENTED_EDGE ( 'NONE', *, *, #736, .F. ) ; +#1347 = LINE ( 'NONE', #1219, #1086 ) ; +#1348 = ADVANCED_FACE ( 'NONE', ( #1054 ), #1456, .F. ) ; +#1349 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1350 = ORIENTED_EDGE ( 'NONE', *, *, #1570, .T. ) ; +#1351 = VECTOR ( 'NONE', #1476, 1000.000000000000000 ) ; +#1352 = CIRCLE ( 'NONE', #407, 9.000000000000000000 ) ; +#1353 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, -15.62500000000000000 ) ) ; +#1354 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -34.99999999999999289, 8.893530001090725889 ) ) ; +#1355 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1356 = DIRECTION ( 'NONE', ( -1.577021341797098053E-16, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1357 = ORIENTED_EDGE ( 'NONE', *, *, #560, .F. ) ; +#1358 = EDGE_CURVE ( 'NONE', #898, #703, #914, .T. ) ; +#1359 = AXIS2_PLACEMENT_3D ( 'NONE', #1993, #1209, #1367 ) ; +#1360 = LINE ( 'NONE', #155, #44 ) ; +#1361 = CIRCLE ( 'NONE', #1207, 10.75000000000000000 ) ; +#1362 = LINE ( 'NONE', #1620, #516 ) ; +#1363 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1364 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1365 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -38.00000000000000000, 1.625000000000003775 ) ) ; +#1366 = EDGE_LOOP ( 'NONE', ( #57, #168, #140, #536, #1553, #1946, #276, #931, #2028, #1271, #2007, #1835, #1733, #1438, #1220, #1340, #1261, #831, #295, #1796 ) ) ; +#1367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#1368 = ORIENTED_EDGE ( 'NONE', *, *, #1433, .F. ) ; +#1369 = ADVANCED_FACE ( 'NONE', ( #1671, #2005 ), #905, .F. ) ; +#1370 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, -10.75000000000000000 ) ) ; +#1371 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 15.62500000000001066 ) ) ; +#1372 = EDGE_CURVE ( 'NONE', #308, #1479, #730, .T. ) ; +#1373 = CYLINDRICAL_SURFACE ( 'NONE', #314, 1.625000000000003775 ) ; +#1374 = VERTEX_POINT ( 'NONE', #564 ) ; +#1375 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, 17.50000000000000355 ) ) ; +#1376 = EDGE_LOOP ( 'NONE', ( #143, #1277, #1105, #1346 ) ) ; +#1377 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, -13.99999999999999467 ) ) ; +#1378 = VERTEX_POINT ( 'NONE', #79 ) ; +#1379 = PLANE ( 'NONE', #2026 ) ; +#1380 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1381 = ORIENTED_EDGE ( 'NONE', *, *, #910, .F. ) ; +#1382 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1383 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1384 = VECTOR ( 'NONE', #466, 1000.000000000000000 ) ; +#1385 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1386 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1387 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1388 = CIRCLE ( 'NONE', #853, 3.499999999999999556 ) ; +#1389 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1390 = VECTOR ( 'NONE', #1279, 1000.000000000000000 ) ; +#1391 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1392 = VERTEX_POINT ( 'NONE', #242 ) ; +#1393 = VECTOR ( 'NONE', #226, 1000.000000000000000 ) ; +#1394 = EDGE_CURVE ( 'NONE', #1784, #465, #2020, .T. ) ; +#1395 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1396 = ORIENTED_EDGE ( 'NONE', *, *, #72, .F. ) ; +#1397 = ADVANCED_FACE ( 'NONE', ( #488, #1080 ), #1517, .T. ) ; +#1398 = FACE_OUTER_BOUND ( 'NONE', #293, .T. ) ; +#1399 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, -15.47287983216546969 ) ) ; +#1400 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, -13.99999999999999467 ) ) ; +#1401 = ORIENTED_EDGE ( 'NONE', *, *, #51, .T. ) ; +#1402 = CARTESIAN_POINT ( 'NONE', ( 1.086997906974743966, -32.86083826352680859, 2.286047155302535216 ) ) ; +#1403 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -38.00000000000000000, 0.0000000000000000000 ) ) ; +#1404 = AXIS2_PLACEMENT_3D ( 'NONE', #1894, #454, #651 ) ; +#1405 = EDGE_CURVE ( 'NONE', #1342, #804, #1587, .T. ) ; +#1406 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#1407 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1408 = VECTOR ( 'NONE', #1243, 1000.000000000000000 ) ; +#1409 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, -15.47287983216546969 ) ) ; +#1410 = AXIS2_PLACEMENT_3D ( 'NONE', #1922, #1285, #502 ) ; +#1411 = AXIS2_PLACEMENT_3D ( 'NONE', #1945, #1152, #990 ) ; +#1412 = ORIENTED_EDGE ( 'NONE', *, *, #1845, .F. ) ; +#1413 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1414 = ORIENTED_EDGE ( 'NONE', *, *, #459, .F. ) ; +#1415 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -44.35000000000000142, 0.0000000000000000000 ) ) ; +#1416 = CARTESIAN_POINT ( 'NONE', ( 6.003610141966405925E-20, -32.49999999999998579, 2.524999999999997691 ) ) ; +#1417 = CARTESIAN_POINT ( 'NONE', ( 0.5801136940433045952, -32.59490192134397546, 2.459942897537122253 ) ) ; +#1418 = LINE ( 'NONE', #2000, #372 ) ; +#1419 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1420 = EDGE_CURVE ( 'NONE', #281, #569, #1150, .T. ) ; +#1421 = AXIS2_PLACEMENT_3D ( 'NONE', #774, #625, #115 ) ; +#1422 = VERTEX_POINT ( 'NONE', #2036 ) ; +#1423 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1424 = CARTESIAN_POINT ( 'NONE', ( -0.1184652527168298247, -32.49999999999998579, 2.524999999999997691 ) ) ; +#1425 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1426 = VECTOR ( 'NONE', #256, 1000.000000000000000 ) ; +#1427 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1428 = FACE_BOUND ( 'NONE', #1603, .T. ) ; +#1429 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1430 = FACE_BOUND ( 'NONE', #389, .T. ) ; +#1431 = ORIENTED_EDGE ( 'NONE', *, *, #1858, .F. ) ; +#1432 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#1433 = EDGE_CURVE ( 'NONE', #1653, #1530, #1941, .T. ) ; +#1434 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1435 = AXIS2_PLACEMENT_3D ( 'NONE', #181, #70, #1798 ) ; +#1436 = PRODUCT_CONTEXT ( 'NONE', #1276, 'mechanical' ) ; +#1437 = AXIS2_PLACEMENT_3D ( 'NONE', #1919, #966, #1908 ) ; +#1438 = ORIENTED_EDGE ( 'NONE', *, *, #674, .F. ) ; +#1439 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001110, -34.01222214484566564, 1.820199164926735502 ) ) ; +#1440 = ORIENTED_EDGE ( 'NONE', *, *, #632, .T. ) ; +#1441 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, 20.00000000000000000 ) ) ; +#1442 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1443 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1622 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #957, #318, #1 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1444 = EDGE_LOOP ( 'NONE', ( #938, #1113, #866, #582 ) ) ; +#1445 = CIRCLE ( 'NONE', #247, 3.499999999999999556 ) ; +#1446 = VERTEX_POINT ( 'NONE', #1729 ) ; +#1447 = EDGE_CURVE ( 'NONE', #1141, #483, #1559, .T. ) ; +#1448 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1449 = AXIS2_PLACEMENT_3D ( 'NONE', #1480, #1628, #533 ) ; +#1450 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #954, #1439, #1146, #2067, #496, #311, #1602, #1272, #1594, #22, #1424, #1916 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 2, 4 ), + ( 0.002839695972683139048, 0.003549386387221661714, 0.004259076801760183079, 0.004968767216298705311, 0.005323612423567966427, 0.005678457630837227543 ), + .UNSPECIFIED. ) ; +#1451 = FACE_OUTER_BOUND ( 'NONE', #611, .T. ) ; +#1452 = VECTOR ( 'NONE', #1021, 1000.000000000000000 ) ; +#1453 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -38.00000000000000000, -20.00000000000000000 ) ) ; +#1454 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1455 = AXIS2_PLACEMENT_3D ( 'NONE', #542, #1809, #858 ) ; +#1456 = CYLINDRICAL_SURFACE ( 'NONE', #73, 1.750000000000001776 ) ; +#1457 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1458 = EDGE_LOOP ( 'NONE', ( #71, #1268 ) ) ; +#1459 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1460 = FACE_OUTER_BOUND ( 'NONE', #1015, .T. ) ; +#1461 = ORIENTED_EDGE ( 'NONE', *, *, #1939, .T. ) ; +#1462 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -38.00000000000000000, 20.00000000000000000 ) ) ; +#1463 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 12.00000000000000000 ) ) ; +#1464 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1465 = ADVANCED_FACE ( 'NONE', ( #288 ), #160, .T. ) ; +#1466 = ORIENTED_EDGE ( 'NONE', *, *, #495, .T. ) ; +#1467 = EDGE_CURVE ( 'NONE', #1315, #1029, #887, .T. ) ; +#1468 = CARTESIAN_POINT ( 'NONE', ( -0.8982582038093437360, -35.76935929332204722, 2.370023449065801202 ) ) ; +#1469 = AXIS2_PLACEMENT_3D ( 'NONE', #1048, #1042, #1222 ) ; +#1470 = VERTEX_POINT ( 'NONE', #1904 ) ; +#1471 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1472 = EDGE_LOOP ( 'NONE', ( #189, #287 ) ) ; +#1473 = CARTESIAN_POINT ( 'NONE', ( -0.2377924647283358728, -35.98774295473355522, 2.516461472753437345 ) ) ; +#1474 = ORIENTED_EDGE ( 'NONE', *, *, #337, .F. ) ; +#1475 = ADVANCED_FACE ( 'NONE', ( #1813 ), #1536, .F. ) ; +#1476 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1477 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1478 = EDGE_CURVE ( 'NONE', #1470, #1653, #718, .T. ) ; +#1479 = VERTEX_POINT ( 'NONE', #1094 ) ; +#1480 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1481 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 6.673258265667590727 ) ) ; +#1482 = CIRCLE ( 'NONE', #603, 3.499999999999999556 ) ; +#1483 = ADVANCED_FACE ( 'NONE', ( #1312, #1018 ), #763, .T. ) ; +#1484 = ORIENTED_EDGE ( 'NONE', *, *, #83, .F. ) ; +#1485 = ORIENTED_EDGE ( 'NONE', *, *, #1740, .T. ) ; +#1486 = AXIS2_PLACEMENT_3D ( 'NONE', #895, #561, #92 ) ; +#1487 = ORIENTED_EDGE ( 'NONE', *, *, #356, .F. ) ; +#1488 = LINE ( 'NONE', #1166, #1158 ) ; +#1489 = ADVANCED_FACE ( 'NONE', ( #1213, #2008, #1428, #157 ), #1717, .F. ) ; +#1490 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 6.123233995736767268E-17 ) ) ; +#1491 = LINE ( 'NONE', #676, #167 ) ; +#1492 = VERTEX_POINT ( 'NONE', #1399 ) ; +#1493 = LINE ( 'NONE', #1940, #1393 ) ; +#1494 = ORIENTED_EDGE ( 'NONE', *, *, #1669, .T. ) ; +#1495 = CYLINDRICAL_SURFACE ( 'NONE', #838, 3.499999999999999556 ) ; +#1496 = ORIENTED_EDGE ( 'NONE', *, *, #877, .T. ) ; +#1497 = ORIENTED_EDGE ( 'NONE', *, *, #1525, .F. ) ; +#1498 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -38.00000000000000000, -20.00000000000000000 ) ) ; +#1499 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1500 = EDGE_CURVE ( 'NONE', #470, #1479, #306, .T. ) ; +#1501 = AXIS2_PLACEMENT_3D ( 'NONE', #1102, #1875, #125 ) ; +#1502 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1503 = FACE_OUTER_BOUND ( 'NONE', #784, .T. ) ; +#1504 = VECTOR ( 'NONE', #1413, 1000.000000000000000 ) ; +#1505 = EDGE_LOOP ( 'NONE', ( #8, #1793, #329, #1932 ) ) ; +#1506 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1507 = VERTEX_POINT ( 'NONE', #1240 ) ; +#1508 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1509 = EDGE_LOOP ( 'NONE', ( #997, #731, #1718, #623 ) ) ; +#1510 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1511 = VERTEX_POINT ( 'NONE', #934 ) ; +#1512 = EDGE_CURVE ( 'NONE', #1378, #1315, #1656, .T. ) ; +#1513 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1514 = EDGE_CURVE ( 'NONE', #249, #312, #677, .T. ) ; +#1515 = AXIS2_PLACEMENT_3D ( 'NONE', #77, #396, #1538 ) ; +#1516 = ORIENTED_EDGE ( 'NONE', *, *, #1179, .F. ) ; +#1517 = PLANE ( 'NONE', #1859 ) ; +#1518 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1519 = EDGE_LOOP ( 'NONE', ( #1003, #1887, #1947, #668 ) ) ; +#1520 = FACE_OUTER_BOUND ( 'NONE', #1677, .T. ) ; +#1521 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -6.123233995736767268E-17, -1.000000000000000000 ) ) ; +#1522 = VECTOR ( 'NONE', #1652, 1000.000000000000000 ) ; +#1523 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#1524 = ORIENTED_EDGE ( 'NONE', *, *, #1554, .T. ) ; +#1525 = EDGE_CURVE ( 'NONE', #1878, #654, #1070, .T. ) ; +#1526 = LINE ( 'NONE', #305, #402 ) ; +#1527 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1528 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, 12.37500000000000000 ) ) ; +#1529 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1530 = VERTEX_POINT ( 'NONE', #613 ) ; +#1531 = EDGE_CURVE ( 'NONE', #431, #1093, #463, .T. ) ; +#1532 = AXIS2_PLACEMENT_3D ( 'NONE', #755, #1699, #2030 ) ; +#1533 = CIRCLE ( 'NONE', #1344, 3.499999999999999556 ) ; +#1534 = LINE ( 'NONE', #2033, #263 ) ; +#1535 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1536 = CYLINDRICAL_SURFACE ( 'NONE', #1216, 3.500000000000000000 ) ; +#1537 = FILL_AREA_STYLE ('',( #1848 ) ) ; +#1538 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1539 = ORIENTED_EDGE ( 'NONE', *, *, #1983, .T. ) ; +#1540 = ORIENTED_EDGE ( 'NONE', *, *, #1225, .F. ) ; +#1541 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -31.00000000000000000, 6.673258265667590727 ) ) ; +#1542 = ORIENTED_EDGE ( 'NONE', *, *, #1179, .T. ) ; +#1543 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1544 = AXIS2_PLACEMENT_3D ( 'NONE', #1518, #1059, #574 ) ; +#1545 = EDGE_CURVE ( 'NONE', #1141, #449, #1895, .T. ) ; +#1546 = AXIS2_PLACEMENT_3D ( 'NONE', #1172, #1181, #862 ) ; +#1547 = ADVANCED_FACE ( 'NONE', ( #2064 ), #1024, .F. ) ; +#1548 = ORIENTED_EDGE ( 'NONE', *, *, #1288, .T. ) ; +#1549 = EDGE_LOOP ( 'NONE', ( #2059, #1485, #714, #1586, #1299, #725 ) ) ; +#1550 = CIRCLE ( 'NONE', #940, 1.625000000000004885 ) ; +#1551 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -38.00000000000000000, 0.0000000000000000000 ) ) ; +#1552 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1553 = ORIENTED_EDGE ( 'NONE', *, *, #2050, .T. ) ; +#1554 = EDGE_CURVE ( 'NONE', #861, #884, #1361, .T. ) ; +#1555 = ADVANCED_FACE ( 'NONE', ( #889 ), #570, .F. ) ; +#1556 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1557 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, -6.123233995736767268E-17 ) ) ; +#1558 = ORIENTED_EDGE ( 'NONE', *, *, #2057, .F. ) ; +#1559 = CIRCLE ( 'NONE', #830, 1.750000000000001776 ) ; +#1560 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1561 = EDGE_CURVE ( 'NONE', #465, #45, #1788, .T. ) ; +#1562 = ORIENTED_EDGE ( 'NONE', *, *, #303, .F. ) ; +#1563 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1564 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -38.00000000000000000, -1.625000000000003775 ) ) ; +#1565 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999998010, -44.35000000000000142, -20.00000000000000000 ) ) ; +#1566 = ORIENTED_EDGE ( 'NONE', *, *, #1343, .T. ) ; +#1567 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1568 = DIRECTION ( 'NONE', ( 1.577021341797098300E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1569 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1570 = EDGE_CURVE ( 'NONE', #745, #849, #362, .T. ) ; +#1571 = AXIS2_PLACEMENT_3D ( 'NONE', #88, #235, #1508 ) ; +#1572 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -38.00000000000000000, 14.00000000000000533 ) ) ; +#1573 = ORIENTED_EDGE ( 'NONE', *, *, #840, .T. ) ; +#1574 = CIRCLE ( 'NONE', #108, 9.000000000000000000 ) ; +#1575 = VECTOR ( 'NONE', #1805, 1000.000000000000000 ) ; +#1576 = EDGE_LOOP ( 'NONE', ( #164, #1484 ) ) ; +#1577 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 12.00000000000000000 ) ) ; +#1578 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, 2.524999999999997691 ) ) ; +#1579 = LINE ( 'NONE', #1498, #1522 ) ; +#1580 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1581 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1582 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 20.00000000000000000 ) ) ; +#1583 = EDGE_CURVE ( 'NONE', #1968, #1943, #1450, .T. ) ; +#1584 = CIRCLE ( 'NONE', #549, 1.625000000000004885 ) ; +#1585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1586 = ORIENTED_EDGE ( 'NONE', *, *, #1343, .F. ) ; +#1587 = CIRCLE ( 'NONE', #726, 9.000000000000000000 ) ; +#1588 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -44.35000000000000142, 0.0000000000000000000 ) ) ; +#1589 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 12.37500000000000000 ) ) ; +#1590 = VERTEX_POINT ( 'NONE', #824 ) ; +#1591 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1592 = VERTEX_POINT ( 'NONE', #650 ) ; +#1593 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -38.00000000000000000, 8.945787085040540987 ) ) ; +#1594 = CARTESIAN_POINT ( 'NONE', ( -0.4699160557681888450, -32.56014636357340919, 2.483631944018450888 ) ) ; +#1595 = LINE ( 'NONE', #1523, #1707 ) ; +#1596 = EDGE_LOOP ( 'NONE', ( #1866, #1548, #297, #499, #727, #1737, #1125, #1822, #1155, #46, #1204, #1186 ) ) ; +#1597 = FILL_AREA_STYLE_COLOUR ( '', #832 ) ; +#1598 = EDGE_LOOP ( 'NONE', ( #497, #1657 ) ) ; +#1599 = AXIS2_PLACEMENT_3D ( 'NONE', #381, #1203, #1499 ) ; +#1600 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, -3.500000000000000000 ) ) ; +#1601 = ORIENTED_EDGE ( 'NONE', *, *, #1654, .F. ) ; +#1602 = CARTESIAN_POINT ( 'NONE', ( -0.9005564842349491617, -32.73170167055693014, 2.369325229182408954 ) ) ; +#1603 = EDGE_LOOP ( 'NONE', ( #116, #811 ) ) ; +#1604 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 12.00000000000000000 ) ) ; +#1605 = FACE_BOUND ( 'NONE', #1458, .T. ) ; +#1606 = VERTEX_POINT ( 'NONE', #1589 ) ; +#1607 = EDGE_CURVE ( 'NONE', #1592, #1774, #2010, .T. ) ; +#1608 = AXIS2_PLACEMENT_3D ( 'NONE', #468, #1585, #1738 ) ; +#1609 = ORIENTED_EDGE ( 'NONE', *, *, #1619, .T. ) ; +#1610 = PLANE ( 'NONE', #1435 ) ; +#1611 = AXIS2_PLACEMENT_3D ( 'NONE', #187, #680, #1624 ) ; +#1612 = ORIENTED_EDGE ( 'NONE', *, *, #522, .F. ) ; +#1613 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1614 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1615 = ORIENTED_EDGE ( 'NONE', *, *, #1061, .T. ) ; +#1616 = CARTESIAN_POINT ( 'NONE', ( -2.937499999999999556, -37.49999999999999289, 4.387500000000002842 ) ) ; +#1617 = EDGE_LOOP ( 'NONE', ( #366, #608, #467, #1686 ) ) ; +#1618 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1619 = EDGE_CURVE ( 'NONE', #1175, #414, #43, .T. ) ; +#1620 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1621 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1622 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #957, 'distance_accuracy_value', 'NONE'); +#1623 = AXIS2_PLACEMENT_3D ( 'NONE', #1477, #1310, #1625 ) ; +#1624 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1625 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1626 = ADVANCED_FACE ( 'NONE', ( #182 ), #1133, .F. ) ; +#1627 = ORIENTED_EDGE ( 'NONE', *, *, #1303, .T. ) ; +#1628 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1629 = ORIENTED_EDGE ( 'NONE', *, *, #1101, .F. ) ; +#1630 = CIRCLE ( 'NONE', #1544, 1.625000000000004885 ) ; +#1631 = FACE_OUTER_BOUND ( 'NONE', #901, .T. ) ; +#1632 = ORIENTED_EDGE ( 'NONE', *, *, #765, .T. ) ; +#1633 = EDGE_CURVE ( 'NONE', #281, #321, #620, .T. ) ; +#1634 = AXIS2_PLACEMENT_3D ( 'NONE', #963, #1434, #16 ) ; +#1635 = ORIENTED_EDGE ( 'NONE', *, *, #1215, .T. ) ; +#1636 = LINE ( 'NONE', #1096, #1221 ) ; +#1637 = ORIENTED_EDGE ( 'NONE', *, *, #522, .T. ) ; +#1638 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 1.625000000000003775 ) ) ; +#1639 = ORIENTED_EDGE ( 'NONE', *, *, #1755, .T. ) ; +#1640 = ORIENTED_EDGE ( 'NONE', *, *, #1870, .T. ) ; +#1641 = LINE ( 'NONE', #1332, #1452 ) ; +#1642 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, -1.459372823788700896E-15 ) ) ; +#1643 = EDGE_CURVE ( 'NONE', #696, #596, #231, .T. ) ; +#1644 = ADVANCED_FACE ( 'NONE', ( #20 ), #1019, .F. ) ; +#1645 = VERTEX_POINT ( 'NONE', #1296 ) ; +#1646 = LINE ( 'NONE', #743, #2061 ) ; +#1647 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -12.37499999999998934 ) ) ; +#1648 = CYLINDRICAL_SURFACE ( 'NONE', #671, 3.499999999999999556 ) ; +#1649 = VERTEX_POINT ( 'NONE', #338 ) ; +#1650 = LINE ( 'NONE', #1528, #1408 ) ; +#1651 = ADVANCED_FACE ( 'NONE', ( #544 ), #1698, .F. ) ; +#1652 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1653 = VERTEX_POINT ( 'NONE', #1936 ) ; +#1654 = EDGE_CURVE ( 'NONE', #239, #1196, #111, .T. ) ; +#1655 = PLANE ( 'NONE', #540 ) ; +#1656 = LINE ( 'NONE', #2043, #310 ) ; +#1657 = ORIENTED_EDGE ( 'NONE', *, *, #1829, .F. ) ; +#1658 = FACE_OUTER_BOUND ( 'NONE', #614, .T. ) ; +#1659 = CARTESIAN_POINT ( 'NONE', ( -1.319812631134047676, -35.40446540364265360, 2.154461461507374942 ) ) ; +#1660 = VECTOR ( 'NONE', #1406, 1000.000000000000000 ) ; +#1661 = EDGE_LOOP ( 'NONE', ( #363, #2003, #1540, #1381 ) ) ; +#1662 = LINE ( 'NONE', #985, #274 ) ; +#1663 = VECTOR ( 'NONE', #1062, 1000.000000000000000 ) ; +#1664 = ADVANCED_FACE ( 'NONE', ( #1631, #1865 ), #30, .T. ) ; +#1665 = ORIENTED_EDGE ( 'NONE', *, *, #353, .F. ) ; +#1666 = ORIENTED_EDGE ( 'NONE', *, *, #1607, .F. ) ; +#1667 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1668 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, -2.276824562219559311E-15 ) ) ; +#1669 = EDGE_CURVE ( 'NONE', #884, #556, #890, .T. ) ; +#1670 = AXIS2_PLACEMENT_3D ( 'NONE', #1380, #425, #1198 ) ; +#1671 = FACE_BOUND ( 'NONE', #1826, .T. ) ; +#1672 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1673 = ORIENTED_EDGE ( 'NONE', *, *, #124, .T. ) ; +#1674 = VECTOR ( 'NONE', #1051, 1000.000000000000000 ) ; +#1675 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1676 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -41.85000000000000142, -15.47287983216546969 ) ) ; +#1677 = EDGE_LOOP ( 'NONE', ( #1711, #1194, #1127, #652 ) ) ; +#1678 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1679 = AXIS2_PLACEMENT_3D ( 'NONE', #138, #301, #601 ) ; +#1680 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1681 = EDGE_CURVE ( 'NONE', #1645, #316, #1362, .T. ) ; +#1682 = ORIENTED_EDGE ( 'NONE', *, *, #1235, .T. ) ; +#1683 = ADVANCED_FACE ( 'NONE', ( #986 ), #456, .F. ) ; +#1684 = EDGE_LOOP ( 'NONE', ( #1997, #1524, #1627, #1539, #1075, #1350 ) ) ; +#1685 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -6.123233995736767268E-17, -1.000000000000000000 ) ) ; +#1686 = ORIENTED_EDGE ( 'NONE', *, *, #391, .F. ) ; +#1687 = VERTEX_POINT ( 'NONE', #1371 ) ; +#1688 = FACE_OUTER_BOUND ( 'NONE', #415, .T. ) ; +#1689 = PLANE ( 'NONE', #1532 ) ; +#1690 = LINE ( 'NONE', #764, #694 ) ; +#1691 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1692 = VERTEX_POINT ( 'NONE', #2017 ) ; +#1693 = ORIENTED_EDGE ( 'NONE', *, *, #1939, .F. ) ; +#1694 = AXIS2_PLACEMENT_3D ( 'NONE', #970, #13, #2060 ) ; +#1695 = LINE ( 'NONE', #1016, #1282 ) ; +#1696 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1697 = VECTOR ( 'NONE', #1614, 1000.000000000000000 ) ; +#1698 = CYLINDRICAL_SURFACE ( 'NONE', #233, 1.625000000000003775 ) ; +#1699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1700 = EDGE_LOOP ( 'NONE', ( #220, #988, #678, #760, #908 ) ) ; +#1701 = ORIENTED_EDGE ( 'NONE', *, *, #864, .T. ) ; +#1702 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1703 = CARTESIAN_POINT ( 'NONE', ( 2.937500000000000000, -37.49999999999999289, 4.387500000000002842 ) ) ; +#1704 = EDGE_CURVE ( 'NONE', #1881, #1169, #304, .T. ) ; +#1705 = AXIS2_PLACEMENT_3D ( 'NONE', #685, #1786, #349 ) ; +#1706 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1707 = VECTOR ( 'NONE', #741, 1000.000000000000000 ) ; +#1708 = ORIENTED_EDGE ( 'NONE', *, *, #577, .T. ) ; +#1709 = LINE ( 'NONE', #1981, #1663 ) ; +#1710 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1711 = ORIENTED_EDGE ( 'NONE', *, *, #1149, .F. ) ; +#1712 = CIRCLE ( 'NONE', #1404, 3.499999999999999556 ) ; +#1713 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1714 = ORIENTED_EDGE ( 'NONE', *, *, #619, .F. ) ; +#1715 = PLANE ( 'NONE', #370 ) ; +#1716 = ORIENTED_EDGE ( 'NONE', *, *, #939, .F. ) ; +#1717 = PLANE ( 'NONE', #794 ) ; +#1718 = ORIENTED_EDGE ( 'NONE', *, *, #2012, .T. ) ; +#1719 = EDGE_CURVE ( 'NONE', #197, #1511, #1723, .T. ) ; +#1720 = AXIS2_PLACEMENT_3D ( 'NONE', #1323, #699, #1490 ) ; +#1721 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1722 = FACE_BOUND ( 'NONE', #589, .T. ) ; +#1723 = LINE ( 'NONE', #729, #2034 ) ; +#1724 = LINE ( 'NONE', #937, #697 ) ; +#1725 = CARTESIAN_POINT ( 'NONE', ( 6.003610141966405925E-20, -32.49999999999998579, 2.524999999999997691 ) ) ; +#1726 = LINE ( 'NONE', #1214, #1120 ) ; +#1727 = AXIS2_PLACEMENT_3D ( 'NONE', #1377, #909, #1691 ) ; +#1728 = ORIENTED_EDGE ( 'NONE', *, *, #1090, .F. ) ; +#1729 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -38.00000000000000000, -1.625000000000003775 ) ) ; +#1730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1731 = ORIENTED_EDGE ( 'NONE', *, *, #1478, .T. ) ; +#1732 = CARTESIAN_POINT ( 'NONE', ( 1.390009074273582446, -33.18105038485865066, 2.109316774473295908 ) ) ; +#1733 = ORIENTED_EDGE ( 'NONE', *, *, #443, .F. ) ; +#1734 = ORIENTED_EDGE ( 'NONE', *, *, #1963, .F. ) ; +#1735 = EDGE_CURVE ( 'NONE', #1274, #214, #543, .T. ) ; +#1736 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1737 = ORIENTED_EDGE ( 'NONE', *, *, #512, .T. ) ; +#1738 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1739 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1740 = EDGE_CURVE ( 'NONE', #1315, #849, #264, .T. ) ; +#1741 = AXIS2_PLACEMENT_3D ( 'NONE', #1246, #1696, #430 ) ; +#1742 = VECTOR ( 'NONE', #1356, 1000.000000000000000 ) ; +#1743 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 1.820199164926735280 ) ) ; +#1744 = CYLINDRICAL_SURFACE ( 'NONE', #1091, 3.500000000000000000 ) ; +#1745 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1746 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1747 = ORIENTED_EDGE ( 'NONE', *, *, #1719, .F. ) ; +#1748 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, 15.47287983216548035 ) ) ; +#1749 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1750 = ORIENTED_EDGE ( 'NONE', *, *, #1901, .F. ) ; +#1751 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1752 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1753 = AXIS2_PLACEMENT_3D ( 'NONE', #612, #626, #1886 ) ; +#1754 = FACE_BOUND ( 'NONE', #501, .T. ) ; +#1755 = EDGE_CURVE ( 'NONE', #465, #1784, #436, .T. ) ; +#1756 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, 10.00000000000000178, 0.0000000000000000000 ) ) ; +#1757 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#1758 = VERTEX_POINT ( 'NONE', #1043 ) ; +#1759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1760 = ORIENTED_EDGE ( 'NONE', *, *, #139, .F. ) ; +#1761 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 17.50000000000000355 ) ) ; +#1762 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 4.387500000000002842 ) ) ; +#1763 = CARTESIAN_POINT ( 'NONE', ( -2.937499999999999556, -37.49999999999999289, 4.387500000000002842 ) ) ; +#1764 = ORIENTED_EDGE ( 'NONE', *, *, #1303, .F. ) ; +#1765 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1766 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, -12.37499999999998934 ) ) ; +#1767 = EDGE_CURVE ( 'NONE', #1860, #114, #795, .T. ) ; +#1768 = LINE ( 'NONE', #1985, #506 ) ; +#1769 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -25.75380592228742671, -12.37499999999998934 ) ) ; +#1770 = AXIS2_PLACEMENT_3D ( 'NONE', #1071, #1527, #1678 ) ; +#1771 = CARTESIAN_POINT ( 'NONE', ( -1.390683167366634665, -35.31802919324471901, 2.108860912110023911 ) ) ; +#1772 = VERTEX_POINT ( 'NONE', #253 ) ; +#1773 = AXIS2_PLACEMENT_3D ( 'NONE', #621, #1751, #1581 ) ; +#1774 = VERTEX_POINT ( 'NONE', #90 ) ; +#1775 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, -3.500000000000000000 ) ) ; +#1776 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1777 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1778 = DIRECTION ( 'NONE', ( 1.445602896647338917E-16, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1779 = LINE ( 'NONE', #1085, #65 ) ; +#1780 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 20.00000000000000000 ) ) ; +#1781 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, 10.00000000000000178, 0.0000000000000000000 ) ) ; +#1782 = CYLINDRICAL_SURFACE ( 'NONE', #382, 9.000000000000000000 ) ; +#1783 = ORIENTED_EDGE ( 'NONE', *, *, #1202, .T. ) ; +#1784 = VERTEX_POINT ( 'NONE', #410 ) ; +#1785 = EDGE_CURVE ( 'NONE', #1991, #1174, #945, .T. ) ; +#1786 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1787 = AXIS2_PLACEMENT_3D ( 'NONE', #259, #1200, #81 ) ; +#1788 = LINE ( 'NONE', #1769, #1123 ) ; +#1789 = ORIENTED_EDGE ( 'NONE', *, *, #724, .T. ) ; +#1790 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1791 = ORIENTED_EDGE ( 'NONE', *, *, #939, .T. ) ; +#1792 = CIRCLE ( 'NONE', #662, 1.625000000000004885 ) ; +#1793 = ORIENTED_EDGE ( 'NONE', *, *, #1854, .T. ) ; +#1794 = CARTESIAN_POINT ( 'NONE', ( 0.7927958263961742968, -35.81432541135480818, 2.399812752461969900 ) ) ; +#1795 = VECTOR ( 'NONE', #1242, 1000.000000000000000 ) ; +#1796 = ORIENTED_EDGE ( 'NONE', *, *, #139, .T. ) ; +#1797 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 1.820199164926735946 ) ) ; +#1798 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1799 = CIRCLE ( 'NONE', #1599, 1.625000000000003775 ) ; +#1800 = EDGE_LOOP ( 'NONE', ( #1217, #1396, #532, #52 ) ) ; +#1801 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -44.35000000000000142, 15.47287983216548035 ) ) ; +#1802 = EDGE_CURVE ( 'NONE', #417, #239, #591, .T. ) ; +#1803 = ADVANCED_FACE ( 'NONE', ( #1211 ), #968, .F. ) ; +#1804 = FACE_OUTER_BOUND ( 'NONE', #1262, .T. ) ; +#1805 = DIRECTION ( 'NONE', ( 1.577021341797098053E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1806 = CYLINDRICAL_SURFACE ( 'NONE', #1226, 3.499999999999999556 ) ; +#1807 = ORIENTED_EDGE ( 'NONE', *, *, #1031, .T. ) ; +#1808 = ORIENTED_EDGE ( 'NONE', *, *, #246, .F. ) ; +#1809 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1810 = EDGE_LOOP ( 'NONE', ( #1251, #411, #775, #2069 ) ) ; +#1811 = LINE ( 'NONE', #1237, #85 ) ; +#1812 = CIRCLE ( 'NONE', #1773, 3.499999999999999556 ) ; +#1813 = FACE_OUTER_BOUND ( 'NONE', #510, .T. ) ; +#1814 = ORIENTED_EDGE ( 'NONE', *, *, #598, .T. ) ; +#1815 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -38.00000000000000000, 15.62500000000001066 ) ) ; +#1816 = ORIENTED_EDGE ( 'NONE', *, *, #1118, .F. ) ; +#1817 = AXIS2_PLACEMENT_3D ( 'NONE', #1092, #597, #280 ) ; +#1818 = EDGE_LOOP ( 'NONE', ( #734, #1516 ) ) ; +#1819 = ORIENTED_EDGE ( 'NONE', *, *, #1333, .T. ) ; +#1820 = VERTEX_POINT ( 'NONE', #429 ) ; +#1821 = ADVANCED_FACE ( 'NONE', ( #899 ), #1648, .F. ) ; +#1822 = ORIENTED_EDGE ( 'NONE', *, *, #1225, .T. ) ; +#1823 = CIRCLE ( 'NONE', #766, 3.500000000000000000 ) ; +#1824 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1825 = ORIENTED_EDGE ( 'NONE', *, *, #590, .T. ) ; +#1826 = EDGE_LOOP ( 'NONE', ( #1138, #1259 ) ) ; +#1827 = ORIENTED_EDGE ( 'NONE', *, *, #219, .F. ) ; +#1828 = DIRECTION ( 'NONE', ( 1.577021341797098053E-16, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1829 = EDGE_CURVE ( 'NONE', #45, #1952, #1630, .T. ) ; +#1830 = AXIS2_PLACEMENT_3D ( 'NONE', #169, #1306, #331 ) ; +#1831 = ORIENTED_EDGE ( 'NONE', *, *, #1704, .F. ) ; +#1832 = ADVANCED_FACE ( 'NONE', ( #753 ), #1066, .T. ) ; +#1833 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 12.00000000000000000 ) ) ; +#1834 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -34.99999999999999289, 8.893530001090725889 ) ) ; +#1835 = ORIENTED_EDGE ( 'NONE', *, *, #495, .F. ) ; +#1836 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.445602896647338917E-16, -0.0000000000000000000 ) ) ; +#1837 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1838 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -34.99999999999999289, 8.945787085040540987 ) ) ; +#1839 = EDGE_LOOP ( 'NONE', ( #955, #1734, #359, #180 ) ) ; +#1840 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, 0.0000000000000000000 ) ) ; +#1841 = EDGE_CURVE ( 'NONE', #654, #417, #1726, .T. ) ; +#1842 = FACE_BOUND ( 'NONE', #802, .T. ) ; +#1843 = ORIENTED_EDGE ( 'NONE', *, *, #2050, .F. ) ; +#1844 = CARTESIAN_POINT ( 'NONE', ( 2.937499999999999556, -30.99999999999999289, 7.137500000000001066 ) ) ; +#1845 = EDGE_CURVE ( 'NONE', #1083, #1606, #1650, .T. ) ; +#1846 = EDGE_LOOP ( 'NONE', ( #49, #355, #1487, #1728 ) ) ; +#1847 = ORIENTED_EDGE ( 'NONE', *, *, #462, .T. ) ; +#1848 = FILL_AREA_STYLE_COLOUR ( '', #250 ) ; +#1849 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1850 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1851 = FACE_OUTER_BOUND ( 'NONE', #1954, .T. ) ; +#1852 = ORIENTED_EDGE ( 'NONE', *, *, #888, .T. ) ; +#1853 = FACE_OUTER_BOUND ( 'NONE', #929, .T. ) ; +#1854 = EDGE_CURVE ( 'NONE', #1820, #1002, #1646, .T. ) ; +#1855 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1856 = FACE_OUTER_BOUND ( 'NONE', #2022, .T. ) ; +#1857 = CARTESIAN_POINT ( 'NONE', ( 2.755455298081529987E-16, -34.24999999999998579, 7.137500000000001066 ) ) ; +#1858 = EDGE_CURVE ( 'NONE', #1109, #852, #1811, .T. ) ; +#1859 = AXIS2_PLACEMENT_3D ( 'NONE', #1672, #943, #460 ) ; +#1860 = VERTEX_POINT ( 'NONE', #928 ) ; +#1861 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1862 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1863 = VECTOR ( 'NONE', #514, 1000.000000000000000 ) ; +#1864 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1865 = FACE_BOUND ( 'NONE', #704, .T. ) ; +#1866 = ORIENTED_EDGE ( 'NONE', *, *, #1035, .F. ) ; +#1867 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1868 = AXIS2_PLACEMENT_3D ( 'NONE', #1252, #296, #2052 ) ; +#1869 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1870 = EDGE_CURVE ( 'NONE', #308, #1196, #1724, .T. ) ; +#1871 = AXIS2_PLACEMENT_3D ( 'NONE', #1448, #1736, #1752 ) ; +#1872 = VERTEX_POINT ( 'NONE', #1111 ) ; +#1873 = ORIENTED_EDGE ( 'NONE', *, *, #577, .F. ) ; +#1874 = ORIENTED_EDGE ( 'NONE', *, *, #262, .F. ) ; +#1875 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1876 = EDGE_LOOP ( 'NONE', ( #1714, #481, #980, #1322 ) ) ; +#1877 = CYLINDRICAL_SURFACE ( 'NONE', #1966, 3.499999999999999556 ) ; +#1878 = VERTEX_POINT ( 'NONE', #1900 ) ; +#1879 = CIRCLE ( 'NONE', #1753, 1.625000000000004885 ) ; +#1880 = ORIENTED_EDGE ( 'NONE', *, *, #1514, .T. ) ; +#1881 = VERTEX_POINT ( 'NONE', #1089 ) ; +#1882 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1883 = EDGE_CURVE ( 'NONE', #1511, #1592, #433, .T. ) ; +#1884 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1885 = AXIS2_PLACEMENT_3D ( 'NONE', #856, #1971, #1336 ) ; +#1886 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1887 = ORIENTED_EDGE ( 'NONE', *, *, #660, .T. ) ; +#1888 = VECTOR ( 'NONE', #299, 1000.000000000000000 ) ; +#1889 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1890 = VERTEX_POINT ( 'NONE', #1703 ) ; +#1891 = AXIS2_PLACEMENT_3D ( 'NONE', #1294, #484, #1144 ) ; +#1892 = AXIS2_PLACEMENT_3D ( 'NONE', #581, #1685, #893 ) ; +#1893 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 3.500000000000000000 ) ) ; +#1894 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -44.35000000000000142, -13.99999999999999467 ) ) ; +#1895 = LINE ( 'NONE', #1582, #594 ) ; +#1896 = ORIENTED_EDGE ( 'NONE', *, *, #2, .F. ) ; +#1897 = ORIENTED_EDGE ( 'NONE', *, *, #1704, .T. ) ; +#1898 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1899 = ORIENTED_EDGE ( 'NONE', *, *, #590, .F. ) ; +#1900 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 10.50000000000000533 ) ) ; +#1901 = EDGE_CURVE ( 'NONE', #849, #861, #319, .T. ) ; +#1902 = AXIS2_PLACEMENT_3D ( 'NONE', #1403, #2021, #1898 ) ; +#1903 = CARTESIAN_POINT ( 'NONE', ( 1.320406148116253009, -33.09620786145033833, 2.154098504137023973 ) ) ; +#1904 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -38.00000000000000000, -20.00000000000000000 ) ) ; +#1905 = EDGE_LOOP ( 'NONE', ( #571, #1497, #342, #2018 ) ) ; +#1906 = PRESENTATION_STYLE_ASSIGNMENT (( #902 ) ) ; +#1907 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -44.35000000000000142, 20.00000000000000000 ) ) ; +#1908 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1909 = EDGE_LOOP ( 'NONE', ( #240, #1639 ) ) ; +#1910 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, -12.52712016783451965 ) ) ; +#1911 = EDGE_CURVE ( 'NONE', #1422, #431, #1921, .T. ) ; +#1912 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1914 = FACE_OUTER_BOUND ( 'NONE', #1307, .T. ) ; +#1915 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1916 = CARTESIAN_POINT ( 'NONE', ( 6.003610141966405925E-20, -32.49999999999998579, 2.524999999999997691 ) ) ; +#1917 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, -1.625000000000003775 ) ) ; +#1918 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1919 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, -13.99999999999999467 ) ) ; +#1920 = ORIENTED_EDGE ( 'NONE', *, *, #1046, .T. ) ; +#1921 = LINE ( 'NONE', #275, #818 ) ; +#1922 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -41.85000000000000142, 14.00000000000000533 ) ) ; +#1923 = ORIENTED_EDGE ( 'NONE', *, *, #325, .T. ) ; +#1924 = AXIS2_PLACEMENT_3D ( 'NONE', #1395, #98, #1706 ) ; +#1925 = AXIS2_PLACEMENT_3D ( 'NONE', #1281, #150, #323 ) ; +#1926 = VERTEX_POINT ( 'NONE', #2031 ) ; +#1927 = FACE_OUTER_BOUND ( 'NONE', #797, .T. ) ; +#1928 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1929 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1930 = CIRCLE ( 'NONE', #300, 3.499999999999999556 ) ; +#1931 = VECTOR ( 'NONE', #1132, 1000.000000000000000 ) ; +#1932 = ORIENTED_EDGE ( 'NONE', *, *, #1654, .T. ) ; +#1933 = CARTESIAN_POINT ( 'NONE', ( -61.99999999999999289, -38.00000000000000000, -20.00000000000000000 ) ) ; +#1934 = ORIENTED_EDGE ( 'NONE', *, *, #2001, .T. ) ; +#1935 = VECTOR ( 'NONE', #633, 1000.000000000000000 ) ; +#1936 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, -38.00000000000000000, 20.00000000000000000 ) ) ; +#1937 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #1725, #11, #787, #471, #1417, #636, #1402, #1903, #1732, #2055, #142, #2046, #1131, #1743 ), + .UNSPECIFIED., .F., .F., + ( 4, 2, 2, 2, 2, 2, 4 ), + ( 0.005678457630837227543, 0.006032679545978083049, 0.006386901461118938556, 0.007095345291400649568, 0.007449567206541505074, 0.007803789121682360580, 0.008512232951964052510 ), + .UNSPECIFIED. ) ; +#1938 = ORIENTED_EDGE ( 'NONE', *, *, #368, .F. ) ; +#1939 = EDGE_CURVE ( 'NONE', #1374, #212, #123, .T. ) ; +#1940 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 20.00000000000000000 ) ) ; +#1941 = LINE ( 'NONE', #790, #1504 ) ; +#1942 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1943 = VERTEX_POINT ( 'NONE', #1416 ) ; +#1944 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1945 = CARTESIAN_POINT ( 'NONE', ( -47.99999999999999289, -41.85000000000000142, 0.0000000000000000000 ) ) ; +#1946 = ORIENTED_EDGE ( 'NONE', *, *, #910, .T. ) ; +#1947 = ORIENTED_EDGE ( 'NONE', *, *, #110, .T. ) ; +#1948 = CARTESIAN_POINT ( 'NONE', ( -0.1202507450276833478, -36.00000000000000000, 2.524999999999998579 ) ) ; +#1949 = ORIENTED_EDGE ( 'NONE', *, *, #219, .T. ) ; +#1950 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1951 = EDGE_CURVE ( 'NONE', #114, #1378, #622, .T. ) ; +#1952 = VERTEX_POINT ( 'NONE', #131 ) ; +#1953 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1954 = EDGE_LOOP ( 'NONE', ( #1079, #1934, #120, #999 ) ) ; +#1955 = AXIS2_PLACEMENT_3D ( 'NONE', #1915, #7, #28 ) ; +#1956 = VECTOR ( 'NONE', #1557, 1000.000000000000000 ) ; +#1957 = FACE_OUTER_BOUND ( 'NONE', #1549, .T. ) ; +#1958 = CARTESIAN_POINT ( 'NONE', ( -68.34999999999999432, 10.00000000000000000, -20.00000000000000000 ) ) ; +#1959 = PLANE ( 'NONE', #1239 ) ; +#1960 = ADVANCED_FACE ( 'NONE', ( #1853 ), #351, .F. ) ; +#1961 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1962 = ORIENTED_EDGE ( 'NONE', *, *, #1735, .F. ) ; +#1963 = EDGE_CURVE ( 'NONE', #2032, #1872, #609, .T. ) ; +#1964 = VECTOR ( 'NONE', #1567, 1000.000000000000000 ) ; +#1965 = EDGE_CURVE ( 'NONE', #214, #312, #1879, .T. ) ; +#1966 = AXIS2_PLACEMENT_3D ( 'NONE', #1510, #907, #1349 ) ; +#1967 = VECTOR ( 'NONE', #974, 1000.000000000000000 ) ; +#1968 = VERTEX_POINT ( 'NONE', #109 ) ; +#1969 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -31.00000000000000000, -9.000000000000000000 ) ) ; +#1970 = ADVANCED_FACE ( 'NONE', ( #450 ), #35, .F. ) ; +#1971 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1972 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1973 = EDGE_CURVE ( 'NONE', #1507, #1645, #1712, .T. ) ; +#1974 = AXIS2_PLACEMENT_3D ( 'NONE', #445, #1224, #1543 ) ; +#1975 = VERTEX_POINT ( 'NONE', #616 ) ; +#1976 = ORIENTED_EDGE ( 'NONE', *, *, #191, .T. ) ; +#1977 = EDGE_LOOP ( 'NONE', ( #1819, #201 ) ) ; +#1978 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #1293 ) ) ; +#1979 = ADVANCED_FACE ( 'NONE', ( #1927 ), #932, .F. ) ; +#1980 = CARTESIAN_POINT ( 'NONE', ( 23.00000000000000711, 10.00000000000000178, -1.625000000000003775 ) ) ; +#1981 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -44.35000000000000142, 2.524999999999998579 ) ) ; +#1982 = CARTESIAN_POINT ( 'NONE', ( -1.655137321621409363, -34.82948153672198544, 1.907729901610324408 ) ) ; +#1983 = EDGE_CURVE ( 'NONE', #1692, #380, #1574, .T. ) ; +#1984 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #25 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1058, #874, #97 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1985 = CARTESIAN_POINT ( 'NONE', ( 40.17499999999997584, -25.75380592228742671, 12.37500000000000000 ) ) ; +#1986 = EDGE_CURVE ( 'NONE', #682, #1772, #1998, .T. ) ; +#1987 = EDGE_LOOP ( 'NONE', ( #1764, #1494, #1316, #876, #981, #1496 ) ) ; +#1988 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, -13.99999999999999467 ) ) ; +#1989 = SURFACE_SIDE_STYLE ('',( #1164 ) ) ; +#1990 = ORIENTED_EDGE ( 'NONE', *, *, #1607, .T. ) ; +#1991 = VERTEX_POINT ( 'NONE', #1907 ) ; +#1992 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1993 = CARTESIAN_POINT ( 'NONE', ( -2.937500000000000000, -37.49999999999999289, 7.137500000000001066 ) ) ; +#1994 = VERTEX_POINT ( 'NONE', #951 ) ; +#1995 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1996 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1997 = ORIENTED_EDGE ( 'NONE', *, *, #1901, .T. ) ; +#1998 = CIRCLE ( 'NONE', #335, 3.500000000000000000 ) ; +#1999 = VECTOR ( 'NONE', #537, 1000.000000000000000 ) ; +#2000 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -41.85000000000000142, 10.50000000000000533 ) ) ; +#2001 = EDGE_CURVE ( 'NONE', #236, #1446, #1248, .T. ) ; +#2002 = AXIS2_PLACEMENT_3D ( 'NONE', #178, #1953, #1289 ) ; +#2003 = ORIENTED_EDGE ( 'NONE', *, *, #776, .T. ) ; +#2004 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2005 = FACE_OUTER_BOUND ( 'NONE', #962, .T. ) ; +#2006 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2007 = ORIENTED_EDGE ( 'NONE', *, *, #1253, .F. ) ; +#2008 = FACE_BOUND ( 'NONE', #1576, .T. ) ; +#2009 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -41.85000000000000142, 12.52712016783453031 ) ) ; +#2010 = LINE ( 'NONE', #1761, #265 ) ; +#2011 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2012 = EDGE_CURVE ( 'NONE', #1890, #1422, #1114, .T. ) ; +#2013 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, -34.99999999999999289, -9.000000000000000000 ) ) ; +#2014 = ORIENTED_EDGE ( 'NONE', *, *, #151, .F. ) ; +#2015 = ORIENTED_EDGE ( 'NONE', *, *, #546, .T. ) ; +#2016 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2017 = CARTESIAN_POINT ( 'NONE', ( -5.961157054559278912, -34.99999999999999289, 6.742744735705047177 ) ) ; +#2018 = ORIENTED_EDGE ( 'NONE', *, *, #1883, .F. ) ; +#2019 = CARTESIAN_POINT ( 'NONE', ( -1.750000000000001554, -34.24999999999998579, 7.137500000000001066 ) ) ; +#2020 = CIRCLE ( 'NONE', #2040, 1.625000000000004885 ) ; +#2021 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2022 = EDGE_LOOP ( 'NONE', ( #878, #1184, #1615, #947, #1049 ) ) ; +#2023 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2024 = ORIENTED_EDGE ( 'NONE', *, *, #1263, .F. ) ; +#2025 = VERTEX_POINT ( 'NONE', #154 ) ; +#2026 = AXIS2_PLACEMENT_3D ( 'NONE', #118, #1072, #1387 ) ; +#2027 = ADVANCED_FACE ( 'NONE', ( #1084 ), #1495, .F. ) ; +#2028 = ORIENTED_EDGE ( 'NONE', *, *, #828, .F. ) ; +#2029 = ORIENTED_EDGE ( 'NONE', *, *, #1545, .F. ) ; +#2030 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2031 = CARTESIAN_POINT ( 'NONE', ( 3.092233167847066534E-16, -44.35000000000000142, -2.525000000000001243 ) ) ; +#2032 = VERTEX_POINT ( 'NONE', #1763 ) ; +#2033 = CARTESIAN_POINT ( 'NONE', ( 43.35000000000000853, -38.00000000000000000, 20.00000000000000000 ) ) ; +#2034 = VECTOR ( 'NONE', #1996, 1000.000000000000000 ) ; +#2035 = ORIENTED_EDGE ( 'NONE', *, *, #660, .F. ) ; +#2036 = CARTESIAN_POINT ( 'NONE', ( 2.937499999999999556, -37.49999999999999289, 7.137500000000001066 ) ) ; +#2037 = ORIENTED_EDGE ( 'NONE', *, *, #1358, .T. ) ; +#2038 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2039 = EDGE_CURVE ( 'NONE', #1943, #1142, #664, .T. ) ; +#2040 = AXIS2_PLACEMENT_3D ( 'NONE', #733, #886, #2004 ) ; +#2041 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2042 = VECTOR ( 'NONE', #1529, 1000.000000000000000 ) ; +#2043 = CARTESIAN_POINT ( 'NONE', ( 6.038842945440721088, -38.00000000000000000, 6.673258265667590727 ) ) ; +#2044 = LINE ( 'NONE', #2009, #348 ) ; +#2045 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2046 = CARTESIAN_POINT ( 'NONE', ( 1.699557642147395242, -33.77576862806152747, 1.870874447000208995 ) ) ; +#2047 = ORIENTED_EDGE ( 'NONE', *, *, #1735, .T. ) ; +#2048 = AXIS2_PLACEMENT_3D ( 'NONE', #1427, #1749, #808 ) ; +#2049 = LINE ( 'NONE', #823, #833 ) ; +#2050 = EDGE_CURVE ( 'NONE', #1479, #519, #709, .T. ) ; +#2051 = CARTESIAN_POINT ( 'NONE', ( -65.17499999999995453, -44.35000000000000142, 10.50000000000000533 ) ) ; +#2052 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2053 = EDGE_LOOP ( 'NONE', ( #1461, #1976 ) ) ; +#2054 = CIRCLE ( 'NONE', #1608, 3.500000000000000000 ) ; +#2055 = CARTESIAN_POINT ( 'NONE', ( 1.513736912629326081, -33.36491296155846698, 2.022360759355453119 ) ) ; +#2056 = EDGE_LOOP ( 'NONE', ( #257, #1291, #324, #1760 ) ) ; +#2057 = EDGE_CURVE ( 'NONE', #312, #214, #1162, .T. ) ; +#2058 = CIRCLE ( 'NONE', #477, 3.500000000000000000 ) ; +#2059 = ORIENTED_EDGE ( 'NONE', *, *, #1512, .T. ) ; +#2060 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2061 = VECTOR ( 'NONE', #2011, 1000.000000000000000 ) ; +#2062 = CIRCLE ( 'NONE', #1634, 1.625000000000004885 ) ; +#2063 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000001998, -34.24999999999998579, 20.00000000000000000 ) ) ; +#2064 = FACE_OUTER_BOUND ( 'NONE', #373, .T. ) ; +#2065 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2066 = VERTEX_POINT ( 'NONE', #146 ) ; +#2067 = CARTESIAN_POINT ( 'NONE', ( -1.522587099976281166, -33.35776691390528015, 2.017588012830068056 ) ) ; +#2068 = VERTEX_POINT ( 'NONE', #646 ) ; +#2069 = ORIENTED_EDGE ( 'NONE', *, *, #880, .T. ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Models/litscher_carbonfab_181126/Printed/gimbal_brkt_back_181126.STL b/Models/litscher_carbonfab_181126/Printed/gimbal_brkt_back_181126.STL new file mode 100644 index 0000000..b449ff3 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/gimbal_brkt_back_181126.STL Binary files differ diff --git a/Models/litscher_carbonfab_181126/Printed/gusset_L_181126.STEP b/Models/litscher_carbonfab_181126/Printed/gusset_L_181126.STEP new file mode 100644 index 0000000..f97334a --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/gusset_L_181126.STEP @@ -0,0 +1,1021 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('gusset_L_181126.STEP', + '2018-11-27T00:48:27', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2018', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = EDGE_CURVE ( 'NONE', #64, #316, #912, .T. ) ; +#2 = ORIENTED_EDGE ( 'NONE', *, *, #639, .F. ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, 1.550000000000003153 ) ) ; +#4 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#5 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#6 = ORIENTED_EDGE ( 'NONE', *, *, #523, .F. ) ; +#7 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999988054, 20.00000000000002132, -6.349999999999998757 ) ) ; +#8 = LINE ( 'NONE', #588, #896 ) ; +#9 = ORIENTED_EDGE ( 'NONE', *, *, #595, .T. ) ; +#10 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 6.650000000000001243, -3.324999999999999734 ) ) ; +#11 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.324999999999999734 ) ) ; +#12 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, -3.174999999999999822 ) ) ; +#13 = AXIS2_PLACEMENT_3D ( 'NONE', #857, #63, #531 ) ; +#14 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15 = ORIENTED_EDGE ( 'NONE', *, *, #317, .F. ) ; +#16 = FACE_OUTER_BOUND ( 'NONE', #740, .T. ) ; +#17 = VECTOR ( 'NONE', #622, 1000.000000000000000 ) ; +#18 = EDGE_CURVE ( 'NONE', #225, #258, #810, .T. ) ; +#19 = VERTEX_POINT ( 'NONE', #97 ) ; +#20 = EDGE_CURVE ( 'NONE', #880, #726, #254, .T. ) ; +#21 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#22 = LINE ( 'NONE', #834, #574 ) ; +#23 = CYLINDRICAL_SURFACE ( 'NONE', #660, 1.625000000000000222 ) ; +#24 = ORIENTED_EDGE ( 'NONE', *, *, #888, .F. ) ; +#25 = FACE_OUTER_BOUND ( 'NONE', #608, .T. ) ; +#26 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#27 = ADVANCED_FACE ( 'NONE', ( #668 ), #833, .F. ) ; +#28 = VECTOR ( 'NONE', #661, 1000.000000000000000 ) ; +#29 = EDGE_LOOP ( 'NONE', ( #372, #930, #538, #374 ) ) ; +#30 = EDGE_LOOP ( 'NONE', ( #422, #2, #991, #629 ) ) ; +#31 = VERTEX_POINT ( 'NONE', #109 ) ; +#32 = VERTEX_POINT ( 'NONE', #663 ) ; +#33 = ADVANCED_FACE ( 'NONE', ( #376 ), #34, .F. ) ; +#34 = PLANE ( 'NONE', #476 ) ; +#35 = VERTEX_POINT ( 'NONE', #889 ) ; +#36 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.324999999999999734 ) ) ; +#37 = EDGE_CURVE ( 'NONE', #460, #841, #850, .T. ) ; +#38 = CIRCLE ( 'NONE', #495, 1.625000000000000222 ) ; +#39 = ORIENTED_EDGE ( 'NONE', *, *, #234, .F. ) ; +#40 = EDGE_CURVE ( 'NONE', #98, #32, #906, .T. ) ; +#41 = CYLINDRICAL_SURFACE ( 'NONE', #603, 1.625000000000003775 ) ; +#42 = VECTOR ( 'NONE', #607, 1000.000000000000000 ) ; +#43 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.174999999999999822 ) ) ; +#44 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #181 ), #652 ) ; +#45 = EDGE_CURVE ( 'NONE', #291, #916, #301, .T. ) ; +#46 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, -3.324999999999999734 ) ) ; +#47 = EDGE_LOOP ( 'NONE', ( #146, #773, #201, #823 ) ) ; +#48 = ORIENTED_EDGE ( 'NONE', *, *, #187, .T. ) ; +#49 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#50 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.324999999999999734 ) ) ; +#51 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#52 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, -3.324999999999999734 ) ) ; +#53 = LINE ( 'NONE', #606, #578 ) ; +#54 = EDGE_CURVE ( 'NONE', #898, #681, #494, .T. ) ; +#55 = VECTOR ( 'NONE', #328, 1000.000000000000000 ) ; +#56 = ORIENTED_EDGE ( 'NONE', *, *, #691, .T. ) ; +#57 = PLANE ( 'NONE', #957 ) ; +#58 = ORIENTED_EDGE ( 'NONE', *, *, #268, .T. ) ; +#59 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999997868, 24.16396979503775810, -6.349999999999999645 ) ) ; +#60 = ORIENTED_EDGE ( 'NONE', *, *, #691, .F. ) ; +#61 = EDGE_CURVE ( 'NONE', #35, #488, #998, .T. ) ; +#62 = LINE ( 'NONE', #52, #446 ) ; +#63 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#64 = VERTEX_POINT ( 'NONE', #255 ) ; +#65 = AXIS2_PLACEMENT_3D ( 'NONE', #815, #746, #189 ) ; +#66 = ORIENTED_EDGE ( 'NONE', *, *, #948, .F. ) ; +#67 = VECTOR ( 'NONE', #979, 1000.000000000000000 ) ; +#68 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, 3.174999999999999822 ) ) ; +#69 = VECTOR ( 'NONE', #232, 1000.000000000000000 ) ; +#70 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, -3.324999999999999734 ) ) ; +#71 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.174999999999999822 ) ) ; +#72 = AXIS2_PLACEMENT_3D ( 'NONE', #764, #212, #215 ) ; +#73 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#74 = CARTESIAN_POINT ( 'NONE', ( 6.674999999999988276, 20.00000000000002132, 3.174999999999999822 ) ) ; +#75 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, 1.549999999999999156 ) ) ; +#76 = VECTOR ( 'NONE', #612, 1000.000000000000000 ) ; +#77 = PRODUCT_CONTEXT ( 'NONE', #791, 'mechanical' ) ; +#78 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#79 = AXIS2_PLACEMENT_3D ( 'NONE', #583, #496, #655 ) ; +#80 = VERTEX_POINT ( 'NONE', #892 ) ; +#81 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#82 = ORIENTED_EDGE ( 'NONE', *, *, #491, .T. ) ; +#83 = PRESENTATION_STYLE_ASSIGNMENT (( #240 ) ) ; +#84 = ORIENTED_EDGE ( 'NONE', *, *, #858, .F. ) ; +#85 = EDGE_LOOP ( 'NONE', ( #527, #657, #90 ) ) ; +#86 = VECTOR ( 'NONE', #844, 1000.000000000000000 ) ; +#87 = EDGE_CURVE ( 'NONE', #473, #193, #654, .T. ) ; +#88 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, -3.324999999999999734 ) ) ; +#89 = EDGE_CURVE ( 'NONE', #874, #291, #944, .T. ) ; +#90 = ORIENTED_EDGE ( 'NONE', *, *, #418, .T. ) ; +#91 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#92 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#93 = CYLINDRICAL_SURFACE ( 'NONE', #382, 3.499999999999999556 ) ; +#94 = ADVANCED_FACE ( 'NONE', ( #716 ), #811, .F. ) ; +#95 = ORIENTED_EDGE ( 'NONE', *, *, #653, .F. ) ; +#96 = VECTOR ( 'NONE', #454, 1000.000000000000000 ) ; +#97 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#98 = VERTEX_POINT ( 'NONE', #176 ) ; +#99 = LINE ( 'NONE', #862, #42 ) ; +#100 = VERTEX_POINT ( 'NONE', #669 ) ; +#101 = VERTEX_POINT ( 'NONE', #960 ) ; +#102 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#103 = EDGE_LOOP ( 'NONE', ( #910, #519 ) ) ; +#104 = ADVANCED_FACE ( 'NONE', ( #267, #1002 ), #419, .F. ) ; +#105 = ORIENTED_EDGE ( 'NONE', *, *, #40, .T. ) ; +#106 = VECTOR ( 'NONE', #542, 1000.000000000000000 ) ; +#107 = EDGE_LOOP ( 'NONE', ( #391, #914 ) ) ; +#108 = LINE ( 'NONE', #530, #395 ) ; +#109 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, 1.550000000000003153 ) ) ; +#110 = FACE_BOUND ( 'NONE', #868, .T. ) ; +#111 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#112 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, -1.700000000000004396 ) ) ; +#113 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#114 = PLANE ( 'NONE', #546 ) ; +#115 = ORIENTED_EDGE ( 'NONE', *, *, #407, .T. ) ; +#116 = FACE_BOUND ( 'NONE', #107, .T. ) ; +#117 = ORIENTED_EDGE ( 'NONE', *, *, #858, .T. ) ; +#118 = FACE_OUTER_BOUND ( 'NONE', #839, .T. ) ; +#119 = EDGE_CURVE ( 'NONE', #488, #263, #204, .T. ) ; +#120 = CYLINDRICAL_SURFACE ( 'NONE', #315, 1.625000000000003775 ) ; +#121 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999988054, 20.00000000000002132, -3.174999999999999822 ) ) ; +#122 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.324999999999999734 ) ) ; +#123 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.174999999999999822 ) ) ; +#124 = AXIS2_PLACEMENT_3D ( 'NONE', #262, #970, #26 ) ; +#125 = EDGE_CURVE ( 'NONE', #263, #140, #803, .T. ) ; +#126 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, -1.700000000000001288 ) ) ; +#127 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, -3.324999999999999734 ) ) ; +#128 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#129 = VECTOR ( 'NONE', #830, 1000.000000000000000 ) ; +#130 = FACE_OUTER_BOUND ( 'NONE', #613, .T. ) ; +#131 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#132 = EDGE_LOOP ( 'NONE', ( #547, #180, #838, #216 ) ) ; +#133 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#134 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#135 = ORIENTED_EDGE ( 'NONE', *, *, #478, .F. ) ; +#136 = EDGE_CURVE ( 'NONE', #502, #486, #331, .T. ) ; +#137 = EDGE_CURVE ( 'NONE', #805, #813, #845, .T. ) ; +#138 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#139 = FACE_OUTER_BOUND ( 'NONE', #763, .T. ) ; +#140 = VERTEX_POINT ( 'NONE', #43 ) ; +#141 = LINE ( 'NONE', #634, #909 ) ; +#142 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, 1.549999999999999156 ) ) ; +#143 = VECTOR ( 'NONE', #288, 1000.000000000000000 ) ; +#144 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#145 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #270 ) ) ; +#146 = ORIENTED_EDGE ( 'NONE', *, *, #802, .F. ) ; +#147 = AXIS2_PLACEMENT_3D ( 'NONE', #49, #512, #598 ) ; +#148 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, -3.324999999999999734 ) ) ; +#149 = PLANE ( 'NONE', #771 ) ; +#150 = FILL_AREA_STYLE ('',( #875 ) ) ; +#151 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.324999999999999734 ) ) ; +#152 = ORIENTED_EDGE ( 'NONE', *, *, #980, .T. ) ; +#153 = LINE ( 'NONE', #296, #86 ) ; +#154 = PLANE ( 'NONE', #393 ) ; +#155 = ORIENTED_EDGE ( 'NONE', *, *, #790, .F. ) ; +#156 = ORIENTED_EDGE ( 'NONE', *, *, #560, .T. ) ; +#157 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#158 = ORIENTED_EDGE ( 'NONE', *, *, #136, .F. ) ; +#159 = ORIENTED_EDGE ( 'NONE', *, *, #1, .T. ) ; +#160 = SURFACE_SIDE_STYLE ('',( #575 ) ) ; +#161 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#162 = ORIENTED_EDGE ( 'NONE', *, *, #136, .T. ) ; +#163 = FACE_BOUND ( 'NONE', #975, .T. ) ; +#164 = FILL_AREA_STYLE ('',( #424 ) ) ; +#165 = ORIENTED_EDGE ( 'NONE', *, *, #89, .T. ) ; +#166 = SURFACE_STYLE_FILL_AREA ( #164 ) ; +#167 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#168 = ADVANCED_FACE ( 'NONE', ( #139 ), #253, .F. ) ; +#169 = EDGE_LOOP ( 'NONE', ( #466, #383 ) ) ; +#170 = AXIS2_PLACEMENT_3D ( 'NONE', #882, #579, #354 ) ; +#171 = EDGE_CURVE ( 'NONE', #19, #100, #290, .T. ) ; +#172 = ORIENTED_EDGE ( 'NONE', *, *, #637, .T. ) ; +#173 = VECTOR ( 'NONE', #458, 1000.000000000000000 ) ; +#174 = ORIENTED_EDGE ( 'NONE', *, *, #407, .F. ) ; +#175 = ADVANCED_FACE ( 'NONE', ( #818 ), #283, .F. ) ; +#176 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 18.52712016783445392, 3.174999999999999822 ) ) ; +#177 = VERTEX_POINT ( 'NONE', #50 ) ; +#178 = ORIENTED_EDGE ( 'NONE', *, *, #526, .F. ) ; +#179 = ADVANCED_FACE ( 'NONE', ( #118 ), #114, .T. ) ; +#180 = ORIENTED_EDGE ( 'NONE', *, *, #556, .F. ) ; +#181 = STYLED_ITEM ( 'NONE', ( #281 ), #596 ) ; +#182 = EDGE_CURVE ( 'NONE', #761, #291, #690, .T. ) ; +#183 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#184 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#185 = ORIENTED_EDGE ( 'NONE', *, *, #322, .F. ) ; +#186 = AXIS2_PLACEMENT_3D ( 'NONE', #897, #573, #102 ) ; +#187 = EDGE_CURVE ( 'NONE', #562, #894, #506, .T. ) ; +#188 = VECTOR ( 'NONE', #843, 1000.000000000000000 ) ; +#189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#190 = FACE_OUTER_BOUND ( 'NONE', #718, .T. ) ; +#191 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#192 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#193 = VERTEX_POINT ( 'NONE', #905 ) ; +#194 = ORIENTED_EDGE ( 'NONE', *, *, #286, .F. ) ; +#195 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #270 ), #852 ) ; +#196 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#197 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#198 = DIRECTION ( 'NONE', ( 7.381802025433224012E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#199 = ORIENTED_EDGE ( 'NONE', *, *, #210, .F. ) ; +#200 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#201 = ORIENTED_EDGE ( 'NONE', *, *, #737, .T. ) ; +#202 = CIRCLE ( 'NONE', #387, 1.625000000000001332 ) ; +#203 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, 1.549999999999999156 ) ) ; +#204 = LINE ( 'NONE', #738, #784 ) ; +#205 = ORIENTED_EDGE ( 'NONE', *, *, #694, .T. ) ; +#206 = EDGE_CURVE ( 'NONE', #667, #874, #22, .T. ) ; +#207 = ORIENTED_EDGE ( 'NONE', *, *, #137, .T. ) ; +#208 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#209 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, -3.324999999999999734 ) ) ; +#210 = EDGE_CURVE ( 'NONE', #549, #486, #766, .T. ) ; +#211 = ORIENTED_EDGE ( 'NONE', *, *, #210, .T. ) ; +#212 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#213 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, -1.700000000000004396 ) ) ; +#214 = AXIS2_PLACEMENT_3D ( 'NONE', #449, #524, #688 ) ; +#215 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#216 = ORIENTED_EDGE ( 'NONE', *, *, #948, .T. ) ; +#217 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#218 = CIRCLE ( 'NONE', #223, 3.499999999999999556 ) ; +#219 = ORIENTED_EDGE ( 'NONE', *, *, #673, .T. ) ; +#220 = FACE_OUTER_BOUND ( 'NONE', #515, .T. ) ; +#221 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#222 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.324999999999999734 ) ) ; +#223 = AXIS2_PLACEMENT_3D ( 'NONE', #482, #665, #14 ) ; +#224 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, -3.324999999999999734 ) ) ; +#225 = VERTEX_POINT ( 'NONE', #127 ) ; +#226 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#227 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -3.174999999999999822 ) ) ; +#228 = CYLINDRICAL_SURFACE ( 'NONE', #72, 1.625000000000003775 ) ; +#229 = ORIENTED_EDGE ( 'NONE', *, *, #18, .F. ) ; +#230 = DIRECTION ( 'NONE', ( 1.476360405086644309E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#231 = VECTOR ( 'NONE', #133, 1000.000000000000000 ) ; +#232 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#233 = AXIS2_PLACEMENT_3D ( 'NONE', #416, #570, #902 ) ; +#234 = EDGE_CURVE ( 'NONE', #678, #794, #618, .T. ) ; +#235 = AXIS2_PLACEMENT_3D ( 'NONE', #11, #230, #394 ) ; +#236 = ORIENTED_EDGE ( 'NONE', *, *, #977, .F. ) ; +#237 = DIRECTION ( 'NONE', ( 7.381802025433224012E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#238 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#239 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.523234146875356491E-15, 0.0000000000000000000 ) ) ; +#240 = SURFACE_STYLE_USAGE ( .BOTH. , #160 ) ; +#241 = VECTOR ( 'NONE', #675, 1000.000000000000000 ) ; +#242 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999998757, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#243 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, -3.324999999999999734 ) ) ; +#244 = LINE ( 'NONE', #521, #781 ) ; +#245 = AXIS2_PLACEMENT_3D ( 'NONE', #227, #774, #866 ) ; +#246 = CIRCLE ( 'NONE', #630, 1.625000000000000222 ) ; +#247 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#248 = SURFACE_SIDE_STYLE ('',( #166 ) ) ; +#249 = EDGE_CURVE ( 'NONE', #869, #381, #799, .T. ) ; +#250 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#251 = ADVANCED_FACE ( 'NONE', ( #116, #849, #597 ), #677, .F. ) ; +#252 = ORIENTED_EDGE ( 'NONE', *, *, #45, .T. ) ; +#253 = CYLINDRICAL_SURFACE ( 'NONE', #65, 1.625000000000000222 ) ; +#254 = CIRCLE ( 'NONE', #79, 1.625000000000000222 ) ; +#255 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, 1.550000000000003153 ) ) ; +#256 = ORIENTED_EDGE ( 'NONE', *, *, #735, .T. ) ; +#257 = ADVANCED_FACE ( 'NONE', ( #544 ), #485, .F. ) ; +#258 = VERTEX_POINT ( 'NONE', #683 ) ; +#259 = ORIENTED_EDGE ( 'NONE', *, *, #54, .T. ) ; +#260 = EDGE_CURVE ( 'NONE', #396, #101, #62, .T. ) ; +#261 = ORIENTED_EDGE ( 'NONE', *, *, #234, .T. ) ; +#262 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, -0.07500000000000103806 ) ) ; +#263 = VERTEX_POINT ( 'NONE', #927 ) ; +#264 = EDGE_LOOP ( 'NONE', ( #185, #933, #447, #658 ) ) ; +#265 = FACE_BOUND ( 'NONE', #169, .T. ) ; +#266 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999993783 ) ) ; +#267 = FACE_BOUND ( 'NONE', #103, .T. ) ; +#268 = EDGE_CURVE ( 'NONE', #398, #35, #293, .T. ) ; +#269 = DIRECTION ( 'NONE', ( 2.523234146875356491E-15, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#270 = STYLED_ITEM ( 'NONE', ( #83 ), #386 ) ; +#271 = EDGE_LOOP ( 'NONE', ( #205, #469, #860, #174, #517, #411 ) ) ; +#272 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#273 = ORIENTED_EDGE ( 'NONE', *, *, #37, .F. ) ; +#274 = VECTOR ( 'NONE', #963, 1000.000000000000000 ) ; +#275 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#276 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.476360405086644309E-16, -0.0000000000000000000 ) ) ; +#277 = FACE_OUTER_BOUND ( 'NONE', #836, .T. ) ; +#278 = CLOSED_SHELL ( 'NONE', ( #952, #571, #893, #340, #565, #662, #257, #104, #251, #94, #727, #336, #175, #577, #958, #403, #33, #414, #647, #961, #656, #490, #886, #484, #724, #179, #421, #949, #493, #732, #27, #168 ) ) ; +#279 = CARTESIAN_POINT ( 'NONE', ( 6.674999999999988276, 20.00000000000002132, 0.6749999999999998224 ) ) ; +#280 = ORIENTED_EDGE ( 'NONE', *, *, #338, .T. ) ; +#281 = PRESENTATION_STYLE_ASSIGNMENT (( #901 ) ) ; +#282 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 6.650000000000001243, -3.324999999999999734 ) ) ; +#283 = PLANE ( 'NONE', #444 ) ; +#284 = AXIS2_PLACEMENT_3D ( 'NONE', #359, #367, #742 ) ; +#285 = ORIENTED_EDGE ( 'NONE', *, *, #321, .F. ) ; +#286 = EDGE_CURVE ( 'NONE', #98, #754, #99, .T. ) ; +#287 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#288 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#289 = VERTEX_POINT ( 'NONE', #112 ) ; +#290 = LINE ( 'NONE', #976, #988 ) ; +#291 = VERTEX_POINT ( 'NONE', #71 ) ; +#292 = LINE ( 'NONE', #203, #426 ) ; +#293 = LINE ( 'NONE', #919, #997 ) ; +#294 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#295 = VECTOR ( 'NONE', #302, 1000.000000000000000 ) ; +#296 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, -3.324999999999999734 ) ) ; +#297 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#298 = AXIS2_PLACEMENT_3D ( 'NONE', #443, #197, #822 ) ; +#299 = ORIENTED_EDGE ( 'NONE', *, *, #900, .T. ) ; +#300 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, -0.07500000000000103806 ) ) ; +#301 = LINE ( 'NONE', #736, #274 ) ; +#302 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#303 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, 1.549999999999999156 ) ) ; +#304 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.381802025433224012E-17, 0.0000000000000000000 ) ) ; +#305 = VECTOR ( 'NONE', #945, 1000.000000000000000 ) ; +#306 = ORIENTED_EDGE ( 'NONE', *, *, #873, .T. ) ; +#307 = DIRECTION ( 'NONE', ( -0.8559410833627774107, 0.5170733621177511230, -0.0000000000000000000 ) ) ; +#308 = ORIENTED_EDGE ( 'NONE', *, *, #996, .T. ) ; +#309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#310 = AXIS2_PLACEMENT_3D ( 'NONE', #680, #361, #191 ) ; +#311 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#312 = EDGE_CURVE ( 'NONE', #460, #32, #323, .T. ) ; +#313 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#314 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#315 = AXIS2_PLACEMENT_3D ( 'NONE', #878, #400, #78 ) ; +#316 = VERTEX_POINT ( 'NONE', #213 ) ; +#317 = EDGE_CURVE ( 'NONE', #874, #431, #670, .T. ) ; +#318 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#319 = LINE ( 'NONE', #142, #188 ) ; +#320 = ORIENTED_EDGE ( 'NONE', *, *, #286, .T. ) ; +#321 = EDGE_CURVE ( 'NONE', #193, #473, #616, .T. ) ; +#322 = EDGE_CURVE ( 'NONE', #813, #64, #499, .T. ) ; +#323 = LINE ( 'NONE', #385, #143 ) ; +#324 = ORIENTED_EDGE ( 'NONE', *, *, #556, .T. ) ; +#325 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#326 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#327 = EDGE_LOOP ( 'NONE', ( #236, #343, #211, #158 ) ) ; +#328 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#329 = AXIS2_PLACEMENT_3D ( 'NONE', #10, #632, #309 ) ; +#330 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#331 = CIRCLE ( 'NONE', #947, 1.625000000000000666 ) ; +#332 = ORIENTED_EDGE ( 'NONE', *, *, #792, .T. ) ; +#333 = ORIENTED_EDGE ( 'NONE', *, *, #825, .F. ) ; +#334 = VECTOR ( 'NONE', #563, 1000.000000000000000 ) ; +#335 = EDGE_LOOP ( 'NONE', ( #342, #66, #435, #280 ) ) ; +#336 = ADVANCED_FACE ( 'NONE', ( #110, #692, #955 ), #371, .T. ) ; +#337 = VERTEX_POINT ( 'NONE', #134 ) ; +#338 = EDGE_CURVE ( 'NONE', #396, #488, #734, .T. ) ; +#339 = EDGE_CURVE ( 'NONE', #869, #562, #715, .T. ) ; +#340 = ADVANCED_FACE ( 'NONE', ( #911 ), #41, .F. ) ; +#341 = EDGE_LOOP ( 'NONE', ( #582, #401, #812, #152 ) ) ; +#342 = ORIENTED_EDGE ( 'NONE', *, *, #119, .T. ) ; +#343 = ORIENTED_EDGE ( 'NONE', *, *, #951, .F. ) ; +#344 = LINE ( 'NONE', #752, #129 ) ; +#345 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, 3.174999999999999822 ) ) ; +#346 = FACE_OUTER_BOUND ( 'NONE', #711, .T. ) ; +#347 = ORIENTED_EDGE ( 'NONE', *, *, #423, .T. ) ; +#348 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#349 = ORIENTED_EDGE ( 'NONE', *, *, #434, .F. ) ; +#350 = ORIENTED_EDGE ( 'NONE', *, *, #321, .T. ) ; +#351 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#352 = AXIS2_PLACEMENT_3D ( 'NONE', #300, #759, #297 ) ; +#353 = ORIENTED_EDGE ( 'NONE', *, *, #614, .F. ) ; +#354 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#355 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#356 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999993783 ) ) ; +#357 = EDGE_CURVE ( 'NONE', #225, #667, #153, .T. ) ; +#358 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.324999999999999734 ) ) ; +#359 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, -0.07500000000000069111 ) ) ; +#360 = EDGE_LOOP ( 'NONE', ( #865, #320, #308, #511, #775, #483 ) ) ; +#361 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#362 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.178967242100446864E-17, 0.0000000000000000000 ) ) ; +#363 = ORIENTED_EDGE ( 'NONE', *, *, #423, .F. ) ; +#364 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#365 = DIRECTION ( 'NONE', ( -0.8559410833627774107, 0.5170733621177510120, -0.0000000000000000000 ) ) ; +#366 = CARTESIAN_POINT ( 'NONE', ( 6.674999999999988276, 20.00000000000002132, 0.6749999999999998224 ) ) ; +#367 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#368 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #330, 'distance_accuracy_value', 'NONE'); +#369 = VECTOR ( 'NONE', #725, 1000.000000000000000 ) ; +#370 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 3.174999999999999822 ) ) ; +#371 = PLANE ( 'NONE', #13 ) ; +#372 = ORIENTED_EDGE ( 'NONE', *, *, #600, .F. ) ; +#373 = EDGE_CURVE ( 'NONE', #398, #396, #990, .T. ) ; +#374 = ORIENTED_EDGE ( 'NONE', *, *, #633, .F. ) ; +#375 = ORIENTED_EDGE ( 'NONE', *, *, #977, .T. ) ; +#376 = FACE_OUTER_BOUND ( 'NONE', #535, .T. ) ; +#377 = AXIS2_PLACEMENT_3D ( 'NONE', #712, #237, #782 ) ; +#378 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#379 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, -0.07500000000000103806 ) ) ; +#380 = EDGE_LOOP ( 'NONE', ( #299, #259 ) ) ; +#381 = VERTEX_POINT ( 'NONE', #693 ) ; +#382 = AXIS2_PLACEMENT_3D ( 'NONE', #472, #468, #462 ) ; +#383 = ORIENTED_EDGE ( 'NONE', *, *, #20, .T. ) ; +#384 = VECTOR ( 'NONE', #307, 1000.000000000000114 ) ; +#385 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.6749999999999998224 ) ) ; +#386 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'gusset_L_181126', ( #596, #705 ), #697 ) ; +#387 = AXIS2_PLACEMENT_3D ( 'NONE', #432, #198, #982 ) ; +#388 = EDGE_CURVE ( 'NONE', #101, #177, #641, .T. ) ; +#389 = PLANE ( 'NONE', #620 ) ; +#390 = ORIENTED_EDGE ( 'NONE', *, *, #339, .F. ) ; +#391 = ORIENTED_EDGE ( 'NONE', *, *, #637, .F. ) ; +#392 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -3.174999999999999822 ) ) ; +#393 = AXIS2_PLACEMENT_3D ( 'NONE', #713, #239, #786 ) ; +#394 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.476360405086644309E-16, 0.0000000000000000000 ) ) ; +#395 = VECTOR ( 'NONE', #931, 1000.000000000000000 ) ; +#396 = VERTEX_POINT ( 'NONE', #209 ) ; +#397 = CARTESIAN_POINT ( 'NONE', ( 4.799999999999989164, 20.00000000000002132, 0.6749999999999993783 ) ) ; +#398 = VERTEX_POINT ( 'NONE', #926 ) ; +#399 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #318 ) ; +#400 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#401 = ORIENTED_EDGE ( 'NONE', *, *, #249, .F. ) ; +#402 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#403 = ADVANCED_FACE ( 'NONE', ( #965, #783 ), #389, .T. ) ; +#404 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, -0.07500000000000069111 ) ) ; +#405 = AXIS2_PLACEMENT_3D ( 'NONE', #920, #221, #378 ) ; +#406 = ORIENTED_EDGE ( 'NONE', *, *, #388, .T. ) ; +#407 = EDGE_CURVE ( 'NONE', #19, #562, #703, .T. ) ; +#408 = LINE ( 'NONE', #768, #384 ) ; +#409 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999998224 ) ) ; +#410 = LINE ( 'NONE', #559, #553 ) ; +#411 = ORIENTED_EDGE ( 'NONE', *, *, #864, .T. ) ; +#412 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#413 = EDGE_LOOP ( 'NONE', ( #178, #928 ) ) ; +#414 = ADVANCED_FACE ( 'NONE', ( #265, #130 ), #685, .F. ) ; +#415 = ORIENTED_EDGE ( 'NONE', *, *, #792, .F. ) ; +#416 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, 3.174999999999999822 ) ) ; +#417 = FACE_BOUND ( 'NONE', #509, .T. ) ; +#418 = EDGE_CURVE ( 'NONE', #678, #460, #932, .T. ) ; +#419 = PLANE ( 'NONE', #847 ) ; +#420 = EDGE_LOOP ( 'NONE', ( #788, #162 ) ) ; +#421 = ADVANCED_FACE ( 'NONE', ( #346 ), #936, .F. ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #673, .F. ) ; +#423 = EDGE_CURVE ( 'NONE', #140, #35, #820, .T. ) ; +#424 = FILL_AREA_STYLE_COLOUR ( '', #430 ) ; +#425 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, -3.324999999999999734 ) ) ; +#426 = VECTOR ( 'NONE', #208, 1000.000000000000000 ) ; +#427 = ORIENTED_EDGE ( 'NONE', *, *, #621, .F. ) ; +#428 = VECTOR ( 'NONE', #276, 1000.000000000000000 ) ; +#429 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#430 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#431 = VERTEX_POINT ( 'NONE', #628 ) ; +#432 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, -0.07500000000000069111 ) ) ; +#433 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#434 = EDGE_CURVE ( 'NONE', #177, #398, #522, .T. ) ; +#435 = ORIENTED_EDGE ( 'NONE', *, *, #260, .F. ) ; +#436 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, -1.700000000000001288 ) ) ; +#437 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#438 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #181 ) ) ; +#439 = ORIENTED_EDGE ( 'NONE', *, *, #87, .T. ) ; +#440 = LINE ( 'NONE', #453, #231 ) ; +#441 = AXIS2_PLACEMENT_3D ( 'NONE', #474, #717, #326 ) ; +#442 = ORIENTED_EDGE ( 'NONE', *, *, #37, .T. ) ; +#443 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -6.349999999999998757 ) ) ; +#444 = AXIS2_PLACEMENT_3D ( 'NONE', #433, #362, #599 ) ; +#445 = ORIENTED_EDGE ( 'NONE', *, *, #338, .F. ) ; +#446 = VECTOR ( 'NONE', #516, 1000.000000000000000 ) ; +#447 = ORIENTED_EDGE ( 'NONE', *, *, #633, .T. ) ; +#448 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#449 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, -3.324999999999999734 ) ) ; +#450 = CIRCLE ( 'NONE', #827, 1.625000000000000222 ) ; +#451 = ORIENTED_EDGE ( 'NONE', *, *, #501, .T. ) ; +#452 = CIRCLE ( 'NONE', #245, 1.625000000000000666 ) ; +#453 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, -3.324999999999999734 ) ) ; +#454 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#455 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -1.700000000000004396 ) ) ; +#456 = ORIENTED_EDGE ( 'NONE', *, *, #339, .T. ) ; +#457 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#458 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#459 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#460 = VERTEX_POINT ( 'NONE', #872 ) ; +#461 = LINE ( 'NONE', #7, #305 ) ; +#462 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#463 = LINE ( 'NONE', #3, #551 ) ; +#464 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#465 = ORIENTED_EDGE ( 'NONE', *, *, #54, .F. ) ; +#466 = ORIENTED_EDGE ( 'NONE', *, *, #617, .T. ) ; +#467 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999998224 ) ) ; +#468 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#469 = ORIENTED_EDGE ( 'NONE', *, *, #980, .F. ) ; +#470 = VECTOR ( 'NONE', #429, 1000.000000000000000 ) ; +#471 = AXIS2_PLACEMENT_3D ( 'NONE', #404, #459, #4 ) ; +#472 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999998224 ) ) ; +#473 = VERTEX_POINT ( 'NONE', #876 ) ; +#474 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 3.174999999999999822 ) ) ; +#475 = VECTOR ( 'NONE', #481, 1000.000000000000000 ) ; +#476 = AXIS2_PLACEMENT_3D ( 'NONE', #425, #728, #184 ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #20, .F. ) ; +#478 = EDGE_CURVE ( 'NONE', #80, #31, #923, .T. ) ; +#479 = LINE ( 'NONE', #744, #67 ) ; +#480 = VECTOR ( 'NONE', #610, 1000.000000000000000 ) ; +#481 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#482 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999998224 ) ) ; +#483 = ORIENTED_EDGE ( 'NONE', *, *, #687, .F. ) ; +#484 = ADVANCED_FACE ( 'NONE', ( #747 ), #149, .F. ) ; +#485 = CYLINDRICAL_SURFACE ( 'NONE', #298, 1.625000000000000666 ) ; +#486 = VERTEX_POINT ( 'NONE', #397 ) ; +#487 = FACE_OUTER_BOUND ( 'NONE', #832, .T. ) ; +#488 = VERTEX_POINT ( 'NONE', #938 ) ; +#489 = ORIENTED_EDGE ( 'NONE', *, *, #373, .F. ) ; +#490 = ADVANCED_FACE ( 'NONE', ( #722 ), #154, .F. ) ; +#491 = EDGE_CURVE ( 'NONE', #98, #794, #767, .T. ) ; +#492 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#493 = ADVANCED_FACE ( 'NONE', ( #487 ), #120, .F. ) ; +#494 = CIRCLE ( 'NONE', #186, 1.625000000000000222 ) ; +#495 = AXIS2_PLACEMENT_3D ( 'NONE', #640, #644, #721 ) ; +#496 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#497 = VERTEX_POINT ( 'NONE', #12 ) ; +#498 = LINE ( 'NONE', #801, #819 ) ; +#499 = LINE ( 'NONE', #769, #96 ) ; +#500 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#501 = EDGE_CURVE ( 'NONE', #316, #64, #757, .T. ) ; +#502 = VERTEX_POINT ( 'NONE', #635 ) ; +#503 = PLANE ( 'NONE', #884 ) ; +#504 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #804, #855 ) ; +#505 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.324999999999999734 ) ) ; +#506 = LINE ( 'NONE', #828, #587 ) ; +#507 = VERTEX_POINT ( 'NONE', #242 ) ; +#508 = PLANE ( 'NONE', #147 ) ; +#509 = EDGE_LOOP ( 'NONE', ( #451, #159 ) ) ; +#510 = LINE ( 'NONE', #88, #798 ) ; +#511 = ORIENTED_EDGE ( 'NONE', *, *, #171, .T. ) ; +#512 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#513 = CARTESIAN_POINT ( 'NONE', ( 4.799999999999989164, 20.00000000000002132, -6.349999999999998757 ) ) ; +#514 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #816, 'distance_accuracy_value', 'NONE'); +#515 = EDGE_LOOP ( 'NONE', ( #465, #922, #285, #584 ) ) ; +#516 = DIRECTION ( 'NONE', ( 2.523234146875356491E-15, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#517 = ORIENTED_EDGE ( 'NONE', *, *, #996, .F. ) ; +#518 = DIRECTION ( 'NONE', ( 1.476360405086644309E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#519 = ORIENTED_EDGE ( 'NONE', *, *, #523, .T. ) ; +#520 = LINE ( 'NONE', #455, #851 ) ; +#521 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#522 = LINE ( 'NONE', #545, #69 ) ; +#523 = EDGE_CURVE ( 'NONE', #729, #549, #452, .T. ) ; +#524 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#525 = ORIENTED_EDGE ( 'NONE', *, *, #600, .T. ) ; +#526 = EDGE_CURVE ( 'NONE', #731, #552, #246, .T. ) ; +#527 = ORIENTED_EDGE ( 'NONE', *, *, #312, .T. ) ; +#528 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #924 ) ) ; +#529 = ORIENTED_EDGE ( 'NONE', *, *, #694, .F. ) ; +#530 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#531 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#532 = ORIENTED_EDGE ( 'NONE', *, *, #962, .T. ) ; +#533 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#534 = AXIS2_PLACEMENT_3D ( 'NONE', #558, #937, #5 ) ; +#535 = EDGE_LOOP ( 'NONE', ( #219, #576, #589, #993 ) ) ; +#536 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -1.700000000000001288 ) ) ; +#537 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#538 = ORIENTED_EDGE ( 'NONE', *, *, #501, .F. ) ; +#539 = VECTOR ( 'NONE', #698, 1000.000000000000000 ) ; +#540 = DIRECTION ( 'NONE', ( 7.381802025433224012E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#541 = CARTESIAN_POINT ( 'NONE', ( 4.799999999999989164, 20.00000000000002132, -3.174999999999999822 ) ) ; +#542 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#543 = AXIS2_PLACEMENT_3D ( 'NONE', #821, #250, #355 ) ; +#544 = FACE_OUTER_BOUND ( 'NONE', #327, .T. ) ; +#545 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.324999999999999734 ) ) ; +#546 = AXIS2_PLACEMENT_3D ( 'NONE', #505, #592, #917 ) ; +#547 = ORIENTED_EDGE ( 'NONE', *, *, #125, .T. ) ; +#548 = LINE ( 'NONE', #81, #106 ) ; +#549 = VERTEX_POINT ( 'NONE', #541 ) ; +#550 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#551 = VECTOR ( 'NONE', #1003, 1000.000000000000000 ) ; +#552 = VERTEX_POINT ( 'NONE', #75 ) ; +#553 = VECTOR ( 'NONE', #946, 1000.000000000000000 ) ; +#554 = AXIS2_PLACEMENT_3D ( 'NONE', #793, #741, #113 ) ; +#555 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, 1.550000000000003153 ) ) ; +#556 = EDGE_CURVE ( 'NONE', #177, #140, #881, .T. ) ; +#557 = ORIENTED_EDGE ( 'NONE', *, *, #317, .T. ) ; +#558 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, -0.07500000000000069111 ) ) ; +#559 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#560 = EDGE_CURVE ( 'NONE', #497, #337, #410, .T. ) ; +#561 = ORIENTED_EDGE ( 'NONE', *, *, #418, .F. ) ; +#562 = VERTEX_POINT ( 'NONE', #183 ) ; +#563 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#564 = AXIS2_PLACEMENT_3D ( 'NONE', #224, #540, #925 ) ; +#565 = ADVANCED_FACE ( 'NONE', ( #190 ), #1001, .F. ) ; +#566 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#567 = ORIENTED_EDGE ( 'NONE', *, *, #984, .F. ) ; +#568 = EDGE_LOOP ( 'NONE', ( #6, #375, #353, #199 ) ) ; +#569 = EDGE_LOOP ( 'NONE', ( #333, #529, #797, #24 ) ) ; +#570 = DIRECTION ( 'NONE', ( -0.5170733621177511230, -0.8559410833627774107, 0.0000000000000000000 ) ) ; +#571 = ADVANCED_FACE ( 'NONE', ( #220 ), #591, .F. ) ; +#572 = ORIENTED_EDGE ( 'NONE', *, *, #639, .T. ) ; +#573 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#574 = VECTOR ( 'NONE', #604, 1000.000000000000000 ) ; +#575 = SURFACE_STYLE_FILL_AREA ( #150 ) ; +#576 = ORIENTED_EDGE ( 'NONE', *, *, #983, .F. ) ; +#577 = ADVANCED_FACE ( 'NONE', ( #580 ), #971, .F. ) ; +#578 = VECTOR ( 'NONE', #826, 1000.000000000000000 ) ; +#579 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#580 = FACE_OUTER_BOUND ( 'NONE', #631, .T. ) ; +#581 = ORIENTED_EDGE ( 'NONE', *, *, #478, .T. ) ; +#582 = ORIENTED_EDGE ( 'NONE', *, *, #825, .T. ) ; +#583 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, -0.07500000000000103806 ) ) ; +#584 = ORIENTED_EDGE ( 'NONE', *, *, #737, .F. ) ; +#585 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#586 = EDGE_LOOP ( 'NONE', ( #350, #439 ) ) ; +#587 = VECTOR ( 'NONE', #594, 1000.000000000000000 ) ; +#588 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -1.700000000000004396 ) ) ; +#589 = ORIENTED_EDGE ( 'NONE', *, *, #357, .F. ) ; +#590 = VECTOR ( 'NONE', #226, 1000.000000000000000 ) ; +#591 = CYLINDRICAL_SURFACE ( 'NONE', #753, 1.625000000000000222 ) ; +#592 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#593 = ORIENTED_EDGE ( 'NONE', *, *, #995, .T. ) ; +#594 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#595 = EDGE_CURVE ( 'NONE', #431, #916, #510, .T. ) ; +#596 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude4', #278 ) ; +#597 = FACE_OUTER_BOUND ( 'NONE', #271, .T. ) ; +#598 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#599 = DIRECTION ( 'NONE', ( -7.178967242100446864E-17, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#600 = EDGE_CURVE ( 'NONE', #813, #805, #689, .T. ) ; +#601 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#602 = LINE ( 'NONE', #877, #623 ) ; +#603 = AXIS2_PLACEMENT_3D ( 'NONE', #760, #217, #73 ) ; +#604 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.476360405086644309E-16, -0.0000000000000000000 ) ) ; +#605 = FACE_OUTER_BOUND ( 'NONE', #380, .T. ) ; +#606 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, -3.324999999999999734 ) ) ; +#607 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#608 = EDGE_LOOP ( 'NONE', ( #477, #256, #611, #645 ) ) ; +#609 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#610 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#611 = ORIENTED_EDGE ( 'NONE', *, *, #770, .T. ) ; +#612 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#613 = EDGE_LOOP ( 'NONE', ( #572, #229, #95, #9 ) ) ; +#614 = EDGE_CURVE ( 'NONE', #486, #502, #615, .T. ) ; +#615 = CIRCLE ( 'NONE', #808, 1.625000000000000666 ) ; +#616 = CIRCLE ( 'NONE', #636, 1.624999999999999778 ) ; +#617 = EDGE_CURVE ( 'NONE', #726, #880, #38, .T. ) ; +#618 = LINE ( 'NONE', #279, #241 ) ; +#619 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.324999999999999734 ) ) ; +#620 = AXIS2_PLACEMENT_3D ( 'NONE', #1004, #537, #128 ) ; +#621 = EDGE_CURVE ( 'NONE', #32, #678, #218, .T. ) ; +#622 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#623 = VECTOR ( 'NONE', #707, 1000.000000000000000 ) ; +#624 = FACE_OUTER_BOUND ( 'NONE', #954, .T. ) ; +#625 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #550, 'distance_accuracy_value', 'NONE'); +#626 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #791 ) ; +#627 = VECTOR ( 'NONE', #908, 1000.000000000000000 ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, -3.324999999999999734 ) ) ; +#629 = ORIENTED_EDGE ( 'NONE', *, *, #182, .F. ) ; +#630 = AXIS2_PLACEMENT_3D ( 'NONE', #800, #585, #412 ) ; +#631 = EDGE_LOOP ( 'NONE', ( #456, #48, #593 ) ) ; +#632 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#633 = EDGE_CURVE ( 'NONE', #805, #316, #8, .T. ) ; +#634 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#635 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999988054, 20.00000000000002132, 0.6749999999999993783 ) ) ; +#636 = AXIS2_PLACEMENT_3D ( 'NONE', #379, #518, #144 ) ; +#637 = EDGE_CURVE ( 'NONE', #289, #972, #879, .T. ) ; +#638 = DIRECTION ( 'NONE', ( -7.178967242100446864E-17, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#639 = EDGE_CURVE ( 'NONE', #916, #258, #498, .T. ) ; +#640 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, -0.07500000000000103806 ) ) ; +#641 = LINE ( 'NONE', #222, #295 ) ; +#642 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#643 = ORIENTED_EDGE ( 'NONE', *, *, #687, .T. ) ; +#644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#645 = ORIENTED_EDGE ( 'NONE', *, *, #873, .F. ) ; +#646 = ORIENTED_EDGE ( 'NONE', *, *, #595, .F. ) ; +#647 = ADVANCED_FACE ( 'NONE', ( #941 ), #671, .F. ) ; +#648 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 18.52712016783445392, 0.6749999999999998224 ) ) ; +#649 = CYLINDRICAL_SURFACE ( 'NONE', #405, 1.625000000000003775 ) ; +#650 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #504 ) ; +#651 = ORIENTED_EDGE ( 'NONE', *, *, #268, .F. ) ; +#652 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #514 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #816, #161, #903 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#653 = EDGE_CURVE ( 'NONE', #431, #225, #53, .T. ) ; +#654 = CIRCLE ( 'NONE', #124, 1.624999999999999778 ) ; +#655 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#656 = ADVANCED_FACE ( 'NONE', ( #16 ), #503, .T. ) ; +#657 = ORIENTED_EDGE ( 'NONE', *, *, #621, .T. ) ; +#658 = ORIENTED_EDGE ( 'NONE', *, *, #1, .F. ) ; +#659 = AXIS2_PLACEMENT_3D ( 'NONE', #795, #885, #167 ) ; +#660 = AXIS2_PLACEMENT_3D ( 'NONE', #710, #870, #402 ) ; +#661 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.381802025433224012E-17, 0.0000000000000000000 ) ) ; +#662 = ADVANCED_FACE ( 'NONE', ( #733 ), #887, .F. ) ; +#663 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 18.52712016783445392, 0.6749999999999998224 ) ) ; +#664 = ORIENTED_EDGE ( 'NONE', *, *, #888, .T. ) ; +#665 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#666 = FACE_OUTER_BOUND ( 'NONE', #132, .T. ) ; +#667 = VERTEX_POINT ( 'NONE', #46 ) ; +#668 = FACE_OUTER_BOUND ( 'NONE', #47, .T. ) ; +#669 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, 3.174999999999999822 ) ) ; +#670 = LINE ( 'NONE', #696, #76 ) ; +#671 = PLANE ( 'NONE', #699 ) ; +#672 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#673 = EDGE_CURVE ( 'NONE', #258, #761, #964, .T. ) ; +#674 = EDGE_LOOP ( 'NONE', ( #347, #651, #349, #324 ) ) ; +#675 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#676 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, -1.700000000000001288 ) ) ; +#677 = PLANE ( 'NONE', #899 ) ; +#678 = VERTEX_POINT ( 'NONE', #366 ) ; +#679 = CIRCLE ( 'NONE', #720, 1.625000000000000666 ) ; +#680 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -6.349999999999998757 ) ) ; +#681 = VERTEX_POINT ( 'NONE', #436 ) ; +#682 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#683 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, 3.174999999999999822 ) ) ; +#684 = PLANE ( 'NONE', #959 ) ; +#685 = PLANE ( 'NONE', #214 ) ; +#686 = LINE ( 'NONE', #780, #700 ) ; +#687 = EDGE_CURVE ( 'NONE', #794, #841, #755, .T. ) ; +#688 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#689 = CIRCLE ( 'NONE', #709, 1.625000000000003775 ) ; +#690 = LINE ( 'NONE', #123, #428 ) ; +#691 = EDGE_CURVE ( 'NONE', #31, #80, #202, .T. ) ; +#692 = FACE_BOUND ( 'NONE', #30, .T. ) ; +#693 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999997868, 24.16396979503775810, -3.174999999999999822 ) ) ; +#694 = EDGE_CURVE ( 'NONE', #337, #507, #479, .T. ) ; +#695 = PLANE ( 'NONE', #564 ) ; +#696 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.324999999999999734 ) ) ; +#697 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #625 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #550, #777, #935 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#698 = DIRECTION ( 'NONE', ( 0.8559410833627774107, -0.5170733621177511230, 0.0000000000000000000 ) ) ; +#699 = AXIS2_PLACEMENT_3D ( 'NONE', #122, #275, #907 ) ; +#700 = VECTOR ( 'NONE', #311, 1000.000000000000000 ) ; +#701 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, -1.700000000000004396 ) ) ; +#702 = ORIENTED_EDGE ( 'NONE', *, *, #206, .T. ) ; +#703 = LINE ( 'NONE', #921, #942 ) ; +#704 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.324999999999999734 ) ) ; +#705 = AXIS2_PLACEMENT_3D ( 'NONE', #238, #247, #785 ) ; +#706 = ORIENTED_EDGE ( 'NONE', *, *, #983, .T. ) ; +#707 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#708 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#709 = AXIS2_PLACEMENT_3D ( 'NONE', #969, #953, #92 ) ; +#710 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#711 = EDGE_LOOP ( 'NONE', ( #207, #525 ) ) ; +#712 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, -0.07500000000000069111 ) ) ; +#713 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, -3.324999999999999734 ) ) ; +#714 = LINE ( 'NONE', #68, #173 ) ; +#715 = LINE ( 'NONE', #765, #539 ) ; +#716 = FACE_OUTER_BOUND ( 'NONE', #940, .T. ) ; +#717 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#718 = EDGE_LOOP ( 'NONE', ( #561, #261, #643, #273 ) ) ; +#719 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#720 = AXIS2_PLACEMENT_3D ( 'NONE', #392, #313, #157 ) ; +#721 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#722 = FACE_OUTER_BOUND ( 'NONE', #335, .T. ) ; +#723 = AXIS2_PLACEMENT_3D ( 'NONE', #467, #708, #464 ) ; +#724 = ADVANCED_FACE ( 'NONE', ( #417, #666 ), #57, .F. ) ; +#725 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#726 = VERTEX_POINT ( 'NONE', #126 ) ; +#727 = ADVANCED_FACE ( 'NONE', ( #809 ), #508, .F. ) ; +#728 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#729 = VERTEX_POINT ( 'NONE', #121 ) ; +#730 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#731 = VERTEX_POINT ( 'NONE', #676 ) ; +#732 = ADVANCED_FACE ( 'NONE', ( #605 ), #684, .F. ) ; +#733 = FACE_OUTER_BOUND ( 'NONE', #568, .T. ) ; +#734 = LINE ( 'NONE', #70, #480 ) ; +#735 = EDGE_CURVE ( 'NONE', #880, #552, #292, .T. ) ; +#736 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.174999999999999822 ) ) ; +#737 = EDGE_CURVE ( 'NONE', #681, #193, #344, .T. ) ; +#738 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, 3.174999999999999822 ) ) ; +#739 = ORIENTED_EDGE ( 'NONE', *, *, #125, .F. ) ; +#740 = EDGE_LOOP ( 'NONE', ( #859, #702, #557, #968 ) ) ; +#741 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#742 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#743 = ORIENTED_EDGE ( 'NONE', *, *, #617, .F. ) ; +#744 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#745 = SHAPE_DEFINITION_REPRESENTATION ( #650, #386 ) ; +#746 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#747 = FACE_OUTER_BOUND ( 'NONE', #674, .T. ) ; +#748 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#749 = ORIENTED_EDGE ( 'NONE', *, *, #373, .T. ) ; +#750 = EDGE_LOOP ( 'NONE', ( #981, #445, #489, #58 ) ) ; +#751 = ORIENTED_EDGE ( 'NONE', *, *, #89, .F. ) ; +#752 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -1.700000000000001288 ) ) ; +#753 = AXIS2_PLACEMENT_3D ( 'NONE', #91, #348, #642 ) ; +#754 = VERTEX_POINT ( 'NONE', #364 ) ; +#755 = CIRCLE ( 'NONE', #762, 3.499999999999999556 ) ; +#756 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#757 = CIRCLE ( 'NONE', #471, 1.625000000000003775 ) ; +#758 = ORIENTED_EDGE ( 'NONE', *, *, #526, .T. ) ; +#759 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#760 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#761 = VERTEX_POINT ( 'NONE', #853 ) ; +#762 = AXIS2_PLACEMENT_3D ( 'NONE', #370, #824, #913 ) ; +#763 = EDGE_LOOP ( 'NONE', ( #890, #743, #306, #758 ) ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#765 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999997868, 24.16396979503775810, -6.349999999999999645 ) ) ; +#766 = LINE ( 'NONE', #513, #846 ) ; +#767 = CIRCLE ( 'NONE', #441, 3.499999999999999556 ) ; +#768 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, -3.174999999999999822 ) ) ; +#769 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, 1.550000000000003153 ) ) ; +#770 = EDGE_CURVE ( 'NONE', #552, #731, #450, .T. ) ; +#771 = AXIS2_PLACEMENT_3D ( 'NONE', #151, #778, #314 ) ; +#772 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, 1.549999999999999156 ) ) ; +#773 = ORIENTED_EDGE ( 'NONE', *, *, #900, .F. ) ; +#774 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#775 = ORIENTED_EDGE ( 'NONE', *, *, #984, .T. ) ; +#776 = ORIENTED_EDGE ( 'NONE', *, *, #171, .F. ) ; +#777 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#778 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#779 = EDGE_LOOP ( 'NONE', ( #252, #646, #15, #165 ) ) ; +#780 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#781 = VECTOR ( 'NONE', #448, 1000.000000000000000 ) ; +#782 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#783 = FACE_OUTER_BOUND ( 'NONE', #85, .T. ) ; +#784 = VECTOR ( 'NONE', #269, 1000.000000000000000 ) ; +#785 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#786 = DIRECTION ( 'NONE', ( 2.523234146875356491E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#787 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#788 = ORIENTED_EDGE ( 'NONE', *, *, #614, .T. ) ; +#789 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.174999999999999822 ) ) ; +#790 = EDGE_CURVE ( 'NONE', #31, #972, #463, .T. ) ; +#791 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#792 = EDGE_CURVE ( 'NONE', #80, #289, #520, .T. ) ; +#793 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, -0.07500000000000069111 ) ) ; +#794 = VERTEX_POINT ( 'NONE', #74 ) ; +#795 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, -0.07500000000000069111 ) ) ; +#796 = FACE_OUTER_BOUND ( 'NONE', #918, .T. ) ; +#797 = ORIENTED_EDGE ( 'NONE', *, *, #560, .F. ) ; +#798 = VECTOR ( 'NONE', #883, 1000.000000000000000 ) ; +#799 = LINE ( 'NONE', #59, #627 ) ; +#800 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, -0.07500000000000103806 ) ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, 3.174999999999999822 ) ) ; +#802 = EDGE_CURVE ( 'NONE', #898, #473, #319, .T. ) ; +#803 = LINE ( 'NONE', #817, #470 ) ; +#804 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #924, .NOT_KNOWN. ) ; +#805 = VERTEX_POINT ( 'NONE', #701 ) ; +#806 = CIRCLE ( 'NONE', #534, 1.625000000000003775 ) ; +#807 = ORIENTED_EDGE ( 'NONE', *, *, #119, .F. ) ; +#808 = AXIS2_PLACEMENT_3D ( 'NONE', #266, #351, #566 ) ; +#809 = FACE_OUTER_BOUND ( 'NONE', #915, .T. ) ; +#810 = LINE ( 'NONE', #243, #55 ) ; +#811 = PLANE ( 'NONE', #233 ) ; +#812 = ORIENTED_EDGE ( 'NONE', *, *, #995, .F. ) ; +#813 = VERTEX_POINT ( 'NONE', #856 ) ; +#814 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 21.47287983216558871, 0.6749999999999998224 ) ) ; +#815 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#816 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#817 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.174999999999999822 ) ) ; +#818 = FACE_OUTER_BOUND ( 'NONE', #341, .T. ) ; +#819 = VECTOR ( 'NONE', #895, 1000.000000000000000 ) ; +#820 = LINE ( 'NONE', #789, #17 ) ; +#821 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#822 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#823 = ORIENTED_EDGE ( 'NONE', *, *, #87, .F. ) ; +#824 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#825 = EDGE_CURVE ( 'NONE', #507, #381, #108, .T. ) ; +#826 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#827 = AXIS2_PLACEMENT_3D ( 'NONE', #863, #294, #609 ) ; +#828 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, -6.349999999999999645 ) ) ; +#829 = VECTOR ( 'NONE', #21, 1000.000000000000000 ) ; +#830 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#831 = LINE ( 'NONE', #148, #475 ) ; +#832 = EDGE_LOOP ( 'NONE', ( #155, #135, #332, #172 ) ) ; +#833 = CYLINDRICAL_SURFACE ( 'NONE', #170, 1.625000000000000222 ) ; +#834 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.324999999999999734 ) ) ; +#835 = FACE_OUTER_BOUND ( 'NONE', #264, .T. ) ; +#836 = EDGE_LOOP ( 'NONE', ( #950, #751, #967, #706 ) ) ; +#837 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#838 = ORIENTED_EDGE ( 'NONE', *, *, #388, .F. ) ; +#839 = EDGE_LOOP ( 'NONE', ( #956, #406, #871, #749 ) ) ; +#840 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#841 = VERTEX_POINT ( 'NONE', #929 ) ; +#842 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, -3.324999999999999734 ) ) ; +#843 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#844 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#845 = CIRCLE ( 'NONE', #284, 1.625000000000003775 ) ; +#846 = VECTOR ( 'NONE', #837, 1000.000000000000000 ) ; +#847 = AXIS2_PLACEMENT_3D ( 'NONE', #492, #730, #500 ) ; +#848 = ORIENTED_EDGE ( 'NONE', *, *, #790, .T. ) ; +#849 = FACE_BOUND ( 'NONE', #413, .T. ) ; +#850 = LINE ( 'NONE', #814, #829 ) ; +#851 = VECTOR ( 'NONE', #138, 1000.000000000000000 ) ; +#852 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #368 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #330, #787, #325 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#853 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, 3.174999999999999822 ) ) ; +#854 = VECTOR ( 'NONE', #304, 1000.000000000000000 ) ; +#855 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #318, 'design' ) ; +#856 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, 1.550000000000003153 ) ) ; +#857 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#858 = EDGE_CURVE ( 'NONE', #100, #497, #714, .T. ) ; +#859 = ORIENTED_EDGE ( 'NONE', *, *, #357, .T. ) ; +#860 = ORIENTED_EDGE ( 'NONE', *, *, #187, .F. ) ; +#861 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, 3.174999999999999822 ) ) ; +#862 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#863 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, -0.07500000000000103806 ) ) ; +#864 = EDGE_CURVE ( 'NONE', #754, #337, #244, .T. ) ; +#865 = ORIENTED_EDGE ( 'NONE', *, *, #491, .F. ) ; +#866 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#867 = CIRCLE ( 'NONE', #352, 1.625000000000000222 ) ; +#868 = EDGE_LOOP ( 'NONE', ( #807, #978, #363, #739 ) ) ; +#869 = VERTEX_POINT ( 'NONE', #994 ) ; +#870 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#871 = ORIENTED_EDGE ( 'NONE', *, *, #434, .T. ) ; +#872 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 21.47287983216558871, 0.6749999999999998224 ) ) ; +#873 = EDGE_CURVE ( 'NONE', #726, #731, #989, .T. ) ; +#874 = VERTEX_POINT ( 'NONE', #619 ) ; +#875 = FILL_AREA_STYLE_COLOUR ( '', #200 ) ; +#876 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, 1.549999999999999378 ) ) ; +#877 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#878 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#879 = CIRCLE ( 'NONE', #554, 1.625000000000003775 ) ; +#880 = VERTEX_POINT ( 'NONE', #772 ) ; +#881 = LINE ( 'NONE', #704, #334 ) ; +#882 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#883 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#884 = AXIS2_PLACEMENT_3D ( 'NONE', #973, #756, #287 ) ; +#885 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#886 = ADVANCED_FACE ( 'NONE', ( #163, #974 ), #695, .F. ) ; +#887 = CYLINDRICAL_SURFACE ( 'NONE', #310, 1.625000000000000666 ) ; +#888 = EDGE_CURVE ( 'NONE', #381, #497, #408, .T. ) ; +#889 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, 3.174999999999999822 ) ) ; +#890 = ORIENTED_EDGE ( 'NONE', *, *, #735, .F. ) ; +#891 = VECTOR ( 'NONE', #966, 1000.000000000000000 ) ; +#892 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, -1.700000000000004396 ) ) ; +#893 = ADVANCED_FACE ( 'NONE', ( #796 ), #649, .F. ) ; +#894 = VERTEX_POINT ( 'NONE', #131 ) ; +#895 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#896 = VECTOR ( 'NONE', #111, 1000.000000000000000 ) ; +#897 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, -0.07500000000000103806 ) ) ; +#898 = VERTEX_POINT ( 'NONE', #303 ) ; +#899 = AXIS2_PLACEMENT_3D ( 'NONE', #192, #987, #437 ) ; +#900 = EDGE_CURVE ( 'NONE', #681, #898, #867, .T. ) ; +#901 = SURFACE_STYLE_USAGE ( .BOTH. , #248 ) ; +#902 = DIRECTION ( 'NONE', ( 0.8559410833627774107, -0.5170733621177511230, 0.0000000000000000000 ) ) ; +#903 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#904 = ORIENTED_EDGE ( 'NONE', *, *, #40, .F. ) ; +#905 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, -1.700000000000001510 ) ) ; +#906 = LINE ( 'NONE', #648, #891 ) ; +#907 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#908 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#909 = VECTOR ( 'NONE', #638, 1000.000000000000000 ) ; +#910 = ORIENTED_EDGE ( 'NONE', *, *, #951, .T. ) ; +#911 = FACE_OUTER_BOUND ( 'NONE', #29, .T. ) ; +#912 = CIRCLE ( 'NONE', #659, 1.625000000000003775 ) ; +#913 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#914 = ORIENTED_EDGE ( 'NONE', *, *, #962, .F. ) ; +#915 = EDGE_LOOP ( 'NONE', ( #1000, #442, #567, #117, #156, #985, #194, #105 ) ) ; +#916 = VERTEX_POINT ( 'NONE', #861 ) ; +#917 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#918 = EDGE_LOOP ( 'NONE', ( #60, #848, #532, #415 ) ) ; +#919 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, -3.324999999999999734 ) ) ; +#920 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#921 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#922 = ORIENTED_EDGE ( 'NONE', *, *, #802, .T. ) ; +#923 = CIRCLE ( 'NONE', #377, 1.625000000000001332 ) ; +#924 = PRODUCT ( 'gusset_L_181126', 'gusset_L_181126', '', ( #77 ) ) ; +#925 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.381802025433224012E-17, 0.0000000000000000000 ) ) ; +#926 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, -3.324999999999999734 ) ) ; +#927 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, 3.174999999999999822 ) ) ; +#928 = ORIENTED_EDGE ( 'NONE', *, *, #770, .F. ) ; +#929 = CARTESIAN_POINT ( 'NONE', ( 8.673617379884035472E-16, 21.47287983216558871, 3.174999999999999822 ) ) ; +#930 = ORIENTED_EDGE ( 'NONE', *, *, #322, .T. ) ; +#931 = DIRECTION ( 'NONE', ( -7.178967242100446864E-17, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#932 = CIRCLE ( 'NONE', #723, 3.499999999999999556 ) ; +#933 = ORIENTED_EDGE ( 'NONE', *, *, #137, .F. ) ; +#934 = ORIENTED_EDGE ( 'NONE', *, *, #249, .T. ) ; +#935 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#936 = PLANE ( 'NONE', #329 ) ; +#937 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#938 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, 3.174999999999999822 ) ) ; +#939 = FACE_BOUND ( 'NONE', #586, .T. ) ; +#940 = EDGE_LOOP ( 'NONE', ( #115, #390, #934, #664, #84, #776 ) ) ; +#941 = FACE_OUTER_BOUND ( 'NONE', #779, .T. ) ; +#942 = VECTOR ( 'NONE', #457, 1000.000000000000000 ) ; +#943 = PLANE ( 'NONE', #235 ) ; +#944 = LINE ( 'NONE', #36, #369 ) ; +#945 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#946 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#947 = AXIS2_PLACEMENT_3D ( 'NONE', #356, #682, #672 ) ; +#948 = EDGE_CURVE ( 'NONE', #101, #263, #440, .T. ) ; +#949 = ADVANCED_FACE ( 'NONE', ( #835 ), #228, .F. ) ; +#950 = ORIENTED_EDGE ( 'NONE', *, *, #182, .T. ) ; +#951 = EDGE_CURVE ( 'NONE', #549, #729, #679, .T. ) ; +#952 = ADVANCED_FACE ( 'NONE', ( #25 ), #23, .F. ) ; +#953 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#954 = EDGE_LOOP ( 'NONE', ( #39, #427, #904, #82 ) ) ; +#955 = FACE_OUTER_BOUND ( 'NONE', #360, .T. ) ; +#956 = ORIENTED_EDGE ( 'NONE', *, *, #260, .T. ) ; +#957 = AXIS2_PLACEMENT_3D ( 'NONE', #358, #51, #840 ) ; +#958 = ADVANCED_FACE ( 'NONE', ( #624 ), #93, .F. ) ; +#959 = AXIS2_PLACEMENT_3D ( 'NONE', #282, #196, #748 ) ; +#960 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, -3.324999999999999734 ) ) ; +#961 = ADVANCED_FACE ( 'NONE', ( #939, #277 ), #943, .F. ) ; +#962 = EDGE_CURVE ( 'NONE', #972, #289, #806, .T. ) ; +#963 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#964 = LINE ( 'NONE', #986, #999 ) ; +#965 = FACE_BOUND ( 'NONE', #420, .T. ) ; +#966 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#967 = ORIENTED_EDGE ( 'NONE', *, *, #206, .F. ) ; +#968 = ORIENTED_EDGE ( 'NONE', *, *, #653, .T. ) ; +#969 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, -0.07500000000000069111 ) ) ; +#970 = DIRECTION ( 'NONE', ( 1.476360405086644309E-16, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#971 = PLANE ( 'NONE', #543 ) ; +#972 = VERTEX_POINT ( 'NONE', #555 ) ; +#973 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.324999999999999734 ) ) ; +#974 = FACE_OUTER_BOUND ( 'NONE', #750, .T. ) ; +#975 = EDGE_LOOP ( 'NONE', ( #581, #56 ) ) ; +#976 = CARTESIAN_POINT ( 'NONE', ( 34.05625000000001279, 7.426645091693629297, 3.174999999999999822 ) ) ; +#977 = EDGE_CURVE ( 'NONE', #729, #502, #461, .T. ) ; +#978 = ORIENTED_EDGE ( 'NONE', *, *, #61, .F. ) ; +#979 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#980 = EDGE_CURVE ( 'NONE', #894, #507, #548, .T. ) ; +#981 = ORIENTED_EDGE ( 'NONE', *, *, #61, .T. ) ; +#982 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#983 = EDGE_CURVE ( 'NONE', #667, #761, #831, .T. ) ; +#984 = EDGE_CURVE ( 'NONE', #100, #841, #686, .T. ) ; +#985 = ORIENTED_EDGE ( 'NONE', *, *, #864, .F. ) ; +#986 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, 3.174999999999999822 ) ) ; +#987 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#988 = VECTOR ( 'NONE', #365, 999.9999999999998863 ) ; +#989 = LINE ( 'NONE', #536, #590 ) ; +#990 = LINE ( 'NONE', #842, #854 ) ; +#991 = ORIENTED_EDGE ( 'NONE', *, *, #45, .F. ) ; +#992 = AXIS2_PLACEMENT_3D ( 'NONE', #409, #719, #272 ) ; +#993 = ORIENTED_EDGE ( 'NONE', *, *, #18, .T. ) ; +#994 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999997868, 24.16396979503775810, -6.349999999999999645 ) ) ; +#995 = EDGE_CURVE ( 'NONE', #894, #869, #141, .T. ) ; +#996 = EDGE_CURVE ( 'NONE', #754, #19, #602, .T. ) ; +#997 = VECTOR ( 'NONE', #533, 1000.000000000000000 ) ; +#998 = LINE ( 'NONE', #345, #28 ) ; +#999 = VECTOR ( 'NONE', #601, 1000.000000000000000 ) ; +#1000 = ORIENTED_EDGE ( 'NONE', *, *, #312, .F. ) ; +#1001 = CYLINDRICAL_SURFACE ( 'NONE', #992, 3.499999999999999556 ) ; +#1002 = FACE_OUTER_BOUND ( 'NONE', #569, .T. ) ; +#1003 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1004 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 0.6749999999999998224 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Models/litscher_carbonfab_181126/Printed/gusset_L_181126.STL b/Models/litscher_carbonfab_181126/Printed/gusset_L_181126.STL new file mode 100644 index 0000000..2a67c6e --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/gusset_L_181126.STL Binary files differ diff --git a/Models/litscher_carbonfab_181126/Printed/gusset_R_181126.STEP b/Models/litscher_carbonfab_181126/Printed/gusset_R_181126.STEP new file mode 100644 index 0000000..580b41c --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/gusset_R_181126.STEP @@ -0,0 +1,986 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('gusset_R_181126.STEP', + '2018-11-27T00:49:32', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2018', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, -3.174999999999999822 ) ) ; +#2 = AXIS2_PLACEMENT_3D ( 'NONE', #130, #358, #432 ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, -1.700000000000001510 ) ) ; +#4 = ORIENTED_EDGE ( 'NONE', *, *, #574, .F. ) ; +#5 = ORIENTED_EDGE ( 'NONE', *, *, #654, .F. ) ; +#6 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#7 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#8 = EDGE_CURVE ( 'NONE', #940, #925, #216, .T. ) ; +#9 = LINE ( 'NONE', #795, #120 ) ; +#10 = LINE ( 'NONE', #890, #798 ) ; +#11 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, 3.324999999999999734 ) ) ; +#12 = EDGE_LOOP ( 'NONE', ( #402, #611, #920 ) ) ; +#13 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#14 = ORIENTED_EDGE ( 'NONE', *, *, #47, .T. ) ; +#15 = ORIENTED_EDGE ( 'NONE', *, *, #26, .F. ) ; +#16 = EDGE_CURVE ( 'NONE', #224, #62, #911, .T. ) ; +#17 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#18 = CIRCLE ( 'NONE', #74, 1.625000000000000222 ) ; +#19 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#20 = LINE ( 'NONE', #174, #771 ) ; +#21 = ORIENTED_EDGE ( 'NONE', *, *, #905, .F. ) ; +#22 = AXIS2_PLACEMENT_3D ( 'NONE', #341, #284, #421 ) ; +#23 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.324999999999999734 ) ) ; +#24 = DIRECTION ( 'NONE', ( 1.000000000000000000, 7.381802025433224012E-17, 0.0000000000000000000 ) ) ; +#25 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -0.6749999999999993783 ) ) ; +#26 = EDGE_CURVE ( 'NONE', #748, #468, #650, .T. ) ; +#27 = EDGE_LOOP ( 'NONE', ( #629, #391, #196, #792 ) ) ; +#28 = ORIENTED_EDGE ( 'NONE', *, *, #363, .F. ) ; +#29 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, -0.07500000000000069111 ) ) ; +#30 = CYLINDRICAL_SURFACE ( 'NONE', #847, 1.625000000000003775 ) ; +#31 = LINE ( 'NONE', #965, #946 ) ; +#32 = ORIENTED_EDGE ( 'NONE', *, *, #314, .T. ) ; +#33 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, 3.324999999999999734 ) ) ; +#34 = ORIENTED_EDGE ( 'NONE', *, *, #47, .F. ) ; +#35 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#36 = ORIENTED_EDGE ( 'NONE', *, *, #106, .F. ) ; +#37 = AXIS2_PLACEMENT_3D ( 'NONE', #464, #243, #518 ) ; +#38 = CARTESIAN_POINT ( 'NONE', ( 6.350000000000000533, 24.16396979503775455, 6.349999999999999645 ) ) ; +#39 = VECTOR ( 'NONE', #703, 1000.000000000000000 ) ; +#40 = AXIS2_PLACEMENT_3D ( 'NONE', #488, #46, #868 ) ; +#41 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#42 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#43 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 3.174999999999999822 ) ) ; +#44 = EDGE_CURVE ( 'NONE', #925, #564, #900, .T. ) ; +#45 = DIRECTION ( 'NONE', ( -0.8559410833627774107, 0.5170733621177510120, -0.0000000000000000000 ) ) ; +#46 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#47 = EDGE_CURVE ( 'NONE', #564, #304, #765, .T. ) ; +#48 = ORIENTED_EDGE ( 'NONE', *, *, #923, .T. ) ; +#49 = ORIENTED_EDGE ( 'NONE', *, *, #961, .F. ) ; +#50 = ORIENTED_EDGE ( 'NONE', *, *, #162, .F. ) ; +#51 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 6.349999999999999645 ) ) ; +#52 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#53 = VECTOR ( 'NONE', #804, 1000.000000000000000 ) ; +#54 = LINE ( 'NONE', #337, #535 ) ; +#55 = ADVANCED_FACE ( 'NONE', ( #438 ), #150, .F. ) ; +#56 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#57 = VECTOR ( 'NONE', #778, 1000.000000000000000 ) ; +#58 = EDGE_CURVE ( 'NONE', #332, #381, #239, .T. ) ; +#59 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#60 = ADVANCED_FACE ( 'NONE', ( #573 ), #624, .F. ) ; +#61 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#62 = VERTEX_POINT ( 'NONE', #95 ) ; +#63 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, -0.07500000000000103806 ) ) ; +#64 = EDGE_CURVE ( 'NONE', #882, #710, #101, .T. ) ; +#65 = ORIENTED_EDGE ( 'NONE', *, *, #817, .F. ) ; +#66 = EDGE_CURVE ( 'NONE', #693, #303, #134, .T. ) ; +#67 = ADVANCED_FACE ( 'NONE', ( #89, #308 ), #390, .F. ) ; +#68 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#69 = FACE_OUTER_BOUND ( 'NONE', #519, .T. ) ; +#70 = VERTEX_POINT ( 'NONE', #821 ) ; +#71 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#72 = AXIS2_PLACEMENT_3D ( 'NONE', #584, #68, #969 ) ; +#73 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#74 = AXIS2_PLACEMENT_3D ( 'NONE', #651, #720, #800 ) ; +#75 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.174999999999999822 ) ) ; +#76 = ORIENTED_EDGE ( 'NONE', *, *, #681, .F. ) ; +#77 = ORIENTED_EDGE ( 'NONE', *, *, #463, .T. ) ; +#78 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#79 = VERTEX_POINT ( 'NONE', #311 ) ; +#80 = EDGE_CURVE ( 'NONE', #304, #633, #899, .T. ) ; +#81 = CIRCLE ( 'NONE', #659, 1.625000000000001332 ) ; +#82 = LINE ( 'NONE', #258, #543 ) ; +#83 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#84 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#85 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#86 = EDGE_CURVE ( 'NONE', #431, #186, #516, .T. ) ; +#87 = ORIENTED_EDGE ( 'NONE', *, *, #109, .T. ) ; +#88 = FACE_OUTER_BOUND ( 'NONE', #270, .T. ) ; +#89 = FACE_BOUND ( 'NONE', #512, .T. ) ; +#90 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#91 = VECTOR ( 'NONE', #658, 1000.000000000000000 ) ; +#92 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#93 = EDGE_CURVE ( 'NONE', #536, #557, #739, .T. ) ; +#94 = VERTEX_POINT ( 'NONE', #575 ) ; +#95 = CARTESIAN_POINT ( 'NONE', ( 4.799999999999990052, 20.00000000000002132, -0.6749999999999993783 ) ) ; +#96 = VERTEX_POINT ( 'NONE', #644 ) ; +#97 = ORIENTED_EDGE ( 'NONE', *, *, #310, .F. ) ; +#98 = CYLINDRICAL_SURFACE ( 'NONE', #809, 1.625000000000000222 ) ; +#99 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#100 = VECTOR ( 'NONE', #852, 1000.000000000000114 ) ; +#101 = LINE ( 'NONE', #727, #876 ) ; +#102 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#103 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, -3.174999999999999822 ) ) ; +#104 = ORIENTED_EDGE ( 'NONE', *, *, #26, .T. ) ; +#105 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, 3.174999999999999822 ) ) ; +#106 = EDGE_CURVE ( 'NONE', #144, #224, #544, .T. ) ; +#107 = VECTOR ( 'NONE', #225, 1000.000000000000000 ) ; +#108 = ORIENTED_EDGE ( 'NONE', *, *, #541, .T. ) ; +#109 = EDGE_CURVE ( 'NONE', #304, #462, #662, .T. ) ; +#110 = DIRECTION ( 'NONE', ( 3.589483621050224049E-17, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#111 = EDGE_LOOP ( 'NONE', ( #164, #741, #183, #172 ) ) ; +#112 = AXIS2_PLACEMENT_3D ( 'NONE', #730, #507, #292 ) ; +#113 = PLANE ( 'NONE', #758 ) ; +#114 = ORIENTED_EDGE ( 'NONE', *, *, #260, .T. ) ; +#115 = AXIS2_PLACEMENT_3D ( 'NONE', #712, #641, #945 ) ; +#116 = ORIENTED_EDGE ( 'NONE', *, *, #232, .F. ) ; +#117 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#118 = CIRCLE ( 'NONE', #791, 1.625000000000000222 ) ; +#119 = CARTESIAN_POINT ( 'NONE', ( 4.799999999999990052, 20.00000000000002132, 3.174999999999999822 ) ) ; +#120 = VECTOR ( 'NONE', #722, 1000.000000000000000 ) ; +#121 = AXIS2_PLACEMENT_3D ( 'NONE', #19, #744, #171 ) ; +#122 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#123 = AXIS2_PLACEMENT_3D ( 'NONE', #323, #7, #913 ) ; +#124 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, -0.07500000000000069111 ) ) ; +#125 = ADVANCED_FACE ( 'NONE', ( #287 ), #275, .F. ) ; +#126 = DIRECTION ( 'NONE', ( -1.000000000000000000, 1.476360405086644309E-16, 0.0000000000000000000 ) ) ; +#127 = EDGE_CURVE ( 'NONE', #643, #94, #841, .T. ) ; +#128 = ORIENTED_EDGE ( 'NONE', *, *, #127, .T. ) ; +#129 = ORIENTED_EDGE ( 'NONE', *, *, #873, .T. ) ; +#130 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 6.650000000000001243, 3.324999999999999734 ) ) ; +#131 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.476360405086644309E-16, 0.0000000000000000000 ) ) ; +#132 = CIRCLE ( 'NONE', #602, 1.625000000000003775 ) ; +#133 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.324999999999999734 ) ) ; +#134 = LINE ( 'NONE', #836, #379 ) ; +#135 = VECTOR ( 'NONE', #452, 1000.000000000000000 ) ; +#136 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#137 = ADVANCED_FACE ( 'NONE', ( #182, #359 ), #349, .T. ) ; +#138 = EDGE_LOOP ( 'NONE', ( #772, #587, #592, #774 ) ) ; +#139 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -1.700000000000001288 ) ) ; +#140 = AXIS2_PLACEMENT_3D ( 'NONE', #360, #637, #935 ) ; +#141 = ORIENTED_EDGE ( 'NONE', *, *, #419, .F. ) ; +#142 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude8', #906 ) ; +#143 = EDGE_CURVE ( 'NONE', #718, #625, #648, .T. ) ; +#144 = VERTEX_POINT ( 'NONE', #493 ) ; +#145 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, -0.07500000000000103806 ) ) ; +#146 = FACE_BOUND ( 'NONE', #860, .T. ) ; +#147 = VECTOR ( 'NONE', #580, 1000.000000000000000 ) ; +#148 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#149 = EDGE_CURVE ( 'NONE', #79, #94, #523, .T. ) ; +#150 = PLANE ( 'NONE', #760 ) ; +#151 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#152 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, 3.324999999999999734 ) ) ; +#153 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, -3.174999999999999822 ) ) ; +#154 = AXIS2_PLACEMENT_3D ( 'NONE', #761, #99, #167 ) ; +#155 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, -1.700000000000004396 ) ) ; +#156 = ORIENTED_EDGE ( 'NONE', *, *, #106, .T. ) ; +#157 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, 6.349999999999999645 ) ) ; +#158 = EDGE_LOOP ( 'NONE', ( #407, #5, #32, #927 ) ) ; +#159 = CYLINDRICAL_SURFACE ( 'NONE', #926, 1.625000000000001332 ) ; +#160 = PRESENTATION_STYLE_ASSIGNMENT (( #697 ) ) ; +#161 = ORIENTED_EDGE ( 'NONE', *, *, #357, .T. ) ; +#162 = EDGE_CURVE ( 'NONE', #462, #940, #461, .T. ) ; +#163 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#164 = ORIENTED_EDGE ( 'NONE', *, *, #755, .F. ) ; +#165 = ORIENTED_EDGE ( 'NONE', *, *, #233, .T. ) ; +#166 = ORIENTED_EDGE ( 'NONE', *, *, #554, .F. ) ; +#167 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#168 = VECTOR ( 'NONE', #17, 1000.000000000000000 ) ; +#169 = FACE_OUTER_BOUND ( 'NONE', #338, .T. ) ; +#170 = AXIS2_PLACEMENT_3D ( 'NONE', #491, #949, #630 ) ; +#171 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#172 = ORIENTED_EDGE ( 'NONE', *, *, #314, .F. ) ; +#173 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#174 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, -3.174999999999999822 ) ) ; +#175 = ORIENTED_EDGE ( 'NONE', *, *, #454, .F. ) ; +#176 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, -0.07500000000000069111 ) ) ; +#177 = ORIENTED_EDGE ( 'NONE', *, *, #246, .F. ) ; +#178 = EDGE_CURVE ( 'NONE', #625, #718, #435, .T. ) ; +#179 = EDGE_CURVE ( 'NONE', #529, #394, #828, .T. ) ; +#180 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#181 = FACE_OUTER_BOUND ( 'NONE', #185, .T. ) ; +#182 = FACE_BOUND ( 'NONE', #822, .T. ) ; +#183 = ORIENTED_EDGE ( 'NONE', *, *, #232, .T. ) ; +#184 = DIRECTION ( 'NONE', ( 1.000000000000000000, -3.589483621050224049E-17, 0.0000000000000000000 ) ) ; +#185 = EDGE_LOOP ( 'NONE', ( #231, #498, #944, #689 ) ) ; +#186 = VERTEX_POINT ( 'NONE', #709 ) ; +#187 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, 6.349999999999999645 ) ) ; +#188 = CYLINDRICAL_SURFACE ( 'NONE', #170, 1.625000000000003775 ) ; +#189 = FACE_BOUND ( 'NONE', #331, .T. ) ; +#190 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#191 = ORIENTED_EDGE ( 'NONE', *, *, #80, .F. ) ; +#192 = FILL_AREA_STYLE ('',( #632 ) ) ; +#193 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.174999999999999822 ) ) ; +#194 = ORIENTED_EDGE ( 'NONE', *, *, #851, .T. ) ; +#195 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 18.52712016783445392, -0.6749999999999998224 ) ) ; +#196 = ORIENTED_EDGE ( 'NONE', *, *, #86, .F. ) ; +#197 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#198 = SHAPE_DEFINITION_REPRESENTATION ( #957, #831 ) ; +#199 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#200 = CIRCLE ( 'NONE', #669, 1.625000000000001332 ) ; +#201 = VECTOR ( 'NONE', #885, 1000.000000000000000 ) ; +#202 = VECTOR ( 'NONE', #964, 1000.000000000000114 ) ; +#203 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#204 = AXIS2_PLACEMENT_3D ( 'NONE', #559, #478, #685 ) ; +#205 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#206 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#207 = ADVANCED_FACE ( 'NONE', ( #600 ), #492, .F. ) ; +#208 = PLANE ( 'NONE', #832 ) ; +#209 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#210 = ORIENTED_EDGE ( 'NONE', *, *, #93, .T. ) ; +#211 = EDGE_LOOP ( 'NONE', ( #50, #723, #34, #371, #417 ) ) ; +#212 = VECTOR ( 'NONE', #884, 1000.000000000000000 ) ; +#213 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#214 = VECTOR ( 'NONE', #680, 1000.000000000000000 ) ; +#215 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#216 = LINE ( 'NONE', #801, #135 ) ; +#217 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -0.6749999999999998224 ) ) ; +#218 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 6.349999999999998757 ) ) ; +#219 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#220 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 6.650000000000001243, 3.324999999999999734 ) ) ; +#221 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, 6.349999999999999645 ) ) ; +#222 = EDGE_CURVE ( 'NONE', #596, #564, #818, .T. ) ; +#223 = EDGE_LOOP ( 'NONE', ( #695, #108, #289, #367 ) ) ; +#224 = VERTEX_POINT ( 'NONE', #119 ) ; +#225 = DIRECTION ( 'NONE', ( -3.589483621050224049E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#226 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#227 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#228 = VECTOR ( 'NONE', #215, 1000.000000000000000 ) ; +#229 = VECTOR ( 'NONE', #131, 1000.000000000000000 ) ; +#230 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#231 = ORIENTED_EDGE ( 'NONE', *, *, #476, .T. ) ; +#232 = EDGE_CURVE ( 'NONE', #96, #904, #888, .T. ) ; +#233 = EDGE_CURVE ( 'NONE', #666, #332, #679, .T. ) ; +#234 = ORIENTED_EDGE ( 'NONE', *, *, #380, .T. ) ; +#235 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, 6.349999999999999645 ) ) ; +#236 = EDGE_LOOP ( 'NONE', ( #621, #520, #294, #550 ) ) ; +#237 = AXIS2_PLACEMENT_3D ( 'NONE', #105, #334, #261 ) ; +#238 = LINE ( 'NONE', #300, #228 ) ; +#239 = LINE ( 'NONE', #756, #948 ) ; +#240 = FILL_AREA_STYLE ('',( #603 ) ) ; +#241 = PLANE ( 'NONE', #37 ) ; +#242 = EDGE_CURVE ( 'NONE', #896, #622, #608, .T. ) ; +#243 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#244 = VERTEX_POINT ( 'NONE', #195 ) ; +#245 = ORIENTED_EDGE ( 'NONE', *, *, #260, .F. ) ; +#246 = EDGE_CURVE ( 'NONE', #625, #70, #301, .T. ) ; +#247 = VERTEX_POINT ( 'NONE', #941 ) ; +#248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#249 = CIRCLE ( 'NONE', #501, 1.625000000000001332 ) ; +#250 = LINE ( 'NONE', #103, #897 ) ; +#251 = AXIS2_PLACEMENT_3D ( 'NONE', #145, #653, #725 ) ; +#252 = VECTOR ( 'NONE', #577, 1000.000000000000000 ) ; +#253 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#254 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#255 = EDGE_CURVE ( 'NONE', #830, #96, #782, .T. ) ; +#256 = AXIS2_PLACEMENT_3D ( 'NONE', #880, #593, #590 ) ; +#257 = ORIENTED_EDGE ( 'NONE', *, *, #572, .F. ) ; +#258 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, -3.174999999999999822 ) ) ; +#259 = ORIENTED_EDGE ( 'NONE', *, *, #315, .F. ) ; +#260 = EDGE_CURVE ( 'NONE', #244, #633, #424, .T. ) ; +#261 = DIRECTION ( 'NONE', ( 0.8559410833627774107, -0.5170733621177511230, 0.0000000000000000000 ) ) ; +#262 = LINE ( 'NONE', #451, #607 ) ; +#263 = VERTEX_POINT ( 'NONE', #443 ) ; +#264 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 21.47287983216558871, -0.6749999999999998224 ) ) ; +#265 = EDGE_CURVE ( 'NONE', #269, #529, #10, .T. ) ; +#266 = ADVANCED_FACE ( 'NONE', ( #763 ), #159, .F. ) ; +#267 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.324999999999999734 ) ) ; +#268 = ORIENTED_EDGE ( 'NONE', *, *, #64, .F. ) ; +#269 = VERTEX_POINT ( 'NONE', #716 ) ; +#270 = EDGE_LOOP ( 'NONE', ( #347, #767, #749, #605 ) ) ; +#271 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#272 = FACE_OUTER_BOUND ( 'NONE', #343, .T. ) ; +#273 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#274 = CIRCLE ( 'NONE', #123, 1.625000000000000222 ) ; +#275 = CYLINDRICAL_SURFACE ( 'NONE', #691, 1.625000000000000222 ) ; +#276 = DIRECTION ( 'NONE', ( -2.523234146875356491E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#277 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, 1.549999999999999156 ) ) ; +#278 = EDGE_CURVE ( 'NONE', #529, #431, #238, .T. ) ; +#279 = ORIENTED_EDGE ( 'NONE', *, *, #419, .T. ) ; +#280 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#281 = ADVANCED_FACE ( 'NONE', ( #401 ), #738, .F. ) ; +#282 = EDGE_LOOP ( 'NONE', ( #799, #549 ) ) ; +#283 = EDGE_CURVE ( 'NONE', #263, #934, #714, .T. ) ; +#284 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#285 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, 3.324999999999999734 ) ) ; +#286 = VECTOR ( 'NONE', #902, 1000.000000000000000 ) ; +#287 = FACE_OUTER_BOUND ( 'NONE', #915, .T. ) ; +#288 = ADVANCED_FACE ( 'NONE', ( #599 ), #952, .F. ) ; +#289 = ORIENTED_EDGE ( 'NONE', *, *, #447, .T. ) ; +#290 = PLANE ( 'NONE', #742 ) ; +#291 = AXIS2_PLACEMENT_3D ( 'NONE', #786, #562, #61 ) ; +#292 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#293 = ORIENTED_EDGE ( 'NONE', *, *, #936, .F. ) ; +#294 = ORIENTED_EDGE ( 'NONE', *, *, #86, .T. ) ; +#295 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 18.52712016783445392, -0.6749999999999998224 ) ) ; +#296 = DIRECTION ( 'NONE', ( -1.000000000000000000, -7.381802025433224012E-17, 0.0000000000000000000 ) ) ; +#297 = LINE ( 'NONE', #647, #212 ) ; +#298 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, 1.549999999999999156 ) ) ; +#299 = FACE_OUTER_BOUND ( 'NONE', #845, .T. ) ; +#300 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.324999999999999734 ) ) ; +#301 = LINE ( 'NONE', #872, #616 ) ; +#302 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#303 = VERTEX_POINT ( 'NONE', #3 ) ; +#304 = VERTEX_POINT ( 'NONE', #728 ) ; +#305 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#306 = FACE_BOUND ( 'NONE', #719, .T. ) ; +#307 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, -3.174999999999999822 ) ) ; +#308 = FACE_OUTER_BOUND ( 'NONE', #531, .T. ) ; +#309 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#310 = EDGE_CURVE ( 'NONE', #186, #269, #514, .T. ) ; +#311 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, 3.324999999999999734 ) ) ; +#312 = ORIENTED_EDGE ( 'NONE', *, *, #454, .T. ) ; +#313 = EDGE_CURVE ( 'NONE', #457, #79, #522, .T. ) ; +#314 = EDGE_CURVE ( 'NONE', #418, #904, #615, .T. ) ; +#315 = EDGE_CURVE ( 'NONE', #62, #320, #200, .T. ) ; +#316 = ORIENTED_EDGE ( 'NONE', *, *, #942, .T. ) ; +#317 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#318 = ORIENTED_EDGE ( 'NONE', *, *, #447, .F. ) ; +#319 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#320 = VERTEX_POINT ( 'NONE', #591 ) ; +#321 = STYLED_ITEM ( 'NONE', ( #916 ), #831 ) ; +#322 = CYLINDRICAL_SURFACE ( 'NONE', #901, 1.625000000000000222 ) ; +#323 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, -0.07500000000000103806 ) ) ; +#324 = VECTOR ( 'NONE', #83, 1000.000000000000000 ) ; +#325 = VECTOR ( 'NONE', #276, 1000.000000000000000 ) ; +#326 = AXIS2_PLACEMENT_3D ( 'NONE', #428, #205, #563 ) ; +#327 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#328 = AXIS2_PLACEMENT_3D ( 'NONE', #25, #327, #752 ) ; +#329 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#330 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #280, 'distance_accuracy_value', 'NONE'); +#331 = EDGE_LOOP ( 'NONE', ( #734, #116 ) ) ; +#332 = VERTEX_POINT ( 'NONE', #373 ) ; +#333 = EDGE_CURVE ( 'NONE', #708, #940, #661, .T. ) ; +#334 = DIRECTION ( 'NONE', ( -0.5170733621177511230, -0.8559410833627774107, 0.0000000000000000000 ) ) ; +#335 = LINE ( 'NONE', #908, #450 ) ; +#336 = VECTOR ( 'NONE', #42, 1000.000000000000000 ) ; +#337 = CARTESIAN_POINT ( 'NONE', ( 34.05625000000001279, 7.426645091693629297, 3.174999999999999822 ) ) ; +#338 = EDGE_LOOP ( 'NONE', ( #114, #411 ) ) ; +#339 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, 3.324999999999999734 ) ) ; +#340 = ORIENTED_EDGE ( 'NONE', *, *, #521, .T. ) ; +#341 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.324999999999999734 ) ) ; +#342 = EDGE_LOOP ( 'NONE', ( #156, #631, #141, #877 ) ) ; +#343 = EDGE_LOOP ( 'NONE', ( #15, #617, #415, #65 ) ) ; +#344 = FACE_OUTER_BOUND ( 'NONE', #158, .T. ) ; +#345 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, -0.07500000000000069111 ) ) ; +#346 = CIRCLE ( 'NONE', #561, 3.499999999999999556 ) ; +#347 = ORIENTED_EDGE ( 'NONE', *, *, #178, .F. ) ; +#348 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, -0.07500000000000069111 ) ) ; +#349 = PLANE ( 'NONE', #326 ) ; +#350 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#351 = AXIS2_PLACEMENT_3D ( 'NONE', #441, #588, #78 ) ; +#352 = VERTEX_POINT ( 'NONE', #802 ) ; +#353 = ORIENTED_EDGE ( 'NONE', *, *, #278, .F. ) ; +#354 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, -0.07500000000000069111 ) ) ; +#355 = CARTESIAN_POINT ( 'NONE', ( 6.350000000000000533, 24.16396979503775455, 6.349999999999999645 ) ) ; +#356 = VECTOR ( 'NONE', #440, 1000.000000000000000 ) ; +#357 = EDGE_CURVE ( 'NONE', #247, #481, #9, .T. ) ; +#358 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#359 = FACE_OUTER_BOUND ( 'NONE', #223, .T. ) ; +#360 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 6.349999999999998757 ) ) ; +#361 = ORIENTED_EDGE ( 'NONE', *, *, #222, .T. ) ; +#362 = PLANE ( 'NONE', #483 ) ; +#363 = EDGE_CURVE ( 'NONE', #622, #352, #887, .T. ) ; +#364 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#365 = ORIENTED_EDGE ( 'NONE', *, *, #66, .F. ) ; +#366 = EDGE_LOOP ( 'NONE', ( #234, #540, #316, #768 ) ) ; +#367 = ORIENTED_EDGE ( 'NONE', *, *, #574, .T. ) ; +#368 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, -0.07500000000000103806 ) ) ; +#369 = FACE_OUTER_BOUND ( 'NONE', #579, .T. ) ; +#370 = CIRCLE ( 'NONE', #721, 1.625000000000000222 ) ; +#371 = ORIENTED_EDGE ( 'NONE', *, *, #44, .F. ) ; +#372 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #321 ) ) ; +#373 = CARTESIAN_POINT ( 'NONE', ( 6.350000000000003197, 24.16396979503774389, 3.174999999999999822 ) ) ; +#374 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #330 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #280, #350, #567 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#375 = ORIENTED_EDGE ( 'NONE', *, *, #968, .F. ) ; +#376 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.324999999999999734 ) ) ; +#377 = ORIENTED_EDGE ( 'NONE', *, *, #179, .T. ) ; +#378 = FACE_BOUND ( 'NONE', #539, .T. ) ; +#379 = VECTOR ( 'NONE', #13, 1000.000000000000000 ) ; +#380 = EDGE_CURVE ( 'NONE', #882, #457, #31, .T. ) ; +#381 = VERTEX_POINT ( 'NONE', #448 ) ; +#382 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#383 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #302 ) ; +#384 = EDGE_LOOP ( 'NONE', ( #959, #485, #883, #259 ) ) ; +#385 = ORIENTED_EDGE ( 'NONE', *, *, #698, .T. ) ; +#386 = AXIS2_PLACEMENT_3D ( 'NONE', #38, #184, #110 ) ; +#387 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, 3.324999999999999734 ) ) ; +#388 = VECTOR ( 'NONE', #85, 1000.000000000000000 ) ; +#389 = FACE_BOUND ( 'NONE', #676, .T. ) ; +#390 = PLANE ( 'NONE', #548 ) ; +#391 = ORIENTED_EDGE ( 'NONE', *, *, #618, .F. ) ; +#392 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#393 = EDGE_CURVE ( 'NONE', #896, #444, #400, .T. ) ; +#394 = VERTEX_POINT ( 'NONE', #75 ) ; +#395 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#396 = VERTEX_POINT ( 'NONE', #469 ) ; +#397 = CIRCLE ( 'NONE', #251, 1.624999999999999778 ) ; +#398 = EDGE_CURVE ( 'NONE', #622, #896, #274, .T. ) ; +#399 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, -3.174999999999999822 ) ) ; +#400 = LINE ( 'NONE', #652, #918 ) ; +#401 = FACE_OUTER_BOUND ( 'NONE', #111, .T. ) ; +#402 = ORIENTED_EDGE ( 'NONE', *, *, #594, .T. ) ; +#403 = EDGE_CURVE ( 'NONE', #904, #96, #931, .T. ) ; +#404 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, 1.550000000000003153 ) ) ; +#405 = AXIS2_PLACEMENT_3D ( 'NONE', #11, #829, #453 ) ; +#406 = ORIENTED_EDGE ( 'NONE', *, *, #8, .T. ) ; +#407 = ORIENTED_EDGE ( 'NONE', *, *, #255, .F. ) ; +#408 = LINE ( 'NONE', #808, #699 ) ; +#409 = LINE ( 'NONE', #912, #214 ) ; +#410 = PLANE ( 'NONE', #237 ) ; +#411 = ORIENTED_EDGE ( 'NONE', *, *, #572, .T. ) ; +#412 = PLANE ( 'NONE', #204 ) ; +#413 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#414 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#415 = ORIENTED_EDGE ( 'NONE', *, *, #66, .T. ) ; +#416 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 6.650000000000001243, -1.700000000000004396 ) ) ; +#417 = ORIENTED_EDGE ( 'NONE', *, *, #8, .F. ) ; +#418 = VERTEX_POINT ( 'NONE', #155 ) ; +#419 = EDGE_CURVE ( 'NONE', #320, #62, #569, .T. ) ; +#420 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#421 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#422 = LINE ( 'NONE', #510, #107 ) ; +#423 = FACE_OUTER_BOUND ( 'NONE', #794, .T. ) ; +#424 = LINE ( 'NONE', #793, #201 ) ; +#425 = ORIENTED_EDGE ( 'NONE', *, *, #333, .F. ) ; +#426 = EDGE_CURVE ( 'NONE', #144, #320, #409, .T. ) ; +#427 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, -1.700000000000001288 ) ) ; +#428 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#429 = ORIENTED_EDGE ( 'NONE', *, *, #393, .T. ) ; +#430 = ADVANCED_FACE ( 'NONE', ( #762, #169 ), #892, .T. ) ; +#431 = VERTEX_POINT ( 'NONE', #842 ) ; +#432 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#433 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#434 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#435 = CIRCLE ( 'NONE', #472, 1.625000000000003775 ) ; +#436 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#437 = ADVANCED_FACE ( 'NONE', ( #780, #378, #502 ), #241, .F. ) ; +#438 = FACE_OUTER_BOUND ( 'NONE', #282, .T. ) ; +#439 = DIRECTION ( 'NONE', ( -2.523234146875356491E-15, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#440 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#441 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, 3.324999999999999734 ) ) ; +#442 = ORIENTED_EDGE ( 'NONE', *, *, #143, .F. ) ; +#443 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, 6.349999999999999645 ) ) ; +#444 = VERTEX_POINT ( 'NONE', #474 ) ; +#445 = ORIENTED_EDGE ( 'NONE', *, *, #541, .F. ) ; +#446 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#447 = EDGE_CURVE ( 'NONE', #596, #708, #335, .T. ) ; +#448 = CARTESIAN_POINT ( 'NONE', ( 6.349999999999999645, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#449 = FACE_OUTER_BOUND ( 'NONE', #12, .T. ) ; +#450 = VECTOR ( 'NONE', #253, 1000.000000000000000 ) ; +#451 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, 3.324999999999999734 ) ) ; +#452 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#453 = DIRECTION ( 'NONE', ( 2.523234146875356491E-15, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#454 = EDGE_CURVE ( 'NONE', #444, #352, #370, .T. ) ; +#455 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #524 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #609, #746, #833 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#456 = EDGE_LOOP ( 'NONE', ( #279, #551 ) ) ; +#457 = VERTEX_POINT ( 'NONE', #23 ) ; +#458 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#459 = EDGE_CURVE ( 'NONE', #481, #394, #20, .T. ) ; +#460 = FACE_OUTER_BOUND ( 'NONE', #785, .T. ) ; +#461 = LINE ( 'NONE', #52, #57 ) ; +#462 = VERTEX_POINT ( 'NONE', #757 ) ; +#463 = EDGE_CURVE ( 'NONE', #396, #70, #132, .T. ) ; +#464 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#465 = ORIENTED_EDGE ( 'NONE', *, *, #162, .T. ) ; +#466 = EDGE_LOOP ( 'NONE', ( #257, #191, #87, #677 ) ) ; +#467 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #321 ), #951 ) ; +#468 = VERTEX_POINT ( 'NONE', #538 ) ; +#469 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, -1.700000000000004396 ) ) ; +#470 = FACE_OUTER_BOUND ( 'NONE', #500, .T. ) ; +#471 = VECTOR ( 'NONE', #136, 1000.000000000000000 ) ; +#472 = AXIS2_PLACEMENT_3D ( 'NONE', #345, #713, #858 ) ; +#473 = VECTOR ( 'NONE', #413, 1000.000000000000000 ) ; +#474 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, 1.549999999999999156 ) ) ; +#475 = ORIENTED_EDGE ( 'NONE', *, *, #511, .F. ) ; +#476 = EDGE_CURVE ( 'NONE', #94, #557, #250, .T. ) ; +#477 = ORIENTED_EDGE ( 'NONE', *, *, #755, .T. ) ; +#478 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#479 = LINE ( 'NONE', #309, #286 ) ; +#480 = VECTOR ( 'NONE', #705, 1000.000000000000000 ) ; +#481 = VERTEX_POINT ( 'NONE', #399 ) ; +#482 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#483 = AXIS2_PLACEMENT_3D ( 'NONE', #51, #777, #635 ) ; +#484 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #163, 'distance_accuracy_value', 'NONE'); +#485 = ORIENTED_EDGE ( 'NONE', *, *, #681, .T. ) ; +#486 = VERTEX_POINT ( 'NONE', #816 ) ; +#487 = ORIENTED_EDGE ( 'NONE', *, *, #380, .F. ) ; +#488 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, -0.07500000000000069111 ) ) ; +#489 = FACE_OUTER_BOUND ( 'NONE', #811, .T. ) ; +#490 = LINE ( 'NONE', #180, #753 ) ; +#491 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#492 = CYLINDRICAL_SURFACE ( 'NONE', #140, 1.625000000000001332 ) ; +#493 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999987388, 20.00000000000002132, 3.174999999999999822 ) ) ; +#494 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, -3.174999999999999822 ) ) ; +#495 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#496 = ADVANCED_FACE ( 'NONE', ( #586 ), #674, .T. ) ; +#497 = PLANE ( 'NONE', #2 ) ; +#498 = ORIENTED_EDGE ( 'NONE', *, *, #93, .F. ) ; +#499 = SURFACE_SIDE_STYLE ('',( #672 ) ) ; +#500 = EDGE_LOOP ( 'NONE', ( #807, #268, #166, #210 ) ) ; +#501 = AXIS2_PLACEMENT_3D ( 'NONE', #354, #867, #203 ) ; +#502 = FACE_OUTER_BOUND ( 'NONE', #211, .T. ) ; +#503 = ORIENTED_EDGE ( 'NONE', *, *, #149, .F. ) ; +#504 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -1.700000000000004396 ) ) ; +#505 = AXIS2_PLACEMENT_3D ( 'NONE', #29, #664, #733 ) ; +#506 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#507 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#508 = ORIENTED_EDGE ( 'NONE', *, *, #398, .F. ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #393, .F. ) ; +#510 = CARTESIAN_POINT ( 'NONE', ( 6.350000000000000533, 24.16396979503775455, 6.349999999999999645 ) ) ; +#511 = EDGE_CURVE ( 'NONE', #457, #643, #840, .T. ) ; +#512 = EDGE_LOOP ( 'NONE', ( #532, #477 ) ) ; +#513 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, -1.700000000000004396 ) ) ; +#514 = LINE ( 'NONE', #285, #864 ) ; +#515 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -0.6749999999999993783 ) ) ; +#516 = LINE ( 'NONE', #667, #325 ) ; +#517 = AXIS2_PLACEMENT_3D ( 'NONE', #63, #271, #495 ) ; +#518 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#519 = EDGE_LOOP ( 'NONE', ( #128, #503, #855, #546 ) ) ; +#520 = ORIENTED_EDGE ( 'NONE', *, *, #278, .T. ) ; +#521 = EDGE_CURVE ( 'NONE', #394, #486, #82, .T. ) ; +#522 = LINE ( 'NONE', #649, #147 ) ; +#523 = LINE ( 'NONE', #863, #252 ) ; +#524 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #609, 'distance_accuracy_value', 'NONE'); +#525 = SURFACE_STYLE_USAGE ( .BOTH. , #750 ) ; +#526 = DIRECTION ( 'NONE', ( 7.381802025433224012E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#527 = EDGE_LOOP ( 'NONE', ( #655, #601, #293, #613 ) ) ; +#528 = AXIS2_PLACEMENT_3D ( 'NONE', #368, #663, #506 ) ; +#529 = VERTEX_POINT ( 'NONE', #856 ) ; +#530 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#531 = EDGE_LOOP ( 'NONE', ( #161, #21, #97, #694 ) ) ; +#532 = ORIENTED_EDGE ( 'NONE', *, *, #654, .T. ) ; +#533 = FACE_OUTER_BOUND ( 'NONE', #138, .T. ) ; +#534 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, -0.07500000000000103806 ) ) ; +#535 = VECTOR ( 'NONE', #45, 999.9999999999998863 ) ; +#536 = VERTEX_POINT ( 'NONE', #339 ) ; +#537 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 21.47287983216558871, -0.6749999999999998224 ) ) ; +#538 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 5.650000000000001243, 1.549999999999999378 ) ) ; +#539 = EDGE_LOOP ( 'NONE', ( #565, #871, #881, #893 ) ) ; +#540 = ORIENTED_EDGE ( 'NONE', *, *, #313, .T. ) ; +#541 = EDGE_CURVE ( 'NONE', #332, #596, #54, .T. ) ; +#542 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#543 = VECTOR ( 'NONE', #41, 1000.000000000000000 ) ; +#544 = CIRCLE ( 'NONE', #606, 1.625000000000001332 ) ; +#545 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 2.899999999999999911, -1.700000000000001288 ) ) ; +#546 = ORIENTED_EDGE ( 'NONE', *, *, #511, .T. ) ; +#547 = AXIS2_PLACEMENT_3D ( 'NONE', #813, #889, #148 ) ; +#548 = AXIS2_PLACEMENT_3D ( 'NONE', #740, #526, #24 ) ; +#549 = ORIENTED_EDGE ( 'NONE', *, *, #178, .T. ) ; +#550 = ORIENTED_EDGE ( 'NONE', *, *, #310, .T. ) ; +#551 = ORIENTED_EDGE ( 'NONE', *, *, #315, .T. ) ; +#552 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -0.6749999999999998224 ) ) ; +#553 = LINE ( 'NONE', #764, #812 ) ; +#554 = EDGE_CURVE ( 'NONE', #536, #882, #678, .T. ) ; +#555 = FACE_BOUND ( 'NONE', #907, .T. ) ; +#556 = ADVANCED_FACE ( 'NONE', ( #189, #555, #423 ), #113, .F. ) ; +#557 = VERTEX_POINT ( 'NONE', #846 ) ; +#558 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#559 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, 3.324999999999999734 ) ) ; +#560 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#561 = AXIS2_PLACEMENT_3D ( 'NONE', #552, #482, #254 ) ; +#562 = DIRECTION ( 'NONE', ( 7.381802025433224012E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#563 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#564 = VERTEX_POINT ( 'NONE', #917 ) ; +#565 = ORIENTED_EDGE ( 'NONE', *, *, #521, .F. ) ; +#566 = DIRECTION ( 'NONE', ( 1.476360405086644309E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#567 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#568 = ADVANCED_FACE ( 'NONE', ( #181 ), #412, .F. ) ; +#569 = CIRCLE ( 'NONE', #328, 1.625000000000001332 ) ; +#570 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#571 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#572 = EDGE_CURVE ( 'NONE', #633, #244, #346, .T. ) ; +#573 = FACE_OUTER_BOUND ( 'NONE', #604, .T. ) ; +#574 = EDGE_CURVE ( 'NONE', #708, #381, #490, .T. ) ; +#575 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, -3.174999999999999822 ) ) ; +#576 = ADVANCED_FACE ( 'NONE', ( #299 ), #627, .F. ) ; +#577 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#578 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -1.700000000000004396 ) ) ; +#579 = EDGE_LOOP ( 'NONE', ( #48, #684 ) ) ; +#580 = DIRECTION ( 'NONE', ( 1.000000000000000000, -1.476360405086644309E-16, 0.0000000000000000000 ) ) ; +#581 = ADVANCED_FACE ( 'NONE', ( #389, #726 ), #696, .F. ) ; +#582 = ORIENTED_EDGE ( 'NONE', *, *, #698, .F. ) ; +#583 = AXIS2_PLACEMENT_3D ( 'NONE', #217, #731, #364 ) ; +#584 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#585 = COLOUR_RGB ( '',0.1647058823529411742, 0.8235294117647058432, 0.7882352941176470340 ) ; +#586 = FACE_OUTER_BOUND ( 'NONE', #236, .T. ) ; +#587 = ORIENTED_EDGE ( 'NONE', *, *, #179, .F. ) ; +#588 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#589 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#590 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#591 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999987388, 20.00000000000002132, -0.6749999999999993783 ) ) ; +#592 = ORIENTED_EDGE ( 'NONE', *, *, #265, .F. ) ; +#593 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#594 = EDGE_CURVE ( 'NONE', #934, #666, #700, .T. ) ; +#595 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, 1.549999999999999156 ) ) ; +#596 = VERTEX_POINT ( 'NONE', #773 ) ; +#597 = VECTOR ( 'NONE', #434, 1000.000000000000000 ) ; +#598 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#599 = FACE_OUTER_BOUND ( 'NONE', #610, .T. ) ; +#600 = FACE_OUTER_BOUND ( 'NONE', #342, .T. ) ; +#601 = ORIENTED_EDGE ( 'NONE', *, *, #903, .F. ) ; +#602 = AXIS2_PLACEMENT_3D ( 'NONE', #176, #682, #329 ) ; +#603 = FILL_AREA_STYLE_COLOUR ( '', #585 ) ; +#604 = EDGE_LOOP ( 'NONE', ( #835, #104, #645, #365 ) ) ; +#605 = ORIENTED_EDGE ( 'NONE', *, *, #910, .F. ) ; +#606 = AXIS2_PLACEMENT_3D ( 'NONE', #43, #414, #558 ) ; +#607 = VECTOR ( 'NONE', #6, 1000.000000000000000 ) ; +#608 = CIRCLE ( 'NONE', #517, 1.625000000000000222 ) ; +#609 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) ); +#610 = EDGE_LOOP ( 'NONE', ( #245, #129, #465, #425, #318, #361, #14, #745 ) ) ; +#611 = ORIENTED_EDGE ( 'NONE', *, *, #891, .T. ) ; +#612 = ORIENTED_EDGE ( 'NONE', *, *, #619, .F. ) ; +#613 = ORIENTED_EDGE ( 'NONE', *, *, #476, .F. ) ; +#614 = FACE_OUTER_BOUND ( 'NONE', #673, .T. ) ; +#615 = LINE ( 'NONE', #504, #471 ) ; +#616 = VECTOR ( 'NONE', #199, 1000.000000000000000 ) ; +#617 = ORIENTED_EDGE ( 'NONE', *, *, #923, .F. ) ; +#618 = EDGE_CURVE ( 'NONE', #186, #247, #553, .T. ) ; +#619 = EDGE_CURVE ( 'NONE', #431, #486, #646, .T. ) ; +#620 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.324999999999999734 ) ) ; +#621 = ORIENTED_EDGE ( 'NONE', *, *, #265, .T. ) ; +#622 = VERTEX_POINT ( 'NONE', #545 ) ; +#623 = LINE ( 'NONE', #387, #388 ) ; +#624 = CYLINDRICAL_SURFACE ( 'NONE', #121, 1.625000000000000222 ) ; +#625 = VERTEX_POINT ( 'NONE', #404 ) ; +#626 = ADVANCED_FACE ( 'NONE', ( #460 ), #410, .F. ) ; +#627 = PLANE ( 'NONE', #386 ) ; +#628 = AXIS2_PLACEMENT_3D ( 'NONE', #704, #122, #273 ) ; +#629 = ORIENTED_EDGE ( 'NONE', *, *, #919, .T. ) ; +#630 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#631 = ORIENTED_EDGE ( 'NONE', *, *, #16, .T. ) ; +#632 = FILL_AREA_STYLE_COLOUR ( '', #84 ) ; +#633 = VERTEX_POINT ( 'NONE', #264 ) ; +#634 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -0.07500000000000103806 ) ) ; +#635 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#636 = VECTOR ( 'NONE', #35, 1000.000000000000000 ) ; +#637 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#638 = VECTOR ( 'NONE', #542, 1000.000000000000000 ) ; +#639 = ADVANCED_FACE ( 'NONE', ( #827 ), #922, .T. ) ; +#640 = CARTESIAN_POINT ( 'NONE', ( 6.350000000000000533, 24.16396979503775455, 6.349999999999999645 ) ) ; +#641 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#642 = ADVANCED_FACE ( 'NONE', ( #449 ), #362, .T. ) ; +#643 = VERTEX_POINT ( 'NONE', #193 ) ; +#644 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 0.0000000000000000000, 1.550000000000003153 ) ) ; +#645 = ORIENTED_EDGE ( 'NONE', *, *, #851, .F. ) ; +#646 = LINE ( 'NONE', #33, #636 ) ; +#647 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, -3.174999999999999822 ) ) ; +#648 = CIRCLE ( 'NONE', #850, 1.625000000000003775 ) ; +#649 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 5.650000000000001243, 3.324999999999999734 ) ) ; +#650 = LINE ( 'NONE', #595, #702 ) ; +#651 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, -0.07500000000000103806 ) ) ; +#652 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, 1.549999999999999156 ) ) ; +#653 = DIRECTION ( 'NONE', ( 1.476360405086644309E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#654 = EDGE_CURVE ( 'NONE', #418, #830, #660, .T. ) ; +#655 = ORIENTED_EDGE ( 'NONE', *, *, #127, .F. ) ; +#656 = ORIENTED_EDGE ( 'NONE', *, *, #363, .T. ) ; +#657 = PLANE ( 'NONE', #547 ) ; +#658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#659 = AXIS2_PLACEMENT_3D ( 'NONE', #939, #701, #117 ) ; +#660 = CIRCLE ( 'NONE', #291, 1.625000000000001332 ) ; +#661 = LINE ( 'NONE', #879, #324 ) ; +#662 = CIRCLE ( 'NONE', #628, 3.499999999999999556 ) ; +#663 = DIRECTION ( 'NONE', ( 1.476360405086644309E-16, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#664 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#665 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#666 = VERTEX_POINT ( 'NONE', #640 ) ; +#667 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, 3.324999999999999734 ) ) ; +#668 = ORIENTED_EDGE ( 'NONE', *, *, #58, .T. ) ; +#669 = AXIS2_PLACEMENT_3D ( 'NONE', #515, #436, #805 ) ; +#670 = PRODUCT_CONTEXT ( 'NONE', #458, 'mechanical' ) ; +#671 = FACE_OUTER_BOUND ( 'NONE', #27, .T. ) ; +#672 = SURFACE_STYLE_FILL_AREA ( #192 ) ; +#673 = EDGE_LOOP ( 'NONE', ( #177, #442, #735, #582 ) ) ; +#674 = PLANE ( 'NONE', #929 ) ; +#675 = ORIENTED_EDGE ( 'NONE', *, *, #242, .T. ) ; +#676 = EDGE_LOOP ( 'NONE', ( #77, #385 ) ) ; +#677 = ORIENTED_EDGE ( 'NONE', *, *, #873, .F. ) ; +#678 = LINE ( 'NONE', #834, #638 ) ; +#679 = LINE ( 'NONE', #355, #480 ) ; +#680 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#681 = EDGE_CURVE ( 'NONE', #224, #144, #81, .T. ) ; +#682 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#683 = ORIENTED_EDGE ( 'NONE', *, *, #859, .F. ) ; +#684 = ORIENTED_EDGE ( 'NONE', *, *, #737, .T. ) ; +#685 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#686 = VECTOR ( 'NONE', #958, 1000.000000000000000 ) ; +#687 = VECTOR ( 'NONE', #206, 1000.000000000000000 ) ; +#688 = AXIS2_PLACEMENT_3D ( 'NONE', #348, #59, #790 ) ; +#689 = ORIENTED_EDGE ( 'NONE', *, *, #149, .T. ) ; +#690 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#691 = AXIS2_PLACEMENT_3D ( 'NONE', #634, #947, #420 ) ; +#692 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#693 = VERTEX_POINT ( 'NONE', #427 ) ; +#694 = ORIENTED_EDGE ( 'NONE', *, *, #618, .T. ) ; +#695 = ORIENTED_EDGE ( 'NONE', *, *, #58, .F. ) ; +#696 = PLANE ( 'NONE', #865 ) ; +#697 = SURFACE_STYLE_USAGE ( .BOTH. , #499 ) ; +#698 = EDGE_CURVE ( 'NONE', #70, #396, #875, .T. ) ; +#699 = VECTOR ( 'NONE', #317, 1000.000000000000000 ) ; +#700 = LINE ( 'NONE', #187, #100 ) ; +#701 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#702 = VECTOR ( 'NONE', #894, 1000.000000000000000 ) ; +#703 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#704 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -3.174999999999999822 ) ) ; +#705 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#706 = ADVANCED_FACE ( 'NONE', ( #88 ), #930, .F. ) ; +#707 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 6.650000000000001243, -0.07500000000000103806 ) ) ; +#708 = VERTEX_POINT ( 'NONE', #570 ) ; +#709 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, 3.324999999999999734 ) ) ; +#710 = VERTEX_POINT ( 'NONE', #494 ) ; +#711 = ADVANCED_FACE ( 'NONE', ( #344 ), #188, .F. ) ; +#712 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, -0.07500000000000069111 ) ) ; +#713 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#714 = LINE ( 'NONE', #221, #686 ) ; +#715 = VECTOR ( 'NONE', #226, 1000.000000000000000 ) ; +#716 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, 3.324999999999999734 ) ) ; +#717 = ADVANCED_FACE ( 'NONE', ( #272 ), #98, .F. ) ; +#718 = VERTEX_POINT ( 'NONE', #416 ) ; +#719 = EDGE_LOOP ( 'NONE', ( #914, #675 ) ) ; +#720 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#721 = AXIS2_PLACEMENT_3D ( 'NONE', #534, #248, #392 ) ; +#722 = DIRECTION ( 'NONE', ( -1.000000000000000000, -7.381802025433224012E-17, 0.0000000000000000000 ) ) ; +#723 = ORIENTED_EDGE ( 'NONE', *, *, #109, .F. ) ; +#724 = CIRCLE ( 'NONE', #256, 1.625000000000000222 ) ; +#725 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#726 = FACE_OUTER_BOUND ( 'NONE', #838, .T. ) ; +#727 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, 3.324999999999999734 ) ) ; +#728 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 21.47287983216558871, -3.174999999999999822 ) ) ; +#729 = ORIENTED_EDGE ( 'NONE', *, *, #961, .T. ) ; +#730 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#731 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#732 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#733 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#734 = ORIENTED_EDGE ( 'NONE', *, *, #403, .F. ) ; +#735 = ORIENTED_EDGE ( 'NONE', *, *, #910, .T. ) ; +#736 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #458 ) ; +#737 = EDGE_CURVE ( 'NONE', #748, #693, #118, .T. ) ; +#738 = CYLINDRICAL_SURFACE ( 'NONE', #72, 1.625000000000003775 ) ; +#739 = LINE ( 'NONE', #825, #336 ) ; +#740 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, 3.324999999999999734 ) ) ; +#741 = ORIENTED_EDGE ( 'NONE', *, *, #255, .T. ) ; +#742 = AXIS2_PLACEMENT_3D ( 'NONE', #152, #963, #213 ) ; +#743 = PLANE ( 'NONE', #405 ) ; +#744 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#745 = ORIENTED_EDGE ( 'NONE', *, *, #80, .T. ) ; +#746 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#747 = STYLED_ITEM ( 'NONE', ( #160 ), #142 ) ; +#748 = VERTEX_POINT ( 'NONE', #277 ) ; +#749 = ORIENTED_EDGE ( 'NONE', *, *, #463, .F. ) ; +#750 = SURFACE_SIDE_STYLE ('',( #751 ) ) ; +#751 = SURFACE_STYLE_FILL_AREA ( #240 ) ; +#752 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#753 = VECTOR ( 'NONE', #190, 1000.000000000000000 ) ; +#754 = ORIENTED_EDGE ( 'NONE', *, *, #859, .T. ) ; +#755 = EDGE_CURVE ( 'NONE', #830, #418, #249, .T. ) ; +#756 = CARTESIAN_POINT ( 'NONE', ( 6.350000000000000533, 24.16396979503775455, 3.174999999999999822 ) ) ; +#757 = CARTESIAN_POINT ( 'NONE', ( 8.673617379884035472E-16, 18.52712016783445392, -3.174999999999999822 ) ) ; +#758 = AXIS2_PLACEMENT_3D ( 'NONE', #921, #766, #692 ) ; +#759 = ORIENTED_EDGE ( 'NONE', *, *, #233, .F. ) ; +#760 = AXIS2_PLACEMENT_3D ( 'NONE', #220, #732, #815 ) ; +#761 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, -0.6749999999999998224 ) ) ; +#762 = FACE_BOUND ( 'NONE', #456, .T. ) ; +#763 = FACE_OUTER_BOUND ( 'NONE', #384, .T. ) ; +#764 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, 3.324999999999999734 ) ) ; +#765 = LINE ( 'NONE', #73, #91 ) ; +#766 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#767 = ORIENTED_EDGE ( 'NONE', *, *, #246, .T. ) ; +#768 = ORIENTED_EDGE ( 'NONE', *, *, #554, .T. ) ; +#769 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#770 = LINE ( 'NONE', #1, #797 ) ; +#771 = VECTOR ( 'NONE', #395, 1000.000000000000000 ) ; +#772 = ORIENTED_EDGE ( 'NONE', *, *, #459, .T. ) ; +#773 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, 3.174999999999999822 ) ) ; +#774 = ORIENTED_EDGE ( 'NONE', *, *, #905, .T. ) ; +#775 = ADVANCED_FACE ( 'NONE', ( #146, #69 ), #208, .F. ) ; +#776 = ORIENTED_EDGE ( 'NONE', *, *, #817, .T. ) ; +#777 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#778 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#779 = LINE ( 'NONE', #578, #597 ) ; +#780 = FACE_BOUND ( 'NONE', #527, .T. ) ; +#781 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, 1.550000000000003153 ) ) ; +#782 = LINE ( 'NONE', #783, #866 ) ; +#783 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, 1.550000000000003153 ) ) ; +#784 = ADVANCED_FACE ( 'NONE', ( #369 ), #497, .F. ) ; +#785 = EDGE_LOOP ( 'NONE', ( #844, #849, #445, #759, #924, #729 ) ) ; +#786 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 2.900000000000001688, -0.07500000000000069111 ) ) ; +#787 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.324999999999999734 ) ) ; +#788 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #302, 'design' ) ; +#789 = ADVANCED_FACE ( 'NONE', ( #533 ), #657, .F. ) ; +#790 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#791 = AXIS2_PLACEMENT_3D ( 'NONE', #707, #950, #197 ) ; +#792 = ORIENTED_EDGE ( 'NONE', *, *, #619, .T. ) ; +#793 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -0.6749999999999998224 ) ) ; +#794 = EDGE_LOOP ( 'NONE', ( #406, #49, #870, #966, #4, #954 ) ) ; +#795 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, -3.174999999999999822 ) ) ; +#796 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #747 ) ) ; +#797 = VECTOR ( 'NONE', #439, 1000.000000000000000 ) ; +#798 = VECTOR ( 'NONE', #433, 1000.000000000000000 ) ; +#799 = ORIENTED_EDGE ( 'NONE', *, *, #143, .T. ) ; +#800 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#801 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#802 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, -1.700000000000001288 ) ) ; +#803 = AXIS2_PLACEMENT_3D ( 'NONE', #382, #230, #598 ) ; +#804 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#805 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#806 = EDGE_LOOP ( 'NONE', ( #857, #429, #312, #28 ) ) ; +#807 = ORIENTED_EDGE ( 'NONE', *, *, #936, .T. ) ; +#808 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, -3.174999999999999822 ) ) ; +#809 = AXIS2_PLACEMENT_3D ( 'NONE', #56, #937, #861 ) ; +#810 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#811 = EDGE_LOOP ( 'NONE', ( #823, #475, #487, #837 ) ) ; +#812 = VECTOR ( 'NONE', #690, 1000.000000000000000 ) ; +#813 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, 3.324999999999999734 ) ) ; +#814 = VECTOR ( 'NONE', #932, 1000.000000000000000 ) ; +#815 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#816 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, -3.174999999999999822 ) ) ; +#817 = EDGE_CURVE ( 'NONE', #468, #303, #397, .T. ) ; +#818 = LINE ( 'NONE', #938, #39 ) ; +#819 = CARTESIAN_POINT ( 'NONE', ( 4.799999999999990052, 20.00000000000002132, 6.349999999999998757 ) ) ; +#820 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#821 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 5.650000000000001243, 1.550000000000003153 ) ) ; +#822 = EDGE_LOOP ( 'NONE', ( #36, #76 ) ) ; +#823 = ORIENTED_EDGE ( 'NONE', *, *, #903, .T. ) ; +#824 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#825 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, 3.324999999999999734 ) ) ; +#826 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #895, #788 ) ; +#827 = FACE_OUTER_BOUND ( 'NONE', #366, .T. ) ; +#828 = LINE ( 'NONE', #787, #473 ) ; +#829 = DIRECTION ( 'NONE', ( 1.000000000000000000, -2.523234146875356491E-15, 0.0000000000000000000 ) ) ; +#830 = VERTEX_POINT ( 'NONE', #781 ) ; +#831 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'gusset_R_181126', ( #142, #803 ), #455 ) ; +#832 = AXIS2_PLACEMENT_3D ( 'NONE', #133, #566, #126 ) ; +#833 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#834 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, 3.324999999999999734 ) ) ; +#835 = ORIENTED_EDGE ( 'NONE', *, *, #737, .F. ) ; +#836 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 12.24619407771257151, -1.700000000000001288 ) ) ; +#837 = ORIENTED_EDGE ( 'NONE', *, *, #64, .T. ) ; +#838 = EDGE_LOOP ( 'NONE', ( #340, #612, #353, #377 ) ) ; +#839 = CIRCLE ( 'NONE', #528, 1.624999999999999778 ) ; +#840 = LINE ( 'NONE', #620, #814 ) ; +#841 = LINE ( 'NONE', #307, #229 ) ; +#842 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000711, 5.650000000000001243, 3.324999999999999734 ) ) ; +#843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#844 = ORIENTED_EDGE ( 'NONE', *, *, #44, .T. ) ; +#845 = EDGE_LOOP ( 'NONE', ( #668, #375, #955, #165 ) ) ; +#846 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 2.900000000000000799, -3.174999999999999822 ) ) ; +#847 = AXIS2_PLACEMENT_3D ( 'NONE', #219, #71, #446 ) ; +#848 = FACE_OUTER_BOUND ( 'NONE', #806, .T. ) ; +#849 = ORIENTED_EDGE ( 'NONE', *, *, #222, .F. ) ; +#850 = AXIS2_PLACEMENT_3D ( 'NONE', #124, #560, #571 ) ; +#851 = EDGE_CURVE ( 'NONE', #303, #468, #839, .T. ) ; +#852 = DIRECTION ( 'NONE', ( -0.8559410833627774107, 0.5170733621177511230, 0.0000000000000000000 ) ) ; +#853 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #933 ) ) ; +#854 = ADVANCED_FACE ( 'NONE', ( #306, #470 ), #878, .F. ) ; +#855 = ORIENTED_EDGE ( 'NONE', *, *, #313, .F. ) ; +#856 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 5.650000000000001243, 3.324999999999999734 ) ) ; +#857 = ORIENTED_EDGE ( 'NONE', *, *, #242, .F. ) ; +#858 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#859 = EDGE_CURVE ( 'NONE', #352, #444, #724, .T. ) ; +#860 = EDGE_LOOP ( 'NONE', ( #194, #776 ) ) ; +#861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#862 = FACE_OUTER_BOUND ( 'NONE', #466, .T. ) ; +#863 = CARTESIAN_POINT ( 'NONE', ( 14.93750000000000178, 5.650000000000000355, 3.324999999999999734 ) ) ; +#864 = VECTOR ( 'NONE', #296, 1000.000000000000000 ) ; +#865 = AXIS2_PLACEMENT_3D ( 'NONE', #267, #843, #769 ) ; +#866 = VECTOR ( 'NONE', #151, 1000.000000000000000 ) ; +#867 = DIRECTION ( 'NONE', ( 7.381802025433224012E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#868 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#869 = ADVANCED_FACE ( 'NONE', ( #489 ), #290, .F. ) ; +#870 = ORIENTED_EDGE ( 'NONE', *, *, #283, .F. ) ; +#871 = ORIENTED_EDGE ( 'NONE', *, *, #459, .F. ) ; +#872 = CARTESIAN_POINT ( 'NONE', ( 32.00000000000000000, 12.24619407771257151, 1.550000000000003153 ) ) ; +#873 = EDGE_CURVE ( 'NONE', #244, #462, #886, .T. ) ; +#874 = ADVANCED_FACE ( 'NONE', ( #614 ), #30, .F. ) ; +#875 = CIRCLE ( 'NONE', #688, 1.625000000000003775 ) ; +#876 = VECTOR ( 'NONE', #530, 1000.000000000000000 ) ; +#877 = ORIENTED_EDGE ( 'NONE', *, *, #426, .F. ) ; +#878 = PLANE ( 'NONE', #351 ) ; +#879 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#880 = CARTESIAN_POINT ( 'NONE', ( 12.00000000000000000, 0.0000000000000000000, -0.07500000000000103806 ) ) ; +#881 = ORIENTED_EDGE ( 'NONE', *, *, #357, .F. ) ; +#882 = VERTEX_POINT ( 'NONE', #967 ) ; +#883 = ORIENTED_EDGE ( 'NONE', *, *, #426, .T. ) ; +#884 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#885 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#886 = LINE ( 'NONE', #295, #53 ) ; +#887 = LINE ( 'NONE', #139, #356 ) ; +#888 = CIRCLE ( 'NONE', #40, 1.625000000000003775 ) ; +#889 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#890 = CARTESIAN_POINT ( 'NONE', ( 29.06250000000000355, 2.900000000000001688, 3.324999999999999734 ) ) ; +#891 = EDGE_CURVE ( 'NONE', #666, #263, #422, .T. ) ; +#892 = PLANE ( 'NONE', #154 ) ; +#893 = ORIENTED_EDGE ( 'NONE', *, *, #919, .F. ) ; +#894 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#895 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #933, .NOT_KNOWN. ) ; +#896 = VERTEX_POINT ( 'NONE', #298 ) ; +#897 = VECTOR ( 'NONE', #227, 1000.000000000000000 ) ; +#898 = DIRECTION ( 'NONE', ( -3.589483621050224049E-17, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#899 = LINE ( 'NONE', #537, #687 ) ; +#900 = LINE ( 'NONE', #153, #202 ) ; +#901 = AXIS2_PLACEMENT_3D ( 'NONE', #305, #824, #665 ) ; +#902 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#903 = EDGE_CURVE ( 'NONE', #710, #643, #297, .T. ) ; +#904 = VERTEX_POINT ( 'NONE', #513 ) ; +#905 = EDGE_CURVE ( 'NONE', #269, #481, #262, .T. ) ; +#906 = CLOSED_SHELL ( 'NONE', ( #281, #706, #953, #60, #207, #266, #556, #626, #288, #137, #437, #576, #642, #928, #430, #789, #67, #943, #581, #496, #869, #854, #568, #775, #639, #784, #717, #125, #55, #874, #711 ) ) ; +#907 = EDGE_LOOP ( 'NONE', ( #683, #175 ) ) ; +#908 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#909 = CYLINDRICAL_SURFACE ( 'NONE', #583, 3.499999999999999556 ) ; +#910 = EDGE_CURVE ( 'NONE', #718, #396, #779, .T. ) ; +#911 = LINE ( 'NONE', #819, #715 ) ; +#912 = CARTESIAN_POINT ( 'NONE', ( 1.549999999999987388, 20.00000000000002132, 6.349999999999998757 ) ) ; +#913 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#914 = ORIENTED_EDGE ( 'NONE', *, *, #398, .T. ) ; +#915 = EDGE_LOOP ( 'NONE', ( #509, #508, #656, #754 ) ) ; +#916 = PRESENTATION_STYLE_ASSIGNMENT (( #525 ) ) ; +#917 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, -3.174999999999999822 ) ) ; +#918 = VECTOR ( 'NONE', #102, 1000.000000000000000 ) ; +#919 = EDGE_CURVE ( 'NONE', #486, #247, #770, .T. ) ; +#920 = ORIENTED_EDGE ( 'NONE', *, *, #283, .T. ) ; +#921 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 3.174999999999999822 ) ) ; +#922 = PLANE ( 'NONE', #22 ) ; +#923 = EDGE_CURVE ( 'NONE', #693, #748, #18, .T. ) ; +#924 = ORIENTED_EDGE ( 'NONE', *, *, #594, .F. ) ; +#925 = VERTEX_POINT ( 'NONE', #956 ) ; +#926 = AXIS2_PLACEMENT_3D ( 'NONE', #218, #810, #209 ) ; +#927 = ORIENTED_EDGE ( 'NONE', *, *, #403, .T. ) ; +#928 = ADVANCED_FACE ( 'NONE', ( #862 ), #909, .F. ) ; +#929 = AXIS2_PLACEMENT_3D ( 'NONE', #376, #173, #319 ) ; +#930 = CYLINDRICAL_SURFACE ( 'NONE', #115, 1.625000000000003775 ) ; +#931 = CIRCLE ( 'NONE', #505, 1.625000000000003775 ) ; +#932 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#933 = PRODUCT ( 'gusset_R_181126', 'gusset_R_181126', '', ( #670 ) ) ; +#934 = VERTEX_POINT ( 'NONE', #157 ) ; +#935 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#936 = EDGE_CURVE ( 'NONE', #557, #710, #408, .T. ) ; +#937 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#938 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 28.00000000000000000, 3.174999999999999822 ) ) ; +#939 = CARTESIAN_POINT ( 'NONE', ( 3.174999999999988720, 20.00000000000002132, 3.174999999999999822 ) ) ; +#940 = VERTEX_POINT ( 'NONE', #92 ) ; +#941 = CARTESIAN_POINT ( 'NONE', ( 34.93750000000000000, 2.900000000000002132, -3.174999999999999822 ) ) ; +#942 = EDGE_CURVE ( 'NONE', #79, #536, #623, .T. ) ; +#943 = ADVANCED_FACE ( 'NONE', ( #671 ), #743, .F. ) ; +#944 = ORIENTED_EDGE ( 'NONE', *, *, #942, .F. ) ; +#945 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#946 = VECTOR ( 'NONE', #589, 1000.000000000000000 ) ; +#947 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#948 = VECTOR ( 'NONE', #898, 1000.000000000000000 ) ; +#949 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#950 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#951 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #484 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #163, #90, #820 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#952 = PLANE ( 'NONE', #112 ) ; +#953 = ADVANCED_FACE ( 'NONE', ( #848 ), #322, .F. ) ; +#954 = ORIENTED_EDGE ( 'NONE', *, *, #333, .T. ) ; +#955 = ORIENTED_EDGE ( 'NONE', *, *, #891, .F. ) ; +#956 = CARTESIAN_POINT ( 'NONE', ( 46.35000000000000142, 0.0000000000000000000, -3.174999999999999822 ) ) ; +#957 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #826 ) ; +#958 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#959 = ORIENTED_EDGE ( 'NONE', *, *, #16, .F. ) ; +#960 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #747 ), #374 ) ; +#961 = EDGE_CURVE ( 'NONE', #934, #925, #479, .T. ) ; +#962 = LINE ( 'NONE', #235, #168 ) ; +#963 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#964 = DIRECTION ( 'NONE', ( -0.8559410833627774107, 0.5170733621177511230, -0.0000000000000000000 ) ) ; +#965 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, 3.324999999999999734 ) ) ; +#966 = ORIENTED_EDGE ( 'NONE', *, *, #968, .T. ) ; +#967 = CARTESIAN_POINT ( 'NONE', ( 9.062500000000001776, 2.900000000000000799, 3.324999999999999734 ) ) ; +#968 = EDGE_CURVE ( 'NONE', #263, #381, #962, .T. ) ; +#969 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +ENDSEC; +END-ISO-10303-21; diff --git a/Models/litscher_carbonfab_181126/Printed/gusset_R_181126.STL b/Models/litscher_carbonfab_181126/Printed/gusset_R_181126.STL new file mode 100644 index 0000000..3442cd3 --- /dev/null +++ b/Models/litscher_carbonfab_181126/Printed/gusset_R_181126.STL Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/ebb_motion.py b/Source/Inkscape/EggBotControl.Original/ebb_motion.py new file mode 100644 index 0000000..abc3bf4 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/ebb_motion.py @@ -0,0 +1,89 @@ +# ebb_motion.py +# Motion control utilities for EiBotBoard +# https://github.com/evil-mad/plotink +# +# Intended to provide some common interfaces that can be used by +# EggBot, WaterColorBot, AxiDraw, and similar machines. +# +# Version 0.2, Dated January 11, 2016. +# +# +# The MIT License (MIT) +# +# Copyright (c) 2016 Evil Mad Scientist Laboratories +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import ebb_serial + + +def version(): + return "0.2" # Version number for this document + + +def doTimedPause( portName, nPause ): + if (portName is not None): + while ( nPause > 0 ): + if ( nPause > 750 ): + td = int( 750 ) + else: + td = nPause + if ( td < 1 ): + td = int( 1 ) # don't allow zero-time moves + ebb_serial.command( portName, 'SM,' + str( td ) + ',0,0\r') + nPause -= td + + +def sendEnableMotors( portName, Res ): + if (Res < 0): + Res = 0 + if (Res > 5): + Res = 5 + if (portName is not None): + ebb_serial.command( portName, 'EM,' + str(Res) + ',' + str(Res) + '\r' ) + # If Res == 0, -> Motor disabled + # If Res == 1, -> 16X microstepping + # If Res == 2, -> 8X microstepping + # If Res == 3, -> 4X microstepping + # If Res == 4, -> 2X microstepping + # If Res == 5, -> No microstepping + +def sendDisableMotors( portName ): + if (portName is not None): + ebb_serial.command( portName, 'EM,0,0\r') + +def QueryPRGButton( portName ): + if (portName is not None): + return ebb_serial.query( portName, 'QB\r' ) + +def TogglePen( portName ): + if (portName is not None): + ebb_serial.command( portName, 'TP\r') + +def sendPenUp( portName, PenDelay ): + if (portName is not None): + ebb_serial.command( portName, 'SP,1\r') + if (PenDelay > 0): + doTimedPause( portName,PenDelay) + +def sendPenDown( portName, PenDelay ): + if (portName is not None): + ebb_serial.command( portName, 'SP,0\r') + if (PenDelay > 0): + doTimedPause( portName,PenDelay) \ No newline at end of file diff --git a/Source/Inkscape/EggBotControl.Original/ebb_motion.pyc b/Source/Inkscape/EggBotControl.Original/ebb_motion.pyc new file mode 100644 index 0000000..1427ad4 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/ebb_motion.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/ebb_serial.py b/Source/Inkscape/EggBotControl.Original/ebb_serial.py new file mode 100644 index 0000000..43dd45e --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/ebb_serial.py @@ -0,0 +1,152 @@ +# ebb_serial.py +# Serial connection utilities for EiBotBoard +# https://github.com/evil-mad/plotink +# +# Intended to provide some common interfaces that can be used by +# EggBot, WaterColorBot, AxiDraw, and similar machines. +# +# Version 0.3, Dated June 28, 2016. +# +# Thanks to Shel Michaels for bug fixes and helpful suggestions. +# +# The MIT License (MIT) +# +# Copyright (c) 2016 Evil Mad Scientist Laboratories +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import serial +import inkex +import gettext + +def version(): + return "0.3" # Version number for this document + +def findPort(): + #Find a single EiBotBoard connected to a USB port. + try: + from serial.tools.list_ports import comports + except ImportError: + comports = None + return None + if comports: + comPortsList = list(comports()) + EBBport = None + for port in comPortsList: + if port[1].startswith("USB-SERIAL CH340"): + EBBport = port[0] #Success; EBB found by name match. + break #stop searching-- we are done. + if EBBport is None: + for port in comPortsList: + if port[2].startswith("USB VID:PID=04D8:FD92"): + EBBport = port[0] #Success; EBB found by VID/PID match. + break #stop searching-- we are done. + return EBBport + +def testPort( comPort ): + ''' + Return a SerialPort object + for the first port with an EBB (EiBotBoard; EggBot controller board). + YOU are responsible for closing this serial port! + ''' + if comPort is not None: + try: + serialPort = serial.Serial( comPort, timeout=3.0 ) # 1 second timeout! + serialPort.write( 'v\r' ) + strVersion = serialPort.readline() + if strVersion and strVersion.startswith( 'EBB' ): + return serialPort + + serialPort.write( 'v\r' ) + strVersion = serialPort.readline() + if strVersion and strVersion.startswith( 'EBB' ): + return serialPort + serialPort.close() + except serial.SerialException: + pass + return None + else: + return None + +def openPort(): + foundPort = findPort() + serialPort = testPort( foundPort ) + if serialPort: + return serialPort + return None + +def closePort(comPort): + if comPort is not None: + try: + comPort.close() + except serial.SerialException: + pass + +def query( comPort, cmd ): + if (comPort is not None) and (cmd is not None): + response = '' + try: + comPort.write( cmd ) + response = comPort.readline() + nRetryCount = 0 + while ( len(response) == 0 ) and ( nRetryCount < 100 ): + # get new response to replace null response if necessary + response = comPort.readline() + nRetryCount += 1 + if cmd.strip().lower() not in ["v","i","a", "mr","pi","qm"]: + #Most queries return an "OK" after the data requested. + #We skip this for those few queries that do not return an extra line. + unused_response = comPort.readline() #read in extra blank/OK line + nRetryCount = 0 + while ( len(unused_response) == 0 ) and ( nRetryCount < 100 ): + # get new response to replace null response if necessary + unused_response = comPort.readline() + nRetryCount += 1 + except: + inkex.errormsg( gettext.gettext( "Error reading serial data." ) ) + return response + else: + return None + +def command( comPort, cmd ): + if (comPort is not None) and (cmd is not None): + try: + comPort.write( cmd ) + response = comPort.readline() + nRetryCount = 0 + while ( len(response) == 0 ) and ( nRetryCount < 100 ): + # get new response to replace null response if necessary + response = comPort.readline() + nRetryCount += 1 + inkex.errormsg("Retry" + str(nRetryCount)) + if response.strip().startswith("OK"): + pass # inkex.errormsg( 'OK after command: ' + cmd ) #Debug option: indicate which command. + else: + if ( response != '' ): + inkex.errormsg( 'Error: Unexpected response from EBB.') + inkex.errormsg( ' Command: ' + cmd.strip() ) + inkex.errormsg( ' Response: ' + str( response.strip() ) ) + else: + inkex.errormsg( 'EBB Serial Timeout after command: ' + cmd ) + +# except Exception,e: +# inkex.errormsg( str(e)) #For debugging: one may wish to display the error. + except: + inkex.errormsg( 'Failed after command: ' + cmd ) + pass \ No newline at end of file diff --git a/Source/Inkscape/EggBotControl.Original/ebb_serial.pyc b/Source/Inkscape/EggBotControl.Original/ebb_serial.pyc new file mode 100644 index 0000000..7f0db8b --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/ebb_serial.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/eggbot.inx b/Source/Inkscape/EggBotControl.Original/eggbot.inx new file mode 100644 index 0000000..1cf836a --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot.inx @@ -0,0 +1,184 @@ + + + <_name>EggBot Control + command.evilmadscientist.eggbot.rev271b1 + org.inkscape.output.svg.inkscape + eggbot.py + inkex.py + + + + <_param name="splashpage" type="description" xml:space="preserve"> +Welcome to the EggBot interface! + +Press 'Apply' to begin plotting. + +Or, look in the other tabs for + configuration and other options. + +Need help? Visit http://egg-bot.com/ + + + + + + <_param name="instructions_setup" type="description" xml:space="preserve"> +EggBot: Basic Setup + + 55 + 50 + + + <_option value="toggle-pen" >Toggle pen up/down + <_option value="align-mode" >Raise pen, turn off motors + + <_param name="instructions_setup3" type="description" + xml:space="preserve"> +- Raise and lower pen to check the + pen-up and pen-down positions. + +- Raise pen and turn off stepper motors + for aligning objects in the EggBot. + + + + + 300 + 400 + 50 + 200 + 20 + 400 + <_param name="help_timing" type="description"> +Note: Pressing 'Apply' will apply settings, but not plot. + + + + + true + true + true + true + true + false + .2 + <_param name="help_options" type="description"> +Note: Pressing 'Apply' will apply settings, but not plot. + + + + + <_param name="instructions_manual" type="description" + xml:space="preserve"> +EggBot Manual Control + +You can use this frame to send "manual" commands +to the EggBot: Walk the stepper motors, raise or +lower the pen, enable or disable the motors, or +check the circuit board (EBB) firmware version. + + + + <_option value="none" >- Select - + <_option value="raise-pen" >Raise the Pen + <_option value="lower-pen" >Lower the Pen + <_option value="walk-egg-motor" >Walk Motor 2 (egg) + <_option value="walk-pen-motor" >Walk Motor 1 (pen) + <_option value="enable-motors" >Enable Motors + <_option value="disable-motors" >Disable Motors + <_option value="enable-engraver" >Engraver On + <_option value="disable-engraver" >Engraver Off + <_option value="version-check" >Check EBB Version + + + 5 + <_param name="instructions_manual2" type="description" + xml:space="preserve"> +Note: Walk distance can be positive or negative. + +Press 'Apply' to execute the command. + + + + + <_param name="instructions_resume" type="description" + xml:space="preserve"> +To pause a plot in progress, press the "PRG" +button on the circuit board. After pausing, you +can change the EggBot settings or perform any +manual adjustments that are needed. + +To resume plotting-- or to cancel and return +home --press 'Apply' with this tab selected. + +Plot progress is stored in the inkscape file; +if you need to quit inkscape and resume later, +be sure to save the document first. + + false + + + + <_param name="instructions_layer" type="description" xml:space="preserve"> +Normally, we plot paths from all layers. +You can also choose to plot a single layer +or group of layers, for example to change +pens between plotting layers. + +Pressing 'Apply' from this frame will plot +only layers whose names begin with the +selected number, which can be up to 100. + + 1 + + + + <_param name="instructions_general" type="description" + xml:space="preserve"> +EggBot Control Inkscape extension +Release 2.7.1, dated 2016-01-11 + +*EBB Firmware 1.96 or newer required for certain + functions. + +Known issues: +* "Cancel" function does not work while plotting. + (This is due to a known bug in Inkscape; the + "cancel" button does not work with any + Inkscape extension, this one included.) + + + + + + all + + + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot.py b/Source/Inkscape/EggBotControl.Original/eggbot.py new file mode 100644 index 0000000..7aff933 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot.py @@ -0,0 +1,1401 @@ +# eggbot.py +# Part of the Eggbot driver for Inkscape +# https://github.com/evil-mad/EggBot +# +# Version 2.7.1, dated January 11, 2016. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# TODO: Add and honor advisory locking around device open/close for non Win32 + +from simpletransform import * +from PIL import Image +from base64 import decodestring + +import gettext +import inkex +import simplepath +import string +import time +import ebb_serial # https://github.com/evil-mad/plotink +import plot_utils # https://github.com/evil-mad/plotink +import ebb_motion # https://github.com/evil-mad/plotink Requires version 0.2 or newer. +import StringIO + +import eggbot_conf #Some settings can be changed here. + +F_DEFAULT_SPEED = 1 +N_PEN_DOWN_DELAY = 400 # delay (ms) for the pen to go down before the next move +N_PEN_UP_DELAY = 400 # delay (ms) for the pen to up down before the next move + +N_PEN_UP_POS = 50 # Default pen-up position +N_PEN_DOWN_POS = 40 # Default pen-down position +N_SERVOSPEED = 50 # Default pen-lift speed +N_WALK_DEFAULT = 10 # Default steps for walking stepper motors +N_DEFAULT_LAYER = 1 # Default inkscape layer + +class EggBot( inkex.Effect ): + + def __init__( self ): + inkex.Effect.__init__( self ) + + self.OptionParser.add_option( "--smoothness", + action="store", type="float", + dest="smoothness", default=.2, + help="Smoothness of curves" ) + self.OptionParser.add_option( "--startCentered", + action="store", type="inkbool", + dest="startCentered", default=True, + help="Start plot with pen centered in the y-axis." ) + self.OptionParser.add_option( "--returnToHome", + action="store", type="inkbool", + dest="returnToHome", default=True, + help="Return to home at end of plot." ) + self.OptionParser.add_option( "--wraparound", + action="store", type="inkbool", + dest="wraparound", default=True, + help="Egg (x) axis wraps around-- take shortcuts!" ) + self.OptionParser.add_option( "--penUpSpeed", + action="store", type="int", + dest="penUpSpeed", default=F_DEFAULT_SPEED, + help="Speed (step/sec) while pen is up." ) + self.OptionParser.add_option( "--penDownSpeed", + action="store", type="int", + dest="penDownSpeed", default=F_DEFAULT_SPEED, + help="Speed (step/sec) while pen is down." ) + self.OptionParser.add_option( "--penDownDelay", + action="store", type="int", + dest="penDownDelay", default=N_PEN_DOWN_DELAY, + help="Delay after pen down (msec)." ) + self.OptionParser.add_option( "--penUpDelay", + action="store", type="int", + dest="penUpDelay", default=N_PEN_UP_DELAY, + help="Delay after pen up (msec)." ) + self.OptionParser.add_option( "--engraving", + action="store", type="inkbool", + dest="engraving", default=False, + help="Enable optional engraving tool." ) + self.OptionParser.add_option( "--tab", + action="store", type="string", + dest="tab", default="controls", + help="The active tab when Apply was pressed" ) + self.OptionParser.add_option( "--penUpPosition", + action="store", type="int", + dest="penUpPosition", default=N_PEN_UP_POS, + help="Position of pen when lifted" ) + self.OptionParser.add_option( "--ServoDownSpeed", + action="store", type="int", + dest="ServoDownSpeed", default=N_SERVOSPEED, + help="Rate of lowering pen " ) + self.OptionParser.add_option( "--ServoUpSpeed", + action="store", type="int", + dest="ServoUpSpeed", default=N_SERVOSPEED, + help="Rate of lifting pen " ) + self.OptionParser.add_option( "--penDownPosition", + action="store", type="int", + dest="penDownPosition", default=N_PEN_DOWN_POS, + help="Position of pen when lowered" ) + self.OptionParser.add_option( "--layernumber", + action="store", type="int", + dest="layernumber", default=N_DEFAULT_LAYER, + help="Selected layer for multilayer plotting" ) + self.OptionParser.add_option( "--setupType", + action="store", type="string", + dest="setupType", default="controls", + help="The active option when Apply was pressed" ) + self.OptionParser.add_option( "--manualType", + action="store", type="string", + dest="manualType", default="controls", + help="The active option when Apply was pressed" ) + self.OptionParser.add_option( "--WalkDistance", + action="store", type="int", + dest="WalkDistance", default=N_WALK_DEFAULT, + help="Selected layer for multilayer plotting" ) + self.OptionParser.add_option( "--cancelOnly", + action="store", type="inkbool", + dest="cancelOnly", default=False, + help="Cancel plot and return home only." ) + self.OptionParser.add_option( "--revPenMotor", + action="store", type="inkbool", + dest="revPenMotor", default=False, + help="Reverse motion of pen motor." ) + self.OptionParser.add_option( "--revEggMotor", + action="store", type="inkbool", + dest="revEggMotor", default=False, + help="Reverse motion of egg motor." ) + + self.bPenIsUp = True + self.virtualPenIsUp = False #Keeps track of pen postion when stepping through plot before resuming + self.engraverIsOn = False + self.penDownActivatesEngraver = False + self.fX = None + self.fY = None + self.fPrevX = None + self.fPrevY = None + self.ptFirst = None + self.bStopped = False + self.fSpeed = 1 + self.resumeMode = False + self.nodeCount = int( 0 ) #NOTE: python uses 32-bit ints. + self.nodeTarget = int( 0 ) + self.pathcount = int( 0 ) + self.LayersPlotted = 0 + self.svgLayer = int( 0 ) + self.svgNodeCount = int( 0 ) + self.svgDataRead = False + self.svgLastPath = int( 0 ) + self.svgLastPathNC = int( 0 ) + self.svgTotalDeltaX = int( 0 ) + self.svgTotalDeltaY = int( 0 ) + self.serialPort = None + #self. + + nDeltaX = 0 + nDeltaY = 0 + + self.svgWidth = float( eggbot_conf.N_PAGE_WIDTH ) + self.svgHeight = float( eggbot_conf.N_PAGE_HEIGHT ) + self.svgTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + # So that we only generate a warning once for each + # unsupported SVG element, we use a dictionary to track + # which elements have received a warning + self.warnings = {} + + # "Normal" value: self.step_scaling_factor = 2, for 3200 steps/revolution. + + self.step_scaling_factor = eggbot_conf.STEP_SCALE + + self.wrapSteps = 6400 / self.step_scaling_factor + self.halfWrapSteps = self.wrapSteps / 2 + + def effect( self ): + '''Main entry point: check to see which tab is selected, and act accordingly.''' + + self.svg = self.document.getroot() + self.CheckSVGforEggbotData() + + if ((self.options.tab == '"Help"') or (self.options.tab == '"options"') or (self.options.tab == '"timing"')): + pass + else: + self.serialPort = ebb_serial.openPort() + if self.serialPort is None: + inkex.errormsg( gettext.gettext( "Failed to connect to EggBot. :(" ) ) + + if self.options.tab == '"splash"': + self.allLayers = True + self.plotCurrentLayer = True + self.svgNodeCount = 0 + self.svgLastPath = 0 + unused_button = ebb_motion.QueryPRGButton(self.serialPort) #Query if button pressed + self.svgLayer = 12345; # indicate that we are plotting all layers. + self.plotToEggBot() + + elif self.options.tab == '"resume"': + unused_button = ebb_motion.QueryPRGButton(self.serialPort) #Query if button pressed + self.resumePlotSetup() + if self.resumeMode: + self.plotToEggBot() + elif ( self.options.cancelOnly ): + pass + else: + inkex.errormsg( gettext.gettext( "Truly sorry, there does not seem to be any in-progress plot to resume." ) ) + + elif self.options.tab == '"layers"': + self.allLayers = False + self.plotCurrentLayer = False + self.LayersPlotted = 0 + self.svgLastPath = 0 + unused_button = ebb_motion.QueryPRGButton(self.serialPort) #Query if button pressed + self.svgNodeCount = 0; + self.svgLayer = self.options.layernumber + self.plotToEggBot() + if ( self.LayersPlotted == 0 ): + inkex.errormsg( gettext.gettext( "Truly sorry, but I did not find any numbered layers to plot." ) ) + + elif self.options.tab == '"setup"': + self.setupCommand() + elif self.options.tab == '"manual"': + self.manualCommand() + + if self.serialPort is not None: + ebb_motion.doTimedPause(self.serialPort, 10) #Pause a moment for underway commands to finish... + ebb_serial.closePort(self.serialPort) + + self.svgDataRead = False + self.UpdateSVGEggbotData( self.svg ) + return + + def CheckSVGforEggbotData( self ): + self.svgDataRead = False + self.recursiveEggbotDataScan( self.svg ) + if ( not self.svgDataRead ): #if there is no eggbot data, add some: + eggbotlayer = inkex.etree.SubElement( self.svg, 'eggbot' ) + eggbotlayer.set( 'layer', str( 0 ) ) + eggbotlayer.set( 'node', str( 0 ) ) + eggbotlayer.set( 'lastpath', str( 0 ) ) + eggbotlayer.set( 'lastpathnc', str( 0 ) ) + eggbotlayer.set( 'totaldeltax', str( 0 ) ) + eggbotlayer.set( 'totaldeltay', str( 0 ) ) + + def recursiveEggbotDataScan( self, aNodeList ): + if ( not self.svgDataRead ): + for node in aNodeList: + if node.tag == 'svg': + self.recursiveEggbotDataScan( node ) + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + self.svgLayer = int( node.get( 'layer' ) ) + self.svgNodeCount = int( node.get( 'node' ) ) + + try: + self.svgLastPath = int( node.get( 'lastpath' ) ) +# inkex.errormsg('lastpath: ' + str(self.svgLastPath)) + self.svgLastPathNC = int( node.get( 'lastpathnc' ) ) +# inkex.errormsg('lastpathnc: ' + str(self.svgLastPathNC)) + self.svgTotalDeltaX = int( node.get( 'totaldeltax' ) ) + self.svgTotalDeltaY = int( node.get( 'totaldeltay' ) ) + self.svgDataRead = True + except: + node.set( 'lastpath', str( 0 ) ) + node.set( 'lastpathnc', str( 0 ) ) + node.set( 'totaldeltax', str( 0 ) ) + node.set( 'totaldeltay', str( 0 ) ) + self.svgDataRead = True + + def UpdateSVGEggbotData( self, aNodeList ): + if ( not self.svgDataRead ): + for node in aNodeList: + if node.tag == 'svg': + self.UpdateSVGEggbotData( node ) + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + node.set( 'layer', str( self.svgLayer ) ) + node.set( 'node', str( self.svgNodeCount ) ) + node.set( 'lastpath', str( self.svgLastPath ) ) + node.set( 'lastpathnc', str( self.svgLastPathNC ) ) + node.set( 'totaldeltax', str( self.svgTotalDeltaX ) ) + node.set( 'totaldeltay', str( self.svgTotalDeltaY ) ) + self.svgDataRead = True + + def resumePlotSetup( self ): + self.LayerFound = False + if ( self.svgLayer < 101 ) and ( self.svgLayer >= 0 ): + self.options.layernumber = self.svgLayer + self.allLayers = False + self.plotCurrentLayer = False + self.LayerFound = True + elif ( self.svgLayer == 12345 ): # Plot all layers + self.allLayers = True + self.plotCurrentLayer = True + self.LayerFound = True + if ( self.LayerFound ): + if ( self.svgNodeCount > 0 ): + self.nodeTarget = self.svgNodeCount + self.resumeMode = True + if ( self.options.cancelOnly ): + self.resumeMode = False + self.fPrevX = self.svgTotalDeltaX + self.fPrevY = self.svgTotalDeltaY + self.fX = 0 + self.fY = 0 + self.plotLineAndTime() + self.penUp() #Always end with pen-up + self.svgLayer = 0 + self.svgNodeCount = 0 + self.svgLastPath = 0 + self.svgLastPathNC = 0 + self.svgTotalDeltaX = 0 + self.svgTotalDeltaY = 0 + + def manualCommand( self ): + """Execute commands from the "manual" tab""" + + if self.options.manualType == "none": + return + + if self.serialPort is None: + return + + if self.options.manualType == "raise-pen": + self.ServoSetupWrapper() + self.penUp() + + elif self.options.manualType == "lower-pen": + self.ServoSetupWrapper() + self.penDown() + + elif self.options.manualType == "enable-motors": + ebb_motion.sendEnableMotors(self.serialPort, 1) # 16X microstepping + + elif self.options.manualType == "disable-motors": + self.sendDisableMotors() + + elif self.options.manualType == "version-check": + strVersion = ebb_serial.query( self.serialPort, 'v\r' ) + inkex.errormsg( 'I asked the EBB for its version info, and it replied:\n ' + strVersion ) + + elif self.options.manualType == "enable-engraver": + if ( not self.options.engraving ): + inkex.errormsg( gettext.gettext( "The engraver option is disabled. " + \ + " Please enable it first from the \"Options\" tab." ) ) + else: + self.engraverOn() + + elif self.options.manualType == 'disable-engraver': + self.engraverOffManual() #Force engraver off, even if it is not enabled. + + else: # self.options.manualType is "walk-egg-motor" or "walk-pen-motor": + if self.options.manualType == "walk-egg-motor": + nDeltaX = self.options.WalkDistance + nDeltaY = 0 + elif self.options.manualType == "walk-pen-motor": + nDeltaY = self.options.WalkDistance + nDeltaX = 0 + else: + return + + ebb_motion.sendEnableMotors(self.serialPort, 1) # 16X microstepping + + #Query pen position: 1 up, 0 down (followed by OK) + strVersion = ebb_serial.query( self.serialPort, 'QP\r' ) + + if strVersion[0] == '0': + self.fSpeed = self.options.penDownSpeed + if strVersion[0] == '1': + self.fSpeed = self.options.penUpSpeed + + if ( self.options.revPenMotor ): + nDeltaY = -1 * nDeltaY + if ( self.options.revEggMotor ): + nDeltaX = -1 * nDeltaX + + nTime = 10000.00 / self.fSpeed * plot_utils.distance( nDeltaX, nDeltaY ) + nTime = int( math.ceil(nTime / 10.0)) + + strOutput = ','.join( ['SM', str( nTime ), str( nDeltaY ), str( nDeltaX )] ) + '\r' + #inkex.errormsg( 'strOutput: ' + strOutput ) + + ebb_serial.command( self.serialPort, strOutput ) + + def setupCommand( self ): + """Execute commands from the "setup" tab""" + + if self.serialPort is None: + return + self.ServoSetupWrapper() + if self.options.setupType == "align-mode": + self.penUp() + self.sendDisableMotors() + else: + ebb_motion.TogglePen(self.serialPort) + + def plotToEggBot( self ): + '''Perform the actual plotting, if selected in the interface:''' + #parse the svg data as a series of line segments and send each segment to be plotted + + if self.serialPort is None: + return + + if self.options.startCentered and ( not self.getDocProps() ): + # Cannot handle the document's dimensions!!! + inkex.errormsg( gettext.gettext( + 'This document does not have valid dimensions.\r\r' + + 'Consider starting with the EggBot template, or ' + + 'setting the document size to 3200 px (wide) x 800 px (tall).\r\r' + + 'Document dimensions may be set in Inkscape with ' + + 'File > Document Properties.\r\rThe document dimensions must be unitless or have ' + + 'units of pixels (px) or percentages (%). ' ) ) + return + + # Viewbox handling + # Also ignores the preserveAspectRatio attribute + viewbox = self.svg.get( 'viewBox' ) + if viewbox: + vinfo = viewbox.strip().replace( ',', ' ' ).split( ' ' ) + if ( float(vinfo[2]) != 0 ) and ( float(vinfo[3]) != 0 ): + sx = self.svgWidth / float( vinfo[2] ) + sy = self.svgHeight / float( vinfo[3] ) + self.svgTransform = parseTransform( 'scale(%f,%f) translate(%f,%f)' % (sx, sy, -float( vinfo[0] ), -float( vinfo[1] ) ) ) + + self.ServoSetup() + ebb_motion.sendEnableMotors(self.serialPort, 1) # 16X microstepping + + # Ensure that the engraver is turned off for the time being + # It will be turned back on when the first non-virtual pen-down occurs + if self.options.engraving: + self.engraverOff() + + + try: + # wrap everything in a try so we can for sure close the serial port + #self.recursivelyTraverseSvg(self.document.getroot()) + self.penDownActivatesEngraver = True + self.recursivelyTraverseSvg( self.svg, self.svgTransform ) + self.penUp() #Always end with pen-up + + # Logically, we want to turn the engraver off here as well, + # but we put that in our finally clause instead + # self.engraverOff() + + # return to home, if returnToHome = True + if ( ( not self.bStopped ) and self.options.returnToHome and ( self.ptFirst ) ): + self.fX = self.ptFirst[0] + self.fY = self.ptFirst[1] + #self.penUp() + self.nodeCount = self.nodeTarget # enablesfpx return-to-home only option + self.plotLineAndTime() + #inkex.errormsg('Final node count: ' + str(self.svgNodeCount)) #Node Count - Debug option + if ( not self.bStopped ): + self.svgLayer = 0 + self.svgNodeCount = 0 + self.svgLastPath = 0 + self.svgLastPathNC = 0 + self.svgTotalDeltaX = 0 + self.svgTotalDeltaY = 0 + + finally: + # We may have had an exception and lost the serial port... + self.penDownActivatesEngraver = False + if ( not ( self.serialPort is None ) ) and ( self.options.engraving ): + self.engraverOff() + + def recursivelyTraverseSvg( self, aNodeList, + matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible' ): + """ + Recursively traverse the svg file to plot out all of the + paths. The function keeps track of the composite transformation + that should be applied to each path. + + This function handles path, group, line, rect, polyline, polygon, + circle, ellipse and use (clone) elements. Notable elements not + handled include text. Unhandled elements should be converted to + paths in Inkscape. + """ + for node in aNodeList: + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + # first apply the current matrix transform to this node's tranform + matNew = composeTransform( matCurrent, parseTransform( node.get( "transform" ) ) ) + + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + self.penUp() + if ( node.get( inkex.addNS( 'groupmode', 'inkscape' ) ) == 'layer' ): + if not self.allLayers: + #inkex.errormsg('Plotting layer named: ' + node.get(inkex.addNS('label', 'inkscape'))) + self.DoWePlotLayer( node.get( inkex.addNS( 'label', 'inkscape' ) ) ) + self.recursivelyTraverseSvg( node, matNew, parent_visibility=v ) + + elif node.tag == inkex.addNS( 'use', 'svg' ) or node.tag == 'use': + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get( inkex.addNS( 'href', 'xlink' ) ) + if refid: + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath( path ) + if refnode: + x = float( node.get( 'x', '0' ) ) + y = float( node.get( 'y', '0' ) ) + # Note: the transform has already been applied + if ( x != 0 ) or (y != 0 ): + matNew2 = composeTransform( matNew, parseTransform( 'translate(%f,%f)' % (x,y) ) ) + else: + matNew2 = matNew + v = node.get( 'visibility', v ) + self.recursivelyTraverseSvg( refnode, matNew2, parent_visibility=v ) + else: + pass + else: + pass + + elif node.tag == inkex.addNS( 'path', 'svg' ): + + # if we're in resume mode AND self.pathcount < self.svgLastPath, + # then skip over this path. + # if we're in resume mode and self.pathcount = self.svgLastPath, + # then start here, and set + # self.nodeCount equal to self.svgLastPathNC + + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + self.plotPath( node, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + + elif node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + newpath = inkex.etree.Element( inkex.addNS( 'path', 'svg' ) ) + x = float( node.get( 'x' ) ) + y = float( node.get( 'y' ) ) + w = float( node.get( 'width' ) ) + h = float( node.get( 'height' ) ) + s = node.get( 'style' ) + if s: + newpath.set( 'style', s ) + t = node.get( 'transform' ) + if t: + newpath.set( 'transform', t ) + a = [] + a.append( ['M ', [x, y]] ) + a.append( [' l ', [w, 0]] ) + a.append( [' l ', [0, h]] ) + a.append( [' l ', [-w, 0]] ) + a.append( [' Z', []] ) + newpath.set( 'd', simplepath.formatPath( a ) ) + self.plotPath( newpath, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + + elif node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + # Convert + # + # + + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + newpath = inkex.etree.Element( inkex.addNS( 'path', 'svg' ) ) + x1 = float( node.get( 'x1' ) ) + y1 = float( node.get( 'y1' ) ) + x2 = float( node.get( 'x2' ) ) + y2 = float( node.get( 'y2' ) ) + s = node.get( 'style' ) + if s: + newpath.set( 'style', s ) + t = node.get( 'transform' ) + if t: + newpath.set( 'transform', t ) + a = [] + a.append( ['M ', [x1, y1]] ) + a.append( [' L ', [x2, y2]] ) + newpath.set( 'd', simplepath.formatPath( a ) ) + self.plotPath( newpath, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + + + elif node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + pa = pl.split() + if not len( pa ): + pass + # Issue 29: pre 2.5.? versions of Python do not have + # "statement-1 if expression-1 else statement-2" + # which came out of PEP 308, Conditional Expressions + #d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + d = "M " + pa[0] + for i in range( 1, len( pa ) ): + d += " L " + pa[i] + newpath = inkex.etree.Element( inkex.addNS( 'path', 'svg' ) ) + newpath.set( 'd', d ); + s = node.get( 'style' ) + if s: + newpath.set( 'style', s ) + t = node.get( 'transform' ) + if t: + newpath.set( 'transform', t ) + self.plotPath( newpath, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + + + + elif node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + + # Convert + # + # to + # + # Note: we ignore polygons with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + pa = pl.split() + if not len( pa ): + pass + # Issue 29: pre 2.5.? versions of Python do not have + # "statement-1 if expression-1 else statement-2" + # which came out of PEP 308, Conditional Expressions + #d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + d = "M " + pa[0] + for i in range( 1, len( pa ) ): + d += " L " + pa[i] + d += " Z" + newpath = inkex.etree.Element( inkex.addNS( 'path', 'svg' ) ) + newpath.set( 'd', d ); + s = node.get( 'style' ) + if s: + newpath.set( 'style', s ) + t = node.get( 'transform' ) + if t: + newpath.set( 'transform', t ) + self.plotPath( newpath, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + + + + elif node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse' or \ + node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + rx = float( node.get( 'rx', '0' ) ) + ry = float( node.get( 'ry', '0' ) ) + else: + rx = float( node.get( 'r', '0' ) ) + ry = rx + if rx == 0 or ry == 0: + pass + + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % ( x1, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f ' % ( x2, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f' % ( x1, cy ) + newpath = inkex.etree.Element( inkex.addNS( 'path', 'svg' ) ) + newpath.set( 'd', d ); + s = node.get( 'style' ) + if s: + newpath.set( 'style', s ) + t = node.get( 'transform' ) + if t: + newpath.set( 'transform', t ) + self.plotPath( newpath, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + + elif node.tag == inkex.addNS( 'metadata', 'svg' ) or node.tag == 'metadata': + pass + elif node.tag == inkex.addNS( 'defs', 'svg' ) or node.tag == 'defs': + pass + elif node.tag == inkex.addNS( 'namedview', 'sodipodi' ) or node.tag == 'namedview': + pass + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + pass + elif node.tag == inkex.addNS( 'WCB', 'svg' ) or node.tag == 'WCB': + pass + elif node.tag == inkex.addNS( 'title', 'svg' ) or node.tag == 'title': + pass + elif node.tag == inkex.addNS( 'desc', 'svg' ) or node.tag == 'desc': + pass + elif node.tag == inkex.addNS( 'text', 'svg' ) or node.tag == 'text': + if not self.warnings.has_key( 'text' ): + inkex.errormsg( gettext.gettext( 'Warning: unable to draw text; ' + + 'please convert it to a path first. Consider using the ' + + 'Hershey Text extension which is located under the '+ + '"Render" category of extensions.' ) ) + self.warnings['text'] = 1 + pass + elif node.tag == inkex.addNS( 'image', 'svg' ) or node.tag == 'image': + ''' + if not self.warnings.has_key( 'image' ): + inkex.errormsg( gettext.gettext( 'Warning: unable to draw bitmap images; ' + + 'please convert them to line art first. Consider using the "Trace bitmap..." ' + + 'tool of the "Path" menu. Mac users please note that some X11 settings may ' + + 'cause cut-and-paste operations to paste in bitmap copies.' ) ) + self.warnings['image'] = 1 + pass + ''' + doWePlotThisPath = False + if (self.resumeMode): + if ( self.pathcount < self.svgLastPath ): + self.pathcount += 1 + elif ( self.pathcount == self.svgLastPath ): + self.nodeCount = self.svgLastPathNC + doWePlotThisPath = True + else: + doWePlotThisPath = True + if (doWePlotThisPath): + self.pathcount += 1 + self.plotBitmapImage( node, matNew ) + if ( not self.bStopped ): #an "index" for resuming plots quickly-- record last complete path + self.svgLastPath += 1 + self.svgLastPathNC = self.nodeCount + elif node.tag == inkex.addNS( 'pattern', 'svg' ) or node.tag == 'pattern': + pass + elif node.tag == inkex.addNS( 'radialGradient', 'svg' ) or node.tag == 'radialGradient': + # Similar to pattern + pass + elif node.tag == inkex.addNS( 'linearGradient', 'svg' ) or node.tag == 'linearGradient': + # Similar in pattern + pass + elif node.tag == inkex.addNS( 'style', 'svg' ) or node.tag == 'style': + # This is a reference to an external style sheet and not the value + # of a style attribute to be inherited by child elements + pass + elif node.tag == inkex.addNS( 'cursor', 'svg' ) or node.tag == 'cursor': + pass + elif node.tag == inkex.addNS( 'color-profile', 'svg' ) or node.tag == 'color-profile': + # Gamma curves, color temp, etc. are not relevant to single color output + pass + elif not isinstance( node.tag, basestring ): + # This is likely an XML processing instruction such as an XML + # comment. lxml uses a function reference for such node tags + # and as such the node tag is likely not a printable string. + # Further, converting it to a printable string likely won't + # be very useful. + pass + else: + if not self.warnings.has_key( str( node.tag ) ): + t = str( node.tag ).split( '}' ) + inkex.errormsg( gettext.gettext( 'Warning: unable to draw <' + str( t[-1] ) + + '> object, please convert it to a path first.' ) ) + self.warnings[str( node.tag )] = 1 + pass + + def DoWePlotLayer( self, strLayerName ): + """ + We are only plotting *some* layers. Check to see + whether or not we're going to plot this one. + + First: scan first 4 chars of node id for first non-numeric character, + and scan the part before that (if any) into a number + + Then, see if the number matches the layer. + """ + + TempNumString = 'x' + stringPos = 1 + CurrentLayerName = string.lstrip( strLayerName ) #remove leading whitespace + + # Look at layer name. Sample first character, then first two, and + # so on, until the string ends or the string no longer consists of + # digit characters only. + + MaxLength = len( CurrentLayerName ) + if MaxLength > 0: + while stringPos <= MaxLength: + if str.isdigit( CurrentLayerName[:stringPos] ): + TempNumString = CurrentLayerName[:stringPos] # Store longest numeric string so far + stringPos = stringPos + 1 + else: + break + + self.plotCurrentLayer = False #Temporarily assume that we aren't plotting the layer + if ( str.isdigit( TempNumString ) ): + if ( self.svgLayer == int( float( TempNumString ) ) ): + self.plotCurrentLayer = True #We get to plot the layer! + self.LayersPlotted += 1 + #Note: this function is only called if we are NOT plotting all layers. + + + def getDocProps( self ): + ''' + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + ''' + self.svgHeight = plot_utils.getLength( self, 'height', eggbot_conf.N_PAGE_HEIGHT ) + self.svgWidth = plot_utils.getLength( self, 'width', eggbot_conf.N_PAGE_WIDTH ) + if ( self.svgHeight == None ) or ( self.svgWidth == None ): + return False + else: + return True + + + def plotPath( self, path, matTransform ): + ''' + Plot the path while applying the transformation defined + by the matrix [matTransform]. + ''' + # turn this path into a cubicsuperpath (list of beziers)... + + d = path.get( 'd' ) + + if len( simplepath.parsePath( d ) ) == 0: + return + + p = cubicsuperpath.parsePath( d ) + + # ...and apply the transformation to each point + applyTransformToPath( matTransform, p ) + + # p is now a list of lists of cubic beziers [control pt1, control pt2, endpoint] + # where the start-point is the last point in the previous segment. + for sp in p: + + plot_utils.subdivideCubicPath( sp, self.options.smoothness ) + nIndex = 0 + + for csp in sp: + + if self.bStopped: + return + + if self.plotCurrentLayer: + if nIndex == 0: + self.penUp() + self.virtualPenIsUp = True + elif nIndex == 1: + self.penDown() + self.virtualPenIsUp = False + + nIndex += 1 + + self.fX = 2 * float( csp[1][0] ) / self.step_scaling_factor + self.fY = 2 * float( csp[1][1] ) / self.step_scaling_factor + + # store home + if self.ptFirst is None: + + # if we should start at center, then the first line segment should draw from there + if self.options.startCentered: + self.fPrevX = self.svgWidth / ( self.step_scaling_factor ) + self.fPrevY = self.svgHeight / ( self.step_scaling_factor ) + + self.ptFirst = ( self.fPrevX, self.fPrevY ) + else: + self.ptFirst = ( self.fX, self.fY ) + + if self.plotCurrentLayer: + self.plotLineAndTime() + self.fPrevX = self.fX + self.fPrevY = self.fY + + def plotBitmapImage( self, path, matTransform ): + ''' + Plot the image while applying the transformation defined + by the matrix [matTransform]. + ''' + # turn this path into a cubicsuperpath (list of beziers)... + + imagestr = path.get( inkex.addNS( 'href', 'xlink' ) ) + y = float( path.get( 'y') ) + x = float( path.get( 'x') ) + #width = path.get( 'width') + #height = path.get( 'height') + a = imagestr.split( ',' ) + imgstr = str(a[1]) + decodestr = decodestring(imgstr) + + + image = Image.open(StringIO.StringIO(decodestr)) + + width, height = image.size + inkex.errormsg(str(width)) + inkex.errormsg(str(height)) + + pix = image.load() + + for i in range(0,width,12): + nIndex = 0 + for j in range(height): + stpr = '' + for soplo in range(12): + isoplo = i + soplo + if isoplo < width: + + #inkex.errormsg(str(pix[0,0])) + + a = pix[isoplo,j][0] + b = pix[isoplo,j][1] + c = pix[isoplo,j][2] + S = (a + b + c) // 3 + + #S = pix[i, jsoplo] + if S == 0: + stpr = stpr + '1' + + else: + stpr = stpr + '0' + + else: + stpr = stpr + '0' + + if self.bStopped: + return + + if self.plotCurrentLayer: + if nIndex == 0: + self.penUp() + self.virtualPenIsUp = True + elif nIndex == 1: + self.penDown() + self.virtualPenIsUp = False + + nIndex += 1 + + self.fX = 2 * float( x + i * 4 ) / self.step_scaling_factor + self.fY = 2 * float( y + j * 2 ) / self.step_scaling_factor + + # store home + if self.ptFirst is None: + + # if we should start at center, then the first line segment should draw from there + if self.options.startCentered: + self.fPrevX = self.svgWidth / ( self.step_scaling_factor ) + self.fPrevY = self.svgHeight / ( self.step_scaling_factor ) + + self.ptFirst = ( self.fPrevX, self.fPrevY ) + else: + self.ptFirst = ( self.fX, self.fY ) + + if self.plotCurrentLayer: + self.plotBitmapAndTime(stpr) + self.fPrevX = self.fX + self.fPrevY = self.fY + + ''' + inkex.errormsg(str(self.fX)) + inkex.errormsg(str(self.fY)) + inkex.errormsg(str(stpr)) + ''' + + ''' + if len( simplepath.parsePath( d ) ) == 0: + return + + p = cubicsuperpath.parsePath( d ) + + # ...and apply the transformation to each point + applyTransformToPath( matTransform, p ) + + # p is now a list of lists of cubic beziers [control pt1, control pt2, endpoint] + # where the start-point is the last point in the previous segment. + for sp in p: + + plot_utils.subdivideCubicPath( sp, self.options.smoothness ) + nIndex = 0 + + for csp in sp: + + if self.bStopped: + return + + if self.plotCurrentLayer: + if nIndex == 0: + self.penUp() + self.virtualPenIsUp = True + elif nIndex == 1: + self.penDown() + self.virtualPenIsUp = False + + nIndex += 1 + + self.fX = 2 * float( csp[1][0] ) / self.step_scaling_factor + self.fY = 2 * float( csp[1][1] ) / self.step_scaling_factor + + # store home + if self.ptFirst is None: + + # if we should start at center, then the first line segment should draw from there + if self.options.startCentered: + self.fPrevX = self.svgWidth / ( self.step_scaling_factor ) + self.fPrevY = self.svgHeight / ( self.step_scaling_factor ) + + self.ptFirst = ( self.fPrevX, self.fPrevY ) + else: + self.ptFirst = ( self.fX, self.fY ) + + if self.plotCurrentLayer: + self.plotLineAndTime() + self.fPrevX = self.fX + self.fPrevY = self.fY + ''' + def sendDisableMotors( self ): + # Insist on turning the engraver off. Otherwise, if it is on + # and the pen is down, then the engraver's vibration may cause + # the loose pen arm to start moving or the egg to start turning. + self.engraverOffManual() + ebb_motion.sendDisableMotors(self.serialPort) + + + def penUp( self ): + self.virtualPenIsUp = True # Virtual pen keeps track of state for resuming plotting. + if ( not self.resumeMode) and (not self.bPenIsUp): # skip if pen is already up, or if we're resuming. + ebb_motion.sendPenUp(self.serialPort, self.options.penUpDelay ) + self.bPenIsUp = True + + def penDown( self ): + self.virtualPenIsUp = False # Virtual pen keeps track of state for resuming plotting. + if (self.bPenIsUp): # skip if pen is already down + if ( not self.resumeMode ) and (not self.bStopped): # skip if we're resuming or stopped + self.bPenIsUp = False + if self.penDownActivatesEngraver: + self.engraverOn() # will check self.enableEngraver + ebb_motion.sendPenDown(self.serialPort, self.options.penUpDelay ) + ebb_motion.doTimedPause(self.serialPort, 10) #Pause a moment for underway commands to finish... + + + def engraverOff( self ): + # Note: we don't bother checking self.engraverIsOn -- turn it off regardless + # Reason being that we may not know the true hardware state + if self.options.engraving: + ebb_serial.command( self.serialPort, 'PO,B,3,0\r') + self.engraverIsOn = False + + def engraverOffManual( self ): + # Turn off engraver, whether or not the engraver is enabled. + # This is only called by manual commands like "engraver off" and "motors off." + ebb_serial.command( self.serialPort, 'PO,B,3,0\r') + self.engraverIsOn = False + + def engraverOn( self ): + if self.options.engraving and ( not self.engraverIsOn ): + self.engraverIsOn = True + ebb_serial.command( self.serialPort, 'PD,B,3,0\r') #Added 6/6/2011, necessary. + ebb_serial.command( self.serialPort, 'PO,B,3,1\r' ) + + def ServoSetupWrapper( self ): + self.ServoSetup() + strVersion = ebb_serial.query( self.serialPort, 'QP\r' ) #Query pen position: 1 up, 0 down (followed by OK) + if strVersion[0] == '0': +# ebb_serial.command( self.serialPort, 'SP,0\r' ) + ebb_motion.sendPenDown(self.serialPort, 0) + else: +# ebb_serial.command( self.serialPort, 'SP,1\r' ) + ebb_motion.sendPenUp(self.serialPort, 0) + + + def ServoSetup( self ): + # Pen position units range from 0% to 100%, which correspond to + # a timing range of 6000 - 30000 in units of 1/(12 MHz). + # 1% corresponds to 20 us, or 240 units of 1/(12 MHz). + + intTemp = 240 * ( self.options.penUpPosition + 25 ) + ebb_serial.command( self.serialPort, 'SC,4,' + str( intTemp ) + '\r' ) + + intTemp = 240 * ( self.options.penDownPosition + 25 ) + ebb_serial.command( self.serialPort, 'SC,5,' + str( intTemp ) + '\r' ) + + # Servo speed units are in units of %/second, referring to the + # percentages above. The EBB takes speeds in units of 1/(12 MHz) steps + # per 21 ms. Scaling as above, 1% in 1 second corresponds to + # 240 steps/s, which corresponds to 0.240 steps/ms, which corresponds + # to 5.04 steps/21 ms. Rounding this to 5 steps/21 ms is correct + # to within 1 %. + + intTemp = 5 * self.options.ServoUpSpeed + ebb_serial.command( self.serialPort, 'SC,11,' + str( intTemp ) + '\r' ) + intTemp = 5 * self.options.ServoDownSpeed + ebb_serial.command( self.serialPort, 'SC,12,' + str( intTemp ) + '\r' ) + + def stop( self ): + self.bStopped = True + + def plotLineAndTime( self ): + ''' + Send commands out the com port as a line segment (dx, dy) and a time (ms) the segment + should take to implement + ''' + + if self.bStopped: + return + if ( self.fPrevX is None ): + return + + nDeltaX = int( self.fX ) - int( self.fPrevX ) + nDeltaY = int( self.fY ) - int( self.fPrevY ) + + if self.bPenIsUp: + self.fSpeed = self.options.penUpSpeed + + if ( self.options.wraparound ): + if ( nDeltaX > self.halfWrapSteps ): + while ( nDeltaX > self.halfWrapSteps ): + nDeltaX -= self.wrapSteps + elif ( nDeltaX < -1 * self.halfWrapSteps ): + while ( nDeltaX < -1 * self.halfWrapSteps ): + nDeltaX += self.wrapSteps + + else: + self.fSpeed = self.options.penDownSpeed + + + if ( plot_utils.distance( nDeltaX, nDeltaY ) > 0 ): + self.nodeCount += 1 + + if self.resumeMode: + if ( self.nodeCount > self.nodeTarget ): + self.resumeMode = False + if ( not self.virtualPenIsUp ): + self.penDown() + self.fSpeed = self.options.penDownSpeed + + nTime = int( math.ceil( 1000 / self.fSpeed * plot_utils.distance( nDeltaX, nDeltaY ) ) ) + + while ( ( abs( nDeltaX ) > 0 ) or ( abs( nDeltaY ) > 0 ) ): + if ( nTime > 750 ): + xd = int( round( ( 750.0 * nDeltaX ) / nTime ) ) + yd = int( round( ( 750.0 * nDeltaY ) / nTime ) ) + td = int( 750 ) + else: + xd = nDeltaX + yd = nDeltaY + td = nTime + if ( td < 1 ): + td = 1 # don't allow zero-time moves. + + if ( not self.resumeMode ): + if ( self.options.revPenMotor ): + yd2 = yd + else: + yd2 = -yd + if ( self.options.revEggMotor ): + xd2 = -xd + else: + xd2 = xd + + strOutput = ','.join( ['SM', str( td ), str( yd2 ), str( xd2 )] ) + '\r' + self.svgTotalDeltaX += xd + self.svgTotalDeltaY += yd + ebb_serial.command( self.serialPort, strOutput ) + + nDeltaX -= xd + nDeltaY -= yd + nTime -= td + + #self.doCommand('NI\r') #Increment node counter on EBB + strButton = ebb_motion.QueryPRGButton(self.serialPort) #Query if button pressed + + if strButton[0] == '0': + pass #button not pressed + else: + self.svgNodeCount = self.nodeCount; + inkex.errormsg( 'Plot paused by button press after node number ' + str( self.nodeCount ) + '.' ) + inkex.errormsg( 'Use the "resume" feature to continue.' ) + #self.penUp() # Should be redundant... + self.engraverOff() + self.bStopped = True + return + + def plotBitmapAndTime( self, soplobinstr ): + ''' + Send commands out the com port as a line segment (dx, dy) and a time (ms) the segment + should take to implement + ''' + + if self.bStopped: + return + if ( self.fPrevX is None ): + return + + nDeltaX = int( self.fX ) - int( self.fPrevX ) + nDeltaY = int( self.fY ) - int( self.fPrevY ) + + if self.bPenIsUp: + self.fSpeed = self.options.penUpSpeed + + if ( self.options.wraparound ): + if ( nDeltaX > self.halfWrapSteps ): + while ( nDeltaX > self.halfWrapSteps ): + nDeltaX -= self.wrapSteps + elif ( nDeltaX < -1 * self.halfWrapSteps ): + while ( nDeltaX < -1 * self.halfWrapSteps ): + nDeltaX += self.wrapSteps + + else: + self.fSpeed = self.options.penDownSpeed + + + if ( plot_utils.distance( nDeltaX, nDeltaY ) > 0 ): + self.nodeCount += 1 + + if self.resumeMode: + if ( self.nodeCount > self.nodeTarget ): + self.resumeMode = False + if ( not self.virtualPenIsUp ): + self.penDown() + self.fSpeed = self.options.penDownSpeed + + nTime = int( math.ceil( 1000 / self.fSpeed * plot_utils.distance( nDeltaX, nDeltaY ) ) ) + + while ( ( abs( nDeltaX ) > 0 ) or ( abs( nDeltaY ) > 0 ) ): + if ( nTime > 750 ): + xd = int( round( ( 750.0 * nDeltaX ) / nTime ) ) + yd = int( round( ( 750.0 * nDeltaY ) / nTime ) ) + td = int( 750 ) + else: + xd = nDeltaX + yd = nDeltaY + td = nTime + if ( td < 1 ): + td = 1 # don't allow zero-time moves. + + if ( not self.resumeMode ): + if ( self.options.revPenMotor ): + yd2 = yd + else: + yd2 = -yd + if ( self.options.revEggMotor ): + xd2 = -xd + else: + xd2 = xd + + strOutput = ','.join( ['SB', str( td ), str( yd2 ), str( xd2 ), str( int(soplobinstr,2) )] ) + '\r' + self.svgTotalDeltaX += xd + self.svgTotalDeltaY += yd + ebb_serial.command( self.serialPort, strOutput ) + + nDeltaX -= xd + nDeltaY -= yd + nTime -= td + + #self.doCommand('NI\r') #Increment node counter on EBB + strButton = ebb_motion.QueryPRGButton(self.serialPort) #Query if button pressed + + if strButton[0] == '0': + pass #button not pressed + else: + self.svgNodeCount = self.nodeCount; + inkex.errormsg( 'Plot paused by button press after node number ' + str( self.nodeCount ) + '.' ) + inkex.errormsg( 'Use the "resume" feature to continue.' ) + #self.penUp() # Should be redundant... + self.engraverOff() + self.bStopped = True + return + + +e = EggBot() +e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_acrostic.inx b/Source/Inkscape/EggBotControl.Original/eggbot_acrostic.inx new file mode 100644 index 0000000..452bdb2 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_acrostic.inx @@ -0,0 +1,139 @@ + + + <_name>Name Poem + command.eggbot.contributed.eggbot_acrostic101 + + simplestyle.py + eggbot_acrostic.py + inkex.py + + + <_param name="stuff" type="description"> +This extension helps you to draw a "name poem" (an acrostic +poem). Each line of poetry will be drawn horizontally, with +the second line below the first, and so on. + +For each line of poetry, the first character will be drawn +using the "Leading font". The remainder of the line will be +drawn using the "Secondary font". + + true + false + + <_option value="scriptc">Script medium + <_option value="scripts">Script 1-stroke + <_option value="cursive">Script 1-stroke (alt) + + <_option value="futural">Sans 1-stroke + <_option value="futuram">Sans bold + + <_option value="timesr">Serif medium + <_option value="timesi">Serif medium italic + <_option value="timesib">Serif bold italic + <_option value="timesrb">Serif bold + + <_option value="gothiceng">Gothic English + <_option value="gothicger">Gothic German + <_option value="gothicita">Gothic Italian + + <_option value="greek">Greek 1-stroke + <_option value="timesg">Greek medium + <_option value="cyrillic">Cyrillic + <_option value="japanese">Japanese + + <_option value="astrology">Astrology + <_option value="mathlow">Math (lower) + <_option value="mathupp">Math (upper) + <_option value="markers">Markers + <_option value="meteorology">Meteorology + <_option value="music">Music + <_option value="symbolic">Symbolic + + + <_option value="scripts">Script 1-stroke + <_option value="cursive">Script 1-stroke (alt) + <_option value="scriptc">Script medium + + <_option value="futural">Sans 1-stroke + <_option value="futuram">Sans bold + + <_option value="timesr">Serif medium + <_option value="timesi">Serif medium italic + <_option value="timesib">Serif bold italic + <_option value="timesrb">Serif bold + + <_option value="gothiceng">Gothic English + <_option value="gothicger">Gothic German + <_option value="gothicita">Gothic Italian + + <_option value="greek">Greek 1-stroke + <_option value="timesg">Greek medium + <_option value="cyrillic">Cyrillic + <_option value="japanese">Japanese + + <_option value="astrology">Astrology + <_option value="mathlow">Math (lower) + <_option value="mathupp">Math (upper) + <_option value="markers">Markers + <_option value="meteorology">Meteorology + <_option value="music">Music + <_option value="symbolic">Symbolic + + + + + + + + + + + + + + + +<_param name="aboutpage" type="description" xml:space="preserve"> +To render acrostic poetry, this extension uses the "Hershey" +fonts for plotters. These fonts are derived from NBS SP-424 +1976-04, "A contribution to computer typesetting techniques: +Tables of Coordinates for Hershey's Repertory of Occidental +Type Fonts and Graphic Symbols." + +To generate tables of the Hershey Fonts, see the "Hershey Text" +extension under the "Render" category of Extensions. + +For additional information, please visit: + + www.evilmadscientist.com/go/hershey + + + + + + + + + + + + + + + + + + + + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_acrostic.py b/Source/Inkscape/EggBotControl.Original/eggbot_acrostic.py new file mode 100644 index 0000000..ae6e08a --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_acrostic.py @@ -0,0 +1,267 @@ +# eggbot_acrostic.py +# +# Render an acrostic poem using the Hershey fonts +# +# This extension requires the hersheydata.py file which is part of the +# Hershey Text rendering extension written by Windell H. Oskay of +# www.evilmadscientist.com. Information on that extension may be found at +# +# http://www.evilmadscientist.com/go/hershey +# +# Copyright 2011, Daniel C. Newman, +# +# Significant portions of this code were written by Windell H. Oskay and are +# Copyright 2011, Windell H. Oskay, www.evilmadscientist.com +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import hersheydata # data file w/ Hershey font data +import inkex +import simplestyle + +WIDTH = 3200 +HEIGHT = 800 +MAX_H = 32 # Maximum height of a Hershey font character (parens) +LINE_SKIP = 6 # Baseline skip between lines of text + +# Mapping table to map the names used here to the corresponding +# names used in hersheydata.py. This helps prevent end users from +# being impacted by a name change in hersheydata.py. This can also +# be used to deal with a face being removed from hersheydata.py + +map_our_names_to_hersheydata = { + 'astrology' : 'astrology', + 'cursive' : 'cursive', + 'cyrillic' : 'cyrillic', + 'futural' : 'futural', + 'futuram' : 'futuram', + 'gothiceng' : 'gothiceng', + 'gothicger' : 'gothicger', + 'gothicita' : 'gothicita', + 'greek' : 'greek', + 'japanese' : 'japanese', + 'markers' : 'markers', + 'mathlow' : 'mathlow', + 'mathupp' : 'mathupp', + 'meteorology' : 'meteorology', + 'music' : 'music', + 'scriptc' : 'scriptc', + 'scripts' : 'scripts', + 'symbolic' : 'symbolic', + 'timesg' : 'timesg', + 'timesi' : 'timesi', + 'timesib' : 'timesib', + 'timesr' : 'timesr', + 'timesrb' : 'timesrb' } + +# The following two routines are lifted with impunity from Windell H. Oskay's +# hershey.py Hershey Text extension for Inkscape. They are, +# Copyright 2011, Windell H. Oskay, www.evilmadscientist.com + +def draw_svg_text(char, face, offset, vertoffset, parent): + + style = { 'stroke': '#000000', 'fill': 'none' } + pathString = face[char] + splitString = pathString.split() + midpoint = offset - int(splitString[0]) + i = pathString.find("M") + if i >= 0: + pathString = pathString[i:] #portion after first move + trans = 'translate(' + str(midpoint) + ',' + str(vertoffset) + ')' + text_attribs = {'style':simplestyle.formatStyle(style), 'd':pathString, 'transform':trans} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), text_attribs) + return midpoint + int(splitString[1]) #new offset value + +def renderText( parent, w, y, text, typeface ): + + ''' + Render a string of text starting from the point (w, y) and using + the supplied typeface data. + ''' + + if ( text is None ) or ( text == '' ): + return + + spacing = 3 # spacing between letters + letterVals = [ ord( q ) - 32 for q in text ] + + for q in letterVals: + if ( q < 0 ) or ( q > 95 ): + w += 2 * spacing + else: + w = draw_svg_text( q, typeface, w, y, parent ) + + return w + +def renderLine( parent, x, y, line, typeface1, typeface2 ): + + ''' + Render a single line of text: + + The text runs horizontally from left to right starting at the point (x,y) + + The first character of the line is written using "typeface1" + + The remainder of the line of text is written using "typeface2" + + The entire line is stored as individual paths which are child elements + of the SVG element "parent". The text in typeface2 (line[1:]) is also + placed in it's own subgroup. The leading character is not placed in + that subgroup. The reasoning is that the user may want to pick out + the first character of each line of text and put them in another layer + for plotting in a different color. + ''' + + # Return now if there's nothing to do + if ( line is None ) or ( line == '' ): + return + + # Render the first character + x = renderText( parent, x, y, [ line[0] ], typeface1 ) + + # Render the rest of the line + line = line[1:] + if line == '': + return + g = inkex.etree.SubElement( parent, 'g' ) + renderText( g, x, y, line, typeface2 ) + +class AcrosticText( inkex.Effect ): + + def __init__( self ): + + inkex.Effect.__init__( self ) + self.OptionParser.add_option( "--tab", #NOTE: value is not used. + action="store", type="string", dest="tab", default="splash", + help="The active tab when Apply was pressed" ) + self.OptionParser.add_option( "--line01", action="store", + type="string", dest="line1", default="") + self.OptionParser.add_option( "--line02", action="store", + type="string", dest="line2", default="") + self.OptionParser.add_option( "--line03", action="store", + type="string", dest="line3", default="") + self.OptionParser.add_option( "--line04", action="store", + type="string", dest="line4", default="") + self.OptionParser.add_option( "--line05", action="store", + type="string", dest="line5", default="") + self.OptionParser.add_option( "--line06", action="store", + type="string", dest="line6", default="") + self.OptionParser.add_option( "--line07", action="store", + type="string", dest="line7", default="") + self.OptionParser.add_option( "--line08", action="store", + type="string", dest="line8", default="") + self.OptionParser.add_option( "--line09", action="store", + type="string", dest="line9", default="") + self.OptionParser.add_option( "--line10", action="store", + type="string", dest="line10", default="") + self.OptionParser.add_option( "--line11", action="store", + type="string", dest="line11", default="") + self.OptionParser.add_option( "--line12", action="store", + type="string", dest="line12", default="") + self.OptionParser.add_option( "--face1", + action="store", type="string", dest="face1", default="scriptc", + help="Leading font typeface" ) + self.OptionParser.add_option( "--face2", action="store", + type="string", dest="face2", default="scripts", + help="Secondary typeface" ) + self.OptionParser.add_option( "--flip", action="store", type="inkbool", + dest="flip", default=False, + help="Flip the text for plotting with the egg's bottom at the egg motor" ) + self.OptionParser.add_option( "--stretch", + action="store", type="inkbool", dest="stretch", default=True, + help="Stretch the text horizontally to account for egg distortions" ) + + def effect( self ): + + # Process the lines, ignoring leading or trailing blank lines + # and collapsing multiple internal runs of blank lines into a + # single blank line. + lines = [] + prior_empty = False + for i in range( 1, 13 ): + line = eval( 'self.options.line' + str( i ) ).strip() + if line == '': + if len( lines ) != 0: + prior_empty = True + else: + if prior_empty: + lines.append( '' ) + prior_empty = False + lines.append( line ) + + # Return now if there are no lines to print + line_count = len( lines ) + if line_count == 0: + return + + # Determine how much vertical room we need for our text + h = line_count * MAX_H + ( line_count - 1 ) * LINE_SKIP + + svg = self.document.getroot() + doc_height = self.unittouu( svg.attrib['height'] ) + if doc_height <= 0: + doc_height = HEIGHT + doc_width = self.unittouu( svg.attrib['width'] ) + if doc_width <= 0: + doc_width = WIDTH + + # Scale to doc_height pixels high + scale_y = float( doc_height ) / float( h ) + if self.options.stretch: + scale_x = scale_y * 1.5 + else: + scale_x = scale_y + + # Determine where to position the text + # We do not bother centering the text horizontally + # to do that we would need to pre-render the text to determine + # the length of the longest line. That's too much bother so + # we just skip that potential nice-to-have. + x = float( doc_width ) / ( 2.0 * scale_x ) + y = float( MAX_H ) / scale_y + + # Get the two type faces + name1 = self.options.face1 + if map_our_names_to_hersheydata.has_key( name1 ): + name1 = map_our_names_to_hersheydata[name1] + face1 = eval( 'hersheydata.' + name1 ) + name2 = self.options.face2 + if map_our_names_to_hersheydata.has_key( name2 ): + name2 = map_our_names_to_hersheydata[name2] + face2 = eval( 'hersheydata.' + name2 ) + + # Create the group which will contain all of the text + # We DO NOT make this a child of the current layer as that + # would subject us to any transforms it might have. That's + # an issue even in the simple case of someone opening a default + # document and then changing its dimensions to 3200 x 800: + # Inkscape imposes a transform in that situation. While that + # transform is no big deal, it's another complication in trying + # to just make the resulting text look right (right size, right + # approximate position, etc.). + + if self.options.flip: + attribs = { 'transform' : 'matrix(-%f,0,0,-%f,%d,%d)' % ( scale_x, scale_y, doc_width, doc_height ) } + else: + attribs = { 'transform' : 'scale(%f,%f)' % ( scale_x, scale_y ) } + container = inkex.etree.SubElement( self.document.getroot(), 'g', attribs ) + + # Finally, we render each line of text + for i in range( 0, len( lines ) ): + if lines[i] != '': + g = inkex.etree.SubElement( container, 'g' ) + renderLine( g, x, y, lines[i], face1, face2 ) + y += MAX_H + LINE_SKIP + +if __name__ == '__main__': + e = AcrosticText() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_conf.py b/Source/Inkscape/EggBotControl.Original/eggbot_conf.py new file mode 100644 index 0000000..61e6ee3 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_conf.py @@ -0,0 +1,38 @@ +# eggbot-conf.py +# Part of the EggBot driver for Inkscape +# Version 2.6.0, dated August 31, 2015. +# +# https://github.com/evil-mad/EggBot/ +# +# "Change numbers here, not there." :) + + + +# Page size values typically do not need to be changed. They primarily affect viewpoint and centering. + +N_PAGE_HEIGHT = 800 # Default Inkscape page height (each unit equiv. to one pixel/step) +N_PAGE_WIDTH = 3200 # Default Inkscape page width (each unit equiv. to one pixel/step) + + +''' +Motor resolution: The "standard" setup for brand-name EggBot machines (at least through 2015) has been 3200 steps per revolution. + +Early (clear-chassis) models had 400 step/rev motors with 8X microstepping drivers, and more recent versions ("white-chassis" EggBot 2.0, Deluxe EggBot, Ostrich EggBot, and EggBot Pro) have all used 200 step/rev motors with 16X microstepping drivers (EBB 2.0). + +The STEP SCALING FACTOR below can be used to work with motor-driver combinations that give a different overall number of steps per revolution-- for example 1600 (200 step/rev motors with 8X drivers) or 6400 (400 step/rev motors with 16X drivers) for "corner cases" and unofficial builds. + + +For 1600 steps/rev, use: + STEP_SCALE = 4 + +For NORMAL USE, with overall 3200 steps/rev, use the default value: + STEP_SCALE = 2 + +For 6400 steps/rev, use: + STEP_SCALE = 1 + +Other _integer_ scaling values can be used as well, with similar scaling. + +''' + +STEP_SCALE = 2 diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_conf.pyc b/Source/Inkscape/EggBotControl.Original/eggbot_conf.pyc new file mode 100644 index 0000000..4db0734 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_conf.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_hatch.inx b/Source/Inkscape/EggBotControl.Original/eggbot_hatch.inx new file mode 100644 index 0000000..9e432af --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_hatch.inx @@ -0,0 +1,72 @@ + + + <_name>Hatch fill + command.eggbot.contributed.eggbot_hatch.revb2 + org.inkscape.output.svg.inkscape + eggbot_hatch.py + inkex.py + simplepath.py + simpletransform.py + simplestyle.py + cubicsuperpath.py + cspsubdiv.py + bezmisc.py + + + + <_param name="Header" type="description" xml:space="preserve"> +This extension fills each closed +figure in your drawing with straight +back and forth hatch lines. If one +or more figures are selected, then +only those figures will be filled. +Hatched figures will be grouped with +their fills. + + + + 90 + 6.0 + 0 + 20.0 + false + + + + <_param name="aboutpage" type="description" xml:space="preserve"> +For smoothly flowing, continuous line fills, +use the Path Effect Editor's "Hatches (rough)" +effect and the EggBot extension "Preset hatch +for fills...". (This extension is not +controlled by the "Preset hatch for fills..." +extension.) + +Hatch line angles are measured from +horizontal: 0 is horizontal and 90 is +vertical. + +Hatch spacing is the distance between hatch +lines measured in units of motor steps. + +Use the hatch and gap length to prevent +generation of very short hatch lines or short +gaps in hatch lines. + +The Tolerance parameter affects how precisely +the hatches try to fill the input paths. It can +be adjusted as low as 0.1, where lower values +increase precision. + + + + + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_hatch.py b/Source/Inkscape/EggBotControl.Original/eggbot_hatch.py new file mode 100644 index 0000000..27c4990 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_hatch.py @@ -0,0 +1,1122 @@ +#!/usr/bin/env python + +# eggbot_hatch.py +# +# Generate hatch fills for the closed paths (polygons) in the currently +# selected document elements. If no elements are selected, then all the +# polygons throughout the document are hatched. The fill rule is an odd/even +# rule: odd numbered intersections (1, 3, 5, etc.) are a hatch line entering +# a polygon while even numbered intersections (2, 4, 6, etc.) are the same +# hatch line exiting the polygon. +# +# This extension first decomposes the selected , , , +# , , , and elements into individual +# moveto and lineto coordinates using the same procedure that eggbot.py uses +# for plotting. These coordinates are then used to build vertex lists. +# Only the vertex lists corresponding to polygons (closed paths) are +# kept. Note that a single graphical element may be composed of several +# subpaths, each subpath potentially a polygon. +# +# Once the lists of all the vertices are built, potential hatch lines are +# "projected" through the bounding box containing all of the vertices. +# For each potential hatch line, all intersections with all the polygon +# edges are determined. These intersections are stored as decimal fractions +# indicating where along the length of the hatch line the intersection +# occurs. These values will always be in the range [0, 1]. A value of 0 +# indicates that the intersection is at the start of the hatch line, a value +# of 0.5 midway, and a value of 1 at the end of the hatch line. +# +# For a given hatch line, all the fractional values are sorted and any +# duplicates removed. Duplicates occur, for instance, when the hatch +# line passes through a polygon vertex and thus intersects two edges +# segments of the polygon: the end of one edge and the start of +# another. +# +# Once sorted and duplicates removed, an odd/even rule is applied to +# determine which segments of the potential hatch line are within +# polygons. These segments found to be within polygons are then saved +# and become the hatch fill lines which will be drawn. +# +# With each saved hatch fill line, information about which SVG graphical +# element it is within is saved. This way, the hatch fill lines can +# later be grouped with the element they are associated with. This makes +# it possible to manipulate the two -- graphical element and hatch lines -- +# as a single object within Inkscape. +# +# Note: we also save the transformation matrix for each graphical element. +# That way, when we group the hatch fills with the element they are +# filling, we can invert the transformation. That is, in order to compute +# the hatch fills, we first have had apply ALL applicable transforms to +# all the graphical elements. We need to do that so that we know where in +# the drawing each of the graphical elements are relative to one another. +# However, this means that the hatch lines have been computed in a setting +# where no further transforms are needed. If we then put these hatch lines +# into the same groups as the elements being hatched in the ORIGINAL +# drawing, then the hatch lines will have transforms applied again. So, +# once we compute the hatch lines, we need to invert the transforms of +# the group they will be placed in and apply this inverse transform to the +# hatch lines. Hence the need to save the transform matrix for every +# graphical element. + +# Written by Daniel C. Newman for the Eggbot Project +# dan dot newman at mtbaldy dot us +# Last updated 28 November 2010 +# 15 October 2010 + +# Updated by Windell H. Oskay, 6/14/2012 +# Added tolerance parameter + +# Update by Daniel C. Newman, 6/20/2012 +# Add min span/gap width + +# Updated by Windell H. Oskay, 1/8/2016 +# Added live preview and correct issue with nonzero min gap +# https://github.com/evil-mad/EggBot/issues/32 + + +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import inkex +import simplepath +import simpletransform +import simplestyle +import cubicsuperpath +import cspsubdiv +import bezmisc +import math + +N_PAGE_WIDTH = 3200 +N_PAGE_HEIGHT = 800 + +''' +Geometry 101: Determing if two lines intersect + +A line L is defined by two points in space P1 and P2. Any point P on the +line L satisfies + + P = P1 + s (P2 - P1) + +for some value of the real number s in the range (-infinity, infinity). +If we confine s to the range [0, 1] then we've described the line segment +with end points P1 and P2. + +Consider now the line La defined by the points P1 and P2, and the line Lb +defined by the points P3 and P4. Any points Pa and Pb on the lines La and +Lb therefore satisfy + + Pa = P1 + sa (P2 - P1) + Pb = P3 + sb (P4 - P3) + +for some values of the real numbers sa and sb. To see if these two lines +La and Lb intersect, we wish to see if there are finite values sa and sb +for which + + Pa = Pb + +Or, equivalently, we ask if there exists values of sa and sb for which +the equation + + P1 + sa (P2 - P1) = P3 + sb (P4 - P3) + +holds. If we confine ourselves to a two-dimensional plane, and take + + P1 = (x1, y1) + P2 = (x2, y2) + P3 = (x3, y3) + P4 = (x4, y4) + +we then find that we have two equations in two unknowns, sa and sb, + + x1 + sa ( x2 - x1 ) = x3 + sb ( x4 - x3 ) + y1 + sa ( y2 - y1 ) = y3 + sb ( y4 - y3 ) + +Solving these two equations for sa and sb yields, + + sa = [ ( y1 - y3 ) ( x4 - x3 ) - ( y4 - y3 ) ( x1 - x3 ) ] / d + sb = [ ( y1 - y3 ) ( x2 - x1 ) - ( y2 - y1 ) ( x1 - x3 ) ] / d + +where the denominator, d, is given by + + d = ( y4 - y3 ) ( x2 - x1 ) - ( y2 - y1 ) ( x4 - x3 ) + +Substituting these back for the point (x, y) of intersection gives + + x = x1 + sa ( x2 - x1 ) + y = y1 + sa ( y2 - y1 ) + +Note that + +1. The lines are parallel when d = 0 +2. The lines are coincident d = 0 and the numerators for sa & sb are zero +3. For line segments, sa and sb are in the range [0, 1]; any value outside + that range indicates that the line segments do not intersect. +''' + +def intersect( P1, P2, P3, P4 ): + + ''' + Determine if two line segments defined by the four points P1 & P2 and + P3 & P4 intersect. If they do intersect, then return the fractional + point of intersection "sa" along the first line at which the + intersection occurs. + ''' + + # Precompute these values -- note that we're basically shifting from + # + # P = P1 + s (P2 - P1) + # + # to + # + # P = P1 + s D + # + # where D is a direction vector. The solution remains the same of + # course. We'll just be computing D once for each line rather than + # computing it a couple of times. + + D21x = P2[0] - P1[0] + D21y = P2[1] - P1[1] + D43x = P4[0] - P3[0] + D43y = P4[1] - P3[1] + + # Denominator + d = D21x * D43y - D21y * D43x + + # Return now if the denominator is zero + if d == 0: + return float( -1 ) + + # For our purposes, the first line segment given + # by P1 & P2 is the LONG hatch line running through + # the entire drawing. And, P3 & P4 describe the + # usually much shorter line segment from a polygon. + # As such, we compute sb first as it's more likely + # to indicate "no intersection". That is, sa is + # more likely to indicate an intersection with a + # much a long line containing P3 & P4. + + nb = ( P1[1] - P3[1] ) * D21x - ( P1[0] - P3[0] ) * D21y + + # Could first check if abs(nb) > abs(d) or if + # the signs differ. + sb = float( nb ) / float( d ) + if ( sb < 0 ) or ( sb > 1 ): + return float( -1 ) + + na = ( P1[1] - P3[1] ) * D43x - ( P1[0] - P3[0] ) * D43y + sa = float( na ) / float( d ) + if ( sa < 0 ) or ( sa > 1 ): + return float( -1 ) + + return sa + +def interstices( P1, P2, paths, hatches, minGap=0.00001 ): + + ''' + For the line L defined by the points P1 & P2, determine the segments + of L which lie within the polygons described by the paths stored in + "paths" + + P1 -- (x,y) coordinate [list] + P2 -- (x,y) coordinate [list] + paths -- Dictionary of all the paths to check for intersections + + When an intersection of the line L is found with a polygon edge, then + the fractional distance along the line L is saved along with the + lxml.etree node which contained the intersecting polygon edge. This + fractional distance is always in the range [0, 1]. + + Once all polygons have been checked, the list of fractional distances + corresponding to intersections is sorted and any duplicates removed. + It is then assumed that the first intersection is the line L entering + a polygon; the second intersection the line leaving the polygon. This + line segment defined by the first and second intersection points is + thus a hatch fill line we sought to generate. In general, our hatch + fills become the line segments described by intersection i and i+1 + with i an odd value (1, 3, 5, ...). Since we know the lxml.etree node + corresponding to each intersection, we can then correlate the hatch + fill lines to the graphical elements in the original SVG document. + This enables us to group hatch lines with the elements being hatched. + + The hatch line segments are returned by populating a dictionary. + The dictionary is keyed off of the lxml.etree node pointer. Each + dictionary value is a list of 4-tuples, + + (x1, y1, x2, y2) + + where (x1, y1) and (x2, y2) are the (x,y) coordinates of the line + segment's starting and ending points. + ''' + + sa = [] + + # P1 & P2 is the hatch line + # P3 & P4 is the polygon edge to check + for path in paths: + for subpath in paths[path]: + P3 = subpath[0] + for P4 in subpath[1:]: + s = intersect( P1, P2, P3, P4 ) + if ( s >= 0.0 ) and ( s <= 1.0 ): + # Save this intersection point along the hatch line + sa.append( ( s, path ) ) + P3 = P4 + + # Return now if there were no intersections + if len( sa ) == 0: + return None + + # Sort the intersections + sa.sort() + + # Remove duplicates intersections. A common case where these arise + # is when the hatch line passes through a vertex where one line segment + # ends and the next one begins. + + # Having had sorted the data, it's trivial to just scan through + # removing duplicates as we go and then truncating the array + n = len( sa ) + ilast = i = 1 + last = sa[0] + while i < n: + if abs( sa[i][0] - last[0] ) > 0.00001: + sa[ilast] = last = sa[i] + ilast += 1 + i += 1 + sa = sa[:ilast] + if len( sa ) < 2: + return + + if minGap <= 0.00001: + minGap = 0.00001 + + # Now, entries with even valued indices into sa[] are where we start + # a hatch line and odd valued indices where we end the hatch line. + + last_sa = None + i = 0 + while i < ( len( sa ) - 1 ): + #for i in range( 0, len( sa ) - 1, 2 ): + + # Mind the gap + if abs( sa[i][0] - sa[i+1][0] ) > minGap: + + # This segment has a (relative) length which exceeds minGap + + if ( last_sa is None ) or ( abs( sa[i][0] - last_sa[1][0] ) > minGap ): + + # And the gap between this segment and the prior segment + # exceeds a (relative) length of minGap + + if not hatches.has_key( sa[i][1] ): + hatches[sa[i][1]] = [] + + x1 = P1[0] + sa[i][0] * ( P2[0] - P1[0] ) + y1 = P1[1] + sa[i][0] * ( P2[1] - P1[1] ) + x2 = P1[0] + sa[i+1][0] * ( P2[0] - P1[0] ) + y2 = P1[1] + sa[i+1][0] * ( P2[1] - P1[1] ) + + hatches[sa[i][1]].append( [[x1, y1], [x2, y2]] ) + + # Note we should not need to do the has_key() test, but let's + # it anyway + elif hatches.has_key( last_sa[0][1] ): + + # The gap between this segment of the hatch line and the prior + # segment is so small that we should join the two so as to + # prevent creating a gap of relative length <= minGap + + # Replace the endpoint of the prior hatch line with the endpoint + # of this hatch line + + x2 = P1[0] + sa[i+1][0] * ( P2[0] - P1[0] ) + y2 = P1[1] + sa[i+1][0] * ( P2[1] - P1[1] ) + hatches[last_sa[0][1]][-1][1] = [x2, y2] + + # Remember the relative start and end of this hatch segment + last_sa = [ sa[i], sa[i+1] ] + + i = i + 2 + + else: + i = i + 2 # Skip this hatch segment, but note that we must skip the segment entirely, + # not just skip its beginning point + + # Ignore cases where the prior segment was short, this segment was + # short, and the gap between them was short but we might just want + # to combine them into one long segment. That's indeed a possible + # choice, but so may be the choice of dropping them silently in the + # hatch segment wastebasket. + +def inverseTransform ( tran ): + ''' + An SVG transform matrix looks like + + [ a c e ] + [ b d f ] + [ 0 0 1 ] + + And it's inverse is + + [ d -c cf - de ] + [ -b a be - af ] * ( ad - bc ) ** -1 + [ 0 0 1 ] + + And, no reasonable 2d coordinate transform will have + the products ad and bc equal. + + SVG represents the transform matrix column by column as + matrix(a b c d e f) while Inkscape extensions store the + transform matrix as + + [[a, c, e], [b, d, f]] + + To invert the transform stored Inskcape style, we wish to + produce + + [[d/D, -c/D, (cf - de)/D], [-b/D, a/D, (be-af)/D]] + + where + + D = 1 / (ad - bc) + ''' + + D = tran[0][0] * tran[1][1] - tran[1][0] * tran[0][1] + if D == 0: + return None + + return [[tran[1][1]/D, -tran[0][1]/D, + (tran[0][1]*tran[1][2] - tran[1][1]*tran[0][2])/D], + [-tran[1][0]/D, tran[0][0]/D, + (tran[1][0]*tran[0][2] - tran[0][0]*tran[1][2])/D]] + +def parseLengthWithUnits( str ): + + ''' + Parse an SVG value which may or may not have units attached + This version is greatly simplified in that it only allows: no units, + units of px, and units of %. Everything else, it returns None for. + There is a more general routine to consider in scour.py if more + generality is ever needed. + ''' + + u = 'px' + s = str.strip() + if s[-2:] == 'px': + s = s[:-2] + elif s[-1:] == '%': + u = '%' + s = s[:-1] + + try: + v = float( s ) + except: + return None, None + + return v, u + +# Lifted with impunity from eggbot.py + +def subdivideCubicPath( sp, flat, i=1 ): + + """ + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv() rewritten + to avoid recurrence. + """ + + while True: + while True: + if i >= len( sp ): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = ( p0, p1, p2, p3 ) + + if cspsubdiv.maxdist( b ) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt( b, 0.5 ) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +def distanceSquared( P1, P2 ): + + ''' + Pythagorean distance formula WITHOUT the square root. Since + we just want to know if the distance is less than some fixed + fudge factor, we can just square the fudge factor once and run + with it rather than compute square roots over and over. + ''' + + dx = P2[0] - P1[0] + dy = P2[1] - P1[1] + + return ( dx * dx + dy * dy ) + +class Eggbot_Hatch( inkex.Effect ): + + def __init__( self ): + + inkex.Effect.__init__( self ) + + self.xmin, self.ymin = ( float( 0 ), float( 0 ) ) + self.xmax, self.ymax = ( float( 0 ), float( 0 ) ) + self.paths = {} + self.grid = [] + self.hatches = {} + self.transforms = {} + self.minGap = float( 0 ) + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + self.docWidth = float( N_PAGE_WIDTH ) + self.docHeight = float( N_PAGE_HEIGHT ) + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + self.OptionParser.add_option( + "--crossHatch", action="store", dest="crossHatch", + type="inkbool", default=False, + help="Generate a cross hatch pattern" ) + self.OptionParser.add_option( + "--hatchAngle", action="store", type="float", + dest="hatchAngle", default=90.0, + help="Angle of inclination for hatch lines" ) + self.OptionParser.add_option( + "--hatchSpacing", action="store", type="float", + dest="hatchSpacing", default=10.0, + help="Spacing between hatch lines" ) + self.OptionParser.add_option( + "--tolerance", action="store", type="float", + dest="tolerance", default=20.0, + help="Allowed deviation from original paths" ) + self.OptionParser.add_option( + "--minGap", action="store", type="float", + dest="minGap", default=5.0, + help="Minimum length of hatch segments and gaps" ) + self.OptionParser.add_option( "--tab", #NOTE: value is not used. + action="store", type="string", dest="tab", default="splash", + help="The active tab when Apply was pressed" ) + + def getLength( self, name, default ): + + ''' + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + ''' + + str = self.document.getroot().get( name ) + if str: + v, u = parseLengthWithUnits( str ) + if not v: + # Couldn't parse the value + return None + elif ( u == '' ) or ( u == 'px' ): + return v + elif u == '%': + return float( default ) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float( default ) + + def getDocProps( self ): + + ''' + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + ''' + + self.docHeight = self.getLength( 'height', N_PAGE_HEIGHT ) + self.docWidth = self.getLength( 'width', N_PAGE_WIDTH ) + if ( self.docHeight == None ) or ( self.docWidth == None ): + return False + else: + return True + + def handleViewBox( self ): + + ''' + Set up the document-wide transform in the event that the document has an SVG viewbox + ''' + + if self.getDocProps(): + viewbox = self.document.getroot().get( 'viewBox' ) + if viewbox: + vinfo = viewbox.strip().replace( ',', ' ' ).split( ' ' ) + if ( vinfo[2] != 0 ) and ( vinfo[3] != 0 ): + sx = self.docWidth / float( vinfo[2] ) + sy = self.docHeight / float( vinfo[3] ) + self.docTransform = simpletransform.parseTransform( 'scale(%f,%f)' % (sx, sy) ) + + def addPathVertices( self, path, node=None, transform=None ): + + ''' + Decompose the path data from an SVG element into individual + subpaths, each starting with an absolute move-to (x, y) + coordinate followed by one or more absolute line-to (x, y) + coordinates. Each subpath is stored as a list of (x, y) + coordinates, with the first entry understood to be a + move-to coordinate and the rest line-to coordinates. A list + is then made of all the subpath lists and then stored in the + self.paths dictionary using the path's lxml.etree node pointer + as the dictionary key. + ''' + + if ( not path ) or ( len( path ) == 0 ): + return + + # parsePath() may raise an exception. This is okay + sp = simplepath.parsePath( path ) + if ( not sp ) or ( len( sp ) == 0 ): + return + + # Get a cubic super duper path + p = cubicsuperpath.CubicSuperPath( sp ) + if ( not p ) or ( len( p ) == 0 ): + return + + # Apply any transformation + if transform != None: + simpletransform.applyTransformToPath( transform, p ) + + # Now traverse the simplified path + subpaths = [] + subpath_vertices = [] + for sp in p: + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + if len( subpath_vertices ): + if distanceSquared( subpath_vertices[0], subpath_vertices[-1] ) < 1: + # Keep the prior subpath: it appears to be a closed path + subpaths.append( subpath_vertices ) + subpath_vertices = [] + subdivideCubicPath( sp, float( self.options.tolerance / 100 ) ) + for csp in sp: + # Add this vertex to the list of vetices + subpath_vertices.append( csp[1] ) + + # Handle final subpath + if len( subpath_vertices ): + if distanceSquared( subpath_vertices[0], subpath_vertices[-1] ) < 1: + # Path appears to be closed so let's keep it + subpaths.append( subpath_vertices ) + + # Empty path? + if len( subpaths ) == 0: + return + + # And add this path to our dictionary of paths + self.paths[node] = subpaths + + # And save the transform for this element in a dictionary keyed + # by the element's lxml node pointer + self.transforms[node] = transform + + def getBoundingBox( self ): + + ''' + Determine the bounding box for our collection of polygons + ''' + + self.xmin, self.xmax = float( 1.0E70 ), float( -1.0E70 ) + self.ymin, self.ymax = float( 1.0E70 ), float( -1.0E70 ) + + for path in self.paths: + for subpath in self.paths[path]: + for vertex in subpath: + if vertex[0] < self.xmin: + self.xmin = vertex[0] + elif vertex[0] > self.xmax: + self.xmax = vertex[0] + if vertex[1] < self.ymin: + self.ymin = vertex[1] + elif vertex[1] > self.ymax: + self.ymax = vertex[1] + + def recursivelyTraverseSvg( self, aNodeList, + matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible' ): + + ''' + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , + + All other SVG elements trigger an error (including ) + ''' + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + # first apply the current matrix transform to this node's tranform + matNew = simpletransform.composeTransform( matCurrent, + simpletransform.parseTransform( node.get( "transform" ) ) ) + + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + self.recursivelyTraverseSvg( node, matNew, parent_visibility=v ) + + elif node.tag == inkex.addNS( 'use', 'svg' ) or node.tag == 'use': + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get( inkex.addNS( 'href', 'xlink' ) ) + if not refid: + pass + + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath( path ) + if refnode: + x = float( node.get( 'x', '0' ) ) + y = float( node.get( 'y', '0' ) ) + # Note: the transform has already been applied + if ( x != 0 ) or ( y != 0 ): + matNew2 = composeTransform( matNew, parseTransform( 'translate(%f,%f)' % (x,y) ) ) + else: + matNew2 = matNew + v = node.get( 'visibility', v ) + self.recursivelyTraverseSvg( refnode, matNew2, parent_visibility=v ) + + elif node.tag == inkex.addNS( 'path', 'svg' ): + + path_data = node.get( 'd') + if path_data: + self.addPathVertices( path_data, node, matNew ) + + elif node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float( node.get( 'x' ) ) + y = float( node.get( 'y' ) ) + if ( not x ) or ( not y ): + pass + w = float( node.get( 'width', '0' ) ) + h = float( node.get( 'height', '0' ) ) + a = [] + a.append( ['M ', [x, y]] ) + a.append( [' l ', [w, 0]] ) + a.append( [' l ', [0, h]] ) + a.append( [' l ', [-w, 0]] ) + a.append( [' Z', []] ) + self.addPathVertices( simplepath.formatPath( a ), node, matNew ) + + elif node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + # Convert + # + # + + x1 = float( node.get( 'x1' ) ) + y1 = float( node.get( 'y1' ) ) + x2 = float( node.get( 'x2' ) ) + y2 = float( node.get( 'y2' ) ) + if ( not x1 ) or ( not y1 ) or ( not x2 ) or ( not y2 ): + pass + a = [] + a.append( ['M ', [x1, y1]] ) + a.append( [' L ', [x2, y2]] ) + self.addPathVertices( simplepath.formatPath( a ), node, matNew ) + + elif node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + self.addPathVertices( d, node, matNew ) + + elif node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + d += " Z" + self.addPathVertices( d, node, matNew ) + + elif node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse' or \ + node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + rx = float( node.get( 'rx', '0' ) ) + ry = float( node.get( 'ry', '0' ) ) + else: + rx = float( node.get( 'r', '0' ) ) + ry = rx + if rx == 0 or ry == 0: + pass + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % ( x1, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f ' % ( x2, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f' % ( x1, cy ) + self.addPathVertices( d, node, matNew ) + + elif node.tag == inkex.addNS( 'pattern', 'svg' ) or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS( 'metadata', 'svg' ) or node.tag == 'metadata': + + pass + + elif node.tag == inkex.addNS( 'defs', 'svg' ) or node.tag == 'defs': + + pass + + elif node.tag == inkex.addNS( 'namedview', 'sodipodi' ) or node.tag == 'namedview': + + pass + + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + + pass + + elif node.tag == inkex.addNS( 'text', 'svg' ) or node.tag == 'text': + + inkex.errormsg( 'Warning: unable to draw text, please convert it to a path first.' ) + + pass + + elif not isinstance( node.tag, basestring ): + + pass + + else: + + inkex.errormsg( 'Warning: unable to draw object <%s>, please convert it to a path first.' % node.tag ) + pass + + def joinFillsWithNode ( self, node, stroke_width, path ): + + ''' + Generate a SVG element containing the path data "path". + Then put this new element into a with the supplied + node. This means making a new element and moving node + under it with the new as a sibling element. + ''' + + if ( not path ) or ( len( path ) == 0 ): + return + + # Make a new SVG element whose parent is the parent of node + parent = node.getparent() + #was: if not parent: + if parent is None: + parent = self.document.getroot() + g = inkex.etree.SubElement( parent, inkex.addNS( 'g', 'svg' ) ) + + # Move node to be a child of this new element + g.append( node ) + + # Now make a element which contains the hatches & is a child + # of the new element + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': '%f' % stroke_width} + line_attribs = { 'style':simplestyle.formatStyle( style ), 'd': path } + tran = node.get( 'transform' ) + if ( tran != None ) and ( tran != '' ): + line_attribs['transform'] = tran + inkex.etree.SubElement( g, inkex.addNS( 'path', 'svg' ), line_attribs ) + + def makeHatchGrid( self, angle, spacing, init=True ): + + ''' + Build a grid of hatch lines which encompasses the entire bounding + box of the graphical elements we are to hatch. + + 1. Figure out the bounding box for all of the graphical elements + 2. Pick a rectangle larger than that bounding box so that we can + later rotate the rectangle and still have it cover the bounding + box of the graphical elements. + 3. Center the rectangle of 2 on the origin (0, 0). + 4. Build the hatch line grid in this rectangle. + 5. Rotate the rectangle by the hatch angle. + 6. Translate the center of the rotated rectangle, (0, 0), to be + the center of the bounding box for the graphical elements. + 7. We now have a grid of hatch lines which overlay the graphical + elements and can now be intersected with those graphical elements. + ''' + + # If this is the first call, do some one time initializations + # When generating cross hatches, we may be called more than once + if init: + self.getBoundingBox() + self.grid = [] + + # Determine the width and height of the bounding box containing + # all the polygons to be hatched + w = self.xmax - self.xmin + h = self.ymax - self.ymin + + # Nice thing about rectangles is that the diameter of the circle + # encompassing them is the length the rectangle's diagonal... + r = math.sqrt ( w * w + h * h ) / 2.0 + + # Length of a hatch line will be 2r + # We wish to convert the number of pixels considered insignificant + # to a unitless, fractional length of a hatch line. The length of + # a hatch line is 2r pixels. So, + self.minGap = self.options.minGap / ( 2.0 * r ) + + # Now generate hatch lines within the square + # centered at (0, 0) and with side length at least d + + # While we could generate these lines running back and forth, + # that makes for weird behavior later when applying odd/even + # rules AND there are nested polygons. Instead, when we + # generate the SVG elements with the hatch line + # segments, we can do the back and forth weaving. + + # Rotation information + ca = math.cos( math.radians( 90 - angle ) ) + sa = math.sin( math.radians( 90 - angle ) ) + + # Translation information + cx = self.xmin + ( w / 2 ) + cy = self.ymin + ( h / 2 ) + + # Since the spacing may be fractional (e.g., 6.5), we + # don't try to use range() or other integer iterator + spacing = float( abs( spacing ) ) + i = -r + while i <= r: + # Line starts at (i, -r) and goes to (i, +r) + x1 = cx + ( i * ca ) + ( r * sa ) # i * ca - (-r) * sa + y1 = cy + ( i * sa ) - ( r * ca ) # i * sa + (-r) * ca + x2 = cx + ( i * ca ) - ( r * sa ) # i * ca - (+r) * sa + y2 = cy + ( i * sa ) + ( r * ca ) # i * sa + (+r) * ca + i += spacing + # Remove any potential hatch lines which are entirely + # outside of the bounding box + if (( x1 < self.xmin ) and ( x2 < self.xmin )) or \ + (( x1 > self.xmax ) and ( x2 > self.xmax )): + continue + if (( y1 < self.ymin ) and ( y2 < self.ymin )) or \ + (( y1 > self.ymax ) and ( y2 > self.ymax )): + continue + self.grid.append( ( x1, y1, x2, y2 ) ) + + def effect( self ): + + # Viewbox handling + self.handleViewBox() + + # Build a list of the vertices for the document's graphical elements + if self.options.ids: + # Traverse the selected objects + for id in self.options.ids: + self.recursivelyTraverseSvg( [self.selected[id]], self.docTransform ) + else: + # Traverse the entire document + self.recursivelyTraverseSvg( self.document.getroot(), self.docTransform ) + + # Build a grid of possible hatch lines + self.makeHatchGrid( float( self.options.hatchAngle ), + float( self.options.hatchSpacing ), True ) + if self.options.crossHatch: + self.makeHatchGrid( float( self.options.hatchAngle + 90.0 ), + float( self.options.hatchSpacing ), False ) + + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( (h[0], h[1]), (h[2], h[3]), self.paths, self.hatches, self.minGap ) + + # Target stroke width will be (doc width + doc height) / 2 / 1000 + # stroke_width_target = ( self.docHeight + self.docWidth ) / 2000 + stroke_width_target = 1 + + # Each hatch line stroke will be within an SVG object which may + # be subject to transforms. So, on an object by object basis, + # we need to transform our target width to a width suitable + # for that object (so that after the object and its hatches are + # transformed, the result has the desired width). + + # To aid in the process, we use a diagonal line segment of length + # stroke_width_target. We then run this segment through an object's + # inverse transform and see what the resulting length of the inversely + # transformed segment is. We could, alternatively, look at the + # x and y scaling factors in the transform and average them. + s = stroke_width_target / math.sqrt( 2 ) + + # Now, dump the hatch fills sorted by which document element + # they correspond to. This is made easy by the fact that we + # saved the information and used each element's lxml.etree node + # pointer as the dictionary key under which to save the hatch + # fills for that node. + + for key in self.hatches: + path = '' + direction = True + if self.transforms.has_key( key ): + transform = inverseTransform( self.transforms[key] ) + # Determine the scaled stroke width for a hatch line + # We produce a line segment of unit length, transform + # its endpoints and then determine the length of the + # resulting line segment. + pt1 = [0, 0] + pt2 = [s, s] + simpletransform.applyTransformToPoint( transform, pt1 ) + simpletransform.applyTransformToPoint( transform, pt2 ) + dx = pt2[0] - pt1[0] + dy = pt2[1] - pt1[1] + stroke_width = math.sqrt( dx * dx + dy * dy ) + else: + transform = None + stroke_width = float( 1.0 ) + for segment in self.hatches[key]: + if len( segment ) < 2: + continue + pt1 = segment[0] + pt2 = segment[1] + # Okay, we're going to put these hatch lines into the same + # group as the element they hatch. That element is down + # some chain of SVG elements, some of which may have + # transforms attached. But, our hatch lines have been + # computed assuming that those transforms have already + # been applied (since we had to apply them so as to know + # where this element is on the page relative to other + # elements and their transforms). So, we need to invert + # the transforms for this element and then either apply + # that inverse transform here and now or set it in a + # transform attribute of the element. Having it + # set in the path element seems a bit counterintuitive + # after the fact (i.e., what's this tranform here for?). + # So, we compute the inverse transform and apply it here. + if transform != None: + simpletransform.applyTransformToPoint( transform, pt1 ) + simpletransform.applyTransformToPoint( transform, pt2 ) + # Now generate the path data for the + if direction: + # Go this direction + path += 'M %f,%f l %f,%f ' % \ + ( pt1[0], pt1[1], pt2[0] - pt1[0], pt2[1] - pt1[1] ) + else: + # Or go this direction + path += 'M %f,%f l %f,%f ' % \ + ( pt2[0], pt2[1], pt1[0] - pt2[0], pt1[1] - pt2[1] ) + direction = not direction + self.joinFillsWithNode( key, stroke_width, path[:-1] ) + + #inkex.errormsg("Elapsed CPU time was %f" % (time.clock()-self.t0)) + +if __name__ == '__main__': + + e = Eggbot_Hatch() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_maze.inx b/Source/Inkscape/EggBotControl.Original/eggbot_maze.inx new file mode 100644 index 0000000..7ae1d3b --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_maze.inx @@ -0,0 +1,26 @@ + + + <_name>Eggmazing + command.eggbot.contributed.eggmazing + org.inkscape.output.svg.inkscape + eggbot_maze.py + inkex.py + + + + + + + + + all + + + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_maze.py b/Source/Inkscape/EggBotControl.Original/eggbot_maze.py new file mode 100644 index 0000000..af76dfd --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_maze.py @@ -0,0 +1,671 @@ +#!/usr/bin/env python + +# Draw a cylindrical maze suitable for plotting with the Eggbot +# The maze itself is generated using a depth first search (DFS) + +# Written by Daniel C. Newman for the Eggbot Project +# Improvements and suggestions by W. Craig Trader +# 20 September 2010 + +# Update 26 April 2011 by Daniel C. Newman +# +# 1. Address Issue #40 +# The extension now draws the maze by columns, going down +# one column of cells and then up the next column. By using +# this technique, the impact of slippage is largely limited +# the the West and East ends of the maze not meeting. Otherwise, +# the maze will still look quite well aligned both locally and +# globally. Only very gross slippage will impact the local +# appearance of the maze. +# +# Note that this new drawing technique is nearly as fast as +# the prior method. The prior method has been preserved and +# can be selected by setting self.hpp = True. ("hpp" intended +# to mean "high plotting precision".) +# +# 2. Changed the page dimensions to use a height of 800 rather +# than 1000 pixels. +# +# 3. When drawing the solution layer, draw the ending cell last. +# Previously, the starting and ending cells were first drawn, +# and then the solution path itself. That caused the pen to +# move to the beginning, the end, and then back to the beginning +# again to start the solution path. Alternatively, the solution +# path might have been drawn from the end to the start. However, +# just drawing the ending cell last was easier code-wise. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import array +import random +import math +import inkex +import simplestyle + +# Initialize the psuedo random number generator +random.seed() + +PLOT_WIDTH = int( 3200 ) # Eggbot plot width in pixels +PLOT_HEIGHT = int( 800 ) # Eggbot plot height in pixels + +TARGET_WIDTH = int( 3200 ) # Desired plot width in pixels +TARGET_HEIGHT = int( 600 ) # Desired plot height in pixels + +# Add a SVG path element to the document +# We could do this just as easily as a polyline + +def draw_SVG_path( pts, c, t, parent ): + if ( pts is None ) or len( pts ) == 0: # Nothing to draw + return + if isinstance( pts, list ): + assert len( pts ) % 3 == 0, "len(pts) must be a multiple of three" + d = "%s %d,%d" % ( pts[0], pts[1], pts[2] ) + for i in range( 3, len( pts ), 3 ): + d += " %s %d,%d" % ( pts[i], pts[i+1], pts[i+2] ) + elif isinstance( pts, str ): + d = pts + else: + return + style = { 'stroke':c, 'stroke-width':str( t ), 'fill':'none' } + line_attribs = { 'style':simplestyle.formatStyle( style ),'d':d } + inkex.etree.SubElement( parent, inkex.addNS( 'path','svg' ), line_attribs ) + +# Add a SVG rect element to the document + +def draw_SVG_rect( x, y, w, h, c, t, fill, parent ): + style = { 'stroke':c, 'stroke-width':str( t ), 'fill':fill } + rect_attribs = { 'style':simplestyle.formatStyle( style ), + 'x':str( x ), 'y':str( y ), + 'width':str( w ), 'height':str( h ) } + inkex.etree.SubElement( parent, inkex.addNS( 'rect', 'svg' ), + rect_attribs ) + +class Maze( inkex.Effect ): + + # Each cell in the maze is represented using 9 bits: + # + # Visited -- When set, indicates that this cell has been visited during + # construction of the maze + # + # Border -- Four bits indicating which if any of this cell's walls are + # part of the maze's boundary (i.e., are unremovable walls) + # + # Walls -- Four bits indicating which if any of this cell's walls are + # still standing + # + # Visited Border Walls + # x x x x x x x x x + # W S E N W S E N + + _VISITED = 0x0100 + _NORTH = 0x0001 + _EAST = 0x0002 + _SOUTH = 0x0004 + _WEST = 0x0008 + + def __init__( self ): + + inkex.Effect.__init__( self ) + + self.OptionParser.add_option( + "--tab", action="store", type="string", + dest="tab", default="controls", + help="The active tab when Apply was pressed" ) + self.OptionParser.add_option( + "--mazeSize", action="store", type="string", dest="mazeSize", + default="MEDIUM", help="Difficulty of maze to build" ) + #self.OptionParser.add_option( + # "--hpp", action="store", type="inkbool", dest="hpp", default=False, + # help="Use a faster plotting technique that requires much better plotting precision" ) + #self.hpp = self.options.hpp + + self.hpp = False + + self.w = int( 0 ) + self.h = int( 0 ) + self.solved = int( 0 ) + self.start_x = int( 0 ) + self.start_y = int( 0 ) + self.finish_x = int( 0 ) + self.finish_y = int( 0 ) + self.solution_x = None + self.solution_y = None + self.cells = None + + # Drawing information + self.scale = float( 25.0 ) + self.last_point = None + self.path = '' + + def effect( self ): + + # These dimensions are chosen so as to maintain integral dimensions + # with a ratio of width to height of TARGET_WIDTH to TARGET_HEIGHT. + # Presently that's 3200 to 600 which leads to a ratio of 5 and 1/3. + + if self.options.mazeSize == 'SMALL': + self.w = int( 32 ) + self.h = int( 6 ) + elif self.options.mazeSize == 'MEDIUM': + self.w = int( 64 ) + self.h = int( 12 ) + elif self.options.mazeSize == 'LARGE': + self.w = int( 96 ) + self.h = int( 18 ) + else: + self.w = int( 128 ) + self.h = int( 24 ) + + # The large mazes tend to hit the recursion limit + limit = sys.getrecursionlimit() + if limit < ( 4 + self.w * self.h ): + sys.setrecursionlimit( 4 + self.w * self.h ) + + maze_size = self.w * self.h + self.finish_x = int( self.w - 1 ) + self.finish_y = int( self.h - 1 ) + self.solution_x = array.array( 'i', range( 0, maze_size ) ) + self.solution_y = array.array( 'i', range( 0, maze_size ) ) + self.cells = array.array( 'H', range( 0, maze_size ) ) + + # Remove any old maze + for node in self.document.xpath( '//svg:g[@inkscape:label="1 - Maze"]', namespaces=inkex.NSS ): + parent = node.getparent() + parent.remove( node ) + + # Remove any old solution + for node in self.document.xpath( '//svg:g[@inkscape:label="2 - Solution"]', namespaces=inkex.NSS ): + parent = node.getparent() + parent.remove( node ) + + # Remove any empty, default "Layer 1" + for node in self.document.xpath( '//svg:g[@id="layer1"]', namespaces=inkex.NSS ): + if not node.getchildren(): + parent = node.getparent() + parent.remove( node ) + + # Start a new maze + self.solved = 0 + self.start_x = random.randint( 0, self.w - 1 ) + self.finish_x = random.randint( 0, self.w - 1 ) + + # Initialize every cell with all four walls up + + for i in range( 0, maze_size ): + self.cells[i] = Maze._NORTH | Maze._EAST | Maze._SOUTH | Maze._WEST + + # Now set our borders -- borders being walls which cannot be removed. + # Since we are a maze on the surface of a cylinder we only have two + # edges and hence only two borders. We consider our two edges to run + # from WEST to EAST and to be at the NORTH and SOUTH. + + z = ( self.h - 1 ) * self.w + for x in range( 0, self.w ): + self.cells[x] |= Maze._NORTH << 4 + self.cells[x + z] |= Maze._SOUTH << 4 + + # Build the maze + self.handle_cell( 0, self.start_x, self.start_y ) + + # Now that the maze has been built, remove the appropriate walls + # associated with the start and finish points of the maze + + # Note: we have to remove these after building the maze. If we + # remove them first, then the lack of a border at the start (or + # finish) cell will allow the handle_cell() routine to wander + # outside of the maze. I.e., handle_cell() doesn't do boundary + # checking on the cell cell coordinates it generates. Instead, it + # relies upon the presence of borders to prevent it wandering + # outside the confines of the maze. + + self.remove_border( self.start_x, self.start_y, Maze._NORTH ) + self.remove_wall( self.start_x, self.start_y, Maze._NORTH ) + + self.remove_border( self.finish_x, self.finish_y, Maze._SOUTH ) + self.remove_wall( self.finish_x, self.finish_y, Maze._SOUTH ) + + # Now draw the maze + + # The following scaling and translations scale the maze's + # (width, height) to (TARGET_WIDTH, TARGET_HEIGHT), and translates + # the maze so that it centered within a document of dimensions + # (width, height) = (PLOT_WIDTH, PLOT_HEIGHT) + + # Note that each cell in the maze is drawn 2 x units wide by + # 2 y units high. A width and height of 2 was chosen for + # convenience and for allowing easy identification (as the integer 1) + # of the centerline along which to draw solution paths. It is the + # abstract units which are then mapped to the TARGET_WIDTH eggbot x + # pixels by TARGET_HEIGHT eggbot y pixels rectangle. + + scale_x = float( TARGET_WIDTH ) / float( 2 * self.w ) + scale_y = float( TARGET_HEIGHT ) / float( 2 * self.h ) + translate_x = float( PLOT_WIDTH - TARGET_WIDTH ) / 2.0 + translate_y = float( PLOT_HEIGHT - TARGET_HEIGHT ) / 2.0 + + # And the SVG transform is thus + t = 'translate(%f,%f)' % ( translate_x, translate_y ) + \ + ' scale(%f,%f)' % ( scale_x, scale_y ) + + # For scaling line thicknesses. We'll typically draw a line of + # thickness 1 but will need to make the SVG path have a thickness + # of 1 / scale so that after our transforms are applied, the + # resulting thickness is the 1 we wanted in the first place. + + if scale_x > scale_y: + self.scale = scale_x + else: + self.scale = scale_y + + self.last_point = None + self.path = '' + + if not self.hpp: + + # To draw the walls, we start at the left-most column of cells, draw down drawing + # the WEST and NORTH walls and then draw up drawing the EAST and SOUTH walls. + # By drawing in this back and forth fashion, we minimize the effect of slippage. + + for x in range( 0, self.w, 2 ): + self.draw_vertical( x ) + + else: + + # The drawing style of the "high plotting precision" / "faster plotting" mode + # is such that it minimizes the number of pen up / pen down operations + # but at the expense of requiring higher drawing precision. It's style + # of drawing works best when there is very minimal slippage of the egg + + # Draw the horizontal walls + + self.draw_horizontal_hpp( 0, Maze._NORTH ) + for y in range( 0, self.h - 1 ): + self.draw_horizontal_hpp( y, Maze._SOUTH ) + self.draw_horizontal_hpp( self.h - 1, Maze._SOUTH ) + + # Draw the vertical walls + + # Since this is a maze on the surface of a cylinder, we don't need + # to draw the vertical walls at the outer edges (x = 0 & x = w - 1) + + for x in range( 0, self.w ): + self.draw_vertical_hpp( x, Maze._EAST ) + + # Maze in layer "1 - Maze" + attribs = { + inkex.addNS( 'label', 'inkscape' ) : '1 - Maze', + inkex.addNS( 'groupmode', 'inkscape' ) : 'layer', + 'transform' : t } + maze_layer = inkex.etree.SubElement( self.document.getroot(), 'g', attribs ) + draw_SVG_path( self.path, "#000000", float( 1 / self.scale ), maze_layer ) + + # Now draw the solution in red in layer "2 - Solution" + + attribs = { + inkex.addNS( 'label', 'inkscape' ) : '2 - Solution', + inkex.addNS( 'groupmode', 'inkscape' ) : 'layer', + 'transform' : t } + maze_layer = inkex.etree.SubElement( self.document.getroot(), 'g', attribs ) + + # Mark the starting cell + + draw_SVG_rect( 0.25 + 2 * self.start_x, 0.25 + 2 * self.start_y, + 1.5, 1.5, "#ff0000", 0, "#ff0000", maze_layer ) + + # And now generate the solution path itself + + # To minimize the number of plotted paths (and hence pen up / pen + # down operations), we generate as few SVG paths as possible. + # However, for aesthetic reasons we stop the path and start a new + # one when it runs off the edge of the document. We could keep on + # drawing as the eggbot will handle that just fine. However, it + # doesn't look as good in Inkscape. So, we end the path and start + # a new one which is wrapped to the other edge of the document. + + pts = [] + end_path = False + i = 0 + while i < self.solved: + + x1 = self.solution_x[i] + y1 = self.solution_y[i] + + i += 1 + x2 = self.solution_x[i] + y2 = self.solution_y[i] + + if math.fabs( x1 - x2 ) > 1: + + # We wrapped horizontally... + if x1 > x2: + x2 = x1 + 1 + else: + x2 = x1 - 1 + end_path = True + + if i == 1: + pts.extend( [ 'M', 2 * x1 + 1, 2 * y1 + 1 ] ) + pts.extend( [ 'L', 2 * x2 + 1, 2 * y2 + 1 ] ) + + if not end_path: + continue + + x2 = self.solution_x[i] + y2 = self.solution_y[i] + pts.extend( [ 'M', 2 * x2 + 1, 2 * y2 + 1 ] ) + end_path = False + + # Put the solution path into the drawing + draw_SVG_path( pts, '#ff0000', float( 8 / self.scale ), maze_layer ) + + # Now mark the ending cell + draw_SVG_rect( 0.25 + 2*self.finish_x, 0.25 + 2 * self.finish_y, + 1.5, 1.5, "#ff0000", 0, "#ff0000", maze_layer ) + + # Restore the recursion limit + sys.setrecursionlimit( limit ) + + # Set some document properties + node = self.document.getroot() + node.set( 'width', '3200' ) + node.set( 'height', '800' ) + + # The following end up being ignored by Inkscape.... + node = self.getNamedView() + node.set( 'showborder', 'false' ) + node.set( inkex.addNS( 'cx', u'inkscape' ), '1600' ) + node.set( inkex.addNS( 'cy', u'inkscape' ), '500' ) + node.set( inkex.addNS( 'showpageshadow', u'inkscape' ), 'false' ) + + # Mark the cell at (x, y) as "visited" + def visit( self, x, y ): + self.cells[y * self.w + x] |= Maze._VISITED + + # Return a non-zero value if the cell at (x, y) has been visited + def is_visited( self, x, y ): + if self.cells[y * self.w + x] & Maze._VISITED: + return -1 + else: + return 0 + + # Return a non-zero value if the cell at (x, y) has a wall + # in the direction d + def is_wall( self, x, y, d ): + if self.cells[y * self.w + x] & d: + return -1 + else: + return 0 + + # Remove the wall in the direction d from the cell at (x, y) + def remove_wall( self, x, y, d ): + self.cells[y * self.w + x] &= ~d + + # Return a non-zero value if the cell at (x, y) has a border wall + # in the direction d + def is_border( self, x, y, d ): + if self.cells[y * self.w + x] & ( d << 4 ): + return -1 + else: + return 0 + + # Remove the border in the direction d from the cell at (x, y) + def remove_border( self, x, y, d ): + self.cells[y * self.w + x] &= ~( d << 4 ) + + # This is the DFS algorithm which builds the maze. We start at depth 0 + # at the starting cell (self.start_x, self.start_y). We then walk to a + # randomly selected neighboring cell which has not yet been visited (i.e., + # previously walked into). Each step of the walk is a recursive descent + # in depth. The solution to the maze comes about when we walk into the + # finish cell at (self.finish_x, self.finish_y). + # + # Each recursive descent finishes when the currently visited cell has no + # unvisited neighboring cells. + # + # Since we don't revisit previously visited cells, each cell is visited + # no more than once. As it turns out, each cell is visited, but that's a + # little harder to show. Net, net, each cell is visited exactly once. + + def handle_cell( self, depth, x, y ): + + # Mark the current cell as visited + self.visit( x, y ) + + # Save this cell's location in our solution trail / backtrace + if not self.solved: + + self.solution_x[depth] = x + self.solution_y[depth] = y + + if ( x == self.finish_x ) and ( y == self.finish_y ): + # Maze has been solved + self.solved = depth + + # Shuffle the four compass directions: this is the primary source + # of "randomness" in the generated maze. We need to visit each + # neighboring cell which has not yet been visited. If we always + # did that in the same order, then our mazes would look very regular. + # So, we shuffle the list of directions we try in order to find an + # unvisited neighbor. + + # HINT: TRY COMMENTING OUT THE shuffle() BELOW AND SEE FOR YOURSELF + + directions = [Maze._NORTH, Maze._SOUTH, Maze._EAST, Maze._WEST] + random.shuffle( directions ) + + # Now from the cell at (x, y), look to each of the four + # directions for unvisited neighboring cells + + for i in range( 0, 4 ): + + # If there is a border in direction[i], then don't try + # looking for a neighboring cell in that direction. We + # Use this check and borders to prevent generating invalid + # cell coordinates. + + if self.is_border( x, y, directions[i] ): + continue + + # Determine the cell coordinates of a neighboring cell + # NOTE: we trust the use of maze borders to prevent us + # from generating invalid cell coordinates + + if directions[i] == Maze._NORTH: + nx = x + ny = y - 1 + opposite_direction = Maze._SOUTH + + elif directions[i] == Maze._SOUTH: + nx = x + ny = y + 1 + opposite_direction = Maze._NORTH + + elif directions[i] == Maze._EAST: + nx = x + 1 + ny = y + opposite_direction = Maze._WEST + + else: + nx = x - 1 + ny = y + opposite_direction = Maze._EAST + + # Wrap in the horizontal dimension + if nx < 0: + nx += self.w + elif nx >= self.w: + nx -= self.w + + # See if this neighboring cell has been visited + if self.is_visited( nx, ny ): + # Neighbor has been visited already + continue + + # The neighboring cell has not been visited: remove the wall in + # the current cell leading to the neighbor. And, from the + # neighbor remove its wall leading to the current cell. + + self.remove_wall( x, y, directions[i] ) + self.remove_wall( nx, ny, opposite_direction ) + + # Now recur by "moving" to this unvisited neighboring cell + + self.handle_cell( depth + 1, nx, ny ) + + def draw_line( self, x1, y1, x2, y2 ): + + if self.last_point is not None: + if ( self.last_point[0] == x1 ) and ( self.last_point[1] == y1 ): + self.path += ' L %d,%d' % ( x2, y2 ) + self.last_point = [ x2, y2 ] + elif ( self.last_point[0] == x2 ) and ( self.last_point[1] == y2 ): + self.path += ' L %d,%d L %d,%d' % ( x1, y1, x2, y2 ) + # self.last_point unchanged + else: + self.path += ' M %d,%d L %d,%d' % ( x1, y1, x2, y2 ) + self.last_point = [ x2, y2 ] + else: + self.path = 'M %d,%d L %d,%d' % ( x1, y1, x2, y2 ) + self.last_point = [ x2, y2 ] + + def draw_wall( self, x, y, d, dir ): + + if dir > 0: + if d == Maze._NORTH: + self.draw_line( 2*(x+1), 2*y, 2*x, 2*y ) + elif d == Maze._WEST: + self.draw_line( 2*x, 2*y, 2*x, 2*(y+1) ) + elif d == Maze._SOUTH: + self.draw_line( 2*(x+1), 2*(y+1), 2*x, 2*(y+1) ) + else: # Mase._EAST + self.draw_line( 2*(x+1), 2*y, 2*(x+1), 2*(y+1) ) + else: + if d == Maze._NORTH: + self.draw_line( 2*x, 2*y, 2*(x+1), 2*y ) + elif d == Maze._WEST: + self.draw_line( 2*x, 2*(y+1), 2*x, 2*y ) + elif d == Maze._SOUTH: + self.draw_line( 2*x, 2*(y+1), 2*(x+1), 2*(y+1) ) + else: # Maze._EAST + self.draw_line( 2*(x+1), 2*(y+1), 2*(x+1), 2*y ) + + # Draw the vertical walls of the maze along the column of cells at + # horizonal positions + + def draw_vertical( self, x ): + + # Drawing moving downwards from north to south + + if self.is_wall( x, 0, Maze._NORTH ): + self.draw_wall( x, 0, Maze._NORTH, +1 ) + + for y in range( 0, self.h ): + if self.is_wall( x, y, Maze._WEST ): + self.draw_wall( x, y, Maze._WEST, +1 ) + if self.is_wall( x, y, Maze._SOUTH ): + self.draw_wall( x, y, Maze._SOUTH, +1 ) + + # Now, return drawing upwards moving from south to north + + x += 1 + if x >= self.w: + return + + for y in range( self.h - 1, -1, -1 ): + if self.is_wall( x, y, Maze._SOUTH ): + self.draw_wall( x, y, Maze._SOUTH, -1 ) + if self.is_wall( x, y, Maze._WEST ): + self.draw_wall( x, y, Maze._WEST, -1 ) + if self.is_wall( x, 0, Maze._NORTH ): + self.draw_wall( x, 0, Maze._NORTH, -1 ) + + # Draw the horizontal walls of the maze along the row of + # cells at "height" y: "high plotting precision" version + + def draw_horizontal_hpp(self, y, wall ): + + # Cater to Python 2.4 and earlier + # dy = 0 if wall == Maze._NORTH else 1 + if wall == Maze._NORTH: + dy = 0 + else: + dy = 1 + + tracing = False + for x in range( 0, self.w ): + + if self.is_wall( x, y, wall ): + if not tracing: + # Starting a new segment + segment = x + tracing = True + else: + if tracing: + # Reached the end of a segment + self.draw_line( 2 * segment, 2 * (y + dy), + 2 * x, 2 * (y + dy) ) + tracing = False + + if tracing: + # Draw the last wall segment + self.draw_line( 2 * segment, 2 * (y + dy), + 2 * self.w, 2 * (y + dy) ) + + + # Draw the vertical walls of the maze along the column of cells at + # horizonal position x: "high plotting precision" version + + def draw_vertical_hpp(self, x, wall ): + + # Cater to Python 2.4 and earlier + # dx = 0 if wall == Maze._WEST else 1 + if wall == Maze._WEST: + dx = 0 + else: + dx = 1 + + # We alternate the direction in which we draw each vertical wall. + # First, from North to South and then from South to North. This + # reduces pen travel on the Eggbot + + if x % 2 == 0: # North-South + y_start, y_finis, dy, offset = 0, self.h, 1, 0 + else: # South-North + y_start, y_finis, dy, offset = self.h - 1, -1, -1, 2 + + tracing = False + for y in range( y_start, y_finis, dy ): + assert 0 <= y and y < self.h, "y (%d) is out of range" % y + if self.is_wall( x, y, wall ): + if not tracing: + # Starting a new segment + segment = y + tracing = True + else: + if tracing: + # Hit the end of a segment + self.draw_line( 2 * ( x + dx ), 2 * segment + offset, + 2 * ( x + dx ), 2 * y + offset ) + tracing = False + + if tracing: + # complete the last wall segment + self.draw_line( 2 * ( x + dx ), 2 * segment + offset, + 2 * ( x + dx ), 2 * y_finis + offset ) + +if __name__ == '__main__': + e = Maze() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_pptb.inx b/Source/Inkscape/EggBotControl.Original/eggbot_pptb.inx new file mode 100644 index 0000000..d2b6e17 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_pptb.inx @@ -0,0 +1,45 @@ + + + <_name>Post process trace bitmap + command.eggbot.contributed.eggbot_pptb + org.inkscape.output.svg.inkscape + eggbot_pptb.py + inkex.py simplestyle.py + <_param name="Header" type="description" xml:space="preserve"> +This extension is intended for use after +running the Inkscape "Trace Bitmap" tool +of the "Path" menu + +Running Trace Bitmap: +1. Run the tool with the "Multiple scans" + selection of "Colors" or "Grays" +2. "Stack scans" should not be checked +3. "Remove background" may be checked + +Running this extension: +1. Will move each scanned color to a + separate Inkscape layer +2. Can optionally remove the original + bitmap image from the drawing +3. Can optionally turn off the colored + fills within each traced regions +4. Can optionally outline the traced + regions + + + true + true + true + + + all + + + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_pptb.py b/Source/Inkscape/EggBotControl.Original/eggbot_pptb.py new file mode 100644 index 0000000..b78725d --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_pptb.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python + +# Post Process a bitmap image traced with Inkscape's Trace Bitmap tool +# The output of Trace Bitmap is traversed and each is put into +# an Inkscape layer whose name is Eggbot friendly. Owing to how the +# Trace Bitmap tool operates in Inkscape 0.48, all the traced regions +# of a given "scanned" color are put into a single . This makes +# it easy to put all the traced regions of a single color into a single +# layer: just put each into its own layer. + +# Written by Daniel C. Newman ( dan dot newman at mtbaldy dot us ) +# 9 October 2010 + +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import inkex +import gettext +import simplestyle + +class EggBot_PostProcessTraceBitmap( inkex.Effect ): + + def __init__(self): + inkex.Effect.__init__( self ) + self.OptionParser.add_option( + "--outlineRegions", action="store", dest="outlineRegions", + type="inkbool", default=True, + help="Outline the regions with a stroked line of the same color as the region itself" ) + self.OptionParser.add_option( + "--fillRegions", action="store", dest="fillRegions", + type="inkbool", default=True, + help="Fill regions with color" ) + self.OptionParser.add_option( + "--removeImage", action="store", dest="removeImage", + type="inkbool", default=True, + help="Remove the traced bitmap image from the drawing" ) + + def effect(self): + + root = self.document.getroot() + + count = 0 + for path in self.document.xpath( '//svg:path', namespaces=inkex.NSS ): + + # Default settings for now + stroke, fill, color = ( 'none', 'none', 'unknown' ) + + # Get the paths style attribute + style = simplestyle.parseStyle( path.get( 'style', '' ) ) + # Obtain the fill color from the path's style attribute + if 'fill' in style: + color = style['fill'] + if self.options.fillRegions: + fill = color + if self.options.outlineRegions: + stroke = color + + # Now add or change the fill color in the path's style + style['fill'] = fill + + # Add or change the stroke behavior in the path's style + style['stroke'] = stroke + + # And change the style attribute for the path + path.set( 'style', simplestyle.formatStyle( style ) ) + + # Create a group element under the document root + layer = inkex.etree.SubElement( root, inkex.addNS( 'g', 'svg' ) ) + + # Add Inkscape layer attributes to this new group + count += 1 + layer.set( inkex.addNS('groupmode', 'inkscape' ), 'layer' ) + layer.set( inkex.addNS( 'label', 'inkscape' ), '%d - %s' % ( count, color ) ) + + # Now move this path from where it was to being a child + # of this new group/layer we just made + layer.append( path ) + + # Remove any image + # For color scans, Trace Bitmap seems to put the + # image in the same layer & group as the traced regions. + # BUT, for gray scans, it seems to leave the image by + # itself as a child of the root document + + if self.options.removeImage: + for node in self.document.xpath( '//svg:image', namespaces=inkex.NSS ): + parent = node.getparent() + if ( parent.tag == 'svg' ) or \ + ( parent.tag == inkex.addNS( 'svg', 'svg' ) ): + parent.remove( node ) + else: + gparent = parent.getparent() + try: + gparent.remove( parent ) + except: + parent.remove( node) + + inkex.errormsg( gettext.gettext( 'Finished. Created %d layers' ) % count ) + +if __name__ == '__main__': + e = EggBot_PostProcessTraceBitmap() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_presethatch.inx b/Source/Inkscape/EggBotControl.Original/eggbot_presethatch.inx new file mode 100644 index 0000000..04acd1e --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_presethatch.inx @@ -0,0 +1,30 @@ + + + <_name>Preset hatch for fills + command.evilmadscience.hatch.eggbot + eggbot_presethatch.py + inkex.py + <_param name="title" type="description" xml:space="preserve"> +This extension applies a set of eggbot-friendly +default presets to the live path effect called +"Hatch (rough)." + +It affects all objects in your document that +already have the live hatch effect applied. + +After using this tool to apply presets, use +the "Edit paths by node" tool to change the +frequency, direction, and/or bending of the +hatching, by dragging the diamond control +points. + + + path + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_presethatch.py b/Source/Inkscape/EggBotControl.Original/eggbot_presethatch.py new file mode 100644 index 0000000..2685c48 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_presethatch.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +''' +Copyright (C) 2010 Windell Oskay, drwho@evilmadscientist.com + +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, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' +import inkex + +class PresetHatch(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option("--title") + def effect(self): + self.svgDefRead = False; + self.svg = self.document.getroot() + self.recursiveDefDataScan(self.svg) + + def recursiveDefDataScan( self, aNodeList ): + for node in aNodeList: + if (node.tag == inkex.addNS( 'defs', 'svg' ) or node.tag == 'defs'): + self.recursiveDefDataScan( node ) + elif ( node.tag == inkex.addNS( 'path-effect', 'inkscape' )): + if (node.get( 'effect' ) == 'rough_hatches' ): + node.set( 'dist_rdm', '0;1' ) + node.set( 'growth', str( 0 ) ) + #node.set( 'do_bend', 'false' ) + node.set( 'bottom_edge_variation', '0;1' ) + node.set( 'top_edge_variation', '0;1' ) + node.set( 'bottom_tgt_variation', '0;1' ) + node.set( 'top_tgt_variation', '0;1' ) + node.set( 'scale_bf', str( 2 ) ) + node.set( 'scale_bb', str( 2 ) ) + node.set( 'scale_tf', str( 2 ) ) + node.set( 'scale_tb', str( 2 ) ) + node.set( 'top_smth_variation', '0;1' ) + node.set( 'bottom_smth_variation', '0;1' ) + node.set( 'fat_output', 'false' ) + +e = PresetHatch() +e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_reorder.inx b/Source/Inkscape/EggBotControl.Original/eggbot_reorder.inx new file mode 100644 index 0000000..6ca37ae --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_reorder.inx @@ -0,0 +1,48 @@ + + + <_name>Reorder Paths for Speed + command.evilmadscience.eggbot_reorder2.eggbot + org.inkscape.output.svg.inkscape + eggbot_reorder.py + inkex.py + + + <_param name="Header" type="description" xml:space="preserve"> + This extension will perform simple optimizations + of selected paths. It will try to change the + order of plotting so as to reduce the amount + of "pen-up" travel that occurs between paths. + + Solving for optimal plot order is a difficult + problem, known in computer science as the + "traveling salesman problem," or just "TSP." + + This routine does not look for the best possible + solution; that can be slow. Instead it tries a + few quick methods that often reduce pen-up + travel distance (and time) by 30% or more. + + Please note: This extension is still considered + experimental, and is only provided in case you + may find it useful. Be sure to save a copy of + your document before running this routine. + + + + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_reorder.py b/Source/Inkscape/EggBotControl.Original/eggbot_reorder.py new file mode 100644 index 0000000..9d0df4c --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_reorder.py @@ -0,0 +1,170 @@ +# EggBot Path Ordering extension +# This extension tries to re-order the document's paths to improve +# the plotting time by plotting nearby paths consecutively. +# +# Written by Matthew Beckler for the EggBot project. +# Email questions and comments to matthew at mbeckler dot org +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import gettext +import inkex +import math +import random +import simplepath +import simpletransform +import sys + +def dist( x0, y0, x1, y1 ): + return math.sqrt( ( x1 - x0 ) ** 2 + ( y1 - y0 ) ** 2 ) + +def find_ordering_naive( objlist ): + """ + Takes a list of (id, (startX, startY, endX, endY)), and finds the best ordering. + Doesn't handle anything fancy, like reversing the ordering, but it's useful for now. + Returns a list of JUST THE IDs, in a better order, as well as the original and optimized + "air distance" which is just the distance traveled in the air. Perhaps we want to make + these comparison distances into something more relevant such as degrees traveled? + """ + + # let's figure out the default in-air length, so we know how much we improved + air_length_default = 0 + try: + oldx = objlist[0][1][2] + oldy = objlist[0][1][3] + except: + inkex.errormsg( gettext.gettext( str( objlist[0] ) ) ) + sys.exit( 1 ) + for id, coords in objlist[1:]: + air_length_default += dist( oldx, oldy, coords[0], coords[1] ) + oldx = coords[2] + oldy = coords[3] + #fid.write("Default air distance: %d\n" % air_length_default) + + air_length_ordered = 0 + # for now, start with a random one: + sort_list = [] + random_index = random.randint( 0, len( objlist ) - 1 ) + sort_list.append( objlist[random_index] ) + objlist.remove( objlist[random_index] ) + + # for now, do this in the most naive way: + # for the previous end point, iterate over each remaining path and pick the closest starting point + while len( objlist ) > 0: + min_distance = 100000000 # TODO put something else here better? + for path in objlist: + # instead of having a prevX, prevY, we just look at the last item in sort_list + this_distance = dist( sort_list[-1][1][2], sort_list[-1][1][3], path[1][0], path[1][1] ) + # this is such a common thing to do, you'd think there would be a name for it... + if this_distance < min_distance: + min_distance = this_distance + min_path = path + air_length_ordered += min_distance + sort_list.append( min_path ) + objlist.remove( min_path ) + + #fid.write("optimized air distance: %d\n" % air_length_ordered) + + # remove the extraneous info from the list order + sort_order = [id for id, coords in sort_list] + return sort_order, air_length_default, air_length_ordered + +def conv( x, y, trans_matrix=None ): + """ + not used currently, but can be used to apply a translation matrix to an (x, y) pair + I'm sure there is a better way to do this using simpletransform or it's ilk + """ + + if trans_matrix: + xt = trans_matrix[0][0] * x + trans_matrix[0][1] * y + trans_matrix[0][2] + yt = trans_matrix[1][0] * x + trans_matrix[1][1] * y + trans_matrix[1][2] + return xt, yt + else: + return x, y + +class EggBotReorderPaths( inkex.Effect ): + def __init__( self ): + inkex.Effect.__init__( self ) +# self.OptionParser.add_option( '-r', '--reverse', action='store', type="inkbool", +# dest="reverse", default=True, help="Enable 'reverse path direction' optimizations" ) +# self.OptionParser.add_option( '-w', '--wrap', action='store', type="inkbool", +# dest="wrap", default=True, help="Enable 'wrap egg axis' optimizations" ) + + def get_start_end( self, node, transform ): + """Given a node, return the start and end points""" + d = node.get( 'd' ) + sp = simplepath.parsePath( d ) + + # simplepath converts coordinates to absolute and cleans them up, but + # these are still some big assumptions here, are they always valid? TODO + startX = sp[0][1][0] + startY = sp[0][1][1] + if sp[-1][0] == 'Z': + # go back to start + endX = startX + endY = startY + else: + endX = sp[-1][1][-2] + endY = sp[-1][1][-1] + + sx, sy = conv( startX, startY, transform ) + ex, ey = conv( endX, endY, transform ) + return ( sx, sy, ex, ey ) + + def effect( self ): + """This is the main entry point""" + + # based partially on the restack.py extension + if len( self.selected ) > 0: + svg = self.document.getroot() + + # TODO check for non-path elements? + # TODO it seems like the order of selection is not consistent + + #fid = open("/home/matthew/debug.txt", "w") + + # for each selected item - TODO make this be all objects, everywhere + # I can think of two options: + # 1. Iterate over all paths in root, then iterate over all layers, and their paths + # 2. Some magic with xpath? (would this limit us to specific node types?) + + objlist = [] + for id, node in self.selected.iteritems(): + transform = node.get( 'transform' ) + if transform: + transform = simpletransform.parseTransform( transform ) + + item = ( id, self.get_start_end( node, transform ) ) + objlist.append( item ) + + # sort / order the objects + sort_order, air_distance_default, air_distance_ordered = find_ordering_naive( objlist ) + + for id in sort_order: + # There's some good magic here, that you can use an + # object id to index into self.selected. Brilliant! + self.current_layer.append( self.selected[id] ) + + #fid.close() + + if air_distance_default > 0 : #don't divide by zero. :P + improvement_pct = 100 * ( ( air_distance_default - air_distance_ordered ) / ( air_distance_default ) ) + inkex.errormsg( gettext.gettext( "Selected paths have been reordered and optimized for quicker EggBot plotting.\n\nOriginal air-distance: %d\nOptimized air-distance: %d\nDistance reduced by: %1.2d%%\n\nHave a nice day!" % ( air_distance_default, air_distance_ordered, improvement_pct ) ) ) + else: + inkex.errormsg( gettext.gettext( "Unable to start. Please select multiple distinct paths. :)" ) ) + + +e = EggBotReorderPaths() +e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_sineandlace.inx b/Source/Inkscape/EggBotControl.Original/eggbot_sineandlace.inx new file mode 100644 index 0000000..43842a5 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_sineandlace.inx @@ -0,0 +1,69 @@ + + + <_name>Sine and Lace + command.experiment.sineandlace + eggbot_sineandlace.py + inkex.py + + + + 3200 + + 100 + + 10 + + 0 + + 0 + + 2 + + 1000 + + 0 + + 500 + + true + + false + + + <_param name="aboutpage" type="description" xml:space="preserve"> +This extension renders sinusoidal and "lace" +patterns whose period is a specified multiple +of the document width or any specified width. +By selecting two previously drawn patterns, +a third pattern may be inscribed within them. +Patterns may not be inscribed within an inscribed +pattern, however. + +This extension may be found at Thingiverse as +Thing #24594. + +Sine and Lace v0.9 +Dan Newman (dan newman @ mtbaldy us) +12 June 2012 + + + + + + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_sineandlace.py b/Source/Inkscape/EggBotControl.Original/eggbot_sineandlace.py new file mode 100644 index 0000000..218cc23 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_sineandlace.py @@ -0,0 +1,369 @@ +#!/usr/bin/env python + +# eggbot_sineandlace.py +# +# Generate sinusoidal and "lace" curves. The curves are described in SVG +# along with the data necessary to regenerate them. The same data can be +# used to generate new curves which are bounded by a pair of previously +# generated curves. + +# Written by Daniel C. Newman for the Eggbot Project +# dan newman @ mtbaldy us +# Last updated 28 November 2010 +# 15 October 2010 + +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import inkex +import simplepath +import simplestyle +from math import * + +VERSION = 1 + +def parseDesc( str ): + + ''' + Create a dictionary from string description + ''' + + if str is None: + return {} + else: + return dict( [ tok.split( ':' ) for tok in str.split( ';' ) if len( tok ) ] ) + +def formatDesc( d ): + + ''' + Format an inline name1:value1;name2:value2;... style attribute value + from a dictionary + ''' + + return ';'.join( [ atr + ':' + str( val ) for atr,val in d.iteritems() ] ) + +def drawSine( cycles=8, rn=0, rm=0, nPoints=50, offset=[0, 0], + height=200, width=3200, rescale=0.98, bound1='', bound2='', fun='sine', spline=True ): + + ''' + cycles + Number of periods to plot within the rectangle of width 'width' + + rn, rm + Start the function (on the left edge) at the value x = 2 * pi * rn / rm. + When rm = 0, function is started at x = 0. + + nPoints + The number of points to sample the function at. Since the function is + approximated using Bezier cubic splines, this isn't the number of points + to plot. + + offset + (x, y) coordinate of the lower left corner of the bounding rectangle + in which to plot the function. + + height, width + The height and width of the rectangle in which to plot the function. + Ignored when bounding functions, bound1 and bound2, are supplied. + + rescale + Multiplicative Y-scaling factor by which to rescale the plotted function + so that it does not fully reach the vertical limits of its bounds. This + aids in Eggbot plots by preventing lines from touching and overlapping. + + bound1, bound2 + Descriptions of upper and lower bounding functions by which to limit the + vertical range of the function to be plotted. + + fun + May be either 'sine' or 'lace'. + ''' + + ''' + A complicated way of plotting y = sin(x) + + Complicated because we wish to generate the sine wave using a + parameteric representation. For plotting a single sine wave in + Cartesian coordinates, this is overkill. However, it's useful + for when we want to compress and expand the amplitude of the + sine wave in accord with upper and lower boundaries which themselves + are functions. By parameterizing everything in sight with the + same parameter s and restricting s to the range [0, 1], our life + is made much easier. + ''' + + bounded = False + + if ( not ( bound1 is None ) ) and ( not ( bound2 is None ) ) and \ + ( len( bound1 ) > 0 ) and ( len( bound2 ) > 0 ): + + func = parseDesc( bound1 ) + if len( func ) == 0: + return None, None + m1 = int( func['rm'] ) + if m1 == 0: + xMin1 = float( 0 ) + else: + xMin1 = 2 * pi * float( func['rn'] ) / float( m1 ) + xMax1 = xMin1 + 2 * pi * float( func['cycles'] ) + yMin1 = float( -1 ) + yMax1 = float( +1 ) + yScale1 = float( func['height'] ) / ( yMax1 - yMin1 ) + yOffset1 = float( func['y'] ) + Y1s = lambda s: yOffset1 - yScale1 * sin( xMin1 + ( xMax1 - xMin1 ) * s ) + + func = parseDesc( bound2 ) + if len ( func ) == 0: + return None, None + m2 = int( func['rm'] ) + if m2 == 0: + xMin2 = float( 0 ) + else: + xMin2 = 2 * pi * float( func['rn'] ) / float( m2 ) + xMax2 = xMin2 + 2 * pi * float( func['cycles'] ) + yMin2 = float( -1 ) + yMax2 = float( +1 ) + yScale2 = float( func['height'] ) / ( yMax2 - yMin2 ) + yOffset2 = float( func['y'] ) + Y2s = lambda s: yOffset2 - yScale2 * sin( xMin2 + ( xMax2 - xMin2 ) * s ) + + bounded = True + + rescale = float( rescale ) + xOffset = float( offset[0] ) + yOffset = float( offset[1] ) + + # Each cycle is 2pi + n, m = int( 0 ), int( 0 ) + r = 2 * pi * float( cycles ) + if ( int( rm ) == 0 ) or ( int( rn ) == 0 ): + xMin = float( 0 ) + else: + xMin = 2 * pi * float( rn ) / float( rm ) + xMax = xMin + r + xScale = float( width ) / r # width / ( xMax - xMin ) + + yMin = float( -1 ) + yMax = float( +1 ) + yScale = float( height ) / ( yMax - yMin ) + + # Our parametric equations which map the results to our drawing window + # Note the "-yScale" that's because in SVG, the y-axis runs "backwards" + if ( fun is None ) or ( fun == '' ): + fun = 'sine' + fun = fun.lower() + if fun == 'sine': + Xs = lambda s: xOffset + xScale * ( xMax - xMin ) * s + Ys = lambda s: yOffset - yScale * sin( xMin + ( xMax - xMin ) * s ) + dYdXs = lambda s: -yScale * cos( xMin + ( xMax - xMin ) * s ) / xScale + elif fun == 'lace': + Xs = lambda s: xOffset + xScale * ( ( xMax - xMin ) * s + 2 * sin(2 * s * (xMax - xMin) + pi ) ) + dXs = lambda s: xScale * (xMax - xMin ) * ( 1.0 + 4.0 * cos( 2 * s * (xMax - xMin) + pi ) ) + Ys = lambda s: yOffset - yScale * sin( xMin + ( xMax - xMin ) * s ) + dYs = lambda s: -yScale * cos( xMin + ( xMax - xMin ) * s ) * ( xMax - xMin ) + dYdXs = lambda s: dYs( s ) / dXs( s ) + else: + inkex.errormsg( 'Unknown function %s specifed' % fun ) + return + + # Derivatives: remember the chain rule.... + # dXs = lambda s: xScale * ( xMax - xMin ) + # dYs = lambda s: -yScale * cos( xMin + ( xMax - xMin ) * s ) * ( xMax - xMin ) + + # xThird is 1/3 the step size + nPoints = int( nPoints ) + + # xThird is 1/3 the step size; note that Xs(1) - Xs(0) = xScale * ( xMax - xMin ) + xThird = ( Xs( float( 1 ) ) - Xs( float( 0 ) ) ) / float( 3 * (nPoints - 1 ) ) + + if bounded: + yUpper = Y2s( float( 0 ) ) + yLower = Y1s( float( 0 ) ) + yOffset = 0.5 * ( yUpper + yLower ) + yUpper = yOffset + rescale * ( yUpper - yOffset ) + yLower = yOffset + rescale * ( yLower - yOffset ) + yScale = ( yUpper - yLower ) / ( yMax - yMin ) + + x1 = Xs( float( 0 ) ) + y1 = Ys( float( 0 ) ) + dx1 = float( 1 ) + dy1 = dYdXs( float( 0 ) ) + + # Starting point in the path is ( x, sin(x) ) + pathData = [] + pathData.append(['M ', [ x1 , y1 ] ] ) + + for i in range( 1, nPoints ): + + s = float( i ) / float( nPoints - 1 ) + if bounded: + yUpper = Y2s(s) + yLower = Y1s(s) + yOffset = 0.5 * ( yUpper + yLower ) + yUpper = yOffset + rescale * ( yUpper - yOffset ) + yLower = yOffset + rescale * ( yLower - yOffset ) + yScale = ( yUpper - yLower ) / ( yMax - yMin ) + + x2 = Xs( s ) + y2 = Ys( s ) + dx2 = float( 1 ) + dy2 = dYdXs( s ) + if dy2 > float( 10 ): + dy2 = float( 10 ) + elif dy2 < float( -10 ): + dy2 = float( -10 ) + + # Add another segment to the plot + if spline: + pathData.append( [' C ', + [ x1 + ( dx1 * xThird ), + y1 + ( dy1 * xThird ), + x2 - ( dx2 * xThird ), + y2 - ( dy2 * xThird ), + x2, y2 ] ] ) + else: + pathData.append([' L ', [ x1, y1 ] ] ) + pathData.append([' L ', [ x2, y2 ] ] ) + x1 = x2 + y1 = y2 + dx1 = dx2 + dy1 = dy2 + + pathDesc = \ + 'version:%d;style:linear;function:sin(x);' % VERSION + \ + 'cycles:%f;rn:%d;rm:%d;points:%d' % ( cycles, rn, rm, nPoints ) + \ + ';width:%d;height:%d;x:%d;y:%d' % ( width, height, offset[0], offset[1] ) + + return pathData, pathDesc + +class SpiroSine( inkex.Effect ): + + nsURI = 'http://sample.com/ns' + nsPrefix = 'doof' + + def __init__(self): + + inkex.Effect.__init__(self) + + self.OptionParser.add_option( "--tab", #NOTE: value is not used. + action="store", type="string", + dest="tab", default="splash", + help="The active tab when Apply was pressed" ) + + self.OptionParser.add_option('--fCycles', dest='fCycles', + type='float', default=float( 10 ), action='store', + help='Number of cycles (periods)' ) + + self.OptionParser.add_option('--nrN', dest='nrN', + type='int', default=int( 0 ), action='store', + help='Start x at 2 * pi * n / m' ) + + self.OptionParser.add_option('--nrM', dest='nrM', + type='int', default=int( 0 ), action='store', + help='Start x at 2 * pi * n / m' ) + + self.OptionParser.add_option('--fRecess', dest='fRecess', + type='float', default=float( 2 ), action='store', + help='Recede from envelope by factor' ) + + self.OptionParser.add_option("--nSamples", dest="nSamples", + type="int", default=float( 50 ), action="store", + help="Number of points to sample" ) + + self.OptionParser.add_option("--nWidth", dest="nWidth", + type="int", default=int( 3200 ), action="store", + help="Width in pixels" ) + + self.OptionParser.add_option("--nHeight", dest="nHeight", + type="int", default=int( 100 ), action="store", + help="Height in pixels" ) + + self.OptionParser.add_option("--nOffsetX", dest="nOffsetX", + type="int", default=int( 0 ), action="store", + help="Starting x coordinate (pixels)" ) + + self.OptionParser.add_option("--nOffsetY", dest="nOffsetY", + type="int", default=int( 400 ), action="store", + help="Starting y coordinate (pixels)" ) + + self.OptionParser.add_option('--bLace', dest='bLace', + type='inkbool', default=False, action='store', + help='Lace' ) + + self.OptionParser.add_option('--bSpline', dest='bSpline', + type='inkbool', default=True, action='store', + help='Spline' ) + + self.recess = float( 0.95 ) + + def effect( self ): + + inkex.NSS[self.nsPrefix] = self.nsURI + + if self.options.bLace: + func = 'lace' + else: + func = 'sine' + + fRecess = float( 1 ) + if self.options.fRecess > 0.0: + fRecess = 1.0 - self.options.fRecess / float( 100 ) + if fRecess <= 0.0: + fRecess = float( 0 ) + + if self.options.ids: + if len( self.options.ids ) == 2: + attr = self.selected[self.options.ids[0]].attrib + desc1 = self.selected[self.options.ids[0]].get( inkex.addNS( 'desc', self.nsPrefix ) ) + desc2 = self.selected[self.options.ids[1]].get( inkex.addNS( 'desc', self.nsPrefix ) ) + if ( not desc1 ) or ( not desc2 ): + inkex.errormsg( 'Selected objects do not smell right' ) + return + path_data, path_desc = drawSine( self.options.fCycles, + self.options.nrN, + self.options.nrM, + self.options.nSamples, + [ self.options.nOffsetX, self.options.nOffsetY ], + self.options.nHeight, + self.options.nWidth, + fRecess, + desc1, desc2, func, self.options.bSpline ) + else: + inkex.errormsg( 'Exactly two objects must be selected' ) + return + else: + self.document.getroot().set( inkex.addNS( self.nsPrefix, 'xmlns' ), self.nsURI ) + + path_data, path_desc = drawSine( self.options.fCycles, + self.options.nrN, + self.options.nrM, + self.options.nSamples, + [ self.options.nOffsetX, self.options.nOffsetY ], + self.options.nHeight, + self.options.nWidth, + fRecess, + None, None, func, self.options.bSpline ) + + style = { 'stroke': 'black', 'stroke-width': '1', 'fill': 'none' } + path_attrs = { + 'style': simplestyle.formatStyle( style ), + 'd': simplepath.formatPath( path_data ), + inkex.addNS( 'desc', self.nsPrefix ): path_desc } + newpath = inkex.etree.SubElement( self.document.getroot(), + inkex.addNS( 'path', 'svg '), path_attrs, nsmap=inkex.NSS ) + +if __name__ == '__main__': + + e = SpiroSine() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_spiraltext.inx b/Source/Inkscape/EggBotControl.Original/eggbot_spiraltext.inx new file mode 100644 index 0000000..7f3fbaf --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_spiraltext.inx @@ -0,0 +1,121 @@ + + + <_name>Spiral Wrapped Text + command.eggbot.contributed.eggbot_spiraltext101 + hersheydata.py + simplestyle.py + eggbot_spiraltext.py + inkex.py + + + <_param name="stuff" type="description"> +This extension renders passages of text as a single, long line +of text, tilted slightly so that it spirals as it wraps around +your egg. + +Specify the number of times the text should wrap. This value +need not be a whole number. The text will then be scaled so +as to have the length (number of times to wrap) x 3200 pixels. + + 8.5 + true + false + How do you drop an egg 2 meters without it breaking? Drop it from 3 meters: it won't break for the first 2! * If a rooster laid an egg at the peak of a roof, which side would it roll down? Neither side: roosters don't lay eggs! * What's the best day to eat eggs? Fry day * What happens when you tickle eggs? They crack up! * What sport are eggs good at? Running! * What kind of jokes do eggs tell? Egg yolks * What's an egg's favorite robot? The EggBot! + + + <_option value="sans">Sans + <_option value="times">Times + <_option value="script">Script + + + + <_param name="aboutpage" type="description" xml:space="preserve"> +Simple markup may be used to switch between type faces (fonts) +as well as to select bold, italic and emphasized type faces. + +Font selection: + <sans>Sans serif font</sans> (no italics) + <times>Font with serifs</times> + <script>Script font</script> (italics redundant) + +Markup: + <b>boldface</b> -- Bold text + <em>emphasis</em> -- Emphasized text + <i>italics</i> -- Italicized text + +Special characters: + < -- Enter " &lt; " in your text + > -- Enter " &gt; " in your text + & -- Enter " &amp; " in your text + + + + <_param name="aboutpage1" type="description" xml:space="preserve"> +In addition to the sans, times and script type families, other text-oriented +type faces are available. For these faces, use of the <b>, <em> and +<i> markups have no effect and are ignored. + +<cyrillic> -- Cyrillic +<futural>, <futram> -- Sans 1-stroke, bold +<gothiceng>, <gothicger>, <gothicita> -- Gothic English, German, Italian +<greek>, <timesg;> -- Greek 1-stroke, medium +<japanese> -- Japanese +<scripts>, <scriptc>, <cursive> -- Script 1-stroke, medium, alternate +<timesi>, <timesib> -- Serif medium italic, bold italic +<timesr>, <timesrb> -- Serif medium, bold + + + + + + + + + <_param name="aboutpage1" type="description" xml:space="preserve"> +In addition to type faces for text, several type faces of symbols +are also available. When these type faces are used, the <b>, +<em> and <i> markups have no effect and are ignored. + +<astrology> -- Astrology +<markers> -- Markers +<mathlow> -- Math (lower) +<mathupp> -- Math (upper) +<meteorology> -- Meteorology +<music> -- Music +<symbolic> -- Symbolic + + + + + + + + + +<_param name="aboutpage3" type="description" xml:space="preserve"> +This extension renders a passage of text tilted at an angle +so as to wrap around an egg in a spiral. To render the text, +the "Hershey" fonts for plotters is used. These fonts are +derived from NBS SP-424 1976-04, "A contribution to computer +typesetting techniques: Tables of Coordinates for Hershey's +Repertory of Occidental Type Fonts and Graphic Symbols." + +To generate tables of the Hershey Fonts, see the "Hershey Text" +extension under the "Render" category of Extensions. + +For additional information, please visit: + + www.evilmadscientist.com/go/hershey + + + + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_spiraltext.py b/Source/Inkscape/EggBotControl.Original/eggbot_spiraltext.py new file mode 100644 index 0000000..d453f3a --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_spiraltext.py @@ -0,0 +1,400 @@ +# eggbot_spiraltext.py +# +# Render a passage of text using the Hershey fonts, then stretch it so +# that it will wrap multiple times around an egg, and finally tilt it +# so that it will spiral as it wraps. +# +# + The wrapping need not be an integral multiple of 3200 pixels +# +# + The text tilt is computed to use the full height of the document +# +# + The text can be run starting from the top of the page or from +# the bottom (and upside down). This latter orientation is useful +# when placing the bottom of the egg (fat end) in the egg motor's +# egg cup +# +# + The text can be stretched more horizontally than vertically to +# compensate for some of the geometry issues associated with drawing +# on eggs. +# +# + The text can contain markup (see below) +# +# This extension also permits some basic markup of the passage using +# XHTML-like conventions and a limited set of tags: +# +# - A simple typeface which lacks serifs +# - "Times" like typeface (a face with serifs) +# - Boldface +# - Emphasis +# - Italics +# - Where "face" is any of the typeface names from hersheydata.py +# +# The markup processing is not XML-conformant: we don't expect a well-formed +# document as input. No single root element is required. And, at the end of +# the text, we do not require closure of any open tags. We do however enforce +# proper nesting of tags: an element cannot be closed unless its children have +# already been closed. This is more to prevent ambiguity about whether or +# not closing a typeface also closes any markup operating under it (e.g., +# does text mean that the was implicitly ended when +# was encountered? +# +# This extension requires the hersheydata.py file which is part of the +# Hershey Text rendering extension written by Windell H. Oskay of +# www.evilmadscientist.com. Information on that extension may be found at +# +# http://www.evilmadscientist.com/go/hershey +# +# Copyright 2011, Daniel C. Newman, +# +# Significant portions of this code were written by Windell H. Oskay and are +# Copyright 2011, Windell H. Oskay, www.evilmadscientist.com +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import hersheydata #data file w/ Hershey font data +import inkex +import simplestyle +import math + +# Mapping table to map the names used here to the corresponding +# names used in hersheydata.py. This helps prevent end users from +# being impacted by a name change in hersheydata.py. This can also +# be used to deal with a face being removed from hersheydata.py + +map_our_names_to_hersheydata = { + 'astrology' : 'astrology', + 'cursive' : 'cursive', + 'cyrillic' : 'cyrillic', + 'futural' : 'futural', + 'futuram' : 'futuram', + 'gothiceng' : 'gothiceng', + 'gothicger' : 'gothicger', + 'gothicita' : 'gothicita', + 'greek' : 'greek', + 'japanese' : 'japanese', + 'markers' : 'markers', + 'mathlow' : 'mathlow', + 'mathupp' : 'mathupp', + 'meteorology' : 'meteorology', + 'music' : 'music', + 'scriptc' : 'scriptc', + 'scripts' : 'scripts', + 'symbolic' : 'symbolic', + 'timesg' : 'timesg', + 'timesi' : 'timesi', + 'timesib' : 'timesib', + 'timesr' : 'timesr', + 'timesrb' : 'timesrb' } + +# The following two routines are lifted with impunity from Windell H. Oskay's +# hershey.py Hershey Text extension for Inkscape. They are, +# Copyright 2011, Windell H. Oskay, www.evilmadscientist.com + +def draw_svg_text(char, face, offset, vertoffset, parent): + style = { 'stroke': '#000000', 'fill': 'none' } + pathString = face[char] + splitString = pathString.split() + midpoint = offset - int(splitString[0]) + i = pathString.find("M") + if i >= 0: + pathString = pathString[i:] #portion after first move + trans = 'translate(' + str(midpoint) + ',' + str(vertoffset) + ')' + text_attribs = {'style':simplestyle.formatStyle(style), 'd':pathString, 'transform':trans} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), text_attribs) + return midpoint + int(splitString[1]) #new offset value + +def renderText( parent, markup ): + # Embed text in group to make manipulation easier: + g_attribs = {inkex.addNS('label','inkscape'):'Hershey Text' } + g = inkex.etree.SubElement(parent, 'g', g_attribs) + + w = 0 #Initial spacing offset + spacing = 3 # spacing between letters + + for Face, Text in markup: + if map_our_names_to_hersheydata.has_key(Face): + Face = map_our_names_to_hersheydata[Face] + font = eval('hersheydata.' + Face) + letterVals = [ord(q) - 32 for q in Text] + for q in letterVals: + if (q < 0) or (q > 95): + w += 2*spacing + else: + w = draw_svg_text(q, font, w, 0, g) + return g, w + +# The generic font "families" we support +generic_families = ( 'sans', 'script', 'times' ) + +# Convert "family-name" + "bold-0-or-1" + "italic-0-or-1" to a typeface name +family_to_font = { + 'sans00' : 'futural', 'sans10' : 'futuram', 'sans01' : 'futural', 'sans11' : 'futuram', + 'times00' : 'timesr', 'times10' : 'timesrb', 'times01' : 'timesi', 'times11' : 'timesib', + 'script00' : 'scripts', 'script10' : 'scriptc', 'script01' : 'scripts', 'script11' : 'scriptc' } +emphasis_is_bold = { 'sans' : True, 'times' : False, 'script' : True } + +# Short list of entity references +entity_refs = { '<' : '<', '>' : '>', '&' : '&', '"' : '"', '&apos' : "'", ' ' : ' ' } + +def pickFace( family, bold=False, italics=False, emphasis=False ): + + if ( family is None ) or ( family == '' ): + return None + + b = '0' + i = '0' + + # If using a generic font family, then determine how to map + if emphasis and ( family in generic_families ): + if emphasis_is_bold[family]: + bold = True + else: + italics = True + + if bold: + b = '1' + + if italics: + i = '1' + + if family_to_font.has_key( family + b + i ): + return family_to_font[family + b + i] + + return family + +def processMarkup( text, family='sans' ): + if ( text is None ): + text = '' + + # By default we assume 'sans' + if ( family is None ) or ( family == ''): + family = 'sans' + family_default = family + face_stack = [ family ] + + # Bold and italics off + bold = False + emphasis = False + italic = False + + # Set the current typeface + face = pickFace( family, bold, italic, emphasis ) + + # And the result of markup processing so far + markup = [] + + # We keep a queue / list of the open markup tags + # When a tag is closed, we expect it to be well nested. To enforce + # that expectation, we make sure that we are closing the most recently + # opened tag. While this may seem overly picky, it's easier than worrying + # issues like, "Does closing a typeface imply implicitly closing or ?" + # And, "Does starting a new typeface imply closing the prior selected face?" + tags_used = [] + + outstr = '' + i = 0 + while i < len( text ): + # An entity reference? + if text[i] == '&': + j = text.find( ';', i+1 ) + if ( j != -1 ): + eref = text[i:j+1] + if entity_refs.has_key[eref]: + outstr += entity_refs[eref] + i = j + 1 + else: + inkex.errormsg( 'Ignoring the unrecognized entity reference %s.' % eref ) + outstr += eref + i = j + 1 + else: + inkex.errormsg( 'An unescaped "&" was encountered; please replace it with "&".' ) + break + + # Start of a tag (start-tag or end-tag? self-closing tags not supported) + elif text[i] == '<': + j = text.find( '>', i+1 ) + if ( j != -1 ) and ( j > ( i + 1) ): + + tag = text[i+1:j] + i = j + 1 + + if tag[0] == '/': + # This is an end-tag (closing tag) + close = True + tag = tag[1:] + + # Ensure that the most recently opened tag is that which we are closing here + # We'll pop the most recent tag from the queue of opened tags and see if + # it matches + if len( tags_used ) == 0: + inkex.errormsg( 'The ending tag appeared before any start tag <%s>.' % ( tag, tag ) ) + break + else: + old_tag = tags_used.pop() + if old_tag != tag: + inkex.errormsg( 'The ending tag does not appear to be correctly nested; it tried to close the tag <%s>. Sorry, but all tags must be properly nested.' % ( tag, old_tag ) ) + break + else: + # Start tag (opening tag) + # Push it onto the queue of opened tags + close = False + tags_used.append( tag ) + + if ( tag == 'b' ) or ( tag == 'strong' ): + if bold == close: + # Push prior string and font onto the stack + if outstr != '': + markup.append( [ face, outstr ] ) + outstr = '' + + # Start a new boldface string + bold = not bold + face = pickFace( family, bold, italic, emphasis ) + + elif tag == 'i': + if italic == close: + # Push the prior string and font unto the stack + if outstr != '': + markup.append( [ face, outstr ] ) + outstr = '' + + # Start a new italicized string + italic = not italic + face = pickFace( family, bold, italic, emphasis ) + + elif tag == 'em': + if emphasis == close: + # Push the prior string and font unto the stack + if outstr != '': + markup.append( [ face, outstr ] ) + outstr = '' + + # Start a new italicized string + emphasis = not emphasis + face = pickFace( family, bold, italic, emphasis ) + + else: + if ( tag not in generic_families ) and \ + ( not map_our_names_to_hersheydata.has_key( tag ) ): + if close: + inkex.errormsg( 'Ignoring the unrecognized tag .' % tag ) + else: + inkex.errormsg( 'Ignoring the unrecognized tag <%s>.' % tag ) + else: + if outstr != '': + markup.append( [face, outstr] ) + outstr = '' + if not close: + family = tag + face_stack.append( family ) + else: + if len( face_stack ) > 0: + # Current face on the stack should be the one we just closed + face_stack.pop() + if len( face_stack ) > 0: + family = face_stack[len( face_stack) - 1] + else: + family = default_family + else: + family = default_family + face = pickFace( family, bold, italic, emphasis ) + else: + inkex.errormsg( 'Ignoring unescaped "<"' ) + outstr += '<' + i += 1 + else: + outstr += text[i] + i += 1 + + # We won't worry about unclosed tags -- we're not trying to be an XML or XHTML parser + + # See if there was a hard error + if i < len( text): + return None + + # And push the last text into the list of processed markup + if outstr != '': + markup.append( [face, outstr] ) + + return markup + +class SpiralText( inkex.Effect ): + + def __init__( self ): + inkex.Effect.__init__( self ) + self.OptionParser.add_option( "--tab", #NOTE: value is not used. + action="store", type="string", + dest="tab", default="splash", + help="The active tab when Apply was pressed" ) + self.OptionParser.add_option( "--text", + action="store", type="string", + dest="text", default="Hershey Text for Inkscape", + help="The input text to render") + self.OptionParser.add_option( "--fontfamily", + action="store", type="string", + dest="fontfamily", default="sans", + help="The selected font face when Apply was pressed" ) + self.OptionParser.add_option( "--wrap", + action="store", type="float", + dest="wrap", default=float(10), + help="Number of times to wrap the text around the egg" ) + self.OptionParser.add_option( "--flip", + action="store", type="inkbool", + dest="flip", default=False, + help="Flip the text for plotting with the egg's bottom at the egg motor" ) + self.OptionParser.add_option( "--stretch", + action="store", type="inkbool", + dest="stretch", default=True, + help="Stretch the text horizontally to account for egg distortions" ) + + def effect( self ): + + markup = processMarkup( self.options.text, self.options.fontfamily ) + g,w = renderText( self.current_layer, markup ) + + # Now to wrap the text N times around the egg, we need to scale it to have + # length 3200 * N. It's current width is w so the scale factor is (3200 * N) / w. + + scale_x = float( 3200 * self.options.wrap ) / float( w ) + scale_y = scale_x + if self.options.stretch: + scale_y = scale_y * 2.0 / 3.0 + + # In planning the scaling, we'd like to know the height of our line of text. + # Rather than computing its bounding box, we'll just use the height of the + # parens from the Simplex Roman font. And, we could compute that but we'll + # just use our prior knowledge of it being 32. + + h = float( 32.0 ) + + # And the angular tilt will be arcsine( height / (3200 * fWrap) ) + svg = self.document.getroot() + height = float( self.unittouu( svg.attrib['height'] ) ) - h * scale_y + angle = ( float( 180 ) / math.pi ) * \ + math.asin( height / float( 3200 * self.options.wrap ) ) + + if self.options.flip: + angle += float( 180.0 ) + t = 'translate(%f,%f) rotate(%f,%f,0) scale(%f,%f)' % ( -w*scale_x, h*scale_y, angle, + w*scale_x, scale_x, scale_y ) + else: + t = 'translate(0,%f) rotate(%f,0,0) scale(%f,%f)' % ( h, angle, scale_x, scale_y ) + g.set( 'transform', t) + +if __name__ == '__main__': + e = SpiralText() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_stretch.inx b/Source/Inkscape/EggBotControl.Original/eggbot_stretch.inx new file mode 100644 index 0000000..16073ea --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_stretch.inx @@ -0,0 +1,60 @@ + + + <_name>Stretch + command.eggbot.contributed.stretch + org.inkscape.output.svg.inkscape + eggbot_stretch.py + inkex.py + simpletransform.py + cubicsuperpath.py + cspsubdiv.py + bezmisc.py + + <_param name="Header" type="description" xml:space="preserve"> +This extension will horizontally stretch your drawing. The +amount of stretch increases towards the poles of your egg +(i.e., increases with distance away from the equator). The +stretching is such that when plotted, the resulting plot +appears much like your original drawing. The stretching of +the horizontal near the poles counters the decreasing +circumference of lines of latitude as you approach the poles +of a sphere or egg. + +Apply this extension just before plotting. Note that it +turns all objects into paths composed of line segments. + +If no objects are selected, then the entire document is +transformed. In this case, a vertical line passing through +your document's center (width / 2) will remain unchanged. +The farther a vertical line is from the center, the more it +will be distorted. + +If objects are selected then a vertical line passing through +the horizontal midpoint of the bounding box containing the +selected objects will remain unchanged. + +The vertical smoothing is the vertical segment length to +break non-horizontal lines into so that they are smoothly but +continuously distorted. + +The curve smoothing value is the same control as in the +Eggbot Control extension. It needs to be applied here +before plotting as all curves will be rendered to straight +line segments by this extension. + + + 5.0 + 0.2 + + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_stretch.py b/Source/Inkscape/EggBotControl.Original/eggbot_stretch.py new file mode 100644 index 0000000..adff1ff --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_stretch.py @@ -0,0 +1,673 @@ +#!/usr/bin/env python + +# Written by Daniel C. Newman ( dan dot newman at mtbaldy dot us ) +# 19 October 2010 + +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import math +import inkex +import simplepath +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc + +N_PAGE_WIDTH = 3200 +N_PAGE_HEIGHT = 800 + +def inverseTransform ( tran ): + ''' + An SVG transform matrix looks like + + [ a c e ] + [ b d f ] + [ 0 0 1 ] + + And it's inverse is + + [ d -c cf - de ] + [ -b a be - af ] * ( ad - bc ) ** -1 + [ 0 0 1 ] + + And, no reasonable 2d coordinate transform will have + the products ad and bc equal. + + SVG represents the transform matrix column by column as + matrix(a b c d e f) while Inkscape extensions store the + transform matrix as + + [[a, c, e], [b, d, f]] + + To invert the transform stored Inskcape style, we wish to + produce + + [[d/D, -c/D, (cf - de)/D], [-b/D, a/D, (be-af)/D]] + + where + + D = 1 / (ad - bc) + ''' + + D = tran[0][0] * tran[1][1] - tran[1][0] * tran[0][1] + if D == 0: + return None + + return [[tran[1][1]/D, -tran[0][1]/D, + (tran[0][1]*tran[1][2] - tran[1][1]*tran[0][2])/D], + [-tran[1][0]/D, tran[0][0]/D, + (tran[1][0]*tran[0][2] - tran[0][0]*tran[1][2])/D]] + +def parseLengthWithUnits( str ): + + ''' + Parse an SVG value which may or may not have units attached + This version is greatly simplified in that it only allows: no units, + units of px, and units of %. Everything else, it returns None for. + There is a more general routine to consider in scour.py if more + generality is ever needed. + ''' + + u = 'px' + s = str.strip() + if s[-2:] == 'px': + s = s[:-2] + elif s[-1:] == '%': + u = '%' + s = s[:-1] + + try: + v = float( s ) + except: + return None, None + + return v, u + +def subdivideCubicPath( sp, flat, i=1 ): + + ''' + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + ''' + + while True: + while True: + if i >= len( sp ): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = ( p0, p1, p2, p3 ) + + if cspsubdiv.maxdist( b ) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt( b, 0.5 ) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + +class Map( inkex.Effect ): + + def __init__( self ): + + inkex.Effect.__init__( self ) + + self.OptionParser.add_option('--smoothness', dest='smoothness', + type='float', default=float( 0.2 ), action='store', + help='Curve smoothing (less for more)' ) + + self.OptionParser.add_option('--maxDy', dest='maxDy', + type='float', default=float( 5.0 ), action='store', + help='Vertical smoothing (less for more)' ) + + self.cx = float( N_PAGE_WIDTH ) / 2.0 + self.cy = float( N_PAGE_HEIGHT ) / 2.0 + self.xmin, self.xmax = ( 1.0E70, -1.0E70 ) + self.maxDy = float( 5 ) + self.paths = {} + self.transforms = {} + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + + self.docWidth = float( N_PAGE_WIDTH ) + self.docHeight = float( N_PAGE_HEIGHT ) + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + def getLength( self, name, default ): + + ''' + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + ''' + + str = self.document.getroot().get( name ) + if str: + v, u = parseLengthWithUnits( str ) + if not v: + # Couldn't parse the value + return None + elif ( u == '' ) or ( u == 'px' ): + return v + elif u == '%': + return float( default ) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float( default ) + + def getDocProps( self ): + + ''' + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + ''' + + self.docHeight = self.getLength( 'height', N_PAGE_HEIGHT ) + self.docWidth = self.getLength( 'width', N_PAGE_WIDTH ) + if ( self.docHeight == None ) or ( self.docWidth == None ): + return False + else: + return True + + def handleViewBox( self ): + + ''' + Set up the document-wide transform in the event that the document has an SVG viewbox + ''' + + if self.getDocProps(): + viewbox = self.document.getroot().get( 'viewBox' ) + if viewbox: + vinfo = viewbox.strip().replace( ',', ' ' ).split( ' ' ) + if ( vinfo[2] != 0 ) and ( vinfo[3] != 0 ): + sx = self.docWidth / float( vinfo[2] ) + sy = self.docHeight / float( vinfo[3] ) + self.docTransform = simpletransform.parseTransform( 'scale(%f,%f)' % (sx, sy) ) + + def getPathVertices( self, path, node=None, transform=None, find_bbox=False ): + + ''' + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + ''' + + if ( not path ) or ( len( path ) == 0 ): + # Nothing to do + return None + + # parsePath() may raise an exception. This is okay + sp = simplepath.parsePath( path ) + if ( not sp ) or ( len( sp ) == 0 ): + # Path must have been devoid of any real content + return None + + # Get a cubic super path + p = cubicsuperpath.CubicSuperPath( sp ) + if ( not p ) or ( len( p ) == 0 ): + # Probably never happens, but... + return None + + if transform: + simpletransform.applyTransformToPath( transform, p ) + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + for sp in p: + if len( subpath_vertices ): + subpath_list.append( subpath_vertices ) + subpath_vertices = [] + last_csp = None + subdivideCubicPath( sp, float( self.options.smoothness ) ) + for csp in sp: + if ( last_csp != None ) and ( math.fabs( csp[1][1] - last_csp[1] ) > self.options.maxDy ): + dy = ( csp[1][1] - last_csp[1] ) + dx = ( csp[1][0] - last_csp[0] ) + nsteps = math.ceil( math.fabs( dy / self.options.maxDy ) ) + for n in range( 1, int( 1 + nsteps ) ): + s = n / nsteps + subpath_vertices.append( [ last_csp[0] + s * dx, last_csp[1] + s * dy ] ) + else: + # Add this vertex to the list of vetices + subpath_vertices.append( csp[1] ) + last_csp = csp[1] + if find_bbox: + if last_csp[0] < self.xmin: + self.xmin = last_csp[0] + elif last_csp[0] > self.xmax: + self.xmax = last_csp[0] + + # Handle final subpath + if len( subpath_vertices ): + subpath_list.append( subpath_vertices ) + + if len( subpath_list ) > 0: + self.paths[node] = subpath_list + self.transforms[node] = transform + + def mapPathVertices( self, node ): + + steps2rads = math.pi / float( 1600 ) + + transform = self.transforms[node] + if transform is None: + invTransform = None + else: + invTransform = inverseTransform( transform ) + + newPath = '' + for subpath in self.paths[node]: + lastPoint = subpath[0] + lastPoint[0] = self.cx + ( lastPoint[0] - self.cx ) / math.cos( ( lastPoint[1] - self.cy ) * steps2rads ) + if invTransform != None: + simpletransform.applyTransformToPoint( invTransform, lastPoint ) + newPath += ' M %f,%f' % ( lastPoint[0], lastPoint[1] ) + for point in subpath[1:]: + x = self.cx + ( point[0] - self.cx ) / math.cos( ( point[1] - self.cy ) * steps2rads ) + pt = [x, point[1] ] + if invTransform != None: + simpletransform.applyTransformToPoint( invTransform, pt ) + newPath += ' l %f,%f' % ( pt[0] - lastPoint[0], pt[1] - lastPoint[1] ) + lastPoint = pt + + self.paths[node] = newPath + + def recursivelyTraverseSvg( self, aNodeList, + matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible', find_bbox=False ): + + ''' + [ This too is largely lifted from eggbot.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + ''' + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + # First apply the current matrix transform to this node's tranform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( node.get( "transform" ) ) ) + + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + self.recursivelyTraverseSvg( node, matNew, v, find_bbox ) + + elif node.tag == inkex.addNS( 'use', 'svg' ) or node.tag == 'use': + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get( inkex.addNS( 'href', 'xlink' ) ) + if not refid: + pass + + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath( path ) + if refnode: + x = float( node.get( 'x', '0' ) ) + y = float( node.get( 'y', '0' ) ) + # Note: the transform has already been applied + if ( x != 0 ) or (y != 0 ): + matNew2 = composeTransform( matNew, parseTransform( 'translate(%f,%f)' % (x,y) ) ) + else: + matNew2 = matNew + v = node.get( 'visibility', v ) + self.recursivelyTraverseSvg( refnode, matNew2, v, find_bbox ) + + elif node.tag == inkex.addNS( 'path', 'svg' ): + + path_data = node.get( 'd') + if path_data: + self.getPathVertices( path_data, node, matNew, find_bbox ) + + elif node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float( node.get( 'x' ) ) + y = float( node.get( 'y' ) ) + if ( not x ) or ( not y ): + pass + w = float( node.get( 'width', '0' ) ) + h = float( node.get( 'height', '0' ) ) + a = [] + a.append( ['M ', [x, y]] ) + a.append( [' l ', [w, 0]] ) + a.append( [' l ', [0, h]] ) + a.append( [' l ', [-w, 0]] ) + a.append( [' Z', []] ) + self.getPathVertices( simplepath.formatPath( a ), node, matNew, find_bbox ) + + elif node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + # Convert + # + # + + x1 = float( node.get( 'x1' ) ) + y1 = float( node.get( 'y1' ) ) + x2 = float( node.get( 'x2' ) ) + y2 = float( node.get( 'y2' ) ) + if ( not x1 ) or ( not y1 ) or ( not x2 ) or ( not y2 ): + pass + a = [] + a.append( ['M ', [x1, y1]] ) + a.append( [' L ', [x2, y2]] ) + self.getPathVertices( simplepath.formatPath( a ), node, matNew, find_bbox ) + + elif node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + self.getPathVertices( d, node, matNew, find_bbox ) + + elif node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + d += " Z" + self.getPathVertices( d, node, matNew, find_bbox ) + + elif node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse' or \ + node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + rx = float( node.get( 'rx', '0' ) ) + ry = float( node.get( 'ry', '0' ) ) + else: + rx = float( node.get( 'r', '0' ) ) + ry = rx + if rx == 0 or ry == 0: + pass + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % ( x1, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f ' % ( x2, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f' % ( x1, cy ) + self.mapPathVertices( d, node, matNew, find_bbox ) + + elif node.tag == inkex.addNS( 'pattern', 'svg' ) or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS( 'metadata', 'svg' ) or node.tag == 'metadata': + + pass + + elif node.tag == inkex.addNS( 'defs', 'svg' ) or node.tag == 'defs': + + pass + + elif node.tag == inkex.addNS( 'namedview', 'sodipodi' ) or node.tag == 'namedview': + + pass + + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + + pass + + elif node.tag == inkex.addNS( 'text', 'svg' ) or node.tag == 'text': + + inkex.errormsg( 'Warning: unable to draw text, please convert it to a path first.' ) + + pass + + elif not isinstance( node.tag, basestring ): + + pass + + else: + + inkex.errormsg( 'Warning: unable to draw object <%s>, please convert it to a path first.' % node.tag ) + pass + + def recursivelyReplaceSvg( self, nodes, parent_visibility='visible' ): + + for i in range( 0, len( nodes ) ): + + node = nodes[i] + + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + self.recursivelyReplaceSvg( node, parent_visibility=v ) + + elif node.tag == inkex.addNS( 'path', 'svg' ): + + if self.paths.has_key( node ): + # Change the path data to be the new path + node.set( 'd', self.paths[node][1:] ) + del self.paths[node] + + elif node.tag == inkex.addNS( 'use', 'svg' ) or node.tag == 'use' or \ + node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect' or \ + node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line' or \ + node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline' or \ + node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon' or \ + node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse' or \ + node.tag == inkex.addNS( 'circle', 'svg' ) or node.tag == 'circle': + # Replace this element with a element + + if self.paths.has_key( node ): + # Create a new element + # We simply copy all of the attributes from + # the old element to this new element even though + # some of the attributes are no longer relevant + newNode = inkex.etree.Element( inkex.addNS( 'path', 'svg' ), node.attrib ) + newNode.set( 'd', self.paths[node][1:] ) + + # Now replace the old element with this element + nodes[i] = newNode + + # And dispose of the old data and element + del self.paths[node] + del node + + else: + + pass + + def recursivelyGetEnclosingTransform( self, node ): + + ''' + Determine the cumulative transform which node inherits from + its chain of ancestors. + ''' + node = node.getparent() + if node is not None: + parent_transform = self.recursivelyGetEnclosingTransform( node ) + node_transform = node.get( 'transform', None ) + if node_transform is None: + return parent_transform + else: + tr = simpletransform.parseTransform( node_transform ) + if parent_transform is None: + return tr + else: + return simpletransform.composeTransform( parent_transform, tr ) + else: + return self.docTransform + + def effect( self ): + + # Viewbox handling + self.handleViewBox() + + # Locate the center of the document by obtaining its dimensions + if ( self.docHeight is None ) or (self.docWidth is None ): + inkex.errormsg( 'Document has inappropriate width or height units' ) + return + self.cy = self.docHeight / float ( 2 ) + self.cx = self.docWidth / float( 2 ) + + # First traverse the document (or selected items), reducing + # everything to line segments. If working on a selection, + # then determine the selection's bounding box in the process. + # (Actually, we just need to know it's extrema on the x-axis.) + + if self.options.ids: + # Traverse the selected objects + for id in self.options.ids: + transform = self.recursivelyGetEnclosingTransform( self.selected[id] ) + self.recursivelyTraverseSvg( [self.selected[id]], transform, find_bbox=True ) + # Use as the vertical centerline the midpoint between + # the bounding box's extremal X coordinates + self.cx = 0.5 * ( self.xmin + self.xmax ) + else: + # Traverse the entire document building new, transformed paths + self.recursivelyTraverseSvg( self.document.getroot(), self.docTransform ) + + # Now that we know the x-axis extrema, we can remap the data + # Had we know the x-axis extrema in advance (i.e., operating + # on the entire document), then we could have done the mapping + # at the same time we "rendered" everything to line segments. + + for key in self.paths: + self.mapPathVertices( key ) + + # And now replace the old paths with the new paths + # WE DO NOT compute and replace the paths in the same pass! + # So doing can cause multiple transformations of cloned paths + + self.recursivelyReplaceSvg( self.document.getroot(), self.docTransform ) + +if __name__ == '__main__': + + e = Map() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_stripdata.inx b/Source/Inkscape/EggBotControl.Original/eggbot_stripdata.inx new file mode 100644 index 0000000..8632d2b --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_stripdata.inx @@ -0,0 +1,17 @@ + + + <_name>Strip Eggbot Data + command.evilmadscience.eggbot_stripdata1.eggbot + org.inkscape.output.svg.inkscape + eggbot_stripdata.py + inkex.py + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_stripdata.py b/Source/Inkscape/EggBotControl.Original/eggbot_stripdata.py new file mode 100644 index 0000000..9e5868b --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_stripdata.py @@ -0,0 +1,30 @@ +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import gettext +import inkex + +class EggBotStripData( inkex.Effect ): + def __init__( self ): + inkex.Effect.__init__( self ) + + def effect( self ): + '''Main entry point: check to see which tab is selected, and act accordingly.''' + self.svg = self.document.getroot() + for node in self.svg.xpath( '//svg:eggbot', namespaces=inkex.NSS ): + self.svg.remove( node ) + inkex.errormsg( gettext.gettext( "Okay, I've removed all Eggbot data from this Inkscape file. Have a nice day!" ) ) + +e = EggBotStripData() +e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_twist.inx b/Source/Inkscape/EggBotControl.Original/eggbot_twist.inx new file mode 100644 index 0000000..278add5 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_twist.inx @@ -0,0 +1,50 @@ + + + <_name>Twist + command.eggbot.contributed.twist + org.inkscape.output.svg.inkscape + eggbot_twist.py + inkex.py + simplepath.py + simpletransform.py + simplestyle.py + cubicsuperpath.py + cspsubdiv.py + bezmisc.py + + <_param name="Header" type="description" xml:space="preserve"> +Iteratively twist and self-inscribe +a polygon within itself. + +The number of twists is how many +iterations to perform. + +The step ratio is the fractional +distance along an edge to move each +vertex. + +*** +This extension is intended as an +example of how to write an Inkscape +extension for use with the Eggbot. +See the eggbot_twist.py file in the +Inkscape extensions directory for +this extensions' Python code. +*** + + + 8 + 0.15 + + + all + + + + + + diff --git a/Source/Inkscape/EggBotControl.Original/eggbot_twist.py b/Source/Inkscape/EggBotControl.Original/eggbot_twist.py new file mode 100644 index 0000000..a917b77 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/eggbot_twist.py @@ -0,0 +1,540 @@ +#!/usr/bin/env python + +# twist.py -- Primarily a simple example of writing an Inkscape extension +# which manipulates objects in a drawing. +# +# For a polygon with vertices V[0], V[1], V[2], ..., V[n-1] iteratively +# move each vertex V[i] by a constant factor 0 < s < 1.0 along the edge +# between V[i] and V[i+1 modulo n] for 0 <= i <= n-1. +# +# This extension operates on every selected closed path, or, if no paths +# are selected, then every closed path in the document. Since the "twisting" +# effect only concerns itself with individual paths, no effort is made to +# worry about the transforms applied to the paths. That is, it is not +# necessary to worry about tracking SVG transforms as all the work can be +# done using the untransformed coordinates of each path. + +# Written by Daniel C. Newman ( dan dot newman at mtbaldy dot us ) +# 19 October 2010 + +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import inkex +import simplepath +import simplestyle +import simpletransform +import cubicsuperpath +import cspsubdiv +import bezmisc + +def subdivideCubicPath( sp, flat, i=1 ): + + ''' + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + ''' + + while True: + while True: + if i >= len( sp ): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = ( p0, p1, p2, p3 ) + + if cspsubdiv.maxdist( b ) > flat: + break + + i += 1 + + one, two = bezmisc.beziersplitatt( b, 0.5 ) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + +def distanceSquared( P1, P2 ): + + ''' + Pythagorean distance formula WITHOUT the square root. Since + we just want to know if the distance is less than some fixed + fudge factor, we can just square the fudge factor once and run + with it rather than compute square roots over and over. + ''' + + dx = P2[0] - P1[0] + dy = P2[1] - P1[1] + + return ( dx * dx + dy * dy ) + +class Twist( inkex.Effect ): + + def __init__( self ): + + inkex.Effect.__init__( self ) + self.OptionParser.add_option( + "--nSteps", action="store", type="int", + dest="nSteps", default=8, + help="Number of iterations to take" ) + self.OptionParser.add_option( + "--fRatio", action="store", type="float", + dest="fRatio", default=float( 0.2 ), + help="Some ratio" ) + + ''' + Store each path in an associative array (dictionary) indexed + by the lxml.etree pointer for the SVG document element + containing the path. Looking up the path in the dictionary + yields a list of lists. Each of these lists is a subpath + # of the path. E.g., for the SVG path + + + + we'd have two subpaths which will be reduced to absolute + coordinates. + + subpath_1 = [ [10, 10], [10, 15], [15, 15], [15, 10], [10,10] ] + subpath_2 = [ [30, 30], [30, 60] ] + self.paths[] = [ subpath_1, subpath_2 ] + + All of the paths and their subpaths could be drawn as follows: + + for path in self.paths: + for subpath in self.paths[path]: + first = True + for vertex in subpath: + if first: + moveto( vertex[0], vertex[1] ) + first = False + else: + lineto( vertex[0], vertex[1] ) + + NOTE: drawing all the paths like the above would not in general + give the correct rendering of the document UNLESS path transforms + were also tracked and applied. + ''' + + self.paths = {} + self.paths_clone_transform = {} + + def addPathVertices( self, path, node=None, transform=None, cloneTransform=None ): + + ''' + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + ''' + + if ( not path ) or ( len( path ) == 0 ): + # Nothing to do + return + + # parsePath() may raise an exception. This is okay + sp = simplepath.parsePath( path ) + if ( not sp ) or ( len( sp ) == 0 ): + # Path must have been devoid of any real content + return + + # Get a cubic super path + p = cubicsuperpath.CubicSuperPath( sp ) + if ( not p ) or ( len( p ) == 0 ): + # Probably never happens, but... + return + + #if transform: + # simpletransform.applyTransformToPath( transform, p ) + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + for sp in p: + if len( subpath_vertices ): + # There's a prior subpath: see if it is closed and should be saved + if distanceSquared( subpath_vertices[0], subpath_vertices[-1] ) < 1: + # Keep the prior subpath: it appears to be a closed path + subpath_list.append( subpath_vertices ) + subpath_vertices = [] + subdivideCubicPath( sp, float( 0.2 ) ) + for csp in sp: + # Add this vertex to the list of vetices + subpath_vertices.append( csp[1] ) + + # Handle final subpath + if len( subpath_vertices ): + if distanceSquared( subpath_vertices[0], subpath_vertices[-1] ) < 1: + # Path appears to be closed so let's keep it + subpath_list.append( subpath_vertices ) + + # Empty path? + if len( subpath_list ) == 0: + return + + # Store the list of subpaths in a dictionary keyed off of the path's node pointer + self.paths[node] = subpath_list + self.paths_clone_transform[node] = cloneTransform + + def recursivelyTraverseSvg( self, aNodeList, + matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible', cloneTransform=None ): + + ''' + [ This too is largely lifted from eggbot.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + ''' + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + pass + + # First apply the current matrix transform to this node's tranform + matNew = simpletransform.composeTransform( matCurrent, + simpletransform.parseTransform( node.get( "transform" ) ) ) + + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + self.recursivelyTraverseSvg( node, matNew, parent_visibility=v ) + + elif node.tag == inkex.addNS( 'use', 'svg' ) or node.tag == 'use': + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get( inkex.addNS( 'href', 'xlink' ) ) + if not refid: + pass + + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath( path ) + if refnode: + x = float( node.get( 'x', '0' ) ) + y = float( node.get( 'y', '0' ) ) + # Note: the transform has already been applied + if ( x != 0 ) or (y != 0 ): + matNew2 = composeTransform( matNew, parseTransform( 'translate(%f,%f)' % (x,y) ) ) + else: + matNew2 = matNew + v = node.get( 'visibility', v ) + self.recursivelyTraverseSvg( refnode, matNew2, + parent_visibility=v, cloneTransform=node.get( 'transform' ) ) + + elif node.tag == inkex.addNS( 'path', 'svg' ): + + path_data = node.get( 'd') + if path_data: + self.addPathVertices( path_data, node, matNew, cloneTransform ) + + elif node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float( node.get( 'x' ) ) + y = float( node.get( 'y' ) ) + if ( not x ) or ( not y ): + pass + w = float( node.get( 'width', '0' ) ) + h = float( node.get( 'height', '0' ) ) + a = [] + a.append( ['M ', [x, y]] ) + a.append( [' l ', [w, 0]] ) + a.append( [' l ', [0, h]] ) + a.append( [' l ', [-w, 0]] ) + a.append( [' Z', []] ) + self.addPathVertices( simplepath.formatPath( a ), node, matNew, cloneTransform ) + + elif node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + # Convert + # + # + + x1 = float( node.get( 'x1' ) ) + y1 = float( node.get( 'y1' ) ) + x2 = float( node.get( 'x2' ) ) + y2 = float( node.get( 'y2' ) ) + if ( not x1 ) or ( not y1 ) or ( not x2 ) or ( not y2 ): + pass + a = [] + a.append( ['M ', [x1, y1]] ) + a.append( [' L ', [x2, y2]] ) + self.addPathVertices( simplepath.formatPath( a ), node, matNew, cloneTransform ) + + elif node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + self.addPathVertices( d, node, matNew, cloneTransform ) + + elif node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get( 'points', '' ).strip() + if pl == '': + pass + + pa = pl.split() + d = "".join( ["M " + pa[i] if i == 0 else " L " + pa[i] for i in range( 0, len( pa ) )] ) + d += " Z" + self.addPathVertices( d, node, matNew, cloneTransform ) + + elif node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse' or \ + node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + rx = float( node.get( 'rx', '0' ) ) + ry = float( node.get( 'ry', '0' ) ) + else: + rx = float( node.get( 'r', '0' ) ) + ry = rx + if rx == 0 or ry == 0: + pass + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % ( x1, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f ' % ( x2, cy ) + \ + 'A %f,%f ' % ( rx, ry ) + \ + '0 1 0 %f,%f' % ( x1, cy ) + self.addPathVertices( d, node, matNew, cloneTransform ) + + elif node.tag == inkex.addNS( 'pattern', 'svg' ) or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS( 'metadata', 'svg' ) or node.tag == 'metadata': + + pass + + elif node.tag == inkex.addNS( 'defs', 'svg' ) or node.tag == 'defs': + + pass + + elif node.tag == inkex.addNS( 'namedview', 'sodipodi' ) or node.tag == 'namedview': + + pass + + elif node.tag == inkex.addNS( 'eggbot', 'svg' ) or node.tag == 'eggbot': + + pass + + elif node.tag == inkex.addNS( 'text', 'svg' ) or node.tag == 'text': + + inkex.errormsg( 'Warning: unable to draw text, please convert it to a path first.' ) + + pass + + elif not isinstance( node.tag, basestring ): + + pass + + else: + + inkex.errormsg( 'Warning: unable to draw object <%s>, please convert it to a path first.' % node.tag ) + pass + + def joinWithNode ( self, node, path, makeGroup=False, cloneTransform=None ): + + ''' + Generate a SVG element containing the path data "path". + Then put this new element into a with the supplied + node. This means making a new element and making the + node a child of it with the new as a sibling. + ''' + + if ( not path ) or ( len( path ) == 0 ): + return + + if makeGroup: + # Make a new SVG element whose parent is the parent of node + parent = node.getparent() + #was: if not parent: + if parent is None: + parent = self.document.getroot() + g = inkex.etree.SubElement( parent, inkex.addNS( 'g', 'svg' ) ) + + # Move node to be a child of this new element + g.append( node ) + + # Promote the node's transform to the new parent group + # This way, it will apply to the original paths and the + # "twisted" paths + transform = node.get( 'transform' ) + if transform: + g.set( 'transform', transform ) + del node.attrib['transform'] + else: + g = node.getparent() + + # Now make a element which contains the twist & is a child + # of the new element + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': '1' } + line_attribs = { 'style':simplestyle.formatStyle( style ), 'd': path } + if ( cloneTransform != None ) and ( cloneTransform != '' ): + line_attribs['transform'] = cloneTransform + inkex.etree.SubElement( g, inkex.addNS( 'path', 'svg' ), line_attribs ) + + def twist( self, ratio ): + + if not self.paths: + return + + # Now iterate over all of the polygons + for path in self.paths: + for subpath in self.paths[path]: + for i in range( 0, len( subpath ) - 1 ): + x = subpath[i][0] + ratio * ( subpath[i+1][0] - subpath[i][0] ) + y = subpath[i][1] + ratio * ( subpath[i+1][1] - subpath[i][1] ) + subpath[i] = [x, y] + subpath[-1] = subpath[0] + + def draw( self, makeGroup=False ): + + ''' + Draw the edges of the current list of vertices + ''' + + if not self.paths: + return + + # Now iterate over all of the polygons + for path in self.paths: + for subpath in self.paths[path]: + pdata = '' + for vertex in subpath: + if pdata == '': + pdata = 'M %f,%f' % ( vertex[0], vertex[1] ) + else: + pdata += ' L %f,%f' % ( vertex[0], vertex[1] ) + self.joinWithNode( path, pdata, makeGroup, self.paths_clone_transform[path] ) + + def effect( self ): + + # Build a list of the vertices for the document's graphical elements + if self.options.ids: + # Traverse the selected objects + for id in self.options.ids: + self.recursivelyTraverseSvg( [self.selected[id]] ) + else: + # Traverse the entire document + self.recursivelyTraverseSvg( self.document.getroot() ) + + # Now iterate over the vertices N times + for n in range( 0, self.options.nSteps ): + self.twist( self.options.fRatio ) + self.draw( n == 0 ) + +if __name__ == '__main__': + + e = Twist() + e.affect() diff --git a/Source/Inkscape/EggBotControl.Original/plot_utils.py b/Source/Inkscape/EggBotControl.Original/plot_utils.py new file mode 100644 index 0000000..5ecdaaa --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/plot_utils.py @@ -0,0 +1,125 @@ +# plot_utils.py +# Common geometric plotting utilities for EiBotBoard +# https://github.com/evil-mad/plotink +# +# Intended to provide some common interfaces that can be used by +# EggBot, WaterColorBot, AxiDraw, and similar machines. +# +# Version 0.1, Dated January 8, 2016. +# +# +# The MIT License (MIT) +# +# Copyright (c) 2016 Evil Mad Scientist Laboratories +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from math import sqrt +import cspsubdiv +from bezmisc import * + +def version(): + return "0.1" # Version number for this document + +def distance( x, y ): + ''' + Pythagorean theorem! + ''' + return sqrt( x * x + y * y ) + +def parseLengthWithUnits( str ): + ''' + Parse an SVG value which may or may not have units attached + This version is greatly simplified in that it only allows: no units, + units of px, and units of %. Everything else, it returns None for. + There is a more general routine to consider in scour.py if more + generality is ever needed. + ''' + u = 'px' + s = str.strip() + if s[-2:] == 'px': + s = s[:-2] + elif s[-1:] == '%': + u = '%' + s = s[:-1] + + try: + v = float( s ) + except: + return None, None + + return v, u + + +def getLength( altself, name, default ): + ''' + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + ''' + str = altself.svg.get( name ) + if str: + v, u = parseLengthWithUnits( str ) + if not v: + # Couldn't parse the value + return None + elif ( u == '' ) or ( u == 'px' ): + return v + elif u == '%': + return float( default ) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float( default ) + + +def subdivideCubicPath( sp, flat, i=1 ): + """ + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(). I rewrote the recursive + call because it caused recursion-depth errors on complicated line segments. + """ + + while True: + while True: + if i >= len( sp ): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = ( p0, p1, p2, p3 ) + + if cspsubdiv.maxdist( b ) > flat: + break + i += 1 + + one, two = beziersplitatt( b, 0.5 ) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + diff --git a/Source/Inkscape/EggBotControl.Original/plot_utils.pyc b/Source/Inkscape/EggBotControl.Original/plot_utils.pyc new file mode 100644 index 0000000..51f51d1 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/plot_utils.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/LICENSE.txt b/Source/Inkscape/EggBotControl.Original/serial/LICENSE.txt new file mode 100644 index 0000000..f604ea3 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/LICENSE.txt @@ -0,0 +1,61 @@ +Copyright (c) 2001-2013 Chris Liechti ; +All Rights Reserved. + +This is the Python license. In short, you can use this product in +commercial and non-commercial applications, modify it, redistribute it. +A notification to the author when you use and/or modify it is welcome. + + +TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING THIS SOFTWARE +=================================================================== + +LICENSE AGREEMENT +----------------- + +1. This LICENSE AGREEMENT is between the copyright holder of this +product, and the Individual or Organization ("Licensee") accessing +and otherwise using this product in source or binary form and its +associated documentation. + +2. Subject to the terms and conditions of this License Agreement, +the copyright holder hereby grants Licensee a nonexclusive, +royalty-free, world-wide license to reproduce, analyze, test, +perform and/or display publicly, prepare derivative works, distribute, +and otherwise use this product alone or in any derivative version, +provided, however, that copyright holders License Agreement and +copyright holders notice of copyright are retained in this product +alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates this product or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to this product. + +4. The copyright holder is making this product available to Licensee on +an "AS IS" basis. THE COPYRIGHT HOLDER MAKES NO REPRESENTATIONS OR +WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, +THE COPYRIGHT HOLDER MAKES NO AND DISCLAIMS ANY REPRESENTATION OR +WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR +THAT THE USE OF THIS PRODUCT WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. THE COPYRIGHT HOLDER SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER +USERS OF THIS PRODUCT FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL +DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE +USING THIS PRODUCT, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE +POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between the +copyright holder and Licensee. This License Agreement does not grant +permission to use trademarks or trade names from the copyright holder +in a trademark sense to endorse or promote products or services of +Licensee, or any third party. + +8. By copying, installing or otherwise using this product, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + diff --git a/Source/Inkscape/EggBotControl.Original/serial/README.txt b/Source/Inkscape/EggBotControl.Original/serial/README.txt new file mode 100644 index 0000000..a62a121 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/README.txt @@ -0,0 +1,48 @@ +This directory contains a portion of pySerial 2.7, distributed under the Python License; please see LICENSE.txt. + +The changes made from the official pySerial distribution are as follows: + - We are distributing only the "serial" directory of the original software. + - The license and README.txt files have been moved into the serial directory. + - This README.txt has been modified with these notes about modifications, for compliance with the license. + + + +Below follows the content of the original README.txt from the pySerial distribution: +========== + pySerial +========== + +Overview +======== +This module encapsulates the access for the serial port. It provides backends +for Python running on Windows, Linux, BSD (possibly any POSIX compliant +system), Jython and IronPython (.NET and Mono). The module named "serial" +automatically selects the appropriate backend. + +- Project Homepage: http://pyserial.sourceforge.net +- Project page on SourceForge: http://sourceforge.net/projects/pyserial/ +- SVN repository: http://sourceforge.net/svn/?group_id=46487 +- Download Page: http://sourceforge.net/project/showfiles.php?group_id=46487 + +BSD license, (C) 2001-2013 Chris Liechti + + +Documentation +============= +For API documentation, usage and examples see files in the "documentation" +directory. The ".rst" files can be read in any text editor or being converted to +HTML or PDF using Sphinx. An online HTML version is at +http://pyserial.sourceforge.net. + + +Examples +======== +Examples and unit tests are in the directory "examples". + + +Installation +============ +Detailed information can be found in "documentation/pyserial.rst". + +The usual setup.py for Python libraries is used for the source distribution. +Windows installers are also available (see download link above). diff --git a/Source/Inkscape/EggBotControl.Original/serial/__init__.py b/Source/Inkscape/EggBotControl.Original/serial/__init__.py new file mode 100644 index 0000000..33ae52e --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/__init__.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +# portable serial port access with python +# this is a wrapper module for different platform implementations +# +# (C) 2001-2010 Chris Liechti +# this is distributed under a free software license, see license.txt + +VERSION = '2.7' + +import sys + +if sys.platform == 'cli': + from serial.serialcli import * +else: + import os + # chose an implementation, depending on os + if os.name == 'nt': #sys.platform == 'win32': + from serial.serialwin32 import * + elif os.name == 'posix': + from serial.serialposix import * + elif os.name == 'java': + from serial.serialjava import * + else: + raise ImportError("Sorry: no implementation for your platform ('%s') available" % (os.name,)) + + +protocol_handler_packages = [ + 'serial.urlhandler', + ] + +def serial_for_url(url, *args, **kwargs): + """\ + Get an instance of the Serial class, depending on port/url. The port is not + opened when the keyword parameter 'do_not_open' is true, by default it + is. All other parameters are directly passed to the __init__ method when + the port is instantiated. + + The list of package names that is searched for protocol handlers is kept in + ``protocol_handler_packages``. + + e.g. we want to support a URL ``foobar://``. A module + ``my_handlers.protocol_foobar`` is provided by the user. Then + ``protocol_handler_packages.append("my_handlers")`` would extend the search + path so that ``serial_for_url("foobar://"))`` would work. + """ + # check remove extra parameter to not confuse the Serial class + do_open = 'do_not_open' not in kwargs or not kwargs['do_not_open'] + if 'do_not_open' in kwargs: del kwargs['do_not_open'] + # the default is to use the native version + klass = Serial # 'native' implementation + # check port type and get class + try: + url_nocase = url.lower() + except AttributeError: + # it's not a string, use default + pass + else: + if '://' in url_nocase: + protocol = url_nocase.split('://', 1)[0] + for package_name in protocol_handler_packages: + module_name = '%s.protocol_%s' % (package_name, protocol,) + try: + handler_module = __import__(module_name) + except ImportError: + pass + else: + klass = sys.modules[module_name].Serial + break + else: + raise ValueError('invalid URL, protocol %r not known' % (protocol,)) + else: + klass = Serial # 'native' implementation + # instantiate and open when desired + instance = klass(None, *args, **kwargs) + instance.port = url + if do_open: + instance.open() + return instance diff --git a/Source/Inkscape/EggBotControl.Original/serial/__init__.pyc b/Source/Inkscape/EggBotControl.Original/serial/__init__.pyc new file mode 100644 index 0000000..7313cac --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/__init__.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/rfc2217.py b/Source/Inkscape/EggBotControl.Original/serial/rfc2217.py new file mode 100644 index 0000000..2012ea7 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/rfc2217.py @@ -0,0 +1,1323 @@ +#! python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see __init__.py +# +# This module implements a RFC2217 compatible client. RF2217 descibes a +# protocol to access serial ports over TCP/IP and allows setting the baud rate, +# modem control lines etc. +# +# (C) 2001-2013 Chris Liechti +# this is distributed under a free software license, see license.txt + +# TODO: +# - setting control line -> answer is not checked (had problems with one of the +# severs). consider implementing a compatibility mode flag to make check +# conditional +# - write timeout not implemented at all + +############################################################################## +# observations and issues with servers +#============================================================================= +# sredird V2.2.1 +# - http://www.ibiblio.org/pub/Linux/system/serial/ sredird-2.2.2.tar.gz +# - does not acknowledge SET_CONTROL (RTS/DTR) correctly, always responding +# [105 1] instead of the actual value. +# - SET_BAUDRATE answer contains 4 extra null bytes -> probably for larger +# numbers than 2**32? +# - To get the signature [COM_PORT_OPTION 0] has to be sent. +# - run a server: while true; do nc -l -p 7000 -c "sredird debug /dev/ttyUSB0 /var/lock/sredir"; done +#============================================================================= +# telnetcpcd (untested) +# - http://ftp.wayne.edu/kermit/sredird/telnetcpcd-1.09.tar.gz +# - To get the signature [COM_PORT_OPTION] w/o data has to be sent. +#============================================================================= +# ser2net +# - does not negotiate BINARY or COM_PORT_OPTION for his side but at least +# acknowledges that the client activates these options +# - The configuration may be that the server prints a banner. As this client +# implementation does a flushInput on connect, this banner is hidden from +# the user application. +# - NOTIFY_MODEMSTATE: the poll interval of the server seems to be one +# second. +# - To get the signature [COM_PORT_OPTION 0] has to be sent. +# - run a server: run ser2net daemon, in /etc/ser2net.conf: +# 2000:telnet:0:/dev/ttyS0:9600 remctl banner +############################################################################## + +# How to identify ports? pySerial might want to support other protocols in the +# future, so lets use an URL scheme. +# for RFC2217 compliant servers we will use this: +# rfc2217://:[/option[/option...]] +# +# options: +# - "debug" print diagnostic messages +# - "ign_set_control": do not look at the answers to SET_CONTROL +# - "poll_modem": issue NOTIFY_MODEMSTATE requests when CTS/DTR/RI/CD is read. +# Without this option it expects that the server sends notifications +# automatically on change (which most servers do and is according to the +# RFC). +# the order of the options is not relevant + +from serial.serialutil import * +import time +import struct +import socket +import threading +import Queue +import logging + +# port string is expected to be something like this: +# rfc2217://host:port +# host may be an IP or including domain, whatever. +# port is 0...65535 + +# map log level names to constants. used in fromURL() +LOGGER_LEVELS = { + 'debug': logging.DEBUG, + 'info': logging.INFO, + 'warning': logging.WARNING, + 'error': logging.ERROR, + } + + +# telnet protocol characters +IAC = to_bytes([255]) # Interpret As Command +DONT = to_bytes([254]) +DO = to_bytes([253]) +WONT = to_bytes([252]) +WILL = to_bytes([251]) +IAC_DOUBLED = to_bytes([IAC, IAC]) + +SE = to_bytes([240]) # Subnegotiation End +NOP = to_bytes([241]) # No Operation +DM = to_bytes([242]) # Data Mark +BRK = to_bytes([243]) # Break +IP = to_bytes([244]) # Interrupt process +AO = to_bytes([245]) # Abort output +AYT = to_bytes([246]) # Are You There +EC = to_bytes([247]) # Erase Character +EL = to_bytes([248]) # Erase Line +GA = to_bytes([249]) # Go Ahead +SB = to_bytes([250]) # Subnegotiation Begin + +# selected telnet options +BINARY = to_bytes([0]) # 8-bit data path +ECHO = to_bytes([1]) # echo +SGA = to_bytes([3]) # suppress go ahead + +# RFC2217 +COM_PORT_OPTION = to_bytes([44]) + +# Client to Access Server +SET_BAUDRATE = to_bytes([1]) +SET_DATASIZE = to_bytes([2]) +SET_PARITY = to_bytes([3]) +SET_STOPSIZE = to_bytes([4]) +SET_CONTROL = to_bytes([5]) +NOTIFY_LINESTATE = to_bytes([6]) +NOTIFY_MODEMSTATE = to_bytes([7]) +FLOWCONTROL_SUSPEND = to_bytes([8]) +FLOWCONTROL_RESUME = to_bytes([9]) +SET_LINESTATE_MASK = to_bytes([10]) +SET_MODEMSTATE_MASK = to_bytes([11]) +PURGE_DATA = to_bytes([12]) + +SERVER_SET_BAUDRATE = to_bytes([101]) +SERVER_SET_DATASIZE = to_bytes([102]) +SERVER_SET_PARITY = to_bytes([103]) +SERVER_SET_STOPSIZE = to_bytes([104]) +SERVER_SET_CONTROL = to_bytes([105]) +SERVER_NOTIFY_LINESTATE = to_bytes([106]) +SERVER_NOTIFY_MODEMSTATE = to_bytes([107]) +SERVER_FLOWCONTROL_SUSPEND = to_bytes([108]) +SERVER_FLOWCONTROL_RESUME = to_bytes([109]) +SERVER_SET_LINESTATE_MASK = to_bytes([110]) +SERVER_SET_MODEMSTATE_MASK = to_bytes([111]) +SERVER_PURGE_DATA = to_bytes([112]) + +RFC2217_ANSWER_MAP = { + SET_BAUDRATE: SERVER_SET_BAUDRATE, + SET_DATASIZE: SERVER_SET_DATASIZE, + SET_PARITY: SERVER_SET_PARITY, + SET_STOPSIZE: SERVER_SET_STOPSIZE, + SET_CONTROL: SERVER_SET_CONTROL, + NOTIFY_LINESTATE: SERVER_NOTIFY_LINESTATE, + NOTIFY_MODEMSTATE: SERVER_NOTIFY_MODEMSTATE, + FLOWCONTROL_SUSPEND: SERVER_FLOWCONTROL_SUSPEND, + FLOWCONTROL_RESUME: SERVER_FLOWCONTROL_RESUME, + SET_LINESTATE_MASK: SERVER_SET_LINESTATE_MASK, + SET_MODEMSTATE_MASK: SERVER_SET_MODEMSTATE_MASK, + PURGE_DATA: SERVER_PURGE_DATA, +} + +SET_CONTROL_REQ_FLOW_SETTING = to_bytes([0]) # Request Com Port Flow Control Setting (outbound/both) +SET_CONTROL_USE_NO_FLOW_CONTROL = to_bytes([1]) # Use No Flow Control (outbound/both) +SET_CONTROL_USE_SW_FLOW_CONTROL = to_bytes([2]) # Use XON/XOFF Flow Control (outbound/both) +SET_CONTROL_USE_HW_FLOW_CONTROL = to_bytes([3]) # Use HARDWARE Flow Control (outbound/both) +SET_CONTROL_REQ_BREAK_STATE = to_bytes([4]) # Request BREAK State +SET_CONTROL_BREAK_ON = to_bytes([5]) # Set BREAK State ON +SET_CONTROL_BREAK_OFF = to_bytes([6]) # Set BREAK State OFF +SET_CONTROL_REQ_DTR = to_bytes([7]) # Request DTR Signal State +SET_CONTROL_DTR_ON = to_bytes([8]) # Set DTR Signal State ON +SET_CONTROL_DTR_OFF = to_bytes([9]) # Set DTR Signal State OFF +SET_CONTROL_REQ_RTS = to_bytes([10]) # Request RTS Signal State +SET_CONTROL_RTS_ON = to_bytes([11]) # Set RTS Signal State ON +SET_CONTROL_RTS_OFF = to_bytes([12]) # Set RTS Signal State OFF +SET_CONTROL_REQ_FLOW_SETTING_IN = to_bytes([13]) # Request Com Port Flow Control Setting (inbound) +SET_CONTROL_USE_NO_FLOW_CONTROL_IN = to_bytes([14]) # Use No Flow Control (inbound) +SET_CONTROL_USE_SW_FLOW_CONTOL_IN = to_bytes([15]) # Use XON/XOFF Flow Control (inbound) +SET_CONTROL_USE_HW_FLOW_CONTOL_IN = to_bytes([16]) # Use HARDWARE Flow Control (inbound) +SET_CONTROL_USE_DCD_FLOW_CONTROL = to_bytes([17]) # Use DCD Flow Control (outbound/both) +SET_CONTROL_USE_DTR_FLOW_CONTROL = to_bytes([18]) # Use DTR Flow Control (inbound) +SET_CONTROL_USE_DSR_FLOW_CONTROL = to_bytes([19]) # Use DSR Flow Control (outbound/both) + +LINESTATE_MASK_TIMEOUT = 128 # Time-out Error +LINESTATE_MASK_SHIFTREG_EMPTY = 64 # Transfer Shift Register Empty +LINESTATE_MASK_TRANSREG_EMPTY = 32 # Transfer Holding Register Empty +LINESTATE_MASK_BREAK_DETECT = 16 # Break-detect Error +LINESTATE_MASK_FRAMING_ERROR = 8 # Framing Error +LINESTATE_MASK_PARTIY_ERROR = 4 # Parity Error +LINESTATE_MASK_OVERRUN_ERROR = 2 # Overrun Error +LINESTATE_MASK_DATA_READY = 1 # Data Ready + +MODEMSTATE_MASK_CD = 128 # Receive Line Signal Detect (also known as Carrier Detect) +MODEMSTATE_MASK_RI = 64 # Ring Indicator +MODEMSTATE_MASK_DSR = 32 # Data-Set-Ready Signal State +MODEMSTATE_MASK_CTS = 16 # Clear-To-Send Signal State +MODEMSTATE_MASK_CD_CHANGE = 8 # Delta Receive Line Signal Detect +MODEMSTATE_MASK_RI_CHANGE = 4 # Trailing-edge Ring Detector +MODEMSTATE_MASK_DSR_CHANGE = 2 # Delta Data-Set-Ready +MODEMSTATE_MASK_CTS_CHANGE = 1 # Delta Clear-To-Send + +PURGE_RECEIVE_BUFFER = to_bytes([1]) # Purge access server receive data buffer +PURGE_TRANSMIT_BUFFER = to_bytes([2]) # Purge access server transmit data buffer +PURGE_BOTH_BUFFERS = to_bytes([3]) # Purge both the access server receive data buffer and the access server transmit data buffer + + +RFC2217_PARITY_MAP = { + PARITY_NONE: 1, + PARITY_ODD: 2, + PARITY_EVEN: 3, + PARITY_MARK: 4, + PARITY_SPACE: 5, +} +RFC2217_REVERSE_PARITY_MAP = dict((v,k) for k,v in RFC2217_PARITY_MAP.items()) + +RFC2217_STOPBIT_MAP = { + STOPBITS_ONE: 1, + STOPBITS_ONE_POINT_FIVE: 3, + STOPBITS_TWO: 2, +} +RFC2217_REVERSE_STOPBIT_MAP = dict((v,k) for k,v in RFC2217_STOPBIT_MAP.items()) + +# Telnet filter states +M_NORMAL = 0 +M_IAC_SEEN = 1 +M_NEGOTIATE = 2 + +# TelnetOption and TelnetSubnegotiation states +REQUESTED = 'REQUESTED' +ACTIVE = 'ACTIVE' +INACTIVE = 'INACTIVE' +REALLY_INACTIVE = 'REALLY_INACTIVE' + +class TelnetOption(object): + """Manage a single telnet option, keeps track of DO/DONT WILL/WONT.""" + + def __init__(self, connection, name, option, send_yes, send_no, ack_yes, ack_no, initial_state, activation_callback=None): + """\ + Initialize option. + :param connection: connection used to transmit answers + :param name: a readable name for debug outputs + :param send_yes: what to send when option is to be enabled. + :param send_no: what to send when option is to be disabled. + :param ack_yes: what to expect when remote agrees on option. + :param ack_no: what to expect when remote disagrees on option. + :param initial_state: options initialized with REQUESTED are tried to + be enabled on startup. use INACTIVE for all others. + """ + self.connection = connection + self.name = name + self.option = option + self.send_yes = send_yes + self.send_no = send_no + self.ack_yes = ack_yes + self.ack_no = ack_no + self.state = initial_state + self.active = False + self.activation_callback = activation_callback + + def __repr__(self): + """String for debug outputs""" + return "%s:%s(%s)" % (self.name, self.active, self.state) + + def process_incoming(self, command): + """A DO/DONT/WILL/WONT was received for this option, update state and + answer when needed.""" + if command == self.ack_yes: + if self.state is REQUESTED: + self.state = ACTIVE + self.active = True + if self.activation_callback is not None: + self.activation_callback() + elif self.state is ACTIVE: + pass + elif self.state is INACTIVE: + self.state = ACTIVE + self.connection.telnetSendOption(self.send_yes, self.option) + self.active = True + if self.activation_callback is not None: + self.activation_callback() + elif self.state is REALLY_INACTIVE: + self.connection.telnetSendOption(self.send_no, self.option) + else: + raise ValueError('option in illegal state %r' % self) + elif command == self.ack_no: + if self.state is REQUESTED: + self.state = INACTIVE + self.active = False + elif self.state is ACTIVE: + self.state = INACTIVE + self.connection.telnetSendOption(self.send_no, self.option) + self.active = False + elif self.state is INACTIVE: + pass + elif self.state is REALLY_INACTIVE: + pass + else: + raise ValueError('option in illegal state %r' % self) + + +class TelnetSubnegotiation(object): + """\ + A object to handle subnegotiation of options. In this case actually + sub-sub options for RFC 2217. It is used to track com port options. + """ + + def __init__(self, connection, name, option, ack_option=None): + if ack_option is None: ack_option = option + self.connection = connection + self.name = name + self.option = option + self.value = None + self.ack_option = ack_option + self.state = INACTIVE + + def __repr__(self): + """String for debug outputs.""" + return "%s:%s" % (self.name, self.state) + + def set(self, value): + """\ + request a change of the value. a request is sent to the server. if + the client needs to know if the change is performed he has to check the + state of this object. + """ + self.value = value + self.state = REQUESTED + self.connection.rfc2217SendSubnegotiation(self.option, self.value) + if self.connection.logger: + self.connection.logger.debug("SB Requesting %s -> %r" % (self.name, self.value)) + + def isReady(self): + """\ + check if answer from server has been received. when server rejects + the change, raise a ValueError. + """ + if self.state == REALLY_INACTIVE: + raise ValueError("remote rejected value for option %r" % (self.name)) + return self.state == ACTIVE + # add property to have a similar interface as TelnetOption + active = property(isReady) + + def wait(self, timeout=3): + """\ + wait until the subnegotiation has been acknowledged or timeout. It + can also throw a value error when the answer from the server does not + match the value sent. + """ + timeout_time = time.time() + timeout + while time.time() < timeout_time: + time.sleep(0.05) # prevent 100% CPU load + if self.isReady(): + break + else: + raise SerialException("timeout while waiting for option %r" % (self.name)) + + def checkAnswer(self, suboption): + """\ + check an incoming subnegotiation block. the parameter already has + cut off the header like sub option number and com port option value. + """ + if self.value == suboption[:len(self.value)]: + self.state = ACTIVE + else: + # error propagation done in isReady + self.state = REALLY_INACTIVE + if self.connection.logger: + self.connection.logger.debug("SB Answer %s -> %r -> %s" % (self.name, suboption, self.state)) + + +class RFC2217Serial(SerialBase): + """Serial port implementation for RFC 2217 remote serial ports.""" + + BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, + 9600, 19200, 38400, 57600, 115200) + + def open(self): + """\ + Open port with current settings. This may throw a SerialException + if the port cannot be opened. + """ + self.logger = None + self._ignore_set_control_answer = False + self._poll_modem_state = False + self._network_timeout = 3 + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + if self._isOpen: + raise SerialException("Port is already open.") + try: + self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self._socket.connect(self.fromURL(self.portstr)) + self._socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + except Exception, msg: + self._socket = None + raise SerialException("Could not open port %s: %s" % (self.portstr, msg)) + + self._socket.settimeout(5) # XXX good value? + + # use a thread save queue as buffer. it also simplifies implementing + # the read timeout + self._read_buffer = Queue.Queue() + # to ensure that user writes does not interfere with internal + # telnet/rfc2217 options establish a lock + self._write_lock = threading.Lock() + # name the following separately so that, below, a check can be easily done + mandadory_options = [ + TelnetOption(self, 'we-BINARY', BINARY, WILL, WONT, DO, DONT, INACTIVE), + TelnetOption(self, 'we-RFC2217', COM_PORT_OPTION, WILL, WONT, DO, DONT, REQUESTED), + ] + # all supported telnet options + self._telnet_options = [ + TelnetOption(self, 'ECHO', ECHO, DO, DONT, WILL, WONT, REQUESTED), + TelnetOption(self, 'we-SGA', SGA, WILL, WONT, DO, DONT, REQUESTED), + TelnetOption(self, 'they-SGA', SGA, DO, DONT, WILL, WONT, REQUESTED), + TelnetOption(self, 'they-BINARY', BINARY, DO, DONT, WILL, WONT, INACTIVE), + TelnetOption(self, 'they-RFC2217', COM_PORT_OPTION, DO, DONT, WILL, WONT, REQUESTED), + ] + mandadory_options + # RFC 2217 specific states + # COM port settings + self._rfc2217_port_settings = { + 'baudrate': TelnetSubnegotiation(self, 'baudrate', SET_BAUDRATE, SERVER_SET_BAUDRATE), + 'datasize': TelnetSubnegotiation(self, 'datasize', SET_DATASIZE, SERVER_SET_DATASIZE), + 'parity': TelnetSubnegotiation(self, 'parity', SET_PARITY, SERVER_SET_PARITY), + 'stopsize': TelnetSubnegotiation(self, 'stopsize', SET_STOPSIZE, SERVER_SET_STOPSIZE), + } + # There are more subnegotiation objects, combine all in one dictionary + # for easy access + self._rfc2217_options = { + 'purge': TelnetSubnegotiation(self, 'purge', PURGE_DATA, SERVER_PURGE_DATA), + 'control': TelnetSubnegotiation(self, 'control', SET_CONTROL, SERVER_SET_CONTROL), + } + self._rfc2217_options.update(self._rfc2217_port_settings) + # cache for line and modem states that the server sends to us + self._linestate = 0 + self._modemstate = None + self._modemstate_expires = 0 + # RFC 2217 flow control between server and client + self._remote_suspend_flow = False + + self._thread = threading.Thread(target=self._telnetReadLoop) + self._thread.setDaemon(True) + self._thread.setName('pySerial RFC 2217 reader thread for %s' % (self._port,)) + self._thread.start() + + # negotiate Telnet/RFC 2217 -> send initial requests + for option in self._telnet_options: + if option.state is REQUESTED: + self.telnetSendOption(option.send_yes, option.option) + # now wait until important options are negotiated + timeout_time = time.time() + self._network_timeout + while time.time() < timeout_time: + time.sleep(0.05) # prevent 100% CPU load + if sum(o.active for o in mandadory_options) == len(mandadory_options): + break + else: + raise SerialException("Remote does not seem to support RFC2217 or BINARY mode %r" % mandadory_options) + if self.logger: + self.logger.info("Negotiated options: %s" % self._telnet_options) + + # fine, go on, set RFC 2271 specific things + self._reconfigurePort() + # all things set up get, now a clean start + self._isOpen = True + if not self._rtscts: + self.setRTS(True) + self.setDTR(True) + self.flushInput() + self.flushOutput() + + def _reconfigurePort(self): + """Set communication parameters on opened port.""" + if self._socket is None: + raise SerialException("Can only operate on open ports") + + # if self._timeout != 0 and self._interCharTimeout is not None: + # XXX + + if self._writeTimeout is not None: + raise NotImplementedError('writeTimeout is currently not supported') + # XXX + + # Setup the connection + # to get good performance, all parameter changes are sent first... + if not isinstance(self._baudrate, (int, long)) or not 0 < self._baudrate < 2**32: + raise ValueError("invalid baudrate: %r" % (self._baudrate)) + self._rfc2217_port_settings['baudrate'].set(struct.pack('!I', self._baudrate)) + self._rfc2217_port_settings['datasize'].set(struct.pack('!B', self._bytesize)) + self._rfc2217_port_settings['parity'].set(struct.pack('!B', RFC2217_PARITY_MAP[self._parity])) + self._rfc2217_port_settings['stopsize'].set(struct.pack('!B', RFC2217_STOPBIT_MAP[self._stopbits])) + + # and now wait until parameters are active + items = self._rfc2217_port_settings.values() + if self.logger: + self.logger.debug("Negotiating settings: %s" % (items,)) + timeout_time = time.time() + self._network_timeout + while time.time() < timeout_time: + time.sleep(0.05) # prevent 100% CPU load + if sum(o.active for o in items) == len(items): + break + else: + raise SerialException("Remote does not accept parameter change (RFC2217): %r" % items) + if self.logger: + self.logger.info("Negotiated settings: %s" % (items,)) + + if self._rtscts and self._xonxoff: + raise ValueError('xonxoff and rtscts together are not supported') + elif self._rtscts: + self.rfc2217SetControl(SET_CONTROL_USE_HW_FLOW_CONTROL) + elif self._xonxoff: + self.rfc2217SetControl(SET_CONTROL_USE_SW_FLOW_CONTROL) + else: + self.rfc2217SetControl(SET_CONTROL_USE_NO_FLOW_CONTROL) + + def close(self): + """Close port""" + if self._isOpen: + if self._socket: + try: + self._socket.shutdown(socket.SHUT_RDWR) + self._socket.close() + except: + # ignore errors. + pass + self._socket = None + if self._thread: + self._thread.join() + self._isOpen = False + # in case of quick reconnects, give the server some time + time.sleep(0.3) + + def makeDeviceName(self, port): + raise SerialException("there is no sensible way to turn numbers into URLs") + + def fromURL(self, url): + """extract host and port from an URL string""" + if url.lower().startswith("rfc2217://"): url = url[10:] + try: + # is there a "path" (our options)? + if '/' in url: + # cut away options + url, options = url.split('/', 1) + # process options now, directly altering self + for option in options.split('/'): + if '=' in option: + option, value = option.split('=', 1) + else: + value = None + if option == 'logging': + logging.basicConfig() # XXX is that good to call it here? + self.logger = logging.getLogger('pySerial.rfc2217') + self.logger.setLevel(LOGGER_LEVELS[value]) + self.logger.debug('enabled logging') + elif option == 'ign_set_control': + self._ignore_set_control_answer = True + elif option == 'poll_modem': + self._poll_modem_state = True + elif option == 'timeout': + self._network_timeout = float(value) + else: + raise ValueError('unknown option: %r' % (option,)) + # get host and port + host, port = url.split(':', 1) # may raise ValueError because of unpacking + port = int(port) # and this if it's not a number + if not 0 <= port < 65536: raise ValueError("port not in range 0...65535") + except ValueError, e: + raise SerialException('expected a string in the form "[rfc2217://]:[/option[/option...]]": %s' % e) + return (host, port) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + if not self._isOpen: raise portNotOpenError + return self._read_buffer.qsize() + + def read(self, size=1): + """\ + Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read. + """ + if not self._isOpen: raise portNotOpenError + data = bytearray() + try: + while len(data) < size: + if self._thread is None: + raise SerialException('connection failed (reader thread died)') + data.append(self._read_buffer.get(True, self._timeout)) + except Queue.Empty: # -> timeout + pass + return bytes(data) + + def write(self, data): + """\ + Output the given string over the serial port. Can block if the + connection is blocked. May raise SerialException if the connection is + closed. + """ + if not self._isOpen: raise portNotOpenError + self._write_lock.acquire() + try: + try: + self._socket.sendall(to_bytes(data).replace(IAC, IAC_DOUBLED)) + except socket.error, e: + raise SerialException("connection failed (socket error): %s" % e) # XXX what exception if socket connection fails + finally: + self._write_lock.release() + return len(data) + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + self.rfc2217SendPurge(PURGE_RECEIVE_BUFFER) + # empty read buffer + while self._read_buffer.qsize(): + self._read_buffer.get(False) + + def flushOutput(self): + """\ + Clear output buffer, aborting the current output and + discarding all that is in the buffer. + """ + if not self._isOpen: raise portNotOpenError + self.rfc2217SendPurge(PURGE_TRANSMIT_BUFFER) + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given + duration.""" + if not self._isOpen: raise portNotOpenError + self.setBreak(True) + time.sleep(duration) + self.setBreak(False) + + def setBreak(self, level=True): + """\ + Set break: Controls TXD. When active, to transmitting is + possible. + """ + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('set BREAK to %s' % ('inactive', 'active')[bool(level)]) + if level: + self.rfc2217SetControl(SET_CONTROL_BREAK_ON) + else: + self.rfc2217SetControl(SET_CONTROL_BREAK_OFF) + + def setRTS(self, level=True): + """Set terminal status line: Request To Send.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('set RTS to %s' % ('inactive', 'active')[bool(level)]) + if level: + self.rfc2217SetControl(SET_CONTROL_RTS_ON) + else: + self.rfc2217SetControl(SET_CONTROL_RTS_OFF) + + def setDTR(self, level=True): + """Set terminal status line: Data Terminal Ready.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('set DTR to %s' % ('inactive', 'active')[bool(level)]) + if level: + self.rfc2217SetControl(SET_CONTROL_DTR_ON) + else: + self.rfc2217SetControl(SET_CONTROL_DTR_OFF) + + def getCTS(self): + """Read terminal status line: Clear To Send.""" + if not self._isOpen: raise portNotOpenError + return bool(self.getModemState() & MODEMSTATE_MASK_CTS) + + def getDSR(self): + """Read terminal status line: Data Set Ready.""" + if not self._isOpen: raise portNotOpenError + return bool(self.getModemState() & MODEMSTATE_MASK_DSR) + + def getRI(self): + """Read terminal status line: Ring Indicator.""" + if not self._isOpen: raise portNotOpenError + return bool(self.getModemState() & MODEMSTATE_MASK_RI) + + def getCD(self): + """Read terminal status line: Carrier Detect.""" + if not self._isOpen: raise portNotOpenError + return bool(self.getModemState() & MODEMSTATE_MASK_CD) + + # - - - platform specific - - - + # None so far + + # - - - RFC2217 specific - - - + + def _telnetReadLoop(self): + """read loop for the socket.""" + mode = M_NORMAL + suboption = None + try: + while self._socket is not None: + try: + data = self._socket.recv(1024) + except socket.timeout: + # just need to get out of recv form time to time to check if + # still alive + continue + except socket.error, e: + # connection fails -> terminate loop + if self.logger: + self.logger.debug("socket error in reader thread: %s" % (e,)) + break + if not data: break # lost connection + for byte in data: + if mode == M_NORMAL: + # interpret as command or as data + if byte == IAC: + mode = M_IAC_SEEN + else: + # store data in read buffer or sub option buffer + # depending on state + if suboption is not None: + suboption.append(byte) + else: + self._read_buffer.put(byte) + elif mode == M_IAC_SEEN: + if byte == IAC: + # interpret as command doubled -> insert character + # itself + if suboption is not None: + suboption.append(IAC) + else: + self._read_buffer.put(IAC) + mode = M_NORMAL + elif byte == SB: + # sub option start + suboption = bytearray() + mode = M_NORMAL + elif byte == SE: + # sub option end -> process it now + self._telnetProcessSubnegotiation(bytes(suboption)) + suboption = None + mode = M_NORMAL + elif byte in (DO, DONT, WILL, WONT): + # negotiation + telnet_command = byte + mode = M_NEGOTIATE + else: + # other telnet commands + self._telnetProcessCommand(byte) + mode = M_NORMAL + elif mode == M_NEGOTIATE: # DO, DONT, WILL, WONT was received, option now following + self._telnetNegotiateOption(telnet_command, byte) + mode = M_NORMAL + finally: + self._thread = None + if self.logger: + self.logger.debug("read thread terminated") + + # - incoming telnet commands and options + + def _telnetProcessCommand(self, command): + """Process commands other than DO, DONT, WILL, WONT.""" + # Currently none. RFC2217 only uses negotiation and subnegotiation. + if self.logger: + self.logger.warning("ignoring Telnet command: %r" % (command,)) + + def _telnetNegotiateOption(self, command, option): + """Process incoming DO, DONT, WILL, WONT.""" + # check our registered telnet options and forward command to them + # they know themselves if they have to answer or not + known = False + for item in self._telnet_options: + # can have more than one match! as some options are duplicated for + # 'us' and 'them' + if item.option == option: + item.process_incoming(command) + known = True + if not known: + # handle unknown options + # only answer to positive requests and deny them + if command == WILL or command == DO: + self.telnetSendOption((command == WILL and DONT or WONT), option) + if self.logger: + self.logger.warning("rejected Telnet option: %r" % (option,)) + + + def _telnetProcessSubnegotiation(self, suboption): + """Process subnegotiation, the data between IAC SB and IAC SE.""" + if suboption[0:1] == COM_PORT_OPTION: + if suboption[1:2] == SERVER_NOTIFY_LINESTATE and len(suboption) >= 3: + self._linestate = ord(suboption[2:3]) # ensure it is a number + if self.logger: + self.logger.info("NOTIFY_LINESTATE: %s" % self._linestate) + elif suboption[1:2] == SERVER_NOTIFY_MODEMSTATE and len(suboption) >= 3: + self._modemstate = ord(suboption[2:3]) # ensure it is a number + if self.logger: + self.logger.info("NOTIFY_MODEMSTATE: %s" % self._modemstate) + # update time when we think that a poll would make sense + self._modemstate_expires = time.time() + 0.3 + elif suboption[1:2] == FLOWCONTROL_SUSPEND: + self._remote_suspend_flow = True + elif suboption[1:2] == FLOWCONTROL_RESUME: + self._remote_suspend_flow = False + else: + for item in self._rfc2217_options.values(): + if item.ack_option == suboption[1:2]: + #~ print "processing COM_PORT_OPTION: %r" % list(suboption[1:]) + item.checkAnswer(bytes(suboption[2:])) + break + else: + if self.logger: + self.logger.warning("ignoring COM_PORT_OPTION: %r" % (suboption,)) + else: + if self.logger: + self.logger.warning("ignoring subnegotiation: %r" % (suboption,)) + + # - outgoing telnet commands and options + + def _internal_raw_write(self, data): + """internal socket write with no data escaping. used to send telnet stuff.""" + self._write_lock.acquire() + try: + self._socket.sendall(data) + finally: + self._write_lock.release() + + def telnetSendOption(self, action, option): + """Send DO, DONT, WILL, WONT.""" + self._internal_raw_write(to_bytes([IAC, action, option])) + + def rfc2217SendSubnegotiation(self, option, value=''): + """Subnegotiation of RFC2217 parameters.""" + value = value.replace(IAC, IAC_DOUBLED) + self._internal_raw_write(to_bytes([IAC, SB, COM_PORT_OPTION, option] + list(value) + [IAC, SE])) + + def rfc2217SendPurge(self, value): + item = self._rfc2217_options['purge'] + item.set(value) # transmit desired purge type + item.wait(self._network_timeout) # wait for acknowledge from the server + + def rfc2217SetControl(self, value): + item = self._rfc2217_options['control'] + item.set(value) # transmit desired control type + if self._ignore_set_control_answer: + # answers are ignored when option is set. compatibility mode for + # servers that answer, but not the expected one... (or no answer + # at all) i.e. sredird + time.sleep(0.1) # this helps getting the unit tests passed + else: + item.wait(self._network_timeout) # wait for acknowledge from the server + + def rfc2217FlowServerReady(self): + """\ + check if server is ready to receive data. block for some time when + not. + """ + #~ if self._remote_suspend_flow: + #~ wait--- + + def getModemState(self): + """\ + get last modem state (cached value. if value is "old", request a new + one. this cache helps that we don't issue to many requests when e.g. all + status lines, one after the other is queried by te user (getCTS, getDSR + etc.) + """ + # active modem state polling enabled? is the value fresh enough? + if self._poll_modem_state and self._modemstate_expires < time.time(): + if self.logger: + self.logger.debug('polling modem state') + # when it is older, request an update + self.rfc2217SendSubnegotiation(NOTIFY_MODEMSTATE) + timeout_time = time.time() + self._network_timeout + while time.time() < timeout_time: + time.sleep(0.05) # prevent 100% CPU load + # when expiration time is updated, it means that there is a new + # value + if self._modemstate_expires > time.time(): + if self.logger: + self.logger.warning('poll for modem state failed') + break + # even when there is a timeout, do not generate an error just + # return the last known value. this way we can support buggy + # servers that do not respond to polls, but send automatic + # updates. + if self._modemstate is not None: + if self.logger: + self.logger.debug('using cached modem state') + return self._modemstate + else: + # never received a notification from the server + raise SerialException("remote sends no NOTIFY_MODEMSTATE") + + +# assemble Serial class with the platform specific implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(RFC2217Serial, FileLike): + pass +else: + # io library present + class Serial(RFC2217Serial, io.RawIOBase): + pass + + +############################################################################# +# The following is code that helps implementing an RFC 2217 server. + +class PortManager(object): + """\ + This class manages the state of Telnet and RFC 2217. It needs a serial + instance and a connection to work with. Connection is expected to implement + a (thread safe) write function, that writes the string to the network. + """ + + def __init__(self, serial_port, connection, logger=None): + self.serial = serial_port + self.connection = connection + self.logger = logger + self._client_is_rfc2217 = False + + # filter state machine + self.mode = M_NORMAL + self.suboption = None + self.telnet_command = None + + # states for modem/line control events + self.modemstate_mask = 255 + self.last_modemstate = None + self.linstate_mask = 0 + + # all supported telnet options + self._telnet_options = [ + TelnetOption(self, 'ECHO', ECHO, WILL, WONT, DO, DONT, REQUESTED), + TelnetOption(self, 'we-SGA', SGA, WILL, WONT, DO, DONT, REQUESTED), + TelnetOption(self, 'they-SGA', SGA, DO, DONT, WILL, WONT, INACTIVE), + TelnetOption(self, 'we-BINARY', BINARY, WILL, WONT, DO, DONT, INACTIVE), + TelnetOption(self, 'they-BINARY', BINARY, DO, DONT, WILL, WONT, REQUESTED), + TelnetOption(self, 'we-RFC2217', COM_PORT_OPTION, WILL, WONT, DO, DONT, REQUESTED, self._client_ok), + TelnetOption(self, 'they-RFC2217', COM_PORT_OPTION, DO, DONT, WILL, WONT, INACTIVE, self._client_ok), + ] + + # negotiate Telnet/RFC2217 -> send initial requests + if self.logger: + self.logger.debug("requesting initial Telnet/RFC 2217 options") + for option in self._telnet_options: + if option.state is REQUESTED: + self.telnetSendOption(option.send_yes, option.option) + # issue 1st modem state notification + + def _client_ok(self): + """\ + callback of telnet option. it gets called when option is activated. + this one here is used to detect when the client agrees on RFC 2217. a + flag is set so that other functions like check_modem_lines know if the + client is ok. + """ + # The callback is used for we and they so if one party agrees, we're + # already happy. it seems not all servers do the negotiation correctly + # and i guess there are incorrect clients too.. so be happy if client + # answers one or the other positively. + self._client_is_rfc2217 = True + if self.logger: + self.logger.info("client accepts RFC 2217") + # this is to ensure that the client gets a notification, even if there + # was no change + self.check_modem_lines(force_notification=True) + + # - outgoing telnet commands and options + + def telnetSendOption(self, action, option): + """Send DO, DONT, WILL, WONT.""" + self.connection.write(to_bytes([IAC, action, option])) + + def rfc2217SendSubnegotiation(self, option, value=''): + """Subnegotiation of RFC 2217 parameters.""" + value = value.replace(IAC, IAC_DOUBLED) + self.connection.write(to_bytes([IAC, SB, COM_PORT_OPTION, option] + list(value) + [IAC, SE])) + + # - check modem lines, needs to be called periodically from user to + # establish polling + + def check_modem_lines(self, force_notification=False): + modemstate = ( + (self.serial.getCTS() and MODEMSTATE_MASK_CTS) | + (self.serial.getDSR() and MODEMSTATE_MASK_DSR) | + (self.serial.getRI() and MODEMSTATE_MASK_RI) | + (self.serial.getCD() and MODEMSTATE_MASK_CD) + ) + # check what has changed + deltas = modemstate ^ (self.last_modemstate or 0) # when last is None -> 0 + if deltas & MODEMSTATE_MASK_CTS: + modemstate |= MODEMSTATE_MASK_CTS_CHANGE + if deltas & MODEMSTATE_MASK_DSR: + modemstate |= MODEMSTATE_MASK_DSR_CHANGE + if deltas & MODEMSTATE_MASK_RI: + modemstate |= MODEMSTATE_MASK_RI_CHANGE + if deltas & MODEMSTATE_MASK_CD: + modemstate |= MODEMSTATE_MASK_CD_CHANGE + # if new state is different and the mask allows this change, send + # notification. suppress notifications when client is not rfc2217 + if modemstate != self.last_modemstate or force_notification: + if (self._client_is_rfc2217 and (modemstate & self.modemstate_mask)) or force_notification: + self.rfc2217SendSubnegotiation( + SERVER_NOTIFY_MODEMSTATE, + to_bytes([modemstate & self.modemstate_mask]) + ) + if self.logger: + self.logger.info("NOTIFY_MODEMSTATE: %s" % (modemstate,)) + # save last state, but forget about deltas. + # otherwise it would also notify about changing deltas which is + # probably not very useful + self.last_modemstate = modemstate & 0xf0 + + # - outgoing data escaping + + def escape(self, data): + """\ + this generator function is for the user. all outgoing data has to be + properly escaped, so that no IAC character in the data stream messes up + the Telnet state machine in the server. + + socket.sendall(escape(data)) + """ + for byte in data: + if byte == IAC: + yield IAC + yield IAC + else: + yield byte + + # - incoming data filter + + def filter(self, data): + """\ + handle a bunch of incoming bytes. this is a generator. it will yield + all characters not of interest for Telnet/RFC 2217. + + The idea is that the reader thread pushes data from the socket through + this filter: + + for byte in filter(socket.recv(1024)): + # do things like CR/LF conversion/whatever + # and write data to the serial port + serial.write(byte) + + (socket error handling code left as exercise for the reader) + """ + for byte in data: + if self.mode == M_NORMAL: + # interpret as command or as data + if byte == IAC: + self.mode = M_IAC_SEEN + else: + # store data in sub option buffer or pass it to our + # consumer depending on state + if self.suboption is not None: + self.suboption.append(byte) + else: + yield byte + elif self.mode == M_IAC_SEEN: + if byte == IAC: + # interpret as command doubled -> insert character + # itself + if self.suboption is not None: + self.suboption.append(byte) + else: + yield byte + self.mode = M_NORMAL + elif byte == SB: + # sub option start + self.suboption = bytearray() + self.mode = M_NORMAL + elif byte == SE: + # sub option end -> process it now + self._telnetProcessSubnegotiation(bytes(self.suboption)) + self.suboption = None + self.mode = M_NORMAL + elif byte in (DO, DONT, WILL, WONT): + # negotiation + self.telnet_command = byte + self.mode = M_NEGOTIATE + else: + # other telnet commands + self._telnetProcessCommand(byte) + self.mode = M_NORMAL + elif self.mode == M_NEGOTIATE: # DO, DONT, WILL, WONT was received, option now following + self._telnetNegotiateOption(self.telnet_command, byte) + self.mode = M_NORMAL + + # - incoming telnet commands and options + + def _telnetProcessCommand(self, command): + """Process commands other than DO, DONT, WILL, WONT.""" + # Currently none. RFC2217 only uses negotiation and subnegotiation. + if self.logger: + self.logger.warning("ignoring Telnet command: %r" % (command,)) + + def _telnetNegotiateOption(self, command, option): + """Process incoming DO, DONT, WILL, WONT.""" + # check our registered telnet options and forward command to them + # they know themselves if they have to answer or not + known = False + for item in self._telnet_options: + # can have more than one match! as some options are duplicated for + # 'us' and 'them' + if item.option == option: + item.process_incoming(command) + known = True + if not known: + # handle unknown options + # only answer to positive requests and deny them + if command == WILL or command == DO: + self.telnetSendOption((command == WILL and DONT or WONT), option) + if self.logger: + self.logger.warning("rejected Telnet option: %r" % (option,)) + + + def _telnetProcessSubnegotiation(self, suboption): + """Process subnegotiation, the data between IAC SB and IAC SE.""" + if suboption[0:1] == COM_PORT_OPTION: + if self.logger: + self.logger.debug('received COM_PORT_OPTION: %r' % (suboption,)) + if suboption[1:2] == SET_BAUDRATE: + backup = self.serial.baudrate + try: + (baudrate,) = struct.unpack("!I", suboption[2:6]) + if baudrate != 0: + self.serial.baudrate = baudrate + except ValueError, e: + if self.logger: + self.logger.error("failed to set baud rate: %s" % (e,)) + self.serial.baudrate = backup + else: + if self.logger: + self.logger.info("%s baud rate: %s" % (baudrate and 'set' or 'get', self.serial.baudrate)) + self.rfc2217SendSubnegotiation(SERVER_SET_BAUDRATE, struct.pack("!I", self.serial.baudrate)) + elif suboption[1:2] == SET_DATASIZE: + backup = self.serial.bytesize + try: + (datasize,) = struct.unpack("!B", suboption[2:3]) + if datasize != 0: + self.serial.bytesize = datasize + except ValueError, e: + if self.logger: + self.logger.error("failed to set data size: %s" % (e,)) + self.serial.bytesize = backup + else: + if self.logger: + self.logger.info("%s data size: %s" % (datasize and 'set' or 'get', self.serial.bytesize)) + self.rfc2217SendSubnegotiation(SERVER_SET_DATASIZE, struct.pack("!B", self.serial.bytesize)) + elif suboption[1:2] == SET_PARITY: + backup = self.serial.parity + try: + parity = struct.unpack("!B", suboption[2:3])[0] + if parity != 0: + self.serial.parity = RFC2217_REVERSE_PARITY_MAP[parity] + except ValueError, e: + if self.logger: + self.logger.error("failed to set parity: %s" % (e,)) + self.serial.parity = backup + else: + if self.logger: + self.logger.info("%s parity: %s" % (parity and 'set' or 'get', self.serial.parity)) + self.rfc2217SendSubnegotiation( + SERVER_SET_PARITY, + struct.pack("!B", RFC2217_PARITY_MAP[self.serial.parity]) + ) + elif suboption[1:2] == SET_STOPSIZE: + backup = self.serial.stopbits + try: + stopbits = struct.unpack("!B", suboption[2:3])[0] + if stopbits != 0: + self.serial.stopbits = RFC2217_REVERSE_STOPBIT_MAP[stopbits] + except ValueError, e: + if self.logger: + self.logger.error("failed to set stop bits: %s" % (e,)) + self.serial.stopbits = backup + else: + if self.logger: + self.logger.info("%s stop bits: %s" % (stopbits and 'set' or 'get', self.serial.stopbits)) + self.rfc2217SendSubnegotiation( + SERVER_SET_STOPSIZE, + struct.pack("!B", RFC2217_STOPBIT_MAP[self.serial.stopbits]) + ) + elif suboption[1:2] == SET_CONTROL: + if suboption[2:3] == SET_CONTROL_REQ_FLOW_SETTING: + if self.serial.xonxoff: + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_SW_FLOW_CONTROL) + elif self.serial.rtscts: + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_HW_FLOW_CONTROL) + else: + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_NO_FLOW_CONTROL) + elif suboption[2:3] == SET_CONTROL_USE_NO_FLOW_CONTROL: + self.serial.xonxoff = False + self.serial.rtscts = False + if self.logger: + self.logger.info("changed flow control to None") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_NO_FLOW_CONTROL) + elif suboption[2:3] == SET_CONTROL_USE_SW_FLOW_CONTROL: + self.serial.xonxoff = True + if self.logger: + self.logger.info("changed flow control to XON/XOFF") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_SW_FLOW_CONTROL) + elif suboption[2:3] == SET_CONTROL_USE_HW_FLOW_CONTROL: + self.serial.rtscts = True + if self.logger: + self.logger.info("changed flow control to RTS/CTS") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_HW_FLOW_CONTROL) + elif suboption[2:3] == SET_CONTROL_REQ_BREAK_STATE: + if self.logger: + self.logger.warning("requested break state - not implemented") + pass # XXX needs cached value + elif suboption[2:3] == SET_CONTROL_BREAK_ON: + self.serial.setBreak(True) + if self.logger: + self.logger.info("changed BREAK to active") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_BREAK_ON) + elif suboption[2:3] == SET_CONTROL_BREAK_OFF: + self.serial.setBreak(False) + if self.logger: + self.logger.info("changed BREAK to inactive") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_BREAK_OFF) + elif suboption[2:3] == SET_CONTROL_REQ_DTR: + if self.logger: + self.logger.warning("requested DTR state - not implemented") + pass # XXX needs cached value + elif suboption[2:3] == SET_CONTROL_DTR_ON: + self.serial.setDTR(True) + if self.logger: + self.logger.info("changed DTR to active") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_DTR_ON) + elif suboption[2:3] == SET_CONTROL_DTR_OFF: + self.serial.setDTR(False) + if self.logger: + self.logger.info("changed DTR to inactive") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_DTR_OFF) + elif suboption[2:3] == SET_CONTROL_REQ_RTS: + if self.logger: + self.logger.warning("requested RTS state - not implemented") + pass # XXX needs cached value + #~ self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_RTS_ON) + elif suboption[2:3] == SET_CONTROL_RTS_ON: + self.serial.setRTS(True) + if self.logger: + self.logger.info("changed RTS to active") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_RTS_ON) + elif suboption[2:3] == SET_CONTROL_RTS_OFF: + self.serial.setRTS(False) + if self.logger: + self.logger.info("changed RTS to inactive") + self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_RTS_OFF) + #~ elif suboption[2:3] == SET_CONTROL_REQ_FLOW_SETTING_IN: + #~ elif suboption[2:3] == SET_CONTROL_USE_NO_FLOW_CONTROL_IN: + #~ elif suboption[2:3] == SET_CONTROL_USE_SW_FLOW_CONTOL_IN: + #~ elif suboption[2:3] == SET_CONTROL_USE_HW_FLOW_CONTOL_IN: + #~ elif suboption[2:3] == SET_CONTROL_USE_DCD_FLOW_CONTROL: + #~ elif suboption[2:3] == SET_CONTROL_USE_DTR_FLOW_CONTROL: + #~ elif suboption[2:3] == SET_CONTROL_USE_DSR_FLOW_CONTROL: + elif suboption[1:2] == NOTIFY_LINESTATE: + # client polls for current state + self.rfc2217SendSubnegotiation( + SERVER_NOTIFY_LINESTATE, + to_bytes([0]) # sorry, nothing like that implemented + ) + elif suboption[1:2] == NOTIFY_MODEMSTATE: + if self.logger: + self.logger.info("request for modem state") + # client polls for current state + self.check_modem_lines(force_notification=True) + elif suboption[1:2] == FLOWCONTROL_SUSPEND: + if self.logger: + self.logger.info("suspend") + self._remote_suspend_flow = True + elif suboption[1:2] == FLOWCONTROL_RESUME: + if self.logger: + self.logger.info("resume") + self._remote_suspend_flow = False + elif suboption[1:2] == SET_LINESTATE_MASK: + self.linstate_mask = ord(suboption[2:3]) # ensure it is a number + if self.logger: + self.logger.info("line state mask: 0x%02x" % (self.linstate_mask,)) + elif suboption[1:2] == SET_MODEMSTATE_MASK: + self.modemstate_mask = ord(suboption[2:3]) # ensure it is a number + if self.logger: + self.logger.info("modem state mask: 0x%02x" % (self.modemstate_mask,)) + elif suboption[1:2] == PURGE_DATA: + if suboption[2:3] == PURGE_RECEIVE_BUFFER: + self.serial.flushInput() + if self.logger: + self.logger.info("purge in") + self.rfc2217SendSubnegotiation(SERVER_PURGE_DATA, PURGE_RECEIVE_BUFFER) + elif suboption[2:3] == PURGE_TRANSMIT_BUFFER: + self.serial.flushOutput() + if self.logger: + self.logger.info("purge out") + self.rfc2217SendSubnegotiation(SERVER_PURGE_DATA, PURGE_TRANSMIT_BUFFER) + elif suboption[2:3] == PURGE_BOTH_BUFFERS: + self.serial.flushInput() + self.serial.flushOutput() + if self.logger: + self.logger.info("purge both") + self.rfc2217SendSubnegotiation(SERVER_PURGE_DATA, PURGE_BOTH_BUFFERS) + else: + if self.logger: + self.logger.error("undefined PURGE_DATA: %r" % list(suboption[2:])) + else: + if self.logger: + self.logger.error("undefined COM_PORT_OPTION: %r" % list(suboption[1:])) + else: + if self.logger: + self.logger.warning("unknown subnegotiation: %r" % (suboption,)) + + +# simple client test +if __name__ == '__main__': + import sys + s = Serial('rfc2217://localhost:7000', 115200) + sys.stdout.write('%s\n' % s) + + #~ s.baudrate = 1898 + + sys.stdout.write("write...\n") + s.write("hello\n") + s.flush() + sys.stdout.write("read: %s\n" % s.read(5)) + + #~ s.baudrate = 19200 + #~ s.databits = 7 + s.close() diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialcli.py b/Source/Inkscape/EggBotControl.Original/serial/serialcli.py new file mode 100644 index 0000000..19169a3 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialcli.py @@ -0,0 +1,273 @@ +#! python +# Python Serial Port Extension for Win32, Linux, BSD, Jython and .NET/Mono +# serial driver for .NET/Mono (IronPython), .NET >= 2 +# see __init__.py +# +# (C) 2008 Chris Liechti +# this is distributed under a free software license, see license.txt + +import clr +import System +import System.IO.Ports +from serial.serialutil import * + + +def device(portnum): + """Turn a port number into a device name""" + return System.IO.Ports.SerialPort.GetPortNames()[portnum] + + +# must invoke function with byte array, make a helper to convert strings +# to byte arrays +sab = System.Array[System.Byte] +def as_byte_array(string): + return sab([ord(x) for x in string]) # XXX will require adaption when run with a 3.x compatible IronPython + +class IronSerial(SerialBase): + """Serial port implementation for .NET/Mono.""" + + BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, + 9600, 19200, 38400, 57600, 115200) + + def open(self): + """Open port with current settings. This may throw a SerialException + if the port cannot be opened.""" + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + if self._isOpen: + raise SerialException("Port is already open.") + try: + self._port_handle = System.IO.Ports.SerialPort(self.portstr) + except Exception, msg: + self._port_handle = None + raise SerialException("could not open port %s: %s" % (self.portstr, msg)) + + self._reconfigurePort() + self._port_handle.Open() + self._isOpen = True + if not self._rtscts: + self.setRTS(True) + self.setDTR(True) + self.flushInput() + self.flushOutput() + + def _reconfigurePort(self): + """Set communication parameters on opened port.""" + if not self._port_handle: + raise SerialException("Can only operate on a valid port handle") + + #~ self._port_handle.ReceivedBytesThreshold = 1 + + if self._timeout is None: + self._port_handle.ReadTimeout = System.IO.Ports.SerialPort.InfiniteTimeout + else: + self._port_handle.ReadTimeout = int(self._timeout*1000) + + # if self._timeout != 0 and self._interCharTimeout is not None: + # timeouts = (int(self._interCharTimeout * 1000),) + timeouts[1:] + + if self._writeTimeout is None: + self._port_handle.WriteTimeout = System.IO.Ports.SerialPort.InfiniteTimeout + else: + self._port_handle.WriteTimeout = int(self._writeTimeout*1000) + + + # Setup the connection info. + try: + self._port_handle.BaudRate = self._baudrate + except IOError, e: + # catch errors from illegal baudrate settings + raise ValueError(str(e)) + + if self._bytesize == FIVEBITS: + self._port_handle.DataBits = 5 + elif self._bytesize == SIXBITS: + self._port_handle.DataBits = 6 + elif self._bytesize == SEVENBITS: + self._port_handle.DataBits = 7 + elif self._bytesize == EIGHTBITS: + self._port_handle.DataBits = 8 + else: + raise ValueError("Unsupported number of data bits: %r" % self._bytesize) + + if self._parity == PARITY_NONE: + self._port_handle.Parity = getattr(System.IO.Ports.Parity, 'None') # reserved keyword in Py3k + elif self._parity == PARITY_EVEN: + self._port_handle.Parity = System.IO.Ports.Parity.Even + elif self._parity == PARITY_ODD: + self._port_handle.Parity = System.IO.Ports.Parity.Odd + elif self._parity == PARITY_MARK: + self._port_handle.Parity = System.IO.Ports.Parity.Mark + elif self._parity == PARITY_SPACE: + self._port_handle.Parity = System.IO.Ports.Parity.Space + else: + raise ValueError("Unsupported parity mode: %r" % self._parity) + + if self._stopbits == STOPBITS_ONE: + self._port_handle.StopBits = System.IO.Ports.StopBits.One + elif self._stopbits == STOPBITS_ONE_POINT_FIVE: + self._port_handle.StopBits = System.IO.Ports.StopBits.OnePointFive + elif self._stopbits == STOPBITS_TWO: + self._port_handle.StopBits = System.IO.Ports.StopBits.Two + else: + raise ValueError("Unsupported number of stop bits: %r" % self._stopbits) + + if self._rtscts and self._xonxoff: + self._port_handle.Handshake = System.IO.Ports.Handshake.RequestToSendXOnXOff + elif self._rtscts: + self._port_handle.Handshake = System.IO.Ports.Handshake.RequestToSend + elif self._xonxoff: + self._port_handle.Handshake = System.IO.Ports.Handshake.XOnXOff + else: + self._port_handle.Handshake = getattr(System.IO.Ports.Handshake, 'None') # reserved keyword in Py3k + + #~ def __del__(self): + #~ self.close() + + def close(self): + """Close port""" + if self._isOpen: + if self._port_handle: + try: + self._port_handle.Close() + except System.IO.Ports.InvalidOperationException: + # ignore errors. can happen for unplugged USB serial devices + pass + self._port_handle = None + self._isOpen = False + + def makeDeviceName(self, port): + try: + return device(port) + except TypeError, e: + raise SerialException(str(e)) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + if not self._port_handle: raise portNotOpenError + return self._port_handle.BytesToRead + + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if not self._port_handle: raise portNotOpenError + # must use single byte reads as this is the only way to read + # without applying encodings + data = bytearray() + while size: + try: + data.append(self._port_handle.ReadByte()) + except System.TimeoutException, e: + break + else: + size -= 1 + return bytes(data) + + def write(self, data): + """Output the given string over the serial port.""" + if not self._port_handle: raise portNotOpenError + if not isinstance(data, (bytes, bytearray)): + raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data))) + try: + # must call overloaded method with byte array argument + # as this is the only one not applying encodings + self._port_handle.Write(as_byte_array(data), 0, len(data)) + except System.TimeoutException, e: + raise writeTimeoutError + return len(data) + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self._port_handle: raise portNotOpenError + self._port_handle.DiscardInBuffer() + + def flushOutput(self): + """Clear output buffer, aborting the current output and + discarding all that is in the buffer.""" + if not self._port_handle: raise portNotOpenError + self._port_handle.DiscardOutBuffer() + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given duration.""" + if not self._port_handle: raise portNotOpenError + import time + self._port_handle.BreakState = True + time.sleep(duration) + self._port_handle.BreakState = False + + def setBreak(self, level=True): + """Set break: Controls TXD. When active, to transmitting is possible.""" + if not self._port_handle: raise portNotOpenError + self._port_handle.BreakState = bool(level) + + def setRTS(self, level=True): + """Set terminal status line: Request To Send""" + if not self._port_handle: raise portNotOpenError + self._port_handle.RtsEnable = bool(level) + + def setDTR(self, level=True): + """Set terminal status line: Data Terminal Ready""" + if not self._port_handle: raise portNotOpenError + self._port_handle.DtrEnable = bool(level) + + def getCTS(self): + """Read terminal status line: Clear To Send""" + if not self._port_handle: raise portNotOpenError + return self._port_handle.CtsHolding + + def getDSR(self): + """Read terminal status line: Data Set Ready""" + if not self._port_handle: raise portNotOpenError + return self._port_handle.DsrHolding + + def getRI(self): + """Read terminal status line: Ring Indicator""" + if not self._port_handle: raise portNotOpenError + #~ return self._port_handle.XXX + return False #XXX an error would be better + + def getCD(self): + """Read terminal status line: Carrier Detect""" + if not self._port_handle: raise portNotOpenError + return self._port_handle.CDHolding + + # - - platform specific - - - - + # none + + +# assemble Serial class with the platform specific implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(IronSerial, FileLike): + pass +else: + # io library present + class Serial(IronSerial, io.RawIOBase): + pass + + +# Nur Testfunktion!! +if __name__ == '__main__': + import sys + + s = Serial(0) + sys.stdio.write('%s\n' % s) + + s = Serial() + sys.stdio.write('%s\n' % s) + + + s.baudrate = 19200 + s.databits = 7 + s.close() + s.port = 0 + s.open() + sys.stdio.write('%s\n' % s) + diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialjava.py b/Source/Inkscape/EggBotControl.Original/serial/serialjava.py new file mode 100644 index 0000000..46a78f8 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialjava.py @@ -0,0 +1,262 @@ +#!jython +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# module for serial IO for Jython and JavaComm +# see __init__.py +# +# (C) 2002-2008 Chris Liechti +# this is distributed under a free software license, see license.txt + +from serial.serialutil import * + +def my_import(name): + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + + +def detect_java_comm(names): + """try given list of modules and return that imports""" + for name in names: + try: + mod = my_import(name) + mod.SerialPort + return mod + except (ImportError, AttributeError): + pass + raise ImportError("No Java Communications API implementation found") + + +# Java Communications API implementations +# http://mho.republika.pl/java/comm/ + +comm = detect_java_comm([ + 'javax.comm', # Sun/IBM + 'gnu.io', # RXTX +]) + + +def device(portnumber): + """Turn a port number into a device name""" + enum = comm.CommPortIdentifier.getPortIdentifiers() + ports = [] + while enum.hasMoreElements(): + el = enum.nextElement() + if el.getPortType() == comm.CommPortIdentifier.PORT_SERIAL: + ports.append(el) + return ports[portnumber].getName() + + +class JavaSerial(SerialBase): + """Serial port class, implemented with Java Communications API and + thus usable with jython and the appropriate java extension.""" + + def open(self): + """Open port with current settings. This may throw a SerialException + if the port cannot be opened.""" + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + if self._isOpen: + raise SerialException("Port is already open.") + if type(self._port) == type(''): # strings are taken directly + portId = comm.CommPortIdentifier.getPortIdentifier(self._port) + else: + portId = comm.CommPortIdentifier.getPortIdentifier(device(self._port)) # numbers are transformed to a comport id obj + try: + self.sPort = portId.open("python serial module", 10) + except Exception, msg: + self.sPort = None + raise SerialException("Could not open port: %s" % msg) + self._reconfigurePort() + self._instream = self.sPort.getInputStream() + self._outstream = self.sPort.getOutputStream() + self._isOpen = True + + def _reconfigurePort(self): + """Set communication parameters on opened port.""" + if not self.sPort: + raise SerialException("Can only operate on a valid port handle") + + self.sPort.enableReceiveTimeout(30) + if self._bytesize == FIVEBITS: + jdatabits = comm.SerialPort.DATABITS_5 + elif self._bytesize == SIXBITS: + jdatabits = comm.SerialPort.DATABITS_6 + elif self._bytesize == SEVENBITS: + jdatabits = comm.SerialPort.DATABITS_7 + elif self._bytesize == EIGHTBITS: + jdatabits = comm.SerialPort.DATABITS_8 + else: + raise ValueError("unsupported bytesize: %r" % self._bytesize) + + if self._stopbits == STOPBITS_ONE: + jstopbits = comm.SerialPort.STOPBITS_1 + elif stopbits == STOPBITS_ONE_POINT_FIVE: + self._jstopbits = comm.SerialPort.STOPBITS_1_5 + elif self._stopbits == STOPBITS_TWO: + jstopbits = comm.SerialPort.STOPBITS_2 + else: + raise ValueError("unsupported number of stopbits: %r" % self._stopbits) + + if self._parity == PARITY_NONE: + jparity = comm.SerialPort.PARITY_NONE + elif self._parity == PARITY_EVEN: + jparity = comm.SerialPort.PARITY_EVEN + elif self._parity == PARITY_ODD: + jparity = comm.SerialPort.PARITY_ODD + elif self._parity == PARITY_MARK: + jparity = comm.SerialPort.PARITY_MARK + elif self._parity == PARITY_SPACE: + jparity = comm.SerialPort.PARITY_SPACE + else: + raise ValueError("unsupported parity type: %r" % self._parity) + + jflowin = jflowout = 0 + if self._rtscts: + jflowin |= comm.SerialPort.FLOWCONTROL_RTSCTS_IN + jflowout |= comm.SerialPort.FLOWCONTROL_RTSCTS_OUT + if self._xonxoff: + jflowin |= comm.SerialPort.FLOWCONTROL_XONXOFF_IN + jflowout |= comm.SerialPort.FLOWCONTROL_XONXOFF_OUT + + self.sPort.setSerialPortParams(self._baudrate, jdatabits, jstopbits, jparity) + self.sPort.setFlowControlMode(jflowin | jflowout) + + if self._timeout >= 0: + self.sPort.enableReceiveTimeout(self._timeout*1000) + else: + self.sPort.disableReceiveTimeout() + + def close(self): + """Close port""" + if self._isOpen: + if self.sPort: + self._instream.close() + self._outstream.close() + self.sPort.close() + self.sPort = None + self._isOpen = False + + def makeDeviceName(self, port): + return device(port) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + if not self.sPort: raise portNotOpenError + return self._instream.available() + + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if not self.sPort: raise portNotOpenError + read = bytearray() + if size > 0: + while len(read) < size: + x = self._instream.read() + if x == -1: + if self.timeout >= 0: + break + else: + read.append(x) + return bytes(read) + + def write(self, data): + """Output the given string over the serial port.""" + if not self.sPort: raise portNotOpenError + if not isinstance(data, (bytes, bytearray)): + raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data))) + self._outstream.write(data) + return len(data) + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self.sPort: raise portNotOpenError + self._instream.skip(self._instream.available()) + + def flushOutput(self): + """Clear output buffer, aborting the current output and + discarding all that is in the buffer.""" + if not self.sPort: raise portNotOpenError + self._outstream.flush() + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given duration.""" + if not self.sPort: raise portNotOpenError + self.sPort.sendBreak(duration*1000.0) + + def setBreak(self, level=1): + """Set break: Controls TXD. When active, to transmitting is possible.""" + if self.fd is None: raise portNotOpenError + raise SerialException("The setBreak function is not implemented in java.") + + def setRTS(self, level=1): + """Set terminal status line: Request To Send""" + if not self.sPort: raise portNotOpenError + self.sPort.setRTS(level) + + def setDTR(self, level=1): + """Set terminal status line: Data Terminal Ready""" + if not self.sPort: raise portNotOpenError + self.sPort.setDTR(level) + + def getCTS(self): + """Read terminal status line: Clear To Send""" + if not self.sPort: raise portNotOpenError + self.sPort.isCTS() + + def getDSR(self): + """Read terminal status line: Data Set Ready""" + if not self.sPort: raise portNotOpenError + self.sPort.isDSR() + + def getRI(self): + """Read terminal status line: Ring Indicator""" + if not self.sPort: raise portNotOpenError + self.sPort.isRI() + + def getCD(self): + """Read terminal status line: Carrier Detect""" + if not self.sPort: raise portNotOpenError + self.sPort.isCD() + + +# assemble Serial class with the platform specific implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(JavaSerial, FileLike): + pass +else: + # io library present + class Serial(JavaSerial, io.RawIOBase): + pass + + +if __name__ == '__main__': + s = Serial(0, + baudrate=19200, # baudrate + bytesize=EIGHTBITS, # number of databits + parity=PARITY_EVEN, # enable parity checking + stopbits=STOPBITS_ONE, # number of stopbits + timeout=3, # set a timeout value, None for waiting forever + xonxoff=0, # enable software flow control + rtscts=0, # enable RTS/CTS flow control + ) + s.setRTS(1) + s.setDTR(1) + s.flushInput() + s.flushOutput() + s.write('hello') + sys.stdio.write('%r\n' % s.read(5)) + sys.stdio.write('%s\n' % s.inWaiting()) + del s + + diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialposix.py b/Source/Inkscape/EggBotControl.Original/serial/serialposix.py new file mode 100644 index 0000000..b9b4b28 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialposix.py @@ -0,0 +1,703 @@ +#!/usr/bin/env python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# module for serial IO for POSIX compatible systems, like Linux +# see __init__.py +# +# (C) 2001-2010 Chris Liechti +# this is distributed under a free software license, see license.txt +# +# parts based on code from Grant B. Edwards : +# ftp://ftp.visi.com/users/grante/python/PosixSerial.py +# +# references: http://www.easysw.com/~mike/serial/serial.html + +import sys, os, fcntl, termios, struct, select, errno, time +from serial.serialutil import * + +# Do check the Python version as some constants have moved. +if (sys.hexversion < 0x020100f0): + import TERMIOS +else: + TERMIOS = termios + +if (sys.hexversion < 0x020200f0): + import FCNTL +else: + FCNTL = fcntl + +# try to detect the OS so that a device can be selected... +# this code block should supply a device() and set_special_baudrate() function +# for the platform +plat = sys.platform.lower() + +if plat[:5] == 'linux': # Linux (confirmed) + + def device(port): + return '/dev/ttyS%d' % port + + TCGETS2 = 0x802C542A + TCSETS2 = 0x402C542B + BOTHER = 0o010000 + + def set_special_baudrate(port, baudrate): + # right size is 44 on x86_64, allow for some growth + import array + buf = array.array('i', [0] * 64) + + try: + # get serial_struct + FCNTL.ioctl(port.fd, TCGETS2, buf) + # set custom speed + buf[2] &= ~TERMIOS.CBAUD + buf[2] |= BOTHER + buf[9] = buf[10] = baudrate + + # set serial_struct + res = FCNTL.ioctl(port.fd, TCSETS2, buf) + except IOError, e: + raise ValueError('Failed to set custom baud rate (%s): %s' % (baudrate, e)) + + baudrate_constants = { + 0: 0000000, # hang up + 50: 0000001, + 75: 0000002, + 110: 0000003, + 134: 0000004, + 150: 0000005, + 200: 0000006, + 300: 0000007, + 600: 0000010, + 1200: 0000011, + 1800: 0000012, + 2400: 0000013, + 4800: 0000014, + 9600: 0000015, + 19200: 0000016, + 38400: 0000017, + 57600: 0010001, + 115200: 0010002, + 230400: 0010003, + 460800: 0010004, + 500000: 0010005, + 576000: 0010006, + 921600: 0010007, + 1000000: 0010010, + 1152000: 0010011, + 1500000: 0010012, + 2000000: 0010013, + 2500000: 0010014, + 3000000: 0010015, + 3500000: 0010016, + 4000000: 0010017 + } + +elif plat == 'cygwin': # cygwin/win32 (confirmed) + + def device(port): + return '/dev/com%d' % (port + 1) + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = { + 128000: 0x01003, + 256000: 0x01005, + 500000: 0x01007, + 576000: 0x01008, + 921600: 0x01009, + 1000000: 0x0100a, + 1152000: 0x0100b, + 1500000: 0x0100c, + 2000000: 0x0100d, + 2500000: 0x0100e, + 3000000: 0x0100f + } + +elif plat[:7] == 'openbsd': # OpenBSD + + def device(port): + return '/dev/cua%02d' % port + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +elif plat[:3] == 'bsd' or \ + plat[:7] == 'freebsd': + + def device(port): + return '/dev/cuad%d' % port + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +elif plat[:6] == 'darwin': # OS X + + version = os.uname()[2].split('.') + # Tiger or above can support arbitrary serial speeds + if int(version[0]) >= 8: + def set_special_baudrate(port, baudrate): + # use IOKit-specific call to set up high speeds + import array, fcntl + buf = array.array('i', [baudrate]) + IOSSIOSPEED = 0x80045402 #_IOW('T', 2, speed_t) + fcntl.ioctl(port.fd, IOSSIOSPEED, buf, 1) + else: # version < 8 + def set_special_baudrate(port, baudrate): + raise ValueError("baud rate not supported") + + def device(port): + return '/dev/cuad%d' % port + + baudrate_constants = {} + + +elif plat[:6] == 'netbsd': # NetBSD 1.6 testing by Erk + + def device(port): + return '/dev/dty%02d' % port + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +elif plat[:4] == 'irix': # IRIX (partially tested) + + def device(port): + return '/dev/ttyf%d' % (port+1) #XXX different device names depending on flow control + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +elif plat[:2] == 'hp': # HP-UX (not tested) + + def device(port): + return '/dev/tty%dp0' % (port+1) + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +elif plat[:5] == 'sunos': # Solaris/SunOS (confirmed) + + def device(port): + return '/dev/tty%c' % (ord('a')+port) + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +elif plat[:3] == 'aix': # AIX + + def device(port): + return '/dev/tty%d' % (port) + + def set_special_baudrate(port, baudrate): + raise ValueError("sorry don't know how to handle non standard baud rate on this platform") + + baudrate_constants = {} + +else: + # platform detection has failed... + sys.stderr.write("""\ +don't know how to number ttys on this system. +! Use an explicit path (eg /dev/ttyS1) or send this information to +! the author of this module: + +sys.platform = %r +os.name = %r +serialposix.py version = %s + +also add the device name of the serial port and where the +counting starts for the first serial port. +e.g. 'first serial port: /dev/ttyS0' +and with a bit luck you can get this module running... +""" % (sys.platform, os.name, VERSION)) + # no exception, just continue with a brave attempt to build a device name + # even if the device name is not correct for the platform it has chances + # to work using a string with the real device name as port parameter. + def device(portum): + return '/dev/ttyS%d' % portnum + def set_special_baudrate(port, baudrate): + raise SerialException("sorry don't know how to handle non standard baud rate on this platform") + baudrate_constants = {} + #~ raise Exception, "this module does not run on this platform, sorry." + +# whats up with "aix", "beos", .... +# they should work, just need to know the device names. + + +# load some constants for later use. +# try to use values from TERMIOS, use defaults from linux otherwise +TIOCMGET = hasattr(TERMIOS, 'TIOCMGET') and TERMIOS.TIOCMGET or 0x5415 +TIOCMBIS = hasattr(TERMIOS, 'TIOCMBIS') and TERMIOS.TIOCMBIS or 0x5416 +TIOCMBIC = hasattr(TERMIOS, 'TIOCMBIC') and TERMIOS.TIOCMBIC or 0x5417 +TIOCMSET = hasattr(TERMIOS, 'TIOCMSET') and TERMIOS.TIOCMSET or 0x5418 + +#TIOCM_LE = hasattr(TERMIOS, 'TIOCM_LE') and TERMIOS.TIOCM_LE or 0x001 +TIOCM_DTR = hasattr(TERMIOS, 'TIOCM_DTR') and TERMIOS.TIOCM_DTR or 0x002 +TIOCM_RTS = hasattr(TERMIOS, 'TIOCM_RTS') and TERMIOS.TIOCM_RTS or 0x004 +#TIOCM_ST = hasattr(TERMIOS, 'TIOCM_ST') and TERMIOS.TIOCM_ST or 0x008 +#TIOCM_SR = hasattr(TERMIOS, 'TIOCM_SR') and TERMIOS.TIOCM_SR or 0x010 + +TIOCM_CTS = hasattr(TERMIOS, 'TIOCM_CTS') and TERMIOS.TIOCM_CTS or 0x020 +TIOCM_CAR = hasattr(TERMIOS, 'TIOCM_CAR') and TERMIOS.TIOCM_CAR or 0x040 +TIOCM_RNG = hasattr(TERMIOS, 'TIOCM_RNG') and TERMIOS.TIOCM_RNG or 0x080 +TIOCM_DSR = hasattr(TERMIOS, 'TIOCM_DSR') and TERMIOS.TIOCM_DSR or 0x100 +TIOCM_CD = hasattr(TERMIOS, 'TIOCM_CD') and TERMIOS.TIOCM_CD or TIOCM_CAR +TIOCM_RI = hasattr(TERMIOS, 'TIOCM_RI') and TERMIOS.TIOCM_RI or TIOCM_RNG +#TIOCM_OUT1 = hasattr(TERMIOS, 'TIOCM_OUT1') and TERMIOS.TIOCM_OUT1 or 0x2000 +#TIOCM_OUT2 = hasattr(TERMIOS, 'TIOCM_OUT2') and TERMIOS.TIOCM_OUT2 or 0x4000 +if hasattr(TERMIOS, 'TIOCINQ'): + TIOCINQ = TERMIOS.TIOCINQ +else: + TIOCINQ = hasattr(TERMIOS, 'FIONREAD') and TERMIOS.FIONREAD or 0x541B +TIOCOUTQ = hasattr(TERMIOS, 'TIOCOUTQ') and TERMIOS.TIOCOUTQ or 0x5411 + +TIOCM_zero_str = struct.pack('I', 0) +TIOCM_RTS_str = struct.pack('I', TIOCM_RTS) +TIOCM_DTR_str = struct.pack('I', TIOCM_DTR) + +TIOCSBRK = hasattr(TERMIOS, 'TIOCSBRK') and TERMIOS.TIOCSBRK or 0x5427 +TIOCCBRK = hasattr(TERMIOS, 'TIOCCBRK') and TERMIOS.TIOCCBRK or 0x5428 + + +class PosixSerial(SerialBase): + """Serial port class POSIX implementation. Serial port configuration is + done with termios and fcntl. Runs on Linux and many other Un*x like + systems.""" + + def open(self): + """Open port with current settings. This may throw a SerialException + if the port cannot be opened.""" + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + if self._isOpen: + raise SerialException("Port is already open.") + self.fd = None + # open + try: + self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK) + except IOError, msg: + self.fd = None + raise SerialException(msg.errno, "could not open port %s: %s" % (self._port, msg)) + #~ fcntl.fcntl(self.fd, FCNTL.F_SETFL, 0) # set blocking + + try: + self._reconfigurePort() + except: + try: + os.close(self.fd) + except: + # ignore any exception when closing the port + # also to keep original exception that happened when setting up + pass + self.fd = None + raise + else: + self._isOpen = True + self.flushInput() + + + def _reconfigurePort(self): + """Set communication parameters on opened port.""" + if self.fd is None: + raise SerialException("Can only operate on a valid file descriptor") + custom_baud = None + + vmin = vtime = 0 # timeout is done via select + if self._interCharTimeout is not None: + vmin = 1 + vtime = int(self._interCharTimeout * 10) + try: + orig_attr = termios.tcgetattr(self.fd) + iflag, oflag, cflag, lflag, ispeed, ospeed, cc = orig_attr + except termios.error, msg: # if a port is nonexistent but has a /dev file, it'll fail here + raise SerialException("Could not configure port: %s" % msg) + # set up raw mode / no echo / binary + cflag |= (TERMIOS.CLOCAL|TERMIOS.CREAD) + lflag &= ~(TERMIOS.ICANON|TERMIOS.ECHO|TERMIOS.ECHOE|TERMIOS.ECHOK|TERMIOS.ECHONL| + TERMIOS.ISIG|TERMIOS.IEXTEN) #|TERMIOS.ECHOPRT + for flag in ('ECHOCTL', 'ECHOKE'): # netbsd workaround for Erk + if hasattr(TERMIOS, flag): + lflag &= ~getattr(TERMIOS, flag) + + oflag &= ~(TERMIOS.OPOST) + iflag &= ~(TERMIOS.INLCR|TERMIOS.IGNCR|TERMIOS.ICRNL|TERMIOS.IGNBRK) + if hasattr(TERMIOS, 'IUCLC'): + iflag &= ~TERMIOS.IUCLC + if hasattr(TERMIOS, 'PARMRK'): + iflag &= ~TERMIOS.PARMRK + + # setup baud rate + try: + ispeed = ospeed = getattr(TERMIOS, 'B%s' % (self._baudrate)) + except AttributeError: + try: + ispeed = ospeed = baudrate_constants[self._baudrate] + except KeyError: + #~ raise ValueError('Invalid baud rate: %r' % self._baudrate) + # may need custom baud rate, it isn't in our list. + ispeed = ospeed = getattr(TERMIOS, 'B38400') + try: + custom_baud = int(self._baudrate) # store for later + except ValueError: + raise ValueError('Invalid baud rate: %r' % self._baudrate) + else: + if custom_baud < 0: + raise ValueError('Invalid baud rate: %r' % self._baudrate) + + # setup char len + cflag &= ~TERMIOS.CSIZE + if self._bytesize == 8: + cflag |= TERMIOS.CS8 + elif self._bytesize == 7: + cflag |= TERMIOS.CS7 + elif self._bytesize == 6: + cflag |= TERMIOS.CS6 + elif self._bytesize == 5: + cflag |= TERMIOS.CS5 + else: + raise ValueError('Invalid char len: %r' % self._bytesize) + # setup stopbits + if self._stopbits == STOPBITS_ONE: + cflag &= ~(TERMIOS.CSTOPB) + elif self._stopbits == STOPBITS_ONE_POINT_FIVE: + cflag |= (TERMIOS.CSTOPB) # XXX same as TWO.. there is no POSIX support for 1.5 + elif self._stopbits == STOPBITS_TWO: + cflag |= (TERMIOS.CSTOPB) + else: + raise ValueError('Invalid stop bit specification: %r' % self._stopbits) + # setup parity + iflag &= ~(TERMIOS.INPCK|TERMIOS.ISTRIP) + if self._parity == PARITY_NONE: + cflag &= ~(TERMIOS.PARENB|TERMIOS.PARODD) + elif self._parity == PARITY_EVEN: + cflag &= ~(TERMIOS.PARODD) + cflag |= (TERMIOS.PARENB) + elif self._parity == PARITY_ODD: + cflag |= (TERMIOS.PARENB|TERMIOS.PARODD) + else: + raise ValueError('Invalid parity: %r' % self._parity) + # setup flow control + # xonxoff + if hasattr(TERMIOS, 'IXANY'): + if self._xonxoff: + iflag |= (TERMIOS.IXON|TERMIOS.IXOFF) #|TERMIOS.IXANY) + else: + iflag &= ~(TERMIOS.IXON|TERMIOS.IXOFF|TERMIOS.IXANY) + else: + if self._xonxoff: + iflag |= (TERMIOS.IXON|TERMIOS.IXOFF) + else: + iflag &= ~(TERMIOS.IXON|TERMIOS.IXOFF) + # rtscts + if hasattr(TERMIOS, 'CRTSCTS'): + if self._rtscts: + cflag |= (TERMIOS.CRTSCTS) + else: + cflag &= ~(TERMIOS.CRTSCTS) + elif hasattr(TERMIOS, 'CNEW_RTSCTS'): # try it with alternate constant name + if self._rtscts: + cflag |= (TERMIOS.CNEW_RTSCTS) + else: + cflag &= ~(TERMIOS.CNEW_RTSCTS) + # XXX should there be a warning if setting up rtscts (and xonxoff etc) fails?? + + # buffer + # vmin "minimal number of characters to be read. = for non blocking" + if vmin < 0 or vmin > 255: + raise ValueError('Invalid vmin: %r ' % vmin) + cc[TERMIOS.VMIN] = vmin + # vtime + if vtime < 0 or vtime > 255: + raise ValueError('Invalid vtime: %r' % vtime) + cc[TERMIOS.VTIME] = vtime + # activate settings + if [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] != orig_attr: + termios.tcsetattr(self.fd, TERMIOS.TCSANOW, [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]) + + # apply custom baud rate, if any + if custom_baud is not None: + set_special_baudrate(self, custom_baud) + + def close(self): + """Close port""" + if self._isOpen: + if self.fd is not None: + os.close(self.fd) + self.fd = None + self._isOpen = False + + def makeDeviceName(self, port): + return device(port) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + #~ s = fcntl.ioctl(self.fd, TERMIOS.FIONREAD, TIOCM_zero_str) + s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str) + return struct.unpack('I',s)[0] + + # select based implementation, proved to work on many systems + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if not self._isOpen: raise portNotOpenError + read = bytearray() + while len(read) < size: + try: + ready,_,_ = select.select([self.fd],[],[], self._timeout) + # If select was used with a timeout, and the timeout occurs, it + # returns with empty lists -> thus abort read operation. + # For timeout == 0 (non-blocking operation) also abort when there + # is nothing to read. + if not ready: + break # timeout + buf = os.read(self.fd, size-len(read)) + # read should always return some data as select reported it was + # ready to read when we get to this point. + if not buf: + # Disconnected devices, at least on Linux, show the + # behavior that they are always ready to read immediately + # but reading returns nothing. + raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)') + read.extend(buf) + except select.error, e: + # ignore EAGAIN errors. all other errors are shown + # see also http://www.python.org/dev/peps/pep-3151/#select + if e[0] != errno.EAGAIN: + raise SerialException('read failed: %s' % (e,)) + except OSError, e: + # ignore EAGAIN errors. all other errors are shown + if e.errno != errno.EAGAIN: + raise SerialException('read failed: %s' % (e,)) + return bytes(read) + + def write(self, data): + """Output the given string over the serial port.""" + if not self._isOpen: raise portNotOpenError + d = to_bytes(data) + tx_len = len(d) + if self._writeTimeout is not None and self._writeTimeout > 0: + timeout = time.time() + self._writeTimeout + else: + timeout = None + while tx_len > 0: + try: + n = os.write(self.fd, d) + if timeout: + # when timeout is set, use select to wait for being ready + # with the time left as timeout + timeleft = timeout - time.time() + if timeleft < 0: + raise writeTimeoutError + _, ready, _ = select.select([], [self.fd], [], timeleft) + if not ready: + raise writeTimeoutError + else: + # wait for write operation + _, ready, _ = select.select([], [self.fd], [], None) + if not ready: + raise SerialException('write failed (select)') + d = d[n:] + tx_len -= n + except OSError, v: + if v.errno != errno.EAGAIN: + raise SerialException('write failed: %s' % (v,)) + return len(data) + + def flush(self): + """Flush of file like objects. In this case, wait until all data + is written.""" + self.drainOutput() + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + termios.tcflush(self.fd, TERMIOS.TCIFLUSH) + + def flushOutput(self): + """Clear output buffer, aborting the current output and + discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + termios.tcflush(self.fd, TERMIOS.TCOFLUSH) + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given duration.""" + if not self._isOpen: raise portNotOpenError + termios.tcsendbreak(self.fd, int(duration/0.25)) + + def setBreak(self, level=1): + """Set break: Controls TXD. When active, no transmitting is possible.""" + if self.fd is None: raise portNotOpenError + if level: + fcntl.ioctl(self.fd, TIOCSBRK) + else: + fcntl.ioctl(self.fd, TIOCCBRK) + + def setRTS(self, level=1): + """Set terminal status line: Request To Send""" + if not self._isOpen: raise portNotOpenError + if level: + fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_RTS_str) + else: + fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_RTS_str) + + def setDTR(self, level=1): + """Set terminal status line: Data Terminal Ready""" + if not self._isOpen: raise portNotOpenError + if level: + fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str) + else: + fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_DTR_str) + + def getCTS(self): + """Read terminal status line: Clear To Send""" + if not self._isOpen: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_CTS != 0 + + def getDSR(self): + """Read terminal status line: Data Set Ready""" + if not self._isOpen: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_DSR != 0 + + def getRI(self): + """Read terminal status line: Ring Indicator""" + if not self._isOpen: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_RI != 0 + + def getCD(self): + """Read terminal status line: Carrier Detect""" + if not self._isOpen: raise portNotOpenError + s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str) + return struct.unpack('I',s)[0] & TIOCM_CD != 0 + + # - - platform specific - - - - + + def outWaiting(self): + """Return the number of characters currently in the output buffer.""" + #~ s = fcntl.ioctl(self.fd, TERMIOS.FIONREAD, TIOCM_zero_str) + s = fcntl.ioctl(self.fd, TIOCOUTQ, TIOCM_zero_str) + return struct.unpack('I',s)[0] + + def drainOutput(self): + """internal - not portable!""" + if not self._isOpen: raise portNotOpenError + termios.tcdrain(self.fd) + + def nonblocking(self): + """internal - not portable!""" + if not self._isOpen: raise portNotOpenError + fcntl.fcntl(self.fd, FCNTL.F_SETFL, os.O_NONBLOCK) + + def fileno(self): + """\ + For easier use of the serial port instance with select. + WARNING: this function is not portable to different platforms! + """ + if not self._isOpen: raise portNotOpenError + return self.fd + + def setXON(self, level=True): + """\ + Manually control flow - when software flow control is enabled. + This will send XON (true) and XOFF (false) to the other device. + WARNING: this function is not portable to different platforms! + """ + if not self.hComPort: raise portNotOpenError + if enable: + termios.tcflow(self.fd, TERMIOS.TCION) + else: + termios.tcflow(self.fd, TERMIOS.TCIOFF) + + def flowControlOut(self, enable): + """\ + Manually control flow of outgoing data - when hardware or software flow + control is enabled. + WARNING: this function is not portable to different platforms! + """ + if not self._isOpen: raise portNotOpenError + if enable: + termios.tcflow(self.fd, TERMIOS.TCOON) + else: + termios.tcflow(self.fd, TERMIOS.TCOOFF) + + +# assemble Serial class with the platform specifc implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derrive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(PosixSerial, FileLike): + pass +else: + # io library present + class Serial(PosixSerial, io.RawIOBase): + pass + +class PosixPollSerial(Serial): + """poll based read implementation. not all systems support poll properly. + however this one has better handling of errors, such as a device + disconnecting while it's in use (e.g. USB-serial unplugged)""" + + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if self.fd is None: raise portNotOpenError + read = bytearray() + poll = select.poll() + poll.register(self.fd, select.POLLIN|select.POLLERR|select.POLLHUP|select.POLLNVAL) + if size > 0: + while len(read) < size: + # print "\tread(): size",size, "have", len(read) #debug + # wait until device becomes ready to read (or something fails) + for fd, event in poll.poll(self._timeout*1000): + if event & (select.POLLERR|select.POLLHUP|select.POLLNVAL): + raise SerialException('device reports error (poll)') + # we don't care if it is select.POLLIN or timeout, that's + # handled below + buf = os.read(self.fd, size - len(read)) + read.extend(buf) + if ((self._timeout is not None and self._timeout >= 0) or + (self._interCharTimeout is not None and self._interCharTimeout > 0)) and not buf: + break # early abort on timeout + return bytes(read) + + +if __name__ == '__main__': + s = Serial(0, + baudrate=19200, # baud rate + bytesize=EIGHTBITS, # number of data bits + parity=PARITY_EVEN, # enable parity checking + stopbits=STOPBITS_ONE, # number of stop bits + timeout=3, # set a timeout value, None for waiting forever + xonxoff=0, # enable software flow control + rtscts=0, # enable RTS/CTS flow control + ) + s.setRTS(1) + s.setDTR(1) + s.flushInput() + s.flushOutput() + s.write('hello') + sys.stdout.write('%r\n' % s.read(5)) + sys.stdout.write('%s\n' % s.inWaiting()) + del s + diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialutil.py b/Source/Inkscape/EggBotControl.Original/serial/serialutil.py new file mode 100644 index 0000000..4557a2e --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialutil.py @@ -0,0 +1,551 @@ +#! python +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see __init__.py +# +# (C) 2001-2010 Chris Liechti +# this is distributed under a free software license, see license.txt + +# compatibility for older Python < 2.6 +try: + bytes + bytearray +except (NameError, AttributeError): + # Python older than 2.6 do not have these types. Like for Python 2.6 they + # should behave like str. For Python older than 3.0 we want to work with + # strings anyway, only later versions have a true bytes type. + bytes = str + # bytearray is a mutable type that is easily turned into an instance of + # bytes + class bytearray(list): + # for bytes(bytearray()) usage + def __str__(self): return ''.join(self) + def __repr__(self): return 'bytearray(%r)' % ''.join(self) + # append automatically converts integers to characters + def append(self, item): + if isinstance(item, str): + list.append(self, item) + else: + list.append(self, chr(item)) + # += + def __iadd__(self, other): + for byte in other: + self.append(byte) + return self + + def __getslice__(self, i, j): + return bytearray(list.__getslice__(self, i, j)) + + def __getitem__(self, item): + if isinstance(item, slice): + return bytearray(list.__getitem__(self, item)) + else: + return ord(list.__getitem__(self, item)) + + def __eq__(self, other): + if isinstance(other, basestring): + other = bytearray(other) + return list.__eq__(self, other) + +# ``memoryview`` was introduced in Python 2.7 and ``bytes(some_memoryview)`` +# isn't returning the contents (very unfortunate). Therefore we need special +# cases and test for it. Ensure that there is a ``memoryview`` object for older +# Python versions. This is easier than making every test dependent on its +# existence. +try: + memoryview +except (NameError, AttributeError): + # implementation does not matter as we do not realy use it. + # it just must not inherit from something else we might care for. + class memoryview: + pass + + +# all Python versions prior 3.x convert ``str([17])`` to '[17]' instead of '\x11' +# so a simple ``bytes(sequence)`` doesn't work for all versions +def to_bytes(seq): + """convert a sequence to a bytes type""" + if isinstance(seq, bytes): + return seq + elif isinstance(seq, bytearray): + return bytes(seq) + elif isinstance(seq, memoryview): + return seq.tobytes() + else: + b = bytearray() + for item in seq: + b.append(item) # this one handles int and str for our emulation and ints for Python 3.x + return bytes(b) + +# create control bytes +XON = to_bytes([17]) +XOFF = to_bytes([19]) + +CR = to_bytes([13]) +LF = to_bytes([10]) + + +PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE = 'N', 'E', 'O', 'M', 'S' +STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO = (1, 1.5, 2) +FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5, 6, 7, 8) + +PARITY_NAMES = { + PARITY_NONE: 'None', + PARITY_EVEN: 'Even', + PARITY_ODD: 'Odd', + PARITY_MARK: 'Mark', + PARITY_SPACE: 'Space', +} + + +class SerialException(IOError): + """Base class for serial port related exceptions.""" + + +class SerialTimeoutException(SerialException): + """Write timeouts give an exception""" + + +writeTimeoutError = SerialTimeoutException('Write timeout') +portNotOpenError = SerialException('Attempting to use a port that is not open') + + +class FileLike(object): + """An abstract file like class. + + This class implements readline and readlines based on read and + writelines based on write. + This class is used to provide the above functions for to Serial + port objects. + + Note that when the serial port was opened with _NO_ timeout that + readline blocks until it sees a newline (or the specified size is + reached) and that readlines would never return and therefore + refuses to work (it raises an exception in this case)! + """ + + def __init__(self): + self.closed = True + + def close(self): + self.closed = True + + # so that ports are closed when objects are discarded + def __del__(self): + """Destructor. Calls close().""" + # The try/except block is in case this is called at program + # exit time, when it's possible that globals have already been + # deleted, and then the close() call might fail. Since + # there's nothing we can do about such failures and they annoy + # the end users, we suppress the traceback. + try: + self.close() + except: + pass + + def writelines(self, sequence): + for line in sequence: + self.write(line) + + def flush(self): + """flush of file like objects""" + pass + + # iterator for e.g. "for line in Serial(0): ..." usage + def next(self): + line = self.readline() + if not line: raise StopIteration + return line + + def __iter__(self): + return self + + def readline(self, size=None, eol=LF): + """read a line which is terminated with end-of-line (eol) character + ('\n' by default) or until timeout.""" + leneol = len(eol) + line = bytearray() + while True: + c = self.read(1) + if c: + line += c + if line[-leneol:] == eol: + break + if size is not None and len(line) >= size: + break + else: + break + return bytes(line) + + def readlines(self, sizehint=None, eol=LF): + """read a list of lines, until timeout. + sizehint is ignored.""" + if self.timeout is None: + raise ValueError("Serial port MUST have enabled timeout for this function!") + leneol = len(eol) + lines = [] + while True: + line = self.readline(eol=eol) + if line: + lines.append(line) + if line[-leneol:] != eol: # was the line received with a timeout? + break + else: + break + return lines + + def xreadlines(self, sizehint=None): + """Read lines, implemented as generator. It will raise StopIteration on + timeout (empty read). sizehint is ignored.""" + while True: + line = self.readline() + if not line: break + yield line + + # other functions of file-likes - not used by pySerial + + #~ readinto(b) + + def seek(self, pos, whence=0): + raise IOError("file is not seekable") + + def tell(self): + raise IOError("file is not seekable") + + def truncate(self, n=None): + raise IOError("file is not seekable") + + def isatty(self): + return False + + +class SerialBase(object): + """Serial port base class. Provides __init__ function and properties to + get/set port settings.""" + + # default values, may be overridden in subclasses that do not support all values + BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, + 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, + 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, + 3000000, 3500000, 4000000) + BYTESIZES = (FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS) + PARITIES = (PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE) + STOPBITS = (STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO) + + def __init__(self, + port = None, # number of device, numbering starts at + # zero. if everything fails, the user + # can specify a device string, note + # that this isn't portable anymore + # port will be opened if one is specified + baudrate=115200, # baud rate + bytesize=EIGHTBITS, # number of data bits + parity=PARITY_NONE, # enable parity checking + stopbits=STOPBITS_ONE, # number of stop bits + timeout=None, # set a timeout value, None to wait forever + xonxoff=False, # enable software flow control + rtscts=False, # enable RTS/CTS flow control + writeTimeout=None, # set a timeout for writes + dsrdtr=False, # None: use rtscts setting, dsrdtr override if True or False + interCharTimeout=None # Inter-character timeout, None to disable + ): + """Initialize comm port object. If a port is given, then the port will be + opened immediately. Otherwise a Serial port object in closed state + is returned.""" + + self._isOpen = False + self._port = None # correct value is assigned below through properties + self._baudrate = None # correct value is assigned below through properties + self._bytesize = None # correct value is assigned below through properties + self._parity = None # correct value is assigned below through properties + self._stopbits = None # correct value is assigned below through properties + self._timeout = None # correct value is assigned below through properties + self._writeTimeout = None # correct value is assigned below through properties + self._xonxoff = None # correct value is assigned below through properties + self._rtscts = None # correct value is assigned below through properties + self._dsrdtr = None # correct value is assigned below through properties + self._interCharTimeout = None # correct value is assigned below through properties + + # assign values using get/set methods using the properties feature + self.port = port + self.baudrate = baudrate + self.bytesize = bytesize + self.parity = parity + self.stopbits = stopbits + self.timeout = timeout + self.writeTimeout = writeTimeout + self.xonxoff = xonxoff + self.rtscts = rtscts + self.dsrdtr = dsrdtr + self.interCharTimeout = interCharTimeout + + if port is not None: + self.open() + + def isOpen(self): + """Check if the port is opened.""" + return self._isOpen + + # - - - - - - - - - - - - - - - - - - - - - - - - + + # TODO: these are not really needed as the is the BAUDRATES etc. attribute... + # maybe i remove them before the final release... + + def getSupportedBaudrates(self): + return [(str(b), b) for b in self.BAUDRATES] + + def getSupportedByteSizes(self): + return [(str(b), b) for b in self.BYTESIZES] + + def getSupportedStopbits(self): + return [(str(b), b) for b in self.STOPBITS] + + def getSupportedParities(self): + return [(PARITY_NAMES[b], b) for b in self.PARITIES] + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def setPort(self, port): + """Change the port. The attribute portstr is set to a string that + contains the name of the port.""" + + was_open = self._isOpen + if was_open: self.close() + if port is not None: + if isinstance(port, basestring): + self.portstr = port + else: + self.portstr = self.makeDeviceName(port) + else: + self.portstr = None + self._port = port + self.name = self.portstr + if was_open: self.open() + + def getPort(self): + """Get the current port setting. The value that was passed on init or using + setPort() is passed back. See also the attribute portstr which contains + the name of the port as a string.""" + return self._port + + port = property(getPort, setPort, doc="Port setting") + + + def setBaudrate(self, baudrate): + """Change baud rate. It raises a ValueError if the port is open and the + baud rate is not possible. If the port is closed, then the value is + accepted and the exception is raised when the port is opened.""" + try: + b = int(baudrate) + except TypeError: + raise ValueError("Not a valid baudrate: %r" % (baudrate,)) + else: + if b <= 0: + raise ValueError("Not a valid baudrate: %r" % (baudrate,)) + self._baudrate = b + if self._isOpen: self._reconfigurePort() + + def getBaudrate(self): + """Get the current baud rate setting.""" + return self._baudrate + + baudrate = property(getBaudrate, setBaudrate, doc="Baud rate setting") + + + def setByteSize(self, bytesize): + """Change byte size.""" + if bytesize not in self.BYTESIZES: raise ValueError("Not a valid byte size: %r" % (bytesize,)) + self._bytesize = bytesize + if self._isOpen: self._reconfigurePort() + + def getByteSize(self): + """Get the current byte size setting.""" + return self._bytesize + + bytesize = property(getByteSize, setByteSize, doc="Byte size setting") + + + def setParity(self, parity): + """Change parity setting.""" + if parity not in self.PARITIES: raise ValueError("Not a valid parity: %r" % (parity,)) + self._parity = parity + if self._isOpen: self._reconfigurePort() + + def getParity(self): + """Get the current parity setting.""" + return self._parity + + parity = property(getParity, setParity, doc="Parity setting") + + + def setStopbits(self, stopbits): + """Change stop bits size.""" + if stopbits not in self.STOPBITS: raise ValueError("Not a valid stop bit size: %r" % (stopbits,)) + self._stopbits = stopbits + if self._isOpen: self._reconfigurePort() + + def getStopbits(self): + """Get the current stop bits setting.""" + return self._stopbits + + stopbits = property(getStopbits, setStopbits, doc="Stop bits setting") + + + def setTimeout(self, timeout): + """Change timeout setting.""" + if timeout is not None: + try: + timeout + 1 # test if it's a number, will throw a TypeError if not... + except TypeError: + raise ValueError("Not a valid timeout: %r" % (timeout,)) + if timeout < 0: raise ValueError("Not a valid timeout: %r" % (timeout,)) + self._timeout = timeout + if self._isOpen: self._reconfigurePort() + + def getTimeout(self): + """Get the current timeout setting.""" + return self._timeout + + timeout = property(getTimeout, setTimeout, doc="Timeout setting for read()") + + + def setWriteTimeout(self, timeout): + """Change timeout setting.""" + if timeout is not None: + if timeout < 0: raise ValueError("Not a valid timeout: %r" % (timeout,)) + try: + timeout + 1 #test if it's a number, will throw a TypeError if not... + except TypeError: + raise ValueError("Not a valid timeout: %r" % timeout) + + self._writeTimeout = timeout + if self._isOpen: self._reconfigurePort() + + def getWriteTimeout(self): + """Get the current timeout setting.""" + return self._writeTimeout + + writeTimeout = property(getWriteTimeout, setWriteTimeout, doc="Timeout setting for write()") + + + def setXonXoff(self, xonxoff): + """Change XON/XOFF setting.""" + self._xonxoff = xonxoff + if self._isOpen: self._reconfigurePort() + + def getXonXoff(self): + """Get the current XON/XOFF setting.""" + return self._xonxoff + + xonxoff = property(getXonXoff, setXonXoff, doc="XON/XOFF setting") + + def setRtsCts(self, rtscts): + """Change RTS/CTS flow control setting.""" + self._rtscts = rtscts + if self._isOpen: self._reconfigurePort() + + def getRtsCts(self): + """Get the current RTS/CTS flow control setting.""" + return self._rtscts + + rtscts = property(getRtsCts, setRtsCts, doc="RTS/CTS flow control setting") + + def setDsrDtr(self, dsrdtr=None): + """Change DsrDtr flow control setting.""" + if dsrdtr is None: + # if not set, keep backwards compatibility and follow rtscts setting + self._dsrdtr = self._rtscts + else: + # if defined independently, follow its value + self._dsrdtr = dsrdtr + if self._isOpen: self._reconfigurePort() + + def getDsrDtr(self): + """Get the current DSR/DTR flow control setting.""" + return self._dsrdtr + + dsrdtr = property(getDsrDtr, setDsrDtr, "DSR/DTR flow control setting") + + def setInterCharTimeout(self, interCharTimeout): + """Change inter-character timeout setting.""" + if interCharTimeout is not None: + if interCharTimeout < 0: raise ValueError("Not a valid timeout: %r" % interCharTimeout) + try: + interCharTimeout + 1 # test if it's a number, will throw a TypeError if not... + except TypeError: + raise ValueError("Not a valid timeout: %r" % interCharTimeout) + + self._interCharTimeout = interCharTimeout + if self._isOpen: self._reconfigurePort() + + def getInterCharTimeout(self): + """Get the current inter-character timeout setting.""" + return self._interCharTimeout + + interCharTimeout = property(getInterCharTimeout, setInterCharTimeout, doc="Inter-character timeout setting for read()") + + # - - - - - - - - - - - - - - - - - - - - - - - - + + _SETTINGS = ('baudrate', 'bytesize', 'parity', 'stopbits', 'xonxoff', + 'dsrdtr', 'rtscts', 'timeout', 'writeTimeout', 'interCharTimeout') + + def getSettingsDict(self): + """Get current port settings as a dictionary. For use with + applySettingsDict""" + return dict([(key, getattr(self, '_'+key)) for key in self._SETTINGS]) + + def applySettingsDict(self, d): + """apply stored settings from a dictionary returned from + getSettingsDict. it's allowed to delete keys from the dictionary. these + values will simply left unchanged.""" + for key in self._SETTINGS: + if d[key] != getattr(self, '_'+key): # check against internal "_" value + setattr(self, key, d[key]) # set non "_" value to use properties write function + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def __repr__(self): + """String representation of the current port settings and its state.""" + return "%s(port=%r, baudrate=%r, bytesize=%r, parity=%r, stopbits=%r, timeout=%r, xonxoff=%r, rtscts=%r, dsrdtr=%r)" % ( + self.__class__.__name__, + id(self), + self._isOpen, + self.portstr, + self.baudrate, + self.bytesize, + self.parity, + self.stopbits, + self.timeout, + self.xonxoff, + self.rtscts, + self.dsrdtr, + ) + + + # - - - - - - - - - - - - - - - - - - - - - - - - + # compatibility with io library + + def readable(self): return True + def writable(self): return True + def seekable(self): return False + def readinto(self, b): + data = self.read(len(b)) + n = len(data) + try: + b[:n] = data + except TypeError, err: + import array + if not isinstance(b, array.array): + raise err + b[:n] = array.array('b', data) + return n + + +if __name__ == '__main__': + import sys + s = SerialBase() + sys.stdout.write('port name: %s\n' % s.portstr) + sys.stdout.write('baud rates: %s\n' % s.getSupportedBaudrates()) + sys.stdout.write('byte sizes: %s\n' % s.getSupportedByteSizes()) + sys.stdout.write('parities: %s\n' % s.getSupportedParities()) + sys.stdout.write('stop bits: %s\n' % s.getSupportedStopbits()) + sys.stdout.write('%s\n' % s) diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialutil.pyc b/Source/Inkscape/EggBotControl.Original/serial/serialutil.pyc new file mode 100644 index 0000000..0540cf1 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialutil.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialwin32.py b/Source/Inkscape/EggBotControl.Original/serial/serialwin32.py new file mode 100644 index 0000000..dfdd953 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialwin32.py @@ -0,0 +1,461 @@ +#! python +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# serial driver for win32 +# see __init__.py +# +# (C) 2001-2011 Chris Liechti +# this is distributed under a free software license, see license.txt +# +# Initial patch to use ctypes by Giovanni Bajo + +import ctypes +from serial import win32 + +from serial.serialutil import * + + +def device(portnum): + """Turn a port number into a device name""" + return 'COM%d' % (portnum+1) # numbers are transformed to a string + + +class Win32Serial(SerialBase): + """Serial port implementation for Win32 based on ctypes.""" + + BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, + 9600, 19200, 38400, 57600, 115200) + + def __init__(self, *args, **kwargs): + self.hComPort = None + self._overlappedRead = None + self._overlappedWrite = None + self._rtsToggle = False + + self._rtsState = win32.RTS_CONTROL_ENABLE + self._dtrState = win32.DTR_CONTROL_ENABLE + + + SerialBase.__init__(self, *args, **kwargs) + + def open(self): + """Open port with current settings. This may throw a SerialException + if the port cannot be opened.""" + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + if self._isOpen: + raise SerialException("Port is already open.") + # the "\\.\COMx" format is required for devices other than COM1-COM8 + # not all versions of windows seem to support this properly + # so that the first few ports are used with the DOS device name + port = self.portstr + try: + if port.upper().startswith('COM') and int(port[3:]) > 8: + port = '\\\\.\\' + port + except ValueError: + # for like COMnotanumber + pass + self.hComPort = win32.CreateFile(port, + win32.GENERIC_READ | win32.GENERIC_WRITE, + 0, # exclusive access + None, # no security + win32.OPEN_EXISTING, + win32.FILE_ATTRIBUTE_NORMAL | win32.FILE_FLAG_OVERLAPPED, + 0) + if self.hComPort == win32.INVALID_HANDLE_VALUE: + self.hComPort = None # 'cause __del__ is called anyway + raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError())) + + try: + self._overlappedRead = win32.OVERLAPPED() + self._overlappedRead.hEvent = win32.CreateEvent(None, 1, 0, None) + self._overlappedWrite = win32.OVERLAPPED() + #~ self._overlappedWrite.hEvent = win32.CreateEvent(None, 1, 0, None) + self._overlappedWrite.hEvent = win32.CreateEvent(None, 0, 0, None) + + # Setup a 4k buffer + win32.SetupComm(self.hComPort, 4096, 4096) + + # Save original timeout values: + self._orgTimeouts = win32.COMMTIMEOUTS() + win32.GetCommTimeouts(self.hComPort, ctypes.byref(self._orgTimeouts)) + + self._reconfigurePort() + + # Clear buffers: + # Remove anything that was there + win32.PurgeComm(self.hComPort, + win32.PURGE_TXCLEAR | win32.PURGE_TXABORT | + win32.PURGE_RXCLEAR | win32.PURGE_RXABORT) + except: + try: + self._close() + except: + # ignore any exception when closing the port + # also to keep original exception that happened when setting up + pass + self.hComPort = None + raise + else: + self._isOpen = True + + + def _reconfigurePort(self): + """Set communication parameters on opened port.""" + if not self.hComPort: + raise SerialException("Can only operate on a valid port handle") + + # Set Windows timeout values + # timeouts is a tuple with the following items: + # (ReadIntervalTimeout,ReadTotalTimeoutMultiplier, + # ReadTotalTimeoutConstant,WriteTotalTimeoutMultiplier, + # WriteTotalTimeoutConstant) + if self._timeout is None: + timeouts = (0, 0, 0, 0, 0) + elif self._timeout == 0: + timeouts = (win32.MAXDWORD, 0, 0, 0, 0) + else: + timeouts = (0, 0, int(self._timeout*1000), 0, 0) + if self._timeout != 0 and self._interCharTimeout is not None: + timeouts = (int(self._interCharTimeout * 1000),) + timeouts[1:] + + if self._writeTimeout is None: + pass + elif self._writeTimeout == 0: + timeouts = timeouts[:-2] + (0, win32.MAXDWORD) + else: + timeouts = timeouts[:-2] + (0, int(self._writeTimeout*1000)) + win32.SetCommTimeouts(self.hComPort, ctypes.byref(win32.COMMTIMEOUTS(*timeouts))) + + win32.SetCommMask(self.hComPort, win32.EV_ERR) + + # Setup the connection info. + # Get state and modify it: + comDCB = win32.DCB() + win32.GetCommState(self.hComPort, ctypes.byref(comDCB)) + comDCB.BaudRate = self._baudrate + + if self._bytesize == FIVEBITS: + comDCB.ByteSize = 5 + elif self._bytesize == SIXBITS: + comDCB.ByteSize = 6 + elif self._bytesize == SEVENBITS: + comDCB.ByteSize = 7 + elif self._bytesize == EIGHTBITS: + comDCB.ByteSize = 8 + else: + raise ValueError("Unsupported number of data bits: %r" % self._bytesize) + + if self._parity == PARITY_NONE: + comDCB.Parity = win32.NOPARITY + comDCB.fParity = 0 # Disable Parity Check + elif self._parity == PARITY_EVEN: + comDCB.Parity = win32.EVENPARITY + comDCB.fParity = 1 # Enable Parity Check + elif self._parity == PARITY_ODD: + comDCB.Parity = win32.ODDPARITY + comDCB.fParity = 1 # Enable Parity Check + elif self._parity == PARITY_MARK: + comDCB.Parity = win32.MARKPARITY + comDCB.fParity = 1 # Enable Parity Check + elif self._parity == PARITY_SPACE: + comDCB.Parity = win32.SPACEPARITY + comDCB.fParity = 1 # Enable Parity Check + else: + raise ValueError("Unsupported parity mode: %r" % self._parity) + + if self._stopbits == STOPBITS_ONE: + comDCB.StopBits = win32.ONESTOPBIT + elif self._stopbits == STOPBITS_ONE_POINT_FIVE: + comDCB.StopBits = win32.ONE5STOPBITS + elif self._stopbits == STOPBITS_TWO: + comDCB.StopBits = win32.TWOSTOPBITS + else: + raise ValueError("Unsupported number of stop bits: %r" % self._stopbits) + + comDCB.fBinary = 1 # Enable Binary Transmission + # Char. w/ Parity-Err are replaced with 0xff (if fErrorChar is set to TRUE) + if self._rtscts: + comDCB.fRtsControl = win32.RTS_CONTROL_HANDSHAKE + elif self._rtsToggle: + comDCB.fRtsControl = win32.RTS_CONTROL_TOGGLE + else: + comDCB.fRtsControl = self._rtsState + if self._dsrdtr: + comDCB.fDtrControl = win32.DTR_CONTROL_HANDSHAKE + else: + comDCB.fDtrControl = self._dtrState + + if self._rtsToggle: + comDCB.fOutxCtsFlow = 0 + else: + comDCB.fOutxCtsFlow = self._rtscts + comDCB.fOutxDsrFlow = self._dsrdtr + comDCB.fOutX = self._xonxoff + comDCB.fInX = self._xonxoff + comDCB.fNull = 0 + comDCB.fErrorChar = 0 + comDCB.fAbortOnError = 0 + comDCB.XonChar = XON + comDCB.XoffChar = XOFF + + if not win32.SetCommState(self.hComPort, ctypes.byref(comDCB)): + raise ValueError("Cannot configure port, some setting was wrong. Original message: %r" % ctypes.WinError()) + + #~ def __del__(self): + #~ self.close() + + + def _close(self): + """internal close port helper""" + if self.hComPort: + # Restore original timeout values: + win32.SetCommTimeouts(self.hComPort, self._orgTimeouts) + # Close COM-Port: + win32.CloseHandle(self.hComPort) + if self._overlappedRead is not None: + win32.CloseHandle(self._overlappedRead.hEvent) + self._overlappedRead = None + if self._overlappedWrite is not None: + win32.CloseHandle(self._overlappedWrite.hEvent) + self._overlappedWrite = None + self.hComPort = None + + def close(self): + """Close port""" + if self._isOpen: + self._close() + self._isOpen = False + + def makeDeviceName(self, port): + return device(port) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + flags = win32.DWORD() + comstat = win32.COMSTAT() + if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)): + raise SerialException('call to ClearCommError failed') + return comstat.cbInQue + + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if not self.hComPort: raise portNotOpenError + if size > 0: + win32.ResetEvent(self._overlappedRead.hEvent) + flags = win32.DWORD() + comstat = win32.COMSTAT() + if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)): + raise SerialException('call to ClearCommError failed') + if self.timeout == 0: + n = min(comstat.cbInQue, size) + if n > 0: + buf = ctypes.create_string_buffer(n) + rc = win32.DWORD() + err = win32.ReadFile(self.hComPort, buf, n, ctypes.byref(rc), ctypes.byref(self._overlappedRead)) + if not err and win32.GetLastError() != win32.ERROR_IO_PENDING: + raise SerialException("ReadFile failed (%r)" % ctypes.WinError()) + err = win32.WaitForSingleObject(self._overlappedRead.hEvent, win32.INFINITE) + read = buf.raw[:rc.value] + else: + read = bytes() + else: + buf = ctypes.create_string_buffer(size) + rc = win32.DWORD() + err = win32.ReadFile(self.hComPort, buf, size, ctypes.byref(rc), ctypes.byref(self._overlappedRead)) + if not err and win32.GetLastError() != win32.ERROR_IO_PENDING: + raise SerialException("ReadFile failed (%r)" % ctypes.WinError()) + err = win32.GetOverlappedResult(self.hComPort, ctypes.byref(self._overlappedRead), ctypes.byref(rc), True) + read = buf.raw[:rc.value] + else: + read = bytes() + return bytes(read) + + def write(self, data): + """Output the given string over the serial port.""" + if not self.hComPort: raise portNotOpenError + #~ if not isinstance(data, (bytes, bytearray)): + #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data))) + # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview + data = to_bytes(data) + if data: + #~ win32event.ResetEvent(self._overlappedWrite.hEvent) + n = win32.DWORD() + err = win32.WriteFile(self.hComPort, data, len(data), ctypes.byref(n), self._overlappedWrite) + if not err and win32.GetLastError() != win32.ERROR_IO_PENDING: + raise SerialException("WriteFile failed (%r)" % ctypes.WinError()) + if self._writeTimeout != 0: # if blocking (None) or w/ write timeout (>0) + # Wait for the write to complete. + #~ win32.WaitForSingleObject(self._overlappedWrite.hEvent, win32.INFINITE) + err = win32.GetOverlappedResult(self.hComPort, self._overlappedWrite, ctypes.byref(n), True) + if n.value != len(data): + raise writeTimeoutError + return n.value + else: + return 0 + + def flush(self): + """Flush of file like objects. In this case, wait until all data + is written.""" + while self.outWaiting(): + time.sleep(0.05) + # XXX could also use WaitCommEvent with mask EV_TXEMPTY, but it would + # require overlapped IO and its also only possible to set a single mask + # on the port--- + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self.hComPort: raise portNotOpenError + win32.PurgeComm(self.hComPort, win32.PURGE_RXCLEAR | win32.PURGE_RXABORT) + + def flushOutput(self): + """Clear output buffer, aborting the current output and + discarding all that is in the buffer.""" + if not self.hComPort: raise portNotOpenError + win32.PurgeComm(self.hComPort, win32.PURGE_TXCLEAR | win32.PURGE_TXABORT) + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given duration.""" + if not self.hComPort: raise portNotOpenError + import time + win32.SetCommBreak(self.hComPort) + time.sleep(duration) + win32.ClearCommBreak(self.hComPort) + + def setBreak(self, level=1): + """Set break: Controls TXD. When active, to transmitting is possible.""" + if not self.hComPort: raise portNotOpenError + if level: + win32.SetCommBreak(self.hComPort) + else: + win32.ClearCommBreak(self.hComPort) + + def setRTS(self, level=1): + """Set terminal status line: Request To Send""" + # remember level for reconfigure + if level: + self._rtsState = win32.RTS_CONTROL_ENABLE + else: + self._rtsState = win32.RTS_CONTROL_DISABLE + # also apply now if port is open + if self.hComPort: + if level: + win32.EscapeCommFunction(self.hComPort, win32.SETRTS) + else: + win32.EscapeCommFunction(self.hComPort, win32.CLRRTS) + + def setDTR(self, level=1): + """Set terminal status line: Data Terminal Ready""" + # remember level for reconfigure + if level: + self._dtrState = win32.DTR_CONTROL_ENABLE + else: + self._dtrState = win32.DTR_CONTROL_DISABLE + # also apply now if port is open + if self.hComPort: + if level: + win32.EscapeCommFunction(self.hComPort, win32.SETDTR) + else: + win32.EscapeCommFunction(self.hComPort, win32.CLRDTR) + + def _GetCommModemStatus(self): + stat = win32.DWORD() + win32.GetCommModemStatus(self.hComPort, ctypes.byref(stat)) + return stat.value + + def getCTS(self): + """Read terminal status line: Clear To Send""" + if not self.hComPort: raise portNotOpenError + return win32.MS_CTS_ON & self._GetCommModemStatus() != 0 + + def getDSR(self): + """Read terminal status line: Data Set Ready""" + if not self.hComPort: raise portNotOpenError + return win32.MS_DSR_ON & self._GetCommModemStatus() != 0 + + def getRI(self): + """Read terminal status line: Ring Indicator""" + if not self.hComPort: raise portNotOpenError + return win32.MS_RING_ON & self._GetCommModemStatus() != 0 + + def getCD(self): + """Read terminal status line: Carrier Detect""" + if not self.hComPort: raise portNotOpenError + return win32.MS_RLSD_ON & self._GetCommModemStatus() != 0 + + # - - platform specific - - - - + + def setBufferSize(self, rx_size=4096, tx_size=None): + """\ + Recommend a buffer size to the driver (device driver can ignore this + vlaue). Must be called before the port is opended. + """ + if tx_size is None: tx_size = rx_size + win32.SetupComm(self.hComPort, rx_size, tx_size) + + def setXON(self, level=True): + """\ + Manually control flow - when software flow control is enabled. + This will send XON (true) and XOFF (false) to the other device. + WARNING: this function is not portable to different platforms! + """ + if not self.hComPort: raise portNotOpenError + if level: + win32.EscapeCommFunction(self.hComPort, win32.SETXON) + else: + win32.EscapeCommFunction(self.hComPort, win32.SETXOFF) + + def outWaiting(self): + """return how many characters the in the outgoing buffer""" + flags = win32.DWORD() + comstat = win32.COMSTAT() + if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)): + raise SerialException('call to ClearCommError failed') + return comstat.cbOutQue + + # functions useful for RS-485 adapters + def setRtsToggle(self, rtsToggle): + """Change RTS toggle control setting.""" + self._rtsToggle = rtsToggle + if self._isOpen: self._reconfigurePort() + + def getRtsToggle(self): + """Get the current RTS toggle control setting.""" + return self._rtsToggle + + rtsToggle = property(getRtsToggle, setRtsToggle, doc="RTS toggle control setting") + + +# assemble Serial class with the platform specific implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(Win32Serial, FileLike): + pass +else: + # io library present + class Serial(Win32Serial, io.RawIOBase): + pass + + +# Nur Testfunktion!! +if __name__ == '__main__': + s = Serial(0) + sys.stdout.write("%s\n" % s) + + s = Serial() + sys.stdout.write("%s\n" % s) + + s.baudrate = 19200 + s.databits = 7 + s.close() + s.port = 0 + s.open() + sys.stdout.write("%s\n" % s) + diff --git a/Source/Inkscape/EggBotControl.Original/serial/serialwin32.pyc b/Source/Inkscape/EggBotControl.Original/serial/serialwin32.pyc new file mode 100644 index 0000000..ccffbe5 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/serialwin32.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/sermsdos.py b/Source/Inkscape/EggBotControl.Original/serial/sermsdos.py new file mode 100644 index 0000000..09a0017 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/sermsdos.py @@ -0,0 +1,200 @@ +# sermsdos.py +# +# History: +# +# 3rd September 2002 Dave Haynes +# 1. First defined +# +# Although this code should run under the latest versions of +# Python, on DOS-based platforms such as Windows 95 and 98, +# it has been specifically written to be compatible with +# PyDOS, available at: +# http://www.python.org/ftp/python/wpy/dos.html +# +# PyDOS is a stripped-down version of Python 1.5.2 for +# DOS machines. Therefore, in making changes to this file, +# please respect Python 1.5.2 syntax. In addition, please +# limit the width of this file to 60 characters. +# +# Note also that the modules in PyDOS contain fewer members +# than other versions, so we are restricted to using the +# following: +# +# In module os: +# ------------- +# environ, chdir, getcwd, getpid, umask, fdopen, close, +# dup, dup2, fstat, lseek, open, read, write, O_RDONLY, +# O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL, O_TRUNC, +# access, F_OK, R_OK, W_OK, X_OK, chmod, listdir, mkdir, +# remove, rename, renames, rmdir, stat, unlink, utime, +# execl, execle, execlp, execlpe, execvp, execvpe, _exit, +# system. +# +# In module os.path: +# ------------------ +# curdir, pardir, sep, altsep, pathsep, defpath, linesep. +# + +import os +import sys +import string +import serial.serialutil + +BAUD_RATES = { + 110: "11", + 150: "15", + 300: "30", + 600: "60", + 1200: "12", + 2400: "24", + 4800: "48", + 9600: "96", + 19200: "19"} + +(PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, +PARITY_SPACE) = (0, 1, 2, 3, 4) +(STOPBITS_ONE, STOPBITS_ONEANDAHALF, +STOPBITS_TWO) = (1, 1.5, 2) +FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5, 6, 7, 8) +(RETURN_ERROR, RETURN_BUSY, RETURN_RETRY, RETURN_READY, +RETURN_NONE) = ('E', 'B', 'P', 'R', 'N') +portNotOpenError = ValueError('port not open') + +def device(portnum): + return 'COM%d' % (portnum+1) + +class Serial(serialutil.FileLike): + """ + port: number of device; numbering starts at + zero. if everything fails, the user can + specify a device string, note that this + isn't portable any more + baudrate: baud rate + bytesize: number of databits + parity: enable parity checking + stopbits: number of stopbits + timeout: set a timeout (None for waiting forever) + xonxoff: enable software flow control + rtscts: enable RTS/CTS flow control + retry: DOS retry mode + """ + def __init__(self, + port, + baudrate = 9600, + bytesize = EIGHTBITS, + parity = PARITY_NONE, + stopbits = STOPBITS_ONE, + timeout = None, + xonxoff = 0, + rtscts = 0, + retry = RETURN_RETRY + ): + + if type(port) == type(''): + # strings are taken directly + self.portstr = port + else: + # numbers are transformed to a string + self.portstr = device(port+1) + + self.baud = BAUD_RATES[baudrate] + self.bytesize = str(bytesize) + + if parity == PARITY_NONE: + self.parity = 'N' + elif parity == PARITY_EVEN: + self.parity = 'E' + elif parity == PARITY_ODD: + self.parity = 'O' + elif parity == PARITY_MARK: + self.parity = 'M' + elif parity == PARITY_SPACE: + self.parity = 'S' + + self.stop = str(stopbits) + self.retry = retry + self.filename = "sermsdos.tmp" + + self._config(self.portstr, self.baud, self.parity, + self.bytesize, self.stop, self.retry, self.filename) + + def __del__(self): + self.close() + + def close(self): + pass + + def _config(self, port, baud, parity, data, stop, retry, + filename): + comString = string.join(("MODE ", port, ":" + , " BAUD= ", baud, " PARITY= ", parity + , " DATA= ", data, " STOP= ", stop, " RETRY= ", + retry, " > ", filename ), '') + os.system(comString) + + def setBaudrate(self, baudrate): + self._config(self.portstr, BAUD_RATES[baudrate], + self.parity, self.bytesize, self.stop, self.retry, + self.filename) + + def inWaiting(self): + """returns the number of bytes waiting to be read""" + raise NotImplementedError + + def read(self, num = 1): + """Read num bytes from serial port""" + handle = os.open(self.portstr, + os.O_RDONLY | os.O_BINARY) + rv = os.read(handle, num) + os.close(handle) + return rv + + def write(self, s): + """Write string to serial port""" + handle = os.open(self.portstr, + os.O_WRONLY | os.O_BINARY) + rv = os.write(handle, s) + os.close(handle) + return rv + + def flushInput(self): + raise NotImplementedError + + def flushOutput(self): + raise NotImplementedError + + def sendBreak(self): + raise NotImplementedError + + def setRTS(self,level=1): + """Set terminal status line""" + raise NotImplementedError + + def setDTR(self,level=1): + """Set terminal status line""" + raise NotImplementedError + + def getCTS(self): + """Eead terminal status line""" + raise NotImplementedError + + def getDSR(self): + """Eead terminal status line""" + raise NotImplementedError + + def getRI(self): + """Eead terminal status line""" + raise NotImplementedError + + def getCD(self): + """Eead terminal status line""" + raise NotImplementedError + + def __repr__(self): + return string.join(( ": ", self.portstr + , self.baud, self.parity, self.bytesize, self.stop, + self.retry , self.filename), ' ') + +if __name__ == '__main__': + s = Serial(0) + sys.stdio.write('%s %s\n' % (__name__, s)) diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/__init__.py b/Source/Inkscape/EggBotControl.Original/serial/tools/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/__init__.py diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/__init__.pyc b/Source/Inkscape/EggBotControl.Original/serial/tools/__init__.pyc new file mode 100644 index 0000000..e974afd --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/__init__.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports.py b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports.py new file mode 100644 index 0000000..d373a55 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +# portable serial port access with python +# this is a wrapper module for different platform implementations of the +# port enumeration feature +# +# (C) 2011-2013 Chris Liechti +# this is distributed under a free software license, see license.txt + +"""\ +This module will provide a function called comports that returns an +iterable (generator or list) that will enumerate available com ports. Note that +on some systems non-existent ports may be listed. + +Additionally a grep function is supplied that can be used to search for ports +based on their descriptions or hardware ID. +""" + +import sys, os, re + +# chose an implementation, depending on os +#~ if sys.platform == 'cli': +#~ else: +import os +# chose an implementation, depending on os +if os.name == 'nt': #sys.platform == 'win32': + from serial.tools.list_ports_windows import * +elif os.name == 'posix': + from serial.tools.list_ports_posix import * +#~ elif os.name == 'java': +else: + raise ImportError("Sorry: no implementation for your platform ('%s') available" % (os.name,)) + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +def grep(regexp): + """\ + Search for ports using a regular expression. Port name, description and + hardware ID are searched. The function returns an iterable that returns the + same tuples as comport() would do. + """ + r = re.compile(regexp, re.I) + for port, desc, hwid in comports(): + if r.search(port) or r.search(desc) or r.search(hwid): + yield port, desc, hwid + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +def main(): + import optparse + + parser = optparse.OptionParser( + usage = "%prog [options] []", + description = "Miniterm - A simple terminal program for the serial port." + ) + + parser.add_option("--debug", + help="print debug messages and tracebacks (development mode)", + dest="debug", + default=False, + action='store_true') + + parser.add_option("-v", "--verbose", + help="show more messages (can be given multiple times)", + dest="verbose", + default=1, + action='count') + + parser.add_option("-q", "--quiet", + help="suppress all messages", + dest="verbose", + action='store_const', + const=0) + + (options, args) = parser.parse_args() + + + hits = 0 + # get iteraror w/ or w/o filter + if args: + if len(args) > 1: + parser.error('more than one regexp not supported') + print "Filtered list with regexp: %r" % (args[0],) + iterator = sorted(grep(args[0])) + else: + iterator = sorted(comports()) + # list them + for port, desc, hwid in iterator: + print("%-20s" % (port,)) + if options.verbose > 1: + print(" desc: %s" % (desc,)) + print(" hwid: %s" % (hwid,)) + hits += 1 + if options.verbose: + if hits: + print("%d ports found" % (hits,)) + else: + print("no ports found") + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# test +if __name__ == '__main__': + main() diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports.pyc b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports.pyc new file mode 100644 index 0000000..70703c7 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_linux.py b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_linux.py new file mode 100644 index 0000000..eb315d4 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_linux.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python + +# portable serial port access with python +# +# This is a module that gathers a list of serial ports including details on +# GNU/Linux systems +# +# (C) 2011-2013 Chris Liechti +# this is distributed under a free software license, see license.txt + +import glob +import sys +import os +import re + +try: + import subprocess +except ImportError: + def popen(argv): + try: + si, so = os.popen4(' '.join(argv)) + return so.read().strip() + except: + raise IOError('lsusb failed') +else: + def popen(argv): + try: + return subprocess.check_output(argv, stderr=subprocess.STDOUT).strip() + except: + raise IOError('lsusb failed') + + +# The comports function is expected to return an iterable that yields tuples of +# 3 strings: port name, human readable description and a hardware ID. +# +# as currently no method is known to get the second two strings easily, they +# are currently just identical to the port name. + +# try to detect the OS so that a device can be selected... +plat = sys.platform.lower() + +def read_line(filename): + """help function to read a single line from a file. returns none""" + try: + f = open(filename) + line = f.readline().strip() + f.close() + return line + except IOError: + return None + +def re_group(regexp, text): + """search for regexp in text, return 1st group on match""" + if sys.version < '3': + m = re.search(regexp, text) + else: + # text is bytes-like + m = re.search(regexp, text.decode('ascii', 'replace')) + if m: return m.group(1) + + +# try to extract descriptions from sysfs. this was done by experimenting, +# no guarantee that it works for all devices or in the future... + +def usb_sysfs_hw_string(sysfs_path): + """given a path to a usb device in sysfs, return a string describing it""" + bus, dev = os.path.basename(os.path.realpath(sysfs_path)).split('-') + snr = read_line(sysfs_path+'/serial') + if snr: + snr_txt = ' SNR=%s' % (snr,) + else: + snr_txt = '' + return 'USB VID:PID=%s:%s%s' % ( + read_line(sysfs_path+'/idVendor'), + read_line(sysfs_path+'/idProduct'), + snr_txt + ) + +def usb_lsusb_string(sysfs_path): + base = os.path.basename(os.path.realpath(sysfs_path)) + bus = base.split('-')[0] + try: + dev = int(read_line(os.path.join(sysfs_path, 'devnum'))) + desc = popen(['lsusb', '-v', '-s', '%s:%s' % (bus, dev)]) + # descriptions from device + iManufacturer = re_group('iManufacturer\s+\w+ (.+)', desc) + iProduct = re_group('iProduct\s+\w+ (.+)', desc) + iSerial = re_group('iSerial\s+\w+ (.+)', desc) or '' + # descriptions from kernel + idVendor = re_group('idVendor\s+0x\w+ (.+)', desc) + idProduct = re_group('idProduct\s+0x\w+ (.+)', desc) + # create descriptions. prefer text from device, fall back to the others + return '%s %s %s' % (iManufacturer or idVendor, iProduct or idProduct, iSerial) + except IOError: + return base + +def describe(device): + """\ + Get a human readable description. + For USB-Serial devices try to run lsusb to get a human readable description. + For USB-CDC devices read the description from sysfs. + """ + base = os.path.basename(device) + # USB-Serial devices + sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base) + if os.path.exists(sys_dev_path): + sys_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path))) + return usb_lsusb_string(sys_usb) + # USB-CDC devices + sys_dev_path = '/sys/class/tty/%s/device/interface' % (base,) + if os.path.exists(sys_dev_path): + return read_line(sys_dev_path) + return base + +def hwinfo(device): + """Try to get a HW identification using sysfs""" + base = os.path.basename(device) + if os.path.exists('/sys/class/tty/%s/device' % (base,)): + # PCI based devices + sys_id_path = '/sys/class/tty/%s/device/id' % (base,) + if os.path.exists(sys_id_path): + return read_line(sys_id_path) + # USB-Serial devices + sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base) + if os.path.exists(sys_dev_path): + sys_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path))) + return usb_sysfs_hw_string(sys_usb) + # USB-CDC devices + if base.startswith('ttyACM'): + sys_dev_path = '/sys/class/tty/%s/device' % (base,) + if os.path.exists(sys_dev_path): + return usb_sysfs_hw_string(sys_dev_path + '/..') + return 'n/a' # XXX directly remove these from the list? + +def comports(): + devices = glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') + return [(d, describe(d), hwinfo(d)) for d in devices] + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# test +if __name__ == '__main__': + for port, desc, hwid in sorted(comports()): + print "%s: %s [%s]" % (port, desc, hwid) diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_osx.py b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_osx.py new file mode 100644 index 0000000..c9ed615 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_osx.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python + +# portable serial port access with python +# +# This is a module that gathers a list of serial ports including details on OSX +# +# code originally from https://github.com/makerbot/pyserial/tree/master/serial/tools +# with contributions from cibomahto, dgs3, FarMcKon, tedbrandston +# and modifications by cliechti +# +# this is distributed under a free software license, see license.txt + + + +# List all of the callout devices in OS/X by querying IOKit. + +# See the following for a reference of how to do this: +# http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/WorkingWSerial/WWSerial_SerialDevs/SerialDevices.html#//apple_ref/doc/uid/TP30000384-CIHGEAFD + +# More help from darwin_hid.py + +# Also see the 'IORegistryExplorer' for an idea of what we are actually searching + +import ctypes +from ctypes import util +import re + +iokit = ctypes.cdll.LoadLibrary(ctypes.util.find_library('IOKit')) +cf = ctypes.cdll.LoadLibrary(ctypes.util.find_library('CoreFoundation')) + +kIOMasterPortDefault = ctypes.c_void_p.in_dll(iokit, "kIOMasterPortDefault") +kCFAllocatorDefault = ctypes.c_void_p.in_dll(cf, "kCFAllocatorDefault") + +kCFStringEncodingMacRoman = 0 + +iokit.IOServiceMatching.restype = ctypes.c_void_p + +iokit.IOServiceGetMatchingServices.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] +iokit.IOServiceGetMatchingServices.restype = ctypes.c_void_p + +iokit.IORegistryEntryGetParentEntry.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] + +iokit.IORegistryEntryCreateCFProperty.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint32] +iokit.IORegistryEntryCreateCFProperty.restype = ctypes.c_void_p + +iokit.IORegistryEntryGetPath.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] +iokit.IORegistryEntryGetPath.restype = ctypes.c_void_p + +iokit.IORegistryEntryGetName.argtypes = [ctypes.c_void_p, ctypes.c_void_p] +iokit.IORegistryEntryGetName.restype = ctypes.c_void_p + +iokit.IOObjectGetClass.argtypes = [ctypes.c_void_p, ctypes.c_void_p] +iokit.IOObjectGetClass.restype = ctypes.c_void_p + +iokit.IOObjectRelease.argtypes = [ctypes.c_void_p] + + +cf.CFStringCreateWithCString.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_int32] +cf.CFStringCreateWithCString.restype = ctypes.c_void_p + +cf.CFStringGetCStringPtr.argtypes = [ctypes.c_void_p, ctypes.c_uint32] +cf.CFStringGetCStringPtr.restype = ctypes.c_char_p + +cf.CFNumberGetValue.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p] +cf.CFNumberGetValue.restype = ctypes.c_void_p + +def get_string_property(device_t, property): + """ Search the given device for the specified string property + + @param device_t Device to search + @param property String to search for. + @return Python string containing the value, or None if not found. + """ + key = cf.CFStringCreateWithCString( + kCFAllocatorDefault, + property.encode("mac_roman"), + kCFStringEncodingMacRoman + ) + + CFContainer = iokit.IORegistryEntryCreateCFProperty( + device_t, + key, + kCFAllocatorDefault, + 0 + ); + + output = None + + if CFContainer: + output = cf.CFStringGetCStringPtr(CFContainer, 0) + + return output + +def get_int_property(device_t, property): + """ Search the given device for the specified string property + + @param device_t Device to search + @param property String to search for. + @return Python string containing the value, or None if not found. + """ + key = cf.CFStringCreateWithCString( + kCFAllocatorDefault, + property.encode("mac_roman"), + kCFStringEncodingMacRoman + ) + + CFContainer = iokit.IORegistryEntryCreateCFProperty( + device_t, + key, + kCFAllocatorDefault, + 0 + ); + + number = ctypes.c_uint16() + + if CFContainer: + output = cf.CFNumberGetValue(CFContainer, 2, ctypes.byref(number)) + + return number.value + +def IORegistryEntryGetName(device): + pathname = ctypes.create_string_buffer(100) # TODO: Is this ok? + iokit.IOObjectGetClass( + device, + ctypes.byref(pathname) + ) + + return pathname.value + +def GetParentDeviceByType(device, parent_type): + """ Find the first parent of a device that implements the parent_type + @param IOService Service to inspect + @return Pointer to the parent type, or None if it was not found. + """ + # First, try to walk up the IOService tree to find a parent of this device that is a IOUSBDevice. + while IORegistryEntryGetName(device) != parent_type: + parent = ctypes.c_void_p() + response = iokit.IORegistryEntryGetParentEntry( + device, + "IOService".encode("mac_roman"), + ctypes.byref(parent) + ) + + # If we weren't able to find a parent for the device, we're done. + if response != 0: + return None + + device = parent + + return device + +def GetIOServicesByType(service_type): + """ + """ + serial_port_iterator = ctypes.c_void_p() + + response = iokit.IOServiceGetMatchingServices( + kIOMasterPortDefault, + iokit.IOServiceMatching(service_type), + ctypes.byref(serial_port_iterator) + ) + + services = [] + while iokit.IOIteratorIsValid(serial_port_iterator): + service = iokit.IOIteratorNext(serial_port_iterator) + if not service: + break + services.append(service) + + iokit.IOObjectRelease(serial_port_iterator) + + return services + +def comports(): + # Scan for all iokit serial ports + services = GetIOServicesByType('IOSerialBSDClient') + + ports = [] + for service in services: + info = [] + + # First, add the callout device file. + info.append(get_string_property(service, "IOCalloutDevice")) + + # If the serial port is implemented by a + usb_device = GetParentDeviceByType(service, "IOUSBDevice") + if usb_device != None: + info.append(get_string_property(usb_device, "USB Product Name")) + + info.append( + "USB VID:PID=%x:%x SNR=%s"%( + get_int_property(usb_device, "idVendor"), + get_int_property(usb_device, "idProduct"), + get_string_property(usb_device, "USB Serial Number")) + ) + else: + info.append('n/a') + info.append('n/a') + + ports.append(info) + + return ports + +# test +if __name__ == '__main__': + for port, desc, hwid in sorted(comports()): + print "%s: %s [%s]" % (port, desc, hwid) + diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_posix.py b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_posix.py new file mode 100644 index 0000000..09f115f --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_posix.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python + +# portable serial port access with python + +# This is a module that gathers a list of serial ports on POSIXy systems. +# For some specific implementations, see also list_ports_linux, list_ports_osx +# +# this is a wrapper module for different platform implementations of the +# port enumeration feature +# +# (C) 2011-2013 Chris Liechti +# this is distributed under a free software license, see license.txt + +"""\ +The ``comports`` function is expected to return an iterable that yields tuples +of 3 strings: port name, human readable description and a hardware ID. + +As currently no method is known to get the second two strings easily, they are +currently just identical to the port name. +""" + +import glob +import sys +import os + +# try to detect the OS so that a device can be selected... +plat = sys.platform.lower() + +if plat[:5] == 'linux': # Linux (confirmed) + from serial.tools.list_ports_linux import comports + +elif plat == 'cygwin': # cygwin/win32 + def comports(): + devices = glob.glob('/dev/com*') + return [(d, d, d) for d in devices] + +elif plat[:7] == 'openbsd': # OpenBSD + def comports(): + devices = glob.glob('/dev/cua*') + return [(d, d, d) for d in devices] + +elif plat[:3] == 'bsd' or \ + plat[:7] == 'freebsd': + + def comports(): + devices = glob.glob('/dev/cuad*') + return [(d, d, d) for d in devices] + +elif plat[:6] == 'darwin': # OS X (confirmed) + from serial.tools.list_ports_osx import comports + +elif plat[:6] == 'netbsd': # NetBSD + def comports(): + """scan for available ports. return a list of device names.""" + devices = glob.glob('/dev/dty*') + return [(d, d, d) for d in devices] + +elif plat[:4] == 'irix': # IRIX + def comports(): + """scan for available ports. return a list of device names.""" + devices = glob.glob('/dev/ttyf*') + return [(d, d, d) for d in devices] + +elif plat[:2] == 'hp': # HP-UX (not tested) + def comports(): + """scan for available ports. return a list of device names.""" + devices = glob.glob('/dev/tty*p0') + return [(d, d, d) for d in devices] + +elif plat[:5] == 'sunos': # Solaris/SunOS + def comports(): + """scan for available ports. return a list of device names.""" + devices = glob.glob('/dev/tty*c') + return [(d, d, d) for d in devices] + +elif plat[:3] == 'aix': # AIX + def comports(): + """scan for available ports. return a list of device names.""" + devices = glob.glob('/dev/tty*') + return [(d, d, d) for d in devices] + +else: + # platform detection has failed... + sys.stderr.write("""\ +don't know how to enumerate ttys on this system. +! I you know how the serial ports are named send this information to +! the author of this module: + +sys.platform = %r +os.name = %r +pySerial version = %s + +also add the naming scheme of the serial ports and with a bit luck you can get +this module running... +""" % (sys.platform, os.name, serial.VERSION)) + raise ImportError("Sorry: no implementation for your platform ('%s') available" % (os.name,)) + +# test +if __name__ == '__main__': + for port, desc, hwid in sorted(comports()): + print "%s: %s [%s]" % (port, desc, hwid) diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_windows.py b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_windows.py new file mode 100644 index 0000000..ca597ca --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_windows.py @@ -0,0 +1,240 @@ +import ctypes +import re + +def ValidHandle(value, func, arguments): + if value == 0: + raise ctypes.WinError() + return value + +import serial +from serial.win32 import ULONG_PTR, is_64bit +from ctypes.wintypes import HANDLE +from ctypes.wintypes import BOOL +from ctypes.wintypes import HWND +from ctypes.wintypes import DWORD +from ctypes.wintypes import WORD +from ctypes.wintypes import LONG +from ctypes.wintypes import ULONG +from ctypes.wintypes import LPCSTR +from ctypes.wintypes import HKEY +from ctypes.wintypes import BYTE + +NULL = 0 +HDEVINFO = ctypes.c_void_p +PCTSTR = ctypes.c_char_p +PTSTR = ctypes.c_void_p +CHAR = ctypes.c_char +LPDWORD = PDWORD = ctypes.POINTER(DWORD) +#~ LPBYTE = PBYTE = ctypes.POINTER(BYTE) +LPBYTE = PBYTE = ctypes.c_void_p # XXX avoids error about types + +ACCESS_MASK = DWORD +REGSAM = ACCESS_MASK + + +def byte_buffer(length): + """Get a buffer for a string""" + return (BYTE*length)() + +def string(buffer): + s = [] + for c in buffer: + if c == 0: break + s.append(chr(c & 0xff)) # "& 0xff": hack to convert signed to unsigned + return ''.join(s) + + +class GUID(ctypes.Structure): + _fields_ = [ + ('Data1', DWORD), + ('Data2', WORD), + ('Data3', WORD), + ('Data4', BYTE*8), + ] + def __str__(self): + return "{%08x-%04x-%04x-%s-%s}" % ( + self.Data1, + self.Data2, + self.Data3, + ''.join(["%02x" % d for d in self.Data4[:2]]), + ''.join(["%02x" % d for d in self.Data4[2:]]), + ) + +class SP_DEVINFO_DATA(ctypes.Structure): + _fields_ = [ + ('cbSize', DWORD), + ('ClassGuid', GUID), + ('DevInst', DWORD), + ('Reserved', ULONG_PTR), + ] + def __str__(self): + return "ClassGuid:%s DevInst:%s" % (self.ClassGuid, self.DevInst) +PSP_DEVINFO_DATA = ctypes.POINTER(SP_DEVINFO_DATA) + +PSP_DEVICE_INTERFACE_DETAIL_DATA = ctypes.c_void_p + +setupapi = ctypes.windll.LoadLibrary("setupapi") +SetupDiDestroyDeviceInfoList = setupapi.SetupDiDestroyDeviceInfoList +SetupDiDestroyDeviceInfoList.argtypes = [HDEVINFO] +SetupDiDestroyDeviceInfoList.restype = BOOL + +SetupDiClassGuidsFromName = setupapi.SetupDiClassGuidsFromNameA +SetupDiClassGuidsFromName.argtypes = [PCTSTR, ctypes.POINTER(GUID), DWORD, PDWORD] +SetupDiClassGuidsFromName.restype = BOOL + +SetupDiEnumDeviceInfo = setupapi.SetupDiEnumDeviceInfo +SetupDiEnumDeviceInfo.argtypes = [HDEVINFO, DWORD, PSP_DEVINFO_DATA] +SetupDiEnumDeviceInfo.restype = BOOL + +SetupDiGetClassDevs = setupapi.SetupDiGetClassDevsA +SetupDiGetClassDevs.argtypes = [ctypes.POINTER(GUID), PCTSTR, HWND, DWORD] +SetupDiGetClassDevs.restype = HDEVINFO +SetupDiGetClassDevs.errcheck = ValidHandle + +SetupDiGetDeviceRegistryProperty = setupapi.SetupDiGetDeviceRegistryPropertyA +SetupDiGetDeviceRegistryProperty.argtypes = [HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD] +SetupDiGetDeviceRegistryProperty.restype = BOOL + +SetupDiGetDeviceInstanceId = setupapi.SetupDiGetDeviceInstanceIdA +SetupDiGetDeviceInstanceId.argtypes = [HDEVINFO, PSP_DEVINFO_DATA, PTSTR, DWORD, PDWORD] +SetupDiGetDeviceInstanceId.restype = BOOL + +SetupDiOpenDevRegKey = setupapi.SetupDiOpenDevRegKey +SetupDiOpenDevRegKey.argtypes = [HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM] +SetupDiOpenDevRegKey.restype = HKEY + +advapi32 = ctypes.windll.LoadLibrary("Advapi32") +RegCloseKey = advapi32.RegCloseKey +RegCloseKey.argtypes = [HKEY] +RegCloseKey.restype = LONG + +RegQueryValueEx = advapi32.RegQueryValueExA +RegQueryValueEx.argtypes = [HKEY, LPCSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD] +RegQueryValueEx.restype = LONG + + +DIGCF_PRESENT = 2 +DIGCF_DEVICEINTERFACE = 16 +INVALID_HANDLE_VALUE = 0 +ERROR_INSUFFICIENT_BUFFER = 122 +SPDRP_HARDWAREID = 1 +SPDRP_FRIENDLYNAME = 12 +DICS_FLAG_GLOBAL = 1 +DIREG_DEV = 0x00000001 +KEY_READ = 0x20019 + +# workaround for compatibility between Python 2.x and 3.x +Ports = serial.to_bytes([80, 111, 114, 116, 115]) # "Ports" +PortName = serial.to_bytes([80, 111, 114, 116, 78, 97, 109, 101]) # "PortName" + +def comports(): + GUIDs = (GUID*8)() # so far only seen one used, so hope 8 are enough... + guids_size = DWORD() + if not SetupDiClassGuidsFromName( + Ports, + GUIDs, + ctypes.sizeof(GUIDs), + ctypes.byref(guids_size)): + raise ctypes.WinError() + + # repeat for all possible GUIDs + for index in range(guids_size.value): + g_hdi = SetupDiGetClassDevs( + ctypes.byref(GUIDs[index]), + None, + NULL, + DIGCF_PRESENT) # was DIGCF_PRESENT|DIGCF_DEVICEINTERFACE which misses CDC ports + + devinfo = SP_DEVINFO_DATA() + devinfo.cbSize = ctypes.sizeof(devinfo) + index = 0 + while SetupDiEnumDeviceInfo(g_hdi, index, ctypes.byref(devinfo)): + index += 1 + + # get the real com port name + hkey = SetupDiOpenDevRegKey( + g_hdi, + ctypes.byref(devinfo), + DICS_FLAG_GLOBAL, + 0, + DIREG_DEV, # DIREG_DRV for SW info + KEY_READ) + port_name_buffer = byte_buffer(250) + port_name_length = ULONG(ctypes.sizeof(port_name_buffer)) + RegQueryValueEx( + hkey, + PortName, + None, + None, + ctypes.byref(port_name_buffer), + ctypes.byref(port_name_length)) + RegCloseKey(hkey) + + # unfortunately does this method also include parallel ports. + # we could check for names starting with COM or just exclude LPT + # and hope that other "unknown" names are serial ports... + if string(port_name_buffer).startswith('LPT'): + continue + + # hardware ID + szHardwareID = byte_buffer(250) + # try to get ID that includes serial number + if not SetupDiGetDeviceInstanceId( + g_hdi, + ctypes.byref(devinfo), + ctypes.byref(szHardwareID), + ctypes.sizeof(szHardwareID) - 1, + None): + # fall back to more generic hardware ID if that would fail + if not SetupDiGetDeviceRegistryProperty( + g_hdi, + ctypes.byref(devinfo), + SPDRP_HARDWAREID, + None, + ctypes.byref(szHardwareID), + ctypes.sizeof(szHardwareID) - 1, + None): + # Ignore ERROR_INSUFFICIENT_BUFFER + if ctypes.GetLastError() != ERROR_INSUFFICIENT_BUFFER: + raise ctypes.WinError() + # stringify + szHardwareID_str = string(szHardwareID) + + # in case of USB, make a more readable string, similar to that form + # that we also generate on other platforms + if szHardwareID_str.startswith('USB'): + m = re.search(r'VID_([0-9a-f]{4})&PID_([0-9a-f]{4})(\\(\w+))?', szHardwareID_str, re.I) + if m: + if m.group(4): + szHardwareID_str = 'USB VID:PID=%s:%s SNR=%s' % (m.group(1), m.group(2), m.group(4)) + else: + szHardwareID_str = 'USB VID:PID=%s:%s' % (m.group(1), m.group(2)) + + # friendly name + szFriendlyName = byte_buffer(250) + if not SetupDiGetDeviceRegistryProperty( + g_hdi, + ctypes.byref(devinfo), + SPDRP_FRIENDLYNAME, + #~ SPDRP_DEVICEDESC, + None, + ctypes.byref(szFriendlyName), + ctypes.sizeof(szFriendlyName) - 1, + None): + # Ignore ERROR_INSUFFICIENT_BUFFER + #~ if ctypes.GetLastError() != ERROR_INSUFFICIENT_BUFFER: + #~ raise IOError("failed to get details for %s (%s)" % (devinfo, szHardwareID.value)) + # ignore errors and still include the port in the list, friendly name will be same as port name + yield string(port_name_buffer), 'n/a', szHardwareID_str + else: + yield string(port_name_buffer), string(szFriendlyName), szHardwareID_str + + SetupDiDestroyDeviceInfoList(g_hdi) + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# test +if __name__ == '__main__': + import serial + + for port, desc, hwid in sorted(comports()): + print "%s: %s [%s]" % (port, desc, hwid) diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_windows.pyc b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_windows.pyc new file mode 100644 index 0000000..02e9e30 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/list_ports_windows.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.Original/serial/tools/miniterm.py b/Source/Inkscape/EggBotControl.Original/serial/tools/miniterm.py new file mode 100644 index 0000000..274c7fb --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/tools/miniterm.py @@ -0,0 +1,694 @@ +#!/usr/bin/env python + +# Very simple serial terminal +# (C)2002-2011 Chris Liechti + +# Input characters are sent directly (only LF -> CR/LF/CRLF translation is +# done), received characters are displayed as is (or escaped trough pythons +# repr, useful for debug purposes) + + +import sys, os, serial, threading +try: + from serial.tools.list_ports import comports +except ImportError: + comports = None + +EXITCHARCTER = serial.to_bytes([0x1d]) # GS/CTRL+] +MENUCHARACTER = serial.to_bytes([0x14]) # Menu: CTRL+T + +DEFAULT_PORT = None +DEFAULT_BAUDRATE = 9600 +DEFAULT_RTS = None +DEFAULT_DTR = None + + +def key_description(character): + """generate a readable description for a key""" + ascii_code = ord(character) + if ascii_code < 32: + return 'Ctrl+%c' % (ord('@') + ascii_code) + else: + return repr(character) + + +# help text, starts with blank line! it's a function so that the current values +# for the shortcut keys is used and not the value at program start +def get_help_text(): + return """ +--- pySerial (%(version)s) - miniterm - help +--- +--- %(exit)-8s Exit program +--- %(menu)-8s Menu escape key, followed by: +--- Menu keys: +--- %(itself)-7s Send the menu character itself to remote +--- %(exchar)-7s Send the exit character itself to remote +--- %(info)-7s Show info +--- %(upload)-7s Upload file (prompt will be shown) +--- Toggles: +--- %(rts)-7s RTS %(echo)-7s local echo +--- %(dtr)-7s DTR %(break)-7s BREAK +--- %(lfm)-7s line feed %(repr)-7s Cycle repr mode +--- +--- Port settings (%(menu)s followed by the following): +--- p change port +--- 7 8 set data bits +--- n e o s m change parity (None, Even, Odd, Space, Mark) +--- 1 2 3 set stop bits (1, 2, 1.5) +--- b change baud rate +--- x X disable/enable software flow control +--- r R disable/enable hardware flow control +""" % { + 'version': getattr(serial, 'VERSION', 'unknown version'), + 'exit': key_description(EXITCHARCTER), + 'menu': key_description(MENUCHARACTER), + 'rts': key_description('\x12'), + 'repr': key_description('\x01'), + 'dtr': key_description('\x04'), + 'lfm': key_description('\x0c'), + 'break': key_description('\x02'), + 'echo': key_description('\x05'), + 'info': key_description('\x09'), + 'upload': key_description('\x15'), + 'itself': key_description(MENUCHARACTER), + 'exchar': key_description(EXITCHARCTER), +} + +if sys.version_info >= (3, 0): + def character(b): + return b.decode('latin1') +else: + def character(b): + return b + +LF = serial.to_bytes([10]) +CR = serial.to_bytes([13]) +CRLF = serial.to_bytes([13, 10]) + +X00 = serial.to_bytes([0]) +X0E = serial.to_bytes([0x0e]) + +# first choose a platform dependant way to read single characters from the console +global console + +if os.name == 'nt': + import msvcrt + class Console(object): + def __init__(self): + pass + + def setup(self): + pass # Do nothing for 'nt' + + def cleanup(self): + pass # Do nothing for 'nt' + + def getkey(self): + while True: + z = msvcrt.getch() + if z == X00 or z == X0E: # functions keys, ignore + msvcrt.getch() + else: + if z == CR: + return LF + return z + + console = Console() + +elif os.name == 'posix': + import termios, sys, os + class Console(object): + def __init__(self): + self.fd = sys.stdin.fileno() + self.old = None + + def setup(self): + self.old = termios.tcgetattr(self.fd) + new = termios.tcgetattr(self.fd) + new[3] = new[3] & ~termios.ICANON & ~termios.ECHO & ~termios.ISIG + new[6][termios.VMIN] = 1 + new[6][termios.VTIME] = 0 + termios.tcsetattr(self.fd, termios.TCSANOW, new) + + def getkey(self): + c = os.read(self.fd, 1) + return c + + def cleanup(self): + if self.old is not None: + termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old) + + console = Console() + + def cleanup_console(): + console.cleanup() + + sys.exitfunc = cleanup_console # terminal modes have to be restored on exit... + +else: + raise NotImplementedError("Sorry no implementation for your platform (%s) available." % sys.platform) + + +def dump_port_list(): + if comports: + sys.stderr.write('\n--- Available ports:\n') + for port, desc, hwid in sorted(comports()): + #~ sys.stderr.write('--- %-20s %s [%s]\n' % (port, desc, hwid)) + sys.stderr.write('--- %-20s %s\n' % (port, desc)) + + +CONVERT_CRLF = 2 +CONVERT_CR = 1 +CONVERT_LF = 0 +NEWLINE_CONVERISON_MAP = (LF, CR, CRLF) +LF_MODES = ('LF', 'CR', 'CR/LF') + +REPR_MODES = ('raw', 'some control', 'all control', 'hex') + +class Miniterm(object): + def __init__(self, port, baudrate, parity, rtscts, xonxoff, echo=False, convert_outgoing=CONVERT_CRLF, repr_mode=0): + try: + self.serial = serial.serial_for_url(port, baudrate, parity=parity, rtscts=rtscts, xonxoff=xonxoff, timeout=1) + except AttributeError: + # happens when the installed pyserial is older than 2.5. use the + # Serial class directly then. + self.serial = serial.Serial(port, baudrate, parity=parity, rtscts=rtscts, xonxoff=xonxoff, timeout=1) + self.echo = echo + self.repr_mode = repr_mode + self.convert_outgoing = convert_outgoing + self.newline = NEWLINE_CONVERISON_MAP[self.convert_outgoing] + self.dtr_state = True + self.rts_state = True + self.break_state = False + + def _start_reader(self): + """Start reader thread""" + self._reader_alive = True + # start serial->console thread + self.receiver_thread = threading.Thread(target=self.reader) + self.receiver_thread.setDaemon(True) + self.receiver_thread.start() + + def _stop_reader(self): + """Stop reader thread only, wait for clean exit of thread""" + self._reader_alive = False + self.receiver_thread.join() + + + def start(self): + self.alive = True + self._start_reader() + # enter console->serial loop + self.transmitter_thread = threading.Thread(target=self.writer) + self.transmitter_thread.setDaemon(True) + self.transmitter_thread.start() + + def stop(self): + self.alive = False + + def join(self, transmit_only=False): + self.transmitter_thread.join() + if not transmit_only: + self.receiver_thread.join() + + def dump_port_settings(self): + sys.stderr.write("\n--- Settings: %s %s,%s,%s,%s\n" % ( + self.serial.portstr, + self.serial.baudrate, + self.serial.bytesize, + self.serial.parity, + self.serial.stopbits)) + sys.stderr.write('--- RTS: %-8s DTR: %-8s BREAK: %-8s\n' % ( + (self.rts_state and 'active' or 'inactive'), + (self.dtr_state and 'active' or 'inactive'), + (self.break_state and 'active' or 'inactive'))) + try: + sys.stderr.write('--- CTS: %-8s DSR: %-8s RI: %-8s CD: %-8s\n' % ( + (self.serial.getCTS() and 'active' or 'inactive'), + (self.serial.getDSR() and 'active' or 'inactive'), + (self.serial.getRI() and 'active' or 'inactive'), + (self.serial.getCD() and 'active' or 'inactive'))) + except serial.SerialException: + # on RFC 2217 ports it can happen to no modem state notification was + # yet received. ignore this error. + pass + sys.stderr.write('--- software flow control: %s\n' % (self.serial.xonxoff and 'active' or 'inactive')) + sys.stderr.write('--- hardware flow control: %s\n' % (self.serial.rtscts and 'active' or 'inactive')) + sys.stderr.write('--- data escaping: %s linefeed: %s\n' % ( + REPR_MODES[self.repr_mode], + LF_MODES[self.convert_outgoing])) + + def reader(self): + """loop and copy serial->console""" + try: + while self.alive and self._reader_alive: + data = character(self.serial.read(1)) + + if self.repr_mode == 0: + # direct output, just have to care about newline setting + if data == '\r' and self.convert_outgoing == CONVERT_CR: + sys.stdout.write('\n') + else: + sys.stdout.write(data) + elif self.repr_mode == 1: + # escape non-printable, let pass newlines + if self.convert_outgoing == CONVERT_CRLF and data in '\r\n': + if data == '\n': + sys.stdout.write('\n') + elif data == '\r': + pass + elif data == '\n' and self.convert_outgoing == CONVERT_LF: + sys.stdout.write('\n') + elif data == '\r' and self.convert_outgoing == CONVERT_CR: + sys.stdout.write('\n') + else: + sys.stdout.write(repr(data)[1:-1]) + elif self.repr_mode == 2: + # escape all non-printable, including newline + sys.stdout.write(repr(data)[1:-1]) + elif self.repr_mode == 3: + # escape everything (hexdump) + for c in data: + sys.stdout.write("%s " % c.encode('hex')) + sys.stdout.flush() + except serial.SerialException, e: + self.alive = False + # would be nice if the console reader could be interruptted at this + # point... + raise + + + def writer(self): + """\ + Loop and copy console->serial until EXITCHARCTER character is + found. When MENUCHARACTER is found, interpret the next key + locally. + """ + menu_active = False + try: + while self.alive: + try: + b = console.getkey() + except KeyboardInterrupt: + b = serial.to_bytes([3]) + c = character(b) + if menu_active: + if c == MENUCHARACTER or c == EXITCHARCTER: # Menu character again/exit char -> send itself + self.serial.write(b) # send character + if self.echo: + sys.stdout.write(c) + elif c == '\x15': # CTRL+U -> upload file + sys.stderr.write('\n--- File to upload: ') + sys.stderr.flush() + console.cleanup() + filename = sys.stdin.readline().rstrip('\r\n') + if filename: + try: + file = open(filename, 'r') + sys.stderr.write('--- Sending file %s ---\n' % filename) + while True: + line = file.readline().rstrip('\r\n') + if not line: + break + self.serial.write(line) + self.serial.write('\r\n') + # Wait for output buffer to drain. + self.serial.flush() + sys.stderr.write('.') # Progress indicator. + sys.stderr.write('\n--- File %s sent ---\n' % filename) + except IOError, e: + sys.stderr.write('--- ERROR opening file %s: %s ---\n' % (filename, e)) + console.setup() + elif c in '\x08hH?': # CTRL+H, h, H, ? -> Show help + sys.stderr.write(get_help_text()) + elif c == '\x12': # CTRL+R -> Toggle RTS + self.rts_state = not self.rts_state + self.serial.setRTS(self.rts_state) + sys.stderr.write('--- RTS %s ---\n' % (self.rts_state and 'active' or 'inactive')) + elif c == '\x04': # CTRL+D -> Toggle DTR + self.dtr_state = not self.dtr_state + self.serial.setDTR(self.dtr_state) + sys.stderr.write('--- DTR %s ---\n' % (self.dtr_state and 'active' or 'inactive')) + elif c == '\x02': # CTRL+B -> toggle BREAK condition + self.break_state = not self.break_state + self.serial.setBreak(self.break_state) + sys.stderr.write('--- BREAK %s ---\n' % (self.break_state and 'active' or 'inactive')) + elif c == '\x05': # CTRL+E -> toggle local echo + self.echo = not self.echo + sys.stderr.write('--- local echo %s ---\n' % (self.echo and 'active' or 'inactive')) + elif c == '\x09': # CTRL+I -> info + self.dump_port_settings() + elif c == '\x01': # CTRL+A -> cycle escape mode + self.repr_mode += 1 + if self.repr_mode > 3: + self.repr_mode = 0 + sys.stderr.write('--- escape data: %s ---\n' % ( + REPR_MODES[self.repr_mode], + )) + elif c == '\x0c': # CTRL+L -> cycle linefeed mode + self.convert_outgoing += 1 + if self.convert_outgoing > 2: + self.convert_outgoing = 0 + self.newline = NEWLINE_CONVERISON_MAP[self.convert_outgoing] + sys.stderr.write('--- line feed %s ---\n' % ( + LF_MODES[self.convert_outgoing], + )) + elif c in 'pP': # P -> change port + dump_port_list() + sys.stderr.write('--- Enter port name: ') + sys.stderr.flush() + console.cleanup() + try: + port = sys.stdin.readline().strip() + except KeyboardInterrupt: + port = None + console.setup() + if port and port != self.serial.port: + # reader thread needs to be shut down + self._stop_reader() + # save settings + settings = self.serial.getSettingsDict() + try: + try: + new_serial = serial.serial_for_url(port, do_not_open=True) + except AttributeError: + # happens when the installed pyserial is older than 2.5. use the + # Serial class directly then. + new_serial = serial.Serial() + new_serial.port = port + # restore settings and open + new_serial.applySettingsDict(settings) + new_serial.open() + new_serial.setRTS(self.rts_state) + new_serial.setDTR(self.dtr_state) + new_serial.setBreak(self.break_state) + except Exception, e: + sys.stderr.write('--- ERROR opening new port: %s ---\n' % (e,)) + new_serial.close() + else: + self.serial.close() + self.serial = new_serial + sys.stderr.write('--- Port changed to: %s ---\n' % (self.serial.port,)) + # and restart the reader thread + self._start_reader() + elif c in 'bB': # B -> change baudrate + sys.stderr.write('\n--- Baudrate: ') + sys.stderr.flush() + console.cleanup() + backup = self.serial.baudrate + try: + self.serial.baudrate = int(sys.stdin.readline().strip()) + except ValueError, e: + sys.stderr.write('--- ERROR setting baudrate: %s ---\n' % (e,)) + self.serial.baudrate = backup + else: + self.dump_port_settings() + console.setup() + elif c == '8': # 8 -> change to 8 bits + self.serial.bytesize = serial.EIGHTBITS + self.dump_port_settings() + elif c == '7': # 7 -> change to 8 bits + self.serial.bytesize = serial.SEVENBITS + self.dump_port_settings() + elif c in 'eE': # E -> change to even parity + self.serial.parity = serial.PARITY_EVEN + self.dump_port_settings() + elif c in 'oO': # O -> change to odd parity + self.serial.parity = serial.PARITY_ODD + self.dump_port_settings() + elif c in 'mM': # M -> change to mark parity + self.serial.parity = serial.PARITY_MARK + self.dump_port_settings() + elif c in 'sS': # S -> change to space parity + self.serial.parity = serial.PARITY_SPACE + self.dump_port_settings() + elif c in 'nN': # N -> change to no parity + self.serial.parity = serial.PARITY_NONE + self.dump_port_settings() + elif c == '1': # 1 -> change to 1 stop bits + self.serial.stopbits = serial.STOPBITS_ONE + self.dump_port_settings() + elif c == '2': # 2 -> change to 2 stop bits + self.serial.stopbits = serial.STOPBITS_TWO + self.dump_port_settings() + elif c == '3': # 3 -> change to 1.5 stop bits + self.serial.stopbits = serial.STOPBITS_ONE_POINT_FIVE + self.dump_port_settings() + elif c in 'xX': # X -> change software flow control + self.serial.xonxoff = (c == 'X') + self.dump_port_settings() + elif c in 'rR': # R -> change hardware flow control + self.serial.rtscts = (c == 'R') + self.dump_port_settings() + else: + sys.stderr.write('--- unknown menu character %s --\n' % key_description(c)) + menu_active = False + elif c == MENUCHARACTER: # next char will be for menu + menu_active = True + elif c == EXITCHARCTER: + self.stop() + break # exit app + elif c == '\n': + self.serial.write(self.newline) # send newline character(s) + if self.echo: + sys.stdout.write(c) # local echo is a real newline in any case + sys.stdout.flush() + else: + self.serial.write(b) # send byte + if self.echo: + sys.stdout.write(c) + sys.stdout.flush() + except: + self.alive = False + raise + +def main(): + import optparse + + parser = optparse.OptionParser( + usage = "%prog [options] [port [baudrate]]", + description = "Miniterm - A simple terminal program for the serial port." + ) + + group = optparse.OptionGroup(parser, "Port settings") + + group.add_option("-p", "--port", + dest = "port", + help = "port, a number or a device name. (deprecated option, use parameter instead)", + default = DEFAULT_PORT + ) + + group.add_option("-b", "--baud", + dest = "baudrate", + action = "store", + type = 'int', + help = "set baud rate, default %default", + default = DEFAULT_BAUDRATE + ) + + group.add_option("--parity", + dest = "parity", + action = "store", + help = "set parity, one of [N, E, O, S, M], default=N", + default = 'N' + ) + + group.add_option("--rtscts", + dest = "rtscts", + action = "store_true", + help = "enable RTS/CTS flow control (default off)", + default = False + ) + + group.add_option("--xonxoff", + dest = "xonxoff", + action = "store_true", + help = "enable software flow control (default off)", + default = False + ) + + group.add_option("--rts", + dest = "rts_state", + action = "store", + type = 'int', + help = "set initial RTS line state (possible values: 0, 1)", + default = DEFAULT_RTS + ) + + group.add_option("--dtr", + dest = "dtr_state", + action = "store", + type = 'int', + help = "set initial DTR line state (possible values: 0, 1)", + default = DEFAULT_DTR + ) + + parser.add_option_group(group) + + group = optparse.OptionGroup(parser, "Data handling") + + group.add_option("-e", "--echo", + dest = "echo", + action = "store_true", + help = "enable local echo (default off)", + default = False + ) + + group.add_option("--cr", + dest = "cr", + action = "store_true", + help = "do not send CR+LF, send CR only", + default = False + ) + + group.add_option("--lf", + dest = "lf", + action = "store_true", + help = "do not send CR+LF, send LF only", + default = False + ) + + group.add_option("-D", "--debug", + dest = "repr_mode", + action = "count", + help = """debug received data (escape non-printable chars) +--debug can be given multiple times: +0: just print what is received +1: escape non-printable characters, do newlines as unusual +2: escape non-printable characters, newlines too +3: hex dump everything""", + default = 0 + ) + + parser.add_option_group(group) + + + group = optparse.OptionGroup(parser, "Hotkeys") + + group.add_option("--exit-char", + dest = "exit_char", + action = "store", + type = 'int', + help = "ASCII code of special character that is used to exit the application", + default = 0x1d + ) + + group.add_option("--menu-char", + dest = "menu_char", + action = "store", + type = 'int', + help = "ASCII code of special character that is used to control miniterm (menu)", + default = 0x14 + ) + + parser.add_option_group(group) + + group = optparse.OptionGroup(parser, "Diagnostics") + + group.add_option("-q", "--quiet", + dest = "quiet", + action = "store_true", + help = "suppress non-error messages", + default = False + ) + + parser.add_option_group(group) + + + (options, args) = parser.parse_args() + + options.parity = options.parity.upper() + if options.parity not in 'NEOSM': + parser.error("invalid parity") + + if options.cr and options.lf: + parser.error("only one of --cr or --lf can be specified") + + if options.menu_char == options.exit_char: + parser.error('--exit-char can not be the same as --menu-char') + + global EXITCHARCTER, MENUCHARACTER + EXITCHARCTER = chr(options.exit_char) + MENUCHARACTER = chr(options.menu_char) + + port = options.port + baudrate = options.baudrate + if args: + if options.port is not None: + parser.error("no arguments are allowed, options only when --port is given") + port = args.pop(0) + if args: + try: + baudrate = int(args[0]) + except ValueError: + parser.error("baud rate must be a number, not %r" % args[0]) + args.pop(0) + if args: + parser.error("too many arguments") + else: + # noport given on command line -> ask user now + if port is None: + dump_port_list() + port = raw_input('Enter port name:') + + convert_outgoing = CONVERT_CRLF + if options.cr: + convert_outgoing = CONVERT_CR + elif options.lf: + convert_outgoing = CONVERT_LF + + try: + miniterm = Miniterm( + port, + baudrate, + options.parity, + rtscts=options.rtscts, + xonxoff=options.xonxoff, + echo=options.echo, + convert_outgoing=convert_outgoing, + repr_mode=options.repr_mode, + ) + except serial.SerialException, e: + sys.stderr.write("could not open port %r: %s\n" % (port, e)) + sys.exit(1) + + if not options.quiet: + sys.stderr.write('--- Miniterm on %s: %d,%s,%s,%s ---\n' % ( + miniterm.serial.portstr, + miniterm.serial.baudrate, + miniterm.serial.bytesize, + miniterm.serial.parity, + miniterm.serial.stopbits, + )) + sys.stderr.write('--- Quit: %s | Menu: %s | Help: %s followed by %s ---\n' % ( + key_description(EXITCHARCTER), + key_description(MENUCHARACTER), + key_description(MENUCHARACTER), + key_description('\x08'), + )) + + if options.dtr_state is not None: + if not options.quiet: + sys.stderr.write('--- forcing DTR %s\n' % (options.dtr_state and 'active' or 'inactive')) + miniterm.serial.setDTR(options.dtr_state) + miniterm.dtr_state = options.dtr_state + if options.rts_state is not None: + if not options.quiet: + sys.stderr.write('--- forcing RTS %s\n' % (options.rts_state and 'active' or 'inactive')) + miniterm.serial.setRTS(options.rts_state) + miniterm.rts_state = options.rts_state + + console.setup() + miniterm.start() + try: + miniterm.join(True) + except KeyboardInterrupt: + pass + if not options.quiet: + sys.stderr.write("\n--- exit ---\n") + miniterm.join() + #~ console.cleanup() + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +if __name__ == '__main__': + main() diff --git a/Source/Inkscape/EggBotControl.Original/serial/urlhandler/__init__.py b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/__init__.py diff --git a/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_hwgrep.py b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_hwgrep.py new file mode 100644 index 0000000..62cda43 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_hwgrep.py @@ -0,0 +1,45 @@ +#! python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see __init__.py +# +# This module implements a special URL handler that uses the port listing to +# find ports by searching the string descriptions. +# +# (C) 2011 Chris Liechti +# this is distributed under a free software license, see license.txt +# +# URL format: hwgrep://regexp + +import serial +import serial.tools.list_ports + +class Serial(serial.Serial): + """Just inherit the native Serial port implementation and patch the open function.""" + + def setPort(self, value): + """translate port name before storing it""" + if isinstance(value, basestring) and value.startswith('hwgrep://'): + serial.Serial.setPort(self, self.fromURL(value)) + else: + serial.Serial.setPort(self, value) + + def fromURL(self, url): + """extract host and port from an URL string""" + if url.lower().startswith("hwgrep://"): url = url[9:] + # use a for loop to get the 1st element from the generator + for port, desc, hwid in serial.tools.list_ports.grep(url): + return port + else: + raise serial.SerialException('no ports found matching regexp %r' % (url,)) + + # override property + port = property(serial.Serial.getPort, setPort, doc="Port setting") + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +if __name__ == '__main__': + #~ s = Serial('hwgrep://ttyS0') + s = Serial(None) + s.port = 'hwgrep://ttyS0' + print s + diff --git a/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_loop.py b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_loop.py new file mode 100644 index 0000000..7da94ad --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_loop.py @@ -0,0 +1,265 @@ +#! python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see __init__.py +# +# This module implements a loop back connection receiving itself what it sent. +# +# The purpose of this module is.. well... You can run the unit tests with it. +# and it was so easy to implement ;-) +# +# (C) 2001-2011 Chris Liechti +# this is distributed under a free software license, see license.txt +# +# URL format: loop://[option[/option...]] +# options: +# - "debug" print diagnostic messages + +from serial.serialutil import * +import threading +import time +import logging + +# map log level names to constants. used in fromURL() +LOGGER_LEVELS = { + 'debug': logging.DEBUG, + 'info': logging.INFO, + 'warning': logging.WARNING, + 'error': logging.ERROR, + } + + +class LoopbackSerial(SerialBase): + """Serial port implementation that simulates a loop back connection in plain software.""" + + BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, + 9600, 19200, 38400, 57600, 115200) + + def open(self): + """Open port with current settings. This may throw a SerialException + if the port cannot be opened.""" + if self._isOpen: + raise SerialException("Port is already open.") + self.logger = None + self.buffer_lock = threading.Lock() + self.loop_buffer = bytearray() + self.cts = False + self.dsr = False + + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + # not that there is anything to open, but the function applies the + # options found in the URL + self.fromURL(self.port) + + # not that there anything to configure... + self._reconfigurePort() + # all things set up get, now a clean start + self._isOpen = True + if not self._rtscts: + self.setRTS(True) + self.setDTR(True) + self.flushInput() + self.flushOutput() + + def _reconfigurePort(self): + """Set communication parameters on opened port. for the loop:// + protocol all settings are ignored!""" + # not that's it of any real use, but it helps in the unit tests + if not isinstance(self._baudrate, (int, long)) or not 0 < self._baudrate < 2**32: + raise ValueError("invalid baudrate: %r" % (self._baudrate)) + if self.logger: + self.logger.info('_reconfigurePort()') + + def close(self): + """Close port""" + if self._isOpen: + self._isOpen = False + # in case of quick reconnects, give the server some time + time.sleep(0.3) + + def makeDeviceName(self, port): + raise SerialException("there is no sensible way to turn numbers into URLs") + + def fromURL(self, url): + """extract host and port from an URL string""" + if url.lower().startswith("loop://"): url = url[7:] + try: + # process options now, directly altering self + for option in url.split('/'): + if '=' in option: + option, value = option.split('=', 1) + else: + value = None + if not option: + pass + elif option == 'logging': + logging.basicConfig() # XXX is that good to call it here? + self.logger = logging.getLogger('pySerial.loop') + self.logger.setLevel(LOGGER_LEVELS[value]) + self.logger.debug('enabled logging') + else: + raise ValueError('unknown option: %r' % (option,)) + except ValueError, e: + raise SerialException('expected a string in the form "[loop://][option[/option...]]": %s' % e) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + # attention the logged value can differ from return value in + # threaded environments... + self.logger.debug('inWaiting() -> %d' % (len(self.loop_buffer),)) + return len(self.loop_buffer) + + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if not self._isOpen: raise portNotOpenError + if self._timeout is not None: + timeout = time.time() + self._timeout + else: + timeout = None + data = bytearray() + while size > 0: + self.buffer_lock.acquire() + try: + block = to_bytes(self.loop_buffer[:size]) + del self.loop_buffer[:size] + finally: + self.buffer_lock.release() + data += block + size -= len(block) + # check for timeout now, after data has been read. + # useful for timeout = 0 (non blocking) read + if timeout and time.time() > timeout: + break + return bytes(data) + + def write(self, data): + """Output the given string over the serial port. Can block if the + connection is blocked. May raise SerialException if the connection is + closed.""" + if not self._isOpen: raise portNotOpenError + # ensure we're working with bytes + data = to_bytes(data) + # calculate aprox time that would be used to send the data + time_used_to_send = 10.0*len(data) / self._baudrate + # when a write timeout is configured check if we would be successful + # (not sending anything, not even the part that would have time) + if self._writeTimeout is not None and time_used_to_send > self._writeTimeout: + time.sleep(self._writeTimeout) # must wait so that unit test succeeds + raise writeTimeoutError + self.buffer_lock.acquire() + try: + self.loop_buffer += data + finally: + self.buffer_lock.release() + return len(data) + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('flushInput()') + self.buffer_lock.acquire() + try: + del self.loop_buffer[:] + finally: + self.buffer_lock.release() + + def flushOutput(self): + """Clear output buffer, aborting the current output and + discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('flushOutput()') + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given + duration.""" + if not self._isOpen: raise portNotOpenError + + def setBreak(self, level=True): + """Set break: Controls TXD. When active, to transmitting is + possible.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('setBreak(%r)' % (level,)) + + def setRTS(self, level=True): + """Set terminal status line: Request To Send""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('setRTS(%r) -> state of CTS' % (level,)) + self.cts = level + + def setDTR(self, level=True): + """Set terminal status line: Data Terminal Ready""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('setDTR(%r) -> state of DSR' % (level,)) + self.dsr = level + + def getCTS(self): + """Read terminal status line: Clear To Send""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('getCTS() -> state of RTS (%r)' % (self.cts,)) + return self.cts + + def getDSR(self): + """Read terminal status line: Data Set Ready""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('getDSR() -> state of DTR (%r)' % (self.dsr,)) + return self.dsr + + def getRI(self): + """Read terminal status line: Ring Indicator""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('returning dummy for getRI()') + return False + + def getCD(self): + """Read terminal status line: Carrier Detect""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('returning dummy for getCD()') + return True + + # - - - platform specific - - - + # None so far + + +# assemble Serial class with the platform specific implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(LoopbackSerial, FileLike): + pass +else: + # io library present + class Serial(LoopbackSerial, io.RawIOBase): + pass + + +# simple client test +if __name__ == '__main__': + import sys + s = Serial('loop://') + sys.stdout.write('%s\n' % s) + + sys.stdout.write("write...\n") + s.write("hello\n") + s.flush() + sys.stdout.write("read: %s\n" % s.read(5)) + + s.close() diff --git a/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_rfc2217.py b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_rfc2217.py new file mode 100644 index 0000000..981ba45 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_rfc2217.py @@ -0,0 +1,11 @@ +#! python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see ../__init__.py +# +# This is a thin wrapper to load the rfc2271 implementation. +# +# (C) 2011 Chris Liechti +# this is distributed under a free software license, see license.txt + +from serial.rfc2217 import Serial diff --git a/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_socket.py b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_socket.py new file mode 100644 index 0000000..c90a8e4 --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/urlhandler/protocol_socket.py @@ -0,0 +1,274 @@ +#! python +# +# Python Serial Port Extension for Win32, Linux, BSD, Jython +# see __init__.py +# +# This module implements a simple socket based client. +# It does not support changing any port parameters and will silently ignore any +# requests to do so. +# +# The purpose of this module is that applications using pySerial can connect to +# TCP/IP to serial port converters that do not support RFC 2217. +# +# (C) 2001-2011 Chris Liechti +# this is distributed under a free software license, see license.txt +# +# URL format: socket://:[/option[/option...]] +# options: +# - "debug" print diagnostic messages + +from serial.serialutil import * +import time +import socket +import logging + +# map log level names to constants. used in fromURL() +LOGGER_LEVELS = { + 'debug': logging.DEBUG, + 'info': logging.INFO, + 'warning': logging.WARNING, + 'error': logging.ERROR, + } + +POLL_TIMEOUT = 2 + +class SocketSerial(SerialBase): + """Serial port implementation for plain sockets.""" + + BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, + 9600, 19200, 38400, 57600, 115200) + + def open(self): + """Open port with current settings. This may throw a SerialException + if the port cannot be opened.""" + self.logger = None + if self._port is None: + raise SerialException("Port must be configured before it can be used.") + if self._isOpen: + raise SerialException("Port is already open.") + try: + # XXX in future replace with create_connection (py >=2.6) + self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self._socket.connect(self.fromURL(self.portstr)) + except Exception, msg: + self._socket = None + raise SerialException("Could not open port %s: %s" % (self.portstr, msg)) + + self._socket.settimeout(POLL_TIMEOUT) # used for write timeout support :/ + + # not that there anything to configure... + self._reconfigurePort() + # all things set up get, now a clean start + self._isOpen = True + if not self._rtscts: + self.setRTS(True) + self.setDTR(True) + self.flushInput() + self.flushOutput() + + def _reconfigurePort(self): + """Set communication parameters on opened port. for the socket:// + protocol all settings are ignored!""" + if self._socket is None: + raise SerialException("Can only operate on open ports") + if self.logger: + self.logger.info('ignored port configuration change') + + def close(self): + """Close port""" + if self._isOpen: + if self._socket: + try: + self._socket.shutdown(socket.SHUT_RDWR) + self._socket.close() + except: + # ignore errors. + pass + self._socket = None + self._isOpen = False + # in case of quick reconnects, give the server some time + time.sleep(0.3) + + def makeDeviceName(self, port): + raise SerialException("there is no sensible way to turn numbers into URLs") + + def fromURL(self, url): + """extract host and port from an URL string""" + if url.lower().startswith("socket://"): url = url[9:] + try: + # is there a "path" (our options)? + if '/' in url: + # cut away options + url, options = url.split('/', 1) + # process options now, directly altering self + for option in options.split('/'): + if '=' in option: + option, value = option.split('=', 1) + else: + value = None + if option == 'logging': + logging.basicConfig() # XXX is that good to call it here? + self.logger = logging.getLogger('pySerial.socket') + self.logger.setLevel(LOGGER_LEVELS[value]) + self.logger.debug('enabled logging') + else: + raise ValueError('unknown option: %r' % (option,)) + # get host and port + host, port = url.split(':', 1) # may raise ValueError because of unpacking + port = int(port) # and this if it's not a number + if not 0 <= port < 65536: raise ValueError("port not in range 0...65535") + except ValueError, e: + raise SerialException('expected a string in the form "[rfc2217://]:[/option[/option...]]": %s' % e) + return (host, port) + + # - - - - - - - - - - - - - - - - - - - - - - - - + + def inWaiting(self): + """Return the number of characters currently in the input buffer.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + # set this one to debug as the function could be called often... + self.logger.debug('WARNING: inWaiting returns dummy value') + return 0 # hmmm, see comment in read() + + def read(self, size=1): + """Read size bytes from the serial port. If a timeout is set it may + return less characters as requested. With no timeout it will block + until the requested number of bytes is read.""" + if not self._isOpen: raise portNotOpenError + data = bytearray() + if self._timeout is not None: + timeout = time.time() + self._timeout + else: + timeout = None + while len(data) < size and (timeout is None or time.time() < timeout): + try: + # an implementation with internal buffer would be better + # performing... + t = time.time() + block = self._socket.recv(size - len(data)) + duration = time.time() - t + if block: + data.extend(block) + else: + # no data -> EOF (connection probably closed) + break + except socket.timeout: + # just need to get out of recv from time to time to check if + # still alive + continue + except socket.error, e: + # connection fails -> terminate loop + raise SerialException('connection failed (%s)' % e) + return bytes(data) + + def write(self, data): + """Output the given string over the serial port. Can block if the + connection is blocked. May raise SerialException if the connection is + closed.""" + if not self._isOpen: raise portNotOpenError + try: + self._socket.sendall(to_bytes(data)) + except socket.error, e: + # XXX what exception if socket connection fails + raise SerialException("socket connection failed: %s" % e) + return len(data) + + def flushInput(self): + """Clear input buffer, discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('ignored flushInput') + + def flushOutput(self): + """Clear output buffer, aborting the current output and + discarding all that is in the buffer.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('ignored flushOutput') + + def sendBreak(self, duration=0.25): + """Send break condition. Timed, returns to idle state after given + duration.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('ignored sendBreak(%r)' % (duration,)) + + def setBreak(self, level=True): + """Set break: Controls TXD. When active, to transmitting is + possible.""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('ignored setBreak(%r)' % (level,)) + + def setRTS(self, level=True): + """Set terminal status line: Request To Send""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('ignored setRTS(%r)' % (level,)) + + def setDTR(self, level=True): + """Set terminal status line: Data Terminal Ready""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('ignored setDTR(%r)' % (level,)) + + def getCTS(self): + """Read terminal status line: Clear To Send""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('returning dummy for getCTS()') + return True + + def getDSR(self): + """Read terminal status line: Data Set Ready""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('returning dummy for getDSR()') + return True + + def getRI(self): + """Read terminal status line: Ring Indicator""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('returning dummy for getRI()') + return False + + def getCD(self): + """Read terminal status line: Carrier Detect""" + if not self._isOpen: raise portNotOpenError + if self.logger: + self.logger.info('returning dummy for getCD()') + return True + + # - - - platform specific - - - + # None so far + + +# assemble Serial class with the platform specific implementation and the base +# for file-like behavior. for Python 2.6 and newer, that provide the new I/O +# library, derive from io.RawIOBase +try: + import io +except ImportError: + # classic version with our own file-like emulation + class Serial(SocketSerial, FileLike): + pass +else: + # io library present + class Serial(SocketSerial, io.RawIOBase): + pass + + +# simple client test +if __name__ == '__main__': + import sys + s = Serial('socket://localhost:7000') + sys.stdout.write('%s\n' % s) + + sys.stdout.write("write...\n") + s.write("hello\n") + s.flush() + sys.stdout.write("read: %s\n" % s.read(5)) + + s.close() diff --git a/Source/Inkscape/EggBotControl.Original/serial/win32.py b/Source/Inkscape/EggBotControl.Original/serial/win32.py new file mode 100644 index 0000000..61b3d7a --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/win32.py @@ -0,0 +1,320 @@ +from ctypes import * +from ctypes.wintypes import HANDLE +from ctypes.wintypes import BOOL +from ctypes.wintypes import LPCWSTR +_stdcall_libraries = {} +_stdcall_libraries['kernel32'] = WinDLL('kernel32') +from ctypes.wintypes import DWORD +from ctypes.wintypes import WORD +from ctypes.wintypes import BYTE + +INVALID_HANDLE_VALUE = HANDLE(-1).value + +# some details of the windows API differ between 32 and 64 bit systems.. +def is_64bit(): + """Returns true when running on a 64 bit system""" + return sizeof(c_ulong) != sizeof(c_void_p) + +# ULONG_PTR is a an ordinary number, not a pointer and contrary to the name it +# is either 32 or 64 bits, depending on the type of windows... +# so test if this a 32 bit windows... +if is_64bit(): + # assume 64 bits + ULONG_PTR = c_int64 +else: + # 32 bits + ULONG_PTR = c_ulong + + +class _SECURITY_ATTRIBUTES(Structure): + pass +LPSECURITY_ATTRIBUTES = POINTER(_SECURITY_ATTRIBUTES) + + +try: + CreateEventW = _stdcall_libraries['kernel32'].CreateEventW +except AttributeError: + # Fallback to non wide char version for old OS... + from ctypes.wintypes import LPCSTR + CreateEventA = _stdcall_libraries['kernel32'].CreateEventA + CreateEventA.restype = HANDLE + CreateEventA.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCSTR] + CreateEvent=CreateEventA + + CreateFileA = _stdcall_libraries['kernel32'].CreateFileA + CreateFileA.restype = HANDLE + CreateFileA.argtypes = [LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE] + CreateFile = CreateFileA +else: + CreateEventW.restype = HANDLE + CreateEventW.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCWSTR] + CreateEvent = CreateEventW # alias + + CreateFileW = _stdcall_libraries['kernel32'].CreateFileW + CreateFileW.restype = HANDLE + CreateFileW.argtypes = [LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE] + CreateFile = CreateFileW # alias + +class _OVERLAPPED(Structure): + pass +OVERLAPPED = _OVERLAPPED + +class _COMSTAT(Structure): + pass +COMSTAT = _COMSTAT + +class _DCB(Structure): + pass +DCB = _DCB + +class _COMMTIMEOUTS(Structure): + pass +COMMTIMEOUTS = _COMMTIMEOUTS + +GetLastError = _stdcall_libraries['kernel32'].GetLastError +GetLastError.restype = DWORD +GetLastError.argtypes = [] + +LPOVERLAPPED = POINTER(_OVERLAPPED) +LPDWORD = POINTER(DWORD) + +GetOverlappedResult = _stdcall_libraries['kernel32'].GetOverlappedResult +GetOverlappedResult.restype = BOOL +GetOverlappedResult.argtypes = [HANDLE, LPOVERLAPPED, LPDWORD, BOOL] + +ResetEvent = _stdcall_libraries['kernel32'].ResetEvent +ResetEvent.restype = BOOL +ResetEvent.argtypes = [HANDLE] + +LPCVOID = c_void_p + +WriteFile = _stdcall_libraries['kernel32'].WriteFile +WriteFile.restype = BOOL +WriteFile.argtypes = [HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED] + +LPVOID = c_void_p + +ReadFile = _stdcall_libraries['kernel32'].ReadFile +ReadFile.restype = BOOL +ReadFile.argtypes = [HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED] + +CloseHandle = _stdcall_libraries['kernel32'].CloseHandle +CloseHandle.restype = BOOL +CloseHandle.argtypes = [HANDLE] + +ClearCommBreak = _stdcall_libraries['kernel32'].ClearCommBreak +ClearCommBreak.restype = BOOL +ClearCommBreak.argtypes = [HANDLE] + +LPCOMSTAT = POINTER(_COMSTAT) + +ClearCommError = _stdcall_libraries['kernel32'].ClearCommError +ClearCommError.restype = BOOL +ClearCommError.argtypes = [HANDLE, LPDWORD, LPCOMSTAT] + +SetupComm = _stdcall_libraries['kernel32'].SetupComm +SetupComm.restype = BOOL +SetupComm.argtypes = [HANDLE, DWORD, DWORD] + +EscapeCommFunction = _stdcall_libraries['kernel32'].EscapeCommFunction +EscapeCommFunction.restype = BOOL +EscapeCommFunction.argtypes = [HANDLE, DWORD] + +GetCommModemStatus = _stdcall_libraries['kernel32'].GetCommModemStatus +GetCommModemStatus.restype = BOOL +GetCommModemStatus.argtypes = [HANDLE, LPDWORD] + +LPDCB = POINTER(_DCB) + +GetCommState = _stdcall_libraries['kernel32'].GetCommState +GetCommState.restype = BOOL +GetCommState.argtypes = [HANDLE, LPDCB] + +LPCOMMTIMEOUTS = POINTER(_COMMTIMEOUTS) + +GetCommTimeouts = _stdcall_libraries['kernel32'].GetCommTimeouts +GetCommTimeouts.restype = BOOL +GetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS] + +PurgeComm = _stdcall_libraries['kernel32'].PurgeComm +PurgeComm.restype = BOOL +PurgeComm.argtypes = [HANDLE, DWORD] + +SetCommBreak = _stdcall_libraries['kernel32'].SetCommBreak +SetCommBreak.restype = BOOL +SetCommBreak.argtypes = [HANDLE] + +SetCommMask = _stdcall_libraries['kernel32'].SetCommMask +SetCommMask.restype = BOOL +SetCommMask.argtypes = [HANDLE, DWORD] + +SetCommState = _stdcall_libraries['kernel32'].SetCommState +SetCommState.restype = BOOL +SetCommState.argtypes = [HANDLE, LPDCB] + +SetCommTimeouts = _stdcall_libraries['kernel32'].SetCommTimeouts +SetCommTimeouts.restype = BOOL +SetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS] + +WaitForSingleObject = _stdcall_libraries['kernel32'].WaitForSingleObject +WaitForSingleObject.restype = DWORD +WaitForSingleObject.argtypes = [HANDLE, DWORD] + +ONESTOPBIT = 0 # Variable c_int +TWOSTOPBITS = 2 # Variable c_int +ONE5STOPBITS = 1 + +NOPARITY = 0 # Variable c_int +ODDPARITY = 1 # Variable c_int +EVENPARITY = 2 # Variable c_int +MARKPARITY = 3 +SPACEPARITY = 4 + +RTS_CONTROL_HANDSHAKE = 2 # Variable c_int +RTS_CONTROL_DISABLE = 0 # Variable c_int +RTS_CONTROL_ENABLE = 1 # Variable c_int +RTS_CONTROL_TOGGLE = 3 # Variable c_int +SETRTS = 3 +CLRRTS = 4 + +DTR_CONTROL_HANDSHAKE = 2 # Variable c_int +DTR_CONTROL_DISABLE = 0 # Variable c_int +DTR_CONTROL_ENABLE = 1 # Variable c_int +SETDTR = 5 +CLRDTR = 6 + +MS_DSR_ON = 32 # Variable c_ulong +EV_RING = 256 # Variable c_int +EV_PERR = 512 # Variable c_int +EV_ERR = 128 # Variable c_int +SETXOFF = 1 # Variable c_int +EV_RXCHAR = 1 # Variable c_int +GENERIC_WRITE = 1073741824 # Variable c_long +PURGE_TXCLEAR = 4 # Variable c_int +FILE_FLAG_OVERLAPPED = 1073741824 # Variable c_int +EV_DSR = 16 # Variable c_int +MAXDWORD = 4294967295L # Variable c_uint +EV_RLSD = 32 # Variable c_int +ERROR_IO_PENDING = 997 # Variable c_long +MS_CTS_ON = 16 # Variable c_ulong +EV_EVENT1 = 2048 # Variable c_int +EV_RX80FULL = 1024 # Variable c_int +PURGE_RXABORT = 2 # Variable c_int +FILE_ATTRIBUTE_NORMAL = 128 # Variable c_int +PURGE_TXABORT = 1 # Variable c_int +SETXON = 2 # Variable c_int +OPEN_EXISTING = 3 # Variable c_int +MS_RING_ON = 64 # Variable c_ulong +EV_TXEMPTY = 4 # Variable c_int +EV_RXFLAG = 2 # Variable c_int +MS_RLSD_ON = 128 # Variable c_ulong +GENERIC_READ = 2147483648L # Variable c_ulong +EV_EVENT2 = 4096 # Variable c_int +EV_CTS = 8 # Variable c_int +EV_BREAK = 64 # Variable c_int +PURGE_RXCLEAR = 8 # Variable c_int +INFINITE = 0xFFFFFFFFL + + +class N11_OVERLAPPED4DOLLAR_48E(Union): + pass +class N11_OVERLAPPED4DOLLAR_484DOLLAR_49E(Structure): + pass +N11_OVERLAPPED4DOLLAR_484DOLLAR_49E._fields_ = [ + ('Offset', DWORD), + ('OffsetHigh', DWORD), +] + +PVOID = c_void_p + +N11_OVERLAPPED4DOLLAR_48E._anonymous_ = ['_0'] +N11_OVERLAPPED4DOLLAR_48E._fields_ = [ + ('_0', N11_OVERLAPPED4DOLLAR_484DOLLAR_49E), + ('Pointer', PVOID), +] +_OVERLAPPED._anonymous_ = ['_0'] +_OVERLAPPED._fields_ = [ + ('Internal', ULONG_PTR), + ('InternalHigh', ULONG_PTR), + ('_0', N11_OVERLAPPED4DOLLAR_48E), + ('hEvent', HANDLE), +] +_SECURITY_ATTRIBUTES._fields_ = [ + ('nLength', DWORD), + ('lpSecurityDescriptor', LPVOID), + ('bInheritHandle', BOOL), +] +_COMSTAT._fields_ = [ + ('fCtsHold', DWORD, 1), + ('fDsrHold', DWORD, 1), + ('fRlsdHold', DWORD, 1), + ('fXoffHold', DWORD, 1), + ('fXoffSent', DWORD, 1), + ('fEof', DWORD, 1), + ('fTxim', DWORD, 1), + ('fReserved', DWORD, 25), + ('cbInQue', DWORD), + ('cbOutQue', DWORD), +] +_DCB._fields_ = [ + ('DCBlength', DWORD), + ('BaudRate', DWORD), + ('fBinary', DWORD, 1), + ('fParity', DWORD, 1), + ('fOutxCtsFlow', DWORD, 1), + ('fOutxDsrFlow', DWORD, 1), + ('fDtrControl', DWORD, 2), + ('fDsrSensitivity', DWORD, 1), + ('fTXContinueOnXoff', DWORD, 1), + ('fOutX', DWORD, 1), + ('fInX', DWORD, 1), + ('fErrorChar', DWORD, 1), + ('fNull', DWORD, 1), + ('fRtsControl', DWORD, 2), + ('fAbortOnError', DWORD, 1), + ('fDummy2', DWORD, 17), + ('wReserved', WORD), + ('XonLim', WORD), + ('XoffLim', WORD), + ('ByteSize', BYTE), + ('Parity', BYTE), + ('StopBits', BYTE), + ('XonChar', c_char), + ('XoffChar', c_char), + ('ErrorChar', c_char), + ('EofChar', c_char), + ('EvtChar', c_char), + ('wReserved1', WORD), +] +_COMMTIMEOUTS._fields_ = [ + ('ReadIntervalTimeout', DWORD), + ('ReadTotalTimeoutMultiplier', DWORD), + ('ReadTotalTimeoutConstant', DWORD), + ('WriteTotalTimeoutMultiplier', DWORD), + ('WriteTotalTimeoutConstant', DWORD), +] +__all__ = ['GetLastError', 'MS_CTS_ON', 'FILE_ATTRIBUTE_NORMAL', + 'DTR_CONTROL_ENABLE', '_COMSTAT', 'MS_RLSD_ON', + 'GetOverlappedResult', 'SETXON', 'PURGE_TXABORT', + 'PurgeComm', 'N11_OVERLAPPED4DOLLAR_48E', 'EV_RING', + 'ONESTOPBIT', 'SETXOFF', 'PURGE_RXABORT', 'GetCommState', + 'RTS_CONTROL_ENABLE', '_DCB', 'CreateEvent', + '_COMMTIMEOUTS', '_SECURITY_ATTRIBUTES', 'EV_DSR', + 'EV_PERR', 'EV_RXFLAG', 'OPEN_EXISTING', 'DCB', + 'FILE_FLAG_OVERLAPPED', 'EV_CTS', 'SetupComm', + 'LPOVERLAPPED', 'EV_TXEMPTY', 'ClearCommBreak', + 'LPSECURITY_ATTRIBUTES', 'SetCommBreak', 'SetCommTimeouts', + 'COMMTIMEOUTS', 'ODDPARITY', 'EV_RLSD', + 'GetCommModemStatus', 'EV_EVENT2', 'PURGE_TXCLEAR', + 'EV_BREAK', 'EVENPARITY', 'LPCVOID', 'COMSTAT', 'ReadFile', + 'PVOID', '_OVERLAPPED', 'WriteFile', 'GetCommTimeouts', + 'ResetEvent', 'EV_RXCHAR', 'LPCOMSTAT', 'ClearCommError', + 'ERROR_IO_PENDING', 'EscapeCommFunction', 'GENERIC_READ', + 'RTS_CONTROL_HANDSHAKE', 'OVERLAPPED', + 'DTR_CONTROL_HANDSHAKE', 'PURGE_RXCLEAR', 'GENERIC_WRITE', + 'LPDCB', 'CreateEventW', 'SetCommMask', 'EV_EVENT1', + 'SetCommState', 'LPVOID', 'CreateFileW', 'LPDWORD', + 'EV_RX80FULL', 'TWOSTOPBITS', 'LPCOMMTIMEOUTS', 'MAXDWORD', + 'MS_DSR_ON', 'MS_RING_ON', + 'N11_OVERLAPPED4DOLLAR_484DOLLAR_49E', 'EV_ERR', + 'ULONG_PTR', 'CreateFile', 'NOPARITY', 'CloseHandle'] diff --git a/Source/Inkscape/EggBotControl.Original/serial/win32.pyc b/Source/Inkscape/EggBotControl.Original/serial/win32.pyc new file mode 100644 index 0000000..bcbefba --- /dev/null +++ b/Source/Inkscape/EggBotControl.Original/serial/win32.pyc Binary files differ diff --git a/Source/Inkscape/EggBotControl.zip b/Source/Inkscape/EggBotControl.zip new file mode 100644 index 0000000..32428dc --- /dev/null +++ b/Source/Inkscape/EggBotControl.zip Binary files differ