diff --git a/.gitmodules b/.gitmodules index fd84970..3919377 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "thirdparty/googlebenchmark"] path = thirdparty/googlebenchmark url = https://github.com/predeps/googlebenchmark +[submodule "thirdparty/pipeline"] + path = thirdparty/pipeline + url = https://github.com/p-ranav/pipeline.git diff --git a/data/tool_6/424740_2.stp b/data/tool_6/424740_2.stp new file mode 100644 index 0000000..d902e48 --- /dev/null +++ b/data/tool_6/424740_2.stp @@ -0,0 +1,2163 @@ +ISO-10303-21; +HEADER; +/* Generated by software containing ST-Developer + * from STEP Tools, Inc. (www.steptools.com) + */ +/* OPTION: using custom schema-name function */ + +FILE_DESCRIPTION( +/* description */ (''), +/* implementation_level */ '2;1'); + +FILE_NAME( +/* name */ 'DNGA150612S01225DMT_GTM.stp', +/* time_stamp */ '2021-07-14T15:29:42+06:00', +/* author */ (''), +/* organization */ (''), +/* preprocessor_version */ 'ST-DEVELOPER v16.7', +/* originating_system */ 'SIEMENS PLM Software NX 12.0', +/* authorisation */ ''); + +FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 1 }')); +ENDSEC; + +DATA; +#10=CONSTRUCTIVE_GEOMETRY_REPRESENTATION_RELATIONSHIP( +'supplemental geometry','',#34,#11); +#11=CONSTRUCTIVE_GEOMETRY_REPRESENTATION('supplemental geometry',(#1312, +#1313),#2086); +#12=GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION( +'DNGA150612S01225DMT_GTM-None',(#35),#2086); +#13=PROPERTY_DEFINITION_REPRESENTATION(#17,#15); +#14=PROPERTY_DEFINITION_REPRESENTATION(#18,#16); +#15=REPRESENTATION('',(#19),#2086); +#16=REPRESENTATION('',(#20),#2086); +#17=PROPERTY_DEFINITION('pmi validation property','',#25); +#18=PROPERTY_DEFINITION('pmi validation property','',#25); +#19=VALUE_REPRESENTATION_ITEM('number of annotations',COUNT_MEASURE(0.)); +#20=VALUE_REPRESENTATION_ITEM('number of views',COUNT_MEASURE(0.)); +#21=SHAPE_REPRESENTATION_RELATIONSHIP('None', +'relationship between DNGA150612S01225DMT_GTM-None and DNGA150612S0122 +5DMT_GTM-None',#34,#23); +#22=SHAPE_REPRESENTATION_RELATIONSHIP('None', +'relationship between DNGA150612S01225DMT_GTM-None and DNGA150612S0122 +5DMT_GTM-None',#34,#12); +#23=ADVANCED_BREP_SHAPE_REPRESENTATION('DNGA150612S01225DMT_GTM-None',(#61, +#62,#63,#64,#65),#2086); +#24=SHAPE_DEFINITION_REPRESENTATION(#25,#34); +#25=PRODUCT_DEFINITION_SHAPE('','',#26); +#26=PRODUCT_DEFINITION(' ','',#28,#27); +#27=PRODUCT_DEFINITION_CONTEXT('part definition',#33,'design'); +#28=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE(' ',' ',#30, + .NOT_KNOWN.); +#29=PRODUCT_RELATED_PRODUCT_CATEGORY('part','',(#30)); +#30=PRODUCT('DNGA150612S01225DMT_GTM','DNGA150612S01225DMT_GTM',' ',(#31)); +#31=PRODUCT_CONTEXT(' ',#33,'mechanical'); +#32=APPLICATION_PROTOCOL_DEFINITION('international standard', +'automotive_design',2010,#33); +#33=APPLICATION_CONTEXT( +'core data for automotive mechanical design processes'); +#34=SHAPE_REPRESENTATION('DNGA150612S01225DMT_GTM-None',(#1307),#2086); +#35=GEOMETRIC_CURVE_SET('None',(#1750,#978,#979,#980,#981,#982,#983,#984, +#985,#986,#987,#988,#989)); +#36=SURFACE_STYLE_USAGE(.BOTH.,#41); +#37=SURFACE_STYLE_USAGE(.BOTH.,#42); +#38=SURFACE_STYLE_USAGE(.BOTH.,#43); +#39=SURFACE_STYLE_USAGE(.BOTH.,#44); +#40=SURFACE_STYLE_USAGE(.BOTH.,#45); +#41=SURFACE_SIDE_STYLE('',(#46)); +#42=SURFACE_SIDE_STYLE('',(#47)); +#43=SURFACE_SIDE_STYLE('',(#48)); +#44=SURFACE_SIDE_STYLE('',(#49)); +#45=SURFACE_SIDE_STYLE('',(#50)); +#46=SURFACE_STYLE_FILL_AREA(#51); +#47=SURFACE_STYLE_FILL_AREA(#52); +#48=SURFACE_STYLE_FILL_AREA(#53); +#49=SURFACE_STYLE_FILL_AREA(#54); +#50=SURFACE_STYLE_FILL_AREA(#55); +#51=FILL_AREA_STYLE('',(#56)); +#52=FILL_AREA_STYLE('',(#57)); +#53=FILL_AREA_STYLE('',(#58)); +#54=FILL_AREA_STYLE('',(#59)); +#55=FILL_AREA_STYLE('',(#60)); +#56=FILL_AREA_STYLE_COLOUR('',#920); +#57=FILL_AREA_STYLE_COLOUR('',#920); +#58=FILL_AREA_STYLE_COLOUR('',#920); +#59=FILL_AREA_STYLE_COLOUR('',#920); +#60=FILL_AREA_STYLE_COLOUR('',#920); +#61=MANIFOLD_SOLID_BREP('CUT',#66); +#62=MANIFOLD_SOLID_BREP('CUT',#67); +#63=MANIFOLD_SOLID_BREP('CUT',#68); +#64=MANIFOLD_SOLID_BREP('CUT',#69); +#65=MANIFOLD_SOLID_BREP('CUT',#70); +#66=CLOSED_SHELL('',(#195,#196,#197,#198,#199,#200,#201,#202,#203,#204, +#205,#206,#207,#208,#209,#210,#211,#212,#213,#214,#215,#216,#217,#218,#219, +#220,#221,#222,#223,#224,#225,#226,#227,#228)); +#67=CLOSED_SHELL('',(#229,#230,#231,#232,#233,#234,#235,#236,#237)); +#68=CLOSED_SHELL('',(#238,#239,#240,#241,#242,#243,#244,#245,#246)); +#69=CLOSED_SHELL('',(#247,#248,#249,#250,#251,#252,#253,#254,#255)); +#70=CLOSED_SHELL('',(#256,#257,#258,#259,#260,#261,#262,#263,#264)); +#71=PLANE('',#1324); +#72=PLANE('',#1327); +#73=PLANE('',#1329); +#74=PLANE('',#1332); +#75=PLANE('',#1338); +#76=PLANE('',#1340); +#77=PLANE('',#1341); +#78=PLANE('',#1343); +#79=PLANE('',#1344); +#80=PLANE('',#1345); +#81=PLANE('',#1346); +#82=PLANE('',#1347); +#83=PLANE('',#1348); +#84=PLANE('',#1349); +#85=PLANE('',#1350); +#86=PLANE('',#1351); +#87=PLANE('',#1352); +#88=PLANE('',#1353); +#89=PLANE('',#1354); +#90=PLANE('',#1355); +#91=PLANE('',#1356); +#92=PLANE('',#1358); +#93=PLANE('',#1360); +#94=PLANE('',#1364); +#95=PLANE('',#1365); +#96=PLANE('',#1366); +#97=PLANE('',#1368); +#98=PLANE('',#1369); +#99=PLANE('',#1371); +#100=PLANE('',#1372); +#101=PLANE('',#1376); +#102=PLANE('',#1377); +#103=PLANE('',#1378); +#104=PLANE('',#1380); +#105=PLANE('',#1381); +#106=PLANE('',#1383); +#107=PLANE('',#1384); +#108=PLANE('',#1388); +#109=PLANE('',#1389); +#110=PLANE('',#1390); +#111=PLANE('',#1392); +#112=PLANE('',#1393); +#113=PLANE('',#1395); +#114=PLANE('',#1396); +#115=PLANE('',#1400); +#116=PLANE('',#1401); +#117=PLANE('',#1402); +#118=PLANE('',#1404); +#119=PLANE('',#1405); +#120=PLANE('',#1407); +#121=PLANE('',#1408); +#122=FACE_OUTER_BOUND('',#291,.T.); +#123=FACE_OUTER_BOUND('',#292,.T.); +#124=FACE_OUTER_BOUND('',#293,.T.); +#125=FACE_OUTER_BOUND('',#294,.T.); +#126=FACE_OUTER_BOUND('',#295,.T.); +#127=FACE_OUTER_BOUND('',#296,.T.); +#128=FACE_OUTER_BOUND('',#297,.T.); +#129=FACE_OUTER_BOUND('',#298,.T.); +#130=FACE_OUTER_BOUND('',#299,.T.); +#131=FACE_OUTER_BOUND('',#300,.T.); +#132=FACE_OUTER_BOUND('',#301,.T.); +#133=FACE_OUTER_BOUND('',#302,.T.); +#134=FACE_OUTER_BOUND('',#303,.T.); +#135=FACE_OUTER_BOUND('',#304,.T.); +#136=FACE_OUTER_BOUND('',#305,.T.); +#137=FACE_OUTER_BOUND('',#306,.T.); +#138=FACE_OUTER_BOUND('',#307,.T.); +#139=FACE_OUTER_BOUND('',#308,.T.); +#140=FACE_OUTER_BOUND('',#309,.T.); +#141=FACE_OUTER_BOUND('',#310,.T.); +#142=FACE_OUTER_BOUND('',#311,.T.); +#143=FACE_OUTER_BOUND('',#312,.T.); +#144=FACE_OUTER_BOUND('',#315,.T.); +#145=FACE_OUTER_BOUND('',#316,.T.); +#146=FACE_OUTER_BOUND('',#317,.T.); +#147=FACE_OUTER_BOUND('',#318,.T.); +#148=FACE_OUTER_BOUND('',#319,.T.); +#149=FACE_OUTER_BOUND('',#320,.T.); +#150=FACE_OUTER_BOUND('',#327,.T.); +#151=FACE_OUTER_BOUND('',#328,.T.); +#152=FACE_OUTER_BOUND('',#329,.T.); +#153=FACE_OUTER_BOUND('',#330,.T.); +#154=FACE_OUTER_BOUND('',#331,.T.); +#155=FACE_OUTER_BOUND('',#332,.T.); +#156=FACE_OUTER_BOUND('',#333,.T.); +#157=FACE_OUTER_BOUND('',#334,.T.); +#158=FACE_OUTER_BOUND('',#335,.T.); +#159=FACE_OUTER_BOUND('',#336,.T.); +#160=FACE_OUTER_BOUND('',#337,.T.); +#161=FACE_OUTER_BOUND('',#338,.T.); +#162=FACE_OUTER_BOUND('',#339,.T.); +#163=FACE_OUTER_BOUND('',#340,.T.); +#164=FACE_OUTER_BOUND('',#341,.T.); +#165=FACE_OUTER_BOUND('',#342,.T.); +#166=FACE_OUTER_BOUND('',#343,.T.); +#167=FACE_OUTER_BOUND('',#344,.T.); +#168=FACE_OUTER_BOUND('',#345,.T.); +#169=FACE_OUTER_BOUND('',#346,.T.); +#170=FACE_OUTER_BOUND('',#347,.T.); +#171=FACE_OUTER_BOUND('',#348,.T.); +#172=FACE_OUTER_BOUND('',#349,.T.); +#173=FACE_OUTER_BOUND('',#350,.T.); +#174=FACE_OUTER_BOUND('',#351,.T.); +#175=FACE_OUTER_BOUND('',#352,.T.); +#176=FACE_OUTER_BOUND('',#353,.T.); +#177=FACE_OUTER_BOUND('',#354,.T.); +#178=FACE_OUTER_BOUND('',#355,.T.); +#179=FACE_OUTER_BOUND('',#356,.T.); +#180=FACE_OUTER_BOUND('',#357,.T.); +#181=FACE_OUTER_BOUND('',#358,.T.); +#182=FACE_OUTER_BOUND('',#359,.T.); +#183=FACE_OUTER_BOUND('',#360,.T.); +#184=FACE_OUTER_BOUND('',#361,.T.); +#185=FACE_OUTER_BOUND('',#362,.T.); +#186=CYLINDRICAL_SURFACE('',#1319,2.5781); +#187=CYLINDRICAL_SURFACE('',#1322,0.127); +#188=CYLINDRICAL_SURFACE('',#1326,1.190625); +#189=CYLINDRICAL_SURFACE('',#1331,1.190625); +#190=CYLINDRICAL_SURFACE('',#1335,0.127); +#191=CYLINDRICAL_SURFACE('',#1363,1.190625); +#192=CYLINDRICAL_SURFACE('',#1375,1.190625); +#193=CYLINDRICAL_SURFACE('',#1387,1.190625); +#194=CYLINDRICAL_SURFACE('',#1399,1.190625); +#195=ADVANCED_FACE('',(#275,#276),#265,.F.); +#196=ADVANCED_FACE('',(#277,#278),#186,.F.); +#197=ADVANCED_FACE('INSERT_RAD_5',(#122),#187,.T.); +#198=ADVANCED_FACE('',(#123),#71,.T.); +#199=ADVANCED_FACE('INSERT_RAD_3',(#124),#188,.T.); +#200=ADVANCED_FACE('',(#125),#72,.T.); +#201=ADVANCED_FACE('',(#126),#73,.T.); +#202=ADVANCED_FACE('INSERT_RAD_1',(#127),#189,.T.); +#203=ADVANCED_FACE('',(#128),#74,.T.); +#204=ADVANCED_FACE('INSERT_RAD_6',(#129),#190,.T.); +#205=ADVANCED_FACE('',(#130),#266,.T.); +#206=ADVANCED_FACE('',(#131),#267,.T.); +#207=ADVANCED_FACE('INSERT_SIDE_1',(#132),#75,.T.); +#208=ADVANCED_FACE('',(#133),#268,.T.); +#209=ADVANCED_FACE('INSERT_SIDE_4',(#134),#76,.T.); +#210=ADVANCED_FACE('INSERT_SIDE_3',(#135),#77,.T.); +#211=ADVANCED_FACE('',(#136),#269,.T.); +#212=ADVANCED_FACE('INSERT_SIDE_2',(#137),#78,.T.); +#213=ADVANCED_FACE('',(#138),#79,.T.); +#214=ADVANCED_FACE('',(#139),#80,.F.); +#215=ADVANCED_FACE('',(#140),#81,.F.); +#216=ADVANCED_FACE('',(#141),#82,.T.); +#217=ADVANCED_FACE('',(#142),#83,.F.); +#218=ADVANCED_FACE('',(#143),#84,.F.); +#219=ADVANCED_FACE('INSERT_BOTTOM',(#279,#280),#85,.T.); +#220=ADVANCED_FACE('',(#144),#86,.F.); +#221=ADVANCED_FACE('',(#145),#87,.F.); +#222=ADVANCED_FACE('',(#146),#88,.T.); +#223=ADVANCED_FACE('',(#147),#89,.F.); +#224=ADVANCED_FACE('',(#148),#90,.F.); +#225=ADVANCED_FACE('',(#149),#91,.T.); +#226=ADVANCED_FACE('',(#281,#282),#92,.F.); +#227=ADVANCED_FACE('',(#283,#284),#270,.F.); +#228=ADVANCED_FACE('',(#285,#286),#93,.F.); +#229=ADVANCED_FACE('',(#150),#191,.T.); +#230=ADVANCED_FACE('',(#151),#94,.T.); +#231=ADVANCED_FACE('',(#152),#95,.T.); +#232=ADVANCED_FACE('',(#153),#96,.T.); +#233=ADVANCED_FACE('',(#154),#97,.T.); +#234=ADVANCED_FACE('',(#155),#98,.F.); +#235=ADVANCED_FACE('',(#156),#271,.T.); +#236=ADVANCED_FACE('',(#157),#99,.F.); +#237=ADVANCED_FACE('',(#158),#100,.T.); +#238=ADVANCED_FACE('',(#159),#192,.T.); +#239=ADVANCED_FACE('',(#160),#101,.T.); +#240=ADVANCED_FACE('',(#161),#102,.T.); +#241=ADVANCED_FACE('',(#162),#103,.T.); +#242=ADVANCED_FACE('',(#163),#104,.T.); +#243=ADVANCED_FACE('',(#164),#105,.F.); +#244=ADVANCED_FACE('',(#165),#272,.T.); +#245=ADVANCED_FACE('',(#166),#106,.F.); +#246=ADVANCED_FACE('',(#167),#107,.T.); +#247=ADVANCED_FACE('',(#168),#193,.T.); +#248=ADVANCED_FACE('',(#169),#108,.T.); +#249=ADVANCED_FACE('',(#170),#109,.T.); +#250=ADVANCED_FACE('',(#171),#110,.T.); +#251=ADVANCED_FACE('',(#172),#111,.T.); +#252=ADVANCED_FACE('',(#173),#112,.F.); +#253=ADVANCED_FACE('',(#174),#273,.T.); +#254=ADVANCED_FACE('',(#175),#113,.F.); +#255=ADVANCED_FACE('',(#176),#114,.T.); +#256=ADVANCED_FACE('',(#177),#194,.T.); +#257=ADVANCED_FACE('',(#178),#115,.T.); +#258=ADVANCED_FACE('',(#179),#116,.T.); +#259=ADVANCED_FACE('',(#180),#117,.T.); +#260=ADVANCED_FACE('',(#181),#118,.T.); +#261=ADVANCED_FACE('',(#182),#119,.F.); +#262=ADVANCED_FACE('',(#183),#274,.T.); +#263=ADVANCED_FACE('',(#184),#120,.F.); +#264=ADVANCED_FACE('',(#185),#121,.T.); +#265=CONICAL_SURFACE('',#1316,2.57341296095961,60.); +#266=CONICAL_SURFACE('',#1336,5.81883399647127E-15,64.9999999999999); +#267=CONICAL_SURFACE('',#1337,5.81883399647127E-15,64.9999999999999); +#268=CONICAL_SURFACE('',#1339,5.81883399647127E-15,64.9999999999999); +#269=CONICAL_SURFACE('',#1342,5.81883399647127E-15,64.9999999999999); +#270=CONICAL_SURFACE('',#1359,2.57341296095961,60.); +#271=CONICAL_SURFACE('',#1370,1.063625,65.); +#272=CONICAL_SURFACE('',#1382,1.063625,65.); +#273=CONICAL_SURFACE('',#1394,1.063625,65.); +#274=CONICAL_SURFACE('',#1406,1.063625,65.); +#275=FACE_BOUND('',#287,.T.); +#276=FACE_BOUND('',#288,.T.); +#277=FACE_BOUND('',#289,.T.); +#278=FACE_BOUND('',#290,.T.); +#279=FACE_BOUND('',#313,.T.); +#280=FACE_BOUND('',#314,.T.); +#281=FACE_BOUND('',#321,.T.); +#282=FACE_BOUND('',#322,.T.); +#283=FACE_BOUND('',#323,.T.); +#284=FACE_BOUND('',#324,.T.); +#285=FACE_BOUND('',#325,.T.); +#286=FACE_BOUND('',#326,.T.); +#287=EDGE_LOOP('',(#363)); +#288=EDGE_LOOP('',(#364)); +#289=EDGE_LOOP('',(#365)); +#290=EDGE_LOOP('',(#366)); +#291=EDGE_LOOP('',(#367,#368,#369,#370)); +#292=EDGE_LOOP('',(#371,#372,#373,#374)); +#293=EDGE_LOOP('',(#375,#376,#377,#378)); +#294=EDGE_LOOP('',(#379,#380,#381,#382)); +#295=EDGE_LOOP('',(#383,#384,#385,#386)); +#296=EDGE_LOOP('',(#387,#388,#389,#390)); +#297=EDGE_LOOP('',(#391,#392,#393,#394)); +#298=EDGE_LOOP('',(#395,#396,#397,#398)); +#299=EDGE_LOOP('',(#399,#400,#401)); +#300=EDGE_LOOP('',(#402,#403,#404)); +#301=EDGE_LOOP('',(#405,#406,#407,#408,#409,#410,#411,#412)); +#302=EDGE_LOOP('',(#413,#414,#415)); +#303=EDGE_LOOP('',(#416,#417,#418,#419,#420,#421,#422,#423)); +#304=EDGE_LOOP('',(#424,#425,#426,#427,#428,#429,#430,#431)); +#305=EDGE_LOOP('',(#432,#433,#434)); +#306=EDGE_LOOP('',(#435,#436,#437,#438,#439,#440,#441,#442)); +#307=EDGE_LOOP('',(#443,#444,#445,#446,#447,#448)); +#308=EDGE_LOOP('',(#449,#450,#451,#452)); +#309=EDGE_LOOP('',(#453,#454,#455,#456)); +#310=EDGE_LOOP('',(#457,#458,#459,#460,#461,#462)); +#311=EDGE_LOOP('',(#463,#464,#465,#466)); +#312=EDGE_LOOP('',(#467,#468,#469,#470)); +#313=EDGE_LOOP('',(#471)); +#314=EDGE_LOOP('',(#472,#473,#474,#475,#476,#477)); +#315=EDGE_LOOP('',(#478,#479,#480,#481)); +#316=EDGE_LOOP('',(#482,#483,#484,#485)); +#317=EDGE_LOOP('',(#486,#487,#488,#489,#490,#491)); +#318=EDGE_LOOP('',(#492,#493,#494,#495)); +#319=EDGE_LOOP('',(#496,#497,#498,#499)); +#320=EDGE_LOOP('',(#500,#501,#502,#503,#504,#505)); +#321=EDGE_LOOP('',(#506)); +#322=EDGE_LOOP('',(#507,#508,#509,#510,#511,#512)); +#323=EDGE_LOOP('',(#513)); +#324=EDGE_LOOP('',(#514)); +#325=EDGE_LOOP('',(#515)); +#326=EDGE_LOOP('',(#516)); +#327=EDGE_LOOP('',(#517,#518,#519,#520)); +#328=EDGE_LOOP('',(#521,#522,#523,#524)); +#329=EDGE_LOOP('',(#525,#526,#527,#528,#529,#530)); +#330=EDGE_LOOP('',(#531,#532,#533,#534)); +#331=EDGE_LOOP('',(#535,#536,#537,#538)); +#332=EDGE_LOOP('',(#539,#540,#541,#542)); +#333=EDGE_LOOP('',(#543,#544,#545,#546)); +#334=EDGE_LOOP('',(#547,#548,#549,#550)); +#335=EDGE_LOOP('',(#551,#552,#553,#554)); +#336=EDGE_LOOP('',(#555,#556,#557,#558)); +#337=EDGE_LOOP('',(#559,#560,#561,#562)); +#338=EDGE_LOOP('',(#563,#564,#565,#566,#567,#568)); +#339=EDGE_LOOP('',(#569,#570,#571,#572)); +#340=EDGE_LOOP('',(#573,#574,#575,#576)); +#341=EDGE_LOOP('',(#577,#578,#579,#580)); +#342=EDGE_LOOP('',(#581,#582,#583,#584)); +#343=EDGE_LOOP('',(#585,#586,#587,#588)); +#344=EDGE_LOOP('',(#589,#590,#591,#592)); +#345=EDGE_LOOP('',(#593,#594,#595,#596)); +#346=EDGE_LOOP('',(#597,#598,#599,#600)); +#347=EDGE_LOOP('',(#601,#602,#603,#604,#605,#606)); +#348=EDGE_LOOP('',(#607,#608,#609,#610)); +#349=EDGE_LOOP('',(#611,#612,#613,#614)); +#350=EDGE_LOOP('',(#615,#616,#617,#618)); +#351=EDGE_LOOP('',(#619,#620,#621,#622)); +#352=EDGE_LOOP('',(#623,#624,#625,#626)); +#353=EDGE_LOOP('',(#627,#628,#629,#630)); +#354=EDGE_LOOP('',(#631,#632,#633,#634)); +#355=EDGE_LOOP('',(#635,#636,#637,#638)); +#356=EDGE_LOOP('',(#639,#640,#641,#642,#643,#644)); +#357=EDGE_LOOP('',(#645,#646,#647,#648)); +#358=EDGE_LOOP('',(#649,#650,#651,#652)); +#359=EDGE_LOOP('',(#653,#654,#655,#656)); +#360=EDGE_LOOP('',(#657,#658,#659,#660)); +#361=EDGE_LOOP('',(#661,#662,#663,#664)); +#362=EDGE_LOOP('',(#665,#666,#667,#668)); +#363=ORIENTED_EDGE('',*,*,#766,.F.); +#364=ORIENTED_EDGE('',*,*,#767,.F.); +#365=ORIENTED_EDGE('',*,*,#768,.F.); +#366=ORIENTED_EDGE('',*,*,#769,.T.); +#367=ORIENTED_EDGE('',*,*,#770,.F.); +#368=ORIENTED_EDGE('',*,*,#771,.T.); +#369=ORIENTED_EDGE('',*,*,#772,.F.); +#370=ORIENTED_EDGE('',*,*,#773,.F.); +#371=ORIENTED_EDGE('',*,*,#774,.F.); +#372=ORIENTED_EDGE('',*,*,#775,.F.); +#373=ORIENTED_EDGE('',*,*,#776,.F.); +#374=ORIENTED_EDGE('',*,*,#777,.F.); +#375=ORIENTED_EDGE('',*,*,#778,.F.); +#376=ORIENTED_EDGE('',*,*,#777,.T.); +#377=ORIENTED_EDGE('',*,*,#779,.F.); +#378=ORIENTED_EDGE('',*,*,#780,.T.); +#379=ORIENTED_EDGE('',*,*,#781,.T.); +#380=ORIENTED_EDGE('',*,*,#780,.F.); +#381=ORIENTED_EDGE('',*,*,#782,.T.); +#382=ORIENTED_EDGE('',*,*,#783,.T.); +#383=ORIENTED_EDGE('',*,*,#784,.T.); +#384=ORIENTED_EDGE('',*,*,#785,.F.); +#385=ORIENTED_EDGE('',*,*,#786,.T.); +#386=ORIENTED_EDGE('',*,*,#787,.F.); +#387=ORIENTED_EDGE('',*,*,#788,.F.); +#388=ORIENTED_EDGE('',*,*,#789,.T.); +#389=ORIENTED_EDGE('',*,*,#790,.F.); +#390=ORIENTED_EDGE('',*,*,#787,.T.); +#391=ORIENTED_EDGE('',*,*,#791,.F.); +#392=ORIENTED_EDGE('',*,*,#789,.F.); +#393=ORIENTED_EDGE('',*,*,#792,.F.); +#394=ORIENTED_EDGE('',*,*,#793,.T.); +#395=ORIENTED_EDGE('',*,*,#794,.F.); +#396=ORIENTED_EDGE('',*,*,#795,.T.); +#397=ORIENTED_EDGE('',*,*,#796,.F.); +#398=ORIENTED_EDGE('',*,*,#797,.F.); +#399=ORIENTED_EDGE('',*,*,#773,.T.); +#400=ORIENTED_EDGE('',*,*,#798,.F.); +#401=ORIENTED_EDGE('',*,*,#799,.F.); +#402=ORIENTED_EDGE('',*,*,#797,.T.); +#403=ORIENTED_EDGE('',*,*,#800,.F.); +#404=ORIENTED_EDGE('',*,*,#801,.F.); +#405=ORIENTED_EDGE('',*,*,#791,.T.); +#406=ORIENTED_EDGE('',*,*,#802,.T.); +#407=ORIENTED_EDGE('',*,*,#803,.T.); +#408=ORIENTED_EDGE('',*,*,#770,.T.); +#409=ORIENTED_EDGE('',*,*,#804,.T.); +#410=ORIENTED_EDGE('',*,*,#805,.F.); +#411=ORIENTED_EDGE('',*,*,#784,.F.); +#412=ORIENTED_EDGE('',*,*,#790,.T.); +#413=ORIENTED_EDGE('',*,*,#771,.F.); +#414=ORIENTED_EDGE('',*,*,#806,.F.); +#415=ORIENTED_EDGE('',*,*,#807,.F.); +#416=ORIENTED_EDGE('',*,*,#781,.F.); +#417=ORIENTED_EDGE('',*,*,#808,.F.); +#418=ORIENTED_EDGE('',*,*,#809,.T.); +#419=ORIENTED_EDGE('',*,*,#772,.T.); +#420=ORIENTED_EDGE('',*,*,#810,.T.); +#421=ORIENTED_EDGE('',*,*,#811,.F.); +#422=ORIENTED_EDGE('',*,*,#774,.T.); +#423=ORIENTED_EDGE('',*,*,#778,.T.); +#424=ORIENTED_EDGE('',*,*,#812,.F.); +#425=ORIENTED_EDGE('',*,*,#782,.F.); +#426=ORIENTED_EDGE('',*,*,#779,.T.); +#427=ORIENTED_EDGE('',*,*,#776,.T.); +#428=ORIENTED_EDGE('',*,*,#813,.F.); +#429=ORIENTED_EDGE('',*,*,#814,.T.); +#430=ORIENTED_EDGE('',*,*,#794,.T.); +#431=ORIENTED_EDGE('',*,*,#815,.T.); +#432=ORIENTED_EDGE('',*,*,#795,.F.); +#433=ORIENTED_EDGE('',*,*,#816,.F.); +#434=ORIENTED_EDGE('',*,*,#817,.F.); +#435=ORIENTED_EDGE('',*,*,#818,.T.); +#436=ORIENTED_EDGE('',*,*,#792,.T.); +#437=ORIENTED_EDGE('',*,*,#788,.T.); +#438=ORIENTED_EDGE('',*,*,#786,.F.); +#439=ORIENTED_EDGE('',*,*,#819,.F.); +#440=ORIENTED_EDGE('',*,*,#820,.T.); +#441=ORIENTED_EDGE('',*,*,#796,.T.); +#442=ORIENTED_EDGE('',*,*,#821,.T.); +#443=ORIENTED_EDGE('',*,*,#802,.F.); +#444=ORIENTED_EDGE('',*,*,#793,.F.); +#445=ORIENTED_EDGE('',*,*,#818,.F.); +#446=ORIENTED_EDGE('',*,*,#822,.T.); +#447=ORIENTED_EDGE('',*,*,#823,.F.); +#448=ORIENTED_EDGE('',*,*,#824,.T.); +#449=ORIENTED_EDGE('',*,*,#824,.F.); +#450=ORIENTED_EDGE('',*,*,#825,.F.); +#451=ORIENTED_EDGE('',*,*,#806,.T.); +#452=ORIENTED_EDGE('',*,*,#803,.F.); +#453=ORIENTED_EDGE('',*,*,#826,.F.); +#454=ORIENTED_EDGE('',*,*,#810,.F.); +#455=ORIENTED_EDGE('',*,*,#807,.T.); +#456=ORIENTED_EDGE('',*,*,#827,.F.); +#457=ORIENTED_EDGE('',*,*,#811,.T.); +#458=ORIENTED_EDGE('',*,*,#826,.T.); +#459=ORIENTED_EDGE('',*,*,#828,.F.); +#460=ORIENTED_EDGE('',*,*,#829,.T.); +#461=ORIENTED_EDGE('',*,*,#813,.T.); +#462=ORIENTED_EDGE('',*,*,#775,.T.); +#463=ORIENTED_EDGE('',*,*,#829,.F.); +#464=ORIENTED_EDGE('',*,*,#830,.F.); +#465=ORIENTED_EDGE('',*,*,#816,.T.); +#466=ORIENTED_EDGE('',*,*,#814,.F.); +#467=ORIENTED_EDGE('',*,*,#822,.F.); +#468=ORIENTED_EDGE('',*,*,#821,.F.); +#469=ORIENTED_EDGE('',*,*,#817,.T.); +#470=ORIENTED_EDGE('',*,*,#831,.F.); +#471=ORIENTED_EDGE('',*,*,#766,.T.); +#472=ORIENTED_EDGE('',*,*,#831,.T.); +#473=ORIENTED_EDGE('',*,*,#830,.T.); +#474=ORIENTED_EDGE('',*,*,#828,.T.); +#475=ORIENTED_EDGE('',*,*,#827,.T.); +#476=ORIENTED_EDGE('',*,*,#825,.T.); +#477=ORIENTED_EDGE('',*,*,#823,.T.); +#478=ORIENTED_EDGE('',*,*,#832,.F.); +#479=ORIENTED_EDGE('',*,*,#833,.F.); +#480=ORIENTED_EDGE('',*,*,#798,.T.); +#481=ORIENTED_EDGE('',*,*,#809,.F.); +#482=ORIENTED_EDGE('',*,*,#834,.F.); +#483=ORIENTED_EDGE('',*,*,#804,.F.); +#484=ORIENTED_EDGE('',*,*,#799,.T.); +#485=ORIENTED_EDGE('',*,*,#835,.F.); +#486=ORIENTED_EDGE('',*,*,#805,.T.); +#487=ORIENTED_EDGE('',*,*,#834,.T.); +#488=ORIENTED_EDGE('',*,*,#836,.T.); +#489=ORIENTED_EDGE('',*,*,#837,.T.); +#490=ORIENTED_EDGE('',*,*,#819,.T.); +#491=ORIENTED_EDGE('',*,*,#785,.T.); +#492=ORIENTED_EDGE('',*,*,#837,.F.); +#493=ORIENTED_EDGE('',*,*,#838,.F.); +#494=ORIENTED_EDGE('',*,*,#800,.T.); +#495=ORIENTED_EDGE('',*,*,#820,.F.); +#496=ORIENTED_EDGE('',*,*,#839,.F.); +#497=ORIENTED_EDGE('',*,*,#815,.F.); +#498=ORIENTED_EDGE('',*,*,#801,.T.); +#499=ORIENTED_EDGE('',*,*,#840,.F.); +#500=ORIENTED_EDGE('',*,*,#808,.T.); +#501=ORIENTED_EDGE('',*,*,#783,.F.); +#502=ORIENTED_EDGE('',*,*,#812,.T.); +#503=ORIENTED_EDGE('',*,*,#839,.T.); +#504=ORIENTED_EDGE('',*,*,#841,.T.); +#505=ORIENTED_EDGE('',*,*,#832,.T.); +#506=ORIENTED_EDGE('',*,*,#842,.T.); +#507=ORIENTED_EDGE('',*,*,#841,.F.); +#508=ORIENTED_EDGE('',*,*,#840,.T.); +#509=ORIENTED_EDGE('',*,*,#838,.T.); +#510=ORIENTED_EDGE('',*,*,#836,.F.); +#511=ORIENTED_EDGE('',*,*,#835,.T.); +#512=ORIENTED_EDGE('',*,*,#833,.T.); +#513=ORIENTED_EDGE('',*,*,#768,.T.); +#514=ORIENTED_EDGE('',*,*,#842,.F.); +#515=ORIENTED_EDGE('',*,*,#767,.T.); +#516=ORIENTED_EDGE('',*,*,#769,.F.); +#517=ORIENTED_EDGE('',*,*,#843,.T.); +#518=ORIENTED_EDGE('',*,*,#844,.T.); +#519=ORIENTED_EDGE('',*,*,#845,.F.); +#520=ORIENTED_EDGE('',*,*,#846,.F.); +#521=ORIENTED_EDGE('',*,*,#847,.T.); +#522=ORIENTED_EDGE('',*,*,#848,.T.); +#523=ORIENTED_EDGE('',*,*,#843,.F.); +#524=ORIENTED_EDGE('',*,*,#849,.F.); +#525=ORIENTED_EDGE('',*,*,#850,.T.); +#526=ORIENTED_EDGE('',*,*,#851,.T.); +#527=ORIENTED_EDGE('',*,*,#852,.F.); +#528=ORIENTED_EDGE('',*,*,#853,.T.); +#529=ORIENTED_EDGE('',*,*,#847,.F.); +#530=ORIENTED_EDGE('',*,*,#854,.F.); +#531=ORIENTED_EDGE('',*,*,#845,.T.); +#532=ORIENTED_EDGE('',*,*,#855,.T.); +#533=ORIENTED_EDGE('',*,*,#850,.F.); +#534=ORIENTED_EDGE('',*,*,#856,.F.); +#535=ORIENTED_EDGE('',*,*,#852,.T.); +#536=ORIENTED_EDGE('',*,*,#857,.T.); +#537=ORIENTED_EDGE('',*,*,#858,.T.); +#538=ORIENTED_EDGE('',*,*,#859,.T.); +#539=ORIENTED_EDGE('',*,*,#853,.F.); +#540=ORIENTED_EDGE('',*,*,#859,.F.); +#541=ORIENTED_EDGE('',*,*,#860,.F.); +#542=ORIENTED_EDGE('',*,*,#848,.F.); +#543=ORIENTED_EDGE('',*,*,#860,.T.); +#544=ORIENTED_EDGE('',*,*,#858,.F.); +#545=ORIENTED_EDGE('',*,*,#861,.F.); +#546=ORIENTED_EDGE('',*,*,#844,.F.); +#547=ORIENTED_EDGE('',*,*,#851,.F.); +#548=ORIENTED_EDGE('',*,*,#855,.F.); +#549=ORIENTED_EDGE('',*,*,#861,.T.); +#550=ORIENTED_EDGE('',*,*,#857,.F.); +#551=ORIENTED_EDGE('',*,*,#846,.T.); +#552=ORIENTED_EDGE('',*,*,#856,.T.); +#553=ORIENTED_EDGE('',*,*,#854,.T.); +#554=ORIENTED_EDGE('',*,*,#849,.T.); +#555=ORIENTED_EDGE('',*,*,#862,.T.); +#556=ORIENTED_EDGE('',*,*,#863,.T.); +#557=ORIENTED_EDGE('',*,*,#864,.F.); +#558=ORIENTED_EDGE('',*,*,#865,.F.); +#559=ORIENTED_EDGE('',*,*,#866,.T.); +#560=ORIENTED_EDGE('',*,*,#867,.T.); +#561=ORIENTED_EDGE('',*,*,#862,.F.); +#562=ORIENTED_EDGE('',*,*,#868,.F.); +#563=ORIENTED_EDGE('',*,*,#869,.T.); +#564=ORIENTED_EDGE('',*,*,#870,.T.); +#565=ORIENTED_EDGE('',*,*,#871,.F.); +#566=ORIENTED_EDGE('',*,*,#872,.T.); +#567=ORIENTED_EDGE('',*,*,#866,.F.); +#568=ORIENTED_EDGE('',*,*,#873,.F.); +#569=ORIENTED_EDGE('',*,*,#864,.T.); +#570=ORIENTED_EDGE('',*,*,#874,.T.); +#571=ORIENTED_EDGE('',*,*,#869,.F.); +#572=ORIENTED_EDGE('',*,*,#875,.F.); +#573=ORIENTED_EDGE('',*,*,#871,.T.); +#574=ORIENTED_EDGE('',*,*,#876,.T.); +#575=ORIENTED_EDGE('',*,*,#877,.T.); +#576=ORIENTED_EDGE('',*,*,#878,.T.); +#577=ORIENTED_EDGE('',*,*,#872,.F.); +#578=ORIENTED_EDGE('',*,*,#878,.F.); +#579=ORIENTED_EDGE('',*,*,#879,.F.); +#580=ORIENTED_EDGE('',*,*,#867,.F.); +#581=ORIENTED_EDGE('',*,*,#879,.T.); +#582=ORIENTED_EDGE('',*,*,#877,.F.); +#583=ORIENTED_EDGE('',*,*,#880,.F.); +#584=ORIENTED_EDGE('',*,*,#863,.F.); +#585=ORIENTED_EDGE('',*,*,#870,.F.); +#586=ORIENTED_EDGE('',*,*,#874,.F.); +#587=ORIENTED_EDGE('',*,*,#880,.T.); +#588=ORIENTED_EDGE('',*,*,#876,.F.); +#589=ORIENTED_EDGE('',*,*,#865,.T.); +#590=ORIENTED_EDGE('',*,*,#875,.T.); +#591=ORIENTED_EDGE('',*,*,#873,.T.); +#592=ORIENTED_EDGE('',*,*,#868,.T.); +#593=ORIENTED_EDGE('',*,*,#881,.T.); +#594=ORIENTED_EDGE('',*,*,#882,.F.); +#595=ORIENTED_EDGE('',*,*,#883,.F.); +#596=ORIENTED_EDGE('',*,*,#884,.T.); +#597=ORIENTED_EDGE('',*,*,#885,.T.); +#598=ORIENTED_EDGE('',*,*,#886,.F.); +#599=ORIENTED_EDGE('',*,*,#881,.F.); +#600=ORIENTED_EDGE('',*,*,#887,.T.); +#601=ORIENTED_EDGE('',*,*,#888,.T.); +#602=ORIENTED_EDGE('',*,*,#889,.F.); +#603=ORIENTED_EDGE('',*,*,#885,.F.); +#604=ORIENTED_EDGE('',*,*,#890,.T.); +#605=ORIENTED_EDGE('',*,*,#891,.F.); +#606=ORIENTED_EDGE('',*,*,#892,.T.); +#607=ORIENTED_EDGE('',*,*,#883,.T.); +#608=ORIENTED_EDGE('',*,*,#893,.F.); +#609=ORIENTED_EDGE('',*,*,#888,.F.); +#610=ORIENTED_EDGE('',*,*,#894,.T.); +#611=ORIENTED_EDGE('',*,*,#891,.T.); +#612=ORIENTED_EDGE('',*,*,#895,.T.); +#613=ORIENTED_EDGE('',*,*,#896,.T.); +#614=ORIENTED_EDGE('',*,*,#897,.T.); +#615=ORIENTED_EDGE('',*,*,#890,.F.); +#616=ORIENTED_EDGE('',*,*,#887,.F.); +#617=ORIENTED_EDGE('',*,*,#898,.F.); +#618=ORIENTED_EDGE('',*,*,#895,.F.); +#619=ORIENTED_EDGE('',*,*,#898,.T.); +#620=ORIENTED_EDGE('',*,*,#884,.F.); +#621=ORIENTED_EDGE('',*,*,#899,.F.); +#622=ORIENTED_EDGE('',*,*,#896,.F.); +#623=ORIENTED_EDGE('',*,*,#892,.F.); +#624=ORIENTED_EDGE('',*,*,#897,.F.); +#625=ORIENTED_EDGE('',*,*,#899,.T.); +#626=ORIENTED_EDGE('',*,*,#894,.F.); +#627=ORIENTED_EDGE('',*,*,#882,.T.); +#628=ORIENTED_EDGE('',*,*,#886,.T.); +#629=ORIENTED_EDGE('',*,*,#889,.T.); +#630=ORIENTED_EDGE('',*,*,#893,.T.); +#631=ORIENTED_EDGE('',*,*,#900,.T.); +#632=ORIENTED_EDGE('',*,*,#901,.F.); +#633=ORIENTED_EDGE('',*,*,#902,.F.); +#634=ORIENTED_EDGE('',*,*,#903,.T.); +#635=ORIENTED_EDGE('',*,*,#904,.T.); +#636=ORIENTED_EDGE('',*,*,#905,.F.); +#637=ORIENTED_EDGE('',*,*,#900,.F.); +#638=ORIENTED_EDGE('',*,*,#906,.T.); +#639=ORIENTED_EDGE('',*,*,#907,.T.); +#640=ORIENTED_EDGE('',*,*,#908,.F.); +#641=ORIENTED_EDGE('',*,*,#904,.F.); +#642=ORIENTED_EDGE('',*,*,#909,.T.); +#643=ORIENTED_EDGE('',*,*,#910,.F.); +#644=ORIENTED_EDGE('',*,*,#911,.T.); +#645=ORIENTED_EDGE('',*,*,#902,.T.); +#646=ORIENTED_EDGE('',*,*,#912,.F.); +#647=ORIENTED_EDGE('',*,*,#907,.F.); +#648=ORIENTED_EDGE('',*,*,#913,.T.); +#649=ORIENTED_EDGE('',*,*,#910,.T.); +#650=ORIENTED_EDGE('',*,*,#914,.T.); +#651=ORIENTED_EDGE('',*,*,#915,.T.); +#652=ORIENTED_EDGE('',*,*,#916,.T.); +#653=ORIENTED_EDGE('',*,*,#909,.F.); +#654=ORIENTED_EDGE('',*,*,#906,.F.); +#655=ORIENTED_EDGE('',*,*,#917,.F.); +#656=ORIENTED_EDGE('',*,*,#914,.F.); +#657=ORIENTED_EDGE('',*,*,#917,.T.); +#658=ORIENTED_EDGE('',*,*,#903,.F.); +#659=ORIENTED_EDGE('',*,*,#918,.F.); +#660=ORIENTED_EDGE('',*,*,#915,.F.); +#661=ORIENTED_EDGE('',*,*,#911,.F.); +#662=ORIENTED_EDGE('',*,*,#916,.F.); +#663=ORIENTED_EDGE('',*,*,#918,.T.); +#664=ORIENTED_EDGE('',*,*,#913,.F.); +#665=ORIENTED_EDGE('',*,*,#901,.T.); +#666=ORIENTED_EDGE('',*,*,#905,.T.); +#667=ORIENTED_EDGE('',*,*,#908,.T.); +#668=ORIENTED_EDGE('',*,*,#912,.T.); +#669=VERTEX_POINT('',#1766); +#670=VERTEX_POINT('',#1768); +#671=VERTEX_POINT('',#1771); +#672=VERTEX_POINT('',#1773); +#673=VERTEX_POINT('',#1776); +#674=VERTEX_POINT('',#1777); +#675=VERTEX_POINT('',#1779); +#676=VERTEX_POINT('',#1781); +#677=VERTEX_POINT('',#1785); +#678=VERTEX_POINT('',#1786); +#679=VERTEX_POINT('',#1788); +#680=VERTEX_POINT('',#1790); +#681=VERTEX_POINT('',#1794); +#682=VERTEX_POINT('',#1796); +#683=VERTEX_POINT('',#1800); +#684=VERTEX_POINT('',#1802); +#685=VERTEX_POINT('',#1806); +#686=VERTEX_POINT('',#1807); +#687=VERTEX_POINT('',#1809); +#688=VERTEX_POINT('',#1811); +#689=VERTEX_POINT('',#1815); +#690=VERTEX_POINT('',#1817); +#691=VERTEX_POINT('',#1821); +#692=VERTEX_POINT('',#1823); +#693=VERTEX_POINT('',#1827); +#694=VERTEX_POINT('',#1828); +#695=VERTEX_POINT('',#1830); +#696=VERTEX_POINT('',#1832); +#697=VERTEX_POINT('',#1836); +#698=VERTEX_POINT('',#1840); +#699=VERTEX_POINT('',#1844); +#700=VERTEX_POINT('',#1847); +#701=VERTEX_POINT('',#1851); +#702=VERTEX_POINT('',#1855); +#703=VERTEX_POINT('',#1858); +#704=VERTEX_POINT('',#1862); +#705=VERTEX_POINT('',#1864); +#706=VERTEX_POINT('',#1869); +#707=VERTEX_POINT('',#1873); +#708=VERTEX_POINT('',#1875); +#709=VERTEX_POINT('',#1880); +#710=VERTEX_POINT('',#1882); +#711=VERTEX_POINT('',#1888); +#712=VERTEX_POINT('',#1892); +#713=VERTEX_POINT('',#1901); +#714=VERTEX_POINT('',#1905); +#715=VERTEX_POINT('',#1909); +#716=VERTEX_POINT('',#1915); +#717=VERTEX_POINT('',#1921); +#718=VERTEX_POINT('',#1926); +#719=VERTEX_POINT('',#1927); +#720=VERTEX_POINT('',#1929); +#721=VERTEX_POINT('',#1931); +#722=VERTEX_POINT('',#1935); +#723=VERTEX_POINT('',#1936); +#724=VERTEX_POINT('',#1941); +#725=VERTEX_POINT('',#1942); +#726=VERTEX_POINT('',#1944); +#727=VERTEX_POINT('',#1946); +#728=VERTEX_POINT('',#1954); +#729=VERTEX_POINT('',#1956); +#730=VERTEX_POINT('',#1966); +#731=VERTEX_POINT('',#1967); +#732=VERTEX_POINT('',#1969); +#733=VERTEX_POINT('',#1971); +#734=VERTEX_POINT('',#1975); +#735=VERTEX_POINT('',#1976); +#736=VERTEX_POINT('',#1981); +#737=VERTEX_POINT('',#1982); +#738=VERTEX_POINT('',#1984); +#739=VERTEX_POINT('',#1986); +#740=VERTEX_POINT('',#1994); +#741=VERTEX_POINT('',#1996); +#742=VERTEX_POINT('',#2006); +#743=VERTEX_POINT('',#2007); +#744=VERTEX_POINT('',#2009); +#745=VERTEX_POINT('',#2011); +#746=VERTEX_POINT('',#2015); +#747=VERTEX_POINT('',#2016); +#748=VERTEX_POINT('',#2021); +#749=VERTEX_POINT('',#2022); +#750=VERTEX_POINT('',#2025); +#751=VERTEX_POINT('',#2027); +#752=VERTEX_POINT('',#2034); +#753=VERTEX_POINT('',#2036); +#754=VERTEX_POINT('',#2046); +#755=VERTEX_POINT('',#2047); +#756=VERTEX_POINT('',#2049); +#757=VERTEX_POINT('',#2051); +#758=VERTEX_POINT('',#2055); +#759=VERTEX_POINT('',#2056); +#760=VERTEX_POINT('',#2061); +#761=VERTEX_POINT('',#2062); +#762=VERTEX_POINT('',#2065); +#763=VERTEX_POINT('',#2067); +#764=VERTEX_POINT('',#2074); +#765=VERTEX_POINT('',#2076); +#766=EDGE_CURVE('',#669,#669,#925,.T.); +#767=EDGE_CURVE('',#670,#670,#926,.T.); +#768=EDGE_CURVE('',#671,#671,#927,.T.); +#769=EDGE_CURVE('',#672,#672,#928,.T.); +#770=EDGE_CURVE('',#673,#674,#998,.T.); +#771=EDGE_CURVE('',#673,#675,#929,.T.); +#772=EDGE_CURVE('',#676,#675,#999,.T.); +#773=EDGE_CURVE('',#674,#676,#930,.T.); +#774=EDGE_CURVE('',#677,#678,#1000,.T.); +#775=EDGE_CURVE('',#679,#677,#1001,.T.); +#776=EDGE_CURVE('',#680,#679,#1002,.T.); +#777=EDGE_CURVE('',#678,#680,#931,.T.); +#778=EDGE_CURVE('',#678,#681,#1003,.T.); +#779=EDGE_CURVE('',#682,#680,#1004,.T.); +#780=EDGE_CURVE('',#682,#681,#932,.T.); +#781=EDGE_CURVE('',#683,#681,#1005,.T.); +#782=EDGE_CURVE('',#682,#684,#1006,.T.); +#783=EDGE_CURVE('',#684,#683,#1007,.T.); +#784=EDGE_CURVE('',#685,#686,#1008,.T.); +#785=EDGE_CURVE('',#687,#686,#1009,.T.); +#786=EDGE_CURVE('',#687,#688,#1010,.T.); +#787=EDGE_CURVE('',#685,#688,#933,.T.); +#788=EDGE_CURVE('',#689,#688,#1011,.T.); +#789=EDGE_CURVE('',#689,#690,#934,.T.); +#790=EDGE_CURVE('',#685,#690,#1012,.T.); +#791=EDGE_CURVE('',#690,#691,#1013,.T.); +#792=EDGE_CURVE('',#692,#689,#1014,.T.); +#793=EDGE_CURVE('',#692,#691,#1015,.T.); +#794=EDGE_CURVE('',#693,#694,#1016,.T.); +#795=EDGE_CURVE('',#693,#695,#935,.T.); +#796=EDGE_CURVE('',#696,#695,#1017,.T.); +#797=EDGE_CURVE('',#694,#696,#936,.T.); +#798=EDGE_CURVE('',#697,#676,#1018,.T.); +#799=EDGE_CURVE('',#674,#697,#1019,.T.); +#800=EDGE_CURVE('',#698,#696,#1020,.T.); +#801=EDGE_CURVE('',#694,#698,#1021,.T.); +#802=EDGE_CURVE('',#691,#699,#1022,.T.); +#803=EDGE_CURVE('',#699,#673,#1023,.T.); +#804=EDGE_CURVE('',#674,#700,#1024,.T.); +#805=EDGE_CURVE('',#686,#700,#1025,.T.); +#806=EDGE_CURVE('',#701,#673,#1026,.T.); +#807=EDGE_CURVE('',#675,#701,#1027,.T.); +#808=EDGE_CURVE('',#702,#683,#1028,.T.); +#809=EDGE_CURVE('',#702,#676,#1029,.T.); +#810=EDGE_CURVE('',#675,#703,#1030,.T.); +#811=EDGE_CURVE('',#677,#703,#1031,.T.); +#812=EDGE_CURVE('',#684,#704,#1032,.T.); +#813=EDGE_CURVE('',#705,#679,#1033,.T.); +#814=EDGE_CURVE('',#705,#693,#1034,.T.); +#815=EDGE_CURVE('',#694,#704,#1035,.T.); +#816=EDGE_CURVE('',#706,#693,#1036,.T.); +#817=EDGE_CURVE('',#695,#706,#1037,.T.); +#818=EDGE_CURVE('',#707,#692,#1038,.T.); +#819=EDGE_CURVE('',#708,#687,#1039,.T.); +#820=EDGE_CURVE('',#708,#696,#1040,.T.); +#821=EDGE_CURVE('',#695,#707,#1041,.T.); +#822=EDGE_CURVE('',#707,#709,#1042,.T.); +#823=EDGE_CURVE('',#710,#709,#1043,.T.); +#824=EDGE_CURVE('',#710,#699,#1044,.T.); +#825=EDGE_CURVE('',#701,#710,#1045,.T.); +#826=EDGE_CURVE('',#703,#711,#1046,.T.); +#827=EDGE_CURVE('',#711,#701,#1047,.T.); +#828=EDGE_CURVE('',#712,#711,#1048,.T.); +#829=EDGE_CURVE('',#712,#705,#1049,.T.); +#830=EDGE_CURVE('',#706,#712,#1050,.T.); +#831=EDGE_CURVE('',#709,#706,#1051,.T.); +#832=EDGE_CURVE('',#713,#702,#1052,.T.); +#833=EDGE_CURVE('',#697,#713,#1053,.T.); +#834=EDGE_CURVE('',#700,#714,#1054,.T.); +#835=EDGE_CURVE('',#714,#697,#1055,.T.); +#836=EDGE_CURVE('',#714,#715,#1056,.T.); +#837=EDGE_CURVE('',#715,#708,#1057,.T.); +#838=EDGE_CURVE('',#698,#715,#1058,.T.); +#839=EDGE_CURVE('',#704,#716,#1059,.T.); +#840=EDGE_CURVE('',#716,#698,#1060,.T.); +#841=EDGE_CURVE('',#716,#713,#1061,.T.); +#842=EDGE_CURVE('',#717,#717,#937,.T.); +#843=EDGE_CURVE('',#718,#719,#1062,.T.); +#844=EDGE_CURVE('',#719,#720,#938,.T.); +#845=EDGE_CURVE('',#721,#720,#1063,.T.); +#846=EDGE_CURVE('',#718,#721,#939,.T.); +#847=EDGE_CURVE('',#722,#723,#1064,.T.); +#848=EDGE_CURVE('',#723,#719,#1065,.T.); +#849=EDGE_CURVE('',#722,#718,#1066,.T.); +#850=EDGE_CURVE('',#724,#725,#1067,.T.); +#851=EDGE_CURVE('',#725,#726,#1068,.T.); +#852=EDGE_CURVE('',#727,#726,#1069,.T.); +#853=EDGE_CURVE('',#727,#723,#1070,.T.); +#854=EDGE_CURVE('',#724,#722,#1071,.T.); +#855=EDGE_CURVE('',#720,#725,#1072,.T.); +#856=EDGE_CURVE('',#721,#724,#1073,.T.); +#857=EDGE_CURVE('',#726,#728,#1074,.T.); +#858=EDGE_CURVE('',#728,#729,#940,.T.); +#859=EDGE_CURVE('',#729,#727,#1075,.T.); +#860=EDGE_CURVE('',#719,#729,#1076,.T.); +#861=EDGE_CURVE('',#720,#728,#1077,.T.); +#862=EDGE_CURVE('',#730,#731,#1078,.T.); +#863=EDGE_CURVE('',#731,#732,#941,.T.); +#864=EDGE_CURVE('',#733,#732,#1079,.T.); +#865=EDGE_CURVE('',#730,#733,#942,.T.); +#866=EDGE_CURVE('',#734,#735,#1080,.T.); +#867=EDGE_CURVE('',#735,#731,#1081,.T.); +#868=EDGE_CURVE('',#734,#730,#1082,.T.); +#869=EDGE_CURVE('',#736,#737,#1083,.T.); +#870=EDGE_CURVE('',#737,#738,#1084,.T.); +#871=EDGE_CURVE('',#739,#738,#1085,.T.); +#872=EDGE_CURVE('',#739,#735,#1086,.T.); +#873=EDGE_CURVE('',#736,#734,#1087,.T.); +#874=EDGE_CURVE('',#732,#737,#1088,.T.); +#875=EDGE_CURVE('',#733,#736,#1089,.T.); +#876=EDGE_CURVE('',#738,#740,#1090,.T.); +#877=EDGE_CURVE('',#740,#741,#943,.T.); +#878=EDGE_CURVE('',#741,#739,#1091,.T.); +#879=EDGE_CURVE('',#731,#741,#1092,.T.); +#880=EDGE_CURVE('',#732,#740,#1093,.T.); +#881=EDGE_CURVE('',#742,#743,#1094,.T.); +#882=EDGE_CURVE('',#744,#743,#944,.T.); +#883=EDGE_CURVE('',#745,#744,#1095,.T.); +#884=EDGE_CURVE('',#745,#742,#945,.T.); +#885=EDGE_CURVE('',#746,#747,#1096,.T.); +#886=EDGE_CURVE('',#743,#747,#1097,.T.); +#887=EDGE_CURVE('',#742,#746,#1098,.T.); +#888=EDGE_CURVE('',#748,#749,#1099,.T.); +#889=EDGE_CURVE('',#747,#749,#1100,.T.); +#890=EDGE_CURVE('',#746,#750,#1101,.T.); +#891=EDGE_CURVE('',#751,#750,#1102,.T.); +#892=EDGE_CURVE('',#751,#748,#1103,.T.); +#893=EDGE_CURVE('',#749,#744,#1104,.T.); +#894=EDGE_CURVE('',#748,#745,#1105,.T.); +#895=EDGE_CURVE('',#750,#752,#1106,.T.); +#896=EDGE_CURVE('',#752,#753,#946,.T.); +#897=EDGE_CURVE('',#753,#751,#1107,.T.); +#898=EDGE_CURVE('',#752,#742,#1108,.T.); +#899=EDGE_CURVE('',#753,#745,#1109,.T.); +#900=EDGE_CURVE('',#754,#755,#1110,.T.); +#901=EDGE_CURVE('',#756,#755,#947,.T.); +#902=EDGE_CURVE('',#757,#756,#1111,.T.); +#903=EDGE_CURVE('',#757,#754,#948,.T.); +#904=EDGE_CURVE('',#758,#759,#1112,.T.); +#905=EDGE_CURVE('',#755,#759,#1113,.T.); +#906=EDGE_CURVE('',#754,#758,#1114,.T.); +#907=EDGE_CURVE('',#760,#761,#1115,.T.); +#908=EDGE_CURVE('',#759,#761,#1116,.T.); +#909=EDGE_CURVE('',#758,#762,#1117,.T.); +#910=EDGE_CURVE('',#763,#762,#1118,.T.); +#911=EDGE_CURVE('',#763,#760,#1119,.T.); +#912=EDGE_CURVE('',#761,#756,#1120,.T.); +#913=EDGE_CURVE('',#760,#757,#1121,.T.); +#914=EDGE_CURVE('',#762,#764,#1122,.T.); +#915=EDGE_CURVE('',#764,#765,#949,.T.); +#916=EDGE_CURVE('',#765,#763,#1123,.T.); +#917=EDGE_CURVE('',#764,#754,#1124,.T.); +#918=EDGE_CURVE('',#765,#757,#1125,.T.); +#919=COLOUR_RGB('Medium Maroon',0.6,0.4,0.4); +#920=COLOUR_RGB('Light Gray',0.8,0.8,0.8); +#921=CIRCLE('CUTTING EDGE LINE',#1308,0.127); +#922=CIRCLE('CUTTING EDGE LINE',#1309,0.127); +#923=CIRCLE('CUTTING EDGE LINE',#1310,1.190625); +#924=CIRCLE('CUTTING EDGE LINE',#1311,1.190625); +#925=CIRCLE('',#1314,3.0861); +#926=CIRCLE('',#1315,2.57341296095961); +#927=CIRCLE('',#1317,2.5781); +#928=CIRCLE('',#1318,2.5781); +#929=CIRCLE('',#1320,0.127); +#930=CIRCLE('',#1321,0.127); +#931=CIRCLE('',#1323,1.190625); +#932=CIRCLE('',#1325,1.190625); +#933=CIRCLE('',#1328,1.190625); +#934=CIRCLE('',#1330,1.190625); +#935=CIRCLE('',#1333,0.127); +#936=CIRCLE('',#1334,0.127); +#937=CIRCLE('',#1357,3.0861); +#938=CIRCLE('',#1361,1.190625); +#939=CIRCLE('',#1362,1.190625); +#940=CIRCLE('',#1367,1.063625); +#941=CIRCLE('',#1373,1.190625); +#942=CIRCLE('',#1374,1.190625); +#943=CIRCLE('',#1379,1.063625); +#944=CIRCLE('',#1385,1.190625); +#945=CIRCLE('',#1386,1.190625); +#946=CIRCLE('',#1391,1.063625); +#947=CIRCLE('',#1397,1.190625); +#948=CIRCLE('',#1398,1.190625); +#949=CIRCLE('',#1403,1.063625); +#950=CURVE_STYLE('',#964,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#951=CURVE_STYLE('',#965,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#952=CURVE_STYLE('',#966,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#953=CURVE_STYLE('',#967,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#954=CURVE_STYLE('',#968,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#955=CURVE_STYLE('',#969,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#956=CURVE_STYLE('',#970,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#957=CURVE_STYLE('',#971,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#958=CURVE_STYLE('',#972,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#959=CURVE_STYLE('',#973,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#960=CURVE_STYLE('',#974,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#961=CURVE_STYLE('',#975,POSITIVE_LENGTH_MEASURE(0.13),#1306); +#962=CURVE_STYLE('',#976,POSITIVE_LENGTH_MEASURE(0.13),#919); +#963=CURVE_STYLE('',#977,POSITIVE_LENGTH_MEASURE(0.13),#919); +#964=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#965=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#966=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#967=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#968=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#969=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#970=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#971=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#972=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#973=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#974=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#975=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#976=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#977=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#978=TRIMMED_CURVE('CUTTING EDGE LINE',#990,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#979=TRIMMED_CURVE('CUTTING EDGE LINE',#991,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#980=TRIMMED_CURVE('CUTTING EDGE LINE',#992,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#981=TRIMMED_CURVE('CUTTING EDGE LINE',#993,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#982=TRIMMED_CURVE('CUTTING EDGE LINE',#994,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#983=TRIMMED_CURVE('CUTTING EDGE LINE',#995,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#984=TRIMMED_CURVE('CUTTING EDGE LINE',#996,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#985=TRIMMED_CURVE('CUTTING EDGE LINE',#997,(PARAMETER_VALUE(0.)),( +PARAMETER_VALUE(1.)),.T.,.PARAMETER.); +#986=TRIMMED_CURVE('CUTTING EDGE LINE',#921,(PARAMETER_VALUE(269.999999999991)), +(PARAMETER_VALUE(324.999999999993)),.T.,.PARAMETER.); +#987=TRIMMED_CURVE('CUTTING EDGE LINE',#922,(PARAMETER_VALUE(89.9999999999953)), +(PARAMETER_VALUE(144.999999999988)),.T.,.PARAMETER.); +#988=TRIMMED_CURVE('CUTTING EDGE LINE',#923,(PARAMETER_VALUE(90.)),( +PARAMETER_VALUE(214.999999999999)),.T.,.PARAMETER.); +#989=TRIMMED_CURVE('CUTTING EDGE LINE',#924,(PARAMETER_VALUE(90.0000000000004)), +(PARAMETER_VALUE(215.)),.T.,.PARAMETER.); +#990=LINE('CUTTING EDGE LINE',#1751,#1126); +#991=LINE('CUTTING EDGE LINE',#1752,#1127); +#992=LINE('CUTTING EDGE LINE',#1753,#1128); +#993=LINE('CUTTING EDGE LINE',#1754,#1129); +#994=LINE('CUTTING EDGE LINE',#1755,#1130); +#995=LINE('CUTTING EDGE LINE',#1756,#1131); +#996=LINE('CUTTING EDGE LINE',#1757,#1132); +#997=LINE('CUTTING EDGE LINE',#1758,#1133); +#998=LINE('',#1775,#1134); +#999=LINE('',#1780,#1135); +#1000=LINE('',#1784,#1136); +#1001=LINE('',#1787,#1137); +#1002=LINE('',#1789,#1138); +#1003=LINE('',#1793,#1139); +#1004=LINE('',#1795,#1140); +#1005=LINE('',#1799,#1141); +#1006=LINE('',#1801,#1142); +#1007=LINE('',#1803,#1143); +#1008=LINE('',#1805,#1144); +#1009=LINE('',#1808,#1145); +#1010=LINE('',#1810,#1146); +#1011=LINE('',#1814,#1147); +#1012=LINE('',#1818,#1148); +#1013=LINE('',#1820,#1149); +#1014=LINE('',#1822,#1150); +#1015=LINE('',#1824,#1151); +#1016=LINE('',#1826,#1152); +#1017=LINE('',#1831,#1153); +#1018=LINE('',#1835,#1154); +#1019=LINE('',#1837,#1155); +#1020=LINE('',#1839,#1156); +#1021=LINE('',#1841,#1157); +#1022=LINE('',#1843,#1158); +#1023=LINE('',#1845,#1159); +#1024=LINE('',#1846,#1160); +#1025=LINE('',#1848,#1161); +#1026=LINE('',#1850,#1162); +#1027=LINE('',#1852,#1163); +#1028=LINE('',#1854,#1164); +#1029=LINE('',#1856,#1165); +#1030=LINE('',#1857,#1166); +#1031=LINE('',#1859,#1167); +#1032=LINE('',#1861,#1168); +#1033=LINE('',#1863,#1169); +#1034=LINE('',#1865,#1170); +#1035=LINE('',#1866,#1171); +#1036=LINE('',#1868,#1172); +#1037=LINE('',#1870,#1173); +#1038=LINE('',#1872,#1174); +#1039=LINE('',#1874,#1175); +#1040=LINE('',#1876,#1176); +#1041=LINE('',#1877,#1177); +#1042=LINE('',#1879,#1178); +#1043=LINE('',#1881,#1179); +#1044=LINE('',#1883,#1180); +#1045=LINE('',#1885,#1181); +#1046=LINE('',#1887,#1182); +#1047=LINE('',#1889,#1183); +#1048=LINE('',#1891,#1184); +#1049=LINE('',#1893,#1185); +#1050=LINE('',#1895,#1186); +#1051=LINE('',#1897,#1187); +#1052=LINE('',#1900,#1188); +#1053=LINE('',#1902,#1189); +#1054=LINE('',#1904,#1190); +#1055=LINE('',#1906,#1191); +#1056=LINE('',#1908,#1192); +#1057=LINE('',#1910,#1193); +#1058=LINE('',#1912,#1194); +#1059=LINE('',#1914,#1195); +#1060=LINE('',#1916,#1196); +#1061=LINE('',#1918,#1197); +#1062=LINE('',#1925,#1198); +#1063=LINE('',#1930,#1199); +#1064=LINE('',#1934,#1200); +#1065=LINE('',#1937,#1201); +#1066=LINE('',#1938,#1202); +#1067=LINE('',#1940,#1203); +#1068=LINE('',#1943,#1204); +#1069=LINE('',#1945,#1205); +#1070=LINE('',#1947,#1206); +#1071=LINE('',#1948,#1207); +#1072=LINE('',#1950,#1208); +#1073=LINE('',#1951,#1209); +#1074=LINE('',#1953,#1210); +#1075=LINE('',#1957,#1211); +#1076=LINE('',#1959,#1212); +#1077=LINE('',#1961,#1213); +#1078=LINE('',#1965,#1214); +#1079=LINE('',#1970,#1215); +#1080=LINE('',#1974,#1216); +#1081=LINE('',#1977,#1217); +#1082=LINE('',#1978,#1218); +#1083=LINE('',#1980,#1219); +#1084=LINE('',#1983,#1220); +#1085=LINE('',#1985,#1221); +#1086=LINE('',#1987,#1222); +#1087=LINE('',#1988,#1223); +#1088=LINE('',#1990,#1224); +#1089=LINE('',#1991,#1225); +#1090=LINE('',#1993,#1226); +#1091=LINE('',#1997,#1227); +#1092=LINE('',#1999,#1228); +#1093=LINE('',#2001,#1229); +#1094=LINE('',#2005,#1230); +#1095=LINE('',#2010,#1231); +#1096=LINE('',#2014,#1232); +#1097=LINE('',#2017,#1233); +#1098=LINE('',#2018,#1234); +#1099=LINE('',#2020,#1235); +#1100=LINE('',#2023,#1236); +#1101=LINE('',#2024,#1237); +#1102=LINE('',#2026,#1238); +#1103=LINE('',#2028,#1239); +#1104=LINE('',#2030,#1240); +#1105=LINE('',#2031,#1241); +#1106=LINE('',#2033,#1242); +#1107=LINE('',#2037,#1243); +#1108=LINE('',#2039,#1244); +#1109=LINE('',#2041,#1245); +#1110=LINE('',#2045,#1246); +#1111=LINE('',#2050,#1247); +#1112=LINE('',#2054,#1248); +#1113=LINE('',#2057,#1249); +#1114=LINE('',#2058,#1250); +#1115=LINE('',#2060,#1251); +#1116=LINE('',#2063,#1252); +#1117=LINE('',#2064,#1253); +#1118=LINE('',#2066,#1254); +#1119=LINE('',#2068,#1255); +#1120=LINE('',#2070,#1256); +#1121=LINE('',#2071,#1257); +#1122=LINE('',#2073,#1258); +#1123=LINE('',#2077,#1259); +#1124=LINE('',#2079,#1260); +#1125=LINE('',#2081,#1261); +#1126=VECTOR('',#1411,12.0902312766242); +#1127=VECTOR('',#1412,12.0902312766242); +#1128=VECTOR('',#1413,12.0902312766242); +#1129=VECTOR('',#1414,12.0902312766242); +#1130=VECTOR('',#1415,1.06032464030121); +#1131=VECTOR('',#1416,1.06032464030119); +#1132=VECTOR('',#1417,1.06032464030119); +#1133=VECTOR('',#1418,1.06032464030121); +#1134=VECTOR('',#1443,1.); +#1135=VECTOR('',#1446,1.); +#1136=VECTOR('',#1451,1.); +#1137=VECTOR('',#1452,1.); +#1138=VECTOR('',#1453,1.); +#1139=VECTOR('',#1458,1.); +#1140=VECTOR('',#1459,1.); +#1141=VECTOR('',#1464,1.); +#1142=VECTOR('',#1465,1.); +#1143=VECTOR('',#1466,1.); +#1144=VECTOR('',#1469,1.); +#1145=VECTOR('',#1470,1.); +#1146=VECTOR('',#1471,1.); +#1147=VECTOR('',#1476,1.); +#1148=VECTOR('',#1479,1.); +#1149=VECTOR('',#1482,1.); +#1150=VECTOR('',#1483,1.); +#1151=VECTOR('',#1484,1.); +#1152=VECTOR('',#1487,1.); +#1153=VECTOR('',#1490,1.); +#1154=VECTOR('',#1495,1.); +#1155=VECTOR('',#1496,1.); +#1156=VECTOR('',#1499,1.); +#1157=VECTOR('',#1500,1.); +#1158=VECTOR('',#1503,1.); +#1159=VECTOR('',#1504,1.); +#1160=VECTOR('',#1505,1.); +#1161=VECTOR('',#1506,1.); +#1162=VECTOR('',#1509,1.); +#1163=VECTOR('',#1510,1.); +#1164=VECTOR('',#1513,1.); +#1165=VECTOR('',#1514,1.); +#1166=VECTOR('',#1515,1.); +#1167=VECTOR('',#1516,1.); +#1168=VECTOR('',#1519,1.); +#1169=VECTOR('',#1520,1.); +#1170=VECTOR('',#1521,1.); +#1171=VECTOR('',#1522,1.); +#1172=VECTOR('',#1525,1.); +#1173=VECTOR('',#1526,1.); +#1174=VECTOR('',#1529,1.); +#1175=VECTOR('',#1530,1.); +#1176=VECTOR('',#1531,1.); +#1177=VECTOR('',#1532,1.); +#1178=VECTOR('',#1535,1.); +#1179=VECTOR('',#1536,1.); +#1180=VECTOR('',#1537,1.); +#1181=VECTOR('',#1540,1.); +#1182=VECTOR('',#1543,1.); +#1183=VECTOR('',#1544,1.); +#1184=VECTOR('',#1547,1.); +#1185=VECTOR('',#1548,1.); +#1186=VECTOR('',#1551,1.); +#1187=VECTOR('',#1554,1.); +#1188=VECTOR('',#1559,1.); +#1189=VECTOR('',#1560,1.); +#1190=VECTOR('',#1563,1.); +#1191=VECTOR('',#1564,1.); +#1192=VECTOR('',#1567,1.); +#1193=VECTOR('',#1568,1.); +#1194=VECTOR('',#1571,1.); +#1195=VECTOR('',#1574,1.); +#1196=VECTOR('',#1575,1.); +#1197=VECTOR('',#1578,1.); +#1198=VECTOR('',#1589,1.); +#1199=VECTOR('',#1592,1.); +#1200=VECTOR('',#1597,1.); +#1201=VECTOR('',#1598,1.); +#1202=VECTOR('',#1599,1.); +#1203=VECTOR('',#1602,1.); +#1204=VECTOR('',#1603,1.); +#1205=VECTOR('',#1604,1.); +#1206=VECTOR('',#1605,1.); +#1207=VECTOR('',#1606,1.); +#1208=VECTOR('',#1609,1.); +#1209=VECTOR('',#1610,1.); +#1210=VECTOR('',#1613,1.); +#1211=VECTOR('',#1616,1.); +#1212=VECTOR('',#1619,1.); +#1213=VECTOR('',#1622,1.); +#1214=VECTOR('',#1629,1.); +#1215=VECTOR('',#1632,1.); +#1216=VECTOR('',#1637,1.); +#1217=VECTOR('',#1638,1.); +#1218=VECTOR('',#1639,1.); +#1219=VECTOR('',#1642,1.); +#1220=VECTOR('',#1643,1.); +#1221=VECTOR('',#1644,1.); +#1222=VECTOR('',#1645,1.); +#1223=VECTOR('',#1646,1.); +#1224=VECTOR('',#1649,1.); +#1225=VECTOR('',#1650,1.); +#1226=VECTOR('',#1653,1.); +#1227=VECTOR('',#1656,1.); +#1228=VECTOR('',#1659,1.); +#1229=VECTOR('',#1662,1.); +#1230=VECTOR('',#1669,1.); +#1231=VECTOR('',#1672,1.); +#1232=VECTOR('',#1677,1.); +#1233=VECTOR('',#1678,1.); +#1234=VECTOR('',#1679,1.); +#1235=VECTOR('',#1682,1.); +#1236=VECTOR('',#1683,1.); +#1237=VECTOR('',#1684,1.); +#1238=VECTOR('',#1685,1.); +#1239=VECTOR('',#1686,1.); +#1240=VECTOR('',#1689,1.); +#1241=VECTOR('',#1690,1.); +#1242=VECTOR('',#1693,1.); +#1243=VECTOR('',#1696,1.); +#1244=VECTOR('',#1699,1.); +#1245=VECTOR('',#1702,1.); +#1246=VECTOR('',#1709,1.); +#1247=VECTOR('',#1712,1.); +#1248=VECTOR('',#1717,1.); +#1249=VECTOR('',#1718,1.); +#1250=VECTOR('',#1719,1.); +#1251=VECTOR('',#1722,1.); +#1252=VECTOR('',#1723,1.); +#1253=VECTOR('',#1724,1.); +#1254=VECTOR('',#1725,1.); +#1255=VECTOR('',#1726,1.); +#1256=VECTOR('',#1729,1.); +#1257=VECTOR('',#1730,1.); +#1258=VECTOR('',#1733,1.); +#1259=VECTOR('',#1736,1.); +#1260=VECTOR('',#1739,1.); +#1261=VECTOR('',#1742,1.); +#1262=PRESENTATION_LAYER_ASSIGNMENT('2','Layer 2',(#1750,#978,#979,#980, +#981,#982,#983,#984,#985,#986,#987,#988,#989)); +#1263=PRESENTATION_LAYER_ASSIGNMENT('1','Layer 1',(#1312,#1313,#61,#62, +#63,#64,#65)); +#1264=STYLED_ITEM('',(#1284),#1750); +#1265=STYLED_ITEM('',(#1285),#978); +#1266=STYLED_ITEM('',(#1286),#979); +#1267=STYLED_ITEM('',(#1287),#980); +#1268=STYLED_ITEM('',(#1288),#981); +#1269=STYLED_ITEM('',(#1289),#982); +#1270=STYLED_ITEM('',(#1290),#983); +#1271=STYLED_ITEM('',(#1291),#984); +#1272=STYLED_ITEM('',(#1292),#985); +#1273=STYLED_ITEM('',(#1293),#986); +#1274=STYLED_ITEM('',(#1294),#987); +#1275=STYLED_ITEM('',(#1295),#988); +#1276=STYLED_ITEM('',(#1296),#989); +#1277=STYLED_ITEM('',(#1297),#1312); +#1278=STYLED_ITEM('',(#1298),#1313); +#1279=STYLED_ITEM('',(#1299),#61); +#1280=STYLED_ITEM('',(#1300),#62); +#1281=STYLED_ITEM('',(#1301),#63); +#1282=STYLED_ITEM('',(#1302),#64); +#1283=STYLED_ITEM('',(#1303),#65); +#1284=PRESENTATION_STYLE_ASSIGNMENT((#1304)); +#1285=PRESENTATION_STYLE_ASSIGNMENT((#950)); +#1286=PRESENTATION_STYLE_ASSIGNMENT((#951)); +#1287=PRESENTATION_STYLE_ASSIGNMENT((#952)); +#1288=PRESENTATION_STYLE_ASSIGNMENT((#953)); +#1289=PRESENTATION_STYLE_ASSIGNMENT((#954)); +#1290=PRESENTATION_STYLE_ASSIGNMENT((#955)); +#1291=PRESENTATION_STYLE_ASSIGNMENT((#956)); +#1292=PRESENTATION_STYLE_ASSIGNMENT((#957)); +#1293=PRESENTATION_STYLE_ASSIGNMENT((#958)); +#1294=PRESENTATION_STYLE_ASSIGNMENT((#959)); +#1295=PRESENTATION_STYLE_ASSIGNMENT((#960)); +#1296=PRESENTATION_STYLE_ASSIGNMENT((#961)); +#1297=PRESENTATION_STYLE_ASSIGNMENT((#962)); +#1298=PRESENTATION_STYLE_ASSIGNMENT((#963)); +#1299=PRESENTATION_STYLE_ASSIGNMENT((#36)); +#1300=PRESENTATION_STYLE_ASSIGNMENT((#37)); +#1301=PRESENTATION_STYLE_ASSIGNMENT((#38)); +#1302=PRESENTATION_STYLE_ASSIGNMENT((#39)); +#1303=PRESENTATION_STYLE_ASSIGNMENT((#40)); +#1304=POINT_STYLE('',#1305,POSITIVE_LENGTH_MEASURE(3.),#1306); +#1305=PRE_DEFINED_POINT_MARKER_SYMBOL('plus'); +#1306=DRAUGHTING_PRE_DEFINED_COLOUR('blue'); +#1307=AXIS2_PLACEMENT_3D('',#1749,#1409,#1410); +#1308=AXIS2_PLACEMENT_3D('',#1759,#1419,#1420); +#1309=AXIS2_PLACEMENT_3D('',#1760,#1421,#1422); +#1310=AXIS2_PLACEMENT_3D('',#1761,#1423,#1424); +#1311=AXIS2_PLACEMENT_3D('',#1762,#1425,#1426); +#1312=AXIS2_PLACEMENT_3D('PCS',#1763,#1427,#1428); +#1313=AXIS2_PLACEMENT_3D('MCS',#1764,#1429,#1430); +#1314=AXIS2_PLACEMENT_3D('',#1765,#1431,#1432); +#1315=AXIS2_PLACEMENT_3D('',#1767,#1433,#1434); +#1316=AXIS2_PLACEMENT_3D('',#1769,#1435,#1436); +#1317=AXIS2_PLACEMENT_3D('',#1770,#1437,#1438); +#1318=AXIS2_PLACEMENT_3D('',#1772,#1439,#1440); +#1319=AXIS2_PLACEMENT_3D('',#1774,#1441,#1442); +#1320=AXIS2_PLACEMENT_3D('',#1778,#1444,#1445); +#1321=AXIS2_PLACEMENT_3D('',#1782,#1447,#1448); +#1322=AXIS2_PLACEMENT_3D('',#1783,#1449,#1450); +#1323=AXIS2_PLACEMENT_3D('',#1791,#1454,#1455); +#1324=AXIS2_PLACEMENT_3D('',#1792,#1456,#1457); +#1325=AXIS2_PLACEMENT_3D('',#1797,#1460,#1461); +#1326=AXIS2_PLACEMENT_3D('',#1798,#1462,#1463); +#1327=AXIS2_PLACEMENT_3D('',#1804,#1467,#1468); +#1328=AXIS2_PLACEMENT_3D('',#1812,#1472,#1473); +#1329=AXIS2_PLACEMENT_3D('',#1813,#1474,#1475); +#1330=AXIS2_PLACEMENT_3D('',#1816,#1477,#1478); +#1331=AXIS2_PLACEMENT_3D('',#1819,#1480,#1481); +#1332=AXIS2_PLACEMENT_3D('',#1825,#1485,#1486); +#1333=AXIS2_PLACEMENT_3D('',#1829,#1488,#1489); +#1334=AXIS2_PLACEMENT_3D('',#1833,#1491,#1492); +#1335=AXIS2_PLACEMENT_3D('',#1834,#1493,#1494); +#1336=AXIS2_PLACEMENT_3D('',#1838,#1497,#1498); +#1337=AXIS2_PLACEMENT_3D('',#1842,#1501,#1502); +#1338=AXIS2_PLACEMENT_3D('',#1849,#1507,#1508); +#1339=AXIS2_PLACEMENT_3D('',#1853,#1511,#1512); +#1340=AXIS2_PLACEMENT_3D('',#1860,#1517,#1518); +#1341=AXIS2_PLACEMENT_3D('',#1867,#1523,#1524); +#1342=AXIS2_PLACEMENT_3D('',#1871,#1527,#1528); +#1343=AXIS2_PLACEMENT_3D('',#1878,#1533,#1534); +#1344=AXIS2_PLACEMENT_3D('',#1884,#1538,#1539); +#1345=AXIS2_PLACEMENT_3D('',#1886,#1541,#1542); +#1346=AXIS2_PLACEMENT_3D('',#1890,#1545,#1546); +#1347=AXIS2_PLACEMENT_3D('',#1894,#1549,#1550); +#1348=AXIS2_PLACEMENT_3D('',#1896,#1552,#1553); +#1349=AXIS2_PLACEMENT_3D('',#1898,#1555,#1556); +#1350=AXIS2_PLACEMENT_3D('',#1899,#1557,#1558); +#1351=AXIS2_PLACEMENT_3D('',#1903,#1561,#1562); +#1352=AXIS2_PLACEMENT_3D('',#1907,#1565,#1566); +#1353=AXIS2_PLACEMENT_3D('',#1911,#1569,#1570); +#1354=AXIS2_PLACEMENT_3D('',#1913,#1572,#1573); +#1355=AXIS2_PLACEMENT_3D('',#1917,#1576,#1577); +#1356=AXIS2_PLACEMENT_3D('',#1919,#1579,#1580); +#1357=AXIS2_PLACEMENT_3D('',#1920,#1581,#1582); +#1358=AXIS2_PLACEMENT_3D('',#1922,#1583,#1584); +#1359=AXIS2_PLACEMENT_3D('',#1923,#1585,#1586); +#1360=AXIS2_PLACEMENT_3D('',#1924,#1587,#1588); +#1361=AXIS2_PLACEMENT_3D('',#1928,#1590,#1591); +#1362=AXIS2_PLACEMENT_3D('',#1932,#1593,#1594); +#1363=AXIS2_PLACEMENT_3D('',#1933,#1595,#1596); +#1364=AXIS2_PLACEMENT_3D('',#1939,#1600,#1601); +#1365=AXIS2_PLACEMENT_3D('',#1949,#1607,#1608); +#1366=AXIS2_PLACEMENT_3D('',#1952,#1611,#1612); +#1367=AXIS2_PLACEMENT_3D('',#1955,#1614,#1615); +#1368=AXIS2_PLACEMENT_3D('',#1958,#1617,#1618); +#1369=AXIS2_PLACEMENT_3D('',#1960,#1620,#1621); +#1370=AXIS2_PLACEMENT_3D('',#1962,#1623,#1624); +#1371=AXIS2_PLACEMENT_3D('',#1963,#1625,#1626); +#1372=AXIS2_PLACEMENT_3D('',#1964,#1627,#1628); +#1373=AXIS2_PLACEMENT_3D('',#1968,#1630,#1631); +#1374=AXIS2_PLACEMENT_3D('',#1972,#1633,#1634); +#1375=AXIS2_PLACEMENT_3D('',#1973,#1635,#1636); +#1376=AXIS2_PLACEMENT_3D('',#1979,#1640,#1641); +#1377=AXIS2_PLACEMENT_3D('',#1989,#1647,#1648); +#1378=AXIS2_PLACEMENT_3D('',#1992,#1651,#1652); +#1379=AXIS2_PLACEMENT_3D('',#1995,#1654,#1655); +#1380=AXIS2_PLACEMENT_3D('',#1998,#1657,#1658); +#1381=AXIS2_PLACEMENT_3D('',#2000,#1660,#1661); +#1382=AXIS2_PLACEMENT_3D('',#2002,#1663,#1664); +#1383=AXIS2_PLACEMENT_3D('',#2003,#1665,#1666); +#1384=AXIS2_PLACEMENT_3D('',#2004,#1667,#1668); +#1385=AXIS2_PLACEMENT_3D('',#2008,#1670,#1671); +#1386=AXIS2_PLACEMENT_3D('',#2012,#1673,#1674); +#1387=AXIS2_PLACEMENT_3D('',#2013,#1675,#1676); +#1388=AXIS2_PLACEMENT_3D('',#2019,#1680,#1681); +#1389=AXIS2_PLACEMENT_3D('',#2029,#1687,#1688); +#1390=AXIS2_PLACEMENT_3D('',#2032,#1691,#1692); +#1391=AXIS2_PLACEMENT_3D('',#2035,#1694,#1695); +#1392=AXIS2_PLACEMENT_3D('',#2038,#1697,#1698); +#1393=AXIS2_PLACEMENT_3D('',#2040,#1700,#1701); +#1394=AXIS2_PLACEMENT_3D('',#2042,#1703,#1704); +#1395=AXIS2_PLACEMENT_3D('',#2043,#1705,#1706); +#1396=AXIS2_PLACEMENT_3D('',#2044,#1707,#1708); +#1397=AXIS2_PLACEMENT_3D('',#2048,#1710,#1711); +#1398=AXIS2_PLACEMENT_3D('',#2052,#1713,#1714); +#1399=AXIS2_PLACEMENT_3D('',#2053,#1715,#1716); +#1400=AXIS2_PLACEMENT_3D('',#2059,#1720,#1721); +#1401=AXIS2_PLACEMENT_3D('',#2069,#1727,#1728); +#1402=AXIS2_PLACEMENT_3D('',#2072,#1731,#1732); +#1403=AXIS2_PLACEMENT_3D('',#2075,#1734,#1735); +#1404=AXIS2_PLACEMENT_3D('',#2078,#1737,#1738); +#1405=AXIS2_PLACEMENT_3D('',#2080,#1740,#1741); +#1406=AXIS2_PLACEMENT_3D('',#2082,#1743,#1744); +#1407=AXIS2_PLACEMENT_3D('',#2083,#1745,#1746); +#1408=AXIS2_PLACEMENT_3D('',#2084,#1747,#1748); +#1409=DIRECTION('',(0.,0.,1.)); +#1410=DIRECTION('',(1.,0.,0.)); +#1411=DIRECTION('',(0.573576436351046,0.819152044288992,-6.64507411277572E-17)); +#1412=DIRECTION('',(1.,1.46924967666644E-16,-1.14469235287737E-15)); +#1413=DIRECTION('',(-0.573576436351046,-0.819152044288992,-1.10737681850449E-15)); +#1414=DIRECTION('',(-1.,0.,0.)); +#1415=DIRECTION('',(0.573576436351051,0.819152044288988,0.)); +#1416=DIRECTION('',(-1.,0.,0.)); +#1417=DIRECTION('',(1.,-1.67529525570175E-15,0.)); +#1418=DIRECTION('',(-0.573576436351053,-0.819152044288986,0.)); +#1419=DIRECTION('',(0.,0.,1.)); +#1420=DIRECTION('',(-1.,0.,0.)); +#1421=DIRECTION('',(0.,0.,1.)); +#1422=DIRECTION('',(-1.,0.,0.)); +#1423=DIRECTION('',(0.,0.,-1.)); +#1424=DIRECTION('',(1.,0.,0.)); +#1425=DIRECTION('',(0.,0.,-1.)); +#1426=DIRECTION('',(-1.,0.,0.)); +#1427=DIRECTION('',(0.,0.,1.)); +#1428=DIRECTION('',(1.,0.,0.)); +#1429=DIRECTION('',(0.,0.,1.)); +#1430=DIRECTION('',(1.,0.,0.)); +#1431=DIRECTION('',(0.,0.,1.)); +#1432=DIRECTION('',(-1.,0.,0.)); +#1433=DIRECTION('',(0.,0.,-1.)); +#1434=DIRECTION('',(-1.,0.,0.)); +#1435=DIRECTION('',(0.,0.,-1.)); +#1436=DIRECTION('',(-1.,0.,2.50014305035897E-18)); +#1437=DIRECTION('',(0.,0.,-1.)); +#1438=DIRECTION('',(1.,0.,0.)); +#1439=DIRECTION('',(0.,0.,-1.)); +#1440=DIRECTION('',(-1.,0.,0.)); +#1441=DIRECTION('',(0.,0.,1.)); +#1442=DIRECTION('',(1.,0.,0.)); +#1443=DIRECTION('',(0.,0.,1.)); +#1444=DIRECTION('',(0.,0.,1.)); +#1445=DIRECTION('',(-1.,0.,0.)); +#1446=DIRECTION('',(0.,0.,-1.)); +#1447=DIRECTION('',(0.,0.,1.)); +#1448=DIRECTION('',(-1.,0.,0.)); +#1449=DIRECTION('',(0.,0.,1.)); +#1450=DIRECTION('',(-1.,0.,0.)); +#1451=DIRECTION('',(0.573576436351046,0.819152044288992,6.2678984785538E-17)); +#1452=DIRECTION('',(0.461748613235034,-0.887010833178222,3.08148791101958E-32)); +#1453=DIRECTION('',(-1.,-1.11889943434843E-16,-6.2678984785538E-17)); +#1454=DIRECTION('',(-6.2678984785538E-17,-3.26286142413853E-17,1.)); +#1455=DIRECTION('',(1.,0.,0.)); +#1456=DIRECTION('',(6.2678984785538E-17,3.26286142413853E-17,-1.)); +#1457=DIRECTION('',(0.573576436351047,0.819152044288991,6.24500451351651E-17)); +#1458=DIRECTION('',(0.,0.,1.)); +#1459=DIRECTION('',(0.,0.,-1.)); +#1460=DIRECTION('',(-6.2678984785538E-17,-3.26286142413853E-17,-1.)); +#1461=DIRECTION('',(1.,0.,0.)); +#1462=DIRECTION('',(0.,0.,-1.)); +#1463=DIRECTION('',(1.,0.,0.)); +#1464=DIRECTION('',(0.573576436351046,0.819152044288992,-6.2678984785538E-17)); +#1465=DIRECTION('',(-1.,-1.11889943434843E-16,6.2678984785538E-17)); +#1466=DIRECTION('',(0.461748613235034,-0.887010833178222,-3.08148791101958E-32)); +#1467=DIRECTION('',(6.2678984785538E-17,3.26286142413853E-17,1.)); +#1468=DIRECTION('',(0.573576436351047,0.819152044288991,-6.26668855696622E-17)); +#1469=DIRECTION('',(1.,0.,6.2678984785538E-17)); +#1470=DIRECTION('',(0.461748613235034,-0.887010833178222,6.16297582203916E-33)); +#1471=DIRECTION('',(-0.573576436351046,-0.819152044288992,-6.2678984785538E-17)); +#1472=DIRECTION('',(6.2678984785538E-17,3.26286142413853E-17,-1.)); +#1473=DIRECTION('',(1.,0.,0.)); +#1474=DIRECTION('',(-6.2678984785538E-17,-3.26286142413853E-17,1.)); +#1475=DIRECTION('',(-1.,0.,-6.26668855696622E-17)); +#1476=DIRECTION('',(0.,0.,1.)); +#1477=DIRECTION('',(6.2678984785538E-17,3.26286142413853E-17,1.)); +#1478=DIRECTION('',(1.,0.,0.)); +#1479=DIRECTION('',(0.,0.,-1.)); +#1480=DIRECTION('',(0.,0.,-1.)); +#1481=DIRECTION('',(1.,0.,0.)); +#1482=DIRECTION('',(1.,0.,-6.2678984785538E-17)); +#1483=DIRECTION('',(-0.573576436351046,-0.819152044288992,6.2678984785538E-17)); +#1484=DIRECTION('',(0.461748613235034,-0.887010833178222,-3.08148791101958E-32)); +#1485=DIRECTION('',(-6.2678984785538E-17,-3.26286142413853E-17,-1.)); +#1486=DIRECTION('',(-1.,0.,6.24500451351651E-17)); +#1487=DIRECTION('',(0.,0.,1.)); +#1488=DIRECTION('',(0.,0.,1.)); +#1489=DIRECTION('',(-1.,0.,0.)); +#1490=DIRECTION('',(0.,0.,-1.)); +#1491=DIRECTION('',(0.,0.,1.)); +#1492=DIRECTION('',(-1.,0.,0.)); +#1493=DIRECTION('',(0.,0.,1.)); +#1494=DIRECTION('',(-1.,0.,0.)); +#1495=DIRECTION('',(0.742403876506103,-0.519836790725686,-0.4226182617407)); +#1496=DIRECTION('',(0.,0.90630778703665,0.4226182617407)); +#1497=DIRECTION('',(0.,0.,-1.)); +#1498=DIRECTION('',(1.,0.,1.75875781582359E-17)); +#1499=DIRECTION('',(-0.742403876506104,0.519836790725685,-0.4226182617407)); +#1500=DIRECTION('',(-2.123398238174E-15,-0.90630778703665,0.4226182617407)); +#1501=DIRECTION('',(0.,0.,-1.)); +#1502=DIRECTION('',(0.573576436351046,0.819152044288992,1.75875781582359E-17)); +#1503=DIRECTION('',(0.,0.,-1.)); +#1504=DIRECTION('',(1.,0.,0.)); +#1505=DIRECTION('',(-1.,0.,0.)); +#1506=DIRECTION('',(0.,0.,1.)); +#1507=DIRECTION('',(0.,-1.,0.)); +#1508=DIRECTION('',(0.,0.,1.)); +#1509=DIRECTION('',(0.,-0.90630778703665,0.4226182617407)); +#1510=DIRECTION('',(-0.742403876506103,0.519836790725686,-0.4226182617407)); +#1511=DIRECTION('',(0.,0.,1.)); +#1512=DIRECTION('',(1.,0.,1.98184136199166E-17)); +#1513=DIRECTION('',(0.,0.,-1.)); +#1514=DIRECTION('',(-0.573576436351046,-0.819152044288992,-1.10737681850449E-15)); +#1515=DIRECTION('',(0.573576436351046,0.819152044288992,-1.10737681850449E-15)); +#1516=DIRECTION('',(0.,0.,-1.)); +#1517=DIRECTION('',(0.819152044288992,-0.573576436351046,0.)); +#1518=DIRECTION('',(-0.573576436351046,-0.819152044288992,0.)); +#1519=DIRECTION('',(0.,0.,1.)); +#1520=DIRECTION('',(0.,0.,1.)); +#1521=DIRECTION('',(-1.,-1.11889943434843E-16,-1.14469235287737E-15)); +#1522=DIRECTION('',(1.,1.11889943434843E-16,-1.14469235287737E-15)); +#1523=DIRECTION('',(-1.11889943434843E-16,1.,0.)); +#1524=DIRECTION('',(1.,1.12757025938492E-16,0.)); +#1525=DIRECTION('',(2.123398238174E-15,0.90630778703665,0.4226182617407)); +#1526=DIRECTION('',(0.742403876506104,-0.519836790725685,-0.4226182617407)); +#1527=DIRECTION('',(0.,0.,1.)); +#1528=DIRECTION('',(0.573576436351046,0.819152044288992,1.98184136199166E-17)); +#1529=DIRECTION('',(0.,0.,1.)); +#1530=DIRECTION('',(0.,0.,-1.)); +#1531=DIRECTION('',(0.573576436351046,0.819152044288992,-6.64507411277572E-17)); +#1532=DIRECTION('',(-0.573576436351046,-0.819152044288992,-6.64507411277572E-17)); +#1533=DIRECTION('',(-0.819152044288992,0.573576436351046,0.)); +#1534=DIRECTION('',(0.573576436351046,0.819152044288992,0.)); +#1535=DIRECTION('',(0.426689589907152,-0.819663075976296,-0.38221516943463)); +#1536=DIRECTION('',(-0.461748613235034,0.887010833178222,0.)); +#1537=DIRECTION('',(0.426689589907152,-0.819663075976296,0.38221516943463)); +#1538=DIRECTION('',(-0.887010833178222,-0.461748613235034,0.)); +#1539=DIRECTION('',(-0.461748613235034,0.887010833178222,0.)); +#1540=DIRECTION('',(-1.,0.,0.)); +#1541=DIRECTION('',(0.,0.4226182617407,0.90630778703665)); +#1542=DIRECTION('',(0.,-0.90630778703665,0.4226182617407)); +#1543=DIRECTION('',(-0.426689589907152,0.819663075976296,-0.38221516943463)); +#1544=DIRECTION('',(-0.573576436351048,-0.81915204428899,0.)); +#1545=DIRECTION('',(-0.346188613058754,0.242403876506105,0.90630778703665)); +#1546=DIRECTION('',(0.742403876506103,-0.519836790725686,0.4226182617407)); +#1547=DIRECTION('',(0.461748613235034,-0.887010833178222,0.)); +#1548=DIRECTION('',(-0.426689589907152,0.819663075976296,0.38221516943463)); +#1549=DIRECTION('',(0.887010833178222,0.461748613235034,0.)); +#1550=DIRECTION('',(-0.461748613235034,0.887010833178222,0.)); +#1551=DIRECTION('',(1.,-2.34291072916505E-15,0.)); +#1552=DIRECTION('',(-9.90156859773368E-16,-0.4226182617407,0.90630778703665)); +#1553=DIRECTION('',(2.12330153459561E-15,0.90630778703665,0.4226182617407)); +#1554=DIRECTION('',(0.573576436351046,0.819152044288992,0.)); +#1555=DIRECTION('',(0.346188613058754,-0.242403876506104,0.90630778703665)); +#1556=DIRECTION('',(-0.742403876506104,0.519836790725685,0.422618261740699)); +#1557=DIRECTION('',(0.,0.,-1.)); +#1558=DIRECTION('',(1.,0.,0.)); +#1559=DIRECTION('',(0.426689589907152,-0.819663075976296,-0.38221516943463)); +#1560=DIRECTION('',(0.573576436351048,0.81915204428899,0.)); +#1561=DIRECTION('',(-0.346188613058754,0.242403876506105,-0.90630778703665)); +#1562=DIRECTION('',(0.742403876506103,-0.519836790725686,-0.4226182617407)); +#1563=DIRECTION('',(-0.426689589907152,0.819663075976296,0.38221516943463)); +#1564=DIRECTION('',(1.,0.,0.)); +#1565=DIRECTION('',(0.,0.4226182617407,-0.90630778703665)); +#1566=DIRECTION('',(0.,-0.90630778703665,-0.4226182617407)); +#1567=DIRECTION('',(-0.461748613235034,0.887010833178222,0.)); +#1568=DIRECTION('',(-0.426689589907152,0.819663075976296,-0.38221516943463)); +#1569=DIRECTION('',(-0.887010833178222,-0.461748613235034,0.)); +#1570=DIRECTION('',(-0.461748613235034,0.887010833178222,0.)); +#1571=DIRECTION('',(-0.573576436351046,-0.819152044288992,0.)); +#1572=DIRECTION('',(0.346188613058754,-0.242403876506104,-0.90630778703665)); +#1573=DIRECTION('',(-0.742403876506104,0.519836790725685,-0.422618261740699)); +#1574=DIRECTION('',(0.426689589907152,-0.819663075976296,0.38221516943463)); +#1575=DIRECTION('',(-1.,2.34291072916505E-15,0.)); +#1576=DIRECTION('',(-9.90156859773368E-16,-0.4226182617407,-0.90630778703665)); +#1577=DIRECTION('',(2.12330153459561E-15,0.90630778703665,-0.4226182617407)); +#1578=DIRECTION('',(0.461748613235034,-0.887010833178222,0.)); +#1579=DIRECTION('',(0.887010833178222,0.461748613235034,0.)); +#1580=DIRECTION('',(-0.461748613235034,0.887010833178222,0.)); +#1581=DIRECTION('',(0.,0.,-1.)); +#1582=DIRECTION('',(-1.,0.,0.)); +#1583=DIRECTION('',(0.,0.,-1.)); +#1584=DIRECTION('',(1.,0.,0.)); +#1585=DIRECTION('',(0.,0.,1.)); +#1586=DIRECTION('',(-1.,0.,-2.61577466643807E-17)); +#1587=DIRECTION('',(0.,0.,-1.)); +#1588=DIRECTION('',(-1.,0.,0.)); +#1589=DIRECTION('',(0.,0.,1.)); +#1590=DIRECTION('',(0.,0.,-1.)); +#1591=DIRECTION('',(1.,0.,0.)); +#1592=DIRECTION('',(0.,0.,1.)); +#1593=DIRECTION('',(0.,0.,-1.)); +#1594=DIRECTION('',(-1.,0.,0.)); +#1595=DIRECTION('',(0.,0.,1.)); +#1596=DIRECTION('',(-1.,0.,0.)); +#1597=DIRECTION('',(0.,0.,1.)); +#1598=DIRECTION('',(-1.,0.,0.)); +#1599=DIRECTION('',(-1.,0.,0.)); +#1600=DIRECTION('',(0.,-1.,0.)); +#1601=DIRECTION('',(0.,0.,1.)); +#1602=DIRECTION('',(0.,0.,1.)); +#1603=DIRECTION('',(0.426689589907152,-0.819663075976296,0.382215169434631)); +#1604=DIRECTION('',(-0.461748613235033,0.887010833178222,0.)); +#1605=DIRECTION('',(0.426689589907152,-0.819663075976297,-0.382215169434628)); +#1606=DIRECTION('',(0.461748613235033,-0.887010833178222,0.)); +#1607=DIRECTION('',(0.887010833178222,0.461748613235033,0.)); +#1608=DIRECTION('',(0.461748613235033,-0.887010833178222,0.)); +#1609=DIRECTION('',(0.573576436351051,0.819152044288988,0.)); +#1610=DIRECTION('',(0.573576436351047,0.819152044288991,0.)); +#1611=DIRECTION('',(-0.819152044288988,0.573576436351051,0.)); +#1612=DIRECTION('',(0.573576436351051,0.819152044288988,0.)); +#1613=DIRECTION('',(-0.573576436351051,-0.819152044288988,0.)); +#1614=DIRECTION('',(0.,0.,1.)); +#1615=DIRECTION('',(1.,0.,0.)); +#1616=DIRECTION('',(1.,0.,0.)); +#1617=DIRECTION('',(0.,0.,1.)); +#1618=DIRECTION('',(-1.,0.,0.)); +#1619=DIRECTION('',(0.,0.906307787036651,0.422618261740698)); +#1620=DIRECTION('',(0.,0.422618261740698,-0.906307787036651)); +#1621=DIRECTION('',(-1.,0.,0.)); +#1622=DIRECTION('',(0.7424038765061,-0.519836790725691,0.422618261740699)); +#1623=DIRECTION('',(0.,0.,-1.)); +#1624=DIRECTION('',(1.,0.,1.33341618090058E-17)); +#1625=DIRECTION('',(0.346188613058753,-0.242403876506106,-0.90630778703665)); +#1626=DIRECTION('',(0.573576436351051,0.819152044288988,3.01862213610699E-16)); +#1627=DIRECTION('',(0.,0.,-1.)); +#1628=DIRECTION('',(1.,0.,0.)); +#1629=DIRECTION('',(0.,0.,1.)); +#1630=DIRECTION('',(0.,0.,-1.)); +#1631=DIRECTION('',(-1.,1.45698559662094E-15,0.)); +#1632=DIRECTION('',(0.,0.,1.)); +#1633=DIRECTION('',(0.,0.,-1.)); +#1634=DIRECTION('',(1.,-1.45698559662094E-15,0.)); +#1635=DIRECTION('',(0.,0.,1.)); +#1636=DIRECTION('',(1.,-1.45698559662094E-15,0.)); +#1637=DIRECTION('',(0.,0.,1.)); +#1638=DIRECTION('',(1.,-2.34291072916505E-15,0.)); +#1639=DIRECTION('',(1.,-2.34291072916505E-15,0.)); +#1640=DIRECTION('',(2.34291072916505E-15,1.,0.)); +#1641=DIRECTION('',(0.,0.,1.)); +#1642=DIRECTION('',(0.,0.,1.)); +#1643=DIRECTION('',(-0.42668958990715,0.819663075976297,0.382215169434631)); +#1644=DIRECTION('',(0.461748613235031,-0.887010833178223,0.)); +#1645=DIRECTION('',(-0.42668958990715,0.819663075976298,-0.382215169434628)); +#1646=DIRECTION('',(-0.461748613235031,0.887010833178223,0.)); +#1647=DIRECTION('',(-0.887010833178223,-0.461748613235031,0.)); +#1648=DIRECTION('',(-0.461748613235031,0.887010833178223,0.)); +#1649=DIRECTION('',(-0.573576436351053,-0.819152044288987,0.)); +#1650=DIRECTION('',(-0.573576436351049,-0.81915204428899,0.)); +#1651=DIRECTION('',(0.819152044288987,-0.573576436351053,0.)); +#1652=DIRECTION('',(-0.573576436351053,-0.819152044288987,0.)); +#1653=DIRECTION('',(0.573576436351053,0.819152044288987,0.)); +#1654=DIRECTION('',(0.,0.,1.)); +#1655=DIRECTION('',(-0.999999999999999,3.26190805213643E-15,0.)); +#1656=DIRECTION('',(-1.,2.34291072916505E-15,0.)); +#1657=DIRECTION('',(0.,0.,1.)); +#1658=DIRECTION('',(1.,-2.34361141604467E-15,0.)); +#1659=DIRECTION('',(-2.123398238174E-15,-0.906307787036651,0.422618261740698)); +#1660=DIRECTION('',(-9.90156859773364E-16,-0.422618261740698,-0.906307787036651)); +#1661=DIRECTION('',(1.,-2.34361141604467E-15,-6.09863722023096E-20)); +#1662=DIRECTION('',(-0.742403876506098,0.519836790725693,0.422618261740699)); +#1663=DIRECTION('',(0.,0.,-1.)); +#1664=DIRECTION('',(-1.,2.34307310188529E-15,1.33341618090058E-17)); +#1665=DIRECTION('',(-0.346188613058752,0.242403876506107,-0.90630778703665)); +#1666=DIRECTION('',(-0.573576436351053,-0.819152044288987,-1.00620737870233E-16)); +#1667=DIRECTION('',(0.,0.,-1.)); +#1668=DIRECTION('',(-1.,2.34361141604467E-15,0.)); +#1669=DIRECTION('',(0.,0.,1.)); +#1670=DIRECTION('',(0.,0.,1.)); +#1671=DIRECTION('',(1.,-1.45698559662094E-15,0.)); +#1672=DIRECTION('',(0.,0.,1.)); +#1673=DIRECTION('',(0.,0.,1.)); +#1674=DIRECTION('',(-1.,1.45698559662094E-15,0.)); +#1675=DIRECTION('',(0.,0.,-1.)); +#1676=DIRECTION('',(1.,-1.45698559662094E-15,0.)); +#1677=DIRECTION('',(0.,0.,1.)); +#1678=DIRECTION('',(-1.,2.34291072916505E-15,0.)); +#1679=DIRECTION('',(-1.,2.34291072916505E-15,0.)); +#1680=DIRECTION('',(2.34291072916505E-15,1.,0.)); +#1681=DIRECTION('',(0.,0.,-1.)); +#1682=DIRECTION('',(0.,0.,1.)); +#1683=DIRECTION('',(0.461748613235031,-0.887010833178223,0.)); +#1684=DIRECTION('',(0.42668958990715,-0.819663075976298,-0.382215169434628)); +#1685=DIRECTION('',(-0.461748613235031,0.887010833178223,0.)); +#1686=DIRECTION('',(0.42668958990715,-0.819663075976297,0.382215169434631)); +#1687=DIRECTION('',(-0.887010833178223,-0.461748613235031,0.)); +#1688=DIRECTION('',(-0.461748613235031,0.887010833178223,0.)); +#1689=DIRECTION('',(0.573576436351049,0.81915204428899,0.)); +#1690=DIRECTION('',(0.573576436351053,0.819152044288987,0.)); +#1691=DIRECTION('',(0.819152044288987,-0.573576436351053,0.)); +#1692=DIRECTION('',(-0.573576436351053,-0.819152044288987,0.)); +#1693=DIRECTION('',(1.,-2.34291072916505E-15,0.)); +#1694=DIRECTION('',(0.,0.,-1.)); +#1695=DIRECTION('',(-0.999999999999999,3.26190805213643E-15,0.)); +#1696=DIRECTION('',(-0.573576436351053,-0.819152044288987,0.)); +#1697=DIRECTION('',(0.,0.,-1.)); +#1698=DIRECTION('',(1.,-2.34361141604467E-15,0.)); +#1699=DIRECTION('',(2.123398238174E-15,0.906307787036651,0.422618261740698)); +#1700=DIRECTION('',(-9.90156859773364E-16,-0.422618261740698,0.906307787036651)); +#1701=DIRECTION('',(1.,-2.34361141604467E-15,0.)); +#1702=DIRECTION('',(0.742403876506098,-0.519836790725693,0.422618261740699)); +#1703=DIRECTION('',(0.,0.,1.)); +#1704=DIRECTION('',(-1.,2.34307310188529E-15,1.98085890256002E-17)); +#1705=DIRECTION('',(-0.346188613058752,0.242403876506107,0.90630778703665)); +#1706=DIRECTION('',(-0.573576436351053,-0.819152044288987,1.00613961606655E-16)); +#1707=DIRECTION('',(0.,0.,1.)); +#1708=DIRECTION('',(-1.,2.34361141604467E-15,0.)); +#1709=DIRECTION('',(0.,0.,1.)); +#1710=DIRECTION('',(0.,0.,1.)); +#1711=DIRECTION('',(-1.,0.,0.)); +#1712=DIRECTION('',(0.,0.,1.)); +#1713=DIRECTION('',(0.,0.,1.)); +#1714=DIRECTION('',(1.,0.,0.)); +#1715=DIRECTION('',(0.,0.,-1.)); +#1716=DIRECTION('',(-1.,0.,0.)); +#1717=DIRECTION('',(0.,0.,1.)); +#1718=DIRECTION('',(1.,0.,0.)); +#1719=DIRECTION('',(1.,0.,0.)); +#1720=DIRECTION('',(0.,-1.,0.)); +#1721=DIRECTION('',(0.,0.,-1.)); +#1722=DIRECTION('',(0.,0.,1.)); +#1723=DIRECTION('',(-0.461748613235033,0.887010833178222,0.)); +#1724=DIRECTION('',(-0.426689589907152,0.819663075976297,-0.382215169434628)); +#1725=DIRECTION('',(0.461748613235033,-0.887010833178222,0.)); +#1726=DIRECTION('',(-0.426689589907152,0.819663075976296,0.382215169434631)); +#1727=DIRECTION('',(0.887010833178222,0.461748613235033,0.)); +#1728=DIRECTION('',(0.461748613235033,-0.887010833178222,0.)); +#1729=DIRECTION('',(-0.573576436351047,-0.819152044288991,0.)); +#1730=DIRECTION('',(-0.573576436351051,-0.819152044288988,0.)); +#1731=DIRECTION('',(-0.819152044288988,0.573576436351051,0.)); +#1732=DIRECTION('',(0.573576436351051,0.819152044288988,0.)); +#1733=DIRECTION('',(-1.,0.,0.)); +#1734=DIRECTION('',(0.,0.,-1.)); +#1735=DIRECTION('',(1.,0.,0.)); +#1736=DIRECTION('',(0.573576436351051,0.819152044288988,0.)); +#1737=DIRECTION('',(0.,0.,-1.)); +#1738=DIRECTION('',(-1.,0.,0.)); +#1739=DIRECTION('',(0.,-0.906307787036651,0.422618261740698)); +#1740=DIRECTION('',(0.,0.422618261740698,0.906307787036651)); +#1741=DIRECTION('',(-1.,0.,0.)); +#1742=DIRECTION('',(-0.7424038765061,0.519836790725691,0.422618261740699)); +#1743=DIRECTION('',(0.,0.,1.)); +#1744=DIRECTION('',(1.,0.,1.98085890256002E-17)); +#1745=DIRECTION('',(0.346188613058753,-0.242403876506106,0.90630778703665)); +#1746=DIRECTION('',(0.573576436351051,0.819152044288988,-3.01841884819964E-16)); +#1747=DIRECTION('',(0.,0.,1.)); +#1748=DIRECTION('',(1.,0.,0.)); +#1749=CARTESIAN_POINT('',(0.,0.,0.)); +#1750=CARTESIAN_POINT('CP',(2.28716934492507,1.190625,0.)); +#1751=CARTESIAN_POINT('',(1.92004367075265,2.74210654124316,-1.2757576614651E-16)); +#1752=CARTESIAN_POINT('',(8.95874775068343,12.7,3.12271849034756E-15)); +#1753=CARTESIAN_POINT('',(22.4764293417812,9.95789345875684,7.89402600627218E-15)); +#1754=CARTESIAN_POINT('',(15.4377252618505,0.,-2.03287907341032E-16)); +#1755=CARTESIAN_POINT('',(1.31186644219347,1.87353944453044,0.)); +#1756=CARTESIAN_POINT('',(3.34749398522626,0.,0.)); +#1757=CARTESIAN_POINT('',(21.0489790273076,12.7,0.)); +#1758=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,0.)); +#1759=CARTESIAN_POINT('',(8.95874775068341,12.573,-6.70172467867602E-15)); +#1760=CARTESIAN_POINT('',(15.4377252618505,0.127,-6.70172467867602E-15)); +#1761=CARTESIAN_POINT('',(2.28716934492507,1.190625,0.)); +#1762=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.)); +#1763=CARTESIAN_POINT('',(0.,0.,0.)); +#1764=CARTESIAN_POINT('',(12.1982365062669,6.35,0.)); +#1765=CARTESIAN_POINT('',(12.1982365062669,6.35,-6.31077892741432)); +#1766=CARTESIAN_POINT('',(9.11213650626694,6.35,-6.31077892741432)); +#1767=CARTESIAN_POINT('',(12.1982365062669,6.35,-6.01477892741431)); +#1768=CARTESIAN_POINT('',(9.62482354530733,6.35,-6.01477892741431)); +#1769=CARTESIAN_POINT('',(12.1982365062669,6.35,-6.01477892741431)); +#1770=CARTESIAN_POINT('',(12.1982365062669,6.35,-0.234072864162645)); +#1771=CARTESIAN_POINT('',(14.7763365062669,6.35,-0.234072864162645)); +#1772=CARTESIAN_POINT('',(12.1982365062669,6.35,-6.01477892741431)); +#1773=CARTESIAN_POINT('',(9.62013650626694,6.35,-6.01477892741431)); +#1774=CARTESIAN_POINT('',(12.1982365062669,6.35,-6.31077892741432)); +#1775=CARTESIAN_POINT('',(15.4377252618505,0.,0.0592210725856848)); +#1776=CARTESIAN_POINT('',(15.4377252618505,0.,-6.25155785482863)); +#1777=CARTESIAN_POINT('',(15.4377252618505,0.,-6.70172467867602E-15)); +#1778=CARTESIAN_POINT('',(15.4377252618505,0.127,-6.25155785482862)); +#1779=CARTESIAN_POINT('',(15.5417575714752,0.0541557925834201,-6.25155785482862)); +#1780=CARTESIAN_POINT('',(15.5417575714752,0.0541557925834201,0.0592210725856848)); +#1781=CARTESIAN_POINT('',(15.5417575714751,0.0541557925833993,-4.50621527939288E-15)); +#1782=CARTESIAN_POINT('',(15.4377252618505,0.127,-6.70172467867602E-15)); +#1783=CARTESIAN_POINT('',(15.4377252618505,0.127,0.0592210725856848)); +#1784=CARTESIAN_POINT('',(24.3964730125338,12.7,-5.16077892741431)); +#1785=CARTESIAN_POINT('',(22.4764293417812,9.95789345875683,-5.16077892741431)); +#1786=CARTESIAN_POINT('',(23.0846065703403,10.8264605554695,-5.16077892741431)); +#1787=CARTESIAN_POINT('',(24.6948078785868,5.69642793869672,-5.16077892741431)); +#1788=CARTESIAN_POINT('',(21.0489790273076,12.7,-5.16077892741431)); +#1789=CARTESIAN_POINT('',(8.89263573526335,12.7,-5.16077892741431)); +#1790=CARTESIAN_POINT('',(22.1093036676088,12.7,-5.16077892741431)); +#1791=CARTESIAN_POINT('',(22.1093036676088,11.509375,-5.16077892741431)); +#1792=CARTESIAN_POINT('',(30.3273266692685,8.62853163273919,-5.16077892741431)); +#1793=CARTESIAN_POINT('',(23.0846065703403,10.8264605554695,0.0592210725856848)); +#1794=CARTESIAN_POINT('',(23.0846065703403,10.8264605554695,-1.09077892741432)); +#1795=CARTESIAN_POINT('',(22.1093036676088,12.7,0.0592210725856848)); +#1796=CARTESIAN_POINT('',(22.1093036676088,12.7,-1.09077892741432)); +#1797=CARTESIAN_POINT('',(22.1093036676088,11.509375,-1.09077892741432)); +#1798=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.0592210725856848)); +#1799=CARTESIAN_POINT('',(24.3964730125338,12.7,-1.09077892741432)); +#1800=CARTESIAN_POINT('',(22.4764293417812,9.95789345875683,-1.09077892741432)); +#1801=CARTESIAN_POINT('',(8.89263573526335,12.7,-1.09077892741432)); +#1802=CARTESIAN_POINT('',(21.0489790273076,12.7,-1.09077892741432)); +#1803=CARTESIAN_POINT('',(24.6948078785868,5.6964279386967,-1.09077892741432)); +#1804=CARTESIAN_POINT('',(30.3273266692685,8.62853163273919,-1.09077892741432)); +#1805=CARTESIAN_POINT('',(15.5038372772705,0.,-1.09077892741432)); +#1806=CARTESIAN_POINT('',(2.28716934492508,0.,-1.09077892741432)); +#1807=CARTESIAN_POINT('',(3.34749398522627,0.,-1.09077892741432)); +#1808=CARTESIAN_POINT('',(5.56587252203193,-4.2614655200601,-1.09077892741432)); +#1809=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-1.09077892741432)); +#1810=CARTESIAN_POINT('',(3.81639164714898E-14,0.,-1.09077892741432)); +#1811=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,-1.09077892741432)); +#1812=CARTESIAN_POINT('',(2.28716934492508,1.190625,-1.09077892741432)); +#1813=CARTESIAN_POINT('',(-0.0666462686497605,-7.1935692141026,-1.09077892741432)); +#1814=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,0.0592210725856848)); +#1815=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,-5.16077892741431)); +#1816=CARTESIAN_POINT('',(2.28716934492508,1.190625,-5.16077892741431)); +#1817=CARTESIAN_POINT('',(2.28716934492508,0.,-5.16077892741431)); +#1818=CARTESIAN_POINT('',(2.28716934492508,0.,0.0592210725856848)); +#1819=CARTESIAN_POINT('',(2.28716934492508,1.190625,0.0592210725856848)); +#1820=CARTESIAN_POINT('',(15.5038372772705,0.,-5.16077892741431)); +#1821=CARTESIAN_POINT('',(3.34749398522626,0.,-5.16077892741431)); +#1822=CARTESIAN_POINT('',(3.81639164714898E-14,0.,-5.16077892741431)); +#1823=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-5.16077892741431)); +#1824=CARTESIAN_POINT('',(5.56587252203192,-4.2614655200601,-5.16077892741431)); +#1825=CARTESIAN_POINT('',(-0.0666462686497605,-7.1935692141026,-5.16077892741431)); +#1826=CARTESIAN_POINT('',(8.95874775068342,12.7,0.0592210725856848)); +#1827=CARTESIAN_POINT('',(8.95874775068342,12.7,-6.25155785482862)); +#1828=CARTESIAN_POINT('',(8.95874775068343,12.7,3.59819595993627E-15)); +#1829=CARTESIAN_POINT('',(8.95874775068341,12.573,-6.25155785482862)); +#1830=CARTESIAN_POINT('',(8.85471544105872,12.6458442074166,-6.25155785482863)); +#1831=CARTESIAN_POINT('',(8.85471544105872,12.6458442074166,0.0592210725856848)); +#1832=CARTESIAN_POINT('',(8.85471544105871,12.6458442074166,-6.70172467867602E-15)); +#1833=CARTESIAN_POINT('',(8.95874775068341,12.573,-6.70172467867602E-15)); +#1834=CARTESIAN_POINT('',(8.95874775068342,12.573,0.0592210725856848)); +#1835=CARTESIAN_POINT('',(15.0512562717064,0.39760850018311,0.279221072585685)); +#1836=CARTESIAN_POINT('',(15.4377252618505,0.127,0.0592210725856756)); +#1837=CARTESIAN_POINT('',(15.4377252618505,0.5987915225121,0.279221072585685)); +#1838=CARTESIAN_POINT('',(15.4377252618505,0.127,0.0592210725856757)); +#1839=CARTESIAN_POINT('',(9.34521674082743,12.3023914998169,0.279221072585685)); +#1840=CARTESIAN_POINT('',(8.95874775068343,12.573,0.0592210725856756)); +#1841=CARTESIAN_POINT('',(8.95874775068343,12.1012084774879,0.279221072585685)); +#1842=CARTESIAN_POINT('',(8.95874775068341,12.573,0.0592210725856757)); +#1843=CARTESIAN_POINT('',(3.34749398522627,0.,-6.31077892741432)); +#1844=CARTESIAN_POINT('',(3.34749398522627,0.,-6.25155785482862)); +#1845=CARTESIAN_POINT('',(15.5038372772705,0.,-6.25155785482863)); +#1846=CARTESIAN_POINT('',(15.5038372772705,0.,-2.03287907341032E-16)); +#1847=CARTESIAN_POINT('',(3.34749398522627,0.,-6.09863722023096E-15)); +#1848=CARTESIAN_POINT('',(3.34749398522627,0.,0.0592210725856848)); +#1849=CARTESIAN_POINT('',(15.5038372772705,0.,0.0592210725856848)); +#1850=CARTESIAN_POINT('',(15.4377252618505,0.5987915225121,-6.53077892741432)); +#1851=CARTESIAN_POINT('',(15.4377252618505,0.127,-6.31077892741432)); +#1852=CARTESIAN_POINT('',(15.0512562717064,0.39760850018311,-6.53077892741432)); +#1853=CARTESIAN_POINT('',(15.4377252618505,0.127,-6.31077892741432)); +#1854=CARTESIAN_POINT('',(22.4764293417812,9.95789345875683,0.0592210725856848)); +#1855=CARTESIAN_POINT('',(22.4764293417812,9.95789345875683,8.70072243419617E-15)); +#1856=CARTESIAN_POINT('',(24.3964730125338,12.7,1.16009632455949E-14)); +#1857=CARTESIAN_POINT('',(24.3964730125338,12.7,-6.25155785482865)); +#1858=CARTESIAN_POINT('',(22.4764293417812,9.95789345875683,-6.25155785482865)); +#1859=CARTESIAN_POINT('',(22.4764293417812,9.95789345875683,0.0592210725856848)); +#1860=CARTESIAN_POINT('',(24.3964730125338,12.7,0.0592210725856848)); +#1861=CARTESIAN_POINT('',(21.0489790273076,12.7,0.0592210725856848)); +#1862=CARTESIAN_POINT('',(21.0489790273076,12.7,-1.05032085459533E-14)); +#1863=CARTESIAN_POINT('',(21.0489790273076,12.7,0.0592210725856848)); +#1864=CARTESIAN_POINT('',(21.0489790273076,12.7,-6.25155785482862)); +#1865=CARTESIAN_POINT('',(8.89263573526335,12.7,-6.25155785482863)); +#1866=CARTESIAN_POINT('',(8.89263573526335,12.7,3.19839640883224E-15)); +#1867=CARTESIAN_POINT('',(8.89263573526335,12.7,0.0592210725856848)); +#1868=CARTESIAN_POINT('',(8.95874775068343,12.1012084774879,-6.53077892741432)); +#1869=CARTESIAN_POINT('',(8.95874775068341,12.573,-6.31077892741432)); +#1870=CARTESIAN_POINT('',(9.34521674082743,12.3023914998169,-6.53077892741432)); +#1871=CARTESIAN_POINT('',(8.95874775068341,12.573,-6.31077892741432)); +#1872=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-6.31077892741432)); +#1873=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-6.25155785482862)); +#1874=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,0.0592210725856848)); +#1875=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-6.90501258601706E-15)); +#1876=CARTESIAN_POINT('',(3.81639164714898E-14,0.,9.48676900924816E-17)); +#1877=CARTESIAN_POINT('',(3.81639164714898E-14,0.,-6.25155785482863)); +#1878=CARTESIAN_POINT('',(3.81639164714898E-14,0.,0.0592210725856848)); +#1879=CARTESIAN_POINT('',(-2.90471752832056,12.0103865715668,-1.92968789876368)); +#1880=CARTESIAN_POINT('',(1.98615568617274,2.61510654124317,-6.31077892741432)); +#1881=CARTESIAN_POINT('',(2.63376882798946,1.37105327062159,-6.31077892741432)); +#1882=CARTESIAN_POINT('',(3.2813819698062,0.127,-6.31077892741432)); +#1883=CARTESIAN_POINT('',(8.17225518429948,-9.2682800303236,-1.92968789876369)); +#1884=CARTESIAN_POINT('',(5.56587252203192,-4.2614655200601,-5.16077892741431)); +#1885=CARTESIAN_POINT('',(12.1982365062669,0.127,-6.31077892741432)); +#1886=CARTESIAN_POINT('',(31.2482365062669,0.5987915225121,-6.53077892741432)); +#1887=CARTESIAN_POINT('',(27.3011905408544,0.68961342843322,-1.9296878987637)); +#1888=CARTESIAN_POINT('',(22.4103173263611,10.0848934587568,-6.31077892741432)); +#1889=CARTESIAN_POINT('',(17.2958196778773,2.78063383658743,-6.31077892741432)); +#1890=CARTESIAN_POINT('',(5.98271957524586,-12.5536041069347,-6.53077892741432)); +#1891=CARTESIAN_POINT('',(21.7627041845444,11.3289467293784,-6.31077892741432)); +#1892=CARTESIAN_POINT('',(21.1150910427277,12.573,-6.31077892741432)); +#1893=CARTESIAN_POINT('',(16.2242178282344,21.9682800303237,-1.92968789876367)); +#1894=CARTESIAN_POINT('',(24.6948078785868,5.6964279386967,-5.16077892741431)); +#1895=CARTESIAN_POINT('',(12.198236506267,12.573,-6.31077892741432)); +#1896=CARTESIAN_POINT('',(-6.85176349373306,12.1012084774879,-6.53077892741432)); +#1897=CARTESIAN_POINT('',(7.10065333465655,9.91936616341256,-6.31077892741432)); +#1898=CARTESIAN_POINT('',(18.413753437288,25.2536041069348,-6.53077892741432)); +#1899=CARTESIAN_POINT('',(12.1982365062669,6.35,-6.31077892741432)); +#1900=CARTESIAN_POINT('',(27.3011905408544,0.68961342843322,-4.32186995606494)); +#1901=CARTESIAN_POINT('',(22.4103173263611,10.0848934587568,0.0592210725856852)); +#1902=CARTESIAN_POINT('',(17.2958196778773,2.78063383658743,0.0592210725856848)); +#1903=CARTESIAN_POINT('',(5.98271957524586,-12.5536041069347,0.279221072585685)); +#1904=CARTESIAN_POINT('',(8.17225518429948,-9.2682800303236,-4.32186995606496)); +#1905=CARTESIAN_POINT('',(3.2813819698062,0.127,0.0592210725856848)); +#1906=CARTESIAN_POINT('',(12.1982365062669,0.127,0.0592210725856848)); +#1907=CARTESIAN_POINT('',(31.2482365062669,0.5987915225121,0.279221072585685)); +#1908=CARTESIAN_POINT('',(2.63376882798946,1.37105327062159,0.0592210725856848)); +#1909=CARTESIAN_POINT('',(1.98615568617274,2.61510654124317,0.0592210725856848)); +#1910=CARTESIAN_POINT('',(-2.90471752832056,12.0103865715668,-4.32186995606497)); +#1911=CARTESIAN_POINT('',(5.56587252203192,-4.2614655200601,-1.09077892741432)); +#1912=CARTESIAN_POINT('',(7.10065333465655,9.91936616341256,0.0592210725856848)); +#1913=CARTESIAN_POINT('',(18.413753437288,25.2536041069348,0.279221072585685)); +#1914=CARTESIAN_POINT('',(16.2242178282344,21.9682800303237,-4.32186995606497)); +#1915=CARTESIAN_POINT('',(21.1150910427277,12.573,0.0592210725856848)); +#1916=CARTESIAN_POINT('',(12.198236506267,12.573,0.0592210725856848)); +#1917=CARTESIAN_POINT('',(-6.85176349373306,12.1012084774879,0.279221072585685)); +#1918=CARTESIAN_POINT('',(21.7627041845444,11.3289467293784,0.0592210725856848)); +#1919=CARTESIAN_POINT('',(24.6948078785868,5.6964279386967,-1.09077892741432)); +#1920=CARTESIAN_POINT('',(12.1982365062669,6.35,0.0592210725856849)); +#1921=CARTESIAN_POINT('',(9.11213650626694,6.35,0.0592210725856849)); +#1922=CARTESIAN_POINT('',(12.1982365062669,6.35,0.0592210725856848)); +#1923=CARTESIAN_POINT('',(12.1982365062669,6.35,-0.236778927414315)); +#1924=CARTESIAN_POINT('',(14.7763365062669,6.35,-6.01477892741431)); +#1925=CARTESIAN_POINT('',(2.28716934492507,0.,0.0592210725856848)); +#1926=CARTESIAN_POINT('',(2.28716934492507,0.,-1.09077892741432)); +#1927=CARTESIAN_POINT('',(2.28716934492507,0.,0.)); +#1928=CARTESIAN_POINT('',(2.28716934492507,1.190625,0.)); +#1929=CARTESIAN_POINT('',(1.31186644219344,1.87353944453046,0.)); +#1930=CARTESIAN_POINT('',(1.31186644219344,1.87353944453046,0.0592210725856848)); +#1931=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,-1.09077892741432)); +#1932=CARTESIAN_POINT('',(2.28716934492507,1.190625,-1.09077892741432)); +#1933=CARTESIAN_POINT('',(2.28716934492507,1.190625,0.0592210725856848)); +#1934=CARTESIAN_POINT('',(3.34749398522626,0.,0.0592210725856848)); +#1935=CARTESIAN_POINT('',(3.34749398522626,0.,-1.09077892741432)); +#1936=CARTESIAN_POINT('',(3.34749398522626,0.,0.)); +#1937=CARTESIAN_POINT('',(2.22201916507566,0.,0.)); +#1938=CARTESIAN_POINT('',(2.28716934492507,0.,-1.09077892741432)); +#1939=CARTESIAN_POINT('',(2.22201916507566,0.,0.0592210725856848)); +#1940=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-1.03077892741432)); +#1941=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-1.09077892741432)); +#1942=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,0.)); +#1943=CARTESIAN_POINT('',(2.97085311764292,0.72352037491452,0.941282188004799)); +#1944=CARTESIAN_POINT('',(1.98615568617274,2.61510654124318,0.0592210725856848)); +#1945=CARTESIAN_POINT('',(3.34749398522626,0.,0.0592210725856848)); +#1946=CARTESIAN_POINT('',(3.28138196980619,0.127,0.0592210725856848)); +#1947=CARTESIAN_POINT('',(3.5156008692631,-0.322930319655581,-0.150584881105836)); +#1948=CARTESIAN_POINT('',(3.12142027935525,0.43428354835635,-1.09077892741432)); +#1949=CARTESIAN_POINT('',(3.34749398522626,0.,-1.03077892741432)); +#1950=CARTESIAN_POINT('',(1.37907135235914,1.96951800302683,0.)); +#1951=CARTESIAN_POINT('',(0.752455678881839,1.0746180779569,-1.09077892741432)); +#1952=CARTESIAN_POINT('',(1.37907135235914,1.96951800302683,0.0592210725856848)); +#1953=CARTESIAN_POINT('',(1.41589875181824,1.80069523711389,0.0592210725856848)); +#1954=CARTESIAN_POINT('',(1.41589875181824,1.80069523711388,0.0592210725856848)); +#1955=CARTESIAN_POINT('',(2.28716934492507,1.190625,0.0592210725856848)); +#1956=CARTESIAN_POINT('',(2.28716934492507,0.127,0.0592210725856848)); +#1957=CARTESIAN_POINT('',(2.28716934492507,0.127,0.0592210725856848)); +#1958=CARTESIAN_POINT('',(2.28716934492507,1.190625,0.0592210725856848)); +#1959=CARTESIAN_POINT('',(2.28716934492507,0.,0.)); +#1960=CARTESIAN_POINT('',(2.28716934492507,0.127,0.0592210725856848)); +#1961=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,0.)); +#1962=CARTESIAN_POINT('',(2.28716934492507,1.190625,0.0592210725856848)); +#1963=CARTESIAN_POINT('',(1.41589875181824,1.80069523711389,0.0592210725856848)); +#1964=CARTESIAN_POINT('',(2.28716934492507,1.190625,-1.09077892741432)); +#1965=CARTESIAN_POINT('',(22.1093036676088,12.7,0.0592210725856848)); +#1966=CARTESIAN_POINT('',(22.1093036676088,12.7,-1.09077892741432)); +#1967=CARTESIAN_POINT('',(22.1093036676088,12.7,0.)); +#1968=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.)); +#1969=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,0.)); +#1970=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,0.0592210725856848)); +#1971=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,-1.09077892741432)); +#1972=CARTESIAN_POINT('',(22.1093036676088,11.509375,-1.09077892741432)); +#1973=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.0592210725856848)); +#1974=CARTESIAN_POINT('',(21.0489790273076,12.7,0.0592210725856848)); +#1975=CARTESIAN_POINT('',(21.0489790273076,12.7,-1.09077892741432)); +#1976=CARTESIAN_POINT('',(21.0489790273076,12.7,0.)); +#1977=CARTESIAN_POINT('',(22.1744538474582,12.7,0.)); +#1978=CARTESIAN_POINT('',(22.1093036676088,12.7,-1.09077892741432)); +#1979=CARTESIAN_POINT('',(22.1744538474582,12.7,0.0592210725856848)); +#1980=CARTESIAN_POINT('',(22.4764293417812,9.9578934587568,-1.03077892741432)); +#1981=CARTESIAN_POINT('',(22.4764293417812,9.9578934587568,-1.09077892741432)); +#1982=CARTESIAN_POINT('',(22.4764293417812,9.9578934587568,0.)); +#1983=CARTESIAN_POINT('',(21.425619894891,11.9764796250855,0.941282188004799)); +#1984=CARTESIAN_POINT('',(22.4103173263611,10.0848934587568,0.0592210725856848)); +#1985=CARTESIAN_POINT('',(21.0489790273076,12.7,0.0592210725856848)); +#1986=CARTESIAN_POINT('',(21.1150910427277,12.573,0.0592210725856848)); +#1987=CARTESIAN_POINT('',(20.8808721432708,13.0229303196556,-0.150584881105836)); +#1988=CARTESIAN_POINT('',(21.2750527331786,12.2657164516436,-1.09077892741432)); +#1989=CARTESIAN_POINT('',(21.0489790273076,12.7,-1.03077892741432)); +#1990=CARTESIAN_POINT('',(23.0174016601747,10.7304819969732,0.)); +#1991=CARTESIAN_POINT('',(23.644017333652,11.6253819220431,-1.09077892741432)); +#1992=CARTESIAN_POINT('',(23.0174016601747,10.7304819969732,0.0592210725856848)); +#1993=CARTESIAN_POINT('',(22.9805742607157,10.8993047628861,0.0592210725856848)); +#1994=CARTESIAN_POINT('',(22.9805742607157,10.8993047628861,0.0592210725856848)); +#1995=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.0592210725856848)); +#1996=CARTESIAN_POINT('',(22.1093036676088,12.573,0.0592210725856848)); +#1997=CARTESIAN_POINT('',(22.1093036676088,12.573,0.0592210725856848)); +#1998=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.0592210725856848)); +#1999=CARTESIAN_POINT('',(22.1093036676088,12.7,0.)); +#2000=CARTESIAN_POINT('',(22.1093036676088,12.573,0.0592210725856848)); +#2001=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,0.)); +#2002=CARTESIAN_POINT('',(22.1093036676088,11.509375,0.0592210725856848)); +#2003=CARTESIAN_POINT('',(22.9805742607157,10.8993047628861,0.0592210725856848)); +#2004=CARTESIAN_POINT('',(22.1093036676088,11.509375,-1.09077892741432)); +#2005=CARTESIAN_POINT('',(22.1093036676088,12.7,-6.31077892741432)); +#2006=CARTESIAN_POINT('',(22.1093036676088,12.7,-6.25155785482863)); +#2007=CARTESIAN_POINT('',(22.1093036676088,12.7,-5.16077892741431)); +#2008=CARTESIAN_POINT('',(22.1093036676088,11.509375,-5.16077892741431)); +#2009=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,-5.16077892741431)); +#2010=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,-6.31077892741432)); +#2011=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,-6.25155785482863)); +#2012=CARTESIAN_POINT('',(22.1093036676088,11.509375,-6.25155785482863)); +#2013=CARTESIAN_POINT('',(22.1093036676088,11.509375,-6.31077892741432)); +#2014=CARTESIAN_POINT('',(21.0489790273076,12.7,-6.31077892741432)); +#2015=CARTESIAN_POINT('',(21.0489790273076,12.7,-6.25155785482863)); +#2016=CARTESIAN_POINT('',(21.0489790273076,12.7,-5.16077892741431)); +#2017=CARTESIAN_POINT('',(22.1093036676088,12.7,-5.16077892741431)); +#2018=CARTESIAN_POINT('',(22.1744538474582,12.7,-6.25155785482863)); +#2019=CARTESIAN_POINT('',(22.1744538474582,12.7,-6.31077892741432)); +#2020=CARTESIAN_POINT('',(22.4764293417812,9.9578934587568,-5.22077892741432)); +#2021=CARTESIAN_POINT('',(22.4764293417812,9.9578934587568,-6.25155785482863)); +#2022=CARTESIAN_POINT('',(22.4764293417812,9.9578934587568,-5.16077892741431)); +#2023=CARTESIAN_POINT('',(21.2750527331786,12.2657164516436,-5.16077892741431)); +#2024=CARTESIAN_POINT('',(20.8808721432708,13.0229303196556,-6.1009729737228)); +#2025=CARTESIAN_POINT('',(21.1150910427277,12.573,-6.31077892741432)); +#2026=CARTESIAN_POINT('',(21.0489790273076,12.7,-6.31077892741432)); +#2027=CARTESIAN_POINT('',(22.4103173263611,10.0848934587568,-6.31077892741432)); +#2028=CARTESIAN_POINT('',(21.425619894891,11.9764796250855,-7.19284004283344)); +#2029=CARTESIAN_POINT('',(21.0489790273076,12.7,-5.22077892741432)); +#2030=CARTESIAN_POINT('',(23.644017333652,11.6253819220431,-5.16077892741431)); +#2031=CARTESIAN_POINT('',(23.0174016601747,10.7304819969732,-6.25155785482863)); +#2032=CARTESIAN_POINT('',(23.0174016601747,10.7304819969732,-6.31077892741432)); +#2033=CARTESIAN_POINT('',(22.1093036676088,12.573,-6.31077892741432)); +#2034=CARTESIAN_POINT('',(22.1093036676088,12.573,-6.31077892741432)); +#2035=CARTESIAN_POINT('',(22.1093036676088,11.509375,-6.31077892741432)); +#2036=CARTESIAN_POINT('',(22.9805742607157,10.8993047628861,-6.31077892741432)); +#2037=CARTESIAN_POINT('',(22.9805742607157,10.8993047628861,-6.31077892741432)); +#2038=CARTESIAN_POINT('',(22.1093036676088,11.509375,-6.31077892741432)); +#2039=CARTESIAN_POINT('',(22.1093036676088,12.7,-6.25155785482863)); +#2040=CARTESIAN_POINT('',(22.1093036676088,12.573,-6.31077892741432)); +#2041=CARTESIAN_POINT('',(23.0846065703404,10.8264605554695,-6.25155785482863)); +#2042=CARTESIAN_POINT('',(22.1093036676088,11.509375,-6.31077892741432)); +#2043=CARTESIAN_POINT('',(22.9805742607157,10.8993047628861,-6.31077892741432)); +#2044=CARTESIAN_POINT('',(22.1093036676088,11.509375,-5.16077892741431)); +#2045=CARTESIAN_POINT('',(2.28716934492507,0.,-6.31077892741432)); +#2046=CARTESIAN_POINT('',(2.28716934492507,0.,-6.25155785482863)); +#2047=CARTESIAN_POINT('',(2.28716934492507,0.,-5.16077892741431)); +#2048=CARTESIAN_POINT('',(2.28716934492507,1.190625,-5.16077892741431)); +#2049=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,-5.16077892741431)); +#2050=CARTESIAN_POINT('',(1.31186644219344,1.87353944453046,-6.31077892741432)); +#2051=CARTESIAN_POINT('',(1.31186644219344,1.87353944453046,-6.25155785482863)); +#2052=CARTESIAN_POINT('',(2.28716934492507,1.190625,-6.25155785482863)); +#2053=CARTESIAN_POINT('',(2.28716934492507,1.190625,-6.31077892741432)); +#2054=CARTESIAN_POINT('',(3.34749398522626,0.,-6.31077892741432)); +#2055=CARTESIAN_POINT('',(3.34749398522626,0.,-6.25155785482863)); +#2056=CARTESIAN_POINT('',(3.34749398522626,0.,-5.16077892741431)); +#2057=CARTESIAN_POINT('',(2.28716934492507,0.,-5.16077892741431)); +#2058=CARTESIAN_POINT('',(2.22201916507566,0.,-6.25155785482863)); +#2059=CARTESIAN_POINT('',(2.22201916507566,0.,-6.31077892741432)); +#2060=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-5.22077892741432)); +#2061=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-6.25155785482863)); +#2062=CARTESIAN_POINT('',(1.92004367075264,2.74210654124317,-5.16077892741431)); +#2063=CARTESIAN_POINT('',(3.12142027935525,0.43428354835635,-5.16077892741431)); +#2064=CARTESIAN_POINT('',(3.5156008692631,-0.322930319655581,-6.1009729737228)); +#2065=CARTESIAN_POINT('',(3.28138196980619,0.127,-6.31077892741432)); +#2066=CARTESIAN_POINT('',(3.34749398522626,0.,-6.31077892741432)); +#2067=CARTESIAN_POINT('',(1.98615568617274,2.61510654124318,-6.31077892741432)); +#2068=CARTESIAN_POINT('',(2.97085311764292,0.72352037491452,-7.19284004283344)); +#2069=CARTESIAN_POINT('',(3.34749398522626,0.,-5.22077892741432)); +#2070=CARTESIAN_POINT('',(0.752455678881839,1.0746180779569,-5.16077892741431)); +#2071=CARTESIAN_POINT('',(1.37907135235914,1.96951800302683,-6.25155785482863)); +#2072=CARTESIAN_POINT('',(1.37907135235914,1.96951800302683,-6.31077892741432)); +#2073=CARTESIAN_POINT('',(2.28716934492507,0.127,-6.31077892741432)); +#2074=CARTESIAN_POINT('',(2.28716934492507,0.127,-6.31077892741432)); +#2075=CARTESIAN_POINT('',(2.28716934492507,1.190625,-6.31077892741432)); +#2076=CARTESIAN_POINT('',(1.41589875181824,1.80069523711388,-6.31077892741432)); +#2077=CARTESIAN_POINT('',(1.41589875181824,1.80069523711389,-6.31077892741432)); +#2078=CARTESIAN_POINT('',(2.28716934492507,1.190625,-6.31077892741432)); +#2079=CARTESIAN_POINT('',(2.28716934492507,0.,-6.25155785482863)); +#2080=CARTESIAN_POINT('',(2.28716934492507,0.127,-6.31077892741432)); +#2081=CARTESIAN_POINT('',(1.31186644219354,1.87353944453046,-6.25155785482863)); +#2082=CARTESIAN_POINT('',(2.28716934492507,1.190625,-6.31077892741432)); +#2083=CARTESIAN_POINT('',(1.41589875181824,1.80069523711389,-6.31077892741432)); +#2084=CARTESIAN_POINT('',(2.28716934492507,1.190625,-5.16077892741431)); +#2085=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#1264, +#1265,#1266,#1267,#1268,#1269,#1270,#1271,#1272,#1273,#1274,#1275,#1276, +#1277,#1278,#1279,#1280,#1281,#1282,#1283),#2086); +#2086=( +GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2087)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2093,#2089,#2088)) +REPRESENTATION_CONTEXT('DNGA150612S01225DMT_GTM', +'TOP_LEVEL_ASSEMBLY_PART') +); +#2087=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-5),#2093, +'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model'); +#2088=( +NAMED_UNIT(*) +SI_UNIT($,.STERADIAN.) +SOLID_ANGLE_UNIT() +); +#2089=( +CONVERSION_BASED_UNIT('DEGREE',#2091) +NAMED_UNIT(#2090) +PLANE_ANGLE_UNIT() +); +#2090=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.); +#2091=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(0.0174532925),#2092); +#2092=( +NAMED_UNIT(*) +PLANE_ANGLE_UNIT() +SI_UNIT($,.RADIAN.) +); +#2093=( +LENGTH_UNIT() +NAMED_UNIT(*) +SI_UNIT(.MILLI.,.METRE.) +); +ENDSEC; +END-ISO-10303-21; diff --git a/source/SAMOSBOR/Assembly.cpp b/source/SAMOSBOR/Assembly.cpp new file mode 100644 index 0000000..0b1b833 --- /dev/null +++ b/source/SAMOSBOR/Assembly.cpp @@ -0,0 +1,22 @@ +#include "pch.h" +#include "Assembly.h" + +using Assembly = SAMOSBOR::assembly::ref::Assembly; + +using Mesh = SAMOSBOR::core::occ::Mesh; +using Shape = SAMOSBOR::core::occ::Shape; + +Assembly::Assembly(const std::vector& shapes, std::vector& meshes): _shapes(std::move(shapes)), _meshes(std::move(meshes)) +{ + +} + +const std::vector& Assembly::GetShapes() const +{ + return _shapes; +} + +const std::vector& Assembly::GetMeshes() const +{ + return _meshes; +} \ No newline at end of file diff --git a/source/SAMOSBOR/Assembly.h b/source/SAMOSBOR/Assembly.h new file mode 100644 index 0000000..410c07f --- /dev/null +++ b/source/SAMOSBOR/Assembly.h @@ -0,0 +1,21 @@ +#pragma once +#include "Shape.hpp" +#include "Mesh.hpp" + +namespace SAMOSBOR::assembly::ref +{ + namespace occ = SAMOSBOR::core::occ; + + class Assembly + { + public: + Assembly() = default; + Assembly(const std::vector& shapes, std::vector& meshes); + + const std::vector& GetShapes() const; + const std::vector& GetMeshes() const; + private: + std::vector _shapes; + std::vector _meshes; + }; +} diff --git a/source/SAMOSBOR/AssemblyBuilder.cpp b/source/SAMOSBOR/AssemblyBuilder.cpp index 6bc87b8..890ac9e 100644 --- a/source/SAMOSBOR/AssemblyBuilder.cpp +++ b/source/SAMOSBOR/AssemblyBuilder.cpp @@ -1,39 +1,27 @@ #include "pch.h" #include "Result.hpp" #include "ResultOr.hpp" +#include "Mesh.hpp" #include "Shape.hpp" -#include "StepWriter.h" -#include "GraphId.h" + +#include "Assembly.h" #include "AssemblyGraph.h" #include "AssemblySettings.hpp" #include "AssemblyBuilder.h" -#include "AssemblyGraphBuilder.h" + +#include "Triangulation.h" namespace core = SAMOSBOR::core; namespace occ = SAMOSBOR::core::occ; namespace occt = opencascade; -using GraphId = SAMOSBOR::assembly::ref::GraphId; +using Assembly = SAMOSBOR::assembly::ref::Assembly; using AssemblyGraph = SAMOSBOR::assembly::ref::AssemblyGraph; using AssemblyBuilder = SAMOSBOR::assembly::ref::AssemblyBuilder; -using AssemblyGraphBuilder = SAMOSBOR::assembly::ref::AssemblyGraphBuilder; using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; -using StepWriter = SAMOSBOR::step::ref::StepWriter; - namespace { - __forceinline void silence_occt() - { - occt::handle messenger = Message::DefaultMessenger(); - Message_SequenceOfPrinters printers = Message::DefaultMessenger()->Printers(); - - for (auto it = printers.begin(); it != printers.end(); it++) - { - messenger->RemovePrinter(*it); - } - } - __forceinline void transform_shapes(const AssemblyGraph& graph, std::vector* output) { // no need to transform root toolitem @@ -48,30 +36,27 @@ namespace output->push_back(shape.Moved(loc, false)); } } -} -AssemblyBuilder::AssemblyBuilder(bool silenceOcctMessages): _graphBuilder(new AssemblyGraphBuilder()), _stepWriter(new StepWriter()) -{ - if (silenceOcctMessages) + __forceinline void triangulate_shapes(const std::vector shapes, const double coefficient, std::vector* meshes) { - silence_occt(); + for (const TopoDS_Shape& shape : shapes) + { + occ::Triangulation triangulation(shape, coefficient, true); + meshes->push_back(triangulation.GetMesh()); + } } } -AssemblyBuilder::~AssemblyBuilder() -{ - delete _graphBuilder; - delete _stepWriter; -} - -core::Result AssemblyBuilder::Build(const std::string_view& graphString, const AssemblySettings& settings) +core::ResultOr AssemblyBuilder::Build(const AssemblyGraph& graph, const AssemblySettings& settings) { - ASSIGN_OR_RETURN(const AssemblyGraph& graph, _graphBuilder->Build(GraphId(graphString), settings)); + std::vector transformedShapes; + transformedShapes.reserve(graph.shapes.size()); - std::vector outputShapes; - outputShapes.reserve(graph.shapes.size()); + std::vector meshes; + meshes.reserve(graph.shapes.size()); - transform_shapes(graph, &outputShapes); + transform_shapes(graph, &transformedShapes); + triangulate_shapes(transformedShapes, settings.triangulationCoefficient, &meshes); - return _stepWriter->Write(settings.outputPath, outputShapes); + return Assembly(transformedShapes, meshes); } diff --git a/source/SAMOSBOR/AssemblyBuilder.h b/source/SAMOSBOR/AssemblyBuilder.h index 1603bed..912ccd5 100644 --- a/source/SAMOSBOR/AssemblyBuilder.h +++ b/source/SAMOSBOR/AssemblyBuilder.h @@ -2,31 +2,20 @@ namespace SAMOSBOR::core { - class Result; -} - -namespace SAMOSBOR::step::ref -{ - class StepWriter; + template class ResultOr; } namespace SAMOSBOR::assembly::ref { namespace core = SAMOSBOR::core; - namespace step = SAMOSBOR::step::ref; + class Assembly; + struct AssemblyGraph; struct AssemblySettings; - class AssemblyGraphBuilder; class AssemblyBuilder { public: - AssemblyBuilder(bool silenceOcctMessages = true); - ~AssemblyBuilder(); - - core::Result Build(const std::string_view& graphString, const AssemblySettings& settings); - private: - AssemblyGraphBuilder* _graphBuilder; - step::StepWriter* _stepWriter; + core::ResultOr Build(const AssemblyGraph& graph, const AssemblySettings& settings); }; } \ No newline at end of file diff --git a/source/SAMOSBOR/AssemblyGraphBuilder.cpp b/source/SAMOSBOR/AssemblyGraphBuilder.cpp index 1713bc6..3a31065 100644 --- a/source/SAMOSBOR/AssemblyGraphBuilder.cpp +++ b/source/SAMOSBOR/AssemblyGraphBuilder.cpp @@ -3,11 +3,7 @@ #include "GraphId.h" #include "AssemblyGraph.h" #include "AssemblyGraphBuilder.h" -#include "AssemblySettings.hpp" #include "StepData.h" -#include "StepReader.h" - -namespace fs = std::filesystem; namespace core = SAMOSBOR::core; namespace step = SAMOSBOR::step::ref; @@ -15,44 +11,11 @@ namespace assembly = SAMOSBOR::assembly::ref; using AssemblyGraph = assembly::AssemblyGraph; using AssemblyGraphBuilder = assembly::AssemblyGraphBuilder; -using AssemblySettings = assembly::AssemblySettings; using StepData = step::StepData; -using StepReader = step::StepReader; - -namespace -{ - fs::path get_input_path(const fs::path& dataPath) - { - if (dataPath.empty()) - { - return fs::current_path(); - } - - return dataPath; - } - - fs::path get_file_id(fs::path inputPath, const std::string_view& fileId) - { - fs::path path = inputPath / fileId; - return path.string() + ".stp"; - } -} -AssemblyGraphBuilder::AssemblyGraphBuilder(): _reader(new StepReader()) +core::ResultOr AssemblyGraphBuilder::Build(const GraphId& graphId, const std::vector stepData) { - -} - -AssemblyGraphBuilder::~AssemblyGraphBuilder() -{ - delete _reader; -} - -core::ResultOr AssemblyGraphBuilder::Build(const GraphId& graphId, const AssemblySettings& settings) -{ - std::filesystem::path inputPath = get_input_path(settings.dataPath); - const std::vector& vertices = graphId.Vertices(); const std::vector& edges = graphId.Edges(); @@ -72,9 +35,7 @@ core::ResultOr AssemblyGraphBuilder::Build(const GraphId& graphId // for (size_t i = 0; i < vertices.size(); ++i) { - const GraphId::Vertex& vertex = vertices[i]; - - ASSIGN_OR_RETURN_T(const StepData& data, _reader->Read(get_file_id(inputPath, vertex.fileId)), AssemblyGraph); + const StepData& data = stepData[i]; graph.pcs[i] = data.Pcs(); graph.mcs[i] = data.Mcs(); diff --git a/source/SAMOSBOR/AssemblyGraphBuilder.h b/source/SAMOSBOR/AssemblyGraphBuilder.h index 40e340c..563b254 100644 --- a/source/SAMOSBOR/AssemblyGraphBuilder.h +++ b/source/SAMOSBOR/AssemblyGraphBuilder.h @@ -2,7 +2,7 @@ namespace SAMOSBOR::step::ref { - class StepReader; + class StepData; } namespace SAMOSBOR::core @@ -25,12 +25,7 @@ namespace SAMOSBOR::assembly::ref class AssemblyGraphBuilder final { public: - core::ResultOr Build(const GraphId& graphId, const AssemblySettings& settings); - - AssemblyGraphBuilder(); - ~AssemblyGraphBuilder(); - private: - step::StepReader* _reader; + core::ResultOr Build(const GraphId& graphId, const std::vector stepData); }; } diff --git a/source/SAMOSBOR/AssemblySettings.hpp b/source/SAMOSBOR/AssemblySettings.hpp index 2df79f1..73b4853 100644 --- a/source/SAMOSBOR/AssemblySettings.hpp +++ b/source/SAMOSBOR/AssemblySettings.hpp @@ -3,19 +3,16 @@ namespace SAMOSBOR::assembly::ref { - /// - /// Settings for assembly graph - /// - struct AssemblyGraphSettings - { - float extensionLength; - }; - /// /// Settings for assembly /// struct AssemblySettings { + /// + /// Graph Id string + /// + std::string graphId; + /// /// Path to folder with STEP files /// @@ -27,9 +24,14 @@ namespace SAMOSBOR::assembly::ref std::filesystem::path outputPath; /// - /// Graph settings + /// Tool items extension length + /// + float extensionLength; + + /// + /// Triangulation coefficient /// - AssemblyGraphSettings graphSettings; + double triangulationCoefficient; }; } diff --git a/source/SAMOSBOR/BuildAssemblyGraphStage.cpp b/source/SAMOSBOR/BuildAssemblyGraphStage.cpp new file mode 100644 index 0000000..56ce117 --- /dev/null +++ b/source/SAMOSBOR/BuildAssemblyGraphStage.cpp @@ -0,0 +1,27 @@ +#include "pch.h" +#include "BuildAssemblyGraphStage.h" + +#include "StepData.h" +#include "GraphId.h" +#include "AssemblyGraph.h" +#include "AssemblyGraphBuilder.h" + +using BuildAssemblyGraphStage = SAMOSBOR::workflow::stages::BuildAssemblyGraphStage; + +using GraphId = SAMOSBOR::assembly::ref::GraphId; +using AssemblyGraph = SAMOSBOR::assembly::ref::AssemblyGraph; +using AssemblyGraphBuilder = SAMOSBOR::assembly::ref::AssemblyGraphBuilder; + +using StepData = SAMOSBOR::step::ref::StepData; + +namespace core = SAMOSBOR::core; +namespace workflow = SAMOSBOR::workflow; + +BuildAssemblyGraphStage::BuildAssemblyGraphStage(const GraphId& graphId) : + Stage>([&graphId](const std::vector& stepData) -> core::ResultOr + { + AssemblyGraphBuilder builder; + return builder.Build(graphId, stepData); + }) +{ +} diff --git a/source/SAMOSBOR/BuildAssemblyGraphStage.h b/source/SAMOSBOR/BuildAssemblyGraphStage.h new file mode 100644 index 0000000..a148e29 --- /dev/null +++ b/source/SAMOSBOR/BuildAssemblyGraphStage.h @@ -0,0 +1,30 @@ +#pragma once +#include "Stage.hpp" +#include + +namespace SAMOSBOR::assembly::ref +{ + struct GraphId; + struct AssemblyGraph; +} + +namespace SAMOSBOR::step::ref +{ + class StepData; +} + +namespace SAMOSBOR::workflow::stages +{ + namespace core = SAMOSBOR::core; + namespace assembly = SAMOSBOR::assembly::ref; + namespace step = SAMOSBOR::step::ref; + + /// + /// builds assembly graph + /// + class BuildAssemblyGraphStage : public Stage> + { + public: + BuildAssemblyGraphStage(const assembly::GraphId& graphId); + }; +} diff --git a/source/SAMOSBOR/BuildAssemblyStage.cpp b/source/SAMOSBOR/BuildAssemblyStage.cpp new file mode 100644 index 0000000..ccc40d0 --- /dev/null +++ b/source/SAMOSBOR/BuildAssemblyStage.cpp @@ -0,0 +1,25 @@ +#include "pch.h" +#include "BuildAssemblyStage.h" + +#include "Assembly.h" +#include "AssemblyGraph.h" +#include "AssemblyBuilder.h" +#include "AssemblySettings.hpp" + +using BuildAssemblyStage = SAMOSBOR::workflow::stages::BuildAssemblyStage; + +using Assembly = SAMOSBOR::assembly::ref::Assembly; +using AssemblyGraph = SAMOSBOR::assembly::ref::AssemblyGraph; +using AssemblyBuilder = SAMOSBOR::assembly::ref::AssemblyBuilder; +using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; + +namespace core = SAMOSBOR::core; + +BuildAssemblyStage::BuildAssemblyStage(const AssemblySettings& settings) : + Stage([&settings](const AssemblyGraph& graph) -> core::ResultOr + { + AssemblyBuilder assemblyBuilder; + return assemblyBuilder.Build(graph, settings); + }) +{ +} \ No newline at end of file diff --git a/source/SAMOSBOR/BuildAssemblyStage.h b/source/SAMOSBOR/BuildAssemblyStage.h new file mode 100644 index 0000000..3457cfc --- /dev/null +++ b/source/SAMOSBOR/BuildAssemblyStage.h @@ -0,0 +1,23 @@ +#pragma once +#include "Stage.hpp" + +namespace SAMOSBOR::assembly::ref +{ + class Assembly; + struct AssemblyGraph; + struct AssemblySettings; +} + +namespace SAMOSBOR::workflow::stages +{ + namespace assembly = SAMOSBOR::assembly::ref; + + /// + /// builds assembly - transforms shapes, triangulate, etc + /// + class BuildAssemblyStage : public Stage + { + public: + BuildAssemblyStage(const assembly::AssemblySettings& settings); + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/EmptyTypeT.hpp b/source/SAMOSBOR/EmptyTypeT.hpp new file mode 100644 index 0000000..66a8d17 --- /dev/null +++ b/source/SAMOSBOR/EmptyTypeT.hpp @@ -0,0 +1,11 @@ +#pragma once + +namespace SAMOSBOR::core +{ + struct EmptyTypeT + { + EmptyTypeT() { } + EmptyTypeT(const EmptyTypeT& rhs) { } + EmptyTypeT(EmptyTypeT&& rhs) noexcept { } + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/GltfWriter.cpp b/source/SAMOSBOR/GltfWriter.cpp new file mode 100644 index 0000000..68d205c --- /dev/null +++ b/source/SAMOSBOR/GltfWriter.cpp @@ -0,0 +1,4 @@ +#include "pch.h" +#include "GltfWriter.h" + +using GltfWriter = SAMOSBOR::gltf::ref::GltfWriter; \ No newline at end of file diff --git a/source/SAMOSBOR/GltfWriter.h b/source/SAMOSBOR/GltfWriter.h new file mode 100644 index 0000000..c73f78d --- /dev/null +++ b/source/SAMOSBOR/GltfWriter.h @@ -0,0 +1,9 @@ +#pragma once + +namespace SAMOSBOR::gltf::ref +{ + class GltfWriter + { + + }; +} diff --git a/source/SAMOSBOR/Mesh.hpp b/source/SAMOSBOR/Mesh.hpp new file mode 100644 index 0000000..8ef0f61 --- /dev/null +++ b/source/SAMOSBOR/Mesh.hpp @@ -0,0 +1,26 @@ +#pragma once +#include + +namespace SAMOSBOR::core::occ +{ + /// + /// Mesh data + /// + struct Mesh + { + /// + /// Vertices + /// + std::vector vertices; + + /// + /// Normals + /// + std::vector normals; + + /// + /// Indicies + /// + std::vector indices; + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/Pipeline.hpp b/source/SAMOSBOR/Pipeline.hpp new file mode 100644 index 0000000..fdd0cef --- /dev/null +++ b/source/SAMOSBOR/Pipeline.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +namespace SAMOSBOR::core::pipeline +{ + // const GraphId id(idstr); + // + // Pipeliner::AddAsync(PipelineOptions::READ_STEP); + // Pipeliner::Add(PipelineOptions::BUILD_GRAPH); + // Pipeliner::Add(PipelineOptions::BUILD_ASSEMBLY); + // Pipeliner::ForkAsync(PipelineOptions::EXPORT_STEP, PipelineOptions::EXPORT_GLTF); + // + // Pipeliner::Execute(id, settings); + + +} \ No newline at end of file diff --git a/source/SAMOSBOR/Pipeliner.cpp b/source/SAMOSBOR/Pipeliner.cpp new file mode 100644 index 0000000..1c16b02 --- /dev/null +++ b/source/SAMOSBOR/Pipeliner.cpp @@ -0,0 +1,99 @@ +#include "pch.h" +#include "Pipeliner.h" +#include "Result.hpp" +#include "Assembly.h" +#include "AssemblyGraph.h" +#include "AssemblySettings.hpp" +#include "GraphId.h" +#include "EmptyTypeT.hpp" +#include "StepData.h" + +#include "ReadStepStage.h" +#include "BuildAssemblyGraphStage.h" +#include "BuildAssemblyStage.h" +#include "WriteStepStage.h" +#include "WriteGltfStage.h" + +#include +#include + +using Pipeliner = SAMOSBOR::workflow::Pipeliner; +using PipelineOptions = SAMOSBOR::workflow::PipelineOptions; + +using GraphId = SAMOSBOR::assembly::ref::GraphId; +using Assembly = SAMOSBOR::assembly::ref::Assembly; +using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; + +namespace core = SAMOSBOR::core; +namespace stages = SAMOSBOR::workflow::stages; + +Pipeliner::Pipeliner() +{ + opencascade::handle messenger = Message::DefaultMessenger(); + Message_SequenceOfPrinters printers = Message::DefaultMessenger()->Printers(); + + for (auto it = printers.begin(); it != printers.end(); it++) + { + messenger->RemovePrinter(*it); + } +} + +core::ResultOr Pipeliner::RunAssemblyPipeline(const AssemblySettings& settings) +{ + const GraphId graphId(settings.graphId); + + stages::ReadStepStage readStepStage(settings); + stages::BuildAssemblyGraphStage buildGraphStage(graphId); + stages::BuildAssemblyStage buildAssemblyStage(settings); + + auto basePipeline = readStepStage | buildGraphStage | buildAssemblyStage; + + return basePipeline(graphId); +} + +core::Result Pipeliner::RunExportPipeline(const AssemblySettings& settings, const uint32_t pipelineOptions) +{ + bool hasExportStep = pipelineOptions & PipelineOptions::EXPORT_STEP; + bool hasExportGltf = pipelineOptions & PipelineOptions::EXPORT_GLTF; + + core::ResultOr assemblyPipelineResult = RunAssemblyPipeline(settings); + if (!assemblyPipelineResult.Ok()) + { + return assemblyPipelineResult.Res(); + } + + if (hasExportStep) + { + stages::WriteStepStage writeStepStage(settings); + + auto res = writeStepStage(assemblyPipelineResult.Value()); + if (!res.Ok()) + { + return res.Res(); + } + } + + if (hasExportGltf) + { + stages::WriteGltfStage writeGltfStage(settings); + + auto res = writeGltfStage(assemblyPipelineResult.Value()); + if (!res.Ok()) + { + return res.Res(); + } + } + + return core::Result(core::Result::OK); +} + +template +core::ResultOr Pipeliner::RunConfigurable(const assembly::AssemblySettings& settings, const uint32_t pipelineOptions) +{ + const GraphId graphId(settings.graphId); + + if (pipelineOptions & PipelineOptions::READ_STEP) + { + stages::ReadStepStage readStepStage(settings); + } +} diff --git a/source/SAMOSBOR/Pipeliner.h b/source/SAMOSBOR/Pipeliner.h new file mode 100644 index 0000000..bd61315 --- /dev/null +++ b/source/SAMOSBOR/Pipeliner.h @@ -0,0 +1,41 @@ +#pragma once + +namespace SAMOSBOR::assembly::ref +{ + class Assembly; + struct AssemblySettings; +} + +namespace SAMOSBOR::core +{ + template class ResultOr; + class Result; +} + +namespace SAMOSBOR::workflow +{ + namespace core = SAMOSBOR::core; + namespace assembly = SAMOSBOR::assembly::ref; + + struct PipelineOptions + { + static constexpr uint32_t READ_STEP = 1 << 0; + static constexpr uint32_t BUILD_GRAPH = 1 << 1; + static constexpr uint32_t BUILD_ASSEMBLY = 1 << 2; + + static constexpr uint32_t EXPORT_STEP = 1 << 3; + static constexpr uint32_t EXPORT_GLTF = 1 << 4; + }; + + class Pipeliner + { + public: + Pipeliner(); + + core::ResultOr RunAssemblyPipeline(const assembly::AssemblySettings& settings); + core::Result RunExportPipeline(const assembly::AssemblySettings& settings, const uint32_t pipelineOptions); + + template + core::ResultOr RunConfigurable(const assembly::AssemblySettings& settings, const uint32_t pipelineOptions); + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/ReadStepStage.cpp b/source/SAMOSBOR/ReadStepStage.cpp new file mode 100644 index 0000000..3d5e775 --- /dev/null +++ b/source/SAMOSBOR/ReadStepStage.cpp @@ -0,0 +1,52 @@ +#include "pch.h" +#include "ReadStepStage.h" +#include "StepData.h" +#include "StepReader.h" +#include "AssemblySettings.hpp" +#include "GraphId.h" + +using ReadStepStage = SAMOSBOR::workflow::stages::ReadStepStage; + +using GraphId = SAMOSBOR::assembly::ref::GraphId; +using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; + +using StepData = SAMOSBOR::step::ref::StepData; +using StepReader = SAMOSBOR::step::ref::StepReader; + +namespace fs = std::filesystem; +namespace core = SAMOSBOR::core; + +namespace +{ + fs::path get_step_file_name(fs::path inputPath, const std::string_view& fileId) + { + fs::path path = inputPath / fileId; + return path.string() + ".stp"; + } +} + +ReadStepStage::ReadStepStage(const AssemblySettings& settings) : + Stage, GraphId>([&settings](const GraphId& graphId) -> core::ResultOr> + { + const std::vector& vertices = graphId.Vertices(); + const std::vector& edges = graphId.Edges(); + + std::vector data; + data.reserve(vertices.size()); + + StepReader stepReader; + + for (size_t i = 0; i < vertices.size(); ++i) + { + const GraphId::Vertex& vertex = vertices[i]; + + const fs::path filename = get_step_file_name(settings.dataPath.empty() ? fs::current_path() : settings.dataPath, vertex.fileId); + + ASSIGN_OR_RETURN_T(const StepData step, stepReader.Read(filename), std::vector); + data.push_back(step); + } + + return core::ResultOr>(std::move(data)); + }) +{ +} \ No newline at end of file diff --git a/source/SAMOSBOR/ReadStepStage.h b/source/SAMOSBOR/ReadStepStage.h new file mode 100644 index 0000000..472343c --- /dev/null +++ b/source/SAMOSBOR/ReadStepStage.h @@ -0,0 +1,29 @@ +#pragma once +#include "Stage.hpp" + +namespace SAMOSBOR::assembly::ref +{ + struct GraphId; + struct AssemblySettings; +} + +namespace SAMOSBOR::step::ref +{ + class StepData; +} + +namespace SAMOSBOR::workflow::stages +{ + namespace core = SAMOSBOR::core; + namespace assembly = SAMOSBOR::assembly::ref; + namespace step = SAMOSBOR::step::ref; + + /// + /// Reads data from input STEP files + /// + class ReadStepStage : public Stage, assembly::GraphId> + { + public: + ReadStepStage(const assembly::AssemblySettings& settings); + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/SAMOSBOR.h b/source/SAMOSBOR/SAMOSBOR.h index bac1ad7..85ed94a 100644 --- a/source/SAMOSBOR/SAMOSBOR.h +++ b/source/SAMOSBOR/SAMOSBOR.h @@ -3,6 +3,9 @@ #include "ResultOr.hpp" #include "CoordinateSystem.h" #include "Csw.hpp" +#include "Shape.hpp" +#include "Mesh.hpp" +#include "Triangulation.h" #include "GraphId.h" #include "AssemblyGraph.h" #include "AssemblySettings.hpp" @@ -10,4 +13,5 @@ #include "AssemblyBuilder.h" #include "StepData.h" #include "StepReader.h" -#include "StepWriter.h" \ No newline at end of file +#include "StepWriter.h" +#include "Pipeliner.h" \ No newline at end of file diff --git a/source/SAMOSBOR/SAMOSBOR.vcxproj b/source/SAMOSBOR/SAMOSBOR.vcxproj index c036522..0547cf5 100644 --- a/source/SAMOSBOR/SAMOSBOR.vcxproj +++ b/source/SAMOSBOR/SAMOSBOR.vcxproj @@ -109,11 +109,11 @@ Level3 true - _DEBUG;_LIB;_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) + _DEBUG;_LIB;_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS;_HAS_DEPRECATED_RESULT_OF;%(PreprocessorDefinitions) true Use pch.h - C:\boost_1_79_0;$(SolutionDir)..\thirdparty\opencascade\inc;$(SolutionDir)..\thirdparty\slot_map;$(SolutionDir)..\thirdparty\googletest\inc;%(AdditionalIncludeDirectories) + C:\boost_1_79_0;$(SolutionDir)..\thirdparty\opencascade\inc;$(SolutionDir)..\thirdparty\slot_map;$(SolutionDir)..\thirdparty\pipeline\include;$(SolutionDir)..\thirdparty\googletest\inc;%(AdditionalIncludeDirectories) stdcpp20 MultiThreadedDebug @@ -124,7 +124,7 @@ $(SolutionDir)..\thirdparty\opencascade\lib;%(AdditionalLibraryDirectories) - TKernel.lib;TKXSBase.lib;TKSTEPBase.lib;TKSTEP.lib;TKG3d.lib;TKMath.lib;TKTopAlgo.lib;TKBRep.lib;TKShHealing.lib;%(AdditionalDependencies) + TKernel.lib;TKXSBase.lib;TKSTEPBase.lib;TKSTEP.lib;TKG3d.lib;TKMath.lib;TKTopAlgo.lib;TKBRep.lib;TKGeomAlgo.lib;TKGeomBase.lib;TKMesh.lib;TKMeshVS.lib;%(AdditionalDependencies) /ignore:4006 %(AdditionalOptions) @@ -137,11 +137,11 @@ true true true - NDEBUG;_LIB;_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) + NDEBUG;_LIB;_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS;_HAS_DEPRECATED_RESULT_OF;%(PreprocessorDefinitions) true Use pch.h - C:\boost_1_79_0;$(SolutionDir)..\thirdparty\opencascade\inc;$(SolutionDir)..\thirdparty\slot_map;$(SolutionDir)..\thirdparty\googletest\inc;%(AdditionalIncludeDirectories) + C:\boost_1_79_0;$(SolutionDir)..\thirdparty\opencascade\inc;$(SolutionDir)..\thirdparty\slot_map;$(SolutionDir)..\thirdparty\pipeline\include;$(SolutionDir)..\thirdparty\googletest\inc;%(AdditionalIncludeDirectories) MultiThreaded stdcpp20 AnySuitable @@ -159,7 +159,7 @@ $(SolutionDir)..\thirdparty\opencascade\lib;%(AdditionalLibraryDirectories) - TKernel.lib;TKXSBase.lib;TKSTEPBase.lib;TKSTEP.lib;TKG3d.lib;TKMath.lib;TKTopAlgo.lib;TKBRep.lib;TKShHealing.lib;%(AdditionalDependencies) + TKernel.lib;TKXSBase.lib;TKSTEPBase.lib;TKSTEP.lib;TKG3d.lib;TKMath.lib;TKTopAlgo.lib;TKBRep.lib;TKGeomAlgo.lib;TKGeomBase.lib;TKMesh.lib;TKMeshVS.lib;%(AdditionalDependencies) /ignore:4006 %(AdditionalOptions) @@ -167,31 +167,48 @@ + + + + + + + + + + + + + + + + + Create @@ -199,11 +216,16 @@ Create Create + + + + + diff --git a/source/SAMOSBOR/SAMOSBOR.vcxproj.filters b/source/SAMOSBOR/SAMOSBOR.vcxproj.filters index c048cb4..139d4cf 100644 --- a/source/SAMOSBOR/SAMOSBOR.vcxproj.filters +++ b/source/SAMOSBOR/SAMOSBOR.vcxproj.filters @@ -19,6 +19,18 @@ {fb118bdd-cf72-4080-9191-134be998643b} + + {e8d7c5f2-3f84-4984-8f60-033a50e9ce6d} + + + {5f52209f-7213-4d38-bd91-7d1431df7e83} + + + {cb6fdeb2-c68d-47c1-92a4-89634b90a671} + + + {ee789ad8-36fc-453b-8a03-beaa5e56f5dd} + @@ -70,12 +82,51 @@ assembly - + + gltf + + + core\occ + + core\occ core + + core\occ + + + workflow + + + assembly + + + workflow + + + workflow\stages + + + workflow\stages + + + workflow\stages + + + workflow\stages + + + workflow\stages + + + core + + + core\pipeline + @@ -111,5 +162,32 @@ assembly + + gltf + + + core\occ + + + workflow + + + assembly + + + workflow\stages + + + workflow\stages + + + workflow\stages + + + workflow\stages + + + workflow\stages + \ No newline at end of file diff --git a/source/SAMOSBOR/Stage.hpp b/source/SAMOSBOR/Stage.hpp new file mode 100644 index 0000000..bf27cc6 --- /dev/null +++ b/source/SAMOSBOR/Stage.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +#include "ResultOr.hpp" + +namespace SAMOSBOR::workflow +{ + namespace core = SAMOSBOR::core; + + template + using stage_fn_internal = std::function(core::ResultOr)>; + + template + using stage_fn = std::function(Arg)>; + + template + class Stage : public pipeline::fn> + { + public: + Stage(stage_fn stageFn) : + pipeline::fn>([&stageFn](const core::ResultOr& arg) -> core::ResultOr + { + return arg.Ok() ? stageFn(arg.Value()) : core::ResultOr(arg.Res()); + }) + { + } + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/StepReader.cpp b/source/SAMOSBOR/StepReader.cpp index 54d9007..7f178cb 100644 --- a/source/SAMOSBOR/StepReader.cpp +++ b/source/SAMOSBOR/StepReader.cpp @@ -11,10 +11,6 @@ using StepReader = SAMOSBOR::step::ref::StepReader; StepReader::StepReader() { Interface_Static::SetIVal("read.step.root.transformation", 0); - - //// disable parametric curves - Interface_Static::SetIVal("write.surfacecurve.mode", 0); - Interface_Static::SetIVal("write.step.assembly", 1); } StepReader::~StepReader() @@ -30,7 +26,7 @@ core::ResultOr StepReader::Read(const std::filesystem::path& filepath, if (status != IFSelect_RetDone) { - return core::ResultOr(core::Result(core::Result::StatusCode::ERROR)); + return core::ResultOr(core::Result(core::Result::ERROR)); } reader.TransferRoots(); diff --git a/source/SAMOSBOR/Triangulation.cpp b/source/SAMOSBOR/Triangulation.cpp new file mode 100644 index 0000000..fdf3f0a --- /dev/null +++ b/source/SAMOSBOR/Triangulation.cpp @@ -0,0 +1,348 @@ +#include "pch.h" +#include "Triangulation.h" +#include "Mesh.hpp" + +using Shape = SAMOSBOR::core::occ::Shape; +using Mesh = SAMOSBOR::core::occ::Mesh; +using Triangulation = SAMOSBOR::core::occ::Triangulation; + +namespace +{ + typedef opencascade::handle PolyTriangulationPtr; + + struct FacesData + { + std::vector vertices; + std::vector triangles; + std::vector normals; + + std::vector orientations; + std::vector locations; + + Standard_Integer verticesCount = 0; + Standard_Integer trianglesCount = 0; + }; + + /// + /// Calculates deflection coefficient + /// + Standard_Real calculate_deflection(const Shape& shape, double coefficient) + { + Bnd_Box total; + BRepBndLib::Add(shape, total); + + Standard_Real xMin, yMin, zMin, xMax, yMax, zMax; + total.Get(xMin, yMin, zMin, xMax, yMax, zMax); + + return std::max(xMax - xMin, std::max(yMax - yMin, zMax - zMin)) * coefficient; + } + + /// + /// Calculates face normals + /// + void calculate_normals(const TopoDS_Face& face, const PolyTriangulationPtr& faceTri, const TColgp_Array1OfPnt& vertices, const Poly_Array1OfTriangle triangles, TColgp_Array1OfDir* outNormals) + { + if (faceTri->HasNormals()) + { + // normals pre-computed in triangulation structure + // + + for (Standard_Integer vertexIdx = vertices.Lower(); vertexIdx <= vertices.Upper(); ++vertexIdx) + { + outNormals->ChangeValue(vertexIdx) = faceTri->Normal(vertexIdx); + } + + if (face.Orientation() != TopAbs_REVERSED) + return; + + for (Standard_Integer vertexIdx = vertices.Lower(); vertexIdx <= vertices.Upper(); ++vertexIdx) + { + outNormals->ChangeValue(vertexIdx).Reverse(); + } + + return; + } + + const TopoDS_Face zeroFace = TopoDS::Face(face.Located(TopLoc_Location())); + const Handle(Geom_Surface) surface = BRep_Tool::Surface(zeroFace); + + const Poly_ArrayOfUVNodes* nodesUv = faceTri->HasUVNodes() && !surface.IsNull() ? &faceTri->InternalUVNodes() : nullptr; + Standard_Integer aTri[3] = { 0 }; + + faceTri->AddNormals(); + + for (Standard_Integer vertexIdx = vertices.Lower(); vertexIdx <= vertices.Upper(); ++vertexIdx) + { + if (nodesUv == nullptr || GeomLib::NormEstim(surface, nodesUv->Value(vertexIdx - 1), Precision::Confusion(), outNormals->ChangeValue(vertexIdx)) > 1) + { + gp_XYZ eqPlan(0.0, 0.0, 0.0); + + Poly_Connect polyConnect(faceTri); + + for (polyConnect.Initialize(vertexIdx); polyConnect.More(); polyConnect.Next()) + { + triangles(polyConnect.Value()).Get(aTri[0], aTri[1], aTri[2]); + + const gp_XYZ v1(vertices(aTri[1]).Coord() - vertices(aTri[0]).Coord()); + const gp_XYZ v2(vertices(aTri[2]).Coord() - vertices(aTri[1]).Coord()); + + const gp_XYZ vv = v1 ^ v2; + const Standard_Real modulus = vv.Modulus(); + + if (modulus >= Precision::Confusion()) + eqPlan += vv / modulus; + } + + const Standard_Real aModMax = eqPlan.Modulus(); + outNormals->ChangeValue(vertexIdx) = (aModMax > Precision::Confusion()) ? gp_Dir(eqPlan) : gp::DZ(); + } + + faceTri->SetNormal(vertexIdx, outNormals->Value(vertexIdx)); + } + + if (face.Orientation() != TopAbs_REVERSED) + return; + + for (Standard_Integer vertexIdx = vertices.Lower(); vertexIdx <= vertices.Upper(); ++vertexIdx) + { + outNormals->ChangeValue(vertexIdx).Reverse(); + } + } + + /// + /// Triangulates faces of shape and store per face information for futher use + /// + FacesData get_faces_data(const Shape& shape, double coefficient, bool parallelMeshGeneration) + { + FacesData facesData; + + Standard_Real deflection = calculate_deflection(shape, coefficient); + if (deflection < Precision::Confusion()) + return facesData; + + BRepMesh_IncrementalMesh mesher(shape, deflection, Standard_False, 0.5, parallelMeshGeneration); + + Standard_Integer nodesCount = 0, trianglesCount = 0; + Standard_Integer nodeOffset = 0, triangleOffet = 0; + + for (TopExp_Explorer expl(shape, TopAbs_FACE); expl.More(); expl.Next()) + { + const TopoDS_Face& face = TopoDS::Face(expl.Current()); + + TopLoc_Location faceLocation; + PolyTriangulationPtr faceTriangulation = BRep_Tool::Triangulation(face, faceLocation); + + if (!faceTriangulation.IsNull()) + { + TColgp_Array1OfPnt nodes(1, faceTriangulation->NbNodes()); + for (int i = 1; i <= faceTriangulation->NbNodes(); i++) + { + nodes[i] = faceTriangulation->Node(i); + } + + Poly_Array1OfTriangle triangles(1, faceTriangulation->NbTriangles()); + for (int i = 1; i <= faceTriangulation->NbTriangles(); i++) + { + triangles[i] = faceTriangulation->Triangle(i); + } + + TColgp_Array1OfDir normals(nodes.Lower(), nodes.Upper()); + calculate_normals(face, faceTriangulation, nodes, triangles, &normals); + + facesData.vertices.push_back(nodes); + facesData.triangles.push_back(triangles); + facesData.normals.push_back(normals); + + facesData.orientations.push_back(face.Orientation()); + facesData.locations.push_back(faceLocation); + + nodesCount += faceTriangulation->NbNodes(); + trianglesCount += faceTriangulation->NbTriangles(); + } + } + + facesData.verticesCount = nodesCount; + facesData.trianglesCount = trianglesCount; + + return facesData; + } + + /// + /// Triangulates shape with given settings + /// + PolyTriangulationPtr triangulate_shape(const Shape& shape, double coefficient, bool parallelMeshGeneration) + { + const FacesData facesData = get_faces_data(shape, coefficient, parallelMeshGeneration); + + PolyTriangulationPtr meshTriangulation = new Poly_Triangulation(facesData.verticesCount, facesData.trianglesCount, Standard_False); + + Standard_Integer vertexOffset = 0; + Standard_Integer triangleOffset = 0; + + for (size_t i = 0; i < facesData.triangles.size(); ++i) + { + const TColgp_Array1OfPnt& vertices = facesData.vertices[i]; + const TColgp_Array1OfDir& normals = facesData.normals[i]; + const TopLoc_Location& location = facesData.locations[i]; + const TopAbs_Orientation& orientation = facesData.orientations[i]; + const Poly_Array1OfTriangle& triangles = facesData.triangles[i]; + + const gp_Trsf& transform = location.Transformation(); + + meshTriangulation->AddNormals(); + + for (Standard_Integer vertexIdx = vertices.Lower(); vertexIdx <= vertices.Upper(); ++vertexIdx) + { + gp_Pnt vertex = vertices(vertexIdx); + gp_Vec normal = normals(vertexIdx).XYZ(); + + Standard_Integer index = vertexIdx + vertexOffset; + + vertex.Transform(transform); + normal.Transform(transform); + + meshTriangulation->SetNode(index, vertex); + meshTriangulation->SetNormal(index, normal); + } + + for (Standard_Integer triangleIdx = triangles.Lower(); triangleIdx <= triangles.Upper(); ++triangleIdx) + { + Poly_Triangle triangle = triangles(triangleIdx); + + Standard_Integer anId[3]; + triangle.Get(anId[0], anId[1], anId[2]); + + if (orientation == TopAbs_REVERSED) + { + Standard_Integer aTmpIdx = anId[1]; + anId[1] = anId[2]; + anId[2] = aTmpIdx; + } + + anId[0] += vertexOffset; + anId[1] += vertexOffset; + anId[2] += vertexOffset; + + triangle.Set(anId[0], anId[1], anId[2]); + + meshTriangulation->SetTriangle(triangleIdx + triangleOffset, triangle); + } + + vertexOffset += vertices.Size(); + triangleOffset += triangles.Size(); + } + + return meshTriangulation; + } + + /// + /// Extracts indicies from triangulation + /// + std::vector convert_indicies(const PolyTriangulationPtr& triangulation) + { + std::vector indices; + + if (triangulation.IsNull()) + return indices; + + const int numTriangles = triangulation->NbTriangles(); + indices.reserve(numTriangles); + + for (int i = 1; i <= numTriangles; ++i) + { + int v1, v2, v3; + + triangulation->Triangle(i).Get(v1, v2, v3); + + indices.push_back(static_cast(v1 - 1)); + indices.push_back(static_cast(v2 - 1)); + indices.push_back(static_cast(v3 - 1)); + } + + return indices; + } + + /// + /// Extracts normals from triangulation + /// + std::vector convert_normals(const PolyTriangulationPtr& triangulation) + { + std::vector normals; + + if (triangulation.IsNull()) + return normals; + + const int numVertices = triangulation->NbNodes(); + normals.reserve(numVertices); + + for (int i = 1; i <= numVertices; ++i) + { + gp_Dir normal = triangulation->Normal(i); + + normals.push_back(static_cast(normal.X())); + normals.push_back(static_cast(normal.Y())); + normals.push_back(static_cast(normal.Z())); + } + + return normals; + } + + /// + /// Extracts vertices from triangulation + /// + std::vector convert_vertices(const PolyTriangulationPtr& triangulation) + { + std::vector vertices; + + if (triangulation.IsNull()) + return vertices; + + const int numVertices = triangulation->NbNodes(); + vertices.reserve(numVertices); + + for (int i = 1; i <= numVertices; ++i) + { + const gp_Pnt& vertex = triangulation->Node(i); + + vertices.push_back(static_cast(vertex.X())); + vertices.push_back(static_cast(vertex.Y())); + vertices.push_back(static_cast(vertex.Z())); + } + + return vertices; + } +} + +Triangulation::Triangulation(const Shape& shape, double coefficient, bool parallelMeshGeneration) : _shapeTriangulation(triangulate_shape(shape, coefficient, parallelMeshGeneration)) +{ +} + +Triangulation::~Triangulation() +{ + if (!_shapeTriangulation.IsNull()) + { + _shapeTriangulation.Nullify(); + } +} + +uint32_t Triangulation::GetTrianglesCount() const +{ + return _shapeTriangulation->NbTriangles(); +} + +uint32_t Triangulation::GetVerticesCount() const +{ + return _shapeTriangulation->NbNodes(); +} + +Mesh Triangulation::GetMesh() +{ + Mesh mesh + { + .vertices = convert_vertices(_shapeTriangulation), + .normals = convert_normals(_shapeTriangulation), + .indices = convert_indicies(_shapeTriangulation) + }; + + return mesh; +} \ No newline at end of file diff --git a/source/SAMOSBOR/Triangulation.h b/source/SAMOSBOR/Triangulation.h new file mode 100644 index 0000000..059219e --- /dev/null +++ b/source/SAMOSBOR/Triangulation.h @@ -0,0 +1,27 @@ +#pragma once +#include +#include "Shape.hpp" + +class Poly_Triangulation; + +namespace SAMOSBOR::core::occ +{ + struct Mesh; + + /// + /// Triangulates given shape + /// + class Triangulation + { + public: + Triangulation(const Shape& shape, double coefficient, bool parallelMeshGeneration); + ~Triangulation(); + + uint32_t GetTrianglesCount() const; + uint32_t GetVerticesCount() const; + + Mesh GetMesh(); + private: + opencascade::handle _shapeTriangulation; + }; +} diff --git a/source/SAMOSBOR/WriteGltfStage.cpp b/source/SAMOSBOR/WriteGltfStage.cpp new file mode 100644 index 0000000..b4cd821 --- /dev/null +++ b/source/SAMOSBOR/WriteGltfStage.cpp @@ -0,0 +1,22 @@ +#include "pch.h" +#include "WriteGltfStage.h" + +#include "Assembly.h" +#include "AssemblySettings.hpp" + +#include "EmptyTypeT.hpp" + +using WriteGltfStage = SAMOSBOR::workflow::stages::WriteGltfStage; + +using Assembly = SAMOSBOR::assembly::ref::Assembly; +using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; + +namespace core = SAMOSBOR::core; + +WriteGltfStage::WriteGltfStage(const AssemblySettings& settings): + Stage([&settings](const Assembly& assembly) -> core::ResultOr + { + return core::ResultOr(core::Result(core::Result::OK)); + }) +{ +} \ No newline at end of file diff --git a/source/SAMOSBOR/WriteGltfStage.h b/source/SAMOSBOR/WriteGltfStage.h new file mode 100644 index 0000000..0c4e00b --- /dev/null +++ b/source/SAMOSBOR/WriteGltfStage.h @@ -0,0 +1,28 @@ +#pragma once +#include "Stage.hpp" + +namespace SAMOSBOR::core +{ + struct EmptyTypeT; +} + +namespace SAMOSBOR::assembly::ref +{ + class Assembly; + struct AssemblySettings; +} + +namespace SAMOSBOR::workflow::stages +{ + namespace core = SAMOSBOR::core; + namespace assembly = SAMOSBOR::assembly::ref; + + /// + /// Exports tool assembly to glTF + /// + class WriteGltfStage : public Stage + { + public: + WriteGltfStage(const assembly::AssemblySettings& settings); + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/WriteStepStage.cpp b/source/SAMOSBOR/WriteStepStage.cpp new file mode 100644 index 0000000..9e31852 --- /dev/null +++ b/source/SAMOSBOR/WriteStepStage.cpp @@ -0,0 +1,29 @@ +#include "pch.h" +#include "WriteStepStage.h" + +#include "Assembly.h" +#include "AssemblySettings.hpp" +#include "StepWriter.h" + +#include "EmptyTypeT.hpp" +#include "Result.hpp" + +using WriteStepStage = SAMOSBOR::workflow::stages::WriteStepStage; + +using Assembly = SAMOSBOR::assembly::ref::Assembly; +using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; + +using StepWriter = SAMOSBOR::step::ref::StepWriter; + +namespace core = SAMOSBOR::core; + +WriteStepStage::WriteStepStage(const AssemblySettings& settings) : + Stage([&settings](const Assembly& assembly) -> core::ResultOr + { + StepWriter stepWriter; + auto result = stepWriter.Write(settings.outputPath, assembly.GetShapes()); + + return core::ResultOr(result); + }) +{ +} \ No newline at end of file diff --git a/source/SAMOSBOR/WriteStepStage.h b/source/SAMOSBOR/WriteStepStage.h new file mode 100644 index 0000000..a70ffea --- /dev/null +++ b/source/SAMOSBOR/WriteStepStage.h @@ -0,0 +1,28 @@ +#pragma once +#include "Stage.hpp" + +namespace SAMOSBOR::core +{ + struct EmptyTypeT; +} + +namespace SAMOSBOR::assembly::ref +{ + class Assembly; + struct AssemblySettings; +} + +namespace SAMOSBOR::workflow::stages +{ + namespace core = SAMOSBOR::core; + namespace assembly = SAMOSBOR::assembly::ref; + + /// + /// Exports tool assembly to STEP + /// + class WriteStepStage : public Stage + { + public: + WriteStepStage(const assembly::AssemblySettings& settings); + }; +} \ No newline at end of file diff --git a/source/SAMOSBOR/pch.h b/source/SAMOSBOR/pch.h index 4a3c5a9..78b0012 100644 --- a/source/SAMOSBOR/pch.h +++ b/source/SAMOSBOR/pch.h @@ -23,11 +23,12 @@ #include #include #include -#include -#include #include #include #include +#include +#include +#include #include #include #include @@ -39,6 +40,21 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include #include #include diff --git a/source/SAMOSBORbench/AssemblyBenchmark.cpp b/source/SAMOSBORbench/AssemblyBenchmark.cpp index 46bea51..f7ac4fb 100644 --- a/source/SAMOSBORbench/AssemblyBenchmark.cpp +++ b/source/SAMOSBORbench/AssemblyBenchmark.cpp @@ -2,12 +2,11 @@ #include namespace fs = std::filesystem; -namespace core = SAMOSBOR::core; -namespace assembly = SAMOSBOR::assembly::ref; -using AssemblySettings = assembly::AssemblySettings; -using AssemblyGraphSettings = assembly::AssemblyGraphSettings; -using AssemblyBuilder = assembly::AssemblyBuilder; +using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; + +using Pipeliner = SAMOSBOR::workflow::Pipeliner; +using PipelineOptions = SAMOSBOR::workflow::PipelineOptions; #define USE_ABSOLUTE @@ -54,19 +53,18 @@ void AssemblyCreation_Ref(benchmark::State& state, Args&&... args) AssemblySettings settings { + .graphId = graphId, .dataPath = dataPath, .outputPath = outputPath, - .graphSettings = AssemblyGraphSettings - { - .extensionLength = 0 - } + .extensionLength = 0.0f, + .triangulationCoefficient = 0.3 }; - AssemblyBuilder builder; + Pipeliner pipeliner; for (auto _ : state) { - benchmark::DoNotOptimize(builder.Build(graphId, settings)); + benchmark::DoNotOptimize(pipeliner.RunExportPipeline(settings, PipelineOptions::EXPORT_STEP); } } diff --git a/source/SAMOSBORcmd/main.cpp b/source/SAMOSBORcmd/main.cpp index b0cb3d8..f1963d0 100644 --- a/source/SAMOSBORcmd/main.cpp +++ b/source/SAMOSBORcmd/main.cpp @@ -3,14 +3,16 @@ namespace fs = std::filesystem; using ArgumentParser = argparse::ArgumentParser; -using AssemblyBuilder = SAMOSBOR::assembly::ref::AssemblyBuilder; + using AssemblySettings = SAMOSBOR::assembly::ref::AssemblySettings; -using AssemblyGraphSettings = SAMOSBOR::assembly::ref::AssemblyGraphSettings; + +using Pipeliner = SAMOSBOR::workflow::Pipeliner; +using PipelineOptions = SAMOSBOR::workflow::PipelineOptions; using Result = SAMOSBOR::core::Result; // Usage: -// SAMOSBORcmd.exe --id 15107_0h.20_1t#0+1 --i data/tool3 --o assembly.stp --l 40 +// SAMOSBORcmd.exe --id 15107_0h.20_1t#0+1 --i data/tool3 --o assembly_out --l 40 --gltf --step int main(int argc, char* argv[]) { @@ -18,26 +20,40 @@ int main(int argc, char* argv[]) program.add_description("Command-line tool to create tool assembly STEP model"); - program.add_argument("--id").help("assembly graph id string").required(); - program.add_argument("--i").help("path with input STEP files").required(); - program.add_argument("--o").help("output tool assembly file").required(); + program.add_argument("--id").help("assembly graph id").required(); + program.add_argument("--i").help("input path").required(); + program.add_argument("--o").help("output path").required(); program.add_argument("--l").help("extension length").default_value(0).scan<'i', int>(); + program.add_argument("--trc").help("triangulation coefficient").default_value(0.33).scan<'g', double>(); + program.add_argument("--gltf").help("output tool assembly as glTF").default_value(false).implicit_value(true); + program.add_argument("--step").help("output tool assembly as STEP").default_value(false).implicit_value(true); program.add_argument("help"); program.parse_args(argc, argv); AssemblySettings settings { + .graphId = program.get("--id"), .dataPath = fs::current_path() / program.get("--i"), .outputPath = fs::current_path() / program.get("--o"), - .graphSettings = AssemblyGraphSettings - { - .extensionLength = program.get("--l") - } + .extensionLength = program.get("--l"), + .triangulationCoefficient = program.get("--trc") }; - AssemblyBuilder assemblyBuilder; - Result result = assemblyBuilder.Build(program.get("--s"), settings); + uint32_t pipelineOptions = 0; + + if (program.get("--step")) + { + pipelineOptions |= PipelineOptions::EXPORT_STEP; + } + + if (program.get("--gltf")) + { + pipelineOptions |= PipelineOptions::EXPORT_GLTF; + } + + Pipeliner pipeliner; + Result result = pipeliner.RunExportPipeline(settings, pipelineOptions); if (!result.Ok()) { diff --git a/source/SAMOSBORtests/AssemblyBuilderTests.cpp b/source/SAMOSBORtests/AssemblyBuilderTests.cpp index 4ab40cc..acb6699 100644 --- a/source/SAMOSBORtests/AssemblyBuilderTests.cpp +++ b/source/SAMOSBORtests/AssemblyBuilderTests.cpp @@ -6,7 +6,6 @@ namespace core = SAMOSBOR::core; namespace assembly = SAMOSBOR::assembly::ref; using AssemblySettings = assembly::AssemblySettings; -using AssemblyGraphSettings = assembly::AssemblyGraphSettings; using AssemblyBuilder = assembly::AssemblyBuilder; class AssemblyBuilderTests : public ::testing::Test @@ -39,18 +38,15 @@ TEST_F(AssemblyBuilderTests, AssemblyTwoNodes) { .dataPath = fs::path("../../../data/tool_3"), .outputPath = outputDirPath / "assembly_3.stp", - .graphSettings = AssemblyGraphSettings - { - .extensionLength = 0 - } + .extensionLength = 0.0f }; AssemblyBuilder builder; - core::Result result = builder.Build(graphId, settings); + auto result = builder.Build(graphId, settings); EXPECT_TRUE(result.Ok()); EXPECT_TRUE(fs::exists(settings.outputPath)); - EXPECT_EQ(573174, fs::file_size(settings.outputPath)); + EXPECT_TRUE(fs::file_size(settings.outputPath) > 0); } TEST_F(AssemblyBuilderTests, AssemblyWithMultipleCsw) @@ -61,16 +57,14 @@ TEST_F(AssemblyBuilderTests, AssemblyWithMultipleCsw) { .dataPath = fs::path("../../../data/tool_5"), .outputPath = outputDirPath / "assembly_5.stp", - .graphSettings = AssemblyGraphSettings - { - .extensionLength = 0 - } + .extensionLength = 0, + .triangulationCoefficient = 1.0 }; AssemblyBuilder builder; - core::Result result = builder.Build(graphId, settings); + auto result = builder.Build(graphId, settings); EXPECT_TRUE(result.Ok()); EXPECT_TRUE(fs::exists(settings.outputPath)); - EXPECT_EQ(1430005, fs::file_size(settings.outputPath)); + EXPECT_TRUE(fs::file_size(settings.outputPath) > 0); } \ No newline at end of file diff --git a/source/SAMOSBORtests/AssemblyGraphBuilderTests.cpp b/source/SAMOSBORtests/AssemblyGraphBuilderTests.cpp index 67be090..628dd23 100644 --- a/source/SAMOSBORtests/AssemblyGraphBuilderTests.cpp +++ b/source/SAMOSBORtests/AssemblyGraphBuilderTests.cpp @@ -4,13 +4,15 @@ namespace fs = std::filesystem; namespace core = SAMOSBOR::core; +namespace step = SAMOSBOR::step::ref; namespace assembly = SAMOSBOR::assembly::ref; +using StepData = step::StepData; + using GraphId = assembly::GraphId; using AssemblyGraph = assembly::AssemblyGraph; using AssemblyGraphBuilder = assembly::AssemblyGraphBuilder; using AssemblySettings = assembly::AssemblySettings; -using AssemblyGraphSettings = assembly::AssemblyGraphSettings; TEST(AssemblyGraphBuilderTests, AssemblyTwoNodes) { @@ -18,16 +20,14 @@ TEST(AssemblyGraphBuilderTests, AssemblyTwoNodes) AssemblySettings graphSettings { + .graphId = "15107_0.20_1#0+1", .dataPath = fs::path("../../../data/tool_3"), .outputPath = fs::path(""), - .graphSettings = AssemblyGraphSettings - { - .extensionLength = 0 - } + .extensionLength = 0, }; AssemblyGraphBuilder builder; - core::ResultOr result = builder.Build(graphId, graphSettings); + core::ResultOr result = builder.Build(graphId, data); EXPECT_TRUE(result.Ok()); @@ -46,16 +46,14 @@ TEST(AssemblyGraphBuilderTests, AssemblyWithMultipleCsw) AssemblySettings graphSettings { + .graphId = "avtA_0.Qlwi_1.LoOYVa_2.wX_3.ZfTr_4.wNC_5#0+1.1+2@3235633.1+3@3235634.1+4@49.2+5@3235633", .dataPath = fs::path("../../../data/tool_5"), .outputPath = fs::path(""), - .graphSettings = AssemblyGraphSettings - { - .extensionLength = 0 - } + .extensionLength = 0, }; AssemblyGraphBuilder builder; - core::ResultOr result = builder.Build(graphId, graphSettings); + core::ResultOr result = builder.Build(graphId, ); EXPECT_TRUE(result.Ok()); diff --git a/source/SAMOSBORtests/SAMOSBORtests.vcxproj b/source/SAMOSBORtests/SAMOSBORtests.vcxproj index 9023df5..f85693f 100644 --- a/source/SAMOSBORtests/SAMOSBORtests.vcxproj +++ b/source/SAMOSBORtests/SAMOSBORtests.vcxproj @@ -143,6 +143,7 @@ + diff --git a/source/SAMOSBORtests/SAMOSBORtests.vcxproj.filters b/source/SAMOSBORtests/SAMOSBORtests.vcxproj.filters index 2493957..d5fb411 100644 --- a/source/SAMOSBORtests/SAMOSBORtests.vcxproj.filters +++ b/source/SAMOSBORtests/SAMOSBORtests.vcxproj.filters @@ -5,5 +5,6 @@ + \ No newline at end of file diff --git a/source/SAMOSBORtests/TriangulationTests.cpp b/source/SAMOSBORtests/TriangulationTests.cpp new file mode 100644 index 0000000..72ff155 --- /dev/null +++ b/source/SAMOSBORtests/TriangulationTests.cpp @@ -0,0 +1,35 @@ +#include +#include +#include + +namespace fs = std::filesystem; + +namespace core = SAMOSBOR::core; +namespace step = SAMOSBOR::step::ref; + +using StepData = step::StepData; +using StepReader = step::StepReader; + +using Csw = core::occ::Csw; +using Shape = core::occ::Shape; +using Mesh = core::occ::Mesh; +using CoordinateSystem = core::occ::CoordinateSystem; + +using Triangulation = core::occ::Triangulation; + +TEST(TriangulationTests, TriangulateShapeInStepFile) +{ + std::filesystem::path filePath = fs::path("../../../data/tool_1/3.76045R028V.STP"); + + StepReader reader; + core::ResultOr result = reader.Read(filePath); + + Triangulation tri(result.Value().Shape(), 0.3, true); + + Mesh mesh = tri.GetMesh(); + + EXPECT_EQ(1725, tri.GetTrianglesCount()); + EXPECT_EQ(1900, tri.GetVerticesCount()); + + EXPECT_EQ(mesh.vertices.size(), 3 * tri.GetVerticesCount()); +} \ No newline at end of file