diff --git a/data/examples/qet_panel_assembly/README.md b/data/examples/qet_panel_assembly/README.md index c80692b..002593c 100644 --- a/data/examples/qet_panel_assembly/README.md +++ b/data/examples/qet_panel_assembly/README.md @@ -8,6 +8,7 @@ This directory contains a reusable electrical panel assembly model based on the - `qet_panel_assembly.step`: geometry-only exchange export. - `qet_panel_assembly_report.json`: generated metadata for verification. - `create_qet_panel_assembly.py`: FreeCAD Python generator used to recreate the asset. +- `verify_qet_panel_assembly_contacts.py`: checks the key face-contact constraints after regeneration. ## Geometry @@ -15,11 +16,11 @@ The model is a medium-detail approximation of the full assembly: - Pale gray cabinet / door body. - Thick side edge and recessed door panel. -- Two circular hinge / screw markers. -- Dark right-side mounting plate. +- Dark rear mounting plate centered on the main body's wide face. - Two vertical white perforated connector banks. - Small lower accessory connector modules. -- Yellow wire-frame style guide geometry matching the highlighted wiring envelope in the reference. + +The left thin side face touches the main rectangular body directly. The rear mounting plate is attached to the main body's wide face and centered on it, and the connector banks / lower accessory connectors sit on that mounting plate. Approximate dimensions: @@ -40,4 +41,5 @@ On this Windows workstation, use the registered FreeCAD runtime: $runtime = Get-Content -LiteralPath 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' -Raw | ConvertFrom-Json $env:QET_FREECAD_RUNTIME_JSON = 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' & $runtime.freecad_python 'D:\LightWork3D\data\examples\qet_panel_assembly\create_qet_panel_assembly.py' +& $runtime.freecad_python 'D:\LightWork3D\data\examples\qet_panel_assembly\verify_qet_panel_assembly_contacts.py' ``` diff --git a/data/examples/qet_panel_assembly/create_qet_panel_assembly.py b/data/examples/qet_panel_assembly/create_qet_panel_assembly.py index 9c9e118..ed082b0 100644 --- a/data/examples/qet_panel_assembly/create_qet_panel_assembly.py +++ b/data/examples/qet_panel_assembly/create_qet_panel_assembly.py @@ -84,30 +84,6 @@ def _cylinder_y(doc, name, radius, length, x, y, z, color): return obj -def _wire_segment(doc, name, start, end, thickness, color): - sx, sy, sz = start - ex, ey, ez = end - dx = abs(ex - sx) or thickness - dy = abs(ey - sy) or thickness - dz = abs(ez - sz) or thickness - x = min(sx, ex) - (thickness / 2.0 if ex == sx else 0.0) - y = min(sy, ey) - (thickness / 2.0 if ey == sy else 0.0) - z = min(sz, ez) - (thickness / 2.0 if ez == sz else 0.0) - return _box(doc, name, dx, dy, dz, x, y, z, color, 0) - - -def _wire_rect(doc, prefix, x0, y0, z0, width, height, depth_offset=0.0): - color = (1.0, 0.86, 0.05) - y = y0 + depth_offset - thickness = 0.55 - return [ - _wire_segment(doc, prefix + "_Left", (x0, y, z0), (x0, y, z0 + height), thickness, color), - _wire_segment(doc, prefix + "_Right", (x0 + width, y, z0), (x0 + width, y, z0 + height), thickness, color), - _wire_segment(doc, prefix + "_Top", (x0, y, z0 + height), (x0 + width, y, z0 + height), thickness, color), - _wire_segment(doc, prefix + "_Bottom", (x0, y, z0), (x0 + width, y, z0), thickness, color), - ] - - def _export_step(objects): try: import Import @@ -141,24 +117,11 @@ def _create_connector_bank(doc, prefix, x, y, z, rows, cols, plate_height, plate 1.0, 0.7, px, - y - 0.15, + y + 4.15, pz, dark, ) ) - if col == 0: - objects.append( - _cylinder_y( - doc, - "{0}_Screw_R{1:02d}".format(prefix, row + 1), - 0.55, - 0.8, - x + plate_width + 2.6, - y - 0.15, - pz, - metal, - ) - ) return objects @@ -172,46 +135,37 @@ def main(): dark_panel = (0.22, 0.2, 0.26) white = (0.95, 0.94, 0.96) black = (0.02, 0.02, 0.02) + mount_x = -47.5 + mount_y = 30.0 + component_y = 36.0 # Cabinet / door, roughly matching the large pale box in the reference video. objects.extend( [ _box(doc, "Panel_BackBox", 110.0, 55.0, 180.0, -80.0, -25.0, 0.0, light, 0), - _box(doc, "Panel_LeftDoorFace", 6.0, 60.0, 178.0, -88.0, -28.0, 1.0, edge, 0), + _box(doc, "Panel_LeftDoorFace", 6.0, 60.0, 178.0, -86.0, -28.0, 1.0, edge, 0), _box(doc, "Panel_InnerRecess", 72.0, 1.4, 132.0, -68.0, -29.0, 24.0, (0.9, 0.92, 0.96), 18), _box(doc, "Panel_RecessLeftLine", 1.2, 1.8, 132.0, -68.0, -30.0, 24.0, edge, 0), _box(doc, "Panel_RecessRightLine", 1.2, 1.8, 132.0, 2.8, -30.0, 24.0, edge, 0), _box(doc, "Panel_RecessTopLine", 72.0, 1.8, 1.2, -68.0, -30.0, 155.0, edge, 0), _box(doc, "Panel_RecessBottomLine", 72.0, 1.8, 1.2, -68.0, -30.0, 24.0, edge, 0), - _cylinder_y(doc, "Panel_HingeTop", 2.3, 1.0, -85.0, -31.0, 134.0, (0.18, 0.18, 0.2)), - _cylinder_y(doc, "Panel_HingeBottom", 2.3, 1.0, -85.0, -31.0, 44.0, (0.18, 0.18, 0.2)), - _box(doc, "Panel_RightMountPlate", 45.0, 6.0, 168.0, 30.0, -31.0, 6.0, dark_panel, 0), + _box(doc, "Panel_RightMountPlate", 45.0, 6.0, 168.0, mount_x, mount_y, 6.0, dark_panel, 0), ] ) # Connector banks and small accessory blocks on the right side. - objects.extend(_create_connector_bank(doc, "ConnectorBank_Left", 35.0, -36.0, 44.0, 10, 2, 110.0, 18.0)) - objects.extend(_create_connector_bank(doc, "ConnectorBank_Right", 60.0, -37.0, 50.0, 12, 3, 102.0, 20.0)) - objects.extend( - [ - _box(doc, "ConnectorBank_LeftTopCap", 18.0, 4.2, 12.0, 35.0, -36.2, 154.0, white, 0), - _box(doc, "ConnectorBank_RightTopCap", 20.0, 4.2, 11.0, 60.0, -37.2, 152.0, white, 0), - _box(doc, "AccessoryConnector_LowerLeft", 16.0, 4.0, 34.0, 26.0, -37.0, 18.0, white, 0), - _box(doc, "AccessoryConnector_LowerRight", 14.0, 4.0, 28.0, 70.0, -38.0, 22.0, white, 0), - _cylinder_y(doc, "AccessoryConnector_LowerLeftScrew1", 0.8, 0.7, 34.0, -38.1, 28.0, black), - _cylinder_y(doc, "AccessoryConnector_LowerLeftScrew2", 0.8, 0.7, 34.0, -38.1, 42.0, black), - _cylinder_y(doc, "AccessoryConnector_LowerRightScrew1", 0.8, 0.7, 77.0, -39.1, 30.0, black), - _cylinder_y(doc, "AccessoryConnector_LowerRightScrew2", 0.8, 0.7, 77.0, -39.1, 44.0, black), - ] - ) - - # Yellow annotation-like wire frames from the source video. - objects.extend(_wire_rect(doc, "WireFrame_LeftBank", 32.0, -41.0, 34.0, 27.0, 130.0)) - objects.extend(_wire_rect(doc, "WireFrame_RightBank", 56.0, -42.0, 38.0, 33.0, 126.0, -1.2)) + objects.extend(_create_connector_bank(doc, "ConnectorBank_Left", mount_x + 5.0, component_y, 44.0, 10, 2, 110.0, 18.0)) + objects.extend(_create_connector_bank(doc, "ConnectorBank_Right", mount_x + 30.0, component_y, 50.0, 12, 3, 102.0, 20.0)) objects.extend( [ - _wire_segment(doc, "WireFrame_TopBridge", (45.0, -42.0, 158.0), (88.0, -42.0, 158.0), 0.55, (1.0, 0.86, 0.05)), - _wire_segment(doc, "WireFrame_BottomBridge", (42.0, -42.0, 34.0), (88.0, -42.0, 34.0), 0.55, (1.0, 0.86, 0.05)), + _box(doc, "ConnectorBank_LeftTopCap", 18.0, 4.2, 12.0, mount_x + 5.0, component_y, 154.0, white, 0), + _box(doc, "ConnectorBank_RightTopCap", 20.0, 4.2, 11.0, mount_x + 30.0, component_y, 152.0, white, 0), + _box(doc, "AccessoryConnector_LowerLeft", 16.0, 4.0, 34.0, mount_x - 4.0, component_y, 18.0, white, 0), + _box(doc, "AccessoryConnector_LowerRight", 14.0, 4.0, 28.0, mount_x + 36.0, component_y, 22.0, white, 0), + _cylinder_y(doc, "AccessoryConnector_LowerLeftScrew1", 0.8, 0.7, mount_x + 4.0, component_y + 4.1, 28.0, black), + _cylinder_y(doc, "AccessoryConnector_LowerLeftScrew2", 0.8, 0.7, mount_x + 4.0, component_y + 4.1, 42.0, black), + _cylinder_y(doc, "AccessoryConnector_LowerRightScrew1", 0.8, 0.7, mount_x + 43.0, component_y + 4.1, 30.0, black), + _cylinder_y(doc, "AccessoryConnector_LowerRightScrew2", 0.8, 0.7, mount_x + 43.0, component_y + 4.1, 44.0, black), ] ) diff --git a/data/examples/qet_panel_assembly/qet_panel_assembly.FCStd b/data/examples/qet_panel_assembly/qet_panel_assembly.FCStd index 81d705b..78cfdc0 100644 Binary files a/data/examples/qet_panel_assembly/qet_panel_assembly.FCStd and b/data/examples/qet_panel_assembly/qet_panel_assembly.FCStd differ diff --git a/data/examples/qet_panel_assembly/qet_panel_assembly.step b/data/examples/qet_panel_assembly/qet_panel_assembly.step index c001f80..c61702d 100644 --- a/data/examples/qet_panel_assembly/qet_panel_assembly.step +++ b/data/examples/qet_panel_assembly/qet_panel_assembly.step @@ -1,7 +1,7 @@ ISO-10303-21; HEADER; FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); -FILE_NAME('Open CASCADE Shape Model','2026-05-27T17:40:05',(''),(''), +FILE_NAME('Open CASCADE Shape Model','2026-06-17T11:37:15',(''),(''), 'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); ENDSEC; @@ -23,9 +23,7 @@ DATA; #167,#171,#175,#179,#183,#187,#191,#195,#199,#203,#207,#211,#215, #219,#223,#227,#231,#235,#239,#243,#247,#251,#255,#259,#263,#267, #271,#275,#279,#283,#287,#291,#295,#299,#303,#307,#311,#315,#319, - #323,#327,#331,#335,#339,#343,#347,#351,#355,#359,#363,#367,#371, - #375,#379,#383,#387,#391,#395,#399,#403,#407,#411,#415,#419,#423, - #427,#431,#435,#439,#443,#447,#451,#455,#459),#463); + #323),#327); #11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); #12 = CARTESIAN_POINT('',(0.,0.,0.)); #13 = DIRECTION('',(0.,0.,1.)); @@ -342,11939 +340,8073 @@ DATA; #324 = CARTESIAN_POINT('',(0.,0.,0.)); #325 = DIRECTION('',(0.,0.,1.)); #326 = DIRECTION('',(1.,0.,0.)); -#327 = AXIS2_PLACEMENT_3D('',#328,#329,#330); -#328 = CARTESIAN_POINT('',(0.,0.,0.)); -#329 = DIRECTION('',(0.,0.,1.)); -#330 = DIRECTION('',(1.,0.,0.)); -#331 = AXIS2_PLACEMENT_3D('',#332,#333,#334); -#332 = CARTESIAN_POINT('',(0.,0.,0.)); -#333 = DIRECTION('',(0.,0.,1.)); -#334 = DIRECTION('',(1.,0.,0.)); -#335 = AXIS2_PLACEMENT_3D('',#336,#337,#338); -#336 = CARTESIAN_POINT('',(0.,0.,0.)); -#337 = DIRECTION('',(0.,0.,1.)); -#338 = DIRECTION('',(1.,0.,0.)); -#339 = AXIS2_PLACEMENT_3D('',#340,#341,#342); -#340 = CARTESIAN_POINT('',(0.,0.,0.)); -#341 = DIRECTION('',(0.,0.,1.)); -#342 = DIRECTION('',(1.,0.,0.)); -#343 = AXIS2_PLACEMENT_3D('',#344,#345,#346); -#344 = CARTESIAN_POINT('',(0.,0.,0.)); -#345 = DIRECTION('',(0.,0.,1.)); -#346 = DIRECTION('',(1.,0.,0.)); -#347 = AXIS2_PLACEMENT_3D('',#348,#349,#350); -#348 = CARTESIAN_POINT('',(0.,0.,0.)); -#349 = DIRECTION('',(0.,0.,1.)); -#350 = DIRECTION('',(1.,0.,0.)); -#351 = AXIS2_PLACEMENT_3D('',#352,#353,#354); -#352 = CARTESIAN_POINT('',(0.,0.,0.)); -#353 = DIRECTION('',(0.,0.,1.)); -#354 = DIRECTION('',(1.,0.,0.)); -#355 = AXIS2_PLACEMENT_3D('',#356,#357,#358); -#356 = CARTESIAN_POINT('',(0.,0.,0.)); -#357 = DIRECTION('',(0.,0.,1.)); -#358 = DIRECTION('',(1.,0.,0.)); -#359 = AXIS2_PLACEMENT_3D('',#360,#361,#362); -#360 = CARTESIAN_POINT('',(0.,0.,0.)); -#361 = DIRECTION('',(0.,0.,1.)); -#362 = DIRECTION('',(1.,0.,0.)); -#363 = AXIS2_PLACEMENT_3D('',#364,#365,#366); -#364 = CARTESIAN_POINT('',(0.,0.,0.)); -#365 = DIRECTION('',(0.,0.,1.)); -#366 = DIRECTION('',(1.,0.,0.)); -#367 = AXIS2_PLACEMENT_3D('',#368,#369,#370); -#368 = CARTESIAN_POINT('',(0.,0.,0.)); -#369 = DIRECTION('',(0.,0.,1.)); -#370 = DIRECTION('',(1.,0.,0.)); -#371 = AXIS2_PLACEMENT_3D('',#372,#373,#374); -#372 = CARTESIAN_POINT('',(0.,0.,0.)); -#373 = DIRECTION('',(0.,0.,1.)); -#374 = DIRECTION('',(1.,0.,0.)); -#375 = AXIS2_PLACEMENT_3D('',#376,#377,#378); -#376 = CARTESIAN_POINT('',(0.,0.,0.)); -#377 = DIRECTION('',(0.,0.,1.)); -#378 = DIRECTION('',(1.,0.,0.)); +#327 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#331)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#328,#329,#330)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#328 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#329 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#330 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#331 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#328, + 'distance_accuracy_value','confusion accuracy'); +#332 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +#333 = SHAPE_DEFINITION_REPRESENTATION(#334,#340); +#334 = PRODUCT_DEFINITION_SHAPE('','',#335); +#335 = PRODUCT_DEFINITION('design','',#336,#339); +#336 = PRODUCT_DEFINITION_FORMATION('','',#337); +#337 = PRODUCT('Panel_BackBox','Panel_BackBox','',(#338)); +#338 = PRODUCT_CONTEXT('',#2,'mechanical'); +#339 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#340 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#341),#491); +#341 = MANIFOLD_SOLID_BREP('',#342); +#342 = CLOSED_SHELL('',(#343,#383,#423,#445,#467,#479)); +#343 = ADVANCED_FACE('',(#344),#378,.F.); +#344 = FACE_BOUND('',#345,.F.); +#345 = EDGE_LOOP('',(#346,#356,#364,#372)); +#346 = ORIENTED_EDGE('',*,*,#347,.F.); +#347 = EDGE_CURVE('',#348,#350,#352,.T.); +#348 = VERTEX_POINT('',#349); +#349 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#350 = VERTEX_POINT('',#351); +#351 = CARTESIAN_POINT('',(-80.,-25.,180.)); +#352 = LINE('',#353,#354); +#353 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#354 = VECTOR('',#355,1.); +#355 = DIRECTION('',(0.,0.,1.)); +#356 = ORIENTED_EDGE('',*,*,#357,.T.); +#357 = EDGE_CURVE('',#348,#358,#360,.T.); +#358 = VERTEX_POINT('',#359); +#359 = CARTESIAN_POINT('',(-80.,30.,0.)); +#360 = LINE('',#361,#362); +#361 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#362 = VECTOR('',#363,1.); +#363 = DIRECTION('',(-0.,1.,0.)); +#364 = ORIENTED_EDGE('',*,*,#365,.T.); +#365 = EDGE_CURVE('',#358,#366,#368,.T.); +#366 = VERTEX_POINT('',#367); +#367 = CARTESIAN_POINT('',(-80.,30.,180.)); +#368 = LINE('',#369,#370); +#369 = CARTESIAN_POINT('',(-80.,30.,0.)); +#370 = VECTOR('',#371,1.); +#371 = DIRECTION('',(0.,0.,1.)); +#372 = ORIENTED_EDGE('',*,*,#373,.F.); +#373 = EDGE_CURVE('',#350,#366,#374,.T.); +#374 = LINE('',#375,#376); +#375 = CARTESIAN_POINT('',(-80.,-25.,180.)); +#376 = VECTOR('',#377,1.); +#377 = DIRECTION('',(-0.,1.,0.)); +#378 = PLANE('',#379); #379 = AXIS2_PLACEMENT_3D('',#380,#381,#382); -#380 = CARTESIAN_POINT('',(0.,0.,0.)); -#381 = DIRECTION('',(0.,0.,1.)); -#382 = DIRECTION('',(1.,0.,0.)); -#383 = AXIS2_PLACEMENT_3D('',#384,#385,#386); -#384 = CARTESIAN_POINT('',(0.,0.,0.)); -#385 = DIRECTION('',(0.,0.,1.)); -#386 = DIRECTION('',(1.,0.,0.)); -#387 = AXIS2_PLACEMENT_3D('',#388,#389,#390); -#388 = CARTESIAN_POINT('',(0.,0.,0.)); -#389 = DIRECTION('',(0.,0.,1.)); -#390 = DIRECTION('',(1.,0.,0.)); -#391 = AXIS2_PLACEMENT_3D('',#392,#393,#394); -#392 = CARTESIAN_POINT('',(0.,0.,0.)); -#393 = DIRECTION('',(0.,0.,1.)); -#394 = DIRECTION('',(1.,0.,0.)); -#395 = AXIS2_PLACEMENT_3D('',#396,#397,#398); -#396 = CARTESIAN_POINT('',(0.,0.,0.)); -#397 = DIRECTION('',(0.,0.,1.)); -#398 = DIRECTION('',(1.,0.,0.)); -#399 = AXIS2_PLACEMENT_3D('',#400,#401,#402); -#400 = CARTESIAN_POINT('',(0.,0.,0.)); -#401 = DIRECTION('',(0.,0.,1.)); -#402 = DIRECTION('',(1.,0.,0.)); -#403 = AXIS2_PLACEMENT_3D('',#404,#405,#406); -#404 = CARTESIAN_POINT('',(0.,0.,0.)); -#405 = DIRECTION('',(0.,0.,1.)); -#406 = DIRECTION('',(1.,0.,0.)); -#407 = AXIS2_PLACEMENT_3D('',#408,#409,#410); -#408 = CARTESIAN_POINT('',(0.,0.,0.)); -#409 = DIRECTION('',(0.,0.,1.)); -#410 = DIRECTION('',(1.,0.,0.)); -#411 = AXIS2_PLACEMENT_3D('',#412,#413,#414); -#412 = CARTESIAN_POINT('',(0.,0.,0.)); -#413 = DIRECTION('',(0.,0.,1.)); -#414 = DIRECTION('',(1.,0.,0.)); -#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418); -#416 = CARTESIAN_POINT('',(0.,0.,0.)); -#417 = DIRECTION('',(0.,0.,1.)); -#418 = DIRECTION('',(1.,0.,0.)); +#380 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#381 = DIRECTION('',(1.,0.,-0.)); +#382 = DIRECTION('',(0.,0.,1.)); +#383 = ADVANCED_FACE('',(#384),#418,.T.); +#384 = FACE_BOUND('',#385,.T.); +#385 = EDGE_LOOP('',(#386,#396,#404,#412)); +#386 = ORIENTED_EDGE('',*,*,#387,.F.); +#387 = EDGE_CURVE('',#388,#390,#392,.T.); +#388 = VERTEX_POINT('',#389); +#389 = CARTESIAN_POINT('',(30.,-25.,0.)); +#390 = VERTEX_POINT('',#391); +#391 = CARTESIAN_POINT('',(30.,-25.,180.)); +#392 = LINE('',#393,#394); +#393 = CARTESIAN_POINT('',(30.,-25.,0.)); +#394 = VECTOR('',#395,1.); +#395 = DIRECTION('',(0.,0.,1.)); +#396 = ORIENTED_EDGE('',*,*,#397,.T.); +#397 = EDGE_CURVE('',#388,#398,#400,.T.); +#398 = VERTEX_POINT('',#399); +#399 = CARTESIAN_POINT('',(30.,30.,0.)); +#400 = LINE('',#401,#402); +#401 = CARTESIAN_POINT('',(30.,-25.,0.)); +#402 = VECTOR('',#403,1.); +#403 = DIRECTION('',(-0.,1.,0.)); +#404 = ORIENTED_EDGE('',*,*,#405,.T.); +#405 = EDGE_CURVE('',#398,#406,#408,.T.); +#406 = VERTEX_POINT('',#407); +#407 = CARTESIAN_POINT('',(30.,30.,180.)); +#408 = LINE('',#409,#410); +#409 = CARTESIAN_POINT('',(30.,30.,0.)); +#410 = VECTOR('',#411,1.); +#411 = DIRECTION('',(0.,0.,1.)); +#412 = ORIENTED_EDGE('',*,*,#413,.F.); +#413 = EDGE_CURVE('',#390,#406,#414,.T.); +#414 = LINE('',#415,#416); +#415 = CARTESIAN_POINT('',(30.,-25.,180.)); +#416 = VECTOR('',#417,1.); +#417 = DIRECTION('',(-0.,1.,0.)); +#418 = PLANE('',#419); #419 = AXIS2_PLACEMENT_3D('',#420,#421,#422); -#420 = CARTESIAN_POINT('',(0.,0.,0.)); -#421 = DIRECTION('',(0.,0.,1.)); -#422 = DIRECTION('',(1.,0.,0.)); -#423 = AXIS2_PLACEMENT_3D('',#424,#425,#426); -#424 = CARTESIAN_POINT('',(0.,0.,0.)); -#425 = DIRECTION('',(0.,0.,1.)); -#426 = DIRECTION('',(1.,0.,0.)); -#427 = AXIS2_PLACEMENT_3D('',#428,#429,#430); -#428 = CARTESIAN_POINT('',(0.,0.,0.)); -#429 = DIRECTION('',(0.,0.,1.)); -#430 = DIRECTION('',(1.,0.,0.)); -#431 = AXIS2_PLACEMENT_3D('',#432,#433,#434); -#432 = CARTESIAN_POINT('',(0.,0.,0.)); -#433 = DIRECTION('',(0.,0.,1.)); -#434 = DIRECTION('',(1.,0.,0.)); -#435 = AXIS2_PLACEMENT_3D('',#436,#437,#438); -#436 = CARTESIAN_POINT('',(0.,0.,0.)); -#437 = DIRECTION('',(0.,0.,1.)); -#438 = DIRECTION('',(1.,0.,0.)); -#439 = AXIS2_PLACEMENT_3D('',#440,#441,#442); -#440 = CARTESIAN_POINT('',(0.,0.,0.)); -#441 = DIRECTION('',(0.,0.,1.)); -#442 = DIRECTION('',(1.,0.,0.)); -#443 = AXIS2_PLACEMENT_3D('',#444,#445,#446); -#444 = CARTESIAN_POINT('',(0.,0.,0.)); -#445 = DIRECTION('',(0.,0.,1.)); -#446 = DIRECTION('',(1.,0.,0.)); -#447 = AXIS2_PLACEMENT_3D('',#448,#449,#450); -#448 = CARTESIAN_POINT('',(0.,0.,0.)); -#449 = DIRECTION('',(0.,0.,1.)); -#450 = DIRECTION('',(1.,0.,0.)); -#451 = AXIS2_PLACEMENT_3D('',#452,#453,#454); -#452 = CARTESIAN_POINT('',(0.,0.,0.)); -#453 = DIRECTION('',(0.,0.,1.)); -#454 = DIRECTION('',(1.,0.,0.)); -#455 = AXIS2_PLACEMENT_3D('',#456,#457,#458); -#456 = CARTESIAN_POINT('',(0.,0.,0.)); -#457 = DIRECTION('',(0.,0.,1.)); -#458 = DIRECTION('',(1.,0.,0.)); -#459 = AXIS2_PLACEMENT_3D('',#460,#461,#462); -#460 = CARTESIAN_POINT('',(0.,0.,0.)); -#461 = DIRECTION('',(0.,0.,1.)); -#462 = DIRECTION('',(1.,0.,0.)); -#463 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#467)) GLOBAL_UNIT_ASSIGNED_CONTEXT -((#464,#465,#466)) REPRESENTATION_CONTEXT('Context #1', +#420 = CARTESIAN_POINT('',(30.,-25.,0.)); +#421 = DIRECTION('',(1.,0.,-0.)); +#422 = DIRECTION('',(0.,0.,1.)); +#423 = ADVANCED_FACE('',(#424),#440,.F.); +#424 = FACE_BOUND('',#425,.F.); +#425 = EDGE_LOOP('',(#426,#432,#433,#439)); +#426 = ORIENTED_EDGE('',*,*,#427,.F.); +#427 = EDGE_CURVE('',#348,#388,#428,.T.); +#428 = LINE('',#429,#430); +#429 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#430 = VECTOR('',#431,1.); +#431 = DIRECTION('',(1.,0.,-0.)); +#432 = ORIENTED_EDGE('',*,*,#347,.T.); +#433 = ORIENTED_EDGE('',*,*,#434,.T.); +#434 = EDGE_CURVE('',#350,#390,#435,.T.); +#435 = LINE('',#436,#437); +#436 = CARTESIAN_POINT('',(-80.,-25.,180.)); +#437 = VECTOR('',#438,1.); +#438 = DIRECTION('',(1.,0.,-0.)); +#439 = ORIENTED_EDGE('',*,*,#387,.F.); +#440 = PLANE('',#441); +#441 = AXIS2_PLACEMENT_3D('',#442,#443,#444); +#442 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#443 = DIRECTION('',(-0.,1.,0.)); +#444 = DIRECTION('',(0.,0.,1.)); +#445 = ADVANCED_FACE('',(#446),#462,.T.); +#446 = FACE_BOUND('',#447,.T.); +#447 = EDGE_LOOP('',(#448,#454,#455,#461)); +#448 = ORIENTED_EDGE('',*,*,#449,.F.); +#449 = EDGE_CURVE('',#358,#398,#450,.T.); +#450 = LINE('',#451,#452); +#451 = CARTESIAN_POINT('',(-80.,30.,0.)); +#452 = VECTOR('',#453,1.); +#453 = DIRECTION('',(1.,0.,-0.)); +#454 = ORIENTED_EDGE('',*,*,#365,.T.); +#455 = ORIENTED_EDGE('',*,*,#456,.T.); +#456 = EDGE_CURVE('',#366,#406,#457,.T.); +#457 = LINE('',#458,#459); +#458 = CARTESIAN_POINT('',(-80.,30.,180.)); +#459 = VECTOR('',#460,1.); +#460 = DIRECTION('',(1.,0.,-0.)); +#461 = ORIENTED_EDGE('',*,*,#405,.F.); +#462 = PLANE('',#463); +#463 = AXIS2_PLACEMENT_3D('',#464,#465,#466); +#464 = CARTESIAN_POINT('',(-80.,30.,0.)); +#465 = DIRECTION('',(-0.,1.,0.)); +#466 = DIRECTION('',(0.,0.,1.)); +#467 = ADVANCED_FACE('',(#468),#474,.F.); +#468 = FACE_BOUND('',#469,.F.); +#469 = EDGE_LOOP('',(#470,#471,#472,#473)); +#470 = ORIENTED_EDGE('',*,*,#357,.F.); +#471 = ORIENTED_EDGE('',*,*,#427,.T.); +#472 = ORIENTED_EDGE('',*,*,#397,.T.); +#473 = ORIENTED_EDGE('',*,*,#449,.F.); +#474 = PLANE('',#475); +#475 = AXIS2_PLACEMENT_3D('',#476,#477,#478); +#476 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#477 = DIRECTION('',(0.,0.,1.)); +#478 = DIRECTION('',(1.,0.,-0.)); +#479 = ADVANCED_FACE('',(#480),#486,.T.); +#480 = FACE_BOUND('',#481,.T.); +#481 = EDGE_LOOP('',(#482,#483,#484,#485)); +#482 = ORIENTED_EDGE('',*,*,#373,.F.); +#483 = ORIENTED_EDGE('',*,*,#434,.T.); +#484 = ORIENTED_EDGE('',*,*,#413,.T.); +#485 = ORIENTED_EDGE('',*,*,#456,.F.); +#486 = PLANE('',#487); +#487 = AXIS2_PLACEMENT_3D('',#488,#489,#490); +#488 = CARTESIAN_POINT('',(-80.,-25.,180.)); +#489 = DIRECTION('',(0.,0.,1.)); +#490 = DIRECTION('',(1.,0.,-0.)); +#491 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#495)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#492,#493,#494)) REPRESENTATION_CONTEXT('Context #1', '3D Context with UNIT and UNCERTAINTY') ); -#464 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#465 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#466 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#467 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#464, +#492 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#493 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#494 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#495 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#492, 'distance_accuracy_value','confusion accuracy'); -#468 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); -#469 = SHAPE_DEFINITION_REPRESENTATION(#470,#476); -#470 = PRODUCT_DEFINITION_SHAPE('','',#471); -#471 = PRODUCT_DEFINITION('design','',#472,#475); -#472 = PRODUCT_DEFINITION_FORMATION('','',#473); -#473 = PRODUCT('Panel_BackBox','Panel_BackBox','',(#474)); -#474 = PRODUCT_CONTEXT('',#2,'mechanical'); -#475 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#476 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#477),#627); -#477 = MANIFOLD_SOLID_BREP('',#478); -#478 = CLOSED_SHELL('',(#479,#519,#559,#581,#603,#615)); -#479 = ADVANCED_FACE('',(#480),#514,.F.); -#480 = FACE_BOUND('',#481,.F.); -#481 = EDGE_LOOP('',(#482,#492,#500,#508)); -#482 = ORIENTED_EDGE('',*,*,#483,.F.); -#483 = EDGE_CURVE('',#484,#486,#488,.T.); -#484 = VERTEX_POINT('',#485); -#485 = CARTESIAN_POINT('',(-80.,-25.,0.)); -#486 = VERTEX_POINT('',#487); -#487 = CARTESIAN_POINT('',(-80.,-25.,180.)); -#488 = LINE('',#489,#490); -#489 = CARTESIAN_POINT('',(-80.,-25.,0.)); -#490 = VECTOR('',#491,1.); -#491 = DIRECTION('',(0.,0.,1.)); -#492 = ORIENTED_EDGE('',*,*,#493,.T.); -#493 = EDGE_CURVE('',#484,#494,#496,.T.); -#494 = VERTEX_POINT('',#495); -#495 = CARTESIAN_POINT('',(-80.,30.,0.)); -#496 = LINE('',#497,#498); -#497 = CARTESIAN_POINT('',(-80.,-25.,0.)); -#498 = VECTOR('',#499,1.); -#499 = DIRECTION('',(-0.,1.,0.)); -#500 = ORIENTED_EDGE('',*,*,#501,.T.); -#501 = EDGE_CURVE('',#494,#502,#504,.T.); -#502 = VERTEX_POINT('',#503); -#503 = CARTESIAN_POINT('',(-80.,30.,180.)); -#504 = LINE('',#505,#506); -#505 = CARTESIAN_POINT('',(-80.,30.,0.)); -#506 = VECTOR('',#507,1.); -#507 = DIRECTION('',(0.,0.,1.)); -#508 = ORIENTED_EDGE('',*,*,#509,.F.); -#509 = EDGE_CURVE('',#486,#502,#510,.T.); -#510 = LINE('',#511,#512); -#511 = CARTESIAN_POINT('',(-80.,-25.,180.)); -#512 = VECTOR('',#513,1.); -#513 = DIRECTION('',(-0.,1.,0.)); -#514 = PLANE('',#515); -#515 = AXIS2_PLACEMENT_3D('',#516,#517,#518); -#516 = CARTESIAN_POINT('',(-80.,-25.,0.)); -#517 = DIRECTION('',(1.,0.,-0.)); -#518 = DIRECTION('',(0.,0.,1.)); -#519 = ADVANCED_FACE('',(#520),#554,.T.); -#520 = FACE_BOUND('',#521,.T.); -#521 = EDGE_LOOP('',(#522,#532,#540,#548)); -#522 = ORIENTED_EDGE('',*,*,#523,.F.); -#523 = EDGE_CURVE('',#524,#526,#528,.T.); -#524 = VERTEX_POINT('',#525); -#525 = CARTESIAN_POINT('',(30.,-25.,0.)); -#526 = VERTEX_POINT('',#527); -#527 = CARTESIAN_POINT('',(30.,-25.,180.)); -#528 = LINE('',#529,#530); -#529 = CARTESIAN_POINT('',(30.,-25.,0.)); -#530 = VECTOR('',#531,1.); -#531 = DIRECTION('',(0.,0.,1.)); -#532 = ORIENTED_EDGE('',*,*,#533,.T.); -#533 = EDGE_CURVE('',#524,#534,#536,.T.); -#534 = VERTEX_POINT('',#535); -#535 = CARTESIAN_POINT('',(30.,30.,0.)); -#536 = LINE('',#537,#538); -#537 = CARTESIAN_POINT('',(30.,-25.,0.)); -#538 = VECTOR('',#539,1.); -#539 = DIRECTION('',(-0.,1.,0.)); -#540 = ORIENTED_EDGE('',*,*,#541,.T.); -#541 = EDGE_CURVE('',#534,#542,#544,.T.); -#542 = VERTEX_POINT('',#543); -#543 = CARTESIAN_POINT('',(30.,30.,180.)); -#544 = LINE('',#545,#546); -#545 = CARTESIAN_POINT('',(30.,30.,0.)); -#546 = VECTOR('',#547,1.); -#547 = DIRECTION('',(0.,0.,1.)); -#548 = ORIENTED_EDGE('',*,*,#549,.F.); -#549 = EDGE_CURVE('',#526,#542,#550,.T.); -#550 = LINE('',#551,#552); -#551 = CARTESIAN_POINT('',(30.,-25.,180.)); -#552 = VECTOR('',#553,1.); -#553 = DIRECTION('',(-0.,1.,0.)); -#554 = PLANE('',#555); -#555 = AXIS2_PLACEMENT_3D('',#556,#557,#558); -#556 = CARTESIAN_POINT('',(30.,-25.,0.)); -#557 = DIRECTION('',(1.,0.,-0.)); -#558 = DIRECTION('',(0.,0.,1.)); -#559 = ADVANCED_FACE('',(#560),#576,.F.); -#560 = FACE_BOUND('',#561,.F.); -#561 = EDGE_LOOP('',(#562,#568,#569,#575)); -#562 = ORIENTED_EDGE('',*,*,#563,.F.); -#563 = EDGE_CURVE('',#484,#524,#564,.T.); -#564 = LINE('',#565,#566); -#565 = CARTESIAN_POINT('',(-80.,-25.,0.)); -#566 = VECTOR('',#567,1.); -#567 = DIRECTION('',(1.,0.,-0.)); -#568 = ORIENTED_EDGE('',*,*,#483,.T.); -#569 = ORIENTED_EDGE('',*,*,#570,.T.); -#570 = EDGE_CURVE('',#486,#526,#571,.T.); -#571 = LINE('',#572,#573); -#572 = CARTESIAN_POINT('',(-80.,-25.,180.)); -#573 = VECTOR('',#574,1.); -#574 = DIRECTION('',(1.,0.,-0.)); -#575 = ORIENTED_EDGE('',*,*,#523,.F.); -#576 = PLANE('',#577); -#577 = AXIS2_PLACEMENT_3D('',#578,#579,#580); -#578 = CARTESIAN_POINT('',(-80.,-25.,0.)); -#579 = DIRECTION('',(-0.,1.,0.)); +#496 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#497,#499); +#497 = ( REPRESENTATION_RELATIONSHIP('','',#340,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#498) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#498 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); +#499 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#500 + ); +#500 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','Panel_BackBox','',#5,#335,$); +#501 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#337)); +#502 = SHAPE_DEFINITION_REPRESENTATION(#503,#509); +#503 = PRODUCT_DEFINITION_SHAPE('','',#504); +#504 = PRODUCT_DEFINITION('design','',#505,#508); +#505 = PRODUCT_DEFINITION_FORMATION('','',#506); +#506 = PRODUCT('Panel_LeftDoorFace','Panel_LeftDoorFace','',(#507)); +#507 = PRODUCT_CONTEXT('',#2,'mechanical'); +#508 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#509 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#510),#660); +#510 = MANIFOLD_SOLID_BREP('',#511); +#511 = CLOSED_SHELL('',(#512,#552,#592,#614,#636,#648)); +#512 = ADVANCED_FACE('',(#513),#547,.F.); +#513 = FACE_BOUND('',#514,.F.); +#514 = EDGE_LOOP('',(#515,#525,#533,#541)); +#515 = ORIENTED_EDGE('',*,*,#516,.F.); +#516 = EDGE_CURVE('',#517,#519,#521,.T.); +#517 = VERTEX_POINT('',#518); +#518 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#519 = VERTEX_POINT('',#520); +#520 = CARTESIAN_POINT('',(-86.,-28.,179.)); +#521 = LINE('',#522,#523); +#522 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#523 = VECTOR('',#524,1.); +#524 = DIRECTION('',(0.,0.,1.)); +#525 = ORIENTED_EDGE('',*,*,#526,.T.); +#526 = EDGE_CURVE('',#517,#527,#529,.T.); +#527 = VERTEX_POINT('',#528); +#528 = CARTESIAN_POINT('',(-86.,32.,1.)); +#529 = LINE('',#530,#531); +#530 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#531 = VECTOR('',#532,1.); +#532 = DIRECTION('',(-0.,1.,0.)); +#533 = ORIENTED_EDGE('',*,*,#534,.T.); +#534 = EDGE_CURVE('',#527,#535,#537,.T.); +#535 = VERTEX_POINT('',#536); +#536 = CARTESIAN_POINT('',(-86.,32.,179.)); +#537 = LINE('',#538,#539); +#538 = CARTESIAN_POINT('',(-86.,32.,1.)); +#539 = VECTOR('',#540,1.); +#540 = DIRECTION('',(0.,0.,1.)); +#541 = ORIENTED_EDGE('',*,*,#542,.F.); +#542 = EDGE_CURVE('',#519,#535,#543,.T.); +#543 = LINE('',#544,#545); +#544 = CARTESIAN_POINT('',(-86.,-28.,179.)); +#545 = VECTOR('',#546,1.); +#546 = DIRECTION('',(-0.,1.,0.)); +#547 = PLANE('',#548); +#548 = AXIS2_PLACEMENT_3D('',#549,#550,#551); +#549 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#550 = DIRECTION('',(1.,0.,-0.)); +#551 = DIRECTION('',(0.,0.,1.)); +#552 = ADVANCED_FACE('',(#553),#587,.T.); +#553 = FACE_BOUND('',#554,.T.); +#554 = EDGE_LOOP('',(#555,#565,#573,#581)); +#555 = ORIENTED_EDGE('',*,*,#556,.F.); +#556 = EDGE_CURVE('',#557,#559,#561,.T.); +#557 = VERTEX_POINT('',#558); +#558 = CARTESIAN_POINT('',(-80.,-28.,1.)); +#559 = VERTEX_POINT('',#560); +#560 = CARTESIAN_POINT('',(-80.,-28.,179.)); +#561 = LINE('',#562,#563); +#562 = CARTESIAN_POINT('',(-80.,-28.,1.)); +#563 = VECTOR('',#564,1.); +#564 = DIRECTION('',(0.,0.,1.)); +#565 = ORIENTED_EDGE('',*,*,#566,.T.); +#566 = EDGE_CURVE('',#557,#567,#569,.T.); +#567 = VERTEX_POINT('',#568); +#568 = CARTESIAN_POINT('',(-80.,32.,1.)); +#569 = LINE('',#570,#571); +#570 = CARTESIAN_POINT('',(-80.,-28.,1.)); +#571 = VECTOR('',#572,1.); +#572 = DIRECTION('',(-0.,1.,0.)); +#573 = ORIENTED_EDGE('',*,*,#574,.T.); +#574 = EDGE_CURVE('',#567,#575,#577,.T.); +#575 = VERTEX_POINT('',#576); +#576 = CARTESIAN_POINT('',(-80.,32.,179.)); +#577 = LINE('',#578,#579); +#578 = CARTESIAN_POINT('',(-80.,32.,1.)); +#579 = VECTOR('',#580,1.); #580 = DIRECTION('',(0.,0.,1.)); -#581 = ADVANCED_FACE('',(#582),#598,.T.); -#582 = FACE_BOUND('',#583,.T.); -#583 = EDGE_LOOP('',(#584,#590,#591,#597)); -#584 = ORIENTED_EDGE('',*,*,#585,.F.); -#585 = EDGE_CURVE('',#494,#534,#586,.T.); -#586 = LINE('',#587,#588); -#587 = CARTESIAN_POINT('',(-80.,30.,0.)); -#588 = VECTOR('',#589,1.); -#589 = DIRECTION('',(1.,0.,-0.)); -#590 = ORIENTED_EDGE('',*,*,#501,.T.); -#591 = ORIENTED_EDGE('',*,*,#592,.T.); -#592 = EDGE_CURVE('',#502,#542,#593,.T.); -#593 = LINE('',#594,#595); -#594 = CARTESIAN_POINT('',(-80.,30.,180.)); -#595 = VECTOR('',#596,1.); -#596 = DIRECTION('',(1.,0.,-0.)); -#597 = ORIENTED_EDGE('',*,*,#541,.F.); -#598 = PLANE('',#599); -#599 = AXIS2_PLACEMENT_3D('',#600,#601,#602); -#600 = CARTESIAN_POINT('',(-80.,30.,0.)); -#601 = DIRECTION('',(-0.,1.,0.)); -#602 = DIRECTION('',(0.,0.,1.)); -#603 = ADVANCED_FACE('',(#604),#610,.F.); -#604 = FACE_BOUND('',#605,.F.); -#605 = EDGE_LOOP('',(#606,#607,#608,#609)); -#606 = ORIENTED_EDGE('',*,*,#493,.F.); -#607 = ORIENTED_EDGE('',*,*,#563,.T.); -#608 = ORIENTED_EDGE('',*,*,#533,.T.); -#609 = ORIENTED_EDGE('',*,*,#585,.F.); -#610 = PLANE('',#611); -#611 = AXIS2_PLACEMENT_3D('',#612,#613,#614); -#612 = CARTESIAN_POINT('',(-80.,-25.,0.)); +#581 = ORIENTED_EDGE('',*,*,#582,.F.); +#582 = EDGE_CURVE('',#559,#575,#583,.T.); +#583 = LINE('',#584,#585); +#584 = CARTESIAN_POINT('',(-80.,-28.,179.)); +#585 = VECTOR('',#586,1.); +#586 = DIRECTION('',(-0.,1.,0.)); +#587 = PLANE('',#588); +#588 = AXIS2_PLACEMENT_3D('',#589,#590,#591); +#589 = CARTESIAN_POINT('',(-80.,-28.,1.)); +#590 = DIRECTION('',(1.,0.,-0.)); +#591 = DIRECTION('',(0.,0.,1.)); +#592 = ADVANCED_FACE('',(#593),#609,.F.); +#593 = FACE_BOUND('',#594,.F.); +#594 = EDGE_LOOP('',(#595,#601,#602,#608)); +#595 = ORIENTED_EDGE('',*,*,#596,.F.); +#596 = EDGE_CURVE('',#517,#557,#597,.T.); +#597 = LINE('',#598,#599); +#598 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#599 = VECTOR('',#600,1.); +#600 = DIRECTION('',(1.,0.,-0.)); +#601 = ORIENTED_EDGE('',*,*,#516,.T.); +#602 = ORIENTED_EDGE('',*,*,#603,.T.); +#603 = EDGE_CURVE('',#519,#559,#604,.T.); +#604 = LINE('',#605,#606); +#605 = CARTESIAN_POINT('',(-86.,-28.,179.)); +#606 = VECTOR('',#607,1.); +#607 = DIRECTION('',(1.,0.,-0.)); +#608 = ORIENTED_EDGE('',*,*,#556,.F.); +#609 = PLANE('',#610); +#610 = AXIS2_PLACEMENT_3D('',#611,#612,#613); +#611 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#612 = DIRECTION('',(-0.,1.,0.)); #613 = DIRECTION('',(0.,0.,1.)); -#614 = DIRECTION('',(1.,0.,-0.)); -#615 = ADVANCED_FACE('',(#616),#622,.T.); -#616 = FACE_BOUND('',#617,.T.); -#617 = EDGE_LOOP('',(#618,#619,#620,#621)); -#618 = ORIENTED_EDGE('',*,*,#509,.F.); -#619 = ORIENTED_EDGE('',*,*,#570,.T.); -#620 = ORIENTED_EDGE('',*,*,#549,.T.); -#621 = ORIENTED_EDGE('',*,*,#592,.F.); -#622 = PLANE('',#623); -#623 = AXIS2_PLACEMENT_3D('',#624,#625,#626); -#624 = CARTESIAN_POINT('',(-80.,-25.,180.)); -#625 = DIRECTION('',(0.,0.,1.)); -#626 = DIRECTION('',(1.,0.,-0.)); -#627 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#631)) GLOBAL_UNIT_ASSIGNED_CONTEXT -((#628,#629,#630)) REPRESENTATION_CONTEXT('Context #1', +#614 = ADVANCED_FACE('',(#615),#631,.T.); +#615 = FACE_BOUND('',#616,.T.); +#616 = EDGE_LOOP('',(#617,#623,#624,#630)); +#617 = ORIENTED_EDGE('',*,*,#618,.F.); +#618 = EDGE_CURVE('',#527,#567,#619,.T.); +#619 = LINE('',#620,#621); +#620 = CARTESIAN_POINT('',(-86.,32.,1.)); +#621 = VECTOR('',#622,1.); +#622 = DIRECTION('',(1.,0.,-0.)); +#623 = ORIENTED_EDGE('',*,*,#534,.T.); +#624 = ORIENTED_EDGE('',*,*,#625,.T.); +#625 = EDGE_CURVE('',#535,#575,#626,.T.); +#626 = LINE('',#627,#628); +#627 = CARTESIAN_POINT('',(-86.,32.,179.)); +#628 = VECTOR('',#629,1.); +#629 = DIRECTION('',(1.,0.,-0.)); +#630 = ORIENTED_EDGE('',*,*,#574,.F.); +#631 = PLANE('',#632); +#632 = AXIS2_PLACEMENT_3D('',#633,#634,#635); +#633 = CARTESIAN_POINT('',(-86.,32.,1.)); +#634 = DIRECTION('',(-0.,1.,0.)); +#635 = DIRECTION('',(0.,0.,1.)); +#636 = ADVANCED_FACE('',(#637),#643,.F.); +#637 = FACE_BOUND('',#638,.F.); +#638 = EDGE_LOOP('',(#639,#640,#641,#642)); +#639 = ORIENTED_EDGE('',*,*,#526,.F.); +#640 = ORIENTED_EDGE('',*,*,#596,.T.); +#641 = ORIENTED_EDGE('',*,*,#566,.T.); +#642 = ORIENTED_EDGE('',*,*,#618,.F.); +#643 = PLANE('',#644); +#644 = AXIS2_PLACEMENT_3D('',#645,#646,#647); +#645 = CARTESIAN_POINT('',(-86.,-28.,1.)); +#646 = DIRECTION('',(0.,0.,1.)); +#647 = DIRECTION('',(1.,0.,-0.)); +#648 = ADVANCED_FACE('',(#649),#655,.T.); +#649 = FACE_BOUND('',#650,.T.); +#650 = EDGE_LOOP('',(#651,#652,#653,#654)); +#651 = ORIENTED_EDGE('',*,*,#542,.F.); +#652 = ORIENTED_EDGE('',*,*,#603,.T.); +#653 = ORIENTED_EDGE('',*,*,#582,.T.); +#654 = ORIENTED_EDGE('',*,*,#625,.F.); +#655 = PLANE('',#656); +#656 = AXIS2_PLACEMENT_3D('',#657,#658,#659); +#657 = CARTESIAN_POINT('',(-86.,-28.,179.)); +#658 = DIRECTION('',(0.,0.,1.)); +#659 = DIRECTION('',(1.,0.,-0.)); +#660 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#664)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#661,#662,#663)) REPRESENTATION_CONTEXT('Context #1', '3D Context with UNIT and UNCERTAINTY') ); -#628 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#629 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#630 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#631 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#628, +#661 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#662 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#663 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#664 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#661, 'distance_accuracy_value','confusion accuracy'); -#632 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#633,#635); -#633 = ( REPRESENTATION_RELATIONSHIP('','',#476,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#634) +#665 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#666,#668); +#666 = ( REPRESENTATION_RELATIONSHIP('','',#509,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#667) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#634 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); -#635 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#636 +#667 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19); +#668 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#669 ); -#636 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','Panel_BackBox','',#5,#471,$); -#637 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#473)); -#638 = SHAPE_DEFINITION_REPRESENTATION(#639,#645); -#639 = PRODUCT_DEFINITION_SHAPE('','',#640); -#640 = PRODUCT_DEFINITION('design','',#641,#644); -#641 = PRODUCT_DEFINITION_FORMATION('','',#642); -#642 = PRODUCT('Panel_LeftDoorFace','Panel_LeftDoorFace','',(#643)); -#643 = PRODUCT_CONTEXT('',#2,'mechanical'); -#644 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#645 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#646),#796); -#646 = MANIFOLD_SOLID_BREP('',#647); -#647 = CLOSED_SHELL('',(#648,#688,#728,#750,#772,#784)); -#648 = ADVANCED_FACE('',(#649),#683,.F.); -#649 = FACE_BOUND('',#650,.F.); -#650 = EDGE_LOOP('',(#651,#661,#669,#677)); -#651 = ORIENTED_EDGE('',*,*,#652,.F.); -#652 = EDGE_CURVE('',#653,#655,#657,.T.); -#653 = VERTEX_POINT('',#654); -#654 = CARTESIAN_POINT('',(-88.,-28.,1.)); -#655 = VERTEX_POINT('',#656); -#656 = CARTESIAN_POINT('',(-88.,-28.,179.)); -#657 = LINE('',#658,#659); -#658 = CARTESIAN_POINT('',(-88.,-28.,1.)); -#659 = VECTOR('',#660,1.); -#660 = DIRECTION('',(0.,0.,1.)); -#661 = ORIENTED_EDGE('',*,*,#662,.T.); -#662 = EDGE_CURVE('',#653,#663,#665,.T.); -#663 = VERTEX_POINT('',#664); -#664 = CARTESIAN_POINT('',(-88.,32.,1.)); -#665 = LINE('',#666,#667); -#666 = CARTESIAN_POINT('',(-88.,-28.,1.)); -#667 = VECTOR('',#668,1.); -#668 = DIRECTION('',(-0.,1.,0.)); -#669 = ORIENTED_EDGE('',*,*,#670,.T.); -#670 = EDGE_CURVE('',#663,#671,#673,.T.); -#671 = VERTEX_POINT('',#672); -#672 = CARTESIAN_POINT('',(-88.,32.,179.)); -#673 = LINE('',#674,#675); -#674 = CARTESIAN_POINT('',(-88.,32.,1.)); -#675 = VECTOR('',#676,1.); -#676 = DIRECTION('',(0.,0.,1.)); -#677 = ORIENTED_EDGE('',*,*,#678,.F.); -#678 = EDGE_CURVE('',#655,#671,#679,.T.); -#679 = LINE('',#680,#681); -#680 = CARTESIAN_POINT('',(-88.,-28.,179.)); -#681 = VECTOR('',#682,1.); -#682 = DIRECTION('',(-0.,1.,0.)); -#683 = PLANE('',#684); -#684 = AXIS2_PLACEMENT_3D('',#685,#686,#687); -#685 = CARTESIAN_POINT('',(-88.,-28.,1.)); -#686 = DIRECTION('',(1.,0.,-0.)); -#687 = DIRECTION('',(0.,0.,1.)); -#688 = ADVANCED_FACE('',(#689),#723,.T.); -#689 = FACE_BOUND('',#690,.T.); -#690 = EDGE_LOOP('',(#691,#701,#709,#717)); -#691 = ORIENTED_EDGE('',*,*,#692,.F.); -#692 = EDGE_CURVE('',#693,#695,#697,.T.); -#693 = VERTEX_POINT('',#694); -#694 = CARTESIAN_POINT('',(-82.,-28.,1.)); -#695 = VERTEX_POINT('',#696); -#696 = CARTESIAN_POINT('',(-82.,-28.,179.)); -#697 = LINE('',#698,#699); -#698 = CARTESIAN_POINT('',(-82.,-28.,1.)); -#699 = VECTOR('',#700,1.); -#700 = DIRECTION('',(0.,0.,1.)); -#701 = ORIENTED_EDGE('',*,*,#702,.T.); -#702 = EDGE_CURVE('',#693,#703,#705,.T.); -#703 = VERTEX_POINT('',#704); -#704 = CARTESIAN_POINT('',(-82.,32.,1.)); -#705 = LINE('',#706,#707); -#706 = CARTESIAN_POINT('',(-82.,-28.,1.)); -#707 = VECTOR('',#708,1.); -#708 = DIRECTION('',(-0.,1.,0.)); -#709 = ORIENTED_EDGE('',*,*,#710,.T.); -#710 = EDGE_CURVE('',#703,#711,#713,.T.); -#711 = VERTEX_POINT('',#712); -#712 = CARTESIAN_POINT('',(-82.,32.,179.)); -#713 = LINE('',#714,#715); -#714 = CARTESIAN_POINT('',(-82.,32.,1.)); -#715 = VECTOR('',#716,1.); -#716 = DIRECTION('',(0.,0.,1.)); -#717 = ORIENTED_EDGE('',*,*,#718,.F.); -#718 = EDGE_CURVE('',#695,#711,#719,.T.); -#719 = LINE('',#720,#721); -#720 = CARTESIAN_POINT('',(-82.,-28.,179.)); -#721 = VECTOR('',#722,1.); -#722 = DIRECTION('',(-0.,1.,0.)); -#723 = PLANE('',#724); -#724 = AXIS2_PLACEMENT_3D('',#725,#726,#727); -#725 = CARTESIAN_POINT('',(-82.,-28.,1.)); -#726 = DIRECTION('',(1.,0.,-0.)); -#727 = DIRECTION('',(0.,0.,1.)); -#728 = ADVANCED_FACE('',(#729),#745,.F.); -#729 = FACE_BOUND('',#730,.F.); -#730 = EDGE_LOOP('',(#731,#737,#738,#744)); -#731 = ORIENTED_EDGE('',*,*,#732,.F.); -#732 = EDGE_CURVE('',#653,#693,#733,.T.); -#733 = LINE('',#734,#735); -#734 = CARTESIAN_POINT('',(-88.,-28.,1.)); -#735 = VECTOR('',#736,1.); -#736 = DIRECTION('',(1.,0.,-0.)); -#737 = ORIENTED_EDGE('',*,*,#652,.T.); -#738 = ORIENTED_EDGE('',*,*,#739,.T.); -#739 = EDGE_CURVE('',#655,#695,#740,.T.); -#740 = LINE('',#741,#742); -#741 = CARTESIAN_POINT('',(-88.,-28.,179.)); -#742 = VECTOR('',#743,1.); -#743 = DIRECTION('',(1.,0.,-0.)); -#744 = ORIENTED_EDGE('',*,*,#692,.F.); -#745 = PLANE('',#746); -#746 = AXIS2_PLACEMENT_3D('',#747,#748,#749); -#747 = CARTESIAN_POINT('',(-88.,-28.,1.)); -#748 = DIRECTION('',(-0.,1.,0.)); +#669 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','Panel_LeftDoorFace','',#5, + #504,$); +#670 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#506)); +#671 = SHAPE_DEFINITION_REPRESENTATION(#672,#678); +#672 = PRODUCT_DEFINITION_SHAPE('','',#673); +#673 = PRODUCT_DEFINITION('design','',#674,#677); +#674 = PRODUCT_DEFINITION_FORMATION('','',#675); +#675 = PRODUCT('Panel_InnerRecess','Panel_InnerRecess','',(#676)); +#676 = PRODUCT_CONTEXT('',#2,'mechanical'); +#677 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#678 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#679),#829); +#679 = MANIFOLD_SOLID_BREP('',#680); +#680 = CLOSED_SHELL('',(#681,#721,#761,#783,#805,#817)); +#681 = ADVANCED_FACE('',(#682),#716,.F.); +#682 = FACE_BOUND('',#683,.F.); +#683 = EDGE_LOOP('',(#684,#694,#702,#710)); +#684 = ORIENTED_EDGE('',*,*,#685,.F.); +#685 = EDGE_CURVE('',#686,#688,#690,.T.); +#686 = VERTEX_POINT('',#687); +#687 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#688 = VERTEX_POINT('',#689); +#689 = CARTESIAN_POINT('',(-68.,-29.,156.)); +#690 = LINE('',#691,#692); +#691 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#692 = VECTOR('',#693,1.); +#693 = DIRECTION('',(0.,0.,1.)); +#694 = ORIENTED_EDGE('',*,*,#695,.T.); +#695 = EDGE_CURVE('',#686,#696,#698,.T.); +#696 = VERTEX_POINT('',#697); +#697 = CARTESIAN_POINT('',(-68.,-27.6,24.)); +#698 = LINE('',#699,#700); +#699 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#700 = VECTOR('',#701,1.); +#701 = DIRECTION('',(-0.,1.,0.)); +#702 = ORIENTED_EDGE('',*,*,#703,.T.); +#703 = EDGE_CURVE('',#696,#704,#706,.T.); +#704 = VERTEX_POINT('',#705); +#705 = CARTESIAN_POINT('',(-68.,-27.6,156.)); +#706 = LINE('',#707,#708); +#707 = CARTESIAN_POINT('',(-68.,-27.6,24.)); +#708 = VECTOR('',#709,1.); +#709 = DIRECTION('',(0.,0.,1.)); +#710 = ORIENTED_EDGE('',*,*,#711,.F.); +#711 = EDGE_CURVE('',#688,#704,#712,.T.); +#712 = LINE('',#713,#714); +#713 = CARTESIAN_POINT('',(-68.,-29.,156.)); +#714 = VECTOR('',#715,1.); +#715 = DIRECTION('',(-0.,1.,0.)); +#716 = PLANE('',#717); +#717 = AXIS2_PLACEMENT_3D('',#718,#719,#720); +#718 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#719 = DIRECTION('',(1.,0.,-0.)); +#720 = DIRECTION('',(0.,0.,1.)); +#721 = ADVANCED_FACE('',(#722),#756,.T.); +#722 = FACE_BOUND('',#723,.T.); +#723 = EDGE_LOOP('',(#724,#734,#742,#750)); +#724 = ORIENTED_EDGE('',*,*,#725,.F.); +#725 = EDGE_CURVE('',#726,#728,#730,.T.); +#726 = VERTEX_POINT('',#727); +#727 = CARTESIAN_POINT('',(4.,-29.,24.)); +#728 = VERTEX_POINT('',#729); +#729 = CARTESIAN_POINT('',(4.,-29.,156.)); +#730 = LINE('',#731,#732); +#731 = CARTESIAN_POINT('',(4.,-29.,24.)); +#732 = VECTOR('',#733,1.); +#733 = DIRECTION('',(0.,0.,1.)); +#734 = ORIENTED_EDGE('',*,*,#735,.T.); +#735 = EDGE_CURVE('',#726,#736,#738,.T.); +#736 = VERTEX_POINT('',#737); +#737 = CARTESIAN_POINT('',(4.,-27.6,24.)); +#738 = LINE('',#739,#740); +#739 = CARTESIAN_POINT('',(4.,-29.,24.)); +#740 = VECTOR('',#741,1.); +#741 = DIRECTION('',(-0.,1.,0.)); +#742 = ORIENTED_EDGE('',*,*,#743,.T.); +#743 = EDGE_CURVE('',#736,#744,#746,.T.); +#744 = VERTEX_POINT('',#745); +#745 = CARTESIAN_POINT('',(4.,-27.6,156.)); +#746 = LINE('',#747,#748); +#747 = CARTESIAN_POINT('',(4.,-27.6,24.)); +#748 = VECTOR('',#749,1.); #749 = DIRECTION('',(0.,0.,1.)); -#750 = ADVANCED_FACE('',(#751),#767,.T.); -#751 = FACE_BOUND('',#752,.T.); -#752 = EDGE_LOOP('',(#753,#759,#760,#766)); -#753 = ORIENTED_EDGE('',*,*,#754,.F.); -#754 = EDGE_CURVE('',#663,#703,#755,.T.); -#755 = LINE('',#756,#757); -#756 = CARTESIAN_POINT('',(-88.,32.,1.)); -#757 = VECTOR('',#758,1.); -#758 = DIRECTION('',(1.,0.,-0.)); -#759 = ORIENTED_EDGE('',*,*,#670,.T.); -#760 = ORIENTED_EDGE('',*,*,#761,.T.); -#761 = EDGE_CURVE('',#671,#711,#762,.T.); -#762 = LINE('',#763,#764); -#763 = CARTESIAN_POINT('',(-88.,32.,179.)); -#764 = VECTOR('',#765,1.); -#765 = DIRECTION('',(1.,0.,-0.)); -#766 = ORIENTED_EDGE('',*,*,#710,.F.); -#767 = PLANE('',#768); -#768 = AXIS2_PLACEMENT_3D('',#769,#770,#771); -#769 = CARTESIAN_POINT('',(-88.,32.,1.)); -#770 = DIRECTION('',(-0.,1.,0.)); -#771 = DIRECTION('',(0.,0.,1.)); -#772 = ADVANCED_FACE('',(#773),#779,.F.); -#773 = FACE_BOUND('',#774,.F.); -#774 = EDGE_LOOP('',(#775,#776,#777,#778)); -#775 = ORIENTED_EDGE('',*,*,#662,.F.); -#776 = ORIENTED_EDGE('',*,*,#732,.T.); -#777 = ORIENTED_EDGE('',*,*,#702,.T.); -#778 = ORIENTED_EDGE('',*,*,#754,.F.); -#779 = PLANE('',#780); -#780 = AXIS2_PLACEMENT_3D('',#781,#782,#783); -#781 = CARTESIAN_POINT('',(-88.,-28.,1.)); +#750 = ORIENTED_EDGE('',*,*,#751,.F.); +#751 = EDGE_CURVE('',#728,#744,#752,.T.); +#752 = LINE('',#753,#754); +#753 = CARTESIAN_POINT('',(4.,-29.,156.)); +#754 = VECTOR('',#755,1.); +#755 = DIRECTION('',(-0.,1.,0.)); +#756 = PLANE('',#757); +#757 = AXIS2_PLACEMENT_3D('',#758,#759,#760); +#758 = CARTESIAN_POINT('',(4.,-29.,24.)); +#759 = DIRECTION('',(1.,0.,-0.)); +#760 = DIRECTION('',(0.,0.,1.)); +#761 = ADVANCED_FACE('',(#762),#778,.F.); +#762 = FACE_BOUND('',#763,.F.); +#763 = EDGE_LOOP('',(#764,#770,#771,#777)); +#764 = ORIENTED_EDGE('',*,*,#765,.F.); +#765 = EDGE_CURVE('',#686,#726,#766,.T.); +#766 = LINE('',#767,#768); +#767 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#768 = VECTOR('',#769,1.); +#769 = DIRECTION('',(1.,0.,-0.)); +#770 = ORIENTED_EDGE('',*,*,#685,.T.); +#771 = ORIENTED_EDGE('',*,*,#772,.T.); +#772 = EDGE_CURVE('',#688,#728,#773,.T.); +#773 = LINE('',#774,#775); +#774 = CARTESIAN_POINT('',(-68.,-29.,156.)); +#775 = VECTOR('',#776,1.); +#776 = DIRECTION('',(1.,0.,-0.)); +#777 = ORIENTED_EDGE('',*,*,#725,.F.); +#778 = PLANE('',#779); +#779 = AXIS2_PLACEMENT_3D('',#780,#781,#782); +#780 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#781 = DIRECTION('',(-0.,1.,0.)); #782 = DIRECTION('',(0.,0.,1.)); -#783 = DIRECTION('',(1.,0.,-0.)); -#784 = ADVANCED_FACE('',(#785),#791,.T.); -#785 = FACE_BOUND('',#786,.T.); -#786 = EDGE_LOOP('',(#787,#788,#789,#790)); -#787 = ORIENTED_EDGE('',*,*,#678,.F.); -#788 = ORIENTED_EDGE('',*,*,#739,.T.); -#789 = ORIENTED_EDGE('',*,*,#718,.T.); -#790 = ORIENTED_EDGE('',*,*,#761,.F.); -#791 = PLANE('',#792); -#792 = AXIS2_PLACEMENT_3D('',#793,#794,#795); -#793 = CARTESIAN_POINT('',(-88.,-28.,179.)); -#794 = DIRECTION('',(0.,0.,1.)); -#795 = DIRECTION('',(1.,0.,-0.)); -#796 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#800)) GLOBAL_UNIT_ASSIGNED_CONTEXT -((#797,#798,#799)) REPRESENTATION_CONTEXT('Context #1', +#783 = ADVANCED_FACE('',(#784),#800,.T.); +#784 = FACE_BOUND('',#785,.T.); +#785 = EDGE_LOOP('',(#786,#792,#793,#799)); +#786 = ORIENTED_EDGE('',*,*,#787,.F.); +#787 = EDGE_CURVE('',#696,#736,#788,.T.); +#788 = LINE('',#789,#790); +#789 = CARTESIAN_POINT('',(-68.,-27.6,24.)); +#790 = VECTOR('',#791,1.); +#791 = DIRECTION('',(1.,0.,-0.)); +#792 = ORIENTED_EDGE('',*,*,#703,.T.); +#793 = ORIENTED_EDGE('',*,*,#794,.T.); +#794 = EDGE_CURVE('',#704,#744,#795,.T.); +#795 = LINE('',#796,#797); +#796 = CARTESIAN_POINT('',(-68.,-27.6,156.)); +#797 = VECTOR('',#798,1.); +#798 = DIRECTION('',(1.,0.,-0.)); +#799 = ORIENTED_EDGE('',*,*,#743,.F.); +#800 = PLANE('',#801); +#801 = AXIS2_PLACEMENT_3D('',#802,#803,#804); +#802 = CARTESIAN_POINT('',(-68.,-27.6,24.)); +#803 = DIRECTION('',(-0.,1.,0.)); +#804 = DIRECTION('',(0.,0.,1.)); +#805 = ADVANCED_FACE('',(#806),#812,.F.); +#806 = FACE_BOUND('',#807,.F.); +#807 = EDGE_LOOP('',(#808,#809,#810,#811)); +#808 = ORIENTED_EDGE('',*,*,#695,.F.); +#809 = ORIENTED_EDGE('',*,*,#765,.T.); +#810 = ORIENTED_EDGE('',*,*,#735,.T.); +#811 = ORIENTED_EDGE('',*,*,#787,.F.); +#812 = PLANE('',#813); +#813 = AXIS2_PLACEMENT_3D('',#814,#815,#816); +#814 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#815 = DIRECTION('',(0.,0.,1.)); +#816 = DIRECTION('',(1.,0.,-0.)); +#817 = ADVANCED_FACE('',(#818),#824,.T.); +#818 = FACE_BOUND('',#819,.T.); +#819 = EDGE_LOOP('',(#820,#821,#822,#823)); +#820 = ORIENTED_EDGE('',*,*,#711,.F.); +#821 = ORIENTED_EDGE('',*,*,#772,.T.); +#822 = ORIENTED_EDGE('',*,*,#751,.T.); +#823 = ORIENTED_EDGE('',*,*,#794,.F.); +#824 = PLANE('',#825); +#825 = AXIS2_PLACEMENT_3D('',#826,#827,#828); +#826 = CARTESIAN_POINT('',(-68.,-29.,156.)); +#827 = DIRECTION('',(0.,0.,1.)); +#828 = DIRECTION('',(1.,0.,-0.)); +#829 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#833)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#830,#831,#832)) REPRESENTATION_CONTEXT('Context #1', '3D Context with UNIT and UNCERTAINTY') ); -#797 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#798 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#799 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#800 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#797, +#830 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#831 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#832 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#833 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#830, 'distance_accuracy_value','confusion accuracy'); -#801 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#802,#804); -#802 = ( REPRESENTATION_RELATIONSHIP('','',#645,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#803) +#834 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#835,#837); +#835 = ( REPRESENTATION_RELATIONSHIP('','',#678,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#836) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#803 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19); -#804 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#805 +#836 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23); +#837 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#838 ); -#805 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','Panel_LeftDoorFace','',#5, - #640,$); -#806 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#642)); -#807 = SHAPE_DEFINITION_REPRESENTATION(#808,#814); -#808 = PRODUCT_DEFINITION_SHAPE('','',#809); -#809 = PRODUCT_DEFINITION('design','',#810,#813); -#810 = PRODUCT_DEFINITION_FORMATION('','',#811); -#811 = PRODUCT('Panel_InnerRecess','Panel_InnerRecess','',(#812)); -#812 = PRODUCT_CONTEXT('',#2,'mechanical'); -#813 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#814 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#815),#965); -#815 = MANIFOLD_SOLID_BREP('',#816); -#816 = CLOSED_SHELL('',(#817,#857,#897,#919,#941,#953)); -#817 = ADVANCED_FACE('',(#818),#852,.F.); -#818 = FACE_BOUND('',#819,.F.); -#819 = EDGE_LOOP('',(#820,#830,#838,#846)); -#820 = ORIENTED_EDGE('',*,*,#821,.F.); -#821 = EDGE_CURVE('',#822,#824,#826,.T.); -#822 = VERTEX_POINT('',#823); -#823 = CARTESIAN_POINT('',(-68.,-29.,24.)); -#824 = VERTEX_POINT('',#825); -#825 = CARTESIAN_POINT('',(-68.,-29.,156.)); -#826 = LINE('',#827,#828); -#827 = CARTESIAN_POINT('',(-68.,-29.,24.)); -#828 = VECTOR('',#829,1.); -#829 = DIRECTION('',(0.,0.,1.)); -#830 = ORIENTED_EDGE('',*,*,#831,.T.); -#831 = EDGE_CURVE('',#822,#832,#834,.T.); -#832 = VERTEX_POINT('',#833); -#833 = CARTESIAN_POINT('',(-68.,-27.6,24.)); -#834 = LINE('',#835,#836); -#835 = CARTESIAN_POINT('',(-68.,-29.,24.)); -#836 = VECTOR('',#837,1.); -#837 = DIRECTION('',(-0.,1.,0.)); -#838 = ORIENTED_EDGE('',*,*,#839,.T.); -#839 = EDGE_CURVE('',#832,#840,#842,.T.); -#840 = VERTEX_POINT('',#841); -#841 = CARTESIAN_POINT('',(-68.,-27.6,156.)); -#842 = LINE('',#843,#844); -#843 = CARTESIAN_POINT('',(-68.,-27.6,24.)); -#844 = VECTOR('',#845,1.); -#845 = DIRECTION('',(0.,0.,1.)); -#846 = ORIENTED_EDGE('',*,*,#847,.F.); -#847 = EDGE_CURVE('',#824,#840,#848,.T.); -#848 = LINE('',#849,#850); -#849 = CARTESIAN_POINT('',(-68.,-29.,156.)); -#850 = VECTOR('',#851,1.); -#851 = DIRECTION('',(-0.,1.,0.)); -#852 = PLANE('',#853); -#853 = AXIS2_PLACEMENT_3D('',#854,#855,#856); -#854 = CARTESIAN_POINT('',(-68.,-29.,24.)); -#855 = DIRECTION('',(1.,0.,-0.)); -#856 = DIRECTION('',(0.,0.,1.)); -#857 = ADVANCED_FACE('',(#858),#892,.T.); -#858 = FACE_BOUND('',#859,.T.); -#859 = EDGE_LOOP('',(#860,#870,#878,#886)); -#860 = ORIENTED_EDGE('',*,*,#861,.F.); -#861 = EDGE_CURVE('',#862,#864,#866,.T.); -#862 = VERTEX_POINT('',#863); -#863 = CARTESIAN_POINT('',(4.,-29.,24.)); -#864 = VERTEX_POINT('',#865); -#865 = CARTESIAN_POINT('',(4.,-29.,156.)); -#866 = LINE('',#867,#868); -#867 = CARTESIAN_POINT('',(4.,-29.,24.)); -#868 = VECTOR('',#869,1.); -#869 = DIRECTION('',(0.,0.,1.)); -#870 = ORIENTED_EDGE('',*,*,#871,.T.); -#871 = EDGE_CURVE('',#862,#872,#874,.T.); -#872 = VERTEX_POINT('',#873); -#873 = CARTESIAN_POINT('',(4.,-27.6,24.)); -#874 = LINE('',#875,#876); -#875 = CARTESIAN_POINT('',(4.,-29.,24.)); -#876 = VECTOR('',#877,1.); -#877 = DIRECTION('',(-0.,1.,0.)); -#878 = ORIENTED_EDGE('',*,*,#879,.T.); -#879 = EDGE_CURVE('',#872,#880,#882,.T.); -#880 = VERTEX_POINT('',#881); -#881 = CARTESIAN_POINT('',(4.,-27.6,156.)); -#882 = LINE('',#883,#884); -#883 = CARTESIAN_POINT('',(4.,-27.6,24.)); -#884 = VECTOR('',#885,1.); -#885 = DIRECTION('',(0.,0.,1.)); -#886 = ORIENTED_EDGE('',*,*,#887,.F.); -#887 = EDGE_CURVE('',#864,#880,#888,.T.); -#888 = LINE('',#889,#890); -#889 = CARTESIAN_POINT('',(4.,-29.,156.)); -#890 = VECTOR('',#891,1.); -#891 = DIRECTION('',(-0.,1.,0.)); -#892 = PLANE('',#893); -#893 = AXIS2_PLACEMENT_3D('',#894,#895,#896); -#894 = CARTESIAN_POINT('',(4.,-29.,24.)); -#895 = DIRECTION('',(1.,0.,-0.)); -#896 = DIRECTION('',(0.,0.,1.)); -#897 = ADVANCED_FACE('',(#898),#914,.F.); -#898 = FACE_BOUND('',#899,.F.); -#899 = EDGE_LOOP('',(#900,#906,#907,#913)); -#900 = ORIENTED_EDGE('',*,*,#901,.F.); -#901 = EDGE_CURVE('',#822,#862,#902,.T.); -#902 = LINE('',#903,#904); -#903 = CARTESIAN_POINT('',(-68.,-29.,24.)); -#904 = VECTOR('',#905,1.); -#905 = DIRECTION('',(1.,0.,-0.)); -#906 = ORIENTED_EDGE('',*,*,#821,.T.); -#907 = ORIENTED_EDGE('',*,*,#908,.T.); -#908 = EDGE_CURVE('',#824,#864,#909,.T.); -#909 = LINE('',#910,#911); -#910 = CARTESIAN_POINT('',(-68.,-29.,156.)); -#911 = VECTOR('',#912,1.); -#912 = DIRECTION('',(1.,0.,-0.)); -#913 = ORIENTED_EDGE('',*,*,#861,.F.); -#914 = PLANE('',#915); -#915 = AXIS2_PLACEMENT_3D('',#916,#917,#918); -#916 = CARTESIAN_POINT('',(-68.,-29.,24.)); -#917 = DIRECTION('',(-0.,1.,0.)); +#838 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','Panel_InnerRecess','',#5,#673 + ,$); +#839 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#675)); +#840 = SHAPE_DEFINITION_REPRESENTATION(#841,#847); +#841 = PRODUCT_DEFINITION_SHAPE('','',#842); +#842 = PRODUCT_DEFINITION('design','',#843,#846); +#843 = PRODUCT_DEFINITION_FORMATION('','',#844); +#844 = PRODUCT('Panel_RecessLeftLine','Panel_RecessLeftLine','',(#845)); +#845 = PRODUCT_CONTEXT('',#2,'mechanical'); +#846 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#847 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#848),#998); +#848 = MANIFOLD_SOLID_BREP('',#849); +#849 = CLOSED_SHELL('',(#850,#890,#930,#952,#974,#986)); +#850 = ADVANCED_FACE('',(#851),#885,.F.); +#851 = FACE_BOUND('',#852,.F.); +#852 = EDGE_LOOP('',(#853,#863,#871,#879)); +#853 = ORIENTED_EDGE('',*,*,#854,.F.); +#854 = EDGE_CURVE('',#855,#857,#859,.T.); +#855 = VERTEX_POINT('',#856); +#856 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#857 = VERTEX_POINT('',#858); +#858 = CARTESIAN_POINT('',(-68.,-30.,156.)); +#859 = LINE('',#860,#861); +#860 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#861 = VECTOR('',#862,1.); +#862 = DIRECTION('',(0.,0.,1.)); +#863 = ORIENTED_EDGE('',*,*,#864,.T.); +#864 = EDGE_CURVE('',#855,#865,#867,.T.); +#865 = VERTEX_POINT('',#866); +#866 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#867 = LINE('',#868,#869); +#868 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#869 = VECTOR('',#870,1.); +#870 = DIRECTION('',(-0.,1.,0.)); +#871 = ORIENTED_EDGE('',*,*,#872,.T.); +#872 = EDGE_CURVE('',#865,#873,#875,.T.); +#873 = VERTEX_POINT('',#874); +#874 = CARTESIAN_POINT('',(-68.,-28.2,156.)); +#875 = LINE('',#876,#877); +#876 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#877 = VECTOR('',#878,1.); +#878 = DIRECTION('',(0.,0.,1.)); +#879 = ORIENTED_EDGE('',*,*,#880,.F.); +#880 = EDGE_CURVE('',#857,#873,#881,.T.); +#881 = LINE('',#882,#883); +#882 = CARTESIAN_POINT('',(-68.,-30.,156.)); +#883 = VECTOR('',#884,1.); +#884 = DIRECTION('',(-0.,1.,0.)); +#885 = PLANE('',#886); +#886 = AXIS2_PLACEMENT_3D('',#887,#888,#889); +#887 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#888 = DIRECTION('',(1.,0.,-0.)); +#889 = DIRECTION('',(0.,0.,1.)); +#890 = ADVANCED_FACE('',(#891),#925,.T.); +#891 = FACE_BOUND('',#892,.T.); +#892 = EDGE_LOOP('',(#893,#903,#911,#919)); +#893 = ORIENTED_EDGE('',*,*,#894,.F.); +#894 = EDGE_CURVE('',#895,#897,#899,.T.); +#895 = VERTEX_POINT('',#896); +#896 = CARTESIAN_POINT('',(-66.8,-30.,24.)); +#897 = VERTEX_POINT('',#898); +#898 = CARTESIAN_POINT('',(-66.8,-30.,156.)); +#899 = LINE('',#900,#901); +#900 = CARTESIAN_POINT('',(-66.8,-30.,24.)); +#901 = VECTOR('',#902,1.); +#902 = DIRECTION('',(0.,0.,1.)); +#903 = ORIENTED_EDGE('',*,*,#904,.T.); +#904 = EDGE_CURVE('',#895,#905,#907,.T.); +#905 = VERTEX_POINT('',#906); +#906 = CARTESIAN_POINT('',(-66.8,-28.2,24.)); +#907 = LINE('',#908,#909); +#908 = CARTESIAN_POINT('',(-66.8,-30.,24.)); +#909 = VECTOR('',#910,1.); +#910 = DIRECTION('',(-0.,1.,0.)); +#911 = ORIENTED_EDGE('',*,*,#912,.T.); +#912 = EDGE_CURVE('',#905,#913,#915,.T.); +#913 = VERTEX_POINT('',#914); +#914 = CARTESIAN_POINT('',(-66.8,-28.2,156.)); +#915 = LINE('',#916,#917); +#916 = CARTESIAN_POINT('',(-66.8,-28.2,24.)); +#917 = VECTOR('',#918,1.); #918 = DIRECTION('',(0.,0.,1.)); -#919 = ADVANCED_FACE('',(#920),#936,.T.); -#920 = FACE_BOUND('',#921,.T.); -#921 = EDGE_LOOP('',(#922,#928,#929,#935)); -#922 = ORIENTED_EDGE('',*,*,#923,.F.); -#923 = EDGE_CURVE('',#832,#872,#924,.T.); -#924 = LINE('',#925,#926); -#925 = CARTESIAN_POINT('',(-68.,-27.6,24.)); -#926 = VECTOR('',#927,1.); -#927 = DIRECTION('',(1.,0.,-0.)); -#928 = ORIENTED_EDGE('',*,*,#839,.T.); -#929 = ORIENTED_EDGE('',*,*,#930,.T.); -#930 = EDGE_CURVE('',#840,#880,#931,.T.); -#931 = LINE('',#932,#933); -#932 = CARTESIAN_POINT('',(-68.,-27.6,156.)); -#933 = VECTOR('',#934,1.); -#934 = DIRECTION('',(1.,0.,-0.)); -#935 = ORIENTED_EDGE('',*,*,#879,.F.); -#936 = PLANE('',#937); -#937 = AXIS2_PLACEMENT_3D('',#938,#939,#940); -#938 = CARTESIAN_POINT('',(-68.,-27.6,24.)); -#939 = DIRECTION('',(-0.,1.,0.)); -#940 = DIRECTION('',(0.,0.,1.)); -#941 = ADVANCED_FACE('',(#942),#948,.F.); -#942 = FACE_BOUND('',#943,.F.); -#943 = EDGE_LOOP('',(#944,#945,#946,#947)); -#944 = ORIENTED_EDGE('',*,*,#831,.F.); -#945 = ORIENTED_EDGE('',*,*,#901,.T.); -#946 = ORIENTED_EDGE('',*,*,#871,.T.); -#947 = ORIENTED_EDGE('',*,*,#923,.F.); -#948 = PLANE('',#949); -#949 = AXIS2_PLACEMENT_3D('',#950,#951,#952); -#950 = CARTESIAN_POINT('',(-68.,-29.,24.)); +#919 = ORIENTED_EDGE('',*,*,#920,.F.); +#920 = EDGE_CURVE('',#897,#913,#921,.T.); +#921 = LINE('',#922,#923); +#922 = CARTESIAN_POINT('',(-66.8,-30.,156.)); +#923 = VECTOR('',#924,1.); +#924 = DIRECTION('',(-0.,1.,0.)); +#925 = PLANE('',#926); +#926 = AXIS2_PLACEMENT_3D('',#927,#928,#929); +#927 = CARTESIAN_POINT('',(-66.8,-30.,24.)); +#928 = DIRECTION('',(1.,0.,-0.)); +#929 = DIRECTION('',(0.,0.,1.)); +#930 = ADVANCED_FACE('',(#931),#947,.F.); +#931 = FACE_BOUND('',#932,.F.); +#932 = EDGE_LOOP('',(#933,#939,#940,#946)); +#933 = ORIENTED_EDGE('',*,*,#934,.F.); +#934 = EDGE_CURVE('',#855,#895,#935,.T.); +#935 = LINE('',#936,#937); +#936 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#937 = VECTOR('',#938,1.); +#938 = DIRECTION('',(1.,0.,-0.)); +#939 = ORIENTED_EDGE('',*,*,#854,.T.); +#940 = ORIENTED_EDGE('',*,*,#941,.T.); +#941 = EDGE_CURVE('',#857,#897,#942,.T.); +#942 = LINE('',#943,#944); +#943 = CARTESIAN_POINT('',(-68.,-30.,156.)); +#944 = VECTOR('',#945,1.); +#945 = DIRECTION('',(1.,0.,-0.)); +#946 = ORIENTED_EDGE('',*,*,#894,.F.); +#947 = PLANE('',#948); +#948 = AXIS2_PLACEMENT_3D('',#949,#950,#951); +#949 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#950 = DIRECTION('',(-0.,1.,0.)); #951 = DIRECTION('',(0.,0.,1.)); -#952 = DIRECTION('',(1.,0.,-0.)); -#953 = ADVANCED_FACE('',(#954),#960,.T.); -#954 = FACE_BOUND('',#955,.T.); -#955 = EDGE_LOOP('',(#956,#957,#958,#959)); -#956 = ORIENTED_EDGE('',*,*,#847,.F.); -#957 = ORIENTED_EDGE('',*,*,#908,.T.); -#958 = ORIENTED_EDGE('',*,*,#887,.T.); -#959 = ORIENTED_EDGE('',*,*,#930,.F.); -#960 = PLANE('',#961); -#961 = AXIS2_PLACEMENT_3D('',#962,#963,#964); -#962 = CARTESIAN_POINT('',(-68.,-29.,156.)); -#963 = DIRECTION('',(0.,0.,1.)); -#964 = DIRECTION('',(1.,0.,-0.)); -#965 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#969)) GLOBAL_UNIT_ASSIGNED_CONTEXT -((#966,#967,#968)) REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#966 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#967 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#968 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#969 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#966, +#952 = ADVANCED_FACE('',(#953),#969,.T.); +#953 = FACE_BOUND('',#954,.T.); +#954 = EDGE_LOOP('',(#955,#961,#962,#968)); +#955 = ORIENTED_EDGE('',*,*,#956,.F.); +#956 = EDGE_CURVE('',#865,#905,#957,.T.); +#957 = LINE('',#958,#959); +#958 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#959 = VECTOR('',#960,1.); +#960 = DIRECTION('',(1.,0.,-0.)); +#961 = ORIENTED_EDGE('',*,*,#872,.T.); +#962 = ORIENTED_EDGE('',*,*,#963,.T.); +#963 = EDGE_CURVE('',#873,#913,#964,.T.); +#964 = LINE('',#965,#966); +#965 = CARTESIAN_POINT('',(-68.,-28.2,156.)); +#966 = VECTOR('',#967,1.); +#967 = DIRECTION('',(1.,0.,-0.)); +#968 = ORIENTED_EDGE('',*,*,#912,.F.); +#969 = PLANE('',#970); +#970 = AXIS2_PLACEMENT_3D('',#971,#972,#973); +#971 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#972 = DIRECTION('',(-0.,1.,0.)); +#973 = DIRECTION('',(0.,0.,1.)); +#974 = ADVANCED_FACE('',(#975),#981,.F.); +#975 = FACE_BOUND('',#976,.F.); +#976 = EDGE_LOOP('',(#977,#978,#979,#980)); +#977 = ORIENTED_EDGE('',*,*,#864,.F.); +#978 = ORIENTED_EDGE('',*,*,#934,.T.); +#979 = ORIENTED_EDGE('',*,*,#904,.T.); +#980 = ORIENTED_EDGE('',*,*,#956,.F.); +#981 = PLANE('',#982); +#982 = AXIS2_PLACEMENT_3D('',#983,#984,#985); +#983 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#984 = DIRECTION('',(0.,0.,1.)); +#985 = DIRECTION('',(1.,0.,-0.)); +#986 = ADVANCED_FACE('',(#987),#993,.T.); +#987 = FACE_BOUND('',#988,.T.); +#988 = EDGE_LOOP('',(#989,#990,#991,#992)); +#989 = ORIENTED_EDGE('',*,*,#880,.F.); +#990 = ORIENTED_EDGE('',*,*,#941,.T.); +#991 = ORIENTED_EDGE('',*,*,#920,.T.); +#992 = ORIENTED_EDGE('',*,*,#963,.F.); +#993 = PLANE('',#994); +#994 = AXIS2_PLACEMENT_3D('',#995,#996,#997); +#995 = CARTESIAN_POINT('',(-68.,-30.,156.)); +#996 = DIRECTION('',(0.,0.,1.)); +#997 = DIRECTION('',(1.,0.,-0.)); +#998 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1002)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#999,#1000,#1001)) REPRESENTATION_CONTEXT( + 'Context #1','3D Context with UNIT and UNCERTAINTY') ); +#999 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1000 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1001 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1002 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#999, 'distance_accuracy_value','confusion accuracy'); -#970 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#971,#973); -#971 = ( REPRESENTATION_RELATIONSHIP('','',#814,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#972) +#1003 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1004,#1006); +#1004 = ( REPRESENTATION_RELATIONSHIP('','',#847,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1005) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#972 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23); -#973 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#974 - ); -#974 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','Panel_InnerRecess','',#5,#809 - ,$); -#975 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#811)); -#976 = SHAPE_DEFINITION_REPRESENTATION(#977,#983); -#977 = PRODUCT_DEFINITION_SHAPE('','',#978); -#978 = PRODUCT_DEFINITION('design','',#979,#982); -#979 = PRODUCT_DEFINITION_FORMATION('','',#980); -#980 = PRODUCT('Panel_RecessLeftLine','Panel_RecessLeftLine','',(#981)); -#981 = PRODUCT_CONTEXT('',#2,'mechanical'); -#982 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#983 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#984),#1134); -#984 = MANIFOLD_SOLID_BREP('',#985); -#985 = CLOSED_SHELL('',(#986,#1026,#1066,#1088,#1110,#1122)); -#986 = ADVANCED_FACE('',(#987),#1021,.F.); -#987 = FACE_BOUND('',#988,.F.); -#988 = EDGE_LOOP('',(#989,#999,#1007,#1015)); -#989 = ORIENTED_EDGE('',*,*,#990,.F.); -#990 = EDGE_CURVE('',#991,#993,#995,.T.); -#991 = VERTEX_POINT('',#992); -#992 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#993 = VERTEX_POINT('',#994); -#994 = CARTESIAN_POINT('',(-68.,-30.,156.)); -#995 = LINE('',#996,#997); -#996 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#997 = VECTOR('',#998,1.); -#998 = DIRECTION('',(0.,0.,1.)); -#999 = ORIENTED_EDGE('',*,*,#1000,.T.); -#1000 = EDGE_CURVE('',#991,#1001,#1003,.T.); -#1001 = VERTEX_POINT('',#1002); -#1002 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1003 = LINE('',#1004,#1005); -#1004 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1005 = VECTOR('',#1006,1.); -#1006 = DIRECTION('',(-0.,1.,0.)); -#1007 = ORIENTED_EDGE('',*,*,#1008,.T.); -#1008 = EDGE_CURVE('',#1001,#1009,#1011,.T.); -#1009 = VERTEX_POINT('',#1010); -#1010 = CARTESIAN_POINT('',(-68.,-28.2,156.)); -#1011 = LINE('',#1012,#1013); -#1012 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1013 = VECTOR('',#1014,1.); -#1014 = DIRECTION('',(0.,0.,1.)); -#1015 = ORIENTED_EDGE('',*,*,#1016,.F.); -#1016 = EDGE_CURVE('',#993,#1009,#1017,.T.); -#1017 = LINE('',#1018,#1019); -#1018 = CARTESIAN_POINT('',(-68.,-30.,156.)); -#1019 = VECTOR('',#1020,1.); -#1020 = DIRECTION('',(-0.,1.,0.)); -#1021 = PLANE('',#1022); -#1022 = AXIS2_PLACEMENT_3D('',#1023,#1024,#1025); -#1023 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1024 = DIRECTION('',(1.,0.,-0.)); -#1025 = DIRECTION('',(0.,0.,1.)); -#1026 = ADVANCED_FACE('',(#1027),#1061,.T.); -#1027 = FACE_BOUND('',#1028,.T.); -#1028 = EDGE_LOOP('',(#1029,#1039,#1047,#1055)); -#1029 = ORIENTED_EDGE('',*,*,#1030,.F.); -#1030 = EDGE_CURVE('',#1031,#1033,#1035,.T.); -#1031 = VERTEX_POINT('',#1032); -#1032 = CARTESIAN_POINT('',(-66.8,-30.,24.)); -#1033 = VERTEX_POINT('',#1034); -#1034 = CARTESIAN_POINT('',(-66.8,-30.,156.)); -#1035 = LINE('',#1036,#1037); -#1036 = CARTESIAN_POINT('',(-66.8,-30.,24.)); -#1037 = VECTOR('',#1038,1.); -#1038 = DIRECTION('',(0.,0.,1.)); -#1039 = ORIENTED_EDGE('',*,*,#1040,.T.); -#1040 = EDGE_CURVE('',#1031,#1041,#1043,.T.); -#1041 = VERTEX_POINT('',#1042); -#1042 = CARTESIAN_POINT('',(-66.8,-28.2,24.)); -#1043 = LINE('',#1044,#1045); -#1044 = CARTESIAN_POINT('',(-66.8,-30.,24.)); -#1045 = VECTOR('',#1046,1.); -#1046 = DIRECTION('',(-0.,1.,0.)); -#1047 = ORIENTED_EDGE('',*,*,#1048,.T.); -#1048 = EDGE_CURVE('',#1041,#1049,#1051,.T.); -#1049 = VERTEX_POINT('',#1050); -#1050 = CARTESIAN_POINT('',(-66.8,-28.2,156.)); -#1051 = LINE('',#1052,#1053); -#1052 = CARTESIAN_POINT('',(-66.8,-28.2,24.)); -#1053 = VECTOR('',#1054,1.); -#1054 = DIRECTION('',(0.,0.,1.)); -#1055 = ORIENTED_EDGE('',*,*,#1056,.F.); -#1056 = EDGE_CURVE('',#1033,#1049,#1057,.T.); -#1057 = LINE('',#1058,#1059); -#1058 = CARTESIAN_POINT('',(-66.8,-30.,156.)); -#1059 = VECTOR('',#1060,1.); -#1060 = DIRECTION('',(-0.,1.,0.)); -#1061 = PLANE('',#1062); -#1062 = AXIS2_PLACEMENT_3D('',#1063,#1064,#1065); -#1063 = CARTESIAN_POINT('',(-66.8,-30.,24.)); -#1064 = DIRECTION('',(1.,0.,-0.)); -#1065 = DIRECTION('',(0.,0.,1.)); -#1066 = ADVANCED_FACE('',(#1067),#1083,.F.); -#1067 = FACE_BOUND('',#1068,.F.); -#1068 = EDGE_LOOP('',(#1069,#1075,#1076,#1082)); -#1069 = ORIENTED_EDGE('',*,*,#1070,.F.); -#1070 = EDGE_CURVE('',#991,#1031,#1071,.T.); -#1071 = LINE('',#1072,#1073); -#1072 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1073 = VECTOR('',#1074,1.); -#1074 = DIRECTION('',(1.,0.,-0.)); -#1075 = ORIENTED_EDGE('',*,*,#990,.T.); -#1076 = ORIENTED_EDGE('',*,*,#1077,.T.); -#1077 = EDGE_CURVE('',#993,#1033,#1078,.T.); -#1078 = LINE('',#1079,#1080); -#1079 = CARTESIAN_POINT('',(-68.,-30.,156.)); -#1080 = VECTOR('',#1081,1.); -#1081 = DIRECTION('',(1.,0.,-0.)); -#1082 = ORIENTED_EDGE('',*,*,#1030,.F.); -#1083 = PLANE('',#1084); -#1084 = AXIS2_PLACEMENT_3D('',#1085,#1086,#1087); -#1085 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1086 = DIRECTION('',(-0.,1.,0.)); +#1005 = ITEM_DEFINED_TRANSFORMATION('','',#11,#27); +#1006 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1007); +#1007 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','Panel_RecessLeftLine','',#5, + #842,$); +#1008 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#844)); +#1009 = SHAPE_DEFINITION_REPRESENTATION(#1010,#1016); +#1010 = PRODUCT_DEFINITION_SHAPE('','',#1011); +#1011 = PRODUCT_DEFINITION('design','',#1012,#1015); +#1012 = PRODUCT_DEFINITION_FORMATION('','',#1013); +#1013 = PRODUCT('Panel_RecessRightLine','Panel_RecessRightLine','',( + #1014)); +#1014 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1015 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1016 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1017),#1167); +#1017 = MANIFOLD_SOLID_BREP('',#1018); +#1018 = CLOSED_SHELL('',(#1019,#1059,#1099,#1121,#1143,#1155)); +#1019 = ADVANCED_FACE('',(#1020),#1054,.F.); +#1020 = FACE_BOUND('',#1021,.F.); +#1021 = EDGE_LOOP('',(#1022,#1032,#1040,#1048)); +#1022 = ORIENTED_EDGE('',*,*,#1023,.F.); +#1023 = EDGE_CURVE('',#1024,#1026,#1028,.T.); +#1024 = VERTEX_POINT('',#1025); +#1025 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1026 = VERTEX_POINT('',#1027); +#1027 = CARTESIAN_POINT('',(2.8,-30.,156.)); +#1028 = LINE('',#1029,#1030); +#1029 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1030 = VECTOR('',#1031,1.); +#1031 = DIRECTION('',(0.,0.,1.)); +#1032 = ORIENTED_EDGE('',*,*,#1033,.T.); +#1033 = EDGE_CURVE('',#1024,#1034,#1036,.T.); +#1034 = VERTEX_POINT('',#1035); +#1035 = CARTESIAN_POINT('',(2.8,-28.2,24.)); +#1036 = LINE('',#1037,#1038); +#1037 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1038 = VECTOR('',#1039,1.); +#1039 = DIRECTION('',(-0.,1.,0.)); +#1040 = ORIENTED_EDGE('',*,*,#1041,.T.); +#1041 = EDGE_CURVE('',#1034,#1042,#1044,.T.); +#1042 = VERTEX_POINT('',#1043); +#1043 = CARTESIAN_POINT('',(2.8,-28.2,156.)); +#1044 = LINE('',#1045,#1046); +#1045 = CARTESIAN_POINT('',(2.8,-28.2,24.)); +#1046 = VECTOR('',#1047,1.); +#1047 = DIRECTION('',(0.,0.,1.)); +#1048 = ORIENTED_EDGE('',*,*,#1049,.F.); +#1049 = EDGE_CURVE('',#1026,#1042,#1050,.T.); +#1050 = LINE('',#1051,#1052); +#1051 = CARTESIAN_POINT('',(2.8,-30.,156.)); +#1052 = VECTOR('',#1053,1.); +#1053 = DIRECTION('',(-0.,1.,0.)); +#1054 = PLANE('',#1055); +#1055 = AXIS2_PLACEMENT_3D('',#1056,#1057,#1058); +#1056 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1057 = DIRECTION('',(1.,0.,-0.)); +#1058 = DIRECTION('',(0.,0.,1.)); +#1059 = ADVANCED_FACE('',(#1060),#1094,.T.); +#1060 = FACE_BOUND('',#1061,.T.); +#1061 = EDGE_LOOP('',(#1062,#1072,#1080,#1088)); +#1062 = ORIENTED_EDGE('',*,*,#1063,.F.); +#1063 = EDGE_CURVE('',#1064,#1066,#1068,.T.); +#1064 = VERTEX_POINT('',#1065); +#1065 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1066 = VERTEX_POINT('',#1067); +#1067 = CARTESIAN_POINT('',(4.,-30.,156.)); +#1068 = LINE('',#1069,#1070); +#1069 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1070 = VECTOR('',#1071,1.); +#1071 = DIRECTION('',(0.,0.,1.)); +#1072 = ORIENTED_EDGE('',*,*,#1073,.T.); +#1073 = EDGE_CURVE('',#1064,#1074,#1076,.T.); +#1074 = VERTEX_POINT('',#1075); +#1075 = CARTESIAN_POINT('',(4.,-28.2,24.)); +#1076 = LINE('',#1077,#1078); +#1077 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1078 = VECTOR('',#1079,1.); +#1079 = DIRECTION('',(-0.,1.,0.)); +#1080 = ORIENTED_EDGE('',*,*,#1081,.T.); +#1081 = EDGE_CURVE('',#1074,#1082,#1084,.T.); +#1082 = VERTEX_POINT('',#1083); +#1083 = CARTESIAN_POINT('',(4.,-28.2,156.)); +#1084 = LINE('',#1085,#1086); +#1085 = CARTESIAN_POINT('',(4.,-28.2,24.)); +#1086 = VECTOR('',#1087,1.); #1087 = DIRECTION('',(0.,0.,1.)); -#1088 = ADVANCED_FACE('',(#1089),#1105,.T.); -#1089 = FACE_BOUND('',#1090,.T.); -#1090 = EDGE_LOOP('',(#1091,#1097,#1098,#1104)); -#1091 = ORIENTED_EDGE('',*,*,#1092,.F.); -#1092 = EDGE_CURVE('',#1001,#1041,#1093,.T.); -#1093 = LINE('',#1094,#1095); -#1094 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1095 = VECTOR('',#1096,1.); -#1096 = DIRECTION('',(1.,0.,-0.)); -#1097 = ORIENTED_EDGE('',*,*,#1008,.T.); -#1098 = ORIENTED_EDGE('',*,*,#1099,.T.); -#1099 = EDGE_CURVE('',#1009,#1049,#1100,.T.); -#1100 = LINE('',#1101,#1102); -#1101 = CARTESIAN_POINT('',(-68.,-28.2,156.)); -#1102 = VECTOR('',#1103,1.); -#1103 = DIRECTION('',(1.,0.,-0.)); -#1104 = ORIENTED_EDGE('',*,*,#1048,.F.); -#1105 = PLANE('',#1106); -#1106 = AXIS2_PLACEMENT_3D('',#1107,#1108,#1109); -#1107 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1108 = DIRECTION('',(-0.,1.,0.)); -#1109 = DIRECTION('',(0.,0.,1.)); -#1110 = ADVANCED_FACE('',(#1111),#1117,.F.); -#1111 = FACE_BOUND('',#1112,.F.); -#1112 = EDGE_LOOP('',(#1113,#1114,#1115,#1116)); -#1113 = ORIENTED_EDGE('',*,*,#1000,.F.); -#1114 = ORIENTED_EDGE('',*,*,#1070,.T.); -#1115 = ORIENTED_EDGE('',*,*,#1040,.T.); -#1116 = ORIENTED_EDGE('',*,*,#1092,.F.); -#1117 = PLANE('',#1118); -#1118 = AXIS2_PLACEMENT_3D('',#1119,#1120,#1121); -#1119 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1088 = ORIENTED_EDGE('',*,*,#1089,.F.); +#1089 = EDGE_CURVE('',#1066,#1082,#1090,.T.); +#1090 = LINE('',#1091,#1092); +#1091 = CARTESIAN_POINT('',(4.,-30.,156.)); +#1092 = VECTOR('',#1093,1.); +#1093 = DIRECTION('',(-0.,1.,0.)); +#1094 = PLANE('',#1095); +#1095 = AXIS2_PLACEMENT_3D('',#1096,#1097,#1098); +#1096 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1097 = DIRECTION('',(1.,0.,-0.)); +#1098 = DIRECTION('',(0.,0.,1.)); +#1099 = ADVANCED_FACE('',(#1100),#1116,.F.); +#1100 = FACE_BOUND('',#1101,.F.); +#1101 = EDGE_LOOP('',(#1102,#1108,#1109,#1115)); +#1102 = ORIENTED_EDGE('',*,*,#1103,.F.); +#1103 = EDGE_CURVE('',#1024,#1064,#1104,.T.); +#1104 = LINE('',#1105,#1106); +#1105 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1106 = VECTOR('',#1107,1.); +#1107 = DIRECTION('',(1.,0.,-0.)); +#1108 = ORIENTED_EDGE('',*,*,#1023,.T.); +#1109 = ORIENTED_EDGE('',*,*,#1110,.T.); +#1110 = EDGE_CURVE('',#1026,#1066,#1111,.T.); +#1111 = LINE('',#1112,#1113); +#1112 = CARTESIAN_POINT('',(2.8,-30.,156.)); +#1113 = VECTOR('',#1114,1.); +#1114 = DIRECTION('',(1.,0.,-0.)); +#1115 = ORIENTED_EDGE('',*,*,#1063,.F.); +#1116 = PLANE('',#1117); +#1117 = AXIS2_PLACEMENT_3D('',#1118,#1119,#1120); +#1118 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1119 = DIRECTION('',(-0.,1.,0.)); #1120 = DIRECTION('',(0.,0.,1.)); -#1121 = DIRECTION('',(1.,0.,-0.)); -#1122 = ADVANCED_FACE('',(#1123),#1129,.T.); -#1123 = FACE_BOUND('',#1124,.T.); -#1124 = EDGE_LOOP('',(#1125,#1126,#1127,#1128)); -#1125 = ORIENTED_EDGE('',*,*,#1016,.F.); -#1126 = ORIENTED_EDGE('',*,*,#1077,.T.); -#1127 = ORIENTED_EDGE('',*,*,#1056,.T.); -#1128 = ORIENTED_EDGE('',*,*,#1099,.F.); -#1129 = PLANE('',#1130); -#1130 = AXIS2_PLACEMENT_3D('',#1131,#1132,#1133); -#1131 = CARTESIAN_POINT('',(-68.,-30.,156.)); -#1132 = DIRECTION('',(0.,0.,1.)); -#1133 = DIRECTION('',(1.,0.,-0.)); -#1134 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1138)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1135,#1136,#1137)) REPRESENTATION_CONTEXT +#1121 = ADVANCED_FACE('',(#1122),#1138,.T.); +#1122 = FACE_BOUND('',#1123,.T.); +#1123 = EDGE_LOOP('',(#1124,#1130,#1131,#1137)); +#1124 = ORIENTED_EDGE('',*,*,#1125,.F.); +#1125 = EDGE_CURVE('',#1034,#1074,#1126,.T.); +#1126 = LINE('',#1127,#1128); +#1127 = CARTESIAN_POINT('',(2.8,-28.2,24.)); +#1128 = VECTOR('',#1129,1.); +#1129 = DIRECTION('',(1.,0.,-0.)); +#1130 = ORIENTED_EDGE('',*,*,#1041,.T.); +#1131 = ORIENTED_EDGE('',*,*,#1132,.T.); +#1132 = EDGE_CURVE('',#1042,#1082,#1133,.T.); +#1133 = LINE('',#1134,#1135); +#1134 = CARTESIAN_POINT('',(2.8,-28.2,156.)); +#1135 = VECTOR('',#1136,1.); +#1136 = DIRECTION('',(1.,0.,-0.)); +#1137 = ORIENTED_EDGE('',*,*,#1081,.F.); +#1138 = PLANE('',#1139); +#1139 = AXIS2_PLACEMENT_3D('',#1140,#1141,#1142); +#1140 = CARTESIAN_POINT('',(2.8,-28.2,24.)); +#1141 = DIRECTION('',(-0.,1.,0.)); +#1142 = DIRECTION('',(0.,0.,1.)); +#1143 = ADVANCED_FACE('',(#1144),#1150,.F.); +#1144 = FACE_BOUND('',#1145,.F.); +#1145 = EDGE_LOOP('',(#1146,#1147,#1148,#1149)); +#1146 = ORIENTED_EDGE('',*,*,#1033,.F.); +#1147 = ORIENTED_EDGE('',*,*,#1103,.T.); +#1148 = ORIENTED_EDGE('',*,*,#1073,.T.); +#1149 = ORIENTED_EDGE('',*,*,#1125,.F.); +#1150 = PLANE('',#1151); +#1151 = AXIS2_PLACEMENT_3D('',#1152,#1153,#1154); +#1152 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1153 = DIRECTION('',(0.,0.,1.)); +#1154 = DIRECTION('',(1.,0.,-0.)); +#1155 = ADVANCED_FACE('',(#1156),#1162,.T.); +#1156 = FACE_BOUND('',#1157,.T.); +#1157 = EDGE_LOOP('',(#1158,#1159,#1160,#1161)); +#1158 = ORIENTED_EDGE('',*,*,#1049,.F.); +#1159 = ORIENTED_EDGE('',*,*,#1110,.T.); +#1160 = ORIENTED_EDGE('',*,*,#1089,.T.); +#1161 = ORIENTED_EDGE('',*,*,#1132,.F.); +#1162 = PLANE('',#1163); +#1163 = AXIS2_PLACEMENT_3D('',#1164,#1165,#1166); +#1164 = CARTESIAN_POINT('',(2.8,-30.,156.)); +#1165 = DIRECTION('',(0.,0.,1.)); +#1166 = DIRECTION('',(1.,0.,-0.)); +#1167 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1171)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1168,#1169,#1170)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1135 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1136 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1137 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1138 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1135, +#1168 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1169 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1170 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1171 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1168, 'distance_accuracy_value','confusion accuracy'); -#1139 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1140,#1142); -#1140 = ( REPRESENTATION_RELATIONSHIP('','',#983,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1141) +#1172 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1173,#1175); +#1173 = ( REPRESENTATION_RELATIONSHIP('','',#1016,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1174) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1141 = ITEM_DEFINED_TRANSFORMATION('','',#11,#27); -#1142 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1143); -#1143 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','Panel_RecessLeftLine','',#5, - #978,$); -#1144 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#980)); -#1145 = SHAPE_DEFINITION_REPRESENTATION(#1146,#1152); -#1146 = PRODUCT_DEFINITION_SHAPE('','',#1147); -#1147 = PRODUCT_DEFINITION('design','',#1148,#1151); -#1148 = PRODUCT_DEFINITION_FORMATION('','',#1149); -#1149 = PRODUCT('Panel_RecessRightLine','Panel_RecessRightLine','',( - #1150)); -#1150 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1151 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1152 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1153),#1303); -#1153 = MANIFOLD_SOLID_BREP('',#1154); -#1154 = CLOSED_SHELL('',(#1155,#1195,#1235,#1257,#1279,#1291)); -#1155 = ADVANCED_FACE('',(#1156),#1190,.F.); -#1156 = FACE_BOUND('',#1157,.F.); -#1157 = EDGE_LOOP('',(#1158,#1168,#1176,#1184)); -#1158 = ORIENTED_EDGE('',*,*,#1159,.F.); -#1159 = EDGE_CURVE('',#1160,#1162,#1164,.T.); -#1160 = VERTEX_POINT('',#1161); -#1161 = CARTESIAN_POINT('',(2.8,-30.,24.)); -#1162 = VERTEX_POINT('',#1163); -#1163 = CARTESIAN_POINT('',(2.8,-30.,156.)); -#1164 = LINE('',#1165,#1166); -#1165 = CARTESIAN_POINT('',(2.8,-30.,24.)); -#1166 = VECTOR('',#1167,1.); -#1167 = DIRECTION('',(0.,0.,1.)); -#1168 = ORIENTED_EDGE('',*,*,#1169,.T.); -#1169 = EDGE_CURVE('',#1160,#1170,#1172,.T.); -#1170 = VERTEX_POINT('',#1171); -#1171 = CARTESIAN_POINT('',(2.8,-28.2,24.)); -#1172 = LINE('',#1173,#1174); -#1173 = CARTESIAN_POINT('',(2.8,-30.,24.)); -#1174 = VECTOR('',#1175,1.); -#1175 = DIRECTION('',(-0.,1.,0.)); -#1176 = ORIENTED_EDGE('',*,*,#1177,.T.); -#1177 = EDGE_CURVE('',#1170,#1178,#1180,.T.); -#1178 = VERTEX_POINT('',#1179); -#1179 = CARTESIAN_POINT('',(2.8,-28.2,156.)); -#1180 = LINE('',#1181,#1182); -#1181 = CARTESIAN_POINT('',(2.8,-28.2,24.)); -#1182 = VECTOR('',#1183,1.); -#1183 = DIRECTION('',(0.,0.,1.)); -#1184 = ORIENTED_EDGE('',*,*,#1185,.F.); -#1185 = EDGE_CURVE('',#1162,#1178,#1186,.T.); -#1186 = LINE('',#1187,#1188); -#1187 = CARTESIAN_POINT('',(2.8,-30.,156.)); -#1188 = VECTOR('',#1189,1.); -#1189 = DIRECTION('',(-0.,1.,0.)); -#1190 = PLANE('',#1191); -#1191 = AXIS2_PLACEMENT_3D('',#1192,#1193,#1194); -#1192 = CARTESIAN_POINT('',(2.8,-30.,24.)); -#1193 = DIRECTION('',(1.,0.,-0.)); -#1194 = DIRECTION('',(0.,0.,1.)); -#1195 = ADVANCED_FACE('',(#1196),#1230,.T.); -#1196 = FACE_BOUND('',#1197,.T.); -#1197 = EDGE_LOOP('',(#1198,#1208,#1216,#1224)); -#1198 = ORIENTED_EDGE('',*,*,#1199,.F.); -#1199 = EDGE_CURVE('',#1200,#1202,#1204,.T.); -#1200 = VERTEX_POINT('',#1201); -#1201 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1202 = VERTEX_POINT('',#1203); -#1203 = CARTESIAN_POINT('',(4.,-30.,156.)); -#1204 = LINE('',#1205,#1206); -#1205 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1206 = VECTOR('',#1207,1.); -#1207 = DIRECTION('',(0.,0.,1.)); -#1208 = ORIENTED_EDGE('',*,*,#1209,.T.); -#1209 = EDGE_CURVE('',#1200,#1210,#1212,.T.); -#1210 = VERTEX_POINT('',#1211); -#1211 = CARTESIAN_POINT('',(4.,-28.2,24.)); -#1212 = LINE('',#1213,#1214); -#1213 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1214 = VECTOR('',#1215,1.); -#1215 = DIRECTION('',(-0.,1.,0.)); -#1216 = ORIENTED_EDGE('',*,*,#1217,.T.); -#1217 = EDGE_CURVE('',#1210,#1218,#1220,.T.); -#1218 = VERTEX_POINT('',#1219); -#1219 = CARTESIAN_POINT('',(4.,-28.2,156.)); -#1220 = LINE('',#1221,#1222); -#1221 = CARTESIAN_POINT('',(4.,-28.2,24.)); -#1222 = VECTOR('',#1223,1.); -#1223 = DIRECTION('',(0.,0.,1.)); -#1224 = ORIENTED_EDGE('',*,*,#1225,.F.); -#1225 = EDGE_CURVE('',#1202,#1218,#1226,.T.); -#1226 = LINE('',#1227,#1228); -#1227 = CARTESIAN_POINT('',(4.,-30.,156.)); -#1228 = VECTOR('',#1229,1.); -#1229 = DIRECTION('',(-0.,1.,0.)); -#1230 = PLANE('',#1231); -#1231 = AXIS2_PLACEMENT_3D('',#1232,#1233,#1234); -#1232 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1233 = DIRECTION('',(1.,0.,-0.)); -#1234 = DIRECTION('',(0.,0.,1.)); -#1235 = ADVANCED_FACE('',(#1236),#1252,.F.); -#1236 = FACE_BOUND('',#1237,.F.); -#1237 = EDGE_LOOP('',(#1238,#1244,#1245,#1251)); -#1238 = ORIENTED_EDGE('',*,*,#1239,.F.); -#1239 = EDGE_CURVE('',#1160,#1200,#1240,.T.); -#1240 = LINE('',#1241,#1242); -#1241 = CARTESIAN_POINT('',(2.8,-30.,24.)); -#1242 = VECTOR('',#1243,1.); -#1243 = DIRECTION('',(1.,0.,-0.)); -#1244 = ORIENTED_EDGE('',*,*,#1159,.T.); -#1245 = ORIENTED_EDGE('',*,*,#1246,.T.); -#1246 = EDGE_CURVE('',#1162,#1202,#1247,.T.); -#1247 = LINE('',#1248,#1249); -#1248 = CARTESIAN_POINT('',(2.8,-30.,156.)); -#1249 = VECTOR('',#1250,1.); -#1250 = DIRECTION('',(1.,0.,-0.)); -#1251 = ORIENTED_EDGE('',*,*,#1199,.F.); -#1252 = PLANE('',#1253); -#1253 = AXIS2_PLACEMENT_3D('',#1254,#1255,#1256); -#1254 = CARTESIAN_POINT('',(2.8,-30.,24.)); -#1255 = DIRECTION('',(-0.,1.,0.)); +#1174 = ITEM_DEFINED_TRANSFORMATION('','',#11,#31); +#1175 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1176); +#1176 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','Panel_RecessRightLine','',#5 + ,#1011,$); +#1177 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1013)); +#1178 = SHAPE_DEFINITION_REPRESENTATION(#1179,#1185); +#1179 = PRODUCT_DEFINITION_SHAPE('','',#1180); +#1180 = PRODUCT_DEFINITION('design','',#1181,#1184); +#1181 = PRODUCT_DEFINITION_FORMATION('','',#1182); +#1182 = PRODUCT('Panel_RecessTopLine','Panel_RecessTopLine','',(#1183)); +#1183 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1184 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1185 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1186),#1336); +#1186 = MANIFOLD_SOLID_BREP('',#1187); +#1187 = CLOSED_SHELL('',(#1188,#1228,#1268,#1290,#1312,#1324)); +#1188 = ADVANCED_FACE('',(#1189),#1223,.F.); +#1189 = FACE_BOUND('',#1190,.F.); +#1190 = EDGE_LOOP('',(#1191,#1201,#1209,#1217)); +#1191 = ORIENTED_EDGE('',*,*,#1192,.F.); +#1192 = EDGE_CURVE('',#1193,#1195,#1197,.T.); +#1193 = VERTEX_POINT('',#1194); +#1194 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1195 = VERTEX_POINT('',#1196); +#1196 = CARTESIAN_POINT('',(-68.,-30.,156.2)); +#1197 = LINE('',#1198,#1199); +#1198 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1199 = VECTOR('',#1200,1.); +#1200 = DIRECTION('',(0.,0.,1.)); +#1201 = ORIENTED_EDGE('',*,*,#1202,.T.); +#1202 = EDGE_CURVE('',#1193,#1203,#1205,.T.); +#1203 = VERTEX_POINT('',#1204); +#1204 = CARTESIAN_POINT('',(-68.,-28.2,155.)); +#1205 = LINE('',#1206,#1207); +#1206 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1207 = VECTOR('',#1208,1.); +#1208 = DIRECTION('',(-0.,1.,0.)); +#1209 = ORIENTED_EDGE('',*,*,#1210,.T.); +#1210 = EDGE_CURVE('',#1203,#1211,#1213,.T.); +#1211 = VERTEX_POINT('',#1212); +#1212 = CARTESIAN_POINT('',(-68.,-28.2,156.2)); +#1213 = LINE('',#1214,#1215); +#1214 = CARTESIAN_POINT('',(-68.,-28.2,155.)); +#1215 = VECTOR('',#1216,1.); +#1216 = DIRECTION('',(0.,0.,1.)); +#1217 = ORIENTED_EDGE('',*,*,#1218,.F.); +#1218 = EDGE_CURVE('',#1195,#1211,#1219,.T.); +#1219 = LINE('',#1220,#1221); +#1220 = CARTESIAN_POINT('',(-68.,-30.,156.2)); +#1221 = VECTOR('',#1222,1.); +#1222 = DIRECTION('',(-0.,1.,0.)); +#1223 = PLANE('',#1224); +#1224 = AXIS2_PLACEMENT_3D('',#1225,#1226,#1227); +#1225 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1226 = DIRECTION('',(1.,0.,-0.)); +#1227 = DIRECTION('',(0.,0.,1.)); +#1228 = ADVANCED_FACE('',(#1229),#1263,.T.); +#1229 = FACE_BOUND('',#1230,.T.); +#1230 = EDGE_LOOP('',(#1231,#1241,#1249,#1257)); +#1231 = ORIENTED_EDGE('',*,*,#1232,.F.); +#1232 = EDGE_CURVE('',#1233,#1235,#1237,.T.); +#1233 = VERTEX_POINT('',#1234); +#1234 = CARTESIAN_POINT('',(4.,-30.,155.)); +#1235 = VERTEX_POINT('',#1236); +#1236 = CARTESIAN_POINT('',(4.,-30.,156.2)); +#1237 = LINE('',#1238,#1239); +#1238 = CARTESIAN_POINT('',(4.,-30.,155.)); +#1239 = VECTOR('',#1240,1.); +#1240 = DIRECTION('',(0.,0.,1.)); +#1241 = ORIENTED_EDGE('',*,*,#1242,.T.); +#1242 = EDGE_CURVE('',#1233,#1243,#1245,.T.); +#1243 = VERTEX_POINT('',#1244); +#1244 = CARTESIAN_POINT('',(4.,-28.2,155.)); +#1245 = LINE('',#1246,#1247); +#1246 = CARTESIAN_POINT('',(4.,-30.,155.)); +#1247 = VECTOR('',#1248,1.); +#1248 = DIRECTION('',(-0.,1.,0.)); +#1249 = ORIENTED_EDGE('',*,*,#1250,.T.); +#1250 = EDGE_CURVE('',#1243,#1251,#1253,.T.); +#1251 = VERTEX_POINT('',#1252); +#1252 = CARTESIAN_POINT('',(4.,-28.2,156.2)); +#1253 = LINE('',#1254,#1255); +#1254 = CARTESIAN_POINT('',(4.,-28.2,155.)); +#1255 = VECTOR('',#1256,1.); #1256 = DIRECTION('',(0.,0.,1.)); -#1257 = ADVANCED_FACE('',(#1258),#1274,.T.); -#1258 = FACE_BOUND('',#1259,.T.); -#1259 = EDGE_LOOP('',(#1260,#1266,#1267,#1273)); -#1260 = ORIENTED_EDGE('',*,*,#1261,.F.); -#1261 = EDGE_CURVE('',#1170,#1210,#1262,.T.); -#1262 = LINE('',#1263,#1264); -#1263 = CARTESIAN_POINT('',(2.8,-28.2,24.)); -#1264 = VECTOR('',#1265,1.); -#1265 = DIRECTION('',(1.,0.,-0.)); -#1266 = ORIENTED_EDGE('',*,*,#1177,.T.); -#1267 = ORIENTED_EDGE('',*,*,#1268,.T.); -#1268 = EDGE_CURVE('',#1178,#1218,#1269,.T.); -#1269 = LINE('',#1270,#1271); -#1270 = CARTESIAN_POINT('',(2.8,-28.2,156.)); -#1271 = VECTOR('',#1272,1.); -#1272 = DIRECTION('',(1.,0.,-0.)); -#1273 = ORIENTED_EDGE('',*,*,#1217,.F.); -#1274 = PLANE('',#1275); -#1275 = AXIS2_PLACEMENT_3D('',#1276,#1277,#1278); -#1276 = CARTESIAN_POINT('',(2.8,-28.2,24.)); -#1277 = DIRECTION('',(-0.,1.,0.)); -#1278 = DIRECTION('',(0.,0.,1.)); -#1279 = ADVANCED_FACE('',(#1280),#1286,.F.); -#1280 = FACE_BOUND('',#1281,.F.); -#1281 = EDGE_LOOP('',(#1282,#1283,#1284,#1285)); -#1282 = ORIENTED_EDGE('',*,*,#1169,.F.); -#1283 = ORIENTED_EDGE('',*,*,#1239,.T.); -#1284 = ORIENTED_EDGE('',*,*,#1209,.T.); -#1285 = ORIENTED_EDGE('',*,*,#1261,.F.); -#1286 = PLANE('',#1287); -#1287 = AXIS2_PLACEMENT_3D('',#1288,#1289,#1290); -#1288 = CARTESIAN_POINT('',(2.8,-30.,24.)); +#1257 = ORIENTED_EDGE('',*,*,#1258,.F.); +#1258 = EDGE_CURVE('',#1235,#1251,#1259,.T.); +#1259 = LINE('',#1260,#1261); +#1260 = CARTESIAN_POINT('',(4.,-30.,156.2)); +#1261 = VECTOR('',#1262,1.); +#1262 = DIRECTION('',(-0.,1.,0.)); +#1263 = PLANE('',#1264); +#1264 = AXIS2_PLACEMENT_3D('',#1265,#1266,#1267); +#1265 = CARTESIAN_POINT('',(4.,-30.,155.)); +#1266 = DIRECTION('',(1.,0.,-0.)); +#1267 = DIRECTION('',(0.,0.,1.)); +#1268 = ADVANCED_FACE('',(#1269),#1285,.F.); +#1269 = FACE_BOUND('',#1270,.F.); +#1270 = EDGE_LOOP('',(#1271,#1277,#1278,#1284)); +#1271 = ORIENTED_EDGE('',*,*,#1272,.F.); +#1272 = EDGE_CURVE('',#1193,#1233,#1273,.T.); +#1273 = LINE('',#1274,#1275); +#1274 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1275 = VECTOR('',#1276,1.); +#1276 = DIRECTION('',(1.,0.,-0.)); +#1277 = ORIENTED_EDGE('',*,*,#1192,.T.); +#1278 = ORIENTED_EDGE('',*,*,#1279,.T.); +#1279 = EDGE_CURVE('',#1195,#1235,#1280,.T.); +#1280 = LINE('',#1281,#1282); +#1281 = CARTESIAN_POINT('',(-68.,-30.,156.2)); +#1282 = VECTOR('',#1283,1.); +#1283 = DIRECTION('',(1.,0.,-0.)); +#1284 = ORIENTED_EDGE('',*,*,#1232,.F.); +#1285 = PLANE('',#1286); +#1286 = AXIS2_PLACEMENT_3D('',#1287,#1288,#1289); +#1287 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1288 = DIRECTION('',(-0.,1.,0.)); #1289 = DIRECTION('',(0.,0.,1.)); -#1290 = DIRECTION('',(1.,0.,-0.)); -#1291 = ADVANCED_FACE('',(#1292),#1298,.T.); -#1292 = FACE_BOUND('',#1293,.T.); -#1293 = EDGE_LOOP('',(#1294,#1295,#1296,#1297)); -#1294 = ORIENTED_EDGE('',*,*,#1185,.F.); -#1295 = ORIENTED_EDGE('',*,*,#1246,.T.); -#1296 = ORIENTED_EDGE('',*,*,#1225,.T.); -#1297 = ORIENTED_EDGE('',*,*,#1268,.F.); -#1298 = PLANE('',#1299); -#1299 = AXIS2_PLACEMENT_3D('',#1300,#1301,#1302); -#1300 = CARTESIAN_POINT('',(2.8,-30.,156.)); -#1301 = DIRECTION('',(0.,0.,1.)); -#1302 = DIRECTION('',(1.,0.,-0.)); -#1303 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1307)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1304,#1305,#1306)) REPRESENTATION_CONTEXT +#1290 = ADVANCED_FACE('',(#1291),#1307,.T.); +#1291 = FACE_BOUND('',#1292,.T.); +#1292 = EDGE_LOOP('',(#1293,#1299,#1300,#1306)); +#1293 = ORIENTED_EDGE('',*,*,#1294,.F.); +#1294 = EDGE_CURVE('',#1203,#1243,#1295,.T.); +#1295 = LINE('',#1296,#1297); +#1296 = CARTESIAN_POINT('',(-68.,-28.2,155.)); +#1297 = VECTOR('',#1298,1.); +#1298 = DIRECTION('',(1.,0.,-0.)); +#1299 = ORIENTED_EDGE('',*,*,#1210,.T.); +#1300 = ORIENTED_EDGE('',*,*,#1301,.T.); +#1301 = EDGE_CURVE('',#1211,#1251,#1302,.T.); +#1302 = LINE('',#1303,#1304); +#1303 = CARTESIAN_POINT('',(-68.,-28.2,156.2)); +#1304 = VECTOR('',#1305,1.); +#1305 = DIRECTION('',(1.,0.,-0.)); +#1306 = ORIENTED_EDGE('',*,*,#1250,.F.); +#1307 = PLANE('',#1308); +#1308 = AXIS2_PLACEMENT_3D('',#1309,#1310,#1311); +#1309 = CARTESIAN_POINT('',(-68.,-28.2,155.)); +#1310 = DIRECTION('',(-0.,1.,0.)); +#1311 = DIRECTION('',(0.,0.,1.)); +#1312 = ADVANCED_FACE('',(#1313),#1319,.F.); +#1313 = FACE_BOUND('',#1314,.F.); +#1314 = EDGE_LOOP('',(#1315,#1316,#1317,#1318)); +#1315 = ORIENTED_EDGE('',*,*,#1202,.F.); +#1316 = ORIENTED_EDGE('',*,*,#1272,.T.); +#1317 = ORIENTED_EDGE('',*,*,#1242,.T.); +#1318 = ORIENTED_EDGE('',*,*,#1294,.F.); +#1319 = PLANE('',#1320); +#1320 = AXIS2_PLACEMENT_3D('',#1321,#1322,#1323); +#1321 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1322 = DIRECTION('',(0.,0.,1.)); +#1323 = DIRECTION('',(1.,0.,-0.)); +#1324 = ADVANCED_FACE('',(#1325),#1331,.T.); +#1325 = FACE_BOUND('',#1326,.T.); +#1326 = EDGE_LOOP('',(#1327,#1328,#1329,#1330)); +#1327 = ORIENTED_EDGE('',*,*,#1218,.F.); +#1328 = ORIENTED_EDGE('',*,*,#1279,.T.); +#1329 = ORIENTED_EDGE('',*,*,#1258,.T.); +#1330 = ORIENTED_EDGE('',*,*,#1301,.F.); +#1331 = PLANE('',#1332); +#1332 = AXIS2_PLACEMENT_3D('',#1333,#1334,#1335); +#1333 = CARTESIAN_POINT('',(-68.,-30.,156.2)); +#1334 = DIRECTION('',(0.,0.,1.)); +#1335 = DIRECTION('',(1.,0.,-0.)); +#1336 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1340)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1337,#1338,#1339)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1304 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1305 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1306 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1307 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1304, +#1337 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1338 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1339 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1340 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1337, 'distance_accuracy_value','confusion accuracy'); -#1308 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1309,#1311); -#1309 = ( REPRESENTATION_RELATIONSHIP('','',#1152,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1310) +#1341 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1342,#1344); +#1342 = ( REPRESENTATION_RELATIONSHIP('','',#1185,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1343) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1310 = ITEM_DEFINED_TRANSFORMATION('','',#11,#31); -#1311 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1312); -#1312 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','Panel_RecessRightLine','',#5 - ,#1147,$); -#1313 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1149)); -#1314 = SHAPE_DEFINITION_REPRESENTATION(#1315,#1321); -#1315 = PRODUCT_DEFINITION_SHAPE('','',#1316); -#1316 = PRODUCT_DEFINITION('design','',#1317,#1320); -#1317 = PRODUCT_DEFINITION_FORMATION('','',#1318); -#1318 = PRODUCT('Panel_RecessTopLine','Panel_RecessTopLine','',(#1319)); -#1319 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1320 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1321 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1322),#1472); -#1322 = MANIFOLD_SOLID_BREP('',#1323); -#1323 = CLOSED_SHELL('',(#1324,#1364,#1404,#1426,#1448,#1460)); -#1324 = ADVANCED_FACE('',(#1325),#1359,.F.); -#1325 = FACE_BOUND('',#1326,.F.); -#1326 = EDGE_LOOP('',(#1327,#1337,#1345,#1353)); -#1327 = ORIENTED_EDGE('',*,*,#1328,.F.); -#1328 = EDGE_CURVE('',#1329,#1331,#1333,.T.); -#1329 = VERTEX_POINT('',#1330); -#1330 = CARTESIAN_POINT('',(-68.,-30.,155.)); -#1331 = VERTEX_POINT('',#1332); -#1332 = CARTESIAN_POINT('',(-68.,-30.,156.2)); -#1333 = LINE('',#1334,#1335); -#1334 = CARTESIAN_POINT('',(-68.,-30.,155.)); -#1335 = VECTOR('',#1336,1.); -#1336 = DIRECTION('',(0.,0.,1.)); -#1337 = ORIENTED_EDGE('',*,*,#1338,.T.); -#1338 = EDGE_CURVE('',#1329,#1339,#1341,.T.); -#1339 = VERTEX_POINT('',#1340); -#1340 = CARTESIAN_POINT('',(-68.,-28.2,155.)); -#1341 = LINE('',#1342,#1343); -#1342 = CARTESIAN_POINT('',(-68.,-30.,155.)); -#1343 = VECTOR('',#1344,1.); -#1344 = DIRECTION('',(-0.,1.,0.)); -#1345 = ORIENTED_EDGE('',*,*,#1346,.T.); -#1346 = EDGE_CURVE('',#1339,#1347,#1349,.T.); -#1347 = VERTEX_POINT('',#1348); -#1348 = CARTESIAN_POINT('',(-68.,-28.2,156.2)); -#1349 = LINE('',#1350,#1351); -#1350 = CARTESIAN_POINT('',(-68.,-28.2,155.)); -#1351 = VECTOR('',#1352,1.); -#1352 = DIRECTION('',(0.,0.,1.)); -#1353 = ORIENTED_EDGE('',*,*,#1354,.F.); -#1354 = EDGE_CURVE('',#1331,#1347,#1355,.T.); -#1355 = LINE('',#1356,#1357); -#1356 = CARTESIAN_POINT('',(-68.,-30.,156.2)); -#1357 = VECTOR('',#1358,1.); -#1358 = DIRECTION('',(-0.,1.,0.)); -#1359 = PLANE('',#1360); -#1360 = AXIS2_PLACEMENT_3D('',#1361,#1362,#1363); -#1361 = CARTESIAN_POINT('',(-68.,-30.,155.)); -#1362 = DIRECTION('',(1.,0.,-0.)); -#1363 = DIRECTION('',(0.,0.,1.)); -#1364 = ADVANCED_FACE('',(#1365),#1399,.T.); -#1365 = FACE_BOUND('',#1366,.T.); -#1366 = EDGE_LOOP('',(#1367,#1377,#1385,#1393)); -#1367 = ORIENTED_EDGE('',*,*,#1368,.F.); -#1368 = EDGE_CURVE('',#1369,#1371,#1373,.T.); -#1369 = VERTEX_POINT('',#1370); -#1370 = CARTESIAN_POINT('',(4.,-30.,155.)); -#1371 = VERTEX_POINT('',#1372); -#1372 = CARTESIAN_POINT('',(4.,-30.,156.2)); -#1373 = LINE('',#1374,#1375); -#1374 = CARTESIAN_POINT('',(4.,-30.,155.)); -#1375 = VECTOR('',#1376,1.); -#1376 = DIRECTION('',(0.,0.,1.)); -#1377 = ORIENTED_EDGE('',*,*,#1378,.T.); -#1378 = EDGE_CURVE('',#1369,#1379,#1381,.T.); -#1379 = VERTEX_POINT('',#1380); -#1380 = CARTESIAN_POINT('',(4.,-28.2,155.)); -#1381 = LINE('',#1382,#1383); -#1382 = CARTESIAN_POINT('',(4.,-30.,155.)); -#1383 = VECTOR('',#1384,1.); -#1384 = DIRECTION('',(-0.,1.,0.)); -#1385 = ORIENTED_EDGE('',*,*,#1386,.T.); -#1386 = EDGE_CURVE('',#1379,#1387,#1389,.T.); -#1387 = VERTEX_POINT('',#1388); -#1388 = CARTESIAN_POINT('',(4.,-28.2,156.2)); -#1389 = LINE('',#1390,#1391); -#1390 = CARTESIAN_POINT('',(4.,-28.2,155.)); -#1391 = VECTOR('',#1392,1.); -#1392 = DIRECTION('',(0.,0.,1.)); -#1393 = ORIENTED_EDGE('',*,*,#1394,.F.); -#1394 = EDGE_CURVE('',#1371,#1387,#1395,.T.); -#1395 = LINE('',#1396,#1397); -#1396 = CARTESIAN_POINT('',(4.,-30.,156.2)); -#1397 = VECTOR('',#1398,1.); -#1398 = DIRECTION('',(-0.,1.,0.)); -#1399 = PLANE('',#1400); -#1400 = AXIS2_PLACEMENT_3D('',#1401,#1402,#1403); -#1401 = CARTESIAN_POINT('',(4.,-30.,155.)); -#1402 = DIRECTION('',(1.,0.,-0.)); -#1403 = DIRECTION('',(0.,0.,1.)); -#1404 = ADVANCED_FACE('',(#1405),#1421,.F.); -#1405 = FACE_BOUND('',#1406,.F.); -#1406 = EDGE_LOOP('',(#1407,#1413,#1414,#1420)); -#1407 = ORIENTED_EDGE('',*,*,#1408,.F.); -#1408 = EDGE_CURVE('',#1329,#1369,#1409,.T.); -#1409 = LINE('',#1410,#1411); -#1410 = CARTESIAN_POINT('',(-68.,-30.,155.)); -#1411 = VECTOR('',#1412,1.); -#1412 = DIRECTION('',(1.,0.,-0.)); -#1413 = ORIENTED_EDGE('',*,*,#1328,.T.); -#1414 = ORIENTED_EDGE('',*,*,#1415,.T.); -#1415 = EDGE_CURVE('',#1331,#1371,#1416,.T.); -#1416 = LINE('',#1417,#1418); -#1417 = CARTESIAN_POINT('',(-68.,-30.,156.2)); -#1418 = VECTOR('',#1419,1.); -#1419 = DIRECTION('',(1.,0.,-0.)); -#1420 = ORIENTED_EDGE('',*,*,#1368,.F.); -#1421 = PLANE('',#1422); -#1422 = AXIS2_PLACEMENT_3D('',#1423,#1424,#1425); -#1423 = CARTESIAN_POINT('',(-68.,-30.,155.)); -#1424 = DIRECTION('',(-0.,1.,0.)); +#1343 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35); +#1344 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1345); +#1345 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','Panel_RecessTopLine','',#5, + #1180,$); +#1346 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1182)); +#1347 = SHAPE_DEFINITION_REPRESENTATION(#1348,#1354); +#1348 = PRODUCT_DEFINITION_SHAPE('','',#1349); +#1349 = PRODUCT_DEFINITION('design','',#1350,#1353); +#1350 = PRODUCT_DEFINITION_FORMATION('','',#1351); +#1351 = PRODUCT('Panel_RecessBottomLine','Panel_RecessBottomLine','',( + #1352)); +#1352 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1353 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1354 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1355),#1505); +#1355 = MANIFOLD_SOLID_BREP('',#1356); +#1356 = CLOSED_SHELL('',(#1357,#1397,#1437,#1459,#1481,#1493)); +#1357 = ADVANCED_FACE('',(#1358),#1392,.F.); +#1358 = FACE_BOUND('',#1359,.F.); +#1359 = EDGE_LOOP('',(#1360,#1370,#1378,#1386)); +#1360 = ORIENTED_EDGE('',*,*,#1361,.F.); +#1361 = EDGE_CURVE('',#1362,#1364,#1366,.T.); +#1362 = VERTEX_POINT('',#1363); +#1363 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1364 = VERTEX_POINT('',#1365); +#1365 = CARTESIAN_POINT('',(-68.,-30.,25.2)); +#1366 = LINE('',#1367,#1368); +#1367 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1368 = VECTOR('',#1369,1.); +#1369 = DIRECTION('',(0.,0.,1.)); +#1370 = ORIENTED_EDGE('',*,*,#1371,.T.); +#1371 = EDGE_CURVE('',#1362,#1372,#1374,.T.); +#1372 = VERTEX_POINT('',#1373); +#1373 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#1374 = LINE('',#1375,#1376); +#1375 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1376 = VECTOR('',#1377,1.); +#1377 = DIRECTION('',(-0.,1.,0.)); +#1378 = ORIENTED_EDGE('',*,*,#1379,.T.); +#1379 = EDGE_CURVE('',#1372,#1380,#1382,.T.); +#1380 = VERTEX_POINT('',#1381); +#1381 = CARTESIAN_POINT('',(-68.,-28.2,25.2)); +#1382 = LINE('',#1383,#1384); +#1383 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#1384 = VECTOR('',#1385,1.); +#1385 = DIRECTION('',(0.,0.,1.)); +#1386 = ORIENTED_EDGE('',*,*,#1387,.F.); +#1387 = EDGE_CURVE('',#1364,#1380,#1388,.T.); +#1388 = LINE('',#1389,#1390); +#1389 = CARTESIAN_POINT('',(-68.,-30.,25.2)); +#1390 = VECTOR('',#1391,1.); +#1391 = DIRECTION('',(-0.,1.,0.)); +#1392 = PLANE('',#1393); +#1393 = AXIS2_PLACEMENT_3D('',#1394,#1395,#1396); +#1394 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1395 = DIRECTION('',(1.,0.,-0.)); +#1396 = DIRECTION('',(0.,0.,1.)); +#1397 = ADVANCED_FACE('',(#1398),#1432,.T.); +#1398 = FACE_BOUND('',#1399,.T.); +#1399 = EDGE_LOOP('',(#1400,#1410,#1418,#1426)); +#1400 = ORIENTED_EDGE('',*,*,#1401,.F.); +#1401 = EDGE_CURVE('',#1402,#1404,#1406,.T.); +#1402 = VERTEX_POINT('',#1403); +#1403 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1404 = VERTEX_POINT('',#1405); +#1405 = CARTESIAN_POINT('',(4.,-30.,25.2)); +#1406 = LINE('',#1407,#1408); +#1407 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1408 = VECTOR('',#1409,1.); +#1409 = DIRECTION('',(0.,0.,1.)); +#1410 = ORIENTED_EDGE('',*,*,#1411,.T.); +#1411 = EDGE_CURVE('',#1402,#1412,#1414,.T.); +#1412 = VERTEX_POINT('',#1413); +#1413 = CARTESIAN_POINT('',(4.,-28.2,24.)); +#1414 = LINE('',#1415,#1416); +#1415 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1416 = VECTOR('',#1417,1.); +#1417 = DIRECTION('',(-0.,1.,0.)); +#1418 = ORIENTED_EDGE('',*,*,#1419,.T.); +#1419 = EDGE_CURVE('',#1412,#1420,#1422,.T.); +#1420 = VERTEX_POINT('',#1421); +#1421 = CARTESIAN_POINT('',(4.,-28.2,25.2)); +#1422 = LINE('',#1423,#1424); +#1423 = CARTESIAN_POINT('',(4.,-28.2,24.)); +#1424 = VECTOR('',#1425,1.); #1425 = DIRECTION('',(0.,0.,1.)); -#1426 = ADVANCED_FACE('',(#1427),#1443,.T.); -#1427 = FACE_BOUND('',#1428,.T.); -#1428 = EDGE_LOOP('',(#1429,#1435,#1436,#1442)); -#1429 = ORIENTED_EDGE('',*,*,#1430,.F.); -#1430 = EDGE_CURVE('',#1339,#1379,#1431,.T.); -#1431 = LINE('',#1432,#1433); -#1432 = CARTESIAN_POINT('',(-68.,-28.2,155.)); -#1433 = VECTOR('',#1434,1.); -#1434 = DIRECTION('',(1.,0.,-0.)); -#1435 = ORIENTED_EDGE('',*,*,#1346,.T.); -#1436 = ORIENTED_EDGE('',*,*,#1437,.T.); -#1437 = EDGE_CURVE('',#1347,#1387,#1438,.T.); -#1438 = LINE('',#1439,#1440); -#1439 = CARTESIAN_POINT('',(-68.,-28.2,156.2)); -#1440 = VECTOR('',#1441,1.); -#1441 = DIRECTION('',(1.,0.,-0.)); -#1442 = ORIENTED_EDGE('',*,*,#1386,.F.); -#1443 = PLANE('',#1444); -#1444 = AXIS2_PLACEMENT_3D('',#1445,#1446,#1447); -#1445 = CARTESIAN_POINT('',(-68.,-28.2,155.)); -#1446 = DIRECTION('',(-0.,1.,0.)); -#1447 = DIRECTION('',(0.,0.,1.)); -#1448 = ADVANCED_FACE('',(#1449),#1455,.F.); -#1449 = FACE_BOUND('',#1450,.F.); -#1450 = EDGE_LOOP('',(#1451,#1452,#1453,#1454)); -#1451 = ORIENTED_EDGE('',*,*,#1338,.F.); -#1452 = ORIENTED_EDGE('',*,*,#1408,.T.); -#1453 = ORIENTED_EDGE('',*,*,#1378,.T.); -#1454 = ORIENTED_EDGE('',*,*,#1430,.F.); -#1455 = PLANE('',#1456); -#1456 = AXIS2_PLACEMENT_3D('',#1457,#1458,#1459); -#1457 = CARTESIAN_POINT('',(-68.,-30.,155.)); +#1426 = ORIENTED_EDGE('',*,*,#1427,.F.); +#1427 = EDGE_CURVE('',#1404,#1420,#1428,.T.); +#1428 = LINE('',#1429,#1430); +#1429 = CARTESIAN_POINT('',(4.,-30.,25.2)); +#1430 = VECTOR('',#1431,1.); +#1431 = DIRECTION('',(-0.,1.,0.)); +#1432 = PLANE('',#1433); +#1433 = AXIS2_PLACEMENT_3D('',#1434,#1435,#1436); +#1434 = CARTESIAN_POINT('',(4.,-30.,24.)); +#1435 = DIRECTION('',(1.,0.,-0.)); +#1436 = DIRECTION('',(0.,0.,1.)); +#1437 = ADVANCED_FACE('',(#1438),#1454,.F.); +#1438 = FACE_BOUND('',#1439,.F.); +#1439 = EDGE_LOOP('',(#1440,#1446,#1447,#1453)); +#1440 = ORIENTED_EDGE('',*,*,#1441,.F.); +#1441 = EDGE_CURVE('',#1362,#1402,#1442,.T.); +#1442 = LINE('',#1443,#1444); +#1443 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1444 = VECTOR('',#1445,1.); +#1445 = DIRECTION('',(1.,0.,-0.)); +#1446 = ORIENTED_EDGE('',*,*,#1361,.T.); +#1447 = ORIENTED_EDGE('',*,*,#1448,.T.); +#1448 = EDGE_CURVE('',#1364,#1404,#1449,.T.); +#1449 = LINE('',#1450,#1451); +#1450 = CARTESIAN_POINT('',(-68.,-30.,25.2)); +#1451 = VECTOR('',#1452,1.); +#1452 = DIRECTION('',(1.,0.,-0.)); +#1453 = ORIENTED_EDGE('',*,*,#1401,.F.); +#1454 = PLANE('',#1455); +#1455 = AXIS2_PLACEMENT_3D('',#1456,#1457,#1458); +#1456 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1457 = DIRECTION('',(-0.,1.,0.)); #1458 = DIRECTION('',(0.,0.,1.)); -#1459 = DIRECTION('',(1.,0.,-0.)); -#1460 = ADVANCED_FACE('',(#1461),#1467,.T.); -#1461 = FACE_BOUND('',#1462,.T.); -#1462 = EDGE_LOOP('',(#1463,#1464,#1465,#1466)); -#1463 = ORIENTED_EDGE('',*,*,#1354,.F.); -#1464 = ORIENTED_EDGE('',*,*,#1415,.T.); -#1465 = ORIENTED_EDGE('',*,*,#1394,.T.); -#1466 = ORIENTED_EDGE('',*,*,#1437,.F.); -#1467 = PLANE('',#1468); -#1468 = AXIS2_PLACEMENT_3D('',#1469,#1470,#1471); -#1469 = CARTESIAN_POINT('',(-68.,-30.,156.2)); -#1470 = DIRECTION('',(0.,0.,1.)); -#1471 = DIRECTION('',(1.,0.,-0.)); -#1472 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1476)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1473,#1474,#1475)) REPRESENTATION_CONTEXT +#1459 = ADVANCED_FACE('',(#1460),#1476,.T.); +#1460 = FACE_BOUND('',#1461,.T.); +#1461 = EDGE_LOOP('',(#1462,#1468,#1469,#1475)); +#1462 = ORIENTED_EDGE('',*,*,#1463,.F.); +#1463 = EDGE_CURVE('',#1372,#1412,#1464,.T.); +#1464 = LINE('',#1465,#1466); +#1465 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#1466 = VECTOR('',#1467,1.); +#1467 = DIRECTION('',(1.,0.,-0.)); +#1468 = ORIENTED_EDGE('',*,*,#1379,.T.); +#1469 = ORIENTED_EDGE('',*,*,#1470,.T.); +#1470 = EDGE_CURVE('',#1380,#1420,#1471,.T.); +#1471 = LINE('',#1472,#1473); +#1472 = CARTESIAN_POINT('',(-68.,-28.2,25.2)); +#1473 = VECTOR('',#1474,1.); +#1474 = DIRECTION('',(1.,0.,-0.)); +#1475 = ORIENTED_EDGE('',*,*,#1419,.F.); +#1476 = PLANE('',#1477); +#1477 = AXIS2_PLACEMENT_3D('',#1478,#1479,#1480); +#1478 = CARTESIAN_POINT('',(-68.,-28.2,24.)); +#1479 = DIRECTION('',(-0.,1.,0.)); +#1480 = DIRECTION('',(0.,0.,1.)); +#1481 = ADVANCED_FACE('',(#1482),#1488,.F.); +#1482 = FACE_BOUND('',#1483,.F.); +#1483 = EDGE_LOOP('',(#1484,#1485,#1486,#1487)); +#1484 = ORIENTED_EDGE('',*,*,#1371,.F.); +#1485 = ORIENTED_EDGE('',*,*,#1441,.T.); +#1486 = ORIENTED_EDGE('',*,*,#1411,.T.); +#1487 = ORIENTED_EDGE('',*,*,#1463,.F.); +#1488 = PLANE('',#1489); +#1489 = AXIS2_PLACEMENT_3D('',#1490,#1491,#1492); +#1490 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1491 = DIRECTION('',(0.,0.,1.)); +#1492 = DIRECTION('',(1.,0.,-0.)); +#1493 = ADVANCED_FACE('',(#1494),#1500,.T.); +#1494 = FACE_BOUND('',#1495,.T.); +#1495 = EDGE_LOOP('',(#1496,#1497,#1498,#1499)); +#1496 = ORIENTED_EDGE('',*,*,#1387,.F.); +#1497 = ORIENTED_EDGE('',*,*,#1448,.T.); +#1498 = ORIENTED_EDGE('',*,*,#1427,.T.); +#1499 = ORIENTED_EDGE('',*,*,#1470,.F.); +#1500 = PLANE('',#1501); +#1501 = AXIS2_PLACEMENT_3D('',#1502,#1503,#1504); +#1502 = CARTESIAN_POINT('',(-68.,-30.,25.2)); +#1503 = DIRECTION('',(0.,0.,1.)); +#1504 = DIRECTION('',(1.,0.,-0.)); +#1505 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1509)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1506,#1507,#1508)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1473 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1474 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1475 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1476 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1473, +#1506 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1507 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1508 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1509 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1506, 'distance_accuracy_value','confusion accuracy'); -#1477 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1478,#1480); -#1478 = ( REPRESENTATION_RELATIONSHIP('','',#1321,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1479) +#1510 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1511,#1513); +#1511 = ( REPRESENTATION_RELATIONSHIP('','',#1354,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1512) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1479 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35); -#1480 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1481); -#1481 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','Panel_RecessTopLine','',#5, - #1316,$); -#1482 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1318)); -#1483 = SHAPE_DEFINITION_REPRESENTATION(#1484,#1490); -#1484 = PRODUCT_DEFINITION_SHAPE('','',#1485); -#1485 = PRODUCT_DEFINITION('design','',#1486,#1489); -#1486 = PRODUCT_DEFINITION_FORMATION('','',#1487); -#1487 = PRODUCT('Panel_RecessBottomLine','Panel_RecessBottomLine','',( - #1488)); -#1488 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1489 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1490 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1491),#1641); -#1491 = MANIFOLD_SOLID_BREP('',#1492); -#1492 = CLOSED_SHELL('',(#1493,#1533,#1573,#1595,#1617,#1629)); -#1493 = ADVANCED_FACE('',(#1494),#1528,.F.); -#1494 = FACE_BOUND('',#1495,.F.); -#1495 = EDGE_LOOP('',(#1496,#1506,#1514,#1522)); -#1496 = ORIENTED_EDGE('',*,*,#1497,.F.); -#1497 = EDGE_CURVE('',#1498,#1500,#1502,.T.); -#1498 = VERTEX_POINT('',#1499); -#1499 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1500 = VERTEX_POINT('',#1501); -#1501 = CARTESIAN_POINT('',(-68.,-30.,25.2)); -#1502 = LINE('',#1503,#1504); -#1503 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1504 = VECTOR('',#1505,1.); -#1505 = DIRECTION('',(0.,0.,1.)); -#1506 = ORIENTED_EDGE('',*,*,#1507,.T.); -#1507 = EDGE_CURVE('',#1498,#1508,#1510,.T.); -#1508 = VERTEX_POINT('',#1509); -#1509 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1510 = LINE('',#1511,#1512); -#1511 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1512 = VECTOR('',#1513,1.); -#1513 = DIRECTION('',(-0.,1.,0.)); -#1514 = ORIENTED_EDGE('',*,*,#1515,.T.); -#1515 = EDGE_CURVE('',#1508,#1516,#1518,.T.); -#1516 = VERTEX_POINT('',#1517); -#1517 = CARTESIAN_POINT('',(-68.,-28.2,25.2)); -#1518 = LINE('',#1519,#1520); -#1519 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1520 = VECTOR('',#1521,1.); -#1521 = DIRECTION('',(0.,0.,1.)); -#1522 = ORIENTED_EDGE('',*,*,#1523,.F.); -#1523 = EDGE_CURVE('',#1500,#1516,#1524,.T.); -#1524 = LINE('',#1525,#1526); -#1525 = CARTESIAN_POINT('',(-68.,-30.,25.2)); -#1526 = VECTOR('',#1527,1.); -#1527 = DIRECTION('',(-0.,1.,0.)); -#1528 = PLANE('',#1529); -#1529 = AXIS2_PLACEMENT_3D('',#1530,#1531,#1532); -#1530 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1531 = DIRECTION('',(1.,0.,-0.)); -#1532 = DIRECTION('',(0.,0.,1.)); -#1533 = ADVANCED_FACE('',(#1534),#1568,.T.); -#1534 = FACE_BOUND('',#1535,.T.); -#1535 = EDGE_LOOP('',(#1536,#1546,#1554,#1562)); -#1536 = ORIENTED_EDGE('',*,*,#1537,.F.); -#1537 = EDGE_CURVE('',#1538,#1540,#1542,.T.); -#1538 = VERTEX_POINT('',#1539); -#1539 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1540 = VERTEX_POINT('',#1541); -#1541 = CARTESIAN_POINT('',(4.,-30.,25.2)); -#1542 = LINE('',#1543,#1544); -#1543 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1544 = VECTOR('',#1545,1.); -#1545 = DIRECTION('',(0.,0.,1.)); -#1546 = ORIENTED_EDGE('',*,*,#1547,.T.); -#1547 = EDGE_CURVE('',#1538,#1548,#1550,.T.); -#1548 = VERTEX_POINT('',#1549); -#1549 = CARTESIAN_POINT('',(4.,-28.2,24.)); -#1550 = LINE('',#1551,#1552); -#1551 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1552 = VECTOR('',#1553,1.); -#1553 = DIRECTION('',(-0.,1.,0.)); -#1554 = ORIENTED_EDGE('',*,*,#1555,.T.); -#1555 = EDGE_CURVE('',#1548,#1556,#1558,.T.); -#1556 = VERTEX_POINT('',#1557); -#1557 = CARTESIAN_POINT('',(4.,-28.2,25.2)); -#1558 = LINE('',#1559,#1560); -#1559 = CARTESIAN_POINT('',(4.,-28.2,24.)); -#1560 = VECTOR('',#1561,1.); -#1561 = DIRECTION('',(0.,0.,1.)); -#1562 = ORIENTED_EDGE('',*,*,#1563,.F.); -#1563 = EDGE_CURVE('',#1540,#1556,#1564,.T.); -#1564 = LINE('',#1565,#1566); -#1565 = CARTESIAN_POINT('',(4.,-30.,25.2)); -#1566 = VECTOR('',#1567,1.); -#1567 = DIRECTION('',(-0.,1.,0.)); -#1568 = PLANE('',#1569); -#1569 = AXIS2_PLACEMENT_3D('',#1570,#1571,#1572); -#1570 = CARTESIAN_POINT('',(4.,-30.,24.)); -#1571 = DIRECTION('',(1.,0.,-0.)); -#1572 = DIRECTION('',(0.,0.,1.)); -#1573 = ADVANCED_FACE('',(#1574),#1590,.F.); -#1574 = FACE_BOUND('',#1575,.F.); -#1575 = EDGE_LOOP('',(#1576,#1582,#1583,#1589)); -#1576 = ORIENTED_EDGE('',*,*,#1577,.F.); -#1577 = EDGE_CURVE('',#1498,#1538,#1578,.T.); -#1578 = LINE('',#1579,#1580); -#1579 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1580 = VECTOR('',#1581,1.); -#1581 = DIRECTION('',(1.,0.,-0.)); -#1582 = ORIENTED_EDGE('',*,*,#1497,.T.); -#1583 = ORIENTED_EDGE('',*,*,#1584,.T.); -#1584 = EDGE_CURVE('',#1500,#1540,#1585,.T.); -#1585 = LINE('',#1586,#1587); -#1586 = CARTESIAN_POINT('',(-68.,-30.,25.2)); -#1587 = VECTOR('',#1588,1.); -#1588 = DIRECTION('',(1.,0.,-0.)); -#1589 = ORIENTED_EDGE('',*,*,#1537,.F.); -#1590 = PLANE('',#1591); -#1591 = AXIS2_PLACEMENT_3D('',#1592,#1593,#1594); -#1592 = CARTESIAN_POINT('',(-68.,-30.,24.)); -#1593 = DIRECTION('',(-0.,1.,0.)); +#1512 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39); +#1513 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1514); +#1514 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','Panel_RecessBottomLine','', + #5,#1349,$); +#1515 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1351)); +#1516 = SHAPE_DEFINITION_REPRESENTATION(#1517,#1523); +#1517 = PRODUCT_DEFINITION_SHAPE('','',#1518); +#1518 = PRODUCT_DEFINITION('design','',#1519,#1522); +#1519 = PRODUCT_DEFINITION_FORMATION('','',#1520); +#1520 = PRODUCT('Panel_RightMountPlate','Panel_RightMountPlate','',( + #1521)); +#1521 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1522 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1523 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1524),#1674); +#1524 = MANIFOLD_SOLID_BREP('',#1525); +#1525 = CLOSED_SHELL('',(#1526,#1566,#1606,#1628,#1650,#1662)); +#1526 = ADVANCED_FACE('',(#1527),#1561,.F.); +#1527 = FACE_BOUND('',#1528,.F.); +#1528 = EDGE_LOOP('',(#1529,#1539,#1547,#1555)); +#1529 = ORIENTED_EDGE('',*,*,#1530,.F.); +#1530 = EDGE_CURVE('',#1531,#1533,#1535,.T.); +#1531 = VERTEX_POINT('',#1532); +#1532 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1533 = VERTEX_POINT('',#1534); +#1534 = CARTESIAN_POINT('',(-47.5,30.,174.)); +#1535 = LINE('',#1536,#1537); +#1536 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1537 = VECTOR('',#1538,1.); +#1538 = DIRECTION('',(0.,0.,1.)); +#1539 = ORIENTED_EDGE('',*,*,#1540,.T.); +#1540 = EDGE_CURVE('',#1531,#1541,#1543,.T.); +#1541 = VERTEX_POINT('',#1542); +#1542 = CARTESIAN_POINT('',(-47.5,36.,6.)); +#1543 = LINE('',#1544,#1545); +#1544 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1545 = VECTOR('',#1546,1.); +#1546 = DIRECTION('',(-0.,1.,0.)); +#1547 = ORIENTED_EDGE('',*,*,#1548,.T.); +#1548 = EDGE_CURVE('',#1541,#1549,#1551,.T.); +#1549 = VERTEX_POINT('',#1550); +#1550 = CARTESIAN_POINT('',(-47.5,36.,174.)); +#1551 = LINE('',#1552,#1553); +#1552 = CARTESIAN_POINT('',(-47.5,36.,6.)); +#1553 = VECTOR('',#1554,1.); +#1554 = DIRECTION('',(0.,0.,1.)); +#1555 = ORIENTED_EDGE('',*,*,#1556,.F.); +#1556 = EDGE_CURVE('',#1533,#1549,#1557,.T.); +#1557 = LINE('',#1558,#1559); +#1558 = CARTESIAN_POINT('',(-47.5,30.,174.)); +#1559 = VECTOR('',#1560,1.); +#1560 = DIRECTION('',(-0.,1.,0.)); +#1561 = PLANE('',#1562); +#1562 = AXIS2_PLACEMENT_3D('',#1563,#1564,#1565); +#1563 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1564 = DIRECTION('',(1.,0.,-0.)); +#1565 = DIRECTION('',(0.,0.,1.)); +#1566 = ADVANCED_FACE('',(#1567),#1601,.T.); +#1567 = FACE_BOUND('',#1568,.T.); +#1568 = EDGE_LOOP('',(#1569,#1579,#1587,#1595)); +#1569 = ORIENTED_EDGE('',*,*,#1570,.F.); +#1570 = EDGE_CURVE('',#1571,#1573,#1575,.T.); +#1571 = VERTEX_POINT('',#1572); +#1572 = CARTESIAN_POINT('',(-2.5,30.,6.)); +#1573 = VERTEX_POINT('',#1574); +#1574 = CARTESIAN_POINT('',(-2.5,30.,174.)); +#1575 = LINE('',#1576,#1577); +#1576 = CARTESIAN_POINT('',(-2.5,30.,6.)); +#1577 = VECTOR('',#1578,1.); +#1578 = DIRECTION('',(0.,0.,1.)); +#1579 = ORIENTED_EDGE('',*,*,#1580,.T.); +#1580 = EDGE_CURVE('',#1571,#1581,#1583,.T.); +#1581 = VERTEX_POINT('',#1582); +#1582 = CARTESIAN_POINT('',(-2.5,36.,6.)); +#1583 = LINE('',#1584,#1585); +#1584 = CARTESIAN_POINT('',(-2.5,30.,6.)); +#1585 = VECTOR('',#1586,1.); +#1586 = DIRECTION('',(-0.,1.,0.)); +#1587 = ORIENTED_EDGE('',*,*,#1588,.T.); +#1588 = EDGE_CURVE('',#1581,#1589,#1591,.T.); +#1589 = VERTEX_POINT('',#1590); +#1590 = CARTESIAN_POINT('',(-2.5,36.,174.)); +#1591 = LINE('',#1592,#1593); +#1592 = CARTESIAN_POINT('',(-2.5,36.,6.)); +#1593 = VECTOR('',#1594,1.); #1594 = DIRECTION('',(0.,0.,1.)); -#1595 = ADVANCED_FACE('',(#1596),#1612,.T.); -#1596 = FACE_BOUND('',#1597,.T.); -#1597 = EDGE_LOOP('',(#1598,#1604,#1605,#1611)); -#1598 = ORIENTED_EDGE('',*,*,#1599,.F.); -#1599 = EDGE_CURVE('',#1508,#1548,#1600,.T.); -#1600 = LINE('',#1601,#1602); -#1601 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1602 = VECTOR('',#1603,1.); -#1603 = DIRECTION('',(1.,0.,-0.)); -#1604 = ORIENTED_EDGE('',*,*,#1515,.T.); -#1605 = ORIENTED_EDGE('',*,*,#1606,.T.); -#1606 = EDGE_CURVE('',#1516,#1556,#1607,.T.); -#1607 = LINE('',#1608,#1609); -#1608 = CARTESIAN_POINT('',(-68.,-28.2,25.2)); -#1609 = VECTOR('',#1610,1.); -#1610 = DIRECTION('',(1.,0.,-0.)); -#1611 = ORIENTED_EDGE('',*,*,#1555,.F.); -#1612 = PLANE('',#1613); -#1613 = AXIS2_PLACEMENT_3D('',#1614,#1615,#1616); -#1614 = CARTESIAN_POINT('',(-68.,-28.2,24.)); -#1615 = DIRECTION('',(-0.,1.,0.)); -#1616 = DIRECTION('',(0.,0.,1.)); -#1617 = ADVANCED_FACE('',(#1618),#1624,.F.); -#1618 = FACE_BOUND('',#1619,.F.); -#1619 = EDGE_LOOP('',(#1620,#1621,#1622,#1623)); -#1620 = ORIENTED_EDGE('',*,*,#1507,.F.); -#1621 = ORIENTED_EDGE('',*,*,#1577,.T.); -#1622 = ORIENTED_EDGE('',*,*,#1547,.T.); -#1623 = ORIENTED_EDGE('',*,*,#1599,.F.); -#1624 = PLANE('',#1625); -#1625 = AXIS2_PLACEMENT_3D('',#1626,#1627,#1628); -#1626 = CARTESIAN_POINT('',(-68.,-30.,24.)); +#1595 = ORIENTED_EDGE('',*,*,#1596,.F.); +#1596 = EDGE_CURVE('',#1573,#1589,#1597,.T.); +#1597 = LINE('',#1598,#1599); +#1598 = CARTESIAN_POINT('',(-2.5,30.,174.)); +#1599 = VECTOR('',#1600,1.); +#1600 = DIRECTION('',(-0.,1.,0.)); +#1601 = PLANE('',#1602); +#1602 = AXIS2_PLACEMENT_3D('',#1603,#1604,#1605); +#1603 = CARTESIAN_POINT('',(-2.5,30.,6.)); +#1604 = DIRECTION('',(1.,0.,-0.)); +#1605 = DIRECTION('',(0.,0.,1.)); +#1606 = ADVANCED_FACE('',(#1607),#1623,.F.); +#1607 = FACE_BOUND('',#1608,.F.); +#1608 = EDGE_LOOP('',(#1609,#1615,#1616,#1622)); +#1609 = ORIENTED_EDGE('',*,*,#1610,.F.); +#1610 = EDGE_CURVE('',#1531,#1571,#1611,.T.); +#1611 = LINE('',#1612,#1613); +#1612 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1613 = VECTOR('',#1614,1.); +#1614 = DIRECTION('',(1.,0.,-0.)); +#1615 = ORIENTED_EDGE('',*,*,#1530,.T.); +#1616 = ORIENTED_EDGE('',*,*,#1617,.T.); +#1617 = EDGE_CURVE('',#1533,#1573,#1618,.T.); +#1618 = LINE('',#1619,#1620); +#1619 = CARTESIAN_POINT('',(-47.5,30.,174.)); +#1620 = VECTOR('',#1621,1.); +#1621 = DIRECTION('',(1.,0.,-0.)); +#1622 = ORIENTED_EDGE('',*,*,#1570,.F.); +#1623 = PLANE('',#1624); +#1624 = AXIS2_PLACEMENT_3D('',#1625,#1626,#1627); +#1625 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1626 = DIRECTION('',(-0.,1.,0.)); #1627 = DIRECTION('',(0.,0.,1.)); -#1628 = DIRECTION('',(1.,0.,-0.)); -#1629 = ADVANCED_FACE('',(#1630),#1636,.T.); -#1630 = FACE_BOUND('',#1631,.T.); -#1631 = EDGE_LOOP('',(#1632,#1633,#1634,#1635)); -#1632 = ORIENTED_EDGE('',*,*,#1523,.F.); -#1633 = ORIENTED_EDGE('',*,*,#1584,.T.); -#1634 = ORIENTED_EDGE('',*,*,#1563,.T.); -#1635 = ORIENTED_EDGE('',*,*,#1606,.F.); -#1636 = PLANE('',#1637); -#1637 = AXIS2_PLACEMENT_3D('',#1638,#1639,#1640); -#1638 = CARTESIAN_POINT('',(-68.,-30.,25.2)); -#1639 = DIRECTION('',(0.,0.,1.)); -#1640 = DIRECTION('',(1.,0.,-0.)); -#1641 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1645)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1642,#1643,#1644)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1642 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1643 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1644 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1645 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1642, - 'distance_accuracy_value','confusion accuracy'); -#1646 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1647,#1649); -#1647 = ( REPRESENTATION_RELATIONSHIP('','',#1490,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1648) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1648 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39); -#1649 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1650); -#1650 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','Panel_RecessBottomLine','', - #5,#1485,$); -#1651 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1487)); -#1652 = SHAPE_DEFINITION_REPRESENTATION(#1653,#1659); -#1653 = PRODUCT_DEFINITION_SHAPE('','',#1654); -#1654 = PRODUCT_DEFINITION('design','',#1655,#1658); -#1655 = PRODUCT_DEFINITION_FORMATION('','',#1656); -#1656 = PRODUCT('Panel_HingeTop','Panel_HingeTop','',(#1657)); -#1657 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1658 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1659 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1660),#1713); -#1660 = MANIFOLD_SOLID_BREP('',#1661); -#1661 = CLOSED_SHELL('',(#1662,#1695,#1704)); -#1662 = ADVANCED_FACE('',(#1663),#1690,.T.); +#1628 = ADVANCED_FACE('',(#1629),#1645,.T.); +#1629 = FACE_BOUND('',#1630,.T.); +#1630 = EDGE_LOOP('',(#1631,#1637,#1638,#1644)); +#1631 = ORIENTED_EDGE('',*,*,#1632,.F.); +#1632 = EDGE_CURVE('',#1541,#1581,#1633,.T.); +#1633 = LINE('',#1634,#1635); +#1634 = CARTESIAN_POINT('',(-47.5,36.,6.)); +#1635 = VECTOR('',#1636,1.); +#1636 = DIRECTION('',(1.,0.,-0.)); +#1637 = ORIENTED_EDGE('',*,*,#1548,.T.); +#1638 = ORIENTED_EDGE('',*,*,#1639,.T.); +#1639 = EDGE_CURVE('',#1549,#1589,#1640,.T.); +#1640 = LINE('',#1641,#1642); +#1641 = CARTESIAN_POINT('',(-47.5,36.,174.)); +#1642 = VECTOR('',#1643,1.); +#1643 = DIRECTION('',(1.,0.,-0.)); +#1644 = ORIENTED_EDGE('',*,*,#1588,.F.); +#1645 = PLANE('',#1646); +#1646 = AXIS2_PLACEMENT_3D('',#1647,#1648,#1649); +#1647 = CARTESIAN_POINT('',(-47.5,36.,6.)); +#1648 = DIRECTION('',(-0.,1.,0.)); +#1649 = DIRECTION('',(0.,0.,1.)); +#1650 = ADVANCED_FACE('',(#1651),#1657,.F.); +#1651 = FACE_BOUND('',#1652,.F.); +#1652 = EDGE_LOOP('',(#1653,#1654,#1655,#1656)); +#1653 = ORIENTED_EDGE('',*,*,#1540,.F.); +#1654 = ORIENTED_EDGE('',*,*,#1610,.T.); +#1655 = ORIENTED_EDGE('',*,*,#1580,.T.); +#1656 = ORIENTED_EDGE('',*,*,#1632,.F.); +#1657 = PLANE('',#1658); +#1658 = AXIS2_PLACEMENT_3D('',#1659,#1660,#1661); +#1659 = CARTESIAN_POINT('',(-47.5,30.,6.)); +#1660 = DIRECTION('',(0.,0.,1.)); +#1661 = DIRECTION('',(1.,0.,-0.)); +#1662 = ADVANCED_FACE('',(#1663),#1669,.T.); #1663 = FACE_BOUND('',#1664,.T.); -#1664 = EDGE_LOOP('',(#1665,#1674,#1682,#1689)); -#1665 = ORIENTED_EDGE('',*,*,#1666,.F.); -#1666 = EDGE_CURVE('',#1667,#1667,#1669,.T.); -#1667 = VERTEX_POINT('',#1668); -#1668 = CARTESIAN_POINT('',(-85.,-32.,131.7)); -#1669 = CIRCLE('',#1670,2.3); +#1664 = EDGE_LOOP('',(#1665,#1666,#1667,#1668)); +#1665 = ORIENTED_EDGE('',*,*,#1556,.F.); +#1666 = ORIENTED_EDGE('',*,*,#1617,.T.); +#1667 = ORIENTED_EDGE('',*,*,#1596,.T.); +#1668 = ORIENTED_EDGE('',*,*,#1639,.F.); +#1669 = PLANE('',#1670); #1670 = AXIS2_PLACEMENT_3D('',#1671,#1672,#1673); -#1671 = CARTESIAN_POINT('',(-85.,-32.,134.)); -#1672 = DIRECTION('',(0.,-1.,0.)); -#1673 = DIRECTION('',(0.,-0.,-1.)); -#1674 = ORIENTED_EDGE('',*,*,#1675,.F.); -#1675 = EDGE_CURVE('',#1676,#1667,#1678,.T.); -#1676 = VERTEX_POINT('',#1677); -#1677 = CARTESIAN_POINT('',(-85.,-31.,131.7)); -#1678 = LINE('',#1679,#1680); -#1679 = CARTESIAN_POINT('',(-85.,-31.,131.7)); -#1680 = VECTOR('',#1681,1.); -#1681 = DIRECTION('',(0.,-1.,0.)); -#1682 = ORIENTED_EDGE('',*,*,#1683,.T.); -#1683 = EDGE_CURVE('',#1676,#1676,#1684,.T.); -#1684 = CIRCLE('',#1685,2.3); -#1685 = AXIS2_PLACEMENT_3D('',#1686,#1687,#1688); -#1686 = CARTESIAN_POINT('',(-85.,-31.,134.)); -#1687 = DIRECTION('',(0.,-1.,0.)); -#1688 = DIRECTION('',(0.,-0.,-1.)); -#1689 = ORIENTED_EDGE('',*,*,#1675,.T.); -#1690 = CYLINDRICAL_SURFACE('',#1691,2.3); -#1691 = AXIS2_PLACEMENT_3D('',#1692,#1693,#1694); -#1692 = CARTESIAN_POINT('',(-85.,-31.,134.)); -#1693 = DIRECTION('',(0.,-1.,0.)); -#1694 = DIRECTION('',(0.,-0.,-1.)); -#1695 = ADVANCED_FACE('',(#1696),#1699,.T.); -#1696 = FACE_BOUND('',#1697,.T.); -#1697 = EDGE_LOOP('',(#1698)); -#1698 = ORIENTED_EDGE('',*,*,#1666,.T.); -#1699 = PLANE('',#1700); -#1700 = AXIS2_PLACEMENT_3D('',#1701,#1702,#1703); -#1701 = CARTESIAN_POINT('',(-85.,-32.,134.)); -#1702 = DIRECTION('',(0.,-1.,0.)); -#1703 = DIRECTION('',(0.,-0.,-1.)); -#1704 = ADVANCED_FACE('',(#1705),#1708,.F.); -#1705 = FACE_BOUND('',#1706,.T.); -#1706 = EDGE_LOOP('',(#1707)); -#1707 = ORIENTED_EDGE('',*,*,#1683,.F.); -#1708 = PLANE('',#1709); -#1709 = AXIS2_PLACEMENT_3D('',#1710,#1711,#1712); -#1710 = CARTESIAN_POINT('',(-85.,-31.,134.)); -#1711 = DIRECTION('',(0.,-1.,0.)); -#1712 = DIRECTION('',(0.,-0.,-1.)); -#1713 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1717)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1714,#1715,#1716)) REPRESENTATION_CONTEXT +#1671 = CARTESIAN_POINT('',(-47.5,30.,174.)); +#1672 = DIRECTION('',(0.,0.,1.)); +#1673 = DIRECTION('',(1.,0.,-0.)); +#1674 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1678)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1675,#1676,#1677)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1714 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1715 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1716 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1717 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1714, +#1675 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1676 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1677 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1678 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1675, 'distance_accuracy_value','confusion accuracy'); -#1718 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1719,#1721); -#1719 = ( REPRESENTATION_RELATIONSHIP('','',#1659,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1720) +#1679 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1680,#1682); +#1680 = ( REPRESENTATION_RELATIONSHIP('','',#1523,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1681) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1720 = ITEM_DEFINED_TRANSFORMATION('','',#11,#43); -#1721 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1722); -#1722 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('8','Panel_HingeTop','',#5,#1654, - $); -#1723 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1656)); -#1724 = SHAPE_DEFINITION_REPRESENTATION(#1725,#1731); -#1725 = PRODUCT_DEFINITION_SHAPE('','',#1726); -#1726 = PRODUCT_DEFINITION('design','',#1727,#1730); -#1727 = PRODUCT_DEFINITION_FORMATION('','',#1728); -#1728 = PRODUCT('Panel_HingeBottom','Panel_HingeBottom','',(#1729)); -#1729 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1730 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1731 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1732),#1785); -#1732 = MANIFOLD_SOLID_BREP('',#1733); -#1733 = CLOSED_SHELL('',(#1734,#1767,#1776)); -#1734 = ADVANCED_FACE('',(#1735),#1762,.T.); -#1735 = FACE_BOUND('',#1736,.T.); -#1736 = EDGE_LOOP('',(#1737,#1746,#1754,#1761)); -#1737 = ORIENTED_EDGE('',*,*,#1738,.F.); -#1738 = EDGE_CURVE('',#1739,#1739,#1741,.T.); -#1739 = VERTEX_POINT('',#1740); -#1740 = CARTESIAN_POINT('',(-85.,-32.,41.7)); -#1741 = CIRCLE('',#1742,2.3); -#1742 = AXIS2_PLACEMENT_3D('',#1743,#1744,#1745); -#1743 = CARTESIAN_POINT('',(-85.,-32.,44.)); -#1744 = DIRECTION('',(0.,-1.,0.)); -#1745 = DIRECTION('',(0.,-0.,-1.)); -#1746 = ORIENTED_EDGE('',*,*,#1747,.F.); -#1747 = EDGE_CURVE('',#1748,#1739,#1750,.T.); -#1748 = VERTEX_POINT('',#1749); -#1749 = CARTESIAN_POINT('',(-85.,-31.,41.7)); -#1750 = LINE('',#1751,#1752); -#1751 = CARTESIAN_POINT('',(-85.,-31.,41.7)); -#1752 = VECTOR('',#1753,1.); -#1753 = DIRECTION('',(0.,-1.,0.)); -#1754 = ORIENTED_EDGE('',*,*,#1755,.T.); -#1755 = EDGE_CURVE('',#1748,#1748,#1756,.T.); -#1756 = CIRCLE('',#1757,2.3); -#1757 = AXIS2_PLACEMENT_3D('',#1758,#1759,#1760); -#1758 = CARTESIAN_POINT('',(-85.,-31.,44.)); -#1759 = DIRECTION('',(0.,-1.,0.)); -#1760 = DIRECTION('',(0.,-0.,-1.)); -#1761 = ORIENTED_EDGE('',*,*,#1747,.T.); -#1762 = CYLINDRICAL_SURFACE('',#1763,2.3); -#1763 = AXIS2_PLACEMENT_3D('',#1764,#1765,#1766); -#1764 = CARTESIAN_POINT('',(-85.,-31.,44.)); -#1765 = DIRECTION('',(0.,-1.,0.)); -#1766 = DIRECTION('',(0.,-0.,-1.)); -#1767 = ADVANCED_FACE('',(#1768),#1771,.T.); -#1768 = FACE_BOUND('',#1769,.T.); -#1769 = EDGE_LOOP('',(#1770)); -#1770 = ORIENTED_EDGE('',*,*,#1738,.T.); -#1771 = PLANE('',#1772); -#1772 = AXIS2_PLACEMENT_3D('',#1773,#1774,#1775); -#1773 = CARTESIAN_POINT('',(-85.,-32.,44.)); -#1774 = DIRECTION('',(0.,-1.,0.)); -#1775 = DIRECTION('',(0.,-0.,-1.)); -#1776 = ADVANCED_FACE('',(#1777),#1780,.F.); -#1777 = FACE_BOUND('',#1778,.T.); -#1778 = EDGE_LOOP('',(#1779)); -#1779 = ORIENTED_EDGE('',*,*,#1755,.F.); -#1780 = PLANE('',#1781); -#1781 = AXIS2_PLACEMENT_3D('',#1782,#1783,#1784); -#1782 = CARTESIAN_POINT('',(-85.,-31.,44.)); -#1783 = DIRECTION('',(0.,-1.,0.)); -#1784 = DIRECTION('',(0.,-0.,-1.)); -#1785 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1789)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1786,#1787,#1788)) REPRESENTATION_CONTEXT +#1681 = ITEM_DEFINED_TRANSFORMATION('','',#11,#43); +#1682 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1683); +#1683 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('8','Panel_RightMountPlate','',#5 + ,#1518,$); +#1684 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1520)); +#1685 = SHAPE_DEFINITION_REPRESENTATION(#1686,#1692); +#1686 = PRODUCT_DEFINITION_SHAPE('','',#1687); +#1687 = PRODUCT_DEFINITION('design','',#1688,#1691); +#1688 = PRODUCT_DEFINITION_FORMATION('','',#1689); +#1689 = PRODUCT('ConnectorBank_Left_Body','ConnectorBank_Left_Body','',( + #1690)); +#1690 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1691 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1692 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1693),#1843); +#1693 = MANIFOLD_SOLID_BREP('',#1694); +#1694 = CLOSED_SHELL('',(#1695,#1735,#1775,#1797,#1819,#1831)); +#1695 = ADVANCED_FACE('',(#1696),#1730,.F.); +#1696 = FACE_BOUND('',#1697,.F.); +#1697 = EDGE_LOOP('',(#1698,#1708,#1716,#1724)); +#1698 = ORIENTED_EDGE('',*,*,#1699,.F.); +#1699 = EDGE_CURVE('',#1700,#1702,#1704,.T.); +#1700 = VERTEX_POINT('',#1701); +#1701 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1702 = VERTEX_POINT('',#1703); +#1703 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#1704 = LINE('',#1705,#1706); +#1705 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1706 = VECTOR('',#1707,1.); +#1707 = DIRECTION('',(0.,0.,1.)); +#1708 = ORIENTED_EDGE('',*,*,#1709,.T.); +#1709 = EDGE_CURVE('',#1700,#1710,#1712,.T.); +#1710 = VERTEX_POINT('',#1711); +#1711 = CARTESIAN_POINT('',(-42.5,40.,44.)); +#1712 = LINE('',#1713,#1714); +#1713 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1714 = VECTOR('',#1715,1.); +#1715 = DIRECTION('',(-0.,1.,0.)); +#1716 = ORIENTED_EDGE('',*,*,#1717,.T.); +#1717 = EDGE_CURVE('',#1710,#1718,#1720,.T.); +#1718 = VERTEX_POINT('',#1719); +#1719 = CARTESIAN_POINT('',(-42.5,40.,154.)); +#1720 = LINE('',#1721,#1722); +#1721 = CARTESIAN_POINT('',(-42.5,40.,44.)); +#1722 = VECTOR('',#1723,1.); +#1723 = DIRECTION('',(0.,0.,1.)); +#1724 = ORIENTED_EDGE('',*,*,#1725,.F.); +#1725 = EDGE_CURVE('',#1702,#1718,#1726,.T.); +#1726 = LINE('',#1727,#1728); +#1727 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#1728 = VECTOR('',#1729,1.); +#1729 = DIRECTION('',(-0.,1.,0.)); +#1730 = PLANE('',#1731); +#1731 = AXIS2_PLACEMENT_3D('',#1732,#1733,#1734); +#1732 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1733 = DIRECTION('',(1.,0.,-0.)); +#1734 = DIRECTION('',(0.,0.,1.)); +#1735 = ADVANCED_FACE('',(#1736),#1770,.T.); +#1736 = FACE_BOUND('',#1737,.T.); +#1737 = EDGE_LOOP('',(#1738,#1748,#1756,#1764)); +#1738 = ORIENTED_EDGE('',*,*,#1739,.F.); +#1739 = EDGE_CURVE('',#1740,#1742,#1744,.T.); +#1740 = VERTEX_POINT('',#1741); +#1741 = CARTESIAN_POINT('',(-24.5,36.,44.)); +#1742 = VERTEX_POINT('',#1743); +#1743 = CARTESIAN_POINT('',(-24.5,36.,154.)); +#1744 = LINE('',#1745,#1746); +#1745 = CARTESIAN_POINT('',(-24.5,36.,44.)); +#1746 = VECTOR('',#1747,1.); +#1747 = DIRECTION('',(0.,0.,1.)); +#1748 = ORIENTED_EDGE('',*,*,#1749,.T.); +#1749 = EDGE_CURVE('',#1740,#1750,#1752,.T.); +#1750 = VERTEX_POINT('',#1751); +#1751 = CARTESIAN_POINT('',(-24.5,40.,44.)); +#1752 = LINE('',#1753,#1754); +#1753 = CARTESIAN_POINT('',(-24.5,36.,44.)); +#1754 = VECTOR('',#1755,1.); +#1755 = DIRECTION('',(-0.,1.,0.)); +#1756 = ORIENTED_EDGE('',*,*,#1757,.T.); +#1757 = EDGE_CURVE('',#1750,#1758,#1760,.T.); +#1758 = VERTEX_POINT('',#1759); +#1759 = CARTESIAN_POINT('',(-24.5,40.,154.)); +#1760 = LINE('',#1761,#1762); +#1761 = CARTESIAN_POINT('',(-24.5,40.,44.)); +#1762 = VECTOR('',#1763,1.); +#1763 = DIRECTION('',(0.,0.,1.)); +#1764 = ORIENTED_EDGE('',*,*,#1765,.F.); +#1765 = EDGE_CURVE('',#1742,#1758,#1766,.T.); +#1766 = LINE('',#1767,#1768); +#1767 = CARTESIAN_POINT('',(-24.5,36.,154.)); +#1768 = VECTOR('',#1769,1.); +#1769 = DIRECTION('',(-0.,1.,0.)); +#1770 = PLANE('',#1771); +#1771 = AXIS2_PLACEMENT_3D('',#1772,#1773,#1774); +#1772 = CARTESIAN_POINT('',(-24.5,36.,44.)); +#1773 = DIRECTION('',(1.,0.,-0.)); +#1774 = DIRECTION('',(0.,0.,1.)); +#1775 = ADVANCED_FACE('',(#1776),#1792,.F.); +#1776 = FACE_BOUND('',#1777,.F.); +#1777 = EDGE_LOOP('',(#1778,#1784,#1785,#1791)); +#1778 = ORIENTED_EDGE('',*,*,#1779,.F.); +#1779 = EDGE_CURVE('',#1700,#1740,#1780,.T.); +#1780 = LINE('',#1781,#1782); +#1781 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1782 = VECTOR('',#1783,1.); +#1783 = DIRECTION('',(1.,0.,-0.)); +#1784 = ORIENTED_EDGE('',*,*,#1699,.T.); +#1785 = ORIENTED_EDGE('',*,*,#1786,.T.); +#1786 = EDGE_CURVE('',#1702,#1742,#1787,.T.); +#1787 = LINE('',#1788,#1789); +#1788 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#1789 = VECTOR('',#1790,1.); +#1790 = DIRECTION('',(1.,0.,-0.)); +#1791 = ORIENTED_EDGE('',*,*,#1739,.F.); +#1792 = PLANE('',#1793); +#1793 = AXIS2_PLACEMENT_3D('',#1794,#1795,#1796); +#1794 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1795 = DIRECTION('',(-0.,1.,0.)); +#1796 = DIRECTION('',(0.,0.,1.)); +#1797 = ADVANCED_FACE('',(#1798),#1814,.T.); +#1798 = FACE_BOUND('',#1799,.T.); +#1799 = EDGE_LOOP('',(#1800,#1806,#1807,#1813)); +#1800 = ORIENTED_EDGE('',*,*,#1801,.F.); +#1801 = EDGE_CURVE('',#1710,#1750,#1802,.T.); +#1802 = LINE('',#1803,#1804); +#1803 = CARTESIAN_POINT('',(-42.5,40.,44.)); +#1804 = VECTOR('',#1805,1.); +#1805 = DIRECTION('',(1.,0.,-0.)); +#1806 = ORIENTED_EDGE('',*,*,#1717,.T.); +#1807 = ORIENTED_EDGE('',*,*,#1808,.T.); +#1808 = EDGE_CURVE('',#1718,#1758,#1809,.T.); +#1809 = LINE('',#1810,#1811); +#1810 = CARTESIAN_POINT('',(-42.5,40.,154.)); +#1811 = VECTOR('',#1812,1.); +#1812 = DIRECTION('',(1.,0.,-0.)); +#1813 = ORIENTED_EDGE('',*,*,#1757,.F.); +#1814 = PLANE('',#1815); +#1815 = AXIS2_PLACEMENT_3D('',#1816,#1817,#1818); +#1816 = CARTESIAN_POINT('',(-42.5,40.,44.)); +#1817 = DIRECTION('',(-0.,1.,0.)); +#1818 = DIRECTION('',(0.,0.,1.)); +#1819 = ADVANCED_FACE('',(#1820),#1826,.F.); +#1820 = FACE_BOUND('',#1821,.F.); +#1821 = EDGE_LOOP('',(#1822,#1823,#1824,#1825)); +#1822 = ORIENTED_EDGE('',*,*,#1709,.F.); +#1823 = ORIENTED_EDGE('',*,*,#1779,.T.); +#1824 = ORIENTED_EDGE('',*,*,#1749,.T.); +#1825 = ORIENTED_EDGE('',*,*,#1801,.F.); +#1826 = PLANE('',#1827); +#1827 = AXIS2_PLACEMENT_3D('',#1828,#1829,#1830); +#1828 = CARTESIAN_POINT('',(-42.5,36.,44.)); +#1829 = DIRECTION('',(0.,0.,1.)); +#1830 = DIRECTION('',(1.,0.,-0.)); +#1831 = ADVANCED_FACE('',(#1832),#1838,.T.); +#1832 = FACE_BOUND('',#1833,.T.); +#1833 = EDGE_LOOP('',(#1834,#1835,#1836,#1837)); +#1834 = ORIENTED_EDGE('',*,*,#1725,.F.); +#1835 = ORIENTED_EDGE('',*,*,#1786,.T.); +#1836 = ORIENTED_EDGE('',*,*,#1765,.T.); +#1837 = ORIENTED_EDGE('',*,*,#1808,.F.); +#1838 = PLANE('',#1839); +#1839 = AXIS2_PLACEMENT_3D('',#1840,#1841,#1842); +#1840 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#1841 = DIRECTION('',(0.,0.,1.)); +#1842 = DIRECTION('',(1.,0.,-0.)); +#1843 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1847)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1844,#1845,#1846)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1786 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1787 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1788 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1789 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1786, +#1844 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1845 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1846 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1847 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1844, 'distance_accuracy_value','confusion accuracy'); -#1790 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1791,#1793); -#1791 = ( REPRESENTATION_RELATIONSHIP('','',#1731,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1792) +#1848 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1849,#1851); +#1849 = ( REPRESENTATION_RELATIONSHIP('','',#1692,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1850) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1792 = ITEM_DEFINED_TRANSFORMATION('','',#11,#47); -#1793 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1794); -#1794 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('9','Panel_HingeBottom','',#5, - #1726,$); -#1795 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1728)); -#1796 = SHAPE_DEFINITION_REPRESENTATION(#1797,#1803); -#1797 = PRODUCT_DEFINITION_SHAPE('','',#1798); -#1798 = PRODUCT_DEFINITION('design','',#1799,#1802); -#1799 = PRODUCT_DEFINITION_FORMATION('','',#1800); -#1800 = PRODUCT('Panel_RightMountPlate','Panel_RightMountPlate','',( - #1801)); -#1801 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1802 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1803 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1804),#1954); -#1804 = MANIFOLD_SOLID_BREP('',#1805); -#1805 = CLOSED_SHELL('',(#1806,#1846,#1886,#1908,#1930,#1942)); -#1806 = ADVANCED_FACE('',(#1807),#1841,.F.); -#1807 = FACE_BOUND('',#1808,.F.); -#1808 = EDGE_LOOP('',(#1809,#1819,#1827,#1835)); -#1809 = ORIENTED_EDGE('',*,*,#1810,.F.); -#1810 = EDGE_CURVE('',#1811,#1813,#1815,.T.); -#1811 = VERTEX_POINT('',#1812); -#1812 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1813 = VERTEX_POINT('',#1814); -#1814 = CARTESIAN_POINT('',(30.,-31.,174.)); -#1815 = LINE('',#1816,#1817); -#1816 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1817 = VECTOR('',#1818,1.); -#1818 = DIRECTION('',(0.,0.,1.)); -#1819 = ORIENTED_EDGE('',*,*,#1820,.T.); -#1820 = EDGE_CURVE('',#1811,#1821,#1823,.T.); -#1821 = VERTEX_POINT('',#1822); -#1822 = CARTESIAN_POINT('',(30.,-25.,6.)); -#1823 = LINE('',#1824,#1825); -#1824 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1825 = VECTOR('',#1826,1.); -#1826 = DIRECTION('',(-0.,1.,0.)); -#1827 = ORIENTED_EDGE('',*,*,#1828,.T.); -#1828 = EDGE_CURVE('',#1821,#1829,#1831,.T.); -#1829 = VERTEX_POINT('',#1830); -#1830 = CARTESIAN_POINT('',(30.,-25.,174.)); -#1831 = LINE('',#1832,#1833); -#1832 = CARTESIAN_POINT('',(30.,-25.,6.)); -#1833 = VECTOR('',#1834,1.); -#1834 = DIRECTION('',(0.,0.,1.)); -#1835 = ORIENTED_EDGE('',*,*,#1836,.F.); -#1836 = EDGE_CURVE('',#1813,#1829,#1837,.T.); -#1837 = LINE('',#1838,#1839); -#1838 = CARTESIAN_POINT('',(30.,-31.,174.)); -#1839 = VECTOR('',#1840,1.); -#1840 = DIRECTION('',(-0.,1.,0.)); -#1841 = PLANE('',#1842); -#1842 = AXIS2_PLACEMENT_3D('',#1843,#1844,#1845); -#1843 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1844 = DIRECTION('',(1.,0.,-0.)); -#1845 = DIRECTION('',(0.,0.,1.)); -#1846 = ADVANCED_FACE('',(#1847),#1881,.T.); -#1847 = FACE_BOUND('',#1848,.T.); -#1848 = EDGE_LOOP('',(#1849,#1859,#1867,#1875)); -#1849 = ORIENTED_EDGE('',*,*,#1850,.F.); -#1850 = EDGE_CURVE('',#1851,#1853,#1855,.T.); -#1851 = VERTEX_POINT('',#1852); -#1852 = CARTESIAN_POINT('',(75.,-31.,6.)); -#1853 = VERTEX_POINT('',#1854); -#1854 = CARTESIAN_POINT('',(75.,-31.,174.)); -#1855 = LINE('',#1856,#1857); -#1856 = CARTESIAN_POINT('',(75.,-31.,6.)); -#1857 = VECTOR('',#1858,1.); -#1858 = DIRECTION('',(0.,0.,1.)); -#1859 = ORIENTED_EDGE('',*,*,#1860,.T.); -#1860 = EDGE_CURVE('',#1851,#1861,#1863,.T.); -#1861 = VERTEX_POINT('',#1862); -#1862 = CARTESIAN_POINT('',(75.,-25.,6.)); -#1863 = LINE('',#1864,#1865); -#1864 = CARTESIAN_POINT('',(75.,-31.,6.)); -#1865 = VECTOR('',#1866,1.); -#1866 = DIRECTION('',(-0.,1.,0.)); -#1867 = ORIENTED_EDGE('',*,*,#1868,.T.); -#1868 = EDGE_CURVE('',#1861,#1869,#1871,.T.); +#1850 = ITEM_DEFINED_TRANSFORMATION('','',#11,#47); +#1851 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1852); +#1852 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('9','ConnectorBank_Left_Body','', + #5,#1687,$); +#1853 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1689)); +#1854 = SHAPE_DEFINITION_REPRESENTATION(#1855,#1861); +#1855 = PRODUCT_DEFINITION_SHAPE('','',#1856); +#1856 = PRODUCT_DEFINITION('design','',#1857,#1860); +#1857 = PRODUCT_DEFINITION_FORMATION('','',#1858); +#1858 = PRODUCT('ConnectorBank_Left_SideRailLeft', + 'ConnectorBank_Left_SideRailLeft','',(#1859)); +#1859 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1860 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1861 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1862),#2012); +#1862 = MANIFOLD_SOLID_BREP('',#1863); +#1863 = CLOSED_SHELL('',(#1864,#1904,#1944,#1966,#1988,#2000)); +#1864 = ADVANCED_FACE('',(#1865),#1899,.F.); +#1865 = FACE_BOUND('',#1866,.F.); +#1866 = EDGE_LOOP('',(#1867,#1877,#1885,#1893)); +#1867 = ORIENTED_EDGE('',*,*,#1868,.F.); +#1868 = EDGE_CURVE('',#1869,#1871,#1873,.T.); #1869 = VERTEX_POINT('',#1870); -#1870 = CARTESIAN_POINT('',(75.,-25.,174.)); -#1871 = LINE('',#1872,#1873); -#1872 = CARTESIAN_POINT('',(75.,-25.,6.)); -#1873 = VECTOR('',#1874,1.); -#1874 = DIRECTION('',(0.,0.,1.)); -#1875 = ORIENTED_EDGE('',*,*,#1876,.F.); -#1876 = EDGE_CURVE('',#1853,#1869,#1877,.T.); -#1877 = LINE('',#1878,#1879); -#1878 = CARTESIAN_POINT('',(75.,-31.,174.)); -#1879 = VECTOR('',#1880,1.); -#1880 = DIRECTION('',(-0.,1.,0.)); -#1881 = PLANE('',#1882); -#1882 = AXIS2_PLACEMENT_3D('',#1883,#1884,#1885); -#1883 = CARTESIAN_POINT('',(75.,-31.,6.)); -#1884 = DIRECTION('',(1.,0.,-0.)); -#1885 = DIRECTION('',(0.,0.,1.)); -#1886 = ADVANCED_FACE('',(#1887),#1903,.F.); -#1887 = FACE_BOUND('',#1888,.F.); -#1888 = EDGE_LOOP('',(#1889,#1895,#1896,#1902)); -#1889 = ORIENTED_EDGE('',*,*,#1890,.F.); -#1890 = EDGE_CURVE('',#1811,#1851,#1891,.T.); -#1891 = LINE('',#1892,#1893); -#1892 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1893 = VECTOR('',#1894,1.); -#1894 = DIRECTION('',(1.,0.,-0.)); -#1895 = ORIENTED_EDGE('',*,*,#1810,.T.); -#1896 = ORIENTED_EDGE('',*,*,#1897,.T.); -#1897 = EDGE_CURVE('',#1813,#1853,#1898,.T.); -#1898 = LINE('',#1899,#1900); -#1899 = CARTESIAN_POINT('',(30.,-31.,174.)); -#1900 = VECTOR('',#1901,1.); -#1901 = DIRECTION('',(1.,0.,-0.)); -#1902 = ORIENTED_EDGE('',*,*,#1850,.F.); -#1903 = PLANE('',#1904); -#1904 = AXIS2_PLACEMENT_3D('',#1905,#1906,#1907); -#1905 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1906 = DIRECTION('',(-0.,1.,0.)); -#1907 = DIRECTION('',(0.,0.,1.)); -#1908 = ADVANCED_FACE('',(#1909),#1925,.T.); -#1909 = FACE_BOUND('',#1910,.T.); -#1910 = EDGE_LOOP('',(#1911,#1917,#1918,#1924)); -#1911 = ORIENTED_EDGE('',*,*,#1912,.F.); -#1912 = EDGE_CURVE('',#1821,#1861,#1913,.T.); +#1870 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1871 = VERTEX_POINT('',#1872); +#1872 = CARTESIAN_POINT('',(-43.7,35.8,154.)); +#1873 = LINE('',#1874,#1875); +#1874 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1875 = VECTOR('',#1876,1.); +#1876 = DIRECTION('',(0.,0.,1.)); +#1877 = ORIENTED_EDGE('',*,*,#1878,.T.); +#1878 = EDGE_CURVE('',#1869,#1879,#1881,.T.); +#1879 = VERTEX_POINT('',#1880); +#1880 = CARTESIAN_POINT('',(-43.7,40.2,44.)); +#1881 = LINE('',#1882,#1883); +#1882 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1883 = VECTOR('',#1884,1.); +#1884 = DIRECTION('',(-0.,1.,0.)); +#1885 = ORIENTED_EDGE('',*,*,#1886,.T.); +#1886 = EDGE_CURVE('',#1879,#1887,#1889,.T.); +#1887 = VERTEX_POINT('',#1888); +#1888 = CARTESIAN_POINT('',(-43.7,40.2,154.)); +#1889 = LINE('',#1890,#1891); +#1890 = CARTESIAN_POINT('',(-43.7,40.2,44.)); +#1891 = VECTOR('',#1892,1.); +#1892 = DIRECTION('',(0.,0.,1.)); +#1893 = ORIENTED_EDGE('',*,*,#1894,.F.); +#1894 = EDGE_CURVE('',#1871,#1887,#1895,.T.); +#1895 = LINE('',#1896,#1897); +#1896 = CARTESIAN_POINT('',(-43.7,35.8,154.)); +#1897 = VECTOR('',#1898,1.); +#1898 = DIRECTION('',(-0.,1.,0.)); +#1899 = PLANE('',#1900); +#1900 = AXIS2_PLACEMENT_3D('',#1901,#1902,#1903); +#1901 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1902 = DIRECTION('',(1.,0.,-0.)); +#1903 = DIRECTION('',(0.,0.,1.)); +#1904 = ADVANCED_FACE('',(#1905),#1939,.T.); +#1905 = FACE_BOUND('',#1906,.T.); +#1906 = EDGE_LOOP('',(#1907,#1917,#1925,#1933)); +#1907 = ORIENTED_EDGE('',*,*,#1908,.F.); +#1908 = EDGE_CURVE('',#1909,#1911,#1913,.T.); +#1909 = VERTEX_POINT('',#1910); +#1910 = CARTESIAN_POINT('',(-42.5,35.8,44.)); +#1911 = VERTEX_POINT('',#1912); +#1912 = CARTESIAN_POINT('',(-42.5,35.8,154.)); #1913 = LINE('',#1914,#1915); -#1914 = CARTESIAN_POINT('',(30.,-25.,6.)); +#1914 = CARTESIAN_POINT('',(-42.5,35.8,44.)); #1915 = VECTOR('',#1916,1.); -#1916 = DIRECTION('',(1.,0.,-0.)); -#1917 = ORIENTED_EDGE('',*,*,#1828,.T.); -#1918 = ORIENTED_EDGE('',*,*,#1919,.T.); -#1919 = EDGE_CURVE('',#1829,#1869,#1920,.T.); -#1920 = LINE('',#1921,#1922); -#1921 = CARTESIAN_POINT('',(30.,-25.,174.)); -#1922 = VECTOR('',#1923,1.); -#1923 = DIRECTION('',(1.,0.,-0.)); -#1924 = ORIENTED_EDGE('',*,*,#1868,.F.); -#1925 = PLANE('',#1926); -#1926 = AXIS2_PLACEMENT_3D('',#1927,#1928,#1929); -#1927 = CARTESIAN_POINT('',(30.,-25.,6.)); -#1928 = DIRECTION('',(-0.,1.,0.)); -#1929 = DIRECTION('',(0.,0.,1.)); -#1930 = ADVANCED_FACE('',(#1931),#1937,.F.); -#1931 = FACE_BOUND('',#1932,.F.); -#1932 = EDGE_LOOP('',(#1933,#1934,#1935,#1936)); -#1933 = ORIENTED_EDGE('',*,*,#1820,.F.); -#1934 = ORIENTED_EDGE('',*,*,#1890,.T.); -#1935 = ORIENTED_EDGE('',*,*,#1860,.T.); -#1936 = ORIENTED_EDGE('',*,*,#1912,.F.); -#1937 = PLANE('',#1938); -#1938 = AXIS2_PLACEMENT_3D('',#1939,#1940,#1941); -#1939 = CARTESIAN_POINT('',(30.,-31.,6.)); -#1940 = DIRECTION('',(0.,0.,1.)); -#1941 = DIRECTION('',(1.,0.,-0.)); -#1942 = ADVANCED_FACE('',(#1943),#1949,.T.); -#1943 = FACE_BOUND('',#1944,.T.); -#1944 = EDGE_LOOP('',(#1945,#1946,#1947,#1948)); -#1945 = ORIENTED_EDGE('',*,*,#1836,.F.); -#1946 = ORIENTED_EDGE('',*,*,#1897,.T.); -#1947 = ORIENTED_EDGE('',*,*,#1876,.T.); -#1948 = ORIENTED_EDGE('',*,*,#1919,.F.); -#1949 = PLANE('',#1950); -#1950 = AXIS2_PLACEMENT_3D('',#1951,#1952,#1953); -#1951 = CARTESIAN_POINT('',(30.,-31.,174.)); -#1952 = DIRECTION('',(0.,0.,1.)); -#1953 = DIRECTION('',(1.,0.,-0.)); -#1954 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1958)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#1955,#1956,#1957)) REPRESENTATION_CONTEXT +#1916 = DIRECTION('',(0.,0.,1.)); +#1917 = ORIENTED_EDGE('',*,*,#1918,.T.); +#1918 = EDGE_CURVE('',#1909,#1919,#1921,.T.); +#1919 = VERTEX_POINT('',#1920); +#1920 = CARTESIAN_POINT('',(-42.5,40.2,44.)); +#1921 = LINE('',#1922,#1923); +#1922 = CARTESIAN_POINT('',(-42.5,35.8,44.)); +#1923 = VECTOR('',#1924,1.); +#1924 = DIRECTION('',(-0.,1.,0.)); +#1925 = ORIENTED_EDGE('',*,*,#1926,.T.); +#1926 = EDGE_CURVE('',#1919,#1927,#1929,.T.); +#1927 = VERTEX_POINT('',#1928); +#1928 = CARTESIAN_POINT('',(-42.5,40.2,154.)); +#1929 = LINE('',#1930,#1931); +#1930 = CARTESIAN_POINT('',(-42.5,40.2,44.)); +#1931 = VECTOR('',#1932,1.); +#1932 = DIRECTION('',(0.,0.,1.)); +#1933 = ORIENTED_EDGE('',*,*,#1934,.F.); +#1934 = EDGE_CURVE('',#1911,#1927,#1935,.T.); +#1935 = LINE('',#1936,#1937); +#1936 = CARTESIAN_POINT('',(-42.5,35.8,154.)); +#1937 = VECTOR('',#1938,1.); +#1938 = DIRECTION('',(-0.,1.,0.)); +#1939 = PLANE('',#1940); +#1940 = AXIS2_PLACEMENT_3D('',#1941,#1942,#1943); +#1941 = CARTESIAN_POINT('',(-42.5,35.8,44.)); +#1942 = DIRECTION('',(1.,0.,-0.)); +#1943 = DIRECTION('',(0.,0.,1.)); +#1944 = ADVANCED_FACE('',(#1945),#1961,.F.); +#1945 = FACE_BOUND('',#1946,.F.); +#1946 = EDGE_LOOP('',(#1947,#1953,#1954,#1960)); +#1947 = ORIENTED_EDGE('',*,*,#1948,.F.); +#1948 = EDGE_CURVE('',#1869,#1909,#1949,.T.); +#1949 = LINE('',#1950,#1951); +#1950 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1951 = VECTOR('',#1952,1.); +#1952 = DIRECTION('',(1.,0.,-0.)); +#1953 = ORIENTED_EDGE('',*,*,#1868,.T.); +#1954 = ORIENTED_EDGE('',*,*,#1955,.T.); +#1955 = EDGE_CURVE('',#1871,#1911,#1956,.T.); +#1956 = LINE('',#1957,#1958); +#1957 = CARTESIAN_POINT('',(-43.7,35.8,154.)); +#1958 = VECTOR('',#1959,1.); +#1959 = DIRECTION('',(1.,0.,-0.)); +#1960 = ORIENTED_EDGE('',*,*,#1908,.F.); +#1961 = PLANE('',#1962); +#1962 = AXIS2_PLACEMENT_3D('',#1963,#1964,#1965); +#1963 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1964 = DIRECTION('',(-0.,1.,0.)); +#1965 = DIRECTION('',(0.,0.,1.)); +#1966 = ADVANCED_FACE('',(#1967),#1983,.T.); +#1967 = FACE_BOUND('',#1968,.T.); +#1968 = EDGE_LOOP('',(#1969,#1975,#1976,#1982)); +#1969 = ORIENTED_EDGE('',*,*,#1970,.F.); +#1970 = EDGE_CURVE('',#1879,#1919,#1971,.T.); +#1971 = LINE('',#1972,#1973); +#1972 = CARTESIAN_POINT('',(-43.7,40.2,44.)); +#1973 = VECTOR('',#1974,1.); +#1974 = DIRECTION('',(1.,0.,-0.)); +#1975 = ORIENTED_EDGE('',*,*,#1886,.T.); +#1976 = ORIENTED_EDGE('',*,*,#1977,.T.); +#1977 = EDGE_CURVE('',#1887,#1927,#1978,.T.); +#1978 = LINE('',#1979,#1980); +#1979 = CARTESIAN_POINT('',(-43.7,40.2,154.)); +#1980 = VECTOR('',#1981,1.); +#1981 = DIRECTION('',(1.,0.,-0.)); +#1982 = ORIENTED_EDGE('',*,*,#1926,.F.); +#1983 = PLANE('',#1984); +#1984 = AXIS2_PLACEMENT_3D('',#1985,#1986,#1987); +#1985 = CARTESIAN_POINT('',(-43.7,40.2,44.)); +#1986 = DIRECTION('',(-0.,1.,0.)); +#1987 = DIRECTION('',(0.,0.,1.)); +#1988 = ADVANCED_FACE('',(#1989),#1995,.F.); +#1989 = FACE_BOUND('',#1990,.F.); +#1990 = EDGE_LOOP('',(#1991,#1992,#1993,#1994)); +#1991 = ORIENTED_EDGE('',*,*,#1878,.F.); +#1992 = ORIENTED_EDGE('',*,*,#1948,.T.); +#1993 = ORIENTED_EDGE('',*,*,#1918,.T.); +#1994 = ORIENTED_EDGE('',*,*,#1970,.F.); +#1995 = PLANE('',#1996); +#1996 = AXIS2_PLACEMENT_3D('',#1997,#1998,#1999); +#1997 = CARTESIAN_POINT('',(-43.7,35.8,44.)); +#1998 = DIRECTION('',(0.,0.,1.)); +#1999 = DIRECTION('',(1.,0.,-0.)); +#2000 = ADVANCED_FACE('',(#2001),#2007,.T.); +#2001 = FACE_BOUND('',#2002,.T.); +#2002 = EDGE_LOOP('',(#2003,#2004,#2005,#2006)); +#2003 = ORIENTED_EDGE('',*,*,#1894,.F.); +#2004 = ORIENTED_EDGE('',*,*,#1955,.T.); +#2005 = ORIENTED_EDGE('',*,*,#1934,.T.); +#2006 = ORIENTED_EDGE('',*,*,#1977,.F.); +#2007 = PLANE('',#2008); +#2008 = AXIS2_PLACEMENT_3D('',#2009,#2010,#2011); +#2009 = CARTESIAN_POINT('',(-43.7,35.8,154.)); +#2010 = DIRECTION('',(0.,0.,1.)); +#2011 = DIRECTION('',(1.,0.,-0.)); +#2012 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2016)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2013,#2014,#2015)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#1955 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#1956 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#1957 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#1958 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1955, +#2013 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2014 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2015 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2016 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2013, 'distance_accuracy_value','confusion accuracy'); -#1959 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1960,#1962); -#1960 = ( REPRESENTATION_RELATIONSHIP('','',#1803,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1961) +#2017 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2018,#2020); +#2018 = ( REPRESENTATION_RELATIONSHIP('','',#1861,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2019) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#1961 = ITEM_DEFINED_TRANSFORMATION('','',#11,#51); -#1962 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #1963); -#1963 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('10','Panel_RightMountPlate','', - #5,#1798,$); -#1964 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1800)); -#1965 = SHAPE_DEFINITION_REPRESENTATION(#1966,#1972); -#1966 = PRODUCT_DEFINITION_SHAPE('','',#1967); -#1967 = PRODUCT_DEFINITION('design','',#1968,#1971); -#1968 = PRODUCT_DEFINITION_FORMATION('','',#1969); -#1969 = PRODUCT('ConnectorBank_Left_Body','ConnectorBank_Left_Body','',( - #1970)); -#1970 = PRODUCT_CONTEXT('',#2,'mechanical'); -#1971 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#1972 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1973),#2123); -#1973 = MANIFOLD_SOLID_BREP('',#1974); -#1974 = CLOSED_SHELL('',(#1975,#2015,#2055,#2077,#2099,#2111)); -#1975 = ADVANCED_FACE('',(#1976),#2010,.F.); -#1976 = FACE_BOUND('',#1977,.F.); -#1977 = EDGE_LOOP('',(#1978,#1988,#1996,#2004)); -#1978 = ORIENTED_EDGE('',*,*,#1979,.F.); -#1979 = EDGE_CURVE('',#1980,#1982,#1984,.T.); -#1980 = VERTEX_POINT('',#1981); -#1981 = CARTESIAN_POINT('',(35.,-36.,44.)); -#1982 = VERTEX_POINT('',#1983); -#1983 = CARTESIAN_POINT('',(35.,-36.,154.)); -#1984 = LINE('',#1985,#1986); -#1985 = CARTESIAN_POINT('',(35.,-36.,44.)); -#1986 = VECTOR('',#1987,1.); -#1987 = DIRECTION('',(0.,0.,1.)); -#1988 = ORIENTED_EDGE('',*,*,#1989,.T.); -#1989 = EDGE_CURVE('',#1980,#1990,#1992,.T.); -#1990 = VERTEX_POINT('',#1991); -#1991 = CARTESIAN_POINT('',(35.,-32.,44.)); -#1992 = LINE('',#1993,#1994); -#1993 = CARTESIAN_POINT('',(35.,-36.,44.)); -#1994 = VECTOR('',#1995,1.); -#1995 = DIRECTION('',(-0.,1.,0.)); -#1996 = ORIENTED_EDGE('',*,*,#1997,.T.); -#1997 = EDGE_CURVE('',#1990,#1998,#2000,.T.); -#1998 = VERTEX_POINT('',#1999); -#1999 = CARTESIAN_POINT('',(35.,-32.,154.)); -#2000 = LINE('',#2001,#2002); -#2001 = CARTESIAN_POINT('',(35.,-32.,44.)); -#2002 = VECTOR('',#2003,1.); -#2003 = DIRECTION('',(0.,0.,1.)); -#2004 = ORIENTED_EDGE('',*,*,#2005,.F.); -#2005 = EDGE_CURVE('',#1982,#1998,#2006,.T.); -#2006 = LINE('',#2007,#2008); -#2007 = CARTESIAN_POINT('',(35.,-36.,154.)); -#2008 = VECTOR('',#2009,1.); -#2009 = DIRECTION('',(-0.,1.,0.)); -#2010 = PLANE('',#2011); -#2011 = AXIS2_PLACEMENT_3D('',#2012,#2013,#2014); -#2012 = CARTESIAN_POINT('',(35.,-36.,44.)); -#2013 = DIRECTION('',(1.,0.,-0.)); -#2014 = DIRECTION('',(0.,0.,1.)); -#2015 = ADVANCED_FACE('',(#2016),#2050,.T.); -#2016 = FACE_BOUND('',#2017,.T.); -#2017 = EDGE_LOOP('',(#2018,#2028,#2036,#2044)); -#2018 = ORIENTED_EDGE('',*,*,#2019,.F.); -#2019 = EDGE_CURVE('',#2020,#2022,#2024,.T.); -#2020 = VERTEX_POINT('',#2021); -#2021 = CARTESIAN_POINT('',(53.,-36.,44.)); -#2022 = VERTEX_POINT('',#2023); -#2023 = CARTESIAN_POINT('',(53.,-36.,154.)); -#2024 = LINE('',#2025,#2026); -#2025 = CARTESIAN_POINT('',(53.,-36.,44.)); -#2026 = VECTOR('',#2027,1.); -#2027 = DIRECTION('',(0.,0.,1.)); -#2028 = ORIENTED_EDGE('',*,*,#2029,.T.); -#2029 = EDGE_CURVE('',#2020,#2030,#2032,.T.); -#2030 = VERTEX_POINT('',#2031); -#2031 = CARTESIAN_POINT('',(53.,-32.,44.)); -#2032 = LINE('',#2033,#2034); -#2033 = CARTESIAN_POINT('',(53.,-36.,44.)); -#2034 = VECTOR('',#2035,1.); -#2035 = DIRECTION('',(-0.,1.,0.)); -#2036 = ORIENTED_EDGE('',*,*,#2037,.T.); -#2037 = EDGE_CURVE('',#2030,#2038,#2040,.T.); +#2019 = ITEM_DEFINED_TRANSFORMATION('','',#11,#51); +#2020 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2021); +#2021 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('10', + 'ConnectorBank_Left_SideRailLeft','',#5,#1856,$); +#2022 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1858)); +#2023 = SHAPE_DEFINITION_REPRESENTATION(#2024,#2030); +#2024 = PRODUCT_DEFINITION_SHAPE('','',#2025); +#2025 = PRODUCT_DEFINITION('design','',#2026,#2029); +#2026 = PRODUCT_DEFINITION_FORMATION('','',#2027); +#2027 = PRODUCT('ConnectorBank_Left_SideRailRight', + 'ConnectorBank_Left_SideRailRight','',(#2028)); +#2028 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2029 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2030 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2031),#2181); +#2031 = MANIFOLD_SOLID_BREP('',#2032); +#2032 = CLOSED_SHELL('',(#2033,#2073,#2113,#2135,#2157,#2169)); +#2033 = ADVANCED_FACE('',(#2034),#2068,.F.); +#2034 = FACE_BOUND('',#2035,.F.); +#2035 = EDGE_LOOP('',(#2036,#2046,#2054,#2062)); +#2036 = ORIENTED_EDGE('',*,*,#2037,.F.); +#2037 = EDGE_CURVE('',#2038,#2040,#2042,.T.); #2038 = VERTEX_POINT('',#2039); -#2039 = CARTESIAN_POINT('',(53.,-32.,154.)); -#2040 = LINE('',#2041,#2042); -#2041 = CARTESIAN_POINT('',(53.,-32.,44.)); -#2042 = VECTOR('',#2043,1.); -#2043 = DIRECTION('',(0.,0.,1.)); -#2044 = ORIENTED_EDGE('',*,*,#2045,.F.); -#2045 = EDGE_CURVE('',#2022,#2038,#2046,.T.); -#2046 = LINE('',#2047,#2048); -#2047 = CARTESIAN_POINT('',(53.,-36.,154.)); -#2048 = VECTOR('',#2049,1.); -#2049 = DIRECTION('',(-0.,1.,0.)); -#2050 = PLANE('',#2051); -#2051 = AXIS2_PLACEMENT_3D('',#2052,#2053,#2054); -#2052 = CARTESIAN_POINT('',(53.,-36.,44.)); -#2053 = DIRECTION('',(1.,0.,-0.)); -#2054 = DIRECTION('',(0.,0.,1.)); -#2055 = ADVANCED_FACE('',(#2056),#2072,.F.); -#2056 = FACE_BOUND('',#2057,.F.); -#2057 = EDGE_LOOP('',(#2058,#2064,#2065,#2071)); -#2058 = ORIENTED_EDGE('',*,*,#2059,.F.); -#2059 = EDGE_CURVE('',#1980,#2020,#2060,.T.); -#2060 = LINE('',#2061,#2062); -#2061 = CARTESIAN_POINT('',(35.,-36.,44.)); -#2062 = VECTOR('',#2063,1.); -#2063 = DIRECTION('',(1.,0.,-0.)); -#2064 = ORIENTED_EDGE('',*,*,#1979,.T.); -#2065 = ORIENTED_EDGE('',*,*,#2066,.T.); -#2066 = EDGE_CURVE('',#1982,#2022,#2067,.T.); -#2067 = LINE('',#2068,#2069); -#2068 = CARTESIAN_POINT('',(35.,-36.,154.)); -#2069 = VECTOR('',#2070,1.); -#2070 = DIRECTION('',(1.,0.,-0.)); -#2071 = ORIENTED_EDGE('',*,*,#2019,.F.); -#2072 = PLANE('',#2073); -#2073 = AXIS2_PLACEMENT_3D('',#2074,#2075,#2076); -#2074 = CARTESIAN_POINT('',(35.,-36.,44.)); -#2075 = DIRECTION('',(-0.,1.,0.)); -#2076 = DIRECTION('',(0.,0.,1.)); -#2077 = ADVANCED_FACE('',(#2078),#2094,.T.); -#2078 = FACE_BOUND('',#2079,.T.); -#2079 = EDGE_LOOP('',(#2080,#2086,#2087,#2093)); -#2080 = ORIENTED_EDGE('',*,*,#2081,.F.); -#2081 = EDGE_CURVE('',#1990,#2030,#2082,.T.); +#2039 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2040 = VERTEX_POINT('',#2041); +#2041 = CARTESIAN_POINT('',(-24.5,35.8,154.)); +#2042 = LINE('',#2043,#2044); +#2043 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2044 = VECTOR('',#2045,1.); +#2045 = DIRECTION('',(0.,0.,1.)); +#2046 = ORIENTED_EDGE('',*,*,#2047,.T.); +#2047 = EDGE_CURVE('',#2038,#2048,#2050,.T.); +#2048 = VERTEX_POINT('',#2049); +#2049 = CARTESIAN_POINT('',(-24.5,40.2,44.)); +#2050 = LINE('',#2051,#2052); +#2051 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2052 = VECTOR('',#2053,1.); +#2053 = DIRECTION('',(-0.,1.,0.)); +#2054 = ORIENTED_EDGE('',*,*,#2055,.T.); +#2055 = EDGE_CURVE('',#2048,#2056,#2058,.T.); +#2056 = VERTEX_POINT('',#2057); +#2057 = CARTESIAN_POINT('',(-24.5,40.2,154.)); +#2058 = LINE('',#2059,#2060); +#2059 = CARTESIAN_POINT('',(-24.5,40.2,44.)); +#2060 = VECTOR('',#2061,1.); +#2061 = DIRECTION('',(0.,0.,1.)); +#2062 = ORIENTED_EDGE('',*,*,#2063,.F.); +#2063 = EDGE_CURVE('',#2040,#2056,#2064,.T.); +#2064 = LINE('',#2065,#2066); +#2065 = CARTESIAN_POINT('',(-24.5,35.8,154.)); +#2066 = VECTOR('',#2067,1.); +#2067 = DIRECTION('',(-0.,1.,0.)); +#2068 = PLANE('',#2069); +#2069 = AXIS2_PLACEMENT_3D('',#2070,#2071,#2072); +#2070 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2071 = DIRECTION('',(1.,0.,-0.)); +#2072 = DIRECTION('',(0.,0.,1.)); +#2073 = ADVANCED_FACE('',(#2074),#2108,.T.); +#2074 = FACE_BOUND('',#2075,.T.); +#2075 = EDGE_LOOP('',(#2076,#2086,#2094,#2102)); +#2076 = ORIENTED_EDGE('',*,*,#2077,.F.); +#2077 = EDGE_CURVE('',#2078,#2080,#2082,.T.); +#2078 = VERTEX_POINT('',#2079); +#2079 = CARTESIAN_POINT('',(-23.3,35.8,44.)); +#2080 = VERTEX_POINT('',#2081); +#2081 = CARTESIAN_POINT('',(-23.3,35.8,154.)); #2082 = LINE('',#2083,#2084); -#2083 = CARTESIAN_POINT('',(35.,-32.,44.)); +#2083 = CARTESIAN_POINT('',(-23.3,35.8,44.)); #2084 = VECTOR('',#2085,1.); -#2085 = DIRECTION('',(1.,0.,-0.)); -#2086 = ORIENTED_EDGE('',*,*,#1997,.T.); -#2087 = ORIENTED_EDGE('',*,*,#2088,.T.); -#2088 = EDGE_CURVE('',#1998,#2038,#2089,.T.); -#2089 = LINE('',#2090,#2091); -#2090 = CARTESIAN_POINT('',(35.,-32.,154.)); -#2091 = VECTOR('',#2092,1.); -#2092 = DIRECTION('',(1.,0.,-0.)); -#2093 = ORIENTED_EDGE('',*,*,#2037,.F.); -#2094 = PLANE('',#2095); -#2095 = AXIS2_PLACEMENT_3D('',#2096,#2097,#2098); -#2096 = CARTESIAN_POINT('',(35.,-32.,44.)); -#2097 = DIRECTION('',(-0.,1.,0.)); -#2098 = DIRECTION('',(0.,0.,1.)); -#2099 = ADVANCED_FACE('',(#2100),#2106,.F.); -#2100 = FACE_BOUND('',#2101,.F.); -#2101 = EDGE_LOOP('',(#2102,#2103,#2104,#2105)); -#2102 = ORIENTED_EDGE('',*,*,#1989,.F.); -#2103 = ORIENTED_EDGE('',*,*,#2059,.T.); -#2104 = ORIENTED_EDGE('',*,*,#2029,.T.); -#2105 = ORIENTED_EDGE('',*,*,#2081,.F.); -#2106 = PLANE('',#2107); -#2107 = AXIS2_PLACEMENT_3D('',#2108,#2109,#2110); -#2108 = CARTESIAN_POINT('',(35.,-36.,44.)); -#2109 = DIRECTION('',(0.,0.,1.)); -#2110 = DIRECTION('',(1.,0.,-0.)); -#2111 = ADVANCED_FACE('',(#2112),#2118,.T.); -#2112 = FACE_BOUND('',#2113,.T.); -#2113 = EDGE_LOOP('',(#2114,#2115,#2116,#2117)); -#2114 = ORIENTED_EDGE('',*,*,#2005,.F.); -#2115 = ORIENTED_EDGE('',*,*,#2066,.T.); -#2116 = ORIENTED_EDGE('',*,*,#2045,.T.); -#2117 = ORIENTED_EDGE('',*,*,#2088,.F.); -#2118 = PLANE('',#2119); -#2119 = AXIS2_PLACEMENT_3D('',#2120,#2121,#2122); -#2120 = CARTESIAN_POINT('',(35.,-36.,154.)); -#2121 = DIRECTION('',(0.,0.,1.)); -#2122 = DIRECTION('',(1.,0.,-0.)); -#2123 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2127)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2124,#2125,#2126)) REPRESENTATION_CONTEXT +#2085 = DIRECTION('',(0.,0.,1.)); +#2086 = ORIENTED_EDGE('',*,*,#2087,.T.); +#2087 = EDGE_CURVE('',#2078,#2088,#2090,.T.); +#2088 = VERTEX_POINT('',#2089); +#2089 = CARTESIAN_POINT('',(-23.3,40.2,44.)); +#2090 = LINE('',#2091,#2092); +#2091 = CARTESIAN_POINT('',(-23.3,35.8,44.)); +#2092 = VECTOR('',#2093,1.); +#2093 = DIRECTION('',(-0.,1.,0.)); +#2094 = ORIENTED_EDGE('',*,*,#2095,.T.); +#2095 = EDGE_CURVE('',#2088,#2096,#2098,.T.); +#2096 = VERTEX_POINT('',#2097); +#2097 = CARTESIAN_POINT('',(-23.3,40.2,154.)); +#2098 = LINE('',#2099,#2100); +#2099 = CARTESIAN_POINT('',(-23.3,40.2,44.)); +#2100 = VECTOR('',#2101,1.); +#2101 = DIRECTION('',(0.,0.,1.)); +#2102 = ORIENTED_EDGE('',*,*,#2103,.F.); +#2103 = EDGE_CURVE('',#2080,#2096,#2104,.T.); +#2104 = LINE('',#2105,#2106); +#2105 = CARTESIAN_POINT('',(-23.3,35.8,154.)); +#2106 = VECTOR('',#2107,1.); +#2107 = DIRECTION('',(-0.,1.,0.)); +#2108 = PLANE('',#2109); +#2109 = AXIS2_PLACEMENT_3D('',#2110,#2111,#2112); +#2110 = CARTESIAN_POINT('',(-23.3,35.8,44.)); +#2111 = DIRECTION('',(1.,0.,-0.)); +#2112 = DIRECTION('',(0.,0.,1.)); +#2113 = ADVANCED_FACE('',(#2114),#2130,.F.); +#2114 = FACE_BOUND('',#2115,.F.); +#2115 = EDGE_LOOP('',(#2116,#2122,#2123,#2129)); +#2116 = ORIENTED_EDGE('',*,*,#2117,.F.); +#2117 = EDGE_CURVE('',#2038,#2078,#2118,.T.); +#2118 = LINE('',#2119,#2120); +#2119 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2120 = VECTOR('',#2121,1.); +#2121 = DIRECTION('',(1.,0.,-0.)); +#2122 = ORIENTED_EDGE('',*,*,#2037,.T.); +#2123 = ORIENTED_EDGE('',*,*,#2124,.T.); +#2124 = EDGE_CURVE('',#2040,#2080,#2125,.T.); +#2125 = LINE('',#2126,#2127); +#2126 = CARTESIAN_POINT('',(-24.5,35.8,154.)); +#2127 = VECTOR('',#2128,1.); +#2128 = DIRECTION('',(1.,0.,-0.)); +#2129 = ORIENTED_EDGE('',*,*,#2077,.F.); +#2130 = PLANE('',#2131); +#2131 = AXIS2_PLACEMENT_3D('',#2132,#2133,#2134); +#2132 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2133 = DIRECTION('',(-0.,1.,0.)); +#2134 = DIRECTION('',(0.,0.,1.)); +#2135 = ADVANCED_FACE('',(#2136),#2152,.T.); +#2136 = FACE_BOUND('',#2137,.T.); +#2137 = EDGE_LOOP('',(#2138,#2144,#2145,#2151)); +#2138 = ORIENTED_EDGE('',*,*,#2139,.F.); +#2139 = EDGE_CURVE('',#2048,#2088,#2140,.T.); +#2140 = LINE('',#2141,#2142); +#2141 = CARTESIAN_POINT('',(-24.5,40.2,44.)); +#2142 = VECTOR('',#2143,1.); +#2143 = DIRECTION('',(1.,0.,-0.)); +#2144 = ORIENTED_EDGE('',*,*,#2055,.T.); +#2145 = ORIENTED_EDGE('',*,*,#2146,.T.); +#2146 = EDGE_CURVE('',#2056,#2096,#2147,.T.); +#2147 = LINE('',#2148,#2149); +#2148 = CARTESIAN_POINT('',(-24.5,40.2,154.)); +#2149 = VECTOR('',#2150,1.); +#2150 = DIRECTION('',(1.,0.,-0.)); +#2151 = ORIENTED_EDGE('',*,*,#2095,.F.); +#2152 = PLANE('',#2153); +#2153 = AXIS2_PLACEMENT_3D('',#2154,#2155,#2156); +#2154 = CARTESIAN_POINT('',(-24.5,40.2,44.)); +#2155 = DIRECTION('',(-0.,1.,0.)); +#2156 = DIRECTION('',(0.,0.,1.)); +#2157 = ADVANCED_FACE('',(#2158),#2164,.F.); +#2158 = FACE_BOUND('',#2159,.F.); +#2159 = EDGE_LOOP('',(#2160,#2161,#2162,#2163)); +#2160 = ORIENTED_EDGE('',*,*,#2047,.F.); +#2161 = ORIENTED_EDGE('',*,*,#2117,.T.); +#2162 = ORIENTED_EDGE('',*,*,#2087,.T.); +#2163 = ORIENTED_EDGE('',*,*,#2139,.F.); +#2164 = PLANE('',#2165); +#2165 = AXIS2_PLACEMENT_3D('',#2166,#2167,#2168); +#2166 = CARTESIAN_POINT('',(-24.5,35.8,44.)); +#2167 = DIRECTION('',(0.,0.,1.)); +#2168 = DIRECTION('',(1.,0.,-0.)); +#2169 = ADVANCED_FACE('',(#2170),#2176,.T.); +#2170 = FACE_BOUND('',#2171,.T.); +#2171 = EDGE_LOOP('',(#2172,#2173,#2174,#2175)); +#2172 = ORIENTED_EDGE('',*,*,#2063,.F.); +#2173 = ORIENTED_EDGE('',*,*,#2124,.T.); +#2174 = ORIENTED_EDGE('',*,*,#2103,.T.); +#2175 = ORIENTED_EDGE('',*,*,#2146,.F.); +#2176 = PLANE('',#2177); +#2177 = AXIS2_PLACEMENT_3D('',#2178,#2179,#2180); +#2178 = CARTESIAN_POINT('',(-24.5,35.8,154.)); +#2179 = DIRECTION('',(0.,0.,1.)); +#2180 = DIRECTION('',(1.,0.,-0.)); +#2181 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2185)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2182,#2183,#2184)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2124 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2125 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2126 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2127 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2124, +#2182 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2183 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2184 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2185 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2182, 'distance_accuracy_value','confusion accuracy'); -#2128 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2129,#2131); -#2129 = ( REPRESENTATION_RELATIONSHIP('','',#1972,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2130) +#2186 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2187,#2189); +#2187 = ( REPRESENTATION_RELATIONSHIP('','',#2030,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2188) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2130 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55); -#2131 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2132); -#2132 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('11','ConnectorBank_Left_Body','' - ,#5,#1967,$); -#2133 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1969)); -#2134 = SHAPE_DEFINITION_REPRESENTATION(#2135,#2141); -#2135 = PRODUCT_DEFINITION_SHAPE('','',#2136); -#2136 = PRODUCT_DEFINITION('design','',#2137,#2140); -#2137 = PRODUCT_DEFINITION_FORMATION('','',#2138); -#2138 = PRODUCT('ConnectorBank_Left_SideRailLeft', - 'ConnectorBank_Left_SideRailLeft','',(#2139)); -#2139 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2140 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2141 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2142),#2292); -#2142 = MANIFOLD_SOLID_BREP('',#2143); -#2143 = CLOSED_SHELL('',(#2144,#2184,#2224,#2246,#2268,#2280)); -#2144 = ADVANCED_FACE('',(#2145),#2179,.F.); -#2145 = FACE_BOUND('',#2146,.F.); -#2146 = EDGE_LOOP('',(#2147,#2157,#2165,#2173)); -#2147 = ORIENTED_EDGE('',*,*,#2148,.F.); -#2148 = EDGE_CURVE('',#2149,#2151,#2153,.T.); -#2149 = VERTEX_POINT('',#2150); -#2150 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2151 = VERTEX_POINT('',#2152); -#2152 = CARTESIAN_POINT('',(33.8,-36.2,154.)); -#2153 = LINE('',#2154,#2155); -#2154 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2155 = VECTOR('',#2156,1.); -#2156 = DIRECTION('',(0.,0.,1.)); -#2157 = ORIENTED_EDGE('',*,*,#2158,.T.); -#2158 = EDGE_CURVE('',#2149,#2159,#2161,.T.); -#2159 = VERTEX_POINT('',#2160); -#2160 = CARTESIAN_POINT('',(33.8,-31.8,44.)); -#2161 = LINE('',#2162,#2163); -#2162 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2163 = VECTOR('',#2164,1.); -#2164 = DIRECTION('',(-0.,1.,0.)); -#2165 = ORIENTED_EDGE('',*,*,#2166,.T.); -#2166 = EDGE_CURVE('',#2159,#2167,#2169,.T.); -#2167 = VERTEX_POINT('',#2168); -#2168 = CARTESIAN_POINT('',(33.8,-31.8,154.)); -#2169 = LINE('',#2170,#2171); -#2170 = CARTESIAN_POINT('',(33.8,-31.8,44.)); -#2171 = VECTOR('',#2172,1.); -#2172 = DIRECTION('',(0.,0.,1.)); -#2173 = ORIENTED_EDGE('',*,*,#2174,.F.); -#2174 = EDGE_CURVE('',#2151,#2167,#2175,.T.); -#2175 = LINE('',#2176,#2177); -#2176 = CARTESIAN_POINT('',(33.8,-36.2,154.)); -#2177 = VECTOR('',#2178,1.); -#2178 = DIRECTION('',(-0.,1.,0.)); -#2179 = PLANE('',#2180); -#2180 = AXIS2_PLACEMENT_3D('',#2181,#2182,#2183); -#2181 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2182 = DIRECTION('',(1.,0.,-0.)); -#2183 = DIRECTION('',(0.,0.,1.)); -#2184 = ADVANCED_FACE('',(#2185),#2219,.T.); -#2185 = FACE_BOUND('',#2186,.T.); -#2186 = EDGE_LOOP('',(#2187,#2197,#2205,#2213)); -#2187 = ORIENTED_EDGE('',*,*,#2188,.F.); -#2188 = EDGE_CURVE('',#2189,#2191,#2193,.T.); -#2189 = VERTEX_POINT('',#2190); -#2190 = CARTESIAN_POINT('',(35.,-36.2,44.)); -#2191 = VERTEX_POINT('',#2192); -#2192 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#2193 = LINE('',#2194,#2195); -#2194 = CARTESIAN_POINT('',(35.,-36.2,44.)); -#2195 = VECTOR('',#2196,1.); -#2196 = DIRECTION('',(0.,0.,1.)); -#2197 = ORIENTED_EDGE('',*,*,#2198,.T.); -#2198 = EDGE_CURVE('',#2189,#2199,#2201,.T.); -#2199 = VERTEX_POINT('',#2200); -#2200 = CARTESIAN_POINT('',(35.,-31.8,44.)); -#2201 = LINE('',#2202,#2203); -#2202 = CARTESIAN_POINT('',(35.,-36.2,44.)); -#2203 = VECTOR('',#2204,1.); -#2204 = DIRECTION('',(-0.,1.,0.)); -#2205 = ORIENTED_EDGE('',*,*,#2206,.T.); -#2206 = EDGE_CURVE('',#2199,#2207,#2209,.T.); +#2188 = ITEM_DEFINED_TRANSFORMATION('','',#11,#55); +#2189 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2190); +#2190 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('11', + 'ConnectorBank_Left_SideRailRight','',#5,#2025,$); +#2191 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2027)); +#2192 = SHAPE_DEFINITION_REPRESENTATION(#2193,#2199); +#2193 = PRODUCT_DEFINITION_SHAPE('','',#2194); +#2194 = PRODUCT_DEFINITION('design','',#2195,#2198); +#2195 = PRODUCT_DEFINITION_FORMATION('','',#2196); +#2196 = PRODUCT('ConnectorBank_Left_Hole_R01_C01', + 'ConnectorBank_Left_Hole_R01_C01','',(#2197)); +#2197 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2198 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2199 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2200),#2253); +#2200 = MANIFOLD_SOLID_BREP('',#2201); +#2201 = CLOSED_SHELL('',(#2202,#2235,#2244)); +#2202 = ADVANCED_FACE('',(#2203),#2230,.T.); +#2203 = FACE_BOUND('',#2204,.T.); +#2204 = EDGE_LOOP('',(#2205,#2214,#2222,#2229)); +#2205 = ORIENTED_EDGE('',*,*,#2206,.F.); +#2206 = EDGE_CURVE('',#2207,#2207,#2209,.T.); #2207 = VERTEX_POINT('',#2208); -#2208 = CARTESIAN_POINT('',(35.,-31.8,154.)); -#2209 = LINE('',#2210,#2211); -#2210 = CARTESIAN_POINT('',(35.,-31.8,44.)); -#2211 = VECTOR('',#2212,1.); -#2212 = DIRECTION('',(0.,0.,1.)); -#2213 = ORIENTED_EDGE('',*,*,#2214,.F.); -#2214 = EDGE_CURVE('',#2191,#2207,#2215,.T.); -#2215 = LINE('',#2216,#2217); -#2216 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#2217 = VECTOR('',#2218,1.); -#2218 = DIRECTION('',(-0.,1.,0.)); -#2219 = PLANE('',#2220); -#2220 = AXIS2_PLACEMENT_3D('',#2221,#2222,#2223); -#2221 = CARTESIAN_POINT('',(35.,-36.2,44.)); -#2222 = DIRECTION('',(1.,0.,-0.)); -#2223 = DIRECTION('',(0.,0.,1.)); -#2224 = ADVANCED_FACE('',(#2225),#2241,.F.); -#2225 = FACE_BOUND('',#2226,.F.); -#2226 = EDGE_LOOP('',(#2227,#2233,#2234,#2240)); -#2227 = ORIENTED_EDGE('',*,*,#2228,.F.); -#2228 = EDGE_CURVE('',#2149,#2189,#2229,.T.); -#2229 = LINE('',#2230,#2231); -#2230 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2231 = VECTOR('',#2232,1.); -#2232 = DIRECTION('',(1.,0.,-0.)); -#2233 = ORIENTED_EDGE('',*,*,#2148,.T.); -#2234 = ORIENTED_EDGE('',*,*,#2235,.T.); -#2235 = EDGE_CURVE('',#2151,#2191,#2236,.T.); -#2236 = LINE('',#2237,#2238); -#2237 = CARTESIAN_POINT('',(33.8,-36.2,154.)); -#2238 = VECTOR('',#2239,1.); -#2239 = DIRECTION('',(1.,0.,-0.)); -#2240 = ORIENTED_EDGE('',*,*,#2188,.F.); -#2241 = PLANE('',#2242); -#2242 = AXIS2_PLACEMENT_3D('',#2243,#2244,#2245); -#2243 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2244 = DIRECTION('',(-0.,1.,0.)); -#2245 = DIRECTION('',(0.,0.,1.)); -#2246 = ADVANCED_FACE('',(#2247),#2263,.T.); -#2247 = FACE_BOUND('',#2248,.T.); -#2248 = EDGE_LOOP('',(#2249,#2255,#2256,#2262)); -#2249 = ORIENTED_EDGE('',*,*,#2250,.F.); -#2250 = EDGE_CURVE('',#2159,#2199,#2251,.T.); -#2251 = LINE('',#2252,#2253); -#2252 = CARTESIAN_POINT('',(33.8,-31.8,44.)); -#2253 = VECTOR('',#2254,1.); -#2254 = DIRECTION('',(1.,0.,-0.)); -#2255 = ORIENTED_EDGE('',*,*,#2166,.T.); -#2256 = ORIENTED_EDGE('',*,*,#2257,.T.); -#2257 = EDGE_CURVE('',#2167,#2207,#2258,.T.); -#2258 = LINE('',#2259,#2260); -#2259 = CARTESIAN_POINT('',(33.8,-31.8,154.)); -#2260 = VECTOR('',#2261,1.); -#2261 = DIRECTION('',(1.,0.,-0.)); -#2262 = ORIENTED_EDGE('',*,*,#2206,.F.); -#2263 = PLANE('',#2264); -#2264 = AXIS2_PLACEMENT_3D('',#2265,#2266,#2267); -#2265 = CARTESIAN_POINT('',(33.8,-31.8,44.)); -#2266 = DIRECTION('',(-0.,1.,0.)); -#2267 = DIRECTION('',(0.,0.,1.)); -#2268 = ADVANCED_FACE('',(#2269),#2275,.F.); -#2269 = FACE_BOUND('',#2270,.F.); -#2270 = EDGE_LOOP('',(#2271,#2272,#2273,#2274)); -#2271 = ORIENTED_EDGE('',*,*,#2158,.F.); -#2272 = ORIENTED_EDGE('',*,*,#2228,.T.); -#2273 = ORIENTED_EDGE('',*,*,#2198,.T.); -#2274 = ORIENTED_EDGE('',*,*,#2250,.F.); -#2275 = PLANE('',#2276); -#2276 = AXIS2_PLACEMENT_3D('',#2277,#2278,#2279); -#2277 = CARTESIAN_POINT('',(33.8,-36.2,44.)); -#2278 = DIRECTION('',(0.,0.,1.)); -#2279 = DIRECTION('',(1.,0.,-0.)); -#2280 = ADVANCED_FACE('',(#2281),#2287,.T.); -#2281 = FACE_BOUND('',#2282,.T.); -#2282 = EDGE_LOOP('',(#2283,#2284,#2285,#2286)); -#2283 = ORIENTED_EDGE('',*,*,#2174,.F.); -#2284 = ORIENTED_EDGE('',*,*,#2235,.T.); -#2285 = ORIENTED_EDGE('',*,*,#2214,.T.); -#2286 = ORIENTED_EDGE('',*,*,#2257,.F.); -#2287 = PLANE('',#2288); -#2288 = AXIS2_PLACEMENT_3D('',#2289,#2290,#2291); -#2289 = CARTESIAN_POINT('',(33.8,-36.2,154.)); -#2290 = DIRECTION('',(0.,0.,1.)); -#2291 = DIRECTION('',(1.,0.,-0.)); -#2292 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2296)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2293,#2294,#2295)) REPRESENTATION_CONTEXT +#2208 = CARTESIAN_POINT('',(-36.5,39.45,53.)); +#2209 = CIRCLE('',#2210,1.); +#2210 = AXIS2_PLACEMENT_3D('',#2211,#2212,#2213); +#2211 = CARTESIAN_POINT('',(-36.5,39.45,54.)); +#2212 = DIRECTION('',(0.,-1.,0.)); +#2213 = DIRECTION('',(0.,-0.,-1.)); +#2214 = ORIENTED_EDGE('',*,*,#2215,.F.); +#2215 = EDGE_CURVE('',#2216,#2207,#2218,.T.); +#2216 = VERTEX_POINT('',#2217); +#2217 = CARTESIAN_POINT('',(-36.5,40.15,53.)); +#2218 = LINE('',#2219,#2220); +#2219 = CARTESIAN_POINT('',(-36.5,40.15,53.)); +#2220 = VECTOR('',#2221,1.); +#2221 = DIRECTION('',(0.,-1.,0.)); +#2222 = ORIENTED_EDGE('',*,*,#2223,.T.); +#2223 = EDGE_CURVE('',#2216,#2216,#2224,.T.); +#2224 = CIRCLE('',#2225,1.); +#2225 = AXIS2_PLACEMENT_3D('',#2226,#2227,#2228); +#2226 = CARTESIAN_POINT('',(-36.5,40.15,54.)); +#2227 = DIRECTION('',(0.,-1.,0.)); +#2228 = DIRECTION('',(0.,-0.,-1.)); +#2229 = ORIENTED_EDGE('',*,*,#2215,.T.); +#2230 = CYLINDRICAL_SURFACE('',#2231,1.); +#2231 = AXIS2_PLACEMENT_3D('',#2232,#2233,#2234); +#2232 = CARTESIAN_POINT('',(-36.5,40.15,54.)); +#2233 = DIRECTION('',(0.,-1.,0.)); +#2234 = DIRECTION('',(0.,-0.,-1.)); +#2235 = ADVANCED_FACE('',(#2236),#2239,.T.); +#2236 = FACE_BOUND('',#2237,.T.); +#2237 = EDGE_LOOP('',(#2238)); +#2238 = ORIENTED_EDGE('',*,*,#2206,.T.); +#2239 = PLANE('',#2240); +#2240 = AXIS2_PLACEMENT_3D('',#2241,#2242,#2243); +#2241 = CARTESIAN_POINT('',(-36.5,39.45,54.)); +#2242 = DIRECTION('',(0.,-1.,0.)); +#2243 = DIRECTION('',(0.,-0.,-1.)); +#2244 = ADVANCED_FACE('',(#2245),#2248,.F.); +#2245 = FACE_BOUND('',#2246,.T.); +#2246 = EDGE_LOOP('',(#2247)); +#2247 = ORIENTED_EDGE('',*,*,#2223,.F.); +#2248 = PLANE('',#2249); +#2249 = AXIS2_PLACEMENT_3D('',#2250,#2251,#2252); +#2250 = CARTESIAN_POINT('',(-36.5,40.15,54.)); +#2251 = DIRECTION('',(0.,-1.,0.)); +#2252 = DIRECTION('',(0.,-0.,-1.)); +#2253 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2257)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2254,#2255,#2256)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2293 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2294 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2295 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2296 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2293, +#2254 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2255 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2256 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2257 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2254, 'distance_accuracy_value','confusion accuracy'); -#2297 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2298,#2300); -#2298 = ( REPRESENTATION_RELATIONSHIP('','',#2141,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2299) +#2258 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2259,#2261); +#2259 = ( REPRESENTATION_RELATIONSHIP('','',#2199,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2260) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2299 = ITEM_DEFINED_TRANSFORMATION('','',#11,#59); -#2300 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2301); -#2301 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('12', - 'ConnectorBank_Left_SideRailLeft','',#5,#2136,$); -#2302 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2138)); -#2303 = SHAPE_DEFINITION_REPRESENTATION(#2304,#2310); -#2304 = PRODUCT_DEFINITION_SHAPE('','',#2305); -#2305 = PRODUCT_DEFINITION('design','',#2306,#2309); -#2306 = PRODUCT_DEFINITION_FORMATION('','',#2307); -#2307 = PRODUCT('ConnectorBank_Left_SideRailRight', - 'ConnectorBank_Left_SideRailRight','',(#2308)); -#2308 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2309 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2310 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2311),#2461); -#2311 = MANIFOLD_SOLID_BREP('',#2312); -#2312 = CLOSED_SHELL('',(#2313,#2353,#2393,#2415,#2437,#2449)); -#2313 = ADVANCED_FACE('',(#2314),#2348,.F.); -#2314 = FACE_BOUND('',#2315,.F.); -#2315 = EDGE_LOOP('',(#2316,#2326,#2334,#2342)); -#2316 = ORIENTED_EDGE('',*,*,#2317,.F.); -#2317 = EDGE_CURVE('',#2318,#2320,#2322,.T.); -#2318 = VERTEX_POINT('',#2319); -#2319 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2320 = VERTEX_POINT('',#2321); -#2321 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#2322 = LINE('',#2323,#2324); -#2323 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2324 = VECTOR('',#2325,1.); -#2325 = DIRECTION('',(0.,0.,1.)); -#2326 = ORIENTED_EDGE('',*,*,#2327,.T.); -#2327 = EDGE_CURVE('',#2318,#2328,#2330,.T.); -#2328 = VERTEX_POINT('',#2329); -#2329 = CARTESIAN_POINT('',(53.,-31.8,44.)); -#2330 = LINE('',#2331,#2332); -#2331 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2332 = VECTOR('',#2333,1.); -#2333 = DIRECTION('',(-0.,1.,0.)); -#2334 = ORIENTED_EDGE('',*,*,#2335,.T.); -#2335 = EDGE_CURVE('',#2328,#2336,#2338,.T.); -#2336 = VERTEX_POINT('',#2337); -#2337 = CARTESIAN_POINT('',(53.,-31.8,154.)); -#2338 = LINE('',#2339,#2340); -#2339 = CARTESIAN_POINT('',(53.,-31.8,44.)); -#2340 = VECTOR('',#2341,1.); -#2341 = DIRECTION('',(0.,0.,1.)); -#2342 = ORIENTED_EDGE('',*,*,#2343,.F.); -#2343 = EDGE_CURVE('',#2320,#2336,#2344,.T.); -#2344 = LINE('',#2345,#2346); -#2345 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#2346 = VECTOR('',#2347,1.); -#2347 = DIRECTION('',(-0.,1.,0.)); -#2348 = PLANE('',#2349); -#2349 = AXIS2_PLACEMENT_3D('',#2350,#2351,#2352); -#2350 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2351 = DIRECTION('',(1.,0.,-0.)); -#2352 = DIRECTION('',(0.,0.,1.)); -#2353 = ADVANCED_FACE('',(#2354),#2388,.T.); -#2354 = FACE_BOUND('',#2355,.T.); -#2355 = EDGE_LOOP('',(#2356,#2366,#2374,#2382)); -#2356 = ORIENTED_EDGE('',*,*,#2357,.F.); -#2357 = EDGE_CURVE('',#2358,#2360,#2362,.T.); -#2358 = VERTEX_POINT('',#2359); -#2359 = CARTESIAN_POINT('',(54.2,-36.2,44.)); +#2260 = ITEM_DEFINED_TRANSFORMATION('','',#11,#59); +#2261 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2262); +#2262 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('12', + 'ConnectorBank_Left_Hole_R01_C01','',#5,#2194,$); +#2263 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2196)); +#2264 = SHAPE_DEFINITION_REPRESENTATION(#2265,#2271); +#2265 = PRODUCT_DEFINITION_SHAPE('','',#2266); +#2266 = PRODUCT_DEFINITION('design','',#2267,#2270); +#2267 = PRODUCT_DEFINITION_FORMATION('','',#2268); +#2268 = PRODUCT('ConnectorBank_Left_Hole_R01_C02', + 'ConnectorBank_Left_Hole_R01_C02','',(#2269)); +#2269 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2270 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2271 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2272),#2325); +#2272 = MANIFOLD_SOLID_BREP('',#2273); +#2273 = CLOSED_SHELL('',(#2274,#2307,#2316)); +#2274 = ADVANCED_FACE('',(#2275),#2302,.T.); +#2275 = FACE_BOUND('',#2276,.T.); +#2276 = EDGE_LOOP('',(#2277,#2286,#2294,#2301)); +#2277 = ORIENTED_EDGE('',*,*,#2278,.F.); +#2278 = EDGE_CURVE('',#2279,#2279,#2281,.T.); +#2279 = VERTEX_POINT('',#2280); +#2280 = CARTESIAN_POINT('',(-30.5,39.45,53.)); +#2281 = CIRCLE('',#2282,1.); +#2282 = AXIS2_PLACEMENT_3D('',#2283,#2284,#2285); +#2283 = CARTESIAN_POINT('',(-30.5,39.45,54.)); +#2284 = DIRECTION('',(0.,-1.,0.)); +#2285 = DIRECTION('',(0.,-0.,-1.)); +#2286 = ORIENTED_EDGE('',*,*,#2287,.F.); +#2287 = EDGE_CURVE('',#2288,#2279,#2290,.T.); +#2288 = VERTEX_POINT('',#2289); +#2289 = CARTESIAN_POINT('',(-30.5,40.15,53.)); +#2290 = LINE('',#2291,#2292); +#2291 = CARTESIAN_POINT('',(-30.5,40.15,53.)); +#2292 = VECTOR('',#2293,1.); +#2293 = DIRECTION('',(0.,-1.,0.)); +#2294 = ORIENTED_EDGE('',*,*,#2295,.T.); +#2295 = EDGE_CURVE('',#2288,#2288,#2296,.T.); +#2296 = CIRCLE('',#2297,1.); +#2297 = AXIS2_PLACEMENT_3D('',#2298,#2299,#2300); +#2298 = CARTESIAN_POINT('',(-30.5,40.15,54.)); +#2299 = DIRECTION('',(0.,-1.,0.)); +#2300 = DIRECTION('',(0.,-0.,-1.)); +#2301 = ORIENTED_EDGE('',*,*,#2287,.T.); +#2302 = CYLINDRICAL_SURFACE('',#2303,1.); +#2303 = AXIS2_PLACEMENT_3D('',#2304,#2305,#2306); +#2304 = CARTESIAN_POINT('',(-30.5,40.15,54.)); +#2305 = DIRECTION('',(0.,-1.,0.)); +#2306 = DIRECTION('',(0.,-0.,-1.)); +#2307 = ADVANCED_FACE('',(#2308),#2311,.T.); +#2308 = FACE_BOUND('',#2309,.T.); +#2309 = EDGE_LOOP('',(#2310)); +#2310 = ORIENTED_EDGE('',*,*,#2278,.T.); +#2311 = PLANE('',#2312); +#2312 = AXIS2_PLACEMENT_3D('',#2313,#2314,#2315); +#2313 = CARTESIAN_POINT('',(-30.5,39.45,54.)); +#2314 = DIRECTION('',(0.,-1.,0.)); +#2315 = DIRECTION('',(0.,-0.,-1.)); +#2316 = ADVANCED_FACE('',(#2317),#2320,.F.); +#2317 = FACE_BOUND('',#2318,.T.); +#2318 = EDGE_LOOP('',(#2319)); +#2319 = ORIENTED_EDGE('',*,*,#2295,.F.); +#2320 = PLANE('',#2321); +#2321 = AXIS2_PLACEMENT_3D('',#2322,#2323,#2324); +#2322 = CARTESIAN_POINT('',(-30.5,40.15,54.)); +#2323 = DIRECTION('',(0.,-1.,0.)); +#2324 = DIRECTION('',(0.,-0.,-1.)); +#2325 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2329)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2326,#2327,#2328)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#2326 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2327 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2328 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2329 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2326, + 'distance_accuracy_value','confusion accuracy'); +#2330 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2331,#2333); +#2331 = ( REPRESENTATION_RELATIONSHIP('','',#2271,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2332) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#2332 = ITEM_DEFINED_TRANSFORMATION('','',#11,#63); +#2333 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2334); +#2334 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('13', + 'ConnectorBank_Left_Hole_R01_C02','',#5,#2266,$); +#2335 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2268)); +#2336 = SHAPE_DEFINITION_REPRESENTATION(#2337,#2343); +#2337 = PRODUCT_DEFINITION_SHAPE('','',#2338); +#2338 = PRODUCT_DEFINITION('design','',#2339,#2342); +#2339 = PRODUCT_DEFINITION_FORMATION('','',#2340); +#2340 = PRODUCT('ConnectorBank_Left_Hole_R02_C01', + 'ConnectorBank_Left_Hole_R02_C01','',(#2341)); +#2341 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2342 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2343 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2344),#2397); +#2344 = MANIFOLD_SOLID_BREP('',#2345); +#2345 = CLOSED_SHELL('',(#2346,#2379,#2388)); +#2346 = ADVANCED_FACE('',(#2347),#2374,.T.); +#2347 = FACE_BOUND('',#2348,.T.); +#2348 = EDGE_LOOP('',(#2349,#2358,#2366,#2373)); +#2349 = ORIENTED_EDGE('',*,*,#2350,.F.); +#2350 = EDGE_CURVE('',#2351,#2351,#2353,.T.); +#2351 = VERTEX_POINT('',#2352); +#2352 = CARTESIAN_POINT('',(-36.5,39.45,63.)); +#2353 = CIRCLE('',#2354,1.); +#2354 = AXIS2_PLACEMENT_3D('',#2355,#2356,#2357); +#2355 = CARTESIAN_POINT('',(-36.5,39.45,64.)); +#2356 = DIRECTION('',(0.,-1.,0.)); +#2357 = DIRECTION('',(0.,-0.,-1.)); +#2358 = ORIENTED_EDGE('',*,*,#2359,.F.); +#2359 = EDGE_CURVE('',#2360,#2351,#2362,.T.); #2360 = VERTEX_POINT('',#2361); -#2361 = CARTESIAN_POINT('',(54.2,-36.2,154.)); +#2361 = CARTESIAN_POINT('',(-36.5,40.15,63.)); #2362 = LINE('',#2363,#2364); -#2363 = CARTESIAN_POINT('',(54.2,-36.2,44.)); +#2363 = CARTESIAN_POINT('',(-36.5,40.15,63.)); #2364 = VECTOR('',#2365,1.); -#2365 = DIRECTION('',(0.,0.,1.)); +#2365 = DIRECTION('',(0.,-1.,0.)); #2366 = ORIENTED_EDGE('',*,*,#2367,.T.); -#2367 = EDGE_CURVE('',#2358,#2368,#2370,.T.); -#2368 = VERTEX_POINT('',#2369); -#2369 = CARTESIAN_POINT('',(54.2,-31.8,44.)); -#2370 = LINE('',#2371,#2372); -#2371 = CARTESIAN_POINT('',(54.2,-36.2,44.)); -#2372 = VECTOR('',#2373,1.); -#2373 = DIRECTION('',(-0.,1.,0.)); -#2374 = ORIENTED_EDGE('',*,*,#2375,.T.); -#2375 = EDGE_CURVE('',#2368,#2376,#2378,.T.); -#2376 = VERTEX_POINT('',#2377); -#2377 = CARTESIAN_POINT('',(54.2,-31.8,154.)); -#2378 = LINE('',#2379,#2380); -#2379 = CARTESIAN_POINT('',(54.2,-31.8,44.)); -#2380 = VECTOR('',#2381,1.); -#2381 = DIRECTION('',(0.,0.,1.)); -#2382 = ORIENTED_EDGE('',*,*,#2383,.F.); -#2383 = EDGE_CURVE('',#2360,#2376,#2384,.T.); -#2384 = LINE('',#2385,#2386); -#2385 = CARTESIAN_POINT('',(54.2,-36.2,154.)); -#2386 = VECTOR('',#2387,1.); -#2387 = DIRECTION('',(-0.,1.,0.)); -#2388 = PLANE('',#2389); -#2389 = AXIS2_PLACEMENT_3D('',#2390,#2391,#2392); -#2390 = CARTESIAN_POINT('',(54.2,-36.2,44.)); -#2391 = DIRECTION('',(1.,0.,-0.)); -#2392 = DIRECTION('',(0.,0.,1.)); -#2393 = ADVANCED_FACE('',(#2394),#2410,.F.); -#2394 = FACE_BOUND('',#2395,.F.); -#2395 = EDGE_LOOP('',(#2396,#2402,#2403,#2409)); -#2396 = ORIENTED_EDGE('',*,*,#2397,.F.); -#2397 = EDGE_CURVE('',#2318,#2358,#2398,.T.); -#2398 = LINE('',#2399,#2400); -#2399 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2400 = VECTOR('',#2401,1.); -#2401 = DIRECTION('',(1.,0.,-0.)); -#2402 = ORIENTED_EDGE('',*,*,#2317,.T.); -#2403 = ORIENTED_EDGE('',*,*,#2404,.T.); -#2404 = EDGE_CURVE('',#2320,#2360,#2405,.T.); -#2405 = LINE('',#2406,#2407); -#2406 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#2407 = VECTOR('',#2408,1.); -#2408 = DIRECTION('',(1.,0.,-0.)); -#2409 = ORIENTED_EDGE('',*,*,#2357,.F.); -#2410 = PLANE('',#2411); -#2411 = AXIS2_PLACEMENT_3D('',#2412,#2413,#2414); -#2412 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2413 = DIRECTION('',(-0.,1.,0.)); -#2414 = DIRECTION('',(0.,0.,1.)); -#2415 = ADVANCED_FACE('',(#2416),#2432,.T.); -#2416 = FACE_BOUND('',#2417,.T.); -#2417 = EDGE_LOOP('',(#2418,#2424,#2425,#2431)); -#2418 = ORIENTED_EDGE('',*,*,#2419,.F.); -#2419 = EDGE_CURVE('',#2328,#2368,#2420,.T.); -#2420 = LINE('',#2421,#2422); -#2421 = CARTESIAN_POINT('',(53.,-31.8,44.)); -#2422 = VECTOR('',#2423,1.); -#2423 = DIRECTION('',(1.,0.,-0.)); -#2424 = ORIENTED_EDGE('',*,*,#2335,.T.); -#2425 = ORIENTED_EDGE('',*,*,#2426,.T.); -#2426 = EDGE_CURVE('',#2336,#2376,#2427,.T.); -#2427 = LINE('',#2428,#2429); -#2428 = CARTESIAN_POINT('',(53.,-31.8,154.)); -#2429 = VECTOR('',#2430,1.); -#2430 = DIRECTION('',(1.,0.,-0.)); -#2431 = ORIENTED_EDGE('',*,*,#2375,.F.); -#2432 = PLANE('',#2433); -#2433 = AXIS2_PLACEMENT_3D('',#2434,#2435,#2436); -#2434 = CARTESIAN_POINT('',(53.,-31.8,44.)); -#2435 = DIRECTION('',(-0.,1.,0.)); -#2436 = DIRECTION('',(0.,0.,1.)); -#2437 = ADVANCED_FACE('',(#2438),#2444,.F.); -#2438 = FACE_BOUND('',#2439,.F.); -#2439 = EDGE_LOOP('',(#2440,#2441,#2442,#2443)); -#2440 = ORIENTED_EDGE('',*,*,#2327,.F.); -#2441 = ORIENTED_EDGE('',*,*,#2397,.T.); -#2442 = ORIENTED_EDGE('',*,*,#2367,.T.); -#2443 = ORIENTED_EDGE('',*,*,#2419,.F.); -#2444 = PLANE('',#2445); -#2445 = AXIS2_PLACEMENT_3D('',#2446,#2447,#2448); -#2446 = CARTESIAN_POINT('',(53.,-36.2,44.)); -#2447 = DIRECTION('',(0.,0.,1.)); -#2448 = DIRECTION('',(1.,0.,-0.)); -#2449 = ADVANCED_FACE('',(#2450),#2456,.T.); -#2450 = FACE_BOUND('',#2451,.T.); -#2451 = EDGE_LOOP('',(#2452,#2453,#2454,#2455)); -#2452 = ORIENTED_EDGE('',*,*,#2343,.F.); -#2453 = ORIENTED_EDGE('',*,*,#2404,.T.); -#2454 = ORIENTED_EDGE('',*,*,#2383,.T.); -#2455 = ORIENTED_EDGE('',*,*,#2426,.F.); -#2456 = PLANE('',#2457); -#2457 = AXIS2_PLACEMENT_3D('',#2458,#2459,#2460); -#2458 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#2459 = DIRECTION('',(0.,0.,1.)); -#2460 = DIRECTION('',(1.,0.,-0.)); -#2461 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2465)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2462,#2463,#2464)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2462 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2463 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2464 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2465 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2462, - 'distance_accuracy_value','confusion accuracy'); -#2466 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2467,#2469); -#2467 = ( REPRESENTATION_RELATIONSHIP('','',#2310,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2468) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2468 = ITEM_DEFINED_TRANSFORMATION('','',#11,#63); -#2469 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2470); -#2470 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('13', - 'ConnectorBank_Left_SideRailRight','',#5,#2305,$); -#2471 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2307)); -#2472 = SHAPE_DEFINITION_REPRESENTATION(#2473,#2479); -#2473 = PRODUCT_DEFINITION_SHAPE('','',#2474); -#2474 = PRODUCT_DEFINITION('design','',#2475,#2478); -#2475 = PRODUCT_DEFINITION_FORMATION('','',#2476); -#2476 = PRODUCT('ConnectorBank_Left_Hole_R01_C01', - 'ConnectorBank_Left_Hole_R01_C01','',(#2477)); -#2477 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2478 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2479 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2480),#2533); -#2480 = MANIFOLD_SOLID_BREP('',#2481); -#2481 = CLOSED_SHELL('',(#2482,#2515,#2524)); -#2482 = ADVANCED_FACE('',(#2483),#2510,.T.); -#2483 = FACE_BOUND('',#2484,.T.); -#2484 = EDGE_LOOP('',(#2485,#2494,#2502,#2509)); -#2485 = ORIENTED_EDGE('',*,*,#2486,.F.); -#2486 = EDGE_CURVE('',#2487,#2487,#2489,.T.); -#2487 = VERTEX_POINT('',#2488); -#2488 = CARTESIAN_POINT('',(41.,-36.85,53.)); -#2489 = CIRCLE('',#2490,1.); -#2490 = AXIS2_PLACEMENT_3D('',#2491,#2492,#2493); -#2491 = CARTESIAN_POINT('',(41.,-36.85,54.)); -#2492 = DIRECTION('',(0.,-1.,0.)); -#2493 = DIRECTION('',(0.,-0.,-1.)); -#2494 = ORIENTED_EDGE('',*,*,#2495,.F.); -#2495 = EDGE_CURVE('',#2496,#2487,#2498,.T.); -#2496 = VERTEX_POINT('',#2497); -#2497 = CARTESIAN_POINT('',(41.,-36.15,53.)); -#2498 = LINE('',#2499,#2500); -#2499 = CARTESIAN_POINT('',(41.,-36.15,53.)); -#2500 = VECTOR('',#2501,1.); -#2501 = DIRECTION('',(0.,-1.,0.)); -#2502 = ORIENTED_EDGE('',*,*,#2503,.T.); -#2503 = EDGE_CURVE('',#2496,#2496,#2504,.T.); -#2504 = CIRCLE('',#2505,1.); -#2505 = AXIS2_PLACEMENT_3D('',#2506,#2507,#2508); -#2506 = CARTESIAN_POINT('',(41.,-36.15,54.)); -#2507 = DIRECTION('',(0.,-1.,0.)); -#2508 = DIRECTION('',(0.,-0.,-1.)); -#2509 = ORIENTED_EDGE('',*,*,#2495,.T.); -#2510 = CYLINDRICAL_SURFACE('',#2511,1.); -#2511 = AXIS2_PLACEMENT_3D('',#2512,#2513,#2514); -#2512 = CARTESIAN_POINT('',(41.,-36.15,54.)); -#2513 = DIRECTION('',(0.,-1.,0.)); -#2514 = DIRECTION('',(0.,-0.,-1.)); -#2515 = ADVANCED_FACE('',(#2516),#2519,.T.); -#2516 = FACE_BOUND('',#2517,.T.); -#2517 = EDGE_LOOP('',(#2518)); -#2518 = ORIENTED_EDGE('',*,*,#2486,.T.); -#2519 = PLANE('',#2520); -#2520 = AXIS2_PLACEMENT_3D('',#2521,#2522,#2523); -#2521 = CARTESIAN_POINT('',(41.,-36.85,54.)); -#2522 = DIRECTION('',(0.,-1.,0.)); -#2523 = DIRECTION('',(0.,-0.,-1.)); -#2524 = ADVANCED_FACE('',(#2525),#2528,.F.); -#2525 = FACE_BOUND('',#2526,.T.); -#2526 = EDGE_LOOP('',(#2527)); -#2527 = ORIENTED_EDGE('',*,*,#2503,.F.); -#2528 = PLANE('',#2529); -#2529 = AXIS2_PLACEMENT_3D('',#2530,#2531,#2532); -#2530 = CARTESIAN_POINT('',(41.,-36.15,54.)); -#2531 = DIRECTION('',(0.,-1.,0.)); -#2532 = DIRECTION('',(0.,-0.,-1.)); -#2533 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2537)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2534,#2535,#2536)) REPRESENTATION_CONTEXT +#2367 = EDGE_CURVE('',#2360,#2360,#2368,.T.); +#2368 = CIRCLE('',#2369,1.); +#2369 = AXIS2_PLACEMENT_3D('',#2370,#2371,#2372); +#2370 = CARTESIAN_POINT('',(-36.5,40.15,64.)); +#2371 = DIRECTION('',(0.,-1.,0.)); +#2372 = DIRECTION('',(0.,-0.,-1.)); +#2373 = ORIENTED_EDGE('',*,*,#2359,.T.); +#2374 = CYLINDRICAL_SURFACE('',#2375,1.); +#2375 = AXIS2_PLACEMENT_3D('',#2376,#2377,#2378); +#2376 = CARTESIAN_POINT('',(-36.5,40.15,64.)); +#2377 = DIRECTION('',(0.,-1.,0.)); +#2378 = DIRECTION('',(0.,-0.,-1.)); +#2379 = ADVANCED_FACE('',(#2380),#2383,.T.); +#2380 = FACE_BOUND('',#2381,.T.); +#2381 = EDGE_LOOP('',(#2382)); +#2382 = ORIENTED_EDGE('',*,*,#2350,.T.); +#2383 = PLANE('',#2384); +#2384 = AXIS2_PLACEMENT_3D('',#2385,#2386,#2387); +#2385 = CARTESIAN_POINT('',(-36.5,39.45,64.)); +#2386 = DIRECTION('',(0.,-1.,0.)); +#2387 = DIRECTION('',(0.,-0.,-1.)); +#2388 = ADVANCED_FACE('',(#2389),#2392,.F.); +#2389 = FACE_BOUND('',#2390,.T.); +#2390 = EDGE_LOOP('',(#2391)); +#2391 = ORIENTED_EDGE('',*,*,#2367,.F.); +#2392 = PLANE('',#2393); +#2393 = AXIS2_PLACEMENT_3D('',#2394,#2395,#2396); +#2394 = CARTESIAN_POINT('',(-36.5,40.15,64.)); +#2395 = DIRECTION('',(0.,-1.,0.)); +#2396 = DIRECTION('',(0.,-0.,-1.)); +#2397 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2401)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2398,#2399,#2400)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2534 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2535 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2536 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2537 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2534, +#2398 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2399 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2400 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2401 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2398, 'distance_accuracy_value','confusion accuracy'); -#2538 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2539,#2541); -#2539 = ( REPRESENTATION_RELATIONSHIP('','',#2479,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2540) +#2402 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2403,#2405); +#2403 = ( REPRESENTATION_RELATIONSHIP('','',#2343,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2404) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2540 = ITEM_DEFINED_TRANSFORMATION('','',#11,#67); -#2541 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2542); -#2542 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('14', - 'ConnectorBank_Left_Hole_R01_C01','',#5,#2474,$); -#2543 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2476)); -#2544 = SHAPE_DEFINITION_REPRESENTATION(#2545,#2551); -#2545 = PRODUCT_DEFINITION_SHAPE('','',#2546); -#2546 = PRODUCT_DEFINITION('design','',#2547,#2550); -#2547 = PRODUCT_DEFINITION_FORMATION('','',#2548); -#2548 = PRODUCT('ConnectorBank_Left_Screw_R01', - 'ConnectorBank_Left_Screw_R01','',(#2549)); -#2549 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2550 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2551 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2552),#2605); -#2552 = MANIFOLD_SOLID_BREP('',#2553); -#2553 = CLOSED_SHELL('',(#2554,#2587,#2596)); -#2554 = ADVANCED_FACE('',(#2555),#2582,.T.); -#2555 = FACE_BOUND('',#2556,.T.); -#2556 = EDGE_LOOP('',(#2557,#2566,#2574,#2581)); -#2557 = ORIENTED_EDGE('',*,*,#2558,.F.); -#2558 = EDGE_CURVE('',#2559,#2559,#2561,.T.); -#2559 = VERTEX_POINT('',#2560); -#2560 = CARTESIAN_POINT('',(55.6,-36.95,53.45)); -#2561 = CIRCLE('',#2562,0.55); -#2562 = AXIS2_PLACEMENT_3D('',#2563,#2564,#2565); -#2563 = CARTESIAN_POINT('',(55.6,-36.95,54.)); -#2564 = DIRECTION('',(0.,-1.,0.)); -#2565 = DIRECTION('',(0.,-0.,-1.)); -#2566 = ORIENTED_EDGE('',*,*,#2567,.F.); -#2567 = EDGE_CURVE('',#2568,#2559,#2570,.T.); -#2568 = VERTEX_POINT('',#2569); -#2569 = CARTESIAN_POINT('',(55.6,-36.15,53.45)); -#2570 = LINE('',#2571,#2572); -#2571 = CARTESIAN_POINT('',(55.6,-36.15,53.45)); -#2572 = VECTOR('',#2573,1.); -#2573 = DIRECTION('',(0.,-1.,0.)); -#2574 = ORIENTED_EDGE('',*,*,#2575,.T.); -#2575 = EDGE_CURVE('',#2568,#2568,#2576,.T.); -#2576 = CIRCLE('',#2577,0.55); -#2577 = AXIS2_PLACEMENT_3D('',#2578,#2579,#2580); -#2578 = CARTESIAN_POINT('',(55.6,-36.15,54.)); -#2579 = DIRECTION('',(0.,-1.,0.)); -#2580 = DIRECTION('',(0.,-0.,-1.)); -#2581 = ORIENTED_EDGE('',*,*,#2567,.T.); -#2582 = CYLINDRICAL_SURFACE('',#2583,0.55); -#2583 = AXIS2_PLACEMENT_3D('',#2584,#2585,#2586); -#2584 = CARTESIAN_POINT('',(55.6,-36.15,54.)); -#2585 = DIRECTION('',(0.,-1.,0.)); -#2586 = DIRECTION('',(0.,-0.,-1.)); -#2587 = ADVANCED_FACE('',(#2588),#2591,.T.); -#2588 = FACE_BOUND('',#2589,.T.); -#2589 = EDGE_LOOP('',(#2590)); -#2590 = ORIENTED_EDGE('',*,*,#2558,.T.); -#2591 = PLANE('',#2592); -#2592 = AXIS2_PLACEMENT_3D('',#2593,#2594,#2595); -#2593 = CARTESIAN_POINT('',(55.6,-36.95,54.)); -#2594 = DIRECTION('',(0.,-1.,0.)); -#2595 = DIRECTION('',(0.,-0.,-1.)); -#2596 = ADVANCED_FACE('',(#2597),#2600,.F.); -#2597 = FACE_BOUND('',#2598,.T.); -#2598 = EDGE_LOOP('',(#2599)); -#2599 = ORIENTED_EDGE('',*,*,#2575,.F.); -#2600 = PLANE('',#2601); -#2601 = AXIS2_PLACEMENT_3D('',#2602,#2603,#2604); -#2602 = CARTESIAN_POINT('',(55.6,-36.15,54.)); -#2603 = DIRECTION('',(0.,-1.,0.)); -#2604 = DIRECTION('',(0.,-0.,-1.)); -#2605 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2609)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2606,#2607,#2608)) REPRESENTATION_CONTEXT +#2404 = ITEM_DEFINED_TRANSFORMATION('','',#11,#67); +#2405 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2406); +#2406 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('14', + 'ConnectorBank_Left_Hole_R02_C01','',#5,#2338,$); +#2407 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2340)); +#2408 = SHAPE_DEFINITION_REPRESENTATION(#2409,#2415); +#2409 = PRODUCT_DEFINITION_SHAPE('','',#2410); +#2410 = PRODUCT_DEFINITION('design','',#2411,#2414); +#2411 = PRODUCT_DEFINITION_FORMATION('','',#2412); +#2412 = PRODUCT('ConnectorBank_Left_Hole_R02_C02', + 'ConnectorBank_Left_Hole_R02_C02','',(#2413)); +#2413 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2414 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2415 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2416),#2469); +#2416 = MANIFOLD_SOLID_BREP('',#2417); +#2417 = CLOSED_SHELL('',(#2418,#2451,#2460)); +#2418 = ADVANCED_FACE('',(#2419),#2446,.T.); +#2419 = FACE_BOUND('',#2420,.T.); +#2420 = EDGE_LOOP('',(#2421,#2430,#2438,#2445)); +#2421 = ORIENTED_EDGE('',*,*,#2422,.F.); +#2422 = EDGE_CURVE('',#2423,#2423,#2425,.T.); +#2423 = VERTEX_POINT('',#2424); +#2424 = CARTESIAN_POINT('',(-30.5,39.45,63.)); +#2425 = CIRCLE('',#2426,1.); +#2426 = AXIS2_PLACEMENT_3D('',#2427,#2428,#2429); +#2427 = CARTESIAN_POINT('',(-30.5,39.45,64.)); +#2428 = DIRECTION('',(0.,-1.,0.)); +#2429 = DIRECTION('',(0.,-0.,-1.)); +#2430 = ORIENTED_EDGE('',*,*,#2431,.F.); +#2431 = EDGE_CURVE('',#2432,#2423,#2434,.T.); +#2432 = VERTEX_POINT('',#2433); +#2433 = CARTESIAN_POINT('',(-30.5,40.15,63.)); +#2434 = LINE('',#2435,#2436); +#2435 = CARTESIAN_POINT('',(-30.5,40.15,63.)); +#2436 = VECTOR('',#2437,1.); +#2437 = DIRECTION('',(0.,-1.,0.)); +#2438 = ORIENTED_EDGE('',*,*,#2439,.T.); +#2439 = EDGE_CURVE('',#2432,#2432,#2440,.T.); +#2440 = CIRCLE('',#2441,1.); +#2441 = AXIS2_PLACEMENT_3D('',#2442,#2443,#2444); +#2442 = CARTESIAN_POINT('',(-30.5,40.15,64.)); +#2443 = DIRECTION('',(0.,-1.,0.)); +#2444 = DIRECTION('',(0.,-0.,-1.)); +#2445 = ORIENTED_EDGE('',*,*,#2431,.T.); +#2446 = CYLINDRICAL_SURFACE('',#2447,1.); +#2447 = AXIS2_PLACEMENT_3D('',#2448,#2449,#2450); +#2448 = CARTESIAN_POINT('',(-30.5,40.15,64.)); +#2449 = DIRECTION('',(0.,-1.,0.)); +#2450 = DIRECTION('',(0.,-0.,-1.)); +#2451 = ADVANCED_FACE('',(#2452),#2455,.T.); +#2452 = FACE_BOUND('',#2453,.T.); +#2453 = EDGE_LOOP('',(#2454)); +#2454 = ORIENTED_EDGE('',*,*,#2422,.T.); +#2455 = PLANE('',#2456); +#2456 = AXIS2_PLACEMENT_3D('',#2457,#2458,#2459); +#2457 = CARTESIAN_POINT('',(-30.5,39.45,64.)); +#2458 = DIRECTION('',(0.,-1.,0.)); +#2459 = DIRECTION('',(0.,-0.,-1.)); +#2460 = ADVANCED_FACE('',(#2461),#2464,.F.); +#2461 = FACE_BOUND('',#2462,.T.); +#2462 = EDGE_LOOP('',(#2463)); +#2463 = ORIENTED_EDGE('',*,*,#2439,.F.); +#2464 = PLANE('',#2465); +#2465 = AXIS2_PLACEMENT_3D('',#2466,#2467,#2468); +#2466 = CARTESIAN_POINT('',(-30.5,40.15,64.)); +#2467 = DIRECTION('',(0.,-1.,0.)); +#2468 = DIRECTION('',(0.,-0.,-1.)); +#2469 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2473)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2470,#2471,#2472)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2606 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2607 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2608 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2609 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2606, +#2470 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2471 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2472 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2473 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2470, 'distance_accuracy_value','confusion accuracy'); -#2610 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2611,#2613); -#2611 = ( REPRESENTATION_RELATIONSHIP('','',#2551,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2612) +#2474 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2475,#2477); +#2475 = ( REPRESENTATION_RELATIONSHIP('','',#2415,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2476) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2612 = ITEM_DEFINED_TRANSFORMATION('','',#11,#71); -#2613 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2614); -#2614 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('15', - 'ConnectorBank_Left_Screw_R01','',#5,#2546,$); -#2615 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2548)); -#2616 = SHAPE_DEFINITION_REPRESENTATION(#2617,#2623); -#2617 = PRODUCT_DEFINITION_SHAPE('','',#2618); -#2618 = PRODUCT_DEFINITION('design','',#2619,#2622); -#2619 = PRODUCT_DEFINITION_FORMATION('','',#2620); -#2620 = PRODUCT('ConnectorBank_Left_Hole_R01_C02', - 'ConnectorBank_Left_Hole_R01_C02','',(#2621)); -#2621 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2622 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2623 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2624),#2677); -#2624 = MANIFOLD_SOLID_BREP('',#2625); -#2625 = CLOSED_SHELL('',(#2626,#2659,#2668)); -#2626 = ADVANCED_FACE('',(#2627),#2654,.T.); -#2627 = FACE_BOUND('',#2628,.T.); -#2628 = EDGE_LOOP('',(#2629,#2638,#2646,#2653)); -#2629 = ORIENTED_EDGE('',*,*,#2630,.F.); -#2630 = EDGE_CURVE('',#2631,#2631,#2633,.T.); -#2631 = VERTEX_POINT('',#2632); -#2632 = CARTESIAN_POINT('',(47.,-36.85,53.)); -#2633 = CIRCLE('',#2634,1.); -#2634 = AXIS2_PLACEMENT_3D('',#2635,#2636,#2637); -#2635 = CARTESIAN_POINT('',(47.,-36.85,54.)); -#2636 = DIRECTION('',(0.,-1.,0.)); -#2637 = DIRECTION('',(0.,-0.,-1.)); -#2638 = ORIENTED_EDGE('',*,*,#2639,.F.); -#2639 = EDGE_CURVE('',#2640,#2631,#2642,.T.); -#2640 = VERTEX_POINT('',#2641); -#2641 = CARTESIAN_POINT('',(47.,-36.15,53.)); -#2642 = LINE('',#2643,#2644); -#2643 = CARTESIAN_POINT('',(47.,-36.15,53.)); -#2644 = VECTOR('',#2645,1.); -#2645 = DIRECTION('',(0.,-1.,0.)); -#2646 = ORIENTED_EDGE('',*,*,#2647,.T.); -#2647 = EDGE_CURVE('',#2640,#2640,#2648,.T.); -#2648 = CIRCLE('',#2649,1.); -#2649 = AXIS2_PLACEMENT_3D('',#2650,#2651,#2652); -#2650 = CARTESIAN_POINT('',(47.,-36.15,54.)); -#2651 = DIRECTION('',(0.,-1.,0.)); -#2652 = DIRECTION('',(0.,-0.,-1.)); -#2653 = ORIENTED_EDGE('',*,*,#2639,.T.); -#2654 = CYLINDRICAL_SURFACE('',#2655,1.); -#2655 = AXIS2_PLACEMENT_3D('',#2656,#2657,#2658); -#2656 = CARTESIAN_POINT('',(47.,-36.15,54.)); -#2657 = DIRECTION('',(0.,-1.,0.)); -#2658 = DIRECTION('',(0.,-0.,-1.)); -#2659 = ADVANCED_FACE('',(#2660),#2663,.T.); -#2660 = FACE_BOUND('',#2661,.T.); -#2661 = EDGE_LOOP('',(#2662)); -#2662 = ORIENTED_EDGE('',*,*,#2630,.T.); -#2663 = PLANE('',#2664); -#2664 = AXIS2_PLACEMENT_3D('',#2665,#2666,#2667); -#2665 = CARTESIAN_POINT('',(47.,-36.85,54.)); -#2666 = DIRECTION('',(0.,-1.,0.)); -#2667 = DIRECTION('',(0.,-0.,-1.)); -#2668 = ADVANCED_FACE('',(#2669),#2672,.F.); -#2669 = FACE_BOUND('',#2670,.T.); -#2670 = EDGE_LOOP('',(#2671)); -#2671 = ORIENTED_EDGE('',*,*,#2647,.F.); -#2672 = PLANE('',#2673); -#2673 = AXIS2_PLACEMENT_3D('',#2674,#2675,#2676); -#2674 = CARTESIAN_POINT('',(47.,-36.15,54.)); -#2675 = DIRECTION('',(0.,-1.,0.)); -#2676 = DIRECTION('',(0.,-0.,-1.)); -#2677 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2681)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2678,#2679,#2680)) REPRESENTATION_CONTEXT +#2476 = ITEM_DEFINED_TRANSFORMATION('','',#11,#71); +#2477 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2478); +#2478 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('15', + 'ConnectorBank_Left_Hole_R02_C02','',#5,#2410,$); +#2479 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2412)); +#2480 = SHAPE_DEFINITION_REPRESENTATION(#2481,#2487); +#2481 = PRODUCT_DEFINITION_SHAPE('','',#2482); +#2482 = PRODUCT_DEFINITION('design','',#2483,#2486); +#2483 = PRODUCT_DEFINITION_FORMATION('','',#2484); +#2484 = PRODUCT('ConnectorBank_Left_Hole_R03_C01', + 'ConnectorBank_Left_Hole_R03_C01','',(#2485)); +#2485 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2486 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2487 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2488),#2541); +#2488 = MANIFOLD_SOLID_BREP('',#2489); +#2489 = CLOSED_SHELL('',(#2490,#2523,#2532)); +#2490 = ADVANCED_FACE('',(#2491),#2518,.T.); +#2491 = FACE_BOUND('',#2492,.T.); +#2492 = EDGE_LOOP('',(#2493,#2502,#2510,#2517)); +#2493 = ORIENTED_EDGE('',*,*,#2494,.F.); +#2494 = EDGE_CURVE('',#2495,#2495,#2497,.T.); +#2495 = VERTEX_POINT('',#2496); +#2496 = CARTESIAN_POINT('',(-36.5,39.45,73.)); +#2497 = CIRCLE('',#2498,1.); +#2498 = AXIS2_PLACEMENT_3D('',#2499,#2500,#2501); +#2499 = CARTESIAN_POINT('',(-36.5,39.45,74.)); +#2500 = DIRECTION('',(0.,-1.,0.)); +#2501 = DIRECTION('',(0.,-0.,-1.)); +#2502 = ORIENTED_EDGE('',*,*,#2503,.F.); +#2503 = EDGE_CURVE('',#2504,#2495,#2506,.T.); +#2504 = VERTEX_POINT('',#2505); +#2505 = CARTESIAN_POINT('',(-36.5,40.15,73.)); +#2506 = LINE('',#2507,#2508); +#2507 = CARTESIAN_POINT('',(-36.5,40.15,73.)); +#2508 = VECTOR('',#2509,1.); +#2509 = DIRECTION('',(0.,-1.,0.)); +#2510 = ORIENTED_EDGE('',*,*,#2511,.T.); +#2511 = EDGE_CURVE('',#2504,#2504,#2512,.T.); +#2512 = CIRCLE('',#2513,1.); +#2513 = AXIS2_PLACEMENT_3D('',#2514,#2515,#2516); +#2514 = CARTESIAN_POINT('',(-36.5,40.15,74.)); +#2515 = DIRECTION('',(0.,-1.,0.)); +#2516 = DIRECTION('',(0.,-0.,-1.)); +#2517 = ORIENTED_EDGE('',*,*,#2503,.T.); +#2518 = CYLINDRICAL_SURFACE('',#2519,1.); +#2519 = AXIS2_PLACEMENT_3D('',#2520,#2521,#2522); +#2520 = CARTESIAN_POINT('',(-36.5,40.15,74.)); +#2521 = DIRECTION('',(0.,-1.,0.)); +#2522 = DIRECTION('',(0.,-0.,-1.)); +#2523 = ADVANCED_FACE('',(#2524),#2527,.T.); +#2524 = FACE_BOUND('',#2525,.T.); +#2525 = EDGE_LOOP('',(#2526)); +#2526 = ORIENTED_EDGE('',*,*,#2494,.T.); +#2527 = PLANE('',#2528); +#2528 = AXIS2_PLACEMENT_3D('',#2529,#2530,#2531); +#2529 = CARTESIAN_POINT('',(-36.5,39.45,74.)); +#2530 = DIRECTION('',(0.,-1.,0.)); +#2531 = DIRECTION('',(0.,-0.,-1.)); +#2532 = ADVANCED_FACE('',(#2533),#2536,.F.); +#2533 = FACE_BOUND('',#2534,.T.); +#2534 = EDGE_LOOP('',(#2535)); +#2535 = ORIENTED_EDGE('',*,*,#2511,.F.); +#2536 = PLANE('',#2537); +#2537 = AXIS2_PLACEMENT_3D('',#2538,#2539,#2540); +#2538 = CARTESIAN_POINT('',(-36.5,40.15,74.)); +#2539 = DIRECTION('',(0.,-1.,0.)); +#2540 = DIRECTION('',(0.,-0.,-1.)); +#2541 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2545)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2542,#2543,#2544)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2678 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2679 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2680 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2681 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2678, +#2542 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2543 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2544 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2545 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2542, 'distance_accuracy_value','confusion accuracy'); -#2682 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2683,#2685); -#2683 = ( REPRESENTATION_RELATIONSHIP('','',#2623,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2684) +#2546 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2547,#2549); +#2547 = ( REPRESENTATION_RELATIONSHIP('','',#2487,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2548) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2684 = ITEM_DEFINED_TRANSFORMATION('','',#11,#75); -#2685 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2686); -#2686 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('16', - 'ConnectorBank_Left_Hole_R01_C02','',#5,#2618,$); -#2687 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2620)); -#2688 = SHAPE_DEFINITION_REPRESENTATION(#2689,#2695); -#2689 = PRODUCT_DEFINITION_SHAPE('','',#2690); -#2690 = PRODUCT_DEFINITION('design','',#2691,#2694); -#2691 = PRODUCT_DEFINITION_FORMATION('','',#2692); -#2692 = PRODUCT('ConnectorBank_Left_Hole_R02_C01', - 'ConnectorBank_Left_Hole_R02_C01','',(#2693)); -#2693 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2694 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2695 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2696),#2749); -#2696 = MANIFOLD_SOLID_BREP('',#2697); -#2697 = CLOSED_SHELL('',(#2698,#2731,#2740)); -#2698 = ADVANCED_FACE('',(#2699),#2726,.T.); -#2699 = FACE_BOUND('',#2700,.T.); -#2700 = EDGE_LOOP('',(#2701,#2710,#2718,#2725)); -#2701 = ORIENTED_EDGE('',*,*,#2702,.F.); -#2702 = EDGE_CURVE('',#2703,#2703,#2705,.T.); -#2703 = VERTEX_POINT('',#2704); -#2704 = CARTESIAN_POINT('',(41.,-36.85,63.)); -#2705 = CIRCLE('',#2706,1.); -#2706 = AXIS2_PLACEMENT_3D('',#2707,#2708,#2709); -#2707 = CARTESIAN_POINT('',(41.,-36.85,64.)); -#2708 = DIRECTION('',(0.,-1.,0.)); -#2709 = DIRECTION('',(0.,-0.,-1.)); -#2710 = ORIENTED_EDGE('',*,*,#2711,.F.); -#2711 = EDGE_CURVE('',#2712,#2703,#2714,.T.); -#2712 = VERTEX_POINT('',#2713); -#2713 = CARTESIAN_POINT('',(41.,-36.15,63.)); -#2714 = LINE('',#2715,#2716); -#2715 = CARTESIAN_POINT('',(41.,-36.15,63.)); -#2716 = VECTOR('',#2717,1.); -#2717 = DIRECTION('',(0.,-1.,0.)); -#2718 = ORIENTED_EDGE('',*,*,#2719,.T.); -#2719 = EDGE_CURVE('',#2712,#2712,#2720,.T.); -#2720 = CIRCLE('',#2721,1.); -#2721 = AXIS2_PLACEMENT_3D('',#2722,#2723,#2724); -#2722 = CARTESIAN_POINT('',(41.,-36.15,64.)); -#2723 = DIRECTION('',(0.,-1.,0.)); -#2724 = DIRECTION('',(0.,-0.,-1.)); -#2725 = ORIENTED_EDGE('',*,*,#2711,.T.); -#2726 = CYLINDRICAL_SURFACE('',#2727,1.); -#2727 = AXIS2_PLACEMENT_3D('',#2728,#2729,#2730); -#2728 = CARTESIAN_POINT('',(41.,-36.15,64.)); -#2729 = DIRECTION('',(0.,-1.,0.)); -#2730 = DIRECTION('',(0.,-0.,-1.)); -#2731 = ADVANCED_FACE('',(#2732),#2735,.T.); -#2732 = FACE_BOUND('',#2733,.T.); -#2733 = EDGE_LOOP('',(#2734)); -#2734 = ORIENTED_EDGE('',*,*,#2702,.T.); -#2735 = PLANE('',#2736); -#2736 = AXIS2_PLACEMENT_3D('',#2737,#2738,#2739); -#2737 = CARTESIAN_POINT('',(41.,-36.85,64.)); -#2738 = DIRECTION('',(0.,-1.,0.)); -#2739 = DIRECTION('',(0.,-0.,-1.)); -#2740 = ADVANCED_FACE('',(#2741),#2744,.F.); -#2741 = FACE_BOUND('',#2742,.T.); -#2742 = EDGE_LOOP('',(#2743)); -#2743 = ORIENTED_EDGE('',*,*,#2719,.F.); -#2744 = PLANE('',#2745); -#2745 = AXIS2_PLACEMENT_3D('',#2746,#2747,#2748); -#2746 = CARTESIAN_POINT('',(41.,-36.15,64.)); -#2747 = DIRECTION('',(0.,-1.,0.)); -#2748 = DIRECTION('',(0.,-0.,-1.)); -#2749 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2753)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2750,#2751,#2752)) REPRESENTATION_CONTEXT +#2548 = ITEM_DEFINED_TRANSFORMATION('','',#11,#75); +#2549 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2550); +#2550 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('16', + 'ConnectorBank_Left_Hole_R03_C01','',#5,#2482,$); +#2551 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2484)); +#2552 = SHAPE_DEFINITION_REPRESENTATION(#2553,#2559); +#2553 = PRODUCT_DEFINITION_SHAPE('','',#2554); +#2554 = PRODUCT_DEFINITION('design','',#2555,#2558); +#2555 = PRODUCT_DEFINITION_FORMATION('','',#2556); +#2556 = PRODUCT('ConnectorBank_Left_Hole_R03_C02', + 'ConnectorBank_Left_Hole_R03_C02','',(#2557)); +#2557 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2558 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2559 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2560),#2613); +#2560 = MANIFOLD_SOLID_BREP('',#2561); +#2561 = CLOSED_SHELL('',(#2562,#2595,#2604)); +#2562 = ADVANCED_FACE('',(#2563),#2590,.T.); +#2563 = FACE_BOUND('',#2564,.T.); +#2564 = EDGE_LOOP('',(#2565,#2574,#2582,#2589)); +#2565 = ORIENTED_EDGE('',*,*,#2566,.F.); +#2566 = EDGE_CURVE('',#2567,#2567,#2569,.T.); +#2567 = VERTEX_POINT('',#2568); +#2568 = CARTESIAN_POINT('',(-30.5,39.45,73.)); +#2569 = CIRCLE('',#2570,1.); +#2570 = AXIS2_PLACEMENT_3D('',#2571,#2572,#2573); +#2571 = CARTESIAN_POINT('',(-30.5,39.45,74.)); +#2572 = DIRECTION('',(0.,-1.,0.)); +#2573 = DIRECTION('',(0.,-0.,-1.)); +#2574 = ORIENTED_EDGE('',*,*,#2575,.F.); +#2575 = EDGE_CURVE('',#2576,#2567,#2578,.T.); +#2576 = VERTEX_POINT('',#2577); +#2577 = CARTESIAN_POINT('',(-30.5,40.15,73.)); +#2578 = LINE('',#2579,#2580); +#2579 = CARTESIAN_POINT('',(-30.5,40.15,73.)); +#2580 = VECTOR('',#2581,1.); +#2581 = DIRECTION('',(0.,-1.,0.)); +#2582 = ORIENTED_EDGE('',*,*,#2583,.T.); +#2583 = EDGE_CURVE('',#2576,#2576,#2584,.T.); +#2584 = CIRCLE('',#2585,1.); +#2585 = AXIS2_PLACEMENT_3D('',#2586,#2587,#2588); +#2586 = CARTESIAN_POINT('',(-30.5,40.15,74.)); +#2587 = DIRECTION('',(0.,-1.,0.)); +#2588 = DIRECTION('',(0.,-0.,-1.)); +#2589 = ORIENTED_EDGE('',*,*,#2575,.T.); +#2590 = CYLINDRICAL_SURFACE('',#2591,1.); +#2591 = AXIS2_PLACEMENT_3D('',#2592,#2593,#2594); +#2592 = CARTESIAN_POINT('',(-30.5,40.15,74.)); +#2593 = DIRECTION('',(0.,-1.,0.)); +#2594 = DIRECTION('',(0.,-0.,-1.)); +#2595 = ADVANCED_FACE('',(#2596),#2599,.T.); +#2596 = FACE_BOUND('',#2597,.T.); +#2597 = EDGE_LOOP('',(#2598)); +#2598 = ORIENTED_EDGE('',*,*,#2566,.T.); +#2599 = PLANE('',#2600); +#2600 = AXIS2_PLACEMENT_3D('',#2601,#2602,#2603); +#2601 = CARTESIAN_POINT('',(-30.5,39.45,74.)); +#2602 = DIRECTION('',(0.,-1.,0.)); +#2603 = DIRECTION('',(0.,-0.,-1.)); +#2604 = ADVANCED_FACE('',(#2605),#2608,.F.); +#2605 = FACE_BOUND('',#2606,.T.); +#2606 = EDGE_LOOP('',(#2607)); +#2607 = ORIENTED_EDGE('',*,*,#2583,.F.); +#2608 = PLANE('',#2609); +#2609 = AXIS2_PLACEMENT_3D('',#2610,#2611,#2612); +#2610 = CARTESIAN_POINT('',(-30.5,40.15,74.)); +#2611 = DIRECTION('',(0.,-1.,0.)); +#2612 = DIRECTION('',(0.,-0.,-1.)); +#2613 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2617)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2614,#2615,#2616)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2750 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2751 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2752 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2753 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2750, +#2614 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2615 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2616 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2617 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2614, 'distance_accuracy_value','confusion accuracy'); -#2754 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2755,#2757); -#2755 = ( REPRESENTATION_RELATIONSHIP('','',#2695,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2756) +#2618 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2619,#2621); +#2619 = ( REPRESENTATION_RELATIONSHIP('','',#2559,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2620) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2756 = ITEM_DEFINED_TRANSFORMATION('','',#11,#79); -#2757 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2758); -#2758 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('17', - 'ConnectorBank_Left_Hole_R02_C01','',#5,#2690,$); -#2759 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2692)); -#2760 = SHAPE_DEFINITION_REPRESENTATION(#2761,#2767); -#2761 = PRODUCT_DEFINITION_SHAPE('','',#2762); -#2762 = PRODUCT_DEFINITION('design','',#2763,#2766); -#2763 = PRODUCT_DEFINITION_FORMATION('','',#2764); -#2764 = PRODUCT('ConnectorBank_Left_Screw_R02', - 'ConnectorBank_Left_Screw_R02','',(#2765)); -#2765 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2766 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2767 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2768),#2821); -#2768 = MANIFOLD_SOLID_BREP('',#2769); -#2769 = CLOSED_SHELL('',(#2770,#2803,#2812)); -#2770 = ADVANCED_FACE('',(#2771),#2798,.T.); -#2771 = FACE_BOUND('',#2772,.T.); -#2772 = EDGE_LOOP('',(#2773,#2782,#2790,#2797)); -#2773 = ORIENTED_EDGE('',*,*,#2774,.F.); -#2774 = EDGE_CURVE('',#2775,#2775,#2777,.T.); -#2775 = VERTEX_POINT('',#2776); -#2776 = CARTESIAN_POINT('',(55.6,-36.95,63.45)); -#2777 = CIRCLE('',#2778,0.55); -#2778 = AXIS2_PLACEMENT_3D('',#2779,#2780,#2781); -#2779 = CARTESIAN_POINT('',(55.6,-36.95,64.)); -#2780 = DIRECTION('',(0.,-1.,0.)); -#2781 = DIRECTION('',(0.,-0.,-1.)); -#2782 = ORIENTED_EDGE('',*,*,#2783,.F.); -#2783 = EDGE_CURVE('',#2784,#2775,#2786,.T.); -#2784 = VERTEX_POINT('',#2785); -#2785 = CARTESIAN_POINT('',(55.6,-36.15,63.45)); -#2786 = LINE('',#2787,#2788); -#2787 = CARTESIAN_POINT('',(55.6,-36.15,63.45)); -#2788 = VECTOR('',#2789,1.); -#2789 = DIRECTION('',(0.,-1.,0.)); -#2790 = ORIENTED_EDGE('',*,*,#2791,.T.); -#2791 = EDGE_CURVE('',#2784,#2784,#2792,.T.); -#2792 = CIRCLE('',#2793,0.55); -#2793 = AXIS2_PLACEMENT_3D('',#2794,#2795,#2796); -#2794 = CARTESIAN_POINT('',(55.6,-36.15,64.)); -#2795 = DIRECTION('',(0.,-1.,0.)); -#2796 = DIRECTION('',(0.,-0.,-1.)); -#2797 = ORIENTED_EDGE('',*,*,#2783,.T.); -#2798 = CYLINDRICAL_SURFACE('',#2799,0.55); -#2799 = AXIS2_PLACEMENT_3D('',#2800,#2801,#2802); -#2800 = CARTESIAN_POINT('',(55.6,-36.15,64.)); -#2801 = DIRECTION('',(0.,-1.,0.)); -#2802 = DIRECTION('',(0.,-0.,-1.)); -#2803 = ADVANCED_FACE('',(#2804),#2807,.T.); -#2804 = FACE_BOUND('',#2805,.T.); -#2805 = EDGE_LOOP('',(#2806)); -#2806 = ORIENTED_EDGE('',*,*,#2774,.T.); -#2807 = PLANE('',#2808); -#2808 = AXIS2_PLACEMENT_3D('',#2809,#2810,#2811); -#2809 = CARTESIAN_POINT('',(55.6,-36.95,64.)); -#2810 = DIRECTION('',(0.,-1.,0.)); -#2811 = DIRECTION('',(0.,-0.,-1.)); -#2812 = ADVANCED_FACE('',(#2813),#2816,.F.); -#2813 = FACE_BOUND('',#2814,.T.); -#2814 = EDGE_LOOP('',(#2815)); -#2815 = ORIENTED_EDGE('',*,*,#2791,.F.); -#2816 = PLANE('',#2817); -#2817 = AXIS2_PLACEMENT_3D('',#2818,#2819,#2820); -#2818 = CARTESIAN_POINT('',(55.6,-36.15,64.)); -#2819 = DIRECTION('',(0.,-1.,0.)); -#2820 = DIRECTION('',(0.,-0.,-1.)); -#2821 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2825)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2822,#2823,#2824)) REPRESENTATION_CONTEXT +#2620 = ITEM_DEFINED_TRANSFORMATION('','',#11,#79); +#2621 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2622); +#2622 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('17', + 'ConnectorBank_Left_Hole_R03_C02','',#5,#2554,$); +#2623 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2556)); +#2624 = SHAPE_DEFINITION_REPRESENTATION(#2625,#2631); +#2625 = PRODUCT_DEFINITION_SHAPE('','',#2626); +#2626 = PRODUCT_DEFINITION('design','',#2627,#2630); +#2627 = PRODUCT_DEFINITION_FORMATION('','',#2628); +#2628 = PRODUCT('ConnectorBank_Left_Hole_R04_C01', + 'ConnectorBank_Left_Hole_R04_C01','',(#2629)); +#2629 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2630 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2631 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2632),#2685); +#2632 = MANIFOLD_SOLID_BREP('',#2633); +#2633 = CLOSED_SHELL('',(#2634,#2667,#2676)); +#2634 = ADVANCED_FACE('',(#2635),#2662,.T.); +#2635 = FACE_BOUND('',#2636,.T.); +#2636 = EDGE_LOOP('',(#2637,#2646,#2654,#2661)); +#2637 = ORIENTED_EDGE('',*,*,#2638,.F.); +#2638 = EDGE_CURVE('',#2639,#2639,#2641,.T.); +#2639 = VERTEX_POINT('',#2640); +#2640 = CARTESIAN_POINT('',(-36.5,39.45,83.)); +#2641 = CIRCLE('',#2642,1.); +#2642 = AXIS2_PLACEMENT_3D('',#2643,#2644,#2645); +#2643 = CARTESIAN_POINT('',(-36.5,39.45,84.)); +#2644 = DIRECTION('',(0.,-1.,0.)); +#2645 = DIRECTION('',(0.,-0.,-1.)); +#2646 = ORIENTED_EDGE('',*,*,#2647,.F.); +#2647 = EDGE_CURVE('',#2648,#2639,#2650,.T.); +#2648 = VERTEX_POINT('',#2649); +#2649 = CARTESIAN_POINT('',(-36.5,40.15,83.)); +#2650 = LINE('',#2651,#2652); +#2651 = CARTESIAN_POINT('',(-36.5,40.15,83.)); +#2652 = VECTOR('',#2653,1.); +#2653 = DIRECTION('',(0.,-1.,0.)); +#2654 = ORIENTED_EDGE('',*,*,#2655,.T.); +#2655 = EDGE_CURVE('',#2648,#2648,#2656,.T.); +#2656 = CIRCLE('',#2657,1.); +#2657 = AXIS2_PLACEMENT_3D('',#2658,#2659,#2660); +#2658 = CARTESIAN_POINT('',(-36.5,40.15,84.)); +#2659 = DIRECTION('',(0.,-1.,0.)); +#2660 = DIRECTION('',(0.,-0.,-1.)); +#2661 = ORIENTED_EDGE('',*,*,#2647,.T.); +#2662 = CYLINDRICAL_SURFACE('',#2663,1.); +#2663 = AXIS2_PLACEMENT_3D('',#2664,#2665,#2666); +#2664 = CARTESIAN_POINT('',(-36.5,40.15,84.)); +#2665 = DIRECTION('',(0.,-1.,0.)); +#2666 = DIRECTION('',(0.,-0.,-1.)); +#2667 = ADVANCED_FACE('',(#2668),#2671,.T.); +#2668 = FACE_BOUND('',#2669,.T.); +#2669 = EDGE_LOOP('',(#2670)); +#2670 = ORIENTED_EDGE('',*,*,#2638,.T.); +#2671 = PLANE('',#2672); +#2672 = AXIS2_PLACEMENT_3D('',#2673,#2674,#2675); +#2673 = CARTESIAN_POINT('',(-36.5,39.45,84.)); +#2674 = DIRECTION('',(0.,-1.,0.)); +#2675 = DIRECTION('',(0.,-0.,-1.)); +#2676 = ADVANCED_FACE('',(#2677),#2680,.F.); +#2677 = FACE_BOUND('',#2678,.T.); +#2678 = EDGE_LOOP('',(#2679)); +#2679 = ORIENTED_EDGE('',*,*,#2655,.F.); +#2680 = PLANE('',#2681); +#2681 = AXIS2_PLACEMENT_3D('',#2682,#2683,#2684); +#2682 = CARTESIAN_POINT('',(-36.5,40.15,84.)); +#2683 = DIRECTION('',(0.,-1.,0.)); +#2684 = DIRECTION('',(0.,-0.,-1.)); +#2685 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2689)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2686,#2687,#2688)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2822 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2823 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2824 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2825 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2822, +#2686 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2687 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2688 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2689 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2686, 'distance_accuracy_value','confusion accuracy'); -#2826 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2827,#2829); -#2827 = ( REPRESENTATION_RELATIONSHIP('','',#2767,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2828) +#2690 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2691,#2693); +#2691 = ( REPRESENTATION_RELATIONSHIP('','',#2631,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2692) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2828 = ITEM_DEFINED_TRANSFORMATION('','',#11,#83); -#2829 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2830); -#2830 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('18', - 'ConnectorBank_Left_Screw_R02','',#5,#2762,$); -#2831 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2764)); -#2832 = SHAPE_DEFINITION_REPRESENTATION(#2833,#2839); -#2833 = PRODUCT_DEFINITION_SHAPE('','',#2834); -#2834 = PRODUCT_DEFINITION('design','',#2835,#2838); -#2835 = PRODUCT_DEFINITION_FORMATION('','',#2836); -#2836 = PRODUCT('ConnectorBank_Left_Hole_R02_C02', - 'ConnectorBank_Left_Hole_R02_C02','',(#2837)); -#2837 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2838 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2839 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2840),#2893); -#2840 = MANIFOLD_SOLID_BREP('',#2841); -#2841 = CLOSED_SHELL('',(#2842,#2875,#2884)); -#2842 = ADVANCED_FACE('',(#2843),#2870,.T.); -#2843 = FACE_BOUND('',#2844,.T.); -#2844 = EDGE_LOOP('',(#2845,#2854,#2862,#2869)); -#2845 = ORIENTED_EDGE('',*,*,#2846,.F.); -#2846 = EDGE_CURVE('',#2847,#2847,#2849,.T.); -#2847 = VERTEX_POINT('',#2848); -#2848 = CARTESIAN_POINT('',(47.,-36.85,63.)); -#2849 = CIRCLE('',#2850,1.); -#2850 = AXIS2_PLACEMENT_3D('',#2851,#2852,#2853); -#2851 = CARTESIAN_POINT('',(47.,-36.85,64.)); -#2852 = DIRECTION('',(0.,-1.,0.)); -#2853 = DIRECTION('',(0.,-0.,-1.)); -#2854 = ORIENTED_EDGE('',*,*,#2855,.F.); -#2855 = EDGE_CURVE('',#2856,#2847,#2858,.T.); -#2856 = VERTEX_POINT('',#2857); -#2857 = CARTESIAN_POINT('',(47.,-36.15,63.)); -#2858 = LINE('',#2859,#2860); -#2859 = CARTESIAN_POINT('',(47.,-36.15,63.)); -#2860 = VECTOR('',#2861,1.); -#2861 = DIRECTION('',(0.,-1.,0.)); -#2862 = ORIENTED_EDGE('',*,*,#2863,.T.); -#2863 = EDGE_CURVE('',#2856,#2856,#2864,.T.); -#2864 = CIRCLE('',#2865,1.); -#2865 = AXIS2_PLACEMENT_3D('',#2866,#2867,#2868); -#2866 = CARTESIAN_POINT('',(47.,-36.15,64.)); -#2867 = DIRECTION('',(0.,-1.,0.)); -#2868 = DIRECTION('',(0.,-0.,-1.)); -#2869 = ORIENTED_EDGE('',*,*,#2855,.T.); -#2870 = CYLINDRICAL_SURFACE('',#2871,1.); -#2871 = AXIS2_PLACEMENT_3D('',#2872,#2873,#2874); -#2872 = CARTESIAN_POINT('',(47.,-36.15,64.)); -#2873 = DIRECTION('',(0.,-1.,0.)); -#2874 = DIRECTION('',(0.,-0.,-1.)); -#2875 = ADVANCED_FACE('',(#2876),#2879,.T.); -#2876 = FACE_BOUND('',#2877,.T.); -#2877 = EDGE_LOOP('',(#2878)); -#2878 = ORIENTED_EDGE('',*,*,#2846,.T.); -#2879 = PLANE('',#2880); -#2880 = AXIS2_PLACEMENT_3D('',#2881,#2882,#2883); -#2881 = CARTESIAN_POINT('',(47.,-36.85,64.)); -#2882 = DIRECTION('',(0.,-1.,0.)); -#2883 = DIRECTION('',(0.,-0.,-1.)); -#2884 = ADVANCED_FACE('',(#2885),#2888,.F.); -#2885 = FACE_BOUND('',#2886,.T.); -#2886 = EDGE_LOOP('',(#2887)); -#2887 = ORIENTED_EDGE('',*,*,#2863,.F.); -#2888 = PLANE('',#2889); -#2889 = AXIS2_PLACEMENT_3D('',#2890,#2891,#2892); -#2890 = CARTESIAN_POINT('',(47.,-36.15,64.)); -#2891 = DIRECTION('',(0.,-1.,0.)); -#2892 = DIRECTION('',(0.,-0.,-1.)); -#2893 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2897)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2894,#2895,#2896)) REPRESENTATION_CONTEXT +#2692 = ITEM_DEFINED_TRANSFORMATION('','',#11,#83); +#2693 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2694); +#2694 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('18', + 'ConnectorBank_Left_Hole_R04_C01','',#5,#2626,$); +#2695 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2628)); +#2696 = SHAPE_DEFINITION_REPRESENTATION(#2697,#2703); +#2697 = PRODUCT_DEFINITION_SHAPE('','',#2698); +#2698 = PRODUCT_DEFINITION('design','',#2699,#2702); +#2699 = PRODUCT_DEFINITION_FORMATION('','',#2700); +#2700 = PRODUCT('ConnectorBank_Left_Hole_R04_C02', + 'ConnectorBank_Left_Hole_R04_C02','',(#2701)); +#2701 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2702 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2703 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2704),#2757); +#2704 = MANIFOLD_SOLID_BREP('',#2705); +#2705 = CLOSED_SHELL('',(#2706,#2739,#2748)); +#2706 = ADVANCED_FACE('',(#2707),#2734,.T.); +#2707 = FACE_BOUND('',#2708,.T.); +#2708 = EDGE_LOOP('',(#2709,#2718,#2726,#2733)); +#2709 = ORIENTED_EDGE('',*,*,#2710,.F.); +#2710 = EDGE_CURVE('',#2711,#2711,#2713,.T.); +#2711 = VERTEX_POINT('',#2712); +#2712 = CARTESIAN_POINT('',(-30.5,39.45,83.)); +#2713 = CIRCLE('',#2714,1.); +#2714 = AXIS2_PLACEMENT_3D('',#2715,#2716,#2717); +#2715 = CARTESIAN_POINT('',(-30.5,39.45,84.)); +#2716 = DIRECTION('',(0.,-1.,0.)); +#2717 = DIRECTION('',(0.,-0.,-1.)); +#2718 = ORIENTED_EDGE('',*,*,#2719,.F.); +#2719 = EDGE_CURVE('',#2720,#2711,#2722,.T.); +#2720 = VERTEX_POINT('',#2721); +#2721 = CARTESIAN_POINT('',(-30.5,40.15,83.)); +#2722 = LINE('',#2723,#2724); +#2723 = CARTESIAN_POINT('',(-30.5,40.15,83.)); +#2724 = VECTOR('',#2725,1.); +#2725 = DIRECTION('',(0.,-1.,0.)); +#2726 = ORIENTED_EDGE('',*,*,#2727,.T.); +#2727 = EDGE_CURVE('',#2720,#2720,#2728,.T.); +#2728 = CIRCLE('',#2729,1.); +#2729 = AXIS2_PLACEMENT_3D('',#2730,#2731,#2732); +#2730 = CARTESIAN_POINT('',(-30.5,40.15,84.)); +#2731 = DIRECTION('',(0.,-1.,0.)); +#2732 = DIRECTION('',(0.,-0.,-1.)); +#2733 = ORIENTED_EDGE('',*,*,#2719,.T.); +#2734 = CYLINDRICAL_SURFACE('',#2735,1.); +#2735 = AXIS2_PLACEMENT_3D('',#2736,#2737,#2738); +#2736 = CARTESIAN_POINT('',(-30.5,40.15,84.)); +#2737 = DIRECTION('',(0.,-1.,0.)); +#2738 = DIRECTION('',(0.,-0.,-1.)); +#2739 = ADVANCED_FACE('',(#2740),#2743,.T.); +#2740 = FACE_BOUND('',#2741,.T.); +#2741 = EDGE_LOOP('',(#2742)); +#2742 = ORIENTED_EDGE('',*,*,#2710,.T.); +#2743 = PLANE('',#2744); +#2744 = AXIS2_PLACEMENT_3D('',#2745,#2746,#2747); +#2745 = CARTESIAN_POINT('',(-30.5,39.45,84.)); +#2746 = DIRECTION('',(0.,-1.,0.)); +#2747 = DIRECTION('',(0.,-0.,-1.)); +#2748 = ADVANCED_FACE('',(#2749),#2752,.F.); +#2749 = FACE_BOUND('',#2750,.T.); +#2750 = EDGE_LOOP('',(#2751)); +#2751 = ORIENTED_EDGE('',*,*,#2727,.F.); +#2752 = PLANE('',#2753); +#2753 = AXIS2_PLACEMENT_3D('',#2754,#2755,#2756); +#2754 = CARTESIAN_POINT('',(-30.5,40.15,84.)); +#2755 = DIRECTION('',(0.,-1.,0.)); +#2756 = DIRECTION('',(0.,-0.,-1.)); +#2757 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2761)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2758,#2759,#2760)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2894 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2895 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2896 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2897 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2894, +#2758 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2759 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2760 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2761 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2758, 'distance_accuracy_value','confusion accuracy'); -#2898 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2899,#2901); -#2899 = ( REPRESENTATION_RELATIONSHIP('','',#2839,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2900) +#2762 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2763,#2765); +#2763 = ( REPRESENTATION_RELATIONSHIP('','',#2703,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2764) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2900 = ITEM_DEFINED_TRANSFORMATION('','',#11,#87); -#2901 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2902); -#2902 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('19', - 'ConnectorBank_Left_Hole_R02_C02','',#5,#2834,$); -#2903 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2836)); -#2904 = SHAPE_DEFINITION_REPRESENTATION(#2905,#2911); -#2905 = PRODUCT_DEFINITION_SHAPE('','',#2906); -#2906 = PRODUCT_DEFINITION('design','',#2907,#2910); -#2907 = PRODUCT_DEFINITION_FORMATION('','',#2908); -#2908 = PRODUCT('ConnectorBank_Left_Hole_R03_C01', - 'ConnectorBank_Left_Hole_R03_C01','',(#2909)); -#2909 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2910 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2911 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2912),#2965); -#2912 = MANIFOLD_SOLID_BREP('',#2913); -#2913 = CLOSED_SHELL('',(#2914,#2947,#2956)); -#2914 = ADVANCED_FACE('',(#2915),#2942,.T.); -#2915 = FACE_BOUND('',#2916,.T.); -#2916 = EDGE_LOOP('',(#2917,#2926,#2934,#2941)); -#2917 = ORIENTED_EDGE('',*,*,#2918,.F.); -#2918 = EDGE_CURVE('',#2919,#2919,#2921,.T.); -#2919 = VERTEX_POINT('',#2920); -#2920 = CARTESIAN_POINT('',(41.,-36.85,73.)); -#2921 = CIRCLE('',#2922,1.); -#2922 = AXIS2_PLACEMENT_3D('',#2923,#2924,#2925); -#2923 = CARTESIAN_POINT('',(41.,-36.85,74.)); -#2924 = DIRECTION('',(0.,-1.,0.)); -#2925 = DIRECTION('',(0.,-0.,-1.)); -#2926 = ORIENTED_EDGE('',*,*,#2927,.F.); -#2927 = EDGE_CURVE('',#2928,#2919,#2930,.T.); -#2928 = VERTEX_POINT('',#2929); -#2929 = CARTESIAN_POINT('',(41.,-36.15,73.)); -#2930 = LINE('',#2931,#2932); -#2931 = CARTESIAN_POINT('',(41.,-36.15,73.)); -#2932 = VECTOR('',#2933,1.); -#2933 = DIRECTION('',(0.,-1.,0.)); -#2934 = ORIENTED_EDGE('',*,*,#2935,.T.); -#2935 = EDGE_CURVE('',#2928,#2928,#2936,.T.); -#2936 = CIRCLE('',#2937,1.); -#2937 = AXIS2_PLACEMENT_3D('',#2938,#2939,#2940); -#2938 = CARTESIAN_POINT('',(41.,-36.15,74.)); -#2939 = DIRECTION('',(0.,-1.,0.)); -#2940 = DIRECTION('',(0.,-0.,-1.)); -#2941 = ORIENTED_EDGE('',*,*,#2927,.T.); -#2942 = CYLINDRICAL_SURFACE('',#2943,1.); -#2943 = AXIS2_PLACEMENT_3D('',#2944,#2945,#2946); -#2944 = CARTESIAN_POINT('',(41.,-36.15,74.)); -#2945 = DIRECTION('',(0.,-1.,0.)); -#2946 = DIRECTION('',(0.,-0.,-1.)); -#2947 = ADVANCED_FACE('',(#2948),#2951,.T.); -#2948 = FACE_BOUND('',#2949,.T.); -#2949 = EDGE_LOOP('',(#2950)); -#2950 = ORIENTED_EDGE('',*,*,#2918,.T.); -#2951 = PLANE('',#2952); -#2952 = AXIS2_PLACEMENT_3D('',#2953,#2954,#2955); -#2953 = CARTESIAN_POINT('',(41.,-36.85,74.)); -#2954 = DIRECTION('',(0.,-1.,0.)); -#2955 = DIRECTION('',(0.,-0.,-1.)); -#2956 = ADVANCED_FACE('',(#2957),#2960,.F.); -#2957 = FACE_BOUND('',#2958,.T.); -#2958 = EDGE_LOOP('',(#2959)); -#2959 = ORIENTED_EDGE('',*,*,#2935,.F.); -#2960 = PLANE('',#2961); -#2961 = AXIS2_PLACEMENT_3D('',#2962,#2963,#2964); -#2962 = CARTESIAN_POINT('',(41.,-36.15,74.)); -#2963 = DIRECTION('',(0.,-1.,0.)); -#2964 = DIRECTION('',(0.,-0.,-1.)); -#2965 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2969)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#2966,#2967,#2968)) REPRESENTATION_CONTEXT +#2764 = ITEM_DEFINED_TRANSFORMATION('','',#11,#87); +#2765 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2766); +#2766 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('19', + 'ConnectorBank_Left_Hole_R04_C02','',#5,#2698,$); +#2767 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2700)); +#2768 = SHAPE_DEFINITION_REPRESENTATION(#2769,#2775); +#2769 = PRODUCT_DEFINITION_SHAPE('','',#2770); +#2770 = PRODUCT_DEFINITION('design','',#2771,#2774); +#2771 = PRODUCT_DEFINITION_FORMATION('','',#2772); +#2772 = PRODUCT('ConnectorBank_Left_Hole_R05_C01', + 'ConnectorBank_Left_Hole_R05_C01','',(#2773)); +#2773 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2774 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2775 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2776),#2829); +#2776 = MANIFOLD_SOLID_BREP('',#2777); +#2777 = CLOSED_SHELL('',(#2778,#2811,#2820)); +#2778 = ADVANCED_FACE('',(#2779),#2806,.T.); +#2779 = FACE_BOUND('',#2780,.T.); +#2780 = EDGE_LOOP('',(#2781,#2790,#2798,#2805)); +#2781 = ORIENTED_EDGE('',*,*,#2782,.F.); +#2782 = EDGE_CURVE('',#2783,#2783,#2785,.T.); +#2783 = VERTEX_POINT('',#2784); +#2784 = CARTESIAN_POINT('',(-36.5,39.45,93.)); +#2785 = CIRCLE('',#2786,1.); +#2786 = AXIS2_PLACEMENT_3D('',#2787,#2788,#2789); +#2787 = CARTESIAN_POINT('',(-36.5,39.45,94.)); +#2788 = DIRECTION('',(0.,-1.,0.)); +#2789 = DIRECTION('',(0.,-0.,-1.)); +#2790 = ORIENTED_EDGE('',*,*,#2791,.F.); +#2791 = EDGE_CURVE('',#2792,#2783,#2794,.T.); +#2792 = VERTEX_POINT('',#2793); +#2793 = CARTESIAN_POINT('',(-36.5,40.15,93.)); +#2794 = LINE('',#2795,#2796); +#2795 = CARTESIAN_POINT('',(-36.5,40.15,93.)); +#2796 = VECTOR('',#2797,1.); +#2797 = DIRECTION('',(0.,-1.,0.)); +#2798 = ORIENTED_EDGE('',*,*,#2799,.T.); +#2799 = EDGE_CURVE('',#2792,#2792,#2800,.T.); +#2800 = CIRCLE('',#2801,1.); +#2801 = AXIS2_PLACEMENT_3D('',#2802,#2803,#2804); +#2802 = CARTESIAN_POINT('',(-36.5,40.15,94.)); +#2803 = DIRECTION('',(0.,-1.,0.)); +#2804 = DIRECTION('',(0.,-0.,-1.)); +#2805 = ORIENTED_EDGE('',*,*,#2791,.T.); +#2806 = CYLINDRICAL_SURFACE('',#2807,1.); +#2807 = AXIS2_PLACEMENT_3D('',#2808,#2809,#2810); +#2808 = CARTESIAN_POINT('',(-36.5,40.15,94.)); +#2809 = DIRECTION('',(0.,-1.,0.)); +#2810 = DIRECTION('',(0.,-0.,-1.)); +#2811 = ADVANCED_FACE('',(#2812),#2815,.T.); +#2812 = FACE_BOUND('',#2813,.T.); +#2813 = EDGE_LOOP('',(#2814)); +#2814 = ORIENTED_EDGE('',*,*,#2782,.T.); +#2815 = PLANE('',#2816); +#2816 = AXIS2_PLACEMENT_3D('',#2817,#2818,#2819); +#2817 = CARTESIAN_POINT('',(-36.5,39.45,94.)); +#2818 = DIRECTION('',(0.,-1.,0.)); +#2819 = DIRECTION('',(0.,-0.,-1.)); +#2820 = ADVANCED_FACE('',(#2821),#2824,.F.); +#2821 = FACE_BOUND('',#2822,.T.); +#2822 = EDGE_LOOP('',(#2823)); +#2823 = ORIENTED_EDGE('',*,*,#2799,.F.); +#2824 = PLANE('',#2825); +#2825 = AXIS2_PLACEMENT_3D('',#2826,#2827,#2828); +#2826 = CARTESIAN_POINT('',(-36.5,40.15,94.)); +#2827 = DIRECTION('',(0.,-1.,0.)); +#2828 = DIRECTION('',(0.,-0.,-1.)); +#2829 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2833)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2830,#2831,#2832)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#2966 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#2967 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#2968 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#2969 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2966, +#2830 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2831 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2832 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2833 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2830, 'distance_accuracy_value','confusion accuracy'); -#2970 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2971,#2973); -#2971 = ( REPRESENTATION_RELATIONSHIP('','',#2911,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2972) +#2834 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2835,#2837); +#2835 = ( REPRESENTATION_RELATIONSHIP('','',#2775,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2836) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#2972 = ITEM_DEFINED_TRANSFORMATION('','',#11,#91); -#2973 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #2974); -#2974 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('20', - 'ConnectorBank_Left_Hole_R03_C01','',#5,#2906,$); -#2975 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2908)); -#2976 = SHAPE_DEFINITION_REPRESENTATION(#2977,#2983); -#2977 = PRODUCT_DEFINITION_SHAPE('','',#2978); -#2978 = PRODUCT_DEFINITION('design','',#2979,#2982); -#2979 = PRODUCT_DEFINITION_FORMATION('','',#2980); -#2980 = PRODUCT('ConnectorBank_Left_Screw_R03', - 'ConnectorBank_Left_Screw_R03','',(#2981)); -#2981 = PRODUCT_CONTEXT('',#2,'mechanical'); -#2982 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#2983 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2984),#3037); -#2984 = MANIFOLD_SOLID_BREP('',#2985); -#2985 = CLOSED_SHELL('',(#2986,#3019,#3028)); -#2986 = ADVANCED_FACE('',(#2987),#3014,.T.); -#2987 = FACE_BOUND('',#2988,.T.); -#2988 = EDGE_LOOP('',(#2989,#2998,#3006,#3013)); -#2989 = ORIENTED_EDGE('',*,*,#2990,.F.); -#2990 = EDGE_CURVE('',#2991,#2991,#2993,.T.); -#2991 = VERTEX_POINT('',#2992); -#2992 = CARTESIAN_POINT('',(55.6,-36.95,73.45)); -#2993 = CIRCLE('',#2994,0.55); -#2994 = AXIS2_PLACEMENT_3D('',#2995,#2996,#2997); -#2995 = CARTESIAN_POINT('',(55.6,-36.95,74.)); -#2996 = DIRECTION('',(0.,-1.,0.)); -#2997 = DIRECTION('',(0.,-0.,-1.)); -#2998 = ORIENTED_EDGE('',*,*,#2999,.F.); -#2999 = EDGE_CURVE('',#3000,#2991,#3002,.T.); -#3000 = VERTEX_POINT('',#3001); -#3001 = CARTESIAN_POINT('',(55.6,-36.15,73.45)); -#3002 = LINE('',#3003,#3004); -#3003 = CARTESIAN_POINT('',(55.6,-36.15,73.45)); -#3004 = VECTOR('',#3005,1.); -#3005 = DIRECTION('',(0.,-1.,0.)); -#3006 = ORIENTED_EDGE('',*,*,#3007,.T.); -#3007 = EDGE_CURVE('',#3000,#3000,#3008,.T.); -#3008 = CIRCLE('',#3009,0.55); -#3009 = AXIS2_PLACEMENT_3D('',#3010,#3011,#3012); -#3010 = CARTESIAN_POINT('',(55.6,-36.15,74.)); -#3011 = DIRECTION('',(0.,-1.,0.)); -#3012 = DIRECTION('',(0.,-0.,-1.)); -#3013 = ORIENTED_EDGE('',*,*,#2999,.T.); -#3014 = CYLINDRICAL_SURFACE('',#3015,0.55); -#3015 = AXIS2_PLACEMENT_3D('',#3016,#3017,#3018); -#3016 = CARTESIAN_POINT('',(55.6,-36.15,74.)); -#3017 = DIRECTION('',(0.,-1.,0.)); -#3018 = DIRECTION('',(0.,-0.,-1.)); -#3019 = ADVANCED_FACE('',(#3020),#3023,.T.); -#3020 = FACE_BOUND('',#3021,.T.); -#3021 = EDGE_LOOP('',(#3022)); -#3022 = ORIENTED_EDGE('',*,*,#2990,.T.); -#3023 = PLANE('',#3024); -#3024 = AXIS2_PLACEMENT_3D('',#3025,#3026,#3027); -#3025 = CARTESIAN_POINT('',(55.6,-36.95,74.)); -#3026 = DIRECTION('',(0.,-1.,0.)); -#3027 = DIRECTION('',(0.,-0.,-1.)); -#3028 = ADVANCED_FACE('',(#3029),#3032,.F.); -#3029 = FACE_BOUND('',#3030,.T.); -#3030 = EDGE_LOOP('',(#3031)); -#3031 = ORIENTED_EDGE('',*,*,#3007,.F.); -#3032 = PLANE('',#3033); -#3033 = AXIS2_PLACEMENT_3D('',#3034,#3035,#3036); -#3034 = CARTESIAN_POINT('',(55.6,-36.15,74.)); -#3035 = DIRECTION('',(0.,-1.,0.)); -#3036 = DIRECTION('',(0.,-0.,-1.)); -#3037 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3041)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3038,#3039,#3040)) REPRESENTATION_CONTEXT +#2836 = ITEM_DEFINED_TRANSFORMATION('','',#11,#91); +#2837 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2838); +#2838 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('20', + 'ConnectorBank_Left_Hole_R05_C01','',#5,#2770,$); +#2839 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2772)); +#2840 = SHAPE_DEFINITION_REPRESENTATION(#2841,#2847); +#2841 = PRODUCT_DEFINITION_SHAPE('','',#2842); +#2842 = PRODUCT_DEFINITION('design','',#2843,#2846); +#2843 = PRODUCT_DEFINITION_FORMATION('','',#2844); +#2844 = PRODUCT('ConnectorBank_Left_Hole_R05_C02', + 'ConnectorBank_Left_Hole_R05_C02','',(#2845)); +#2845 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2846 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2847 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2848),#2901); +#2848 = MANIFOLD_SOLID_BREP('',#2849); +#2849 = CLOSED_SHELL('',(#2850,#2883,#2892)); +#2850 = ADVANCED_FACE('',(#2851),#2878,.T.); +#2851 = FACE_BOUND('',#2852,.T.); +#2852 = EDGE_LOOP('',(#2853,#2862,#2870,#2877)); +#2853 = ORIENTED_EDGE('',*,*,#2854,.F.); +#2854 = EDGE_CURVE('',#2855,#2855,#2857,.T.); +#2855 = VERTEX_POINT('',#2856); +#2856 = CARTESIAN_POINT('',(-30.5,39.45,93.)); +#2857 = CIRCLE('',#2858,1.); +#2858 = AXIS2_PLACEMENT_3D('',#2859,#2860,#2861); +#2859 = CARTESIAN_POINT('',(-30.5,39.45,94.)); +#2860 = DIRECTION('',(0.,-1.,0.)); +#2861 = DIRECTION('',(0.,-0.,-1.)); +#2862 = ORIENTED_EDGE('',*,*,#2863,.F.); +#2863 = EDGE_CURVE('',#2864,#2855,#2866,.T.); +#2864 = VERTEX_POINT('',#2865); +#2865 = CARTESIAN_POINT('',(-30.5,40.15,93.)); +#2866 = LINE('',#2867,#2868); +#2867 = CARTESIAN_POINT('',(-30.5,40.15,93.)); +#2868 = VECTOR('',#2869,1.); +#2869 = DIRECTION('',(0.,-1.,0.)); +#2870 = ORIENTED_EDGE('',*,*,#2871,.T.); +#2871 = EDGE_CURVE('',#2864,#2864,#2872,.T.); +#2872 = CIRCLE('',#2873,1.); +#2873 = AXIS2_PLACEMENT_3D('',#2874,#2875,#2876); +#2874 = CARTESIAN_POINT('',(-30.5,40.15,94.)); +#2875 = DIRECTION('',(0.,-1.,0.)); +#2876 = DIRECTION('',(0.,-0.,-1.)); +#2877 = ORIENTED_EDGE('',*,*,#2863,.T.); +#2878 = CYLINDRICAL_SURFACE('',#2879,1.); +#2879 = AXIS2_PLACEMENT_3D('',#2880,#2881,#2882); +#2880 = CARTESIAN_POINT('',(-30.5,40.15,94.)); +#2881 = DIRECTION('',(0.,-1.,0.)); +#2882 = DIRECTION('',(0.,-0.,-1.)); +#2883 = ADVANCED_FACE('',(#2884),#2887,.T.); +#2884 = FACE_BOUND('',#2885,.T.); +#2885 = EDGE_LOOP('',(#2886)); +#2886 = ORIENTED_EDGE('',*,*,#2854,.T.); +#2887 = PLANE('',#2888); +#2888 = AXIS2_PLACEMENT_3D('',#2889,#2890,#2891); +#2889 = CARTESIAN_POINT('',(-30.5,39.45,94.)); +#2890 = DIRECTION('',(0.,-1.,0.)); +#2891 = DIRECTION('',(0.,-0.,-1.)); +#2892 = ADVANCED_FACE('',(#2893),#2896,.F.); +#2893 = FACE_BOUND('',#2894,.T.); +#2894 = EDGE_LOOP('',(#2895)); +#2895 = ORIENTED_EDGE('',*,*,#2871,.F.); +#2896 = PLANE('',#2897); +#2897 = AXIS2_PLACEMENT_3D('',#2898,#2899,#2900); +#2898 = CARTESIAN_POINT('',(-30.5,40.15,94.)); +#2899 = DIRECTION('',(0.,-1.,0.)); +#2900 = DIRECTION('',(0.,-0.,-1.)); +#2901 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2905)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2902,#2903,#2904)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3038 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3039 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3040 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3041 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3038, +#2902 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2903 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2904 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2905 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2902, 'distance_accuracy_value','confusion accuracy'); -#3042 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3043,#3045); -#3043 = ( REPRESENTATION_RELATIONSHIP('','',#2983,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3044) +#2906 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2907,#2909); +#2907 = ( REPRESENTATION_RELATIONSHIP('','',#2847,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2908) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3044 = ITEM_DEFINED_TRANSFORMATION('','',#11,#95); -#3045 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3046); -#3046 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('21', - 'ConnectorBank_Left_Screw_R03','',#5,#2978,$); -#3047 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2980)); -#3048 = SHAPE_DEFINITION_REPRESENTATION(#3049,#3055); -#3049 = PRODUCT_DEFINITION_SHAPE('','',#3050); -#3050 = PRODUCT_DEFINITION('design','',#3051,#3054); -#3051 = PRODUCT_DEFINITION_FORMATION('','',#3052); -#3052 = PRODUCT('ConnectorBank_Left_Hole_R03_C02', - 'ConnectorBank_Left_Hole_R03_C02','',(#3053)); -#3053 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3054 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3055 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3056),#3109); -#3056 = MANIFOLD_SOLID_BREP('',#3057); -#3057 = CLOSED_SHELL('',(#3058,#3091,#3100)); -#3058 = ADVANCED_FACE('',(#3059),#3086,.T.); -#3059 = FACE_BOUND('',#3060,.T.); -#3060 = EDGE_LOOP('',(#3061,#3070,#3078,#3085)); -#3061 = ORIENTED_EDGE('',*,*,#3062,.F.); -#3062 = EDGE_CURVE('',#3063,#3063,#3065,.T.); -#3063 = VERTEX_POINT('',#3064); -#3064 = CARTESIAN_POINT('',(47.,-36.85,73.)); -#3065 = CIRCLE('',#3066,1.); -#3066 = AXIS2_PLACEMENT_3D('',#3067,#3068,#3069); -#3067 = CARTESIAN_POINT('',(47.,-36.85,74.)); -#3068 = DIRECTION('',(0.,-1.,0.)); -#3069 = DIRECTION('',(0.,-0.,-1.)); -#3070 = ORIENTED_EDGE('',*,*,#3071,.F.); -#3071 = EDGE_CURVE('',#3072,#3063,#3074,.T.); -#3072 = VERTEX_POINT('',#3073); -#3073 = CARTESIAN_POINT('',(47.,-36.15,73.)); -#3074 = LINE('',#3075,#3076); -#3075 = CARTESIAN_POINT('',(47.,-36.15,73.)); -#3076 = VECTOR('',#3077,1.); -#3077 = DIRECTION('',(0.,-1.,0.)); -#3078 = ORIENTED_EDGE('',*,*,#3079,.T.); -#3079 = EDGE_CURVE('',#3072,#3072,#3080,.T.); -#3080 = CIRCLE('',#3081,1.); -#3081 = AXIS2_PLACEMENT_3D('',#3082,#3083,#3084); -#3082 = CARTESIAN_POINT('',(47.,-36.15,74.)); -#3083 = DIRECTION('',(0.,-1.,0.)); -#3084 = DIRECTION('',(0.,-0.,-1.)); -#3085 = ORIENTED_EDGE('',*,*,#3071,.T.); -#3086 = CYLINDRICAL_SURFACE('',#3087,1.); -#3087 = AXIS2_PLACEMENT_3D('',#3088,#3089,#3090); -#3088 = CARTESIAN_POINT('',(47.,-36.15,74.)); -#3089 = DIRECTION('',(0.,-1.,0.)); -#3090 = DIRECTION('',(0.,-0.,-1.)); -#3091 = ADVANCED_FACE('',(#3092),#3095,.T.); -#3092 = FACE_BOUND('',#3093,.T.); -#3093 = EDGE_LOOP('',(#3094)); -#3094 = ORIENTED_EDGE('',*,*,#3062,.T.); -#3095 = PLANE('',#3096); -#3096 = AXIS2_PLACEMENT_3D('',#3097,#3098,#3099); -#3097 = CARTESIAN_POINT('',(47.,-36.85,74.)); -#3098 = DIRECTION('',(0.,-1.,0.)); -#3099 = DIRECTION('',(0.,-0.,-1.)); -#3100 = ADVANCED_FACE('',(#3101),#3104,.F.); -#3101 = FACE_BOUND('',#3102,.T.); -#3102 = EDGE_LOOP('',(#3103)); -#3103 = ORIENTED_EDGE('',*,*,#3079,.F.); -#3104 = PLANE('',#3105); -#3105 = AXIS2_PLACEMENT_3D('',#3106,#3107,#3108); -#3106 = CARTESIAN_POINT('',(47.,-36.15,74.)); -#3107 = DIRECTION('',(0.,-1.,0.)); -#3108 = DIRECTION('',(0.,-0.,-1.)); -#3109 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3113)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3110,#3111,#3112)) REPRESENTATION_CONTEXT +#2908 = ITEM_DEFINED_TRANSFORMATION('','',#11,#95); +#2909 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2910); +#2910 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('21', + 'ConnectorBank_Left_Hole_R05_C02','',#5,#2842,$); +#2911 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2844)); +#2912 = SHAPE_DEFINITION_REPRESENTATION(#2913,#2919); +#2913 = PRODUCT_DEFINITION_SHAPE('','',#2914); +#2914 = PRODUCT_DEFINITION('design','',#2915,#2918); +#2915 = PRODUCT_DEFINITION_FORMATION('','',#2916); +#2916 = PRODUCT('ConnectorBank_Left_Hole_R06_C01', + 'ConnectorBank_Left_Hole_R06_C01','',(#2917)); +#2917 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2918 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2919 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2920),#2973); +#2920 = MANIFOLD_SOLID_BREP('',#2921); +#2921 = CLOSED_SHELL('',(#2922,#2955,#2964)); +#2922 = ADVANCED_FACE('',(#2923),#2950,.T.); +#2923 = FACE_BOUND('',#2924,.T.); +#2924 = EDGE_LOOP('',(#2925,#2934,#2942,#2949)); +#2925 = ORIENTED_EDGE('',*,*,#2926,.F.); +#2926 = EDGE_CURVE('',#2927,#2927,#2929,.T.); +#2927 = VERTEX_POINT('',#2928); +#2928 = CARTESIAN_POINT('',(-36.5,39.45,103.)); +#2929 = CIRCLE('',#2930,1.); +#2930 = AXIS2_PLACEMENT_3D('',#2931,#2932,#2933); +#2931 = CARTESIAN_POINT('',(-36.5,39.45,104.)); +#2932 = DIRECTION('',(0.,-1.,0.)); +#2933 = DIRECTION('',(0.,-0.,-1.)); +#2934 = ORIENTED_EDGE('',*,*,#2935,.F.); +#2935 = EDGE_CURVE('',#2936,#2927,#2938,.T.); +#2936 = VERTEX_POINT('',#2937); +#2937 = CARTESIAN_POINT('',(-36.5,40.15,103.)); +#2938 = LINE('',#2939,#2940); +#2939 = CARTESIAN_POINT('',(-36.5,40.15,103.)); +#2940 = VECTOR('',#2941,1.); +#2941 = DIRECTION('',(0.,-1.,0.)); +#2942 = ORIENTED_EDGE('',*,*,#2943,.T.); +#2943 = EDGE_CURVE('',#2936,#2936,#2944,.T.); +#2944 = CIRCLE('',#2945,1.); +#2945 = AXIS2_PLACEMENT_3D('',#2946,#2947,#2948); +#2946 = CARTESIAN_POINT('',(-36.5,40.15,104.)); +#2947 = DIRECTION('',(0.,-1.,0.)); +#2948 = DIRECTION('',(0.,-0.,-1.)); +#2949 = ORIENTED_EDGE('',*,*,#2935,.T.); +#2950 = CYLINDRICAL_SURFACE('',#2951,1.); +#2951 = AXIS2_PLACEMENT_3D('',#2952,#2953,#2954); +#2952 = CARTESIAN_POINT('',(-36.5,40.15,104.)); +#2953 = DIRECTION('',(0.,-1.,0.)); +#2954 = DIRECTION('',(0.,-0.,-1.)); +#2955 = ADVANCED_FACE('',(#2956),#2959,.T.); +#2956 = FACE_BOUND('',#2957,.T.); +#2957 = EDGE_LOOP('',(#2958)); +#2958 = ORIENTED_EDGE('',*,*,#2926,.T.); +#2959 = PLANE('',#2960); +#2960 = AXIS2_PLACEMENT_3D('',#2961,#2962,#2963); +#2961 = CARTESIAN_POINT('',(-36.5,39.45,104.)); +#2962 = DIRECTION('',(0.,-1.,0.)); +#2963 = DIRECTION('',(0.,-0.,-1.)); +#2964 = ADVANCED_FACE('',(#2965),#2968,.F.); +#2965 = FACE_BOUND('',#2966,.T.); +#2966 = EDGE_LOOP('',(#2967)); +#2967 = ORIENTED_EDGE('',*,*,#2943,.F.); +#2968 = PLANE('',#2969); +#2969 = AXIS2_PLACEMENT_3D('',#2970,#2971,#2972); +#2970 = CARTESIAN_POINT('',(-36.5,40.15,104.)); +#2971 = DIRECTION('',(0.,-1.,0.)); +#2972 = DIRECTION('',(0.,-0.,-1.)); +#2973 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2977)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2974,#2975,#2976)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3110 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3111 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3112 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3113 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3110, +#2974 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2975 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2976 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2977 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#2974, 'distance_accuracy_value','confusion accuracy'); -#3114 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3115,#3117); -#3115 = ( REPRESENTATION_RELATIONSHIP('','',#3055,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3116) +#2978 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2979,#2981); +#2979 = ( REPRESENTATION_RELATIONSHIP('','',#2919,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2980) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3116 = ITEM_DEFINED_TRANSFORMATION('','',#11,#99); -#3117 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3118); -#3118 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('22', - 'ConnectorBank_Left_Hole_R03_C02','',#5,#3050,$); -#3119 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3052)); -#3120 = SHAPE_DEFINITION_REPRESENTATION(#3121,#3127); -#3121 = PRODUCT_DEFINITION_SHAPE('','',#3122); -#3122 = PRODUCT_DEFINITION('design','',#3123,#3126); -#3123 = PRODUCT_DEFINITION_FORMATION('','',#3124); -#3124 = PRODUCT('ConnectorBank_Left_Hole_R04_C01', - 'ConnectorBank_Left_Hole_R04_C01','',(#3125)); -#3125 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3126 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3127 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3128),#3181); -#3128 = MANIFOLD_SOLID_BREP('',#3129); -#3129 = CLOSED_SHELL('',(#3130,#3163,#3172)); -#3130 = ADVANCED_FACE('',(#3131),#3158,.T.); -#3131 = FACE_BOUND('',#3132,.T.); -#3132 = EDGE_LOOP('',(#3133,#3142,#3150,#3157)); -#3133 = ORIENTED_EDGE('',*,*,#3134,.F.); -#3134 = EDGE_CURVE('',#3135,#3135,#3137,.T.); -#3135 = VERTEX_POINT('',#3136); -#3136 = CARTESIAN_POINT('',(41.,-36.85,83.)); -#3137 = CIRCLE('',#3138,1.); -#3138 = AXIS2_PLACEMENT_3D('',#3139,#3140,#3141); -#3139 = CARTESIAN_POINT('',(41.,-36.85,84.)); -#3140 = DIRECTION('',(0.,-1.,0.)); -#3141 = DIRECTION('',(0.,-0.,-1.)); -#3142 = ORIENTED_EDGE('',*,*,#3143,.F.); -#3143 = EDGE_CURVE('',#3144,#3135,#3146,.T.); -#3144 = VERTEX_POINT('',#3145); -#3145 = CARTESIAN_POINT('',(41.,-36.15,83.)); -#3146 = LINE('',#3147,#3148); -#3147 = CARTESIAN_POINT('',(41.,-36.15,83.)); -#3148 = VECTOR('',#3149,1.); -#3149 = DIRECTION('',(0.,-1.,0.)); -#3150 = ORIENTED_EDGE('',*,*,#3151,.T.); -#3151 = EDGE_CURVE('',#3144,#3144,#3152,.T.); -#3152 = CIRCLE('',#3153,1.); -#3153 = AXIS2_PLACEMENT_3D('',#3154,#3155,#3156); -#3154 = CARTESIAN_POINT('',(41.,-36.15,84.)); -#3155 = DIRECTION('',(0.,-1.,0.)); -#3156 = DIRECTION('',(0.,-0.,-1.)); -#3157 = ORIENTED_EDGE('',*,*,#3143,.T.); -#3158 = CYLINDRICAL_SURFACE('',#3159,1.); -#3159 = AXIS2_PLACEMENT_3D('',#3160,#3161,#3162); -#3160 = CARTESIAN_POINT('',(41.,-36.15,84.)); -#3161 = DIRECTION('',(0.,-1.,0.)); -#3162 = DIRECTION('',(0.,-0.,-1.)); -#3163 = ADVANCED_FACE('',(#3164),#3167,.T.); -#3164 = FACE_BOUND('',#3165,.T.); -#3165 = EDGE_LOOP('',(#3166)); -#3166 = ORIENTED_EDGE('',*,*,#3134,.T.); -#3167 = PLANE('',#3168); -#3168 = AXIS2_PLACEMENT_3D('',#3169,#3170,#3171); -#3169 = CARTESIAN_POINT('',(41.,-36.85,84.)); -#3170 = DIRECTION('',(0.,-1.,0.)); -#3171 = DIRECTION('',(0.,-0.,-1.)); -#3172 = ADVANCED_FACE('',(#3173),#3176,.F.); -#3173 = FACE_BOUND('',#3174,.T.); -#3174 = EDGE_LOOP('',(#3175)); -#3175 = ORIENTED_EDGE('',*,*,#3151,.F.); -#3176 = PLANE('',#3177); -#3177 = AXIS2_PLACEMENT_3D('',#3178,#3179,#3180); -#3178 = CARTESIAN_POINT('',(41.,-36.15,84.)); -#3179 = DIRECTION('',(0.,-1.,0.)); -#3180 = DIRECTION('',(0.,-0.,-1.)); -#3181 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3185)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3182,#3183,#3184)) REPRESENTATION_CONTEXT +#2980 = ITEM_DEFINED_TRANSFORMATION('','',#11,#99); +#2981 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2982); +#2982 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('22', + 'ConnectorBank_Left_Hole_R06_C01','',#5,#2914,$); +#2983 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2916)); +#2984 = SHAPE_DEFINITION_REPRESENTATION(#2985,#2991); +#2985 = PRODUCT_DEFINITION_SHAPE('','',#2986); +#2986 = PRODUCT_DEFINITION('design','',#2987,#2990); +#2987 = PRODUCT_DEFINITION_FORMATION('','',#2988); +#2988 = PRODUCT('ConnectorBank_Left_Hole_R06_C02', + 'ConnectorBank_Left_Hole_R06_C02','',(#2989)); +#2989 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2990 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2991 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2992),#3045); +#2992 = MANIFOLD_SOLID_BREP('',#2993); +#2993 = CLOSED_SHELL('',(#2994,#3027,#3036)); +#2994 = ADVANCED_FACE('',(#2995),#3022,.T.); +#2995 = FACE_BOUND('',#2996,.T.); +#2996 = EDGE_LOOP('',(#2997,#3006,#3014,#3021)); +#2997 = ORIENTED_EDGE('',*,*,#2998,.F.); +#2998 = EDGE_CURVE('',#2999,#2999,#3001,.T.); +#2999 = VERTEX_POINT('',#3000); +#3000 = CARTESIAN_POINT('',(-30.5,39.45,103.)); +#3001 = CIRCLE('',#3002,1.); +#3002 = AXIS2_PLACEMENT_3D('',#3003,#3004,#3005); +#3003 = CARTESIAN_POINT('',(-30.5,39.45,104.)); +#3004 = DIRECTION('',(0.,-1.,0.)); +#3005 = DIRECTION('',(0.,-0.,-1.)); +#3006 = ORIENTED_EDGE('',*,*,#3007,.F.); +#3007 = EDGE_CURVE('',#3008,#2999,#3010,.T.); +#3008 = VERTEX_POINT('',#3009); +#3009 = CARTESIAN_POINT('',(-30.5,40.15,103.)); +#3010 = LINE('',#3011,#3012); +#3011 = CARTESIAN_POINT('',(-30.5,40.15,103.)); +#3012 = VECTOR('',#3013,1.); +#3013 = DIRECTION('',(0.,-1.,0.)); +#3014 = ORIENTED_EDGE('',*,*,#3015,.T.); +#3015 = EDGE_CURVE('',#3008,#3008,#3016,.T.); +#3016 = CIRCLE('',#3017,1.); +#3017 = AXIS2_PLACEMENT_3D('',#3018,#3019,#3020); +#3018 = CARTESIAN_POINT('',(-30.5,40.15,104.)); +#3019 = DIRECTION('',(0.,-1.,0.)); +#3020 = DIRECTION('',(0.,-0.,-1.)); +#3021 = ORIENTED_EDGE('',*,*,#3007,.T.); +#3022 = CYLINDRICAL_SURFACE('',#3023,1.); +#3023 = AXIS2_PLACEMENT_3D('',#3024,#3025,#3026); +#3024 = CARTESIAN_POINT('',(-30.5,40.15,104.)); +#3025 = DIRECTION('',(0.,-1.,0.)); +#3026 = DIRECTION('',(0.,-0.,-1.)); +#3027 = ADVANCED_FACE('',(#3028),#3031,.T.); +#3028 = FACE_BOUND('',#3029,.T.); +#3029 = EDGE_LOOP('',(#3030)); +#3030 = ORIENTED_EDGE('',*,*,#2998,.T.); +#3031 = PLANE('',#3032); +#3032 = AXIS2_PLACEMENT_3D('',#3033,#3034,#3035); +#3033 = CARTESIAN_POINT('',(-30.5,39.45,104.)); +#3034 = DIRECTION('',(0.,-1.,0.)); +#3035 = DIRECTION('',(0.,-0.,-1.)); +#3036 = ADVANCED_FACE('',(#3037),#3040,.F.); +#3037 = FACE_BOUND('',#3038,.T.); +#3038 = EDGE_LOOP('',(#3039)); +#3039 = ORIENTED_EDGE('',*,*,#3015,.F.); +#3040 = PLANE('',#3041); +#3041 = AXIS2_PLACEMENT_3D('',#3042,#3043,#3044); +#3042 = CARTESIAN_POINT('',(-30.5,40.15,104.)); +#3043 = DIRECTION('',(0.,-1.,0.)); +#3044 = DIRECTION('',(0.,-0.,-1.)); +#3045 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3049)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3046,#3047,#3048)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3182 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3183 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3184 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3185 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3182, +#3046 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3047 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3048 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3049 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3046, 'distance_accuracy_value','confusion accuracy'); -#3186 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3187,#3189); -#3187 = ( REPRESENTATION_RELATIONSHIP('','',#3127,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3188) +#3050 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3051,#3053); +#3051 = ( REPRESENTATION_RELATIONSHIP('','',#2991,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3052) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3188 = ITEM_DEFINED_TRANSFORMATION('','',#11,#103); -#3189 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3190); -#3190 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('23', - 'ConnectorBank_Left_Hole_R04_C01','',#5,#3122,$); -#3191 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3124)); -#3192 = SHAPE_DEFINITION_REPRESENTATION(#3193,#3199); -#3193 = PRODUCT_DEFINITION_SHAPE('','',#3194); -#3194 = PRODUCT_DEFINITION('design','',#3195,#3198); -#3195 = PRODUCT_DEFINITION_FORMATION('','',#3196); -#3196 = PRODUCT('ConnectorBank_Left_Screw_R04', - 'ConnectorBank_Left_Screw_R04','',(#3197)); -#3197 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3198 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3199 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3200),#3253); -#3200 = MANIFOLD_SOLID_BREP('',#3201); -#3201 = CLOSED_SHELL('',(#3202,#3235,#3244)); -#3202 = ADVANCED_FACE('',(#3203),#3230,.T.); -#3203 = FACE_BOUND('',#3204,.T.); -#3204 = EDGE_LOOP('',(#3205,#3214,#3222,#3229)); -#3205 = ORIENTED_EDGE('',*,*,#3206,.F.); -#3206 = EDGE_CURVE('',#3207,#3207,#3209,.T.); -#3207 = VERTEX_POINT('',#3208); -#3208 = CARTESIAN_POINT('',(55.6,-36.95,83.45)); -#3209 = CIRCLE('',#3210,0.55); -#3210 = AXIS2_PLACEMENT_3D('',#3211,#3212,#3213); -#3211 = CARTESIAN_POINT('',(55.6,-36.95,84.)); -#3212 = DIRECTION('',(0.,-1.,0.)); -#3213 = DIRECTION('',(0.,-0.,-1.)); -#3214 = ORIENTED_EDGE('',*,*,#3215,.F.); -#3215 = EDGE_CURVE('',#3216,#3207,#3218,.T.); -#3216 = VERTEX_POINT('',#3217); -#3217 = CARTESIAN_POINT('',(55.6,-36.15,83.45)); -#3218 = LINE('',#3219,#3220); -#3219 = CARTESIAN_POINT('',(55.6,-36.15,83.45)); -#3220 = VECTOR('',#3221,1.); -#3221 = DIRECTION('',(0.,-1.,0.)); -#3222 = ORIENTED_EDGE('',*,*,#3223,.T.); -#3223 = EDGE_CURVE('',#3216,#3216,#3224,.T.); -#3224 = CIRCLE('',#3225,0.55); -#3225 = AXIS2_PLACEMENT_3D('',#3226,#3227,#3228); -#3226 = CARTESIAN_POINT('',(55.6,-36.15,84.)); -#3227 = DIRECTION('',(0.,-1.,0.)); -#3228 = DIRECTION('',(0.,-0.,-1.)); -#3229 = ORIENTED_EDGE('',*,*,#3215,.T.); -#3230 = CYLINDRICAL_SURFACE('',#3231,0.55); -#3231 = AXIS2_PLACEMENT_3D('',#3232,#3233,#3234); -#3232 = CARTESIAN_POINT('',(55.6,-36.15,84.)); -#3233 = DIRECTION('',(0.,-1.,0.)); -#3234 = DIRECTION('',(0.,-0.,-1.)); -#3235 = ADVANCED_FACE('',(#3236),#3239,.T.); -#3236 = FACE_BOUND('',#3237,.T.); -#3237 = EDGE_LOOP('',(#3238)); -#3238 = ORIENTED_EDGE('',*,*,#3206,.T.); -#3239 = PLANE('',#3240); -#3240 = AXIS2_PLACEMENT_3D('',#3241,#3242,#3243); -#3241 = CARTESIAN_POINT('',(55.6,-36.95,84.)); -#3242 = DIRECTION('',(0.,-1.,0.)); -#3243 = DIRECTION('',(0.,-0.,-1.)); -#3244 = ADVANCED_FACE('',(#3245),#3248,.F.); -#3245 = FACE_BOUND('',#3246,.T.); -#3246 = EDGE_LOOP('',(#3247)); -#3247 = ORIENTED_EDGE('',*,*,#3223,.F.); -#3248 = PLANE('',#3249); -#3249 = AXIS2_PLACEMENT_3D('',#3250,#3251,#3252); -#3250 = CARTESIAN_POINT('',(55.6,-36.15,84.)); -#3251 = DIRECTION('',(0.,-1.,0.)); -#3252 = DIRECTION('',(0.,-0.,-1.)); -#3253 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3257)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3254,#3255,#3256)) REPRESENTATION_CONTEXT +#3052 = ITEM_DEFINED_TRANSFORMATION('','',#11,#103); +#3053 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3054); +#3054 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('23', + 'ConnectorBank_Left_Hole_R06_C02','',#5,#2986,$); +#3055 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2988)); +#3056 = SHAPE_DEFINITION_REPRESENTATION(#3057,#3063); +#3057 = PRODUCT_DEFINITION_SHAPE('','',#3058); +#3058 = PRODUCT_DEFINITION('design','',#3059,#3062); +#3059 = PRODUCT_DEFINITION_FORMATION('','',#3060); +#3060 = PRODUCT('ConnectorBank_Left_Hole_R07_C01', + 'ConnectorBank_Left_Hole_R07_C01','',(#3061)); +#3061 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3062 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3063 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3064),#3117); +#3064 = MANIFOLD_SOLID_BREP('',#3065); +#3065 = CLOSED_SHELL('',(#3066,#3099,#3108)); +#3066 = ADVANCED_FACE('',(#3067),#3094,.T.); +#3067 = FACE_BOUND('',#3068,.T.); +#3068 = EDGE_LOOP('',(#3069,#3078,#3086,#3093)); +#3069 = ORIENTED_EDGE('',*,*,#3070,.F.); +#3070 = EDGE_CURVE('',#3071,#3071,#3073,.T.); +#3071 = VERTEX_POINT('',#3072); +#3072 = CARTESIAN_POINT('',(-36.5,39.45,113.)); +#3073 = CIRCLE('',#3074,1.); +#3074 = AXIS2_PLACEMENT_3D('',#3075,#3076,#3077); +#3075 = CARTESIAN_POINT('',(-36.5,39.45,114.)); +#3076 = DIRECTION('',(0.,-1.,0.)); +#3077 = DIRECTION('',(0.,-0.,-1.)); +#3078 = ORIENTED_EDGE('',*,*,#3079,.F.); +#3079 = EDGE_CURVE('',#3080,#3071,#3082,.T.); +#3080 = VERTEX_POINT('',#3081); +#3081 = CARTESIAN_POINT('',(-36.5,40.15,113.)); +#3082 = LINE('',#3083,#3084); +#3083 = CARTESIAN_POINT('',(-36.5,40.15,113.)); +#3084 = VECTOR('',#3085,1.); +#3085 = DIRECTION('',(0.,-1.,0.)); +#3086 = ORIENTED_EDGE('',*,*,#3087,.T.); +#3087 = EDGE_CURVE('',#3080,#3080,#3088,.T.); +#3088 = CIRCLE('',#3089,1.); +#3089 = AXIS2_PLACEMENT_3D('',#3090,#3091,#3092); +#3090 = CARTESIAN_POINT('',(-36.5,40.15,114.)); +#3091 = DIRECTION('',(0.,-1.,0.)); +#3092 = DIRECTION('',(0.,-0.,-1.)); +#3093 = ORIENTED_EDGE('',*,*,#3079,.T.); +#3094 = CYLINDRICAL_SURFACE('',#3095,1.); +#3095 = AXIS2_PLACEMENT_3D('',#3096,#3097,#3098); +#3096 = CARTESIAN_POINT('',(-36.5,40.15,114.)); +#3097 = DIRECTION('',(0.,-1.,0.)); +#3098 = DIRECTION('',(0.,-0.,-1.)); +#3099 = ADVANCED_FACE('',(#3100),#3103,.T.); +#3100 = FACE_BOUND('',#3101,.T.); +#3101 = EDGE_LOOP('',(#3102)); +#3102 = ORIENTED_EDGE('',*,*,#3070,.T.); +#3103 = PLANE('',#3104); +#3104 = AXIS2_PLACEMENT_3D('',#3105,#3106,#3107); +#3105 = CARTESIAN_POINT('',(-36.5,39.45,114.)); +#3106 = DIRECTION('',(0.,-1.,0.)); +#3107 = DIRECTION('',(0.,-0.,-1.)); +#3108 = ADVANCED_FACE('',(#3109),#3112,.F.); +#3109 = FACE_BOUND('',#3110,.T.); +#3110 = EDGE_LOOP('',(#3111)); +#3111 = ORIENTED_EDGE('',*,*,#3087,.F.); +#3112 = PLANE('',#3113); +#3113 = AXIS2_PLACEMENT_3D('',#3114,#3115,#3116); +#3114 = CARTESIAN_POINT('',(-36.5,40.15,114.)); +#3115 = DIRECTION('',(0.,-1.,0.)); +#3116 = DIRECTION('',(0.,-0.,-1.)); +#3117 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3121)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3118,#3119,#3120)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3254 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3255 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3256 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3257 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3254, +#3118 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3119 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3120 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3121 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3118, 'distance_accuracy_value','confusion accuracy'); -#3258 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3259,#3261); -#3259 = ( REPRESENTATION_RELATIONSHIP('','',#3199,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3260) +#3122 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3123,#3125); +#3123 = ( REPRESENTATION_RELATIONSHIP('','',#3063,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3124) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3260 = ITEM_DEFINED_TRANSFORMATION('','',#11,#107); -#3261 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3262); -#3262 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('24', - 'ConnectorBank_Left_Screw_R04','',#5,#3194,$); -#3263 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3196)); -#3264 = SHAPE_DEFINITION_REPRESENTATION(#3265,#3271); -#3265 = PRODUCT_DEFINITION_SHAPE('','',#3266); -#3266 = PRODUCT_DEFINITION('design','',#3267,#3270); -#3267 = PRODUCT_DEFINITION_FORMATION('','',#3268); -#3268 = PRODUCT('ConnectorBank_Left_Hole_R04_C02', - 'ConnectorBank_Left_Hole_R04_C02','',(#3269)); -#3269 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3270 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3271 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3272),#3325); -#3272 = MANIFOLD_SOLID_BREP('',#3273); -#3273 = CLOSED_SHELL('',(#3274,#3307,#3316)); -#3274 = ADVANCED_FACE('',(#3275),#3302,.T.); -#3275 = FACE_BOUND('',#3276,.T.); -#3276 = EDGE_LOOP('',(#3277,#3286,#3294,#3301)); -#3277 = ORIENTED_EDGE('',*,*,#3278,.F.); -#3278 = EDGE_CURVE('',#3279,#3279,#3281,.T.); -#3279 = VERTEX_POINT('',#3280); -#3280 = CARTESIAN_POINT('',(47.,-36.85,83.)); -#3281 = CIRCLE('',#3282,1.); -#3282 = AXIS2_PLACEMENT_3D('',#3283,#3284,#3285); -#3283 = CARTESIAN_POINT('',(47.,-36.85,84.)); -#3284 = DIRECTION('',(0.,-1.,0.)); -#3285 = DIRECTION('',(0.,-0.,-1.)); -#3286 = ORIENTED_EDGE('',*,*,#3287,.F.); -#3287 = EDGE_CURVE('',#3288,#3279,#3290,.T.); -#3288 = VERTEX_POINT('',#3289); -#3289 = CARTESIAN_POINT('',(47.,-36.15,83.)); -#3290 = LINE('',#3291,#3292); -#3291 = CARTESIAN_POINT('',(47.,-36.15,83.)); -#3292 = VECTOR('',#3293,1.); -#3293 = DIRECTION('',(0.,-1.,0.)); -#3294 = ORIENTED_EDGE('',*,*,#3295,.T.); -#3295 = EDGE_CURVE('',#3288,#3288,#3296,.T.); -#3296 = CIRCLE('',#3297,1.); -#3297 = AXIS2_PLACEMENT_3D('',#3298,#3299,#3300); -#3298 = CARTESIAN_POINT('',(47.,-36.15,84.)); -#3299 = DIRECTION('',(0.,-1.,0.)); -#3300 = DIRECTION('',(0.,-0.,-1.)); -#3301 = ORIENTED_EDGE('',*,*,#3287,.T.); -#3302 = CYLINDRICAL_SURFACE('',#3303,1.); -#3303 = AXIS2_PLACEMENT_3D('',#3304,#3305,#3306); -#3304 = CARTESIAN_POINT('',(47.,-36.15,84.)); -#3305 = DIRECTION('',(0.,-1.,0.)); -#3306 = DIRECTION('',(0.,-0.,-1.)); -#3307 = ADVANCED_FACE('',(#3308),#3311,.T.); -#3308 = FACE_BOUND('',#3309,.T.); -#3309 = EDGE_LOOP('',(#3310)); -#3310 = ORIENTED_EDGE('',*,*,#3278,.T.); -#3311 = PLANE('',#3312); -#3312 = AXIS2_PLACEMENT_3D('',#3313,#3314,#3315); -#3313 = CARTESIAN_POINT('',(47.,-36.85,84.)); -#3314 = DIRECTION('',(0.,-1.,0.)); -#3315 = DIRECTION('',(0.,-0.,-1.)); -#3316 = ADVANCED_FACE('',(#3317),#3320,.F.); -#3317 = FACE_BOUND('',#3318,.T.); -#3318 = EDGE_LOOP('',(#3319)); -#3319 = ORIENTED_EDGE('',*,*,#3295,.F.); -#3320 = PLANE('',#3321); -#3321 = AXIS2_PLACEMENT_3D('',#3322,#3323,#3324); -#3322 = CARTESIAN_POINT('',(47.,-36.15,84.)); -#3323 = DIRECTION('',(0.,-1.,0.)); -#3324 = DIRECTION('',(0.,-0.,-1.)); -#3325 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3329)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3326,#3327,#3328)) REPRESENTATION_CONTEXT +#3124 = ITEM_DEFINED_TRANSFORMATION('','',#11,#107); +#3125 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3126); +#3126 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('24', + 'ConnectorBank_Left_Hole_R07_C01','',#5,#3058,$); +#3127 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3060)); +#3128 = SHAPE_DEFINITION_REPRESENTATION(#3129,#3135); +#3129 = PRODUCT_DEFINITION_SHAPE('','',#3130); +#3130 = PRODUCT_DEFINITION('design','',#3131,#3134); +#3131 = PRODUCT_DEFINITION_FORMATION('','',#3132); +#3132 = PRODUCT('ConnectorBank_Left_Hole_R07_C02', + 'ConnectorBank_Left_Hole_R07_C02','',(#3133)); +#3133 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3134 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3135 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3136),#3189); +#3136 = MANIFOLD_SOLID_BREP('',#3137); +#3137 = CLOSED_SHELL('',(#3138,#3171,#3180)); +#3138 = ADVANCED_FACE('',(#3139),#3166,.T.); +#3139 = FACE_BOUND('',#3140,.T.); +#3140 = EDGE_LOOP('',(#3141,#3150,#3158,#3165)); +#3141 = ORIENTED_EDGE('',*,*,#3142,.F.); +#3142 = EDGE_CURVE('',#3143,#3143,#3145,.T.); +#3143 = VERTEX_POINT('',#3144); +#3144 = CARTESIAN_POINT('',(-30.5,39.45,113.)); +#3145 = CIRCLE('',#3146,1.); +#3146 = AXIS2_PLACEMENT_3D('',#3147,#3148,#3149); +#3147 = CARTESIAN_POINT('',(-30.5,39.45,114.)); +#3148 = DIRECTION('',(0.,-1.,0.)); +#3149 = DIRECTION('',(0.,-0.,-1.)); +#3150 = ORIENTED_EDGE('',*,*,#3151,.F.); +#3151 = EDGE_CURVE('',#3152,#3143,#3154,.T.); +#3152 = VERTEX_POINT('',#3153); +#3153 = CARTESIAN_POINT('',(-30.5,40.15,113.)); +#3154 = LINE('',#3155,#3156); +#3155 = CARTESIAN_POINT('',(-30.5,40.15,113.)); +#3156 = VECTOR('',#3157,1.); +#3157 = DIRECTION('',(0.,-1.,0.)); +#3158 = ORIENTED_EDGE('',*,*,#3159,.T.); +#3159 = EDGE_CURVE('',#3152,#3152,#3160,.T.); +#3160 = CIRCLE('',#3161,1.); +#3161 = AXIS2_PLACEMENT_3D('',#3162,#3163,#3164); +#3162 = CARTESIAN_POINT('',(-30.5,40.15,114.)); +#3163 = DIRECTION('',(0.,-1.,0.)); +#3164 = DIRECTION('',(0.,-0.,-1.)); +#3165 = ORIENTED_EDGE('',*,*,#3151,.T.); +#3166 = CYLINDRICAL_SURFACE('',#3167,1.); +#3167 = AXIS2_PLACEMENT_3D('',#3168,#3169,#3170); +#3168 = CARTESIAN_POINT('',(-30.5,40.15,114.)); +#3169 = DIRECTION('',(0.,-1.,0.)); +#3170 = DIRECTION('',(0.,-0.,-1.)); +#3171 = ADVANCED_FACE('',(#3172),#3175,.T.); +#3172 = FACE_BOUND('',#3173,.T.); +#3173 = EDGE_LOOP('',(#3174)); +#3174 = ORIENTED_EDGE('',*,*,#3142,.T.); +#3175 = PLANE('',#3176); +#3176 = AXIS2_PLACEMENT_3D('',#3177,#3178,#3179); +#3177 = CARTESIAN_POINT('',(-30.5,39.45,114.)); +#3178 = DIRECTION('',(0.,-1.,0.)); +#3179 = DIRECTION('',(0.,-0.,-1.)); +#3180 = ADVANCED_FACE('',(#3181),#3184,.F.); +#3181 = FACE_BOUND('',#3182,.T.); +#3182 = EDGE_LOOP('',(#3183)); +#3183 = ORIENTED_EDGE('',*,*,#3159,.F.); +#3184 = PLANE('',#3185); +#3185 = AXIS2_PLACEMENT_3D('',#3186,#3187,#3188); +#3186 = CARTESIAN_POINT('',(-30.5,40.15,114.)); +#3187 = DIRECTION('',(0.,-1.,0.)); +#3188 = DIRECTION('',(0.,-0.,-1.)); +#3189 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3193)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3190,#3191,#3192)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3326 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3327 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3328 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3329 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3326, +#3190 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3191 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3192 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3193 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3190, 'distance_accuracy_value','confusion accuracy'); -#3330 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3331,#3333); -#3331 = ( REPRESENTATION_RELATIONSHIP('','',#3271,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3332) +#3194 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3195,#3197); +#3195 = ( REPRESENTATION_RELATIONSHIP('','',#3135,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3196) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3332 = ITEM_DEFINED_TRANSFORMATION('','',#11,#111); -#3333 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3334); -#3334 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('25', - 'ConnectorBank_Left_Hole_R04_C02','',#5,#3266,$); -#3335 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3268)); -#3336 = SHAPE_DEFINITION_REPRESENTATION(#3337,#3343); -#3337 = PRODUCT_DEFINITION_SHAPE('','',#3338); -#3338 = PRODUCT_DEFINITION('design','',#3339,#3342); -#3339 = PRODUCT_DEFINITION_FORMATION('','',#3340); -#3340 = PRODUCT('ConnectorBank_Left_Hole_R05_C01', - 'ConnectorBank_Left_Hole_R05_C01','',(#3341)); -#3341 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3342 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3343 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3344),#3397); -#3344 = MANIFOLD_SOLID_BREP('',#3345); -#3345 = CLOSED_SHELL('',(#3346,#3379,#3388)); -#3346 = ADVANCED_FACE('',(#3347),#3374,.T.); -#3347 = FACE_BOUND('',#3348,.T.); -#3348 = EDGE_LOOP('',(#3349,#3358,#3366,#3373)); -#3349 = ORIENTED_EDGE('',*,*,#3350,.F.); -#3350 = EDGE_CURVE('',#3351,#3351,#3353,.T.); -#3351 = VERTEX_POINT('',#3352); -#3352 = CARTESIAN_POINT('',(41.,-36.85,93.)); -#3353 = CIRCLE('',#3354,1.); -#3354 = AXIS2_PLACEMENT_3D('',#3355,#3356,#3357); -#3355 = CARTESIAN_POINT('',(41.,-36.85,94.)); -#3356 = DIRECTION('',(0.,-1.,0.)); -#3357 = DIRECTION('',(0.,-0.,-1.)); -#3358 = ORIENTED_EDGE('',*,*,#3359,.F.); -#3359 = EDGE_CURVE('',#3360,#3351,#3362,.T.); -#3360 = VERTEX_POINT('',#3361); -#3361 = CARTESIAN_POINT('',(41.,-36.15,93.)); -#3362 = LINE('',#3363,#3364); -#3363 = CARTESIAN_POINT('',(41.,-36.15,93.)); -#3364 = VECTOR('',#3365,1.); -#3365 = DIRECTION('',(0.,-1.,0.)); -#3366 = ORIENTED_EDGE('',*,*,#3367,.T.); -#3367 = EDGE_CURVE('',#3360,#3360,#3368,.T.); -#3368 = CIRCLE('',#3369,1.); -#3369 = AXIS2_PLACEMENT_3D('',#3370,#3371,#3372); -#3370 = CARTESIAN_POINT('',(41.,-36.15,94.)); -#3371 = DIRECTION('',(0.,-1.,0.)); -#3372 = DIRECTION('',(0.,-0.,-1.)); -#3373 = ORIENTED_EDGE('',*,*,#3359,.T.); -#3374 = CYLINDRICAL_SURFACE('',#3375,1.); -#3375 = AXIS2_PLACEMENT_3D('',#3376,#3377,#3378); -#3376 = CARTESIAN_POINT('',(41.,-36.15,94.)); -#3377 = DIRECTION('',(0.,-1.,0.)); -#3378 = DIRECTION('',(0.,-0.,-1.)); -#3379 = ADVANCED_FACE('',(#3380),#3383,.T.); -#3380 = FACE_BOUND('',#3381,.T.); -#3381 = EDGE_LOOP('',(#3382)); -#3382 = ORIENTED_EDGE('',*,*,#3350,.T.); -#3383 = PLANE('',#3384); -#3384 = AXIS2_PLACEMENT_3D('',#3385,#3386,#3387); -#3385 = CARTESIAN_POINT('',(41.,-36.85,94.)); -#3386 = DIRECTION('',(0.,-1.,0.)); -#3387 = DIRECTION('',(0.,-0.,-1.)); -#3388 = ADVANCED_FACE('',(#3389),#3392,.F.); -#3389 = FACE_BOUND('',#3390,.T.); -#3390 = EDGE_LOOP('',(#3391)); -#3391 = ORIENTED_EDGE('',*,*,#3367,.F.); -#3392 = PLANE('',#3393); -#3393 = AXIS2_PLACEMENT_3D('',#3394,#3395,#3396); -#3394 = CARTESIAN_POINT('',(41.,-36.15,94.)); -#3395 = DIRECTION('',(0.,-1.,0.)); -#3396 = DIRECTION('',(0.,-0.,-1.)); -#3397 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3401)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3398,#3399,#3400)) REPRESENTATION_CONTEXT +#3196 = ITEM_DEFINED_TRANSFORMATION('','',#11,#111); +#3197 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3198); +#3198 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('25', + 'ConnectorBank_Left_Hole_R07_C02','',#5,#3130,$); +#3199 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3132)); +#3200 = SHAPE_DEFINITION_REPRESENTATION(#3201,#3207); +#3201 = PRODUCT_DEFINITION_SHAPE('','',#3202); +#3202 = PRODUCT_DEFINITION('design','',#3203,#3206); +#3203 = PRODUCT_DEFINITION_FORMATION('','',#3204); +#3204 = PRODUCT('ConnectorBank_Left_Hole_R08_C01', + 'ConnectorBank_Left_Hole_R08_C01','',(#3205)); +#3205 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3206 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3207 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3208),#3261); +#3208 = MANIFOLD_SOLID_BREP('',#3209); +#3209 = CLOSED_SHELL('',(#3210,#3243,#3252)); +#3210 = ADVANCED_FACE('',(#3211),#3238,.T.); +#3211 = FACE_BOUND('',#3212,.T.); +#3212 = EDGE_LOOP('',(#3213,#3222,#3230,#3237)); +#3213 = ORIENTED_EDGE('',*,*,#3214,.F.); +#3214 = EDGE_CURVE('',#3215,#3215,#3217,.T.); +#3215 = VERTEX_POINT('',#3216); +#3216 = CARTESIAN_POINT('',(-36.5,39.45,123.)); +#3217 = CIRCLE('',#3218,1.); +#3218 = AXIS2_PLACEMENT_3D('',#3219,#3220,#3221); +#3219 = CARTESIAN_POINT('',(-36.5,39.45,124.)); +#3220 = DIRECTION('',(0.,-1.,0.)); +#3221 = DIRECTION('',(0.,-0.,-1.)); +#3222 = ORIENTED_EDGE('',*,*,#3223,.F.); +#3223 = EDGE_CURVE('',#3224,#3215,#3226,.T.); +#3224 = VERTEX_POINT('',#3225); +#3225 = CARTESIAN_POINT('',(-36.5,40.15,123.)); +#3226 = LINE('',#3227,#3228); +#3227 = CARTESIAN_POINT('',(-36.5,40.15,123.)); +#3228 = VECTOR('',#3229,1.); +#3229 = DIRECTION('',(0.,-1.,0.)); +#3230 = ORIENTED_EDGE('',*,*,#3231,.T.); +#3231 = EDGE_CURVE('',#3224,#3224,#3232,.T.); +#3232 = CIRCLE('',#3233,1.); +#3233 = AXIS2_PLACEMENT_3D('',#3234,#3235,#3236); +#3234 = CARTESIAN_POINT('',(-36.5,40.15,124.)); +#3235 = DIRECTION('',(0.,-1.,0.)); +#3236 = DIRECTION('',(0.,-0.,-1.)); +#3237 = ORIENTED_EDGE('',*,*,#3223,.T.); +#3238 = CYLINDRICAL_SURFACE('',#3239,1.); +#3239 = AXIS2_PLACEMENT_3D('',#3240,#3241,#3242); +#3240 = CARTESIAN_POINT('',(-36.5,40.15,124.)); +#3241 = DIRECTION('',(0.,-1.,0.)); +#3242 = DIRECTION('',(0.,-0.,-1.)); +#3243 = ADVANCED_FACE('',(#3244),#3247,.T.); +#3244 = FACE_BOUND('',#3245,.T.); +#3245 = EDGE_LOOP('',(#3246)); +#3246 = ORIENTED_EDGE('',*,*,#3214,.T.); +#3247 = PLANE('',#3248); +#3248 = AXIS2_PLACEMENT_3D('',#3249,#3250,#3251); +#3249 = CARTESIAN_POINT('',(-36.5,39.45,124.)); +#3250 = DIRECTION('',(0.,-1.,0.)); +#3251 = DIRECTION('',(0.,-0.,-1.)); +#3252 = ADVANCED_FACE('',(#3253),#3256,.F.); +#3253 = FACE_BOUND('',#3254,.T.); +#3254 = EDGE_LOOP('',(#3255)); +#3255 = ORIENTED_EDGE('',*,*,#3231,.F.); +#3256 = PLANE('',#3257); +#3257 = AXIS2_PLACEMENT_3D('',#3258,#3259,#3260); +#3258 = CARTESIAN_POINT('',(-36.5,40.15,124.)); +#3259 = DIRECTION('',(0.,-1.,0.)); +#3260 = DIRECTION('',(0.,-0.,-1.)); +#3261 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3265)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3262,#3263,#3264)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3398 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3399 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3400 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3401 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3398, +#3262 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3263 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3264 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3265 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3262, 'distance_accuracy_value','confusion accuracy'); -#3402 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3403,#3405); -#3403 = ( REPRESENTATION_RELATIONSHIP('','',#3343,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3404) +#3266 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3267,#3269); +#3267 = ( REPRESENTATION_RELATIONSHIP('','',#3207,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3268) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3404 = ITEM_DEFINED_TRANSFORMATION('','',#11,#115); -#3405 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3406); -#3406 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('26', - 'ConnectorBank_Left_Hole_R05_C01','',#5,#3338,$); -#3407 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3340)); -#3408 = SHAPE_DEFINITION_REPRESENTATION(#3409,#3415); -#3409 = PRODUCT_DEFINITION_SHAPE('','',#3410); -#3410 = PRODUCT_DEFINITION('design','',#3411,#3414); -#3411 = PRODUCT_DEFINITION_FORMATION('','',#3412); -#3412 = PRODUCT('ConnectorBank_Left_Screw_R05', - 'ConnectorBank_Left_Screw_R05','',(#3413)); -#3413 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3414 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3415 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3416),#3469); -#3416 = MANIFOLD_SOLID_BREP('',#3417); -#3417 = CLOSED_SHELL('',(#3418,#3451,#3460)); -#3418 = ADVANCED_FACE('',(#3419),#3446,.T.); -#3419 = FACE_BOUND('',#3420,.T.); -#3420 = EDGE_LOOP('',(#3421,#3430,#3438,#3445)); -#3421 = ORIENTED_EDGE('',*,*,#3422,.F.); -#3422 = EDGE_CURVE('',#3423,#3423,#3425,.T.); -#3423 = VERTEX_POINT('',#3424); -#3424 = CARTESIAN_POINT('',(55.6,-36.95,93.45)); -#3425 = CIRCLE('',#3426,0.55); -#3426 = AXIS2_PLACEMENT_3D('',#3427,#3428,#3429); -#3427 = CARTESIAN_POINT('',(55.6,-36.95,94.)); -#3428 = DIRECTION('',(0.,-1.,0.)); -#3429 = DIRECTION('',(0.,-0.,-1.)); -#3430 = ORIENTED_EDGE('',*,*,#3431,.F.); -#3431 = EDGE_CURVE('',#3432,#3423,#3434,.T.); -#3432 = VERTEX_POINT('',#3433); -#3433 = CARTESIAN_POINT('',(55.6,-36.15,93.45)); -#3434 = LINE('',#3435,#3436); -#3435 = CARTESIAN_POINT('',(55.6,-36.15,93.45)); -#3436 = VECTOR('',#3437,1.); -#3437 = DIRECTION('',(0.,-1.,0.)); -#3438 = ORIENTED_EDGE('',*,*,#3439,.T.); -#3439 = EDGE_CURVE('',#3432,#3432,#3440,.T.); -#3440 = CIRCLE('',#3441,0.55); -#3441 = AXIS2_PLACEMENT_3D('',#3442,#3443,#3444); -#3442 = CARTESIAN_POINT('',(55.6,-36.15,94.)); -#3443 = DIRECTION('',(0.,-1.,0.)); -#3444 = DIRECTION('',(0.,-0.,-1.)); -#3445 = ORIENTED_EDGE('',*,*,#3431,.T.); -#3446 = CYLINDRICAL_SURFACE('',#3447,0.55); -#3447 = AXIS2_PLACEMENT_3D('',#3448,#3449,#3450); -#3448 = CARTESIAN_POINT('',(55.6,-36.15,94.)); -#3449 = DIRECTION('',(0.,-1.,0.)); -#3450 = DIRECTION('',(0.,-0.,-1.)); -#3451 = ADVANCED_FACE('',(#3452),#3455,.T.); -#3452 = FACE_BOUND('',#3453,.T.); -#3453 = EDGE_LOOP('',(#3454)); -#3454 = ORIENTED_EDGE('',*,*,#3422,.T.); -#3455 = PLANE('',#3456); -#3456 = AXIS2_PLACEMENT_3D('',#3457,#3458,#3459); -#3457 = CARTESIAN_POINT('',(55.6,-36.95,94.)); -#3458 = DIRECTION('',(0.,-1.,0.)); -#3459 = DIRECTION('',(0.,-0.,-1.)); -#3460 = ADVANCED_FACE('',(#3461),#3464,.F.); -#3461 = FACE_BOUND('',#3462,.T.); -#3462 = EDGE_LOOP('',(#3463)); -#3463 = ORIENTED_EDGE('',*,*,#3439,.F.); -#3464 = PLANE('',#3465); -#3465 = AXIS2_PLACEMENT_3D('',#3466,#3467,#3468); -#3466 = CARTESIAN_POINT('',(55.6,-36.15,94.)); -#3467 = DIRECTION('',(0.,-1.,0.)); -#3468 = DIRECTION('',(0.,-0.,-1.)); -#3469 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3473)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3470,#3471,#3472)) REPRESENTATION_CONTEXT +#3268 = ITEM_DEFINED_TRANSFORMATION('','',#11,#115); +#3269 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3270); +#3270 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('26', + 'ConnectorBank_Left_Hole_R08_C01','',#5,#3202,$); +#3271 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3204)); +#3272 = SHAPE_DEFINITION_REPRESENTATION(#3273,#3279); +#3273 = PRODUCT_DEFINITION_SHAPE('','',#3274); +#3274 = PRODUCT_DEFINITION('design','',#3275,#3278); +#3275 = PRODUCT_DEFINITION_FORMATION('','',#3276); +#3276 = PRODUCT('ConnectorBank_Left_Hole_R08_C02', + 'ConnectorBank_Left_Hole_R08_C02','',(#3277)); +#3277 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3278 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3279 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3280),#3333); +#3280 = MANIFOLD_SOLID_BREP('',#3281); +#3281 = CLOSED_SHELL('',(#3282,#3315,#3324)); +#3282 = ADVANCED_FACE('',(#3283),#3310,.T.); +#3283 = FACE_BOUND('',#3284,.T.); +#3284 = EDGE_LOOP('',(#3285,#3294,#3302,#3309)); +#3285 = ORIENTED_EDGE('',*,*,#3286,.F.); +#3286 = EDGE_CURVE('',#3287,#3287,#3289,.T.); +#3287 = VERTEX_POINT('',#3288); +#3288 = CARTESIAN_POINT('',(-30.5,39.45,123.)); +#3289 = CIRCLE('',#3290,1.); +#3290 = AXIS2_PLACEMENT_3D('',#3291,#3292,#3293); +#3291 = CARTESIAN_POINT('',(-30.5,39.45,124.)); +#3292 = DIRECTION('',(0.,-1.,0.)); +#3293 = DIRECTION('',(0.,-0.,-1.)); +#3294 = ORIENTED_EDGE('',*,*,#3295,.F.); +#3295 = EDGE_CURVE('',#3296,#3287,#3298,.T.); +#3296 = VERTEX_POINT('',#3297); +#3297 = CARTESIAN_POINT('',(-30.5,40.15,123.)); +#3298 = LINE('',#3299,#3300); +#3299 = CARTESIAN_POINT('',(-30.5,40.15,123.)); +#3300 = VECTOR('',#3301,1.); +#3301 = DIRECTION('',(0.,-1.,0.)); +#3302 = ORIENTED_EDGE('',*,*,#3303,.T.); +#3303 = EDGE_CURVE('',#3296,#3296,#3304,.T.); +#3304 = CIRCLE('',#3305,1.); +#3305 = AXIS2_PLACEMENT_3D('',#3306,#3307,#3308); +#3306 = CARTESIAN_POINT('',(-30.5,40.15,124.)); +#3307 = DIRECTION('',(0.,-1.,0.)); +#3308 = DIRECTION('',(0.,-0.,-1.)); +#3309 = ORIENTED_EDGE('',*,*,#3295,.T.); +#3310 = CYLINDRICAL_SURFACE('',#3311,1.); +#3311 = AXIS2_PLACEMENT_3D('',#3312,#3313,#3314); +#3312 = CARTESIAN_POINT('',(-30.5,40.15,124.)); +#3313 = DIRECTION('',(0.,-1.,0.)); +#3314 = DIRECTION('',(0.,-0.,-1.)); +#3315 = ADVANCED_FACE('',(#3316),#3319,.T.); +#3316 = FACE_BOUND('',#3317,.T.); +#3317 = EDGE_LOOP('',(#3318)); +#3318 = ORIENTED_EDGE('',*,*,#3286,.T.); +#3319 = PLANE('',#3320); +#3320 = AXIS2_PLACEMENT_3D('',#3321,#3322,#3323); +#3321 = CARTESIAN_POINT('',(-30.5,39.45,124.)); +#3322 = DIRECTION('',(0.,-1.,0.)); +#3323 = DIRECTION('',(0.,-0.,-1.)); +#3324 = ADVANCED_FACE('',(#3325),#3328,.F.); +#3325 = FACE_BOUND('',#3326,.T.); +#3326 = EDGE_LOOP('',(#3327)); +#3327 = ORIENTED_EDGE('',*,*,#3303,.F.); +#3328 = PLANE('',#3329); +#3329 = AXIS2_PLACEMENT_3D('',#3330,#3331,#3332); +#3330 = CARTESIAN_POINT('',(-30.5,40.15,124.)); +#3331 = DIRECTION('',(0.,-1.,0.)); +#3332 = DIRECTION('',(0.,-0.,-1.)); +#3333 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3337)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3334,#3335,#3336)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3470 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3471 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3472 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3473 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3470, +#3334 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3335 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3336 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3337 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3334, 'distance_accuracy_value','confusion accuracy'); -#3474 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3475,#3477); -#3475 = ( REPRESENTATION_RELATIONSHIP('','',#3415,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3476) +#3338 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3339,#3341); +#3339 = ( REPRESENTATION_RELATIONSHIP('','',#3279,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3340) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3476 = ITEM_DEFINED_TRANSFORMATION('','',#11,#119); -#3477 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3478); -#3478 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('27', - 'ConnectorBank_Left_Screw_R05','',#5,#3410,$); -#3479 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3412)); -#3480 = SHAPE_DEFINITION_REPRESENTATION(#3481,#3487); -#3481 = PRODUCT_DEFINITION_SHAPE('','',#3482); -#3482 = PRODUCT_DEFINITION('design','',#3483,#3486); -#3483 = PRODUCT_DEFINITION_FORMATION('','',#3484); -#3484 = PRODUCT('ConnectorBank_Left_Hole_R05_C02', - 'ConnectorBank_Left_Hole_R05_C02','',(#3485)); -#3485 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3486 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3487 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3488),#3541); -#3488 = MANIFOLD_SOLID_BREP('',#3489); -#3489 = CLOSED_SHELL('',(#3490,#3523,#3532)); -#3490 = ADVANCED_FACE('',(#3491),#3518,.T.); -#3491 = FACE_BOUND('',#3492,.T.); -#3492 = EDGE_LOOP('',(#3493,#3502,#3510,#3517)); -#3493 = ORIENTED_EDGE('',*,*,#3494,.F.); -#3494 = EDGE_CURVE('',#3495,#3495,#3497,.T.); -#3495 = VERTEX_POINT('',#3496); -#3496 = CARTESIAN_POINT('',(47.,-36.85,93.)); -#3497 = CIRCLE('',#3498,1.); -#3498 = AXIS2_PLACEMENT_3D('',#3499,#3500,#3501); -#3499 = CARTESIAN_POINT('',(47.,-36.85,94.)); -#3500 = DIRECTION('',(0.,-1.,0.)); -#3501 = DIRECTION('',(0.,-0.,-1.)); -#3502 = ORIENTED_EDGE('',*,*,#3503,.F.); -#3503 = EDGE_CURVE('',#3504,#3495,#3506,.T.); -#3504 = VERTEX_POINT('',#3505); -#3505 = CARTESIAN_POINT('',(47.,-36.15,93.)); -#3506 = LINE('',#3507,#3508); -#3507 = CARTESIAN_POINT('',(47.,-36.15,93.)); -#3508 = VECTOR('',#3509,1.); -#3509 = DIRECTION('',(0.,-1.,0.)); -#3510 = ORIENTED_EDGE('',*,*,#3511,.T.); -#3511 = EDGE_CURVE('',#3504,#3504,#3512,.T.); -#3512 = CIRCLE('',#3513,1.); -#3513 = AXIS2_PLACEMENT_3D('',#3514,#3515,#3516); -#3514 = CARTESIAN_POINT('',(47.,-36.15,94.)); -#3515 = DIRECTION('',(0.,-1.,0.)); -#3516 = DIRECTION('',(0.,-0.,-1.)); -#3517 = ORIENTED_EDGE('',*,*,#3503,.T.); -#3518 = CYLINDRICAL_SURFACE('',#3519,1.); -#3519 = AXIS2_PLACEMENT_3D('',#3520,#3521,#3522); -#3520 = CARTESIAN_POINT('',(47.,-36.15,94.)); -#3521 = DIRECTION('',(0.,-1.,0.)); -#3522 = DIRECTION('',(0.,-0.,-1.)); -#3523 = ADVANCED_FACE('',(#3524),#3527,.T.); -#3524 = FACE_BOUND('',#3525,.T.); -#3525 = EDGE_LOOP('',(#3526)); -#3526 = ORIENTED_EDGE('',*,*,#3494,.T.); -#3527 = PLANE('',#3528); -#3528 = AXIS2_PLACEMENT_3D('',#3529,#3530,#3531); -#3529 = CARTESIAN_POINT('',(47.,-36.85,94.)); -#3530 = DIRECTION('',(0.,-1.,0.)); -#3531 = DIRECTION('',(0.,-0.,-1.)); -#3532 = ADVANCED_FACE('',(#3533),#3536,.F.); -#3533 = FACE_BOUND('',#3534,.T.); -#3534 = EDGE_LOOP('',(#3535)); -#3535 = ORIENTED_EDGE('',*,*,#3511,.F.); -#3536 = PLANE('',#3537); -#3537 = AXIS2_PLACEMENT_3D('',#3538,#3539,#3540); -#3538 = CARTESIAN_POINT('',(47.,-36.15,94.)); -#3539 = DIRECTION('',(0.,-1.,0.)); -#3540 = DIRECTION('',(0.,-0.,-1.)); -#3541 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3545)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3542,#3543,#3544)) REPRESENTATION_CONTEXT +#3340 = ITEM_DEFINED_TRANSFORMATION('','',#11,#119); +#3341 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3342); +#3342 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('27', + 'ConnectorBank_Left_Hole_R08_C02','',#5,#3274,$); +#3343 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3276)); +#3344 = SHAPE_DEFINITION_REPRESENTATION(#3345,#3351); +#3345 = PRODUCT_DEFINITION_SHAPE('','',#3346); +#3346 = PRODUCT_DEFINITION('design','',#3347,#3350); +#3347 = PRODUCT_DEFINITION_FORMATION('','',#3348); +#3348 = PRODUCT('ConnectorBank_Left_Hole_R09_C01', + 'ConnectorBank_Left_Hole_R09_C01','',(#3349)); +#3349 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3350 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3351 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3352),#3405); +#3352 = MANIFOLD_SOLID_BREP('',#3353); +#3353 = CLOSED_SHELL('',(#3354,#3387,#3396)); +#3354 = ADVANCED_FACE('',(#3355),#3382,.T.); +#3355 = FACE_BOUND('',#3356,.T.); +#3356 = EDGE_LOOP('',(#3357,#3366,#3374,#3381)); +#3357 = ORIENTED_EDGE('',*,*,#3358,.F.); +#3358 = EDGE_CURVE('',#3359,#3359,#3361,.T.); +#3359 = VERTEX_POINT('',#3360); +#3360 = CARTESIAN_POINT('',(-36.5,39.45,133.)); +#3361 = CIRCLE('',#3362,1.); +#3362 = AXIS2_PLACEMENT_3D('',#3363,#3364,#3365); +#3363 = CARTESIAN_POINT('',(-36.5,39.45,134.)); +#3364 = DIRECTION('',(0.,-1.,0.)); +#3365 = DIRECTION('',(0.,-0.,-1.)); +#3366 = ORIENTED_EDGE('',*,*,#3367,.F.); +#3367 = EDGE_CURVE('',#3368,#3359,#3370,.T.); +#3368 = VERTEX_POINT('',#3369); +#3369 = CARTESIAN_POINT('',(-36.5,40.15,133.)); +#3370 = LINE('',#3371,#3372); +#3371 = CARTESIAN_POINT('',(-36.5,40.15,133.)); +#3372 = VECTOR('',#3373,1.); +#3373 = DIRECTION('',(0.,-1.,0.)); +#3374 = ORIENTED_EDGE('',*,*,#3375,.T.); +#3375 = EDGE_CURVE('',#3368,#3368,#3376,.T.); +#3376 = CIRCLE('',#3377,1.); +#3377 = AXIS2_PLACEMENT_3D('',#3378,#3379,#3380); +#3378 = CARTESIAN_POINT('',(-36.5,40.15,134.)); +#3379 = DIRECTION('',(0.,-1.,0.)); +#3380 = DIRECTION('',(0.,-0.,-1.)); +#3381 = ORIENTED_EDGE('',*,*,#3367,.T.); +#3382 = CYLINDRICAL_SURFACE('',#3383,1.); +#3383 = AXIS2_PLACEMENT_3D('',#3384,#3385,#3386); +#3384 = CARTESIAN_POINT('',(-36.5,40.15,134.)); +#3385 = DIRECTION('',(0.,-1.,0.)); +#3386 = DIRECTION('',(0.,-0.,-1.)); +#3387 = ADVANCED_FACE('',(#3388),#3391,.T.); +#3388 = FACE_BOUND('',#3389,.T.); +#3389 = EDGE_LOOP('',(#3390)); +#3390 = ORIENTED_EDGE('',*,*,#3358,.T.); +#3391 = PLANE('',#3392); +#3392 = AXIS2_PLACEMENT_3D('',#3393,#3394,#3395); +#3393 = CARTESIAN_POINT('',(-36.5,39.45,134.)); +#3394 = DIRECTION('',(0.,-1.,0.)); +#3395 = DIRECTION('',(0.,-0.,-1.)); +#3396 = ADVANCED_FACE('',(#3397),#3400,.F.); +#3397 = FACE_BOUND('',#3398,.T.); +#3398 = EDGE_LOOP('',(#3399)); +#3399 = ORIENTED_EDGE('',*,*,#3375,.F.); +#3400 = PLANE('',#3401); +#3401 = AXIS2_PLACEMENT_3D('',#3402,#3403,#3404); +#3402 = CARTESIAN_POINT('',(-36.5,40.15,134.)); +#3403 = DIRECTION('',(0.,-1.,0.)); +#3404 = DIRECTION('',(0.,-0.,-1.)); +#3405 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3409)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3406,#3407,#3408)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3542 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3543 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3544 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3545 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3542, +#3406 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3407 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3408 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3409 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3406, 'distance_accuracy_value','confusion accuracy'); -#3546 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3547,#3549); -#3547 = ( REPRESENTATION_RELATIONSHIP('','',#3487,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3548) +#3410 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3411,#3413); +#3411 = ( REPRESENTATION_RELATIONSHIP('','',#3351,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3412) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3548 = ITEM_DEFINED_TRANSFORMATION('','',#11,#123); -#3549 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3550); -#3550 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('28', - 'ConnectorBank_Left_Hole_R05_C02','',#5,#3482,$); -#3551 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3484)); -#3552 = SHAPE_DEFINITION_REPRESENTATION(#3553,#3559); -#3553 = PRODUCT_DEFINITION_SHAPE('','',#3554); -#3554 = PRODUCT_DEFINITION('design','',#3555,#3558); -#3555 = PRODUCT_DEFINITION_FORMATION('','',#3556); -#3556 = PRODUCT('ConnectorBank_Left_Hole_R06_C01', - 'ConnectorBank_Left_Hole_R06_C01','',(#3557)); -#3557 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3558 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3559 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3560),#3613); -#3560 = MANIFOLD_SOLID_BREP('',#3561); -#3561 = CLOSED_SHELL('',(#3562,#3595,#3604)); -#3562 = ADVANCED_FACE('',(#3563),#3590,.T.); -#3563 = FACE_BOUND('',#3564,.T.); -#3564 = EDGE_LOOP('',(#3565,#3574,#3582,#3589)); -#3565 = ORIENTED_EDGE('',*,*,#3566,.F.); -#3566 = EDGE_CURVE('',#3567,#3567,#3569,.T.); -#3567 = VERTEX_POINT('',#3568); -#3568 = CARTESIAN_POINT('',(41.,-36.85,103.)); -#3569 = CIRCLE('',#3570,1.); -#3570 = AXIS2_PLACEMENT_3D('',#3571,#3572,#3573); -#3571 = CARTESIAN_POINT('',(41.,-36.85,104.)); -#3572 = DIRECTION('',(0.,-1.,0.)); -#3573 = DIRECTION('',(0.,-0.,-1.)); -#3574 = ORIENTED_EDGE('',*,*,#3575,.F.); -#3575 = EDGE_CURVE('',#3576,#3567,#3578,.T.); -#3576 = VERTEX_POINT('',#3577); -#3577 = CARTESIAN_POINT('',(41.,-36.15,103.)); -#3578 = LINE('',#3579,#3580); -#3579 = CARTESIAN_POINT('',(41.,-36.15,103.)); -#3580 = VECTOR('',#3581,1.); -#3581 = DIRECTION('',(0.,-1.,0.)); -#3582 = ORIENTED_EDGE('',*,*,#3583,.T.); -#3583 = EDGE_CURVE('',#3576,#3576,#3584,.T.); -#3584 = CIRCLE('',#3585,1.); -#3585 = AXIS2_PLACEMENT_3D('',#3586,#3587,#3588); -#3586 = CARTESIAN_POINT('',(41.,-36.15,104.)); -#3587 = DIRECTION('',(0.,-1.,0.)); -#3588 = DIRECTION('',(0.,-0.,-1.)); -#3589 = ORIENTED_EDGE('',*,*,#3575,.T.); -#3590 = CYLINDRICAL_SURFACE('',#3591,1.); -#3591 = AXIS2_PLACEMENT_3D('',#3592,#3593,#3594); -#3592 = CARTESIAN_POINT('',(41.,-36.15,104.)); -#3593 = DIRECTION('',(0.,-1.,0.)); -#3594 = DIRECTION('',(0.,-0.,-1.)); -#3595 = ADVANCED_FACE('',(#3596),#3599,.T.); -#3596 = FACE_BOUND('',#3597,.T.); -#3597 = EDGE_LOOP('',(#3598)); -#3598 = ORIENTED_EDGE('',*,*,#3566,.T.); -#3599 = PLANE('',#3600); -#3600 = AXIS2_PLACEMENT_3D('',#3601,#3602,#3603); -#3601 = CARTESIAN_POINT('',(41.,-36.85,104.)); -#3602 = DIRECTION('',(0.,-1.,0.)); -#3603 = DIRECTION('',(0.,-0.,-1.)); -#3604 = ADVANCED_FACE('',(#3605),#3608,.F.); -#3605 = FACE_BOUND('',#3606,.T.); -#3606 = EDGE_LOOP('',(#3607)); -#3607 = ORIENTED_EDGE('',*,*,#3583,.F.); -#3608 = PLANE('',#3609); -#3609 = AXIS2_PLACEMENT_3D('',#3610,#3611,#3612); -#3610 = CARTESIAN_POINT('',(41.,-36.15,104.)); -#3611 = DIRECTION('',(0.,-1.,0.)); -#3612 = DIRECTION('',(0.,-0.,-1.)); -#3613 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3617)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3614,#3615,#3616)) REPRESENTATION_CONTEXT +#3412 = ITEM_DEFINED_TRANSFORMATION('','',#11,#123); +#3413 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3414); +#3414 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('28', + 'ConnectorBank_Left_Hole_R09_C01','',#5,#3346,$); +#3415 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3348)); +#3416 = SHAPE_DEFINITION_REPRESENTATION(#3417,#3423); +#3417 = PRODUCT_DEFINITION_SHAPE('','',#3418); +#3418 = PRODUCT_DEFINITION('design','',#3419,#3422); +#3419 = PRODUCT_DEFINITION_FORMATION('','',#3420); +#3420 = PRODUCT('ConnectorBank_Left_Hole_R09_C02', + 'ConnectorBank_Left_Hole_R09_C02','',(#3421)); +#3421 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3422 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3423 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3424),#3477); +#3424 = MANIFOLD_SOLID_BREP('',#3425); +#3425 = CLOSED_SHELL('',(#3426,#3459,#3468)); +#3426 = ADVANCED_FACE('',(#3427),#3454,.T.); +#3427 = FACE_BOUND('',#3428,.T.); +#3428 = EDGE_LOOP('',(#3429,#3438,#3446,#3453)); +#3429 = ORIENTED_EDGE('',*,*,#3430,.F.); +#3430 = EDGE_CURVE('',#3431,#3431,#3433,.T.); +#3431 = VERTEX_POINT('',#3432); +#3432 = CARTESIAN_POINT('',(-30.5,39.45,133.)); +#3433 = CIRCLE('',#3434,1.); +#3434 = AXIS2_PLACEMENT_3D('',#3435,#3436,#3437); +#3435 = CARTESIAN_POINT('',(-30.5,39.45,134.)); +#3436 = DIRECTION('',(0.,-1.,0.)); +#3437 = DIRECTION('',(0.,-0.,-1.)); +#3438 = ORIENTED_EDGE('',*,*,#3439,.F.); +#3439 = EDGE_CURVE('',#3440,#3431,#3442,.T.); +#3440 = VERTEX_POINT('',#3441); +#3441 = CARTESIAN_POINT('',(-30.5,40.15,133.)); +#3442 = LINE('',#3443,#3444); +#3443 = CARTESIAN_POINT('',(-30.5,40.15,133.)); +#3444 = VECTOR('',#3445,1.); +#3445 = DIRECTION('',(0.,-1.,0.)); +#3446 = ORIENTED_EDGE('',*,*,#3447,.T.); +#3447 = EDGE_CURVE('',#3440,#3440,#3448,.T.); +#3448 = CIRCLE('',#3449,1.); +#3449 = AXIS2_PLACEMENT_3D('',#3450,#3451,#3452); +#3450 = CARTESIAN_POINT('',(-30.5,40.15,134.)); +#3451 = DIRECTION('',(0.,-1.,0.)); +#3452 = DIRECTION('',(0.,-0.,-1.)); +#3453 = ORIENTED_EDGE('',*,*,#3439,.T.); +#3454 = CYLINDRICAL_SURFACE('',#3455,1.); +#3455 = AXIS2_PLACEMENT_3D('',#3456,#3457,#3458); +#3456 = CARTESIAN_POINT('',(-30.5,40.15,134.)); +#3457 = DIRECTION('',(0.,-1.,0.)); +#3458 = DIRECTION('',(0.,-0.,-1.)); +#3459 = ADVANCED_FACE('',(#3460),#3463,.T.); +#3460 = FACE_BOUND('',#3461,.T.); +#3461 = EDGE_LOOP('',(#3462)); +#3462 = ORIENTED_EDGE('',*,*,#3430,.T.); +#3463 = PLANE('',#3464); +#3464 = AXIS2_PLACEMENT_3D('',#3465,#3466,#3467); +#3465 = CARTESIAN_POINT('',(-30.5,39.45,134.)); +#3466 = DIRECTION('',(0.,-1.,0.)); +#3467 = DIRECTION('',(0.,-0.,-1.)); +#3468 = ADVANCED_FACE('',(#3469),#3472,.F.); +#3469 = FACE_BOUND('',#3470,.T.); +#3470 = EDGE_LOOP('',(#3471)); +#3471 = ORIENTED_EDGE('',*,*,#3447,.F.); +#3472 = PLANE('',#3473); +#3473 = AXIS2_PLACEMENT_3D('',#3474,#3475,#3476); +#3474 = CARTESIAN_POINT('',(-30.5,40.15,134.)); +#3475 = DIRECTION('',(0.,-1.,0.)); +#3476 = DIRECTION('',(0.,-0.,-1.)); +#3477 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3481)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3478,#3479,#3480)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3614 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3615 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3616 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3617 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3614, +#3478 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3479 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3480 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3481 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3478, 'distance_accuracy_value','confusion accuracy'); -#3618 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3619,#3621); -#3619 = ( REPRESENTATION_RELATIONSHIP('','',#3559,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3620) +#3482 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3483,#3485); +#3483 = ( REPRESENTATION_RELATIONSHIP('','',#3423,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3484) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3620 = ITEM_DEFINED_TRANSFORMATION('','',#11,#127); -#3621 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3622); -#3622 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('29', - 'ConnectorBank_Left_Hole_R06_C01','',#5,#3554,$); -#3623 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3556)); -#3624 = SHAPE_DEFINITION_REPRESENTATION(#3625,#3631); -#3625 = PRODUCT_DEFINITION_SHAPE('','',#3626); -#3626 = PRODUCT_DEFINITION('design','',#3627,#3630); -#3627 = PRODUCT_DEFINITION_FORMATION('','',#3628); -#3628 = PRODUCT('ConnectorBank_Left_Screw_R06', - 'ConnectorBank_Left_Screw_R06','',(#3629)); -#3629 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3630 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3631 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3632),#3685); -#3632 = MANIFOLD_SOLID_BREP('',#3633); -#3633 = CLOSED_SHELL('',(#3634,#3667,#3676)); -#3634 = ADVANCED_FACE('',(#3635),#3662,.T.); -#3635 = FACE_BOUND('',#3636,.T.); -#3636 = EDGE_LOOP('',(#3637,#3646,#3654,#3661)); -#3637 = ORIENTED_EDGE('',*,*,#3638,.F.); -#3638 = EDGE_CURVE('',#3639,#3639,#3641,.T.); -#3639 = VERTEX_POINT('',#3640); -#3640 = CARTESIAN_POINT('',(55.6,-36.95,103.45)); -#3641 = CIRCLE('',#3642,0.55); -#3642 = AXIS2_PLACEMENT_3D('',#3643,#3644,#3645); -#3643 = CARTESIAN_POINT('',(55.6,-36.95,104.)); -#3644 = DIRECTION('',(0.,-1.,0.)); -#3645 = DIRECTION('',(0.,-0.,-1.)); -#3646 = ORIENTED_EDGE('',*,*,#3647,.F.); -#3647 = EDGE_CURVE('',#3648,#3639,#3650,.T.); -#3648 = VERTEX_POINT('',#3649); -#3649 = CARTESIAN_POINT('',(55.6,-36.15,103.45)); -#3650 = LINE('',#3651,#3652); -#3651 = CARTESIAN_POINT('',(55.6,-36.15,103.45)); -#3652 = VECTOR('',#3653,1.); -#3653 = DIRECTION('',(0.,-1.,0.)); -#3654 = ORIENTED_EDGE('',*,*,#3655,.T.); -#3655 = EDGE_CURVE('',#3648,#3648,#3656,.T.); -#3656 = CIRCLE('',#3657,0.55); -#3657 = AXIS2_PLACEMENT_3D('',#3658,#3659,#3660); -#3658 = CARTESIAN_POINT('',(55.6,-36.15,104.)); -#3659 = DIRECTION('',(0.,-1.,0.)); -#3660 = DIRECTION('',(0.,-0.,-1.)); -#3661 = ORIENTED_EDGE('',*,*,#3647,.T.); -#3662 = CYLINDRICAL_SURFACE('',#3663,0.55); -#3663 = AXIS2_PLACEMENT_3D('',#3664,#3665,#3666); -#3664 = CARTESIAN_POINT('',(55.6,-36.15,104.)); -#3665 = DIRECTION('',(0.,-1.,0.)); -#3666 = DIRECTION('',(0.,-0.,-1.)); -#3667 = ADVANCED_FACE('',(#3668),#3671,.T.); -#3668 = FACE_BOUND('',#3669,.T.); -#3669 = EDGE_LOOP('',(#3670)); -#3670 = ORIENTED_EDGE('',*,*,#3638,.T.); -#3671 = PLANE('',#3672); -#3672 = AXIS2_PLACEMENT_3D('',#3673,#3674,#3675); -#3673 = CARTESIAN_POINT('',(55.6,-36.95,104.)); -#3674 = DIRECTION('',(0.,-1.,0.)); -#3675 = DIRECTION('',(0.,-0.,-1.)); -#3676 = ADVANCED_FACE('',(#3677),#3680,.F.); -#3677 = FACE_BOUND('',#3678,.T.); -#3678 = EDGE_LOOP('',(#3679)); -#3679 = ORIENTED_EDGE('',*,*,#3655,.F.); -#3680 = PLANE('',#3681); -#3681 = AXIS2_PLACEMENT_3D('',#3682,#3683,#3684); -#3682 = CARTESIAN_POINT('',(55.6,-36.15,104.)); -#3683 = DIRECTION('',(0.,-1.,0.)); -#3684 = DIRECTION('',(0.,-0.,-1.)); -#3685 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3689)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3686,#3687,#3688)) REPRESENTATION_CONTEXT +#3484 = ITEM_DEFINED_TRANSFORMATION('','',#11,#127); +#3485 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3486); +#3486 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('29', + 'ConnectorBank_Left_Hole_R09_C02','',#5,#3418,$); +#3487 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3420)); +#3488 = SHAPE_DEFINITION_REPRESENTATION(#3489,#3495); +#3489 = PRODUCT_DEFINITION_SHAPE('','',#3490); +#3490 = PRODUCT_DEFINITION('design','',#3491,#3494); +#3491 = PRODUCT_DEFINITION_FORMATION('','',#3492); +#3492 = PRODUCT('ConnectorBank_Left_Hole_R10_C01', + 'ConnectorBank_Left_Hole_R10_C01','',(#3493)); +#3493 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3494 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3495 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3496),#3549); +#3496 = MANIFOLD_SOLID_BREP('',#3497); +#3497 = CLOSED_SHELL('',(#3498,#3531,#3540)); +#3498 = ADVANCED_FACE('',(#3499),#3526,.T.); +#3499 = FACE_BOUND('',#3500,.T.); +#3500 = EDGE_LOOP('',(#3501,#3510,#3518,#3525)); +#3501 = ORIENTED_EDGE('',*,*,#3502,.F.); +#3502 = EDGE_CURVE('',#3503,#3503,#3505,.T.); +#3503 = VERTEX_POINT('',#3504); +#3504 = CARTESIAN_POINT('',(-36.5,39.45,143.)); +#3505 = CIRCLE('',#3506,1.); +#3506 = AXIS2_PLACEMENT_3D('',#3507,#3508,#3509); +#3507 = CARTESIAN_POINT('',(-36.5,39.45,144.)); +#3508 = DIRECTION('',(0.,-1.,0.)); +#3509 = DIRECTION('',(0.,-0.,-1.)); +#3510 = ORIENTED_EDGE('',*,*,#3511,.F.); +#3511 = EDGE_CURVE('',#3512,#3503,#3514,.T.); +#3512 = VERTEX_POINT('',#3513); +#3513 = CARTESIAN_POINT('',(-36.5,40.15,143.)); +#3514 = LINE('',#3515,#3516); +#3515 = CARTESIAN_POINT('',(-36.5,40.15,143.)); +#3516 = VECTOR('',#3517,1.); +#3517 = DIRECTION('',(0.,-1.,0.)); +#3518 = ORIENTED_EDGE('',*,*,#3519,.T.); +#3519 = EDGE_CURVE('',#3512,#3512,#3520,.T.); +#3520 = CIRCLE('',#3521,1.); +#3521 = AXIS2_PLACEMENT_3D('',#3522,#3523,#3524); +#3522 = CARTESIAN_POINT('',(-36.5,40.15,144.)); +#3523 = DIRECTION('',(0.,-1.,0.)); +#3524 = DIRECTION('',(0.,-0.,-1.)); +#3525 = ORIENTED_EDGE('',*,*,#3511,.T.); +#3526 = CYLINDRICAL_SURFACE('',#3527,1.); +#3527 = AXIS2_PLACEMENT_3D('',#3528,#3529,#3530); +#3528 = CARTESIAN_POINT('',(-36.5,40.15,144.)); +#3529 = DIRECTION('',(0.,-1.,0.)); +#3530 = DIRECTION('',(0.,-0.,-1.)); +#3531 = ADVANCED_FACE('',(#3532),#3535,.T.); +#3532 = FACE_BOUND('',#3533,.T.); +#3533 = EDGE_LOOP('',(#3534)); +#3534 = ORIENTED_EDGE('',*,*,#3502,.T.); +#3535 = PLANE('',#3536); +#3536 = AXIS2_PLACEMENT_3D('',#3537,#3538,#3539); +#3537 = CARTESIAN_POINT('',(-36.5,39.45,144.)); +#3538 = DIRECTION('',(0.,-1.,0.)); +#3539 = DIRECTION('',(0.,-0.,-1.)); +#3540 = ADVANCED_FACE('',(#3541),#3544,.F.); +#3541 = FACE_BOUND('',#3542,.T.); +#3542 = EDGE_LOOP('',(#3543)); +#3543 = ORIENTED_EDGE('',*,*,#3519,.F.); +#3544 = PLANE('',#3545); +#3545 = AXIS2_PLACEMENT_3D('',#3546,#3547,#3548); +#3546 = CARTESIAN_POINT('',(-36.5,40.15,144.)); +#3547 = DIRECTION('',(0.,-1.,0.)); +#3548 = DIRECTION('',(0.,-0.,-1.)); +#3549 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3553)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3550,#3551,#3552)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3686 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3687 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3688 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3689 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3686, +#3550 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3551 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3552 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3553 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3550, 'distance_accuracy_value','confusion accuracy'); -#3690 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3691,#3693); -#3691 = ( REPRESENTATION_RELATIONSHIP('','',#3631,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3692) +#3554 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3555,#3557); +#3555 = ( REPRESENTATION_RELATIONSHIP('','',#3495,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3556) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3692 = ITEM_DEFINED_TRANSFORMATION('','',#11,#131); -#3693 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3694); -#3694 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('30', - 'ConnectorBank_Left_Screw_R06','',#5,#3626,$); -#3695 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3628)); -#3696 = SHAPE_DEFINITION_REPRESENTATION(#3697,#3703); -#3697 = PRODUCT_DEFINITION_SHAPE('','',#3698); -#3698 = PRODUCT_DEFINITION('design','',#3699,#3702); -#3699 = PRODUCT_DEFINITION_FORMATION('','',#3700); -#3700 = PRODUCT('ConnectorBank_Left_Hole_R06_C02', - 'ConnectorBank_Left_Hole_R06_C02','',(#3701)); -#3701 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3702 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3703 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3704),#3757); -#3704 = MANIFOLD_SOLID_BREP('',#3705); -#3705 = CLOSED_SHELL('',(#3706,#3739,#3748)); -#3706 = ADVANCED_FACE('',(#3707),#3734,.T.); -#3707 = FACE_BOUND('',#3708,.T.); -#3708 = EDGE_LOOP('',(#3709,#3718,#3726,#3733)); -#3709 = ORIENTED_EDGE('',*,*,#3710,.F.); -#3710 = EDGE_CURVE('',#3711,#3711,#3713,.T.); -#3711 = VERTEX_POINT('',#3712); -#3712 = CARTESIAN_POINT('',(47.,-36.85,103.)); -#3713 = CIRCLE('',#3714,1.); -#3714 = AXIS2_PLACEMENT_3D('',#3715,#3716,#3717); -#3715 = CARTESIAN_POINT('',(47.,-36.85,104.)); -#3716 = DIRECTION('',(0.,-1.,0.)); -#3717 = DIRECTION('',(0.,-0.,-1.)); -#3718 = ORIENTED_EDGE('',*,*,#3719,.F.); -#3719 = EDGE_CURVE('',#3720,#3711,#3722,.T.); -#3720 = VERTEX_POINT('',#3721); -#3721 = CARTESIAN_POINT('',(47.,-36.15,103.)); -#3722 = LINE('',#3723,#3724); -#3723 = CARTESIAN_POINT('',(47.,-36.15,103.)); -#3724 = VECTOR('',#3725,1.); -#3725 = DIRECTION('',(0.,-1.,0.)); -#3726 = ORIENTED_EDGE('',*,*,#3727,.T.); -#3727 = EDGE_CURVE('',#3720,#3720,#3728,.T.); -#3728 = CIRCLE('',#3729,1.); -#3729 = AXIS2_PLACEMENT_3D('',#3730,#3731,#3732); -#3730 = CARTESIAN_POINT('',(47.,-36.15,104.)); -#3731 = DIRECTION('',(0.,-1.,0.)); -#3732 = DIRECTION('',(0.,-0.,-1.)); -#3733 = ORIENTED_EDGE('',*,*,#3719,.T.); -#3734 = CYLINDRICAL_SURFACE('',#3735,1.); -#3735 = AXIS2_PLACEMENT_3D('',#3736,#3737,#3738); -#3736 = CARTESIAN_POINT('',(47.,-36.15,104.)); -#3737 = DIRECTION('',(0.,-1.,0.)); -#3738 = DIRECTION('',(0.,-0.,-1.)); -#3739 = ADVANCED_FACE('',(#3740),#3743,.T.); -#3740 = FACE_BOUND('',#3741,.T.); -#3741 = EDGE_LOOP('',(#3742)); -#3742 = ORIENTED_EDGE('',*,*,#3710,.T.); -#3743 = PLANE('',#3744); -#3744 = AXIS2_PLACEMENT_3D('',#3745,#3746,#3747); -#3745 = CARTESIAN_POINT('',(47.,-36.85,104.)); -#3746 = DIRECTION('',(0.,-1.,0.)); -#3747 = DIRECTION('',(0.,-0.,-1.)); -#3748 = ADVANCED_FACE('',(#3749),#3752,.F.); -#3749 = FACE_BOUND('',#3750,.T.); -#3750 = EDGE_LOOP('',(#3751)); -#3751 = ORIENTED_EDGE('',*,*,#3727,.F.); -#3752 = PLANE('',#3753); -#3753 = AXIS2_PLACEMENT_3D('',#3754,#3755,#3756); -#3754 = CARTESIAN_POINT('',(47.,-36.15,104.)); -#3755 = DIRECTION('',(0.,-1.,0.)); -#3756 = DIRECTION('',(0.,-0.,-1.)); -#3757 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3761)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3758,#3759,#3760)) REPRESENTATION_CONTEXT +#3556 = ITEM_DEFINED_TRANSFORMATION('','',#11,#131); +#3557 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3558); +#3558 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('30', + 'ConnectorBank_Left_Hole_R10_C01','',#5,#3490,$); +#3559 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3492)); +#3560 = SHAPE_DEFINITION_REPRESENTATION(#3561,#3567); +#3561 = PRODUCT_DEFINITION_SHAPE('','',#3562); +#3562 = PRODUCT_DEFINITION('design','',#3563,#3566); +#3563 = PRODUCT_DEFINITION_FORMATION('','',#3564); +#3564 = PRODUCT('ConnectorBank_Left_Hole_R10_C02', + 'ConnectorBank_Left_Hole_R10_C02','',(#3565)); +#3565 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3566 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3567 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3568),#3621); +#3568 = MANIFOLD_SOLID_BREP('',#3569); +#3569 = CLOSED_SHELL('',(#3570,#3603,#3612)); +#3570 = ADVANCED_FACE('',(#3571),#3598,.T.); +#3571 = FACE_BOUND('',#3572,.T.); +#3572 = EDGE_LOOP('',(#3573,#3582,#3590,#3597)); +#3573 = ORIENTED_EDGE('',*,*,#3574,.F.); +#3574 = EDGE_CURVE('',#3575,#3575,#3577,.T.); +#3575 = VERTEX_POINT('',#3576); +#3576 = CARTESIAN_POINT('',(-30.5,39.45,143.)); +#3577 = CIRCLE('',#3578,1.); +#3578 = AXIS2_PLACEMENT_3D('',#3579,#3580,#3581); +#3579 = CARTESIAN_POINT('',(-30.5,39.45,144.)); +#3580 = DIRECTION('',(0.,-1.,0.)); +#3581 = DIRECTION('',(0.,-0.,-1.)); +#3582 = ORIENTED_EDGE('',*,*,#3583,.F.); +#3583 = EDGE_CURVE('',#3584,#3575,#3586,.T.); +#3584 = VERTEX_POINT('',#3585); +#3585 = CARTESIAN_POINT('',(-30.5,40.15,143.)); +#3586 = LINE('',#3587,#3588); +#3587 = CARTESIAN_POINT('',(-30.5,40.15,143.)); +#3588 = VECTOR('',#3589,1.); +#3589 = DIRECTION('',(0.,-1.,0.)); +#3590 = ORIENTED_EDGE('',*,*,#3591,.T.); +#3591 = EDGE_CURVE('',#3584,#3584,#3592,.T.); +#3592 = CIRCLE('',#3593,1.); +#3593 = AXIS2_PLACEMENT_3D('',#3594,#3595,#3596); +#3594 = CARTESIAN_POINT('',(-30.5,40.15,144.)); +#3595 = DIRECTION('',(0.,-1.,0.)); +#3596 = DIRECTION('',(0.,-0.,-1.)); +#3597 = ORIENTED_EDGE('',*,*,#3583,.T.); +#3598 = CYLINDRICAL_SURFACE('',#3599,1.); +#3599 = AXIS2_PLACEMENT_3D('',#3600,#3601,#3602); +#3600 = CARTESIAN_POINT('',(-30.5,40.15,144.)); +#3601 = DIRECTION('',(0.,-1.,0.)); +#3602 = DIRECTION('',(0.,-0.,-1.)); +#3603 = ADVANCED_FACE('',(#3604),#3607,.T.); +#3604 = FACE_BOUND('',#3605,.T.); +#3605 = EDGE_LOOP('',(#3606)); +#3606 = ORIENTED_EDGE('',*,*,#3574,.T.); +#3607 = PLANE('',#3608); +#3608 = AXIS2_PLACEMENT_3D('',#3609,#3610,#3611); +#3609 = CARTESIAN_POINT('',(-30.5,39.45,144.)); +#3610 = DIRECTION('',(0.,-1.,0.)); +#3611 = DIRECTION('',(0.,-0.,-1.)); +#3612 = ADVANCED_FACE('',(#3613),#3616,.F.); +#3613 = FACE_BOUND('',#3614,.T.); +#3614 = EDGE_LOOP('',(#3615)); +#3615 = ORIENTED_EDGE('',*,*,#3591,.F.); +#3616 = PLANE('',#3617); +#3617 = AXIS2_PLACEMENT_3D('',#3618,#3619,#3620); +#3618 = CARTESIAN_POINT('',(-30.5,40.15,144.)); +#3619 = DIRECTION('',(0.,-1.,0.)); +#3620 = DIRECTION('',(0.,-0.,-1.)); +#3621 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3625)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3622,#3623,#3624)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3758 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3759 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3760 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3761 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3758, +#3622 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3623 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3624 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3625 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3622, 'distance_accuracy_value','confusion accuracy'); -#3762 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3763,#3765); -#3763 = ( REPRESENTATION_RELATIONSHIP('','',#3703,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3764) +#3626 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3627,#3629); +#3627 = ( REPRESENTATION_RELATIONSHIP('','',#3567,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3628) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3764 = ITEM_DEFINED_TRANSFORMATION('','',#11,#135); -#3765 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3766); -#3766 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('31', - 'ConnectorBank_Left_Hole_R06_C02','',#5,#3698,$); -#3767 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3700)); -#3768 = SHAPE_DEFINITION_REPRESENTATION(#3769,#3775); -#3769 = PRODUCT_DEFINITION_SHAPE('','',#3770); -#3770 = PRODUCT_DEFINITION('design','',#3771,#3774); -#3771 = PRODUCT_DEFINITION_FORMATION('','',#3772); -#3772 = PRODUCT('ConnectorBank_Left_Hole_R07_C01', - 'ConnectorBank_Left_Hole_R07_C01','',(#3773)); -#3773 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3774 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3775 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3776),#3829); -#3776 = MANIFOLD_SOLID_BREP('',#3777); -#3777 = CLOSED_SHELL('',(#3778,#3811,#3820)); -#3778 = ADVANCED_FACE('',(#3779),#3806,.T.); +#3628 = ITEM_DEFINED_TRANSFORMATION('','',#11,#135); +#3629 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3630); +#3630 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('31', + 'ConnectorBank_Left_Hole_R10_C02','',#5,#3562,$); +#3631 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3564)); +#3632 = SHAPE_DEFINITION_REPRESENTATION(#3633,#3639); +#3633 = PRODUCT_DEFINITION_SHAPE('','',#3634); +#3634 = PRODUCT_DEFINITION('design','',#3635,#3638); +#3635 = PRODUCT_DEFINITION_FORMATION('','',#3636); +#3636 = PRODUCT('ConnectorBank_Right_Body','ConnectorBank_Right_Body','' + ,(#3637)); +#3637 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3638 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3639 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3640),#3790); +#3640 = MANIFOLD_SOLID_BREP('',#3641); +#3641 = CLOSED_SHELL('',(#3642,#3682,#3722,#3744,#3766,#3778)); +#3642 = ADVANCED_FACE('',(#3643),#3677,.F.); +#3643 = FACE_BOUND('',#3644,.F.); +#3644 = EDGE_LOOP('',(#3645,#3655,#3663,#3671)); +#3645 = ORIENTED_EDGE('',*,*,#3646,.F.); +#3646 = EDGE_CURVE('',#3647,#3649,#3651,.T.); +#3647 = VERTEX_POINT('',#3648); +#3648 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3649 = VERTEX_POINT('',#3650); +#3650 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#3651 = LINE('',#3652,#3653); +#3652 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3653 = VECTOR('',#3654,1.); +#3654 = DIRECTION('',(0.,0.,1.)); +#3655 = ORIENTED_EDGE('',*,*,#3656,.T.); +#3656 = EDGE_CURVE('',#3647,#3657,#3659,.T.); +#3657 = VERTEX_POINT('',#3658); +#3658 = CARTESIAN_POINT('',(-17.5,40.,50.)); +#3659 = LINE('',#3660,#3661); +#3660 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3661 = VECTOR('',#3662,1.); +#3662 = DIRECTION('',(-0.,1.,0.)); +#3663 = ORIENTED_EDGE('',*,*,#3664,.T.); +#3664 = EDGE_CURVE('',#3657,#3665,#3667,.T.); +#3665 = VERTEX_POINT('',#3666); +#3666 = CARTESIAN_POINT('',(-17.5,40.,152.)); +#3667 = LINE('',#3668,#3669); +#3668 = CARTESIAN_POINT('',(-17.5,40.,50.)); +#3669 = VECTOR('',#3670,1.); +#3670 = DIRECTION('',(0.,0.,1.)); +#3671 = ORIENTED_EDGE('',*,*,#3672,.F.); +#3672 = EDGE_CURVE('',#3649,#3665,#3673,.T.); +#3673 = LINE('',#3674,#3675); +#3674 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#3675 = VECTOR('',#3676,1.); +#3676 = DIRECTION('',(-0.,1.,0.)); +#3677 = PLANE('',#3678); +#3678 = AXIS2_PLACEMENT_3D('',#3679,#3680,#3681); +#3679 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3680 = DIRECTION('',(1.,0.,-0.)); +#3681 = DIRECTION('',(0.,0.,1.)); +#3682 = ADVANCED_FACE('',(#3683),#3717,.T.); +#3683 = FACE_BOUND('',#3684,.T.); +#3684 = EDGE_LOOP('',(#3685,#3695,#3703,#3711)); +#3685 = ORIENTED_EDGE('',*,*,#3686,.F.); +#3686 = EDGE_CURVE('',#3687,#3689,#3691,.T.); +#3687 = VERTEX_POINT('',#3688); +#3688 = CARTESIAN_POINT('',(2.5,36.,50.)); +#3689 = VERTEX_POINT('',#3690); +#3690 = CARTESIAN_POINT('',(2.5,36.,152.)); +#3691 = LINE('',#3692,#3693); +#3692 = CARTESIAN_POINT('',(2.5,36.,50.)); +#3693 = VECTOR('',#3694,1.); +#3694 = DIRECTION('',(0.,0.,1.)); +#3695 = ORIENTED_EDGE('',*,*,#3696,.T.); +#3696 = EDGE_CURVE('',#3687,#3697,#3699,.T.); +#3697 = VERTEX_POINT('',#3698); +#3698 = CARTESIAN_POINT('',(2.5,40.,50.)); +#3699 = LINE('',#3700,#3701); +#3700 = CARTESIAN_POINT('',(2.5,36.,50.)); +#3701 = VECTOR('',#3702,1.); +#3702 = DIRECTION('',(-0.,1.,0.)); +#3703 = ORIENTED_EDGE('',*,*,#3704,.T.); +#3704 = EDGE_CURVE('',#3697,#3705,#3707,.T.); +#3705 = VERTEX_POINT('',#3706); +#3706 = CARTESIAN_POINT('',(2.5,40.,152.)); +#3707 = LINE('',#3708,#3709); +#3708 = CARTESIAN_POINT('',(2.5,40.,50.)); +#3709 = VECTOR('',#3710,1.); +#3710 = DIRECTION('',(0.,0.,1.)); +#3711 = ORIENTED_EDGE('',*,*,#3712,.F.); +#3712 = EDGE_CURVE('',#3689,#3705,#3713,.T.); +#3713 = LINE('',#3714,#3715); +#3714 = CARTESIAN_POINT('',(2.5,36.,152.)); +#3715 = VECTOR('',#3716,1.); +#3716 = DIRECTION('',(-0.,1.,0.)); +#3717 = PLANE('',#3718); +#3718 = AXIS2_PLACEMENT_3D('',#3719,#3720,#3721); +#3719 = CARTESIAN_POINT('',(2.5,36.,50.)); +#3720 = DIRECTION('',(1.,0.,-0.)); +#3721 = DIRECTION('',(0.,0.,1.)); +#3722 = ADVANCED_FACE('',(#3723),#3739,.F.); +#3723 = FACE_BOUND('',#3724,.F.); +#3724 = EDGE_LOOP('',(#3725,#3731,#3732,#3738)); +#3725 = ORIENTED_EDGE('',*,*,#3726,.F.); +#3726 = EDGE_CURVE('',#3647,#3687,#3727,.T.); +#3727 = LINE('',#3728,#3729); +#3728 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3729 = VECTOR('',#3730,1.); +#3730 = DIRECTION('',(1.,0.,-0.)); +#3731 = ORIENTED_EDGE('',*,*,#3646,.T.); +#3732 = ORIENTED_EDGE('',*,*,#3733,.T.); +#3733 = EDGE_CURVE('',#3649,#3689,#3734,.T.); +#3734 = LINE('',#3735,#3736); +#3735 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#3736 = VECTOR('',#3737,1.); +#3737 = DIRECTION('',(1.,0.,-0.)); +#3738 = ORIENTED_EDGE('',*,*,#3686,.F.); +#3739 = PLANE('',#3740); +#3740 = AXIS2_PLACEMENT_3D('',#3741,#3742,#3743); +#3741 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3742 = DIRECTION('',(-0.,1.,0.)); +#3743 = DIRECTION('',(0.,0.,1.)); +#3744 = ADVANCED_FACE('',(#3745),#3761,.T.); +#3745 = FACE_BOUND('',#3746,.T.); +#3746 = EDGE_LOOP('',(#3747,#3753,#3754,#3760)); +#3747 = ORIENTED_EDGE('',*,*,#3748,.F.); +#3748 = EDGE_CURVE('',#3657,#3697,#3749,.T.); +#3749 = LINE('',#3750,#3751); +#3750 = CARTESIAN_POINT('',(-17.5,40.,50.)); +#3751 = VECTOR('',#3752,1.); +#3752 = DIRECTION('',(1.,0.,-0.)); +#3753 = ORIENTED_EDGE('',*,*,#3664,.T.); +#3754 = ORIENTED_EDGE('',*,*,#3755,.T.); +#3755 = EDGE_CURVE('',#3665,#3705,#3756,.T.); +#3756 = LINE('',#3757,#3758); +#3757 = CARTESIAN_POINT('',(-17.5,40.,152.)); +#3758 = VECTOR('',#3759,1.); +#3759 = DIRECTION('',(1.,0.,-0.)); +#3760 = ORIENTED_EDGE('',*,*,#3704,.F.); +#3761 = PLANE('',#3762); +#3762 = AXIS2_PLACEMENT_3D('',#3763,#3764,#3765); +#3763 = CARTESIAN_POINT('',(-17.5,40.,50.)); +#3764 = DIRECTION('',(-0.,1.,0.)); +#3765 = DIRECTION('',(0.,0.,1.)); +#3766 = ADVANCED_FACE('',(#3767),#3773,.F.); +#3767 = FACE_BOUND('',#3768,.F.); +#3768 = EDGE_LOOP('',(#3769,#3770,#3771,#3772)); +#3769 = ORIENTED_EDGE('',*,*,#3656,.F.); +#3770 = ORIENTED_EDGE('',*,*,#3726,.T.); +#3771 = ORIENTED_EDGE('',*,*,#3696,.T.); +#3772 = ORIENTED_EDGE('',*,*,#3748,.F.); +#3773 = PLANE('',#3774); +#3774 = AXIS2_PLACEMENT_3D('',#3775,#3776,#3777); +#3775 = CARTESIAN_POINT('',(-17.5,36.,50.)); +#3776 = DIRECTION('',(0.,0.,1.)); +#3777 = DIRECTION('',(1.,0.,-0.)); +#3778 = ADVANCED_FACE('',(#3779),#3785,.T.); #3779 = FACE_BOUND('',#3780,.T.); -#3780 = EDGE_LOOP('',(#3781,#3790,#3798,#3805)); -#3781 = ORIENTED_EDGE('',*,*,#3782,.F.); -#3782 = EDGE_CURVE('',#3783,#3783,#3785,.T.); -#3783 = VERTEX_POINT('',#3784); -#3784 = CARTESIAN_POINT('',(41.,-36.85,113.)); -#3785 = CIRCLE('',#3786,1.); +#3780 = EDGE_LOOP('',(#3781,#3782,#3783,#3784)); +#3781 = ORIENTED_EDGE('',*,*,#3672,.F.); +#3782 = ORIENTED_EDGE('',*,*,#3733,.T.); +#3783 = ORIENTED_EDGE('',*,*,#3712,.T.); +#3784 = ORIENTED_EDGE('',*,*,#3755,.F.); +#3785 = PLANE('',#3786); #3786 = AXIS2_PLACEMENT_3D('',#3787,#3788,#3789); -#3787 = CARTESIAN_POINT('',(41.,-36.85,114.)); -#3788 = DIRECTION('',(0.,-1.,0.)); -#3789 = DIRECTION('',(0.,-0.,-1.)); -#3790 = ORIENTED_EDGE('',*,*,#3791,.F.); -#3791 = EDGE_CURVE('',#3792,#3783,#3794,.T.); -#3792 = VERTEX_POINT('',#3793); -#3793 = CARTESIAN_POINT('',(41.,-36.15,113.)); -#3794 = LINE('',#3795,#3796); -#3795 = CARTESIAN_POINT('',(41.,-36.15,113.)); -#3796 = VECTOR('',#3797,1.); -#3797 = DIRECTION('',(0.,-1.,0.)); -#3798 = ORIENTED_EDGE('',*,*,#3799,.T.); -#3799 = EDGE_CURVE('',#3792,#3792,#3800,.T.); -#3800 = CIRCLE('',#3801,1.); -#3801 = AXIS2_PLACEMENT_3D('',#3802,#3803,#3804); -#3802 = CARTESIAN_POINT('',(41.,-36.15,114.)); -#3803 = DIRECTION('',(0.,-1.,0.)); -#3804 = DIRECTION('',(0.,-0.,-1.)); -#3805 = ORIENTED_EDGE('',*,*,#3791,.T.); -#3806 = CYLINDRICAL_SURFACE('',#3807,1.); -#3807 = AXIS2_PLACEMENT_3D('',#3808,#3809,#3810); -#3808 = CARTESIAN_POINT('',(41.,-36.15,114.)); -#3809 = DIRECTION('',(0.,-1.,0.)); -#3810 = DIRECTION('',(0.,-0.,-1.)); -#3811 = ADVANCED_FACE('',(#3812),#3815,.T.); -#3812 = FACE_BOUND('',#3813,.T.); -#3813 = EDGE_LOOP('',(#3814)); -#3814 = ORIENTED_EDGE('',*,*,#3782,.T.); -#3815 = PLANE('',#3816); -#3816 = AXIS2_PLACEMENT_3D('',#3817,#3818,#3819); -#3817 = CARTESIAN_POINT('',(41.,-36.85,114.)); -#3818 = DIRECTION('',(0.,-1.,0.)); -#3819 = DIRECTION('',(0.,-0.,-1.)); -#3820 = ADVANCED_FACE('',(#3821),#3824,.F.); -#3821 = FACE_BOUND('',#3822,.T.); -#3822 = EDGE_LOOP('',(#3823)); -#3823 = ORIENTED_EDGE('',*,*,#3799,.F.); -#3824 = PLANE('',#3825); -#3825 = AXIS2_PLACEMENT_3D('',#3826,#3827,#3828); -#3826 = CARTESIAN_POINT('',(41.,-36.15,114.)); -#3827 = DIRECTION('',(0.,-1.,0.)); -#3828 = DIRECTION('',(0.,-0.,-1.)); -#3829 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3833)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3830,#3831,#3832)) REPRESENTATION_CONTEXT +#3787 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#3788 = DIRECTION('',(0.,0.,1.)); +#3789 = DIRECTION('',(1.,0.,-0.)); +#3790 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3794)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3791,#3792,#3793)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3830 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3831 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3832 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3833 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3830, +#3791 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3792 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3793 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3794 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3791, 'distance_accuracy_value','confusion accuracy'); -#3834 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3835,#3837); -#3835 = ( REPRESENTATION_RELATIONSHIP('','',#3775,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3836) +#3795 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3796,#3798); +#3796 = ( REPRESENTATION_RELATIONSHIP('','',#3639,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3797) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3836 = ITEM_DEFINED_TRANSFORMATION('','',#11,#139); -#3837 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3838); -#3838 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('32', - 'ConnectorBank_Left_Hole_R07_C01','',#5,#3770,$); -#3839 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3772)); -#3840 = SHAPE_DEFINITION_REPRESENTATION(#3841,#3847); -#3841 = PRODUCT_DEFINITION_SHAPE('','',#3842); -#3842 = PRODUCT_DEFINITION('design','',#3843,#3846); -#3843 = PRODUCT_DEFINITION_FORMATION('','',#3844); -#3844 = PRODUCT('ConnectorBank_Left_Screw_R07', - 'ConnectorBank_Left_Screw_R07','',(#3845)); -#3845 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3846 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3847 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3848),#3901); -#3848 = MANIFOLD_SOLID_BREP('',#3849); -#3849 = CLOSED_SHELL('',(#3850,#3883,#3892)); -#3850 = ADVANCED_FACE('',(#3851),#3878,.T.); -#3851 = FACE_BOUND('',#3852,.T.); -#3852 = EDGE_LOOP('',(#3853,#3862,#3870,#3877)); -#3853 = ORIENTED_EDGE('',*,*,#3854,.F.); -#3854 = EDGE_CURVE('',#3855,#3855,#3857,.T.); -#3855 = VERTEX_POINT('',#3856); -#3856 = CARTESIAN_POINT('',(55.6,-36.95,113.45)); -#3857 = CIRCLE('',#3858,0.55); -#3858 = AXIS2_PLACEMENT_3D('',#3859,#3860,#3861); -#3859 = CARTESIAN_POINT('',(55.6,-36.95,114.)); -#3860 = DIRECTION('',(0.,-1.,0.)); -#3861 = DIRECTION('',(0.,-0.,-1.)); -#3862 = ORIENTED_EDGE('',*,*,#3863,.F.); -#3863 = EDGE_CURVE('',#3864,#3855,#3866,.T.); -#3864 = VERTEX_POINT('',#3865); -#3865 = CARTESIAN_POINT('',(55.6,-36.15,113.45)); -#3866 = LINE('',#3867,#3868); -#3867 = CARTESIAN_POINT('',(55.6,-36.15,113.45)); -#3868 = VECTOR('',#3869,1.); -#3869 = DIRECTION('',(0.,-1.,0.)); -#3870 = ORIENTED_EDGE('',*,*,#3871,.T.); -#3871 = EDGE_CURVE('',#3864,#3864,#3872,.T.); -#3872 = CIRCLE('',#3873,0.55); -#3873 = AXIS2_PLACEMENT_3D('',#3874,#3875,#3876); -#3874 = CARTESIAN_POINT('',(55.6,-36.15,114.)); -#3875 = DIRECTION('',(0.,-1.,0.)); -#3876 = DIRECTION('',(0.,-0.,-1.)); -#3877 = ORIENTED_EDGE('',*,*,#3863,.T.); -#3878 = CYLINDRICAL_SURFACE('',#3879,0.55); -#3879 = AXIS2_PLACEMENT_3D('',#3880,#3881,#3882); -#3880 = CARTESIAN_POINT('',(55.6,-36.15,114.)); -#3881 = DIRECTION('',(0.,-1.,0.)); -#3882 = DIRECTION('',(0.,-0.,-1.)); -#3883 = ADVANCED_FACE('',(#3884),#3887,.T.); -#3884 = FACE_BOUND('',#3885,.T.); -#3885 = EDGE_LOOP('',(#3886)); -#3886 = ORIENTED_EDGE('',*,*,#3854,.T.); -#3887 = PLANE('',#3888); -#3888 = AXIS2_PLACEMENT_3D('',#3889,#3890,#3891); -#3889 = CARTESIAN_POINT('',(55.6,-36.95,114.)); -#3890 = DIRECTION('',(0.,-1.,0.)); -#3891 = DIRECTION('',(0.,-0.,-1.)); -#3892 = ADVANCED_FACE('',(#3893),#3896,.F.); -#3893 = FACE_BOUND('',#3894,.T.); -#3894 = EDGE_LOOP('',(#3895)); -#3895 = ORIENTED_EDGE('',*,*,#3871,.F.); -#3896 = PLANE('',#3897); -#3897 = AXIS2_PLACEMENT_3D('',#3898,#3899,#3900); -#3898 = CARTESIAN_POINT('',(55.6,-36.15,114.)); -#3899 = DIRECTION('',(0.,-1.,0.)); -#3900 = DIRECTION('',(0.,-0.,-1.)); -#3901 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3905)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3902,#3903,#3904)) REPRESENTATION_CONTEXT +#3797 = ITEM_DEFINED_TRANSFORMATION('','',#11,#139); +#3798 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3799); +#3799 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('32','ConnectorBank_Right_Body', + '',#5,#3634,$); +#3800 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3636)); +#3801 = SHAPE_DEFINITION_REPRESENTATION(#3802,#3808); +#3802 = PRODUCT_DEFINITION_SHAPE('','',#3803); +#3803 = PRODUCT_DEFINITION('design','',#3804,#3807); +#3804 = PRODUCT_DEFINITION_FORMATION('','',#3805); +#3805 = PRODUCT('ConnectorBank_Right_SideRailLeft', + 'ConnectorBank_Right_SideRailLeft','',(#3806)); +#3806 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3807 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3808 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3809),#3959); +#3809 = MANIFOLD_SOLID_BREP('',#3810); +#3810 = CLOSED_SHELL('',(#3811,#3851,#3891,#3913,#3935,#3947)); +#3811 = ADVANCED_FACE('',(#3812),#3846,.F.); +#3812 = FACE_BOUND('',#3813,.F.); +#3813 = EDGE_LOOP('',(#3814,#3824,#3832,#3840)); +#3814 = ORIENTED_EDGE('',*,*,#3815,.F.); +#3815 = EDGE_CURVE('',#3816,#3818,#3820,.T.); +#3816 = VERTEX_POINT('',#3817); +#3817 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3818 = VERTEX_POINT('',#3819); +#3819 = CARTESIAN_POINT('',(-18.7,35.8,152.)); +#3820 = LINE('',#3821,#3822); +#3821 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3822 = VECTOR('',#3823,1.); +#3823 = DIRECTION('',(0.,0.,1.)); +#3824 = ORIENTED_EDGE('',*,*,#3825,.T.); +#3825 = EDGE_CURVE('',#3816,#3826,#3828,.T.); +#3826 = VERTEX_POINT('',#3827); +#3827 = CARTESIAN_POINT('',(-18.7,40.2,50.)); +#3828 = LINE('',#3829,#3830); +#3829 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3830 = VECTOR('',#3831,1.); +#3831 = DIRECTION('',(-0.,1.,0.)); +#3832 = ORIENTED_EDGE('',*,*,#3833,.T.); +#3833 = EDGE_CURVE('',#3826,#3834,#3836,.T.); +#3834 = VERTEX_POINT('',#3835); +#3835 = CARTESIAN_POINT('',(-18.7,40.2,152.)); +#3836 = LINE('',#3837,#3838); +#3837 = CARTESIAN_POINT('',(-18.7,40.2,50.)); +#3838 = VECTOR('',#3839,1.); +#3839 = DIRECTION('',(0.,0.,1.)); +#3840 = ORIENTED_EDGE('',*,*,#3841,.F.); +#3841 = EDGE_CURVE('',#3818,#3834,#3842,.T.); +#3842 = LINE('',#3843,#3844); +#3843 = CARTESIAN_POINT('',(-18.7,35.8,152.)); +#3844 = VECTOR('',#3845,1.); +#3845 = DIRECTION('',(-0.,1.,0.)); +#3846 = PLANE('',#3847); +#3847 = AXIS2_PLACEMENT_3D('',#3848,#3849,#3850); +#3848 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3849 = DIRECTION('',(1.,0.,-0.)); +#3850 = DIRECTION('',(0.,0.,1.)); +#3851 = ADVANCED_FACE('',(#3852),#3886,.T.); +#3852 = FACE_BOUND('',#3853,.T.); +#3853 = EDGE_LOOP('',(#3854,#3864,#3872,#3880)); +#3854 = ORIENTED_EDGE('',*,*,#3855,.F.); +#3855 = EDGE_CURVE('',#3856,#3858,#3860,.T.); +#3856 = VERTEX_POINT('',#3857); +#3857 = CARTESIAN_POINT('',(-17.5,35.8,50.)); +#3858 = VERTEX_POINT('',#3859); +#3859 = CARTESIAN_POINT('',(-17.5,35.8,152.)); +#3860 = LINE('',#3861,#3862); +#3861 = CARTESIAN_POINT('',(-17.5,35.8,50.)); +#3862 = VECTOR('',#3863,1.); +#3863 = DIRECTION('',(0.,0.,1.)); +#3864 = ORIENTED_EDGE('',*,*,#3865,.T.); +#3865 = EDGE_CURVE('',#3856,#3866,#3868,.T.); +#3866 = VERTEX_POINT('',#3867); +#3867 = CARTESIAN_POINT('',(-17.5,40.2,50.)); +#3868 = LINE('',#3869,#3870); +#3869 = CARTESIAN_POINT('',(-17.5,35.8,50.)); +#3870 = VECTOR('',#3871,1.); +#3871 = DIRECTION('',(-0.,1.,0.)); +#3872 = ORIENTED_EDGE('',*,*,#3873,.T.); +#3873 = EDGE_CURVE('',#3866,#3874,#3876,.T.); +#3874 = VERTEX_POINT('',#3875); +#3875 = CARTESIAN_POINT('',(-17.5,40.2,152.)); +#3876 = LINE('',#3877,#3878); +#3877 = CARTESIAN_POINT('',(-17.5,40.2,50.)); +#3878 = VECTOR('',#3879,1.); +#3879 = DIRECTION('',(0.,0.,1.)); +#3880 = ORIENTED_EDGE('',*,*,#3881,.F.); +#3881 = EDGE_CURVE('',#3858,#3874,#3882,.T.); +#3882 = LINE('',#3883,#3884); +#3883 = CARTESIAN_POINT('',(-17.5,35.8,152.)); +#3884 = VECTOR('',#3885,1.); +#3885 = DIRECTION('',(-0.,1.,0.)); +#3886 = PLANE('',#3887); +#3887 = AXIS2_PLACEMENT_3D('',#3888,#3889,#3890); +#3888 = CARTESIAN_POINT('',(-17.5,35.8,50.)); +#3889 = DIRECTION('',(1.,0.,-0.)); +#3890 = DIRECTION('',(0.,0.,1.)); +#3891 = ADVANCED_FACE('',(#3892),#3908,.F.); +#3892 = FACE_BOUND('',#3893,.F.); +#3893 = EDGE_LOOP('',(#3894,#3900,#3901,#3907)); +#3894 = ORIENTED_EDGE('',*,*,#3895,.F.); +#3895 = EDGE_CURVE('',#3816,#3856,#3896,.T.); +#3896 = LINE('',#3897,#3898); +#3897 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3898 = VECTOR('',#3899,1.); +#3899 = DIRECTION('',(1.,0.,-0.)); +#3900 = ORIENTED_EDGE('',*,*,#3815,.T.); +#3901 = ORIENTED_EDGE('',*,*,#3902,.T.); +#3902 = EDGE_CURVE('',#3818,#3858,#3903,.T.); +#3903 = LINE('',#3904,#3905); +#3904 = CARTESIAN_POINT('',(-18.7,35.8,152.)); +#3905 = VECTOR('',#3906,1.); +#3906 = DIRECTION('',(1.,0.,-0.)); +#3907 = ORIENTED_EDGE('',*,*,#3855,.F.); +#3908 = PLANE('',#3909); +#3909 = AXIS2_PLACEMENT_3D('',#3910,#3911,#3912); +#3910 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3911 = DIRECTION('',(-0.,1.,0.)); +#3912 = DIRECTION('',(0.,0.,1.)); +#3913 = ADVANCED_FACE('',(#3914),#3930,.T.); +#3914 = FACE_BOUND('',#3915,.T.); +#3915 = EDGE_LOOP('',(#3916,#3922,#3923,#3929)); +#3916 = ORIENTED_EDGE('',*,*,#3917,.F.); +#3917 = EDGE_CURVE('',#3826,#3866,#3918,.T.); +#3918 = LINE('',#3919,#3920); +#3919 = CARTESIAN_POINT('',(-18.7,40.2,50.)); +#3920 = VECTOR('',#3921,1.); +#3921 = DIRECTION('',(1.,0.,-0.)); +#3922 = ORIENTED_EDGE('',*,*,#3833,.T.); +#3923 = ORIENTED_EDGE('',*,*,#3924,.T.); +#3924 = EDGE_CURVE('',#3834,#3874,#3925,.T.); +#3925 = LINE('',#3926,#3927); +#3926 = CARTESIAN_POINT('',(-18.7,40.2,152.)); +#3927 = VECTOR('',#3928,1.); +#3928 = DIRECTION('',(1.,0.,-0.)); +#3929 = ORIENTED_EDGE('',*,*,#3873,.F.); +#3930 = PLANE('',#3931); +#3931 = AXIS2_PLACEMENT_3D('',#3932,#3933,#3934); +#3932 = CARTESIAN_POINT('',(-18.7,40.2,50.)); +#3933 = DIRECTION('',(-0.,1.,0.)); +#3934 = DIRECTION('',(0.,0.,1.)); +#3935 = ADVANCED_FACE('',(#3936),#3942,.F.); +#3936 = FACE_BOUND('',#3937,.F.); +#3937 = EDGE_LOOP('',(#3938,#3939,#3940,#3941)); +#3938 = ORIENTED_EDGE('',*,*,#3825,.F.); +#3939 = ORIENTED_EDGE('',*,*,#3895,.T.); +#3940 = ORIENTED_EDGE('',*,*,#3865,.T.); +#3941 = ORIENTED_EDGE('',*,*,#3917,.F.); +#3942 = PLANE('',#3943); +#3943 = AXIS2_PLACEMENT_3D('',#3944,#3945,#3946); +#3944 = CARTESIAN_POINT('',(-18.7,35.8,50.)); +#3945 = DIRECTION('',(0.,0.,1.)); +#3946 = DIRECTION('',(1.,0.,-0.)); +#3947 = ADVANCED_FACE('',(#3948),#3954,.T.); +#3948 = FACE_BOUND('',#3949,.T.); +#3949 = EDGE_LOOP('',(#3950,#3951,#3952,#3953)); +#3950 = ORIENTED_EDGE('',*,*,#3841,.F.); +#3951 = ORIENTED_EDGE('',*,*,#3902,.T.); +#3952 = ORIENTED_EDGE('',*,*,#3881,.T.); +#3953 = ORIENTED_EDGE('',*,*,#3924,.F.); +#3954 = PLANE('',#3955); +#3955 = AXIS2_PLACEMENT_3D('',#3956,#3957,#3958); +#3956 = CARTESIAN_POINT('',(-18.7,35.8,152.)); +#3957 = DIRECTION('',(0.,0.,1.)); +#3958 = DIRECTION('',(1.,0.,-0.)); +#3959 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3963)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3960,#3961,#3962)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3902 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3903 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3904 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3905 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3902, +#3960 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3961 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3962 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3963 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3960, 'distance_accuracy_value','confusion accuracy'); -#3906 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3907,#3909); -#3907 = ( REPRESENTATION_RELATIONSHIP('','',#3847,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3908) +#3964 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3965,#3967); +#3965 = ( REPRESENTATION_RELATIONSHIP('','',#3808,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3966) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3908 = ITEM_DEFINED_TRANSFORMATION('','',#11,#143); -#3909 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3910); -#3910 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('33', - 'ConnectorBank_Left_Screw_R07','',#5,#3842,$); -#3911 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3844)); -#3912 = SHAPE_DEFINITION_REPRESENTATION(#3913,#3919); -#3913 = PRODUCT_DEFINITION_SHAPE('','',#3914); -#3914 = PRODUCT_DEFINITION('design','',#3915,#3918); -#3915 = PRODUCT_DEFINITION_FORMATION('','',#3916); -#3916 = PRODUCT('ConnectorBank_Left_Hole_R07_C02', - 'ConnectorBank_Left_Hole_R07_C02','',(#3917)); -#3917 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3918 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3919 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3920),#3973); -#3920 = MANIFOLD_SOLID_BREP('',#3921); -#3921 = CLOSED_SHELL('',(#3922,#3955,#3964)); -#3922 = ADVANCED_FACE('',(#3923),#3950,.T.); -#3923 = FACE_BOUND('',#3924,.T.); -#3924 = EDGE_LOOP('',(#3925,#3934,#3942,#3949)); -#3925 = ORIENTED_EDGE('',*,*,#3926,.F.); -#3926 = EDGE_CURVE('',#3927,#3927,#3929,.T.); -#3927 = VERTEX_POINT('',#3928); -#3928 = CARTESIAN_POINT('',(47.,-36.85,113.)); -#3929 = CIRCLE('',#3930,1.); -#3930 = AXIS2_PLACEMENT_3D('',#3931,#3932,#3933); -#3931 = CARTESIAN_POINT('',(47.,-36.85,114.)); -#3932 = DIRECTION('',(0.,-1.,0.)); -#3933 = DIRECTION('',(0.,-0.,-1.)); -#3934 = ORIENTED_EDGE('',*,*,#3935,.F.); -#3935 = EDGE_CURVE('',#3936,#3927,#3938,.T.); -#3936 = VERTEX_POINT('',#3937); -#3937 = CARTESIAN_POINT('',(47.,-36.15,113.)); -#3938 = LINE('',#3939,#3940); -#3939 = CARTESIAN_POINT('',(47.,-36.15,113.)); -#3940 = VECTOR('',#3941,1.); -#3941 = DIRECTION('',(0.,-1.,0.)); -#3942 = ORIENTED_EDGE('',*,*,#3943,.T.); -#3943 = EDGE_CURVE('',#3936,#3936,#3944,.T.); -#3944 = CIRCLE('',#3945,1.); -#3945 = AXIS2_PLACEMENT_3D('',#3946,#3947,#3948); -#3946 = CARTESIAN_POINT('',(47.,-36.15,114.)); -#3947 = DIRECTION('',(0.,-1.,0.)); -#3948 = DIRECTION('',(0.,-0.,-1.)); -#3949 = ORIENTED_EDGE('',*,*,#3935,.T.); -#3950 = CYLINDRICAL_SURFACE('',#3951,1.); -#3951 = AXIS2_PLACEMENT_3D('',#3952,#3953,#3954); -#3952 = CARTESIAN_POINT('',(47.,-36.15,114.)); -#3953 = DIRECTION('',(0.,-1.,0.)); -#3954 = DIRECTION('',(0.,-0.,-1.)); -#3955 = ADVANCED_FACE('',(#3956),#3959,.T.); -#3956 = FACE_BOUND('',#3957,.T.); -#3957 = EDGE_LOOP('',(#3958)); -#3958 = ORIENTED_EDGE('',*,*,#3926,.T.); -#3959 = PLANE('',#3960); -#3960 = AXIS2_PLACEMENT_3D('',#3961,#3962,#3963); -#3961 = CARTESIAN_POINT('',(47.,-36.85,114.)); -#3962 = DIRECTION('',(0.,-1.,0.)); -#3963 = DIRECTION('',(0.,-0.,-1.)); -#3964 = ADVANCED_FACE('',(#3965),#3968,.F.); -#3965 = FACE_BOUND('',#3966,.T.); -#3966 = EDGE_LOOP('',(#3967)); -#3967 = ORIENTED_EDGE('',*,*,#3943,.F.); -#3968 = PLANE('',#3969); -#3969 = AXIS2_PLACEMENT_3D('',#3970,#3971,#3972); -#3970 = CARTESIAN_POINT('',(47.,-36.15,114.)); -#3971 = DIRECTION('',(0.,-1.,0.)); -#3972 = DIRECTION('',(0.,-0.,-1.)); -#3973 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3977)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#3974,#3975,#3976)) REPRESENTATION_CONTEXT +#3966 = ITEM_DEFINED_TRANSFORMATION('','',#11,#143); +#3967 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3968); +#3968 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('33', + 'ConnectorBank_Right_SideRailLeft','',#5,#3803,$); +#3969 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3805)); +#3970 = SHAPE_DEFINITION_REPRESENTATION(#3971,#3977); +#3971 = PRODUCT_DEFINITION_SHAPE('','',#3972); +#3972 = PRODUCT_DEFINITION('design','',#3973,#3976); +#3973 = PRODUCT_DEFINITION_FORMATION('','',#3974); +#3974 = PRODUCT('ConnectorBank_Right_SideRailRight', + 'ConnectorBank_Right_SideRailRight','',(#3975)); +#3975 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3976 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3977 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3978),#4128); +#3978 = MANIFOLD_SOLID_BREP('',#3979); +#3979 = CLOSED_SHELL('',(#3980,#4020,#4060,#4082,#4104,#4116)); +#3980 = ADVANCED_FACE('',(#3981),#4015,.F.); +#3981 = FACE_BOUND('',#3982,.F.); +#3982 = EDGE_LOOP('',(#3983,#3993,#4001,#4009)); +#3983 = ORIENTED_EDGE('',*,*,#3984,.F.); +#3984 = EDGE_CURVE('',#3985,#3987,#3989,.T.); +#3985 = VERTEX_POINT('',#3986); +#3986 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#3987 = VERTEX_POINT('',#3988); +#3988 = CARTESIAN_POINT('',(2.5,35.8,152.)); +#3989 = LINE('',#3990,#3991); +#3990 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#3991 = VECTOR('',#3992,1.); +#3992 = DIRECTION('',(0.,0.,1.)); +#3993 = ORIENTED_EDGE('',*,*,#3994,.T.); +#3994 = EDGE_CURVE('',#3985,#3995,#3997,.T.); +#3995 = VERTEX_POINT('',#3996); +#3996 = CARTESIAN_POINT('',(2.5,40.2,50.)); +#3997 = LINE('',#3998,#3999); +#3998 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#3999 = VECTOR('',#4000,1.); +#4000 = DIRECTION('',(-0.,1.,0.)); +#4001 = ORIENTED_EDGE('',*,*,#4002,.T.); +#4002 = EDGE_CURVE('',#3995,#4003,#4005,.T.); +#4003 = VERTEX_POINT('',#4004); +#4004 = CARTESIAN_POINT('',(2.5,40.2,152.)); +#4005 = LINE('',#4006,#4007); +#4006 = CARTESIAN_POINT('',(2.5,40.2,50.)); +#4007 = VECTOR('',#4008,1.); +#4008 = DIRECTION('',(0.,0.,1.)); +#4009 = ORIENTED_EDGE('',*,*,#4010,.F.); +#4010 = EDGE_CURVE('',#3987,#4003,#4011,.T.); +#4011 = LINE('',#4012,#4013); +#4012 = CARTESIAN_POINT('',(2.5,35.8,152.)); +#4013 = VECTOR('',#4014,1.); +#4014 = DIRECTION('',(-0.,1.,0.)); +#4015 = PLANE('',#4016); +#4016 = AXIS2_PLACEMENT_3D('',#4017,#4018,#4019); +#4017 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#4018 = DIRECTION('',(1.,0.,-0.)); +#4019 = DIRECTION('',(0.,0.,1.)); +#4020 = ADVANCED_FACE('',(#4021),#4055,.T.); +#4021 = FACE_BOUND('',#4022,.T.); +#4022 = EDGE_LOOP('',(#4023,#4033,#4041,#4049)); +#4023 = ORIENTED_EDGE('',*,*,#4024,.F.); +#4024 = EDGE_CURVE('',#4025,#4027,#4029,.T.); +#4025 = VERTEX_POINT('',#4026); +#4026 = CARTESIAN_POINT('',(3.7,35.8,50.)); +#4027 = VERTEX_POINT('',#4028); +#4028 = CARTESIAN_POINT('',(3.7,35.8,152.)); +#4029 = LINE('',#4030,#4031); +#4030 = CARTESIAN_POINT('',(3.7,35.8,50.)); +#4031 = VECTOR('',#4032,1.); +#4032 = DIRECTION('',(0.,0.,1.)); +#4033 = ORIENTED_EDGE('',*,*,#4034,.T.); +#4034 = EDGE_CURVE('',#4025,#4035,#4037,.T.); +#4035 = VERTEX_POINT('',#4036); +#4036 = CARTESIAN_POINT('',(3.7,40.2,50.)); +#4037 = LINE('',#4038,#4039); +#4038 = CARTESIAN_POINT('',(3.7,35.8,50.)); +#4039 = VECTOR('',#4040,1.); +#4040 = DIRECTION('',(-0.,1.,0.)); +#4041 = ORIENTED_EDGE('',*,*,#4042,.T.); +#4042 = EDGE_CURVE('',#4035,#4043,#4045,.T.); +#4043 = VERTEX_POINT('',#4044); +#4044 = CARTESIAN_POINT('',(3.7,40.2,152.)); +#4045 = LINE('',#4046,#4047); +#4046 = CARTESIAN_POINT('',(3.7,40.2,50.)); +#4047 = VECTOR('',#4048,1.); +#4048 = DIRECTION('',(0.,0.,1.)); +#4049 = ORIENTED_EDGE('',*,*,#4050,.F.); +#4050 = EDGE_CURVE('',#4027,#4043,#4051,.T.); +#4051 = LINE('',#4052,#4053); +#4052 = CARTESIAN_POINT('',(3.7,35.8,152.)); +#4053 = VECTOR('',#4054,1.); +#4054 = DIRECTION('',(-0.,1.,0.)); +#4055 = PLANE('',#4056); +#4056 = AXIS2_PLACEMENT_3D('',#4057,#4058,#4059); +#4057 = CARTESIAN_POINT('',(3.7,35.8,50.)); +#4058 = DIRECTION('',(1.,0.,-0.)); +#4059 = DIRECTION('',(0.,0.,1.)); +#4060 = ADVANCED_FACE('',(#4061),#4077,.F.); +#4061 = FACE_BOUND('',#4062,.F.); +#4062 = EDGE_LOOP('',(#4063,#4069,#4070,#4076)); +#4063 = ORIENTED_EDGE('',*,*,#4064,.F.); +#4064 = EDGE_CURVE('',#3985,#4025,#4065,.T.); +#4065 = LINE('',#4066,#4067); +#4066 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#4067 = VECTOR('',#4068,1.); +#4068 = DIRECTION('',(1.,0.,-0.)); +#4069 = ORIENTED_EDGE('',*,*,#3984,.T.); +#4070 = ORIENTED_EDGE('',*,*,#4071,.T.); +#4071 = EDGE_CURVE('',#3987,#4027,#4072,.T.); +#4072 = LINE('',#4073,#4074); +#4073 = CARTESIAN_POINT('',(2.5,35.8,152.)); +#4074 = VECTOR('',#4075,1.); +#4075 = DIRECTION('',(1.,0.,-0.)); +#4076 = ORIENTED_EDGE('',*,*,#4024,.F.); +#4077 = PLANE('',#4078); +#4078 = AXIS2_PLACEMENT_3D('',#4079,#4080,#4081); +#4079 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#4080 = DIRECTION('',(-0.,1.,0.)); +#4081 = DIRECTION('',(0.,0.,1.)); +#4082 = ADVANCED_FACE('',(#4083),#4099,.T.); +#4083 = FACE_BOUND('',#4084,.T.); +#4084 = EDGE_LOOP('',(#4085,#4091,#4092,#4098)); +#4085 = ORIENTED_EDGE('',*,*,#4086,.F.); +#4086 = EDGE_CURVE('',#3995,#4035,#4087,.T.); +#4087 = LINE('',#4088,#4089); +#4088 = CARTESIAN_POINT('',(2.5,40.2,50.)); +#4089 = VECTOR('',#4090,1.); +#4090 = DIRECTION('',(1.,0.,-0.)); +#4091 = ORIENTED_EDGE('',*,*,#4002,.T.); +#4092 = ORIENTED_EDGE('',*,*,#4093,.T.); +#4093 = EDGE_CURVE('',#4003,#4043,#4094,.T.); +#4094 = LINE('',#4095,#4096); +#4095 = CARTESIAN_POINT('',(2.5,40.2,152.)); +#4096 = VECTOR('',#4097,1.); +#4097 = DIRECTION('',(1.,0.,-0.)); +#4098 = ORIENTED_EDGE('',*,*,#4042,.F.); +#4099 = PLANE('',#4100); +#4100 = AXIS2_PLACEMENT_3D('',#4101,#4102,#4103); +#4101 = CARTESIAN_POINT('',(2.5,40.2,50.)); +#4102 = DIRECTION('',(-0.,1.,0.)); +#4103 = DIRECTION('',(0.,0.,1.)); +#4104 = ADVANCED_FACE('',(#4105),#4111,.F.); +#4105 = FACE_BOUND('',#4106,.F.); +#4106 = EDGE_LOOP('',(#4107,#4108,#4109,#4110)); +#4107 = ORIENTED_EDGE('',*,*,#3994,.F.); +#4108 = ORIENTED_EDGE('',*,*,#4064,.T.); +#4109 = ORIENTED_EDGE('',*,*,#4034,.T.); +#4110 = ORIENTED_EDGE('',*,*,#4086,.F.); +#4111 = PLANE('',#4112); +#4112 = AXIS2_PLACEMENT_3D('',#4113,#4114,#4115); +#4113 = CARTESIAN_POINT('',(2.5,35.8,50.)); +#4114 = DIRECTION('',(0.,0.,1.)); +#4115 = DIRECTION('',(1.,0.,-0.)); +#4116 = ADVANCED_FACE('',(#4117),#4123,.T.); +#4117 = FACE_BOUND('',#4118,.T.); +#4118 = EDGE_LOOP('',(#4119,#4120,#4121,#4122)); +#4119 = ORIENTED_EDGE('',*,*,#4010,.F.); +#4120 = ORIENTED_EDGE('',*,*,#4071,.T.); +#4121 = ORIENTED_EDGE('',*,*,#4050,.T.); +#4122 = ORIENTED_EDGE('',*,*,#4093,.F.); +#4123 = PLANE('',#4124); +#4124 = AXIS2_PLACEMENT_3D('',#4125,#4126,#4127); +#4125 = CARTESIAN_POINT('',(2.5,35.8,152.)); +#4126 = DIRECTION('',(0.,0.,1.)); +#4127 = DIRECTION('',(1.,0.,-0.)); +#4128 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4132)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4129,#4130,#4131)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#3974 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#3975 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#3976 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#3977 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3974, +#4129 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4130 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4131 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4132 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4129, 'distance_accuracy_value','confusion accuracy'); -#3978 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3979,#3981); -#3979 = ( REPRESENTATION_RELATIONSHIP('','',#3919,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3980) +#4133 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4134,#4136); +#4134 = ( REPRESENTATION_RELATIONSHIP('','',#3977,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4135) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#3980 = ITEM_DEFINED_TRANSFORMATION('','',#11,#147); -#3981 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #3982); -#3982 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('34', - 'ConnectorBank_Left_Hole_R07_C02','',#5,#3914,$); -#3983 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3916)); -#3984 = SHAPE_DEFINITION_REPRESENTATION(#3985,#3991); -#3985 = PRODUCT_DEFINITION_SHAPE('','',#3986); -#3986 = PRODUCT_DEFINITION('design','',#3987,#3990); -#3987 = PRODUCT_DEFINITION_FORMATION('','',#3988); -#3988 = PRODUCT('ConnectorBank_Left_Hole_R08_C01', - 'ConnectorBank_Left_Hole_R08_C01','',(#3989)); -#3989 = PRODUCT_CONTEXT('',#2,'mechanical'); -#3990 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#3991 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3992),#4045); -#3992 = MANIFOLD_SOLID_BREP('',#3993); -#3993 = CLOSED_SHELL('',(#3994,#4027,#4036)); -#3994 = ADVANCED_FACE('',(#3995),#4022,.T.); -#3995 = FACE_BOUND('',#3996,.T.); -#3996 = EDGE_LOOP('',(#3997,#4006,#4014,#4021)); -#3997 = ORIENTED_EDGE('',*,*,#3998,.F.); -#3998 = EDGE_CURVE('',#3999,#3999,#4001,.T.); -#3999 = VERTEX_POINT('',#4000); -#4000 = CARTESIAN_POINT('',(41.,-36.85,123.)); -#4001 = CIRCLE('',#4002,1.); -#4002 = AXIS2_PLACEMENT_3D('',#4003,#4004,#4005); -#4003 = CARTESIAN_POINT('',(41.,-36.85,124.)); -#4004 = DIRECTION('',(0.,-1.,0.)); -#4005 = DIRECTION('',(0.,-0.,-1.)); -#4006 = ORIENTED_EDGE('',*,*,#4007,.F.); -#4007 = EDGE_CURVE('',#4008,#3999,#4010,.T.); -#4008 = VERTEX_POINT('',#4009); -#4009 = CARTESIAN_POINT('',(41.,-36.15,123.)); -#4010 = LINE('',#4011,#4012); -#4011 = CARTESIAN_POINT('',(41.,-36.15,123.)); -#4012 = VECTOR('',#4013,1.); -#4013 = DIRECTION('',(0.,-1.,0.)); -#4014 = ORIENTED_EDGE('',*,*,#4015,.T.); -#4015 = EDGE_CURVE('',#4008,#4008,#4016,.T.); -#4016 = CIRCLE('',#4017,1.); -#4017 = AXIS2_PLACEMENT_3D('',#4018,#4019,#4020); -#4018 = CARTESIAN_POINT('',(41.,-36.15,124.)); -#4019 = DIRECTION('',(0.,-1.,0.)); -#4020 = DIRECTION('',(0.,-0.,-1.)); -#4021 = ORIENTED_EDGE('',*,*,#4007,.T.); -#4022 = CYLINDRICAL_SURFACE('',#4023,1.); -#4023 = AXIS2_PLACEMENT_3D('',#4024,#4025,#4026); -#4024 = CARTESIAN_POINT('',(41.,-36.15,124.)); -#4025 = DIRECTION('',(0.,-1.,0.)); -#4026 = DIRECTION('',(0.,-0.,-1.)); -#4027 = ADVANCED_FACE('',(#4028),#4031,.T.); -#4028 = FACE_BOUND('',#4029,.T.); -#4029 = EDGE_LOOP('',(#4030)); -#4030 = ORIENTED_EDGE('',*,*,#3998,.T.); -#4031 = PLANE('',#4032); -#4032 = AXIS2_PLACEMENT_3D('',#4033,#4034,#4035); -#4033 = CARTESIAN_POINT('',(41.,-36.85,124.)); -#4034 = DIRECTION('',(0.,-1.,0.)); -#4035 = DIRECTION('',(0.,-0.,-1.)); -#4036 = ADVANCED_FACE('',(#4037),#4040,.F.); -#4037 = FACE_BOUND('',#4038,.T.); -#4038 = EDGE_LOOP('',(#4039)); -#4039 = ORIENTED_EDGE('',*,*,#4015,.F.); -#4040 = PLANE('',#4041); -#4041 = AXIS2_PLACEMENT_3D('',#4042,#4043,#4044); -#4042 = CARTESIAN_POINT('',(41.,-36.15,124.)); -#4043 = DIRECTION('',(0.,-1.,0.)); -#4044 = DIRECTION('',(0.,-0.,-1.)); -#4045 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4049)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4046,#4047,#4048)) REPRESENTATION_CONTEXT +#4135 = ITEM_DEFINED_TRANSFORMATION('','',#11,#147); +#4136 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4137); +#4137 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('34', + 'ConnectorBank_Right_SideRailRight','',#5,#3972,$); +#4138 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3974)); +#4139 = SHAPE_DEFINITION_REPRESENTATION(#4140,#4146); +#4140 = PRODUCT_DEFINITION_SHAPE('','',#4141); +#4141 = PRODUCT_DEFINITION('design','',#4142,#4145); +#4142 = PRODUCT_DEFINITION_FORMATION('','',#4143); +#4143 = PRODUCT('ConnectorBank_Right_Hole_R01_C01', + 'ConnectorBank_Right_Hole_R01_C01','',(#4144)); +#4144 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4145 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4146 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4147),#4200); +#4147 = MANIFOLD_SOLID_BREP('',#4148); +#4148 = CLOSED_SHELL('',(#4149,#4182,#4191)); +#4149 = ADVANCED_FACE('',(#4150),#4177,.T.); +#4150 = FACE_BOUND('',#4151,.T.); +#4151 = EDGE_LOOP('',(#4152,#4161,#4169,#4176)); +#4152 = ORIENTED_EDGE('',*,*,#4153,.F.); +#4153 = EDGE_CURVE('',#4154,#4154,#4156,.T.); +#4154 = VERTEX_POINT('',#4155); +#4155 = CARTESIAN_POINT('',(-12.5,39.45,56.846153846154)); +#4156 = CIRCLE('',#4157,1.); +#4157 = AXIS2_PLACEMENT_3D('',#4158,#4159,#4160); +#4158 = CARTESIAN_POINT('',(-12.5,39.45,57.846153846154)); +#4159 = DIRECTION('',(0.,-1.,0.)); +#4160 = DIRECTION('',(0.,-0.,-1.)); +#4161 = ORIENTED_EDGE('',*,*,#4162,.F.); +#4162 = EDGE_CURVE('',#4163,#4154,#4165,.T.); +#4163 = VERTEX_POINT('',#4164); +#4164 = CARTESIAN_POINT('',(-12.5,40.15,56.846153846154)); +#4165 = LINE('',#4166,#4167); +#4166 = CARTESIAN_POINT('',(-12.5,40.15,56.846153846154)); +#4167 = VECTOR('',#4168,1.); +#4168 = DIRECTION('',(0.,-1.,0.)); +#4169 = ORIENTED_EDGE('',*,*,#4170,.T.); +#4170 = EDGE_CURVE('',#4163,#4163,#4171,.T.); +#4171 = CIRCLE('',#4172,1.); +#4172 = AXIS2_PLACEMENT_3D('',#4173,#4174,#4175); +#4173 = CARTESIAN_POINT('',(-12.5,40.15,57.846153846154)); +#4174 = DIRECTION('',(0.,-1.,0.)); +#4175 = DIRECTION('',(0.,-0.,-1.)); +#4176 = ORIENTED_EDGE('',*,*,#4162,.T.); +#4177 = CYLINDRICAL_SURFACE('',#4178,1.); +#4178 = AXIS2_PLACEMENT_3D('',#4179,#4180,#4181); +#4179 = CARTESIAN_POINT('',(-12.5,40.15,57.846153846154)); +#4180 = DIRECTION('',(0.,-1.,0.)); +#4181 = DIRECTION('',(0.,-0.,-1.)); +#4182 = ADVANCED_FACE('',(#4183),#4186,.T.); +#4183 = FACE_BOUND('',#4184,.T.); +#4184 = EDGE_LOOP('',(#4185)); +#4185 = ORIENTED_EDGE('',*,*,#4153,.T.); +#4186 = PLANE('',#4187); +#4187 = AXIS2_PLACEMENT_3D('',#4188,#4189,#4190); +#4188 = CARTESIAN_POINT('',(-12.5,39.45,57.846153846154)); +#4189 = DIRECTION('',(0.,-1.,0.)); +#4190 = DIRECTION('',(0.,-0.,-1.)); +#4191 = ADVANCED_FACE('',(#4192),#4195,.F.); +#4192 = FACE_BOUND('',#4193,.T.); +#4193 = EDGE_LOOP('',(#4194)); +#4194 = ORIENTED_EDGE('',*,*,#4170,.F.); +#4195 = PLANE('',#4196); +#4196 = AXIS2_PLACEMENT_3D('',#4197,#4198,#4199); +#4197 = CARTESIAN_POINT('',(-12.5,40.15,57.846153846154)); +#4198 = DIRECTION('',(0.,-1.,0.)); +#4199 = DIRECTION('',(0.,-0.,-1.)); +#4200 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4204)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4201,#4202,#4203)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4046 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4047 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4048 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4049 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4046, +#4201 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4202 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4203 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4204 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4201, 'distance_accuracy_value','confusion accuracy'); -#4050 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4051,#4053); -#4051 = ( REPRESENTATION_RELATIONSHIP('','',#3991,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4052) +#4205 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4206,#4208); +#4206 = ( REPRESENTATION_RELATIONSHIP('','',#4146,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4207) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4052 = ITEM_DEFINED_TRANSFORMATION('','',#11,#151); -#4053 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4054); -#4054 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('35', - 'ConnectorBank_Left_Hole_R08_C01','',#5,#3986,$); -#4055 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3988)); -#4056 = SHAPE_DEFINITION_REPRESENTATION(#4057,#4063); -#4057 = PRODUCT_DEFINITION_SHAPE('','',#4058); -#4058 = PRODUCT_DEFINITION('design','',#4059,#4062); -#4059 = PRODUCT_DEFINITION_FORMATION('','',#4060); -#4060 = PRODUCT('ConnectorBank_Left_Screw_R08', - 'ConnectorBank_Left_Screw_R08','',(#4061)); -#4061 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4062 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4063 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4064),#4117); -#4064 = MANIFOLD_SOLID_BREP('',#4065); -#4065 = CLOSED_SHELL('',(#4066,#4099,#4108)); -#4066 = ADVANCED_FACE('',(#4067),#4094,.T.); -#4067 = FACE_BOUND('',#4068,.T.); -#4068 = EDGE_LOOP('',(#4069,#4078,#4086,#4093)); -#4069 = ORIENTED_EDGE('',*,*,#4070,.F.); -#4070 = EDGE_CURVE('',#4071,#4071,#4073,.T.); -#4071 = VERTEX_POINT('',#4072); -#4072 = CARTESIAN_POINT('',(55.6,-36.95,123.45)); -#4073 = CIRCLE('',#4074,0.55); -#4074 = AXIS2_PLACEMENT_3D('',#4075,#4076,#4077); -#4075 = CARTESIAN_POINT('',(55.6,-36.95,124.)); -#4076 = DIRECTION('',(0.,-1.,0.)); -#4077 = DIRECTION('',(0.,-0.,-1.)); -#4078 = ORIENTED_EDGE('',*,*,#4079,.F.); -#4079 = EDGE_CURVE('',#4080,#4071,#4082,.T.); -#4080 = VERTEX_POINT('',#4081); -#4081 = CARTESIAN_POINT('',(55.6,-36.15,123.45)); -#4082 = LINE('',#4083,#4084); -#4083 = CARTESIAN_POINT('',(55.6,-36.15,123.45)); -#4084 = VECTOR('',#4085,1.); -#4085 = DIRECTION('',(0.,-1.,0.)); -#4086 = ORIENTED_EDGE('',*,*,#4087,.T.); -#4087 = EDGE_CURVE('',#4080,#4080,#4088,.T.); -#4088 = CIRCLE('',#4089,0.55); -#4089 = AXIS2_PLACEMENT_3D('',#4090,#4091,#4092); -#4090 = CARTESIAN_POINT('',(55.6,-36.15,124.)); -#4091 = DIRECTION('',(0.,-1.,0.)); -#4092 = DIRECTION('',(0.,-0.,-1.)); -#4093 = ORIENTED_EDGE('',*,*,#4079,.T.); -#4094 = CYLINDRICAL_SURFACE('',#4095,0.55); -#4095 = AXIS2_PLACEMENT_3D('',#4096,#4097,#4098); -#4096 = CARTESIAN_POINT('',(55.6,-36.15,124.)); -#4097 = DIRECTION('',(0.,-1.,0.)); -#4098 = DIRECTION('',(0.,-0.,-1.)); -#4099 = ADVANCED_FACE('',(#4100),#4103,.T.); -#4100 = FACE_BOUND('',#4101,.T.); -#4101 = EDGE_LOOP('',(#4102)); -#4102 = ORIENTED_EDGE('',*,*,#4070,.T.); -#4103 = PLANE('',#4104); -#4104 = AXIS2_PLACEMENT_3D('',#4105,#4106,#4107); -#4105 = CARTESIAN_POINT('',(55.6,-36.95,124.)); -#4106 = DIRECTION('',(0.,-1.,0.)); -#4107 = DIRECTION('',(0.,-0.,-1.)); -#4108 = ADVANCED_FACE('',(#4109),#4112,.F.); -#4109 = FACE_BOUND('',#4110,.T.); -#4110 = EDGE_LOOP('',(#4111)); -#4111 = ORIENTED_EDGE('',*,*,#4087,.F.); -#4112 = PLANE('',#4113); -#4113 = AXIS2_PLACEMENT_3D('',#4114,#4115,#4116); -#4114 = CARTESIAN_POINT('',(55.6,-36.15,124.)); -#4115 = DIRECTION('',(0.,-1.,0.)); -#4116 = DIRECTION('',(0.,-0.,-1.)); -#4117 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4121)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4118,#4119,#4120)) REPRESENTATION_CONTEXT +#4207 = ITEM_DEFINED_TRANSFORMATION('','',#11,#151); +#4208 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4209); +#4209 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('35', + 'ConnectorBank_Right_Hole_R01_C01','',#5,#4141,$); +#4210 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4143)); +#4211 = SHAPE_DEFINITION_REPRESENTATION(#4212,#4218); +#4212 = PRODUCT_DEFINITION_SHAPE('','',#4213); +#4213 = PRODUCT_DEFINITION('design','',#4214,#4217); +#4214 = PRODUCT_DEFINITION_FORMATION('','',#4215); +#4215 = PRODUCT('ConnectorBank_Right_Hole_R01_C02', + 'ConnectorBank_Right_Hole_R01_C02','',(#4216)); +#4216 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4217 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4218 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4219),#4272); +#4219 = MANIFOLD_SOLID_BREP('',#4220); +#4220 = CLOSED_SHELL('',(#4221,#4254,#4263)); +#4221 = ADVANCED_FACE('',(#4222),#4249,.T.); +#4222 = FACE_BOUND('',#4223,.T.); +#4223 = EDGE_LOOP('',(#4224,#4233,#4241,#4248)); +#4224 = ORIENTED_EDGE('',*,*,#4225,.F.); +#4225 = EDGE_CURVE('',#4226,#4226,#4228,.T.); +#4226 = VERTEX_POINT('',#4227); +#4227 = CARTESIAN_POINT('',(-7.5,39.45,56.846153846154)); +#4228 = CIRCLE('',#4229,1.); +#4229 = AXIS2_PLACEMENT_3D('',#4230,#4231,#4232); +#4230 = CARTESIAN_POINT('',(-7.5,39.45,57.846153846154)); +#4231 = DIRECTION('',(0.,-1.,0.)); +#4232 = DIRECTION('',(0.,-0.,-1.)); +#4233 = ORIENTED_EDGE('',*,*,#4234,.F.); +#4234 = EDGE_CURVE('',#4235,#4226,#4237,.T.); +#4235 = VERTEX_POINT('',#4236); +#4236 = CARTESIAN_POINT('',(-7.5,40.15,56.846153846154)); +#4237 = LINE('',#4238,#4239); +#4238 = CARTESIAN_POINT('',(-7.5,40.15,56.846153846154)); +#4239 = VECTOR('',#4240,1.); +#4240 = DIRECTION('',(0.,-1.,0.)); +#4241 = ORIENTED_EDGE('',*,*,#4242,.T.); +#4242 = EDGE_CURVE('',#4235,#4235,#4243,.T.); +#4243 = CIRCLE('',#4244,1.); +#4244 = AXIS2_PLACEMENT_3D('',#4245,#4246,#4247); +#4245 = CARTESIAN_POINT('',(-7.5,40.15,57.846153846154)); +#4246 = DIRECTION('',(0.,-1.,0.)); +#4247 = DIRECTION('',(0.,-0.,-1.)); +#4248 = ORIENTED_EDGE('',*,*,#4234,.T.); +#4249 = CYLINDRICAL_SURFACE('',#4250,1.); +#4250 = AXIS2_PLACEMENT_3D('',#4251,#4252,#4253); +#4251 = CARTESIAN_POINT('',(-7.5,40.15,57.846153846154)); +#4252 = DIRECTION('',(0.,-1.,0.)); +#4253 = DIRECTION('',(0.,-0.,-1.)); +#4254 = ADVANCED_FACE('',(#4255),#4258,.T.); +#4255 = FACE_BOUND('',#4256,.T.); +#4256 = EDGE_LOOP('',(#4257)); +#4257 = ORIENTED_EDGE('',*,*,#4225,.T.); +#4258 = PLANE('',#4259); +#4259 = AXIS2_PLACEMENT_3D('',#4260,#4261,#4262); +#4260 = CARTESIAN_POINT('',(-7.5,39.45,57.846153846154)); +#4261 = DIRECTION('',(0.,-1.,0.)); +#4262 = DIRECTION('',(0.,-0.,-1.)); +#4263 = ADVANCED_FACE('',(#4264),#4267,.F.); +#4264 = FACE_BOUND('',#4265,.T.); +#4265 = EDGE_LOOP('',(#4266)); +#4266 = ORIENTED_EDGE('',*,*,#4242,.F.); +#4267 = PLANE('',#4268); +#4268 = AXIS2_PLACEMENT_3D('',#4269,#4270,#4271); +#4269 = CARTESIAN_POINT('',(-7.5,40.15,57.846153846154)); +#4270 = DIRECTION('',(0.,-1.,0.)); +#4271 = DIRECTION('',(0.,-0.,-1.)); +#4272 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4276)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4273,#4274,#4275)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4118 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4119 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4120 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4121 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4118, +#4273 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4274 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4275 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4276 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4273, 'distance_accuracy_value','confusion accuracy'); -#4122 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4123,#4125); -#4123 = ( REPRESENTATION_RELATIONSHIP('','',#4063,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4124) +#4277 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4278,#4280); +#4278 = ( REPRESENTATION_RELATIONSHIP('','',#4218,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4279) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4124 = ITEM_DEFINED_TRANSFORMATION('','',#11,#155); -#4125 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4126); -#4126 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('36', - 'ConnectorBank_Left_Screw_R08','',#5,#4058,$); -#4127 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4060)); -#4128 = SHAPE_DEFINITION_REPRESENTATION(#4129,#4135); -#4129 = PRODUCT_DEFINITION_SHAPE('','',#4130); -#4130 = PRODUCT_DEFINITION('design','',#4131,#4134); -#4131 = PRODUCT_DEFINITION_FORMATION('','',#4132); -#4132 = PRODUCT('ConnectorBank_Left_Hole_R08_C02', - 'ConnectorBank_Left_Hole_R08_C02','',(#4133)); -#4133 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4134 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4135 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4136),#4189); -#4136 = MANIFOLD_SOLID_BREP('',#4137); -#4137 = CLOSED_SHELL('',(#4138,#4171,#4180)); -#4138 = ADVANCED_FACE('',(#4139),#4166,.T.); -#4139 = FACE_BOUND('',#4140,.T.); -#4140 = EDGE_LOOP('',(#4141,#4150,#4158,#4165)); -#4141 = ORIENTED_EDGE('',*,*,#4142,.F.); -#4142 = EDGE_CURVE('',#4143,#4143,#4145,.T.); -#4143 = VERTEX_POINT('',#4144); -#4144 = CARTESIAN_POINT('',(47.,-36.85,123.)); -#4145 = CIRCLE('',#4146,1.); -#4146 = AXIS2_PLACEMENT_3D('',#4147,#4148,#4149); -#4147 = CARTESIAN_POINT('',(47.,-36.85,124.)); -#4148 = DIRECTION('',(0.,-1.,0.)); -#4149 = DIRECTION('',(0.,-0.,-1.)); -#4150 = ORIENTED_EDGE('',*,*,#4151,.F.); -#4151 = EDGE_CURVE('',#4152,#4143,#4154,.T.); -#4152 = VERTEX_POINT('',#4153); -#4153 = CARTESIAN_POINT('',(47.,-36.15,123.)); -#4154 = LINE('',#4155,#4156); -#4155 = CARTESIAN_POINT('',(47.,-36.15,123.)); -#4156 = VECTOR('',#4157,1.); -#4157 = DIRECTION('',(0.,-1.,0.)); -#4158 = ORIENTED_EDGE('',*,*,#4159,.T.); -#4159 = EDGE_CURVE('',#4152,#4152,#4160,.T.); -#4160 = CIRCLE('',#4161,1.); -#4161 = AXIS2_PLACEMENT_3D('',#4162,#4163,#4164); -#4162 = CARTESIAN_POINT('',(47.,-36.15,124.)); -#4163 = DIRECTION('',(0.,-1.,0.)); -#4164 = DIRECTION('',(0.,-0.,-1.)); -#4165 = ORIENTED_EDGE('',*,*,#4151,.T.); -#4166 = CYLINDRICAL_SURFACE('',#4167,1.); -#4167 = AXIS2_PLACEMENT_3D('',#4168,#4169,#4170); -#4168 = CARTESIAN_POINT('',(47.,-36.15,124.)); -#4169 = DIRECTION('',(0.,-1.,0.)); -#4170 = DIRECTION('',(0.,-0.,-1.)); -#4171 = ADVANCED_FACE('',(#4172),#4175,.T.); -#4172 = FACE_BOUND('',#4173,.T.); -#4173 = EDGE_LOOP('',(#4174)); -#4174 = ORIENTED_EDGE('',*,*,#4142,.T.); -#4175 = PLANE('',#4176); -#4176 = AXIS2_PLACEMENT_3D('',#4177,#4178,#4179); -#4177 = CARTESIAN_POINT('',(47.,-36.85,124.)); -#4178 = DIRECTION('',(0.,-1.,0.)); -#4179 = DIRECTION('',(0.,-0.,-1.)); -#4180 = ADVANCED_FACE('',(#4181),#4184,.F.); -#4181 = FACE_BOUND('',#4182,.T.); -#4182 = EDGE_LOOP('',(#4183)); -#4183 = ORIENTED_EDGE('',*,*,#4159,.F.); -#4184 = PLANE('',#4185); -#4185 = AXIS2_PLACEMENT_3D('',#4186,#4187,#4188); -#4186 = CARTESIAN_POINT('',(47.,-36.15,124.)); -#4187 = DIRECTION('',(0.,-1.,0.)); -#4188 = DIRECTION('',(0.,-0.,-1.)); -#4189 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4193)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4190,#4191,#4192)) REPRESENTATION_CONTEXT +#4279 = ITEM_DEFINED_TRANSFORMATION('','',#11,#155); +#4280 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4281); +#4281 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('36', + 'ConnectorBank_Right_Hole_R01_C02','',#5,#4213,$); +#4282 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4215)); +#4283 = SHAPE_DEFINITION_REPRESENTATION(#4284,#4290); +#4284 = PRODUCT_DEFINITION_SHAPE('','',#4285); +#4285 = PRODUCT_DEFINITION('design','',#4286,#4289); +#4286 = PRODUCT_DEFINITION_FORMATION('','',#4287); +#4287 = PRODUCT('ConnectorBank_Right_Hole_R01_C03', + 'ConnectorBank_Right_Hole_R01_C03','',(#4288)); +#4288 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4289 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4290 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4291),#4344); +#4291 = MANIFOLD_SOLID_BREP('',#4292); +#4292 = CLOSED_SHELL('',(#4293,#4326,#4335)); +#4293 = ADVANCED_FACE('',(#4294),#4321,.T.); +#4294 = FACE_BOUND('',#4295,.T.); +#4295 = EDGE_LOOP('',(#4296,#4305,#4313,#4320)); +#4296 = ORIENTED_EDGE('',*,*,#4297,.F.); +#4297 = EDGE_CURVE('',#4298,#4298,#4300,.T.); +#4298 = VERTEX_POINT('',#4299); +#4299 = CARTESIAN_POINT('',(-2.5,39.45,56.846153846154)); +#4300 = CIRCLE('',#4301,1.); +#4301 = AXIS2_PLACEMENT_3D('',#4302,#4303,#4304); +#4302 = CARTESIAN_POINT('',(-2.5,39.45,57.846153846154)); +#4303 = DIRECTION('',(0.,-1.,0.)); +#4304 = DIRECTION('',(0.,-0.,-1.)); +#4305 = ORIENTED_EDGE('',*,*,#4306,.F.); +#4306 = EDGE_CURVE('',#4307,#4298,#4309,.T.); +#4307 = VERTEX_POINT('',#4308); +#4308 = CARTESIAN_POINT('',(-2.5,40.15,56.846153846154)); +#4309 = LINE('',#4310,#4311); +#4310 = CARTESIAN_POINT('',(-2.5,40.15,56.846153846154)); +#4311 = VECTOR('',#4312,1.); +#4312 = DIRECTION('',(0.,-1.,0.)); +#4313 = ORIENTED_EDGE('',*,*,#4314,.T.); +#4314 = EDGE_CURVE('',#4307,#4307,#4315,.T.); +#4315 = CIRCLE('',#4316,1.); +#4316 = AXIS2_PLACEMENT_3D('',#4317,#4318,#4319); +#4317 = CARTESIAN_POINT('',(-2.5,40.15,57.846153846154)); +#4318 = DIRECTION('',(0.,-1.,0.)); +#4319 = DIRECTION('',(0.,-0.,-1.)); +#4320 = ORIENTED_EDGE('',*,*,#4306,.T.); +#4321 = CYLINDRICAL_SURFACE('',#4322,1.); +#4322 = AXIS2_PLACEMENT_3D('',#4323,#4324,#4325); +#4323 = CARTESIAN_POINT('',(-2.5,40.15,57.846153846154)); +#4324 = DIRECTION('',(0.,-1.,0.)); +#4325 = DIRECTION('',(0.,-0.,-1.)); +#4326 = ADVANCED_FACE('',(#4327),#4330,.T.); +#4327 = FACE_BOUND('',#4328,.T.); +#4328 = EDGE_LOOP('',(#4329)); +#4329 = ORIENTED_EDGE('',*,*,#4297,.T.); +#4330 = PLANE('',#4331); +#4331 = AXIS2_PLACEMENT_3D('',#4332,#4333,#4334); +#4332 = CARTESIAN_POINT('',(-2.5,39.45,57.846153846154)); +#4333 = DIRECTION('',(0.,-1.,0.)); +#4334 = DIRECTION('',(0.,-0.,-1.)); +#4335 = ADVANCED_FACE('',(#4336),#4339,.F.); +#4336 = FACE_BOUND('',#4337,.T.); +#4337 = EDGE_LOOP('',(#4338)); +#4338 = ORIENTED_EDGE('',*,*,#4314,.F.); +#4339 = PLANE('',#4340); +#4340 = AXIS2_PLACEMENT_3D('',#4341,#4342,#4343); +#4341 = CARTESIAN_POINT('',(-2.5,40.15,57.846153846154)); +#4342 = DIRECTION('',(0.,-1.,0.)); +#4343 = DIRECTION('',(0.,-0.,-1.)); +#4344 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4348)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4345,#4346,#4347)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4190 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4191 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4192 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4193 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4190, +#4345 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4346 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4347 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4348 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4345, 'distance_accuracy_value','confusion accuracy'); -#4194 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4195,#4197); -#4195 = ( REPRESENTATION_RELATIONSHIP('','',#4135,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4196) +#4349 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4350,#4352); +#4350 = ( REPRESENTATION_RELATIONSHIP('','',#4290,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4351) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4196 = ITEM_DEFINED_TRANSFORMATION('','',#11,#159); -#4197 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4198); -#4198 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('37', - 'ConnectorBank_Left_Hole_R08_C02','',#5,#4130,$); -#4199 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4132)); -#4200 = SHAPE_DEFINITION_REPRESENTATION(#4201,#4207); -#4201 = PRODUCT_DEFINITION_SHAPE('','',#4202); -#4202 = PRODUCT_DEFINITION('design','',#4203,#4206); -#4203 = PRODUCT_DEFINITION_FORMATION('','',#4204); -#4204 = PRODUCT('ConnectorBank_Left_Hole_R09_C01', - 'ConnectorBank_Left_Hole_R09_C01','',(#4205)); -#4205 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4206 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4207 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4208),#4261); -#4208 = MANIFOLD_SOLID_BREP('',#4209); -#4209 = CLOSED_SHELL('',(#4210,#4243,#4252)); -#4210 = ADVANCED_FACE('',(#4211),#4238,.T.); -#4211 = FACE_BOUND('',#4212,.T.); -#4212 = EDGE_LOOP('',(#4213,#4222,#4230,#4237)); -#4213 = ORIENTED_EDGE('',*,*,#4214,.F.); -#4214 = EDGE_CURVE('',#4215,#4215,#4217,.T.); -#4215 = VERTEX_POINT('',#4216); -#4216 = CARTESIAN_POINT('',(41.,-36.85,133.)); -#4217 = CIRCLE('',#4218,1.); -#4218 = AXIS2_PLACEMENT_3D('',#4219,#4220,#4221); -#4219 = CARTESIAN_POINT('',(41.,-36.85,134.)); -#4220 = DIRECTION('',(0.,-1.,0.)); -#4221 = DIRECTION('',(0.,-0.,-1.)); -#4222 = ORIENTED_EDGE('',*,*,#4223,.F.); -#4223 = EDGE_CURVE('',#4224,#4215,#4226,.T.); -#4224 = VERTEX_POINT('',#4225); -#4225 = CARTESIAN_POINT('',(41.,-36.15,133.)); -#4226 = LINE('',#4227,#4228); -#4227 = CARTESIAN_POINT('',(41.,-36.15,133.)); -#4228 = VECTOR('',#4229,1.); -#4229 = DIRECTION('',(0.,-1.,0.)); -#4230 = ORIENTED_EDGE('',*,*,#4231,.T.); -#4231 = EDGE_CURVE('',#4224,#4224,#4232,.T.); -#4232 = CIRCLE('',#4233,1.); -#4233 = AXIS2_PLACEMENT_3D('',#4234,#4235,#4236); -#4234 = CARTESIAN_POINT('',(41.,-36.15,134.)); -#4235 = DIRECTION('',(0.,-1.,0.)); -#4236 = DIRECTION('',(0.,-0.,-1.)); -#4237 = ORIENTED_EDGE('',*,*,#4223,.T.); -#4238 = CYLINDRICAL_SURFACE('',#4239,1.); -#4239 = AXIS2_PLACEMENT_3D('',#4240,#4241,#4242); -#4240 = CARTESIAN_POINT('',(41.,-36.15,134.)); -#4241 = DIRECTION('',(0.,-1.,0.)); -#4242 = DIRECTION('',(0.,-0.,-1.)); -#4243 = ADVANCED_FACE('',(#4244),#4247,.T.); -#4244 = FACE_BOUND('',#4245,.T.); -#4245 = EDGE_LOOP('',(#4246)); -#4246 = ORIENTED_EDGE('',*,*,#4214,.T.); -#4247 = PLANE('',#4248); -#4248 = AXIS2_PLACEMENT_3D('',#4249,#4250,#4251); -#4249 = CARTESIAN_POINT('',(41.,-36.85,134.)); -#4250 = DIRECTION('',(0.,-1.,0.)); -#4251 = DIRECTION('',(0.,-0.,-1.)); -#4252 = ADVANCED_FACE('',(#4253),#4256,.F.); -#4253 = FACE_BOUND('',#4254,.T.); -#4254 = EDGE_LOOP('',(#4255)); -#4255 = ORIENTED_EDGE('',*,*,#4231,.F.); -#4256 = PLANE('',#4257); -#4257 = AXIS2_PLACEMENT_3D('',#4258,#4259,#4260); -#4258 = CARTESIAN_POINT('',(41.,-36.15,134.)); -#4259 = DIRECTION('',(0.,-1.,0.)); -#4260 = DIRECTION('',(0.,-0.,-1.)); -#4261 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4265)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4262,#4263,#4264)) REPRESENTATION_CONTEXT +#4351 = ITEM_DEFINED_TRANSFORMATION('','',#11,#159); +#4352 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4353); +#4353 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('37', + 'ConnectorBank_Right_Hole_R01_C03','',#5,#4285,$); +#4354 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4287)); +#4355 = SHAPE_DEFINITION_REPRESENTATION(#4356,#4362); +#4356 = PRODUCT_DEFINITION_SHAPE('','',#4357); +#4357 = PRODUCT_DEFINITION('design','',#4358,#4361); +#4358 = PRODUCT_DEFINITION_FORMATION('','',#4359); +#4359 = PRODUCT('ConnectorBank_Right_Hole_R02_C01', + 'ConnectorBank_Right_Hole_R02_C01','',(#4360)); +#4360 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4361 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4362 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4363),#4416); +#4363 = MANIFOLD_SOLID_BREP('',#4364); +#4364 = CLOSED_SHELL('',(#4365,#4398,#4407)); +#4365 = ADVANCED_FACE('',(#4366),#4393,.T.); +#4366 = FACE_BOUND('',#4367,.T.); +#4367 = EDGE_LOOP('',(#4368,#4377,#4385,#4392)); +#4368 = ORIENTED_EDGE('',*,*,#4369,.F.); +#4369 = EDGE_CURVE('',#4370,#4370,#4372,.T.); +#4370 = VERTEX_POINT('',#4371); +#4371 = CARTESIAN_POINT('',(-12.5,39.45,64.692307692308)); +#4372 = CIRCLE('',#4373,1.); +#4373 = AXIS2_PLACEMENT_3D('',#4374,#4375,#4376); +#4374 = CARTESIAN_POINT('',(-12.5,39.45,65.692307692308)); +#4375 = DIRECTION('',(0.,-1.,0.)); +#4376 = DIRECTION('',(0.,-0.,-1.)); +#4377 = ORIENTED_EDGE('',*,*,#4378,.F.); +#4378 = EDGE_CURVE('',#4379,#4370,#4381,.T.); +#4379 = VERTEX_POINT('',#4380); +#4380 = CARTESIAN_POINT('',(-12.5,40.15,64.692307692308)); +#4381 = LINE('',#4382,#4383); +#4382 = CARTESIAN_POINT('',(-12.5,40.15,64.692307692308)); +#4383 = VECTOR('',#4384,1.); +#4384 = DIRECTION('',(0.,-1.,0.)); +#4385 = ORIENTED_EDGE('',*,*,#4386,.T.); +#4386 = EDGE_CURVE('',#4379,#4379,#4387,.T.); +#4387 = CIRCLE('',#4388,1.); +#4388 = AXIS2_PLACEMENT_3D('',#4389,#4390,#4391); +#4389 = CARTESIAN_POINT('',(-12.5,40.15,65.692307692308)); +#4390 = DIRECTION('',(0.,-1.,0.)); +#4391 = DIRECTION('',(0.,-0.,-1.)); +#4392 = ORIENTED_EDGE('',*,*,#4378,.T.); +#4393 = CYLINDRICAL_SURFACE('',#4394,1.); +#4394 = AXIS2_PLACEMENT_3D('',#4395,#4396,#4397); +#4395 = CARTESIAN_POINT('',(-12.5,40.15,65.692307692308)); +#4396 = DIRECTION('',(0.,-1.,0.)); +#4397 = DIRECTION('',(0.,-0.,-1.)); +#4398 = ADVANCED_FACE('',(#4399),#4402,.T.); +#4399 = FACE_BOUND('',#4400,.T.); +#4400 = EDGE_LOOP('',(#4401)); +#4401 = ORIENTED_EDGE('',*,*,#4369,.T.); +#4402 = PLANE('',#4403); +#4403 = AXIS2_PLACEMENT_3D('',#4404,#4405,#4406); +#4404 = CARTESIAN_POINT('',(-12.5,39.45,65.692307692308)); +#4405 = DIRECTION('',(0.,-1.,0.)); +#4406 = DIRECTION('',(0.,-0.,-1.)); +#4407 = ADVANCED_FACE('',(#4408),#4411,.F.); +#4408 = FACE_BOUND('',#4409,.T.); +#4409 = EDGE_LOOP('',(#4410)); +#4410 = ORIENTED_EDGE('',*,*,#4386,.F.); +#4411 = PLANE('',#4412); +#4412 = AXIS2_PLACEMENT_3D('',#4413,#4414,#4415); +#4413 = CARTESIAN_POINT('',(-12.5,40.15,65.692307692308)); +#4414 = DIRECTION('',(0.,-1.,0.)); +#4415 = DIRECTION('',(0.,-0.,-1.)); +#4416 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4420)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4417,#4418,#4419)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4262 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4263 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4264 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4265 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4262, +#4417 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4418 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4419 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4420 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4417, 'distance_accuracy_value','confusion accuracy'); -#4266 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4267,#4269); -#4267 = ( REPRESENTATION_RELATIONSHIP('','',#4207,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4268) +#4421 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4422,#4424); +#4422 = ( REPRESENTATION_RELATIONSHIP('','',#4362,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4423) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4268 = ITEM_DEFINED_TRANSFORMATION('','',#11,#163); -#4269 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4270); -#4270 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('38', - 'ConnectorBank_Left_Hole_R09_C01','',#5,#4202,$); -#4271 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4204)); -#4272 = SHAPE_DEFINITION_REPRESENTATION(#4273,#4279); -#4273 = PRODUCT_DEFINITION_SHAPE('','',#4274); -#4274 = PRODUCT_DEFINITION('design','',#4275,#4278); -#4275 = PRODUCT_DEFINITION_FORMATION('','',#4276); -#4276 = PRODUCT('ConnectorBank_Left_Screw_R09', - 'ConnectorBank_Left_Screw_R09','',(#4277)); -#4277 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4278 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4279 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4280),#4333); -#4280 = MANIFOLD_SOLID_BREP('',#4281); -#4281 = CLOSED_SHELL('',(#4282,#4315,#4324)); -#4282 = ADVANCED_FACE('',(#4283),#4310,.T.); -#4283 = FACE_BOUND('',#4284,.T.); -#4284 = EDGE_LOOP('',(#4285,#4294,#4302,#4309)); -#4285 = ORIENTED_EDGE('',*,*,#4286,.F.); -#4286 = EDGE_CURVE('',#4287,#4287,#4289,.T.); -#4287 = VERTEX_POINT('',#4288); -#4288 = CARTESIAN_POINT('',(55.6,-36.95,133.45)); -#4289 = CIRCLE('',#4290,0.55); -#4290 = AXIS2_PLACEMENT_3D('',#4291,#4292,#4293); -#4291 = CARTESIAN_POINT('',(55.6,-36.95,134.)); -#4292 = DIRECTION('',(0.,-1.,0.)); -#4293 = DIRECTION('',(0.,-0.,-1.)); -#4294 = ORIENTED_EDGE('',*,*,#4295,.F.); -#4295 = EDGE_CURVE('',#4296,#4287,#4298,.T.); -#4296 = VERTEX_POINT('',#4297); -#4297 = CARTESIAN_POINT('',(55.6,-36.15,133.45)); -#4298 = LINE('',#4299,#4300); -#4299 = CARTESIAN_POINT('',(55.6,-36.15,133.45)); -#4300 = VECTOR('',#4301,1.); -#4301 = DIRECTION('',(0.,-1.,0.)); -#4302 = ORIENTED_EDGE('',*,*,#4303,.T.); -#4303 = EDGE_CURVE('',#4296,#4296,#4304,.T.); -#4304 = CIRCLE('',#4305,0.55); -#4305 = AXIS2_PLACEMENT_3D('',#4306,#4307,#4308); -#4306 = CARTESIAN_POINT('',(55.6,-36.15,134.)); -#4307 = DIRECTION('',(0.,-1.,0.)); -#4308 = DIRECTION('',(0.,-0.,-1.)); -#4309 = ORIENTED_EDGE('',*,*,#4295,.T.); -#4310 = CYLINDRICAL_SURFACE('',#4311,0.55); -#4311 = AXIS2_PLACEMENT_3D('',#4312,#4313,#4314); -#4312 = CARTESIAN_POINT('',(55.6,-36.15,134.)); -#4313 = DIRECTION('',(0.,-1.,0.)); -#4314 = DIRECTION('',(0.,-0.,-1.)); -#4315 = ADVANCED_FACE('',(#4316),#4319,.T.); -#4316 = FACE_BOUND('',#4317,.T.); -#4317 = EDGE_LOOP('',(#4318)); -#4318 = ORIENTED_EDGE('',*,*,#4286,.T.); -#4319 = PLANE('',#4320); -#4320 = AXIS2_PLACEMENT_3D('',#4321,#4322,#4323); -#4321 = CARTESIAN_POINT('',(55.6,-36.95,134.)); -#4322 = DIRECTION('',(0.,-1.,0.)); -#4323 = DIRECTION('',(0.,-0.,-1.)); -#4324 = ADVANCED_FACE('',(#4325),#4328,.F.); -#4325 = FACE_BOUND('',#4326,.T.); -#4326 = EDGE_LOOP('',(#4327)); -#4327 = ORIENTED_EDGE('',*,*,#4303,.F.); -#4328 = PLANE('',#4329); -#4329 = AXIS2_PLACEMENT_3D('',#4330,#4331,#4332); -#4330 = CARTESIAN_POINT('',(55.6,-36.15,134.)); -#4331 = DIRECTION('',(0.,-1.,0.)); -#4332 = DIRECTION('',(0.,-0.,-1.)); -#4333 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4337)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4334,#4335,#4336)) REPRESENTATION_CONTEXT +#4423 = ITEM_DEFINED_TRANSFORMATION('','',#11,#163); +#4424 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4425); +#4425 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('38', + 'ConnectorBank_Right_Hole_R02_C01','',#5,#4357,$); +#4426 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4359)); +#4427 = SHAPE_DEFINITION_REPRESENTATION(#4428,#4434); +#4428 = PRODUCT_DEFINITION_SHAPE('','',#4429); +#4429 = PRODUCT_DEFINITION('design','',#4430,#4433); +#4430 = PRODUCT_DEFINITION_FORMATION('','',#4431); +#4431 = PRODUCT('ConnectorBank_Right_Hole_R02_C02', + 'ConnectorBank_Right_Hole_R02_C02','',(#4432)); +#4432 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4433 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4434 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4435),#4488); +#4435 = MANIFOLD_SOLID_BREP('',#4436); +#4436 = CLOSED_SHELL('',(#4437,#4470,#4479)); +#4437 = ADVANCED_FACE('',(#4438),#4465,.T.); +#4438 = FACE_BOUND('',#4439,.T.); +#4439 = EDGE_LOOP('',(#4440,#4449,#4457,#4464)); +#4440 = ORIENTED_EDGE('',*,*,#4441,.F.); +#4441 = EDGE_CURVE('',#4442,#4442,#4444,.T.); +#4442 = VERTEX_POINT('',#4443); +#4443 = CARTESIAN_POINT('',(-7.5,39.45,64.692307692308)); +#4444 = CIRCLE('',#4445,1.); +#4445 = AXIS2_PLACEMENT_3D('',#4446,#4447,#4448); +#4446 = CARTESIAN_POINT('',(-7.5,39.45,65.692307692308)); +#4447 = DIRECTION('',(0.,-1.,0.)); +#4448 = DIRECTION('',(0.,-0.,-1.)); +#4449 = ORIENTED_EDGE('',*,*,#4450,.F.); +#4450 = EDGE_CURVE('',#4451,#4442,#4453,.T.); +#4451 = VERTEX_POINT('',#4452); +#4452 = CARTESIAN_POINT('',(-7.5,40.15,64.692307692308)); +#4453 = LINE('',#4454,#4455); +#4454 = CARTESIAN_POINT('',(-7.5,40.15,64.692307692308)); +#4455 = VECTOR('',#4456,1.); +#4456 = DIRECTION('',(0.,-1.,0.)); +#4457 = ORIENTED_EDGE('',*,*,#4458,.T.); +#4458 = EDGE_CURVE('',#4451,#4451,#4459,.T.); +#4459 = CIRCLE('',#4460,1.); +#4460 = AXIS2_PLACEMENT_3D('',#4461,#4462,#4463); +#4461 = CARTESIAN_POINT('',(-7.5,40.15,65.692307692308)); +#4462 = DIRECTION('',(0.,-1.,0.)); +#4463 = DIRECTION('',(0.,-0.,-1.)); +#4464 = ORIENTED_EDGE('',*,*,#4450,.T.); +#4465 = CYLINDRICAL_SURFACE('',#4466,1.); +#4466 = AXIS2_PLACEMENT_3D('',#4467,#4468,#4469); +#4467 = CARTESIAN_POINT('',(-7.5,40.15,65.692307692308)); +#4468 = DIRECTION('',(0.,-1.,0.)); +#4469 = DIRECTION('',(0.,-0.,-1.)); +#4470 = ADVANCED_FACE('',(#4471),#4474,.T.); +#4471 = FACE_BOUND('',#4472,.T.); +#4472 = EDGE_LOOP('',(#4473)); +#4473 = ORIENTED_EDGE('',*,*,#4441,.T.); +#4474 = PLANE('',#4475); +#4475 = AXIS2_PLACEMENT_3D('',#4476,#4477,#4478); +#4476 = CARTESIAN_POINT('',(-7.5,39.45,65.692307692308)); +#4477 = DIRECTION('',(0.,-1.,0.)); +#4478 = DIRECTION('',(0.,-0.,-1.)); +#4479 = ADVANCED_FACE('',(#4480),#4483,.F.); +#4480 = FACE_BOUND('',#4481,.T.); +#4481 = EDGE_LOOP('',(#4482)); +#4482 = ORIENTED_EDGE('',*,*,#4458,.F.); +#4483 = PLANE('',#4484); +#4484 = AXIS2_PLACEMENT_3D('',#4485,#4486,#4487); +#4485 = CARTESIAN_POINT('',(-7.5,40.15,65.692307692308)); +#4486 = DIRECTION('',(0.,-1.,0.)); +#4487 = DIRECTION('',(0.,-0.,-1.)); +#4488 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4492)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4489,#4490,#4491)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4334 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4335 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4336 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4337 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4334, +#4489 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4490 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4491 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4492 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4489, 'distance_accuracy_value','confusion accuracy'); -#4338 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4339,#4341); -#4339 = ( REPRESENTATION_RELATIONSHIP('','',#4279,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4340) +#4493 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4494,#4496); +#4494 = ( REPRESENTATION_RELATIONSHIP('','',#4434,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4495) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4340 = ITEM_DEFINED_TRANSFORMATION('','',#11,#167); -#4341 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4342); -#4342 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('39', - 'ConnectorBank_Left_Screw_R09','',#5,#4274,$); -#4343 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4276)); -#4344 = SHAPE_DEFINITION_REPRESENTATION(#4345,#4351); -#4345 = PRODUCT_DEFINITION_SHAPE('','',#4346); -#4346 = PRODUCT_DEFINITION('design','',#4347,#4350); -#4347 = PRODUCT_DEFINITION_FORMATION('','',#4348); -#4348 = PRODUCT('ConnectorBank_Left_Hole_R09_C02', - 'ConnectorBank_Left_Hole_R09_C02','',(#4349)); -#4349 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4350 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4351 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4352),#4405); -#4352 = MANIFOLD_SOLID_BREP('',#4353); -#4353 = CLOSED_SHELL('',(#4354,#4387,#4396)); -#4354 = ADVANCED_FACE('',(#4355),#4382,.T.); -#4355 = FACE_BOUND('',#4356,.T.); -#4356 = EDGE_LOOP('',(#4357,#4366,#4374,#4381)); -#4357 = ORIENTED_EDGE('',*,*,#4358,.F.); -#4358 = EDGE_CURVE('',#4359,#4359,#4361,.T.); -#4359 = VERTEX_POINT('',#4360); -#4360 = CARTESIAN_POINT('',(47.,-36.85,133.)); -#4361 = CIRCLE('',#4362,1.); -#4362 = AXIS2_PLACEMENT_3D('',#4363,#4364,#4365); -#4363 = CARTESIAN_POINT('',(47.,-36.85,134.)); -#4364 = DIRECTION('',(0.,-1.,0.)); -#4365 = DIRECTION('',(0.,-0.,-1.)); -#4366 = ORIENTED_EDGE('',*,*,#4367,.F.); -#4367 = EDGE_CURVE('',#4368,#4359,#4370,.T.); -#4368 = VERTEX_POINT('',#4369); -#4369 = CARTESIAN_POINT('',(47.,-36.15,133.)); -#4370 = LINE('',#4371,#4372); -#4371 = CARTESIAN_POINT('',(47.,-36.15,133.)); -#4372 = VECTOR('',#4373,1.); -#4373 = DIRECTION('',(0.,-1.,0.)); -#4374 = ORIENTED_EDGE('',*,*,#4375,.T.); -#4375 = EDGE_CURVE('',#4368,#4368,#4376,.T.); -#4376 = CIRCLE('',#4377,1.); -#4377 = AXIS2_PLACEMENT_3D('',#4378,#4379,#4380); -#4378 = CARTESIAN_POINT('',(47.,-36.15,134.)); -#4379 = DIRECTION('',(0.,-1.,0.)); -#4380 = DIRECTION('',(0.,-0.,-1.)); -#4381 = ORIENTED_EDGE('',*,*,#4367,.T.); -#4382 = CYLINDRICAL_SURFACE('',#4383,1.); -#4383 = AXIS2_PLACEMENT_3D('',#4384,#4385,#4386); -#4384 = CARTESIAN_POINT('',(47.,-36.15,134.)); -#4385 = DIRECTION('',(0.,-1.,0.)); -#4386 = DIRECTION('',(0.,-0.,-1.)); -#4387 = ADVANCED_FACE('',(#4388),#4391,.T.); -#4388 = FACE_BOUND('',#4389,.T.); -#4389 = EDGE_LOOP('',(#4390)); -#4390 = ORIENTED_EDGE('',*,*,#4358,.T.); -#4391 = PLANE('',#4392); -#4392 = AXIS2_PLACEMENT_3D('',#4393,#4394,#4395); -#4393 = CARTESIAN_POINT('',(47.,-36.85,134.)); -#4394 = DIRECTION('',(0.,-1.,0.)); -#4395 = DIRECTION('',(0.,-0.,-1.)); -#4396 = ADVANCED_FACE('',(#4397),#4400,.F.); -#4397 = FACE_BOUND('',#4398,.T.); -#4398 = EDGE_LOOP('',(#4399)); -#4399 = ORIENTED_EDGE('',*,*,#4375,.F.); -#4400 = PLANE('',#4401); -#4401 = AXIS2_PLACEMENT_3D('',#4402,#4403,#4404); -#4402 = CARTESIAN_POINT('',(47.,-36.15,134.)); -#4403 = DIRECTION('',(0.,-1.,0.)); -#4404 = DIRECTION('',(0.,-0.,-1.)); -#4405 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4409)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4406,#4407,#4408)) REPRESENTATION_CONTEXT +#4495 = ITEM_DEFINED_TRANSFORMATION('','',#11,#167); +#4496 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4497); +#4497 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('39', + 'ConnectorBank_Right_Hole_R02_C02','',#5,#4429,$); +#4498 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4431)); +#4499 = SHAPE_DEFINITION_REPRESENTATION(#4500,#4506); +#4500 = PRODUCT_DEFINITION_SHAPE('','',#4501); +#4501 = PRODUCT_DEFINITION('design','',#4502,#4505); +#4502 = PRODUCT_DEFINITION_FORMATION('','',#4503); +#4503 = PRODUCT('ConnectorBank_Right_Hole_R02_C03', + 'ConnectorBank_Right_Hole_R02_C03','',(#4504)); +#4504 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4505 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4506 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4507),#4560); +#4507 = MANIFOLD_SOLID_BREP('',#4508); +#4508 = CLOSED_SHELL('',(#4509,#4542,#4551)); +#4509 = ADVANCED_FACE('',(#4510),#4537,.T.); +#4510 = FACE_BOUND('',#4511,.T.); +#4511 = EDGE_LOOP('',(#4512,#4521,#4529,#4536)); +#4512 = ORIENTED_EDGE('',*,*,#4513,.F.); +#4513 = EDGE_CURVE('',#4514,#4514,#4516,.T.); +#4514 = VERTEX_POINT('',#4515); +#4515 = CARTESIAN_POINT('',(-2.5,39.45,64.692307692308)); +#4516 = CIRCLE('',#4517,1.); +#4517 = AXIS2_PLACEMENT_3D('',#4518,#4519,#4520); +#4518 = CARTESIAN_POINT('',(-2.5,39.45,65.692307692308)); +#4519 = DIRECTION('',(0.,-1.,0.)); +#4520 = DIRECTION('',(0.,-0.,-1.)); +#4521 = ORIENTED_EDGE('',*,*,#4522,.F.); +#4522 = EDGE_CURVE('',#4523,#4514,#4525,.T.); +#4523 = VERTEX_POINT('',#4524); +#4524 = CARTESIAN_POINT('',(-2.5,40.15,64.692307692308)); +#4525 = LINE('',#4526,#4527); +#4526 = CARTESIAN_POINT('',(-2.5,40.15,64.692307692308)); +#4527 = VECTOR('',#4528,1.); +#4528 = DIRECTION('',(0.,-1.,0.)); +#4529 = ORIENTED_EDGE('',*,*,#4530,.T.); +#4530 = EDGE_CURVE('',#4523,#4523,#4531,.T.); +#4531 = CIRCLE('',#4532,1.); +#4532 = AXIS2_PLACEMENT_3D('',#4533,#4534,#4535); +#4533 = CARTESIAN_POINT('',(-2.5,40.15,65.692307692308)); +#4534 = DIRECTION('',(0.,-1.,0.)); +#4535 = DIRECTION('',(0.,-0.,-1.)); +#4536 = ORIENTED_EDGE('',*,*,#4522,.T.); +#4537 = CYLINDRICAL_SURFACE('',#4538,1.); +#4538 = AXIS2_PLACEMENT_3D('',#4539,#4540,#4541); +#4539 = CARTESIAN_POINT('',(-2.5,40.15,65.692307692308)); +#4540 = DIRECTION('',(0.,-1.,0.)); +#4541 = DIRECTION('',(0.,-0.,-1.)); +#4542 = ADVANCED_FACE('',(#4543),#4546,.T.); +#4543 = FACE_BOUND('',#4544,.T.); +#4544 = EDGE_LOOP('',(#4545)); +#4545 = ORIENTED_EDGE('',*,*,#4513,.T.); +#4546 = PLANE('',#4547); +#4547 = AXIS2_PLACEMENT_3D('',#4548,#4549,#4550); +#4548 = CARTESIAN_POINT('',(-2.5,39.45,65.692307692308)); +#4549 = DIRECTION('',(0.,-1.,0.)); +#4550 = DIRECTION('',(0.,-0.,-1.)); +#4551 = ADVANCED_FACE('',(#4552),#4555,.F.); +#4552 = FACE_BOUND('',#4553,.T.); +#4553 = EDGE_LOOP('',(#4554)); +#4554 = ORIENTED_EDGE('',*,*,#4530,.F.); +#4555 = PLANE('',#4556); +#4556 = AXIS2_PLACEMENT_3D('',#4557,#4558,#4559); +#4557 = CARTESIAN_POINT('',(-2.5,40.15,65.692307692308)); +#4558 = DIRECTION('',(0.,-1.,0.)); +#4559 = DIRECTION('',(0.,-0.,-1.)); +#4560 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4564)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4561,#4562,#4563)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4406 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4407 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4408 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4409 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4406, +#4561 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4562 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4563 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4564 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4561, 'distance_accuracy_value','confusion accuracy'); -#4410 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4411,#4413); -#4411 = ( REPRESENTATION_RELATIONSHIP('','',#4351,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4412) +#4565 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4566,#4568); +#4566 = ( REPRESENTATION_RELATIONSHIP('','',#4506,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4567) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4412 = ITEM_DEFINED_TRANSFORMATION('','',#11,#171); -#4413 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4414); -#4414 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('40', - 'ConnectorBank_Left_Hole_R09_C02','',#5,#4346,$); -#4415 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4348)); -#4416 = SHAPE_DEFINITION_REPRESENTATION(#4417,#4423); -#4417 = PRODUCT_DEFINITION_SHAPE('','',#4418); -#4418 = PRODUCT_DEFINITION('design','',#4419,#4422); -#4419 = PRODUCT_DEFINITION_FORMATION('','',#4420); -#4420 = PRODUCT('ConnectorBank_Left_Hole_R10_C01', - 'ConnectorBank_Left_Hole_R10_C01','',(#4421)); -#4421 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4422 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4423 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4424),#4477); -#4424 = MANIFOLD_SOLID_BREP('',#4425); -#4425 = CLOSED_SHELL('',(#4426,#4459,#4468)); -#4426 = ADVANCED_FACE('',(#4427),#4454,.T.); -#4427 = FACE_BOUND('',#4428,.T.); -#4428 = EDGE_LOOP('',(#4429,#4438,#4446,#4453)); -#4429 = ORIENTED_EDGE('',*,*,#4430,.F.); -#4430 = EDGE_CURVE('',#4431,#4431,#4433,.T.); -#4431 = VERTEX_POINT('',#4432); -#4432 = CARTESIAN_POINT('',(41.,-36.85,143.)); -#4433 = CIRCLE('',#4434,1.); -#4434 = AXIS2_PLACEMENT_3D('',#4435,#4436,#4437); -#4435 = CARTESIAN_POINT('',(41.,-36.85,144.)); -#4436 = DIRECTION('',(0.,-1.,0.)); -#4437 = DIRECTION('',(0.,-0.,-1.)); -#4438 = ORIENTED_EDGE('',*,*,#4439,.F.); -#4439 = EDGE_CURVE('',#4440,#4431,#4442,.T.); -#4440 = VERTEX_POINT('',#4441); -#4441 = CARTESIAN_POINT('',(41.,-36.15,143.)); -#4442 = LINE('',#4443,#4444); -#4443 = CARTESIAN_POINT('',(41.,-36.15,143.)); -#4444 = VECTOR('',#4445,1.); -#4445 = DIRECTION('',(0.,-1.,0.)); -#4446 = ORIENTED_EDGE('',*,*,#4447,.T.); -#4447 = EDGE_CURVE('',#4440,#4440,#4448,.T.); -#4448 = CIRCLE('',#4449,1.); -#4449 = AXIS2_PLACEMENT_3D('',#4450,#4451,#4452); -#4450 = CARTESIAN_POINT('',(41.,-36.15,144.)); -#4451 = DIRECTION('',(0.,-1.,0.)); -#4452 = DIRECTION('',(0.,-0.,-1.)); -#4453 = ORIENTED_EDGE('',*,*,#4439,.T.); -#4454 = CYLINDRICAL_SURFACE('',#4455,1.); -#4455 = AXIS2_PLACEMENT_3D('',#4456,#4457,#4458); -#4456 = CARTESIAN_POINT('',(41.,-36.15,144.)); -#4457 = DIRECTION('',(0.,-1.,0.)); -#4458 = DIRECTION('',(0.,-0.,-1.)); -#4459 = ADVANCED_FACE('',(#4460),#4463,.T.); -#4460 = FACE_BOUND('',#4461,.T.); -#4461 = EDGE_LOOP('',(#4462)); -#4462 = ORIENTED_EDGE('',*,*,#4430,.T.); -#4463 = PLANE('',#4464); -#4464 = AXIS2_PLACEMENT_3D('',#4465,#4466,#4467); -#4465 = CARTESIAN_POINT('',(41.,-36.85,144.)); -#4466 = DIRECTION('',(0.,-1.,0.)); -#4467 = DIRECTION('',(0.,-0.,-1.)); -#4468 = ADVANCED_FACE('',(#4469),#4472,.F.); -#4469 = FACE_BOUND('',#4470,.T.); -#4470 = EDGE_LOOP('',(#4471)); -#4471 = ORIENTED_EDGE('',*,*,#4447,.F.); -#4472 = PLANE('',#4473); -#4473 = AXIS2_PLACEMENT_3D('',#4474,#4475,#4476); -#4474 = CARTESIAN_POINT('',(41.,-36.15,144.)); -#4475 = DIRECTION('',(0.,-1.,0.)); -#4476 = DIRECTION('',(0.,-0.,-1.)); -#4477 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4481)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4478,#4479,#4480)) REPRESENTATION_CONTEXT +#4567 = ITEM_DEFINED_TRANSFORMATION('','',#11,#171); +#4568 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4569); +#4569 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('40', + 'ConnectorBank_Right_Hole_R02_C03','',#5,#4501,$); +#4570 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4503)); +#4571 = SHAPE_DEFINITION_REPRESENTATION(#4572,#4578); +#4572 = PRODUCT_DEFINITION_SHAPE('','',#4573); +#4573 = PRODUCT_DEFINITION('design','',#4574,#4577); +#4574 = PRODUCT_DEFINITION_FORMATION('','',#4575); +#4575 = PRODUCT('ConnectorBank_Right_Hole_R03_C01', + 'ConnectorBank_Right_Hole_R03_C01','',(#4576)); +#4576 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4577 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4578 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4579),#4632); +#4579 = MANIFOLD_SOLID_BREP('',#4580); +#4580 = CLOSED_SHELL('',(#4581,#4614,#4623)); +#4581 = ADVANCED_FACE('',(#4582),#4609,.T.); +#4582 = FACE_BOUND('',#4583,.T.); +#4583 = EDGE_LOOP('',(#4584,#4593,#4601,#4608)); +#4584 = ORIENTED_EDGE('',*,*,#4585,.F.); +#4585 = EDGE_CURVE('',#4586,#4586,#4588,.T.); +#4586 = VERTEX_POINT('',#4587); +#4587 = CARTESIAN_POINT('',(-12.5,39.45,72.538461538462)); +#4588 = CIRCLE('',#4589,1.); +#4589 = AXIS2_PLACEMENT_3D('',#4590,#4591,#4592); +#4590 = CARTESIAN_POINT('',(-12.5,39.45,73.538461538462)); +#4591 = DIRECTION('',(0.,-1.,0.)); +#4592 = DIRECTION('',(0.,-0.,-1.)); +#4593 = ORIENTED_EDGE('',*,*,#4594,.F.); +#4594 = EDGE_CURVE('',#4595,#4586,#4597,.T.); +#4595 = VERTEX_POINT('',#4596); +#4596 = CARTESIAN_POINT('',(-12.5,40.15,72.538461538462)); +#4597 = LINE('',#4598,#4599); +#4598 = CARTESIAN_POINT('',(-12.5,40.15,72.538461538462)); +#4599 = VECTOR('',#4600,1.); +#4600 = DIRECTION('',(0.,-1.,0.)); +#4601 = ORIENTED_EDGE('',*,*,#4602,.T.); +#4602 = EDGE_CURVE('',#4595,#4595,#4603,.T.); +#4603 = CIRCLE('',#4604,1.); +#4604 = AXIS2_PLACEMENT_3D('',#4605,#4606,#4607); +#4605 = CARTESIAN_POINT('',(-12.5,40.15,73.538461538462)); +#4606 = DIRECTION('',(0.,-1.,0.)); +#4607 = DIRECTION('',(0.,-0.,-1.)); +#4608 = ORIENTED_EDGE('',*,*,#4594,.T.); +#4609 = CYLINDRICAL_SURFACE('',#4610,1.); +#4610 = AXIS2_PLACEMENT_3D('',#4611,#4612,#4613); +#4611 = CARTESIAN_POINT('',(-12.5,40.15,73.538461538462)); +#4612 = DIRECTION('',(0.,-1.,0.)); +#4613 = DIRECTION('',(0.,-0.,-1.)); +#4614 = ADVANCED_FACE('',(#4615),#4618,.T.); +#4615 = FACE_BOUND('',#4616,.T.); +#4616 = EDGE_LOOP('',(#4617)); +#4617 = ORIENTED_EDGE('',*,*,#4585,.T.); +#4618 = PLANE('',#4619); +#4619 = AXIS2_PLACEMENT_3D('',#4620,#4621,#4622); +#4620 = CARTESIAN_POINT('',(-12.5,39.45,73.538461538462)); +#4621 = DIRECTION('',(0.,-1.,0.)); +#4622 = DIRECTION('',(0.,-0.,-1.)); +#4623 = ADVANCED_FACE('',(#4624),#4627,.F.); +#4624 = FACE_BOUND('',#4625,.T.); +#4625 = EDGE_LOOP('',(#4626)); +#4626 = ORIENTED_EDGE('',*,*,#4602,.F.); +#4627 = PLANE('',#4628); +#4628 = AXIS2_PLACEMENT_3D('',#4629,#4630,#4631); +#4629 = CARTESIAN_POINT('',(-12.5,40.15,73.538461538462)); +#4630 = DIRECTION('',(0.,-1.,0.)); +#4631 = DIRECTION('',(0.,-0.,-1.)); +#4632 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4636)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4633,#4634,#4635)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4478 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4479 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4480 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4481 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4478, +#4633 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4634 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4635 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4636 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4633, 'distance_accuracy_value','confusion accuracy'); -#4482 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4483,#4485); -#4483 = ( REPRESENTATION_RELATIONSHIP('','',#4423,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4484) +#4637 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4638,#4640); +#4638 = ( REPRESENTATION_RELATIONSHIP('','',#4578,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4639) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4484 = ITEM_DEFINED_TRANSFORMATION('','',#11,#175); -#4485 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4486); -#4486 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('41', - 'ConnectorBank_Left_Hole_R10_C01','',#5,#4418,$); -#4487 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4420)); -#4488 = SHAPE_DEFINITION_REPRESENTATION(#4489,#4495); -#4489 = PRODUCT_DEFINITION_SHAPE('','',#4490); -#4490 = PRODUCT_DEFINITION('design','',#4491,#4494); -#4491 = PRODUCT_DEFINITION_FORMATION('','',#4492); -#4492 = PRODUCT('ConnectorBank_Left_Screw_R10', - 'ConnectorBank_Left_Screw_R10','',(#4493)); -#4493 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4494 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4495 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4496),#4549); -#4496 = MANIFOLD_SOLID_BREP('',#4497); -#4497 = CLOSED_SHELL('',(#4498,#4531,#4540)); -#4498 = ADVANCED_FACE('',(#4499),#4526,.T.); -#4499 = FACE_BOUND('',#4500,.T.); -#4500 = EDGE_LOOP('',(#4501,#4510,#4518,#4525)); -#4501 = ORIENTED_EDGE('',*,*,#4502,.F.); -#4502 = EDGE_CURVE('',#4503,#4503,#4505,.T.); -#4503 = VERTEX_POINT('',#4504); -#4504 = CARTESIAN_POINT('',(55.6,-36.95,143.45)); -#4505 = CIRCLE('',#4506,0.55); -#4506 = AXIS2_PLACEMENT_3D('',#4507,#4508,#4509); -#4507 = CARTESIAN_POINT('',(55.6,-36.95,144.)); -#4508 = DIRECTION('',(0.,-1.,0.)); -#4509 = DIRECTION('',(0.,-0.,-1.)); -#4510 = ORIENTED_EDGE('',*,*,#4511,.F.); -#4511 = EDGE_CURVE('',#4512,#4503,#4514,.T.); -#4512 = VERTEX_POINT('',#4513); -#4513 = CARTESIAN_POINT('',(55.6,-36.15,143.45)); -#4514 = LINE('',#4515,#4516); -#4515 = CARTESIAN_POINT('',(55.6,-36.15,143.45)); -#4516 = VECTOR('',#4517,1.); -#4517 = DIRECTION('',(0.,-1.,0.)); -#4518 = ORIENTED_EDGE('',*,*,#4519,.T.); -#4519 = EDGE_CURVE('',#4512,#4512,#4520,.T.); -#4520 = CIRCLE('',#4521,0.55); -#4521 = AXIS2_PLACEMENT_3D('',#4522,#4523,#4524); -#4522 = CARTESIAN_POINT('',(55.6,-36.15,144.)); -#4523 = DIRECTION('',(0.,-1.,0.)); -#4524 = DIRECTION('',(0.,-0.,-1.)); -#4525 = ORIENTED_EDGE('',*,*,#4511,.T.); -#4526 = CYLINDRICAL_SURFACE('',#4527,0.55); -#4527 = AXIS2_PLACEMENT_3D('',#4528,#4529,#4530); -#4528 = CARTESIAN_POINT('',(55.6,-36.15,144.)); -#4529 = DIRECTION('',(0.,-1.,0.)); -#4530 = DIRECTION('',(0.,-0.,-1.)); -#4531 = ADVANCED_FACE('',(#4532),#4535,.T.); -#4532 = FACE_BOUND('',#4533,.T.); -#4533 = EDGE_LOOP('',(#4534)); -#4534 = ORIENTED_EDGE('',*,*,#4502,.T.); -#4535 = PLANE('',#4536); -#4536 = AXIS2_PLACEMENT_3D('',#4537,#4538,#4539); -#4537 = CARTESIAN_POINT('',(55.6,-36.95,144.)); -#4538 = DIRECTION('',(0.,-1.,0.)); -#4539 = DIRECTION('',(0.,-0.,-1.)); -#4540 = ADVANCED_FACE('',(#4541),#4544,.F.); -#4541 = FACE_BOUND('',#4542,.T.); -#4542 = EDGE_LOOP('',(#4543)); -#4543 = ORIENTED_EDGE('',*,*,#4519,.F.); -#4544 = PLANE('',#4545); -#4545 = AXIS2_PLACEMENT_3D('',#4546,#4547,#4548); -#4546 = CARTESIAN_POINT('',(55.6,-36.15,144.)); -#4547 = DIRECTION('',(0.,-1.,0.)); -#4548 = DIRECTION('',(0.,-0.,-1.)); -#4549 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4553)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4550,#4551,#4552)) REPRESENTATION_CONTEXT +#4639 = ITEM_DEFINED_TRANSFORMATION('','',#11,#175); +#4640 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4641); +#4641 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('41', + 'ConnectorBank_Right_Hole_R03_C01','',#5,#4573,$); +#4642 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4575)); +#4643 = SHAPE_DEFINITION_REPRESENTATION(#4644,#4650); +#4644 = PRODUCT_DEFINITION_SHAPE('','',#4645); +#4645 = PRODUCT_DEFINITION('design','',#4646,#4649); +#4646 = PRODUCT_DEFINITION_FORMATION('','',#4647); +#4647 = PRODUCT('ConnectorBank_Right_Hole_R03_C02', + 'ConnectorBank_Right_Hole_R03_C02','',(#4648)); +#4648 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4649 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4650 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4651),#4704); +#4651 = MANIFOLD_SOLID_BREP('',#4652); +#4652 = CLOSED_SHELL('',(#4653,#4686,#4695)); +#4653 = ADVANCED_FACE('',(#4654),#4681,.T.); +#4654 = FACE_BOUND('',#4655,.T.); +#4655 = EDGE_LOOP('',(#4656,#4665,#4673,#4680)); +#4656 = ORIENTED_EDGE('',*,*,#4657,.F.); +#4657 = EDGE_CURVE('',#4658,#4658,#4660,.T.); +#4658 = VERTEX_POINT('',#4659); +#4659 = CARTESIAN_POINT('',(-7.5,39.45,72.538461538462)); +#4660 = CIRCLE('',#4661,1.); +#4661 = AXIS2_PLACEMENT_3D('',#4662,#4663,#4664); +#4662 = CARTESIAN_POINT('',(-7.5,39.45,73.538461538462)); +#4663 = DIRECTION('',(0.,-1.,0.)); +#4664 = DIRECTION('',(0.,-0.,-1.)); +#4665 = ORIENTED_EDGE('',*,*,#4666,.F.); +#4666 = EDGE_CURVE('',#4667,#4658,#4669,.T.); +#4667 = VERTEX_POINT('',#4668); +#4668 = CARTESIAN_POINT('',(-7.5,40.15,72.538461538462)); +#4669 = LINE('',#4670,#4671); +#4670 = CARTESIAN_POINT('',(-7.5,40.15,72.538461538462)); +#4671 = VECTOR('',#4672,1.); +#4672 = DIRECTION('',(0.,-1.,0.)); +#4673 = ORIENTED_EDGE('',*,*,#4674,.T.); +#4674 = EDGE_CURVE('',#4667,#4667,#4675,.T.); +#4675 = CIRCLE('',#4676,1.); +#4676 = AXIS2_PLACEMENT_3D('',#4677,#4678,#4679); +#4677 = CARTESIAN_POINT('',(-7.5,40.15,73.538461538462)); +#4678 = DIRECTION('',(0.,-1.,0.)); +#4679 = DIRECTION('',(0.,-0.,-1.)); +#4680 = ORIENTED_EDGE('',*,*,#4666,.T.); +#4681 = CYLINDRICAL_SURFACE('',#4682,1.); +#4682 = AXIS2_PLACEMENT_3D('',#4683,#4684,#4685); +#4683 = CARTESIAN_POINT('',(-7.5,40.15,73.538461538462)); +#4684 = DIRECTION('',(0.,-1.,0.)); +#4685 = DIRECTION('',(0.,-0.,-1.)); +#4686 = ADVANCED_FACE('',(#4687),#4690,.T.); +#4687 = FACE_BOUND('',#4688,.T.); +#4688 = EDGE_LOOP('',(#4689)); +#4689 = ORIENTED_EDGE('',*,*,#4657,.T.); +#4690 = PLANE('',#4691); +#4691 = AXIS2_PLACEMENT_3D('',#4692,#4693,#4694); +#4692 = CARTESIAN_POINT('',(-7.5,39.45,73.538461538462)); +#4693 = DIRECTION('',(0.,-1.,0.)); +#4694 = DIRECTION('',(0.,-0.,-1.)); +#4695 = ADVANCED_FACE('',(#4696),#4699,.F.); +#4696 = FACE_BOUND('',#4697,.T.); +#4697 = EDGE_LOOP('',(#4698)); +#4698 = ORIENTED_EDGE('',*,*,#4674,.F.); +#4699 = PLANE('',#4700); +#4700 = AXIS2_PLACEMENT_3D('',#4701,#4702,#4703); +#4701 = CARTESIAN_POINT('',(-7.5,40.15,73.538461538462)); +#4702 = DIRECTION('',(0.,-1.,0.)); +#4703 = DIRECTION('',(0.,-0.,-1.)); +#4704 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4708)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4705,#4706,#4707)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4550 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4551 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4552 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4553 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4550, +#4705 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4706 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4707 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4708 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4705, 'distance_accuracy_value','confusion accuracy'); -#4554 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4555,#4557); -#4555 = ( REPRESENTATION_RELATIONSHIP('','',#4495,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4556) +#4709 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4710,#4712); +#4710 = ( REPRESENTATION_RELATIONSHIP('','',#4650,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4711) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4556 = ITEM_DEFINED_TRANSFORMATION('','',#11,#179); -#4557 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4558); -#4558 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('42', - 'ConnectorBank_Left_Screw_R10','',#5,#4490,$); -#4559 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4492)); -#4560 = SHAPE_DEFINITION_REPRESENTATION(#4561,#4567); -#4561 = PRODUCT_DEFINITION_SHAPE('','',#4562); -#4562 = PRODUCT_DEFINITION('design','',#4563,#4566); -#4563 = PRODUCT_DEFINITION_FORMATION('','',#4564); -#4564 = PRODUCT('ConnectorBank_Left_Hole_R10_C02', - 'ConnectorBank_Left_Hole_R10_C02','',(#4565)); -#4565 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4566 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4567 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4568),#4621); -#4568 = MANIFOLD_SOLID_BREP('',#4569); -#4569 = CLOSED_SHELL('',(#4570,#4603,#4612)); -#4570 = ADVANCED_FACE('',(#4571),#4598,.T.); -#4571 = FACE_BOUND('',#4572,.T.); -#4572 = EDGE_LOOP('',(#4573,#4582,#4590,#4597)); -#4573 = ORIENTED_EDGE('',*,*,#4574,.F.); -#4574 = EDGE_CURVE('',#4575,#4575,#4577,.T.); -#4575 = VERTEX_POINT('',#4576); -#4576 = CARTESIAN_POINT('',(47.,-36.85,143.)); -#4577 = CIRCLE('',#4578,1.); -#4578 = AXIS2_PLACEMENT_3D('',#4579,#4580,#4581); -#4579 = CARTESIAN_POINT('',(47.,-36.85,144.)); -#4580 = DIRECTION('',(0.,-1.,0.)); -#4581 = DIRECTION('',(0.,-0.,-1.)); -#4582 = ORIENTED_EDGE('',*,*,#4583,.F.); -#4583 = EDGE_CURVE('',#4584,#4575,#4586,.T.); -#4584 = VERTEX_POINT('',#4585); -#4585 = CARTESIAN_POINT('',(47.,-36.15,143.)); -#4586 = LINE('',#4587,#4588); -#4587 = CARTESIAN_POINT('',(47.,-36.15,143.)); -#4588 = VECTOR('',#4589,1.); -#4589 = DIRECTION('',(0.,-1.,0.)); -#4590 = ORIENTED_EDGE('',*,*,#4591,.T.); -#4591 = EDGE_CURVE('',#4584,#4584,#4592,.T.); -#4592 = CIRCLE('',#4593,1.); -#4593 = AXIS2_PLACEMENT_3D('',#4594,#4595,#4596); -#4594 = CARTESIAN_POINT('',(47.,-36.15,144.)); -#4595 = DIRECTION('',(0.,-1.,0.)); -#4596 = DIRECTION('',(0.,-0.,-1.)); -#4597 = ORIENTED_EDGE('',*,*,#4583,.T.); -#4598 = CYLINDRICAL_SURFACE('',#4599,1.); -#4599 = AXIS2_PLACEMENT_3D('',#4600,#4601,#4602); -#4600 = CARTESIAN_POINT('',(47.,-36.15,144.)); -#4601 = DIRECTION('',(0.,-1.,0.)); -#4602 = DIRECTION('',(0.,-0.,-1.)); -#4603 = ADVANCED_FACE('',(#4604),#4607,.T.); -#4604 = FACE_BOUND('',#4605,.T.); -#4605 = EDGE_LOOP('',(#4606)); -#4606 = ORIENTED_EDGE('',*,*,#4574,.T.); -#4607 = PLANE('',#4608); -#4608 = AXIS2_PLACEMENT_3D('',#4609,#4610,#4611); -#4609 = CARTESIAN_POINT('',(47.,-36.85,144.)); -#4610 = DIRECTION('',(0.,-1.,0.)); -#4611 = DIRECTION('',(0.,-0.,-1.)); -#4612 = ADVANCED_FACE('',(#4613),#4616,.F.); -#4613 = FACE_BOUND('',#4614,.T.); -#4614 = EDGE_LOOP('',(#4615)); -#4615 = ORIENTED_EDGE('',*,*,#4591,.F.); -#4616 = PLANE('',#4617); -#4617 = AXIS2_PLACEMENT_3D('',#4618,#4619,#4620); -#4618 = CARTESIAN_POINT('',(47.,-36.15,144.)); -#4619 = DIRECTION('',(0.,-1.,0.)); -#4620 = DIRECTION('',(0.,-0.,-1.)); -#4621 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4625)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4622,#4623,#4624)) REPRESENTATION_CONTEXT +#4711 = ITEM_DEFINED_TRANSFORMATION('','',#11,#179); +#4712 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4713); +#4713 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('42', + 'ConnectorBank_Right_Hole_R03_C02','',#5,#4645,$); +#4714 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4647)); +#4715 = SHAPE_DEFINITION_REPRESENTATION(#4716,#4722); +#4716 = PRODUCT_DEFINITION_SHAPE('','',#4717); +#4717 = PRODUCT_DEFINITION('design','',#4718,#4721); +#4718 = PRODUCT_DEFINITION_FORMATION('','',#4719); +#4719 = PRODUCT('ConnectorBank_Right_Hole_R03_C03', + 'ConnectorBank_Right_Hole_R03_C03','',(#4720)); +#4720 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4721 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4722 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4723),#4776); +#4723 = MANIFOLD_SOLID_BREP('',#4724); +#4724 = CLOSED_SHELL('',(#4725,#4758,#4767)); +#4725 = ADVANCED_FACE('',(#4726),#4753,.T.); +#4726 = FACE_BOUND('',#4727,.T.); +#4727 = EDGE_LOOP('',(#4728,#4737,#4745,#4752)); +#4728 = ORIENTED_EDGE('',*,*,#4729,.F.); +#4729 = EDGE_CURVE('',#4730,#4730,#4732,.T.); +#4730 = VERTEX_POINT('',#4731); +#4731 = CARTESIAN_POINT('',(-2.5,39.45,72.538461538462)); +#4732 = CIRCLE('',#4733,1.); +#4733 = AXIS2_PLACEMENT_3D('',#4734,#4735,#4736); +#4734 = CARTESIAN_POINT('',(-2.5,39.45,73.538461538462)); +#4735 = DIRECTION('',(0.,-1.,0.)); +#4736 = DIRECTION('',(0.,-0.,-1.)); +#4737 = ORIENTED_EDGE('',*,*,#4738,.F.); +#4738 = EDGE_CURVE('',#4739,#4730,#4741,.T.); +#4739 = VERTEX_POINT('',#4740); +#4740 = CARTESIAN_POINT('',(-2.5,40.15,72.538461538462)); +#4741 = LINE('',#4742,#4743); +#4742 = CARTESIAN_POINT('',(-2.5,40.15,72.538461538462)); +#4743 = VECTOR('',#4744,1.); +#4744 = DIRECTION('',(0.,-1.,0.)); +#4745 = ORIENTED_EDGE('',*,*,#4746,.T.); +#4746 = EDGE_CURVE('',#4739,#4739,#4747,.T.); +#4747 = CIRCLE('',#4748,1.); +#4748 = AXIS2_PLACEMENT_3D('',#4749,#4750,#4751); +#4749 = CARTESIAN_POINT('',(-2.5,40.15,73.538461538462)); +#4750 = DIRECTION('',(0.,-1.,0.)); +#4751 = DIRECTION('',(0.,-0.,-1.)); +#4752 = ORIENTED_EDGE('',*,*,#4738,.T.); +#4753 = CYLINDRICAL_SURFACE('',#4754,1.); +#4754 = AXIS2_PLACEMENT_3D('',#4755,#4756,#4757); +#4755 = CARTESIAN_POINT('',(-2.5,40.15,73.538461538462)); +#4756 = DIRECTION('',(0.,-1.,0.)); +#4757 = DIRECTION('',(0.,-0.,-1.)); +#4758 = ADVANCED_FACE('',(#4759),#4762,.T.); +#4759 = FACE_BOUND('',#4760,.T.); +#4760 = EDGE_LOOP('',(#4761)); +#4761 = ORIENTED_EDGE('',*,*,#4729,.T.); +#4762 = PLANE('',#4763); +#4763 = AXIS2_PLACEMENT_3D('',#4764,#4765,#4766); +#4764 = CARTESIAN_POINT('',(-2.5,39.45,73.538461538462)); +#4765 = DIRECTION('',(0.,-1.,0.)); +#4766 = DIRECTION('',(0.,-0.,-1.)); +#4767 = ADVANCED_FACE('',(#4768),#4771,.F.); +#4768 = FACE_BOUND('',#4769,.T.); +#4769 = EDGE_LOOP('',(#4770)); +#4770 = ORIENTED_EDGE('',*,*,#4746,.F.); +#4771 = PLANE('',#4772); +#4772 = AXIS2_PLACEMENT_3D('',#4773,#4774,#4775); +#4773 = CARTESIAN_POINT('',(-2.5,40.15,73.538461538462)); +#4774 = DIRECTION('',(0.,-1.,0.)); +#4775 = DIRECTION('',(0.,-0.,-1.)); +#4776 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4780)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4777,#4778,#4779)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4622 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4623 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4624 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4625 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4622, +#4777 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4778 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4779 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4780 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4777, 'distance_accuracy_value','confusion accuracy'); -#4626 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4627,#4629); -#4627 = ( REPRESENTATION_RELATIONSHIP('','',#4567,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4628) +#4781 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4782,#4784); +#4782 = ( REPRESENTATION_RELATIONSHIP('','',#4722,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4783) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4628 = ITEM_DEFINED_TRANSFORMATION('','',#11,#183); -#4629 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4630); -#4630 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('43', - 'ConnectorBank_Left_Hole_R10_C02','',#5,#4562,$); -#4631 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4564)); -#4632 = SHAPE_DEFINITION_REPRESENTATION(#4633,#4639); -#4633 = PRODUCT_DEFINITION_SHAPE('','',#4634); -#4634 = PRODUCT_DEFINITION('design','',#4635,#4638); -#4635 = PRODUCT_DEFINITION_FORMATION('','',#4636); -#4636 = PRODUCT('ConnectorBank_Right_Body','ConnectorBank_Right_Body','' - ,(#4637)); -#4637 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4638 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4639 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4640),#4790); -#4640 = MANIFOLD_SOLID_BREP('',#4641); -#4641 = CLOSED_SHELL('',(#4642,#4682,#4722,#4744,#4766,#4778)); -#4642 = ADVANCED_FACE('',(#4643),#4677,.F.); -#4643 = FACE_BOUND('',#4644,.F.); -#4644 = EDGE_LOOP('',(#4645,#4655,#4663,#4671)); -#4645 = ORIENTED_EDGE('',*,*,#4646,.F.); -#4646 = EDGE_CURVE('',#4647,#4649,#4651,.T.); -#4647 = VERTEX_POINT('',#4648); -#4648 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4649 = VERTEX_POINT('',#4650); -#4650 = CARTESIAN_POINT('',(60.,-37.,152.)); -#4651 = LINE('',#4652,#4653); -#4652 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4653 = VECTOR('',#4654,1.); -#4654 = DIRECTION('',(0.,0.,1.)); -#4655 = ORIENTED_EDGE('',*,*,#4656,.T.); -#4656 = EDGE_CURVE('',#4647,#4657,#4659,.T.); -#4657 = VERTEX_POINT('',#4658); -#4658 = CARTESIAN_POINT('',(60.,-33.,50.)); -#4659 = LINE('',#4660,#4661); -#4660 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4661 = VECTOR('',#4662,1.); -#4662 = DIRECTION('',(-0.,1.,0.)); -#4663 = ORIENTED_EDGE('',*,*,#4664,.T.); -#4664 = EDGE_CURVE('',#4657,#4665,#4667,.T.); -#4665 = VERTEX_POINT('',#4666); -#4666 = CARTESIAN_POINT('',(60.,-33.,152.)); -#4667 = LINE('',#4668,#4669); -#4668 = CARTESIAN_POINT('',(60.,-33.,50.)); -#4669 = VECTOR('',#4670,1.); -#4670 = DIRECTION('',(0.,0.,1.)); -#4671 = ORIENTED_EDGE('',*,*,#4672,.F.); -#4672 = EDGE_CURVE('',#4649,#4665,#4673,.T.); -#4673 = LINE('',#4674,#4675); -#4674 = CARTESIAN_POINT('',(60.,-37.,152.)); -#4675 = VECTOR('',#4676,1.); -#4676 = DIRECTION('',(-0.,1.,0.)); -#4677 = PLANE('',#4678); -#4678 = AXIS2_PLACEMENT_3D('',#4679,#4680,#4681); -#4679 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4680 = DIRECTION('',(1.,0.,-0.)); -#4681 = DIRECTION('',(0.,0.,1.)); -#4682 = ADVANCED_FACE('',(#4683),#4717,.T.); -#4683 = FACE_BOUND('',#4684,.T.); -#4684 = EDGE_LOOP('',(#4685,#4695,#4703,#4711)); -#4685 = ORIENTED_EDGE('',*,*,#4686,.F.); -#4686 = EDGE_CURVE('',#4687,#4689,#4691,.T.); -#4687 = VERTEX_POINT('',#4688); -#4688 = CARTESIAN_POINT('',(80.,-37.,50.)); -#4689 = VERTEX_POINT('',#4690); -#4690 = CARTESIAN_POINT('',(80.,-37.,152.)); -#4691 = LINE('',#4692,#4693); -#4692 = CARTESIAN_POINT('',(80.,-37.,50.)); -#4693 = VECTOR('',#4694,1.); -#4694 = DIRECTION('',(0.,0.,1.)); -#4695 = ORIENTED_EDGE('',*,*,#4696,.T.); -#4696 = EDGE_CURVE('',#4687,#4697,#4699,.T.); -#4697 = VERTEX_POINT('',#4698); -#4698 = CARTESIAN_POINT('',(80.,-33.,50.)); -#4699 = LINE('',#4700,#4701); -#4700 = CARTESIAN_POINT('',(80.,-37.,50.)); -#4701 = VECTOR('',#4702,1.); -#4702 = DIRECTION('',(-0.,1.,0.)); -#4703 = ORIENTED_EDGE('',*,*,#4704,.T.); -#4704 = EDGE_CURVE('',#4697,#4705,#4707,.T.); -#4705 = VERTEX_POINT('',#4706); -#4706 = CARTESIAN_POINT('',(80.,-33.,152.)); -#4707 = LINE('',#4708,#4709); -#4708 = CARTESIAN_POINT('',(80.,-33.,50.)); -#4709 = VECTOR('',#4710,1.); -#4710 = DIRECTION('',(0.,0.,1.)); -#4711 = ORIENTED_EDGE('',*,*,#4712,.F.); -#4712 = EDGE_CURVE('',#4689,#4705,#4713,.T.); -#4713 = LINE('',#4714,#4715); -#4714 = CARTESIAN_POINT('',(80.,-37.,152.)); -#4715 = VECTOR('',#4716,1.); -#4716 = DIRECTION('',(-0.,1.,0.)); -#4717 = PLANE('',#4718); -#4718 = AXIS2_PLACEMENT_3D('',#4719,#4720,#4721); -#4719 = CARTESIAN_POINT('',(80.,-37.,50.)); -#4720 = DIRECTION('',(1.,0.,-0.)); -#4721 = DIRECTION('',(0.,0.,1.)); -#4722 = ADVANCED_FACE('',(#4723),#4739,.F.); -#4723 = FACE_BOUND('',#4724,.F.); -#4724 = EDGE_LOOP('',(#4725,#4731,#4732,#4738)); -#4725 = ORIENTED_EDGE('',*,*,#4726,.F.); -#4726 = EDGE_CURVE('',#4647,#4687,#4727,.T.); -#4727 = LINE('',#4728,#4729); -#4728 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4729 = VECTOR('',#4730,1.); -#4730 = DIRECTION('',(1.,0.,-0.)); -#4731 = ORIENTED_EDGE('',*,*,#4646,.T.); -#4732 = ORIENTED_EDGE('',*,*,#4733,.T.); -#4733 = EDGE_CURVE('',#4649,#4689,#4734,.T.); -#4734 = LINE('',#4735,#4736); -#4735 = CARTESIAN_POINT('',(60.,-37.,152.)); -#4736 = VECTOR('',#4737,1.); -#4737 = DIRECTION('',(1.,0.,-0.)); -#4738 = ORIENTED_EDGE('',*,*,#4686,.F.); -#4739 = PLANE('',#4740); -#4740 = AXIS2_PLACEMENT_3D('',#4741,#4742,#4743); -#4741 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4742 = DIRECTION('',(-0.,1.,0.)); -#4743 = DIRECTION('',(0.,0.,1.)); -#4744 = ADVANCED_FACE('',(#4745),#4761,.T.); -#4745 = FACE_BOUND('',#4746,.T.); -#4746 = EDGE_LOOP('',(#4747,#4753,#4754,#4760)); -#4747 = ORIENTED_EDGE('',*,*,#4748,.F.); -#4748 = EDGE_CURVE('',#4657,#4697,#4749,.T.); -#4749 = LINE('',#4750,#4751); -#4750 = CARTESIAN_POINT('',(60.,-33.,50.)); -#4751 = VECTOR('',#4752,1.); -#4752 = DIRECTION('',(1.,0.,-0.)); -#4753 = ORIENTED_EDGE('',*,*,#4664,.T.); -#4754 = ORIENTED_EDGE('',*,*,#4755,.T.); -#4755 = EDGE_CURVE('',#4665,#4705,#4756,.T.); -#4756 = LINE('',#4757,#4758); -#4757 = CARTESIAN_POINT('',(60.,-33.,152.)); -#4758 = VECTOR('',#4759,1.); -#4759 = DIRECTION('',(1.,0.,-0.)); -#4760 = ORIENTED_EDGE('',*,*,#4704,.F.); -#4761 = PLANE('',#4762); -#4762 = AXIS2_PLACEMENT_3D('',#4763,#4764,#4765); -#4763 = CARTESIAN_POINT('',(60.,-33.,50.)); -#4764 = DIRECTION('',(-0.,1.,0.)); -#4765 = DIRECTION('',(0.,0.,1.)); -#4766 = ADVANCED_FACE('',(#4767),#4773,.F.); -#4767 = FACE_BOUND('',#4768,.F.); -#4768 = EDGE_LOOP('',(#4769,#4770,#4771,#4772)); -#4769 = ORIENTED_EDGE('',*,*,#4656,.F.); -#4770 = ORIENTED_EDGE('',*,*,#4726,.T.); -#4771 = ORIENTED_EDGE('',*,*,#4696,.T.); -#4772 = ORIENTED_EDGE('',*,*,#4748,.F.); -#4773 = PLANE('',#4774); -#4774 = AXIS2_PLACEMENT_3D('',#4775,#4776,#4777); -#4775 = CARTESIAN_POINT('',(60.,-37.,50.)); -#4776 = DIRECTION('',(0.,0.,1.)); -#4777 = DIRECTION('',(1.,0.,-0.)); -#4778 = ADVANCED_FACE('',(#4779),#4785,.T.); -#4779 = FACE_BOUND('',#4780,.T.); -#4780 = EDGE_LOOP('',(#4781,#4782,#4783,#4784)); -#4781 = ORIENTED_EDGE('',*,*,#4672,.F.); -#4782 = ORIENTED_EDGE('',*,*,#4733,.T.); -#4783 = ORIENTED_EDGE('',*,*,#4712,.T.); -#4784 = ORIENTED_EDGE('',*,*,#4755,.F.); -#4785 = PLANE('',#4786); -#4786 = AXIS2_PLACEMENT_3D('',#4787,#4788,#4789); -#4787 = CARTESIAN_POINT('',(60.,-37.,152.)); -#4788 = DIRECTION('',(0.,0.,1.)); -#4789 = DIRECTION('',(1.,0.,-0.)); -#4790 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4794)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4791,#4792,#4793)) REPRESENTATION_CONTEXT +#4783 = ITEM_DEFINED_TRANSFORMATION('','',#11,#183); +#4784 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4785); +#4785 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('43', + 'ConnectorBank_Right_Hole_R03_C03','',#5,#4717,$); +#4786 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4719)); +#4787 = SHAPE_DEFINITION_REPRESENTATION(#4788,#4794); +#4788 = PRODUCT_DEFINITION_SHAPE('','',#4789); +#4789 = PRODUCT_DEFINITION('design','',#4790,#4793); +#4790 = PRODUCT_DEFINITION_FORMATION('','',#4791); +#4791 = PRODUCT('ConnectorBank_Right_Hole_R04_C01', + 'ConnectorBank_Right_Hole_R04_C01','',(#4792)); +#4792 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4793 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4794 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4795),#4848); +#4795 = MANIFOLD_SOLID_BREP('',#4796); +#4796 = CLOSED_SHELL('',(#4797,#4830,#4839)); +#4797 = ADVANCED_FACE('',(#4798),#4825,.T.); +#4798 = FACE_BOUND('',#4799,.T.); +#4799 = EDGE_LOOP('',(#4800,#4809,#4817,#4824)); +#4800 = ORIENTED_EDGE('',*,*,#4801,.F.); +#4801 = EDGE_CURVE('',#4802,#4802,#4804,.T.); +#4802 = VERTEX_POINT('',#4803); +#4803 = CARTESIAN_POINT('',(-12.5,39.45,80.384615384615)); +#4804 = CIRCLE('',#4805,1.); +#4805 = AXIS2_PLACEMENT_3D('',#4806,#4807,#4808); +#4806 = CARTESIAN_POINT('',(-12.5,39.45,81.384615384615)); +#4807 = DIRECTION('',(0.,-1.,0.)); +#4808 = DIRECTION('',(0.,-0.,-1.)); +#4809 = ORIENTED_EDGE('',*,*,#4810,.F.); +#4810 = EDGE_CURVE('',#4811,#4802,#4813,.T.); +#4811 = VERTEX_POINT('',#4812); +#4812 = CARTESIAN_POINT('',(-12.5,40.15,80.384615384615)); +#4813 = LINE('',#4814,#4815); +#4814 = CARTESIAN_POINT('',(-12.5,40.15,80.384615384615)); +#4815 = VECTOR('',#4816,1.); +#4816 = DIRECTION('',(0.,-1.,0.)); +#4817 = ORIENTED_EDGE('',*,*,#4818,.T.); +#4818 = EDGE_CURVE('',#4811,#4811,#4819,.T.); +#4819 = CIRCLE('',#4820,1.); +#4820 = AXIS2_PLACEMENT_3D('',#4821,#4822,#4823); +#4821 = CARTESIAN_POINT('',(-12.5,40.15,81.384615384615)); +#4822 = DIRECTION('',(0.,-1.,0.)); +#4823 = DIRECTION('',(0.,-0.,-1.)); +#4824 = ORIENTED_EDGE('',*,*,#4810,.T.); +#4825 = CYLINDRICAL_SURFACE('',#4826,1.); +#4826 = AXIS2_PLACEMENT_3D('',#4827,#4828,#4829); +#4827 = CARTESIAN_POINT('',(-12.5,40.15,81.384615384615)); +#4828 = DIRECTION('',(0.,-1.,0.)); +#4829 = DIRECTION('',(0.,-0.,-1.)); +#4830 = ADVANCED_FACE('',(#4831),#4834,.T.); +#4831 = FACE_BOUND('',#4832,.T.); +#4832 = EDGE_LOOP('',(#4833)); +#4833 = ORIENTED_EDGE('',*,*,#4801,.T.); +#4834 = PLANE('',#4835); +#4835 = AXIS2_PLACEMENT_3D('',#4836,#4837,#4838); +#4836 = CARTESIAN_POINT('',(-12.5,39.45,81.384615384615)); +#4837 = DIRECTION('',(0.,-1.,0.)); +#4838 = DIRECTION('',(0.,-0.,-1.)); +#4839 = ADVANCED_FACE('',(#4840),#4843,.F.); +#4840 = FACE_BOUND('',#4841,.T.); +#4841 = EDGE_LOOP('',(#4842)); +#4842 = ORIENTED_EDGE('',*,*,#4818,.F.); +#4843 = PLANE('',#4844); +#4844 = AXIS2_PLACEMENT_3D('',#4845,#4846,#4847); +#4845 = CARTESIAN_POINT('',(-12.5,40.15,81.384615384615)); +#4846 = DIRECTION('',(0.,-1.,0.)); +#4847 = DIRECTION('',(0.,-0.,-1.)); +#4848 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4852)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4849,#4850,#4851)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4791 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4792 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4793 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4794 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4791, +#4849 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4850 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4851 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4852 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4849, 'distance_accuracy_value','confusion accuracy'); -#4795 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4796,#4798); -#4796 = ( REPRESENTATION_RELATIONSHIP('','',#4639,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4797) +#4853 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4854,#4856); +#4854 = ( REPRESENTATION_RELATIONSHIP('','',#4794,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4855) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4797 = ITEM_DEFINED_TRANSFORMATION('','',#11,#187); -#4798 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4799); -#4799 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('44','ConnectorBank_Right_Body', - '',#5,#4634,$); -#4800 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4636)); -#4801 = SHAPE_DEFINITION_REPRESENTATION(#4802,#4808); -#4802 = PRODUCT_DEFINITION_SHAPE('','',#4803); -#4803 = PRODUCT_DEFINITION('design','',#4804,#4807); -#4804 = PRODUCT_DEFINITION_FORMATION('','',#4805); -#4805 = PRODUCT('ConnectorBank_Right_SideRailLeft', - 'ConnectorBank_Right_SideRailLeft','',(#4806)); -#4806 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4807 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4808 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4809),#4959); -#4809 = MANIFOLD_SOLID_BREP('',#4810); -#4810 = CLOSED_SHELL('',(#4811,#4851,#4891,#4913,#4935,#4947)); -#4811 = ADVANCED_FACE('',(#4812),#4846,.F.); -#4812 = FACE_BOUND('',#4813,.F.); -#4813 = EDGE_LOOP('',(#4814,#4824,#4832,#4840)); -#4814 = ORIENTED_EDGE('',*,*,#4815,.F.); -#4815 = EDGE_CURVE('',#4816,#4818,#4820,.T.); -#4816 = VERTEX_POINT('',#4817); -#4817 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4818 = VERTEX_POINT('',#4819); -#4819 = CARTESIAN_POINT('',(58.8,-37.2,152.)); -#4820 = LINE('',#4821,#4822); -#4821 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4822 = VECTOR('',#4823,1.); -#4823 = DIRECTION('',(0.,0.,1.)); -#4824 = ORIENTED_EDGE('',*,*,#4825,.T.); -#4825 = EDGE_CURVE('',#4816,#4826,#4828,.T.); -#4826 = VERTEX_POINT('',#4827); -#4827 = CARTESIAN_POINT('',(58.8,-32.8,50.)); -#4828 = LINE('',#4829,#4830); -#4829 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4830 = VECTOR('',#4831,1.); -#4831 = DIRECTION('',(-0.,1.,0.)); -#4832 = ORIENTED_EDGE('',*,*,#4833,.T.); -#4833 = EDGE_CURVE('',#4826,#4834,#4836,.T.); -#4834 = VERTEX_POINT('',#4835); -#4835 = CARTESIAN_POINT('',(58.8,-32.8,152.)); -#4836 = LINE('',#4837,#4838); -#4837 = CARTESIAN_POINT('',(58.8,-32.8,50.)); -#4838 = VECTOR('',#4839,1.); -#4839 = DIRECTION('',(0.,0.,1.)); -#4840 = ORIENTED_EDGE('',*,*,#4841,.F.); -#4841 = EDGE_CURVE('',#4818,#4834,#4842,.T.); -#4842 = LINE('',#4843,#4844); -#4843 = CARTESIAN_POINT('',(58.8,-37.2,152.)); -#4844 = VECTOR('',#4845,1.); -#4845 = DIRECTION('',(-0.,1.,0.)); -#4846 = PLANE('',#4847); -#4847 = AXIS2_PLACEMENT_3D('',#4848,#4849,#4850); -#4848 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4849 = DIRECTION('',(1.,0.,-0.)); -#4850 = DIRECTION('',(0.,0.,1.)); -#4851 = ADVANCED_FACE('',(#4852),#4886,.T.); -#4852 = FACE_BOUND('',#4853,.T.); -#4853 = EDGE_LOOP('',(#4854,#4864,#4872,#4880)); -#4854 = ORIENTED_EDGE('',*,*,#4855,.F.); -#4855 = EDGE_CURVE('',#4856,#4858,#4860,.T.); -#4856 = VERTEX_POINT('',#4857); -#4857 = CARTESIAN_POINT('',(60.,-37.2,50.)); -#4858 = VERTEX_POINT('',#4859); -#4859 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#4860 = LINE('',#4861,#4862); -#4861 = CARTESIAN_POINT('',(60.,-37.2,50.)); -#4862 = VECTOR('',#4863,1.); -#4863 = DIRECTION('',(0.,0.,1.)); -#4864 = ORIENTED_EDGE('',*,*,#4865,.T.); -#4865 = EDGE_CURVE('',#4856,#4866,#4868,.T.); -#4866 = VERTEX_POINT('',#4867); -#4867 = CARTESIAN_POINT('',(60.,-32.8,50.)); -#4868 = LINE('',#4869,#4870); -#4869 = CARTESIAN_POINT('',(60.,-37.2,50.)); -#4870 = VECTOR('',#4871,1.); -#4871 = DIRECTION('',(-0.,1.,0.)); -#4872 = ORIENTED_EDGE('',*,*,#4873,.T.); -#4873 = EDGE_CURVE('',#4866,#4874,#4876,.T.); +#4855 = ITEM_DEFINED_TRANSFORMATION('','',#11,#187); +#4856 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4857); +#4857 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('44', + 'ConnectorBank_Right_Hole_R04_C01','',#5,#4789,$); +#4858 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4791)); +#4859 = SHAPE_DEFINITION_REPRESENTATION(#4860,#4866); +#4860 = PRODUCT_DEFINITION_SHAPE('','',#4861); +#4861 = PRODUCT_DEFINITION('design','',#4862,#4865); +#4862 = PRODUCT_DEFINITION_FORMATION('','',#4863); +#4863 = PRODUCT('ConnectorBank_Right_Hole_R04_C02', + 'ConnectorBank_Right_Hole_R04_C02','',(#4864)); +#4864 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4865 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4866 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4867),#4920); +#4867 = MANIFOLD_SOLID_BREP('',#4868); +#4868 = CLOSED_SHELL('',(#4869,#4902,#4911)); +#4869 = ADVANCED_FACE('',(#4870),#4897,.T.); +#4870 = FACE_BOUND('',#4871,.T.); +#4871 = EDGE_LOOP('',(#4872,#4881,#4889,#4896)); +#4872 = ORIENTED_EDGE('',*,*,#4873,.F.); +#4873 = EDGE_CURVE('',#4874,#4874,#4876,.T.); #4874 = VERTEX_POINT('',#4875); -#4875 = CARTESIAN_POINT('',(60.,-32.8,152.)); -#4876 = LINE('',#4877,#4878); -#4877 = CARTESIAN_POINT('',(60.,-32.8,50.)); -#4878 = VECTOR('',#4879,1.); -#4879 = DIRECTION('',(0.,0.,1.)); -#4880 = ORIENTED_EDGE('',*,*,#4881,.F.); -#4881 = EDGE_CURVE('',#4858,#4874,#4882,.T.); -#4882 = LINE('',#4883,#4884); -#4883 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#4884 = VECTOR('',#4885,1.); -#4885 = DIRECTION('',(-0.,1.,0.)); -#4886 = PLANE('',#4887); -#4887 = AXIS2_PLACEMENT_3D('',#4888,#4889,#4890); -#4888 = CARTESIAN_POINT('',(60.,-37.2,50.)); -#4889 = DIRECTION('',(1.,0.,-0.)); -#4890 = DIRECTION('',(0.,0.,1.)); -#4891 = ADVANCED_FACE('',(#4892),#4908,.F.); -#4892 = FACE_BOUND('',#4893,.F.); -#4893 = EDGE_LOOP('',(#4894,#4900,#4901,#4907)); -#4894 = ORIENTED_EDGE('',*,*,#4895,.F.); -#4895 = EDGE_CURVE('',#4816,#4856,#4896,.T.); -#4896 = LINE('',#4897,#4898); -#4897 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4898 = VECTOR('',#4899,1.); -#4899 = DIRECTION('',(1.,0.,-0.)); -#4900 = ORIENTED_EDGE('',*,*,#4815,.T.); -#4901 = ORIENTED_EDGE('',*,*,#4902,.T.); -#4902 = EDGE_CURVE('',#4818,#4858,#4903,.T.); -#4903 = LINE('',#4904,#4905); -#4904 = CARTESIAN_POINT('',(58.8,-37.2,152.)); -#4905 = VECTOR('',#4906,1.); -#4906 = DIRECTION('',(1.,0.,-0.)); -#4907 = ORIENTED_EDGE('',*,*,#4855,.F.); -#4908 = PLANE('',#4909); -#4909 = AXIS2_PLACEMENT_3D('',#4910,#4911,#4912); -#4910 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4911 = DIRECTION('',(-0.,1.,0.)); -#4912 = DIRECTION('',(0.,0.,1.)); -#4913 = ADVANCED_FACE('',(#4914),#4930,.T.); -#4914 = FACE_BOUND('',#4915,.T.); -#4915 = EDGE_LOOP('',(#4916,#4922,#4923,#4929)); -#4916 = ORIENTED_EDGE('',*,*,#4917,.F.); -#4917 = EDGE_CURVE('',#4826,#4866,#4918,.T.); -#4918 = LINE('',#4919,#4920); -#4919 = CARTESIAN_POINT('',(58.8,-32.8,50.)); -#4920 = VECTOR('',#4921,1.); -#4921 = DIRECTION('',(1.,0.,-0.)); -#4922 = ORIENTED_EDGE('',*,*,#4833,.T.); -#4923 = ORIENTED_EDGE('',*,*,#4924,.T.); -#4924 = EDGE_CURVE('',#4834,#4874,#4925,.T.); -#4925 = LINE('',#4926,#4927); -#4926 = CARTESIAN_POINT('',(58.8,-32.8,152.)); -#4927 = VECTOR('',#4928,1.); -#4928 = DIRECTION('',(1.,0.,-0.)); -#4929 = ORIENTED_EDGE('',*,*,#4873,.F.); -#4930 = PLANE('',#4931); -#4931 = AXIS2_PLACEMENT_3D('',#4932,#4933,#4934); -#4932 = CARTESIAN_POINT('',(58.8,-32.8,50.)); -#4933 = DIRECTION('',(-0.,1.,0.)); -#4934 = DIRECTION('',(0.,0.,1.)); -#4935 = ADVANCED_FACE('',(#4936),#4942,.F.); -#4936 = FACE_BOUND('',#4937,.F.); -#4937 = EDGE_LOOP('',(#4938,#4939,#4940,#4941)); -#4938 = ORIENTED_EDGE('',*,*,#4825,.F.); -#4939 = ORIENTED_EDGE('',*,*,#4895,.T.); -#4940 = ORIENTED_EDGE('',*,*,#4865,.T.); -#4941 = ORIENTED_EDGE('',*,*,#4917,.F.); -#4942 = PLANE('',#4943); -#4943 = AXIS2_PLACEMENT_3D('',#4944,#4945,#4946); -#4944 = CARTESIAN_POINT('',(58.8,-37.2,50.)); -#4945 = DIRECTION('',(0.,0.,1.)); -#4946 = DIRECTION('',(1.,0.,-0.)); -#4947 = ADVANCED_FACE('',(#4948),#4954,.T.); -#4948 = FACE_BOUND('',#4949,.T.); -#4949 = EDGE_LOOP('',(#4950,#4951,#4952,#4953)); -#4950 = ORIENTED_EDGE('',*,*,#4841,.F.); -#4951 = ORIENTED_EDGE('',*,*,#4902,.T.); -#4952 = ORIENTED_EDGE('',*,*,#4881,.T.); -#4953 = ORIENTED_EDGE('',*,*,#4924,.F.); -#4954 = PLANE('',#4955); -#4955 = AXIS2_PLACEMENT_3D('',#4956,#4957,#4958); -#4956 = CARTESIAN_POINT('',(58.8,-37.2,152.)); -#4957 = DIRECTION('',(0.,0.,1.)); -#4958 = DIRECTION('',(1.,0.,-0.)); -#4959 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4963)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#4960,#4961,#4962)) REPRESENTATION_CONTEXT +#4875 = CARTESIAN_POINT('',(-7.5,39.45,80.384615384615)); +#4876 = CIRCLE('',#4877,1.); +#4877 = AXIS2_PLACEMENT_3D('',#4878,#4879,#4880); +#4878 = CARTESIAN_POINT('',(-7.5,39.45,81.384615384615)); +#4879 = DIRECTION('',(0.,-1.,0.)); +#4880 = DIRECTION('',(0.,-0.,-1.)); +#4881 = ORIENTED_EDGE('',*,*,#4882,.F.); +#4882 = EDGE_CURVE('',#4883,#4874,#4885,.T.); +#4883 = VERTEX_POINT('',#4884); +#4884 = CARTESIAN_POINT('',(-7.5,40.15,80.384615384615)); +#4885 = LINE('',#4886,#4887); +#4886 = CARTESIAN_POINT('',(-7.5,40.15,80.384615384615)); +#4887 = VECTOR('',#4888,1.); +#4888 = DIRECTION('',(0.,-1.,0.)); +#4889 = ORIENTED_EDGE('',*,*,#4890,.T.); +#4890 = EDGE_CURVE('',#4883,#4883,#4891,.T.); +#4891 = CIRCLE('',#4892,1.); +#4892 = AXIS2_PLACEMENT_3D('',#4893,#4894,#4895); +#4893 = CARTESIAN_POINT('',(-7.5,40.15,81.384615384615)); +#4894 = DIRECTION('',(0.,-1.,0.)); +#4895 = DIRECTION('',(0.,-0.,-1.)); +#4896 = ORIENTED_EDGE('',*,*,#4882,.T.); +#4897 = CYLINDRICAL_SURFACE('',#4898,1.); +#4898 = AXIS2_PLACEMENT_3D('',#4899,#4900,#4901); +#4899 = CARTESIAN_POINT('',(-7.5,40.15,81.384615384615)); +#4900 = DIRECTION('',(0.,-1.,0.)); +#4901 = DIRECTION('',(0.,-0.,-1.)); +#4902 = ADVANCED_FACE('',(#4903),#4906,.T.); +#4903 = FACE_BOUND('',#4904,.T.); +#4904 = EDGE_LOOP('',(#4905)); +#4905 = ORIENTED_EDGE('',*,*,#4873,.T.); +#4906 = PLANE('',#4907); +#4907 = AXIS2_PLACEMENT_3D('',#4908,#4909,#4910); +#4908 = CARTESIAN_POINT('',(-7.5,39.45,81.384615384615)); +#4909 = DIRECTION('',(0.,-1.,0.)); +#4910 = DIRECTION('',(0.,-0.,-1.)); +#4911 = ADVANCED_FACE('',(#4912),#4915,.F.); +#4912 = FACE_BOUND('',#4913,.T.); +#4913 = EDGE_LOOP('',(#4914)); +#4914 = ORIENTED_EDGE('',*,*,#4890,.F.); +#4915 = PLANE('',#4916); +#4916 = AXIS2_PLACEMENT_3D('',#4917,#4918,#4919); +#4917 = CARTESIAN_POINT('',(-7.5,40.15,81.384615384615)); +#4918 = DIRECTION('',(0.,-1.,0.)); +#4919 = DIRECTION('',(0.,-0.,-1.)); +#4920 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4924)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4921,#4922,#4923)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#4921 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4922 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4923 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4924 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4921, + 'distance_accuracy_value','confusion accuracy'); +#4925 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4926,#4928); +#4926 = ( REPRESENTATION_RELATIONSHIP('','',#4866,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4927) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#4927 = ITEM_DEFINED_TRANSFORMATION('','',#11,#191); +#4928 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4929); +#4929 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('45', + 'ConnectorBank_Right_Hole_R04_C02','',#5,#4861,$); +#4930 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4863)); +#4931 = SHAPE_DEFINITION_REPRESENTATION(#4932,#4938); +#4932 = PRODUCT_DEFINITION_SHAPE('','',#4933); +#4933 = PRODUCT_DEFINITION('design','',#4934,#4937); +#4934 = PRODUCT_DEFINITION_FORMATION('','',#4935); +#4935 = PRODUCT('ConnectorBank_Right_Hole_R04_C03', + 'ConnectorBank_Right_Hole_R04_C03','',(#4936)); +#4936 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4937 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4938 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4939),#4992); +#4939 = MANIFOLD_SOLID_BREP('',#4940); +#4940 = CLOSED_SHELL('',(#4941,#4974,#4983)); +#4941 = ADVANCED_FACE('',(#4942),#4969,.T.); +#4942 = FACE_BOUND('',#4943,.T.); +#4943 = EDGE_LOOP('',(#4944,#4953,#4961,#4968)); +#4944 = ORIENTED_EDGE('',*,*,#4945,.F.); +#4945 = EDGE_CURVE('',#4946,#4946,#4948,.T.); +#4946 = VERTEX_POINT('',#4947); +#4947 = CARTESIAN_POINT('',(-2.5,39.45,80.384615384615)); +#4948 = CIRCLE('',#4949,1.); +#4949 = AXIS2_PLACEMENT_3D('',#4950,#4951,#4952); +#4950 = CARTESIAN_POINT('',(-2.5,39.45,81.384615384615)); +#4951 = DIRECTION('',(0.,-1.,0.)); +#4952 = DIRECTION('',(0.,-0.,-1.)); +#4953 = ORIENTED_EDGE('',*,*,#4954,.F.); +#4954 = EDGE_CURVE('',#4955,#4946,#4957,.T.); +#4955 = VERTEX_POINT('',#4956); +#4956 = CARTESIAN_POINT('',(-2.5,40.15,80.384615384615)); +#4957 = LINE('',#4958,#4959); +#4958 = CARTESIAN_POINT('',(-2.5,40.15,80.384615384615)); +#4959 = VECTOR('',#4960,1.); +#4960 = DIRECTION('',(0.,-1.,0.)); +#4961 = ORIENTED_EDGE('',*,*,#4962,.T.); +#4962 = EDGE_CURVE('',#4955,#4955,#4963,.T.); +#4963 = CIRCLE('',#4964,1.); +#4964 = AXIS2_PLACEMENT_3D('',#4965,#4966,#4967); +#4965 = CARTESIAN_POINT('',(-2.5,40.15,81.384615384615)); +#4966 = DIRECTION('',(0.,-1.,0.)); +#4967 = DIRECTION('',(0.,-0.,-1.)); +#4968 = ORIENTED_EDGE('',*,*,#4954,.T.); +#4969 = CYLINDRICAL_SURFACE('',#4970,1.); +#4970 = AXIS2_PLACEMENT_3D('',#4971,#4972,#4973); +#4971 = CARTESIAN_POINT('',(-2.5,40.15,81.384615384615)); +#4972 = DIRECTION('',(0.,-1.,0.)); +#4973 = DIRECTION('',(0.,-0.,-1.)); +#4974 = ADVANCED_FACE('',(#4975),#4978,.T.); +#4975 = FACE_BOUND('',#4976,.T.); +#4976 = EDGE_LOOP('',(#4977)); +#4977 = ORIENTED_EDGE('',*,*,#4945,.T.); +#4978 = PLANE('',#4979); +#4979 = AXIS2_PLACEMENT_3D('',#4980,#4981,#4982); +#4980 = CARTESIAN_POINT('',(-2.5,39.45,81.384615384615)); +#4981 = DIRECTION('',(0.,-1.,0.)); +#4982 = DIRECTION('',(0.,-0.,-1.)); +#4983 = ADVANCED_FACE('',(#4984),#4987,.F.); +#4984 = FACE_BOUND('',#4985,.T.); +#4985 = EDGE_LOOP('',(#4986)); +#4986 = ORIENTED_EDGE('',*,*,#4962,.F.); +#4987 = PLANE('',#4988); +#4988 = AXIS2_PLACEMENT_3D('',#4989,#4990,#4991); +#4989 = CARTESIAN_POINT('',(-2.5,40.15,81.384615384615)); +#4990 = DIRECTION('',(0.,-1.,0.)); +#4991 = DIRECTION('',(0.,-0.,-1.)); +#4992 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4996)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4993,#4994,#4995)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#4960 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#4961 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#4962 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#4963 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4960, +#4993 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4994 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4995 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4996 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4993, 'distance_accuracy_value','confusion accuracy'); -#4964 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4965,#4967); -#4965 = ( REPRESENTATION_RELATIONSHIP('','',#4808,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4966) +#4997 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4998,#5000); +#4998 = ( REPRESENTATION_RELATIONSHIP('','',#4938,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4999) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#4966 = ITEM_DEFINED_TRANSFORMATION('','',#11,#191); -#4967 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #4968); -#4968 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('45', - 'ConnectorBank_Right_SideRailLeft','',#5,#4803,$); -#4969 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4805)); -#4970 = SHAPE_DEFINITION_REPRESENTATION(#4971,#4977); -#4971 = PRODUCT_DEFINITION_SHAPE('','',#4972); -#4972 = PRODUCT_DEFINITION('design','',#4973,#4976); -#4973 = PRODUCT_DEFINITION_FORMATION('','',#4974); -#4974 = PRODUCT('ConnectorBank_Right_SideRailRight', - 'ConnectorBank_Right_SideRailRight','',(#4975)); -#4975 = PRODUCT_CONTEXT('',#2,'mechanical'); -#4976 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#4977 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4978),#5128); -#4978 = MANIFOLD_SOLID_BREP('',#4979); -#4979 = CLOSED_SHELL('',(#4980,#5020,#5060,#5082,#5104,#5116)); -#4980 = ADVANCED_FACE('',(#4981),#5015,.F.); -#4981 = FACE_BOUND('',#4982,.F.); -#4982 = EDGE_LOOP('',(#4983,#4993,#5001,#5009)); -#4983 = ORIENTED_EDGE('',*,*,#4984,.F.); -#4984 = EDGE_CURVE('',#4985,#4987,#4989,.T.); -#4985 = VERTEX_POINT('',#4986); -#4986 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#4987 = VERTEX_POINT('',#4988); -#4988 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#4989 = LINE('',#4990,#4991); -#4990 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#4991 = VECTOR('',#4992,1.); -#4992 = DIRECTION('',(0.,0.,1.)); -#4993 = ORIENTED_EDGE('',*,*,#4994,.T.); -#4994 = EDGE_CURVE('',#4985,#4995,#4997,.T.); -#4995 = VERTEX_POINT('',#4996); -#4996 = CARTESIAN_POINT('',(80.,-32.8,50.)); -#4997 = LINE('',#4998,#4999); -#4998 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#4999 = VECTOR('',#5000,1.); -#5000 = DIRECTION('',(-0.,1.,0.)); -#5001 = ORIENTED_EDGE('',*,*,#5002,.T.); -#5002 = EDGE_CURVE('',#4995,#5003,#5005,.T.); -#5003 = VERTEX_POINT('',#5004); -#5004 = CARTESIAN_POINT('',(80.,-32.8,152.)); -#5005 = LINE('',#5006,#5007); -#5006 = CARTESIAN_POINT('',(80.,-32.8,50.)); -#5007 = VECTOR('',#5008,1.); -#5008 = DIRECTION('',(0.,0.,1.)); -#5009 = ORIENTED_EDGE('',*,*,#5010,.F.); -#5010 = EDGE_CURVE('',#4987,#5003,#5011,.T.); -#5011 = LINE('',#5012,#5013); -#5012 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#5013 = VECTOR('',#5014,1.); -#5014 = DIRECTION('',(-0.,1.,0.)); -#5015 = PLANE('',#5016); -#5016 = AXIS2_PLACEMENT_3D('',#5017,#5018,#5019); -#5017 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#5018 = DIRECTION('',(1.,0.,-0.)); -#5019 = DIRECTION('',(0.,0.,1.)); -#5020 = ADVANCED_FACE('',(#5021),#5055,.T.); -#5021 = FACE_BOUND('',#5022,.T.); -#5022 = EDGE_LOOP('',(#5023,#5033,#5041,#5049)); -#5023 = ORIENTED_EDGE('',*,*,#5024,.F.); -#5024 = EDGE_CURVE('',#5025,#5027,#5029,.T.); -#5025 = VERTEX_POINT('',#5026); -#5026 = CARTESIAN_POINT('',(81.2,-37.2,50.)); +#4999 = ITEM_DEFINED_TRANSFORMATION('','',#11,#195); +#5000 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5001); +#5001 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('46', + 'ConnectorBank_Right_Hole_R04_C03','',#5,#4933,$); +#5002 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4935)); +#5003 = SHAPE_DEFINITION_REPRESENTATION(#5004,#5010); +#5004 = PRODUCT_DEFINITION_SHAPE('','',#5005); +#5005 = PRODUCT_DEFINITION('design','',#5006,#5009); +#5006 = PRODUCT_DEFINITION_FORMATION('','',#5007); +#5007 = PRODUCT('ConnectorBank_Right_Hole_R05_C01', + 'ConnectorBank_Right_Hole_R05_C01','',(#5008)); +#5008 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5009 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5010 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5011),#5064); +#5011 = MANIFOLD_SOLID_BREP('',#5012); +#5012 = CLOSED_SHELL('',(#5013,#5046,#5055)); +#5013 = ADVANCED_FACE('',(#5014),#5041,.T.); +#5014 = FACE_BOUND('',#5015,.T.); +#5015 = EDGE_LOOP('',(#5016,#5025,#5033,#5040)); +#5016 = ORIENTED_EDGE('',*,*,#5017,.F.); +#5017 = EDGE_CURVE('',#5018,#5018,#5020,.T.); +#5018 = VERTEX_POINT('',#5019); +#5019 = CARTESIAN_POINT('',(-12.5,39.45,88.230769230769)); +#5020 = CIRCLE('',#5021,1.); +#5021 = AXIS2_PLACEMENT_3D('',#5022,#5023,#5024); +#5022 = CARTESIAN_POINT('',(-12.5,39.45,89.230769230769)); +#5023 = DIRECTION('',(0.,-1.,0.)); +#5024 = DIRECTION('',(0.,-0.,-1.)); +#5025 = ORIENTED_EDGE('',*,*,#5026,.F.); +#5026 = EDGE_CURVE('',#5027,#5018,#5029,.T.); #5027 = VERTEX_POINT('',#5028); -#5028 = CARTESIAN_POINT('',(81.2,-37.2,152.)); +#5028 = CARTESIAN_POINT('',(-12.5,40.15,88.230769230769)); #5029 = LINE('',#5030,#5031); -#5030 = CARTESIAN_POINT('',(81.2,-37.2,50.)); +#5030 = CARTESIAN_POINT('',(-12.5,40.15,88.230769230769)); #5031 = VECTOR('',#5032,1.); -#5032 = DIRECTION('',(0.,0.,1.)); +#5032 = DIRECTION('',(0.,-1.,0.)); #5033 = ORIENTED_EDGE('',*,*,#5034,.T.); -#5034 = EDGE_CURVE('',#5025,#5035,#5037,.T.); -#5035 = VERTEX_POINT('',#5036); -#5036 = CARTESIAN_POINT('',(81.2,-32.8,50.)); -#5037 = LINE('',#5038,#5039); -#5038 = CARTESIAN_POINT('',(81.2,-37.2,50.)); -#5039 = VECTOR('',#5040,1.); -#5040 = DIRECTION('',(-0.,1.,0.)); -#5041 = ORIENTED_EDGE('',*,*,#5042,.T.); -#5042 = EDGE_CURVE('',#5035,#5043,#5045,.T.); -#5043 = VERTEX_POINT('',#5044); -#5044 = CARTESIAN_POINT('',(81.2,-32.8,152.)); -#5045 = LINE('',#5046,#5047); -#5046 = CARTESIAN_POINT('',(81.2,-32.8,50.)); -#5047 = VECTOR('',#5048,1.); -#5048 = DIRECTION('',(0.,0.,1.)); -#5049 = ORIENTED_EDGE('',*,*,#5050,.F.); -#5050 = EDGE_CURVE('',#5027,#5043,#5051,.T.); -#5051 = LINE('',#5052,#5053); -#5052 = CARTESIAN_POINT('',(81.2,-37.2,152.)); -#5053 = VECTOR('',#5054,1.); -#5054 = DIRECTION('',(-0.,1.,0.)); -#5055 = PLANE('',#5056); -#5056 = AXIS2_PLACEMENT_3D('',#5057,#5058,#5059); -#5057 = CARTESIAN_POINT('',(81.2,-37.2,50.)); -#5058 = DIRECTION('',(1.,0.,-0.)); -#5059 = DIRECTION('',(0.,0.,1.)); -#5060 = ADVANCED_FACE('',(#5061),#5077,.F.); -#5061 = FACE_BOUND('',#5062,.F.); -#5062 = EDGE_LOOP('',(#5063,#5069,#5070,#5076)); -#5063 = ORIENTED_EDGE('',*,*,#5064,.F.); -#5064 = EDGE_CURVE('',#4985,#5025,#5065,.T.); -#5065 = LINE('',#5066,#5067); -#5066 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#5067 = VECTOR('',#5068,1.); -#5068 = DIRECTION('',(1.,0.,-0.)); -#5069 = ORIENTED_EDGE('',*,*,#4984,.T.); -#5070 = ORIENTED_EDGE('',*,*,#5071,.T.); -#5071 = EDGE_CURVE('',#4987,#5027,#5072,.T.); -#5072 = LINE('',#5073,#5074); -#5073 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#5074 = VECTOR('',#5075,1.); -#5075 = DIRECTION('',(1.,0.,-0.)); -#5076 = ORIENTED_EDGE('',*,*,#5024,.F.); -#5077 = PLANE('',#5078); -#5078 = AXIS2_PLACEMENT_3D('',#5079,#5080,#5081); -#5079 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#5080 = DIRECTION('',(-0.,1.,0.)); -#5081 = DIRECTION('',(0.,0.,1.)); -#5082 = ADVANCED_FACE('',(#5083),#5099,.T.); -#5083 = FACE_BOUND('',#5084,.T.); -#5084 = EDGE_LOOP('',(#5085,#5091,#5092,#5098)); -#5085 = ORIENTED_EDGE('',*,*,#5086,.F.); -#5086 = EDGE_CURVE('',#4995,#5035,#5087,.T.); -#5087 = LINE('',#5088,#5089); -#5088 = CARTESIAN_POINT('',(80.,-32.8,50.)); -#5089 = VECTOR('',#5090,1.); -#5090 = DIRECTION('',(1.,0.,-0.)); -#5091 = ORIENTED_EDGE('',*,*,#5002,.T.); -#5092 = ORIENTED_EDGE('',*,*,#5093,.T.); -#5093 = EDGE_CURVE('',#5003,#5043,#5094,.T.); -#5094 = LINE('',#5095,#5096); -#5095 = CARTESIAN_POINT('',(80.,-32.8,152.)); -#5096 = VECTOR('',#5097,1.); -#5097 = DIRECTION('',(1.,0.,-0.)); -#5098 = ORIENTED_EDGE('',*,*,#5042,.F.); -#5099 = PLANE('',#5100); -#5100 = AXIS2_PLACEMENT_3D('',#5101,#5102,#5103); -#5101 = CARTESIAN_POINT('',(80.,-32.8,50.)); -#5102 = DIRECTION('',(-0.,1.,0.)); -#5103 = DIRECTION('',(0.,0.,1.)); -#5104 = ADVANCED_FACE('',(#5105),#5111,.F.); -#5105 = FACE_BOUND('',#5106,.F.); -#5106 = EDGE_LOOP('',(#5107,#5108,#5109,#5110)); -#5107 = ORIENTED_EDGE('',*,*,#4994,.F.); -#5108 = ORIENTED_EDGE('',*,*,#5064,.T.); -#5109 = ORIENTED_EDGE('',*,*,#5034,.T.); -#5110 = ORIENTED_EDGE('',*,*,#5086,.F.); -#5111 = PLANE('',#5112); -#5112 = AXIS2_PLACEMENT_3D('',#5113,#5114,#5115); -#5113 = CARTESIAN_POINT('',(80.,-37.2,50.)); -#5114 = DIRECTION('',(0.,0.,1.)); -#5115 = DIRECTION('',(1.,0.,-0.)); -#5116 = ADVANCED_FACE('',(#5117),#5123,.T.); -#5117 = FACE_BOUND('',#5118,.T.); -#5118 = EDGE_LOOP('',(#5119,#5120,#5121,#5122)); -#5119 = ORIENTED_EDGE('',*,*,#5010,.F.); -#5120 = ORIENTED_EDGE('',*,*,#5071,.T.); -#5121 = ORIENTED_EDGE('',*,*,#5050,.T.); -#5122 = ORIENTED_EDGE('',*,*,#5093,.F.); -#5123 = PLANE('',#5124); -#5124 = AXIS2_PLACEMENT_3D('',#5125,#5126,#5127); -#5125 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#5126 = DIRECTION('',(0.,0.,1.)); -#5127 = DIRECTION('',(1.,0.,-0.)); -#5128 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5132)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5129,#5130,#5131)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5129 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5130 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5131 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5132 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5129, - 'distance_accuracy_value','confusion accuracy'); -#5133 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5134,#5136); -#5134 = ( REPRESENTATION_RELATIONSHIP('','',#4977,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5135) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5135 = ITEM_DEFINED_TRANSFORMATION('','',#11,#195); -#5136 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5137); -#5137 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('46', - 'ConnectorBank_Right_SideRailRight','',#5,#4972,$); -#5138 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4974)); -#5139 = SHAPE_DEFINITION_REPRESENTATION(#5140,#5146); -#5140 = PRODUCT_DEFINITION_SHAPE('','',#5141); -#5141 = PRODUCT_DEFINITION('design','',#5142,#5145); -#5142 = PRODUCT_DEFINITION_FORMATION('','',#5143); -#5143 = PRODUCT('ConnectorBank_Right_Hole_R01_C01', - 'ConnectorBank_Right_Hole_R01_C01','',(#5144)); -#5144 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5145 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5146 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5147),#5200); -#5147 = MANIFOLD_SOLID_BREP('',#5148); -#5148 = CLOSED_SHELL('',(#5149,#5182,#5191)); -#5149 = ADVANCED_FACE('',(#5150),#5177,.T.); -#5150 = FACE_BOUND('',#5151,.T.); -#5151 = EDGE_LOOP('',(#5152,#5161,#5169,#5176)); -#5152 = ORIENTED_EDGE('',*,*,#5153,.F.); -#5153 = EDGE_CURVE('',#5154,#5154,#5156,.T.); -#5154 = VERTEX_POINT('',#5155); -#5155 = CARTESIAN_POINT('',(65.,-37.85,56.846153846154)); -#5156 = CIRCLE('',#5157,1.); -#5157 = AXIS2_PLACEMENT_3D('',#5158,#5159,#5160); -#5158 = CARTESIAN_POINT('',(65.,-37.85,57.846153846154)); -#5159 = DIRECTION('',(0.,-1.,0.)); -#5160 = DIRECTION('',(0.,-0.,-1.)); -#5161 = ORIENTED_EDGE('',*,*,#5162,.F.); -#5162 = EDGE_CURVE('',#5163,#5154,#5165,.T.); -#5163 = VERTEX_POINT('',#5164); -#5164 = CARTESIAN_POINT('',(65.,-37.15,56.846153846154)); -#5165 = LINE('',#5166,#5167); -#5166 = CARTESIAN_POINT('',(65.,-37.15,56.846153846154)); -#5167 = VECTOR('',#5168,1.); -#5168 = DIRECTION('',(0.,-1.,0.)); -#5169 = ORIENTED_EDGE('',*,*,#5170,.T.); -#5170 = EDGE_CURVE('',#5163,#5163,#5171,.T.); -#5171 = CIRCLE('',#5172,1.); -#5172 = AXIS2_PLACEMENT_3D('',#5173,#5174,#5175); -#5173 = CARTESIAN_POINT('',(65.,-37.15,57.846153846154)); -#5174 = DIRECTION('',(0.,-1.,0.)); -#5175 = DIRECTION('',(0.,-0.,-1.)); -#5176 = ORIENTED_EDGE('',*,*,#5162,.T.); -#5177 = CYLINDRICAL_SURFACE('',#5178,1.); -#5178 = AXIS2_PLACEMENT_3D('',#5179,#5180,#5181); -#5179 = CARTESIAN_POINT('',(65.,-37.15,57.846153846154)); -#5180 = DIRECTION('',(0.,-1.,0.)); -#5181 = DIRECTION('',(0.,-0.,-1.)); -#5182 = ADVANCED_FACE('',(#5183),#5186,.T.); -#5183 = FACE_BOUND('',#5184,.T.); -#5184 = EDGE_LOOP('',(#5185)); -#5185 = ORIENTED_EDGE('',*,*,#5153,.T.); -#5186 = PLANE('',#5187); -#5187 = AXIS2_PLACEMENT_3D('',#5188,#5189,#5190); -#5188 = CARTESIAN_POINT('',(65.,-37.85,57.846153846154)); -#5189 = DIRECTION('',(0.,-1.,0.)); -#5190 = DIRECTION('',(0.,-0.,-1.)); -#5191 = ADVANCED_FACE('',(#5192),#5195,.F.); -#5192 = FACE_BOUND('',#5193,.T.); -#5193 = EDGE_LOOP('',(#5194)); -#5194 = ORIENTED_EDGE('',*,*,#5170,.F.); -#5195 = PLANE('',#5196); -#5196 = AXIS2_PLACEMENT_3D('',#5197,#5198,#5199); -#5197 = CARTESIAN_POINT('',(65.,-37.15,57.846153846154)); -#5198 = DIRECTION('',(0.,-1.,0.)); -#5199 = DIRECTION('',(0.,-0.,-1.)); -#5200 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5204)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5201,#5202,#5203)) REPRESENTATION_CONTEXT +#5034 = EDGE_CURVE('',#5027,#5027,#5035,.T.); +#5035 = CIRCLE('',#5036,1.); +#5036 = AXIS2_PLACEMENT_3D('',#5037,#5038,#5039); +#5037 = CARTESIAN_POINT('',(-12.5,40.15,89.230769230769)); +#5038 = DIRECTION('',(0.,-1.,0.)); +#5039 = DIRECTION('',(0.,-0.,-1.)); +#5040 = ORIENTED_EDGE('',*,*,#5026,.T.); +#5041 = CYLINDRICAL_SURFACE('',#5042,1.); +#5042 = AXIS2_PLACEMENT_3D('',#5043,#5044,#5045); +#5043 = CARTESIAN_POINT('',(-12.5,40.15,89.230769230769)); +#5044 = DIRECTION('',(0.,-1.,0.)); +#5045 = DIRECTION('',(0.,-0.,-1.)); +#5046 = ADVANCED_FACE('',(#5047),#5050,.T.); +#5047 = FACE_BOUND('',#5048,.T.); +#5048 = EDGE_LOOP('',(#5049)); +#5049 = ORIENTED_EDGE('',*,*,#5017,.T.); +#5050 = PLANE('',#5051); +#5051 = AXIS2_PLACEMENT_3D('',#5052,#5053,#5054); +#5052 = CARTESIAN_POINT('',(-12.5,39.45,89.230769230769)); +#5053 = DIRECTION('',(0.,-1.,0.)); +#5054 = DIRECTION('',(0.,-0.,-1.)); +#5055 = ADVANCED_FACE('',(#5056),#5059,.F.); +#5056 = FACE_BOUND('',#5057,.T.); +#5057 = EDGE_LOOP('',(#5058)); +#5058 = ORIENTED_EDGE('',*,*,#5034,.F.); +#5059 = PLANE('',#5060); +#5060 = AXIS2_PLACEMENT_3D('',#5061,#5062,#5063); +#5061 = CARTESIAN_POINT('',(-12.5,40.15,89.230769230769)); +#5062 = DIRECTION('',(0.,-1.,0.)); +#5063 = DIRECTION('',(0.,-0.,-1.)); +#5064 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5068)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5065,#5066,#5067)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5201 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5202 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5203 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5204 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5201, +#5065 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5066 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5067 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5068 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5065, 'distance_accuracy_value','confusion accuracy'); -#5205 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5206,#5208); -#5206 = ( REPRESENTATION_RELATIONSHIP('','',#5146,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5207) +#5069 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5070,#5072); +#5070 = ( REPRESENTATION_RELATIONSHIP('','',#5010,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5071) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5207 = ITEM_DEFINED_TRANSFORMATION('','',#11,#199); -#5208 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5209); -#5209 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('47', - 'ConnectorBank_Right_Hole_R01_C01','',#5,#5141,$); -#5210 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5143)); -#5211 = SHAPE_DEFINITION_REPRESENTATION(#5212,#5218); -#5212 = PRODUCT_DEFINITION_SHAPE('','',#5213); -#5213 = PRODUCT_DEFINITION('design','',#5214,#5217); -#5214 = PRODUCT_DEFINITION_FORMATION('','',#5215); -#5215 = PRODUCT('ConnectorBank_Right_Screw_R01', - 'ConnectorBank_Right_Screw_R01','',(#5216)); -#5216 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5217 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5218 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5219),#5272); -#5219 = MANIFOLD_SOLID_BREP('',#5220); -#5220 = CLOSED_SHELL('',(#5221,#5254,#5263)); -#5221 = ADVANCED_FACE('',(#5222),#5249,.T.); -#5222 = FACE_BOUND('',#5223,.T.); -#5223 = EDGE_LOOP('',(#5224,#5233,#5241,#5248)); -#5224 = ORIENTED_EDGE('',*,*,#5225,.F.); -#5225 = EDGE_CURVE('',#5226,#5226,#5228,.T.); -#5226 = VERTEX_POINT('',#5227); -#5227 = CARTESIAN_POINT('',(82.6,-37.95,57.296153846154)); -#5228 = CIRCLE('',#5229,0.55); -#5229 = AXIS2_PLACEMENT_3D('',#5230,#5231,#5232); -#5230 = CARTESIAN_POINT('',(82.6,-37.95,57.846153846154)); -#5231 = DIRECTION('',(0.,-1.,0.)); -#5232 = DIRECTION('',(0.,-0.,-1.)); -#5233 = ORIENTED_EDGE('',*,*,#5234,.F.); -#5234 = EDGE_CURVE('',#5235,#5226,#5237,.T.); -#5235 = VERTEX_POINT('',#5236); -#5236 = CARTESIAN_POINT('',(82.6,-37.15,57.296153846154)); -#5237 = LINE('',#5238,#5239); -#5238 = CARTESIAN_POINT('',(82.6,-37.15,57.296153846154)); -#5239 = VECTOR('',#5240,1.); -#5240 = DIRECTION('',(0.,-1.,0.)); -#5241 = ORIENTED_EDGE('',*,*,#5242,.T.); -#5242 = EDGE_CURVE('',#5235,#5235,#5243,.T.); -#5243 = CIRCLE('',#5244,0.55); -#5244 = AXIS2_PLACEMENT_3D('',#5245,#5246,#5247); -#5245 = CARTESIAN_POINT('',(82.6,-37.15,57.846153846154)); -#5246 = DIRECTION('',(0.,-1.,0.)); -#5247 = DIRECTION('',(0.,-0.,-1.)); -#5248 = ORIENTED_EDGE('',*,*,#5234,.T.); -#5249 = CYLINDRICAL_SURFACE('',#5250,0.55); -#5250 = AXIS2_PLACEMENT_3D('',#5251,#5252,#5253); -#5251 = CARTESIAN_POINT('',(82.6,-37.15,57.846153846154)); -#5252 = DIRECTION('',(0.,-1.,0.)); -#5253 = DIRECTION('',(0.,-0.,-1.)); -#5254 = ADVANCED_FACE('',(#5255),#5258,.T.); -#5255 = FACE_BOUND('',#5256,.T.); -#5256 = EDGE_LOOP('',(#5257)); -#5257 = ORIENTED_EDGE('',*,*,#5225,.T.); -#5258 = PLANE('',#5259); -#5259 = AXIS2_PLACEMENT_3D('',#5260,#5261,#5262); -#5260 = CARTESIAN_POINT('',(82.6,-37.95,57.846153846154)); -#5261 = DIRECTION('',(0.,-1.,0.)); -#5262 = DIRECTION('',(0.,-0.,-1.)); -#5263 = ADVANCED_FACE('',(#5264),#5267,.F.); -#5264 = FACE_BOUND('',#5265,.T.); -#5265 = EDGE_LOOP('',(#5266)); -#5266 = ORIENTED_EDGE('',*,*,#5242,.F.); -#5267 = PLANE('',#5268); -#5268 = AXIS2_PLACEMENT_3D('',#5269,#5270,#5271); -#5269 = CARTESIAN_POINT('',(82.6,-37.15,57.846153846154)); -#5270 = DIRECTION('',(0.,-1.,0.)); -#5271 = DIRECTION('',(0.,-0.,-1.)); -#5272 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5276)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5273,#5274,#5275)) REPRESENTATION_CONTEXT +#5071 = ITEM_DEFINED_TRANSFORMATION('','',#11,#199); +#5072 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5073); +#5073 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('47', + 'ConnectorBank_Right_Hole_R05_C01','',#5,#5005,$); +#5074 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5007)); +#5075 = SHAPE_DEFINITION_REPRESENTATION(#5076,#5082); +#5076 = PRODUCT_DEFINITION_SHAPE('','',#5077); +#5077 = PRODUCT_DEFINITION('design','',#5078,#5081); +#5078 = PRODUCT_DEFINITION_FORMATION('','',#5079); +#5079 = PRODUCT('ConnectorBank_Right_Hole_R05_C02', + 'ConnectorBank_Right_Hole_R05_C02','',(#5080)); +#5080 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5081 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5082 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5083),#5136); +#5083 = MANIFOLD_SOLID_BREP('',#5084); +#5084 = CLOSED_SHELL('',(#5085,#5118,#5127)); +#5085 = ADVANCED_FACE('',(#5086),#5113,.T.); +#5086 = FACE_BOUND('',#5087,.T.); +#5087 = EDGE_LOOP('',(#5088,#5097,#5105,#5112)); +#5088 = ORIENTED_EDGE('',*,*,#5089,.F.); +#5089 = EDGE_CURVE('',#5090,#5090,#5092,.T.); +#5090 = VERTEX_POINT('',#5091); +#5091 = CARTESIAN_POINT('',(-7.5,39.45,88.230769230769)); +#5092 = CIRCLE('',#5093,1.); +#5093 = AXIS2_PLACEMENT_3D('',#5094,#5095,#5096); +#5094 = CARTESIAN_POINT('',(-7.5,39.45,89.230769230769)); +#5095 = DIRECTION('',(0.,-1.,0.)); +#5096 = DIRECTION('',(0.,-0.,-1.)); +#5097 = ORIENTED_EDGE('',*,*,#5098,.F.); +#5098 = EDGE_CURVE('',#5099,#5090,#5101,.T.); +#5099 = VERTEX_POINT('',#5100); +#5100 = CARTESIAN_POINT('',(-7.5,40.15,88.230769230769)); +#5101 = LINE('',#5102,#5103); +#5102 = CARTESIAN_POINT('',(-7.5,40.15,88.230769230769)); +#5103 = VECTOR('',#5104,1.); +#5104 = DIRECTION('',(0.,-1.,0.)); +#5105 = ORIENTED_EDGE('',*,*,#5106,.T.); +#5106 = EDGE_CURVE('',#5099,#5099,#5107,.T.); +#5107 = CIRCLE('',#5108,1.); +#5108 = AXIS2_PLACEMENT_3D('',#5109,#5110,#5111); +#5109 = CARTESIAN_POINT('',(-7.5,40.15,89.230769230769)); +#5110 = DIRECTION('',(0.,-1.,0.)); +#5111 = DIRECTION('',(0.,-0.,-1.)); +#5112 = ORIENTED_EDGE('',*,*,#5098,.T.); +#5113 = CYLINDRICAL_SURFACE('',#5114,1.); +#5114 = AXIS2_PLACEMENT_3D('',#5115,#5116,#5117); +#5115 = CARTESIAN_POINT('',(-7.5,40.15,89.230769230769)); +#5116 = DIRECTION('',(0.,-1.,0.)); +#5117 = DIRECTION('',(0.,-0.,-1.)); +#5118 = ADVANCED_FACE('',(#5119),#5122,.T.); +#5119 = FACE_BOUND('',#5120,.T.); +#5120 = EDGE_LOOP('',(#5121)); +#5121 = ORIENTED_EDGE('',*,*,#5089,.T.); +#5122 = PLANE('',#5123); +#5123 = AXIS2_PLACEMENT_3D('',#5124,#5125,#5126); +#5124 = CARTESIAN_POINT('',(-7.5,39.45,89.230769230769)); +#5125 = DIRECTION('',(0.,-1.,0.)); +#5126 = DIRECTION('',(0.,-0.,-1.)); +#5127 = ADVANCED_FACE('',(#5128),#5131,.F.); +#5128 = FACE_BOUND('',#5129,.T.); +#5129 = EDGE_LOOP('',(#5130)); +#5130 = ORIENTED_EDGE('',*,*,#5106,.F.); +#5131 = PLANE('',#5132); +#5132 = AXIS2_PLACEMENT_3D('',#5133,#5134,#5135); +#5133 = CARTESIAN_POINT('',(-7.5,40.15,89.230769230769)); +#5134 = DIRECTION('',(0.,-1.,0.)); +#5135 = DIRECTION('',(0.,-0.,-1.)); +#5136 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5140)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5137,#5138,#5139)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5273 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5274 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5275 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5276 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5273, +#5137 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5138 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5139 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5140 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5137, 'distance_accuracy_value','confusion accuracy'); -#5277 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5278,#5280); -#5278 = ( REPRESENTATION_RELATIONSHIP('','',#5218,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5279) +#5141 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5142,#5144); +#5142 = ( REPRESENTATION_RELATIONSHIP('','',#5082,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5143) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5279 = ITEM_DEFINED_TRANSFORMATION('','',#11,#203); -#5280 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5281); -#5281 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('48', - 'ConnectorBank_Right_Screw_R01','',#5,#5213,$); -#5282 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5215)); -#5283 = SHAPE_DEFINITION_REPRESENTATION(#5284,#5290); -#5284 = PRODUCT_DEFINITION_SHAPE('','',#5285); -#5285 = PRODUCT_DEFINITION('design','',#5286,#5289); -#5286 = PRODUCT_DEFINITION_FORMATION('','',#5287); -#5287 = PRODUCT('ConnectorBank_Right_Hole_R01_C02', - 'ConnectorBank_Right_Hole_R01_C02','',(#5288)); -#5288 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5289 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5290 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5291),#5344); -#5291 = MANIFOLD_SOLID_BREP('',#5292); -#5292 = CLOSED_SHELL('',(#5293,#5326,#5335)); -#5293 = ADVANCED_FACE('',(#5294),#5321,.T.); -#5294 = FACE_BOUND('',#5295,.T.); -#5295 = EDGE_LOOP('',(#5296,#5305,#5313,#5320)); -#5296 = ORIENTED_EDGE('',*,*,#5297,.F.); -#5297 = EDGE_CURVE('',#5298,#5298,#5300,.T.); -#5298 = VERTEX_POINT('',#5299); -#5299 = CARTESIAN_POINT('',(70.,-37.85,56.846153846154)); -#5300 = CIRCLE('',#5301,1.); -#5301 = AXIS2_PLACEMENT_3D('',#5302,#5303,#5304); -#5302 = CARTESIAN_POINT('',(70.,-37.85,57.846153846154)); -#5303 = DIRECTION('',(0.,-1.,0.)); -#5304 = DIRECTION('',(0.,-0.,-1.)); -#5305 = ORIENTED_EDGE('',*,*,#5306,.F.); -#5306 = EDGE_CURVE('',#5307,#5298,#5309,.T.); -#5307 = VERTEX_POINT('',#5308); -#5308 = CARTESIAN_POINT('',(70.,-37.15,56.846153846154)); -#5309 = LINE('',#5310,#5311); -#5310 = CARTESIAN_POINT('',(70.,-37.15,56.846153846154)); -#5311 = VECTOR('',#5312,1.); -#5312 = DIRECTION('',(0.,-1.,0.)); -#5313 = ORIENTED_EDGE('',*,*,#5314,.T.); -#5314 = EDGE_CURVE('',#5307,#5307,#5315,.T.); -#5315 = CIRCLE('',#5316,1.); -#5316 = AXIS2_PLACEMENT_3D('',#5317,#5318,#5319); -#5317 = CARTESIAN_POINT('',(70.,-37.15,57.846153846154)); -#5318 = DIRECTION('',(0.,-1.,0.)); -#5319 = DIRECTION('',(0.,-0.,-1.)); -#5320 = ORIENTED_EDGE('',*,*,#5306,.T.); -#5321 = CYLINDRICAL_SURFACE('',#5322,1.); -#5322 = AXIS2_PLACEMENT_3D('',#5323,#5324,#5325); -#5323 = CARTESIAN_POINT('',(70.,-37.15,57.846153846154)); -#5324 = DIRECTION('',(0.,-1.,0.)); -#5325 = DIRECTION('',(0.,-0.,-1.)); -#5326 = ADVANCED_FACE('',(#5327),#5330,.T.); -#5327 = FACE_BOUND('',#5328,.T.); -#5328 = EDGE_LOOP('',(#5329)); -#5329 = ORIENTED_EDGE('',*,*,#5297,.T.); -#5330 = PLANE('',#5331); -#5331 = AXIS2_PLACEMENT_3D('',#5332,#5333,#5334); -#5332 = CARTESIAN_POINT('',(70.,-37.85,57.846153846154)); -#5333 = DIRECTION('',(0.,-1.,0.)); -#5334 = DIRECTION('',(0.,-0.,-1.)); -#5335 = ADVANCED_FACE('',(#5336),#5339,.F.); -#5336 = FACE_BOUND('',#5337,.T.); -#5337 = EDGE_LOOP('',(#5338)); -#5338 = ORIENTED_EDGE('',*,*,#5314,.F.); -#5339 = PLANE('',#5340); -#5340 = AXIS2_PLACEMENT_3D('',#5341,#5342,#5343); -#5341 = CARTESIAN_POINT('',(70.,-37.15,57.846153846154)); -#5342 = DIRECTION('',(0.,-1.,0.)); -#5343 = DIRECTION('',(0.,-0.,-1.)); -#5344 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5348)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5345,#5346,#5347)) REPRESENTATION_CONTEXT +#5143 = ITEM_DEFINED_TRANSFORMATION('','',#11,#203); +#5144 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5145); +#5145 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('48', + 'ConnectorBank_Right_Hole_R05_C02','',#5,#5077,$); +#5146 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5079)); +#5147 = SHAPE_DEFINITION_REPRESENTATION(#5148,#5154); +#5148 = PRODUCT_DEFINITION_SHAPE('','',#5149); +#5149 = PRODUCT_DEFINITION('design','',#5150,#5153); +#5150 = PRODUCT_DEFINITION_FORMATION('','',#5151); +#5151 = PRODUCT('ConnectorBank_Right_Hole_R05_C03', + 'ConnectorBank_Right_Hole_R05_C03','',(#5152)); +#5152 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5153 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5154 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5155),#5208); +#5155 = MANIFOLD_SOLID_BREP('',#5156); +#5156 = CLOSED_SHELL('',(#5157,#5190,#5199)); +#5157 = ADVANCED_FACE('',(#5158),#5185,.T.); +#5158 = FACE_BOUND('',#5159,.T.); +#5159 = EDGE_LOOP('',(#5160,#5169,#5177,#5184)); +#5160 = ORIENTED_EDGE('',*,*,#5161,.F.); +#5161 = EDGE_CURVE('',#5162,#5162,#5164,.T.); +#5162 = VERTEX_POINT('',#5163); +#5163 = CARTESIAN_POINT('',(-2.5,39.45,88.230769230769)); +#5164 = CIRCLE('',#5165,1.); +#5165 = AXIS2_PLACEMENT_3D('',#5166,#5167,#5168); +#5166 = CARTESIAN_POINT('',(-2.5,39.45,89.230769230769)); +#5167 = DIRECTION('',(0.,-1.,0.)); +#5168 = DIRECTION('',(0.,-0.,-1.)); +#5169 = ORIENTED_EDGE('',*,*,#5170,.F.); +#5170 = EDGE_CURVE('',#5171,#5162,#5173,.T.); +#5171 = VERTEX_POINT('',#5172); +#5172 = CARTESIAN_POINT('',(-2.5,40.15,88.230769230769)); +#5173 = LINE('',#5174,#5175); +#5174 = CARTESIAN_POINT('',(-2.5,40.15,88.230769230769)); +#5175 = VECTOR('',#5176,1.); +#5176 = DIRECTION('',(0.,-1.,0.)); +#5177 = ORIENTED_EDGE('',*,*,#5178,.T.); +#5178 = EDGE_CURVE('',#5171,#5171,#5179,.T.); +#5179 = CIRCLE('',#5180,1.); +#5180 = AXIS2_PLACEMENT_3D('',#5181,#5182,#5183); +#5181 = CARTESIAN_POINT('',(-2.5,40.15,89.230769230769)); +#5182 = DIRECTION('',(0.,-1.,0.)); +#5183 = DIRECTION('',(0.,-0.,-1.)); +#5184 = ORIENTED_EDGE('',*,*,#5170,.T.); +#5185 = CYLINDRICAL_SURFACE('',#5186,1.); +#5186 = AXIS2_PLACEMENT_3D('',#5187,#5188,#5189); +#5187 = CARTESIAN_POINT('',(-2.5,40.15,89.230769230769)); +#5188 = DIRECTION('',(0.,-1.,0.)); +#5189 = DIRECTION('',(0.,-0.,-1.)); +#5190 = ADVANCED_FACE('',(#5191),#5194,.T.); +#5191 = FACE_BOUND('',#5192,.T.); +#5192 = EDGE_LOOP('',(#5193)); +#5193 = ORIENTED_EDGE('',*,*,#5161,.T.); +#5194 = PLANE('',#5195); +#5195 = AXIS2_PLACEMENT_3D('',#5196,#5197,#5198); +#5196 = CARTESIAN_POINT('',(-2.5,39.45,89.230769230769)); +#5197 = DIRECTION('',(0.,-1.,0.)); +#5198 = DIRECTION('',(0.,-0.,-1.)); +#5199 = ADVANCED_FACE('',(#5200),#5203,.F.); +#5200 = FACE_BOUND('',#5201,.T.); +#5201 = EDGE_LOOP('',(#5202)); +#5202 = ORIENTED_EDGE('',*,*,#5178,.F.); +#5203 = PLANE('',#5204); +#5204 = AXIS2_PLACEMENT_3D('',#5205,#5206,#5207); +#5205 = CARTESIAN_POINT('',(-2.5,40.15,89.230769230769)); +#5206 = DIRECTION('',(0.,-1.,0.)); +#5207 = DIRECTION('',(0.,-0.,-1.)); +#5208 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5212)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5209,#5210,#5211)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5345 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5346 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5347 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5348 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5345, +#5209 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5210 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5211 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5212 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5209, 'distance_accuracy_value','confusion accuracy'); -#5349 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5350,#5352); -#5350 = ( REPRESENTATION_RELATIONSHIP('','',#5290,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5351) +#5213 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5214,#5216); +#5214 = ( REPRESENTATION_RELATIONSHIP('','',#5154,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5215) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5351 = ITEM_DEFINED_TRANSFORMATION('','',#11,#207); -#5352 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5353); -#5353 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('49', - 'ConnectorBank_Right_Hole_R01_C02','',#5,#5285,$); -#5354 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5287)); -#5355 = SHAPE_DEFINITION_REPRESENTATION(#5356,#5362); -#5356 = PRODUCT_DEFINITION_SHAPE('','',#5357); -#5357 = PRODUCT_DEFINITION('design','',#5358,#5361); -#5358 = PRODUCT_DEFINITION_FORMATION('','',#5359); -#5359 = PRODUCT('ConnectorBank_Right_Hole_R01_C03', - 'ConnectorBank_Right_Hole_R01_C03','',(#5360)); -#5360 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5361 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5362 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5363),#5416); -#5363 = MANIFOLD_SOLID_BREP('',#5364); -#5364 = CLOSED_SHELL('',(#5365,#5398,#5407)); -#5365 = ADVANCED_FACE('',(#5366),#5393,.T.); -#5366 = FACE_BOUND('',#5367,.T.); -#5367 = EDGE_LOOP('',(#5368,#5377,#5385,#5392)); -#5368 = ORIENTED_EDGE('',*,*,#5369,.F.); -#5369 = EDGE_CURVE('',#5370,#5370,#5372,.T.); -#5370 = VERTEX_POINT('',#5371); -#5371 = CARTESIAN_POINT('',(75.,-37.85,56.846153846154)); -#5372 = CIRCLE('',#5373,1.); -#5373 = AXIS2_PLACEMENT_3D('',#5374,#5375,#5376); -#5374 = CARTESIAN_POINT('',(75.,-37.85,57.846153846154)); -#5375 = DIRECTION('',(0.,-1.,0.)); -#5376 = DIRECTION('',(0.,-0.,-1.)); -#5377 = ORIENTED_EDGE('',*,*,#5378,.F.); -#5378 = EDGE_CURVE('',#5379,#5370,#5381,.T.); -#5379 = VERTEX_POINT('',#5380); -#5380 = CARTESIAN_POINT('',(75.,-37.15,56.846153846154)); -#5381 = LINE('',#5382,#5383); -#5382 = CARTESIAN_POINT('',(75.,-37.15,56.846153846154)); -#5383 = VECTOR('',#5384,1.); -#5384 = DIRECTION('',(0.,-1.,0.)); -#5385 = ORIENTED_EDGE('',*,*,#5386,.T.); -#5386 = EDGE_CURVE('',#5379,#5379,#5387,.T.); -#5387 = CIRCLE('',#5388,1.); -#5388 = AXIS2_PLACEMENT_3D('',#5389,#5390,#5391); -#5389 = CARTESIAN_POINT('',(75.,-37.15,57.846153846154)); -#5390 = DIRECTION('',(0.,-1.,0.)); -#5391 = DIRECTION('',(0.,-0.,-1.)); -#5392 = ORIENTED_EDGE('',*,*,#5378,.T.); -#5393 = CYLINDRICAL_SURFACE('',#5394,1.); -#5394 = AXIS2_PLACEMENT_3D('',#5395,#5396,#5397); -#5395 = CARTESIAN_POINT('',(75.,-37.15,57.846153846154)); -#5396 = DIRECTION('',(0.,-1.,0.)); -#5397 = DIRECTION('',(0.,-0.,-1.)); -#5398 = ADVANCED_FACE('',(#5399),#5402,.T.); -#5399 = FACE_BOUND('',#5400,.T.); -#5400 = EDGE_LOOP('',(#5401)); -#5401 = ORIENTED_EDGE('',*,*,#5369,.T.); -#5402 = PLANE('',#5403); -#5403 = AXIS2_PLACEMENT_3D('',#5404,#5405,#5406); -#5404 = CARTESIAN_POINT('',(75.,-37.85,57.846153846154)); -#5405 = DIRECTION('',(0.,-1.,0.)); -#5406 = DIRECTION('',(0.,-0.,-1.)); -#5407 = ADVANCED_FACE('',(#5408),#5411,.F.); -#5408 = FACE_BOUND('',#5409,.T.); -#5409 = EDGE_LOOP('',(#5410)); -#5410 = ORIENTED_EDGE('',*,*,#5386,.F.); -#5411 = PLANE('',#5412); -#5412 = AXIS2_PLACEMENT_3D('',#5413,#5414,#5415); -#5413 = CARTESIAN_POINT('',(75.,-37.15,57.846153846154)); -#5414 = DIRECTION('',(0.,-1.,0.)); -#5415 = DIRECTION('',(0.,-0.,-1.)); -#5416 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5420)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5417,#5418,#5419)) REPRESENTATION_CONTEXT +#5215 = ITEM_DEFINED_TRANSFORMATION('','',#11,#207); +#5216 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5217); +#5217 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('49', + 'ConnectorBank_Right_Hole_R05_C03','',#5,#5149,$); +#5218 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5151)); +#5219 = SHAPE_DEFINITION_REPRESENTATION(#5220,#5226); +#5220 = PRODUCT_DEFINITION_SHAPE('','',#5221); +#5221 = PRODUCT_DEFINITION('design','',#5222,#5225); +#5222 = PRODUCT_DEFINITION_FORMATION('','',#5223); +#5223 = PRODUCT('ConnectorBank_Right_Hole_R06_C01', + 'ConnectorBank_Right_Hole_R06_C01','',(#5224)); +#5224 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5225 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5226 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5227),#5280); +#5227 = MANIFOLD_SOLID_BREP('',#5228); +#5228 = CLOSED_SHELL('',(#5229,#5262,#5271)); +#5229 = ADVANCED_FACE('',(#5230),#5257,.T.); +#5230 = FACE_BOUND('',#5231,.T.); +#5231 = EDGE_LOOP('',(#5232,#5241,#5249,#5256)); +#5232 = ORIENTED_EDGE('',*,*,#5233,.F.); +#5233 = EDGE_CURVE('',#5234,#5234,#5236,.T.); +#5234 = VERTEX_POINT('',#5235); +#5235 = CARTESIAN_POINT('',(-12.5,39.45,96.076923076923)); +#5236 = CIRCLE('',#5237,1.); +#5237 = AXIS2_PLACEMENT_3D('',#5238,#5239,#5240); +#5238 = CARTESIAN_POINT('',(-12.5,39.45,97.076923076923)); +#5239 = DIRECTION('',(0.,-1.,0.)); +#5240 = DIRECTION('',(0.,-0.,-1.)); +#5241 = ORIENTED_EDGE('',*,*,#5242,.F.); +#5242 = EDGE_CURVE('',#5243,#5234,#5245,.T.); +#5243 = VERTEX_POINT('',#5244); +#5244 = CARTESIAN_POINT('',(-12.5,40.15,96.076923076923)); +#5245 = LINE('',#5246,#5247); +#5246 = CARTESIAN_POINT('',(-12.5,40.15,96.076923076923)); +#5247 = VECTOR('',#5248,1.); +#5248 = DIRECTION('',(0.,-1.,0.)); +#5249 = ORIENTED_EDGE('',*,*,#5250,.T.); +#5250 = EDGE_CURVE('',#5243,#5243,#5251,.T.); +#5251 = CIRCLE('',#5252,1.); +#5252 = AXIS2_PLACEMENT_3D('',#5253,#5254,#5255); +#5253 = CARTESIAN_POINT('',(-12.5,40.15,97.076923076923)); +#5254 = DIRECTION('',(0.,-1.,0.)); +#5255 = DIRECTION('',(0.,-0.,-1.)); +#5256 = ORIENTED_EDGE('',*,*,#5242,.T.); +#5257 = CYLINDRICAL_SURFACE('',#5258,1.); +#5258 = AXIS2_PLACEMENT_3D('',#5259,#5260,#5261); +#5259 = CARTESIAN_POINT('',(-12.5,40.15,97.076923076923)); +#5260 = DIRECTION('',(0.,-1.,0.)); +#5261 = DIRECTION('',(0.,-0.,-1.)); +#5262 = ADVANCED_FACE('',(#5263),#5266,.T.); +#5263 = FACE_BOUND('',#5264,.T.); +#5264 = EDGE_LOOP('',(#5265)); +#5265 = ORIENTED_EDGE('',*,*,#5233,.T.); +#5266 = PLANE('',#5267); +#5267 = AXIS2_PLACEMENT_3D('',#5268,#5269,#5270); +#5268 = CARTESIAN_POINT('',(-12.5,39.45,97.076923076923)); +#5269 = DIRECTION('',(0.,-1.,0.)); +#5270 = DIRECTION('',(0.,-0.,-1.)); +#5271 = ADVANCED_FACE('',(#5272),#5275,.F.); +#5272 = FACE_BOUND('',#5273,.T.); +#5273 = EDGE_LOOP('',(#5274)); +#5274 = ORIENTED_EDGE('',*,*,#5250,.F.); +#5275 = PLANE('',#5276); +#5276 = AXIS2_PLACEMENT_3D('',#5277,#5278,#5279); +#5277 = CARTESIAN_POINT('',(-12.5,40.15,97.076923076923)); +#5278 = DIRECTION('',(0.,-1.,0.)); +#5279 = DIRECTION('',(0.,-0.,-1.)); +#5280 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5284)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5281,#5282,#5283)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5417 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5418 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5419 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5420 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5417, +#5281 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5282 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5283 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5284 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5281, 'distance_accuracy_value','confusion accuracy'); -#5421 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5422,#5424); -#5422 = ( REPRESENTATION_RELATIONSHIP('','',#5362,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5423) +#5285 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5286,#5288); +#5286 = ( REPRESENTATION_RELATIONSHIP('','',#5226,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5287) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5423 = ITEM_DEFINED_TRANSFORMATION('','',#11,#211); -#5424 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5425); -#5425 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('50', - 'ConnectorBank_Right_Hole_R01_C03','',#5,#5357,$); -#5426 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5359)); -#5427 = SHAPE_DEFINITION_REPRESENTATION(#5428,#5434); -#5428 = PRODUCT_DEFINITION_SHAPE('','',#5429); -#5429 = PRODUCT_DEFINITION('design','',#5430,#5433); -#5430 = PRODUCT_DEFINITION_FORMATION('','',#5431); -#5431 = PRODUCT('ConnectorBank_Right_Hole_R02_C01', - 'ConnectorBank_Right_Hole_R02_C01','',(#5432)); -#5432 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5433 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5434 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5435),#5488); -#5435 = MANIFOLD_SOLID_BREP('',#5436); -#5436 = CLOSED_SHELL('',(#5437,#5470,#5479)); -#5437 = ADVANCED_FACE('',(#5438),#5465,.T.); -#5438 = FACE_BOUND('',#5439,.T.); -#5439 = EDGE_LOOP('',(#5440,#5449,#5457,#5464)); -#5440 = ORIENTED_EDGE('',*,*,#5441,.F.); -#5441 = EDGE_CURVE('',#5442,#5442,#5444,.T.); -#5442 = VERTEX_POINT('',#5443); -#5443 = CARTESIAN_POINT('',(65.,-37.85,64.692307692308)); -#5444 = CIRCLE('',#5445,1.); -#5445 = AXIS2_PLACEMENT_3D('',#5446,#5447,#5448); -#5446 = CARTESIAN_POINT('',(65.,-37.85,65.692307692308)); -#5447 = DIRECTION('',(0.,-1.,0.)); -#5448 = DIRECTION('',(0.,-0.,-1.)); -#5449 = ORIENTED_EDGE('',*,*,#5450,.F.); -#5450 = EDGE_CURVE('',#5451,#5442,#5453,.T.); -#5451 = VERTEX_POINT('',#5452); -#5452 = CARTESIAN_POINT('',(65.,-37.15,64.692307692308)); -#5453 = LINE('',#5454,#5455); -#5454 = CARTESIAN_POINT('',(65.,-37.15,64.692307692308)); -#5455 = VECTOR('',#5456,1.); -#5456 = DIRECTION('',(0.,-1.,0.)); -#5457 = ORIENTED_EDGE('',*,*,#5458,.T.); -#5458 = EDGE_CURVE('',#5451,#5451,#5459,.T.); -#5459 = CIRCLE('',#5460,1.); -#5460 = AXIS2_PLACEMENT_3D('',#5461,#5462,#5463); -#5461 = CARTESIAN_POINT('',(65.,-37.15,65.692307692308)); -#5462 = DIRECTION('',(0.,-1.,0.)); -#5463 = DIRECTION('',(0.,-0.,-1.)); -#5464 = ORIENTED_EDGE('',*,*,#5450,.T.); -#5465 = CYLINDRICAL_SURFACE('',#5466,1.); -#5466 = AXIS2_PLACEMENT_3D('',#5467,#5468,#5469); -#5467 = CARTESIAN_POINT('',(65.,-37.15,65.692307692308)); -#5468 = DIRECTION('',(0.,-1.,0.)); -#5469 = DIRECTION('',(0.,-0.,-1.)); -#5470 = ADVANCED_FACE('',(#5471),#5474,.T.); -#5471 = FACE_BOUND('',#5472,.T.); -#5472 = EDGE_LOOP('',(#5473)); -#5473 = ORIENTED_EDGE('',*,*,#5441,.T.); -#5474 = PLANE('',#5475); -#5475 = AXIS2_PLACEMENT_3D('',#5476,#5477,#5478); -#5476 = CARTESIAN_POINT('',(65.,-37.85,65.692307692308)); -#5477 = DIRECTION('',(0.,-1.,0.)); -#5478 = DIRECTION('',(0.,-0.,-1.)); -#5479 = ADVANCED_FACE('',(#5480),#5483,.F.); -#5480 = FACE_BOUND('',#5481,.T.); -#5481 = EDGE_LOOP('',(#5482)); -#5482 = ORIENTED_EDGE('',*,*,#5458,.F.); -#5483 = PLANE('',#5484); -#5484 = AXIS2_PLACEMENT_3D('',#5485,#5486,#5487); -#5485 = CARTESIAN_POINT('',(65.,-37.15,65.692307692308)); -#5486 = DIRECTION('',(0.,-1.,0.)); -#5487 = DIRECTION('',(0.,-0.,-1.)); -#5488 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5492)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5489,#5490,#5491)) REPRESENTATION_CONTEXT +#5287 = ITEM_DEFINED_TRANSFORMATION('','',#11,#211); +#5288 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5289); +#5289 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('50', + 'ConnectorBank_Right_Hole_R06_C01','',#5,#5221,$); +#5290 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5223)); +#5291 = SHAPE_DEFINITION_REPRESENTATION(#5292,#5298); +#5292 = PRODUCT_DEFINITION_SHAPE('','',#5293); +#5293 = PRODUCT_DEFINITION('design','',#5294,#5297); +#5294 = PRODUCT_DEFINITION_FORMATION('','',#5295); +#5295 = PRODUCT('ConnectorBank_Right_Hole_R06_C02', + 'ConnectorBank_Right_Hole_R06_C02','',(#5296)); +#5296 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5297 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5298 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5299),#5352); +#5299 = MANIFOLD_SOLID_BREP('',#5300); +#5300 = CLOSED_SHELL('',(#5301,#5334,#5343)); +#5301 = ADVANCED_FACE('',(#5302),#5329,.T.); +#5302 = FACE_BOUND('',#5303,.T.); +#5303 = EDGE_LOOP('',(#5304,#5313,#5321,#5328)); +#5304 = ORIENTED_EDGE('',*,*,#5305,.F.); +#5305 = EDGE_CURVE('',#5306,#5306,#5308,.T.); +#5306 = VERTEX_POINT('',#5307); +#5307 = CARTESIAN_POINT('',(-7.5,39.45,96.076923076923)); +#5308 = CIRCLE('',#5309,1.); +#5309 = AXIS2_PLACEMENT_3D('',#5310,#5311,#5312); +#5310 = CARTESIAN_POINT('',(-7.5,39.45,97.076923076923)); +#5311 = DIRECTION('',(0.,-1.,0.)); +#5312 = DIRECTION('',(0.,-0.,-1.)); +#5313 = ORIENTED_EDGE('',*,*,#5314,.F.); +#5314 = EDGE_CURVE('',#5315,#5306,#5317,.T.); +#5315 = VERTEX_POINT('',#5316); +#5316 = CARTESIAN_POINT('',(-7.5,40.15,96.076923076923)); +#5317 = LINE('',#5318,#5319); +#5318 = CARTESIAN_POINT('',(-7.5,40.15,96.076923076923)); +#5319 = VECTOR('',#5320,1.); +#5320 = DIRECTION('',(0.,-1.,0.)); +#5321 = ORIENTED_EDGE('',*,*,#5322,.T.); +#5322 = EDGE_CURVE('',#5315,#5315,#5323,.T.); +#5323 = CIRCLE('',#5324,1.); +#5324 = AXIS2_PLACEMENT_3D('',#5325,#5326,#5327); +#5325 = CARTESIAN_POINT('',(-7.5,40.15,97.076923076923)); +#5326 = DIRECTION('',(0.,-1.,0.)); +#5327 = DIRECTION('',(0.,-0.,-1.)); +#5328 = ORIENTED_EDGE('',*,*,#5314,.T.); +#5329 = CYLINDRICAL_SURFACE('',#5330,1.); +#5330 = AXIS2_PLACEMENT_3D('',#5331,#5332,#5333); +#5331 = CARTESIAN_POINT('',(-7.5,40.15,97.076923076923)); +#5332 = DIRECTION('',(0.,-1.,0.)); +#5333 = DIRECTION('',(0.,-0.,-1.)); +#5334 = ADVANCED_FACE('',(#5335),#5338,.T.); +#5335 = FACE_BOUND('',#5336,.T.); +#5336 = EDGE_LOOP('',(#5337)); +#5337 = ORIENTED_EDGE('',*,*,#5305,.T.); +#5338 = PLANE('',#5339); +#5339 = AXIS2_PLACEMENT_3D('',#5340,#5341,#5342); +#5340 = CARTESIAN_POINT('',(-7.5,39.45,97.076923076923)); +#5341 = DIRECTION('',(0.,-1.,0.)); +#5342 = DIRECTION('',(0.,-0.,-1.)); +#5343 = ADVANCED_FACE('',(#5344),#5347,.F.); +#5344 = FACE_BOUND('',#5345,.T.); +#5345 = EDGE_LOOP('',(#5346)); +#5346 = ORIENTED_EDGE('',*,*,#5322,.F.); +#5347 = PLANE('',#5348); +#5348 = AXIS2_PLACEMENT_3D('',#5349,#5350,#5351); +#5349 = CARTESIAN_POINT('',(-7.5,40.15,97.076923076923)); +#5350 = DIRECTION('',(0.,-1.,0.)); +#5351 = DIRECTION('',(0.,-0.,-1.)); +#5352 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5356)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5353,#5354,#5355)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5489 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5490 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5491 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5492 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5489, +#5353 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5354 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5355 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5356 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5353, 'distance_accuracy_value','confusion accuracy'); -#5493 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5494,#5496); -#5494 = ( REPRESENTATION_RELATIONSHIP('','',#5434,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5495) +#5357 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5358,#5360); +#5358 = ( REPRESENTATION_RELATIONSHIP('','',#5298,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5359) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5495 = ITEM_DEFINED_TRANSFORMATION('','',#11,#215); -#5496 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5497); -#5497 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('51', - 'ConnectorBank_Right_Hole_R02_C01','',#5,#5429,$); -#5498 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5431)); -#5499 = SHAPE_DEFINITION_REPRESENTATION(#5500,#5506); -#5500 = PRODUCT_DEFINITION_SHAPE('','',#5501); -#5501 = PRODUCT_DEFINITION('design','',#5502,#5505); -#5502 = PRODUCT_DEFINITION_FORMATION('','',#5503); -#5503 = PRODUCT('ConnectorBank_Right_Screw_R02', - 'ConnectorBank_Right_Screw_R02','',(#5504)); -#5504 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5505 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5506 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5507),#5560); -#5507 = MANIFOLD_SOLID_BREP('',#5508); -#5508 = CLOSED_SHELL('',(#5509,#5542,#5551)); -#5509 = ADVANCED_FACE('',(#5510),#5537,.T.); -#5510 = FACE_BOUND('',#5511,.T.); -#5511 = EDGE_LOOP('',(#5512,#5521,#5529,#5536)); -#5512 = ORIENTED_EDGE('',*,*,#5513,.F.); -#5513 = EDGE_CURVE('',#5514,#5514,#5516,.T.); -#5514 = VERTEX_POINT('',#5515); -#5515 = CARTESIAN_POINT('',(82.6,-37.95,65.142307692308)); -#5516 = CIRCLE('',#5517,0.55); -#5517 = AXIS2_PLACEMENT_3D('',#5518,#5519,#5520); -#5518 = CARTESIAN_POINT('',(82.6,-37.95,65.692307692308)); -#5519 = DIRECTION('',(0.,-1.,0.)); -#5520 = DIRECTION('',(0.,-0.,-1.)); -#5521 = ORIENTED_EDGE('',*,*,#5522,.F.); -#5522 = EDGE_CURVE('',#5523,#5514,#5525,.T.); -#5523 = VERTEX_POINT('',#5524); -#5524 = CARTESIAN_POINT('',(82.6,-37.15,65.142307692308)); -#5525 = LINE('',#5526,#5527); -#5526 = CARTESIAN_POINT('',(82.6,-37.15,65.142307692308)); -#5527 = VECTOR('',#5528,1.); -#5528 = DIRECTION('',(0.,-1.,0.)); -#5529 = ORIENTED_EDGE('',*,*,#5530,.T.); -#5530 = EDGE_CURVE('',#5523,#5523,#5531,.T.); -#5531 = CIRCLE('',#5532,0.55); -#5532 = AXIS2_PLACEMENT_3D('',#5533,#5534,#5535); -#5533 = CARTESIAN_POINT('',(82.6,-37.15,65.692307692308)); -#5534 = DIRECTION('',(0.,-1.,0.)); -#5535 = DIRECTION('',(0.,-0.,-1.)); -#5536 = ORIENTED_EDGE('',*,*,#5522,.T.); -#5537 = CYLINDRICAL_SURFACE('',#5538,0.55); -#5538 = AXIS2_PLACEMENT_3D('',#5539,#5540,#5541); -#5539 = CARTESIAN_POINT('',(82.6,-37.15,65.692307692308)); -#5540 = DIRECTION('',(0.,-1.,0.)); -#5541 = DIRECTION('',(0.,-0.,-1.)); -#5542 = ADVANCED_FACE('',(#5543),#5546,.T.); -#5543 = FACE_BOUND('',#5544,.T.); -#5544 = EDGE_LOOP('',(#5545)); -#5545 = ORIENTED_EDGE('',*,*,#5513,.T.); -#5546 = PLANE('',#5547); -#5547 = AXIS2_PLACEMENT_3D('',#5548,#5549,#5550); -#5548 = CARTESIAN_POINT('',(82.6,-37.95,65.692307692308)); -#5549 = DIRECTION('',(0.,-1.,0.)); -#5550 = DIRECTION('',(0.,-0.,-1.)); -#5551 = ADVANCED_FACE('',(#5552),#5555,.F.); -#5552 = FACE_BOUND('',#5553,.T.); -#5553 = EDGE_LOOP('',(#5554)); -#5554 = ORIENTED_EDGE('',*,*,#5530,.F.); -#5555 = PLANE('',#5556); -#5556 = AXIS2_PLACEMENT_3D('',#5557,#5558,#5559); -#5557 = CARTESIAN_POINT('',(82.6,-37.15,65.692307692308)); -#5558 = DIRECTION('',(0.,-1.,0.)); -#5559 = DIRECTION('',(0.,-0.,-1.)); -#5560 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5564)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5561,#5562,#5563)) REPRESENTATION_CONTEXT +#5359 = ITEM_DEFINED_TRANSFORMATION('','',#11,#215); +#5360 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5361); +#5361 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('51', + 'ConnectorBank_Right_Hole_R06_C02','',#5,#5293,$); +#5362 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5295)); +#5363 = SHAPE_DEFINITION_REPRESENTATION(#5364,#5370); +#5364 = PRODUCT_DEFINITION_SHAPE('','',#5365); +#5365 = PRODUCT_DEFINITION('design','',#5366,#5369); +#5366 = PRODUCT_DEFINITION_FORMATION('','',#5367); +#5367 = PRODUCT('ConnectorBank_Right_Hole_R06_C03', + 'ConnectorBank_Right_Hole_R06_C03','',(#5368)); +#5368 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5369 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5370 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5371),#5424); +#5371 = MANIFOLD_SOLID_BREP('',#5372); +#5372 = CLOSED_SHELL('',(#5373,#5406,#5415)); +#5373 = ADVANCED_FACE('',(#5374),#5401,.T.); +#5374 = FACE_BOUND('',#5375,.T.); +#5375 = EDGE_LOOP('',(#5376,#5385,#5393,#5400)); +#5376 = ORIENTED_EDGE('',*,*,#5377,.F.); +#5377 = EDGE_CURVE('',#5378,#5378,#5380,.T.); +#5378 = VERTEX_POINT('',#5379); +#5379 = CARTESIAN_POINT('',(-2.5,39.45,96.076923076923)); +#5380 = CIRCLE('',#5381,1.); +#5381 = AXIS2_PLACEMENT_3D('',#5382,#5383,#5384); +#5382 = CARTESIAN_POINT('',(-2.5,39.45,97.076923076923)); +#5383 = DIRECTION('',(0.,-1.,0.)); +#5384 = DIRECTION('',(0.,-0.,-1.)); +#5385 = ORIENTED_EDGE('',*,*,#5386,.F.); +#5386 = EDGE_CURVE('',#5387,#5378,#5389,.T.); +#5387 = VERTEX_POINT('',#5388); +#5388 = CARTESIAN_POINT('',(-2.5,40.15,96.076923076923)); +#5389 = LINE('',#5390,#5391); +#5390 = CARTESIAN_POINT('',(-2.5,40.15,96.076923076923)); +#5391 = VECTOR('',#5392,1.); +#5392 = DIRECTION('',(0.,-1.,0.)); +#5393 = ORIENTED_EDGE('',*,*,#5394,.T.); +#5394 = EDGE_CURVE('',#5387,#5387,#5395,.T.); +#5395 = CIRCLE('',#5396,1.); +#5396 = AXIS2_PLACEMENT_3D('',#5397,#5398,#5399); +#5397 = CARTESIAN_POINT('',(-2.5,40.15,97.076923076923)); +#5398 = DIRECTION('',(0.,-1.,0.)); +#5399 = DIRECTION('',(0.,-0.,-1.)); +#5400 = ORIENTED_EDGE('',*,*,#5386,.T.); +#5401 = CYLINDRICAL_SURFACE('',#5402,1.); +#5402 = AXIS2_PLACEMENT_3D('',#5403,#5404,#5405); +#5403 = CARTESIAN_POINT('',(-2.5,40.15,97.076923076923)); +#5404 = DIRECTION('',(0.,-1.,0.)); +#5405 = DIRECTION('',(0.,-0.,-1.)); +#5406 = ADVANCED_FACE('',(#5407),#5410,.T.); +#5407 = FACE_BOUND('',#5408,.T.); +#5408 = EDGE_LOOP('',(#5409)); +#5409 = ORIENTED_EDGE('',*,*,#5377,.T.); +#5410 = PLANE('',#5411); +#5411 = AXIS2_PLACEMENT_3D('',#5412,#5413,#5414); +#5412 = CARTESIAN_POINT('',(-2.5,39.45,97.076923076923)); +#5413 = DIRECTION('',(0.,-1.,0.)); +#5414 = DIRECTION('',(0.,-0.,-1.)); +#5415 = ADVANCED_FACE('',(#5416),#5419,.F.); +#5416 = FACE_BOUND('',#5417,.T.); +#5417 = EDGE_LOOP('',(#5418)); +#5418 = ORIENTED_EDGE('',*,*,#5394,.F.); +#5419 = PLANE('',#5420); +#5420 = AXIS2_PLACEMENT_3D('',#5421,#5422,#5423); +#5421 = CARTESIAN_POINT('',(-2.5,40.15,97.076923076923)); +#5422 = DIRECTION('',(0.,-1.,0.)); +#5423 = DIRECTION('',(0.,-0.,-1.)); +#5424 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5428)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5425,#5426,#5427)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5561 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5562 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5563 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5564 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5561, +#5425 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5426 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5427 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5428 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5425, 'distance_accuracy_value','confusion accuracy'); -#5565 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5566,#5568); -#5566 = ( REPRESENTATION_RELATIONSHIP('','',#5506,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5567) +#5429 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5430,#5432); +#5430 = ( REPRESENTATION_RELATIONSHIP('','',#5370,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5431) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5567 = ITEM_DEFINED_TRANSFORMATION('','',#11,#219); -#5568 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5569); -#5569 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('52', - 'ConnectorBank_Right_Screw_R02','',#5,#5501,$); -#5570 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5503)); -#5571 = SHAPE_DEFINITION_REPRESENTATION(#5572,#5578); -#5572 = PRODUCT_DEFINITION_SHAPE('','',#5573); -#5573 = PRODUCT_DEFINITION('design','',#5574,#5577); -#5574 = PRODUCT_DEFINITION_FORMATION('','',#5575); -#5575 = PRODUCT('ConnectorBank_Right_Hole_R02_C02', - 'ConnectorBank_Right_Hole_R02_C02','',(#5576)); -#5576 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5577 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5578 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5579),#5632); -#5579 = MANIFOLD_SOLID_BREP('',#5580); -#5580 = CLOSED_SHELL('',(#5581,#5614,#5623)); -#5581 = ADVANCED_FACE('',(#5582),#5609,.T.); -#5582 = FACE_BOUND('',#5583,.T.); -#5583 = EDGE_LOOP('',(#5584,#5593,#5601,#5608)); -#5584 = ORIENTED_EDGE('',*,*,#5585,.F.); -#5585 = EDGE_CURVE('',#5586,#5586,#5588,.T.); -#5586 = VERTEX_POINT('',#5587); -#5587 = CARTESIAN_POINT('',(70.,-37.85,64.692307692308)); -#5588 = CIRCLE('',#5589,1.); -#5589 = AXIS2_PLACEMENT_3D('',#5590,#5591,#5592); -#5590 = CARTESIAN_POINT('',(70.,-37.85,65.692307692308)); -#5591 = DIRECTION('',(0.,-1.,0.)); -#5592 = DIRECTION('',(0.,-0.,-1.)); -#5593 = ORIENTED_EDGE('',*,*,#5594,.F.); -#5594 = EDGE_CURVE('',#5595,#5586,#5597,.T.); -#5595 = VERTEX_POINT('',#5596); -#5596 = CARTESIAN_POINT('',(70.,-37.15,64.692307692308)); -#5597 = LINE('',#5598,#5599); -#5598 = CARTESIAN_POINT('',(70.,-37.15,64.692307692308)); -#5599 = VECTOR('',#5600,1.); -#5600 = DIRECTION('',(0.,-1.,0.)); -#5601 = ORIENTED_EDGE('',*,*,#5602,.T.); -#5602 = EDGE_CURVE('',#5595,#5595,#5603,.T.); -#5603 = CIRCLE('',#5604,1.); -#5604 = AXIS2_PLACEMENT_3D('',#5605,#5606,#5607); -#5605 = CARTESIAN_POINT('',(70.,-37.15,65.692307692308)); -#5606 = DIRECTION('',(0.,-1.,0.)); -#5607 = DIRECTION('',(0.,-0.,-1.)); -#5608 = ORIENTED_EDGE('',*,*,#5594,.T.); -#5609 = CYLINDRICAL_SURFACE('',#5610,1.); -#5610 = AXIS2_PLACEMENT_3D('',#5611,#5612,#5613); -#5611 = CARTESIAN_POINT('',(70.,-37.15,65.692307692308)); -#5612 = DIRECTION('',(0.,-1.,0.)); -#5613 = DIRECTION('',(0.,-0.,-1.)); -#5614 = ADVANCED_FACE('',(#5615),#5618,.T.); -#5615 = FACE_BOUND('',#5616,.T.); -#5616 = EDGE_LOOP('',(#5617)); -#5617 = ORIENTED_EDGE('',*,*,#5585,.T.); -#5618 = PLANE('',#5619); -#5619 = AXIS2_PLACEMENT_3D('',#5620,#5621,#5622); -#5620 = CARTESIAN_POINT('',(70.,-37.85,65.692307692308)); -#5621 = DIRECTION('',(0.,-1.,0.)); -#5622 = DIRECTION('',(0.,-0.,-1.)); -#5623 = ADVANCED_FACE('',(#5624),#5627,.F.); -#5624 = FACE_BOUND('',#5625,.T.); -#5625 = EDGE_LOOP('',(#5626)); -#5626 = ORIENTED_EDGE('',*,*,#5602,.F.); -#5627 = PLANE('',#5628); -#5628 = AXIS2_PLACEMENT_3D('',#5629,#5630,#5631); -#5629 = CARTESIAN_POINT('',(70.,-37.15,65.692307692308)); -#5630 = DIRECTION('',(0.,-1.,0.)); -#5631 = DIRECTION('',(0.,-0.,-1.)); -#5632 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5636)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5633,#5634,#5635)) REPRESENTATION_CONTEXT +#5431 = ITEM_DEFINED_TRANSFORMATION('','',#11,#219); +#5432 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5433); +#5433 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('52', + 'ConnectorBank_Right_Hole_R06_C03','',#5,#5365,$); +#5434 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5367)); +#5435 = SHAPE_DEFINITION_REPRESENTATION(#5436,#5442); +#5436 = PRODUCT_DEFINITION_SHAPE('','',#5437); +#5437 = PRODUCT_DEFINITION('design','',#5438,#5441); +#5438 = PRODUCT_DEFINITION_FORMATION('','',#5439); +#5439 = PRODUCT('ConnectorBank_Right_Hole_R07_C01', + 'ConnectorBank_Right_Hole_R07_C01','',(#5440)); +#5440 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5441 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5442 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5443),#5496); +#5443 = MANIFOLD_SOLID_BREP('',#5444); +#5444 = CLOSED_SHELL('',(#5445,#5478,#5487)); +#5445 = ADVANCED_FACE('',(#5446),#5473,.T.); +#5446 = FACE_BOUND('',#5447,.T.); +#5447 = EDGE_LOOP('',(#5448,#5457,#5465,#5472)); +#5448 = ORIENTED_EDGE('',*,*,#5449,.F.); +#5449 = EDGE_CURVE('',#5450,#5450,#5452,.T.); +#5450 = VERTEX_POINT('',#5451); +#5451 = CARTESIAN_POINT('',(-12.5,39.45,103.92307692307)); +#5452 = CIRCLE('',#5453,1.); +#5453 = AXIS2_PLACEMENT_3D('',#5454,#5455,#5456); +#5454 = CARTESIAN_POINT('',(-12.5,39.45,104.92307692307)); +#5455 = DIRECTION('',(0.,-1.,0.)); +#5456 = DIRECTION('',(0.,-0.,-1.)); +#5457 = ORIENTED_EDGE('',*,*,#5458,.F.); +#5458 = EDGE_CURVE('',#5459,#5450,#5461,.T.); +#5459 = VERTEX_POINT('',#5460); +#5460 = CARTESIAN_POINT('',(-12.5,40.15,103.92307692307)); +#5461 = LINE('',#5462,#5463); +#5462 = CARTESIAN_POINT('',(-12.5,40.15,103.92307692307)); +#5463 = VECTOR('',#5464,1.); +#5464 = DIRECTION('',(0.,-1.,0.)); +#5465 = ORIENTED_EDGE('',*,*,#5466,.T.); +#5466 = EDGE_CURVE('',#5459,#5459,#5467,.T.); +#5467 = CIRCLE('',#5468,1.); +#5468 = AXIS2_PLACEMENT_3D('',#5469,#5470,#5471); +#5469 = CARTESIAN_POINT('',(-12.5,40.15,104.92307692307)); +#5470 = DIRECTION('',(0.,-1.,0.)); +#5471 = DIRECTION('',(0.,-0.,-1.)); +#5472 = ORIENTED_EDGE('',*,*,#5458,.T.); +#5473 = CYLINDRICAL_SURFACE('',#5474,1.); +#5474 = AXIS2_PLACEMENT_3D('',#5475,#5476,#5477); +#5475 = CARTESIAN_POINT('',(-12.5,40.15,104.92307692307)); +#5476 = DIRECTION('',(0.,-1.,0.)); +#5477 = DIRECTION('',(0.,-0.,-1.)); +#5478 = ADVANCED_FACE('',(#5479),#5482,.T.); +#5479 = FACE_BOUND('',#5480,.T.); +#5480 = EDGE_LOOP('',(#5481)); +#5481 = ORIENTED_EDGE('',*,*,#5449,.T.); +#5482 = PLANE('',#5483); +#5483 = AXIS2_PLACEMENT_3D('',#5484,#5485,#5486); +#5484 = CARTESIAN_POINT('',(-12.5,39.45,104.92307692307)); +#5485 = DIRECTION('',(0.,-1.,0.)); +#5486 = DIRECTION('',(0.,-0.,-1.)); +#5487 = ADVANCED_FACE('',(#5488),#5491,.F.); +#5488 = FACE_BOUND('',#5489,.T.); +#5489 = EDGE_LOOP('',(#5490)); +#5490 = ORIENTED_EDGE('',*,*,#5466,.F.); +#5491 = PLANE('',#5492); +#5492 = AXIS2_PLACEMENT_3D('',#5493,#5494,#5495); +#5493 = CARTESIAN_POINT('',(-12.5,40.15,104.92307692307)); +#5494 = DIRECTION('',(0.,-1.,0.)); +#5495 = DIRECTION('',(0.,-0.,-1.)); +#5496 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5500)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5497,#5498,#5499)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5633 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5634 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5635 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5636 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5633, +#5497 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5498 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5499 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5500 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5497, 'distance_accuracy_value','confusion accuracy'); -#5637 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5638,#5640); -#5638 = ( REPRESENTATION_RELATIONSHIP('','',#5578,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5639) +#5501 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5502,#5504); +#5502 = ( REPRESENTATION_RELATIONSHIP('','',#5442,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5503) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5639 = ITEM_DEFINED_TRANSFORMATION('','',#11,#223); -#5640 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5641); -#5641 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('53', - 'ConnectorBank_Right_Hole_R02_C02','',#5,#5573,$); -#5642 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5575)); -#5643 = SHAPE_DEFINITION_REPRESENTATION(#5644,#5650); -#5644 = PRODUCT_DEFINITION_SHAPE('','',#5645); -#5645 = PRODUCT_DEFINITION('design','',#5646,#5649); -#5646 = PRODUCT_DEFINITION_FORMATION('','',#5647); -#5647 = PRODUCT('ConnectorBank_Right_Hole_R02_C03', - 'ConnectorBank_Right_Hole_R02_C03','',(#5648)); -#5648 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5649 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5650 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5651),#5704); -#5651 = MANIFOLD_SOLID_BREP('',#5652); -#5652 = CLOSED_SHELL('',(#5653,#5686,#5695)); -#5653 = ADVANCED_FACE('',(#5654),#5681,.T.); -#5654 = FACE_BOUND('',#5655,.T.); -#5655 = EDGE_LOOP('',(#5656,#5665,#5673,#5680)); -#5656 = ORIENTED_EDGE('',*,*,#5657,.F.); -#5657 = EDGE_CURVE('',#5658,#5658,#5660,.T.); -#5658 = VERTEX_POINT('',#5659); -#5659 = CARTESIAN_POINT('',(75.,-37.85,64.692307692308)); -#5660 = CIRCLE('',#5661,1.); -#5661 = AXIS2_PLACEMENT_3D('',#5662,#5663,#5664); -#5662 = CARTESIAN_POINT('',(75.,-37.85,65.692307692308)); -#5663 = DIRECTION('',(0.,-1.,0.)); -#5664 = DIRECTION('',(0.,-0.,-1.)); -#5665 = ORIENTED_EDGE('',*,*,#5666,.F.); -#5666 = EDGE_CURVE('',#5667,#5658,#5669,.T.); -#5667 = VERTEX_POINT('',#5668); -#5668 = CARTESIAN_POINT('',(75.,-37.15,64.692307692308)); -#5669 = LINE('',#5670,#5671); -#5670 = CARTESIAN_POINT('',(75.,-37.15,64.692307692308)); -#5671 = VECTOR('',#5672,1.); -#5672 = DIRECTION('',(0.,-1.,0.)); -#5673 = ORIENTED_EDGE('',*,*,#5674,.T.); -#5674 = EDGE_CURVE('',#5667,#5667,#5675,.T.); -#5675 = CIRCLE('',#5676,1.); -#5676 = AXIS2_PLACEMENT_3D('',#5677,#5678,#5679); -#5677 = CARTESIAN_POINT('',(75.,-37.15,65.692307692308)); -#5678 = DIRECTION('',(0.,-1.,0.)); -#5679 = DIRECTION('',(0.,-0.,-1.)); -#5680 = ORIENTED_EDGE('',*,*,#5666,.T.); -#5681 = CYLINDRICAL_SURFACE('',#5682,1.); -#5682 = AXIS2_PLACEMENT_3D('',#5683,#5684,#5685); -#5683 = CARTESIAN_POINT('',(75.,-37.15,65.692307692308)); -#5684 = DIRECTION('',(0.,-1.,0.)); -#5685 = DIRECTION('',(0.,-0.,-1.)); -#5686 = ADVANCED_FACE('',(#5687),#5690,.T.); -#5687 = FACE_BOUND('',#5688,.T.); -#5688 = EDGE_LOOP('',(#5689)); -#5689 = ORIENTED_EDGE('',*,*,#5657,.T.); -#5690 = PLANE('',#5691); -#5691 = AXIS2_PLACEMENT_3D('',#5692,#5693,#5694); -#5692 = CARTESIAN_POINT('',(75.,-37.85,65.692307692308)); -#5693 = DIRECTION('',(0.,-1.,0.)); -#5694 = DIRECTION('',(0.,-0.,-1.)); -#5695 = ADVANCED_FACE('',(#5696),#5699,.F.); -#5696 = FACE_BOUND('',#5697,.T.); -#5697 = EDGE_LOOP('',(#5698)); -#5698 = ORIENTED_EDGE('',*,*,#5674,.F.); -#5699 = PLANE('',#5700); -#5700 = AXIS2_PLACEMENT_3D('',#5701,#5702,#5703); -#5701 = CARTESIAN_POINT('',(75.,-37.15,65.692307692308)); -#5702 = DIRECTION('',(0.,-1.,0.)); -#5703 = DIRECTION('',(0.,-0.,-1.)); -#5704 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5708)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5705,#5706,#5707)) REPRESENTATION_CONTEXT +#5503 = ITEM_DEFINED_TRANSFORMATION('','',#11,#223); +#5504 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5505); +#5505 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('53', + 'ConnectorBank_Right_Hole_R07_C01','',#5,#5437,$); +#5506 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5439)); +#5507 = SHAPE_DEFINITION_REPRESENTATION(#5508,#5514); +#5508 = PRODUCT_DEFINITION_SHAPE('','',#5509); +#5509 = PRODUCT_DEFINITION('design','',#5510,#5513); +#5510 = PRODUCT_DEFINITION_FORMATION('','',#5511); +#5511 = PRODUCT('ConnectorBank_Right_Hole_R07_C02', + 'ConnectorBank_Right_Hole_R07_C02','',(#5512)); +#5512 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5513 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5514 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5515),#5568); +#5515 = MANIFOLD_SOLID_BREP('',#5516); +#5516 = CLOSED_SHELL('',(#5517,#5550,#5559)); +#5517 = ADVANCED_FACE('',(#5518),#5545,.T.); +#5518 = FACE_BOUND('',#5519,.T.); +#5519 = EDGE_LOOP('',(#5520,#5529,#5537,#5544)); +#5520 = ORIENTED_EDGE('',*,*,#5521,.F.); +#5521 = EDGE_CURVE('',#5522,#5522,#5524,.T.); +#5522 = VERTEX_POINT('',#5523); +#5523 = CARTESIAN_POINT('',(-7.5,39.45,103.92307692307)); +#5524 = CIRCLE('',#5525,1.); +#5525 = AXIS2_PLACEMENT_3D('',#5526,#5527,#5528); +#5526 = CARTESIAN_POINT('',(-7.5,39.45,104.92307692307)); +#5527 = DIRECTION('',(0.,-1.,0.)); +#5528 = DIRECTION('',(0.,-0.,-1.)); +#5529 = ORIENTED_EDGE('',*,*,#5530,.F.); +#5530 = EDGE_CURVE('',#5531,#5522,#5533,.T.); +#5531 = VERTEX_POINT('',#5532); +#5532 = CARTESIAN_POINT('',(-7.5,40.15,103.92307692307)); +#5533 = LINE('',#5534,#5535); +#5534 = CARTESIAN_POINT('',(-7.5,40.15,103.92307692307)); +#5535 = VECTOR('',#5536,1.); +#5536 = DIRECTION('',(0.,-1.,0.)); +#5537 = ORIENTED_EDGE('',*,*,#5538,.T.); +#5538 = EDGE_CURVE('',#5531,#5531,#5539,.T.); +#5539 = CIRCLE('',#5540,1.); +#5540 = AXIS2_PLACEMENT_3D('',#5541,#5542,#5543); +#5541 = CARTESIAN_POINT('',(-7.5,40.15,104.92307692307)); +#5542 = DIRECTION('',(0.,-1.,0.)); +#5543 = DIRECTION('',(0.,-0.,-1.)); +#5544 = ORIENTED_EDGE('',*,*,#5530,.T.); +#5545 = CYLINDRICAL_SURFACE('',#5546,1.); +#5546 = AXIS2_PLACEMENT_3D('',#5547,#5548,#5549); +#5547 = CARTESIAN_POINT('',(-7.5,40.15,104.92307692307)); +#5548 = DIRECTION('',(0.,-1.,0.)); +#5549 = DIRECTION('',(0.,-0.,-1.)); +#5550 = ADVANCED_FACE('',(#5551),#5554,.T.); +#5551 = FACE_BOUND('',#5552,.T.); +#5552 = EDGE_LOOP('',(#5553)); +#5553 = ORIENTED_EDGE('',*,*,#5521,.T.); +#5554 = PLANE('',#5555); +#5555 = AXIS2_PLACEMENT_3D('',#5556,#5557,#5558); +#5556 = CARTESIAN_POINT('',(-7.5,39.45,104.92307692307)); +#5557 = DIRECTION('',(0.,-1.,0.)); +#5558 = DIRECTION('',(0.,-0.,-1.)); +#5559 = ADVANCED_FACE('',(#5560),#5563,.F.); +#5560 = FACE_BOUND('',#5561,.T.); +#5561 = EDGE_LOOP('',(#5562)); +#5562 = ORIENTED_EDGE('',*,*,#5538,.F.); +#5563 = PLANE('',#5564); +#5564 = AXIS2_PLACEMENT_3D('',#5565,#5566,#5567); +#5565 = CARTESIAN_POINT('',(-7.5,40.15,104.92307692307)); +#5566 = DIRECTION('',(0.,-1.,0.)); +#5567 = DIRECTION('',(0.,-0.,-1.)); +#5568 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5572)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5569,#5570,#5571)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5705 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5706 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5707 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5708 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5705, +#5569 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5570 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5571 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5572 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5569, 'distance_accuracy_value','confusion accuracy'); -#5709 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5710,#5712); -#5710 = ( REPRESENTATION_RELATIONSHIP('','',#5650,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5711) +#5573 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5574,#5576); +#5574 = ( REPRESENTATION_RELATIONSHIP('','',#5514,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5575) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5711 = ITEM_DEFINED_TRANSFORMATION('','',#11,#227); -#5712 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5713); -#5713 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('54', - 'ConnectorBank_Right_Hole_R02_C03','',#5,#5645,$); -#5714 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5647)); -#5715 = SHAPE_DEFINITION_REPRESENTATION(#5716,#5722); -#5716 = PRODUCT_DEFINITION_SHAPE('','',#5717); -#5717 = PRODUCT_DEFINITION('design','',#5718,#5721); -#5718 = PRODUCT_DEFINITION_FORMATION('','',#5719); -#5719 = PRODUCT('ConnectorBank_Right_Hole_R03_C01', - 'ConnectorBank_Right_Hole_R03_C01','',(#5720)); -#5720 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5721 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5722 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5723),#5776); -#5723 = MANIFOLD_SOLID_BREP('',#5724); -#5724 = CLOSED_SHELL('',(#5725,#5758,#5767)); -#5725 = ADVANCED_FACE('',(#5726),#5753,.T.); -#5726 = FACE_BOUND('',#5727,.T.); -#5727 = EDGE_LOOP('',(#5728,#5737,#5745,#5752)); -#5728 = ORIENTED_EDGE('',*,*,#5729,.F.); -#5729 = EDGE_CURVE('',#5730,#5730,#5732,.T.); -#5730 = VERTEX_POINT('',#5731); -#5731 = CARTESIAN_POINT('',(65.,-37.85,72.538461538462)); -#5732 = CIRCLE('',#5733,1.); -#5733 = AXIS2_PLACEMENT_3D('',#5734,#5735,#5736); -#5734 = CARTESIAN_POINT('',(65.,-37.85,73.538461538462)); -#5735 = DIRECTION('',(0.,-1.,0.)); -#5736 = DIRECTION('',(0.,-0.,-1.)); -#5737 = ORIENTED_EDGE('',*,*,#5738,.F.); -#5738 = EDGE_CURVE('',#5739,#5730,#5741,.T.); -#5739 = VERTEX_POINT('',#5740); -#5740 = CARTESIAN_POINT('',(65.,-37.15,72.538461538462)); -#5741 = LINE('',#5742,#5743); -#5742 = CARTESIAN_POINT('',(65.,-37.15,72.538461538462)); -#5743 = VECTOR('',#5744,1.); -#5744 = DIRECTION('',(0.,-1.,0.)); -#5745 = ORIENTED_EDGE('',*,*,#5746,.T.); -#5746 = EDGE_CURVE('',#5739,#5739,#5747,.T.); -#5747 = CIRCLE('',#5748,1.); -#5748 = AXIS2_PLACEMENT_3D('',#5749,#5750,#5751); -#5749 = CARTESIAN_POINT('',(65.,-37.15,73.538461538462)); -#5750 = DIRECTION('',(0.,-1.,0.)); -#5751 = DIRECTION('',(0.,-0.,-1.)); -#5752 = ORIENTED_EDGE('',*,*,#5738,.T.); -#5753 = CYLINDRICAL_SURFACE('',#5754,1.); -#5754 = AXIS2_PLACEMENT_3D('',#5755,#5756,#5757); -#5755 = CARTESIAN_POINT('',(65.,-37.15,73.538461538462)); -#5756 = DIRECTION('',(0.,-1.,0.)); -#5757 = DIRECTION('',(0.,-0.,-1.)); -#5758 = ADVANCED_FACE('',(#5759),#5762,.T.); -#5759 = FACE_BOUND('',#5760,.T.); -#5760 = EDGE_LOOP('',(#5761)); -#5761 = ORIENTED_EDGE('',*,*,#5729,.T.); -#5762 = PLANE('',#5763); -#5763 = AXIS2_PLACEMENT_3D('',#5764,#5765,#5766); -#5764 = CARTESIAN_POINT('',(65.,-37.85,73.538461538462)); -#5765 = DIRECTION('',(0.,-1.,0.)); -#5766 = DIRECTION('',(0.,-0.,-1.)); -#5767 = ADVANCED_FACE('',(#5768),#5771,.F.); -#5768 = FACE_BOUND('',#5769,.T.); -#5769 = EDGE_LOOP('',(#5770)); -#5770 = ORIENTED_EDGE('',*,*,#5746,.F.); -#5771 = PLANE('',#5772); -#5772 = AXIS2_PLACEMENT_3D('',#5773,#5774,#5775); -#5773 = CARTESIAN_POINT('',(65.,-37.15,73.538461538462)); -#5774 = DIRECTION('',(0.,-1.,0.)); -#5775 = DIRECTION('',(0.,-0.,-1.)); -#5776 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5780)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5777,#5778,#5779)) REPRESENTATION_CONTEXT +#5575 = ITEM_DEFINED_TRANSFORMATION('','',#11,#227); +#5576 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5577); +#5577 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('54', + 'ConnectorBank_Right_Hole_R07_C02','',#5,#5509,$); +#5578 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5511)); +#5579 = SHAPE_DEFINITION_REPRESENTATION(#5580,#5586); +#5580 = PRODUCT_DEFINITION_SHAPE('','',#5581); +#5581 = PRODUCT_DEFINITION('design','',#5582,#5585); +#5582 = PRODUCT_DEFINITION_FORMATION('','',#5583); +#5583 = PRODUCT('ConnectorBank_Right_Hole_R07_C03', + 'ConnectorBank_Right_Hole_R07_C03','',(#5584)); +#5584 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5585 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5586 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5587),#5640); +#5587 = MANIFOLD_SOLID_BREP('',#5588); +#5588 = CLOSED_SHELL('',(#5589,#5622,#5631)); +#5589 = ADVANCED_FACE('',(#5590),#5617,.T.); +#5590 = FACE_BOUND('',#5591,.T.); +#5591 = EDGE_LOOP('',(#5592,#5601,#5609,#5616)); +#5592 = ORIENTED_EDGE('',*,*,#5593,.F.); +#5593 = EDGE_CURVE('',#5594,#5594,#5596,.T.); +#5594 = VERTEX_POINT('',#5595); +#5595 = CARTESIAN_POINT('',(-2.5,39.45,103.92307692307)); +#5596 = CIRCLE('',#5597,1.); +#5597 = AXIS2_PLACEMENT_3D('',#5598,#5599,#5600); +#5598 = CARTESIAN_POINT('',(-2.5,39.45,104.92307692307)); +#5599 = DIRECTION('',(0.,-1.,0.)); +#5600 = DIRECTION('',(0.,-0.,-1.)); +#5601 = ORIENTED_EDGE('',*,*,#5602,.F.); +#5602 = EDGE_CURVE('',#5603,#5594,#5605,.T.); +#5603 = VERTEX_POINT('',#5604); +#5604 = CARTESIAN_POINT('',(-2.5,40.15,103.92307692307)); +#5605 = LINE('',#5606,#5607); +#5606 = CARTESIAN_POINT('',(-2.5,40.15,103.92307692307)); +#5607 = VECTOR('',#5608,1.); +#5608 = DIRECTION('',(0.,-1.,0.)); +#5609 = ORIENTED_EDGE('',*,*,#5610,.T.); +#5610 = EDGE_CURVE('',#5603,#5603,#5611,.T.); +#5611 = CIRCLE('',#5612,1.); +#5612 = AXIS2_PLACEMENT_3D('',#5613,#5614,#5615); +#5613 = CARTESIAN_POINT('',(-2.5,40.15,104.92307692307)); +#5614 = DIRECTION('',(0.,-1.,0.)); +#5615 = DIRECTION('',(0.,-0.,-1.)); +#5616 = ORIENTED_EDGE('',*,*,#5602,.T.); +#5617 = CYLINDRICAL_SURFACE('',#5618,1.); +#5618 = AXIS2_PLACEMENT_3D('',#5619,#5620,#5621); +#5619 = CARTESIAN_POINT('',(-2.5,40.15,104.92307692307)); +#5620 = DIRECTION('',(0.,-1.,0.)); +#5621 = DIRECTION('',(0.,-0.,-1.)); +#5622 = ADVANCED_FACE('',(#5623),#5626,.T.); +#5623 = FACE_BOUND('',#5624,.T.); +#5624 = EDGE_LOOP('',(#5625)); +#5625 = ORIENTED_EDGE('',*,*,#5593,.T.); +#5626 = PLANE('',#5627); +#5627 = AXIS2_PLACEMENT_3D('',#5628,#5629,#5630); +#5628 = CARTESIAN_POINT('',(-2.5,39.45,104.92307692307)); +#5629 = DIRECTION('',(0.,-1.,0.)); +#5630 = DIRECTION('',(0.,-0.,-1.)); +#5631 = ADVANCED_FACE('',(#5632),#5635,.F.); +#5632 = FACE_BOUND('',#5633,.T.); +#5633 = EDGE_LOOP('',(#5634)); +#5634 = ORIENTED_EDGE('',*,*,#5610,.F.); +#5635 = PLANE('',#5636); +#5636 = AXIS2_PLACEMENT_3D('',#5637,#5638,#5639); +#5637 = CARTESIAN_POINT('',(-2.5,40.15,104.92307692307)); +#5638 = DIRECTION('',(0.,-1.,0.)); +#5639 = DIRECTION('',(0.,-0.,-1.)); +#5640 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5644)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5641,#5642,#5643)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5777 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5778 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5779 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5780 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5777, +#5641 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5642 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5643 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5644 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5641, 'distance_accuracy_value','confusion accuracy'); -#5781 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5782,#5784); -#5782 = ( REPRESENTATION_RELATIONSHIP('','',#5722,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5783) +#5645 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5646,#5648); +#5646 = ( REPRESENTATION_RELATIONSHIP('','',#5586,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5647) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5783 = ITEM_DEFINED_TRANSFORMATION('','',#11,#231); -#5784 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5785); -#5785 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('55', - 'ConnectorBank_Right_Hole_R03_C01','',#5,#5717,$); -#5786 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5719)); -#5787 = SHAPE_DEFINITION_REPRESENTATION(#5788,#5794); -#5788 = PRODUCT_DEFINITION_SHAPE('','',#5789); -#5789 = PRODUCT_DEFINITION('design','',#5790,#5793); -#5790 = PRODUCT_DEFINITION_FORMATION('','',#5791); -#5791 = PRODUCT('ConnectorBank_Right_Screw_R03', - 'ConnectorBank_Right_Screw_R03','',(#5792)); -#5792 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5793 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5794 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5795),#5848); -#5795 = MANIFOLD_SOLID_BREP('',#5796); -#5796 = CLOSED_SHELL('',(#5797,#5830,#5839)); -#5797 = ADVANCED_FACE('',(#5798),#5825,.T.); -#5798 = FACE_BOUND('',#5799,.T.); -#5799 = EDGE_LOOP('',(#5800,#5809,#5817,#5824)); -#5800 = ORIENTED_EDGE('',*,*,#5801,.F.); -#5801 = EDGE_CURVE('',#5802,#5802,#5804,.T.); -#5802 = VERTEX_POINT('',#5803); -#5803 = CARTESIAN_POINT('',(82.6,-37.95,72.988461538462)); -#5804 = CIRCLE('',#5805,0.55); -#5805 = AXIS2_PLACEMENT_3D('',#5806,#5807,#5808); -#5806 = CARTESIAN_POINT('',(82.6,-37.95,73.538461538462)); -#5807 = DIRECTION('',(0.,-1.,0.)); -#5808 = DIRECTION('',(0.,-0.,-1.)); -#5809 = ORIENTED_EDGE('',*,*,#5810,.F.); -#5810 = EDGE_CURVE('',#5811,#5802,#5813,.T.); -#5811 = VERTEX_POINT('',#5812); -#5812 = CARTESIAN_POINT('',(82.6,-37.15,72.988461538462)); -#5813 = LINE('',#5814,#5815); -#5814 = CARTESIAN_POINT('',(82.6,-37.15,72.988461538462)); -#5815 = VECTOR('',#5816,1.); -#5816 = DIRECTION('',(0.,-1.,0.)); -#5817 = ORIENTED_EDGE('',*,*,#5818,.T.); -#5818 = EDGE_CURVE('',#5811,#5811,#5819,.T.); -#5819 = CIRCLE('',#5820,0.55); -#5820 = AXIS2_PLACEMENT_3D('',#5821,#5822,#5823); -#5821 = CARTESIAN_POINT('',(82.6,-37.15,73.538461538462)); -#5822 = DIRECTION('',(0.,-1.,0.)); -#5823 = DIRECTION('',(0.,-0.,-1.)); -#5824 = ORIENTED_EDGE('',*,*,#5810,.T.); -#5825 = CYLINDRICAL_SURFACE('',#5826,0.55); -#5826 = AXIS2_PLACEMENT_3D('',#5827,#5828,#5829); -#5827 = CARTESIAN_POINT('',(82.6,-37.15,73.538461538462)); -#5828 = DIRECTION('',(0.,-1.,0.)); -#5829 = DIRECTION('',(0.,-0.,-1.)); -#5830 = ADVANCED_FACE('',(#5831),#5834,.T.); -#5831 = FACE_BOUND('',#5832,.T.); -#5832 = EDGE_LOOP('',(#5833)); -#5833 = ORIENTED_EDGE('',*,*,#5801,.T.); -#5834 = PLANE('',#5835); -#5835 = AXIS2_PLACEMENT_3D('',#5836,#5837,#5838); -#5836 = CARTESIAN_POINT('',(82.6,-37.95,73.538461538462)); -#5837 = DIRECTION('',(0.,-1.,0.)); -#5838 = DIRECTION('',(0.,-0.,-1.)); -#5839 = ADVANCED_FACE('',(#5840),#5843,.F.); -#5840 = FACE_BOUND('',#5841,.T.); -#5841 = EDGE_LOOP('',(#5842)); -#5842 = ORIENTED_EDGE('',*,*,#5818,.F.); -#5843 = PLANE('',#5844); -#5844 = AXIS2_PLACEMENT_3D('',#5845,#5846,#5847); -#5845 = CARTESIAN_POINT('',(82.6,-37.15,73.538461538462)); -#5846 = DIRECTION('',(0.,-1.,0.)); -#5847 = DIRECTION('',(0.,-0.,-1.)); -#5848 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5852)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5849,#5850,#5851)) REPRESENTATION_CONTEXT +#5647 = ITEM_DEFINED_TRANSFORMATION('','',#11,#231); +#5648 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5649); +#5649 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('55', + 'ConnectorBank_Right_Hole_R07_C03','',#5,#5581,$); +#5650 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5583)); +#5651 = SHAPE_DEFINITION_REPRESENTATION(#5652,#5658); +#5652 = PRODUCT_DEFINITION_SHAPE('','',#5653); +#5653 = PRODUCT_DEFINITION('design','',#5654,#5657); +#5654 = PRODUCT_DEFINITION_FORMATION('','',#5655); +#5655 = PRODUCT('ConnectorBank_Right_Hole_R08_C01', + 'ConnectorBank_Right_Hole_R08_C01','',(#5656)); +#5656 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5657 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5658 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5659),#5712); +#5659 = MANIFOLD_SOLID_BREP('',#5660); +#5660 = CLOSED_SHELL('',(#5661,#5694,#5703)); +#5661 = ADVANCED_FACE('',(#5662),#5689,.T.); +#5662 = FACE_BOUND('',#5663,.T.); +#5663 = EDGE_LOOP('',(#5664,#5673,#5681,#5688)); +#5664 = ORIENTED_EDGE('',*,*,#5665,.F.); +#5665 = EDGE_CURVE('',#5666,#5666,#5668,.T.); +#5666 = VERTEX_POINT('',#5667); +#5667 = CARTESIAN_POINT('',(-12.5,39.45,111.76923076923)); +#5668 = CIRCLE('',#5669,1.); +#5669 = AXIS2_PLACEMENT_3D('',#5670,#5671,#5672); +#5670 = CARTESIAN_POINT('',(-12.5,39.45,112.76923076923)); +#5671 = DIRECTION('',(0.,-1.,0.)); +#5672 = DIRECTION('',(0.,-0.,-1.)); +#5673 = ORIENTED_EDGE('',*,*,#5674,.F.); +#5674 = EDGE_CURVE('',#5675,#5666,#5677,.T.); +#5675 = VERTEX_POINT('',#5676); +#5676 = CARTESIAN_POINT('',(-12.5,40.15,111.76923076923)); +#5677 = LINE('',#5678,#5679); +#5678 = CARTESIAN_POINT('',(-12.5,40.15,111.76923076923)); +#5679 = VECTOR('',#5680,1.); +#5680 = DIRECTION('',(0.,-1.,0.)); +#5681 = ORIENTED_EDGE('',*,*,#5682,.T.); +#5682 = EDGE_CURVE('',#5675,#5675,#5683,.T.); +#5683 = CIRCLE('',#5684,1.); +#5684 = AXIS2_PLACEMENT_3D('',#5685,#5686,#5687); +#5685 = CARTESIAN_POINT('',(-12.5,40.15,112.76923076923)); +#5686 = DIRECTION('',(0.,-1.,0.)); +#5687 = DIRECTION('',(0.,-0.,-1.)); +#5688 = ORIENTED_EDGE('',*,*,#5674,.T.); +#5689 = CYLINDRICAL_SURFACE('',#5690,1.); +#5690 = AXIS2_PLACEMENT_3D('',#5691,#5692,#5693); +#5691 = CARTESIAN_POINT('',(-12.5,40.15,112.76923076923)); +#5692 = DIRECTION('',(0.,-1.,0.)); +#5693 = DIRECTION('',(0.,-0.,-1.)); +#5694 = ADVANCED_FACE('',(#5695),#5698,.T.); +#5695 = FACE_BOUND('',#5696,.T.); +#5696 = EDGE_LOOP('',(#5697)); +#5697 = ORIENTED_EDGE('',*,*,#5665,.T.); +#5698 = PLANE('',#5699); +#5699 = AXIS2_PLACEMENT_3D('',#5700,#5701,#5702); +#5700 = CARTESIAN_POINT('',(-12.5,39.45,112.76923076923)); +#5701 = DIRECTION('',(0.,-1.,0.)); +#5702 = DIRECTION('',(0.,-0.,-1.)); +#5703 = ADVANCED_FACE('',(#5704),#5707,.F.); +#5704 = FACE_BOUND('',#5705,.T.); +#5705 = EDGE_LOOP('',(#5706)); +#5706 = ORIENTED_EDGE('',*,*,#5682,.F.); +#5707 = PLANE('',#5708); +#5708 = AXIS2_PLACEMENT_3D('',#5709,#5710,#5711); +#5709 = CARTESIAN_POINT('',(-12.5,40.15,112.76923076923)); +#5710 = DIRECTION('',(0.,-1.,0.)); +#5711 = DIRECTION('',(0.,-0.,-1.)); +#5712 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5716)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5713,#5714,#5715)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5849 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5850 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5851 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5852 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5849, +#5713 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5714 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5715 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5716 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5713, 'distance_accuracy_value','confusion accuracy'); -#5853 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5854,#5856); -#5854 = ( REPRESENTATION_RELATIONSHIP('','',#5794,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5855) +#5717 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5718,#5720); +#5718 = ( REPRESENTATION_RELATIONSHIP('','',#5658,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5719) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5855 = ITEM_DEFINED_TRANSFORMATION('','',#11,#235); -#5856 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5857); -#5857 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('56', - 'ConnectorBank_Right_Screw_R03','',#5,#5789,$); -#5858 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5791)); -#5859 = SHAPE_DEFINITION_REPRESENTATION(#5860,#5866); -#5860 = PRODUCT_DEFINITION_SHAPE('','',#5861); -#5861 = PRODUCT_DEFINITION('design','',#5862,#5865); -#5862 = PRODUCT_DEFINITION_FORMATION('','',#5863); -#5863 = PRODUCT('ConnectorBank_Right_Hole_R03_C02', - 'ConnectorBank_Right_Hole_R03_C02','',(#5864)); -#5864 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5865 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5866 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5867),#5920); -#5867 = MANIFOLD_SOLID_BREP('',#5868); -#5868 = CLOSED_SHELL('',(#5869,#5902,#5911)); -#5869 = ADVANCED_FACE('',(#5870),#5897,.T.); -#5870 = FACE_BOUND('',#5871,.T.); -#5871 = EDGE_LOOP('',(#5872,#5881,#5889,#5896)); -#5872 = ORIENTED_EDGE('',*,*,#5873,.F.); -#5873 = EDGE_CURVE('',#5874,#5874,#5876,.T.); -#5874 = VERTEX_POINT('',#5875); -#5875 = CARTESIAN_POINT('',(70.,-37.85,72.538461538462)); -#5876 = CIRCLE('',#5877,1.); -#5877 = AXIS2_PLACEMENT_3D('',#5878,#5879,#5880); -#5878 = CARTESIAN_POINT('',(70.,-37.85,73.538461538462)); -#5879 = DIRECTION('',(0.,-1.,0.)); -#5880 = DIRECTION('',(0.,-0.,-1.)); -#5881 = ORIENTED_EDGE('',*,*,#5882,.F.); -#5882 = EDGE_CURVE('',#5883,#5874,#5885,.T.); -#5883 = VERTEX_POINT('',#5884); -#5884 = CARTESIAN_POINT('',(70.,-37.15,72.538461538462)); -#5885 = LINE('',#5886,#5887); -#5886 = CARTESIAN_POINT('',(70.,-37.15,72.538461538462)); -#5887 = VECTOR('',#5888,1.); -#5888 = DIRECTION('',(0.,-1.,0.)); -#5889 = ORIENTED_EDGE('',*,*,#5890,.T.); -#5890 = EDGE_CURVE('',#5883,#5883,#5891,.T.); -#5891 = CIRCLE('',#5892,1.); -#5892 = AXIS2_PLACEMENT_3D('',#5893,#5894,#5895); -#5893 = CARTESIAN_POINT('',(70.,-37.15,73.538461538462)); -#5894 = DIRECTION('',(0.,-1.,0.)); -#5895 = DIRECTION('',(0.,-0.,-1.)); -#5896 = ORIENTED_EDGE('',*,*,#5882,.T.); -#5897 = CYLINDRICAL_SURFACE('',#5898,1.); -#5898 = AXIS2_PLACEMENT_3D('',#5899,#5900,#5901); -#5899 = CARTESIAN_POINT('',(70.,-37.15,73.538461538462)); -#5900 = DIRECTION('',(0.,-1.,0.)); -#5901 = DIRECTION('',(0.,-0.,-1.)); -#5902 = ADVANCED_FACE('',(#5903),#5906,.T.); -#5903 = FACE_BOUND('',#5904,.T.); -#5904 = EDGE_LOOP('',(#5905)); -#5905 = ORIENTED_EDGE('',*,*,#5873,.T.); -#5906 = PLANE('',#5907); -#5907 = AXIS2_PLACEMENT_3D('',#5908,#5909,#5910); -#5908 = CARTESIAN_POINT('',(70.,-37.85,73.538461538462)); -#5909 = DIRECTION('',(0.,-1.,0.)); -#5910 = DIRECTION('',(0.,-0.,-1.)); -#5911 = ADVANCED_FACE('',(#5912),#5915,.F.); -#5912 = FACE_BOUND('',#5913,.T.); -#5913 = EDGE_LOOP('',(#5914)); -#5914 = ORIENTED_EDGE('',*,*,#5890,.F.); -#5915 = PLANE('',#5916); -#5916 = AXIS2_PLACEMENT_3D('',#5917,#5918,#5919); -#5917 = CARTESIAN_POINT('',(70.,-37.15,73.538461538462)); -#5918 = DIRECTION('',(0.,-1.,0.)); -#5919 = DIRECTION('',(0.,-0.,-1.)); -#5920 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5924)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5921,#5922,#5923)) REPRESENTATION_CONTEXT +#5719 = ITEM_DEFINED_TRANSFORMATION('','',#11,#235); +#5720 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5721); +#5721 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('56', + 'ConnectorBank_Right_Hole_R08_C01','',#5,#5653,$); +#5722 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5655)); +#5723 = SHAPE_DEFINITION_REPRESENTATION(#5724,#5730); +#5724 = PRODUCT_DEFINITION_SHAPE('','',#5725); +#5725 = PRODUCT_DEFINITION('design','',#5726,#5729); +#5726 = PRODUCT_DEFINITION_FORMATION('','',#5727); +#5727 = PRODUCT('ConnectorBank_Right_Hole_R08_C02', + 'ConnectorBank_Right_Hole_R08_C02','',(#5728)); +#5728 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5729 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5730 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5731),#5784); +#5731 = MANIFOLD_SOLID_BREP('',#5732); +#5732 = CLOSED_SHELL('',(#5733,#5766,#5775)); +#5733 = ADVANCED_FACE('',(#5734),#5761,.T.); +#5734 = FACE_BOUND('',#5735,.T.); +#5735 = EDGE_LOOP('',(#5736,#5745,#5753,#5760)); +#5736 = ORIENTED_EDGE('',*,*,#5737,.F.); +#5737 = EDGE_CURVE('',#5738,#5738,#5740,.T.); +#5738 = VERTEX_POINT('',#5739); +#5739 = CARTESIAN_POINT('',(-7.5,39.45,111.76923076923)); +#5740 = CIRCLE('',#5741,1.); +#5741 = AXIS2_PLACEMENT_3D('',#5742,#5743,#5744); +#5742 = CARTESIAN_POINT('',(-7.5,39.45,112.76923076923)); +#5743 = DIRECTION('',(0.,-1.,0.)); +#5744 = DIRECTION('',(0.,-0.,-1.)); +#5745 = ORIENTED_EDGE('',*,*,#5746,.F.); +#5746 = EDGE_CURVE('',#5747,#5738,#5749,.T.); +#5747 = VERTEX_POINT('',#5748); +#5748 = CARTESIAN_POINT('',(-7.5,40.15,111.76923076923)); +#5749 = LINE('',#5750,#5751); +#5750 = CARTESIAN_POINT('',(-7.5,40.15,111.76923076923)); +#5751 = VECTOR('',#5752,1.); +#5752 = DIRECTION('',(0.,-1.,0.)); +#5753 = ORIENTED_EDGE('',*,*,#5754,.T.); +#5754 = EDGE_CURVE('',#5747,#5747,#5755,.T.); +#5755 = CIRCLE('',#5756,1.); +#5756 = AXIS2_PLACEMENT_3D('',#5757,#5758,#5759); +#5757 = CARTESIAN_POINT('',(-7.5,40.15,112.76923076923)); +#5758 = DIRECTION('',(0.,-1.,0.)); +#5759 = DIRECTION('',(0.,-0.,-1.)); +#5760 = ORIENTED_EDGE('',*,*,#5746,.T.); +#5761 = CYLINDRICAL_SURFACE('',#5762,1.); +#5762 = AXIS2_PLACEMENT_3D('',#5763,#5764,#5765); +#5763 = CARTESIAN_POINT('',(-7.5,40.15,112.76923076923)); +#5764 = DIRECTION('',(0.,-1.,0.)); +#5765 = DIRECTION('',(0.,-0.,-1.)); +#5766 = ADVANCED_FACE('',(#5767),#5770,.T.); +#5767 = FACE_BOUND('',#5768,.T.); +#5768 = EDGE_LOOP('',(#5769)); +#5769 = ORIENTED_EDGE('',*,*,#5737,.T.); +#5770 = PLANE('',#5771); +#5771 = AXIS2_PLACEMENT_3D('',#5772,#5773,#5774); +#5772 = CARTESIAN_POINT('',(-7.5,39.45,112.76923076923)); +#5773 = DIRECTION('',(0.,-1.,0.)); +#5774 = DIRECTION('',(0.,-0.,-1.)); +#5775 = ADVANCED_FACE('',(#5776),#5779,.F.); +#5776 = FACE_BOUND('',#5777,.T.); +#5777 = EDGE_LOOP('',(#5778)); +#5778 = ORIENTED_EDGE('',*,*,#5754,.F.); +#5779 = PLANE('',#5780); +#5780 = AXIS2_PLACEMENT_3D('',#5781,#5782,#5783); +#5781 = CARTESIAN_POINT('',(-7.5,40.15,112.76923076923)); +#5782 = DIRECTION('',(0.,-1.,0.)); +#5783 = DIRECTION('',(0.,-0.,-1.)); +#5784 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5788)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5785,#5786,#5787)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5921 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5922 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5923 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5924 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5921, +#5785 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5786 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5787 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5788 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5785, 'distance_accuracy_value','confusion accuracy'); -#5925 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5926,#5928); -#5926 = ( REPRESENTATION_RELATIONSHIP('','',#5866,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5927) +#5789 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5790,#5792); +#5790 = ( REPRESENTATION_RELATIONSHIP('','',#5730,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5791) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5927 = ITEM_DEFINED_TRANSFORMATION('','',#11,#239); -#5928 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #5929); -#5929 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('57', - 'ConnectorBank_Right_Hole_R03_C02','',#5,#5861,$); -#5930 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5863)); -#5931 = SHAPE_DEFINITION_REPRESENTATION(#5932,#5938); -#5932 = PRODUCT_DEFINITION_SHAPE('','',#5933); -#5933 = PRODUCT_DEFINITION('design','',#5934,#5937); -#5934 = PRODUCT_DEFINITION_FORMATION('','',#5935); -#5935 = PRODUCT('ConnectorBank_Right_Hole_R03_C03', - 'ConnectorBank_Right_Hole_R03_C03','',(#5936)); -#5936 = PRODUCT_CONTEXT('',#2,'mechanical'); -#5937 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#5938 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5939),#5992); -#5939 = MANIFOLD_SOLID_BREP('',#5940); -#5940 = CLOSED_SHELL('',(#5941,#5974,#5983)); -#5941 = ADVANCED_FACE('',(#5942),#5969,.T.); -#5942 = FACE_BOUND('',#5943,.T.); -#5943 = EDGE_LOOP('',(#5944,#5953,#5961,#5968)); -#5944 = ORIENTED_EDGE('',*,*,#5945,.F.); -#5945 = EDGE_CURVE('',#5946,#5946,#5948,.T.); -#5946 = VERTEX_POINT('',#5947); -#5947 = CARTESIAN_POINT('',(75.,-37.85,72.538461538462)); -#5948 = CIRCLE('',#5949,1.); -#5949 = AXIS2_PLACEMENT_3D('',#5950,#5951,#5952); -#5950 = CARTESIAN_POINT('',(75.,-37.85,73.538461538462)); -#5951 = DIRECTION('',(0.,-1.,0.)); -#5952 = DIRECTION('',(0.,-0.,-1.)); -#5953 = ORIENTED_EDGE('',*,*,#5954,.F.); -#5954 = EDGE_CURVE('',#5955,#5946,#5957,.T.); -#5955 = VERTEX_POINT('',#5956); -#5956 = CARTESIAN_POINT('',(75.,-37.15,72.538461538462)); -#5957 = LINE('',#5958,#5959); -#5958 = CARTESIAN_POINT('',(75.,-37.15,72.538461538462)); -#5959 = VECTOR('',#5960,1.); -#5960 = DIRECTION('',(0.,-1.,0.)); -#5961 = ORIENTED_EDGE('',*,*,#5962,.T.); -#5962 = EDGE_CURVE('',#5955,#5955,#5963,.T.); -#5963 = CIRCLE('',#5964,1.); -#5964 = AXIS2_PLACEMENT_3D('',#5965,#5966,#5967); -#5965 = CARTESIAN_POINT('',(75.,-37.15,73.538461538462)); -#5966 = DIRECTION('',(0.,-1.,0.)); -#5967 = DIRECTION('',(0.,-0.,-1.)); -#5968 = ORIENTED_EDGE('',*,*,#5954,.T.); -#5969 = CYLINDRICAL_SURFACE('',#5970,1.); -#5970 = AXIS2_PLACEMENT_3D('',#5971,#5972,#5973); -#5971 = CARTESIAN_POINT('',(75.,-37.15,73.538461538462)); -#5972 = DIRECTION('',(0.,-1.,0.)); -#5973 = DIRECTION('',(0.,-0.,-1.)); -#5974 = ADVANCED_FACE('',(#5975),#5978,.T.); -#5975 = FACE_BOUND('',#5976,.T.); -#5976 = EDGE_LOOP('',(#5977)); -#5977 = ORIENTED_EDGE('',*,*,#5945,.T.); -#5978 = PLANE('',#5979); -#5979 = AXIS2_PLACEMENT_3D('',#5980,#5981,#5982); -#5980 = CARTESIAN_POINT('',(75.,-37.85,73.538461538462)); -#5981 = DIRECTION('',(0.,-1.,0.)); -#5982 = DIRECTION('',(0.,-0.,-1.)); -#5983 = ADVANCED_FACE('',(#5984),#5987,.F.); -#5984 = FACE_BOUND('',#5985,.T.); -#5985 = EDGE_LOOP('',(#5986)); -#5986 = ORIENTED_EDGE('',*,*,#5962,.F.); -#5987 = PLANE('',#5988); -#5988 = AXIS2_PLACEMENT_3D('',#5989,#5990,#5991); -#5989 = CARTESIAN_POINT('',(75.,-37.15,73.538461538462)); -#5990 = DIRECTION('',(0.,-1.,0.)); -#5991 = DIRECTION('',(0.,-0.,-1.)); -#5992 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5996)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#5993,#5994,#5995)) REPRESENTATION_CONTEXT +#5791 = ITEM_DEFINED_TRANSFORMATION('','',#11,#239); +#5792 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5793); +#5793 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('57', + 'ConnectorBank_Right_Hole_R08_C02','',#5,#5725,$); +#5794 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5727)); +#5795 = SHAPE_DEFINITION_REPRESENTATION(#5796,#5802); +#5796 = PRODUCT_DEFINITION_SHAPE('','',#5797); +#5797 = PRODUCT_DEFINITION('design','',#5798,#5801); +#5798 = PRODUCT_DEFINITION_FORMATION('','',#5799); +#5799 = PRODUCT('ConnectorBank_Right_Hole_R08_C03', + 'ConnectorBank_Right_Hole_R08_C03','',(#5800)); +#5800 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5801 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5802 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5803),#5856); +#5803 = MANIFOLD_SOLID_BREP('',#5804); +#5804 = CLOSED_SHELL('',(#5805,#5838,#5847)); +#5805 = ADVANCED_FACE('',(#5806),#5833,.T.); +#5806 = FACE_BOUND('',#5807,.T.); +#5807 = EDGE_LOOP('',(#5808,#5817,#5825,#5832)); +#5808 = ORIENTED_EDGE('',*,*,#5809,.F.); +#5809 = EDGE_CURVE('',#5810,#5810,#5812,.T.); +#5810 = VERTEX_POINT('',#5811); +#5811 = CARTESIAN_POINT('',(-2.5,39.45,111.76923076923)); +#5812 = CIRCLE('',#5813,1.); +#5813 = AXIS2_PLACEMENT_3D('',#5814,#5815,#5816); +#5814 = CARTESIAN_POINT('',(-2.5,39.45,112.76923076923)); +#5815 = DIRECTION('',(0.,-1.,0.)); +#5816 = DIRECTION('',(0.,-0.,-1.)); +#5817 = ORIENTED_EDGE('',*,*,#5818,.F.); +#5818 = EDGE_CURVE('',#5819,#5810,#5821,.T.); +#5819 = VERTEX_POINT('',#5820); +#5820 = CARTESIAN_POINT('',(-2.5,40.15,111.76923076923)); +#5821 = LINE('',#5822,#5823); +#5822 = CARTESIAN_POINT('',(-2.5,40.15,111.76923076923)); +#5823 = VECTOR('',#5824,1.); +#5824 = DIRECTION('',(0.,-1.,0.)); +#5825 = ORIENTED_EDGE('',*,*,#5826,.T.); +#5826 = EDGE_CURVE('',#5819,#5819,#5827,.T.); +#5827 = CIRCLE('',#5828,1.); +#5828 = AXIS2_PLACEMENT_3D('',#5829,#5830,#5831); +#5829 = CARTESIAN_POINT('',(-2.5,40.15,112.76923076923)); +#5830 = DIRECTION('',(0.,-1.,0.)); +#5831 = DIRECTION('',(0.,-0.,-1.)); +#5832 = ORIENTED_EDGE('',*,*,#5818,.T.); +#5833 = CYLINDRICAL_SURFACE('',#5834,1.); +#5834 = AXIS2_PLACEMENT_3D('',#5835,#5836,#5837); +#5835 = CARTESIAN_POINT('',(-2.5,40.15,112.76923076923)); +#5836 = DIRECTION('',(0.,-1.,0.)); +#5837 = DIRECTION('',(0.,-0.,-1.)); +#5838 = ADVANCED_FACE('',(#5839),#5842,.T.); +#5839 = FACE_BOUND('',#5840,.T.); +#5840 = EDGE_LOOP('',(#5841)); +#5841 = ORIENTED_EDGE('',*,*,#5809,.T.); +#5842 = PLANE('',#5843); +#5843 = AXIS2_PLACEMENT_3D('',#5844,#5845,#5846); +#5844 = CARTESIAN_POINT('',(-2.5,39.45,112.76923076923)); +#5845 = DIRECTION('',(0.,-1.,0.)); +#5846 = DIRECTION('',(0.,-0.,-1.)); +#5847 = ADVANCED_FACE('',(#5848),#5851,.F.); +#5848 = FACE_BOUND('',#5849,.T.); +#5849 = EDGE_LOOP('',(#5850)); +#5850 = ORIENTED_EDGE('',*,*,#5826,.F.); +#5851 = PLANE('',#5852); +#5852 = AXIS2_PLACEMENT_3D('',#5853,#5854,#5855); +#5853 = CARTESIAN_POINT('',(-2.5,40.15,112.76923076923)); +#5854 = DIRECTION('',(0.,-1.,0.)); +#5855 = DIRECTION('',(0.,-0.,-1.)); +#5856 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5860)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5857,#5858,#5859)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#5993 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#5994 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#5995 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#5996 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5993, +#5857 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5858 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5859 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5860 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5857, 'distance_accuracy_value','confusion accuracy'); -#5997 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5998,#6000); -#5998 = ( REPRESENTATION_RELATIONSHIP('','',#5938,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5999) +#5861 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5862,#5864); +#5862 = ( REPRESENTATION_RELATIONSHIP('','',#5802,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5863) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#5999 = ITEM_DEFINED_TRANSFORMATION('','',#11,#243); -#6000 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6001); -#6001 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('58', - 'ConnectorBank_Right_Hole_R03_C03','',#5,#5933,$); -#6002 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5935)); -#6003 = SHAPE_DEFINITION_REPRESENTATION(#6004,#6010); -#6004 = PRODUCT_DEFINITION_SHAPE('','',#6005); -#6005 = PRODUCT_DEFINITION('design','',#6006,#6009); -#6006 = PRODUCT_DEFINITION_FORMATION('','',#6007); -#6007 = PRODUCT('ConnectorBank_Right_Hole_R04_C01', - 'ConnectorBank_Right_Hole_R04_C01','',(#6008)); -#6008 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6009 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6010 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6011),#6064); -#6011 = MANIFOLD_SOLID_BREP('',#6012); -#6012 = CLOSED_SHELL('',(#6013,#6046,#6055)); -#6013 = ADVANCED_FACE('',(#6014),#6041,.T.); -#6014 = FACE_BOUND('',#6015,.T.); -#6015 = EDGE_LOOP('',(#6016,#6025,#6033,#6040)); -#6016 = ORIENTED_EDGE('',*,*,#6017,.F.); -#6017 = EDGE_CURVE('',#6018,#6018,#6020,.T.); -#6018 = VERTEX_POINT('',#6019); -#6019 = CARTESIAN_POINT('',(65.,-37.85,80.384615384615)); -#6020 = CIRCLE('',#6021,1.); -#6021 = AXIS2_PLACEMENT_3D('',#6022,#6023,#6024); -#6022 = CARTESIAN_POINT('',(65.,-37.85,81.384615384615)); -#6023 = DIRECTION('',(0.,-1.,0.)); -#6024 = DIRECTION('',(0.,-0.,-1.)); -#6025 = ORIENTED_EDGE('',*,*,#6026,.F.); -#6026 = EDGE_CURVE('',#6027,#6018,#6029,.T.); -#6027 = VERTEX_POINT('',#6028); -#6028 = CARTESIAN_POINT('',(65.,-37.15,80.384615384615)); -#6029 = LINE('',#6030,#6031); -#6030 = CARTESIAN_POINT('',(65.,-37.15,80.384615384615)); -#6031 = VECTOR('',#6032,1.); -#6032 = DIRECTION('',(0.,-1.,0.)); -#6033 = ORIENTED_EDGE('',*,*,#6034,.T.); -#6034 = EDGE_CURVE('',#6027,#6027,#6035,.T.); -#6035 = CIRCLE('',#6036,1.); -#6036 = AXIS2_PLACEMENT_3D('',#6037,#6038,#6039); -#6037 = CARTESIAN_POINT('',(65.,-37.15,81.384615384615)); -#6038 = DIRECTION('',(0.,-1.,0.)); -#6039 = DIRECTION('',(0.,-0.,-1.)); -#6040 = ORIENTED_EDGE('',*,*,#6026,.T.); -#6041 = CYLINDRICAL_SURFACE('',#6042,1.); -#6042 = AXIS2_PLACEMENT_3D('',#6043,#6044,#6045); -#6043 = CARTESIAN_POINT('',(65.,-37.15,81.384615384615)); -#6044 = DIRECTION('',(0.,-1.,0.)); -#6045 = DIRECTION('',(0.,-0.,-1.)); -#6046 = ADVANCED_FACE('',(#6047),#6050,.T.); -#6047 = FACE_BOUND('',#6048,.T.); -#6048 = EDGE_LOOP('',(#6049)); -#6049 = ORIENTED_EDGE('',*,*,#6017,.T.); -#6050 = PLANE('',#6051); -#6051 = AXIS2_PLACEMENT_3D('',#6052,#6053,#6054); -#6052 = CARTESIAN_POINT('',(65.,-37.85,81.384615384615)); -#6053 = DIRECTION('',(0.,-1.,0.)); -#6054 = DIRECTION('',(0.,-0.,-1.)); -#6055 = ADVANCED_FACE('',(#6056),#6059,.F.); -#6056 = FACE_BOUND('',#6057,.T.); -#6057 = EDGE_LOOP('',(#6058)); -#6058 = ORIENTED_EDGE('',*,*,#6034,.F.); -#6059 = PLANE('',#6060); -#6060 = AXIS2_PLACEMENT_3D('',#6061,#6062,#6063); -#6061 = CARTESIAN_POINT('',(65.,-37.15,81.384615384615)); -#6062 = DIRECTION('',(0.,-1.,0.)); -#6063 = DIRECTION('',(0.,-0.,-1.)); -#6064 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6068)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6065,#6066,#6067)) REPRESENTATION_CONTEXT +#5863 = ITEM_DEFINED_TRANSFORMATION('','',#11,#243); +#5864 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5865); +#5865 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('58', + 'ConnectorBank_Right_Hole_R08_C03','',#5,#5797,$); +#5866 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5799)); +#5867 = SHAPE_DEFINITION_REPRESENTATION(#5868,#5874); +#5868 = PRODUCT_DEFINITION_SHAPE('','',#5869); +#5869 = PRODUCT_DEFINITION('design','',#5870,#5873); +#5870 = PRODUCT_DEFINITION_FORMATION('','',#5871); +#5871 = PRODUCT('ConnectorBank_Right_Hole_R09_C01', + 'ConnectorBank_Right_Hole_R09_C01','',(#5872)); +#5872 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5873 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5874 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5875),#5928); +#5875 = MANIFOLD_SOLID_BREP('',#5876); +#5876 = CLOSED_SHELL('',(#5877,#5910,#5919)); +#5877 = ADVANCED_FACE('',(#5878),#5905,.T.); +#5878 = FACE_BOUND('',#5879,.T.); +#5879 = EDGE_LOOP('',(#5880,#5889,#5897,#5904)); +#5880 = ORIENTED_EDGE('',*,*,#5881,.F.); +#5881 = EDGE_CURVE('',#5882,#5882,#5884,.T.); +#5882 = VERTEX_POINT('',#5883); +#5883 = CARTESIAN_POINT('',(-12.5,39.45,119.61538461538)); +#5884 = CIRCLE('',#5885,1.); +#5885 = AXIS2_PLACEMENT_3D('',#5886,#5887,#5888); +#5886 = CARTESIAN_POINT('',(-12.5,39.45,120.61538461538)); +#5887 = DIRECTION('',(0.,-1.,0.)); +#5888 = DIRECTION('',(0.,-0.,-1.)); +#5889 = ORIENTED_EDGE('',*,*,#5890,.F.); +#5890 = EDGE_CURVE('',#5891,#5882,#5893,.T.); +#5891 = VERTEX_POINT('',#5892); +#5892 = CARTESIAN_POINT('',(-12.5,40.15,119.61538461538)); +#5893 = LINE('',#5894,#5895); +#5894 = CARTESIAN_POINT('',(-12.5,40.15,119.61538461538)); +#5895 = VECTOR('',#5896,1.); +#5896 = DIRECTION('',(0.,-1.,0.)); +#5897 = ORIENTED_EDGE('',*,*,#5898,.T.); +#5898 = EDGE_CURVE('',#5891,#5891,#5899,.T.); +#5899 = CIRCLE('',#5900,1.); +#5900 = AXIS2_PLACEMENT_3D('',#5901,#5902,#5903); +#5901 = CARTESIAN_POINT('',(-12.5,40.15,120.61538461538)); +#5902 = DIRECTION('',(0.,-1.,0.)); +#5903 = DIRECTION('',(0.,-0.,-1.)); +#5904 = ORIENTED_EDGE('',*,*,#5890,.T.); +#5905 = CYLINDRICAL_SURFACE('',#5906,1.); +#5906 = AXIS2_PLACEMENT_3D('',#5907,#5908,#5909); +#5907 = CARTESIAN_POINT('',(-12.5,40.15,120.61538461538)); +#5908 = DIRECTION('',(0.,-1.,0.)); +#5909 = DIRECTION('',(0.,-0.,-1.)); +#5910 = ADVANCED_FACE('',(#5911),#5914,.T.); +#5911 = FACE_BOUND('',#5912,.T.); +#5912 = EDGE_LOOP('',(#5913)); +#5913 = ORIENTED_EDGE('',*,*,#5881,.T.); +#5914 = PLANE('',#5915); +#5915 = AXIS2_PLACEMENT_3D('',#5916,#5917,#5918); +#5916 = CARTESIAN_POINT('',(-12.5,39.45,120.61538461538)); +#5917 = DIRECTION('',(0.,-1.,0.)); +#5918 = DIRECTION('',(0.,-0.,-1.)); +#5919 = ADVANCED_FACE('',(#5920),#5923,.F.); +#5920 = FACE_BOUND('',#5921,.T.); +#5921 = EDGE_LOOP('',(#5922)); +#5922 = ORIENTED_EDGE('',*,*,#5898,.F.); +#5923 = PLANE('',#5924); +#5924 = AXIS2_PLACEMENT_3D('',#5925,#5926,#5927); +#5925 = CARTESIAN_POINT('',(-12.5,40.15,120.61538461538)); +#5926 = DIRECTION('',(0.,-1.,0.)); +#5927 = DIRECTION('',(0.,-0.,-1.)); +#5928 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5932)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5929,#5930,#5931)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6065 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6066 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6067 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6068 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6065, +#5929 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5930 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5931 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5932 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5929, 'distance_accuracy_value','confusion accuracy'); -#6069 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6070,#6072); -#6070 = ( REPRESENTATION_RELATIONSHIP('','',#6010,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6071) +#5933 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5934,#5936); +#5934 = ( REPRESENTATION_RELATIONSHIP('','',#5874,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5935) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6071 = ITEM_DEFINED_TRANSFORMATION('','',#11,#247); -#6072 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6073); -#6073 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('59', - 'ConnectorBank_Right_Hole_R04_C01','',#5,#6005,$); -#6074 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6007)); -#6075 = SHAPE_DEFINITION_REPRESENTATION(#6076,#6082); -#6076 = PRODUCT_DEFINITION_SHAPE('','',#6077); -#6077 = PRODUCT_DEFINITION('design','',#6078,#6081); -#6078 = PRODUCT_DEFINITION_FORMATION('','',#6079); -#6079 = PRODUCT('ConnectorBank_Right_Screw_R04', - 'ConnectorBank_Right_Screw_R04','',(#6080)); -#6080 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6081 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6082 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6083),#6136); -#6083 = MANIFOLD_SOLID_BREP('',#6084); -#6084 = CLOSED_SHELL('',(#6085,#6118,#6127)); -#6085 = ADVANCED_FACE('',(#6086),#6113,.T.); -#6086 = FACE_BOUND('',#6087,.T.); -#6087 = EDGE_LOOP('',(#6088,#6097,#6105,#6112)); -#6088 = ORIENTED_EDGE('',*,*,#6089,.F.); -#6089 = EDGE_CURVE('',#6090,#6090,#6092,.T.); -#6090 = VERTEX_POINT('',#6091); -#6091 = CARTESIAN_POINT('',(82.6,-37.95,80.834615384615)); -#6092 = CIRCLE('',#6093,0.55); -#6093 = AXIS2_PLACEMENT_3D('',#6094,#6095,#6096); -#6094 = CARTESIAN_POINT('',(82.6,-37.95,81.384615384615)); -#6095 = DIRECTION('',(0.,-1.,0.)); -#6096 = DIRECTION('',(0.,-0.,-1.)); -#6097 = ORIENTED_EDGE('',*,*,#6098,.F.); -#6098 = EDGE_CURVE('',#6099,#6090,#6101,.T.); -#6099 = VERTEX_POINT('',#6100); -#6100 = CARTESIAN_POINT('',(82.6,-37.15,80.834615384615)); -#6101 = LINE('',#6102,#6103); -#6102 = CARTESIAN_POINT('',(82.6,-37.15,80.834615384615)); -#6103 = VECTOR('',#6104,1.); -#6104 = DIRECTION('',(0.,-1.,0.)); -#6105 = ORIENTED_EDGE('',*,*,#6106,.T.); -#6106 = EDGE_CURVE('',#6099,#6099,#6107,.T.); -#6107 = CIRCLE('',#6108,0.55); -#6108 = AXIS2_PLACEMENT_3D('',#6109,#6110,#6111); -#6109 = CARTESIAN_POINT('',(82.6,-37.15,81.384615384615)); -#6110 = DIRECTION('',(0.,-1.,0.)); -#6111 = DIRECTION('',(0.,-0.,-1.)); -#6112 = ORIENTED_EDGE('',*,*,#6098,.T.); -#6113 = CYLINDRICAL_SURFACE('',#6114,0.55); -#6114 = AXIS2_PLACEMENT_3D('',#6115,#6116,#6117); -#6115 = CARTESIAN_POINT('',(82.6,-37.15,81.384615384615)); -#6116 = DIRECTION('',(0.,-1.,0.)); -#6117 = DIRECTION('',(0.,-0.,-1.)); -#6118 = ADVANCED_FACE('',(#6119),#6122,.T.); -#6119 = FACE_BOUND('',#6120,.T.); -#6120 = EDGE_LOOP('',(#6121)); -#6121 = ORIENTED_EDGE('',*,*,#6089,.T.); -#6122 = PLANE('',#6123); -#6123 = AXIS2_PLACEMENT_3D('',#6124,#6125,#6126); -#6124 = CARTESIAN_POINT('',(82.6,-37.95,81.384615384615)); -#6125 = DIRECTION('',(0.,-1.,0.)); -#6126 = DIRECTION('',(0.,-0.,-1.)); -#6127 = ADVANCED_FACE('',(#6128),#6131,.F.); -#6128 = FACE_BOUND('',#6129,.T.); -#6129 = EDGE_LOOP('',(#6130)); -#6130 = ORIENTED_EDGE('',*,*,#6106,.F.); -#6131 = PLANE('',#6132); -#6132 = AXIS2_PLACEMENT_3D('',#6133,#6134,#6135); -#6133 = CARTESIAN_POINT('',(82.6,-37.15,81.384615384615)); -#6134 = DIRECTION('',(0.,-1.,0.)); -#6135 = DIRECTION('',(0.,-0.,-1.)); -#6136 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6140)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6137,#6138,#6139)) REPRESENTATION_CONTEXT +#5935 = ITEM_DEFINED_TRANSFORMATION('','',#11,#247); +#5936 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5937); +#5937 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('59', + 'ConnectorBank_Right_Hole_R09_C01','',#5,#5869,$); +#5938 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5871)); +#5939 = SHAPE_DEFINITION_REPRESENTATION(#5940,#5946); +#5940 = PRODUCT_DEFINITION_SHAPE('','',#5941); +#5941 = PRODUCT_DEFINITION('design','',#5942,#5945); +#5942 = PRODUCT_DEFINITION_FORMATION('','',#5943); +#5943 = PRODUCT('ConnectorBank_Right_Hole_R09_C02', + 'ConnectorBank_Right_Hole_R09_C02','',(#5944)); +#5944 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5945 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5946 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5947),#6000); +#5947 = MANIFOLD_SOLID_BREP('',#5948); +#5948 = CLOSED_SHELL('',(#5949,#5982,#5991)); +#5949 = ADVANCED_FACE('',(#5950),#5977,.T.); +#5950 = FACE_BOUND('',#5951,.T.); +#5951 = EDGE_LOOP('',(#5952,#5961,#5969,#5976)); +#5952 = ORIENTED_EDGE('',*,*,#5953,.F.); +#5953 = EDGE_CURVE('',#5954,#5954,#5956,.T.); +#5954 = VERTEX_POINT('',#5955); +#5955 = CARTESIAN_POINT('',(-7.5,39.45,119.61538461538)); +#5956 = CIRCLE('',#5957,1.); +#5957 = AXIS2_PLACEMENT_3D('',#5958,#5959,#5960); +#5958 = CARTESIAN_POINT('',(-7.5,39.45,120.61538461538)); +#5959 = DIRECTION('',(0.,-1.,0.)); +#5960 = DIRECTION('',(0.,-0.,-1.)); +#5961 = ORIENTED_EDGE('',*,*,#5962,.F.); +#5962 = EDGE_CURVE('',#5963,#5954,#5965,.T.); +#5963 = VERTEX_POINT('',#5964); +#5964 = CARTESIAN_POINT('',(-7.5,40.15,119.61538461538)); +#5965 = LINE('',#5966,#5967); +#5966 = CARTESIAN_POINT('',(-7.5,40.15,119.61538461538)); +#5967 = VECTOR('',#5968,1.); +#5968 = DIRECTION('',(0.,-1.,0.)); +#5969 = ORIENTED_EDGE('',*,*,#5970,.T.); +#5970 = EDGE_CURVE('',#5963,#5963,#5971,.T.); +#5971 = CIRCLE('',#5972,1.); +#5972 = AXIS2_PLACEMENT_3D('',#5973,#5974,#5975); +#5973 = CARTESIAN_POINT('',(-7.5,40.15,120.61538461538)); +#5974 = DIRECTION('',(0.,-1.,0.)); +#5975 = DIRECTION('',(0.,-0.,-1.)); +#5976 = ORIENTED_EDGE('',*,*,#5962,.T.); +#5977 = CYLINDRICAL_SURFACE('',#5978,1.); +#5978 = AXIS2_PLACEMENT_3D('',#5979,#5980,#5981); +#5979 = CARTESIAN_POINT('',(-7.5,40.15,120.61538461538)); +#5980 = DIRECTION('',(0.,-1.,0.)); +#5981 = DIRECTION('',(0.,-0.,-1.)); +#5982 = ADVANCED_FACE('',(#5983),#5986,.T.); +#5983 = FACE_BOUND('',#5984,.T.); +#5984 = EDGE_LOOP('',(#5985)); +#5985 = ORIENTED_EDGE('',*,*,#5953,.T.); +#5986 = PLANE('',#5987); +#5987 = AXIS2_PLACEMENT_3D('',#5988,#5989,#5990); +#5988 = CARTESIAN_POINT('',(-7.5,39.45,120.61538461538)); +#5989 = DIRECTION('',(0.,-1.,0.)); +#5990 = DIRECTION('',(0.,-0.,-1.)); +#5991 = ADVANCED_FACE('',(#5992),#5995,.F.); +#5992 = FACE_BOUND('',#5993,.T.); +#5993 = EDGE_LOOP('',(#5994)); +#5994 = ORIENTED_EDGE('',*,*,#5970,.F.); +#5995 = PLANE('',#5996); +#5996 = AXIS2_PLACEMENT_3D('',#5997,#5998,#5999); +#5997 = CARTESIAN_POINT('',(-7.5,40.15,120.61538461538)); +#5998 = DIRECTION('',(0.,-1.,0.)); +#5999 = DIRECTION('',(0.,-0.,-1.)); +#6000 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6004)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6001,#6002,#6003)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6137 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6138 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6139 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6140 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6137, +#6001 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6002 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6003 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6004 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6001, 'distance_accuracy_value','confusion accuracy'); -#6141 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6142,#6144); -#6142 = ( REPRESENTATION_RELATIONSHIP('','',#6082,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6143) +#6005 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6006,#6008); +#6006 = ( REPRESENTATION_RELATIONSHIP('','',#5946,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6007) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6143 = ITEM_DEFINED_TRANSFORMATION('','',#11,#251); -#6144 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6145); -#6145 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('60', - 'ConnectorBank_Right_Screw_R04','',#5,#6077,$); -#6146 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6079)); -#6147 = SHAPE_DEFINITION_REPRESENTATION(#6148,#6154); -#6148 = PRODUCT_DEFINITION_SHAPE('','',#6149); -#6149 = PRODUCT_DEFINITION('design','',#6150,#6153); -#6150 = PRODUCT_DEFINITION_FORMATION('','',#6151); -#6151 = PRODUCT('ConnectorBank_Right_Hole_R04_C02', - 'ConnectorBank_Right_Hole_R04_C02','',(#6152)); -#6152 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6153 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6154 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6155),#6208); -#6155 = MANIFOLD_SOLID_BREP('',#6156); -#6156 = CLOSED_SHELL('',(#6157,#6190,#6199)); -#6157 = ADVANCED_FACE('',(#6158),#6185,.T.); -#6158 = FACE_BOUND('',#6159,.T.); -#6159 = EDGE_LOOP('',(#6160,#6169,#6177,#6184)); -#6160 = ORIENTED_EDGE('',*,*,#6161,.F.); -#6161 = EDGE_CURVE('',#6162,#6162,#6164,.T.); -#6162 = VERTEX_POINT('',#6163); -#6163 = CARTESIAN_POINT('',(70.,-37.85,80.384615384615)); -#6164 = CIRCLE('',#6165,1.); -#6165 = AXIS2_PLACEMENT_3D('',#6166,#6167,#6168); -#6166 = CARTESIAN_POINT('',(70.,-37.85,81.384615384615)); -#6167 = DIRECTION('',(0.,-1.,0.)); -#6168 = DIRECTION('',(0.,-0.,-1.)); -#6169 = ORIENTED_EDGE('',*,*,#6170,.F.); -#6170 = EDGE_CURVE('',#6171,#6162,#6173,.T.); -#6171 = VERTEX_POINT('',#6172); -#6172 = CARTESIAN_POINT('',(70.,-37.15,80.384615384615)); -#6173 = LINE('',#6174,#6175); -#6174 = CARTESIAN_POINT('',(70.,-37.15,80.384615384615)); -#6175 = VECTOR('',#6176,1.); -#6176 = DIRECTION('',(0.,-1.,0.)); -#6177 = ORIENTED_EDGE('',*,*,#6178,.T.); -#6178 = EDGE_CURVE('',#6171,#6171,#6179,.T.); -#6179 = CIRCLE('',#6180,1.); -#6180 = AXIS2_PLACEMENT_3D('',#6181,#6182,#6183); -#6181 = CARTESIAN_POINT('',(70.,-37.15,81.384615384615)); -#6182 = DIRECTION('',(0.,-1.,0.)); -#6183 = DIRECTION('',(0.,-0.,-1.)); -#6184 = ORIENTED_EDGE('',*,*,#6170,.T.); -#6185 = CYLINDRICAL_SURFACE('',#6186,1.); -#6186 = AXIS2_PLACEMENT_3D('',#6187,#6188,#6189); -#6187 = CARTESIAN_POINT('',(70.,-37.15,81.384615384615)); -#6188 = DIRECTION('',(0.,-1.,0.)); -#6189 = DIRECTION('',(0.,-0.,-1.)); -#6190 = ADVANCED_FACE('',(#6191),#6194,.T.); -#6191 = FACE_BOUND('',#6192,.T.); -#6192 = EDGE_LOOP('',(#6193)); -#6193 = ORIENTED_EDGE('',*,*,#6161,.T.); -#6194 = PLANE('',#6195); -#6195 = AXIS2_PLACEMENT_3D('',#6196,#6197,#6198); -#6196 = CARTESIAN_POINT('',(70.,-37.85,81.384615384615)); -#6197 = DIRECTION('',(0.,-1.,0.)); -#6198 = DIRECTION('',(0.,-0.,-1.)); -#6199 = ADVANCED_FACE('',(#6200),#6203,.F.); -#6200 = FACE_BOUND('',#6201,.T.); -#6201 = EDGE_LOOP('',(#6202)); -#6202 = ORIENTED_EDGE('',*,*,#6178,.F.); -#6203 = PLANE('',#6204); -#6204 = AXIS2_PLACEMENT_3D('',#6205,#6206,#6207); -#6205 = CARTESIAN_POINT('',(70.,-37.15,81.384615384615)); -#6206 = DIRECTION('',(0.,-1.,0.)); -#6207 = DIRECTION('',(0.,-0.,-1.)); -#6208 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6212)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6209,#6210,#6211)) REPRESENTATION_CONTEXT +#6007 = ITEM_DEFINED_TRANSFORMATION('','',#11,#251); +#6008 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6009); +#6009 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('60', + 'ConnectorBank_Right_Hole_R09_C02','',#5,#5941,$); +#6010 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5943)); +#6011 = SHAPE_DEFINITION_REPRESENTATION(#6012,#6018); +#6012 = PRODUCT_DEFINITION_SHAPE('','',#6013); +#6013 = PRODUCT_DEFINITION('design','',#6014,#6017); +#6014 = PRODUCT_DEFINITION_FORMATION('','',#6015); +#6015 = PRODUCT('ConnectorBank_Right_Hole_R09_C03', + 'ConnectorBank_Right_Hole_R09_C03','',(#6016)); +#6016 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6017 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6018 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6019),#6072); +#6019 = MANIFOLD_SOLID_BREP('',#6020); +#6020 = CLOSED_SHELL('',(#6021,#6054,#6063)); +#6021 = ADVANCED_FACE('',(#6022),#6049,.T.); +#6022 = FACE_BOUND('',#6023,.T.); +#6023 = EDGE_LOOP('',(#6024,#6033,#6041,#6048)); +#6024 = ORIENTED_EDGE('',*,*,#6025,.F.); +#6025 = EDGE_CURVE('',#6026,#6026,#6028,.T.); +#6026 = VERTEX_POINT('',#6027); +#6027 = CARTESIAN_POINT('',(-2.5,39.45,119.61538461538)); +#6028 = CIRCLE('',#6029,1.); +#6029 = AXIS2_PLACEMENT_3D('',#6030,#6031,#6032); +#6030 = CARTESIAN_POINT('',(-2.5,39.45,120.61538461538)); +#6031 = DIRECTION('',(0.,-1.,0.)); +#6032 = DIRECTION('',(0.,-0.,-1.)); +#6033 = ORIENTED_EDGE('',*,*,#6034,.F.); +#6034 = EDGE_CURVE('',#6035,#6026,#6037,.T.); +#6035 = VERTEX_POINT('',#6036); +#6036 = CARTESIAN_POINT('',(-2.5,40.15,119.61538461538)); +#6037 = LINE('',#6038,#6039); +#6038 = CARTESIAN_POINT('',(-2.5,40.15,119.61538461538)); +#6039 = VECTOR('',#6040,1.); +#6040 = DIRECTION('',(0.,-1.,0.)); +#6041 = ORIENTED_EDGE('',*,*,#6042,.T.); +#6042 = EDGE_CURVE('',#6035,#6035,#6043,.T.); +#6043 = CIRCLE('',#6044,1.); +#6044 = AXIS2_PLACEMENT_3D('',#6045,#6046,#6047); +#6045 = CARTESIAN_POINT('',(-2.5,40.15,120.61538461538)); +#6046 = DIRECTION('',(0.,-1.,0.)); +#6047 = DIRECTION('',(0.,-0.,-1.)); +#6048 = ORIENTED_EDGE('',*,*,#6034,.T.); +#6049 = CYLINDRICAL_SURFACE('',#6050,1.); +#6050 = AXIS2_PLACEMENT_3D('',#6051,#6052,#6053); +#6051 = CARTESIAN_POINT('',(-2.5,40.15,120.61538461538)); +#6052 = DIRECTION('',(0.,-1.,0.)); +#6053 = DIRECTION('',(0.,-0.,-1.)); +#6054 = ADVANCED_FACE('',(#6055),#6058,.T.); +#6055 = FACE_BOUND('',#6056,.T.); +#6056 = EDGE_LOOP('',(#6057)); +#6057 = ORIENTED_EDGE('',*,*,#6025,.T.); +#6058 = PLANE('',#6059); +#6059 = AXIS2_PLACEMENT_3D('',#6060,#6061,#6062); +#6060 = CARTESIAN_POINT('',(-2.5,39.45,120.61538461538)); +#6061 = DIRECTION('',(0.,-1.,0.)); +#6062 = DIRECTION('',(0.,-0.,-1.)); +#6063 = ADVANCED_FACE('',(#6064),#6067,.F.); +#6064 = FACE_BOUND('',#6065,.T.); +#6065 = EDGE_LOOP('',(#6066)); +#6066 = ORIENTED_EDGE('',*,*,#6042,.F.); +#6067 = PLANE('',#6068); +#6068 = AXIS2_PLACEMENT_3D('',#6069,#6070,#6071); +#6069 = CARTESIAN_POINT('',(-2.5,40.15,120.61538461538)); +#6070 = DIRECTION('',(0.,-1.,0.)); +#6071 = DIRECTION('',(0.,-0.,-1.)); +#6072 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6076)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6073,#6074,#6075)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6209 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6210 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6211 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6212 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6209, +#6073 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6074 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6075 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6076 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6073, 'distance_accuracy_value','confusion accuracy'); -#6213 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6214,#6216); -#6214 = ( REPRESENTATION_RELATIONSHIP('','',#6154,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6215) +#6077 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6078,#6080); +#6078 = ( REPRESENTATION_RELATIONSHIP('','',#6018,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6079) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6215 = ITEM_DEFINED_TRANSFORMATION('','',#11,#255); -#6216 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6217); -#6217 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('61', - 'ConnectorBank_Right_Hole_R04_C02','',#5,#6149,$); -#6218 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6151)); -#6219 = SHAPE_DEFINITION_REPRESENTATION(#6220,#6226); -#6220 = PRODUCT_DEFINITION_SHAPE('','',#6221); -#6221 = PRODUCT_DEFINITION('design','',#6222,#6225); -#6222 = PRODUCT_DEFINITION_FORMATION('','',#6223); -#6223 = PRODUCT('ConnectorBank_Right_Hole_R04_C03', - 'ConnectorBank_Right_Hole_R04_C03','',(#6224)); -#6224 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6225 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6226 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6227),#6280); -#6227 = MANIFOLD_SOLID_BREP('',#6228); -#6228 = CLOSED_SHELL('',(#6229,#6262,#6271)); -#6229 = ADVANCED_FACE('',(#6230),#6257,.T.); -#6230 = FACE_BOUND('',#6231,.T.); -#6231 = EDGE_LOOP('',(#6232,#6241,#6249,#6256)); -#6232 = ORIENTED_EDGE('',*,*,#6233,.F.); -#6233 = EDGE_CURVE('',#6234,#6234,#6236,.T.); -#6234 = VERTEX_POINT('',#6235); -#6235 = CARTESIAN_POINT('',(75.,-37.85,80.384615384615)); -#6236 = CIRCLE('',#6237,1.); -#6237 = AXIS2_PLACEMENT_3D('',#6238,#6239,#6240); -#6238 = CARTESIAN_POINT('',(75.,-37.85,81.384615384615)); -#6239 = DIRECTION('',(0.,-1.,0.)); -#6240 = DIRECTION('',(0.,-0.,-1.)); -#6241 = ORIENTED_EDGE('',*,*,#6242,.F.); -#6242 = EDGE_CURVE('',#6243,#6234,#6245,.T.); -#6243 = VERTEX_POINT('',#6244); -#6244 = CARTESIAN_POINT('',(75.,-37.15,80.384615384615)); -#6245 = LINE('',#6246,#6247); -#6246 = CARTESIAN_POINT('',(75.,-37.15,80.384615384615)); -#6247 = VECTOR('',#6248,1.); -#6248 = DIRECTION('',(0.,-1.,0.)); -#6249 = ORIENTED_EDGE('',*,*,#6250,.T.); -#6250 = EDGE_CURVE('',#6243,#6243,#6251,.T.); -#6251 = CIRCLE('',#6252,1.); -#6252 = AXIS2_PLACEMENT_3D('',#6253,#6254,#6255); -#6253 = CARTESIAN_POINT('',(75.,-37.15,81.384615384615)); -#6254 = DIRECTION('',(0.,-1.,0.)); -#6255 = DIRECTION('',(0.,-0.,-1.)); -#6256 = ORIENTED_EDGE('',*,*,#6242,.T.); -#6257 = CYLINDRICAL_SURFACE('',#6258,1.); -#6258 = AXIS2_PLACEMENT_3D('',#6259,#6260,#6261); -#6259 = CARTESIAN_POINT('',(75.,-37.15,81.384615384615)); -#6260 = DIRECTION('',(0.,-1.,0.)); -#6261 = DIRECTION('',(0.,-0.,-1.)); -#6262 = ADVANCED_FACE('',(#6263),#6266,.T.); -#6263 = FACE_BOUND('',#6264,.T.); -#6264 = EDGE_LOOP('',(#6265)); -#6265 = ORIENTED_EDGE('',*,*,#6233,.T.); -#6266 = PLANE('',#6267); -#6267 = AXIS2_PLACEMENT_3D('',#6268,#6269,#6270); -#6268 = CARTESIAN_POINT('',(75.,-37.85,81.384615384615)); -#6269 = DIRECTION('',(0.,-1.,0.)); -#6270 = DIRECTION('',(0.,-0.,-1.)); -#6271 = ADVANCED_FACE('',(#6272),#6275,.F.); -#6272 = FACE_BOUND('',#6273,.T.); -#6273 = EDGE_LOOP('',(#6274)); -#6274 = ORIENTED_EDGE('',*,*,#6250,.F.); -#6275 = PLANE('',#6276); -#6276 = AXIS2_PLACEMENT_3D('',#6277,#6278,#6279); -#6277 = CARTESIAN_POINT('',(75.,-37.15,81.384615384615)); -#6278 = DIRECTION('',(0.,-1.,0.)); -#6279 = DIRECTION('',(0.,-0.,-1.)); -#6280 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6284)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6281,#6282,#6283)) REPRESENTATION_CONTEXT +#6079 = ITEM_DEFINED_TRANSFORMATION('','',#11,#255); +#6080 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6081); +#6081 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('61', + 'ConnectorBank_Right_Hole_R09_C03','',#5,#6013,$); +#6082 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6015)); +#6083 = SHAPE_DEFINITION_REPRESENTATION(#6084,#6090); +#6084 = PRODUCT_DEFINITION_SHAPE('','',#6085); +#6085 = PRODUCT_DEFINITION('design','',#6086,#6089); +#6086 = PRODUCT_DEFINITION_FORMATION('','',#6087); +#6087 = PRODUCT('ConnectorBank_Right_Hole_R10_C01', + 'ConnectorBank_Right_Hole_R10_C01','',(#6088)); +#6088 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6089 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6090 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6091),#6144); +#6091 = MANIFOLD_SOLID_BREP('',#6092); +#6092 = CLOSED_SHELL('',(#6093,#6126,#6135)); +#6093 = ADVANCED_FACE('',(#6094),#6121,.T.); +#6094 = FACE_BOUND('',#6095,.T.); +#6095 = EDGE_LOOP('',(#6096,#6105,#6113,#6120)); +#6096 = ORIENTED_EDGE('',*,*,#6097,.F.); +#6097 = EDGE_CURVE('',#6098,#6098,#6100,.T.); +#6098 = VERTEX_POINT('',#6099); +#6099 = CARTESIAN_POINT('',(-12.5,39.45,127.46153846153)); +#6100 = CIRCLE('',#6101,1.); +#6101 = AXIS2_PLACEMENT_3D('',#6102,#6103,#6104); +#6102 = CARTESIAN_POINT('',(-12.5,39.45,128.46153846153)); +#6103 = DIRECTION('',(0.,-1.,0.)); +#6104 = DIRECTION('',(0.,-0.,-1.)); +#6105 = ORIENTED_EDGE('',*,*,#6106,.F.); +#6106 = EDGE_CURVE('',#6107,#6098,#6109,.T.); +#6107 = VERTEX_POINT('',#6108); +#6108 = CARTESIAN_POINT('',(-12.5,40.15,127.46153846153)); +#6109 = LINE('',#6110,#6111); +#6110 = CARTESIAN_POINT('',(-12.5,40.15,127.46153846153)); +#6111 = VECTOR('',#6112,1.); +#6112 = DIRECTION('',(0.,-1.,0.)); +#6113 = ORIENTED_EDGE('',*,*,#6114,.T.); +#6114 = EDGE_CURVE('',#6107,#6107,#6115,.T.); +#6115 = CIRCLE('',#6116,1.); +#6116 = AXIS2_PLACEMENT_3D('',#6117,#6118,#6119); +#6117 = CARTESIAN_POINT('',(-12.5,40.15,128.46153846153)); +#6118 = DIRECTION('',(0.,-1.,0.)); +#6119 = DIRECTION('',(0.,-0.,-1.)); +#6120 = ORIENTED_EDGE('',*,*,#6106,.T.); +#6121 = CYLINDRICAL_SURFACE('',#6122,1.); +#6122 = AXIS2_PLACEMENT_3D('',#6123,#6124,#6125); +#6123 = CARTESIAN_POINT('',(-12.5,40.15,128.46153846153)); +#6124 = DIRECTION('',(0.,-1.,0.)); +#6125 = DIRECTION('',(0.,-0.,-1.)); +#6126 = ADVANCED_FACE('',(#6127),#6130,.T.); +#6127 = FACE_BOUND('',#6128,.T.); +#6128 = EDGE_LOOP('',(#6129)); +#6129 = ORIENTED_EDGE('',*,*,#6097,.T.); +#6130 = PLANE('',#6131); +#6131 = AXIS2_PLACEMENT_3D('',#6132,#6133,#6134); +#6132 = CARTESIAN_POINT('',(-12.5,39.45,128.46153846153)); +#6133 = DIRECTION('',(0.,-1.,0.)); +#6134 = DIRECTION('',(0.,-0.,-1.)); +#6135 = ADVANCED_FACE('',(#6136),#6139,.F.); +#6136 = FACE_BOUND('',#6137,.T.); +#6137 = EDGE_LOOP('',(#6138)); +#6138 = ORIENTED_EDGE('',*,*,#6114,.F.); +#6139 = PLANE('',#6140); +#6140 = AXIS2_PLACEMENT_3D('',#6141,#6142,#6143); +#6141 = CARTESIAN_POINT('',(-12.5,40.15,128.46153846153)); +#6142 = DIRECTION('',(0.,-1.,0.)); +#6143 = DIRECTION('',(0.,-0.,-1.)); +#6144 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6148)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6145,#6146,#6147)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6281 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6282 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6283 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6284 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6281, +#6145 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6146 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6147 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6148 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6145, 'distance_accuracy_value','confusion accuracy'); -#6285 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6286,#6288); -#6286 = ( REPRESENTATION_RELATIONSHIP('','',#6226,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6287) +#6149 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6150,#6152); +#6150 = ( REPRESENTATION_RELATIONSHIP('','',#6090,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6151) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6287 = ITEM_DEFINED_TRANSFORMATION('','',#11,#259); -#6288 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6289); -#6289 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('62', - 'ConnectorBank_Right_Hole_R04_C03','',#5,#6221,$); -#6290 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6223)); -#6291 = SHAPE_DEFINITION_REPRESENTATION(#6292,#6298); -#6292 = PRODUCT_DEFINITION_SHAPE('','',#6293); -#6293 = PRODUCT_DEFINITION('design','',#6294,#6297); -#6294 = PRODUCT_DEFINITION_FORMATION('','',#6295); -#6295 = PRODUCT('ConnectorBank_Right_Hole_R05_C01', - 'ConnectorBank_Right_Hole_R05_C01','',(#6296)); -#6296 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6297 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6298 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6299),#6352); -#6299 = MANIFOLD_SOLID_BREP('',#6300); -#6300 = CLOSED_SHELL('',(#6301,#6334,#6343)); -#6301 = ADVANCED_FACE('',(#6302),#6329,.T.); -#6302 = FACE_BOUND('',#6303,.T.); -#6303 = EDGE_LOOP('',(#6304,#6313,#6321,#6328)); -#6304 = ORIENTED_EDGE('',*,*,#6305,.F.); -#6305 = EDGE_CURVE('',#6306,#6306,#6308,.T.); -#6306 = VERTEX_POINT('',#6307); -#6307 = CARTESIAN_POINT('',(65.,-37.85,88.230769230769)); -#6308 = CIRCLE('',#6309,1.); -#6309 = AXIS2_PLACEMENT_3D('',#6310,#6311,#6312); -#6310 = CARTESIAN_POINT('',(65.,-37.85,89.230769230769)); -#6311 = DIRECTION('',(0.,-1.,0.)); -#6312 = DIRECTION('',(0.,-0.,-1.)); -#6313 = ORIENTED_EDGE('',*,*,#6314,.F.); -#6314 = EDGE_CURVE('',#6315,#6306,#6317,.T.); -#6315 = VERTEX_POINT('',#6316); -#6316 = CARTESIAN_POINT('',(65.,-37.15,88.230769230769)); -#6317 = LINE('',#6318,#6319); -#6318 = CARTESIAN_POINT('',(65.,-37.15,88.230769230769)); -#6319 = VECTOR('',#6320,1.); -#6320 = DIRECTION('',(0.,-1.,0.)); -#6321 = ORIENTED_EDGE('',*,*,#6322,.T.); -#6322 = EDGE_CURVE('',#6315,#6315,#6323,.T.); -#6323 = CIRCLE('',#6324,1.); -#6324 = AXIS2_PLACEMENT_3D('',#6325,#6326,#6327); -#6325 = CARTESIAN_POINT('',(65.,-37.15,89.230769230769)); -#6326 = DIRECTION('',(0.,-1.,0.)); -#6327 = DIRECTION('',(0.,-0.,-1.)); -#6328 = ORIENTED_EDGE('',*,*,#6314,.T.); -#6329 = CYLINDRICAL_SURFACE('',#6330,1.); -#6330 = AXIS2_PLACEMENT_3D('',#6331,#6332,#6333); -#6331 = CARTESIAN_POINT('',(65.,-37.15,89.230769230769)); -#6332 = DIRECTION('',(0.,-1.,0.)); -#6333 = DIRECTION('',(0.,-0.,-1.)); -#6334 = ADVANCED_FACE('',(#6335),#6338,.T.); -#6335 = FACE_BOUND('',#6336,.T.); -#6336 = EDGE_LOOP('',(#6337)); -#6337 = ORIENTED_EDGE('',*,*,#6305,.T.); -#6338 = PLANE('',#6339); -#6339 = AXIS2_PLACEMENT_3D('',#6340,#6341,#6342); -#6340 = CARTESIAN_POINT('',(65.,-37.85,89.230769230769)); -#6341 = DIRECTION('',(0.,-1.,0.)); -#6342 = DIRECTION('',(0.,-0.,-1.)); -#6343 = ADVANCED_FACE('',(#6344),#6347,.F.); -#6344 = FACE_BOUND('',#6345,.T.); -#6345 = EDGE_LOOP('',(#6346)); -#6346 = ORIENTED_EDGE('',*,*,#6322,.F.); -#6347 = PLANE('',#6348); -#6348 = AXIS2_PLACEMENT_3D('',#6349,#6350,#6351); -#6349 = CARTESIAN_POINT('',(65.,-37.15,89.230769230769)); -#6350 = DIRECTION('',(0.,-1.,0.)); -#6351 = DIRECTION('',(0.,-0.,-1.)); -#6352 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6356)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6353,#6354,#6355)) REPRESENTATION_CONTEXT +#6151 = ITEM_DEFINED_TRANSFORMATION('','',#11,#259); +#6152 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6153); +#6153 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('62', + 'ConnectorBank_Right_Hole_R10_C01','',#5,#6085,$); +#6154 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6087)); +#6155 = SHAPE_DEFINITION_REPRESENTATION(#6156,#6162); +#6156 = PRODUCT_DEFINITION_SHAPE('','',#6157); +#6157 = PRODUCT_DEFINITION('design','',#6158,#6161); +#6158 = PRODUCT_DEFINITION_FORMATION('','',#6159); +#6159 = PRODUCT('ConnectorBank_Right_Hole_R10_C02', + 'ConnectorBank_Right_Hole_R10_C02','',(#6160)); +#6160 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6161 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6162 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6163),#6216); +#6163 = MANIFOLD_SOLID_BREP('',#6164); +#6164 = CLOSED_SHELL('',(#6165,#6198,#6207)); +#6165 = ADVANCED_FACE('',(#6166),#6193,.T.); +#6166 = FACE_BOUND('',#6167,.T.); +#6167 = EDGE_LOOP('',(#6168,#6177,#6185,#6192)); +#6168 = ORIENTED_EDGE('',*,*,#6169,.F.); +#6169 = EDGE_CURVE('',#6170,#6170,#6172,.T.); +#6170 = VERTEX_POINT('',#6171); +#6171 = CARTESIAN_POINT('',(-7.5,39.45,127.46153846153)); +#6172 = CIRCLE('',#6173,1.); +#6173 = AXIS2_PLACEMENT_3D('',#6174,#6175,#6176); +#6174 = CARTESIAN_POINT('',(-7.5,39.45,128.46153846153)); +#6175 = DIRECTION('',(0.,-1.,0.)); +#6176 = DIRECTION('',(0.,-0.,-1.)); +#6177 = ORIENTED_EDGE('',*,*,#6178,.F.); +#6178 = EDGE_CURVE('',#6179,#6170,#6181,.T.); +#6179 = VERTEX_POINT('',#6180); +#6180 = CARTESIAN_POINT('',(-7.5,40.15,127.46153846153)); +#6181 = LINE('',#6182,#6183); +#6182 = CARTESIAN_POINT('',(-7.5,40.15,127.46153846153)); +#6183 = VECTOR('',#6184,1.); +#6184 = DIRECTION('',(0.,-1.,0.)); +#6185 = ORIENTED_EDGE('',*,*,#6186,.T.); +#6186 = EDGE_CURVE('',#6179,#6179,#6187,.T.); +#6187 = CIRCLE('',#6188,1.); +#6188 = AXIS2_PLACEMENT_3D('',#6189,#6190,#6191); +#6189 = CARTESIAN_POINT('',(-7.5,40.15,128.46153846153)); +#6190 = DIRECTION('',(0.,-1.,0.)); +#6191 = DIRECTION('',(0.,-0.,-1.)); +#6192 = ORIENTED_EDGE('',*,*,#6178,.T.); +#6193 = CYLINDRICAL_SURFACE('',#6194,1.); +#6194 = AXIS2_PLACEMENT_3D('',#6195,#6196,#6197); +#6195 = CARTESIAN_POINT('',(-7.5,40.15,128.46153846153)); +#6196 = DIRECTION('',(0.,-1.,0.)); +#6197 = DIRECTION('',(0.,-0.,-1.)); +#6198 = ADVANCED_FACE('',(#6199),#6202,.T.); +#6199 = FACE_BOUND('',#6200,.T.); +#6200 = EDGE_LOOP('',(#6201)); +#6201 = ORIENTED_EDGE('',*,*,#6169,.T.); +#6202 = PLANE('',#6203); +#6203 = AXIS2_PLACEMENT_3D('',#6204,#6205,#6206); +#6204 = CARTESIAN_POINT('',(-7.5,39.45,128.46153846153)); +#6205 = DIRECTION('',(0.,-1.,0.)); +#6206 = DIRECTION('',(0.,-0.,-1.)); +#6207 = ADVANCED_FACE('',(#6208),#6211,.F.); +#6208 = FACE_BOUND('',#6209,.T.); +#6209 = EDGE_LOOP('',(#6210)); +#6210 = ORIENTED_EDGE('',*,*,#6186,.F.); +#6211 = PLANE('',#6212); +#6212 = AXIS2_PLACEMENT_3D('',#6213,#6214,#6215); +#6213 = CARTESIAN_POINT('',(-7.5,40.15,128.46153846153)); +#6214 = DIRECTION('',(0.,-1.,0.)); +#6215 = DIRECTION('',(0.,-0.,-1.)); +#6216 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6220)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6217,#6218,#6219)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6353 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6354 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6355 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6356 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6353, +#6217 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6218 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6219 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6220 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6217, 'distance_accuracy_value','confusion accuracy'); -#6357 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6358,#6360); -#6358 = ( REPRESENTATION_RELATIONSHIP('','',#6298,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6359) +#6221 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6222,#6224); +#6222 = ( REPRESENTATION_RELATIONSHIP('','',#6162,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6223) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6359 = ITEM_DEFINED_TRANSFORMATION('','',#11,#263); -#6360 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6361); -#6361 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('63', - 'ConnectorBank_Right_Hole_R05_C01','',#5,#6293,$); -#6362 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6295)); -#6363 = SHAPE_DEFINITION_REPRESENTATION(#6364,#6370); -#6364 = PRODUCT_DEFINITION_SHAPE('','',#6365); -#6365 = PRODUCT_DEFINITION('design','',#6366,#6369); -#6366 = PRODUCT_DEFINITION_FORMATION('','',#6367); -#6367 = PRODUCT('ConnectorBank_Right_Screw_R05', - 'ConnectorBank_Right_Screw_R05','',(#6368)); -#6368 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6369 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6370 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6371),#6424); -#6371 = MANIFOLD_SOLID_BREP('',#6372); -#6372 = CLOSED_SHELL('',(#6373,#6406,#6415)); -#6373 = ADVANCED_FACE('',(#6374),#6401,.T.); -#6374 = FACE_BOUND('',#6375,.T.); -#6375 = EDGE_LOOP('',(#6376,#6385,#6393,#6400)); -#6376 = ORIENTED_EDGE('',*,*,#6377,.F.); -#6377 = EDGE_CURVE('',#6378,#6378,#6380,.T.); -#6378 = VERTEX_POINT('',#6379); -#6379 = CARTESIAN_POINT('',(82.6,-37.95,88.680769230769)); -#6380 = CIRCLE('',#6381,0.55); -#6381 = AXIS2_PLACEMENT_3D('',#6382,#6383,#6384); -#6382 = CARTESIAN_POINT('',(82.6,-37.95,89.230769230769)); -#6383 = DIRECTION('',(0.,-1.,0.)); -#6384 = DIRECTION('',(0.,-0.,-1.)); -#6385 = ORIENTED_EDGE('',*,*,#6386,.F.); -#6386 = EDGE_CURVE('',#6387,#6378,#6389,.T.); -#6387 = VERTEX_POINT('',#6388); -#6388 = CARTESIAN_POINT('',(82.6,-37.15,88.680769230769)); -#6389 = LINE('',#6390,#6391); -#6390 = CARTESIAN_POINT('',(82.6,-37.15,88.680769230769)); -#6391 = VECTOR('',#6392,1.); -#6392 = DIRECTION('',(0.,-1.,0.)); -#6393 = ORIENTED_EDGE('',*,*,#6394,.T.); -#6394 = EDGE_CURVE('',#6387,#6387,#6395,.T.); -#6395 = CIRCLE('',#6396,0.55); -#6396 = AXIS2_PLACEMENT_3D('',#6397,#6398,#6399); -#6397 = CARTESIAN_POINT('',(82.6,-37.15,89.230769230769)); -#6398 = DIRECTION('',(0.,-1.,0.)); -#6399 = DIRECTION('',(0.,-0.,-1.)); -#6400 = ORIENTED_EDGE('',*,*,#6386,.T.); -#6401 = CYLINDRICAL_SURFACE('',#6402,0.55); -#6402 = AXIS2_PLACEMENT_3D('',#6403,#6404,#6405); -#6403 = CARTESIAN_POINT('',(82.6,-37.15,89.230769230769)); -#6404 = DIRECTION('',(0.,-1.,0.)); -#6405 = DIRECTION('',(0.,-0.,-1.)); -#6406 = ADVANCED_FACE('',(#6407),#6410,.T.); -#6407 = FACE_BOUND('',#6408,.T.); -#6408 = EDGE_LOOP('',(#6409)); -#6409 = ORIENTED_EDGE('',*,*,#6377,.T.); -#6410 = PLANE('',#6411); -#6411 = AXIS2_PLACEMENT_3D('',#6412,#6413,#6414); -#6412 = CARTESIAN_POINT('',(82.6,-37.95,89.230769230769)); -#6413 = DIRECTION('',(0.,-1.,0.)); -#6414 = DIRECTION('',(0.,-0.,-1.)); -#6415 = ADVANCED_FACE('',(#6416),#6419,.F.); -#6416 = FACE_BOUND('',#6417,.T.); -#6417 = EDGE_LOOP('',(#6418)); -#6418 = ORIENTED_EDGE('',*,*,#6394,.F.); -#6419 = PLANE('',#6420); -#6420 = AXIS2_PLACEMENT_3D('',#6421,#6422,#6423); -#6421 = CARTESIAN_POINT('',(82.6,-37.15,89.230769230769)); -#6422 = DIRECTION('',(0.,-1.,0.)); -#6423 = DIRECTION('',(0.,-0.,-1.)); -#6424 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6428)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6425,#6426,#6427)) REPRESENTATION_CONTEXT +#6223 = ITEM_DEFINED_TRANSFORMATION('','',#11,#263); +#6224 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6225); +#6225 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('63', + 'ConnectorBank_Right_Hole_R10_C02','',#5,#6157,$); +#6226 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6159)); +#6227 = SHAPE_DEFINITION_REPRESENTATION(#6228,#6234); +#6228 = PRODUCT_DEFINITION_SHAPE('','',#6229); +#6229 = PRODUCT_DEFINITION('design','',#6230,#6233); +#6230 = PRODUCT_DEFINITION_FORMATION('','',#6231); +#6231 = PRODUCT('ConnectorBank_Right_Hole_R10_C03', + 'ConnectorBank_Right_Hole_R10_C03','',(#6232)); +#6232 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6233 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6234 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6235),#6288); +#6235 = MANIFOLD_SOLID_BREP('',#6236); +#6236 = CLOSED_SHELL('',(#6237,#6270,#6279)); +#6237 = ADVANCED_FACE('',(#6238),#6265,.T.); +#6238 = FACE_BOUND('',#6239,.T.); +#6239 = EDGE_LOOP('',(#6240,#6249,#6257,#6264)); +#6240 = ORIENTED_EDGE('',*,*,#6241,.F.); +#6241 = EDGE_CURVE('',#6242,#6242,#6244,.T.); +#6242 = VERTEX_POINT('',#6243); +#6243 = CARTESIAN_POINT('',(-2.5,39.45,127.46153846153)); +#6244 = CIRCLE('',#6245,1.); +#6245 = AXIS2_PLACEMENT_3D('',#6246,#6247,#6248); +#6246 = CARTESIAN_POINT('',(-2.5,39.45,128.46153846153)); +#6247 = DIRECTION('',(0.,-1.,0.)); +#6248 = DIRECTION('',(0.,-0.,-1.)); +#6249 = ORIENTED_EDGE('',*,*,#6250,.F.); +#6250 = EDGE_CURVE('',#6251,#6242,#6253,.T.); +#6251 = VERTEX_POINT('',#6252); +#6252 = CARTESIAN_POINT('',(-2.5,40.15,127.46153846153)); +#6253 = LINE('',#6254,#6255); +#6254 = CARTESIAN_POINT('',(-2.5,40.15,127.46153846153)); +#6255 = VECTOR('',#6256,1.); +#6256 = DIRECTION('',(0.,-1.,0.)); +#6257 = ORIENTED_EDGE('',*,*,#6258,.T.); +#6258 = EDGE_CURVE('',#6251,#6251,#6259,.T.); +#6259 = CIRCLE('',#6260,1.); +#6260 = AXIS2_PLACEMENT_3D('',#6261,#6262,#6263); +#6261 = CARTESIAN_POINT('',(-2.5,40.15,128.46153846153)); +#6262 = DIRECTION('',(0.,-1.,0.)); +#6263 = DIRECTION('',(0.,-0.,-1.)); +#6264 = ORIENTED_EDGE('',*,*,#6250,.T.); +#6265 = CYLINDRICAL_SURFACE('',#6266,1.); +#6266 = AXIS2_PLACEMENT_3D('',#6267,#6268,#6269); +#6267 = CARTESIAN_POINT('',(-2.5,40.15,128.46153846153)); +#6268 = DIRECTION('',(0.,-1.,0.)); +#6269 = DIRECTION('',(0.,-0.,-1.)); +#6270 = ADVANCED_FACE('',(#6271),#6274,.T.); +#6271 = FACE_BOUND('',#6272,.T.); +#6272 = EDGE_LOOP('',(#6273)); +#6273 = ORIENTED_EDGE('',*,*,#6241,.T.); +#6274 = PLANE('',#6275); +#6275 = AXIS2_PLACEMENT_3D('',#6276,#6277,#6278); +#6276 = CARTESIAN_POINT('',(-2.5,39.45,128.46153846153)); +#6277 = DIRECTION('',(0.,-1.,0.)); +#6278 = DIRECTION('',(0.,-0.,-1.)); +#6279 = ADVANCED_FACE('',(#6280),#6283,.F.); +#6280 = FACE_BOUND('',#6281,.T.); +#6281 = EDGE_LOOP('',(#6282)); +#6282 = ORIENTED_EDGE('',*,*,#6258,.F.); +#6283 = PLANE('',#6284); +#6284 = AXIS2_PLACEMENT_3D('',#6285,#6286,#6287); +#6285 = CARTESIAN_POINT('',(-2.5,40.15,128.46153846153)); +#6286 = DIRECTION('',(0.,-1.,0.)); +#6287 = DIRECTION('',(0.,-0.,-1.)); +#6288 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6292)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6289,#6290,#6291)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6425 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6426 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6427 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6428 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6425, +#6289 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6290 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6291 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6292 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6289, 'distance_accuracy_value','confusion accuracy'); -#6429 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6430,#6432); -#6430 = ( REPRESENTATION_RELATIONSHIP('','',#6370,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6431) +#6293 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6294,#6296); +#6294 = ( REPRESENTATION_RELATIONSHIP('','',#6234,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6295) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6431 = ITEM_DEFINED_TRANSFORMATION('','',#11,#267); -#6432 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6433); -#6433 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('64', - 'ConnectorBank_Right_Screw_R05','',#5,#6365,$); -#6434 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6367)); -#6435 = SHAPE_DEFINITION_REPRESENTATION(#6436,#6442); -#6436 = PRODUCT_DEFINITION_SHAPE('','',#6437); -#6437 = PRODUCT_DEFINITION('design','',#6438,#6441); -#6438 = PRODUCT_DEFINITION_FORMATION('','',#6439); -#6439 = PRODUCT('ConnectorBank_Right_Hole_R05_C02', - 'ConnectorBank_Right_Hole_R05_C02','',(#6440)); -#6440 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6441 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6442 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6443),#6496); -#6443 = MANIFOLD_SOLID_BREP('',#6444); -#6444 = CLOSED_SHELL('',(#6445,#6478,#6487)); -#6445 = ADVANCED_FACE('',(#6446),#6473,.T.); -#6446 = FACE_BOUND('',#6447,.T.); -#6447 = EDGE_LOOP('',(#6448,#6457,#6465,#6472)); -#6448 = ORIENTED_EDGE('',*,*,#6449,.F.); -#6449 = EDGE_CURVE('',#6450,#6450,#6452,.T.); -#6450 = VERTEX_POINT('',#6451); -#6451 = CARTESIAN_POINT('',(70.,-37.85,88.230769230769)); -#6452 = CIRCLE('',#6453,1.); -#6453 = AXIS2_PLACEMENT_3D('',#6454,#6455,#6456); -#6454 = CARTESIAN_POINT('',(70.,-37.85,89.230769230769)); -#6455 = DIRECTION('',(0.,-1.,0.)); -#6456 = DIRECTION('',(0.,-0.,-1.)); -#6457 = ORIENTED_EDGE('',*,*,#6458,.F.); -#6458 = EDGE_CURVE('',#6459,#6450,#6461,.T.); -#6459 = VERTEX_POINT('',#6460); -#6460 = CARTESIAN_POINT('',(70.,-37.15,88.230769230769)); -#6461 = LINE('',#6462,#6463); -#6462 = CARTESIAN_POINT('',(70.,-37.15,88.230769230769)); -#6463 = VECTOR('',#6464,1.); -#6464 = DIRECTION('',(0.,-1.,0.)); -#6465 = ORIENTED_EDGE('',*,*,#6466,.T.); -#6466 = EDGE_CURVE('',#6459,#6459,#6467,.T.); -#6467 = CIRCLE('',#6468,1.); -#6468 = AXIS2_PLACEMENT_3D('',#6469,#6470,#6471); -#6469 = CARTESIAN_POINT('',(70.,-37.15,89.230769230769)); -#6470 = DIRECTION('',(0.,-1.,0.)); -#6471 = DIRECTION('',(0.,-0.,-1.)); -#6472 = ORIENTED_EDGE('',*,*,#6458,.T.); -#6473 = CYLINDRICAL_SURFACE('',#6474,1.); -#6474 = AXIS2_PLACEMENT_3D('',#6475,#6476,#6477); -#6475 = CARTESIAN_POINT('',(70.,-37.15,89.230769230769)); -#6476 = DIRECTION('',(0.,-1.,0.)); -#6477 = DIRECTION('',(0.,-0.,-1.)); -#6478 = ADVANCED_FACE('',(#6479),#6482,.T.); -#6479 = FACE_BOUND('',#6480,.T.); -#6480 = EDGE_LOOP('',(#6481)); -#6481 = ORIENTED_EDGE('',*,*,#6449,.T.); -#6482 = PLANE('',#6483); -#6483 = AXIS2_PLACEMENT_3D('',#6484,#6485,#6486); -#6484 = CARTESIAN_POINT('',(70.,-37.85,89.230769230769)); -#6485 = DIRECTION('',(0.,-1.,0.)); -#6486 = DIRECTION('',(0.,-0.,-1.)); -#6487 = ADVANCED_FACE('',(#6488),#6491,.F.); -#6488 = FACE_BOUND('',#6489,.T.); -#6489 = EDGE_LOOP('',(#6490)); -#6490 = ORIENTED_EDGE('',*,*,#6466,.F.); -#6491 = PLANE('',#6492); -#6492 = AXIS2_PLACEMENT_3D('',#6493,#6494,#6495); -#6493 = CARTESIAN_POINT('',(70.,-37.15,89.230769230769)); -#6494 = DIRECTION('',(0.,-1.,0.)); -#6495 = DIRECTION('',(0.,-0.,-1.)); -#6496 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6500)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6497,#6498,#6499)) REPRESENTATION_CONTEXT +#6295 = ITEM_DEFINED_TRANSFORMATION('','',#11,#267); +#6296 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6297); +#6297 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('64', + 'ConnectorBank_Right_Hole_R10_C03','',#5,#6229,$); +#6298 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6231)); +#6299 = SHAPE_DEFINITION_REPRESENTATION(#6300,#6306); +#6300 = PRODUCT_DEFINITION_SHAPE('','',#6301); +#6301 = PRODUCT_DEFINITION('design','',#6302,#6305); +#6302 = PRODUCT_DEFINITION_FORMATION('','',#6303); +#6303 = PRODUCT('ConnectorBank_Right_Hole_R11_C01', + 'ConnectorBank_Right_Hole_R11_C01','',(#6304)); +#6304 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6305 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6306 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6307),#6360); +#6307 = MANIFOLD_SOLID_BREP('',#6308); +#6308 = CLOSED_SHELL('',(#6309,#6342,#6351)); +#6309 = ADVANCED_FACE('',(#6310),#6337,.T.); +#6310 = FACE_BOUND('',#6311,.T.); +#6311 = EDGE_LOOP('',(#6312,#6321,#6329,#6336)); +#6312 = ORIENTED_EDGE('',*,*,#6313,.F.); +#6313 = EDGE_CURVE('',#6314,#6314,#6316,.T.); +#6314 = VERTEX_POINT('',#6315); +#6315 = CARTESIAN_POINT('',(-12.5,39.45,135.30769230769)); +#6316 = CIRCLE('',#6317,1.); +#6317 = AXIS2_PLACEMENT_3D('',#6318,#6319,#6320); +#6318 = CARTESIAN_POINT('',(-12.5,39.45,136.30769230769)); +#6319 = DIRECTION('',(0.,-1.,0.)); +#6320 = DIRECTION('',(0.,-0.,-1.)); +#6321 = ORIENTED_EDGE('',*,*,#6322,.F.); +#6322 = EDGE_CURVE('',#6323,#6314,#6325,.T.); +#6323 = VERTEX_POINT('',#6324); +#6324 = CARTESIAN_POINT('',(-12.5,40.15,135.30769230769)); +#6325 = LINE('',#6326,#6327); +#6326 = CARTESIAN_POINT('',(-12.5,40.15,135.30769230769)); +#6327 = VECTOR('',#6328,1.); +#6328 = DIRECTION('',(0.,-1.,0.)); +#6329 = ORIENTED_EDGE('',*,*,#6330,.T.); +#6330 = EDGE_CURVE('',#6323,#6323,#6331,.T.); +#6331 = CIRCLE('',#6332,1.); +#6332 = AXIS2_PLACEMENT_3D('',#6333,#6334,#6335); +#6333 = CARTESIAN_POINT('',(-12.5,40.15,136.30769230769)); +#6334 = DIRECTION('',(0.,-1.,0.)); +#6335 = DIRECTION('',(0.,-0.,-1.)); +#6336 = ORIENTED_EDGE('',*,*,#6322,.T.); +#6337 = CYLINDRICAL_SURFACE('',#6338,1.); +#6338 = AXIS2_PLACEMENT_3D('',#6339,#6340,#6341); +#6339 = CARTESIAN_POINT('',(-12.5,40.15,136.30769230769)); +#6340 = DIRECTION('',(0.,-1.,0.)); +#6341 = DIRECTION('',(0.,-0.,-1.)); +#6342 = ADVANCED_FACE('',(#6343),#6346,.T.); +#6343 = FACE_BOUND('',#6344,.T.); +#6344 = EDGE_LOOP('',(#6345)); +#6345 = ORIENTED_EDGE('',*,*,#6313,.T.); +#6346 = PLANE('',#6347); +#6347 = AXIS2_PLACEMENT_3D('',#6348,#6349,#6350); +#6348 = CARTESIAN_POINT('',(-12.5,39.45,136.30769230769)); +#6349 = DIRECTION('',(0.,-1.,0.)); +#6350 = DIRECTION('',(0.,-0.,-1.)); +#6351 = ADVANCED_FACE('',(#6352),#6355,.F.); +#6352 = FACE_BOUND('',#6353,.T.); +#6353 = EDGE_LOOP('',(#6354)); +#6354 = ORIENTED_EDGE('',*,*,#6330,.F.); +#6355 = PLANE('',#6356); +#6356 = AXIS2_PLACEMENT_3D('',#6357,#6358,#6359); +#6357 = CARTESIAN_POINT('',(-12.5,40.15,136.30769230769)); +#6358 = DIRECTION('',(0.,-1.,0.)); +#6359 = DIRECTION('',(0.,-0.,-1.)); +#6360 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6364)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6361,#6362,#6363)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6497 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6498 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6499 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6500 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6497, +#6361 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6362 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6363 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6364 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6361, 'distance_accuracy_value','confusion accuracy'); -#6501 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6502,#6504); -#6502 = ( REPRESENTATION_RELATIONSHIP('','',#6442,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6503) +#6365 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6366,#6368); +#6366 = ( REPRESENTATION_RELATIONSHIP('','',#6306,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6367) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6503 = ITEM_DEFINED_TRANSFORMATION('','',#11,#271); -#6504 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6505); -#6505 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('65', - 'ConnectorBank_Right_Hole_R05_C02','',#5,#6437,$); -#6506 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6439)); -#6507 = SHAPE_DEFINITION_REPRESENTATION(#6508,#6514); -#6508 = PRODUCT_DEFINITION_SHAPE('','',#6509); -#6509 = PRODUCT_DEFINITION('design','',#6510,#6513); -#6510 = PRODUCT_DEFINITION_FORMATION('','',#6511); -#6511 = PRODUCT('ConnectorBank_Right_Hole_R05_C03', - 'ConnectorBank_Right_Hole_R05_C03','',(#6512)); -#6512 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6513 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6514 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6515),#6568); -#6515 = MANIFOLD_SOLID_BREP('',#6516); -#6516 = CLOSED_SHELL('',(#6517,#6550,#6559)); -#6517 = ADVANCED_FACE('',(#6518),#6545,.T.); -#6518 = FACE_BOUND('',#6519,.T.); -#6519 = EDGE_LOOP('',(#6520,#6529,#6537,#6544)); -#6520 = ORIENTED_EDGE('',*,*,#6521,.F.); -#6521 = EDGE_CURVE('',#6522,#6522,#6524,.T.); -#6522 = VERTEX_POINT('',#6523); -#6523 = CARTESIAN_POINT('',(75.,-37.85,88.230769230769)); -#6524 = CIRCLE('',#6525,1.); -#6525 = AXIS2_PLACEMENT_3D('',#6526,#6527,#6528); -#6526 = CARTESIAN_POINT('',(75.,-37.85,89.230769230769)); -#6527 = DIRECTION('',(0.,-1.,0.)); -#6528 = DIRECTION('',(0.,-0.,-1.)); -#6529 = ORIENTED_EDGE('',*,*,#6530,.F.); -#6530 = EDGE_CURVE('',#6531,#6522,#6533,.T.); -#6531 = VERTEX_POINT('',#6532); -#6532 = CARTESIAN_POINT('',(75.,-37.15,88.230769230769)); -#6533 = LINE('',#6534,#6535); -#6534 = CARTESIAN_POINT('',(75.,-37.15,88.230769230769)); -#6535 = VECTOR('',#6536,1.); -#6536 = DIRECTION('',(0.,-1.,0.)); -#6537 = ORIENTED_EDGE('',*,*,#6538,.T.); -#6538 = EDGE_CURVE('',#6531,#6531,#6539,.T.); -#6539 = CIRCLE('',#6540,1.); -#6540 = AXIS2_PLACEMENT_3D('',#6541,#6542,#6543); -#6541 = CARTESIAN_POINT('',(75.,-37.15,89.230769230769)); -#6542 = DIRECTION('',(0.,-1.,0.)); -#6543 = DIRECTION('',(0.,-0.,-1.)); -#6544 = ORIENTED_EDGE('',*,*,#6530,.T.); -#6545 = CYLINDRICAL_SURFACE('',#6546,1.); -#6546 = AXIS2_PLACEMENT_3D('',#6547,#6548,#6549); -#6547 = CARTESIAN_POINT('',(75.,-37.15,89.230769230769)); -#6548 = DIRECTION('',(0.,-1.,0.)); -#6549 = DIRECTION('',(0.,-0.,-1.)); -#6550 = ADVANCED_FACE('',(#6551),#6554,.T.); -#6551 = FACE_BOUND('',#6552,.T.); -#6552 = EDGE_LOOP('',(#6553)); -#6553 = ORIENTED_EDGE('',*,*,#6521,.T.); -#6554 = PLANE('',#6555); -#6555 = AXIS2_PLACEMENT_3D('',#6556,#6557,#6558); -#6556 = CARTESIAN_POINT('',(75.,-37.85,89.230769230769)); -#6557 = DIRECTION('',(0.,-1.,0.)); -#6558 = DIRECTION('',(0.,-0.,-1.)); -#6559 = ADVANCED_FACE('',(#6560),#6563,.F.); -#6560 = FACE_BOUND('',#6561,.T.); -#6561 = EDGE_LOOP('',(#6562)); -#6562 = ORIENTED_EDGE('',*,*,#6538,.F.); -#6563 = PLANE('',#6564); -#6564 = AXIS2_PLACEMENT_3D('',#6565,#6566,#6567); -#6565 = CARTESIAN_POINT('',(75.,-37.15,89.230769230769)); -#6566 = DIRECTION('',(0.,-1.,0.)); -#6567 = DIRECTION('',(0.,-0.,-1.)); -#6568 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6572)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6569,#6570,#6571)) REPRESENTATION_CONTEXT +#6367 = ITEM_DEFINED_TRANSFORMATION('','',#11,#271); +#6368 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6369); +#6369 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('65', + 'ConnectorBank_Right_Hole_R11_C01','',#5,#6301,$); +#6370 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6303)); +#6371 = SHAPE_DEFINITION_REPRESENTATION(#6372,#6378); +#6372 = PRODUCT_DEFINITION_SHAPE('','',#6373); +#6373 = PRODUCT_DEFINITION('design','',#6374,#6377); +#6374 = PRODUCT_DEFINITION_FORMATION('','',#6375); +#6375 = PRODUCT('ConnectorBank_Right_Hole_R11_C02', + 'ConnectorBank_Right_Hole_R11_C02','',(#6376)); +#6376 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6377 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6378 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6379),#6432); +#6379 = MANIFOLD_SOLID_BREP('',#6380); +#6380 = CLOSED_SHELL('',(#6381,#6414,#6423)); +#6381 = ADVANCED_FACE('',(#6382),#6409,.T.); +#6382 = FACE_BOUND('',#6383,.T.); +#6383 = EDGE_LOOP('',(#6384,#6393,#6401,#6408)); +#6384 = ORIENTED_EDGE('',*,*,#6385,.F.); +#6385 = EDGE_CURVE('',#6386,#6386,#6388,.T.); +#6386 = VERTEX_POINT('',#6387); +#6387 = CARTESIAN_POINT('',(-7.5,39.45,135.30769230769)); +#6388 = CIRCLE('',#6389,1.); +#6389 = AXIS2_PLACEMENT_3D('',#6390,#6391,#6392); +#6390 = CARTESIAN_POINT('',(-7.5,39.45,136.30769230769)); +#6391 = DIRECTION('',(0.,-1.,0.)); +#6392 = DIRECTION('',(0.,-0.,-1.)); +#6393 = ORIENTED_EDGE('',*,*,#6394,.F.); +#6394 = EDGE_CURVE('',#6395,#6386,#6397,.T.); +#6395 = VERTEX_POINT('',#6396); +#6396 = CARTESIAN_POINT('',(-7.5,40.15,135.30769230769)); +#6397 = LINE('',#6398,#6399); +#6398 = CARTESIAN_POINT('',(-7.5,40.15,135.30769230769)); +#6399 = VECTOR('',#6400,1.); +#6400 = DIRECTION('',(0.,-1.,0.)); +#6401 = ORIENTED_EDGE('',*,*,#6402,.T.); +#6402 = EDGE_CURVE('',#6395,#6395,#6403,.T.); +#6403 = CIRCLE('',#6404,1.); +#6404 = AXIS2_PLACEMENT_3D('',#6405,#6406,#6407); +#6405 = CARTESIAN_POINT('',(-7.5,40.15,136.30769230769)); +#6406 = DIRECTION('',(0.,-1.,0.)); +#6407 = DIRECTION('',(0.,-0.,-1.)); +#6408 = ORIENTED_EDGE('',*,*,#6394,.T.); +#6409 = CYLINDRICAL_SURFACE('',#6410,1.); +#6410 = AXIS2_PLACEMENT_3D('',#6411,#6412,#6413); +#6411 = CARTESIAN_POINT('',(-7.5,40.15,136.30769230769)); +#6412 = DIRECTION('',(0.,-1.,0.)); +#6413 = DIRECTION('',(0.,-0.,-1.)); +#6414 = ADVANCED_FACE('',(#6415),#6418,.T.); +#6415 = FACE_BOUND('',#6416,.T.); +#6416 = EDGE_LOOP('',(#6417)); +#6417 = ORIENTED_EDGE('',*,*,#6385,.T.); +#6418 = PLANE('',#6419); +#6419 = AXIS2_PLACEMENT_3D('',#6420,#6421,#6422); +#6420 = CARTESIAN_POINT('',(-7.5,39.45,136.30769230769)); +#6421 = DIRECTION('',(0.,-1.,0.)); +#6422 = DIRECTION('',(0.,-0.,-1.)); +#6423 = ADVANCED_FACE('',(#6424),#6427,.F.); +#6424 = FACE_BOUND('',#6425,.T.); +#6425 = EDGE_LOOP('',(#6426)); +#6426 = ORIENTED_EDGE('',*,*,#6402,.F.); +#6427 = PLANE('',#6428); +#6428 = AXIS2_PLACEMENT_3D('',#6429,#6430,#6431); +#6429 = CARTESIAN_POINT('',(-7.5,40.15,136.30769230769)); +#6430 = DIRECTION('',(0.,-1.,0.)); +#6431 = DIRECTION('',(0.,-0.,-1.)); +#6432 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6436)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6433,#6434,#6435)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6569 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6570 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6571 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6572 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6569, +#6433 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6434 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6435 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6436 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6433, 'distance_accuracy_value','confusion accuracy'); -#6573 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6574,#6576); -#6574 = ( REPRESENTATION_RELATIONSHIP('','',#6514,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6575) +#6437 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6438,#6440); +#6438 = ( REPRESENTATION_RELATIONSHIP('','',#6378,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6439) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6575 = ITEM_DEFINED_TRANSFORMATION('','',#11,#275); -#6576 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6577); -#6577 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('66', - 'ConnectorBank_Right_Hole_R05_C03','',#5,#6509,$); -#6578 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6511)); -#6579 = SHAPE_DEFINITION_REPRESENTATION(#6580,#6586); -#6580 = PRODUCT_DEFINITION_SHAPE('','',#6581); -#6581 = PRODUCT_DEFINITION('design','',#6582,#6585); -#6582 = PRODUCT_DEFINITION_FORMATION('','',#6583); -#6583 = PRODUCT('ConnectorBank_Right_Hole_R06_C01', - 'ConnectorBank_Right_Hole_R06_C01','',(#6584)); -#6584 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6585 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6586 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6587),#6640); -#6587 = MANIFOLD_SOLID_BREP('',#6588); -#6588 = CLOSED_SHELL('',(#6589,#6622,#6631)); -#6589 = ADVANCED_FACE('',(#6590),#6617,.T.); -#6590 = FACE_BOUND('',#6591,.T.); -#6591 = EDGE_LOOP('',(#6592,#6601,#6609,#6616)); -#6592 = ORIENTED_EDGE('',*,*,#6593,.F.); -#6593 = EDGE_CURVE('',#6594,#6594,#6596,.T.); -#6594 = VERTEX_POINT('',#6595); -#6595 = CARTESIAN_POINT('',(65.,-37.85,96.076923076923)); -#6596 = CIRCLE('',#6597,1.); -#6597 = AXIS2_PLACEMENT_3D('',#6598,#6599,#6600); -#6598 = CARTESIAN_POINT('',(65.,-37.85,97.076923076923)); -#6599 = DIRECTION('',(0.,-1.,0.)); -#6600 = DIRECTION('',(0.,-0.,-1.)); -#6601 = ORIENTED_EDGE('',*,*,#6602,.F.); -#6602 = EDGE_CURVE('',#6603,#6594,#6605,.T.); -#6603 = VERTEX_POINT('',#6604); -#6604 = CARTESIAN_POINT('',(65.,-37.15,96.076923076923)); -#6605 = LINE('',#6606,#6607); -#6606 = CARTESIAN_POINT('',(65.,-37.15,96.076923076923)); -#6607 = VECTOR('',#6608,1.); -#6608 = DIRECTION('',(0.,-1.,0.)); -#6609 = ORIENTED_EDGE('',*,*,#6610,.T.); -#6610 = EDGE_CURVE('',#6603,#6603,#6611,.T.); -#6611 = CIRCLE('',#6612,1.); -#6612 = AXIS2_PLACEMENT_3D('',#6613,#6614,#6615); -#6613 = CARTESIAN_POINT('',(65.,-37.15,97.076923076923)); -#6614 = DIRECTION('',(0.,-1.,0.)); -#6615 = DIRECTION('',(0.,-0.,-1.)); -#6616 = ORIENTED_EDGE('',*,*,#6602,.T.); -#6617 = CYLINDRICAL_SURFACE('',#6618,1.); -#6618 = AXIS2_PLACEMENT_3D('',#6619,#6620,#6621); -#6619 = CARTESIAN_POINT('',(65.,-37.15,97.076923076923)); -#6620 = DIRECTION('',(0.,-1.,0.)); -#6621 = DIRECTION('',(0.,-0.,-1.)); -#6622 = ADVANCED_FACE('',(#6623),#6626,.T.); -#6623 = FACE_BOUND('',#6624,.T.); -#6624 = EDGE_LOOP('',(#6625)); -#6625 = ORIENTED_EDGE('',*,*,#6593,.T.); -#6626 = PLANE('',#6627); -#6627 = AXIS2_PLACEMENT_3D('',#6628,#6629,#6630); -#6628 = CARTESIAN_POINT('',(65.,-37.85,97.076923076923)); -#6629 = DIRECTION('',(0.,-1.,0.)); -#6630 = DIRECTION('',(0.,-0.,-1.)); -#6631 = ADVANCED_FACE('',(#6632),#6635,.F.); -#6632 = FACE_BOUND('',#6633,.T.); -#6633 = EDGE_LOOP('',(#6634)); -#6634 = ORIENTED_EDGE('',*,*,#6610,.F.); -#6635 = PLANE('',#6636); -#6636 = AXIS2_PLACEMENT_3D('',#6637,#6638,#6639); -#6637 = CARTESIAN_POINT('',(65.,-37.15,97.076923076923)); -#6638 = DIRECTION('',(0.,-1.,0.)); -#6639 = DIRECTION('',(0.,-0.,-1.)); -#6640 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6644)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6641,#6642,#6643)) REPRESENTATION_CONTEXT +#6439 = ITEM_DEFINED_TRANSFORMATION('','',#11,#275); +#6440 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6441); +#6441 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('66', + 'ConnectorBank_Right_Hole_R11_C02','',#5,#6373,$); +#6442 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6375)); +#6443 = SHAPE_DEFINITION_REPRESENTATION(#6444,#6450); +#6444 = PRODUCT_DEFINITION_SHAPE('','',#6445); +#6445 = PRODUCT_DEFINITION('design','',#6446,#6449); +#6446 = PRODUCT_DEFINITION_FORMATION('','',#6447); +#6447 = PRODUCT('ConnectorBank_Right_Hole_R11_C03', + 'ConnectorBank_Right_Hole_R11_C03','',(#6448)); +#6448 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6449 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6450 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6451),#6504); +#6451 = MANIFOLD_SOLID_BREP('',#6452); +#6452 = CLOSED_SHELL('',(#6453,#6486,#6495)); +#6453 = ADVANCED_FACE('',(#6454),#6481,.T.); +#6454 = FACE_BOUND('',#6455,.T.); +#6455 = EDGE_LOOP('',(#6456,#6465,#6473,#6480)); +#6456 = ORIENTED_EDGE('',*,*,#6457,.F.); +#6457 = EDGE_CURVE('',#6458,#6458,#6460,.T.); +#6458 = VERTEX_POINT('',#6459); +#6459 = CARTESIAN_POINT('',(-2.5,39.45,135.30769230769)); +#6460 = CIRCLE('',#6461,1.); +#6461 = AXIS2_PLACEMENT_3D('',#6462,#6463,#6464); +#6462 = CARTESIAN_POINT('',(-2.5,39.45,136.30769230769)); +#6463 = DIRECTION('',(0.,-1.,0.)); +#6464 = DIRECTION('',(0.,-0.,-1.)); +#6465 = ORIENTED_EDGE('',*,*,#6466,.F.); +#6466 = EDGE_CURVE('',#6467,#6458,#6469,.T.); +#6467 = VERTEX_POINT('',#6468); +#6468 = CARTESIAN_POINT('',(-2.5,40.15,135.30769230769)); +#6469 = LINE('',#6470,#6471); +#6470 = CARTESIAN_POINT('',(-2.5,40.15,135.30769230769)); +#6471 = VECTOR('',#6472,1.); +#6472 = DIRECTION('',(0.,-1.,0.)); +#6473 = ORIENTED_EDGE('',*,*,#6474,.T.); +#6474 = EDGE_CURVE('',#6467,#6467,#6475,.T.); +#6475 = CIRCLE('',#6476,1.); +#6476 = AXIS2_PLACEMENT_3D('',#6477,#6478,#6479); +#6477 = CARTESIAN_POINT('',(-2.5,40.15,136.30769230769)); +#6478 = DIRECTION('',(0.,-1.,0.)); +#6479 = DIRECTION('',(0.,-0.,-1.)); +#6480 = ORIENTED_EDGE('',*,*,#6466,.T.); +#6481 = CYLINDRICAL_SURFACE('',#6482,1.); +#6482 = AXIS2_PLACEMENT_3D('',#6483,#6484,#6485); +#6483 = CARTESIAN_POINT('',(-2.5,40.15,136.30769230769)); +#6484 = DIRECTION('',(0.,-1.,0.)); +#6485 = DIRECTION('',(0.,-0.,-1.)); +#6486 = ADVANCED_FACE('',(#6487),#6490,.T.); +#6487 = FACE_BOUND('',#6488,.T.); +#6488 = EDGE_LOOP('',(#6489)); +#6489 = ORIENTED_EDGE('',*,*,#6457,.T.); +#6490 = PLANE('',#6491); +#6491 = AXIS2_PLACEMENT_3D('',#6492,#6493,#6494); +#6492 = CARTESIAN_POINT('',(-2.5,39.45,136.30769230769)); +#6493 = DIRECTION('',(0.,-1.,0.)); +#6494 = DIRECTION('',(0.,-0.,-1.)); +#6495 = ADVANCED_FACE('',(#6496),#6499,.F.); +#6496 = FACE_BOUND('',#6497,.T.); +#6497 = EDGE_LOOP('',(#6498)); +#6498 = ORIENTED_EDGE('',*,*,#6474,.F.); +#6499 = PLANE('',#6500); +#6500 = AXIS2_PLACEMENT_3D('',#6501,#6502,#6503); +#6501 = CARTESIAN_POINT('',(-2.5,40.15,136.30769230769)); +#6502 = DIRECTION('',(0.,-1.,0.)); +#6503 = DIRECTION('',(0.,-0.,-1.)); +#6504 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6508)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6505,#6506,#6507)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6641 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6642 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6643 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6644 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6641, +#6505 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6506 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6507 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6508 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6505, 'distance_accuracy_value','confusion accuracy'); -#6645 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6646,#6648); -#6646 = ( REPRESENTATION_RELATIONSHIP('','',#6586,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6647) +#6509 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6510,#6512); +#6510 = ( REPRESENTATION_RELATIONSHIP('','',#6450,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6511) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6647 = ITEM_DEFINED_TRANSFORMATION('','',#11,#279); -#6648 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6649); -#6649 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('67', - 'ConnectorBank_Right_Hole_R06_C01','',#5,#6581,$); -#6650 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6583)); -#6651 = SHAPE_DEFINITION_REPRESENTATION(#6652,#6658); -#6652 = PRODUCT_DEFINITION_SHAPE('','',#6653); -#6653 = PRODUCT_DEFINITION('design','',#6654,#6657); -#6654 = PRODUCT_DEFINITION_FORMATION('','',#6655); -#6655 = PRODUCT('ConnectorBank_Right_Screw_R06', - 'ConnectorBank_Right_Screw_R06','',(#6656)); -#6656 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6657 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6658 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6659),#6712); -#6659 = MANIFOLD_SOLID_BREP('',#6660); -#6660 = CLOSED_SHELL('',(#6661,#6694,#6703)); -#6661 = ADVANCED_FACE('',(#6662),#6689,.T.); -#6662 = FACE_BOUND('',#6663,.T.); -#6663 = EDGE_LOOP('',(#6664,#6673,#6681,#6688)); -#6664 = ORIENTED_EDGE('',*,*,#6665,.F.); -#6665 = EDGE_CURVE('',#6666,#6666,#6668,.T.); -#6666 = VERTEX_POINT('',#6667); -#6667 = CARTESIAN_POINT('',(82.6,-37.95,96.526923076923)); -#6668 = CIRCLE('',#6669,0.55); -#6669 = AXIS2_PLACEMENT_3D('',#6670,#6671,#6672); -#6670 = CARTESIAN_POINT('',(82.6,-37.95,97.076923076923)); -#6671 = DIRECTION('',(0.,-1.,0.)); -#6672 = DIRECTION('',(0.,-0.,-1.)); -#6673 = ORIENTED_EDGE('',*,*,#6674,.F.); -#6674 = EDGE_CURVE('',#6675,#6666,#6677,.T.); -#6675 = VERTEX_POINT('',#6676); -#6676 = CARTESIAN_POINT('',(82.6,-37.15,96.526923076923)); -#6677 = LINE('',#6678,#6679); -#6678 = CARTESIAN_POINT('',(82.6,-37.15,96.526923076923)); -#6679 = VECTOR('',#6680,1.); -#6680 = DIRECTION('',(0.,-1.,0.)); -#6681 = ORIENTED_EDGE('',*,*,#6682,.T.); -#6682 = EDGE_CURVE('',#6675,#6675,#6683,.T.); -#6683 = CIRCLE('',#6684,0.55); -#6684 = AXIS2_PLACEMENT_3D('',#6685,#6686,#6687); -#6685 = CARTESIAN_POINT('',(82.6,-37.15,97.076923076923)); -#6686 = DIRECTION('',(0.,-1.,0.)); -#6687 = DIRECTION('',(0.,-0.,-1.)); -#6688 = ORIENTED_EDGE('',*,*,#6674,.T.); -#6689 = CYLINDRICAL_SURFACE('',#6690,0.55); -#6690 = AXIS2_PLACEMENT_3D('',#6691,#6692,#6693); -#6691 = CARTESIAN_POINT('',(82.6,-37.15,97.076923076923)); -#6692 = DIRECTION('',(0.,-1.,0.)); -#6693 = DIRECTION('',(0.,-0.,-1.)); -#6694 = ADVANCED_FACE('',(#6695),#6698,.T.); -#6695 = FACE_BOUND('',#6696,.T.); -#6696 = EDGE_LOOP('',(#6697)); -#6697 = ORIENTED_EDGE('',*,*,#6665,.T.); -#6698 = PLANE('',#6699); -#6699 = AXIS2_PLACEMENT_3D('',#6700,#6701,#6702); -#6700 = CARTESIAN_POINT('',(82.6,-37.95,97.076923076923)); -#6701 = DIRECTION('',(0.,-1.,0.)); -#6702 = DIRECTION('',(0.,-0.,-1.)); -#6703 = ADVANCED_FACE('',(#6704),#6707,.F.); -#6704 = FACE_BOUND('',#6705,.T.); -#6705 = EDGE_LOOP('',(#6706)); -#6706 = ORIENTED_EDGE('',*,*,#6682,.F.); -#6707 = PLANE('',#6708); -#6708 = AXIS2_PLACEMENT_3D('',#6709,#6710,#6711); -#6709 = CARTESIAN_POINT('',(82.6,-37.15,97.076923076923)); -#6710 = DIRECTION('',(0.,-1.,0.)); -#6711 = DIRECTION('',(0.,-0.,-1.)); -#6712 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6716)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6713,#6714,#6715)) REPRESENTATION_CONTEXT +#6511 = ITEM_DEFINED_TRANSFORMATION('','',#11,#279); +#6512 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6513); +#6513 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('67', + 'ConnectorBank_Right_Hole_R11_C03','',#5,#6445,$); +#6514 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6447)); +#6515 = SHAPE_DEFINITION_REPRESENTATION(#6516,#6522); +#6516 = PRODUCT_DEFINITION_SHAPE('','',#6517); +#6517 = PRODUCT_DEFINITION('design','',#6518,#6521); +#6518 = PRODUCT_DEFINITION_FORMATION('','',#6519); +#6519 = PRODUCT('ConnectorBank_Right_Hole_R12_C01', + 'ConnectorBank_Right_Hole_R12_C01','',(#6520)); +#6520 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6521 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6522 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6523),#6576); +#6523 = MANIFOLD_SOLID_BREP('',#6524); +#6524 = CLOSED_SHELL('',(#6525,#6558,#6567)); +#6525 = ADVANCED_FACE('',(#6526),#6553,.T.); +#6526 = FACE_BOUND('',#6527,.T.); +#6527 = EDGE_LOOP('',(#6528,#6537,#6545,#6552)); +#6528 = ORIENTED_EDGE('',*,*,#6529,.F.); +#6529 = EDGE_CURVE('',#6530,#6530,#6532,.T.); +#6530 = VERTEX_POINT('',#6531); +#6531 = CARTESIAN_POINT('',(-12.5,39.45,143.15384615384)); +#6532 = CIRCLE('',#6533,1.); +#6533 = AXIS2_PLACEMENT_3D('',#6534,#6535,#6536); +#6534 = CARTESIAN_POINT('',(-12.5,39.45,144.15384615384)); +#6535 = DIRECTION('',(0.,-1.,0.)); +#6536 = DIRECTION('',(0.,-0.,-1.)); +#6537 = ORIENTED_EDGE('',*,*,#6538,.F.); +#6538 = EDGE_CURVE('',#6539,#6530,#6541,.T.); +#6539 = VERTEX_POINT('',#6540); +#6540 = CARTESIAN_POINT('',(-12.5,40.15,143.15384615384)); +#6541 = LINE('',#6542,#6543); +#6542 = CARTESIAN_POINT('',(-12.5,40.15,143.15384615384)); +#6543 = VECTOR('',#6544,1.); +#6544 = DIRECTION('',(0.,-1.,0.)); +#6545 = ORIENTED_EDGE('',*,*,#6546,.T.); +#6546 = EDGE_CURVE('',#6539,#6539,#6547,.T.); +#6547 = CIRCLE('',#6548,1.); +#6548 = AXIS2_PLACEMENT_3D('',#6549,#6550,#6551); +#6549 = CARTESIAN_POINT('',(-12.5,40.15,144.15384615384)); +#6550 = DIRECTION('',(0.,-1.,0.)); +#6551 = DIRECTION('',(0.,-0.,-1.)); +#6552 = ORIENTED_EDGE('',*,*,#6538,.T.); +#6553 = CYLINDRICAL_SURFACE('',#6554,1.); +#6554 = AXIS2_PLACEMENT_3D('',#6555,#6556,#6557); +#6555 = CARTESIAN_POINT('',(-12.5,40.15,144.15384615384)); +#6556 = DIRECTION('',(0.,-1.,0.)); +#6557 = DIRECTION('',(0.,-0.,-1.)); +#6558 = ADVANCED_FACE('',(#6559),#6562,.T.); +#6559 = FACE_BOUND('',#6560,.T.); +#6560 = EDGE_LOOP('',(#6561)); +#6561 = ORIENTED_EDGE('',*,*,#6529,.T.); +#6562 = PLANE('',#6563); +#6563 = AXIS2_PLACEMENT_3D('',#6564,#6565,#6566); +#6564 = CARTESIAN_POINT('',(-12.5,39.45,144.15384615384)); +#6565 = DIRECTION('',(0.,-1.,0.)); +#6566 = DIRECTION('',(0.,-0.,-1.)); +#6567 = ADVANCED_FACE('',(#6568),#6571,.F.); +#6568 = FACE_BOUND('',#6569,.T.); +#6569 = EDGE_LOOP('',(#6570)); +#6570 = ORIENTED_EDGE('',*,*,#6546,.F.); +#6571 = PLANE('',#6572); +#6572 = AXIS2_PLACEMENT_3D('',#6573,#6574,#6575); +#6573 = CARTESIAN_POINT('',(-12.5,40.15,144.15384615384)); +#6574 = DIRECTION('',(0.,-1.,0.)); +#6575 = DIRECTION('',(0.,-0.,-1.)); +#6576 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6580)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6577,#6578,#6579)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6713 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6714 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6715 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6716 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6713, +#6577 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6578 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6579 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6580 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6577, 'distance_accuracy_value','confusion accuracy'); -#6717 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6718,#6720); -#6718 = ( REPRESENTATION_RELATIONSHIP('','',#6658,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6719) +#6581 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6582,#6584); +#6582 = ( REPRESENTATION_RELATIONSHIP('','',#6522,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6583) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6719 = ITEM_DEFINED_TRANSFORMATION('','',#11,#283); -#6720 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6721); -#6721 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('68', - 'ConnectorBank_Right_Screw_R06','',#5,#6653,$); -#6722 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6655)); -#6723 = SHAPE_DEFINITION_REPRESENTATION(#6724,#6730); -#6724 = PRODUCT_DEFINITION_SHAPE('','',#6725); -#6725 = PRODUCT_DEFINITION('design','',#6726,#6729); -#6726 = PRODUCT_DEFINITION_FORMATION('','',#6727); -#6727 = PRODUCT('ConnectorBank_Right_Hole_R06_C02', - 'ConnectorBank_Right_Hole_R06_C02','',(#6728)); -#6728 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6729 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6730 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6731),#6784); -#6731 = MANIFOLD_SOLID_BREP('',#6732); -#6732 = CLOSED_SHELL('',(#6733,#6766,#6775)); -#6733 = ADVANCED_FACE('',(#6734),#6761,.T.); -#6734 = FACE_BOUND('',#6735,.T.); -#6735 = EDGE_LOOP('',(#6736,#6745,#6753,#6760)); -#6736 = ORIENTED_EDGE('',*,*,#6737,.F.); -#6737 = EDGE_CURVE('',#6738,#6738,#6740,.T.); -#6738 = VERTEX_POINT('',#6739); -#6739 = CARTESIAN_POINT('',(70.,-37.85,96.076923076923)); -#6740 = CIRCLE('',#6741,1.); -#6741 = AXIS2_PLACEMENT_3D('',#6742,#6743,#6744); -#6742 = CARTESIAN_POINT('',(70.,-37.85,97.076923076923)); -#6743 = DIRECTION('',(0.,-1.,0.)); -#6744 = DIRECTION('',(0.,-0.,-1.)); -#6745 = ORIENTED_EDGE('',*,*,#6746,.F.); -#6746 = EDGE_CURVE('',#6747,#6738,#6749,.T.); -#6747 = VERTEX_POINT('',#6748); -#6748 = CARTESIAN_POINT('',(70.,-37.15,96.076923076923)); -#6749 = LINE('',#6750,#6751); -#6750 = CARTESIAN_POINT('',(70.,-37.15,96.076923076923)); -#6751 = VECTOR('',#6752,1.); -#6752 = DIRECTION('',(0.,-1.,0.)); -#6753 = ORIENTED_EDGE('',*,*,#6754,.T.); -#6754 = EDGE_CURVE('',#6747,#6747,#6755,.T.); -#6755 = CIRCLE('',#6756,1.); -#6756 = AXIS2_PLACEMENT_3D('',#6757,#6758,#6759); -#6757 = CARTESIAN_POINT('',(70.,-37.15,97.076923076923)); -#6758 = DIRECTION('',(0.,-1.,0.)); -#6759 = DIRECTION('',(0.,-0.,-1.)); -#6760 = ORIENTED_EDGE('',*,*,#6746,.T.); -#6761 = CYLINDRICAL_SURFACE('',#6762,1.); -#6762 = AXIS2_PLACEMENT_3D('',#6763,#6764,#6765); -#6763 = CARTESIAN_POINT('',(70.,-37.15,97.076923076923)); -#6764 = DIRECTION('',(0.,-1.,0.)); -#6765 = DIRECTION('',(0.,-0.,-1.)); -#6766 = ADVANCED_FACE('',(#6767),#6770,.T.); -#6767 = FACE_BOUND('',#6768,.T.); -#6768 = EDGE_LOOP('',(#6769)); -#6769 = ORIENTED_EDGE('',*,*,#6737,.T.); -#6770 = PLANE('',#6771); -#6771 = AXIS2_PLACEMENT_3D('',#6772,#6773,#6774); -#6772 = CARTESIAN_POINT('',(70.,-37.85,97.076923076923)); -#6773 = DIRECTION('',(0.,-1.,0.)); -#6774 = DIRECTION('',(0.,-0.,-1.)); -#6775 = ADVANCED_FACE('',(#6776),#6779,.F.); -#6776 = FACE_BOUND('',#6777,.T.); -#6777 = EDGE_LOOP('',(#6778)); -#6778 = ORIENTED_EDGE('',*,*,#6754,.F.); -#6779 = PLANE('',#6780); -#6780 = AXIS2_PLACEMENT_3D('',#6781,#6782,#6783); -#6781 = CARTESIAN_POINT('',(70.,-37.15,97.076923076923)); -#6782 = DIRECTION('',(0.,-1.,0.)); -#6783 = DIRECTION('',(0.,-0.,-1.)); -#6784 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6788)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6785,#6786,#6787)) REPRESENTATION_CONTEXT +#6583 = ITEM_DEFINED_TRANSFORMATION('','',#11,#283); +#6584 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6585); +#6585 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('68', + 'ConnectorBank_Right_Hole_R12_C01','',#5,#6517,$); +#6586 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6519)); +#6587 = SHAPE_DEFINITION_REPRESENTATION(#6588,#6594); +#6588 = PRODUCT_DEFINITION_SHAPE('','',#6589); +#6589 = PRODUCT_DEFINITION('design','',#6590,#6593); +#6590 = PRODUCT_DEFINITION_FORMATION('','',#6591); +#6591 = PRODUCT('ConnectorBank_Right_Hole_R12_C02', + 'ConnectorBank_Right_Hole_R12_C02','',(#6592)); +#6592 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6593 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6594 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6595),#6648); +#6595 = MANIFOLD_SOLID_BREP('',#6596); +#6596 = CLOSED_SHELL('',(#6597,#6630,#6639)); +#6597 = ADVANCED_FACE('',(#6598),#6625,.T.); +#6598 = FACE_BOUND('',#6599,.T.); +#6599 = EDGE_LOOP('',(#6600,#6609,#6617,#6624)); +#6600 = ORIENTED_EDGE('',*,*,#6601,.F.); +#6601 = EDGE_CURVE('',#6602,#6602,#6604,.T.); +#6602 = VERTEX_POINT('',#6603); +#6603 = CARTESIAN_POINT('',(-7.5,39.45,143.15384615384)); +#6604 = CIRCLE('',#6605,1.); +#6605 = AXIS2_PLACEMENT_3D('',#6606,#6607,#6608); +#6606 = CARTESIAN_POINT('',(-7.5,39.45,144.15384615384)); +#6607 = DIRECTION('',(0.,-1.,0.)); +#6608 = DIRECTION('',(0.,-0.,-1.)); +#6609 = ORIENTED_EDGE('',*,*,#6610,.F.); +#6610 = EDGE_CURVE('',#6611,#6602,#6613,.T.); +#6611 = VERTEX_POINT('',#6612); +#6612 = CARTESIAN_POINT('',(-7.5,40.15,143.15384615384)); +#6613 = LINE('',#6614,#6615); +#6614 = CARTESIAN_POINT('',(-7.5,40.15,143.15384615384)); +#6615 = VECTOR('',#6616,1.); +#6616 = DIRECTION('',(0.,-1.,0.)); +#6617 = ORIENTED_EDGE('',*,*,#6618,.T.); +#6618 = EDGE_CURVE('',#6611,#6611,#6619,.T.); +#6619 = CIRCLE('',#6620,1.); +#6620 = AXIS2_PLACEMENT_3D('',#6621,#6622,#6623); +#6621 = CARTESIAN_POINT('',(-7.5,40.15,144.15384615384)); +#6622 = DIRECTION('',(0.,-1.,0.)); +#6623 = DIRECTION('',(0.,-0.,-1.)); +#6624 = ORIENTED_EDGE('',*,*,#6610,.T.); +#6625 = CYLINDRICAL_SURFACE('',#6626,1.); +#6626 = AXIS2_PLACEMENT_3D('',#6627,#6628,#6629); +#6627 = CARTESIAN_POINT('',(-7.5,40.15,144.15384615384)); +#6628 = DIRECTION('',(0.,-1.,0.)); +#6629 = DIRECTION('',(0.,-0.,-1.)); +#6630 = ADVANCED_FACE('',(#6631),#6634,.T.); +#6631 = FACE_BOUND('',#6632,.T.); +#6632 = EDGE_LOOP('',(#6633)); +#6633 = ORIENTED_EDGE('',*,*,#6601,.T.); +#6634 = PLANE('',#6635); +#6635 = AXIS2_PLACEMENT_3D('',#6636,#6637,#6638); +#6636 = CARTESIAN_POINT('',(-7.5,39.45,144.15384615384)); +#6637 = DIRECTION('',(0.,-1.,0.)); +#6638 = DIRECTION('',(0.,-0.,-1.)); +#6639 = ADVANCED_FACE('',(#6640),#6643,.F.); +#6640 = FACE_BOUND('',#6641,.T.); +#6641 = EDGE_LOOP('',(#6642)); +#6642 = ORIENTED_EDGE('',*,*,#6618,.F.); +#6643 = PLANE('',#6644); +#6644 = AXIS2_PLACEMENT_3D('',#6645,#6646,#6647); +#6645 = CARTESIAN_POINT('',(-7.5,40.15,144.15384615384)); +#6646 = DIRECTION('',(0.,-1.,0.)); +#6647 = DIRECTION('',(0.,-0.,-1.)); +#6648 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6652)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6649,#6650,#6651)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6785 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6786 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6787 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6788 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6785, +#6649 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6650 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6651 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6652 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6649, 'distance_accuracy_value','confusion accuracy'); -#6789 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6790,#6792); -#6790 = ( REPRESENTATION_RELATIONSHIP('','',#6730,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6791) +#6653 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6654,#6656); +#6654 = ( REPRESENTATION_RELATIONSHIP('','',#6594,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6655) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6791 = ITEM_DEFINED_TRANSFORMATION('','',#11,#287); -#6792 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6793); -#6793 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('69', - 'ConnectorBank_Right_Hole_R06_C02','',#5,#6725,$); -#6794 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6727)); -#6795 = SHAPE_DEFINITION_REPRESENTATION(#6796,#6802); -#6796 = PRODUCT_DEFINITION_SHAPE('','',#6797); -#6797 = PRODUCT_DEFINITION('design','',#6798,#6801); -#6798 = PRODUCT_DEFINITION_FORMATION('','',#6799); -#6799 = PRODUCT('ConnectorBank_Right_Hole_R06_C03', - 'ConnectorBank_Right_Hole_R06_C03','',(#6800)); -#6800 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6801 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6802 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6803),#6856); -#6803 = MANIFOLD_SOLID_BREP('',#6804); -#6804 = CLOSED_SHELL('',(#6805,#6838,#6847)); -#6805 = ADVANCED_FACE('',(#6806),#6833,.T.); -#6806 = FACE_BOUND('',#6807,.T.); -#6807 = EDGE_LOOP('',(#6808,#6817,#6825,#6832)); -#6808 = ORIENTED_EDGE('',*,*,#6809,.F.); -#6809 = EDGE_CURVE('',#6810,#6810,#6812,.T.); -#6810 = VERTEX_POINT('',#6811); -#6811 = CARTESIAN_POINT('',(75.,-37.85,96.076923076923)); -#6812 = CIRCLE('',#6813,1.); -#6813 = AXIS2_PLACEMENT_3D('',#6814,#6815,#6816); -#6814 = CARTESIAN_POINT('',(75.,-37.85,97.076923076923)); -#6815 = DIRECTION('',(0.,-1.,0.)); -#6816 = DIRECTION('',(0.,-0.,-1.)); -#6817 = ORIENTED_EDGE('',*,*,#6818,.F.); -#6818 = EDGE_CURVE('',#6819,#6810,#6821,.T.); -#6819 = VERTEX_POINT('',#6820); -#6820 = CARTESIAN_POINT('',(75.,-37.15,96.076923076923)); -#6821 = LINE('',#6822,#6823); -#6822 = CARTESIAN_POINT('',(75.,-37.15,96.076923076923)); -#6823 = VECTOR('',#6824,1.); -#6824 = DIRECTION('',(0.,-1.,0.)); -#6825 = ORIENTED_EDGE('',*,*,#6826,.T.); -#6826 = EDGE_CURVE('',#6819,#6819,#6827,.T.); -#6827 = CIRCLE('',#6828,1.); -#6828 = AXIS2_PLACEMENT_3D('',#6829,#6830,#6831); -#6829 = CARTESIAN_POINT('',(75.,-37.15,97.076923076923)); -#6830 = DIRECTION('',(0.,-1.,0.)); -#6831 = DIRECTION('',(0.,-0.,-1.)); -#6832 = ORIENTED_EDGE('',*,*,#6818,.T.); -#6833 = CYLINDRICAL_SURFACE('',#6834,1.); -#6834 = AXIS2_PLACEMENT_3D('',#6835,#6836,#6837); -#6835 = CARTESIAN_POINT('',(75.,-37.15,97.076923076923)); -#6836 = DIRECTION('',(0.,-1.,0.)); -#6837 = DIRECTION('',(0.,-0.,-1.)); -#6838 = ADVANCED_FACE('',(#6839),#6842,.T.); -#6839 = FACE_BOUND('',#6840,.T.); -#6840 = EDGE_LOOP('',(#6841)); -#6841 = ORIENTED_EDGE('',*,*,#6809,.T.); -#6842 = PLANE('',#6843); -#6843 = AXIS2_PLACEMENT_3D('',#6844,#6845,#6846); -#6844 = CARTESIAN_POINT('',(75.,-37.85,97.076923076923)); -#6845 = DIRECTION('',(0.,-1.,0.)); -#6846 = DIRECTION('',(0.,-0.,-1.)); -#6847 = ADVANCED_FACE('',(#6848),#6851,.F.); -#6848 = FACE_BOUND('',#6849,.T.); -#6849 = EDGE_LOOP('',(#6850)); -#6850 = ORIENTED_EDGE('',*,*,#6826,.F.); -#6851 = PLANE('',#6852); -#6852 = AXIS2_PLACEMENT_3D('',#6853,#6854,#6855); -#6853 = CARTESIAN_POINT('',(75.,-37.15,97.076923076923)); -#6854 = DIRECTION('',(0.,-1.,0.)); -#6855 = DIRECTION('',(0.,-0.,-1.)); -#6856 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6860)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6857,#6858,#6859)) REPRESENTATION_CONTEXT +#6655 = ITEM_DEFINED_TRANSFORMATION('','',#11,#287); +#6656 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6657); +#6657 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('69', + 'ConnectorBank_Right_Hole_R12_C02','',#5,#6589,$); +#6658 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6591)); +#6659 = SHAPE_DEFINITION_REPRESENTATION(#6660,#6666); +#6660 = PRODUCT_DEFINITION_SHAPE('','',#6661); +#6661 = PRODUCT_DEFINITION('design','',#6662,#6665); +#6662 = PRODUCT_DEFINITION_FORMATION('','',#6663); +#6663 = PRODUCT('ConnectorBank_Right_Hole_R12_C03', + 'ConnectorBank_Right_Hole_R12_C03','',(#6664)); +#6664 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6665 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6666 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6667),#6720); +#6667 = MANIFOLD_SOLID_BREP('',#6668); +#6668 = CLOSED_SHELL('',(#6669,#6702,#6711)); +#6669 = ADVANCED_FACE('',(#6670),#6697,.T.); +#6670 = FACE_BOUND('',#6671,.T.); +#6671 = EDGE_LOOP('',(#6672,#6681,#6689,#6696)); +#6672 = ORIENTED_EDGE('',*,*,#6673,.F.); +#6673 = EDGE_CURVE('',#6674,#6674,#6676,.T.); +#6674 = VERTEX_POINT('',#6675); +#6675 = CARTESIAN_POINT('',(-2.5,39.45,143.15384615384)); +#6676 = CIRCLE('',#6677,1.); +#6677 = AXIS2_PLACEMENT_3D('',#6678,#6679,#6680); +#6678 = CARTESIAN_POINT('',(-2.5,39.45,144.15384615384)); +#6679 = DIRECTION('',(0.,-1.,0.)); +#6680 = DIRECTION('',(0.,-0.,-1.)); +#6681 = ORIENTED_EDGE('',*,*,#6682,.F.); +#6682 = EDGE_CURVE('',#6683,#6674,#6685,.T.); +#6683 = VERTEX_POINT('',#6684); +#6684 = CARTESIAN_POINT('',(-2.5,40.15,143.15384615384)); +#6685 = LINE('',#6686,#6687); +#6686 = CARTESIAN_POINT('',(-2.5,40.15,143.15384615384)); +#6687 = VECTOR('',#6688,1.); +#6688 = DIRECTION('',(0.,-1.,0.)); +#6689 = ORIENTED_EDGE('',*,*,#6690,.T.); +#6690 = EDGE_CURVE('',#6683,#6683,#6691,.T.); +#6691 = CIRCLE('',#6692,1.); +#6692 = AXIS2_PLACEMENT_3D('',#6693,#6694,#6695); +#6693 = CARTESIAN_POINT('',(-2.5,40.15,144.15384615384)); +#6694 = DIRECTION('',(0.,-1.,0.)); +#6695 = DIRECTION('',(0.,-0.,-1.)); +#6696 = ORIENTED_EDGE('',*,*,#6682,.T.); +#6697 = CYLINDRICAL_SURFACE('',#6698,1.); +#6698 = AXIS2_PLACEMENT_3D('',#6699,#6700,#6701); +#6699 = CARTESIAN_POINT('',(-2.5,40.15,144.15384615384)); +#6700 = DIRECTION('',(0.,-1.,0.)); +#6701 = DIRECTION('',(0.,-0.,-1.)); +#6702 = ADVANCED_FACE('',(#6703),#6706,.T.); +#6703 = FACE_BOUND('',#6704,.T.); +#6704 = EDGE_LOOP('',(#6705)); +#6705 = ORIENTED_EDGE('',*,*,#6673,.T.); +#6706 = PLANE('',#6707); +#6707 = AXIS2_PLACEMENT_3D('',#6708,#6709,#6710); +#6708 = CARTESIAN_POINT('',(-2.5,39.45,144.15384615384)); +#6709 = DIRECTION('',(0.,-1.,0.)); +#6710 = DIRECTION('',(0.,-0.,-1.)); +#6711 = ADVANCED_FACE('',(#6712),#6715,.F.); +#6712 = FACE_BOUND('',#6713,.T.); +#6713 = EDGE_LOOP('',(#6714)); +#6714 = ORIENTED_EDGE('',*,*,#6690,.F.); +#6715 = PLANE('',#6716); +#6716 = AXIS2_PLACEMENT_3D('',#6717,#6718,#6719); +#6717 = CARTESIAN_POINT('',(-2.5,40.15,144.15384615384)); +#6718 = DIRECTION('',(0.,-1.,0.)); +#6719 = DIRECTION('',(0.,-0.,-1.)); +#6720 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6724)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6721,#6722,#6723)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6857 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6858 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6859 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6860 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6857, +#6721 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6722 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6723 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6724 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6721, 'distance_accuracy_value','confusion accuracy'); -#6861 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6862,#6864); -#6862 = ( REPRESENTATION_RELATIONSHIP('','',#6802,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6863) +#6725 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6726,#6728); +#6726 = ( REPRESENTATION_RELATIONSHIP('','',#6666,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6727) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6863 = ITEM_DEFINED_TRANSFORMATION('','',#11,#291); -#6864 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6865); -#6865 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('70', - 'ConnectorBank_Right_Hole_R06_C03','',#5,#6797,$); -#6866 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6799)); -#6867 = SHAPE_DEFINITION_REPRESENTATION(#6868,#6874); -#6868 = PRODUCT_DEFINITION_SHAPE('','',#6869); -#6869 = PRODUCT_DEFINITION('design','',#6870,#6873); -#6870 = PRODUCT_DEFINITION_FORMATION('','',#6871); -#6871 = PRODUCT('ConnectorBank_Right_Hole_R07_C01', - 'ConnectorBank_Right_Hole_R07_C01','',(#6872)); -#6872 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6873 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6874 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6875),#6928); -#6875 = MANIFOLD_SOLID_BREP('',#6876); -#6876 = CLOSED_SHELL('',(#6877,#6910,#6919)); -#6877 = ADVANCED_FACE('',(#6878),#6905,.T.); +#6727 = ITEM_DEFINED_TRANSFORMATION('','',#11,#291); +#6728 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6729); +#6729 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('70', + 'ConnectorBank_Right_Hole_R12_C03','',#5,#6661,$); +#6730 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6663)); +#6731 = SHAPE_DEFINITION_REPRESENTATION(#6732,#6738); +#6732 = PRODUCT_DEFINITION_SHAPE('','',#6733); +#6733 = PRODUCT_DEFINITION('design','',#6734,#6737); +#6734 = PRODUCT_DEFINITION_FORMATION('','',#6735); +#6735 = PRODUCT('ConnectorBank_LeftTopCap','ConnectorBank_LeftTopCap','' + ,(#6736)); +#6736 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6737 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6738 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6739),#6889); +#6739 = MANIFOLD_SOLID_BREP('',#6740); +#6740 = CLOSED_SHELL('',(#6741,#6781,#6821,#6843,#6865,#6877)); +#6741 = ADVANCED_FACE('',(#6742),#6776,.F.); +#6742 = FACE_BOUND('',#6743,.F.); +#6743 = EDGE_LOOP('',(#6744,#6754,#6762,#6770)); +#6744 = ORIENTED_EDGE('',*,*,#6745,.F.); +#6745 = EDGE_CURVE('',#6746,#6748,#6750,.T.); +#6746 = VERTEX_POINT('',#6747); +#6747 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6748 = VERTEX_POINT('',#6749); +#6749 = CARTESIAN_POINT('',(-42.5,36.,166.)); +#6750 = LINE('',#6751,#6752); +#6751 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6752 = VECTOR('',#6753,1.); +#6753 = DIRECTION('',(0.,0.,1.)); +#6754 = ORIENTED_EDGE('',*,*,#6755,.T.); +#6755 = EDGE_CURVE('',#6746,#6756,#6758,.T.); +#6756 = VERTEX_POINT('',#6757); +#6757 = CARTESIAN_POINT('',(-42.5,40.2,154.)); +#6758 = LINE('',#6759,#6760); +#6759 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6760 = VECTOR('',#6761,1.); +#6761 = DIRECTION('',(-0.,1.,0.)); +#6762 = ORIENTED_EDGE('',*,*,#6763,.T.); +#6763 = EDGE_CURVE('',#6756,#6764,#6766,.T.); +#6764 = VERTEX_POINT('',#6765); +#6765 = CARTESIAN_POINT('',(-42.5,40.2,166.)); +#6766 = LINE('',#6767,#6768); +#6767 = CARTESIAN_POINT('',(-42.5,40.2,154.)); +#6768 = VECTOR('',#6769,1.); +#6769 = DIRECTION('',(0.,0.,1.)); +#6770 = ORIENTED_EDGE('',*,*,#6771,.F.); +#6771 = EDGE_CURVE('',#6748,#6764,#6772,.T.); +#6772 = LINE('',#6773,#6774); +#6773 = CARTESIAN_POINT('',(-42.5,36.,166.)); +#6774 = VECTOR('',#6775,1.); +#6775 = DIRECTION('',(-0.,1.,0.)); +#6776 = PLANE('',#6777); +#6777 = AXIS2_PLACEMENT_3D('',#6778,#6779,#6780); +#6778 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6779 = DIRECTION('',(1.,0.,-0.)); +#6780 = DIRECTION('',(0.,0.,1.)); +#6781 = ADVANCED_FACE('',(#6782),#6816,.T.); +#6782 = FACE_BOUND('',#6783,.T.); +#6783 = EDGE_LOOP('',(#6784,#6794,#6802,#6810)); +#6784 = ORIENTED_EDGE('',*,*,#6785,.F.); +#6785 = EDGE_CURVE('',#6786,#6788,#6790,.T.); +#6786 = VERTEX_POINT('',#6787); +#6787 = CARTESIAN_POINT('',(-24.5,36.,154.)); +#6788 = VERTEX_POINT('',#6789); +#6789 = CARTESIAN_POINT('',(-24.5,36.,166.)); +#6790 = LINE('',#6791,#6792); +#6791 = CARTESIAN_POINT('',(-24.5,36.,154.)); +#6792 = VECTOR('',#6793,1.); +#6793 = DIRECTION('',(0.,0.,1.)); +#6794 = ORIENTED_EDGE('',*,*,#6795,.T.); +#6795 = EDGE_CURVE('',#6786,#6796,#6798,.T.); +#6796 = VERTEX_POINT('',#6797); +#6797 = CARTESIAN_POINT('',(-24.5,40.2,154.)); +#6798 = LINE('',#6799,#6800); +#6799 = CARTESIAN_POINT('',(-24.5,36.,154.)); +#6800 = VECTOR('',#6801,1.); +#6801 = DIRECTION('',(-0.,1.,0.)); +#6802 = ORIENTED_EDGE('',*,*,#6803,.T.); +#6803 = EDGE_CURVE('',#6796,#6804,#6806,.T.); +#6804 = VERTEX_POINT('',#6805); +#6805 = CARTESIAN_POINT('',(-24.5,40.2,166.)); +#6806 = LINE('',#6807,#6808); +#6807 = CARTESIAN_POINT('',(-24.5,40.2,154.)); +#6808 = VECTOR('',#6809,1.); +#6809 = DIRECTION('',(0.,0.,1.)); +#6810 = ORIENTED_EDGE('',*,*,#6811,.F.); +#6811 = EDGE_CURVE('',#6788,#6804,#6812,.T.); +#6812 = LINE('',#6813,#6814); +#6813 = CARTESIAN_POINT('',(-24.5,36.,166.)); +#6814 = VECTOR('',#6815,1.); +#6815 = DIRECTION('',(-0.,1.,0.)); +#6816 = PLANE('',#6817); +#6817 = AXIS2_PLACEMENT_3D('',#6818,#6819,#6820); +#6818 = CARTESIAN_POINT('',(-24.5,36.,154.)); +#6819 = DIRECTION('',(1.,0.,-0.)); +#6820 = DIRECTION('',(0.,0.,1.)); +#6821 = ADVANCED_FACE('',(#6822),#6838,.F.); +#6822 = FACE_BOUND('',#6823,.F.); +#6823 = EDGE_LOOP('',(#6824,#6830,#6831,#6837)); +#6824 = ORIENTED_EDGE('',*,*,#6825,.F.); +#6825 = EDGE_CURVE('',#6746,#6786,#6826,.T.); +#6826 = LINE('',#6827,#6828); +#6827 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6828 = VECTOR('',#6829,1.); +#6829 = DIRECTION('',(1.,0.,-0.)); +#6830 = ORIENTED_EDGE('',*,*,#6745,.T.); +#6831 = ORIENTED_EDGE('',*,*,#6832,.T.); +#6832 = EDGE_CURVE('',#6748,#6788,#6833,.T.); +#6833 = LINE('',#6834,#6835); +#6834 = CARTESIAN_POINT('',(-42.5,36.,166.)); +#6835 = VECTOR('',#6836,1.); +#6836 = DIRECTION('',(1.,0.,-0.)); +#6837 = ORIENTED_EDGE('',*,*,#6785,.F.); +#6838 = PLANE('',#6839); +#6839 = AXIS2_PLACEMENT_3D('',#6840,#6841,#6842); +#6840 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6841 = DIRECTION('',(-0.,1.,0.)); +#6842 = DIRECTION('',(0.,0.,1.)); +#6843 = ADVANCED_FACE('',(#6844),#6860,.T.); +#6844 = FACE_BOUND('',#6845,.T.); +#6845 = EDGE_LOOP('',(#6846,#6852,#6853,#6859)); +#6846 = ORIENTED_EDGE('',*,*,#6847,.F.); +#6847 = EDGE_CURVE('',#6756,#6796,#6848,.T.); +#6848 = LINE('',#6849,#6850); +#6849 = CARTESIAN_POINT('',(-42.5,40.2,154.)); +#6850 = VECTOR('',#6851,1.); +#6851 = DIRECTION('',(1.,0.,-0.)); +#6852 = ORIENTED_EDGE('',*,*,#6763,.T.); +#6853 = ORIENTED_EDGE('',*,*,#6854,.T.); +#6854 = EDGE_CURVE('',#6764,#6804,#6855,.T.); +#6855 = LINE('',#6856,#6857); +#6856 = CARTESIAN_POINT('',(-42.5,40.2,166.)); +#6857 = VECTOR('',#6858,1.); +#6858 = DIRECTION('',(1.,0.,-0.)); +#6859 = ORIENTED_EDGE('',*,*,#6803,.F.); +#6860 = PLANE('',#6861); +#6861 = AXIS2_PLACEMENT_3D('',#6862,#6863,#6864); +#6862 = CARTESIAN_POINT('',(-42.5,40.2,154.)); +#6863 = DIRECTION('',(-0.,1.,0.)); +#6864 = DIRECTION('',(0.,0.,1.)); +#6865 = ADVANCED_FACE('',(#6866),#6872,.F.); +#6866 = FACE_BOUND('',#6867,.F.); +#6867 = EDGE_LOOP('',(#6868,#6869,#6870,#6871)); +#6868 = ORIENTED_EDGE('',*,*,#6755,.F.); +#6869 = ORIENTED_EDGE('',*,*,#6825,.T.); +#6870 = ORIENTED_EDGE('',*,*,#6795,.T.); +#6871 = ORIENTED_EDGE('',*,*,#6847,.F.); +#6872 = PLANE('',#6873); +#6873 = AXIS2_PLACEMENT_3D('',#6874,#6875,#6876); +#6874 = CARTESIAN_POINT('',(-42.5,36.,154.)); +#6875 = DIRECTION('',(0.,0.,1.)); +#6876 = DIRECTION('',(1.,0.,-0.)); +#6877 = ADVANCED_FACE('',(#6878),#6884,.T.); #6878 = FACE_BOUND('',#6879,.T.); -#6879 = EDGE_LOOP('',(#6880,#6889,#6897,#6904)); -#6880 = ORIENTED_EDGE('',*,*,#6881,.F.); -#6881 = EDGE_CURVE('',#6882,#6882,#6884,.T.); -#6882 = VERTEX_POINT('',#6883); -#6883 = CARTESIAN_POINT('',(65.,-37.85,103.92307692307)); -#6884 = CIRCLE('',#6885,1.); +#6879 = EDGE_LOOP('',(#6880,#6881,#6882,#6883)); +#6880 = ORIENTED_EDGE('',*,*,#6771,.F.); +#6881 = ORIENTED_EDGE('',*,*,#6832,.T.); +#6882 = ORIENTED_EDGE('',*,*,#6811,.T.); +#6883 = ORIENTED_EDGE('',*,*,#6854,.F.); +#6884 = PLANE('',#6885); #6885 = AXIS2_PLACEMENT_3D('',#6886,#6887,#6888); -#6886 = CARTESIAN_POINT('',(65.,-37.85,104.92307692307)); -#6887 = DIRECTION('',(0.,-1.,0.)); -#6888 = DIRECTION('',(0.,-0.,-1.)); -#6889 = ORIENTED_EDGE('',*,*,#6890,.F.); -#6890 = EDGE_CURVE('',#6891,#6882,#6893,.T.); -#6891 = VERTEX_POINT('',#6892); -#6892 = CARTESIAN_POINT('',(65.,-37.15,103.92307692307)); -#6893 = LINE('',#6894,#6895); -#6894 = CARTESIAN_POINT('',(65.,-37.15,103.92307692307)); -#6895 = VECTOR('',#6896,1.); -#6896 = DIRECTION('',(0.,-1.,0.)); -#6897 = ORIENTED_EDGE('',*,*,#6898,.T.); -#6898 = EDGE_CURVE('',#6891,#6891,#6899,.T.); -#6899 = CIRCLE('',#6900,1.); -#6900 = AXIS2_PLACEMENT_3D('',#6901,#6902,#6903); -#6901 = CARTESIAN_POINT('',(65.,-37.15,104.92307692307)); -#6902 = DIRECTION('',(0.,-1.,0.)); -#6903 = DIRECTION('',(0.,-0.,-1.)); -#6904 = ORIENTED_EDGE('',*,*,#6890,.T.); -#6905 = CYLINDRICAL_SURFACE('',#6906,1.); -#6906 = AXIS2_PLACEMENT_3D('',#6907,#6908,#6909); -#6907 = CARTESIAN_POINT('',(65.,-37.15,104.92307692307)); -#6908 = DIRECTION('',(0.,-1.,0.)); -#6909 = DIRECTION('',(0.,-0.,-1.)); -#6910 = ADVANCED_FACE('',(#6911),#6914,.T.); -#6911 = FACE_BOUND('',#6912,.T.); -#6912 = EDGE_LOOP('',(#6913)); -#6913 = ORIENTED_EDGE('',*,*,#6881,.T.); -#6914 = PLANE('',#6915); -#6915 = AXIS2_PLACEMENT_3D('',#6916,#6917,#6918); -#6916 = CARTESIAN_POINT('',(65.,-37.85,104.92307692307)); -#6917 = DIRECTION('',(0.,-1.,0.)); -#6918 = DIRECTION('',(0.,-0.,-1.)); -#6919 = ADVANCED_FACE('',(#6920),#6923,.F.); -#6920 = FACE_BOUND('',#6921,.T.); -#6921 = EDGE_LOOP('',(#6922)); -#6922 = ORIENTED_EDGE('',*,*,#6898,.F.); -#6923 = PLANE('',#6924); -#6924 = AXIS2_PLACEMENT_3D('',#6925,#6926,#6927); -#6925 = CARTESIAN_POINT('',(65.,-37.15,104.92307692307)); -#6926 = DIRECTION('',(0.,-1.,0.)); -#6927 = DIRECTION('',(0.,-0.,-1.)); -#6928 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6932)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#6929,#6930,#6931)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#6929 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#6930 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#6931 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#6932 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6929, - 'distance_accuracy_value','confusion accuracy'); -#6933 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6934,#6936); -#6934 = ( REPRESENTATION_RELATIONSHIP('','',#6874,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6935) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#6935 = ITEM_DEFINED_TRANSFORMATION('','',#11,#295); -#6936 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #6937); -#6937 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('71', - 'ConnectorBank_Right_Hole_R07_C01','',#5,#6869,$); -#6938 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6871)); -#6939 = SHAPE_DEFINITION_REPRESENTATION(#6940,#6946); -#6940 = PRODUCT_DEFINITION_SHAPE('','',#6941); -#6941 = PRODUCT_DEFINITION('design','',#6942,#6945); -#6942 = PRODUCT_DEFINITION_FORMATION('','',#6943); -#6943 = PRODUCT('ConnectorBank_Right_Screw_R07', - 'ConnectorBank_Right_Screw_R07','',(#6944)); -#6944 = PRODUCT_CONTEXT('',#2,'mechanical'); -#6945 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#6946 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6947),#7000); -#6947 = MANIFOLD_SOLID_BREP('',#6948); -#6948 = CLOSED_SHELL('',(#6949,#6982,#6991)); -#6949 = ADVANCED_FACE('',(#6950),#6977,.T.); -#6950 = FACE_BOUND('',#6951,.T.); -#6951 = EDGE_LOOP('',(#6952,#6961,#6969,#6976)); -#6952 = ORIENTED_EDGE('',*,*,#6953,.F.); -#6953 = EDGE_CURVE('',#6954,#6954,#6956,.T.); -#6954 = VERTEX_POINT('',#6955); -#6955 = CARTESIAN_POINT('',(82.6,-37.95,104.37307692307)); -#6956 = CIRCLE('',#6957,0.55); -#6957 = AXIS2_PLACEMENT_3D('',#6958,#6959,#6960); -#6958 = CARTESIAN_POINT('',(82.6,-37.95,104.92307692307)); -#6959 = DIRECTION('',(0.,-1.,0.)); -#6960 = DIRECTION('',(0.,-0.,-1.)); -#6961 = ORIENTED_EDGE('',*,*,#6962,.F.); -#6962 = EDGE_CURVE('',#6963,#6954,#6965,.T.); -#6963 = VERTEX_POINT('',#6964); -#6964 = CARTESIAN_POINT('',(82.6,-37.15,104.37307692307)); -#6965 = LINE('',#6966,#6967); -#6966 = CARTESIAN_POINT('',(82.6,-37.15,104.37307692307)); -#6967 = VECTOR('',#6968,1.); -#6968 = DIRECTION('',(0.,-1.,0.)); -#6969 = ORIENTED_EDGE('',*,*,#6970,.T.); -#6970 = EDGE_CURVE('',#6963,#6963,#6971,.T.); -#6971 = CIRCLE('',#6972,0.55); -#6972 = AXIS2_PLACEMENT_3D('',#6973,#6974,#6975); -#6973 = CARTESIAN_POINT('',(82.6,-37.15,104.92307692307)); -#6974 = DIRECTION('',(0.,-1.,0.)); -#6975 = DIRECTION('',(0.,-0.,-1.)); -#6976 = ORIENTED_EDGE('',*,*,#6962,.T.); -#6977 = CYLINDRICAL_SURFACE('',#6978,0.55); -#6978 = AXIS2_PLACEMENT_3D('',#6979,#6980,#6981); -#6979 = CARTESIAN_POINT('',(82.6,-37.15,104.92307692307)); -#6980 = DIRECTION('',(0.,-1.,0.)); -#6981 = DIRECTION('',(0.,-0.,-1.)); -#6982 = ADVANCED_FACE('',(#6983),#6986,.T.); -#6983 = FACE_BOUND('',#6984,.T.); -#6984 = EDGE_LOOP('',(#6985)); -#6985 = ORIENTED_EDGE('',*,*,#6953,.T.); -#6986 = PLANE('',#6987); -#6987 = AXIS2_PLACEMENT_3D('',#6988,#6989,#6990); -#6988 = CARTESIAN_POINT('',(82.6,-37.95,104.92307692307)); -#6989 = DIRECTION('',(0.,-1.,0.)); -#6990 = DIRECTION('',(0.,-0.,-1.)); -#6991 = ADVANCED_FACE('',(#6992),#6995,.F.); -#6992 = FACE_BOUND('',#6993,.T.); -#6993 = EDGE_LOOP('',(#6994)); -#6994 = ORIENTED_EDGE('',*,*,#6970,.F.); -#6995 = PLANE('',#6996); -#6996 = AXIS2_PLACEMENT_3D('',#6997,#6998,#6999); -#6997 = CARTESIAN_POINT('',(82.6,-37.15,104.92307692307)); -#6998 = DIRECTION('',(0.,-1.,0.)); -#6999 = DIRECTION('',(0.,-0.,-1.)); -#7000 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7004)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7001,#7002,#7003)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7001 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7002 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7003 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7004 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7001, - 'distance_accuracy_value','confusion accuracy'); -#7005 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7006,#7008); -#7006 = ( REPRESENTATION_RELATIONSHIP('','',#6946,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7007) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7007 = ITEM_DEFINED_TRANSFORMATION('','',#11,#299); -#7008 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7009); -#7009 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('72', - 'ConnectorBank_Right_Screw_R07','',#5,#6941,$); -#7010 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6943)); -#7011 = SHAPE_DEFINITION_REPRESENTATION(#7012,#7018); -#7012 = PRODUCT_DEFINITION_SHAPE('','',#7013); -#7013 = PRODUCT_DEFINITION('design','',#7014,#7017); -#7014 = PRODUCT_DEFINITION_FORMATION('','',#7015); -#7015 = PRODUCT('ConnectorBank_Right_Hole_R07_C02', - 'ConnectorBank_Right_Hole_R07_C02','',(#7016)); -#7016 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7017 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7018 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7019),#7072); -#7019 = MANIFOLD_SOLID_BREP('',#7020); -#7020 = CLOSED_SHELL('',(#7021,#7054,#7063)); -#7021 = ADVANCED_FACE('',(#7022),#7049,.T.); -#7022 = FACE_BOUND('',#7023,.T.); -#7023 = EDGE_LOOP('',(#7024,#7033,#7041,#7048)); -#7024 = ORIENTED_EDGE('',*,*,#7025,.F.); -#7025 = EDGE_CURVE('',#7026,#7026,#7028,.T.); -#7026 = VERTEX_POINT('',#7027); -#7027 = CARTESIAN_POINT('',(70.,-37.85,103.92307692307)); -#7028 = CIRCLE('',#7029,1.); -#7029 = AXIS2_PLACEMENT_3D('',#7030,#7031,#7032); -#7030 = CARTESIAN_POINT('',(70.,-37.85,104.92307692307)); -#7031 = DIRECTION('',(0.,-1.,0.)); -#7032 = DIRECTION('',(0.,-0.,-1.)); -#7033 = ORIENTED_EDGE('',*,*,#7034,.F.); -#7034 = EDGE_CURVE('',#7035,#7026,#7037,.T.); -#7035 = VERTEX_POINT('',#7036); -#7036 = CARTESIAN_POINT('',(70.,-37.15,103.92307692307)); -#7037 = LINE('',#7038,#7039); -#7038 = CARTESIAN_POINT('',(70.,-37.15,103.92307692307)); -#7039 = VECTOR('',#7040,1.); -#7040 = DIRECTION('',(0.,-1.,0.)); -#7041 = ORIENTED_EDGE('',*,*,#7042,.T.); -#7042 = EDGE_CURVE('',#7035,#7035,#7043,.T.); -#7043 = CIRCLE('',#7044,1.); -#7044 = AXIS2_PLACEMENT_3D('',#7045,#7046,#7047); -#7045 = CARTESIAN_POINT('',(70.,-37.15,104.92307692307)); -#7046 = DIRECTION('',(0.,-1.,0.)); -#7047 = DIRECTION('',(0.,-0.,-1.)); -#7048 = ORIENTED_EDGE('',*,*,#7034,.T.); -#7049 = CYLINDRICAL_SURFACE('',#7050,1.); -#7050 = AXIS2_PLACEMENT_3D('',#7051,#7052,#7053); -#7051 = CARTESIAN_POINT('',(70.,-37.15,104.92307692307)); -#7052 = DIRECTION('',(0.,-1.,0.)); -#7053 = DIRECTION('',(0.,-0.,-1.)); -#7054 = ADVANCED_FACE('',(#7055),#7058,.T.); -#7055 = FACE_BOUND('',#7056,.T.); -#7056 = EDGE_LOOP('',(#7057)); -#7057 = ORIENTED_EDGE('',*,*,#7025,.T.); -#7058 = PLANE('',#7059); -#7059 = AXIS2_PLACEMENT_3D('',#7060,#7061,#7062); -#7060 = CARTESIAN_POINT('',(70.,-37.85,104.92307692307)); -#7061 = DIRECTION('',(0.,-1.,0.)); -#7062 = DIRECTION('',(0.,-0.,-1.)); -#7063 = ADVANCED_FACE('',(#7064),#7067,.F.); -#7064 = FACE_BOUND('',#7065,.T.); -#7065 = EDGE_LOOP('',(#7066)); -#7066 = ORIENTED_EDGE('',*,*,#7042,.F.); -#7067 = PLANE('',#7068); -#7068 = AXIS2_PLACEMENT_3D('',#7069,#7070,#7071); -#7069 = CARTESIAN_POINT('',(70.,-37.15,104.92307692307)); -#7070 = DIRECTION('',(0.,-1.,0.)); -#7071 = DIRECTION('',(0.,-0.,-1.)); -#7072 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7076)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7073,#7074,#7075)) REPRESENTATION_CONTEXT +#6886 = CARTESIAN_POINT('',(-42.5,36.,166.)); +#6887 = DIRECTION('',(0.,0.,1.)); +#6888 = DIRECTION('',(1.,0.,-0.)); +#6889 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6893)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6890,#6891,#6892)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7073 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7074 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7075 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7076 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7073, +#6890 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6891 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6892 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6893 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6890, 'distance_accuracy_value','confusion accuracy'); -#7077 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7078,#7080); -#7078 = ( REPRESENTATION_RELATIONSHIP('','',#7018,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7079) +#6894 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6895,#6897); +#6895 = ( REPRESENTATION_RELATIONSHIP('','',#6738,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6896) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7079 = ITEM_DEFINED_TRANSFORMATION('','',#11,#303); -#7080 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7081); -#7081 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('73', - 'ConnectorBank_Right_Hole_R07_C02','',#5,#7013,$); -#7082 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7015)); -#7083 = SHAPE_DEFINITION_REPRESENTATION(#7084,#7090); -#7084 = PRODUCT_DEFINITION_SHAPE('','',#7085); -#7085 = PRODUCT_DEFINITION('design','',#7086,#7089); -#7086 = PRODUCT_DEFINITION_FORMATION('','',#7087); -#7087 = PRODUCT('ConnectorBank_Right_Hole_R07_C03', - 'ConnectorBank_Right_Hole_R07_C03','',(#7088)); -#7088 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7089 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7090 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7091),#7144); -#7091 = MANIFOLD_SOLID_BREP('',#7092); -#7092 = CLOSED_SHELL('',(#7093,#7126,#7135)); -#7093 = ADVANCED_FACE('',(#7094),#7121,.T.); -#7094 = FACE_BOUND('',#7095,.T.); -#7095 = EDGE_LOOP('',(#7096,#7105,#7113,#7120)); -#7096 = ORIENTED_EDGE('',*,*,#7097,.F.); -#7097 = EDGE_CURVE('',#7098,#7098,#7100,.T.); -#7098 = VERTEX_POINT('',#7099); -#7099 = CARTESIAN_POINT('',(75.,-37.85,103.92307692307)); -#7100 = CIRCLE('',#7101,1.); -#7101 = AXIS2_PLACEMENT_3D('',#7102,#7103,#7104); -#7102 = CARTESIAN_POINT('',(75.,-37.85,104.92307692307)); -#7103 = DIRECTION('',(0.,-1.,0.)); -#7104 = DIRECTION('',(0.,-0.,-1.)); -#7105 = ORIENTED_EDGE('',*,*,#7106,.F.); -#7106 = EDGE_CURVE('',#7107,#7098,#7109,.T.); -#7107 = VERTEX_POINT('',#7108); -#7108 = CARTESIAN_POINT('',(75.,-37.15,103.92307692307)); -#7109 = LINE('',#7110,#7111); -#7110 = CARTESIAN_POINT('',(75.,-37.15,103.92307692307)); -#7111 = VECTOR('',#7112,1.); -#7112 = DIRECTION('',(0.,-1.,0.)); -#7113 = ORIENTED_EDGE('',*,*,#7114,.T.); -#7114 = EDGE_CURVE('',#7107,#7107,#7115,.T.); -#7115 = CIRCLE('',#7116,1.); -#7116 = AXIS2_PLACEMENT_3D('',#7117,#7118,#7119); -#7117 = CARTESIAN_POINT('',(75.,-37.15,104.92307692307)); -#7118 = DIRECTION('',(0.,-1.,0.)); -#7119 = DIRECTION('',(0.,-0.,-1.)); -#7120 = ORIENTED_EDGE('',*,*,#7106,.T.); -#7121 = CYLINDRICAL_SURFACE('',#7122,1.); -#7122 = AXIS2_PLACEMENT_3D('',#7123,#7124,#7125); -#7123 = CARTESIAN_POINT('',(75.,-37.15,104.92307692307)); -#7124 = DIRECTION('',(0.,-1.,0.)); -#7125 = DIRECTION('',(0.,-0.,-1.)); -#7126 = ADVANCED_FACE('',(#7127),#7130,.T.); -#7127 = FACE_BOUND('',#7128,.T.); -#7128 = EDGE_LOOP('',(#7129)); -#7129 = ORIENTED_EDGE('',*,*,#7097,.T.); -#7130 = PLANE('',#7131); -#7131 = AXIS2_PLACEMENT_3D('',#7132,#7133,#7134); -#7132 = CARTESIAN_POINT('',(75.,-37.85,104.92307692307)); -#7133 = DIRECTION('',(0.,-1.,0.)); -#7134 = DIRECTION('',(0.,-0.,-1.)); -#7135 = ADVANCED_FACE('',(#7136),#7139,.F.); -#7136 = FACE_BOUND('',#7137,.T.); -#7137 = EDGE_LOOP('',(#7138)); -#7138 = ORIENTED_EDGE('',*,*,#7114,.F.); -#7139 = PLANE('',#7140); -#7140 = AXIS2_PLACEMENT_3D('',#7141,#7142,#7143); -#7141 = CARTESIAN_POINT('',(75.,-37.15,104.92307692307)); -#7142 = DIRECTION('',(0.,-1.,0.)); -#7143 = DIRECTION('',(0.,-0.,-1.)); -#7144 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7148)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7145,#7146,#7147)) REPRESENTATION_CONTEXT +#6896 = ITEM_DEFINED_TRANSFORMATION('','',#11,#295); +#6897 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6898); +#6898 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('71','ConnectorBank_LeftTopCap', + '',#5,#6733,$); +#6899 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6735)); +#6900 = SHAPE_DEFINITION_REPRESENTATION(#6901,#6907); +#6901 = PRODUCT_DEFINITION_SHAPE('','',#6902); +#6902 = PRODUCT_DEFINITION('design','',#6903,#6906); +#6903 = PRODUCT_DEFINITION_FORMATION('','',#6904); +#6904 = PRODUCT('ConnectorBank_RightTopCap','ConnectorBank_RightTopCap', + '',(#6905)); +#6905 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6906 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6907 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6908),#7058); +#6908 = MANIFOLD_SOLID_BREP('',#6909); +#6909 = CLOSED_SHELL('',(#6910,#6950,#6990,#7012,#7034,#7046)); +#6910 = ADVANCED_FACE('',(#6911),#6945,.F.); +#6911 = FACE_BOUND('',#6912,.F.); +#6912 = EDGE_LOOP('',(#6913,#6923,#6931,#6939)); +#6913 = ORIENTED_EDGE('',*,*,#6914,.F.); +#6914 = EDGE_CURVE('',#6915,#6917,#6919,.T.); +#6915 = VERTEX_POINT('',#6916); +#6916 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#6917 = VERTEX_POINT('',#6918); +#6918 = CARTESIAN_POINT('',(-17.5,36.,163.)); +#6919 = LINE('',#6920,#6921); +#6920 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#6921 = VECTOR('',#6922,1.); +#6922 = DIRECTION('',(0.,0.,1.)); +#6923 = ORIENTED_EDGE('',*,*,#6924,.T.); +#6924 = EDGE_CURVE('',#6915,#6925,#6927,.T.); +#6925 = VERTEX_POINT('',#6926); +#6926 = CARTESIAN_POINT('',(-17.5,40.2,152.)); +#6927 = LINE('',#6928,#6929); +#6928 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#6929 = VECTOR('',#6930,1.); +#6930 = DIRECTION('',(-0.,1.,0.)); +#6931 = ORIENTED_EDGE('',*,*,#6932,.T.); +#6932 = EDGE_CURVE('',#6925,#6933,#6935,.T.); +#6933 = VERTEX_POINT('',#6934); +#6934 = CARTESIAN_POINT('',(-17.5,40.2,163.)); +#6935 = LINE('',#6936,#6937); +#6936 = CARTESIAN_POINT('',(-17.5,40.2,152.)); +#6937 = VECTOR('',#6938,1.); +#6938 = DIRECTION('',(0.,0.,1.)); +#6939 = ORIENTED_EDGE('',*,*,#6940,.F.); +#6940 = EDGE_CURVE('',#6917,#6933,#6941,.T.); +#6941 = LINE('',#6942,#6943); +#6942 = CARTESIAN_POINT('',(-17.5,36.,163.)); +#6943 = VECTOR('',#6944,1.); +#6944 = DIRECTION('',(-0.,1.,0.)); +#6945 = PLANE('',#6946); +#6946 = AXIS2_PLACEMENT_3D('',#6947,#6948,#6949); +#6947 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#6948 = DIRECTION('',(1.,0.,-0.)); +#6949 = DIRECTION('',(0.,0.,1.)); +#6950 = ADVANCED_FACE('',(#6951),#6985,.T.); +#6951 = FACE_BOUND('',#6952,.T.); +#6952 = EDGE_LOOP('',(#6953,#6963,#6971,#6979)); +#6953 = ORIENTED_EDGE('',*,*,#6954,.F.); +#6954 = EDGE_CURVE('',#6955,#6957,#6959,.T.); +#6955 = VERTEX_POINT('',#6956); +#6956 = CARTESIAN_POINT('',(2.5,36.,152.)); +#6957 = VERTEX_POINT('',#6958); +#6958 = CARTESIAN_POINT('',(2.5,36.,163.)); +#6959 = LINE('',#6960,#6961); +#6960 = CARTESIAN_POINT('',(2.5,36.,152.)); +#6961 = VECTOR('',#6962,1.); +#6962 = DIRECTION('',(0.,0.,1.)); +#6963 = ORIENTED_EDGE('',*,*,#6964,.T.); +#6964 = EDGE_CURVE('',#6955,#6965,#6967,.T.); +#6965 = VERTEX_POINT('',#6966); +#6966 = CARTESIAN_POINT('',(2.5,40.2,152.)); +#6967 = LINE('',#6968,#6969); +#6968 = CARTESIAN_POINT('',(2.5,36.,152.)); +#6969 = VECTOR('',#6970,1.); +#6970 = DIRECTION('',(-0.,1.,0.)); +#6971 = ORIENTED_EDGE('',*,*,#6972,.T.); +#6972 = EDGE_CURVE('',#6965,#6973,#6975,.T.); +#6973 = VERTEX_POINT('',#6974); +#6974 = CARTESIAN_POINT('',(2.5,40.2,163.)); +#6975 = LINE('',#6976,#6977); +#6976 = CARTESIAN_POINT('',(2.5,40.2,152.)); +#6977 = VECTOR('',#6978,1.); +#6978 = DIRECTION('',(0.,0.,1.)); +#6979 = ORIENTED_EDGE('',*,*,#6980,.F.); +#6980 = EDGE_CURVE('',#6957,#6973,#6981,.T.); +#6981 = LINE('',#6982,#6983); +#6982 = CARTESIAN_POINT('',(2.5,36.,163.)); +#6983 = VECTOR('',#6984,1.); +#6984 = DIRECTION('',(-0.,1.,0.)); +#6985 = PLANE('',#6986); +#6986 = AXIS2_PLACEMENT_3D('',#6987,#6988,#6989); +#6987 = CARTESIAN_POINT('',(2.5,36.,152.)); +#6988 = DIRECTION('',(1.,0.,-0.)); +#6989 = DIRECTION('',(0.,0.,1.)); +#6990 = ADVANCED_FACE('',(#6991),#7007,.F.); +#6991 = FACE_BOUND('',#6992,.F.); +#6992 = EDGE_LOOP('',(#6993,#6999,#7000,#7006)); +#6993 = ORIENTED_EDGE('',*,*,#6994,.F.); +#6994 = EDGE_CURVE('',#6915,#6955,#6995,.T.); +#6995 = LINE('',#6996,#6997); +#6996 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#6997 = VECTOR('',#6998,1.); +#6998 = DIRECTION('',(1.,0.,-0.)); +#6999 = ORIENTED_EDGE('',*,*,#6914,.T.); +#7000 = ORIENTED_EDGE('',*,*,#7001,.T.); +#7001 = EDGE_CURVE('',#6917,#6957,#7002,.T.); +#7002 = LINE('',#7003,#7004); +#7003 = CARTESIAN_POINT('',(-17.5,36.,163.)); +#7004 = VECTOR('',#7005,1.); +#7005 = DIRECTION('',(1.,0.,-0.)); +#7006 = ORIENTED_EDGE('',*,*,#6954,.F.); +#7007 = PLANE('',#7008); +#7008 = AXIS2_PLACEMENT_3D('',#7009,#7010,#7011); +#7009 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#7010 = DIRECTION('',(-0.,1.,0.)); +#7011 = DIRECTION('',(0.,0.,1.)); +#7012 = ADVANCED_FACE('',(#7013),#7029,.T.); +#7013 = FACE_BOUND('',#7014,.T.); +#7014 = EDGE_LOOP('',(#7015,#7021,#7022,#7028)); +#7015 = ORIENTED_EDGE('',*,*,#7016,.F.); +#7016 = EDGE_CURVE('',#6925,#6965,#7017,.T.); +#7017 = LINE('',#7018,#7019); +#7018 = CARTESIAN_POINT('',(-17.5,40.2,152.)); +#7019 = VECTOR('',#7020,1.); +#7020 = DIRECTION('',(1.,0.,-0.)); +#7021 = ORIENTED_EDGE('',*,*,#6932,.T.); +#7022 = ORIENTED_EDGE('',*,*,#7023,.T.); +#7023 = EDGE_CURVE('',#6933,#6973,#7024,.T.); +#7024 = LINE('',#7025,#7026); +#7025 = CARTESIAN_POINT('',(-17.5,40.2,163.)); +#7026 = VECTOR('',#7027,1.); +#7027 = DIRECTION('',(1.,0.,-0.)); +#7028 = ORIENTED_EDGE('',*,*,#6972,.F.); +#7029 = PLANE('',#7030); +#7030 = AXIS2_PLACEMENT_3D('',#7031,#7032,#7033); +#7031 = CARTESIAN_POINT('',(-17.5,40.2,152.)); +#7032 = DIRECTION('',(-0.,1.,0.)); +#7033 = DIRECTION('',(0.,0.,1.)); +#7034 = ADVANCED_FACE('',(#7035),#7041,.F.); +#7035 = FACE_BOUND('',#7036,.F.); +#7036 = EDGE_LOOP('',(#7037,#7038,#7039,#7040)); +#7037 = ORIENTED_EDGE('',*,*,#6924,.F.); +#7038 = ORIENTED_EDGE('',*,*,#6994,.T.); +#7039 = ORIENTED_EDGE('',*,*,#6964,.T.); +#7040 = ORIENTED_EDGE('',*,*,#7016,.F.); +#7041 = PLANE('',#7042); +#7042 = AXIS2_PLACEMENT_3D('',#7043,#7044,#7045); +#7043 = CARTESIAN_POINT('',(-17.5,36.,152.)); +#7044 = DIRECTION('',(0.,0.,1.)); +#7045 = DIRECTION('',(1.,0.,-0.)); +#7046 = ADVANCED_FACE('',(#7047),#7053,.T.); +#7047 = FACE_BOUND('',#7048,.T.); +#7048 = EDGE_LOOP('',(#7049,#7050,#7051,#7052)); +#7049 = ORIENTED_EDGE('',*,*,#6940,.F.); +#7050 = ORIENTED_EDGE('',*,*,#7001,.T.); +#7051 = ORIENTED_EDGE('',*,*,#6980,.T.); +#7052 = ORIENTED_EDGE('',*,*,#7023,.F.); +#7053 = PLANE('',#7054); +#7054 = AXIS2_PLACEMENT_3D('',#7055,#7056,#7057); +#7055 = CARTESIAN_POINT('',(-17.5,36.,163.)); +#7056 = DIRECTION('',(0.,0.,1.)); +#7057 = DIRECTION('',(1.,0.,-0.)); +#7058 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7062)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7059,#7060,#7061)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7145 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7146 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7147 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7148 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7145, +#7059 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7060 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7061 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7062 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7059, 'distance_accuracy_value','confusion accuracy'); -#7149 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7150,#7152); -#7150 = ( REPRESENTATION_RELATIONSHIP('','',#7090,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7151) +#7063 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7064,#7066); +#7064 = ( REPRESENTATION_RELATIONSHIP('','',#6907,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7065) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7151 = ITEM_DEFINED_TRANSFORMATION('','',#11,#307); -#7152 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7153); -#7153 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('74', - 'ConnectorBank_Right_Hole_R07_C03','',#5,#7085,$); -#7154 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7087)); -#7155 = SHAPE_DEFINITION_REPRESENTATION(#7156,#7162); -#7156 = PRODUCT_DEFINITION_SHAPE('','',#7157); -#7157 = PRODUCT_DEFINITION('design','',#7158,#7161); -#7158 = PRODUCT_DEFINITION_FORMATION('','',#7159); -#7159 = PRODUCT('ConnectorBank_Right_Hole_R08_C01', - 'ConnectorBank_Right_Hole_R08_C01','',(#7160)); -#7160 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7161 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7162 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7163),#7216); -#7163 = MANIFOLD_SOLID_BREP('',#7164); -#7164 = CLOSED_SHELL('',(#7165,#7198,#7207)); -#7165 = ADVANCED_FACE('',(#7166),#7193,.T.); -#7166 = FACE_BOUND('',#7167,.T.); -#7167 = EDGE_LOOP('',(#7168,#7177,#7185,#7192)); -#7168 = ORIENTED_EDGE('',*,*,#7169,.F.); -#7169 = EDGE_CURVE('',#7170,#7170,#7172,.T.); -#7170 = VERTEX_POINT('',#7171); -#7171 = CARTESIAN_POINT('',(65.,-37.85,111.76923076923)); -#7172 = CIRCLE('',#7173,1.); -#7173 = AXIS2_PLACEMENT_3D('',#7174,#7175,#7176); -#7174 = CARTESIAN_POINT('',(65.,-37.85,112.76923076923)); -#7175 = DIRECTION('',(0.,-1.,0.)); -#7176 = DIRECTION('',(0.,-0.,-1.)); -#7177 = ORIENTED_EDGE('',*,*,#7178,.F.); -#7178 = EDGE_CURVE('',#7179,#7170,#7181,.T.); -#7179 = VERTEX_POINT('',#7180); -#7180 = CARTESIAN_POINT('',(65.,-37.15,111.76923076923)); -#7181 = LINE('',#7182,#7183); -#7182 = CARTESIAN_POINT('',(65.,-37.15,111.76923076923)); -#7183 = VECTOR('',#7184,1.); -#7184 = DIRECTION('',(0.,-1.,0.)); -#7185 = ORIENTED_EDGE('',*,*,#7186,.T.); -#7186 = EDGE_CURVE('',#7179,#7179,#7187,.T.); -#7187 = CIRCLE('',#7188,1.); -#7188 = AXIS2_PLACEMENT_3D('',#7189,#7190,#7191); -#7189 = CARTESIAN_POINT('',(65.,-37.15,112.76923076923)); -#7190 = DIRECTION('',(0.,-1.,0.)); -#7191 = DIRECTION('',(0.,-0.,-1.)); -#7192 = ORIENTED_EDGE('',*,*,#7178,.T.); -#7193 = CYLINDRICAL_SURFACE('',#7194,1.); -#7194 = AXIS2_PLACEMENT_3D('',#7195,#7196,#7197); -#7195 = CARTESIAN_POINT('',(65.,-37.15,112.76923076923)); -#7196 = DIRECTION('',(0.,-1.,0.)); -#7197 = DIRECTION('',(0.,-0.,-1.)); -#7198 = ADVANCED_FACE('',(#7199),#7202,.T.); -#7199 = FACE_BOUND('',#7200,.T.); -#7200 = EDGE_LOOP('',(#7201)); -#7201 = ORIENTED_EDGE('',*,*,#7169,.T.); -#7202 = PLANE('',#7203); -#7203 = AXIS2_PLACEMENT_3D('',#7204,#7205,#7206); -#7204 = CARTESIAN_POINT('',(65.,-37.85,112.76923076923)); -#7205 = DIRECTION('',(0.,-1.,0.)); -#7206 = DIRECTION('',(0.,-0.,-1.)); -#7207 = ADVANCED_FACE('',(#7208),#7211,.F.); -#7208 = FACE_BOUND('',#7209,.T.); -#7209 = EDGE_LOOP('',(#7210)); -#7210 = ORIENTED_EDGE('',*,*,#7186,.F.); -#7211 = PLANE('',#7212); -#7212 = AXIS2_PLACEMENT_3D('',#7213,#7214,#7215); -#7213 = CARTESIAN_POINT('',(65.,-37.15,112.76923076923)); -#7214 = DIRECTION('',(0.,-1.,0.)); -#7215 = DIRECTION('',(0.,-0.,-1.)); -#7216 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7220)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7217,#7218,#7219)) REPRESENTATION_CONTEXT +#7065 = ITEM_DEFINED_TRANSFORMATION('','',#11,#299); +#7066 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7067); +#7067 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('72','ConnectorBank_RightTopCap', + '',#5,#6902,$); +#7068 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6904)); +#7069 = SHAPE_DEFINITION_REPRESENTATION(#7070,#7076); +#7070 = PRODUCT_DEFINITION_SHAPE('','',#7071); +#7071 = PRODUCT_DEFINITION('design','',#7072,#7075); +#7072 = PRODUCT_DEFINITION_FORMATION('','',#7073); +#7073 = PRODUCT('AccessoryConnector_LowerLeft', + 'AccessoryConnector_LowerLeft','',(#7074)); +#7074 = PRODUCT_CONTEXT('',#2,'mechanical'); +#7075 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#7076 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7077),#7227); +#7077 = MANIFOLD_SOLID_BREP('',#7078); +#7078 = CLOSED_SHELL('',(#7079,#7119,#7159,#7181,#7203,#7215)); +#7079 = ADVANCED_FACE('',(#7080),#7114,.F.); +#7080 = FACE_BOUND('',#7081,.F.); +#7081 = EDGE_LOOP('',(#7082,#7092,#7100,#7108)); +#7082 = ORIENTED_EDGE('',*,*,#7083,.F.); +#7083 = EDGE_CURVE('',#7084,#7086,#7088,.T.); +#7084 = VERTEX_POINT('',#7085); +#7085 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7086 = VERTEX_POINT('',#7087); +#7087 = CARTESIAN_POINT('',(-51.5,36.,52.)); +#7088 = LINE('',#7089,#7090); +#7089 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7090 = VECTOR('',#7091,1.); +#7091 = DIRECTION('',(0.,0.,1.)); +#7092 = ORIENTED_EDGE('',*,*,#7093,.T.); +#7093 = EDGE_CURVE('',#7084,#7094,#7096,.T.); +#7094 = VERTEX_POINT('',#7095); +#7095 = CARTESIAN_POINT('',(-51.5,40.,18.)); +#7096 = LINE('',#7097,#7098); +#7097 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7098 = VECTOR('',#7099,1.); +#7099 = DIRECTION('',(-0.,1.,0.)); +#7100 = ORIENTED_EDGE('',*,*,#7101,.T.); +#7101 = EDGE_CURVE('',#7094,#7102,#7104,.T.); +#7102 = VERTEX_POINT('',#7103); +#7103 = CARTESIAN_POINT('',(-51.5,40.,52.)); +#7104 = LINE('',#7105,#7106); +#7105 = CARTESIAN_POINT('',(-51.5,40.,18.)); +#7106 = VECTOR('',#7107,1.); +#7107 = DIRECTION('',(0.,0.,1.)); +#7108 = ORIENTED_EDGE('',*,*,#7109,.F.); +#7109 = EDGE_CURVE('',#7086,#7102,#7110,.T.); +#7110 = LINE('',#7111,#7112); +#7111 = CARTESIAN_POINT('',(-51.5,36.,52.)); +#7112 = VECTOR('',#7113,1.); +#7113 = DIRECTION('',(-0.,1.,0.)); +#7114 = PLANE('',#7115); +#7115 = AXIS2_PLACEMENT_3D('',#7116,#7117,#7118); +#7116 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7117 = DIRECTION('',(1.,0.,-0.)); +#7118 = DIRECTION('',(0.,0.,1.)); +#7119 = ADVANCED_FACE('',(#7120),#7154,.T.); +#7120 = FACE_BOUND('',#7121,.T.); +#7121 = EDGE_LOOP('',(#7122,#7132,#7140,#7148)); +#7122 = ORIENTED_EDGE('',*,*,#7123,.F.); +#7123 = EDGE_CURVE('',#7124,#7126,#7128,.T.); +#7124 = VERTEX_POINT('',#7125); +#7125 = CARTESIAN_POINT('',(-35.5,36.,18.)); +#7126 = VERTEX_POINT('',#7127); +#7127 = CARTESIAN_POINT('',(-35.5,36.,52.)); +#7128 = LINE('',#7129,#7130); +#7129 = CARTESIAN_POINT('',(-35.5,36.,18.)); +#7130 = VECTOR('',#7131,1.); +#7131 = DIRECTION('',(0.,0.,1.)); +#7132 = ORIENTED_EDGE('',*,*,#7133,.T.); +#7133 = EDGE_CURVE('',#7124,#7134,#7136,.T.); +#7134 = VERTEX_POINT('',#7135); +#7135 = CARTESIAN_POINT('',(-35.5,40.,18.)); +#7136 = LINE('',#7137,#7138); +#7137 = CARTESIAN_POINT('',(-35.5,36.,18.)); +#7138 = VECTOR('',#7139,1.); +#7139 = DIRECTION('',(-0.,1.,0.)); +#7140 = ORIENTED_EDGE('',*,*,#7141,.T.); +#7141 = EDGE_CURVE('',#7134,#7142,#7144,.T.); +#7142 = VERTEX_POINT('',#7143); +#7143 = CARTESIAN_POINT('',(-35.5,40.,52.)); +#7144 = LINE('',#7145,#7146); +#7145 = CARTESIAN_POINT('',(-35.5,40.,18.)); +#7146 = VECTOR('',#7147,1.); +#7147 = DIRECTION('',(0.,0.,1.)); +#7148 = ORIENTED_EDGE('',*,*,#7149,.F.); +#7149 = EDGE_CURVE('',#7126,#7142,#7150,.T.); +#7150 = LINE('',#7151,#7152); +#7151 = CARTESIAN_POINT('',(-35.5,36.,52.)); +#7152 = VECTOR('',#7153,1.); +#7153 = DIRECTION('',(-0.,1.,0.)); +#7154 = PLANE('',#7155); +#7155 = AXIS2_PLACEMENT_3D('',#7156,#7157,#7158); +#7156 = CARTESIAN_POINT('',(-35.5,36.,18.)); +#7157 = DIRECTION('',(1.,0.,-0.)); +#7158 = DIRECTION('',(0.,0.,1.)); +#7159 = ADVANCED_FACE('',(#7160),#7176,.F.); +#7160 = FACE_BOUND('',#7161,.F.); +#7161 = EDGE_LOOP('',(#7162,#7168,#7169,#7175)); +#7162 = ORIENTED_EDGE('',*,*,#7163,.F.); +#7163 = EDGE_CURVE('',#7084,#7124,#7164,.T.); +#7164 = LINE('',#7165,#7166); +#7165 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7166 = VECTOR('',#7167,1.); +#7167 = DIRECTION('',(1.,0.,-0.)); +#7168 = ORIENTED_EDGE('',*,*,#7083,.T.); +#7169 = ORIENTED_EDGE('',*,*,#7170,.T.); +#7170 = EDGE_CURVE('',#7086,#7126,#7171,.T.); +#7171 = LINE('',#7172,#7173); +#7172 = CARTESIAN_POINT('',(-51.5,36.,52.)); +#7173 = VECTOR('',#7174,1.); +#7174 = DIRECTION('',(1.,0.,-0.)); +#7175 = ORIENTED_EDGE('',*,*,#7123,.F.); +#7176 = PLANE('',#7177); +#7177 = AXIS2_PLACEMENT_3D('',#7178,#7179,#7180); +#7178 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7179 = DIRECTION('',(-0.,1.,0.)); +#7180 = DIRECTION('',(0.,0.,1.)); +#7181 = ADVANCED_FACE('',(#7182),#7198,.T.); +#7182 = FACE_BOUND('',#7183,.T.); +#7183 = EDGE_LOOP('',(#7184,#7190,#7191,#7197)); +#7184 = ORIENTED_EDGE('',*,*,#7185,.F.); +#7185 = EDGE_CURVE('',#7094,#7134,#7186,.T.); +#7186 = LINE('',#7187,#7188); +#7187 = CARTESIAN_POINT('',(-51.5,40.,18.)); +#7188 = VECTOR('',#7189,1.); +#7189 = DIRECTION('',(1.,0.,-0.)); +#7190 = ORIENTED_EDGE('',*,*,#7101,.T.); +#7191 = ORIENTED_EDGE('',*,*,#7192,.T.); +#7192 = EDGE_CURVE('',#7102,#7142,#7193,.T.); +#7193 = LINE('',#7194,#7195); +#7194 = CARTESIAN_POINT('',(-51.5,40.,52.)); +#7195 = VECTOR('',#7196,1.); +#7196 = DIRECTION('',(1.,0.,-0.)); +#7197 = ORIENTED_EDGE('',*,*,#7141,.F.); +#7198 = PLANE('',#7199); +#7199 = AXIS2_PLACEMENT_3D('',#7200,#7201,#7202); +#7200 = CARTESIAN_POINT('',(-51.5,40.,18.)); +#7201 = DIRECTION('',(-0.,1.,0.)); +#7202 = DIRECTION('',(0.,0.,1.)); +#7203 = ADVANCED_FACE('',(#7204),#7210,.F.); +#7204 = FACE_BOUND('',#7205,.F.); +#7205 = EDGE_LOOP('',(#7206,#7207,#7208,#7209)); +#7206 = ORIENTED_EDGE('',*,*,#7093,.F.); +#7207 = ORIENTED_EDGE('',*,*,#7163,.T.); +#7208 = ORIENTED_EDGE('',*,*,#7133,.T.); +#7209 = ORIENTED_EDGE('',*,*,#7185,.F.); +#7210 = PLANE('',#7211); +#7211 = AXIS2_PLACEMENT_3D('',#7212,#7213,#7214); +#7212 = CARTESIAN_POINT('',(-51.5,36.,18.)); +#7213 = DIRECTION('',(0.,0.,1.)); +#7214 = DIRECTION('',(1.,0.,-0.)); +#7215 = ADVANCED_FACE('',(#7216),#7222,.T.); +#7216 = FACE_BOUND('',#7217,.T.); +#7217 = EDGE_LOOP('',(#7218,#7219,#7220,#7221)); +#7218 = ORIENTED_EDGE('',*,*,#7109,.F.); +#7219 = ORIENTED_EDGE('',*,*,#7170,.T.); +#7220 = ORIENTED_EDGE('',*,*,#7149,.T.); +#7221 = ORIENTED_EDGE('',*,*,#7192,.F.); +#7222 = PLANE('',#7223); +#7223 = AXIS2_PLACEMENT_3D('',#7224,#7225,#7226); +#7224 = CARTESIAN_POINT('',(-51.5,36.,52.)); +#7225 = DIRECTION('',(0.,0.,1.)); +#7226 = DIRECTION('',(1.,0.,-0.)); +#7227 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7231)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7228,#7229,#7230)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7217 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7218 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7219 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7220 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7217, +#7228 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7229 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7230 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7231 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7228, 'distance_accuracy_value','confusion accuracy'); -#7221 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7222,#7224); -#7222 = ( REPRESENTATION_RELATIONSHIP('','',#7162,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7223) +#7232 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7233,#7235); +#7233 = ( REPRESENTATION_RELATIONSHIP('','',#7076,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7234) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7223 = ITEM_DEFINED_TRANSFORMATION('','',#11,#311); -#7224 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7225); -#7225 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('75', - 'ConnectorBank_Right_Hole_R08_C01','',#5,#7157,$); -#7226 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7159)); -#7227 = SHAPE_DEFINITION_REPRESENTATION(#7228,#7234); -#7228 = PRODUCT_DEFINITION_SHAPE('','',#7229); -#7229 = PRODUCT_DEFINITION('design','',#7230,#7233); -#7230 = PRODUCT_DEFINITION_FORMATION('','',#7231); -#7231 = PRODUCT('ConnectorBank_Right_Screw_R08', - 'ConnectorBank_Right_Screw_R08','',(#7232)); -#7232 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7233 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7234 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7235),#7288); -#7235 = MANIFOLD_SOLID_BREP('',#7236); -#7236 = CLOSED_SHELL('',(#7237,#7270,#7279)); -#7237 = ADVANCED_FACE('',(#7238),#7265,.T.); -#7238 = FACE_BOUND('',#7239,.T.); -#7239 = EDGE_LOOP('',(#7240,#7249,#7257,#7264)); -#7240 = ORIENTED_EDGE('',*,*,#7241,.F.); -#7241 = EDGE_CURVE('',#7242,#7242,#7244,.T.); -#7242 = VERTEX_POINT('',#7243); -#7243 = CARTESIAN_POINT('',(82.6,-37.95,112.21923076923)); -#7244 = CIRCLE('',#7245,0.55); -#7245 = AXIS2_PLACEMENT_3D('',#7246,#7247,#7248); -#7246 = CARTESIAN_POINT('',(82.6,-37.95,112.76923076923)); -#7247 = DIRECTION('',(0.,-1.,0.)); -#7248 = DIRECTION('',(0.,-0.,-1.)); -#7249 = ORIENTED_EDGE('',*,*,#7250,.F.); -#7250 = EDGE_CURVE('',#7251,#7242,#7253,.T.); -#7251 = VERTEX_POINT('',#7252); -#7252 = CARTESIAN_POINT('',(82.6,-37.15,112.21923076923)); -#7253 = LINE('',#7254,#7255); -#7254 = CARTESIAN_POINT('',(82.6,-37.15,112.21923076923)); -#7255 = VECTOR('',#7256,1.); -#7256 = DIRECTION('',(0.,-1.,0.)); -#7257 = ORIENTED_EDGE('',*,*,#7258,.T.); -#7258 = EDGE_CURVE('',#7251,#7251,#7259,.T.); -#7259 = CIRCLE('',#7260,0.55); -#7260 = AXIS2_PLACEMENT_3D('',#7261,#7262,#7263); -#7261 = CARTESIAN_POINT('',(82.6,-37.15,112.76923076923)); -#7262 = DIRECTION('',(0.,-1.,0.)); -#7263 = DIRECTION('',(0.,-0.,-1.)); -#7264 = ORIENTED_EDGE('',*,*,#7250,.T.); -#7265 = CYLINDRICAL_SURFACE('',#7266,0.55); -#7266 = AXIS2_PLACEMENT_3D('',#7267,#7268,#7269); -#7267 = CARTESIAN_POINT('',(82.6,-37.15,112.76923076923)); -#7268 = DIRECTION('',(0.,-1.,0.)); -#7269 = DIRECTION('',(0.,-0.,-1.)); -#7270 = ADVANCED_FACE('',(#7271),#7274,.T.); -#7271 = FACE_BOUND('',#7272,.T.); -#7272 = EDGE_LOOP('',(#7273)); -#7273 = ORIENTED_EDGE('',*,*,#7241,.T.); -#7274 = PLANE('',#7275); -#7275 = AXIS2_PLACEMENT_3D('',#7276,#7277,#7278); -#7276 = CARTESIAN_POINT('',(82.6,-37.95,112.76923076923)); -#7277 = DIRECTION('',(0.,-1.,0.)); -#7278 = DIRECTION('',(0.,-0.,-1.)); -#7279 = ADVANCED_FACE('',(#7280),#7283,.F.); -#7280 = FACE_BOUND('',#7281,.T.); -#7281 = EDGE_LOOP('',(#7282)); -#7282 = ORIENTED_EDGE('',*,*,#7258,.F.); +#7234 = ITEM_DEFINED_TRANSFORMATION('','',#11,#303); +#7235 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7236); +#7236 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('73', + 'AccessoryConnector_LowerLeft','',#5,#7071,$); +#7237 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7073)); +#7238 = SHAPE_DEFINITION_REPRESENTATION(#7239,#7245); +#7239 = PRODUCT_DEFINITION_SHAPE('','',#7240); +#7240 = PRODUCT_DEFINITION('design','',#7241,#7244); +#7241 = PRODUCT_DEFINITION_FORMATION('','',#7242); +#7242 = PRODUCT('AccessoryConnector_LowerRight', + 'AccessoryConnector_LowerRight','',(#7243)); +#7243 = PRODUCT_CONTEXT('',#2,'mechanical'); +#7244 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#7245 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7246),#7396); +#7246 = MANIFOLD_SOLID_BREP('',#7247); +#7247 = CLOSED_SHELL('',(#7248,#7288,#7328,#7350,#7372,#7384)); +#7248 = ADVANCED_FACE('',(#7249),#7283,.F.); +#7249 = FACE_BOUND('',#7250,.F.); +#7250 = EDGE_LOOP('',(#7251,#7261,#7269,#7277)); +#7251 = ORIENTED_EDGE('',*,*,#7252,.F.); +#7252 = EDGE_CURVE('',#7253,#7255,#7257,.T.); +#7253 = VERTEX_POINT('',#7254); +#7254 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7255 = VERTEX_POINT('',#7256); +#7256 = CARTESIAN_POINT('',(-11.5,36.,50.)); +#7257 = LINE('',#7258,#7259); +#7258 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7259 = VECTOR('',#7260,1.); +#7260 = DIRECTION('',(0.,0.,1.)); +#7261 = ORIENTED_EDGE('',*,*,#7262,.T.); +#7262 = EDGE_CURVE('',#7253,#7263,#7265,.T.); +#7263 = VERTEX_POINT('',#7264); +#7264 = CARTESIAN_POINT('',(-11.5,40.,22.)); +#7265 = LINE('',#7266,#7267); +#7266 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7267 = VECTOR('',#7268,1.); +#7268 = DIRECTION('',(-0.,1.,0.)); +#7269 = ORIENTED_EDGE('',*,*,#7270,.T.); +#7270 = EDGE_CURVE('',#7263,#7271,#7273,.T.); +#7271 = VERTEX_POINT('',#7272); +#7272 = CARTESIAN_POINT('',(-11.5,40.,50.)); +#7273 = LINE('',#7274,#7275); +#7274 = CARTESIAN_POINT('',(-11.5,40.,22.)); +#7275 = VECTOR('',#7276,1.); +#7276 = DIRECTION('',(0.,0.,1.)); +#7277 = ORIENTED_EDGE('',*,*,#7278,.F.); +#7278 = EDGE_CURVE('',#7255,#7271,#7279,.T.); +#7279 = LINE('',#7280,#7281); +#7280 = CARTESIAN_POINT('',(-11.5,36.,50.)); +#7281 = VECTOR('',#7282,1.); +#7282 = DIRECTION('',(-0.,1.,0.)); #7283 = PLANE('',#7284); #7284 = AXIS2_PLACEMENT_3D('',#7285,#7286,#7287); -#7285 = CARTESIAN_POINT('',(82.6,-37.15,112.76923076923)); -#7286 = DIRECTION('',(0.,-1.,0.)); -#7287 = DIRECTION('',(0.,-0.,-1.)); -#7288 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7292)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7289,#7290,#7291)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7289 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7290 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7291 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7292 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7289, - 'distance_accuracy_value','confusion accuracy'); -#7293 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7294,#7296); -#7294 = ( REPRESENTATION_RELATIONSHIP('','',#7234,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7295) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7295 = ITEM_DEFINED_TRANSFORMATION('','',#11,#315); -#7296 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7297); -#7297 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('76', - 'ConnectorBank_Right_Screw_R08','',#5,#7229,$); -#7298 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7231)); -#7299 = SHAPE_DEFINITION_REPRESENTATION(#7300,#7306); -#7300 = PRODUCT_DEFINITION_SHAPE('','',#7301); -#7301 = PRODUCT_DEFINITION('design','',#7302,#7305); -#7302 = PRODUCT_DEFINITION_FORMATION('','',#7303); -#7303 = PRODUCT('ConnectorBank_Right_Hole_R08_C02', - 'ConnectorBank_Right_Hole_R08_C02','',(#7304)); -#7304 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7305 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7306 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7307),#7360); -#7307 = MANIFOLD_SOLID_BREP('',#7308); -#7308 = CLOSED_SHELL('',(#7309,#7342,#7351)); -#7309 = ADVANCED_FACE('',(#7310),#7337,.T.); -#7310 = FACE_BOUND('',#7311,.T.); -#7311 = EDGE_LOOP('',(#7312,#7321,#7329,#7336)); -#7312 = ORIENTED_EDGE('',*,*,#7313,.F.); -#7313 = EDGE_CURVE('',#7314,#7314,#7316,.T.); -#7314 = VERTEX_POINT('',#7315); -#7315 = CARTESIAN_POINT('',(70.,-37.85,111.76923076923)); -#7316 = CIRCLE('',#7317,1.); -#7317 = AXIS2_PLACEMENT_3D('',#7318,#7319,#7320); -#7318 = CARTESIAN_POINT('',(70.,-37.85,112.76923076923)); -#7319 = DIRECTION('',(0.,-1.,0.)); -#7320 = DIRECTION('',(0.,-0.,-1.)); -#7321 = ORIENTED_EDGE('',*,*,#7322,.F.); -#7322 = EDGE_CURVE('',#7323,#7314,#7325,.T.); -#7323 = VERTEX_POINT('',#7324); -#7324 = CARTESIAN_POINT('',(70.,-37.15,111.76923076923)); -#7325 = LINE('',#7326,#7327); -#7326 = CARTESIAN_POINT('',(70.,-37.15,111.76923076923)); -#7327 = VECTOR('',#7328,1.); -#7328 = DIRECTION('',(0.,-1.,0.)); -#7329 = ORIENTED_EDGE('',*,*,#7330,.T.); -#7330 = EDGE_CURVE('',#7323,#7323,#7331,.T.); -#7331 = CIRCLE('',#7332,1.); -#7332 = AXIS2_PLACEMENT_3D('',#7333,#7334,#7335); -#7333 = CARTESIAN_POINT('',(70.,-37.15,112.76923076923)); -#7334 = DIRECTION('',(0.,-1.,0.)); -#7335 = DIRECTION('',(0.,-0.,-1.)); -#7336 = ORIENTED_EDGE('',*,*,#7322,.T.); -#7337 = CYLINDRICAL_SURFACE('',#7338,1.); -#7338 = AXIS2_PLACEMENT_3D('',#7339,#7340,#7341); -#7339 = CARTESIAN_POINT('',(70.,-37.15,112.76923076923)); -#7340 = DIRECTION('',(0.,-1.,0.)); -#7341 = DIRECTION('',(0.,-0.,-1.)); -#7342 = ADVANCED_FACE('',(#7343),#7346,.T.); -#7343 = FACE_BOUND('',#7344,.T.); -#7344 = EDGE_LOOP('',(#7345)); -#7345 = ORIENTED_EDGE('',*,*,#7313,.T.); -#7346 = PLANE('',#7347); -#7347 = AXIS2_PLACEMENT_3D('',#7348,#7349,#7350); -#7348 = CARTESIAN_POINT('',(70.,-37.85,112.76923076923)); -#7349 = DIRECTION('',(0.,-1.,0.)); -#7350 = DIRECTION('',(0.,-0.,-1.)); -#7351 = ADVANCED_FACE('',(#7352),#7355,.F.); -#7352 = FACE_BOUND('',#7353,.T.); -#7353 = EDGE_LOOP('',(#7354)); -#7354 = ORIENTED_EDGE('',*,*,#7330,.F.); -#7355 = PLANE('',#7356); -#7356 = AXIS2_PLACEMENT_3D('',#7357,#7358,#7359); -#7357 = CARTESIAN_POINT('',(70.,-37.15,112.76923076923)); -#7358 = DIRECTION('',(0.,-1.,0.)); -#7359 = DIRECTION('',(0.,-0.,-1.)); -#7360 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7364)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7361,#7362,#7363)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7361 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7362 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7363 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7364 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7361, - 'distance_accuracy_value','confusion accuracy'); -#7365 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7366,#7368); -#7366 = ( REPRESENTATION_RELATIONSHIP('','',#7306,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7367) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7367 = ITEM_DEFINED_TRANSFORMATION('','',#11,#319); -#7368 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7369); -#7369 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('77', - 'ConnectorBank_Right_Hole_R08_C02','',#5,#7301,$); -#7370 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7303)); -#7371 = SHAPE_DEFINITION_REPRESENTATION(#7372,#7378); -#7372 = PRODUCT_DEFINITION_SHAPE('','',#7373); -#7373 = PRODUCT_DEFINITION('design','',#7374,#7377); -#7374 = PRODUCT_DEFINITION_FORMATION('','',#7375); -#7375 = PRODUCT('ConnectorBank_Right_Hole_R08_C03', - 'ConnectorBank_Right_Hole_R08_C03','',(#7376)); -#7376 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7377 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7378 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7379),#7432); -#7379 = MANIFOLD_SOLID_BREP('',#7380); -#7380 = CLOSED_SHELL('',(#7381,#7414,#7423)); -#7381 = ADVANCED_FACE('',(#7382),#7409,.T.); -#7382 = FACE_BOUND('',#7383,.T.); -#7383 = EDGE_LOOP('',(#7384,#7393,#7401,#7408)); -#7384 = ORIENTED_EDGE('',*,*,#7385,.F.); -#7385 = EDGE_CURVE('',#7386,#7386,#7388,.T.); -#7386 = VERTEX_POINT('',#7387); -#7387 = CARTESIAN_POINT('',(75.,-37.85,111.76923076923)); -#7388 = CIRCLE('',#7389,1.); -#7389 = AXIS2_PLACEMENT_3D('',#7390,#7391,#7392); -#7390 = CARTESIAN_POINT('',(75.,-37.85,112.76923076923)); -#7391 = DIRECTION('',(0.,-1.,0.)); -#7392 = DIRECTION('',(0.,-0.,-1.)); -#7393 = ORIENTED_EDGE('',*,*,#7394,.F.); -#7394 = EDGE_CURVE('',#7395,#7386,#7397,.T.); -#7395 = VERTEX_POINT('',#7396); -#7396 = CARTESIAN_POINT('',(75.,-37.15,111.76923076923)); -#7397 = LINE('',#7398,#7399); -#7398 = CARTESIAN_POINT('',(75.,-37.15,111.76923076923)); -#7399 = VECTOR('',#7400,1.); -#7400 = DIRECTION('',(0.,-1.,0.)); -#7401 = ORIENTED_EDGE('',*,*,#7402,.T.); -#7402 = EDGE_CURVE('',#7395,#7395,#7403,.T.); -#7403 = CIRCLE('',#7404,1.); -#7404 = AXIS2_PLACEMENT_3D('',#7405,#7406,#7407); -#7405 = CARTESIAN_POINT('',(75.,-37.15,112.76923076923)); -#7406 = DIRECTION('',(0.,-1.,0.)); -#7407 = DIRECTION('',(0.,-0.,-1.)); -#7408 = ORIENTED_EDGE('',*,*,#7394,.T.); -#7409 = CYLINDRICAL_SURFACE('',#7410,1.); -#7410 = AXIS2_PLACEMENT_3D('',#7411,#7412,#7413); -#7411 = CARTESIAN_POINT('',(75.,-37.15,112.76923076923)); -#7412 = DIRECTION('',(0.,-1.,0.)); -#7413 = DIRECTION('',(0.,-0.,-1.)); -#7414 = ADVANCED_FACE('',(#7415),#7418,.T.); -#7415 = FACE_BOUND('',#7416,.T.); -#7416 = EDGE_LOOP('',(#7417)); -#7417 = ORIENTED_EDGE('',*,*,#7385,.T.); -#7418 = PLANE('',#7419); -#7419 = AXIS2_PLACEMENT_3D('',#7420,#7421,#7422); -#7420 = CARTESIAN_POINT('',(75.,-37.85,112.76923076923)); -#7421 = DIRECTION('',(0.,-1.,0.)); -#7422 = DIRECTION('',(0.,-0.,-1.)); -#7423 = ADVANCED_FACE('',(#7424),#7427,.F.); -#7424 = FACE_BOUND('',#7425,.T.); -#7425 = EDGE_LOOP('',(#7426)); -#7426 = ORIENTED_EDGE('',*,*,#7402,.F.); -#7427 = PLANE('',#7428); -#7428 = AXIS2_PLACEMENT_3D('',#7429,#7430,#7431); -#7429 = CARTESIAN_POINT('',(75.,-37.15,112.76923076923)); -#7430 = DIRECTION('',(0.,-1.,0.)); -#7431 = DIRECTION('',(0.,-0.,-1.)); -#7432 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7436)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7433,#7434,#7435)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7433 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7434 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7435 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7436 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7433, - 'distance_accuracy_value','confusion accuracy'); -#7437 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7438,#7440); -#7438 = ( REPRESENTATION_RELATIONSHIP('','',#7378,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7439) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7439 = ITEM_DEFINED_TRANSFORMATION('','',#11,#323); -#7440 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7441); -#7441 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('78', - 'ConnectorBank_Right_Hole_R08_C03','',#5,#7373,$); -#7442 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7375)); -#7443 = SHAPE_DEFINITION_REPRESENTATION(#7444,#7450); -#7444 = PRODUCT_DEFINITION_SHAPE('','',#7445); -#7445 = PRODUCT_DEFINITION('design','',#7446,#7449); -#7446 = PRODUCT_DEFINITION_FORMATION('','',#7447); -#7447 = PRODUCT('ConnectorBank_Right_Hole_R09_C01', - 'ConnectorBank_Right_Hole_R09_C01','',(#7448)); -#7448 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7449 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7450 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7451),#7504); -#7451 = MANIFOLD_SOLID_BREP('',#7452); -#7452 = CLOSED_SHELL('',(#7453,#7486,#7495)); -#7453 = ADVANCED_FACE('',(#7454),#7481,.T.); -#7454 = FACE_BOUND('',#7455,.T.); -#7455 = EDGE_LOOP('',(#7456,#7465,#7473,#7480)); -#7456 = ORIENTED_EDGE('',*,*,#7457,.F.); -#7457 = EDGE_CURVE('',#7458,#7458,#7460,.T.); -#7458 = VERTEX_POINT('',#7459); -#7459 = CARTESIAN_POINT('',(65.,-37.85,119.61538461538)); -#7460 = CIRCLE('',#7461,1.); -#7461 = AXIS2_PLACEMENT_3D('',#7462,#7463,#7464); -#7462 = CARTESIAN_POINT('',(65.,-37.85,120.61538461538)); -#7463 = DIRECTION('',(0.,-1.,0.)); -#7464 = DIRECTION('',(0.,-0.,-1.)); -#7465 = ORIENTED_EDGE('',*,*,#7466,.F.); -#7466 = EDGE_CURVE('',#7467,#7458,#7469,.T.); -#7467 = VERTEX_POINT('',#7468); -#7468 = CARTESIAN_POINT('',(65.,-37.15,119.61538461538)); -#7469 = LINE('',#7470,#7471); -#7470 = CARTESIAN_POINT('',(65.,-37.15,119.61538461538)); -#7471 = VECTOR('',#7472,1.); -#7472 = DIRECTION('',(0.,-1.,0.)); -#7473 = ORIENTED_EDGE('',*,*,#7474,.T.); -#7474 = EDGE_CURVE('',#7467,#7467,#7475,.T.); -#7475 = CIRCLE('',#7476,1.); -#7476 = AXIS2_PLACEMENT_3D('',#7477,#7478,#7479); -#7477 = CARTESIAN_POINT('',(65.,-37.15,120.61538461538)); -#7478 = DIRECTION('',(0.,-1.,0.)); -#7479 = DIRECTION('',(0.,-0.,-1.)); -#7480 = ORIENTED_EDGE('',*,*,#7466,.T.); -#7481 = CYLINDRICAL_SURFACE('',#7482,1.); -#7482 = AXIS2_PLACEMENT_3D('',#7483,#7484,#7485); -#7483 = CARTESIAN_POINT('',(65.,-37.15,120.61538461538)); -#7484 = DIRECTION('',(0.,-1.,0.)); -#7485 = DIRECTION('',(0.,-0.,-1.)); -#7486 = ADVANCED_FACE('',(#7487),#7490,.T.); -#7487 = FACE_BOUND('',#7488,.T.); -#7488 = EDGE_LOOP('',(#7489)); -#7489 = ORIENTED_EDGE('',*,*,#7457,.T.); -#7490 = PLANE('',#7491); -#7491 = AXIS2_PLACEMENT_3D('',#7492,#7493,#7494); -#7492 = CARTESIAN_POINT('',(65.,-37.85,120.61538461538)); -#7493 = DIRECTION('',(0.,-1.,0.)); -#7494 = DIRECTION('',(0.,-0.,-1.)); -#7495 = ADVANCED_FACE('',(#7496),#7499,.F.); -#7496 = FACE_BOUND('',#7497,.T.); -#7497 = EDGE_LOOP('',(#7498)); -#7498 = ORIENTED_EDGE('',*,*,#7474,.F.); -#7499 = PLANE('',#7500); -#7500 = AXIS2_PLACEMENT_3D('',#7501,#7502,#7503); -#7501 = CARTESIAN_POINT('',(65.,-37.15,120.61538461538)); -#7502 = DIRECTION('',(0.,-1.,0.)); -#7503 = DIRECTION('',(0.,-0.,-1.)); -#7504 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7508)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7505,#7506,#7507)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7505 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7506 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7507 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7508 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7505, - 'distance_accuracy_value','confusion accuracy'); -#7509 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7510,#7512); -#7510 = ( REPRESENTATION_RELATIONSHIP('','',#7450,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7511) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7511 = ITEM_DEFINED_TRANSFORMATION('','',#11,#327); -#7512 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7513); -#7513 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('79', - 'ConnectorBank_Right_Hole_R09_C01','',#5,#7445,$); -#7514 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7447)); -#7515 = SHAPE_DEFINITION_REPRESENTATION(#7516,#7522); -#7516 = PRODUCT_DEFINITION_SHAPE('','',#7517); -#7517 = PRODUCT_DEFINITION('design','',#7518,#7521); -#7518 = PRODUCT_DEFINITION_FORMATION('','',#7519); -#7519 = PRODUCT('ConnectorBank_Right_Screw_R09', - 'ConnectorBank_Right_Screw_R09','',(#7520)); -#7520 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7521 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7522 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7523),#7576); -#7523 = MANIFOLD_SOLID_BREP('',#7524); -#7524 = CLOSED_SHELL('',(#7525,#7558,#7567)); -#7525 = ADVANCED_FACE('',(#7526),#7553,.T.); -#7526 = FACE_BOUND('',#7527,.T.); -#7527 = EDGE_LOOP('',(#7528,#7537,#7545,#7552)); -#7528 = ORIENTED_EDGE('',*,*,#7529,.F.); -#7529 = EDGE_CURVE('',#7530,#7530,#7532,.T.); -#7530 = VERTEX_POINT('',#7531); -#7531 = CARTESIAN_POINT('',(82.6,-37.95,120.06538461538)); -#7532 = CIRCLE('',#7533,0.55); -#7533 = AXIS2_PLACEMENT_3D('',#7534,#7535,#7536); -#7534 = CARTESIAN_POINT('',(82.6,-37.95,120.61538461538)); -#7535 = DIRECTION('',(0.,-1.,0.)); -#7536 = DIRECTION('',(0.,-0.,-1.)); -#7537 = ORIENTED_EDGE('',*,*,#7538,.F.); -#7538 = EDGE_CURVE('',#7539,#7530,#7541,.T.); -#7539 = VERTEX_POINT('',#7540); -#7540 = CARTESIAN_POINT('',(82.6,-37.15,120.06538461538)); -#7541 = LINE('',#7542,#7543); -#7542 = CARTESIAN_POINT('',(82.6,-37.15,120.06538461538)); -#7543 = VECTOR('',#7544,1.); -#7544 = DIRECTION('',(0.,-1.,0.)); -#7545 = ORIENTED_EDGE('',*,*,#7546,.T.); -#7546 = EDGE_CURVE('',#7539,#7539,#7547,.T.); -#7547 = CIRCLE('',#7548,0.55); -#7548 = AXIS2_PLACEMENT_3D('',#7549,#7550,#7551); -#7549 = CARTESIAN_POINT('',(82.6,-37.15,120.61538461538)); -#7550 = DIRECTION('',(0.,-1.,0.)); -#7551 = DIRECTION('',(0.,-0.,-1.)); -#7552 = ORIENTED_EDGE('',*,*,#7538,.T.); -#7553 = CYLINDRICAL_SURFACE('',#7554,0.55); -#7554 = AXIS2_PLACEMENT_3D('',#7555,#7556,#7557); -#7555 = CARTESIAN_POINT('',(82.6,-37.15,120.61538461538)); -#7556 = DIRECTION('',(0.,-1.,0.)); -#7557 = DIRECTION('',(0.,-0.,-1.)); -#7558 = ADVANCED_FACE('',(#7559),#7562,.T.); -#7559 = FACE_BOUND('',#7560,.T.); -#7560 = EDGE_LOOP('',(#7561)); -#7561 = ORIENTED_EDGE('',*,*,#7529,.T.); -#7562 = PLANE('',#7563); -#7563 = AXIS2_PLACEMENT_3D('',#7564,#7565,#7566); -#7564 = CARTESIAN_POINT('',(82.6,-37.95,120.61538461538)); -#7565 = DIRECTION('',(0.,-1.,0.)); -#7566 = DIRECTION('',(0.,-0.,-1.)); -#7567 = ADVANCED_FACE('',(#7568),#7571,.F.); -#7568 = FACE_BOUND('',#7569,.T.); -#7569 = EDGE_LOOP('',(#7570)); -#7570 = ORIENTED_EDGE('',*,*,#7546,.F.); -#7571 = PLANE('',#7572); -#7572 = AXIS2_PLACEMENT_3D('',#7573,#7574,#7575); -#7573 = CARTESIAN_POINT('',(82.6,-37.15,120.61538461538)); -#7574 = DIRECTION('',(0.,-1.,0.)); -#7575 = DIRECTION('',(0.,-0.,-1.)); -#7576 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7580)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7577,#7578,#7579)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7577 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7578 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7579 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7580 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7577, - 'distance_accuracy_value','confusion accuracy'); -#7581 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7582,#7584); -#7582 = ( REPRESENTATION_RELATIONSHIP('','',#7522,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7583) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7583 = ITEM_DEFINED_TRANSFORMATION('','',#11,#331); -#7584 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7585); -#7585 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('80', - 'ConnectorBank_Right_Screw_R09','',#5,#7517,$); -#7586 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7519)); -#7587 = SHAPE_DEFINITION_REPRESENTATION(#7588,#7594); -#7588 = PRODUCT_DEFINITION_SHAPE('','',#7589); -#7589 = PRODUCT_DEFINITION('design','',#7590,#7593); -#7590 = PRODUCT_DEFINITION_FORMATION('','',#7591); -#7591 = PRODUCT('ConnectorBank_Right_Hole_R09_C02', - 'ConnectorBank_Right_Hole_R09_C02','',(#7592)); -#7592 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7593 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7594 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7595),#7648); -#7595 = MANIFOLD_SOLID_BREP('',#7596); -#7596 = CLOSED_SHELL('',(#7597,#7630,#7639)); -#7597 = ADVANCED_FACE('',(#7598),#7625,.T.); -#7598 = FACE_BOUND('',#7599,.T.); -#7599 = EDGE_LOOP('',(#7600,#7609,#7617,#7624)); -#7600 = ORIENTED_EDGE('',*,*,#7601,.F.); -#7601 = EDGE_CURVE('',#7602,#7602,#7604,.T.); -#7602 = VERTEX_POINT('',#7603); -#7603 = CARTESIAN_POINT('',(70.,-37.85,119.61538461538)); -#7604 = CIRCLE('',#7605,1.); -#7605 = AXIS2_PLACEMENT_3D('',#7606,#7607,#7608); -#7606 = CARTESIAN_POINT('',(70.,-37.85,120.61538461538)); -#7607 = DIRECTION('',(0.,-1.,0.)); -#7608 = DIRECTION('',(0.,-0.,-1.)); -#7609 = ORIENTED_EDGE('',*,*,#7610,.F.); -#7610 = EDGE_CURVE('',#7611,#7602,#7613,.T.); -#7611 = VERTEX_POINT('',#7612); -#7612 = CARTESIAN_POINT('',(70.,-37.15,119.61538461538)); -#7613 = LINE('',#7614,#7615); -#7614 = CARTESIAN_POINT('',(70.,-37.15,119.61538461538)); -#7615 = VECTOR('',#7616,1.); -#7616 = DIRECTION('',(0.,-1.,0.)); -#7617 = ORIENTED_EDGE('',*,*,#7618,.T.); -#7618 = EDGE_CURVE('',#7611,#7611,#7619,.T.); -#7619 = CIRCLE('',#7620,1.); -#7620 = AXIS2_PLACEMENT_3D('',#7621,#7622,#7623); -#7621 = CARTESIAN_POINT('',(70.,-37.15,120.61538461538)); -#7622 = DIRECTION('',(0.,-1.,0.)); -#7623 = DIRECTION('',(0.,-0.,-1.)); -#7624 = ORIENTED_EDGE('',*,*,#7610,.T.); -#7625 = CYLINDRICAL_SURFACE('',#7626,1.); -#7626 = AXIS2_PLACEMENT_3D('',#7627,#7628,#7629); -#7627 = CARTESIAN_POINT('',(70.,-37.15,120.61538461538)); -#7628 = DIRECTION('',(0.,-1.,0.)); -#7629 = DIRECTION('',(0.,-0.,-1.)); -#7630 = ADVANCED_FACE('',(#7631),#7634,.T.); -#7631 = FACE_BOUND('',#7632,.T.); -#7632 = EDGE_LOOP('',(#7633)); -#7633 = ORIENTED_EDGE('',*,*,#7601,.T.); -#7634 = PLANE('',#7635); -#7635 = AXIS2_PLACEMENT_3D('',#7636,#7637,#7638); -#7636 = CARTESIAN_POINT('',(70.,-37.85,120.61538461538)); -#7637 = DIRECTION('',(0.,-1.,0.)); -#7638 = DIRECTION('',(0.,-0.,-1.)); -#7639 = ADVANCED_FACE('',(#7640),#7643,.F.); -#7640 = FACE_BOUND('',#7641,.T.); -#7641 = EDGE_LOOP('',(#7642)); -#7642 = ORIENTED_EDGE('',*,*,#7618,.F.); -#7643 = PLANE('',#7644); -#7644 = AXIS2_PLACEMENT_3D('',#7645,#7646,#7647); -#7645 = CARTESIAN_POINT('',(70.,-37.15,120.61538461538)); -#7646 = DIRECTION('',(0.,-1.,0.)); -#7647 = DIRECTION('',(0.,-0.,-1.)); -#7648 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7652)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7649,#7650,#7651)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7649 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7650 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7651 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7652 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7649, - 'distance_accuracy_value','confusion accuracy'); -#7653 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7654,#7656); -#7654 = ( REPRESENTATION_RELATIONSHIP('','',#7594,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7655) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7655 = ITEM_DEFINED_TRANSFORMATION('','',#11,#335); -#7656 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7657); -#7657 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('81', - 'ConnectorBank_Right_Hole_R09_C02','',#5,#7589,$); -#7658 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7591)); -#7659 = SHAPE_DEFINITION_REPRESENTATION(#7660,#7666); -#7660 = PRODUCT_DEFINITION_SHAPE('','',#7661); -#7661 = PRODUCT_DEFINITION('design','',#7662,#7665); -#7662 = PRODUCT_DEFINITION_FORMATION('','',#7663); -#7663 = PRODUCT('ConnectorBank_Right_Hole_R09_C03', - 'ConnectorBank_Right_Hole_R09_C03','',(#7664)); -#7664 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7665 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7666 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7667),#7720); -#7667 = MANIFOLD_SOLID_BREP('',#7668); -#7668 = CLOSED_SHELL('',(#7669,#7702,#7711)); -#7669 = ADVANCED_FACE('',(#7670),#7697,.T.); -#7670 = FACE_BOUND('',#7671,.T.); -#7671 = EDGE_LOOP('',(#7672,#7681,#7689,#7696)); -#7672 = ORIENTED_EDGE('',*,*,#7673,.F.); -#7673 = EDGE_CURVE('',#7674,#7674,#7676,.T.); -#7674 = VERTEX_POINT('',#7675); -#7675 = CARTESIAN_POINT('',(75.,-37.85,119.61538461538)); -#7676 = CIRCLE('',#7677,1.); -#7677 = AXIS2_PLACEMENT_3D('',#7678,#7679,#7680); -#7678 = CARTESIAN_POINT('',(75.,-37.85,120.61538461538)); -#7679 = DIRECTION('',(0.,-1.,0.)); -#7680 = DIRECTION('',(0.,-0.,-1.)); -#7681 = ORIENTED_EDGE('',*,*,#7682,.F.); -#7682 = EDGE_CURVE('',#7683,#7674,#7685,.T.); -#7683 = VERTEX_POINT('',#7684); -#7684 = CARTESIAN_POINT('',(75.,-37.15,119.61538461538)); -#7685 = LINE('',#7686,#7687); -#7686 = CARTESIAN_POINT('',(75.,-37.15,119.61538461538)); -#7687 = VECTOR('',#7688,1.); -#7688 = DIRECTION('',(0.,-1.,0.)); -#7689 = ORIENTED_EDGE('',*,*,#7690,.T.); -#7690 = EDGE_CURVE('',#7683,#7683,#7691,.T.); -#7691 = CIRCLE('',#7692,1.); -#7692 = AXIS2_PLACEMENT_3D('',#7693,#7694,#7695); -#7693 = CARTESIAN_POINT('',(75.,-37.15,120.61538461538)); -#7694 = DIRECTION('',(0.,-1.,0.)); -#7695 = DIRECTION('',(0.,-0.,-1.)); -#7696 = ORIENTED_EDGE('',*,*,#7682,.T.); -#7697 = CYLINDRICAL_SURFACE('',#7698,1.); -#7698 = AXIS2_PLACEMENT_3D('',#7699,#7700,#7701); -#7699 = CARTESIAN_POINT('',(75.,-37.15,120.61538461538)); -#7700 = DIRECTION('',(0.,-1.,0.)); -#7701 = DIRECTION('',(0.,-0.,-1.)); -#7702 = ADVANCED_FACE('',(#7703),#7706,.T.); -#7703 = FACE_BOUND('',#7704,.T.); -#7704 = EDGE_LOOP('',(#7705)); -#7705 = ORIENTED_EDGE('',*,*,#7673,.T.); -#7706 = PLANE('',#7707); -#7707 = AXIS2_PLACEMENT_3D('',#7708,#7709,#7710); -#7708 = CARTESIAN_POINT('',(75.,-37.85,120.61538461538)); -#7709 = DIRECTION('',(0.,-1.,0.)); -#7710 = DIRECTION('',(0.,-0.,-1.)); -#7711 = ADVANCED_FACE('',(#7712),#7715,.F.); -#7712 = FACE_BOUND('',#7713,.T.); -#7713 = EDGE_LOOP('',(#7714)); -#7714 = ORIENTED_EDGE('',*,*,#7690,.F.); -#7715 = PLANE('',#7716); -#7716 = AXIS2_PLACEMENT_3D('',#7717,#7718,#7719); -#7717 = CARTESIAN_POINT('',(75.,-37.15,120.61538461538)); -#7718 = DIRECTION('',(0.,-1.,0.)); -#7719 = DIRECTION('',(0.,-0.,-1.)); -#7720 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7724)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7721,#7722,#7723)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7721 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7722 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7723 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7724 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7721, - 'distance_accuracy_value','confusion accuracy'); -#7725 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7726,#7728); -#7726 = ( REPRESENTATION_RELATIONSHIP('','',#7666,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7727) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7727 = ITEM_DEFINED_TRANSFORMATION('','',#11,#339); -#7728 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7729); -#7729 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('82', - 'ConnectorBank_Right_Hole_R09_C03','',#5,#7661,$); -#7730 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7663)); -#7731 = SHAPE_DEFINITION_REPRESENTATION(#7732,#7738); -#7732 = PRODUCT_DEFINITION_SHAPE('','',#7733); -#7733 = PRODUCT_DEFINITION('design','',#7734,#7737); -#7734 = PRODUCT_DEFINITION_FORMATION('','',#7735); -#7735 = PRODUCT('ConnectorBank_Right_Hole_R10_C01', - 'ConnectorBank_Right_Hole_R10_C01','',(#7736)); -#7736 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7737 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7738 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7739),#7792); -#7739 = MANIFOLD_SOLID_BREP('',#7740); -#7740 = CLOSED_SHELL('',(#7741,#7774,#7783)); -#7741 = ADVANCED_FACE('',(#7742),#7769,.T.); -#7742 = FACE_BOUND('',#7743,.T.); -#7743 = EDGE_LOOP('',(#7744,#7753,#7761,#7768)); -#7744 = ORIENTED_EDGE('',*,*,#7745,.F.); -#7745 = EDGE_CURVE('',#7746,#7746,#7748,.T.); -#7746 = VERTEX_POINT('',#7747); -#7747 = CARTESIAN_POINT('',(65.,-37.85,127.46153846153)); -#7748 = CIRCLE('',#7749,1.); -#7749 = AXIS2_PLACEMENT_3D('',#7750,#7751,#7752); -#7750 = CARTESIAN_POINT('',(65.,-37.85,128.46153846153)); -#7751 = DIRECTION('',(0.,-1.,0.)); -#7752 = DIRECTION('',(0.,-0.,-1.)); -#7753 = ORIENTED_EDGE('',*,*,#7754,.F.); -#7754 = EDGE_CURVE('',#7755,#7746,#7757,.T.); -#7755 = VERTEX_POINT('',#7756); -#7756 = CARTESIAN_POINT('',(65.,-37.15,127.46153846153)); -#7757 = LINE('',#7758,#7759); -#7758 = CARTESIAN_POINT('',(65.,-37.15,127.46153846153)); -#7759 = VECTOR('',#7760,1.); -#7760 = DIRECTION('',(0.,-1.,0.)); -#7761 = ORIENTED_EDGE('',*,*,#7762,.T.); -#7762 = EDGE_CURVE('',#7755,#7755,#7763,.T.); -#7763 = CIRCLE('',#7764,1.); -#7764 = AXIS2_PLACEMENT_3D('',#7765,#7766,#7767); -#7765 = CARTESIAN_POINT('',(65.,-37.15,128.46153846153)); -#7766 = DIRECTION('',(0.,-1.,0.)); -#7767 = DIRECTION('',(0.,-0.,-1.)); -#7768 = ORIENTED_EDGE('',*,*,#7754,.T.); -#7769 = CYLINDRICAL_SURFACE('',#7770,1.); -#7770 = AXIS2_PLACEMENT_3D('',#7771,#7772,#7773); -#7771 = CARTESIAN_POINT('',(65.,-37.15,128.46153846153)); -#7772 = DIRECTION('',(0.,-1.,0.)); -#7773 = DIRECTION('',(0.,-0.,-1.)); -#7774 = ADVANCED_FACE('',(#7775),#7778,.T.); -#7775 = FACE_BOUND('',#7776,.T.); -#7776 = EDGE_LOOP('',(#7777)); -#7777 = ORIENTED_EDGE('',*,*,#7745,.T.); -#7778 = PLANE('',#7779); -#7779 = AXIS2_PLACEMENT_3D('',#7780,#7781,#7782); -#7780 = CARTESIAN_POINT('',(65.,-37.85,128.46153846153)); -#7781 = DIRECTION('',(0.,-1.,0.)); -#7782 = DIRECTION('',(0.,-0.,-1.)); -#7783 = ADVANCED_FACE('',(#7784),#7787,.F.); -#7784 = FACE_BOUND('',#7785,.T.); -#7785 = EDGE_LOOP('',(#7786)); -#7786 = ORIENTED_EDGE('',*,*,#7762,.F.); -#7787 = PLANE('',#7788); -#7788 = AXIS2_PLACEMENT_3D('',#7789,#7790,#7791); -#7789 = CARTESIAN_POINT('',(65.,-37.15,128.46153846153)); -#7790 = DIRECTION('',(0.,-1.,0.)); -#7791 = DIRECTION('',(0.,-0.,-1.)); -#7792 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7796)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7793,#7794,#7795)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7793 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7794 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7795 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7796 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7793, - 'distance_accuracy_value','confusion accuracy'); -#7797 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7798,#7800); -#7798 = ( REPRESENTATION_RELATIONSHIP('','',#7738,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7799) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7799 = ITEM_DEFINED_TRANSFORMATION('','',#11,#343); -#7800 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7801); -#7801 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('83', - 'ConnectorBank_Right_Hole_R10_C01','',#5,#7733,$); -#7802 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7735)); -#7803 = SHAPE_DEFINITION_REPRESENTATION(#7804,#7810); -#7804 = PRODUCT_DEFINITION_SHAPE('','',#7805); -#7805 = PRODUCT_DEFINITION('design','',#7806,#7809); -#7806 = PRODUCT_DEFINITION_FORMATION('','',#7807); -#7807 = PRODUCT('ConnectorBank_Right_Screw_R10', - 'ConnectorBank_Right_Screw_R10','',(#7808)); -#7808 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7809 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7810 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7811),#7864); -#7811 = MANIFOLD_SOLID_BREP('',#7812); -#7812 = CLOSED_SHELL('',(#7813,#7846,#7855)); -#7813 = ADVANCED_FACE('',(#7814),#7841,.T.); -#7814 = FACE_BOUND('',#7815,.T.); -#7815 = EDGE_LOOP('',(#7816,#7825,#7833,#7840)); -#7816 = ORIENTED_EDGE('',*,*,#7817,.F.); -#7817 = EDGE_CURVE('',#7818,#7818,#7820,.T.); -#7818 = VERTEX_POINT('',#7819); -#7819 = CARTESIAN_POINT('',(82.6,-37.95,127.91153846153)); -#7820 = CIRCLE('',#7821,0.55); -#7821 = AXIS2_PLACEMENT_3D('',#7822,#7823,#7824); -#7822 = CARTESIAN_POINT('',(82.6,-37.95,128.46153846153)); -#7823 = DIRECTION('',(0.,-1.,0.)); -#7824 = DIRECTION('',(0.,-0.,-1.)); -#7825 = ORIENTED_EDGE('',*,*,#7826,.F.); -#7826 = EDGE_CURVE('',#7827,#7818,#7829,.T.); -#7827 = VERTEX_POINT('',#7828); -#7828 = CARTESIAN_POINT('',(82.6,-37.15,127.91153846153)); -#7829 = LINE('',#7830,#7831); -#7830 = CARTESIAN_POINT('',(82.6,-37.15,127.91153846153)); -#7831 = VECTOR('',#7832,1.); -#7832 = DIRECTION('',(0.,-1.,0.)); -#7833 = ORIENTED_EDGE('',*,*,#7834,.T.); -#7834 = EDGE_CURVE('',#7827,#7827,#7835,.T.); -#7835 = CIRCLE('',#7836,0.55); -#7836 = AXIS2_PLACEMENT_3D('',#7837,#7838,#7839); -#7837 = CARTESIAN_POINT('',(82.6,-37.15,128.46153846153)); -#7838 = DIRECTION('',(0.,-1.,0.)); -#7839 = DIRECTION('',(0.,-0.,-1.)); -#7840 = ORIENTED_EDGE('',*,*,#7826,.T.); -#7841 = CYLINDRICAL_SURFACE('',#7842,0.55); -#7842 = AXIS2_PLACEMENT_3D('',#7843,#7844,#7845); -#7843 = CARTESIAN_POINT('',(82.6,-37.15,128.46153846153)); -#7844 = DIRECTION('',(0.,-1.,0.)); -#7845 = DIRECTION('',(0.,-0.,-1.)); -#7846 = ADVANCED_FACE('',(#7847),#7850,.T.); -#7847 = FACE_BOUND('',#7848,.T.); -#7848 = EDGE_LOOP('',(#7849)); -#7849 = ORIENTED_EDGE('',*,*,#7817,.T.); -#7850 = PLANE('',#7851); -#7851 = AXIS2_PLACEMENT_3D('',#7852,#7853,#7854); -#7852 = CARTESIAN_POINT('',(82.6,-37.95,128.46153846153)); -#7853 = DIRECTION('',(0.,-1.,0.)); -#7854 = DIRECTION('',(0.,-0.,-1.)); -#7855 = ADVANCED_FACE('',(#7856),#7859,.F.); -#7856 = FACE_BOUND('',#7857,.T.); -#7857 = EDGE_LOOP('',(#7858)); -#7858 = ORIENTED_EDGE('',*,*,#7834,.F.); -#7859 = PLANE('',#7860); -#7860 = AXIS2_PLACEMENT_3D('',#7861,#7862,#7863); -#7861 = CARTESIAN_POINT('',(82.6,-37.15,128.46153846153)); -#7862 = DIRECTION('',(0.,-1.,0.)); -#7863 = DIRECTION('',(0.,-0.,-1.)); -#7864 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7868)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7865,#7866,#7867)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7865 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7866 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7867 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7868 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7865, - 'distance_accuracy_value','confusion accuracy'); -#7869 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7870,#7872); -#7870 = ( REPRESENTATION_RELATIONSHIP('','',#7810,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7871) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7871 = ITEM_DEFINED_TRANSFORMATION('','',#11,#347); -#7872 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7873); -#7873 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('84', - 'ConnectorBank_Right_Screw_R10','',#5,#7805,$); -#7874 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7807)); -#7875 = SHAPE_DEFINITION_REPRESENTATION(#7876,#7882); -#7876 = PRODUCT_DEFINITION_SHAPE('','',#7877); -#7877 = PRODUCT_DEFINITION('design','',#7878,#7881); -#7878 = PRODUCT_DEFINITION_FORMATION('','',#7879); -#7879 = PRODUCT('ConnectorBank_Right_Hole_R10_C02', - 'ConnectorBank_Right_Hole_R10_C02','',(#7880)); -#7880 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7881 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7882 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7883),#7936); -#7883 = MANIFOLD_SOLID_BREP('',#7884); -#7884 = CLOSED_SHELL('',(#7885,#7918,#7927)); -#7885 = ADVANCED_FACE('',(#7886),#7913,.T.); -#7886 = FACE_BOUND('',#7887,.T.); -#7887 = EDGE_LOOP('',(#7888,#7897,#7905,#7912)); -#7888 = ORIENTED_EDGE('',*,*,#7889,.F.); -#7889 = EDGE_CURVE('',#7890,#7890,#7892,.T.); -#7890 = VERTEX_POINT('',#7891); -#7891 = CARTESIAN_POINT('',(70.,-37.85,127.46153846153)); -#7892 = CIRCLE('',#7893,1.); -#7893 = AXIS2_PLACEMENT_3D('',#7894,#7895,#7896); -#7894 = CARTESIAN_POINT('',(70.,-37.85,128.46153846153)); -#7895 = DIRECTION('',(0.,-1.,0.)); -#7896 = DIRECTION('',(0.,-0.,-1.)); -#7897 = ORIENTED_EDGE('',*,*,#7898,.F.); -#7898 = EDGE_CURVE('',#7899,#7890,#7901,.T.); -#7899 = VERTEX_POINT('',#7900); -#7900 = CARTESIAN_POINT('',(70.,-37.15,127.46153846153)); -#7901 = LINE('',#7902,#7903); -#7902 = CARTESIAN_POINT('',(70.,-37.15,127.46153846153)); -#7903 = VECTOR('',#7904,1.); -#7904 = DIRECTION('',(0.,-1.,0.)); -#7905 = ORIENTED_EDGE('',*,*,#7906,.T.); -#7906 = EDGE_CURVE('',#7899,#7899,#7907,.T.); -#7907 = CIRCLE('',#7908,1.); -#7908 = AXIS2_PLACEMENT_3D('',#7909,#7910,#7911); -#7909 = CARTESIAN_POINT('',(70.,-37.15,128.46153846153)); -#7910 = DIRECTION('',(0.,-1.,0.)); -#7911 = DIRECTION('',(0.,-0.,-1.)); -#7912 = ORIENTED_EDGE('',*,*,#7898,.T.); -#7913 = CYLINDRICAL_SURFACE('',#7914,1.); -#7914 = AXIS2_PLACEMENT_3D('',#7915,#7916,#7917); -#7915 = CARTESIAN_POINT('',(70.,-37.15,128.46153846153)); -#7916 = DIRECTION('',(0.,-1.,0.)); -#7917 = DIRECTION('',(0.,-0.,-1.)); -#7918 = ADVANCED_FACE('',(#7919),#7922,.T.); -#7919 = FACE_BOUND('',#7920,.T.); -#7920 = EDGE_LOOP('',(#7921)); -#7921 = ORIENTED_EDGE('',*,*,#7889,.T.); -#7922 = PLANE('',#7923); -#7923 = AXIS2_PLACEMENT_3D('',#7924,#7925,#7926); -#7924 = CARTESIAN_POINT('',(70.,-37.85,128.46153846153)); -#7925 = DIRECTION('',(0.,-1.,0.)); -#7926 = DIRECTION('',(0.,-0.,-1.)); -#7927 = ADVANCED_FACE('',(#7928),#7931,.F.); -#7928 = FACE_BOUND('',#7929,.T.); -#7929 = EDGE_LOOP('',(#7930)); -#7930 = ORIENTED_EDGE('',*,*,#7906,.F.); -#7931 = PLANE('',#7932); -#7932 = AXIS2_PLACEMENT_3D('',#7933,#7934,#7935); -#7933 = CARTESIAN_POINT('',(70.,-37.15,128.46153846153)); -#7934 = DIRECTION('',(0.,-1.,0.)); -#7935 = DIRECTION('',(0.,-0.,-1.)); -#7936 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7940)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#7937,#7938,#7939)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#7937 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#7938 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#7939 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#7940 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7937, - 'distance_accuracy_value','confusion accuracy'); -#7941 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7942,#7944); -#7942 = ( REPRESENTATION_RELATIONSHIP('','',#7882,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7943) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#7943 = ITEM_DEFINED_TRANSFORMATION('','',#11,#351); -#7944 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #7945); -#7945 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('85', - 'ConnectorBank_Right_Hole_R10_C02','',#5,#7877,$); -#7946 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7879)); -#7947 = SHAPE_DEFINITION_REPRESENTATION(#7948,#7954); -#7948 = PRODUCT_DEFINITION_SHAPE('','',#7949); -#7949 = PRODUCT_DEFINITION('design','',#7950,#7953); -#7950 = PRODUCT_DEFINITION_FORMATION('','',#7951); -#7951 = PRODUCT('ConnectorBank_Right_Hole_R10_C03', - 'ConnectorBank_Right_Hole_R10_C03','',(#7952)); -#7952 = PRODUCT_CONTEXT('',#2,'mechanical'); -#7953 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#7954 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7955),#8008); -#7955 = MANIFOLD_SOLID_BREP('',#7956); -#7956 = CLOSED_SHELL('',(#7957,#7990,#7999)); -#7957 = ADVANCED_FACE('',(#7958),#7985,.T.); -#7958 = FACE_BOUND('',#7959,.T.); -#7959 = EDGE_LOOP('',(#7960,#7969,#7977,#7984)); -#7960 = ORIENTED_EDGE('',*,*,#7961,.F.); -#7961 = EDGE_CURVE('',#7962,#7962,#7964,.T.); -#7962 = VERTEX_POINT('',#7963); -#7963 = CARTESIAN_POINT('',(75.,-37.85,127.46153846153)); -#7964 = CIRCLE('',#7965,1.); -#7965 = AXIS2_PLACEMENT_3D('',#7966,#7967,#7968); -#7966 = CARTESIAN_POINT('',(75.,-37.85,128.46153846153)); -#7967 = DIRECTION('',(0.,-1.,0.)); -#7968 = DIRECTION('',(0.,-0.,-1.)); -#7969 = ORIENTED_EDGE('',*,*,#7970,.F.); -#7970 = EDGE_CURVE('',#7971,#7962,#7973,.T.); -#7971 = VERTEX_POINT('',#7972); -#7972 = CARTESIAN_POINT('',(75.,-37.15,127.46153846153)); -#7973 = LINE('',#7974,#7975); -#7974 = CARTESIAN_POINT('',(75.,-37.15,127.46153846153)); -#7975 = VECTOR('',#7976,1.); -#7976 = DIRECTION('',(0.,-1.,0.)); -#7977 = ORIENTED_EDGE('',*,*,#7978,.T.); -#7978 = EDGE_CURVE('',#7971,#7971,#7979,.T.); -#7979 = CIRCLE('',#7980,1.); -#7980 = AXIS2_PLACEMENT_3D('',#7981,#7982,#7983); -#7981 = CARTESIAN_POINT('',(75.,-37.15,128.46153846153)); -#7982 = DIRECTION('',(0.,-1.,0.)); -#7983 = DIRECTION('',(0.,-0.,-1.)); -#7984 = ORIENTED_EDGE('',*,*,#7970,.T.); -#7985 = CYLINDRICAL_SURFACE('',#7986,1.); -#7986 = AXIS2_PLACEMENT_3D('',#7987,#7988,#7989); -#7987 = CARTESIAN_POINT('',(75.,-37.15,128.46153846153)); -#7988 = DIRECTION('',(0.,-1.,0.)); -#7989 = DIRECTION('',(0.,-0.,-1.)); -#7990 = ADVANCED_FACE('',(#7991),#7994,.T.); -#7991 = FACE_BOUND('',#7992,.T.); -#7992 = EDGE_LOOP('',(#7993)); -#7993 = ORIENTED_EDGE('',*,*,#7961,.T.); -#7994 = PLANE('',#7995); -#7995 = AXIS2_PLACEMENT_3D('',#7996,#7997,#7998); -#7996 = CARTESIAN_POINT('',(75.,-37.85,128.46153846153)); -#7997 = DIRECTION('',(0.,-1.,0.)); -#7998 = DIRECTION('',(0.,-0.,-1.)); -#7999 = ADVANCED_FACE('',(#8000),#8003,.F.); -#8000 = FACE_BOUND('',#8001,.T.); -#8001 = EDGE_LOOP('',(#8002)); -#8002 = ORIENTED_EDGE('',*,*,#7978,.F.); -#8003 = PLANE('',#8004); -#8004 = AXIS2_PLACEMENT_3D('',#8005,#8006,#8007); -#8005 = CARTESIAN_POINT('',(75.,-37.15,128.46153846153)); -#8006 = DIRECTION('',(0.,-1.,0.)); -#8007 = DIRECTION('',(0.,-0.,-1.)); -#8008 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8012)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8009,#8010,#8011)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8009 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8010 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8011 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8012 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8009, - 'distance_accuracy_value','confusion accuracy'); -#8013 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8014,#8016); -#8014 = ( REPRESENTATION_RELATIONSHIP('','',#7954,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8015) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8015 = ITEM_DEFINED_TRANSFORMATION('','',#11,#355); -#8016 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8017); -#8017 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('86', - 'ConnectorBank_Right_Hole_R10_C03','',#5,#7949,$); -#8018 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7951)); -#8019 = SHAPE_DEFINITION_REPRESENTATION(#8020,#8026); -#8020 = PRODUCT_DEFINITION_SHAPE('','',#8021); -#8021 = PRODUCT_DEFINITION('design','',#8022,#8025); -#8022 = PRODUCT_DEFINITION_FORMATION('','',#8023); -#8023 = PRODUCT('ConnectorBank_Right_Hole_R11_C01', - 'ConnectorBank_Right_Hole_R11_C01','',(#8024)); -#8024 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8025 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8026 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8027),#8080); -#8027 = MANIFOLD_SOLID_BREP('',#8028); -#8028 = CLOSED_SHELL('',(#8029,#8062,#8071)); -#8029 = ADVANCED_FACE('',(#8030),#8057,.T.); -#8030 = FACE_BOUND('',#8031,.T.); -#8031 = EDGE_LOOP('',(#8032,#8041,#8049,#8056)); -#8032 = ORIENTED_EDGE('',*,*,#8033,.F.); -#8033 = EDGE_CURVE('',#8034,#8034,#8036,.T.); -#8034 = VERTEX_POINT('',#8035); -#8035 = CARTESIAN_POINT('',(65.,-37.85,135.30769230769)); -#8036 = CIRCLE('',#8037,1.); -#8037 = AXIS2_PLACEMENT_3D('',#8038,#8039,#8040); -#8038 = CARTESIAN_POINT('',(65.,-37.85,136.30769230769)); -#8039 = DIRECTION('',(0.,-1.,0.)); -#8040 = DIRECTION('',(0.,-0.,-1.)); -#8041 = ORIENTED_EDGE('',*,*,#8042,.F.); -#8042 = EDGE_CURVE('',#8043,#8034,#8045,.T.); -#8043 = VERTEX_POINT('',#8044); -#8044 = CARTESIAN_POINT('',(65.,-37.15,135.30769230769)); -#8045 = LINE('',#8046,#8047); -#8046 = CARTESIAN_POINT('',(65.,-37.15,135.30769230769)); -#8047 = VECTOR('',#8048,1.); -#8048 = DIRECTION('',(0.,-1.,0.)); -#8049 = ORIENTED_EDGE('',*,*,#8050,.T.); -#8050 = EDGE_CURVE('',#8043,#8043,#8051,.T.); -#8051 = CIRCLE('',#8052,1.); -#8052 = AXIS2_PLACEMENT_3D('',#8053,#8054,#8055); -#8053 = CARTESIAN_POINT('',(65.,-37.15,136.30769230769)); -#8054 = DIRECTION('',(0.,-1.,0.)); -#8055 = DIRECTION('',(0.,-0.,-1.)); -#8056 = ORIENTED_EDGE('',*,*,#8042,.T.); -#8057 = CYLINDRICAL_SURFACE('',#8058,1.); -#8058 = AXIS2_PLACEMENT_3D('',#8059,#8060,#8061); -#8059 = CARTESIAN_POINT('',(65.,-37.15,136.30769230769)); -#8060 = DIRECTION('',(0.,-1.,0.)); -#8061 = DIRECTION('',(0.,-0.,-1.)); -#8062 = ADVANCED_FACE('',(#8063),#8066,.T.); -#8063 = FACE_BOUND('',#8064,.T.); -#8064 = EDGE_LOOP('',(#8065)); -#8065 = ORIENTED_EDGE('',*,*,#8033,.T.); -#8066 = PLANE('',#8067); -#8067 = AXIS2_PLACEMENT_3D('',#8068,#8069,#8070); -#8068 = CARTESIAN_POINT('',(65.,-37.85,136.30769230769)); -#8069 = DIRECTION('',(0.,-1.,0.)); -#8070 = DIRECTION('',(0.,-0.,-1.)); -#8071 = ADVANCED_FACE('',(#8072),#8075,.F.); -#8072 = FACE_BOUND('',#8073,.T.); -#8073 = EDGE_LOOP('',(#8074)); -#8074 = ORIENTED_EDGE('',*,*,#8050,.F.); -#8075 = PLANE('',#8076); -#8076 = AXIS2_PLACEMENT_3D('',#8077,#8078,#8079); -#8077 = CARTESIAN_POINT('',(65.,-37.15,136.30769230769)); -#8078 = DIRECTION('',(0.,-1.,0.)); -#8079 = DIRECTION('',(0.,-0.,-1.)); -#8080 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8084)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8081,#8082,#8083)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8081 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8082 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8083 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8084 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8081, - 'distance_accuracy_value','confusion accuracy'); -#8085 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8086,#8088); -#8086 = ( REPRESENTATION_RELATIONSHIP('','',#8026,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8087) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8087 = ITEM_DEFINED_TRANSFORMATION('','',#11,#359); -#8088 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8089); -#8089 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('87', - 'ConnectorBank_Right_Hole_R11_C01','',#5,#8021,$); -#8090 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8023)); -#8091 = SHAPE_DEFINITION_REPRESENTATION(#8092,#8098); -#8092 = PRODUCT_DEFINITION_SHAPE('','',#8093); -#8093 = PRODUCT_DEFINITION('design','',#8094,#8097); -#8094 = PRODUCT_DEFINITION_FORMATION('','',#8095); -#8095 = PRODUCT('ConnectorBank_Right_Screw_R11', - 'ConnectorBank_Right_Screw_R11','',(#8096)); -#8096 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8097 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8098 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8099),#8152); -#8099 = MANIFOLD_SOLID_BREP('',#8100); -#8100 = CLOSED_SHELL('',(#8101,#8134,#8143)); -#8101 = ADVANCED_FACE('',(#8102),#8129,.T.); -#8102 = FACE_BOUND('',#8103,.T.); -#8103 = EDGE_LOOP('',(#8104,#8113,#8121,#8128)); -#8104 = ORIENTED_EDGE('',*,*,#8105,.F.); -#8105 = EDGE_CURVE('',#8106,#8106,#8108,.T.); -#8106 = VERTEX_POINT('',#8107); -#8107 = CARTESIAN_POINT('',(82.6,-37.95,135.75769230769)); -#8108 = CIRCLE('',#8109,0.55); -#8109 = AXIS2_PLACEMENT_3D('',#8110,#8111,#8112); -#8110 = CARTESIAN_POINT('',(82.6,-37.95,136.30769230769)); -#8111 = DIRECTION('',(0.,-1.,0.)); -#8112 = DIRECTION('',(0.,-0.,-1.)); -#8113 = ORIENTED_EDGE('',*,*,#8114,.F.); -#8114 = EDGE_CURVE('',#8115,#8106,#8117,.T.); -#8115 = VERTEX_POINT('',#8116); -#8116 = CARTESIAN_POINT('',(82.6,-37.15,135.75769230769)); -#8117 = LINE('',#8118,#8119); -#8118 = CARTESIAN_POINT('',(82.6,-37.15,135.75769230769)); -#8119 = VECTOR('',#8120,1.); -#8120 = DIRECTION('',(0.,-1.,0.)); -#8121 = ORIENTED_EDGE('',*,*,#8122,.T.); -#8122 = EDGE_CURVE('',#8115,#8115,#8123,.T.); -#8123 = CIRCLE('',#8124,0.55); -#8124 = AXIS2_PLACEMENT_3D('',#8125,#8126,#8127); -#8125 = CARTESIAN_POINT('',(82.6,-37.15,136.30769230769)); -#8126 = DIRECTION('',(0.,-1.,0.)); -#8127 = DIRECTION('',(0.,-0.,-1.)); -#8128 = ORIENTED_EDGE('',*,*,#8114,.T.); -#8129 = CYLINDRICAL_SURFACE('',#8130,0.55); -#8130 = AXIS2_PLACEMENT_3D('',#8131,#8132,#8133); -#8131 = CARTESIAN_POINT('',(82.6,-37.15,136.30769230769)); -#8132 = DIRECTION('',(0.,-1.,0.)); -#8133 = DIRECTION('',(0.,-0.,-1.)); -#8134 = ADVANCED_FACE('',(#8135),#8138,.T.); -#8135 = FACE_BOUND('',#8136,.T.); -#8136 = EDGE_LOOP('',(#8137)); -#8137 = ORIENTED_EDGE('',*,*,#8105,.T.); -#8138 = PLANE('',#8139); -#8139 = AXIS2_PLACEMENT_3D('',#8140,#8141,#8142); -#8140 = CARTESIAN_POINT('',(82.6,-37.95,136.30769230769)); -#8141 = DIRECTION('',(0.,-1.,0.)); -#8142 = DIRECTION('',(0.,-0.,-1.)); -#8143 = ADVANCED_FACE('',(#8144),#8147,.F.); -#8144 = FACE_BOUND('',#8145,.T.); -#8145 = EDGE_LOOP('',(#8146)); -#8146 = ORIENTED_EDGE('',*,*,#8122,.F.); -#8147 = PLANE('',#8148); -#8148 = AXIS2_PLACEMENT_3D('',#8149,#8150,#8151); -#8149 = CARTESIAN_POINT('',(82.6,-37.15,136.30769230769)); -#8150 = DIRECTION('',(0.,-1.,0.)); -#8151 = DIRECTION('',(0.,-0.,-1.)); -#8152 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8156)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8153,#8154,#8155)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8153 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8154 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8155 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8156 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8153, - 'distance_accuracy_value','confusion accuracy'); -#8157 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8158,#8160); -#8158 = ( REPRESENTATION_RELATIONSHIP('','',#8098,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8159) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8159 = ITEM_DEFINED_TRANSFORMATION('','',#11,#363); -#8160 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8161); -#8161 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('88', - 'ConnectorBank_Right_Screw_R11','',#5,#8093,$); -#8162 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8095)); -#8163 = SHAPE_DEFINITION_REPRESENTATION(#8164,#8170); -#8164 = PRODUCT_DEFINITION_SHAPE('','',#8165); -#8165 = PRODUCT_DEFINITION('design','',#8166,#8169); -#8166 = PRODUCT_DEFINITION_FORMATION('','',#8167); -#8167 = PRODUCT('ConnectorBank_Right_Hole_R11_C02', - 'ConnectorBank_Right_Hole_R11_C02','',(#8168)); -#8168 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8169 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8170 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8171),#8224); -#8171 = MANIFOLD_SOLID_BREP('',#8172); -#8172 = CLOSED_SHELL('',(#8173,#8206,#8215)); -#8173 = ADVANCED_FACE('',(#8174),#8201,.T.); -#8174 = FACE_BOUND('',#8175,.T.); -#8175 = EDGE_LOOP('',(#8176,#8185,#8193,#8200)); -#8176 = ORIENTED_EDGE('',*,*,#8177,.F.); -#8177 = EDGE_CURVE('',#8178,#8178,#8180,.T.); -#8178 = VERTEX_POINT('',#8179); -#8179 = CARTESIAN_POINT('',(70.,-37.85,135.30769230769)); -#8180 = CIRCLE('',#8181,1.); -#8181 = AXIS2_PLACEMENT_3D('',#8182,#8183,#8184); -#8182 = CARTESIAN_POINT('',(70.,-37.85,136.30769230769)); -#8183 = DIRECTION('',(0.,-1.,0.)); -#8184 = DIRECTION('',(0.,-0.,-1.)); -#8185 = ORIENTED_EDGE('',*,*,#8186,.F.); -#8186 = EDGE_CURVE('',#8187,#8178,#8189,.T.); -#8187 = VERTEX_POINT('',#8188); -#8188 = CARTESIAN_POINT('',(70.,-37.15,135.30769230769)); -#8189 = LINE('',#8190,#8191); -#8190 = CARTESIAN_POINT('',(70.,-37.15,135.30769230769)); -#8191 = VECTOR('',#8192,1.); -#8192 = DIRECTION('',(0.,-1.,0.)); -#8193 = ORIENTED_EDGE('',*,*,#8194,.T.); -#8194 = EDGE_CURVE('',#8187,#8187,#8195,.T.); -#8195 = CIRCLE('',#8196,1.); -#8196 = AXIS2_PLACEMENT_3D('',#8197,#8198,#8199); -#8197 = CARTESIAN_POINT('',(70.,-37.15,136.30769230769)); -#8198 = DIRECTION('',(0.,-1.,0.)); -#8199 = DIRECTION('',(0.,-0.,-1.)); -#8200 = ORIENTED_EDGE('',*,*,#8186,.T.); -#8201 = CYLINDRICAL_SURFACE('',#8202,1.); -#8202 = AXIS2_PLACEMENT_3D('',#8203,#8204,#8205); -#8203 = CARTESIAN_POINT('',(70.,-37.15,136.30769230769)); -#8204 = DIRECTION('',(0.,-1.,0.)); -#8205 = DIRECTION('',(0.,-0.,-1.)); -#8206 = ADVANCED_FACE('',(#8207),#8210,.T.); -#8207 = FACE_BOUND('',#8208,.T.); -#8208 = EDGE_LOOP('',(#8209)); -#8209 = ORIENTED_EDGE('',*,*,#8177,.T.); -#8210 = PLANE('',#8211); -#8211 = AXIS2_PLACEMENT_3D('',#8212,#8213,#8214); -#8212 = CARTESIAN_POINT('',(70.,-37.85,136.30769230769)); -#8213 = DIRECTION('',(0.,-1.,0.)); -#8214 = DIRECTION('',(0.,-0.,-1.)); -#8215 = ADVANCED_FACE('',(#8216),#8219,.F.); -#8216 = FACE_BOUND('',#8217,.T.); -#8217 = EDGE_LOOP('',(#8218)); -#8218 = ORIENTED_EDGE('',*,*,#8194,.F.); -#8219 = PLANE('',#8220); -#8220 = AXIS2_PLACEMENT_3D('',#8221,#8222,#8223); -#8221 = CARTESIAN_POINT('',(70.,-37.15,136.30769230769)); -#8222 = DIRECTION('',(0.,-1.,0.)); -#8223 = DIRECTION('',(0.,-0.,-1.)); -#8224 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8228)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8225,#8226,#8227)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8225 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8226 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8227 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8228 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8225, - 'distance_accuracy_value','confusion accuracy'); -#8229 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8230,#8232); -#8230 = ( REPRESENTATION_RELATIONSHIP('','',#8170,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8231) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8231 = ITEM_DEFINED_TRANSFORMATION('','',#11,#367); -#8232 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8233); -#8233 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('89', - 'ConnectorBank_Right_Hole_R11_C02','',#5,#8165,$); -#8234 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8167)); -#8235 = SHAPE_DEFINITION_REPRESENTATION(#8236,#8242); -#8236 = PRODUCT_DEFINITION_SHAPE('','',#8237); -#8237 = PRODUCT_DEFINITION('design','',#8238,#8241); -#8238 = PRODUCT_DEFINITION_FORMATION('','',#8239); -#8239 = PRODUCT('ConnectorBank_Right_Hole_R11_C03', - 'ConnectorBank_Right_Hole_R11_C03','',(#8240)); -#8240 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8241 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8242 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8243),#8296); -#8243 = MANIFOLD_SOLID_BREP('',#8244); -#8244 = CLOSED_SHELL('',(#8245,#8278,#8287)); -#8245 = ADVANCED_FACE('',(#8246),#8273,.T.); -#8246 = FACE_BOUND('',#8247,.T.); -#8247 = EDGE_LOOP('',(#8248,#8257,#8265,#8272)); -#8248 = ORIENTED_EDGE('',*,*,#8249,.F.); -#8249 = EDGE_CURVE('',#8250,#8250,#8252,.T.); -#8250 = VERTEX_POINT('',#8251); -#8251 = CARTESIAN_POINT('',(75.,-37.85,135.30769230769)); -#8252 = CIRCLE('',#8253,1.); -#8253 = AXIS2_PLACEMENT_3D('',#8254,#8255,#8256); -#8254 = CARTESIAN_POINT('',(75.,-37.85,136.30769230769)); -#8255 = DIRECTION('',(0.,-1.,0.)); -#8256 = DIRECTION('',(0.,-0.,-1.)); -#8257 = ORIENTED_EDGE('',*,*,#8258,.F.); -#8258 = EDGE_CURVE('',#8259,#8250,#8261,.T.); -#8259 = VERTEX_POINT('',#8260); -#8260 = CARTESIAN_POINT('',(75.,-37.15,135.30769230769)); -#8261 = LINE('',#8262,#8263); -#8262 = CARTESIAN_POINT('',(75.,-37.15,135.30769230769)); -#8263 = VECTOR('',#8264,1.); -#8264 = DIRECTION('',(0.,-1.,0.)); -#8265 = ORIENTED_EDGE('',*,*,#8266,.T.); -#8266 = EDGE_CURVE('',#8259,#8259,#8267,.T.); -#8267 = CIRCLE('',#8268,1.); -#8268 = AXIS2_PLACEMENT_3D('',#8269,#8270,#8271); -#8269 = CARTESIAN_POINT('',(75.,-37.15,136.30769230769)); -#8270 = DIRECTION('',(0.,-1.,0.)); -#8271 = DIRECTION('',(0.,-0.,-1.)); -#8272 = ORIENTED_EDGE('',*,*,#8258,.T.); -#8273 = CYLINDRICAL_SURFACE('',#8274,1.); -#8274 = AXIS2_PLACEMENT_3D('',#8275,#8276,#8277); -#8275 = CARTESIAN_POINT('',(75.,-37.15,136.30769230769)); -#8276 = DIRECTION('',(0.,-1.,0.)); -#8277 = DIRECTION('',(0.,-0.,-1.)); -#8278 = ADVANCED_FACE('',(#8279),#8282,.T.); -#8279 = FACE_BOUND('',#8280,.T.); -#8280 = EDGE_LOOP('',(#8281)); -#8281 = ORIENTED_EDGE('',*,*,#8249,.T.); -#8282 = PLANE('',#8283); -#8283 = AXIS2_PLACEMENT_3D('',#8284,#8285,#8286); -#8284 = CARTESIAN_POINT('',(75.,-37.85,136.30769230769)); -#8285 = DIRECTION('',(0.,-1.,0.)); -#8286 = DIRECTION('',(0.,-0.,-1.)); -#8287 = ADVANCED_FACE('',(#8288),#8291,.F.); -#8288 = FACE_BOUND('',#8289,.T.); -#8289 = EDGE_LOOP('',(#8290)); -#8290 = ORIENTED_EDGE('',*,*,#8266,.F.); -#8291 = PLANE('',#8292); -#8292 = AXIS2_PLACEMENT_3D('',#8293,#8294,#8295); -#8293 = CARTESIAN_POINT('',(75.,-37.15,136.30769230769)); -#8294 = DIRECTION('',(0.,-1.,0.)); -#8295 = DIRECTION('',(0.,-0.,-1.)); -#8296 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8300)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8297,#8298,#8299)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8297 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8298 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8299 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8300 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8297, - 'distance_accuracy_value','confusion accuracy'); -#8301 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8302,#8304); -#8302 = ( REPRESENTATION_RELATIONSHIP('','',#8242,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8303) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8303 = ITEM_DEFINED_TRANSFORMATION('','',#11,#371); -#8304 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8305); -#8305 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('90', - 'ConnectorBank_Right_Hole_R11_C03','',#5,#8237,$); -#8306 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8239)); -#8307 = SHAPE_DEFINITION_REPRESENTATION(#8308,#8314); -#8308 = PRODUCT_DEFINITION_SHAPE('','',#8309); -#8309 = PRODUCT_DEFINITION('design','',#8310,#8313); -#8310 = PRODUCT_DEFINITION_FORMATION('','',#8311); -#8311 = PRODUCT('ConnectorBank_Right_Hole_R12_C01', - 'ConnectorBank_Right_Hole_R12_C01','',(#8312)); -#8312 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8313 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8314 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8315),#8368); -#8315 = MANIFOLD_SOLID_BREP('',#8316); -#8316 = CLOSED_SHELL('',(#8317,#8350,#8359)); -#8317 = ADVANCED_FACE('',(#8318),#8345,.T.); -#8318 = FACE_BOUND('',#8319,.T.); -#8319 = EDGE_LOOP('',(#8320,#8329,#8337,#8344)); -#8320 = ORIENTED_EDGE('',*,*,#8321,.F.); -#8321 = EDGE_CURVE('',#8322,#8322,#8324,.T.); -#8322 = VERTEX_POINT('',#8323); -#8323 = CARTESIAN_POINT('',(65.,-37.85,143.15384615384)); -#8324 = CIRCLE('',#8325,1.); -#8325 = AXIS2_PLACEMENT_3D('',#8326,#8327,#8328); -#8326 = CARTESIAN_POINT('',(65.,-37.85,144.15384615384)); -#8327 = DIRECTION('',(0.,-1.,0.)); -#8328 = DIRECTION('',(0.,-0.,-1.)); -#8329 = ORIENTED_EDGE('',*,*,#8330,.F.); -#8330 = EDGE_CURVE('',#8331,#8322,#8333,.T.); -#8331 = VERTEX_POINT('',#8332); -#8332 = CARTESIAN_POINT('',(65.,-37.15,143.15384615384)); -#8333 = LINE('',#8334,#8335); -#8334 = CARTESIAN_POINT('',(65.,-37.15,143.15384615384)); -#8335 = VECTOR('',#8336,1.); -#8336 = DIRECTION('',(0.,-1.,0.)); -#8337 = ORIENTED_EDGE('',*,*,#8338,.T.); -#8338 = EDGE_CURVE('',#8331,#8331,#8339,.T.); -#8339 = CIRCLE('',#8340,1.); -#8340 = AXIS2_PLACEMENT_3D('',#8341,#8342,#8343); -#8341 = CARTESIAN_POINT('',(65.,-37.15,144.15384615384)); -#8342 = DIRECTION('',(0.,-1.,0.)); -#8343 = DIRECTION('',(0.,-0.,-1.)); -#8344 = ORIENTED_EDGE('',*,*,#8330,.T.); -#8345 = CYLINDRICAL_SURFACE('',#8346,1.); -#8346 = AXIS2_PLACEMENT_3D('',#8347,#8348,#8349); -#8347 = CARTESIAN_POINT('',(65.,-37.15,144.15384615384)); -#8348 = DIRECTION('',(0.,-1.,0.)); -#8349 = DIRECTION('',(0.,-0.,-1.)); -#8350 = ADVANCED_FACE('',(#8351),#8354,.T.); -#8351 = FACE_BOUND('',#8352,.T.); -#8352 = EDGE_LOOP('',(#8353)); -#8353 = ORIENTED_EDGE('',*,*,#8321,.T.); -#8354 = PLANE('',#8355); -#8355 = AXIS2_PLACEMENT_3D('',#8356,#8357,#8358); -#8356 = CARTESIAN_POINT('',(65.,-37.85,144.15384615384)); -#8357 = DIRECTION('',(0.,-1.,0.)); -#8358 = DIRECTION('',(0.,-0.,-1.)); -#8359 = ADVANCED_FACE('',(#8360),#8363,.F.); -#8360 = FACE_BOUND('',#8361,.T.); -#8361 = EDGE_LOOP('',(#8362)); -#8362 = ORIENTED_EDGE('',*,*,#8338,.F.); -#8363 = PLANE('',#8364); -#8364 = AXIS2_PLACEMENT_3D('',#8365,#8366,#8367); -#8365 = CARTESIAN_POINT('',(65.,-37.15,144.15384615384)); -#8366 = DIRECTION('',(0.,-1.,0.)); -#8367 = DIRECTION('',(0.,-0.,-1.)); -#8368 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8372)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8369,#8370,#8371)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8369 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8370 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8371 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8372 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8369, - 'distance_accuracy_value','confusion accuracy'); -#8373 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8374,#8376); -#8374 = ( REPRESENTATION_RELATIONSHIP('','',#8314,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8375) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8375 = ITEM_DEFINED_TRANSFORMATION('','',#11,#375); -#8376 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8377); -#8377 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('91', - 'ConnectorBank_Right_Hole_R12_C01','',#5,#8309,$); -#8378 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8311)); -#8379 = SHAPE_DEFINITION_REPRESENTATION(#8380,#8386); -#8380 = PRODUCT_DEFINITION_SHAPE('','',#8381); -#8381 = PRODUCT_DEFINITION('design','',#8382,#8385); -#8382 = PRODUCT_DEFINITION_FORMATION('','',#8383); -#8383 = PRODUCT('ConnectorBank_Right_Screw_R12', - 'ConnectorBank_Right_Screw_R12','',(#8384)); -#8384 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8385 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8386 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8387),#8440); -#8387 = MANIFOLD_SOLID_BREP('',#8388); -#8388 = CLOSED_SHELL('',(#8389,#8422,#8431)); -#8389 = ADVANCED_FACE('',(#8390),#8417,.T.); -#8390 = FACE_BOUND('',#8391,.T.); -#8391 = EDGE_LOOP('',(#8392,#8401,#8409,#8416)); -#8392 = ORIENTED_EDGE('',*,*,#8393,.F.); -#8393 = EDGE_CURVE('',#8394,#8394,#8396,.T.); -#8394 = VERTEX_POINT('',#8395); -#8395 = CARTESIAN_POINT('',(82.6,-37.95,143.60384615384)); -#8396 = CIRCLE('',#8397,0.55); -#8397 = AXIS2_PLACEMENT_3D('',#8398,#8399,#8400); -#8398 = CARTESIAN_POINT('',(82.6,-37.95,144.15384615384)); -#8399 = DIRECTION('',(0.,-1.,0.)); -#8400 = DIRECTION('',(0.,-0.,-1.)); -#8401 = ORIENTED_EDGE('',*,*,#8402,.F.); -#8402 = EDGE_CURVE('',#8403,#8394,#8405,.T.); -#8403 = VERTEX_POINT('',#8404); -#8404 = CARTESIAN_POINT('',(82.6,-37.15,143.60384615384)); -#8405 = LINE('',#8406,#8407); -#8406 = CARTESIAN_POINT('',(82.6,-37.15,143.60384615384)); -#8407 = VECTOR('',#8408,1.); -#8408 = DIRECTION('',(0.,-1.,0.)); -#8409 = ORIENTED_EDGE('',*,*,#8410,.T.); -#8410 = EDGE_CURVE('',#8403,#8403,#8411,.T.); -#8411 = CIRCLE('',#8412,0.55); -#8412 = AXIS2_PLACEMENT_3D('',#8413,#8414,#8415); -#8413 = CARTESIAN_POINT('',(82.6,-37.15,144.15384615384)); -#8414 = DIRECTION('',(0.,-1.,0.)); -#8415 = DIRECTION('',(0.,-0.,-1.)); -#8416 = ORIENTED_EDGE('',*,*,#8402,.T.); -#8417 = CYLINDRICAL_SURFACE('',#8418,0.55); -#8418 = AXIS2_PLACEMENT_3D('',#8419,#8420,#8421); -#8419 = CARTESIAN_POINT('',(82.6,-37.15,144.15384615384)); -#8420 = DIRECTION('',(0.,-1.,0.)); -#8421 = DIRECTION('',(0.,-0.,-1.)); -#8422 = ADVANCED_FACE('',(#8423),#8426,.T.); -#8423 = FACE_BOUND('',#8424,.T.); -#8424 = EDGE_LOOP('',(#8425)); -#8425 = ORIENTED_EDGE('',*,*,#8393,.T.); -#8426 = PLANE('',#8427); -#8427 = AXIS2_PLACEMENT_3D('',#8428,#8429,#8430); -#8428 = CARTESIAN_POINT('',(82.6,-37.95,144.15384615384)); -#8429 = DIRECTION('',(0.,-1.,0.)); -#8430 = DIRECTION('',(0.,-0.,-1.)); -#8431 = ADVANCED_FACE('',(#8432),#8435,.F.); -#8432 = FACE_BOUND('',#8433,.T.); -#8433 = EDGE_LOOP('',(#8434)); -#8434 = ORIENTED_EDGE('',*,*,#8410,.F.); -#8435 = PLANE('',#8436); -#8436 = AXIS2_PLACEMENT_3D('',#8437,#8438,#8439); -#8437 = CARTESIAN_POINT('',(82.6,-37.15,144.15384615384)); -#8438 = DIRECTION('',(0.,-1.,0.)); -#8439 = DIRECTION('',(0.,-0.,-1.)); -#8440 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8444)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8441,#8442,#8443)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8441 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8442 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8443 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8444 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8441, - 'distance_accuracy_value','confusion accuracy'); -#8445 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8446,#8448); -#8446 = ( REPRESENTATION_RELATIONSHIP('','',#8386,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8447) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8447 = ITEM_DEFINED_TRANSFORMATION('','',#11,#379); -#8448 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8449); -#8449 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('92', - 'ConnectorBank_Right_Screw_R12','',#5,#8381,$); -#8450 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8383)); -#8451 = SHAPE_DEFINITION_REPRESENTATION(#8452,#8458); -#8452 = PRODUCT_DEFINITION_SHAPE('','',#8453); -#8453 = PRODUCT_DEFINITION('design','',#8454,#8457); -#8454 = PRODUCT_DEFINITION_FORMATION('','',#8455); -#8455 = PRODUCT('ConnectorBank_Right_Hole_R12_C02', - 'ConnectorBank_Right_Hole_R12_C02','',(#8456)); -#8456 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8457 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8458 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8459),#8512); -#8459 = MANIFOLD_SOLID_BREP('',#8460); -#8460 = CLOSED_SHELL('',(#8461,#8494,#8503)); -#8461 = ADVANCED_FACE('',(#8462),#8489,.T.); -#8462 = FACE_BOUND('',#8463,.T.); -#8463 = EDGE_LOOP('',(#8464,#8473,#8481,#8488)); -#8464 = ORIENTED_EDGE('',*,*,#8465,.F.); -#8465 = EDGE_CURVE('',#8466,#8466,#8468,.T.); -#8466 = VERTEX_POINT('',#8467); -#8467 = CARTESIAN_POINT('',(70.,-37.85,143.15384615384)); -#8468 = CIRCLE('',#8469,1.); -#8469 = AXIS2_PLACEMENT_3D('',#8470,#8471,#8472); -#8470 = CARTESIAN_POINT('',(70.,-37.85,144.15384615384)); -#8471 = DIRECTION('',(0.,-1.,0.)); -#8472 = DIRECTION('',(0.,-0.,-1.)); -#8473 = ORIENTED_EDGE('',*,*,#8474,.F.); -#8474 = EDGE_CURVE('',#8475,#8466,#8477,.T.); -#8475 = VERTEX_POINT('',#8476); -#8476 = CARTESIAN_POINT('',(70.,-37.15,143.15384615384)); -#8477 = LINE('',#8478,#8479); -#8478 = CARTESIAN_POINT('',(70.,-37.15,143.15384615384)); -#8479 = VECTOR('',#8480,1.); -#8480 = DIRECTION('',(0.,-1.,0.)); -#8481 = ORIENTED_EDGE('',*,*,#8482,.T.); -#8482 = EDGE_CURVE('',#8475,#8475,#8483,.T.); -#8483 = CIRCLE('',#8484,1.); -#8484 = AXIS2_PLACEMENT_3D('',#8485,#8486,#8487); -#8485 = CARTESIAN_POINT('',(70.,-37.15,144.15384615384)); -#8486 = DIRECTION('',(0.,-1.,0.)); -#8487 = DIRECTION('',(0.,-0.,-1.)); -#8488 = ORIENTED_EDGE('',*,*,#8474,.T.); -#8489 = CYLINDRICAL_SURFACE('',#8490,1.); -#8490 = AXIS2_PLACEMENT_3D('',#8491,#8492,#8493); -#8491 = CARTESIAN_POINT('',(70.,-37.15,144.15384615384)); -#8492 = DIRECTION('',(0.,-1.,0.)); -#8493 = DIRECTION('',(0.,-0.,-1.)); -#8494 = ADVANCED_FACE('',(#8495),#8498,.T.); -#8495 = FACE_BOUND('',#8496,.T.); -#8496 = EDGE_LOOP('',(#8497)); -#8497 = ORIENTED_EDGE('',*,*,#8465,.T.); -#8498 = PLANE('',#8499); -#8499 = AXIS2_PLACEMENT_3D('',#8500,#8501,#8502); -#8500 = CARTESIAN_POINT('',(70.,-37.85,144.15384615384)); -#8501 = DIRECTION('',(0.,-1.,0.)); -#8502 = DIRECTION('',(0.,-0.,-1.)); -#8503 = ADVANCED_FACE('',(#8504),#8507,.F.); -#8504 = FACE_BOUND('',#8505,.T.); -#8505 = EDGE_LOOP('',(#8506)); -#8506 = ORIENTED_EDGE('',*,*,#8482,.F.); -#8507 = PLANE('',#8508); -#8508 = AXIS2_PLACEMENT_3D('',#8509,#8510,#8511); -#8509 = CARTESIAN_POINT('',(70.,-37.15,144.15384615384)); -#8510 = DIRECTION('',(0.,-1.,0.)); -#8511 = DIRECTION('',(0.,-0.,-1.)); -#8512 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8516)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8513,#8514,#8515)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8513 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8514 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8515 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8516 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8513, - 'distance_accuracy_value','confusion accuracy'); -#8517 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8518,#8520); -#8518 = ( REPRESENTATION_RELATIONSHIP('','',#8458,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8519) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8519 = ITEM_DEFINED_TRANSFORMATION('','',#11,#383); -#8520 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8521); -#8521 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('93', - 'ConnectorBank_Right_Hole_R12_C02','',#5,#8453,$); -#8522 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8455)); -#8523 = SHAPE_DEFINITION_REPRESENTATION(#8524,#8530); -#8524 = PRODUCT_DEFINITION_SHAPE('','',#8525); -#8525 = PRODUCT_DEFINITION('design','',#8526,#8529); -#8526 = PRODUCT_DEFINITION_FORMATION('','',#8527); -#8527 = PRODUCT('ConnectorBank_Right_Hole_R12_C03', - 'ConnectorBank_Right_Hole_R12_C03','',(#8528)); -#8528 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8529 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8530 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8531),#8584); -#8531 = MANIFOLD_SOLID_BREP('',#8532); -#8532 = CLOSED_SHELL('',(#8533,#8566,#8575)); -#8533 = ADVANCED_FACE('',(#8534),#8561,.T.); -#8534 = FACE_BOUND('',#8535,.T.); -#8535 = EDGE_LOOP('',(#8536,#8545,#8553,#8560)); -#8536 = ORIENTED_EDGE('',*,*,#8537,.F.); -#8537 = EDGE_CURVE('',#8538,#8538,#8540,.T.); -#8538 = VERTEX_POINT('',#8539); -#8539 = CARTESIAN_POINT('',(75.,-37.85,143.15384615384)); -#8540 = CIRCLE('',#8541,1.); -#8541 = AXIS2_PLACEMENT_3D('',#8542,#8543,#8544); -#8542 = CARTESIAN_POINT('',(75.,-37.85,144.15384615384)); -#8543 = DIRECTION('',(0.,-1.,0.)); -#8544 = DIRECTION('',(0.,-0.,-1.)); -#8545 = ORIENTED_EDGE('',*,*,#8546,.F.); -#8546 = EDGE_CURVE('',#8547,#8538,#8549,.T.); -#8547 = VERTEX_POINT('',#8548); -#8548 = CARTESIAN_POINT('',(75.,-37.15,143.15384615384)); -#8549 = LINE('',#8550,#8551); -#8550 = CARTESIAN_POINT('',(75.,-37.15,143.15384615384)); -#8551 = VECTOR('',#8552,1.); -#8552 = DIRECTION('',(0.,-1.,0.)); -#8553 = ORIENTED_EDGE('',*,*,#8554,.T.); -#8554 = EDGE_CURVE('',#8547,#8547,#8555,.T.); -#8555 = CIRCLE('',#8556,1.); -#8556 = AXIS2_PLACEMENT_3D('',#8557,#8558,#8559); -#8557 = CARTESIAN_POINT('',(75.,-37.15,144.15384615384)); -#8558 = DIRECTION('',(0.,-1.,0.)); -#8559 = DIRECTION('',(0.,-0.,-1.)); -#8560 = ORIENTED_EDGE('',*,*,#8546,.T.); -#8561 = CYLINDRICAL_SURFACE('',#8562,1.); -#8562 = AXIS2_PLACEMENT_3D('',#8563,#8564,#8565); -#8563 = CARTESIAN_POINT('',(75.,-37.15,144.15384615384)); -#8564 = DIRECTION('',(0.,-1.,0.)); -#8565 = DIRECTION('',(0.,-0.,-1.)); -#8566 = ADVANCED_FACE('',(#8567),#8570,.T.); -#8567 = FACE_BOUND('',#8568,.T.); -#8568 = EDGE_LOOP('',(#8569)); -#8569 = ORIENTED_EDGE('',*,*,#8537,.T.); -#8570 = PLANE('',#8571); -#8571 = AXIS2_PLACEMENT_3D('',#8572,#8573,#8574); -#8572 = CARTESIAN_POINT('',(75.,-37.85,144.15384615384)); -#8573 = DIRECTION('',(0.,-1.,0.)); -#8574 = DIRECTION('',(0.,-0.,-1.)); -#8575 = ADVANCED_FACE('',(#8576),#8579,.F.); -#8576 = FACE_BOUND('',#8577,.T.); -#8577 = EDGE_LOOP('',(#8578)); -#8578 = ORIENTED_EDGE('',*,*,#8554,.F.); -#8579 = PLANE('',#8580); -#8580 = AXIS2_PLACEMENT_3D('',#8581,#8582,#8583); -#8581 = CARTESIAN_POINT('',(75.,-37.15,144.15384615384)); -#8582 = DIRECTION('',(0.,-1.,0.)); -#8583 = DIRECTION('',(0.,-0.,-1.)); -#8584 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8588)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8585,#8586,#8587)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8585 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8586 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8587 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8588 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8585, - 'distance_accuracy_value','confusion accuracy'); -#8589 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8590,#8592); -#8590 = ( REPRESENTATION_RELATIONSHIP('','',#8530,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8591) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8591 = ITEM_DEFINED_TRANSFORMATION('','',#11,#387); -#8592 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8593); -#8593 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('94', - 'ConnectorBank_Right_Hole_R12_C03','',#5,#8525,$); -#8594 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8527)); -#8595 = SHAPE_DEFINITION_REPRESENTATION(#8596,#8602); -#8596 = PRODUCT_DEFINITION_SHAPE('','',#8597); -#8597 = PRODUCT_DEFINITION('design','',#8598,#8601); -#8598 = PRODUCT_DEFINITION_FORMATION('','',#8599); -#8599 = PRODUCT('ConnectorBank_LeftTopCap','ConnectorBank_LeftTopCap','' - ,(#8600)); -#8600 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8601 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8602 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8603),#8753); -#8603 = MANIFOLD_SOLID_BREP('',#8604); -#8604 = CLOSED_SHELL('',(#8605,#8645,#8685,#8707,#8729,#8741)); -#8605 = ADVANCED_FACE('',(#8606),#8640,.F.); -#8606 = FACE_BOUND('',#8607,.F.); -#8607 = EDGE_LOOP('',(#8608,#8618,#8626,#8634)); -#8608 = ORIENTED_EDGE('',*,*,#8609,.F.); -#8609 = EDGE_CURVE('',#8610,#8612,#8614,.T.); -#8610 = VERTEX_POINT('',#8611); -#8611 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8612 = VERTEX_POINT('',#8613); -#8613 = CARTESIAN_POINT('',(35.,-36.2,166.)); -#8614 = LINE('',#8615,#8616); -#8615 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8616 = VECTOR('',#8617,1.); -#8617 = DIRECTION('',(0.,0.,1.)); -#8618 = ORIENTED_EDGE('',*,*,#8619,.T.); -#8619 = EDGE_CURVE('',#8610,#8620,#8622,.T.); -#8620 = VERTEX_POINT('',#8621); -#8621 = CARTESIAN_POINT('',(35.,-32.,154.)); -#8622 = LINE('',#8623,#8624); -#8623 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8624 = VECTOR('',#8625,1.); -#8625 = DIRECTION('',(-0.,1.,0.)); -#8626 = ORIENTED_EDGE('',*,*,#8627,.T.); -#8627 = EDGE_CURVE('',#8620,#8628,#8630,.T.); -#8628 = VERTEX_POINT('',#8629); -#8629 = CARTESIAN_POINT('',(35.,-32.,166.)); -#8630 = LINE('',#8631,#8632); -#8631 = CARTESIAN_POINT('',(35.,-32.,154.)); -#8632 = VECTOR('',#8633,1.); -#8633 = DIRECTION('',(0.,0.,1.)); -#8634 = ORIENTED_EDGE('',*,*,#8635,.F.); -#8635 = EDGE_CURVE('',#8612,#8628,#8636,.T.); -#8636 = LINE('',#8637,#8638); -#8637 = CARTESIAN_POINT('',(35.,-36.2,166.)); -#8638 = VECTOR('',#8639,1.); -#8639 = DIRECTION('',(-0.,1.,0.)); -#8640 = PLANE('',#8641); -#8641 = AXIS2_PLACEMENT_3D('',#8642,#8643,#8644); -#8642 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8643 = DIRECTION('',(1.,0.,-0.)); -#8644 = DIRECTION('',(0.,0.,1.)); -#8645 = ADVANCED_FACE('',(#8646),#8680,.T.); -#8646 = FACE_BOUND('',#8647,.T.); -#8647 = EDGE_LOOP('',(#8648,#8658,#8666,#8674)); -#8648 = ORIENTED_EDGE('',*,*,#8649,.F.); -#8649 = EDGE_CURVE('',#8650,#8652,#8654,.T.); -#8650 = VERTEX_POINT('',#8651); -#8651 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#8652 = VERTEX_POINT('',#8653); -#8653 = CARTESIAN_POINT('',(53.,-36.2,166.)); -#8654 = LINE('',#8655,#8656); -#8655 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#8656 = VECTOR('',#8657,1.); -#8657 = DIRECTION('',(0.,0.,1.)); -#8658 = ORIENTED_EDGE('',*,*,#8659,.T.); -#8659 = EDGE_CURVE('',#8650,#8660,#8662,.T.); -#8660 = VERTEX_POINT('',#8661); -#8661 = CARTESIAN_POINT('',(53.,-32.,154.)); -#8662 = LINE('',#8663,#8664); -#8663 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#8664 = VECTOR('',#8665,1.); -#8665 = DIRECTION('',(-0.,1.,0.)); -#8666 = ORIENTED_EDGE('',*,*,#8667,.T.); -#8667 = EDGE_CURVE('',#8660,#8668,#8670,.T.); -#8668 = VERTEX_POINT('',#8669); -#8669 = CARTESIAN_POINT('',(53.,-32.,166.)); -#8670 = LINE('',#8671,#8672); -#8671 = CARTESIAN_POINT('',(53.,-32.,154.)); -#8672 = VECTOR('',#8673,1.); -#8673 = DIRECTION('',(0.,0.,1.)); -#8674 = ORIENTED_EDGE('',*,*,#8675,.F.); -#8675 = EDGE_CURVE('',#8652,#8668,#8676,.T.); -#8676 = LINE('',#8677,#8678); -#8677 = CARTESIAN_POINT('',(53.,-36.2,166.)); -#8678 = VECTOR('',#8679,1.); -#8679 = DIRECTION('',(-0.,1.,0.)); -#8680 = PLANE('',#8681); -#8681 = AXIS2_PLACEMENT_3D('',#8682,#8683,#8684); -#8682 = CARTESIAN_POINT('',(53.,-36.2,154.)); -#8683 = DIRECTION('',(1.,0.,-0.)); -#8684 = DIRECTION('',(0.,0.,1.)); -#8685 = ADVANCED_FACE('',(#8686),#8702,.F.); -#8686 = FACE_BOUND('',#8687,.F.); -#8687 = EDGE_LOOP('',(#8688,#8694,#8695,#8701)); -#8688 = ORIENTED_EDGE('',*,*,#8689,.F.); -#8689 = EDGE_CURVE('',#8610,#8650,#8690,.T.); -#8690 = LINE('',#8691,#8692); -#8691 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8692 = VECTOR('',#8693,1.); -#8693 = DIRECTION('',(1.,0.,-0.)); -#8694 = ORIENTED_EDGE('',*,*,#8609,.T.); -#8695 = ORIENTED_EDGE('',*,*,#8696,.T.); -#8696 = EDGE_CURVE('',#8612,#8652,#8697,.T.); -#8697 = LINE('',#8698,#8699); -#8698 = CARTESIAN_POINT('',(35.,-36.2,166.)); -#8699 = VECTOR('',#8700,1.); -#8700 = DIRECTION('',(1.,0.,-0.)); -#8701 = ORIENTED_EDGE('',*,*,#8649,.F.); -#8702 = PLANE('',#8703); -#8703 = AXIS2_PLACEMENT_3D('',#8704,#8705,#8706); -#8704 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8705 = DIRECTION('',(-0.,1.,0.)); -#8706 = DIRECTION('',(0.,0.,1.)); -#8707 = ADVANCED_FACE('',(#8708),#8724,.T.); -#8708 = FACE_BOUND('',#8709,.T.); -#8709 = EDGE_LOOP('',(#8710,#8716,#8717,#8723)); -#8710 = ORIENTED_EDGE('',*,*,#8711,.F.); -#8711 = EDGE_CURVE('',#8620,#8660,#8712,.T.); -#8712 = LINE('',#8713,#8714); -#8713 = CARTESIAN_POINT('',(35.,-32.,154.)); -#8714 = VECTOR('',#8715,1.); -#8715 = DIRECTION('',(1.,0.,-0.)); -#8716 = ORIENTED_EDGE('',*,*,#8627,.T.); -#8717 = ORIENTED_EDGE('',*,*,#8718,.T.); -#8718 = EDGE_CURVE('',#8628,#8668,#8719,.T.); -#8719 = LINE('',#8720,#8721); -#8720 = CARTESIAN_POINT('',(35.,-32.,166.)); -#8721 = VECTOR('',#8722,1.); -#8722 = DIRECTION('',(1.,0.,-0.)); -#8723 = ORIENTED_EDGE('',*,*,#8667,.F.); -#8724 = PLANE('',#8725); -#8725 = AXIS2_PLACEMENT_3D('',#8726,#8727,#8728); -#8726 = CARTESIAN_POINT('',(35.,-32.,154.)); -#8727 = DIRECTION('',(-0.,1.,0.)); -#8728 = DIRECTION('',(0.,0.,1.)); -#8729 = ADVANCED_FACE('',(#8730),#8736,.F.); -#8730 = FACE_BOUND('',#8731,.F.); -#8731 = EDGE_LOOP('',(#8732,#8733,#8734,#8735)); -#8732 = ORIENTED_EDGE('',*,*,#8619,.F.); -#8733 = ORIENTED_EDGE('',*,*,#8689,.T.); -#8734 = ORIENTED_EDGE('',*,*,#8659,.T.); -#8735 = ORIENTED_EDGE('',*,*,#8711,.F.); -#8736 = PLANE('',#8737); -#8737 = AXIS2_PLACEMENT_3D('',#8738,#8739,#8740); -#8738 = CARTESIAN_POINT('',(35.,-36.2,154.)); -#8739 = DIRECTION('',(0.,0.,1.)); -#8740 = DIRECTION('',(1.,0.,-0.)); -#8741 = ADVANCED_FACE('',(#8742),#8748,.T.); -#8742 = FACE_BOUND('',#8743,.T.); -#8743 = EDGE_LOOP('',(#8744,#8745,#8746,#8747)); -#8744 = ORIENTED_EDGE('',*,*,#8635,.F.); -#8745 = ORIENTED_EDGE('',*,*,#8696,.T.); -#8746 = ORIENTED_EDGE('',*,*,#8675,.T.); -#8747 = ORIENTED_EDGE('',*,*,#8718,.F.); -#8748 = PLANE('',#8749); -#8749 = AXIS2_PLACEMENT_3D('',#8750,#8751,#8752); -#8750 = CARTESIAN_POINT('',(35.,-36.2,166.)); -#8751 = DIRECTION('',(0.,0.,1.)); -#8752 = DIRECTION('',(1.,0.,-0.)); -#8753 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8757)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8754,#8755,#8756)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8754 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8755 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8756 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8757 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8754, - 'distance_accuracy_value','confusion accuracy'); -#8758 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8759,#8761); -#8759 = ( REPRESENTATION_RELATIONSHIP('','',#8602,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8760) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8760 = ITEM_DEFINED_TRANSFORMATION('','',#11,#391); -#8761 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8762); -#8762 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('95','ConnectorBank_LeftTopCap', - '',#5,#8597,$); -#8763 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8599)); -#8764 = SHAPE_DEFINITION_REPRESENTATION(#8765,#8771); -#8765 = PRODUCT_DEFINITION_SHAPE('','',#8766); -#8766 = PRODUCT_DEFINITION('design','',#8767,#8770); -#8767 = PRODUCT_DEFINITION_FORMATION('','',#8768); -#8768 = PRODUCT('ConnectorBank_RightTopCap','ConnectorBank_RightTopCap', - '',(#8769)); -#8769 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8770 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8771 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8772),#8922); -#8772 = MANIFOLD_SOLID_BREP('',#8773); -#8773 = CLOSED_SHELL('',(#8774,#8814,#8854,#8876,#8898,#8910)); -#8774 = ADVANCED_FACE('',(#8775),#8809,.F.); -#8775 = FACE_BOUND('',#8776,.F.); -#8776 = EDGE_LOOP('',(#8777,#8787,#8795,#8803)); -#8777 = ORIENTED_EDGE('',*,*,#8778,.F.); -#8778 = EDGE_CURVE('',#8779,#8781,#8783,.T.); -#8779 = VERTEX_POINT('',#8780); -#8780 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8781 = VERTEX_POINT('',#8782); -#8782 = CARTESIAN_POINT('',(60.,-37.2,163.)); -#8783 = LINE('',#8784,#8785); -#8784 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8785 = VECTOR('',#8786,1.); -#8786 = DIRECTION('',(0.,0.,1.)); -#8787 = ORIENTED_EDGE('',*,*,#8788,.T.); -#8788 = EDGE_CURVE('',#8779,#8789,#8791,.T.); -#8789 = VERTEX_POINT('',#8790); -#8790 = CARTESIAN_POINT('',(60.,-33.,152.)); -#8791 = LINE('',#8792,#8793); -#8792 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8793 = VECTOR('',#8794,1.); -#8794 = DIRECTION('',(-0.,1.,0.)); -#8795 = ORIENTED_EDGE('',*,*,#8796,.T.); -#8796 = EDGE_CURVE('',#8789,#8797,#8799,.T.); -#8797 = VERTEX_POINT('',#8798); -#8798 = CARTESIAN_POINT('',(60.,-33.,163.)); -#8799 = LINE('',#8800,#8801); -#8800 = CARTESIAN_POINT('',(60.,-33.,152.)); -#8801 = VECTOR('',#8802,1.); -#8802 = DIRECTION('',(0.,0.,1.)); -#8803 = ORIENTED_EDGE('',*,*,#8804,.F.); -#8804 = EDGE_CURVE('',#8781,#8797,#8805,.T.); -#8805 = LINE('',#8806,#8807); -#8806 = CARTESIAN_POINT('',(60.,-37.2,163.)); -#8807 = VECTOR('',#8808,1.); -#8808 = DIRECTION('',(-0.,1.,0.)); -#8809 = PLANE('',#8810); -#8810 = AXIS2_PLACEMENT_3D('',#8811,#8812,#8813); -#8811 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8812 = DIRECTION('',(1.,0.,-0.)); -#8813 = DIRECTION('',(0.,0.,1.)); -#8814 = ADVANCED_FACE('',(#8815),#8849,.T.); -#8815 = FACE_BOUND('',#8816,.T.); -#8816 = EDGE_LOOP('',(#8817,#8827,#8835,#8843)); -#8817 = ORIENTED_EDGE('',*,*,#8818,.F.); -#8818 = EDGE_CURVE('',#8819,#8821,#8823,.T.); -#8819 = VERTEX_POINT('',#8820); -#8820 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#8821 = VERTEX_POINT('',#8822); -#8822 = CARTESIAN_POINT('',(80.,-37.2,163.)); -#8823 = LINE('',#8824,#8825); -#8824 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#8825 = VECTOR('',#8826,1.); -#8826 = DIRECTION('',(0.,0.,1.)); -#8827 = ORIENTED_EDGE('',*,*,#8828,.T.); -#8828 = EDGE_CURVE('',#8819,#8829,#8831,.T.); -#8829 = VERTEX_POINT('',#8830); -#8830 = CARTESIAN_POINT('',(80.,-33.,152.)); -#8831 = LINE('',#8832,#8833); -#8832 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#8833 = VECTOR('',#8834,1.); -#8834 = DIRECTION('',(-0.,1.,0.)); -#8835 = ORIENTED_EDGE('',*,*,#8836,.T.); -#8836 = EDGE_CURVE('',#8829,#8837,#8839,.T.); -#8837 = VERTEX_POINT('',#8838); -#8838 = CARTESIAN_POINT('',(80.,-33.,163.)); -#8839 = LINE('',#8840,#8841); -#8840 = CARTESIAN_POINT('',(80.,-33.,152.)); -#8841 = VECTOR('',#8842,1.); -#8842 = DIRECTION('',(0.,0.,1.)); -#8843 = ORIENTED_EDGE('',*,*,#8844,.F.); -#8844 = EDGE_CURVE('',#8821,#8837,#8845,.T.); -#8845 = LINE('',#8846,#8847); -#8846 = CARTESIAN_POINT('',(80.,-37.2,163.)); -#8847 = VECTOR('',#8848,1.); -#8848 = DIRECTION('',(-0.,1.,0.)); -#8849 = PLANE('',#8850); -#8850 = AXIS2_PLACEMENT_3D('',#8851,#8852,#8853); -#8851 = CARTESIAN_POINT('',(80.,-37.2,152.)); -#8852 = DIRECTION('',(1.,0.,-0.)); -#8853 = DIRECTION('',(0.,0.,1.)); -#8854 = ADVANCED_FACE('',(#8855),#8871,.F.); -#8855 = FACE_BOUND('',#8856,.F.); -#8856 = EDGE_LOOP('',(#8857,#8863,#8864,#8870)); -#8857 = ORIENTED_EDGE('',*,*,#8858,.F.); -#8858 = EDGE_CURVE('',#8779,#8819,#8859,.T.); -#8859 = LINE('',#8860,#8861); -#8860 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8861 = VECTOR('',#8862,1.); -#8862 = DIRECTION('',(1.,0.,-0.)); -#8863 = ORIENTED_EDGE('',*,*,#8778,.T.); -#8864 = ORIENTED_EDGE('',*,*,#8865,.T.); -#8865 = EDGE_CURVE('',#8781,#8821,#8866,.T.); -#8866 = LINE('',#8867,#8868); -#8867 = CARTESIAN_POINT('',(60.,-37.2,163.)); -#8868 = VECTOR('',#8869,1.); -#8869 = DIRECTION('',(1.,0.,-0.)); -#8870 = ORIENTED_EDGE('',*,*,#8818,.F.); -#8871 = PLANE('',#8872); -#8872 = AXIS2_PLACEMENT_3D('',#8873,#8874,#8875); -#8873 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8874 = DIRECTION('',(-0.,1.,0.)); -#8875 = DIRECTION('',(0.,0.,1.)); -#8876 = ADVANCED_FACE('',(#8877),#8893,.T.); -#8877 = FACE_BOUND('',#8878,.T.); -#8878 = EDGE_LOOP('',(#8879,#8885,#8886,#8892)); -#8879 = ORIENTED_EDGE('',*,*,#8880,.F.); -#8880 = EDGE_CURVE('',#8789,#8829,#8881,.T.); -#8881 = LINE('',#8882,#8883); -#8882 = CARTESIAN_POINT('',(60.,-33.,152.)); -#8883 = VECTOR('',#8884,1.); -#8884 = DIRECTION('',(1.,0.,-0.)); -#8885 = ORIENTED_EDGE('',*,*,#8796,.T.); -#8886 = ORIENTED_EDGE('',*,*,#8887,.T.); -#8887 = EDGE_CURVE('',#8797,#8837,#8888,.T.); -#8888 = LINE('',#8889,#8890); -#8889 = CARTESIAN_POINT('',(60.,-33.,163.)); -#8890 = VECTOR('',#8891,1.); -#8891 = DIRECTION('',(1.,0.,-0.)); -#8892 = ORIENTED_EDGE('',*,*,#8836,.F.); -#8893 = PLANE('',#8894); -#8894 = AXIS2_PLACEMENT_3D('',#8895,#8896,#8897); -#8895 = CARTESIAN_POINT('',(60.,-33.,152.)); -#8896 = DIRECTION('',(-0.,1.,0.)); -#8897 = DIRECTION('',(0.,0.,1.)); -#8898 = ADVANCED_FACE('',(#8899),#8905,.F.); -#8899 = FACE_BOUND('',#8900,.F.); -#8900 = EDGE_LOOP('',(#8901,#8902,#8903,#8904)); -#8901 = ORIENTED_EDGE('',*,*,#8788,.F.); -#8902 = ORIENTED_EDGE('',*,*,#8858,.T.); -#8903 = ORIENTED_EDGE('',*,*,#8828,.T.); -#8904 = ORIENTED_EDGE('',*,*,#8880,.F.); -#8905 = PLANE('',#8906); -#8906 = AXIS2_PLACEMENT_3D('',#8907,#8908,#8909); -#8907 = CARTESIAN_POINT('',(60.,-37.2,152.)); -#8908 = DIRECTION('',(0.,0.,1.)); -#8909 = DIRECTION('',(1.,0.,-0.)); -#8910 = ADVANCED_FACE('',(#8911),#8917,.T.); -#8911 = FACE_BOUND('',#8912,.T.); -#8912 = EDGE_LOOP('',(#8913,#8914,#8915,#8916)); -#8913 = ORIENTED_EDGE('',*,*,#8804,.F.); -#8914 = ORIENTED_EDGE('',*,*,#8865,.T.); -#8915 = ORIENTED_EDGE('',*,*,#8844,.T.); -#8916 = ORIENTED_EDGE('',*,*,#8887,.F.); -#8917 = PLANE('',#8918); -#8918 = AXIS2_PLACEMENT_3D('',#8919,#8920,#8921); -#8919 = CARTESIAN_POINT('',(60.,-37.2,163.)); -#8920 = DIRECTION('',(0.,0.,1.)); -#8921 = DIRECTION('',(1.,0.,-0.)); -#8922 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#8926)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#8923,#8924,#8925)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#8923 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#8924 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#8925 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#8926 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#8923, - 'distance_accuracy_value','confusion accuracy'); -#8927 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#8928,#8930); -#8928 = ( REPRESENTATION_RELATIONSHIP('','',#8771,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#8929) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#8929 = ITEM_DEFINED_TRANSFORMATION('','',#11,#395); -#8930 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #8931); -#8931 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('96','ConnectorBank_RightTopCap', - '',#5,#8766,$); -#8932 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8768)); -#8933 = SHAPE_DEFINITION_REPRESENTATION(#8934,#8940); -#8934 = PRODUCT_DEFINITION_SHAPE('','',#8935); -#8935 = PRODUCT_DEFINITION('design','',#8936,#8939); -#8936 = PRODUCT_DEFINITION_FORMATION('','',#8937); -#8937 = PRODUCT('AccessoryConnector_LowerLeft', - 'AccessoryConnector_LowerLeft','',(#8938)); -#8938 = PRODUCT_CONTEXT('',#2,'mechanical'); -#8939 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#8940 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#8941),#9091); -#8941 = MANIFOLD_SOLID_BREP('',#8942); -#8942 = CLOSED_SHELL('',(#8943,#8983,#9023,#9045,#9067,#9079)); -#8943 = ADVANCED_FACE('',(#8944),#8978,.F.); -#8944 = FACE_BOUND('',#8945,.F.); -#8945 = EDGE_LOOP('',(#8946,#8956,#8964,#8972)); -#8946 = ORIENTED_EDGE('',*,*,#8947,.F.); -#8947 = EDGE_CURVE('',#8948,#8950,#8952,.T.); -#8948 = VERTEX_POINT('',#8949); -#8949 = CARTESIAN_POINT('',(26.,-37.,18.)); -#8950 = VERTEX_POINT('',#8951); -#8951 = CARTESIAN_POINT('',(26.,-37.,52.)); -#8952 = LINE('',#8953,#8954); -#8953 = CARTESIAN_POINT('',(26.,-37.,18.)); -#8954 = VECTOR('',#8955,1.); -#8955 = DIRECTION('',(0.,0.,1.)); -#8956 = ORIENTED_EDGE('',*,*,#8957,.T.); -#8957 = EDGE_CURVE('',#8948,#8958,#8960,.T.); -#8958 = VERTEX_POINT('',#8959); -#8959 = CARTESIAN_POINT('',(26.,-33.,18.)); -#8960 = LINE('',#8961,#8962); -#8961 = CARTESIAN_POINT('',(26.,-37.,18.)); -#8962 = VECTOR('',#8963,1.); -#8963 = DIRECTION('',(-0.,1.,0.)); -#8964 = ORIENTED_EDGE('',*,*,#8965,.T.); -#8965 = EDGE_CURVE('',#8958,#8966,#8968,.T.); -#8966 = VERTEX_POINT('',#8967); -#8967 = CARTESIAN_POINT('',(26.,-33.,52.)); -#8968 = LINE('',#8969,#8970); -#8969 = CARTESIAN_POINT('',(26.,-33.,18.)); -#8970 = VECTOR('',#8971,1.); -#8971 = DIRECTION('',(0.,0.,1.)); -#8972 = ORIENTED_EDGE('',*,*,#8973,.F.); -#8973 = EDGE_CURVE('',#8950,#8966,#8974,.T.); -#8974 = LINE('',#8975,#8976); -#8975 = CARTESIAN_POINT('',(26.,-37.,52.)); -#8976 = VECTOR('',#8977,1.); -#8977 = DIRECTION('',(-0.,1.,0.)); -#8978 = PLANE('',#8979); -#8979 = AXIS2_PLACEMENT_3D('',#8980,#8981,#8982); -#8980 = CARTESIAN_POINT('',(26.,-37.,18.)); -#8981 = DIRECTION('',(1.,0.,-0.)); -#8982 = DIRECTION('',(0.,0.,1.)); -#8983 = ADVANCED_FACE('',(#8984),#9018,.T.); -#8984 = FACE_BOUND('',#8985,.T.); -#8985 = EDGE_LOOP('',(#8986,#8996,#9004,#9012)); -#8986 = ORIENTED_EDGE('',*,*,#8987,.F.); -#8987 = EDGE_CURVE('',#8988,#8990,#8992,.T.); -#8988 = VERTEX_POINT('',#8989); -#8989 = CARTESIAN_POINT('',(42.,-37.,18.)); -#8990 = VERTEX_POINT('',#8991); -#8991 = CARTESIAN_POINT('',(42.,-37.,52.)); -#8992 = LINE('',#8993,#8994); -#8993 = CARTESIAN_POINT('',(42.,-37.,18.)); -#8994 = VECTOR('',#8995,1.); -#8995 = DIRECTION('',(0.,0.,1.)); -#8996 = ORIENTED_EDGE('',*,*,#8997,.T.); -#8997 = EDGE_CURVE('',#8988,#8998,#9000,.T.); -#8998 = VERTEX_POINT('',#8999); -#8999 = CARTESIAN_POINT('',(42.,-33.,18.)); -#9000 = LINE('',#9001,#9002); -#9001 = CARTESIAN_POINT('',(42.,-37.,18.)); -#9002 = VECTOR('',#9003,1.); -#9003 = DIRECTION('',(-0.,1.,0.)); -#9004 = ORIENTED_EDGE('',*,*,#9005,.T.); -#9005 = EDGE_CURVE('',#8998,#9006,#9008,.T.); -#9006 = VERTEX_POINT('',#9007); -#9007 = CARTESIAN_POINT('',(42.,-33.,52.)); -#9008 = LINE('',#9009,#9010); -#9009 = CARTESIAN_POINT('',(42.,-33.,18.)); -#9010 = VECTOR('',#9011,1.); -#9011 = DIRECTION('',(0.,0.,1.)); -#9012 = ORIENTED_EDGE('',*,*,#9013,.F.); -#9013 = EDGE_CURVE('',#8990,#9006,#9014,.T.); -#9014 = LINE('',#9015,#9016); -#9015 = CARTESIAN_POINT('',(42.,-37.,52.)); -#9016 = VECTOR('',#9017,1.); -#9017 = DIRECTION('',(-0.,1.,0.)); -#9018 = PLANE('',#9019); -#9019 = AXIS2_PLACEMENT_3D('',#9020,#9021,#9022); -#9020 = CARTESIAN_POINT('',(42.,-37.,18.)); -#9021 = DIRECTION('',(1.,0.,-0.)); -#9022 = DIRECTION('',(0.,0.,1.)); -#9023 = ADVANCED_FACE('',(#9024),#9040,.F.); -#9024 = FACE_BOUND('',#9025,.F.); -#9025 = EDGE_LOOP('',(#9026,#9032,#9033,#9039)); -#9026 = ORIENTED_EDGE('',*,*,#9027,.F.); -#9027 = EDGE_CURVE('',#8948,#8988,#9028,.T.); -#9028 = LINE('',#9029,#9030); -#9029 = CARTESIAN_POINT('',(26.,-37.,18.)); -#9030 = VECTOR('',#9031,1.); -#9031 = DIRECTION('',(1.,0.,-0.)); -#9032 = ORIENTED_EDGE('',*,*,#8947,.T.); -#9033 = ORIENTED_EDGE('',*,*,#9034,.T.); -#9034 = EDGE_CURVE('',#8950,#8990,#9035,.T.); -#9035 = LINE('',#9036,#9037); -#9036 = CARTESIAN_POINT('',(26.,-37.,52.)); -#9037 = VECTOR('',#9038,1.); -#9038 = DIRECTION('',(1.,0.,-0.)); -#9039 = ORIENTED_EDGE('',*,*,#8987,.F.); -#9040 = PLANE('',#9041); -#9041 = AXIS2_PLACEMENT_3D('',#9042,#9043,#9044); -#9042 = CARTESIAN_POINT('',(26.,-37.,18.)); -#9043 = DIRECTION('',(-0.,1.,0.)); -#9044 = DIRECTION('',(0.,0.,1.)); -#9045 = ADVANCED_FACE('',(#9046),#9062,.T.); -#9046 = FACE_BOUND('',#9047,.T.); -#9047 = EDGE_LOOP('',(#9048,#9054,#9055,#9061)); -#9048 = ORIENTED_EDGE('',*,*,#9049,.F.); -#9049 = EDGE_CURVE('',#8958,#8998,#9050,.T.); -#9050 = LINE('',#9051,#9052); -#9051 = CARTESIAN_POINT('',(26.,-33.,18.)); -#9052 = VECTOR('',#9053,1.); -#9053 = DIRECTION('',(1.,0.,-0.)); -#9054 = ORIENTED_EDGE('',*,*,#8965,.T.); -#9055 = ORIENTED_EDGE('',*,*,#9056,.T.); -#9056 = EDGE_CURVE('',#8966,#9006,#9057,.T.); -#9057 = LINE('',#9058,#9059); -#9058 = CARTESIAN_POINT('',(26.,-33.,52.)); -#9059 = VECTOR('',#9060,1.); -#9060 = DIRECTION('',(1.,0.,-0.)); -#9061 = ORIENTED_EDGE('',*,*,#9005,.F.); -#9062 = PLANE('',#9063); -#9063 = AXIS2_PLACEMENT_3D('',#9064,#9065,#9066); -#9064 = CARTESIAN_POINT('',(26.,-33.,18.)); -#9065 = DIRECTION('',(-0.,1.,0.)); -#9066 = DIRECTION('',(0.,0.,1.)); -#9067 = ADVANCED_FACE('',(#9068),#9074,.F.); -#9068 = FACE_BOUND('',#9069,.F.); -#9069 = EDGE_LOOP('',(#9070,#9071,#9072,#9073)); -#9070 = ORIENTED_EDGE('',*,*,#8957,.F.); -#9071 = ORIENTED_EDGE('',*,*,#9027,.T.); -#9072 = ORIENTED_EDGE('',*,*,#8997,.T.); -#9073 = ORIENTED_EDGE('',*,*,#9049,.F.); -#9074 = PLANE('',#9075); -#9075 = AXIS2_PLACEMENT_3D('',#9076,#9077,#9078); -#9076 = CARTESIAN_POINT('',(26.,-37.,18.)); -#9077 = DIRECTION('',(0.,0.,1.)); -#9078 = DIRECTION('',(1.,0.,-0.)); -#9079 = ADVANCED_FACE('',(#9080),#9086,.T.); -#9080 = FACE_BOUND('',#9081,.T.); -#9081 = EDGE_LOOP('',(#9082,#9083,#9084,#9085)); -#9082 = ORIENTED_EDGE('',*,*,#8973,.F.); -#9083 = ORIENTED_EDGE('',*,*,#9034,.T.); -#9084 = ORIENTED_EDGE('',*,*,#9013,.T.); -#9085 = ORIENTED_EDGE('',*,*,#9056,.F.); -#9086 = PLANE('',#9087); -#9087 = AXIS2_PLACEMENT_3D('',#9088,#9089,#9090); -#9088 = CARTESIAN_POINT('',(26.,-37.,52.)); -#9089 = DIRECTION('',(0.,0.,1.)); -#9090 = DIRECTION('',(1.,0.,-0.)); -#9091 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9095)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9092,#9093,#9094)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9092 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9093 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9094 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9095 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9092, - 'distance_accuracy_value','confusion accuracy'); -#9096 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9097,#9099); -#9097 = ( REPRESENTATION_RELATIONSHIP('','',#8940,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9098) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9098 = ITEM_DEFINED_TRANSFORMATION('','',#11,#399); -#9099 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9100); -#9100 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('97', - 'AccessoryConnector_LowerLeft','',#5,#8935,$); -#9101 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#8937)); -#9102 = SHAPE_DEFINITION_REPRESENTATION(#9103,#9109); -#9103 = PRODUCT_DEFINITION_SHAPE('','',#9104); -#9104 = PRODUCT_DEFINITION('design','',#9105,#9108); -#9105 = PRODUCT_DEFINITION_FORMATION('','',#9106); -#9106 = PRODUCT('AccessoryConnector_LowerRight', - 'AccessoryConnector_LowerRight','',(#9107)); -#9107 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9108 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9109 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9110),#9260); -#9110 = MANIFOLD_SOLID_BREP('',#9111); -#9111 = CLOSED_SHELL('',(#9112,#9152,#9192,#9214,#9236,#9248)); -#9112 = ADVANCED_FACE('',(#9113),#9147,.F.); -#9113 = FACE_BOUND('',#9114,.F.); -#9114 = EDGE_LOOP('',(#9115,#9125,#9133,#9141)); -#9115 = ORIENTED_EDGE('',*,*,#9116,.F.); -#9116 = EDGE_CURVE('',#9117,#9119,#9121,.T.); -#9117 = VERTEX_POINT('',#9118); -#9118 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9119 = VERTEX_POINT('',#9120); -#9120 = CARTESIAN_POINT('',(70.,-38.,50.)); -#9121 = LINE('',#9122,#9123); -#9122 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9123 = VECTOR('',#9124,1.); -#9124 = DIRECTION('',(0.,0.,1.)); -#9125 = ORIENTED_EDGE('',*,*,#9126,.T.); -#9126 = EDGE_CURVE('',#9117,#9127,#9129,.T.); -#9127 = VERTEX_POINT('',#9128); -#9128 = CARTESIAN_POINT('',(70.,-34.,22.)); -#9129 = LINE('',#9130,#9131); -#9130 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9131 = VECTOR('',#9132,1.); -#9132 = DIRECTION('',(-0.,1.,0.)); -#9133 = ORIENTED_EDGE('',*,*,#9134,.T.); -#9134 = EDGE_CURVE('',#9127,#9135,#9137,.T.); -#9135 = VERTEX_POINT('',#9136); -#9136 = CARTESIAN_POINT('',(70.,-34.,50.)); -#9137 = LINE('',#9138,#9139); -#9138 = CARTESIAN_POINT('',(70.,-34.,22.)); -#9139 = VECTOR('',#9140,1.); -#9140 = DIRECTION('',(0.,0.,1.)); -#9141 = ORIENTED_EDGE('',*,*,#9142,.F.); -#9142 = EDGE_CURVE('',#9119,#9135,#9143,.T.); -#9143 = LINE('',#9144,#9145); -#9144 = CARTESIAN_POINT('',(70.,-38.,50.)); -#9145 = VECTOR('',#9146,1.); -#9146 = DIRECTION('',(-0.,1.,0.)); -#9147 = PLANE('',#9148); -#9148 = AXIS2_PLACEMENT_3D('',#9149,#9150,#9151); -#9149 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9150 = DIRECTION('',(1.,0.,-0.)); -#9151 = DIRECTION('',(0.,0.,1.)); -#9152 = ADVANCED_FACE('',(#9153),#9187,.T.); -#9153 = FACE_BOUND('',#9154,.T.); -#9154 = EDGE_LOOP('',(#9155,#9165,#9173,#9181)); -#9155 = ORIENTED_EDGE('',*,*,#9156,.F.); -#9156 = EDGE_CURVE('',#9157,#9159,#9161,.T.); -#9157 = VERTEX_POINT('',#9158); -#9158 = CARTESIAN_POINT('',(84.,-38.,22.)); -#9159 = VERTEX_POINT('',#9160); -#9160 = CARTESIAN_POINT('',(84.,-38.,50.)); -#9161 = LINE('',#9162,#9163); -#9162 = CARTESIAN_POINT('',(84.,-38.,22.)); -#9163 = VECTOR('',#9164,1.); -#9164 = DIRECTION('',(0.,0.,1.)); -#9165 = ORIENTED_EDGE('',*,*,#9166,.T.); -#9166 = EDGE_CURVE('',#9157,#9167,#9169,.T.); -#9167 = VERTEX_POINT('',#9168); -#9168 = CARTESIAN_POINT('',(84.,-34.,22.)); -#9169 = LINE('',#9170,#9171); -#9170 = CARTESIAN_POINT('',(84.,-38.,22.)); -#9171 = VECTOR('',#9172,1.); -#9172 = DIRECTION('',(-0.,1.,0.)); -#9173 = ORIENTED_EDGE('',*,*,#9174,.T.); -#9174 = EDGE_CURVE('',#9167,#9175,#9177,.T.); -#9175 = VERTEX_POINT('',#9176); -#9176 = CARTESIAN_POINT('',(84.,-34.,50.)); -#9177 = LINE('',#9178,#9179); -#9178 = CARTESIAN_POINT('',(84.,-34.,22.)); -#9179 = VECTOR('',#9180,1.); -#9180 = DIRECTION('',(0.,0.,1.)); -#9181 = ORIENTED_EDGE('',*,*,#9182,.F.); -#9182 = EDGE_CURVE('',#9159,#9175,#9183,.T.); -#9183 = LINE('',#9184,#9185); -#9184 = CARTESIAN_POINT('',(84.,-38.,50.)); -#9185 = VECTOR('',#9186,1.); -#9186 = DIRECTION('',(-0.,1.,0.)); -#9187 = PLANE('',#9188); -#9188 = AXIS2_PLACEMENT_3D('',#9189,#9190,#9191); -#9189 = CARTESIAN_POINT('',(84.,-38.,22.)); -#9190 = DIRECTION('',(1.,0.,-0.)); -#9191 = DIRECTION('',(0.,0.,1.)); -#9192 = ADVANCED_FACE('',(#9193),#9209,.F.); -#9193 = FACE_BOUND('',#9194,.F.); -#9194 = EDGE_LOOP('',(#9195,#9201,#9202,#9208)); -#9195 = ORIENTED_EDGE('',*,*,#9196,.F.); -#9196 = EDGE_CURVE('',#9117,#9157,#9197,.T.); -#9197 = LINE('',#9198,#9199); -#9198 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9199 = VECTOR('',#9200,1.); -#9200 = DIRECTION('',(1.,0.,-0.)); -#9201 = ORIENTED_EDGE('',*,*,#9116,.T.); -#9202 = ORIENTED_EDGE('',*,*,#9203,.T.); -#9203 = EDGE_CURVE('',#9119,#9159,#9204,.T.); -#9204 = LINE('',#9205,#9206); -#9205 = CARTESIAN_POINT('',(70.,-38.,50.)); -#9206 = VECTOR('',#9207,1.); -#9207 = DIRECTION('',(1.,0.,-0.)); -#9208 = ORIENTED_EDGE('',*,*,#9156,.F.); -#9209 = PLANE('',#9210); -#9210 = AXIS2_PLACEMENT_3D('',#9211,#9212,#9213); -#9211 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9212 = DIRECTION('',(-0.,1.,0.)); -#9213 = DIRECTION('',(0.,0.,1.)); -#9214 = ADVANCED_FACE('',(#9215),#9231,.T.); -#9215 = FACE_BOUND('',#9216,.T.); -#9216 = EDGE_LOOP('',(#9217,#9223,#9224,#9230)); -#9217 = ORIENTED_EDGE('',*,*,#9218,.F.); -#9218 = EDGE_CURVE('',#9127,#9167,#9219,.T.); -#9219 = LINE('',#9220,#9221); -#9220 = CARTESIAN_POINT('',(70.,-34.,22.)); -#9221 = VECTOR('',#9222,1.); -#9222 = DIRECTION('',(1.,0.,-0.)); -#9223 = ORIENTED_EDGE('',*,*,#9134,.T.); -#9224 = ORIENTED_EDGE('',*,*,#9225,.T.); -#9225 = EDGE_CURVE('',#9135,#9175,#9226,.T.); -#9226 = LINE('',#9227,#9228); -#9227 = CARTESIAN_POINT('',(70.,-34.,50.)); -#9228 = VECTOR('',#9229,1.); -#9229 = DIRECTION('',(1.,0.,-0.)); -#9230 = ORIENTED_EDGE('',*,*,#9174,.F.); -#9231 = PLANE('',#9232); -#9232 = AXIS2_PLACEMENT_3D('',#9233,#9234,#9235); -#9233 = CARTESIAN_POINT('',(70.,-34.,22.)); -#9234 = DIRECTION('',(-0.,1.,0.)); -#9235 = DIRECTION('',(0.,0.,1.)); -#9236 = ADVANCED_FACE('',(#9237),#9243,.F.); -#9237 = FACE_BOUND('',#9238,.F.); -#9238 = EDGE_LOOP('',(#9239,#9240,#9241,#9242)); -#9239 = ORIENTED_EDGE('',*,*,#9126,.F.); -#9240 = ORIENTED_EDGE('',*,*,#9196,.T.); -#9241 = ORIENTED_EDGE('',*,*,#9166,.T.); -#9242 = ORIENTED_EDGE('',*,*,#9218,.F.); -#9243 = PLANE('',#9244); -#9244 = AXIS2_PLACEMENT_3D('',#9245,#9246,#9247); -#9245 = CARTESIAN_POINT('',(70.,-38.,22.)); -#9246 = DIRECTION('',(0.,0.,1.)); -#9247 = DIRECTION('',(1.,0.,-0.)); -#9248 = ADVANCED_FACE('',(#9249),#9255,.T.); -#9249 = FACE_BOUND('',#9250,.T.); -#9250 = EDGE_LOOP('',(#9251,#9252,#9253,#9254)); -#9251 = ORIENTED_EDGE('',*,*,#9142,.F.); -#9252 = ORIENTED_EDGE('',*,*,#9203,.T.); -#9253 = ORIENTED_EDGE('',*,*,#9182,.T.); -#9254 = ORIENTED_EDGE('',*,*,#9225,.F.); -#9255 = PLANE('',#9256); -#9256 = AXIS2_PLACEMENT_3D('',#9257,#9258,#9259); -#9257 = CARTESIAN_POINT('',(70.,-38.,50.)); -#9258 = DIRECTION('',(0.,0.,1.)); -#9259 = DIRECTION('',(1.,0.,-0.)); -#9260 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9264)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9261,#9262,#9263)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9261 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9262 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9263 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9264 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9261, - 'distance_accuracy_value','confusion accuracy'); -#9265 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9266,#9268); -#9266 = ( REPRESENTATION_RELATIONSHIP('','',#9109,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9267) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9267 = ITEM_DEFINED_TRANSFORMATION('','',#11,#403); -#9268 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9269); -#9269 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('98', - 'AccessoryConnector_LowerRight','',#5,#9104,$); -#9270 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9106)); -#9271 = SHAPE_DEFINITION_REPRESENTATION(#9272,#9278); -#9272 = PRODUCT_DEFINITION_SHAPE('','',#9273); -#9273 = PRODUCT_DEFINITION('design','',#9274,#9277); -#9274 = PRODUCT_DEFINITION_FORMATION('','',#9275); -#9275 = PRODUCT('AccessoryConnector_LowerLeftScrew1', - 'AccessoryConnector_LowerLeftScrew1','',(#9276)); -#9276 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9277 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9278 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9279),#9332); -#9279 = MANIFOLD_SOLID_BREP('',#9280); -#9280 = CLOSED_SHELL('',(#9281,#9314,#9323)); -#9281 = ADVANCED_FACE('',(#9282),#9309,.T.); -#9282 = FACE_BOUND('',#9283,.T.); -#9283 = EDGE_LOOP('',(#9284,#9293,#9301,#9308)); -#9284 = ORIENTED_EDGE('',*,*,#9285,.F.); -#9285 = EDGE_CURVE('',#9286,#9286,#9288,.T.); -#9286 = VERTEX_POINT('',#9287); -#9287 = CARTESIAN_POINT('',(34.,-38.8,27.2)); -#9288 = CIRCLE('',#9289,0.8); -#9289 = AXIS2_PLACEMENT_3D('',#9290,#9291,#9292); -#9290 = CARTESIAN_POINT('',(34.,-38.8,28.)); -#9291 = DIRECTION('',(0.,-1.,0.)); -#9292 = DIRECTION('',(0.,-0.,-1.)); -#9293 = ORIENTED_EDGE('',*,*,#9294,.F.); -#9294 = EDGE_CURVE('',#9295,#9286,#9297,.T.); -#9295 = VERTEX_POINT('',#9296); -#9296 = CARTESIAN_POINT('',(34.,-38.1,27.2)); -#9297 = LINE('',#9298,#9299); -#9298 = CARTESIAN_POINT('',(34.,-38.1,27.2)); -#9299 = VECTOR('',#9300,1.); -#9300 = DIRECTION('',(0.,-1.,0.)); -#9301 = ORIENTED_EDGE('',*,*,#9302,.T.); -#9302 = EDGE_CURVE('',#9295,#9295,#9303,.T.); -#9303 = CIRCLE('',#9304,0.8); -#9304 = AXIS2_PLACEMENT_3D('',#9305,#9306,#9307); -#9305 = CARTESIAN_POINT('',(34.,-38.1,28.)); -#9306 = DIRECTION('',(0.,-1.,0.)); -#9307 = DIRECTION('',(0.,-0.,-1.)); -#9308 = ORIENTED_EDGE('',*,*,#9294,.T.); -#9309 = CYLINDRICAL_SURFACE('',#9310,0.8); -#9310 = AXIS2_PLACEMENT_3D('',#9311,#9312,#9313); -#9311 = CARTESIAN_POINT('',(34.,-38.1,28.)); -#9312 = DIRECTION('',(0.,-1.,0.)); -#9313 = DIRECTION('',(0.,-0.,-1.)); -#9314 = ADVANCED_FACE('',(#9315),#9318,.T.); -#9315 = FACE_BOUND('',#9316,.T.); -#9316 = EDGE_LOOP('',(#9317)); -#9317 = ORIENTED_EDGE('',*,*,#9285,.T.); -#9318 = PLANE('',#9319); -#9319 = AXIS2_PLACEMENT_3D('',#9320,#9321,#9322); -#9320 = CARTESIAN_POINT('',(34.,-38.8,28.)); -#9321 = DIRECTION('',(0.,-1.,0.)); -#9322 = DIRECTION('',(0.,-0.,-1.)); -#9323 = ADVANCED_FACE('',(#9324),#9327,.F.); -#9324 = FACE_BOUND('',#9325,.T.); -#9325 = EDGE_LOOP('',(#9326)); -#9326 = ORIENTED_EDGE('',*,*,#9302,.F.); -#9327 = PLANE('',#9328); -#9328 = AXIS2_PLACEMENT_3D('',#9329,#9330,#9331); -#9329 = CARTESIAN_POINT('',(34.,-38.1,28.)); -#9330 = DIRECTION('',(0.,-1.,0.)); -#9331 = DIRECTION('',(0.,-0.,-1.)); -#9332 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9336)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9333,#9334,#9335)) REPRESENTATION_CONTEXT +#7285 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7286 = DIRECTION('',(1.,0.,-0.)); +#7287 = DIRECTION('',(0.,0.,1.)); +#7288 = ADVANCED_FACE('',(#7289),#7323,.T.); +#7289 = FACE_BOUND('',#7290,.T.); +#7290 = EDGE_LOOP('',(#7291,#7301,#7309,#7317)); +#7291 = ORIENTED_EDGE('',*,*,#7292,.F.); +#7292 = EDGE_CURVE('',#7293,#7295,#7297,.T.); +#7293 = VERTEX_POINT('',#7294); +#7294 = CARTESIAN_POINT('',(2.5,36.,22.)); +#7295 = VERTEX_POINT('',#7296); +#7296 = CARTESIAN_POINT('',(2.5,36.,50.)); +#7297 = LINE('',#7298,#7299); +#7298 = CARTESIAN_POINT('',(2.5,36.,22.)); +#7299 = VECTOR('',#7300,1.); +#7300 = DIRECTION('',(0.,0.,1.)); +#7301 = ORIENTED_EDGE('',*,*,#7302,.T.); +#7302 = EDGE_CURVE('',#7293,#7303,#7305,.T.); +#7303 = VERTEX_POINT('',#7304); +#7304 = CARTESIAN_POINT('',(2.5,40.,22.)); +#7305 = LINE('',#7306,#7307); +#7306 = CARTESIAN_POINT('',(2.5,36.,22.)); +#7307 = VECTOR('',#7308,1.); +#7308 = DIRECTION('',(-0.,1.,0.)); +#7309 = ORIENTED_EDGE('',*,*,#7310,.T.); +#7310 = EDGE_CURVE('',#7303,#7311,#7313,.T.); +#7311 = VERTEX_POINT('',#7312); +#7312 = CARTESIAN_POINT('',(2.5,40.,50.)); +#7313 = LINE('',#7314,#7315); +#7314 = CARTESIAN_POINT('',(2.5,40.,22.)); +#7315 = VECTOR('',#7316,1.); +#7316 = DIRECTION('',(0.,0.,1.)); +#7317 = ORIENTED_EDGE('',*,*,#7318,.F.); +#7318 = EDGE_CURVE('',#7295,#7311,#7319,.T.); +#7319 = LINE('',#7320,#7321); +#7320 = CARTESIAN_POINT('',(2.5,36.,50.)); +#7321 = VECTOR('',#7322,1.); +#7322 = DIRECTION('',(-0.,1.,0.)); +#7323 = PLANE('',#7324); +#7324 = AXIS2_PLACEMENT_3D('',#7325,#7326,#7327); +#7325 = CARTESIAN_POINT('',(2.5,36.,22.)); +#7326 = DIRECTION('',(1.,0.,-0.)); +#7327 = DIRECTION('',(0.,0.,1.)); +#7328 = ADVANCED_FACE('',(#7329),#7345,.F.); +#7329 = FACE_BOUND('',#7330,.F.); +#7330 = EDGE_LOOP('',(#7331,#7337,#7338,#7344)); +#7331 = ORIENTED_EDGE('',*,*,#7332,.F.); +#7332 = EDGE_CURVE('',#7253,#7293,#7333,.T.); +#7333 = LINE('',#7334,#7335); +#7334 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7335 = VECTOR('',#7336,1.); +#7336 = DIRECTION('',(1.,0.,-0.)); +#7337 = ORIENTED_EDGE('',*,*,#7252,.T.); +#7338 = ORIENTED_EDGE('',*,*,#7339,.T.); +#7339 = EDGE_CURVE('',#7255,#7295,#7340,.T.); +#7340 = LINE('',#7341,#7342); +#7341 = CARTESIAN_POINT('',(-11.5,36.,50.)); +#7342 = VECTOR('',#7343,1.); +#7343 = DIRECTION('',(1.,0.,-0.)); +#7344 = ORIENTED_EDGE('',*,*,#7292,.F.); +#7345 = PLANE('',#7346); +#7346 = AXIS2_PLACEMENT_3D('',#7347,#7348,#7349); +#7347 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7348 = DIRECTION('',(-0.,1.,0.)); +#7349 = DIRECTION('',(0.,0.,1.)); +#7350 = ADVANCED_FACE('',(#7351),#7367,.T.); +#7351 = FACE_BOUND('',#7352,.T.); +#7352 = EDGE_LOOP('',(#7353,#7359,#7360,#7366)); +#7353 = ORIENTED_EDGE('',*,*,#7354,.F.); +#7354 = EDGE_CURVE('',#7263,#7303,#7355,.T.); +#7355 = LINE('',#7356,#7357); +#7356 = CARTESIAN_POINT('',(-11.5,40.,22.)); +#7357 = VECTOR('',#7358,1.); +#7358 = DIRECTION('',(1.,0.,-0.)); +#7359 = ORIENTED_EDGE('',*,*,#7270,.T.); +#7360 = ORIENTED_EDGE('',*,*,#7361,.T.); +#7361 = EDGE_CURVE('',#7271,#7311,#7362,.T.); +#7362 = LINE('',#7363,#7364); +#7363 = CARTESIAN_POINT('',(-11.5,40.,50.)); +#7364 = VECTOR('',#7365,1.); +#7365 = DIRECTION('',(1.,0.,-0.)); +#7366 = ORIENTED_EDGE('',*,*,#7310,.F.); +#7367 = PLANE('',#7368); +#7368 = AXIS2_PLACEMENT_3D('',#7369,#7370,#7371); +#7369 = CARTESIAN_POINT('',(-11.5,40.,22.)); +#7370 = DIRECTION('',(-0.,1.,0.)); +#7371 = DIRECTION('',(0.,0.,1.)); +#7372 = ADVANCED_FACE('',(#7373),#7379,.F.); +#7373 = FACE_BOUND('',#7374,.F.); +#7374 = EDGE_LOOP('',(#7375,#7376,#7377,#7378)); +#7375 = ORIENTED_EDGE('',*,*,#7262,.F.); +#7376 = ORIENTED_EDGE('',*,*,#7332,.T.); +#7377 = ORIENTED_EDGE('',*,*,#7302,.T.); +#7378 = ORIENTED_EDGE('',*,*,#7354,.F.); +#7379 = PLANE('',#7380); +#7380 = AXIS2_PLACEMENT_3D('',#7381,#7382,#7383); +#7381 = CARTESIAN_POINT('',(-11.5,36.,22.)); +#7382 = DIRECTION('',(0.,0.,1.)); +#7383 = DIRECTION('',(1.,0.,-0.)); +#7384 = ADVANCED_FACE('',(#7385),#7391,.T.); +#7385 = FACE_BOUND('',#7386,.T.); +#7386 = EDGE_LOOP('',(#7387,#7388,#7389,#7390)); +#7387 = ORIENTED_EDGE('',*,*,#7278,.F.); +#7388 = ORIENTED_EDGE('',*,*,#7339,.T.); +#7389 = ORIENTED_EDGE('',*,*,#7318,.T.); +#7390 = ORIENTED_EDGE('',*,*,#7361,.F.); +#7391 = PLANE('',#7392); +#7392 = AXIS2_PLACEMENT_3D('',#7393,#7394,#7395); +#7393 = CARTESIAN_POINT('',(-11.5,36.,50.)); +#7394 = DIRECTION('',(0.,0.,1.)); +#7395 = DIRECTION('',(1.,0.,-0.)); +#7396 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7400)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7397,#7398,#7399)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9333 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9334 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9335 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9336 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9333, +#7397 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7398 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7399 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7400 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7397, 'distance_accuracy_value','confusion accuracy'); -#9337 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9338,#9340); -#9338 = ( REPRESENTATION_RELATIONSHIP('','',#9278,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9339) +#7401 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7402,#7404); +#7402 = ( REPRESENTATION_RELATIONSHIP('','',#7245,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7403) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9339 = ITEM_DEFINED_TRANSFORMATION('','',#11,#407); -#9340 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9341); -#9341 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('99', - 'AccessoryConnector_LowerLeftScrew1','',#5,#9273,$); -#9342 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9275)); -#9343 = SHAPE_DEFINITION_REPRESENTATION(#9344,#9350); -#9344 = PRODUCT_DEFINITION_SHAPE('','',#9345); -#9345 = PRODUCT_DEFINITION('design','',#9346,#9349); -#9346 = PRODUCT_DEFINITION_FORMATION('','',#9347); -#9347 = PRODUCT('AccessoryConnector_LowerLeftScrew2', - 'AccessoryConnector_LowerLeftScrew2','',(#9348)); -#9348 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9349 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9350 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9351),#9404); -#9351 = MANIFOLD_SOLID_BREP('',#9352); -#9352 = CLOSED_SHELL('',(#9353,#9386,#9395)); -#9353 = ADVANCED_FACE('',(#9354),#9381,.T.); -#9354 = FACE_BOUND('',#9355,.T.); -#9355 = EDGE_LOOP('',(#9356,#9365,#9373,#9380)); -#9356 = ORIENTED_EDGE('',*,*,#9357,.F.); -#9357 = EDGE_CURVE('',#9358,#9358,#9360,.T.); -#9358 = VERTEX_POINT('',#9359); -#9359 = CARTESIAN_POINT('',(34.,-38.8,41.2)); -#9360 = CIRCLE('',#9361,0.8); -#9361 = AXIS2_PLACEMENT_3D('',#9362,#9363,#9364); -#9362 = CARTESIAN_POINT('',(34.,-38.8,42.)); -#9363 = DIRECTION('',(0.,-1.,0.)); -#9364 = DIRECTION('',(0.,-0.,-1.)); -#9365 = ORIENTED_EDGE('',*,*,#9366,.F.); -#9366 = EDGE_CURVE('',#9367,#9358,#9369,.T.); -#9367 = VERTEX_POINT('',#9368); -#9368 = CARTESIAN_POINT('',(34.,-38.1,41.2)); -#9369 = LINE('',#9370,#9371); -#9370 = CARTESIAN_POINT('',(34.,-38.1,41.2)); -#9371 = VECTOR('',#9372,1.); -#9372 = DIRECTION('',(0.,-1.,0.)); -#9373 = ORIENTED_EDGE('',*,*,#9374,.T.); -#9374 = EDGE_CURVE('',#9367,#9367,#9375,.T.); -#9375 = CIRCLE('',#9376,0.8); -#9376 = AXIS2_PLACEMENT_3D('',#9377,#9378,#9379); -#9377 = CARTESIAN_POINT('',(34.,-38.1,42.)); -#9378 = DIRECTION('',(0.,-1.,0.)); -#9379 = DIRECTION('',(0.,-0.,-1.)); -#9380 = ORIENTED_EDGE('',*,*,#9366,.T.); -#9381 = CYLINDRICAL_SURFACE('',#9382,0.8); -#9382 = AXIS2_PLACEMENT_3D('',#9383,#9384,#9385); -#9383 = CARTESIAN_POINT('',(34.,-38.1,42.)); -#9384 = DIRECTION('',(0.,-1.,0.)); -#9385 = DIRECTION('',(0.,-0.,-1.)); -#9386 = ADVANCED_FACE('',(#9387),#9390,.T.); -#9387 = FACE_BOUND('',#9388,.T.); -#9388 = EDGE_LOOP('',(#9389)); -#9389 = ORIENTED_EDGE('',*,*,#9357,.T.); -#9390 = PLANE('',#9391); -#9391 = AXIS2_PLACEMENT_3D('',#9392,#9393,#9394); -#9392 = CARTESIAN_POINT('',(34.,-38.8,42.)); -#9393 = DIRECTION('',(0.,-1.,0.)); -#9394 = DIRECTION('',(0.,-0.,-1.)); -#9395 = ADVANCED_FACE('',(#9396),#9399,.F.); -#9396 = FACE_BOUND('',#9397,.T.); -#9397 = EDGE_LOOP('',(#9398)); -#9398 = ORIENTED_EDGE('',*,*,#9374,.F.); -#9399 = PLANE('',#9400); -#9400 = AXIS2_PLACEMENT_3D('',#9401,#9402,#9403); -#9401 = CARTESIAN_POINT('',(34.,-38.1,42.)); -#9402 = DIRECTION('',(0.,-1.,0.)); -#9403 = DIRECTION('',(0.,-0.,-1.)); -#9404 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9408)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9405,#9406,#9407)) REPRESENTATION_CONTEXT +#7403 = ITEM_DEFINED_TRANSFORMATION('','',#11,#307); +#7404 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7405); +#7405 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('74', + 'AccessoryConnector_LowerRight','',#5,#7240,$); +#7406 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7242)); +#7407 = SHAPE_DEFINITION_REPRESENTATION(#7408,#7414); +#7408 = PRODUCT_DEFINITION_SHAPE('','',#7409); +#7409 = PRODUCT_DEFINITION('design','',#7410,#7413); +#7410 = PRODUCT_DEFINITION_FORMATION('','',#7411); +#7411 = PRODUCT('AccessoryConnector_LowerLeftScrew1', + 'AccessoryConnector_LowerLeftScrew1','',(#7412)); +#7412 = PRODUCT_CONTEXT('',#2,'mechanical'); +#7413 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#7414 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7415),#7468); +#7415 = MANIFOLD_SOLID_BREP('',#7416); +#7416 = CLOSED_SHELL('',(#7417,#7450,#7459)); +#7417 = ADVANCED_FACE('',(#7418),#7445,.T.); +#7418 = FACE_BOUND('',#7419,.T.); +#7419 = EDGE_LOOP('',(#7420,#7429,#7437,#7444)); +#7420 = ORIENTED_EDGE('',*,*,#7421,.F.); +#7421 = EDGE_CURVE('',#7422,#7422,#7424,.T.); +#7422 = VERTEX_POINT('',#7423); +#7423 = CARTESIAN_POINT('',(-43.5,39.4,27.2)); +#7424 = CIRCLE('',#7425,0.8); +#7425 = AXIS2_PLACEMENT_3D('',#7426,#7427,#7428); +#7426 = CARTESIAN_POINT('',(-43.5,39.4,28.)); +#7427 = DIRECTION('',(0.,-1.,0.)); +#7428 = DIRECTION('',(0.,-0.,-1.)); +#7429 = ORIENTED_EDGE('',*,*,#7430,.F.); +#7430 = EDGE_CURVE('',#7431,#7422,#7433,.T.); +#7431 = VERTEX_POINT('',#7432); +#7432 = CARTESIAN_POINT('',(-43.5,40.1,27.2)); +#7433 = LINE('',#7434,#7435); +#7434 = CARTESIAN_POINT('',(-43.5,40.1,27.2)); +#7435 = VECTOR('',#7436,1.); +#7436 = DIRECTION('',(0.,-1.,0.)); +#7437 = ORIENTED_EDGE('',*,*,#7438,.T.); +#7438 = EDGE_CURVE('',#7431,#7431,#7439,.T.); +#7439 = CIRCLE('',#7440,0.8); +#7440 = AXIS2_PLACEMENT_3D('',#7441,#7442,#7443); +#7441 = CARTESIAN_POINT('',(-43.5,40.1,28.)); +#7442 = DIRECTION('',(0.,-1.,0.)); +#7443 = DIRECTION('',(0.,-0.,-1.)); +#7444 = ORIENTED_EDGE('',*,*,#7430,.T.); +#7445 = CYLINDRICAL_SURFACE('',#7446,0.8); +#7446 = AXIS2_PLACEMENT_3D('',#7447,#7448,#7449); +#7447 = CARTESIAN_POINT('',(-43.5,40.1,28.)); +#7448 = DIRECTION('',(0.,-1.,0.)); +#7449 = DIRECTION('',(0.,-0.,-1.)); +#7450 = ADVANCED_FACE('',(#7451),#7454,.T.); +#7451 = FACE_BOUND('',#7452,.T.); +#7452 = EDGE_LOOP('',(#7453)); +#7453 = ORIENTED_EDGE('',*,*,#7421,.T.); +#7454 = PLANE('',#7455); +#7455 = AXIS2_PLACEMENT_3D('',#7456,#7457,#7458); +#7456 = CARTESIAN_POINT('',(-43.5,39.4,28.)); +#7457 = DIRECTION('',(0.,-1.,0.)); +#7458 = DIRECTION('',(0.,-0.,-1.)); +#7459 = ADVANCED_FACE('',(#7460),#7463,.F.); +#7460 = FACE_BOUND('',#7461,.T.); +#7461 = EDGE_LOOP('',(#7462)); +#7462 = ORIENTED_EDGE('',*,*,#7438,.F.); +#7463 = PLANE('',#7464); +#7464 = AXIS2_PLACEMENT_3D('',#7465,#7466,#7467); +#7465 = CARTESIAN_POINT('',(-43.5,40.1,28.)); +#7466 = DIRECTION('',(0.,-1.,0.)); +#7467 = DIRECTION('',(0.,-0.,-1.)); +#7468 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7472)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7469,#7470,#7471)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9405 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9406 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9407 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9408 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9405, +#7469 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7470 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7471 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7472 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7469, 'distance_accuracy_value','confusion accuracy'); -#9409 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9410,#9412); -#9410 = ( REPRESENTATION_RELATIONSHIP('','',#9350,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9411) +#7473 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7474,#7476); +#7474 = ( REPRESENTATION_RELATIONSHIP('','',#7414,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7475) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9411 = ITEM_DEFINED_TRANSFORMATION('','',#11,#411); -#9412 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9413); -#9413 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('100', - 'AccessoryConnector_LowerLeftScrew2','',#5,#9345,$); -#9414 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9347)); -#9415 = SHAPE_DEFINITION_REPRESENTATION(#9416,#9422); -#9416 = PRODUCT_DEFINITION_SHAPE('','',#9417); -#9417 = PRODUCT_DEFINITION('design','',#9418,#9421); -#9418 = PRODUCT_DEFINITION_FORMATION('','',#9419); -#9419 = PRODUCT('AccessoryConnector_LowerRightScrew1', - 'AccessoryConnector_LowerRightScrew1','',(#9420)); -#9420 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9421 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9422 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9423),#9476); -#9423 = MANIFOLD_SOLID_BREP('',#9424); -#9424 = CLOSED_SHELL('',(#9425,#9458,#9467)); -#9425 = ADVANCED_FACE('',(#9426),#9453,.T.); -#9426 = FACE_BOUND('',#9427,.T.); -#9427 = EDGE_LOOP('',(#9428,#9437,#9445,#9452)); -#9428 = ORIENTED_EDGE('',*,*,#9429,.F.); -#9429 = EDGE_CURVE('',#9430,#9430,#9432,.T.); -#9430 = VERTEX_POINT('',#9431); -#9431 = CARTESIAN_POINT('',(77.,-39.8,29.2)); -#9432 = CIRCLE('',#9433,0.8); -#9433 = AXIS2_PLACEMENT_3D('',#9434,#9435,#9436); -#9434 = CARTESIAN_POINT('',(77.,-39.8,30.)); -#9435 = DIRECTION('',(0.,-1.,0.)); -#9436 = DIRECTION('',(0.,-0.,-1.)); -#9437 = ORIENTED_EDGE('',*,*,#9438,.F.); -#9438 = EDGE_CURVE('',#9439,#9430,#9441,.T.); -#9439 = VERTEX_POINT('',#9440); -#9440 = CARTESIAN_POINT('',(77.,-39.1,29.2)); -#9441 = LINE('',#9442,#9443); -#9442 = CARTESIAN_POINT('',(77.,-39.1,29.2)); -#9443 = VECTOR('',#9444,1.); -#9444 = DIRECTION('',(0.,-1.,0.)); -#9445 = ORIENTED_EDGE('',*,*,#9446,.T.); -#9446 = EDGE_CURVE('',#9439,#9439,#9447,.T.); -#9447 = CIRCLE('',#9448,0.8); -#9448 = AXIS2_PLACEMENT_3D('',#9449,#9450,#9451); -#9449 = CARTESIAN_POINT('',(77.,-39.1,30.)); -#9450 = DIRECTION('',(0.,-1.,0.)); -#9451 = DIRECTION('',(0.,-0.,-1.)); -#9452 = ORIENTED_EDGE('',*,*,#9438,.T.); -#9453 = CYLINDRICAL_SURFACE('',#9454,0.8); -#9454 = AXIS2_PLACEMENT_3D('',#9455,#9456,#9457); -#9455 = CARTESIAN_POINT('',(77.,-39.1,30.)); -#9456 = DIRECTION('',(0.,-1.,0.)); -#9457 = DIRECTION('',(0.,-0.,-1.)); -#9458 = ADVANCED_FACE('',(#9459),#9462,.T.); -#9459 = FACE_BOUND('',#9460,.T.); -#9460 = EDGE_LOOP('',(#9461)); -#9461 = ORIENTED_EDGE('',*,*,#9429,.T.); -#9462 = PLANE('',#9463); -#9463 = AXIS2_PLACEMENT_3D('',#9464,#9465,#9466); -#9464 = CARTESIAN_POINT('',(77.,-39.8,30.)); -#9465 = DIRECTION('',(0.,-1.,0.)); -#9466 = DIRECTION('',(0.,-0.,-1.)); -#9467 = ADVANCED_FACE('',(#9468),#9471,.F.); -#9468 = FACE_BOUND('',#9469,.T.); -#9469 = EDGE_LOOP('',(#9470)); -#9470 = ORIENTED_EDGE('',*,*,#9446,.F.); -#9471 = PLANE('',#9472); -#9472 = AXIS2_PLACEMENT_3D('',#9473,#9474,#9475); -#9473 = CARTESIAN_POINT('',(77.,-39.1,30.)); -#9474 = DIRECTION('',(0.,-1.,0.)); -#9475 = DIRECTION('',(0.,-0.,-1.)); -#9476 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9480)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9477,#9478,#9479)) REPRESENTATION_CONTEXT +#7475 = ITEM_DEFINED_TRANSFORMATION('','',#11,#311); +#7476 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7477); +#7477 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('75', + 'AccessoryConnector_LowerLeftScrew1','',#5,#7409,$); +#7478 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7411)); +#7479 = SHAPE_DEFINITION_REPRESENTATION(#7480,#7486); +#7480 = PRODUCT_DEFINITION_SHAPE('','',#7481); +#7481 = PRODUCT_DEFINITION('design','',#7482,#7485); +#7482 = PRODUCT_DEFINITION_FORMATION('','',#7483); +#7483 = PRODUCT('AccessoryConnector_LowerLeftScrew2', + 'AccessoryConnector_LowerLeftScrew2','',(#7484)); +#7484 = PRODUCT_CONTEXT('',#2,'mechanical'); +#7485 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#7486 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7487),#7540); +#7487 = MANIFOLD_SOLID_BREP('',#7488); +#7488 = CLOSED_SHELL('',(#7489,#7522,#7531)); +#7489 = ADVANCED_FACE('',(#7490),#7517,.T.); +#7490 = FACE_BOUND('',#7491,.T.); +#7491 = EDGE_LOOP('',(#7492,#7501,#7509,#7516)); +#7492 = ORIENTED_EDGE('',*,*,#7493,.F.); +#7493 = EDGE_CURVE('',#7494,#7494,#7496,.T.); +#7494 = VERTEX_POINT('',#7495); +#7495 = CARTESIAN_POINT('',(-43.5,39.4,41.2)); +#7496 = CIRCLE('',#7497,0.8); +#7497 = AXIS2_PLACEMENT_3D('',#7498,#7499,#7500); +#7498 = CARTESIAN_POINT('',(-43.5,39.4,42.)); +#7499 = DIRECTION('',(0.,-1.,0.)); +#7500 = DIRECTION('',(0.,-0.,-1.)); +#7501 = ORIENTED_EDGE('',*,*,#7502,.F.); +#7502 = EDGE_CURVE('',#7503,#7494,#7505,.T.); +#7503 = VERTEX_POINT('',#7504); +#7504 = CARTESIAN_POINT('',(-43.5,40.1,41.2)); +#7505 = LINE('',#7506,#7507); +#7506 = CARTESIAN_POINT('',(-43.5,40.1,41.2)); +#7507 = VECTOR('',#7508,1.); +#7508 = DIRECTION('',(0.,-1.,0.)); +#7509 = ORIENTED_EDGE('',*,*,#7510,.T.); +#7510 = EDGE_CURVE('',#7503,#7503,#7511,.T.); +#7511 = CIRCLE('',#7512,0.8); +#7512 = AXIS2_PLACEMENT_3D('',#7513,#7514,#7515); +#7513 = CARTESIAN_POINT('',(-43.5,40.1,42.)); +#7514 = DIRECTION('',(0.,-1.,0.)); +#7515 = DIRECTION('',(0.,-0.,-1.)); +#7516 = ORIENTED_EDGE('',*,*,#7502,.T.); +#7517 = CYLINDRICAL_SURFACE('',#7518,0.8); +#7518 = AXIS2_PLACEMENT_3D('',#7519,#7520,#7521); +#7519 = CARTESIAN_POINT('',(-43.5,40.1,42.)); +#7520 = DIRECTION('',(0.,-1.,0.)); +#7521 = DIRECTION('',(0.,-0.,-1.)); +#7522 = ADVANCED_FACE('',(#7523),#7526,.T.); +#7523 = FACE_BOUND('',#7524,.T.); +#7524 = EDGE_LOOP('',(#7525)); +#7525 = ORIENTED_EDGE('',*,*,#7493,.T.); +#7526 = PLANE('',#7527); +#7527 = AXIS2_PLACEMENT_3D('',#7528,#7529,#7530); +#7528 = CARTESIAN_POINT('',(-43.5,39.4,42.)); +#7529 = DIRECTION('',(0.,-1.,0.)); +#7530 = DIRECTION('',(0.,-0.,-1.)); +#7531 = ADVANCED_FACE('',(#7532),#7535,.F.); +#7532 = FACE_BOUND('',#7533,.T.); +#7533 = EDGE_LOOP('',(#7534)); +#7534 = ORIENTED_EDGE('',*,*,#7510,.F.); +#7535 = PLANE('',#7536); +#7536 = AXIS2_PLACEMENT_3D('',#7537,#7538,#7539); +#7537 = CARTESIAN_POINT('',(-43.5,40.1,42.)); +#7538 = DIRECTION('',(0.,-1.,0.)); +#7539 = DIRECTION('',(0.,-0.,-1.)); +#7540 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7544)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7541,#7542,#7543)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9477 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9478 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9479 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9480 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9477, +#7541 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7542 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7543 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7544 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7541, 'distance_accuracy_value','confusion accuracy'); -#9481 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9482,#9484); -#9482 = ( REPRESENTATION_RELATIONSHIP('','',#9422,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9483) +#7545 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7546,#7548); +#7546 = ( REPRESENTATION_RELATIONSHIP('','',#7486,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7547) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9483 = ITEM_DEFINED_TRANSFORMATION('','',#11,#415); -#9484 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9485); -#9485 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('101', - 'AccessoryConnector_LowerRightScrew1','',#5,#9417,$); -#9486 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9419)); -#9487 = SHAPE_DEFINITION_REPRESENTATION(#9488,#9494); -#9488 = PRODUCT_DEFINITION_SHAPE('','',#9489); -#9489 = PRODUCT_DEFINITION('design','',#9490,#9493); -#9490 = PRODUCT_DEFINITION_FORMATION('','',#9491); -#9491 = PRODUCT('AccessoryConnector_LowerRightScrew2', - 'AccessoryConnector_LowerRightScrew2','',(#9492)); -#9492 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9493 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9494 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9495),#9548); -#9495 = MANIFOLD_SOLID_BREP('',#9496); -#9496 = CLOSED_SHELL('',(#9497,#9530,#9539)); -#9497 = ADVANCED_FACE('',(#9498),#9525,.T.); -#9498 = FACE_BOUND('',#9499,.T.); -#9499 = EDGE_LOOP('',(#9500,#9509,#9517,#9524)); -#9500 = ORIENTED_EDGE('',*,*,#9501,.F.); -#9501 = EDGE_CURVE('',#9502,#9502,#9504,.T.); -#9502 = VERTEX_POINT('',#9503); -#9503 = CARTESIAN_POINT('',(77.,-39.8,43.2)); -#9504 = CIRCLE('',#9505,0.8); -#9505 = AXIS2_PLACEMENT_3D('',#9506,#9507,#9508); -#9506 = CARTESIAN_POINT('',(77.,-39.8,44.)); -#9507 = DIRECTION('',(0.,-1.,0.)); -#9508 = DIRECTION('',(0.,-0.,-1.)); -#9509 = ORIENTED_EDGE('',*,*,#9510,.F.); -#9510 = EDGE_CURVE('',#9511,#9502,#9513,.T.); -#9511 = VERTEX_POINT('',#9512); -#9512 = CARTESIAN_POINT('',(77.,-39.1,43.2)); -#9513 = LINE('',#9514,#9515); -#9514 = CARTESIAN_POINT('',(77.,-39.1,43.2)); -#9515 = VECTOR('',#9516,1.); -#9516 = DIRECTION('',(0.,-1.,0.)); -#9517 = ORIENTED_EDGE('',*,*,#9518,.T.); -#9518 = EDGE_CURVE('',#9511,#9511,#9519,.T.); -#9519 = CIRCLE('',#9520,0.8); -#9520 = AXIS2_PLACEMENT_3D('',#9521,#9522,#9523); -#9521 = CARTESIAN_POINT('',(77.,-39.1,44.)); -#9522 = DIRECTION('',(0.,-1.,0.)); -#9523 = DIRECTION('',(0.,-0.,-1.)); -#9524 = ORIENTED_EDGE('',*,*,#9510,.T.); -#9525 = CYLINDRICAL_SURFACE('',#9526,0.8); -#9526 = AXIS2_PLACEMENT_3D('',#9527,#9528,#9529); -#9527 = CARTESIAN_POINT('',(77.,-39.1,44.)); -#9528 = DIRECTION('',(0.,-1.,0.)); -#9529 = DIRECTION('',(0.,-0.,-1.)); -#9530 = ADVANCED_FACE('',(#9531),#9534,.T.); -#9531 = FACE_BOUND('',#9532,.T.); -#9532 = EDGE_LOOP('',(#9533)); -#9533 = ORIENTED_EDGE('',*,*,#9501,.T.); -#9534 = PLANE('',#9535); -#9535 = AXIS2_PLACEMENT_3D('',#9536,#9537,#9538); -#9536 = CARTESIAN_POINT('',(77.,-39.8,44.)); -#9537 = DIRECTION('',(0.,-1.,0.)); -#9538 = DIRECTION('',(0.,-0.,-1.)); -#9539 = ADVANCED_FACE('',(#9540),#9543,.F.); -#9540 = FACE_BOUND('',#9541,.T.); -#9541 = EDGE_LOOP('',(#9542)); -#9542 = ORIENTED_EDGE('',*,*,#9518,.F.); -#9543 = PLANE('',#9544); -#9544 = AXIS2_PLACEMENT_3D('',#9545,#9546,#9547); -#9545 = CARTESIAN_POINT('',(77.,-39.1,44.)); -#9546 = DIRECTION('',(0.,-1.,0.)); -#9547 = DIRECTION('',(0.,-0.,-1.)); -#9548 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9552)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9549,#9550,#9551)) REPRESENTATION_CONTEXT +#7547 = ITEM_DEFINED_TRANSFORMATION('','',#11,#315); +#7548 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7549); +#7549 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('76', + 'AccessoryConnector_LowerLeftScrew2','',#5,#7481,$); +#7550 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7483)); +#7551 = SHAPE_DEFINITION_REPRESENTATION(#7552,#7558); +#7552 = PRODUCT_DEFINITION_SHAPE('','',#7553); +#7553 = PRODUCT_DEFINITION('design','',#7554,#7557); +#7554 = PRODUCT_DEFINITION_FORMATION('','',#7555); +#7555 = PRODUCT('AccessoryConnector_LowerRightScrew1', + 'AccessoryConnector_LowerRightScrew1','',(#7556)); +#7556 = PRODUCT_CONTEXT('',#2,'mechanical'); +#7557 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#7558 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7559),#7612); +#7559 = MANIFOLD_SOLID_BREP('',#7560); +#7560 = CLOSED_SHELL('',(#7561,#7594,#7603)); +#7561 = ADVANCED_FACE('',(#7562),#7589,.T.); +#7562 = FACE_BOUND('',#7563,.T.); +#7563 = EDGE_LOOP('',(#7564,#7573,#7581,#7588)); +#7564 = ORIENTED_EDGE('',*,*,#7565,.F.); +#7565 = EDGE_CURVE('',#7566,#7566,#7568,.T.); +#7566 = VERTEX_POINT('',#7567); +#7567 = CARTESIAN_POINT('',(-4.5,39.4,29.2)); +#7568 = CIRCLE('',#7569,0.8); +#7569 = AXIS2_PLACEMENT_3D('',#7570,#7571,#7572); +#7570 = CARTESIAN_POINT('',(-4.5,39.4,30.)); +#7571 = DIRECTION('',(0.,-1.,0.)); +#7572 = DIRECTION('',(0.,-0.,-1.)); +#7573 = ORIENTED_EDGE('',*,*,#7574,.F.); +#7574 = EDGE_CURVE('',#7575,#7566,#7577,.T.); +#7575 = VERTEX_POINT('',#7576); +#7576 = CARTESIAN_POINT('',(-4.5,40.1,29.2)); +#7577 = LINE('',#7578,#7579); +#7578 = CARTESIAN_POINT('',(-4.5,40.1,29.2)); +#7579 = VECTOR('',#7580,1.); +#7580 = DIRECTION('',(0.,-1.,0.)); +#7581 = ORIENTED_EDGE('',*,*,#7582,.T.); +#7582 = EDGE_CURVE('',#7575,#7575,#7583,.T.); +#7583 = CIRCLE('',#7584,0.8); +#7584 = AXIS2_PLACEMENT_3D('',#7585,#7586,#7587); +#7585 = CARTESIAN_POINT('',(-4.5,40.1,30.)); +#7586 = DIRECTION('',(0.,-1.,0.)); +#7587 = DIRECTION('',(0.,-0.,-1.)); +#7588 = ORIENTED_EDGE('',*,*,#7574,.T.); +#7589 = CYLINDRICAL_SURFACE('',#7590,0.8); +#7590 = AXIS2_PLACEMENT_3D('',#7591,#7592,#7593); +#7591 = CARTESIAN_POINT('',(-4.5,40.1,30.)); +#7592 = DIRECTION('',(0.,-1.,0.)); +#7593 = DIRECTION('',(0.,-0.,-1.)); +#7594 = ADVANCED_FACE('',(#7595),#7598,.T.); +#7595 = FACE_BOUND('',#7596,.T.); +#7596 = EDGE_LOOP('',(#7597)); +#7597 = ORIENTED_EDGE('',*,*,#7565,.T.); +#7598 = PLANE('',#7599); +#7599 = AXIS2_PLACEMENT_3D('',#7600,#7601,#7602); +#7600 = CARTESIAN_POINT('',(-4.5,39.4,30.)); +#7601 = DIRECTION('',(0.,-1.,0.)); +#7602 = DIRECTION('',(0.,-0.,-1.)); +#7603 = ADVANCED_FACE('',(#7604),#7607,.F.); +#7604 = FACE_BOUND('',#7605,.T.); +#7605 = EDGE_LOOP('',(#7606)); +#7606 = ORIENTED_EDGE('',*,*,#7582,.F.); +#7607 = PLANE('',#7608); +#7608 = AXIS2_PLACEMENT_3D('',#7609,#7610,#7611); +#7609 = CARTESIAN_POINT('',(-4.5,40.1,30.)); +#7610 = DIRECTION('',(0.,-1.,0.)); +#7611 = DIRECTION('',(0.,-0.,-1.)); +#7612 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7616)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7613,#7614,#7615)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9549 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9550 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9551 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9552 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9549, +#7613 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7614 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7615 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7616 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7613, 'distance_accuracy_value','confusion accuracy'); -#9553 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9554,#9556); -#9554 = ( REPRESENTATION_RELATIONSHIP('','',#9494,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9555) +#7617 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7618,#7620); +#7618 = ( REPRESENTATION_RELATIONSHIP('','',#7558,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7619) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9555 = ITEM_DEFINED_TRANSFORMATION('','',#11,#419); -#9556 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9557); -#9557 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('102', - 'AccessoryConnector_LowerRightScrew2','',#5,#9489,$); -#9558 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9491)); -#9559 = SHAPE_DEFINITION_REPRESENTATION(#9560,#9566); -#9560 = PRODUCT_DEFINITION_SHAPE('','',#9561); -#9561 = PRODUCT_DEFINITION('design','',#9562,#9565); -#9562 = PRODUCT_DEFINITION_FORMATION('','',#9563); -#9563 = PRODUCT('WireFrame_LeftBank_Left','WireFrame_LeftBank_Left','',( - #9564)); -#9564 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9565 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9566 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9567),#9717); -#9567 = MANIFOLD_SOLID_BREP('',#9568); -#9568 = CLOSED_SHELL('',(#9569,#9609,#9649,#9671,#9693,#9705)); -#9569 = ADVANCED_FACE('',(#9570),#9604,.F.); -#9570 = FACE_BOUND('',#9571,.F.); -#9571 = EDGE_LOOP('',(#9572,#9582,#9590,#9598)); -#9572 = ORIENTED_EDGE('',*,*,#9573,.F.); -#9573 = EDGE_CURVE('',#9574,#9576,#9578,.T.); -#9574 = VERTEX_POINT('',#9575); -#9575 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9576 = VERTEX_POINT('',#9577); -#9577 = CARTESIAN_POINT('',(31.725,-41.275,164.)); -#9578 = LINE('',#9579,#9580); -#9579 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9580 = VECTOR('',#9581,1.); -#9581 = DIRECTION('',(0.,0.,1.)); -#9582 = ORIENTED_EDGE('',*,*,#9583,.T.); -#9583 = EDGE_CURVE('',#9574,#9584,#9586,.T.); -#9584 = VERTEX_POINT('',#9585); -#9585 = CARTESIAN_POINT('',(31.725,-40.725,34.)); -#9586 = LINE('',#9587,#9588); -#9587 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9588 = VECTOR('',#9589,1.); -#9589 = DIRECTION('',(-0.,1.,0.)); -#9590 = ORIENTED_EDGE('',*,*,#9591,.T.); -#9591 = EDGE_CURVE('',#9584,#9592,#9594,.T.); -#9592 = VERTEX_POINT('',#9593); -#9593 = CARTESIAN_POINT('',(31.725,-40.725,164.)); -#9594 = LINE('',#9595,#9596); -#9595 = CARTESIAN_POINT('',(31.725,-40.725,34.)); -#9596 = VECTOR('',#9597,1.); -#9597 = DIRECTION('',(0.,0.,1.)); -#9598 = ORIENTED_EDGE('',*,*,#9599,.F.); -#9599 = EDGE_CURVE('',#9576,#9592,#9600,.T.); -#9600 = LINE('',#9601,#9602); -#9601 = CARTESIAN_POINT('',(31.725,-41.275,164.)); -#9602 = VECTOR('',#9603,1.); -#9603 = DIRECTION('',(-0.,1.,0.)); -#9604 = PLANE('',#9605); -#9605 = AXIS2_PLACEMENT_3D('',#9606,#9607,#9608); -#9606 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9607 = DIRECTION('',(1.,0.,-0.)); -#9608 = DIRECTION('',(0.,0.,1.)); -#9609 = ADVANCED_FACE('',(#9610),#9644,.T.); -#9610 = FACE_BOUND('',#9611,.T.); -#9611 = EDGE_LOOP('',(#9612,#9622,#9630,#9638)); -#9612 = ORIENTED_EDGE('',*,*,#9613,.F.); -#9613 = EDGE_CURVE('',#9614,#9616,#9618,.T.); -#9614 = VERTEX_POINT('',#9615); -#9615 = CARTESIAN_POINT('',(32.275,-41.275,34.)); -#9616 = VERTEX_POINT('',#9617); -#9617 = CARTESIAN_POINT('',(32.275,-41.275,164.)); -#9618 = LINE('',#9619,#9620); -#9619 = CARTESIAN_POINT('',(32.275,-41.275,34.)); -#9620 = VECTOR('',#9621,1.); -#9621 = DIRECTION('',(0.,0.,1.)); -#9622 = ORIENTED_EDGE('',*,*,#9623,.T.); -#9623 = EDGE_CURVE('',#9614,#9624,#9626,.T.); -#9624 = VERTEX_POINT('',#9625); -#9625 = CARTESIAN_POINT('',(32.275,-40.725,34.)); -#9626 = LINE('',#9627,#9628); -#9627 = CARTESIAN_POINT('',(32.275,-41.275,34.)); -#9628 = VECTOR('',#9629,1.); -#9629 = DIRECTION('',(-0.,1.,0.)); -#9630 = ORIENTED_EDGE('',*,*,#9631,.T.); -#9631 = EDGE_CURVE('',#9624,#9632,#9634,.T.); -#9632 = VERTEX_POINT('',#9633); -#9633 = CARTESIAN_POINT('',(32.275,-40.725,164.)); -#9634 = LINE('',#9635,#9636); -#9635 = CARTESIAN_POINT('',(32.275,-40.725,34.)); -#9636 = VECTOR('',#9637,1.); -#9637 = DIRECTION('',(0.,0.,1.)); -#9638 = ORIENTED_EDGE('',*,*,#9639,.F.); -#9639 = EDGE_CURVE('',#9616,#9632,#9640,.T.); -#9640 = LINE('',#9641,#9642); -#9641 = CARTESIAN_POINT('',(32.275,-41.275,164.)); -#9642 = VECTOR('',#9643,1.); -#9643 = DIRECTION('',(-0.,1.,0.)); -#9644 = PLANE('',#9645); -#9645 = AXIS2_PLACEMENT_3D('',#9646,#9647,#9648); -#9646 = CARTESIAN_POINT('',(32.275,-41.275,34.)); -#9647 = DIRECTION('',(1.,0.,-0.)); -#9648 = DIRECTION('',(0.,0.,1.)); -#9649 = ADVANCED_FACE('',(#9650),#9666,.F.); -#9650 = FACE_BOUND('',#9651,.F.); -#9651 = EDGE_LOOP('',(#9652,#9658,#9659,#9665)); -#9652 = ORIENTED_EDGE('',*,*,#9653,.F.); -#9653 = EDGE_CURVE('',#9574,#9614,#9654,.T.); -#9654 = LINE('',#9655,#9656); -#9655 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9656 = VECTOR('',#9657,1.); -#9657 = DIRECTION('',(1.,0.,-0.)); -#9658 = ORIENTED_EDGE('',*,*,#9573,.T.); -#9659 = ORIENTED_EDGE('',*,*,#9660,.T.); -#9660 = EDGE_CURVE('',#9576,#9616,#9661,.T.); -#9661 = LINE('',#9662,#9663); -#9662 = CARTESIAN_POINT('',(31.725,-41.275,164.)); -#9663 = VECTOR('',#9664,1.); -#9664 = DIRECTION('',(1.,0.,-0.)); -#9665 = ORIENTED_EDGE('',*,*,#9613,.F.); -#9666 = PLANE('',#9667); -#9667 = AXIS2_PLACEMENT_3D('',#9668,#9669,#9670); -#9668 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9669 = DIRECTION('',(-0.,1.,0.)); -#9670 = DIRECTION('',(0.,0.,1.)); -#9671 = ADVANCED_FACE('',(#9672),#9688,.T.); -#9672 = FACE_BOUND('',#9673,.T.); -#9673 = EDGE_LOOP('',(#9674,#9680,#9681,#9687)); -#9674 = ORIENTED_EDGE('',*,*,#9675,.F.); -#9675 = EDGE_CURVE('',#9584,#9624,#9676,.T.); -#9676 = LINE('',#9677,#9678); -#9677 = CARTESIAN_POINT('',(31.725,-40.725,34.)); -#9678 = VECTOR('',#9679,1.); -#9679 = DIRECTION('',(1.,0.,-0.)); -#9680 = ORIENTED_EDGE('',*,*,#9591,.T.); -#9681 = ORIENTED_EDGE('',*,*,#9682,.T.); -#9682 = EDGE_CURVE('',#9592,#9632,#9683,.T.); -#9683 = LINE('',#9684,#9685); -#9684 = CARTESIAN_POINT('',(31.725,-40.725,164.)); -#9685 = VECTOR('',#9686,1.); -#9686 = DIRECTION('',(1.,0.,-0.)); -#9687 = ORIENTED_EDGE('',*,*,#9631,.F.); -#9688 = PLANE('',#9689); -#9689 = AXIS2_PLACEMENT_3D('',#9690,#9691,#9692); -#9690 = CARTESIAN_POINT('',(31.725,-40.725,34.)); -#9691 = DIRECTION('',(-0.,1.,0.)); -#9692 = DIRECTION('',(0.,0.,1.)); -#9693 = ADVANCED_FACE('',(#9694),#9700,.F.); -#9694 = FACE_BOUND('',#9695,.F.); -#9695 = EDGE_LOOP('',(#9696,#9697,#9698,#9699)); -#9696 = ORIENTED_EDGE('',*,*,#9583,.F.); -#9697 = ORIENTED_EDGE('',*,*,#9653,.T.); -#9698 = ORIENTED_EDGE('',*,*,#9623,.T.); -#9699 = ORIENTED_EDGE('',*,*,#9675,.F.); -#9700 = PLANE('',#9701); -#9701 = AXIS2_PLACEMENT_3D('',#9702,#9703,#9704); -#9702 = CARTESIAN_POINT('',(31.725,-41.275,34.)); -#9703 = DIRECTION('',(0.,0.,1.)); -#9704 = DIRECTION('',(1.,0.,-0.)); -#9705 = ADVANCED_FACE('',(#9706),#9712,.T.); -#9706 = FACE_BOUND('',#9707,.T.); -#9707 = EDGE_LOOP('',(#9708,#9709,#9710,#9711)); -#9708 = ORIENTED_EDGE('',*,*,#9599,.F.); -#9709 = ORIENTED_EDGE('',*,*,#9660,.T.); -#9710 = ORIENTED_EDGE('',*,*,#9639,.T.); -#9711 = ORIENTED_EDGE('',*,*,#9682,.F.); -#9712 = PLANE('',#9713); -#9713 = AXIS2_PLACEMENT_3D('',#9714,#9715,#9716); -#9714 = CARTESIAN_POINT('',(31.725,-41.275,164.)); -#9715 = DIRECTION('',(0.,0.,1.)); -#9716 = DIRECTION('',(1.,0.,-0.)); -#9717 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9721)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9718,#9719,#9720)) REPRESENTATION_CONTEXT +#7619 = ITEM_DEFINED_TRANSFORMATION('','',#11,#319); +#7620 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7621); +#7621 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('77', + 'AccessoryConnector_LowerRightScrew1','',#5,#7553,$); +#7622 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7555)); +#7623 = SHAPE_DEFINITION_REPRESENTATION(#7624,#7630); +#7624 = PRODUCT_DEFINITION_SHAPE('','',#7625); +#7625 = PRODUCT_DEFINITION('design','',#7626,#7629); +#7626 = PRODUCT_DEFINITION_FORMATION('','',#7627); +#7627 = PRODUCT('AccessoryConnector_LowerRightScrew2', + 'AccessoryConnector_LowerRightScrew2','',(#7628)); +#7628 = PRODUCT_CONTEXT('',#2,'mechanical'); +#7629 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#7630 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#7631),#7684); +#7631 = MANIFOLD_SOLID_BREP('',#7632); +#7632 = CLOSED_SHELL('',(#7633,#7666,#7675)); +#7633 = ADVANCED_FACE('',(#7634),#7661,.T.); +#7634 = FACE_BOUND('',#7635,.T.); +#7635 = EDGE_LOOP('',(#7636,#7645,#7653,#7660)); +#7636 = ORIENTED_EDGE('',*,*,#7637,.F.); +#7637 = EDGE_CURVE('',#7638,#7638,#7640,.T.); +#7638 = VERTEX_POINT('',#7639); +#7639 = CARTESIAN_POINT('',(-4.5,39.4,43.2)); +#7640 = CIRCLE('',#7641,0.8); +#7641 = AXIS2_PLACEMENT_3D('',#7642,#7643,#7644); +#7642 = CARTESIAN_POINT('',(-4.5,39.4,44.)); +#7643 = DIRECTION('',(0.,-1.,0.)); +#7644 = DIRECTION('',(0.,-0.,-1.)); +#7645 = ORIENTED_EDGE('',*,*,#7646,.F.); +#7646 = EDGE_CURVE('',#7647,#7638,#7649,.T.); +#7647 = VERTEX_POINT('',#7648); +#7648 = CARTESIAN_POINT('',(-4.5,40.1,43.2)); +#7649 = LINE('',#7650,#7651); +#7650 = CARTESIAN_POINT('',(-4.5,40.1,43.2)); +#7651 = VECTOR('',#7652,1.); +#7652 = DIRECTION('',(0.,-1.,0.)); +#7653 = ORIENTED_EDGE('',*,*,#7654,.T.); +#7654 = EDGE_CURVE('',#7647,#7647,#7655,.T.); +#7655 = CIRCLE('',#7656,0.8); +#7656 = AXIS2_PLACEMENT_3D('',#7657,#7658,#7659); +#7657 = CARTESIAN_POINT('',(-4.5,40.1,44.)); +#7658 = DIRECTION('',(0.,-1.,0.)); +#7659 = DIRECTION('',(0.,-0.,-1.)); +#7660 = ORIENTED_EDGE('',*,*,#7646,.T.); +#7661 = CYLINDRICAL_SURFACE('',#7662,0.8); +#7662 = AXIS2_PLACEMENT_3D('',#7663,#7664,#7665); +#7663 = CARTESIAN_POINT('',(-4.5,40.1,44.)); +#7664 = DIRECTION('',(0.,-1.,0.)); +#7665 = DIRECTION('',(0.,-0.,-1.)); +#7666 = ADVANCED_FACE('',(#7667),#7670,.T.); +#7667 = FACE_BOUND('',#7668,.T.); +#7668 = EDGE_LOOP('',(#7669)); +#7669 = ORIENTED_EDGE('',*,*,#7637,.T.); +#7670 = PLANE('',#7671); +#7671 = AXIS2_PLACEMENT_3D('',#7672,#7673,#7674); +#7672 = CARTESIAN_POINT('',(-4.5,39.4,44.)); +#7673 = DIRECTION('',(0.,-1.,0.)); +#7674 = DIRECTION('',(0.,-0.,-1.)); +#7675 = ADVANCED_FACE('',(#7676),#7679,.F.); +#7676 = FACE_BOUND('',#7677,.T.); +#7677 = EDGE_LOOP('',(#7678)); +#7678 = ORIENTED_EDGE('',*,*,#7654,.F.); +#7679 = PLANE('',#7680); +#7680 = AXIS2_PLACEMENT_3D('',#7681,#7682,#7683); +#7681 = CARTESIAN_POINT('',(-4.5,40.1,44.)); +#7682 = DIRECTION('',(0.,-1.,0.)); +#7683 = DIRECTION('',(0.,-0.,-1.)); +#7684 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7688)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#7685,#7686,#7687)) REPRESENTATION_CONTEXT ('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9718 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9719 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9720 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9721 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9718, - 'distance_accuracy_value','confusion accuracy'); -#9722 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9723,#9725); -#9723 = ( REPRESENTATION_RELATIONSHIP('','',#9566,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9724) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9724 = ITEM_DEFINED_TRANSFORMATION('','',#11,#423); -#9725 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9726); -#9726 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('103','WireFrame_LeftBank_Left', - '',#5,#9561,$); -#9727 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9563)); -#9728 = SHAPE_DEFINITION_REPRESENTATION(#9729,#9735); -#9729 = PRODUCT_DEFINITION_SHAPE('','',#9730); -#9730 = PRODUCT_DEFINITION('design','',#9731,#9734); -#9731 = PRODUCT_DEFINITION_FORMATION('','',#9732); -#9732 = PRODUCT('WireFrame_LeftBank_Right','WireFrame_LeftBank_Right','' - ,(#9733)); -#9733 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9734 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9735 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9736),#9886); -#9736 = MANIFOLD_SOLID_BREP('',#9737); -#9737 = CLOSED_SHELL('',(#9738,#9778,#9818,#9840,#9862,#9874)); -#9738 = ADVANCED_FACE('',(#9739),#9773,.F.); -#9739 = FACE_BOUND('',#9740,.F.); -#9740 = EDGE_LOOP('',(#9741,#9751,#9759,#9767)); -#9741 = ORIENTED_EDGE('',*,*,#9742,.F.); -#9742 = EDGE_CURVE('',#9743,#9745,#9747,.T.); -#9743 = VERTEX_POINT('',#9744); -#9744 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9745 = VERTEX_POINT('',#9746); -#9746 = CARTESIAN_POINT('',(58.725,-41.275,164.)); -#9747 = LINE('',#9748,#9749); -#9748 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9749 = VECTOR('',#9750,1.); -#9750 = DIRECTION('',(0.,0.,1.)); -#9751 = ORIENTED_EDGE('',*,*,#9752,.T.); -#9752 = EDGE_CURVE('',#9743,#9753,#9755,.T.); -#9753 = VERTEX_POINT('',#9754); -#9754 = CARTESIAN_POINT('',(58.725,-40.725,34.)); -#9755 = LINE('',#9756,#9757); -#9756 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9757 = VECTOR('',#9758,1.); -#9758 = DIRECTION('',(-0.,1.,0.)); -#9759 = ORIENTED_EDGE('',*,*,#9760,.T.); -#9760 = EDGE_CURVE('',#9753,#9761,#9763,.T.); -#9761 = VERTEX_POINT('',#9762); -#9762 = CARTESIAN_POINT('',(58.725,-40.725,164.)); -#9763 = LINE('',#9764,#9765); -#9764 = CARTESIAN_POINT('',(58.725,-40.725,34.)); -#9765 = VECTOR('',#9766,1.); -#9766 = DIRECTION('',(0.,0.,1.)); -#9767 = ORIENTED_EDGE('',*,*,#9768,.F.); -#9768 = EDGE_CURVE('',#9745,#9761,#9769,.T.); -#9769 = LINE('',#9770,#9771); -#9770 = CARTESIAN_POINT('',(58.725,-41.275,164.)); -#9771 = VECTOR('',#9772,1.); -#9772 = DIRECTION('',(-0.,1.,0.)); -#9773 = PLANE('',#9774); -#9774 = AXIS2_PLACEMENT_3D('',#9775,#9776,#9777); -#9775 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9776 = DIRECTION('',(1.,0.,-0.)); -#9777 = DIRECTION('',(0.,0.,1.)); -#9778 = ADVANCED_FACE('',(#9779),#9813,.T.); -#9779 = FACE_BOUND('',#9780,.T.); -#9780 = EDGE_LOOP('',(#9781,#9791,#9799,#9807)); -#9781 = ORIENTED_EDGE('',*,*,#9782,.F.); -#9782 = EDGE_CURVE('',#9783,#9785,#9787,.T.); -#9783 = VERTEX_POINT('',#9784); -#9784 = CARTESIAN_POINT('',(59.275,-41.275,34.)); -#9785 = VERTEX_POINT('',#9786); -#9786 = CARTESIAN_POINT('',(59.275,-41.275,164.)); -#9787 = LINE('',#9788,#9789); -#9788 = CARTESIAN_POINT('',(59.275,-41.275,34.)); -#9789 = VECTOR('',#9790,1.); -#9790 = DIRECTION('',(0.,0.,1.)); -#9791 = ORIENTED_EDGE('',*,*,#9792,.T.); -#9792 = EDGE_CURVE('',#9783,#9793,#9795,.T.); -#9793 = VERTEX_POINT('',#9794); -#9794 = CARTESIAN_POINT('',(59.275,-40.725,34.)); -#9795 = LINE('',#9796,#9797); -#9796 = CARTESIAN_POINT('',(59.275,-41.275,34.)); -#9797 = VECTOR('',#9798,1.); -#9798 = DIRECTION('',(-0.,1.,0.)); -#9799 = ORIENTED_EDGE('',*,*,#9800,.T.); -#9800 = EDGE_CURVE('',#9793,#9801,#9803,.T.); -#9801 = VERTEX_POINT('',#9802); -#9802 = CARTESIAN_POINT('',(59.275,-40.725,164.)); -#9803 = LINE('',#9804,#9805); -#9804 = CARTESIAN_POINT('',(59.275,-40.725,34.)); -#9805 = VECTOR('',#9806,1.); -#9806 = DIRECTION('',(0.,0.,1.)); -#9807 = ORIENTED_EDGE('',*,*,#9808,.F.); -#9808 = EDGE_CURVE('',#9785,#9801,#9809,.T.); -#9809 = LINE('',#9810,#9811); -#9810 = CARTESIAN_POINT('',(59.275,-41.275,164.)); -#9811 = VECTOR('',#9812,1.); -#9812 = DIRECTION('',(-0.,1.,0.)); -#9813 = PLANE('',#9814); -#9814 = AXIS2_PLACEMENT_3D('',#9815,#9816,#9817); -#9815 = CARTESIAN_POINT('',(59.275,-41.275,34.)); -#9816 = DIRECTION('',(1.,0.,-0.)); -#9817 = DIRECTION('',(0.,0.,1.)); -#9818 = ADVANCED_FACE('',(#9819),#9835,.F.); -#9819 = FACE_BOUND('',#9820,.F.); -#9820 = EDGE_LOOP('',(#9821,#9827,#9828,#9834)); -#9821 = ORIENTED_EDGE('',*,*,#9822,.F.); -#9822 = EDGE_CURVE('',#9743,#9783,#9823,.T.); -#9823 = LINE('',#9824,#9825); -#9824 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9825 = VECTOR('',#9826,1.); -#9826 = DIRECTION('',(1.,0.,-0.)); -#9827 = ORIENTED_EDGE('',*,*,#9742,.T.); -#9828 = ORIENTED_EDGE('',*,*,#9829,.T.); -#9829 = EDGE_CURVE('',#9745,#9785,#9830,.T.); -#9830 = LINE('',#9831,#9832); -#9831 = CARTESIAN_POINT('',(58.725,-41.275,164.)); -#9832 = VECTOR('',#9833,1.); -#9833 = DIRECTION('',(1.,0.,-0.)); -#9834 = ORIENTED_EDGE('',*,*,#9782,.F.); -#9835 = PLANE('',#9836); -#9836 = AXIS2_PLACEMENT_3D('',#9837,#9838,#9839); -#9837 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9838 = DIRECTION('',(-0.,1.,0.)); -#9839 = DIRECTION('',(0.,0.,1.)); -#9840 = ADVANCED_FACE('',(#9841),#9857,.T.); -#9841 = FACE_BOUND('',#9842,.T.); -#9842 = EDGE_LOOP('',(#9843,#9849,#9850,#9856)); -#9843 = ORIENTED_EDGE('',*,*,#9844,.F.); -#9844 = EDGE_CURVE('',#9753,#9793,#9845,.T.); -#9845 = LINE('',#9846,#9847); -#9846 = CARTESIAN_POINT('',(58.725,-40.725,34.)); -#9847 = VECTOR('',#9848,1.); -#9848 = DIRECTION('',(1.,0.,-0.)); -#9849 = ORIENTED_EDGE('',*,*,#9760,.T.); -#9850 = ORIENTED_EDGE('',*,*,#9851,.T.); -#9851 = EDGE_CURVE('',#9761,#9801,#9852,.T.); -#9852 = LINE('',#9853,#9854); -#9853 = CARTESIAN_POINT('',(58.725,-40.725,164.)); -#9854 = VECTOR('',#9855,1.); -#9855 = DIRECTION('',(1.,0.,-0.)); -#9856 = ORIENTED_EDGE('',*,*,#9800,.F.); -#9857 = PLANE('',#9858); -#9858 = AXIS2_PLACEMENT_3D('',#9859,#9860,#9861); -#9859 = CARTESIAN_POINT('',(58.725,-40.725,34.)); -#9860 = DIRECTION('',(-0.,1.,0.)); -#9861 = DIRECTION('',(0.,0.,1.)); -#9862 = ADVANCED_FACE('',(#9863),#9869,.F.); -#9863 = FACE_BOUND('',#9864,.F.); -#9864 = EDGE_LOOP('',(#9865,#9866,#9867,#9868)); -#9865 = ORIENTED_EDGE('',*,*,#9752,.F.); -#9866 = ORIENTED_EDGE('',*,*,#9822,.T.); -#9867 = ORIENTED_EDGE('',*,*,#9792,.T.); -#9868 = ORIENTED_EDGE('',*,*,#9844,.F.); -#9869 = PLANE('',#9870); -#9870 = AXIS2_PLACEMENT_3D('',#9871,#9872,#9873); -#9871 = CARTESIAN_POINT('',(58.725,-41.275,34.)); -#9872 = DIRECTION('',(0.,0.,1.)); -#9873 = DIRECTION('',(1.,0.,-0.)); -#9874 = ADVANCED_FACE('',(#9875),#9881,.T.); -#9875 = FACE_BOUND('',#9876,.T.); -#9876 = EDGE_LOOP('',(#9877,#9878,#9879,#9880)); -#9877 = ORIENTED_EDGE('',*,*,#9768,.F.); -#9878 = ORIENTED_EDGE('',*,*,#9829,.T.); -#9879 = ORIENTED_EDGE('',*,*,#9808,.T.); -#9880 = ORIENTED_EDGE('',*,*,#9851,.F.); -#9881 = PLANE('',#9882); -#9882 = AXIS2_PLACEMENT_3D('',#9883,#9884,#9885); -#9883 = CARTESIAN_POINT('',(58.725,-41.275,164.)); -#9884 = DIRECTION('',(0.,0.,1.)); -#9885 = DIRECTION('',(1.,0.,-0.)); -#9886 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9890)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#9887,#9888,#9889)) REPRESENTATION_CONTEXT -('Context #1','3D Context with UNIT and UNCERTAINTY') ); -#9887 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#9888 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#9889 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#9890 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#9887, - 'distance_accuracy_value','confusion accuracy'); -#9891 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#9892,#9894); -#9892 = ( REPRESENTATION_RELATIONSHIP('','',#9735,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#9893) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#9893 = ITEM_DEFINED_TRANSFORMATION('','',#11,#427); -#9894 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #9895); -#9895 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('104','WireFrame_LeftBank_Right', - '',#5,#9730,$); -#9896 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9732)); -#9897 = SHAPE_DEFINITION_REPRESENTATION(#9898,#9904); -#9898 = PRODUCT_DEFINITION_SHAPE('','',#9899); -#9899 = PRODUCT_DEFINITION('design','',#9900,#9903); -#9900 = PRODUCT_DEFINITION_FORMATION('','',#9901); -#9901 = PRODUCT('WireFrame_LeftBank_Top','WireFrame_LeftBank_Top','',( - #9902)); -#9902 = PRODUCT_CONTEXT('',#2,'mechanical'); -#9903 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#9904 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#9905),#10055); -#9905 = MANIFOLD_SOLID_BREP('',#9906); -#9906 = CLOSED_SHELL('',(#9907,#9947,#9987,#10009,#10031,#10043)); -#9907 = ADVANCED_FACE('',(#9908),#9942,.F.); -#9908 = FACE_BOUND('',#9909,.F.); -#9909 = EDGE_LOOP('',(#9910,#9920,#9928,#9936)); -#9910 = ORIENTED_EDGE('',*,*,#9911,.F.); -#9911 = EDGE_CURVE('',#9912,#9914,#9916,.T.); -#9912 = VERTEX_POINT('',#9913); -#9913 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#9914 = VERTEX_POINT('',#9915); -#9915 = CARTESIAN_POINT('',(32.,-41.275,164.275)); -#9916 = LINE('',#9917,#9918); -#9917 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#9918 = VECTOR('',#9919,1.); -#9919 = DIRECTION('',(0.,0.,1.)); -#9920 = ORIENTED_EDGE('',*,*,#9921,.T.); -#9921 = EDGE_CURVE('',#9912,#9922,#9924,.T.); -#9922 = VERTEX_POINT('',#9923); -#9923 = CARTESIAN_POINT('',(32.,-40.725,163.725)); -#9924 = LINE('',#9925,#9926); -#9925 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#9926 = VECTOR('',#9927,1.); -#9927 = DIRECTION('',(-0.,1.,0.)); -#9928 = ORIENTED_EDGE('',*,*,#9929,.T.); -#9929 = EDGE_CURVE('',#9922,#9930,#9932,.T.); -#9930 = VERTEX_POINT('',#9931); -#9931 = CARTESIAN_POINT('',(32.,-40.725,164.275)); -#9932 = LINE('',#9933,#9934); -#9933 = CARTESIAN_POINT('',(32.,-40.725,163.725)); -#9934 = VECTOR('',#9935,1.); -#9935 = DIRECTION('',(0.,0.,1.)); -#9936 = ORIENTED_EDGE('',*,*,#9937,.F.); -#9937 = EDGE_CURVE('',#9914,#9930,#9938,.T.); -#9938 = LINE('',#9939,#9940); -#9939 = CARTESIAN_POINT('',(32.,-41.275,164.275)); -#9940 = VECTOR('',#9941,1.); -#9941 = DIRECTION('',(-0.,1.,0.)); -#9942 = PLANE('',#9943); -#9943 = AXIS2_PLACEMENT_3D('',#9944,#9945,#9946); -#9944 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#9945 = DIRECTION('',(1.,0.,-0.)); -#9946 = DIRECTION('',(0.,0.,1.)); -#9947 = ADVANCED_FACE('',(#9948),#9982,.T.); -#9948 = FACE_BOUND('',#9949,.T.); -#9949 = EDGE_LOOP('',(#9950,#9960,#9968,#9976)); -#9950 = ORIENTED_EDGE('',*,*,#9951,.F.); -#9951 = EDGE_CURVE('',#9952,#9954,#9956,.T.); -#9952 = VERTEX_POINT('',#9953); -#9953 = CARTESIAN_POINT('',(59.,-41.275,163.725)); -#9954 = VERTEX_POINT('',#9955); -#9955 = CARTESIAN_POINT('',(59.,-41.275,164.275)); -#9956 = LINE('',#9957,#9958); -#9957 = CARTESIAN_POINT('',(59.,-41.275,163.725)); -#9958 = VECTOR('',#9959,1.); -#9959 = DIRECTION('',(0.,0.,1.)); -#9960 = ORIENTED_EDGE('',*,*,#9961,.T.); -#9961 = EDGE_CURVE('',#9952,#9962,#9964,.T.); -#9962 = VERTEX_POINT('',#9963); -#9963 = CARTESIAN_POINT('',(59.,-40.725,163.725)); -#9964 = LINE('',#9965,#9966); -#9965 = CARTESIAN_POINT('',(59.,-41.275,163.725)); -#9966 = VECTOR('',#9967,1.); -#9967 = DIRECTION('',(-0.,1.,0.)); -#9968 = ORIENTED_EDGE('',*,*,#9969,.T.); -#9969 = EDGE_CURVE('',#9962,#9970,#9972,.T.); -#9970 = VERTEX_POINT('',#9971); -#9971 = CARTESIAN_POINT('',(59.,-40.725,164.275)); -#9972 = LINE('',#9973,#9974); -#9973 = CARTESIAN_POINT('',(59.,-40.725,163.725)); -#9974 = VECTOR('',#9975,1.); -#9975 = DIRECTION('',(0.,0.,1.)); -#9976 = ORIENTED_EDGE('',*,*,#9977,.F.); -#9977 = EDGE_CURVE('',#9954,#9970,#9978,.T.); -#9978 = LINE('',#9979,#9980); -#9979 = CARTESIAN_POINT('',(59.,-41.275,164.275)); -#9980 = VECTOR('',#9981,1.); -#9981 = DIRECTION('',(-0.,1.,0.)); -#9982 = PLANE('',#9983); -#9983 = AXIS2_PLACEMENT_3D('',#9984,#9985,#9986); -#9984 = CARTESIAN_POINT('',(59.,-41.275,163.725)); -#9985 = DIRECTION('',(1.,0.,-0.)); -#9986 = DIRECTION('',(0.,0.,1.)); -#9987 = ADVANCED_FACE('',(#9988),#10004,.F.); -#9988 = FACE_BOUND('',#9989,.F.); -#9989 = EDGE_LOOP('',(#9990,#9996,#9997,#10003)); -#9990 = ORIENTED_EDGE('',*,*,#9991,.F.); -#9991 = EDGE_CURVE('',#9912,#9952,#9992,.T.); -#9992 = LINE('',#9993,#9994); -#9993 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#9994 = VECTOR('',#9995,1.); -#9995 = DIRECTION('',(1.,0.,-0.)); -#9996 = ORIENTED_EDGE('',*,*,#9911,.T.); -#9997 = ORIENTED_EDGE('',*,*,#9998,.T.); -#9998 = EDGE_CURVE('',#9914,#9954,#9999,.T.); -#9999 = LINE('',#10000,#10001); -#10000 = CARTESIAN_POINT('',(32.,-41.275,164.275)); -#10001 = VECTOR('',#10002,1.); -#10002 = DIRECTION('',(1.,0.,-0.)); -#10003 = ORIENTED_EDGE('',*,*,#9951,.F.); -#10004 = PLANE('',#10005); -#10005 = AXIS2_PLACEMENT_3D('',#10006,#10007,#10008); -#10006 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#10007 = DIRECTION('',(-0.,1.,0.)); -#10008 = DIRECTION('',(0.,0.,1.)); -#10009 = ADVANCED_FACE('',(#10010),#10026,.T.); -#10010 = FACE_BOUND('',#10011,.T.); -#10011 = EDGE_LOOP('',(#10012,#10018,#10019,#10025)); -#10012 = ORIENTED_EDGE('',*,*,#10013,.F.); -#10013 = EDGE_CURVE('',#9922,#9962,#10014,.T.); -#10014 = LINE('',#10015,#10016); -#10015 = CARTESIAN_POINT('',(32.,-40.725,163.725)); -#10016 = VECTOR('',#10017,1.); -#10017 = DIRECTION('',(1.,0.,-0.)); -#10018 = ORIENTED_EDGE('',*,*,#9929,.T.); -#10019 = ORIENTED_EDGE('',*,*,#10020,.T.); -#10020 = EDGE_CURVE('',#9930,#9970,#10021,.T.); -#10021 = LINE('',#10022,#10023); -#10022 = CARTESIAN_POINT('',(32.,-40.725,164.275)); -#10023 = VECTOR('',#10024,1.); -#10024 = DIRECTION('',(1.,0.,-0.)); -#10025 = ORIENTED_EDGE('',*,*,#9969,.F.); -#10026 = PLANE('',#10027); -#10027 = AXIS2_PLACEMENT_3D('',#10028,#10029,#10030); -#10028 = CARTESIAN_POINT('',(32.,-40.725,163.725)); -#10029 = DIRECTION('',(-0.,1.,0.)); -#10030 = DIRECTION('',(0.,0.,1.)); -#10031 = ADVANCED_FACE('',(#10032),#10038,.F.); -#10032 = FACE_BOUND('',#10033,.F.); -#10033 = EDGE_LOOP('',(#10034,#10035,#10036,#10037)); -#10034 = ORIENTED_EDGE('',*,*,#9921,.F.); -#10035 = ORIENTED_EDGE('',*,*,#9991,.T.); -#10036 = ORIENTED_EDGE('',*,*,#9961,.T.); -#10037 = ORIENTED_EDGE('',*,*,#10013,.F.); -#10038 = PLANE('',#10039); -#10039 = AXIS2_PLACEMENT_3D('',#10040,#10041,#10042); -#10040 = CARTESIAN_POINT('',(32.,-41.275,163.725)); -#10041 = DIRECTION('',(0.,0.,1.)); -#10042 = DIRECTION('',(1.,0.,-0.)); -#10043 = ADVANCED_FACE('',(#10044),#10050,.T.); -#10044 = FACE_BOUND('',#10045,.T.); -#10045 = EDGE_LOOP('',(#10046,#10047,#10048,#10049)); -#10046 = ORIENTED_EDGE('',*,*,#9937,.F.); -#10047 = ORIENTED_EDGE('',*,*,#9998,.T.); -#10048 = ORIENTED_EDGE('',*,*,#9977,.T.); -#10049 = ORIENTED_EDGE('',*,*,#10020,.F.); -#10050 = PLANE('',#10051); -#10051 = AXIS2_PLACEMENT_3D('',#10052,#10053,#10054); -#10052 = CARTESIAN_POINT('',(32.,-41.275,164.275)); -#10053 = DIRECTION('',(0.,0.,1.)); -#10054 = DIRECTION('',(1.,0.,-0.)); -#10055 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#10059)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#10056,#10057,#10058)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#10056 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#10057 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#10058 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#10059 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#10056, - 'distance_accuracy_value','confusion accuracy'); -#10060 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#10061,#10063); -#10061 = ( REPRESENTATION_RELATIONSHIP('','',#9904,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#10062) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#10062 = ITEM_DEFINED_TRANSFORMATION('','',#11,#431); -#10063 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #10064); -#10064 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('105','WireFrame_LeftBank_Top', - '',#5,#9899,$); -#10065 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#9901)); -#10066 = SHAPE_DEFINITION_REPRESENTATION(#10067,#10073); -#10067 = PRODUCT_DEFINITION_SHAPE('','',#10068); -#10068 = PRODUCT_DEFINITION('design','',#10069,#10072); -#10069 = PRODUCT_DEFINITION_FORMATION('','',#10070); -#10070 = PRODUCT('WireFrame_LeftBank_Bottom','WireFrame_LeftBank_Bottom' - ,'',(#10071)); -#10071 = PRODUCT_CONTEXT('',#2,'mechanical'); -#10072 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#10073 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#10074),#10224); -#10074 = MANIFOLD_SOLID_BREP('',#10075); -#10075 = CLOSED_SHELL('',(#10076,#10116,#10156,#10178,#10200,#10212)); -#10076 = ADVANCED_FACE('',(#10077),#10111,.F.); -#10077 = FACE_BOUND('',#10078,.F.); -#10078 = EDGE_LOOP('',(#10079,#10089,#10097,#10105)); -#10079 = ORIENTED_EDGE('',*,*,#10080,.F.); -#10080 = EDGE_CURVE('',#10081,#10083,#10085,.T.); -#10081 = VERTEX_POINT('',#10082); -#10082 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10083 = VERTEX_POINT('',#10084); -#10084 = CARTESIAN_POINT('',(32.,-41.275,34.275)); -#10085 = LINE('',#10086,#10087); -#10086 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10087 = VECTOR('',#10088,1.); -#10088 = DIRECTION('',(0.,0.,1.)); -#10089 = ORIENTED_EDGE('',*,*,#10090,.T.); -#10090 = EDGE_CURVE('',#10081,#10091,#10093,.T.); -#10091 = VERTEX_POINT('',#10092); -#10092 = CARTESIAN_POINT('',(32.,-40.725,33.725)); -#10093 = LINE('',#10094,#10095); -#10094 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10095 = VECTOR('',#10096,1.); -#10096 = DIRECTION('',(-0.,1.,0.)); -#10097 = ORIENTED_EDGE('',*,*,#10098,.T.); -#10098 = EDGE_CURVE('',#10091,#10099,#10101,.T.); -#10099 = VERTEX_POINT('',#10100); -#10100 = CARTESIAN_POINT('',(32.,-40.725,34.275)); -#10101 = LINE('',#10102,#10103); -#10102 = CARTESIAN_POINT('',(32.,-40.725,33.725)); -#10103 = VECTOR('',#10104,1.); -#10104 = DIRECTION('',(0.,0.,1.)); -#10105 = ORIENTED_EDGE('',*,*,#10106,.F.); -#10106 = EDGE_CURVE('',#10083,#10099,#10107,.T.); -#10107 = LINE('',#10108,#10109); -#10108 = CARTESIAN_POINT('',(32.,-41.275,34.275)); -#10109 = VECTOR('',#10110,1.); -#10110 = DIRECTION('',(-0.,1.,0.)); -#10111 = PLANE('',#10112); -#10112 = AXIS2_PLACEMENT_3D('',#10113,#10114,#10115); -#10113 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10114 = DIRECTION('',(1.,0.,-0.)); -#10115 = DIRECTION('',(0.,0.,1.)); -#10116 = ADVANCED_FACE('',(#10117),#10151,.T.); -#10117 = FACE_BOUND('',#10118,.T.); -#10118 = EDGE_LOOP('',(#10119,#10129,#10137,#10145)); -#10119 = ORIENTED_EDGE('',*,*,#10120,.F.); -#10120 = EDGE_CURVE('',#10121,#10123,#10125,.T.); -#10121 = VERTEX_POINT('',#10122); -#10122 = CARTESIAN_POINT('',(59.,-41.275,33.725)); -#10123 = VERTEX_POINT('',#10124); -#10124 = CARTESIAN_POINT('',(59.,-41.275,34.275)); -#10125 = LINE('',#10126,#10127); -#10126 = CARTESIAN_POINT('',(59.,-41.275,33.725)); -#10127 = VECTOR('',#10128,1.); -#10128 = DIRECTION('',(0.,0.,1.)); -#10129 = ORIENTED_EDGE('',*,*,#10130,.T.); -#10130 = EDGE_CURVE('',#10121,#10131,#10133,.T.); -#10131 = VERTEX_POINT('',#10132); -#10132 = CARTESIAN_POINT('',(59.,-40.725,33.725)); -#10133 = LINE('',#10134,#10135); -#10134 = CARTESIAN_POINT('',(59.,-41.275,33.725)); -#10135 = VECTOR('',#10136,1.); -#10136 = DIRECTION('',(-0.,1.,0.)); -#10137 = ORIENTED_EDGE('',*,*,#10138,.T.); -#10138 = EDGE_CURVE('',#10131,#10139,#10141,.T.); -#10139 = VERTEX_POINT('',#10140); -#10140 = CARTESIAN_POINT('',(59.,-40.725,34.275)); -#10141 = LINE('',#10142,#10143); -#10142 = CARTESIAN_POINT('',(59.,-40.725,33.725)); -#10143 = VECTOR('',#10144,1.); -#10144 = DIRECTION('',(0.,0.,1.)); -#10145 = ORIENTED_EDGE('',*,*,#10146,.F.); -#10146 = EDGE_CURVE('',#10123,#10139,#10147,.T.); -#10147 = LINE('',#10148,#10149); -#10148 = CARTESIAN_POINT('',(59.,-41.275,34.275)); -#10149 = VECTOR('',#10150,1.); -#10150 = DIRECTION('',(-0.,1.,0.)); -#10151 = PLANE('',#10152); -#10152 = AXIS2_PLACEMENT_3D('',#10153,#10154,#10155); -#10153 = CARTESIAN_POINT('',(59.,-41.275,33.725)); -#10154 = DIRECTION('',(1.,0.,-0.)); -#10155 = DIRECTION('',(0.,0.,1.)); -#10156 = ADVANCED_FACE('',(#10157),#10173,.F.); -#10157 = FACE_BOUND('',#10158,.F.); -#10158 = EDGE_LOOP('',(#10159,#10165,#10166,#10172)); -#10159 = ORIENTED_EDGE('',*,*,#10160,.F.); -#10160 = EDGE_CURVE('',#10081,#10121,#10161,.T.); -#10161 = LINE('',#10162,#10163); -#10162 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10163 = VECTOR('',#10164,1.); -#10164 = DIRECTION('',(1.,0.,-0.)); -#10165 = ORIENTED_EDGE('',*,*,#10080,.T.); -#10166 = ORIENTED_EDGE('',*,*,#10167,.T.); -#10167 = EDGE_CURVE('',#10083,#10123,#10168,.T.); -#10168 = LINE('',#10169,#10170); -#10169 = CARTESIAN_POINT('',(32.,-41.275,34.275)); -#10170 = VECTOR('',#10171,1.); -#10171 = DIRECTION('',(1.,0.,-0.)); -#10172 = ORIENTED_EDGE('',*,*,#10120,.F.); -#10173 = PLANE('',#10174); -#10174 = AXIS2_PLACEMENT_3D('',#10175,#10176,#10177); -#10175 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10176 = DIRECTION('',(-0.,1.,0.)); -#10177 = DIRECTION('',(0.,0.,1.)); -#10178 = ADVANCED_FACE('',(#10179),#10195,.T.); -#10179 = FACE_BOUND('',#10180,.T.); -#10180 = EDGE_LOOP('',(#10181,#10187,#10188,#10194)); -#10181 = ORIENTED_EDGE('',*,*,#10182,.F.); -#10182 = EDGE_CURVE('',#10091,#10131,#10183,.T.); -#10183 = LINE('',#10184,#10185); -#10184 = CARTESIAN_POINT('',(32.,-40.725,33.725)); -#10185 = VECTOR('',#10186,1.); -#10186 = DIRECTION('',(1.,0.,-0.)); -#10187 = ORIENTED_EDGE('',*,*,#10098,.T.); -#10188 = ORIENTED_EDGE('',*,*,#10189,.T.); -#10189 = EDGE_CURVE('',#10099,#10139,#10190,.T.); -#10190 = LINE('',#10191,#10192); -#10191 = CARTESIAN_POINT('',(32.,-40.725,34.275)); -#10192 = VECTOR('',#10193,1.); -#10193 = DIRECTION('',(1.,0.,-0.)); -#10194 = ORIENTED_EDGE('',*,*,#10138,.F.); -#10195 = PLANE('',#10196); -#10196 = AXIS2_PLACEMENT_3D('',#10197,#10198,#10199); -#10197 = CARTESIAN_POINT('',(32.,-40.725,33.725)); -#10198 = DIRECTION('',(-0.,1.,0.)); -#10199 = DIRECTION('',(0.,0.,1.)); -#10200 = ADVANCED_FACE('',(#10201),#10207,.F.); -#10201 = FACE_BOUND('',#10202,.F.); -#10202 = EDGE_LOOP('',(#10203,#10204,#10205,#10206)); -#10203 = ORIENTED_EDGE('',*,*,#10090,.F.); -#10204 = ORIENTED_EDGE('',*,*,#10160,.T.); -#10205 = ORIENTED_EDGE('',*,*,#10130,.T.); -#10206 = ORIENTED_EDGE('',*,*,#10182,.F.); -#10207 = PLANE('',#10208); -#10208 = AXIS2_PLACEMENT_3D('',#10209,#10210,#10211); -#10209 = CARTESIAN_POINT('',(32.,-41.275,33.725)); -#10210 = DIRECTION('',(0.,0.,1.)); -#10211 = DIRECTION('',(1.,0.,-0.)); -#10212 = ADVANCED_FACE('',(#10213),#10219,.T.); -#10213 = FACE_BOUND('',#10214,.T.); -#10214 = EDGE_LOOP('',(#10215,#10216,#10217,#10218)); -#10215 = ORIENTED_EDGE('',*,*,#10106,.F.); -#10216 = ORIENTED_EDGE('',*,*,#10167,.T.); -#10217 = ORIENTED_EDGE('',*,*,#10146,.T.); -#10218 = ORIENTED_EDGE('',*,*,#10189,.F.); -#10219 = PLANE('',#10220); -#10220 = AXIS2_PLACEMENT_3D('',#10221,#10222,#10223); -#10221 = CARTESIAN_POINT('',(32.,-41.275,34.275)); -#10222 = DIRECTION('',(0.,0.,1.)); -#10223 = DIRECTION('',(1.,0.,-0.)); -#10224 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#10228)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#10225,#10226,#10227)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#10225 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#10226 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#10227 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#10228 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#10225, - 'distance_accuracy_value','confusion accuracy'); -#10229 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#10230,#10232); -#10230 = ( REPRESENTATION_RELATIONSHIP('','',#10073,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#10231) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#10231 = ITEM_DEFINED_TRANSFORMATION('','',#11,#435); -#10232 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #10233); -#10233 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('106', - 'WireFrame_LeftBank_Bottom','',#5,#10068,$); -#10234 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#10070)); -#10235 = SHAPE_DEFINITION_REPRESENTATION(#10236,#10242); -#10236 = PRODUCT_DEFINITION_SHAPE('','',#10237); -#10237 = PRODUCT_DEFINITION('design','',#10238,#10241); -#10238 = PRODUCT_DEFINITION_FORMATION('','',#10239); -#10239 = PRODUCT('WireFrame_RightBank_Left','WireFrame_RightBank_Left', - '',(#10240)); -#10240 = PRODUCT_CONTEXT('',#2,'mechanical'); -#10241 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#10242 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#10243),#10393); -#10243 = MANIFOLD_SOLID_BREP('',#10244); -#10244 = CLOSED_SHELL('',(#10245,#10285,#10325,#10347,#10369,#10381)); -#10245 = ADVANCED_FACE('',(#10246),#10280,.F.); -#10246 = FACE_BOUND('',#10247,.F.); -#10247 = EDGE_LOOP('',(#10248,#10258,#10266,#10274)); -#10248 = ORIENTED_EDGE('',*,*,#10249,.F.); -#10249 = EDGE_CURVE('',#10250,#10252,#10254,.T.); -#10250 = VERTEX_POINT('',#10251); -#10251 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10252 = VERTEX_POINT('',#10253); -#10253 = CARTESIAN_POINT('',(55.725,-43.475,164.)); -#10254 = LINE('',#10255,#10256); -#10255 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10256 = VECTOR('',#10257,1.); -#10257 = DIRECTION('',(0.,0.,1.)); -#10258 = ORIENTED_EDGE('',*,*,#10259,.T.); -#10259 = EDGE_CURVE('',#10250,#10260,#10262,.T.); -#10260 = VERTEX_POINT('',#10261); -#10261 = CARTESIAN_POINT('',(55.725,-42.925,38.)); -#10262 = LINE('',#10263,#10264); -#10263 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10264 = VECTOR('',#10265,1.); -#10265 = DIRECTION('',(-0.,1.,0.)); -#10266 = ORIENTED_EDGE('',*,*,#10267,.T.); -#10267 = EDGE_CURVE('',#10260,#10268,#10270,.T.); -#10268 = VERTEX_POINT('',#10269); -#10269 = CARTESIAN_POINT('',(55.725,-42.925,164.)); -#10270 = LINE('',#10271,#10272); -#10271 = CARTESIAN_POINT('',(55.725,-42.925,38.)); -#10272 = VECTOR('',#10273,1.); -#10273 = DIRECTION('',(0.,0.,1.)); -#10274 = ORIENTED_EDGE('',*,*,#10275,.F.); -#10275 = EDGE_CURVE('',#10252,#10268,#10276,.T.); -#10276 = LINE('',#10277,#10278); -#10277 = CARTESIAN_POINT('',(55.725,-43.475,164.)); -#10278 = VECTOR('',#10279,1.); -#10279 = DIRECTION('',(-0.,1.,0.)); -#10280 = PLANE('',#10281); -#10281 = AXIS2_PLACEMENT_3D('',#10282,#10283,#10284); -#10282 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10283 = DIRECTION('',(1.,0.,-0.)); -#10284 = DIRECTION('',(0.,0.,1.)); -#10285 = ADVANCED_FACE('',(#10286),#10320,.T.); -#10286 = FACE_BOUND('',#10287,.T.); -#10287 = EDGE_LOOP('',(#10288,#10298,#10306,#10314)); -#10288 = ORIENTED_EDGE('',*,*,#10289,.F.); -#10289 = EDGE_CURVE('',#10290,#10292,#10294,.T.); -#10290 = VERTEX_POINT('',#10291); -#10291 = CARTESIAN_POINT('',(56.275,-43.475,38.)); -#10292 = VERTEX_POINT('',#10293); -#10293 = CARTESIAN_POINT('',(56.275,-43.475,164.)); -#10294 = LINE('',#10295,#10296); -#10295 = CARTESIAN_POINT('',(56.275,-43.475,38.)); -#10296 = VECTOR('',#10297,1.); -#10297 = DIRECTION('',(0.,0.,1.)); -#10298 = ORIENTED_EDGE('',*,*,#10299,.T.); -#10299 = EDGE_CURVE('',#10290,#10300,#10302,.T.); -#10300 = VERTEX_POINT('',#10301); -#10301 = CARTESIAN_POINT('',(56.275,-42.925,38.)); -#10302 = LINE('',#10303,#10304); -#10303 = CARTESIAN_POINT('',(56.275,-43.475,38.)); -#10304 = VECTOR('',#10305,1.); -#10305 = DIRECTION('',(-0.,1.,0.)); -#10306 = ORIENTED_EDGE('',*,*,#10307,.T.); -#10307 = EDGE_CURVE('',#10300,#10308,#10310,.T.); -#10308 = VERTEX_POINT('',#10309); -#10309 = CARTESIAN_POINT('',(56.275,-42.925,164.)); -#10310 = LINE('',#10311,#10312); -#10311 = CARTESIAN_POINT('',(56.275,-42.925,38.)); -#10312 = VECTOR('',#10313,1.); -#10313 = DIRECTION('',(0.,0.,1.)); -#10314 = ORIENTED_EDGE('',*,*,#10315,.F.); -#10315 = EDGE_CURVE('',#10292,#10308,#10316,.T.); -#10316 = LINE('',#10317,#10318); -#10317 = CARTESIAN_POINT('',(56.275,-43.475,164.)); -#10318 = VECTOR('',#10319,1.); -#10319 = DIRECTION('',(-0.,1.,0.)); -#10320 = PLANE('',#10321); -#10321 = AXIS2_PLACEMENT_3D('',#10322,#10323,#10324); -#10322 = CARTESIAN_POINT('',(56.275,-43.475,38.)); -#10323 = DIRECTION('',(1.,0.,-0.)); -#10324 = DIRECTION('',(0.,0.,1.)); -#10325 = ADVANCED_FACE('',(#10326),#10342,.F.); -#10326 = FACE_BOUND('',#10327,.F.); -#10327 = EDGE_LOOP('',(#10328,#10334,#10335,#10341)); -#10328 = ORIENTED_EDGE('',*,*,#10329,.F.); -#10329 = EDGE_CURVE('',#10250,#10290,#10330,.T.); -#10330 = LINE('',#10331,#10332); -#10331 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10332 = VECTOR('',#10333,1.); -#10333 = DIRECTION('',(1.,0.,-0.)); -#10334 = ORIENTED_EDGE('',*,*,#10249,.T.); -#10335 = ORIENTED_EDGE('',*,*,#10336,.T.); -#10336 = EDGE_CURVE('',#10252,#10292,#10337,.T.); -#10337 = LINE('',#10338,#10339); -#10338 = CARTESIAN_POINT('',(55.725,-43.475,164.)); -#10339 = VECTOR('',#10340,1.); -#10340 = DIRECTION('',(1.,0.,-0.)); -#10341 = ORIENTED_EDGE('',*,*,#10289,.F.); -#10342 = PLANE('',#10343); -#10343 = AXIS2_PLACEMENT_3D('',#10344,#10345,#10346); -#10344 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10345 = DIRECTION('',(-0.,1.,0.)); -#10346 = DIRECTION('',(0.,0.,1.)); -#10347 = ADVANCED_FACE('',(#10348),#10364,.T.); -#10348 = FACE_BOUND('',#10349,.T.); -#10349 = EDGE_LOOP('',(#10350,#10356,#10357,#10363)); -#10350 = ORIENTED_EDGE('',*,*,#10351,.F.); -#10351 = EDGE_CURVE('',#10260,#10300,#10352,.T.); -#10352 = LINE('',#10353,#10354); -#10353 = CARTESIAN_POINT('',(55.725,-42.925,38.)); -#10354 = VECTOR('',#10355,1.); -#10355 = DIRECTION('',(1.,0.,-0.)); -#10356 = ORIENTED_EDGE('',*,*,#10267,.T.); -#10357 = ORIENTED_EDGE('',*,*,#10358,.T.); -#10358 = EDGE_CURVE('',#10268,#10308,#10359,.T.); -#10359 = LINE('',#10360,#10361); -#10360 = CARTESIAN_POINT('',(55.725,-42.925,164.)); -#10361 = VECTOR('',#10362,1.); -#10362 = DIRECTION('',(1.,0.,-0.)); -#10363 = ORIENTED_EDGE('',*,*,#10307,.F.); -#10364 = PLANE('',#10365); -#10365 = AXIS2_PLACEMENT_3D('',#10366,#10367,#10368); -#10366 = CARTESIAN_POINT('',(55.725,-42.925,38.)); -#10367 = DIRECTION('',(-0.,1.,0.)); -#10368 = DIRECTION('',(0.,0.,1.)); -#10369 = ADVANCED_FACE('',(#10370),#10376,.F.); -#10370 = FACE_BOUND('',#10371,.F.); -#10371 = EDGE_LOOP('',(#10372,#10373,#10374,#10375)); -#10372 = ORIENTED_EDGE('',*,*,#10259,.F.); -#10373 = ORIENTED_EDGE('',*,*,#10329,.T.); -#10374 = ORIENTED_EDGE('',*,*,#10299,.T.); -#10375 = ORIENTED_EDGE('',*,*,#10351,.F.); -#10376 = PLANE('',#10377); -#10377 = AXIS2_PLACEMENT_3D('',#10378,#10379,#10380); -#10378 = CARTESIAN_POINT('',(55.725,-43.475,38.)); -#10379 = DIRECTION('',(0.,0.,1.)); -#10380 = DIRECTION('',(1.,0.,-0.)); -#10381 = ADVANCED_FACE('',(#10382),#10388,.T.); -#10382 = FACE_BOUND('',#10383,.T.); -#10383 = EDGE_LOOP('',(#10384,#10385,#10386,#10387)); -#10384 = ORIENTED_EDGE('',*,*,#10275,.F.); -#10385 = ORIENTED_EDGE('',*,*,#10336,.T.); -#10386 = ORIENTED_EDGE('',*,*,#10315,.T.); -#10387 = ORIENTED_EDGE('',*,*,#10358,.F.); -#10388 = PLANE('',#10389); -#10389 = AXIS2_PLACEMENT_3D('',#10390,#10391,#10392); -#10390 = CARTESIAN_POINT('',(55.725,-43.475,164.)); -#10391 = DIRECTION('',(0.,0.,1.)); -#10392 = DIRECTION('',(1.,0.,-0.)); -#10393 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#10397)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#10394,#10395,#10396)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#10394 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#10395 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#10396 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#10397 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#10394, - 'distance_accuracy_value','confusion accuracy'); -#10398 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#10399,#10401); -#10399 = ( REPRESENTATION_RELATIONSHIP('','',#10242,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#10400) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#10400 = ITEM_DEFINED_TRANSFORMATION('','',#11,#439); -#10401 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #10402); -#10402 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('107','WireFrame_RightBank_Left' - ,'',#5,#10237,$); -#10403 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#10239)); -#10404 = SHAPE_DEFINITION_REPRESENTATION(#10405,#10411); -#10405 = PRODUCT_DEFINITION_SHAPE('','',#10406); -#10406 = PRODUCT_DEFINITION('design','',#10407,#10410); -#10407 = PRODUCT_DEFINITION_FORMATION('','',#10408); -#10408 = PRODUCT('WireFrame_RightBank_Right','WireFrame_RightBank_Right' - ,'',(#10409)); -#10409 = PRODUCT_CONTEXT('',#2,'mechanical'); -#10410 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#10411 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#10412),#10562); -#10412 = MANIFOLD_SOLID_BREP('',#10413); -#10413 = CLOSED_SHELL('',(#10414,#10454,#10494,#10516,#10538,#10550)); -#10414 = ADVANCED_FACE('',(#10415),#10449,.F.); -#10415 = FACE_BOUND('',#10416,.F.); -#10416 = EDGE_LOOP('',(#10417,#10427,#10435,#10443)); -#10417 = ORIENTED_EDGE('',*,*,#10418,.F.); -#10418 = EDGE_CURVE('',#10419,#10421,#10423,.T.); -#10419 = VERTEX_POINT('',#10420); -#10420 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10421 = VERTEX_POINT('',#10422); -#10422 = CARTESIAN_POINT('',(88.725,-43.475,164.)); -#10423 = LINE('',#10424,#10425); -#10424 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10425 = VECTOR('',#10426,1.); -#10426 = DIRECTION('',(0.,0.,1.)); -#10427 = ORIENTED_EDGE('',*,*,#10428,.T.); -#10428 = EDGE_CURVE('',#10419,#10429,#10431,.T.); -#10429 = VERTEX_POINT('',#10430); -#10430 = CARTESIAN_POINT('',(88.725,-42.925,38.)); -#10431 = LINE('',#10432,#10433); -#10432 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10433 = VECTOR('',#10434,1.); -#10434 = DIRECTION('',(-0.,1.,0.)); -#10435 = ORIENTED_EDGE('',*,*,#10436,.T.); -#10436 = EDGE_CURVE('',#10429,#10437,#10439,.T.); -#10437 = VERTEX_POINT('',#10438); -#10438 = CARTESIAN_POINT('',(88.725,-42.925,164.)); -#10439 = LINE('',#10440,#10441); -#10440 = CARTESIAN_POINT('',(88.725,-42.925,38.)); -#10441 = VECTOR('',#10442,1.); -#10442 = DIRECTION('',(0.,0.,1.)); -#10443 = ORIENTED_EDGE('',*,*,#10444,.F.); -#10444 = EDGE_CURVE('',#10421,#10437,#10445,.T.); -#10445 = LINE('',#10446,#10447); -#10446 = CARTESIAN_POINT('',(88.725,-43.475,164.)); -#10447 = VECTOR('',#10448,1.); -#10448 = DIRECTION('',(-0.,1.,0.)); -#10449 = PLANE('',#10450); -#10450 = AXIS2_PLACEMENT_3D('',#10451,#10452,#10453); -#10451 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10452 = DIRECTION('',(1.,0.,-0.)); -#10453 = DIRECTION('',(0.,0.,1.)); -#10454 = ADVANCED_FACE('',(#10455),#10489,.T.); -#10455 = FACE_BOUND('',#10456,.T.); -#10456 = EDGE_LOOP('',(#10457,#10467,#10475,#10483)); -#10457 = ORIENTED_EDGE('',*,*,#10458,.F.); -#10458 = EDGE_CURVE('',#10459,#10461,#10463,.T.); -#10459 = VERTEX_POINT('',#10460); -#10460 = CARTESIAN_POINT('',(89.275,-43.475,38.)); -#10461 = VERTEX_POINT('',#10462); -#10462 = CARTESIAN_POINT('',(89.275,-43.475,164.)); -#10463 = LINE('',#10464,#10465); -#10464 = CARTESIAN_POINT('',(89.275,-43.475,38.)); -#10465 = VECTOR('',#10466,1.); -#10466 = DIRECTION('',(0.,0.,1.)); -#10467 = ORIENTED_EDGE('',*,*,#10468,.T.); -#10468 = EDGE_CURVE('',#10459,#10469,#10471,.T.); -#10469 = VERTEX_POINT('',#10470); -#10470 = CARTESIAN_POINT('',(89.275,-42.925,38.)); -#10471 = LINE('',#10472,#10473); -#10472 = CARTESIAN_POINT('',(89.275,-43.475,38.)); -#10473 = VECTOR('',#10474,1.); -#10474 = DIRECTION('',(-0.,1.,0.)); -#10475 = ORIENTED_EDGE('',*,*,#10476,.T.); -#10476 = EDGE_CURVE('',#10469,#10477,#10479,.T.); -#10477 = VERTEX_POINT('',#10478); -#10478 = CARTESIAN_POINT('',(89.275,-42.925,164.)); -#10479 = LINE('',#10480,#10481); -#10480 = CARTESIAN_POINT('',(89.275,-42.925,38.)); -#10481 = VECTOR('',#10482,1.); -#10482 = DIRECTION('',(0.,0.,1.)); -#10483 = ORIENTED_EDGE('',*,*,#10484,.F.); -#10484 = EDGE_CURVE('',#10461,#10477,#10485,.T.); -#10485 = LINE('',#10486,#10487); -#10486 = CARTESIAN_POINT('',(89.275,-43.475,164.)); -#10487 = VECTOR('',#10488,1.); -#10488 = DIRECTION('',(-0.,1.,0.)); -#10489 = PLANE('',#10490); -#10490 = AXIS2_PLACEMENT_3D('',#10491,#10492,#10493); -#10491 = CARTESIAN_POINT('',(89.275,-43.475,38.)); -#10492 = DIRECTION('',(1.,0.,-0.)); -#10493 = DIRECTION('',(0.,0.,1.)); -#10494 = ADVANCED_FACE('',(#10495),#10511,.F.); -#10495 = FACE_BOUND('',#10496,.F.); -#10496 = EDGE_LOOP('',(#10497,#10503,#10504,#10510)); -#10497 = ORIENTED_EDGE('',*,*,#10498,.F.); -#10498 = EDGE_CURVE('',#10419,#10459,#10499,.T.); -#10499 = LINE('',#10500,#10501); -#10500 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10501 = VECTOR('',#10502,1.); -#10502 = DIRECTION('',(1.,0.,-0.)); -#10503 = ORIENTED_EDGE('',*,*,#10418,.T.); -#10504 = ORIENTED_EDGE('',*,*,#10505,.T.); -#10505 = EDGE_CURVE('',#10421,#10461,#10506,.T.); -#10506 = LINE('',#10507,#10508); -#10507 = CARTESIAN_POINT('',(88.725,-43.475,164.)); -#10508 = VECTOR('',#10509,1.); -#10509 = DIRECTION('',(1.,0.,-0.)); -#10510 = ORIENTED_EDGE('',*,*,#10458,.F.); -#10511 = PLANE('',#10512); -#10512 = AXIS2_PLACEMENT_3D('',#10513,#10514,#10515); -#10513 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10514 = DIRECTION('',(-0.,1.,0.)); -#10515 = DIRECTION('',(0.,0.,1.)); -#10516 = ADVANCED_FACE('',(#10517),#10533,.T.); -#10517 = FACE_BOUND('',#10518,.T.); -#10518 = EDGE_LOOP('',(#10519,#10525,#10526,#10532)); -#10519 = ORIENTED_EDGE('',*,*,#10520,.F.); -#10520 = EDGE_CURVE('',#10429,#10469,#10521,.T.); -#10521 = LINE('',#10522,#10523); -#10522 = CARTESIAN_POINT('',(88.725,-42.925,38.)); -#10523 = VECTOR('',#10524,1.); -#10524 = DIRECTION('',(1.,0.,-0.)); -#10525 = ORIENTED_EDGE('',*,*,#10436,.T.); -#10526 = ORIENTED_EDGE('',*,*,#10527,.T.); -#10527 = EDGE_CURVE('',#10437,#10477,#10528,.T.); -#10528 = LINE('',#10529,#10530); -#10529 = CARTESIAN_POINT('',(88.725,-42.925,164.)); -#10530 = VECTOR('',#10531,1.); -#10531 = DIRECTION('',(1.,0.,-0.)); -#10532 = ORIENTED_EDGE('',*,*,#10476,.F.); -#10533 = PLANE('',#10534); -#10534 = AXIS2_PLACEMENT_3D('',#10535,#10536,#10537); -#10535 = CARTESIAN_POINT('',(88.725,-42.925,38.)); -#10536 = DIRECTION('',(-0.,1.,0.)); -#10537 = DIRECTION('',(0.,0.,1.)); -#10538 = ADVANCED_FACE('',(#10539),#10545,.F.); -#10539 = FACE_BOUND('',#10540,.F.); -#10540 = EDGE_LOOP('',(#10541,#10542,#10543,#10544)); -#10541 = ORIENTED_EDGE('',*,*,#10428,.F.); -#10542 = ORIENTED_EDGE('',*,*,#10498,.T.); -#10543 = ORIENTED_EDGE('',*,*,#10468,.T.); -#10544 = ORIENTED_EDGE('',*,*,#10520,.F.); -#10545 = PLANE('',#10546); -#10546 = AXIS2_PLACEMENT_3D('',#10547,#10548,#10549); -#10547 = CARTESIAN_POINT('',(88.725,-43.475,38.)); -#10548 = DIRECTION('',(0.,0.,1.)); -#10549 = DIRECTION('',(1.,0.,-0.)); -#10550 = ADVANCED_FACE('',(#10551),#10557,.T.); -#10551 = FACE_BOUND('',#10552,.T.); -#10552 = EDGE_LOOP('',(#10553,#10554,#10555,#10556)); -#10553 = ORIENTED_EDGE('',*,*,#10444,.F.); -#10554 = ORIENTED_EDGE('',*,*,#10505,.T.); -#10555 = ORIENTED_EDGE('',*,*,#10484,.T.); -#10556 = ORIENTED_EDGE('',*,*,#10527,.F.); -#10557 = PLANE('',#10558); -#10558 = AXIS2_PLACEMENT_3D('',#10559,#10560,#10561); -#10559 = CARTESIAN_POINT('',(88.725,-43.475,164.)); -#10560 = DIRECTION('',(0.,0.,1.)); -#10561 = DIRECTION('',(1.,0.,-0.)); -#10562 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#10566)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#10563,#10564,#10565)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#10563 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#10564 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#10565 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#10566 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#10563, - 'distance_accuracy_value','confusion accuracy'); -#10567 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#10568,#10570); -#10568 = ( REPRESENTATION_RELATIONSHIP('','',#10411,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#10569) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#10569 = ITEM_DEFINED_TRANSFORMATION('','',#11,#443); -#10570 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #10571); -#10571 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('108', - 'WireFrame_RightBank_Right','',#5,#10406,$); -#10572 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#10408)); -#10573 = SHAPE_DEFINITION_REPRESENTATION(#10574,#10580); -#10574 = PRODUCT_DEFINITION_SHAPE('','',#10575); -#10575 = PRODUCT_DEFINITION('design','',#10576,#10579); -#10576 = PRODUCT_DEFINITION_FORMATION('','',#10577); -#10577 = PRODUCT('WireFrame_RightBank_Top','WireFrame_RightBank_Top','', - (#10578)); -#10578 = PRODUCT_CONTEXT('',#2,'mechanical'); -#10579 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#10580 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#10581),#10731); -#10581 = MANIFOLD_SOLID_BREP('',#10582); -#10582 = CLOSED_SHELL('',(#10583,#10623,#10663,#10685,#10707,#10719)); -#10583 = ADVANCED_FACE('',(#10584),#10618,.F.); -#10584 = FACE_BOUND('',#10585,.F.); -#10585 = EDGE_LOOP('',(#10586,#10596,#10604,#10612)); -#10586 = ORIENTED_EDGE('',*,*,#10587,.F.); -#10587 = EDGE_CURVE('',#10588,#10590,#10592,.T.); -#10588 = VERTEX_POINT('',#10589); -#10589 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10590 = VERTEX_POINT('',#10591); -#10591 = CARTESIAN_POINT('',(56.,-43.475,164.275)); -#10592 = LINE('',#10593,#10594); -#10593 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10594 = VECTOR('',#10595,1.); -#10595 = DIRECTION('',(0.,0.,1.)); -#10596 = ORIENTED_EDGE('',*,*,#10597,.T.); -#10597 = EDGE_CURVE('',#10588,#10598,#10600,.T.); -#10598 = VERTEX_POINT('',#10599); -#10599 = CARTESIAN_POINT('',(56.,-42.925,163.725)); -#10600 = LINE('',#10601,#10602); -#10601 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10602 = VECTOR('',#10603,1.); -#10603 = DIRECTION('',(-0.,1.,0.)); -#10604 = ORIENTED_EDGE('',*,*,#10605,.T.); -#10605 = EDGE_CURVE('',#10598,#10606,#10608,.T.); -#10606 = VERTEX_POINT('',#10607); -#10607 = CARTESIAN_POINT('',(56.,-42.925,164.275)); -#10608 = LINE('',#10609,#10610); -#10609 = CARTESIAN_POINT('',(56.,-42.925,163.725)); -#10610 = VECTOR('',#10611,1.); -#10611 = DIRECTION('',(0.,0.,1.)); -#10612 = ORIENTED_EDGE('',*,*,#10613,.F.); -#10613 = EDGE_CURVE('',#10590,#10606,#10614,.T.); -#10614 = LINE('',#10615,#10616); -#10615 = CARTESIAN_POINT('',(56.,-43.475,164.275)); -#10616 = VECTOR('',#10617,1.); -#10617 = DIRECTION('',(-0.,1.,0.)); -#10618 = PLANE('',#10619); -#10619 = AXIS2_PLACEMENT_3D('',#10620,#10621,#10622); -#10620 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10621 = DIRECTION('',(1.,0.,-0.)); -#10622 = DIRECTION('',(0.,0.,1.)); -#10623 = ADVANCED_FACE('',(#10624),#10658,.T.); -#10624 = FACE_BOUND('',#10625,.T.); -#10625 = EDGE_LOOP('',(#10626,#10636,#10644,#10652)); -#10626 = ORIENTED_EDGE('',*,*,#10627,.F.); -#10627 = EDGE_CURVE('',#10628,#10630,#10632,.T.); -#10628 = VERTEX_POINT('',#10629); -#10629 = CARTESIAN_POINT('',(89.,-43.475,163.725)); -#10630 = VERTEX_POINT('',#10631); -#10631 = CARTESIAN_POINT('',(89.,-43.475,164.275)); -#10632 = LINE('',#10633,#10634); -#10633 = CARTESIAN_POINT('',(89.,-43.475,163.725)); -#10634 = VECTOR('',#10635,1.); -#10635 = DIRECTION('',(0.,0.,1.)); -#10636 = ORIENTED_EDGE('',*,*,#10637,.T.); -#10637 = EDGE_CURVE('',#10628,#10638,#10640,.T.); -#10638 = VERTEX_POINT('',#10639); -#10639 = CARTESIAN_POINT('',(89.,-42.925,163.725)); -#10640 = LINE('',#10641,#10642); -#10641 = CARTESIAN_POINT('',(89.,-43.475,163.725)); -#10642 = VECTOR('',#10643,1.); -#10643 = DIRECTION('',(-0.,1.,0.)); -#10644 = ORIENTED_EDGE('',*,*,#10645,.T.); -#10645 = EDGE_CURVE('',#10638,#10646,#10648,.T.); -#10646 = VERTEX_POINT('',#10647); -#10647 = CARTESIAN_POINT('',(89.,-42.925,164.275)); -#10648 = LINE('',#10649,#10650); -#10649 = CARTESIAN_POINT('',(89.,-42.925,163.725)); -#10650 = VECTOR('',#10651,1.); -#10651 = DIRECTION('',(0.,0.,1.)); -#10652 = ORIENTED_EDGE('',*,*,#10653,.F.); -#10653 = EDGE_CURVE('',#10630,#10646,#10654,.T.); -#10654 = LINE('',#10655,#10656); -#10655 = CARTESIAN_POINT('',(89.,-43.475,164.275)); -#10656 = VECTOR('',#10657,1.); -#10657 = DIRECTION('',(-0.,1.,0.)); -#10658 = PLANE('',#10659); -#10659 = AXIS2_PLACEMENT_3D('',#10660,#10661,#10662); -#10660 = CARTESIAN_POINT('',(89.,-43.475,163.725)); -#10661 = DIRECTION('',(1.,0.,-0.)); -#10662 = DIRECTION('',(0.,0.,1.)); -#10663 = ADVANCED_FACE('',(#10664),#10680,.F.); -#10664 = FACE_BOUND('',#10665,.F.); -#10665 = EDGE_LOOP('',(#10666,#10672,#10673,#10679)); -#10666 = ORIENTED_EDGE('',*,*,#10667,.F.); -#10667 = EDGE_CURVE('',#10588,#10628,#10668,.T.); -#10668 = LINE('',#10669,#10670); -#10669 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10670 = VECTOR('',#10671,1.); -#10671 = DIRECTION('',(1.,0.,-0.)); -#10672 = ORIENTED_EDGE('',*,*,#10587,.T.); -#10673 = ORIENTED_EDGE('',*,*,#10674,.T.); -#10674 = EDGE_CURVE('',#10590,#10630,#10675,.T.); -#10675 = LINE('',#10676,#10677); -#10676 = CARTESIAN_POINT('',(56.,-43.475,164.275)); -#10677 = VECTOR('',#10678,1.); -#10678 = DIRECTION('',(1.,0.,-0.)); -#10679 = ORIENTED_EDGE('',*,*,#10627,.F.); -#10680 = PLANE('',#10681); -#10681 = AXIS2_PLACEMENT_3D('',#10682,#10683,#10684); -#10682 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10683 = DIRECTION('',(-0.,1.,0.)); -#10684 = DIRECTION('',(0.,0.,1.)); -#10685 = ADVANCED_FACE('',(#10686),#10702,.T.); -#10686 = FACE_BOUND('',#10687,.T.); -#10687 = EDGE_LOOP('',(#10688,#10694,#10695,#10701)); -#10688 = ORIENTED_EDGE('',*,*,#10689,.F.); -#10689 = EDGE_CURVE('',#10598,#10638,#10690,.T.); -#10690 = LINE('',#10691,#10692); -#10691 = CARTESIAN_POINT('',(56.,-42.925,163.725)); -#10692 = VECTOR('',#10693,1.); -#10693 = DIRECTION('',(1.,0.,-0.)); -#10694 = ORIENTED_EDGE('',*,*,#10605,.T.); -#10695 = ORIENTED_EDGE('',*,*,#10696,.T.); -#10696 = EDGE_CURVE('',#10606,#10646,#10697,.T.); -#10697 = LINE('',#10698,#10699); -#10698 = CARTESIAN_POINT('',(56.,-42.925,164.275)); -#10699 = VECTOR('',#10700,1.); -#10700 = DIRECTION('',(1.,0.,-0.)); -#10701 = ORIENTED_EDGE('',*,*,#10645,.F.); -#10702 = PLANE('',#10703); -#10703 = AXIS2_PLACEMENT_3D('',#10704,#10705,#10706); -#10704 = CARTESIAN_POINT('',(56.,-42.925,163.725)); -#10705 = DIRECTION('',(-0.,1.,0.)); -#10706 = DIRECTION('',(0.,0.,1.)); -#10707 = ADVANCED_FACE('',(#10708),#10714,.F.); -#10708 = FACE_BOUND('',#10709,.F.); -#10709 = EDGE_LOOP('',(#10710,#10711,#10712,#10713)); -#10710 = ORIENTED_EDGE('',*,*,#10597,.F.); -#10711 = ORIENTED_EDGE('',*,*,#10667,.T.); -#10712 = ORIENTED_EDGE('',*,*,#10637,.T.); -#10713 = ORIENTED_EDGE('',*,*,#10689,.F.); -#10714 = PLANE('',#10715); -#10715 = AXIS2_PLACEMENT_3D('',#10716,#10717,#10718); -#10716 = CARTESIAN_POINT('',(56.,-43.475,163.725)); -#10717 = DIRECTION('',(0.,0.,1.)); -#10718 = DIRECTION('',(1.,0.,-0.)); -#10719 = ADVANCED_FACE('',(#10720),#10726,.T.); -#10720 = FACE_BOUND('',#10721,.T.); -#10721 = EDGE_LOOP('',(#10722,#10723,#10724,#10725)); -#10722 = ORIENTED_EDGE('',*,*,#10613,.F.); -#10723 = ORIENTED_EDGE('',*,*,#10674,.T.); -#10724 = ORIENTED_EDGE('',*,*,#10653,.T.); -#10725 = ORIENTED_EDGE('',*,*,#10696,.F.); -#10726 = PLANE('',#10727); -#10727 = AXIS2_PLACEMENT_3D('',#10728,#10729,#10730); -#10728 = CARTESIAN_POINT('',(56.,-43.475,164.275)); -#10729 = DIRECTION('',(0.,0.,1.)); -#10730 = DIRECTION('',(1.,0.,-0.)); -#10731 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#10735)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#10732,#10733,#10734)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#10732 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#10733 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#10734 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#10735 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#10732, - 'distance_accuracy_value','confusion accuracy'); -#10736 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#10737,#10739); -#10737 = ( REPRESENTATION_RELATIONSHIP('','',#10580,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#10738) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#10738 = ITEM_DEFINED_TRANSFORMATION('','',#11,#447); -#10739 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #10740); -#10740 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('109','WireFrame_RightBank_Top', - '',#5,#10575,$); -#10741 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#10577)); -#10742 = SHAPE_DEFINITION_REPRESENTATION(#10743,#10749); -#10743 = PRODUCT_DEFINITION_SHAPE('','',#10744); -#10744 = PRODUCT_DEFINITION('design','',#10745,#10748); -#10745 = PRODUCT_DEFINITION_FORMATION('','',#10746); -#10746 = PRODUCT('WireFrame_RightBank_Bottom', - 'WireFrame_RightBank_Bottom','',(#10747)); -#10747 = PRODUCT_CONTEXT('',#2,'mechanical'); -#10748 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#10749 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#10750),#10900); -#10750 = MANIFOLD_SOLID_BREP('',#10751); -#10751 = CLOSED_SHELL('',(#10752,#10792,#10832,#10854,#10876,#10888)); -#10752 = ADVANCED_FACE('',(#10753),#10787,.F.); -#10753 = FACE_BOUND('',#10754,.F.); -#10754 = EDGE_LOOP('',(#10755,#10765,#10773,#10781)); -#10755 = ORIENTED_EDGE('',*,*,#10756,.F.); -#10756 = EDGE_CURVE('',#10757,#10759,#10761,.T.); -#10757 = VERTEX_POINT('',#10758); -#10758 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10759 = VERTEX_POINT('',#10760); -#10760 = CARTESIAN_POINT('',(56.,-43.475,38.275)); -#10761 = LINE('',#10762,#10763); -#10762 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10763 = VECTOR('',#10764,1.); -#10764 = DIRECTION('',(0.,0.,1.)); -#10765 = ORIENTED_EDGE('',*,*,#10766,.T.); -#10766 = EDGE_CURVE('',#10757,#10767,#10769,.T.); -#10767 = VERTEX_POINT('',#10768); -#10768 = CARTESIAN_POINT('',(56.,-42.925,37.725)); -#10769 = LINE('',#10770,#10771); -#10770 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10771 = VECTOR('',#10772,1.); -#10772 = DIRECTION('',(-0.,1.,0.)); -#10773 = ORIENTED_EDGE('',*,*,#10774,.T.); -#10774 = EDGE_CURVE('',#10767,#10775,#10777,.T.); -#10775 = VERTEX_POINT('',#10776); -#10776 = CARTESIAN_POINT('',(56.,-42.925,38.275)); -#10777 = LINE('',#10778,#10779); -#10778 = CARTESIAN_POINT('',(56.,-42.925,37.725)); -#10779 = VECTOR('',#10780,1.); -#10780 = DIRECTION('',(0.,0.,1.)); -#10781 = ORIENTED_EDGE('',*,*,#10782,.F.); -#10782 = EDGE_CURVE('',#10759,#10775,#10783,.T.); -#10783 = LINE('',#10784,#10785); -#10784 = CARTESIAN_POINT('',(56.,-43.475,38.275)); -#10785 = VECTOR('',#10786,1.); -#10786 = DIRECTION('',(-0.,1.,0.)); -#10787 = PLANE('',#10788); -#10788 = AXIS2_PLACEMENT_3D('',#10789,#10790,#10791); -#10789 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10790 = DIRECTION('',(1.,0.,-0.)); -#10791 = DIRECTION('',(0.,0.,1.)); -#10792 = ADVANCED_FACE('',(#10793),#10827,.T.); -#10793 = FACE_BOUND('',#10794,.T.); -#10794 = EDGE_LOOP('',(#10795,#10805,#10813,#10821)); -#10795 = ORIENTED_EDGE('',*,*,#10796,.F.); -#10796 = EDGE_CURVE('',#10797,#10799,#10801,.T.); -#10797 = VERTEX_POINT('',#10798); -#10798 = CARTESIAN_POINT('',(89.,-43.475,37.725)); -#10799 = VERTEX_POINT('',#10800); -#10800 = CARTESIAN_POINT('',(89.,-43.475,38.275)); -#10801 = LINE('',#10802,#10803); -#10802 = CARTESIAN_POINT('',(89.,-43.475,37.725)); -#10803 = VECTOR('',#10804,1.); -#10804 = DIRECTION('',(0.,0.,1.)); -#10805 = ORIENTED_EDGE('',*,*,#10806,.T.); -#10806 = EDGE_CURVE('',#10797,#10807,#10809,.T.); -#10807 = VERTEX_POINT('',#10808); -#10808 = CARTESIAN_POINT('',(89.,-42.925,37.725)); -#10809 = LINE('',#10810,#10811); -#10810 = CARTESIAN_POINT('',(89.,-43.475,37.725)); -#10811 = VECTOR('',#10812,1.); -#10812 = DIRECTION('',(-0.,1.,0.)); -#10813 = ORIENTED_EDGE('',*,*,#10814,.T.); -#10814 = EDGE_CURVE('',#10807,#10815,#10817,.T.); -#10815 = VERTEX_POINT('',#10816); -#10816 = CARTESIAN_POINT('',(89.,-42.925,38.275)); -#10817 = LINE('',#10818,#10819); -#10818 = CARTESIAN_POINT('',(89.,-42.925,37.725)); -#10819 = VECTOR('',#10820,1.); -#10820 = DIRECTION('',(0.,0.,1.)); -#10821 = ORIENTED_EDGE('',*,*,#10822,.F.); -#10822 = EDGE_CURVE('',#10799,#10815,#10823,.T.); -#10823 = LINE('',#10824,#10825); -#10824 = CARTESIAN_POINT('',(89.,-43.475,38.275)); -#10825 = VECTOR('',#10826,1.); -#10826 = DIRECTION('',(-0.,1.,0.)); -#10827 = PLANE('',#10828); -#10828 = AXIS2_PLACEMENT_3D('',#10829,#10830,#10831); -#10829 = CARTESIAN_POINT('',(89.,-43.475,37.725)); -#10830 = DIRECTION('',(1.,0.,-0.)); -#10831 = DIRECTION('',(0.,0.,1.)); -#10832 = ADVANCED_FACE('',(#10833),#10849,.F.); -#10833 = FACE_BOUND('',#10834,.F.); -#10834 = EDGE_LOOP('',(#10835,#10841,#10842,#10848)); -#10835 = ORIENTED_EDGE('',*,*,#10836,.F.); -#10836 = EDGE_CURVE('',#10757,#10797,#10837,.T.); -#10837 = LINE('',#10838,#10839); -#10838 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10839 = VECTOR('',#10840,1.); -#10840 = DIRECTION('',(1.,0.,-0.)); -#10841 = ORIENTED_EDGE('',*,*,#10756,.T.); -#10842 = ORIENTED_EDGE('',*,*,#10843,.T.); -#10843 = EDGE_CURVE('',#10759,#10799,#10844,.T.); -#10844 = LINE('',#10845,#10846); -#10845 = CARTESIAN_POINT('',(56.,-43.475,38.275)); -#10846 = VECTOR('',#10847,1.); -#10847 = DIRECTION('',(1.,0.,-0.)); -#10848 = ORIENTED_EDGE('',*,*,#10796,.F.); -#10849 = PLANE('',#10850); -#10850 = AXIS2_PLACEMENT_3D('',#10851,#10852,#10853); -#10851 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10852 = DIRECTION('',(-0.,1.,0.)); -#10853 = DIRECTION('',(0.,0.,1.)); -#10854 = ADVANCED_FACE('',(#10855),#10871,.T.); -#10855 = FACE_BOUND('',#10856,.T.); -#10856 = EDGE_LOOP('',(#10857,#10863,#10864,#10870)); -#10857 = ORIENTED_EDGE('',*,*,#10858,.F.); -#10858 = EDGE_CURVE('',#10767,#10807,#10859,.T.); -#10859 = LINE('',#10860,#10861); -#10860 = CARTESIAN_POINT('',(56.,-42.925,37.725)); -#10861 = VECTOR('',#10862,1.); -#10862 = DIRECTION('',(1.,0.,-0.)); -#10863 = ORIENTED_EDGE('',*,*,#10774,.T.); -#10864 = ORIENTED_EDGE('',*,*,#10865,.T.); -#10865 = EDGE_CURVE('',#10775,#10815,#10866,.T.); -#10866 = LINE('',#10867,#10868); -#10867 = CARTESIAN_POINT('',(56.,-42.925,38.275)); -#10868 = VECTOR('',#10869,1.); -#10869 = DIRECTION('',(1.,0.,-0.)); -#10870 = ORIENTED_EDGE('',*,*,#10814,.F.); -#10871 = PLANE('',#10872); -#10872 = AXIS2_PLACEMENT_3D('',#10873,#10874,#10875); -#10873 = CARTESIAN_POINT('',(56.,-42.925,37.725)); -#10874 = DIRECTION('',(-0.,1.,0.)); -#10875 = DIRECTION('',(0.,0.,1.)); -#10876 = ADVANCED_FACE('',(#10877),#10883,.F.); -#10877 = FACE_BOUND('',#10878,.F.); -#10878 = EDGE_LOOP('',(#10879,#10880,#10881,#10882)); -#10879 = ORIENTED_EDGE('',*,*,#10766,.F.); -#10880 = ORIENTED_EDGE('',*,*,#10836,.T.); -#10881 = ORIENTED_EDGE('',*,*,#10806,.T.); -#10882 = ORIENTED_EDGE('',*,*,#10858,.F.); -#10883 = PLANE('',#10884); -#10884 = AXIS2_PLACEMENT_3D('',#10885,#10886,#10887); -#10885 = CARTESIAN_POINT('',(56.,-43.475,37.725)); -#10886 = DIRECTION('',(0.,0.,1.)); -#10887 = DIRECTION('',(1.,0.,-0.)); -#10888 = ADVANCED_FACE('',(#10889),#10895,.T.); -#10889 = FACE_BOUND('',#10890,.T.); -#10890 = EDGE_LOOP('',(#10891,#10892,#10893,#10894)); -#10891 = ORIENTED_EDGE('',*,*,#10782,.F.); -#10892 = ORIENTED_EDGE('',*,*,#10843,.T.); -#10893 = ORIENTED_EDGE('',*,*,#10822,.T.); -#10894 = ORIENTED_EDGE('',*,*,#10865,.F.); -#10895 = PLANE('',#10896); -#10896 = AXIS2_PLACEMENT_3D('',#10897,#10898,#10899); -#10897 = CARTESIAN_POINT('',(56.,-43.475,38.275)); -#10898 = DIRECTION('',(0.,0.,1.)); -#10899 = DIRECTION('',(1.,0.,-0.)); -#10900 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#10904)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#10901,#10902,#10903)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#10901 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#10902 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#10903 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#10904 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#10901, - 'distance_accuracy_value','confusion accuracy'); -#10905 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#10906,#10908); -#10906 = ( REPRESENTATION_RELATIONSHIP('','',#10749,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#10907) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#10907 = ITEM_DEFINED_TRANSFORMATION('','',#11,#451); -#10908 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #10909); -#10909 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('110', - 'WireFrame_RightBank_Bottom','',#5,#10744,$); -#10910 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#10746)); -#10911 = SHAPE_DEFINITION_REPRESENTATION(#10912,#10918); -#10912 = PRODUCT_DEFINITION_SHAPE('','',#10913); -#10913 = PRODUCT_DEFINITION('design','',#10914,#10917); -#10914 = PRODUCT_DEFINITION_FORMATION('','',#10915); -#10915 = PRODUCT('WireFrame_TopBridge','WireFrame_TopBridge','',(#10916) - ); -#10916 = PRODUCT_CONTEXT('',#2,'mechanical'); -#10917 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#10918 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#10919),#11069); -#10919 = MANIFOLD_SOLID_BREP('',#10920); -#10920 = CLOSED_SHELL('',(#10921,#10961,#11001,#11023,#11045,#11057)); -#10921 = ADVANCED_FACE('',(#10922),#10956,.F.); -#10922 = FACE_BOUND('',#10923,.F.); -#10923 = EDGE_LOOP('',(#10924,#10934,#10942,#10950)); -#10924 = ORIENTED_EDGE('',*,*,#10925,.F.); -#10925 = EDGE_CURVE('',#10926,#10928,#10930,.T.); -#10926 = VERTEX_POINT('',#10927); -#10927 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#10928 = VERTEX_POINT('',#10929); -#10929 = CARTESIAN_POINT('',(45.,-42.275,158.275)); -#10930 = LINE('',#10931,#10932); -#10931 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#10932 = VECTOR('',#10933,1.); -#10933 = DIRECTION('',(0.,0.,1.)); -#10934 = ORIENTED_EDGE('',*,*,#10935,.T.); -#10935 = EDGE_CURVE('',#10926,#10936,#10938,.T.); -#10936 = VERTEX_POINT('',#10937); -#10937 = CARTESIAN_POINT('',(45.,-41.725,157.725)); -#10938 = LINE('',#10939,#10940); -#10939 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#10940 = VECTOR('',#10941,1.); -#10941 = DIRECTION('',(-0.,1.,0.)); -#10942 = ORIENTED_EDGE('',*,*,#10943,.T.); -#10943 = EDGE_CURVE('',#10936,#10944,#10946,.T.); -#10944 = VERTEX_POINT('',#10945); -#10945 = CARTESIAN_POINT('',(45.,-41.725,158.275)); -#10946 = LINE('',#10947,#10948); -#10947 = CARTESIAN_POINT('',(45.,-41.725,157.725)); -#10948 = VECTOR('',#10949,1.); -#10949 = DIRECTION('',(0.,0.,1.)); -#10950 = ORIENTED_EDGE('',*,*,#10951,.F.); -#10951 = EDGE_CURVE('',#10928,#10944,#10952,.T.); -#10952 = LINE('',#10953,#10954); -#10953 = CARTESIAN_POINT('',(45.,-42.275,158.275)); -#10954 = VECTOR('',#10955,1.); -#10955 = DIRECTION('',(-0.,1.,0.)); -#10956 = PLANE('',#10957); -#10957 = AXIS2_PLACEMENT_3D('',#10958,#10959,#10960); -#10958 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#10959 = DIRECTION('',(1.,0.,-0.)); -#10960 = DIRECTION('',(0.,0.,1.)); -#10961 = ADVANCED_FACE('',(#10962),#10996,.T.); -#10962 = FACE_BOUND('',#10963,.T.); -#10963 = EDGE_LOOP('',(#10964,#10974,#10982,#10990)); -#10964 = ORIENTED_EDGE('',*,*,#10965,.F.); -#10965 = EDGE_CURVE('',#10966,#10968,#10970,.T.); -#10966 = VERTEX_POINT('',#10967); -#10967 = CARTESIAN_POINT('',(88.,-42.275,157.725)); -#10968 = VERTEX_POINT('',#10969); -#10969 = CARTESIAN_POINT('',(88.,-42.275,158.275)); -#10970 = LINE('',#10971,#10972); -#10971 = CARTESIAN_POINT('',(88.,-42.275,157.725)); -#10972 = VECTOR('',#10973,1.); -#10973 = DIRECTION('',(0.,0.,1.)); -#10974 = ORIENTED_EDGE('',*,*,#10975,.T.); -#10975 = EDGE_CURVE('',#10966,#10976,#10978,.T.); -#10976 = VERTEX_POINT('',#10977); -#10977 = CARTESIAN_POINT('',(88.,-41.725,157.725)); -#10978 = LINE('',#10979,#10980); -#10979 = CARTESIAN_POINT('',(88.,-42.275,157.725)); -#10980 = VECTOR('',#10981,1.); -#10981 = DIRECTION('',(-0.,1.,0.)); -#10982 = ORIENTED_EDGE('',*,*,#10983,.T.); -#10983 = EDGE_CURVE('',#10976,#10984,#10986,.T.); -#10984 = VERTEX_POINT('',#10985); -#10985 = CARTESIAN_POINT('',(88.,-41.725,158.275)); -#10986 = LINE('',#10987,#10988); -#10987 = CARTESIAN_POINT('',(88.,-41.725,157.725)); -#10988 = VECTOR('',#10989,1.); -#10989 = DIRECTION('',(0.,0.,1.)); -#10990 = ORIENTED_EDGE('',*,*,#10991,.F.); -#10991 = EDGE_CURVE('',#10968,#10984,#10992,.T.); -#10992 = LINE('',#10993,#10994); -#10993 = CARTESIAN_POINT('',(88.,-42.275,158.275)); -#10994 = VECTOR('',#10995,1.); -#10995 = DIRECTION('',(-0.,1.,0.)); -#10996 = PLANE('',#10997); -#10997 = AXIS2_PLACEMENT_3D('',#10998,#10999,#11000); -#10998 = CARTESIAN_POINT('',(88.,-42.275,157.725)); -#10999 = DIRECTION('',(1.,0.,-0.)); -#11000 = DIRECTION('',(0.,0.,1.)); -#11001 = ADVANCED_FACE('',(#11002),#11018,.F.); -#11002 = FACE_BOUND('',#11003,.F.); -#11003 = EDGE_LOOP('',(#11004,#11010,#11011,#11017)); -#11004 = ORIENTED_EDGE('',*,*,#11005,.F.); -#11005 = EDGE_CURVE('',#10926,#10966,#11006,.T.); -#11006 = LINE('',#11007,#11008); -#11007 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#11008 = VECTOR('',#11009,1.); -#11009 = DIRECTION('',(1.,0.,-0.)); -#11010 = ORIENTED_EDGE('',*,*,#10925,.T.); -#11011 = ORIENTED_EDGE('',*,*,#11012,.T.); -#11012 = EDGE_CURVE('',#10928,#10968,#11013,.T.); -#11013 = LINE('',#11014,#11015); -#11014 = CARTESIAN_POINT('',(45.,-42.275,158.275)); -#11015 = VECTOR('',#11016,1.); -#11016 = DIRECTION('',(1.,0.,-0.)); -#11017 = ORIENTED_EDGE('',*,*,#10965,.F.); -#11018 = PLANE('',#11019); -#11019 = AXIS2_PLACEMENT_3D('',#11020,#11021,#11022); -#11020 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#11021 = DIRECTION('',(-0.,1.,0.)); -#11022 = DIRECTION('',(0.,0.,1.)); -#11023 = ADVANCED_FACE('',(#11024),#11040,.T.); -#11024 = FACE_BOUND('',#11025,.T.); -#11025 = EDGE_LOOP('',(#11026,#11032,#11033,#11039)); -#11026 = ORIENTED_EDGE('',*,*,#11027,.F.); -#11027 = EDGE_CURVE('',#10936,#10976,#11028,.T.); -#11028 = LINE('',#11029,#11030); -#11029 = CARTESIAN_POINT('',(45.,-41.725,157.725)); -#11030 = VECTOR('',#11031,1.); -#11031 = DIRECTION('',(1.,0.,-0.)); -#11032 = ORIENTED_EDGE('',*,*,#10943,.T.); -#11033 = ORIENTED_EDGE('',*,*,#11034,.T.); -#11034 = EDGE_CURVE('',#10944,#10984,#11035,.T.); -#11035 = LINE('',#11036,#11037); -#11036 = CARTESIAN_POINT('',(45.,-41.725,158.275)); -#11037 = VECTOR('',#11038,1.); -#11038 = DIRECTION('',(1.,0.,-0.)); -#11039 = ORIENTED_EDGE('',*,*,#10983,.F.); -#11040 = PLANE('',#11041); -#11041 = AXIS2_PLACEMENT_3D('',#11042,#11043,#11044); -#11042 = CARTESIAN_POINT('',(45.,-41.725,157.725)); -#11043 = DIRECTION('',(-0.,1.,0.)); -#11044 = DIRECTION('',(0.,0.,1.)); -#11045 = ADVANCED_FACE('',(#11046),#11052,.F.); -#11046 = FACE_BOUND('',#11047,.F.); -#11047 = EDGE_LOOP('',(#11048,#11049,#11050,#11051)); -#11048 = ORIENTED_EDGE('',*,*,#10935,.F.); -#11049 = ORIENTED_EDGE('',*,*,#11005,.T.); -#11050 = ORIENTED_EDGE('',*,*,#10975,.T.); -#11051 = ORIENTED_EDGE('',*,*,#11027,.F.); -#11052 = PLANE('',#11053); -#11053 = AXIS2_PLACEMENT_3D('',#11054,#11055,#11056); -#11054 = CARTESIAN_POINT('',(45.,-42.275,157.725)); -#11055 = DIRECTION('',(0.,0.,1.)); -#11056 = DIRECTION('',(1.,0.,-0.)); -#11057 = ADVANCED_FACE('',(#11058),#11064,.T.); -#11058 = FACE_BOUND('',#11059,.T.); -#11059 = EDGE_LOOP('',(#11060,#11061,#11062,#11063)); -#11060 = ORIENTED_EDGE('',*,*,#10951,.F.); -#11061 = ORIENTED_EDGE('',*,*,#11012,.T.); -#11062 = ORIENTED_EDGE('',*,*,#10991,.T.); -#11063 = ORIENTED_EDGE('',*,*,#11034,.F.); -#11064 = PLANE('',#11065); -#11065 = AXIS2_PLACEMENT_3D('',#11066,#11067,#11068); -#11066 = CARTESIAN_POINT('',(45.,-42.275,158.275)); -#11067 = DIRECTION('',(0.,0.,1.)); -#11068 = DIRECTION('',(1.,0.,-0.)); -#11069 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#11073)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#11070,#11071,#11072)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#11070 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#11071 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#11072 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#11073 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#11070, - 'distance_accuracy_value','confusion accuracy'); -#11074 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#11075,#11077); -#11075 = ( REPRESENTATION_RELATIONSHIP('','',#10918,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#11076) -SHAPE_REPRESENTATION_RELATIONSHIP() ); -#11076 = ITEM_DEFINED_TRANSFORMATION('','',#11,#455); -#11077 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #11078); -#11078 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('111','WireFrame_TopBridge','', - #5,#10913,$); -#11079 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#10915)); -#11080 = SHAPE_DEFINITION_REPRESENTATION(#11081,#11087); -#11081 = PRODUCT_DEFINITION_SHAPE('','',#11082); -#11082 = PRODUCT_DEFINITION('design','',#11083,#11086); -#11083 = PRODUCT_DEFINITION_FORMATION('','',#11084); -#11084 = PRODUCT('WireFrame_BottomBridge','WireFrame_BottomBridge','',( - #11085)); -#11085 = PRODUCT_CONTEXT('',#2,'mechanical'); -#11086 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); -#11087 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#11088),#11238); -#11088 = MANIFOLD_SOLID_BREP('',#11089); -#11089 = CLOSED_SHELL('',(#11090,#11130,#11170,#11192,#11214,#11226)); -#11090 = ADVANCED_FACE('',(#11091),#11125,.F.); -#11091 = FACE_BOUND('',#11092,.F.); -#11092 = EDGE_LOOP('',(#11093,#11103,#11111,#11119)); -#11093 = ORIENTED_EDGE('',*,*,#11094,.F.); -#11094 = EDGE_CURVE('',#11095,#11097,#11099,.T.); -#11095 = VERTEX_POINT('',#11096); -#11096 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11097 = VERTEX_POINT('',#11098); -#11098 = CARTESIAN_POINT('',(42.,-42.275,34.275)); -#11099 = LINE('',#11100,#11101); -#11100 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11101 = VECTOR('',#11102,1.); -#11102 = DIRECTION('',(0.,0.,1.)); -#11103 = ORIENTED_EDGE('',*,*,#11104,.T.); -#11104 = EDGE_CURVE('',#11095,#11105,#11107,.T.); -#11105 = VERTEX_POINT('',#11106); -#11106 = CARTESIAN_POINT('',(42.,-41.725,33.725)); -#11107 = LINE('',#11108,#11109); -#11108 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11109 = VECTOR('',#11110,1.); -#11110 = DIRECTION('',(-0.,1.,0.)); -#11111 = ORIENTED_EDGE('',*,*,#11112,.T.); -#11112 = EDGE_CURVE('',#11105,#11113,#11115,.T.); -#11113 = VERTEX_POINT('',#11114); -#11114 = CARTESIAN_POINT('',(42.,-41.725,34.275)); -#11115 = LINE('',#11116,#11117); -#11116 = CARTESIAN_POINT('',(42.,-41.725,33.725)); -#11117 = VECTOR('',#11118,1.); -#11118 = DIRECTION('',(0.,0.,1.)); -#11119 = ORIENTED_EDGE('',*,*,#11120,.F.); -#11120 = EDGE_CURVE('',#11097,#11113,#11121,.T.); -#11121 = LINE('',#11122,#11123); -#11122 = CARTESIAN_POINT('',(42.,-42.275,34.275)); -#11123 = VECTOR('',#11124,1.); -#11124 = DIRECTION('',(-0.,1.,0.)); -#11125 = PLANE('',#11126); -#11126 = AXIS2_PLACEMENT_3D('',#11127,#11128,#11129); -#11127 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11128 = DIRECTION('',(1.,0.,-0.)); -#11129 = DIRECTION('',(0.,0.,1.)); -#11130 = ADVANCED_FACE('',(#11131),#11165,.T.); -#11131 = FACE_BOUND('',#11132,.T.); -#11132 = EDGE_LOOP('',(#11133,#11143,#11151,#11159)); -#11133 = ORIENTED_EDGE('',*,*,#11134,.F.); -#11134 = EDGE_CURVE('',#11135,#11137,#11139,.T.); -#11135 = VERTEX_POINT('',#11136); -#11136 = CARTESIAN_POINT('',(88.,-42.275,33.725)); -#11137 = VERTEX_POINT('',#11138); -#11138 = CARTESIAN_POINT('',(88.,-42.275,34.275)); -#11139 = LINE('',#11140,#11141); -#11140 = CARTESIAN_POINT('',(88.,-42.275,33.725)); -#11141 = VECTOR('',#11142,1.); -#11142 = DIRECTION('',(0.,0.,1.)); -#11143 = ORIENTED_EDGE('',*,*,#11144,.T.); -#11144 = EDGE_CURVE('',#11135,#11145,#11147,.T.); -#11145 = VERTEX_POINT('',#11146); -#11146 = CARTESIAN_POINT('',(88.,-41.725,33.725)); -#11147 = LINE('',#11148,#11149); -#11148 = CARTESIAN_POINT('',(88.,-42.275,33.725)); -#11149 = VECTOR('',#11150,1.); -#11150 = DIRECTION('',(-0.,1.,0.)); -#11151 = ORIENTED_EDGE('',*,*,#11152,.T.); -#11152 = EDGE_CURVE('',#11145,#11153,#11155,.T.); -#11153 = VERTEX_POINT('',#11154); -#11154 = CARTESIAN_POINT('',(88.,-41.725,34.275)); -#11155 = LINE('',#11156,#11157); -#11156 = CARTESIAN_POINT('',(88.,-41.725,33.725)); -#11157 = VECTOR('',#11158,1.); -#11158 = DIRECTION('',(0.,0.,1.)); -#11159 = ORIENTED_EDGE('',*,*,#11160,.F.); -#11160 = EDGE_CURVE('',#11137,#11153,#11161,.T.); -#11161 = LINE('',#11162,#11163); -#11162 = CARTESIAN_POINT('',(88.,-42.275,34.275)); -#11163 = VECTOR('',#11164,1.); -#11164 = DIRECTION('',(-0.,1.,0.)); -#11165 = PLANE('',#11166); -#11166 = AXIS2_PLACEMENT_3D('',#11167,#11168,#11169); -#11167 = CARTESIAN_POINT('',(88.,-42.275,33.725)); -#11168 = DIRECTION('',(1.,0.,-0.)); -#11169 = DIRECTION('',(0.,0.,1.)); -#11170 = ADVANCED_FACE('',(#11171),#11187,.F.); -#11171 = FACE_BOUND('',#11172,.F.); -#11172 = EDGE_LOOP('',(#11173,#11179,#11180,#11186)); -#11173 = ORIENTED_EDGE('',*,*,#11174,.F.); -#11174 = EDGE_CURVE('',#11095,#11135,#11175,.T.); -#11175 = LINE('',#11176,#11177); -#11176 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11177 = VECTOR('',#11178,1.); -#11178 = DIRECTION('',(1.,0.,-0.)); -#11179 = ORIENTED_EDGE('',*,*,#11094,.T.); -#11180 = ORIENTED_EDGE('',*,*,#11181,.T.); -#11181 = EDGE_CURVE('',#11097,#11137,#11182,.T.); -#11182 = LINE('',#11183,#11184); -#11183 = CARTESIAN_POINT('',(42.,-42.275,34.275)); -#11184 = VECTOR('',#11185,1.); -#11185 = DIRECTION('',(1.,0.,-0.)); -#11186 = ORIENTED_EDGE('',*,*,#11134,.F.); -#11187 = PLANE('',#11188); -#11188 = AXIS2_PLACEMENT_3D('',#11189,#11190,#11191); -#11189 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11190 = DIRECTION('',(-0.,1.,0.)); -#11191 = DIRECTION('',(0.,0.,1.)); -#11192 = ADVANCED_FACE('',(#11193),#11209,.T.); -#11193 = FACE_BOUND('',#11194,.T.); -#11194 = EDGE_LOOP('',(#11195,#11201,#11202,#11208)); -#11195 = ORIENTED_EDGE('',*,*,#11196,.F.); -#11196 = EDGE_CURVE('',#11105,#11145,#11197,.T.); -#11197 = LINE('',#11198,#11199); -#11198 = CARTESIAN_POINT('',(42.,-41.725,33.725)); -#11199 = VECTOR('',#11200,1.); -#11200 = DIRECTION('',(1.,0.,-0.)); -#11201 = ORIENTED_EDGE('',*,*,#11112,.T.); -#11202 = ORIENTED_EDGE('',*,*,#11203,.T.); -#11203 = EDGE_CURVE('',#11113,#11153,#11204,.T.); -#11204 = LINE('',#11205,#11206); -#11205 = CARTESIAN_POINT('',(42.,-41.725,34.275)); -#11206 = VECTOR('',#11207,1.); -#11207 = DIRECTION('',(1.,0.,-0.)); -#11208 = ORIENTED_EDGE('',*,*,#11152,.F.); -#11209 = PLANE('',#11210); -#11210 = AXIS2_PLACEMENT_3D('',#11211,#11212,#11213); -#11211 = CARTESIAN_POINT('',(42.,-41.725,33.725)); -#11212 = DIRECTION('',(-0.,1.,0.)); -#11213 = DIRECTION('',(0.,0.,1.)); -#11214 = ADVANCED_FACE('',(#11215),#11221,.F.); -#11215 = FACE_BOUND('',#11216,.F.); -#11216 = EDGE_LOOP('',(#11217,#11218,#11219,#11220)); -#11217 = ORIENTED_EDGE('',*,*,#11104,.F.); -#11218 = ORIENTED_EDGE('',*,*,#11174,.T.); -#11219 = ORIENTED_EDGE('',*,*,#11144,.T.); -#11220 = ORIENTED_EDGE('',*,*,#11196,.F.); -#11221 = PLANE('',#11222); -#11222 = AXIS2_PLACEMENT_3D('',#11223,#11224,#11225); -#11223 = CARTESIAN_POINT('',(42.,-42.275,33.725)); -#11224 = DIRECTION('',(0.,0.,1.)); -#11225 = DIRECTION('',(1.,0.,-0.)); -#11226 = ADVANCED_FACE('',(#11227),#11233,.T.); -#11227 = FACE_BOUND('',#11228,.T.); -#11228 = EDGE_LOOP('',(#11229,#11230,#11231,#11232)); -#11229 = ORIENTED_EDGE('',*,*,#11120,.F.); -#11230 = ORIENTED_EDGE('',*,*,#11181,.T.); -#11231 = ORIENTED_EDGE('',*,*,#11160,.T.); -#11232 = ORIENTED_EDGE('',*,*,#11203,.F.); -#11233 = PLANE('',#11234); -#11234 = AXIS2_PLACEMENT_3D('',#11235,#11236,#11237); -#11235 = CARTESIAN_POINT('',(42.,-42.275,34.275)); -#11236 = DIRECTION('',(0.,0.,1.)); -#11237 = DIRECTION('',(1.,0.,-0.)); -#11238 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) -GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#11242)) -GLOBAL_UNIT_ASSIGNED_CONTEXT((#11239,#11240,#11241)) -REPRESENTATION_CONTEXT('Context #1', - '3D Context with UNIT and UNCERTAINTY') ); -#11239 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); -#11240 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); -#11241 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); -#11242 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#11239, +#7685 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#7686 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#7687 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#7688 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#7685, 'distance_accuracy_value','confusion accuracy'); -#11243 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#11244,#11246); -#11244 = ( REPRESENTATION_RELATIONSHIP('','',#11087,#10) -REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#11245) +#7689 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#7690,#7692); +#7690 = ( REPRESENTATION_RELATIONSHIP('','',#7630,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#7691) SHAPE_REPRESENTATION_RELATIONSHIP() ); -#11245 = ITEM_DEFINED_TRANSFORMATION('','',#11,#459); -#11246 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', - #11247); -#11247 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('112','WireFrame_BottomBridge', - '',#5,#11082,$); -#11248 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#11084)); +#7691 = ITEM_DEFINED_TRANSFORMATION('','',#11,#323); +#7692 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #7693); +#7693 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('78', + 'AccessoryConnector_LowerRightScrew2','',#5,#7625,$); +#7694 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7627)); ENDSEC; END-ISO-10303-21; diff --git a/data/examples/qet_panel_assembly/qet_panel_assembly_report.json b/data/examples/qet_panel_assembly/qet_panel_assembly_report.json index 26918bc..c06d0d3 100644 --- a/data/examples/qet_panel_assembly/qet_panel_assembly_report.json +++ b/data/examples/qet_panel_assembly/qet_panel_assembly_report.json @@ -17,91 +17,67 @@ "Panel_RecessRightLine", "Panel_RecessTopLine", "Panel_RecessBottomLine", - "Panel_HingeTop", - "Panel_HingeBottom", "Panel_RightMountPlate", "ConnectorBank_Left_Body", "ConnectorBank_Left_SideRailLeft", "ConnectorBank_Left_SideRailRight", "ConnectorBank_Left_Hole_R01_C01", - "ConnectorBank_Left_Screw_R01", "ConnectorBank_Left_Hole_R01_C02", "ConnectorBank_Left_Hole_R02_C01", - "ConnectorBank_Left_Screw_R02", "ConnectorBank_Left_Hole_R02_C02", "ConnectorBank_Left_Hole_R03_C01", - "ConnectorBank_Left_Screw_R03", "ConnectorBank_Left_Hole_R03_C02", "ConnectorBank_Left_Hole_R04_C01", - "ConnectorBank_Left_Screw_R04", "ConnectorBank_Left_Hole_R04_C02", "ConnectorBank_Left_Hole_R05_C01", - "ConnectorBank_Left_Screw_R05", "ConnectorBank_Left_Hole_R05_C02", "ConnectorBank_Left_Hole_R06_C01", - "ConnectorBank_Left_Screw_R06", "ConnectorBank_Left_Hole_R06_C02", "ConnectorBank_Left_Hole_R07_C01", - "ConnectorBank_Left_Screw_R07", "ConnectorBank_Left_Hole_R07_C02", "ConnectorBank_Left_Hole_R08_C01", - "ConnectorBank_Left_Screw_R08", "ConnectorBank_Left_Hole_R08_C02", "ConnectorBank_Left_Hole_R09_C01", - "ConnectorBank_Left_Screw_R09", "ConnectorBank_Left_Hole_R09_C02", "ConnectorBank_Left_Hole_R10_C01", - "ConnectorBank_Left_Screw_R10", "ConnectorBank_Left_Hole_R10_C02", "ConnectorBank_Right_Body", "ConnectorBank_Right_SideRailLeft", "ConnectorBank_Right_SideRailRight", "ConnectorBank_Right_Hole_R01_C01", - "ConnectorBank_Right_Screw_R01", "ConnectorBank_Right_Hole_R01_C02", "ConnectorBank_Right_Hole_R01_C03", "ConnectorBank_Right_Hole_R02_C01", - "ConnectorBank_Right_Screw_R02", "ConnectorBank_Right_Hole_R02_C02", "ConnectorBank_Right_Hole_R02_C03", "ConnectorBank_Right_Hole_R03_C01", - "ConnectorBank_Right_Screw_R03", "ConnectorBank_Right_Hole_R03_C02", "ConnectorBank_Right_Hole_R03_C03", "ConnectorBank_Right_Hole_R04_C01", - "ConnectorBank_Right_Screw_R04", "ConnectorBank_Right_Hole_R04_C02", "ConnectorBank_Right_Hole_R04_C03", "ConnectorBank_Right_Hole_R05_C01", - "ConnectorBank_Right_Screw_R05", "ConnectorBank_Right_Hole_R05_C02", "ConnectorBank_Right_Hole_R05_C03", "ConnectorBank_Right_Hole_R06_C01", - "ConnectorBank_Right_Screw_R06", "ConnectorBank_Right_Hole_R06_C02", "ConnectorBank_Right_Hole_R06_C03", "ConnectorBank_Right_Hole_R07_C01", - "ConnectorBank_Right_Screw_R07", "ConnectorBank_Right_Hole_R07_C02", "ConnectorBank_Right_Hole_R07_C03", "ConnectorBank_Right_Hole_R08_C01", - "ConnectorBank_Right_Screw_R08", "ConnectorBank_Right_Hole_R08_C02", "ConnectorBank_Right_Hole_R08_C03", "ConnectorBank_Right_Hole_R09_C01", - "ConnectorBank_Right_Screw_R09", "ConnectorBank_Right_Hole_R09_C02", "ConnectorBank_Right_Hole_R09_C03", "ConnectorBank_Right_Hole_R10_C01", - "ConnectorBank_Right_Screw_R10", "ConnectorBank_Right_Hole_R10_C02", "ConnectorBank_Right_Hole_R10_C03", "ConnectorBank_Right_Hole_R11_C01", - "ConnectorBank_Right_Screw_R11", "ConnectorBank_Right_Hole_R11_C02", "ConnectorBank_Right_Hole_R11_C03", "ConnectorBank_Right_Hole_R12_C01", - "ConnectorBank_Right_Screw_R12", "ConnectorBank_Right_Hole_R12_C02", "ConnectorBank_Right_Hole_R12_C03", "ConnectorBank_LeftTopCap", @@ -111,17 +87,7 @@ "AccessoryConnector_LowerLeftScrew1", "AccessoryConnector_LowerLeftScrew2", "AccessoryConnector_LowerRightScrew1", - "AccessoryConnector_LowerRightScrew2", - "WireFrame_LeftBank_Left", - "WireFrame_LeftBank_Right", - "WireFrame_LeftBank_Top", - "WireFrame_LeftBank_Bottom", - "WireFrame_RightBank_Left", - "WireFrame_RightBank_Right", - "WireFrame_RightBank_Top", - "WireFrame_RightBank_Bottom", - "WireFrame_TopBridge", - "WireFrame_BottomBridge" + "AccessoryConnector_LowerRightScrew2" ], "engineering_binding_properties_present": {}, "terminal_role_objects": [] diff --git a/data/examples/qet_panel_assembly/verify_qet_panel_assembly_contacts.py b/data/examples/qet_panel_assembly/verify_qet_panel_assembly_contacts.py new file mode 100644 index 0000000..fe785b2 --- /dev/null +++ b/data/examples/qet_panel_assembly/verify_qet_panel_assembly_contacts.py @@ -0,0 +1,134 @@ +from __future__ import annotations + +import json +import os +import sys +from pathlib import Path + + +def _bootstrap_windows_freecad_runtime(): + if os.name != "nt": + return + + runtime_json = os.environ.get("QET_FREECAD_RUNTIME_JSON") + if not runtime_json: + runtime_json = os.path.join(os.environ.get("LOCALAPPDATA", ""), "QETDeps", "runtime.json") + if not runtime_json or not os.path.exists(runtime_json): + return + + with open(runtime_json, "r", encoding="utf-8-sig") as handle: + runtime = json.load(handle) + + roots = [str(item) for item in runtime.get("path_prefix", []) if item] + freecad_root = runtime.get("freecad_root", "") + if freecad_root: + roots.extend( + [ + os.path.join(freecad_root, "build", "Mod", "Material"), + os.path.join(freecad_root, "build", "Mod", "Part"), + os.path.join(freecad_root, "build", "Mod", "Import"), + os.path.join(freecad_root, "build", "Mod"), + ] + ) + roots.append(os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "downlevel")) + + for root in roots: + if root and os.path.isdir(root): + try: + os.add_dll_directory(root) + except (AttributeError, OSError): + pass + if root not in sys.path: + sys.path.append(root) + + +_bootstrap_windows_freecad_runtime() + +import FreeCAD as App + + +OUT_DIR = Path(__file__).resolve().parent +FCSTD_PATH = OUT_DIR / "qet_panel_assembly.FCStd" +STEP_PATH = OUT_DIR / "qet_panel_assembly.step" +TOLERANCE = 0.01 + + +def _bbox(doc, name): + obj = doc.getObject(name) + if obj is None: + raise AssertionError("missing object: {0}".format(name)) + bbox = obj.Shape.BoundBox + return bbox + + +def _assert_close(label, actual, expected): + if abs(actual - expected) > TOLERANCE: + raise AssertionError("{0}: expected {1:.3f}, got {2:.3f}".format(label, expected, actual)) + + +def main(): + if not FCSTD_PATH.exists(): + raise AssertionError("missing FCStd: {0}".format(FCSTD_PATH)) + if not STEP_PATH.exists(): + raise AssertionError("missing STEP: {0}".format(STEP_PATH)) + if "ISO-10303-21" not in STEP_PATH.read_text(encoding="utf-8", errors="ignore")[:256]: + raise AssertionError("STEP output is missing ISO-10303-21 header") + + doc = App.openDocument(str(FCSTD_PATH)) + backbox = _bbox(doc, "Panel_BackBox") + left_face = _bbox(doc, "Panel_LeftDoorFace") + mount_plate = _bbox(doc, "Panel_RightMountPlate") + object_names = {obj.Name for obj in doc.Objects} + + removed_objects = sorted( + name + for name in object_names + if name.startswith("WireFrame_") + or "_Screw_R" in name + or name in {"Panel_HingeTop", "Panel_HingeBottom"} + ) + if removed_objects: + raise AssertionError("removed guide/hinge objects are still present: {0}".format(removed_objects)) + + _assert_close("left thin face touches main body", left_face.XMax, backbox.XMin) + _assert_close("right mounting plate touches rear of main body", mount_plate.YMin, backbox.YMax) + _assert_close( + "right mounting plate is centered on main body's wide face", + (mount_plate.XMin + mount_plate.XMax) / 2.0, + (backbox.XMin + backbox.XMax) / 2.0, + ) + if mount_plate.XMin < backbox.XMin - TOLERANCE or mount_plate.XMax > backbox.XMax + TOLERANCE: + raise AssertionError( + "right mounting plate must sit within main body's wide face: " + "plate X=({0:.3f}, {1:.3f}), body X=({2:.3f}, {3:.3f})".format( + mount_plate.XMin, + mount_plate.XMax, + backbox.XMin, + backbox.XMax, + ) + ) + + for name in ( + "ConnectorBank_Left_Body", + "ConnectorBank_Right_Body", + "AccessoryConnector_LowerLeft", + "AccessoryConnector_LowerRight", + ): + bbox = _bbox(doc, name) + _assert_close("{0} touches mounting plate".format(name), bbox.YMin, mount_plate.YMax) + if bbox.XMin < backbox.XMin - TOLERANCE or bbox.XMax > backbox.XMax + TOLERANCE: + raise AssertionError( + "{0} must sit within main body's wide face: object X=({1:.3f}, {2:.3f}), body X=({3:.3f}, {4:.3f})".format( + name, + bbox.XMin, + bbox.XMax, + backbox.XMin, + backbox.XMax, + ) + ) + + print("verified qet_panel_assembly contact constraints") + + +if __name__ == "__main__": + main() diff --git a/data/examples/qet_split_cabinet/README.md b/data/examples/qet_split_cabinet/README.md new file mode 100644 index 0000000..8b52766 --- /dev/null +++ b/data/examples/qet_split_cabinet/README.md @@ -0,0 +1,36 @@ +# NAU03 Split Cabinet Asset + +This directory contains a simplified NAU03-style electrical cabinet STEP asset for QET / FreeCAD assembly tests. + +## Outputs + +- `nau03_test_cabinet_split.step`: STEP model with cabinet faces split into independently hideable parts. +- `nau03_test_cabinet_split.FCStd`: FreeCAD source document generated for inspection and regeneration. +- `nau03_test_cabinet_split_report.json`: Generated metadata. +- `create_nau03_split_cabinet.py`: FreeCAD Python generator. +- `verify_nau03_split_cabinet.py`: Import verification script. + +## Hideable Parts + +The STEP is intentionally exported at medium granularity: + +- `NAU03_Cabinet_Frame` +- `NAU03_Left_Side_Panel` +- `NAU03_Right_Side_Panel` +- `NAU03_Rear_Panel` +- `NAU03_Front_Left_Door` +- `NAU03_Front_Right_Door` +- `NAU03_Top_Roof` +- `NAU03_Bottom_Base` +- `NAU03_Interior_Mounting_Plate` + +This avoids the original behavior where hiding the imported cabinet hides a large assembly at once, while also avoiding hundreds of tiny screw and hinge tree objects. + +## Regenerate + +```powershell +$runtime = Get-Content -LiteralPath 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' -Raw | ConvertFrom-Json +$env:QET_FREECAD_RUNTIME_JSON = 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' +& $runtime.freecad_python 'D:\LightWork3D\data\examples\qet_split_cabinet\create_nau03_split_cabinet.py' +& $runtime.freecad_python 'D:\LightWork3D\data\examples\qet_split_cabinet\verify_nau03_split_cabinet.py' +``` diff --git a/data/examples/qet_split_cabinet/create_nau03_split_cabinet.py b/data/examples/qet_split_cabinet/create_nau03_split_cabinet.py new file mode 100644 index 0000000..05bbc1a --- /dev/null +++ b/data/examples/qet_split_cabinet/create_nau03_split_cabinet.py @@ -0,0 +1,262 @@ +from __future__ import annotations + +import json +import os +import sys +from pathlib import Path + + +def _bootstrap_windows_freecad_runtime() -> None: + if os.name != "nt": + return + + runtime_json = os.environ.get("QET_FREECAD_RUNTIME_JSON") + if not runtime_json: + runtime_json = os.path.join(os.environ.get("LOCALAPPDATA", ""), "QETDeps", "runtime.json") + if not runtime_json or not os.path.exists(runtime_json): + return + + with open(runtime_json, "r", encoding="utf-8-sig") as handle: + runtime = json.load(handle) + + roots = [str(item) for item in runtime.get("path_prefix", []) if item] + freecad_root = runtime.get("freecad_root", "") + roots.extend( + [ + os.path.join(freecad_root, "build", "Mod", "Material"), + os.path.join(freecad_root, "build", "Mod", "Part"), + os.path.join(freecad_root, "build", "Mod", "Import"), + os.path.join(freecad_root, "build", "Mod"), + os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "downlevel"), + ] + ) + + for root in roots: + if root and os.path.isdir(root): + try: + os.add_dll_directory(root) + except (AttributeError, OSError): + pass + if root not in sys.path: + sys.path.append(root) + + +_bootstrap_windows_freecad_runtime() + +import FreeCAD as App +import Part + + +OUT_DIR = Path(__file__).resolve().parent +FCSTD_PATH = OUT_DIR / "nau03_test_cabinet_split.FCStd" +STEP_PATH = OUT_DIR / "nau03_test_cabinet_split.step" +REPORT_PATH = OUT_DIR / "nau03_test_cabinet_split_report.json" + + +def _style(obj, color, transparency=0) -> None: + if not hasattr(obj, "ViewObject") or obj.ViewObject is None: + return + obj.ViewObject.ShapeColor = color + obj.ViewObject.Transparency = transparency + + +def _box(dx, dy, dz, x, y, z): + return Part.makeBox(dx, dy, dz, App.Vector(x, y, z)) + + +def _part(doc, name, shape, color, transparency=0): + obj = doc.addObject("Part::Feature", name) + obj.Label = name + obj.Shape = shape + _style(obj, color, transparency) + return obj + + +def _fuse(shapes): + valid_shapes = [shape for shape in shapes if shape and not shape.isNull()] + if not valid_shapes: + raise ValueError("expected at least one shape to fuse") + result = valid_shapes[0] + for shape in valid_shapes[1:]: + result = result.fuse(shape) + try: + result = result.removeSplitter() + except Exception: + pass + return result + + +def _windowed_door(x, y, z, width, thickness, height, window_x, window_z, window_w, window_h): + panel = _box(width, thickness, height, x, y, z) + void = _box(window_w, thickness + 6.0, window_h, x + window_x, y - 3.0, z + window_z) + panel = panel.cut(void) + + # Small raised border around the viewing window, matching the reference cabinet silhouette. + border = 12.0 + border_y = y - 4.0 + border_t = 8.0 + border_shapes = [ + _box(window_w + border * 2.0, border_t, border, x + window_x - border, border_y, z + window_z - border), + _box(window_w + border * 2.0, border_t, border, x + window_x - border, border_y, z + window_z + window_h), + _box(border, border_t, window_h, x + window_x - border, border_y, z + window_z), + _box(border, border_t, window_h, x + window_x + window_w, border_y, z + window_z), + ] + handle_w = 16.0 + handle_h = 120.0 + handle = _box(handle_w, 14.0, handle_h, x + width - 42.0, y - 12.0, z + height * 0.48) + return _fuse([panel, handle] + border_shapes) + + +def _frame_shape(width, depth, height): + post = 45.0 + rail = 55.0 + x0 = -width / 2.0 + y0 = -depth / 2.0 + shapes = [] + + for x in (x0, width / 2.0 - post): + for y in (y0, depth / 2.0 - post): + shapes.append(_box(post, post, height, x, y, 0.0)) + + for z in (0.0, height - rail): + shapes.extend( + [ + _box(width, rail, rail, x0, y0, z), + _box(width, rail, rail, x0, depth / 2.0 - rail, z), + _box(rail, depth, rail, x0, y0, z), + _box(rail, depth, rail, width / 2.0 - rail, y0, z), + ] + ) + return _fuse(shapes) + + +def _vent_slots(x, y, z, width, thickness, height, count): + panel = _box(width, thickness, height, x, y, z) + slot_w = width * 0.62 + slot_h = 16.0 + pitch = 42.0 + start_z = z + height * 0.22 + for index in range(count): + sx = x + (width - slot_w) / 2.0 + sz = start_z + index * pitch + panel = panel.cut(_box(slot_w, thickness + 6.0, slot_h, sx, y - 3.0, sz)) + return panel + + +def _export_step(objects) -> None: + try: + import Import + + Import.export(objects, str(STEP_PATH)) + except Exception: + import ImportGui + + ImportGui.export(objects, str(STEP_PATH)) + + +def main() -> None: + OUT_DIR.mkdir(parents=True, exist_ok=True) + doc = App.newDocument("NAU03_Test_Cabinet_Split") + + width = 750.0 + depth = 1300.0 + height = 2300.0 + side_t = 32.0 + door_t = 36.0 + roof_h = 75.0 + base_h = 110.0 + + metal = (0.62, 0.68, 0.69) + dark = (0.08, 0.09, 0.10) + inner = (0.34, 0.38, 0.40) + + x_min = -width / 2.0 + x_max = width / 2.0 + y_front = -depth / 2.0 + y_back = depth / 2.0 + + door_gap = 8.0 + door_width = (width - 30.0 - door_gap) / 2.0 + door_z = 55.0 + door_h = height - 105.0 + left_door = _windowed_door( + x_min + 12.0, + y_front - door_t, + door_z, + door_width, + door_t, + door_h, + 95.0, + 1260.0, + 185.0, + 470.0, + ) + right_door = _windowed_door( + x_min + 12.0 + door_width + door_gap, + y_front - door_t, + door_z, + door_width, + door_t, + door_h, + 70.0, + 1260.0, + 185.0, + 470.0, + ) + + rear_panel = _box(width - 36.0, side_t, height - 90.0, x_min + 18.0, y_back, 45.0) + left_panel = _vent_slots(x_min - side_t, y_front + 42.0, 50.0, side_t, depth - 84.0, height - 100.0, 10) + right_panel = _vent_slots(x_max, y_front + 42.0, 50.0, side_t, depth - 84.0, height - 100.0, 10) + + roof = _fuse( + [ + _box(width + 70.0, depth + 100.0, roof_h, x_min - 35.0, y_front - 50.0, height), + _box(width + 30.0, 58.0, 45.0, x_min - 15.0, y_front - 10.0, height - 45.0), + _box(width + 30.0, 58.0, 45.0, x_min - 15.0, y_back - 48.0, height - 45.0), + ] + ) + base = _fuse( + [ + _box(width + 35.0, depth + 30.0, base_h, x_min - 17.5, y_front - 15.0, -base_h), + _box(width + 85.0, 95.0, 58.0, x_min - 42.5, y_front - 40.0, -base_h - 58.0), + _box(width + 85.0, 95.0, 58.0, x_min - 42.5, y_back - 55.0, -base_h - 58.0), + ] + ) + mounting_plate = _box(width - 165.0, 14.0, height - 360.0, x_min + 82.5, y_back - 82.0, 180.0) + + objects = [ + _part(doc, "NAU03_Cabinet_Frame", _frame_shape(width, depth, height), dark, 0), + _part(doc, "NAU03_Left_Side_Panel", left_panel, metal, 0), + _part(doc, "NAU03_Right_Side_Panel", right_panel, metal, 0), + _part(doc, "NAU03_Rear_Panel", rear_panel, metal, 0), + _part(doc, "NAU03_Front_Left_Door", left_door, metal, 0), + _part(doc, "NAU03_Front_Right_Door", right_door, metal, 0), + _part(doc, "NAU03_Top_Roof", roof, metal, 0), + _part(doc, "NAU03_Bottom_Base", base, dark, 0), + _part(doc, "NAU03_Interior_Mounting_Plate", mounting_plate, inner, 8), + ] + + doc.recompute() + doc.saveAs(str(FCSTD_PATH)) + _export_step(objects) + + report = { + "source_reference": r"D:\downloadWX\xwechat_files\wxid_pv577xuccot722_5d4a\msg\file\2026-04\MCCB CABINET ASS'Y.STEP", + "outputs": {"fcstd": str(FCSTD_PATH), "step": str(STEP_PATH)}, + "dimensions_mm": { + "width": width, + "depth": depth, + "height_without_roof_base": height, + "overall_height": height + roof_h + base_h + 58.0, + }, + "hideable_parts": [obj.Label for obj in objects], + "object_count": len(objects), + } + REPORT_PATH.write_text(json.dumps(report, indent=2, ensure_ascii=False), encoding="utf-8") + print("Generated FCStd: {0}".format(FCSTD_PATH)) + print("Generated STEP: {0}".format(STEP_PATH)) + print("Generated report: {0}".format(REPORT_PATH)) + + +if __name__ == "__main__": + main() diff --git a/data/examples/qet_split_cabinet/nau03_test_cabinet_split.FCStd b/data/examples/qet_split_cabinet/nau03_test_cabinet_split.FCStd new file mode 100644 index 0000000..2f19e0a Binary files /dev/null and b/data/examples/qet_split_cabinet/nau03_test_cabinet_split.FCStd differ diff --git a/data/examples/qet_split_cabinet/nau03_test_cabinet_split.step b/data/examples/qet_split_cabinet/nau03_test_cabinet_split.step new file mode 100644 index 0000000..dd3c0f6 --- /dev/null +++ b/data/examples/qet_split_cabinet/nau03_test_cabinet_split.step @@ -0,0 +1,6558 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2026-06-10T18:05:29',(''),(''), + 'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('NAU03_Test_Cabinet_Split','NAU03_Test_Cabinet_Split','',( + #8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = SHAPE_REPRESENTATION('',(#11,#15,#19,#23,#27,#31,#35,#39,#43,#47), + #51); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18); +#16 = CARTESIAN_POINT('',(0.,0.,0.)); +#17 = DIRECTION('',(0.,0.,1.)); +#18 = DIRECTION('',(1.,0.,0.)); +#19 = AXIS2_PLACEMENT_3D('',#20,#21,#22); +#20 = CARTESIAN_POINT('',(0.,0.,0.)); +#21 = DIRECTION('',(0.,0.,1.)); +#22 = DIRECTION('',(1.,0.,0.)); +#23 = AXIS2_PLACEMENT_3D('',#24,#25,#26); +#24 = CARTESIAN_POINT('',(0.,0.,0.)); +#25 = DIRECTION('',(0.,0.,1.)); +#26 = DIRECTION('',(1.,0.,0.)); +#27 = AXIS2_PLACEMENT_3D('',#28,#29,#30); +#28 = CARTESIAN_POINT('',(0.,0.,0.)); +#29 = DIRECTION('',(0.,0.,1.)); +#30 = DIRECTION('',(1.,0.,0.)); +#31 = AXIS2_PLACEMENT_3D('',#32,#33,#34); +#32 = CARTESIAN_POINT('',(0.,0.,0.)); +#33 = DIRECTION('',(0.,0.,1.)); +#34 = DIRECTION('',(1.,0.,0.)); +#35 = AXIS2_PLACEMENT_3D('',#36,#37,#38); +#36 = CARTESIAN_POINT('',(0.,0.,0.)); +#37 = DIRECTION('',(0.,0.,1.)); +#38 = DIRECTION('',(1.,0.,0.)); +#39 = AXIS2_PLACEMENT_3D('',#40,#41,#42); +#40 = CARTESIAN_POINT('',(0.,0.,0.)); +#41 = DIRECTION('',(0.,0.,1.)); +#42 = DIRECTION('',(1.,0.,0.)); +#43 = AXIS2_PLACEMENT_3D('',#44,#45,#46); +#44 = CARTESIAN_POINT('',(0.,0.,0.)); +#45 = DIRECTION('',(0.,0.,1.)); +#46 = DIRECTION('',(1.,0.,0.)); +#47 = AXIS2_PLACEMENT_3D('',#48,#49,#50); +#48 = CARTESIAN_POINT('',(0.,0.,0.)); +#49 = DIRECTION('',(0.,0.,1.)); +#50 = DIRECTION('',(1.,0.,0.)); +#51 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#55)) GLOBAL_UNIT_ASSIGNED_CONTEXT( +(#52,#53,#54)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#52 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#53 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#54 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#55 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#52, + 'distance_accuracy_value','confusion accuracy'); +#56 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +#57 = SHAPE_DEFINITION_REPRESENTATION(#58,#64); +#58 = PRODUCT_DEFINITION_SHAPE('','',#59); +#59 = PRODUCT_DEFINITION('design','',#60,#63); +#60 = PRODUCT_DEFINITION_FORMATION('','',#61); +#61 = PRODUCT('NAU03_Cabinet_Frame','NAU03_Cabinet_Frame','',(#62)); +#62 = PRODUCT_CONTEXT('',#2,'mechanical'); +#63 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#64 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#65),#875); +#65 = MANIFOLD_SOLID_BREP('',#66); +#66 = CLOSED_SHELL('',(#67,#107,#138,#203,#243,#265,#321,#352,#383,#441, + #472,#496,#520,#537,#589,#620,#644,#708,#739,#763,#787,#804,#834, + #857)); +#67 = ADVANCED_FACE('',(#68),#102,.F.); +#68 = FACE_BOUND('',#69,.F.); +#69 = EDGE_LOOP('',(#70,#80,#88,#96)); +#70 = ORIENTED_EDGE('',*,*,#71,.F.); +#71 = EDGE_CURVE('',#72,#74,#76,.T.); +#72 = VERTEX_POINT('',#73); +#73 = CARTESIAN_POINT('',(-375.,605.,55.)); +#74 = VERTEX_POINT('',#75); +#75 = CARTESIAN_POINT('',(-330.,605.,55.)); +#76 = LINE('',#77,#78); +#77 = CARTESIAN_POINT('',(-375.,605.,55.)); +#78 = VECTOR('',#79,1.); +#79 = DIRECTION('',(1.,0.,-0.)); +#80 = ORIENTED_EDGE('',*,*,#81,.T.); +#81 = EDGE_CURVE('',#72,#82,#84,.T.); +#82 = VERTEX_POINT('',#83); +#83 = CARTESIAN_POINT('',(-375.,605.,2.245E+03)); +#84 = LINE('',#85,#86); +#85 = CARTESIAN_POINT('',(-375.,605.,0.)); +#86 = VECTOR('',#87,1.); +#87 = DIRECTION('',(0.,0.,1.)); +#88 = ORIENTED_EDGE('',*,*,#89,.T.); +#89 = EDGE_CURVE('',#82,#90,#92,.T.); +#90 = VERTEX_POINT('',#91); +#91 = CARTESIAN_POINT('',(-330.,605.,2.245E+03)); +#92 = LINE('',#93,#94); +#93 = CARTESIAN_POINT('',(-375.,605.,2.245E+03)); +#94 = VECTOR('',#95,1.); +#95 = DIRECTION('',(1.,0.,-0.)); +#96 = ORIENTED_EDGE('',*,*,#97,.F.); +#97 = EDGE_CURVE('',#74,#90,#98,.T.); +#98 = LINE('',#99,#100); +#99 = CARTESIAN_POINT('',(-330.,605.,0.)); +#100 = VECTOR('',#101,1.); +#101 = DIRECTION('',(0.,0.,1.)); +#102 = PLANE('',#103); +#103 = AXIS2_PLACEMENT_3D('',#104,#105,#106); +#104 = CARTESIAN_POINT('',(-375.,605.,0.)); +#105 = DIRECTION('',(-0.,1.,0.)); +#106 = DIRECTION('',(0.,0.,1.)); +#107 = ADVANCED_FACE('',(#108),#133,.T.); +#108 = FACE_BOUND('',#109,.T.); +#109 = EDGE_LOOP('',(#110,#111,#119,#127)); +#110 = ORIENTED_EDGE('',*,*,#97,.F.); +#111 = ORIENTED_EDGE('',*,*,#112,.F.); +#112 = EDGE_CURVE('',#113,#74,#115,.T.); +#113 = VERTEX_POINT('',#114); +#114 = CARTESIAN_POINT('',(-330.,650.,55.)); +#115 = LINE('',#116,#117); +#116 = CARTESIAN_POINT('',(-330.,600.,55.)); +#117 = VECTOR('',#118,1.); +#118 = DIRECTION('',(0.,-1.,0.)); +#119 = ORIENTED_EDGE('',*,*,#120,.T.); +#120 = EDGE_CURVE('',#113,#121,#123,.T.); +#121 = VERTEX_POINT('',#122); +#122 = CARTESIAN_POINT('',(-330.,650.,2.245E+03)); +#123 = LINE('',#124,#125); +#124 = CARTESIAN_POINT('',(-330.,650.,0.)); +#125 = VECTOR('',#126,1.); +#126 = DIRECTION('',(0.,0.,1.)); +#127 = ORIENTED_EDGE('',*,*,#128,.T.); +#128 = EDGE_CURVE('',#121,#90,#129,.T.); +#129 = LINE('',#130,#131); +#130 = CARTESIAN_POINT('',(-330.,600.,2.245E+03)); +#131 = VECTOR('',#132,1.); +#132 = DIRECTION('',(0.,-1.,0.)); +#133 = PLANE('',#134); +#134 = AXIS2_PLACEMENT_3D('',#135,#136,#137); +#135 = CARTESIAN_POINT('',(-330.,605.,0.)); +#136 = DIRECTION('',(1.,0.,-0.)); +#137 = DIRECTION('',(0.,0.,1.)); +#138 = ADVANCED_FACE('',(#139,#173),#198,.T.); +#139 = FACE_BOUND('',#140,.T.); +#140 = EDGE_LOOP('',(#141,#151,#159,#167)); +#141 = ORIENTED_EDGE('',*,*,#142,.F.); +#142 = EDGE_CURVE('',#143,#145,#147,.T.); +#143 = VERTEX_POINT('',#144); +#144 = CARTESIAN_POINT('',(-375.,-650.,0.)); +#145 = VERTEX_POINT('',#146); +#146 = CARTESIAN_POINT('',(-375.,650.,0.)); +#147 = LINE('',#148,#149); +#148 = CARTESIAN_POINT('',(-375.,605.,0.)); +#149 = VECTOR('',#150,1.); +#150 = DIRECTION('',(-0.,1.,0.)); +#151 = ORIENTED_EDGE('',*,*,#152,.T.); +#152 = EDGE_CURVE('',#143,#153,#155,.T.); +#153 = VERTEX_POINT('',#154); +#154 = CARTESIAN_POINT('',(-375.,-650.,2.3E+03)); +#155 = LINE('',#156,#157); +#156 = CARTESIAN_POINT('',(-375.,-650.,0.)); +#157 = VECTOR('',#158,1.); +#158 = DIRECTION('',(0.,0.,1.)); +#159 = ORIENTED_EDGE('',*,*,#160,.T.); +#160 = EDGE_CURVE('',#153,#161,#163,.T.); +#161 = VERTEX_POINT('',#162); +#162 = CARTESIAN_POINT('',(-375.,650.,2.3E+03)); +#163 = LINE('',#164,#165); +#164 = CARTESIAN_POINT('',(-375.,-650.,2.3E+03)); +#165 = VECTOR('',#166,1.); +#166 = DIRECTION('',(-0.,1.,0.)); +#167 = ORIENTED_EDGE('',*,*,#168,.F.); +#168 = EDGE_CURVE('',#145,#161,#169,.T.); +#169 = LINE('',#170,#171); +#170 = CARTESIAN_POINT('',(-375.,650.,0.)); +#171 = VECTOR('',#172,1.); +#172 = DIRECTION('',(0.,0.,1.)); +#173 = FACE_BOUND('',#174,.T.); +#174 = EDGE_LOOP('',(#175,#176,#184,#192)); +#175 = ORIENTED_EDGE('',*,*,#81,.T.); +#176 = ORIENTED_EDGE('',*,*,#177,.F.); +#177 = EDGE_CURVE('',#178,#82,#180,.T.); +#178 = VERTEX_POINT('',#179); +#179 = CARTESIAN_POINT('',(-375.,-605.,2.245E+03)); +#180 = LINE('',#181,#182); +#181 = CARTESIAN_POINT('',(-375.,595.,2.245E+03)); +#182 = VECTOR('',#183,1.); +#183 = DIRECTION('',(-0.,1.,0.)); +#184 = ORIENTED_EDGE('',*,*,#185,.F.); +#185 = EDGE_CURVE('',#186,#178,#188,.T.); +#186 = VERTEX_POINT('',#187); +#187 = CARTESIAN_POINT('',(-375.,-605.,55.)); +#188 = LINE('',#189,#190); +#189 = CARTESIAN_POINT('',(-375.,-605.,0.)); +#190 = VECTOR('',#191,1.); +#191 = DIRECTION('',(0.,0.,1.)); +#192 = ORIENTED_EDGE('',*,*,#193,.T.); +#193 = EDGE_CURVE('',#186,#72,#194,.T.); +#194 = LINE('',#195,#196); +#195 = CARTESIAN_POINT('',(-375.,-650.,55.)); +#196 = VECTOR('',#197,1.); +#197 = DIRECTION('',(-0.,1.,0.)); +#198 = PLANE('',#199); +#199 = AXIS2_PLACEMENT_3D('',#200,#201,#202); +#200 = CARTESIAN_POINT('',(-375.,0.,1.15E+03)); +#201 = DIRECTION('',(-1.,-0.,-0.)); +#202 = DIRECTION('',(0.,0.,-1.)); +#203 = ADVANCED_FACE('',(#204),#238,.T.); +#204 = FACE_BOUND('',#205,.T.); +#205 = EDGE_LOOP('',(#206,#216,#224,#232)); +#206 = ORIENTED_EDGE('',*,*,#207,.F.); +#207 = EDGE_CURVE('',#208,#210,#212,.T.); +#208 = VERTEX_POINT('',#209); +#209 = CARTESIAN_POINT('',(-330.,-650.,55.)); +#210 = VERTEX_POINT('',#211); +#211 = CARTESIAN_POINT('',(-330.,-650.,2.245E+03)); +#212 = LINE('',#213,#214); +#213 = CARTESIAN_POINT('',(-330.,-650.,0.)); +#214 = VECTOR('',#215,1.); +#215 = DIRECTION('',(0.,0.,1.)); +#216 = ORIENTED_EDGE('',*,*,#217,.F.); +#217 = EDGE_CURVE('',#218,#208,#220,.T.); +#218 = VERTEX_POINT('',#219); +#219 = CARTESIAN_POINT('',(-330.,-605.,55.)); +#220 = LINE('',#221,#222); +#221 = CARTESIAN_POINT('',(-330.,-650.,55.)); +#222 = VECTOR('',#223,1.); +#223 = DIRECTION('',(0.,-1.,0.)); +#224 = ORIENTED_EDGE('',*,*,#225,.T.); +#225 = EDGE_CURVE('',#218,#226,#228,.T.); +#226 = VERTEX_POINT('',#227); +#227 = CARTESIAN_POINT('',(-330.,-605.,2.245E+03)); +#228 = LINE('',#229,#230); +#229 = CARTESIAN_POINT('',(-330.,-605.,0.)); +#230 = VECTOR('',#231,1.); +#231 = DIRECTION('',(0.,0.,1.)); +#232 = ORIENTED_EDGE('',*,*,#233,.T.); +#233 = EDGE_CURVE('',#226,#210,#234,.T.); +#234 = LINE('',#235,#236); +#235 = CARTESIAN_POINT('',(-330.,-650.,2.245E+03)); +#236 = VECTOR('',#237,1.); +#237 = DIRECTION('',(0.,-1.,0.)); +#238 = PLANE('',#239); +#239 = AXIS2_PLACEMENT_3D('',#240,#241,#242); +#240 = CARTESIAN_POINT('',(-330.,-650.,0.)); +#241 = DIRECTION('',(1.,0.,-0.)); +#242 = DIRECTION('',(0.,0.,1.)); +#243 = ADVANCED_FACE('',(#244),#260,.T.); +#244 = FACE_BOUND('',#245,.T.); +#245 = EDGE_LOOP('',(#246,#252,#253,#259)); +#246 = ORIENTED_EDGE('',*,*,#247,.F.); +#247 = EDGE_CURVE('',#186,#218,#248,.T.); +#248 = LINE('',#249,#250); +#249 = CARTESIAN_POINT('',(-375.,-605.,55.)); +#250 = VECTOR('',#251,1.); +#251 = DIRECTION('',(1.,0.,-0.)); +#252 = ORIENTED_EDGE('',*,*,#185,.T.); +#253 = ORIENTED_EDGE('',*,*,#254,.T.); +#254 = EDGE_CURVE('',#178,#226,#255,.T.); +#255 = LINE('',#256,#257); +#256 = CARTESIAN_POINT('',(-375.,-605.,2.245E+03)); +#257 = VECTOR('',#258,1.); +#258 = DIRECTION('',(1.,0.,-0.)); +#259 = ORIENTED_EDGE('',*,*,#225,.F.); +#260 = PLANE('',#261); +#261 = AXIS2_PLACEMENT_3D('',#262,#263,#264); +#262 = CARTESIAN_POINT('',(-375.,-605.,0.)); +#263 = DIRECTION('',(-0.,1.,0.)); +#264 = DIRECTION('',(0.,0.,1.)); +#265 = ADVANCED_FACE('',(#266,#291),#316,.T.); +#266 = FACE_BOUND('',#267,.T.); +#267 = EDGE_LOOP('',(#268,#269,#277,#285)); +#268 = ORIENTED_EDGE('',*,*,#168,.T.); +#269 = ORIENTED_EDGE('',*,*,#270,.T.); +#270 = EDGE_CURVE('',#161,#271,#273,.T.); +#271 = VERTEX_POINT('',#272); +#272 = CARTESIAN_POINT('',(375.,650.,2.3E+03)); +#273 = LINE('',#274,#275); +#274 = CARTESIAN_POINT('',(-375.,650.,2.3E+03)); +#275 = VECTOR('',#276,1.); +#276 = DIRECTION('',(1.,0.,-0.)); +#277 = ORIENTED_EDGE('',*,*,#278,.F.); +#278 = EDGE_CURVE('',#279,#271,#281,.T.); +#279 = VERTEX_POINT('',#280); +#280 = CARTESIAN_POINT('',(375.,650.,0.)); +#281 = LINE('',#282,#283); +#282 = CARTESIAN_POINT('',(375.,650.,0.)); +#283 = VECTOR('',#284,1.); +#284 = DIRECTION('',(0.,0.,1.)); +#285 = ORIENTED_EDGE('',*,*,#286,.F.); +#286 = EDGE_CURVE('',#145,#279,#287,.T.); +#287 = LINE('',#288,#289); +#288 = CARTESIAN_POINT('',(330.,650.,0.)); +#289 = VECTOR('',#290,1.); +#290 = DIRECTION('',(1.,0.,-0.)); +#291 = FACE_BOUND('',#292,.T.); +#292 = EDGE_LOOP('',(#293,#301,#309,#315)); +#293 = ORIENTED_EDGE('',*,*,#294,.T.); +#294 = EDGE_CURVE('',#113,#295,#297,.T.); +#295 = VERTEX_POINT('',#296); +#296 = CARTESIAN_POINT('',(330.,650.,55.)); +#297 = LINE('',#298,#299); +#298 = CARTESIAN_POINT('',(-375.,650.,55.)); +#299 = VECTOR('',#300,1.); +#300 = DIRECTION('',(1.,0.,-0.)); +#301 = ORIENTED_EDGE('',*,*,#302,.T.); +#302 = EDGE_CURVE('',#295,#303,#305,.T.); +#303 = VERTEX_POINT('',#304); +#304 = CARTESIAN_POINT('',(330.,650.,2.245E+03)); +#305 = LINE('',#306,#307); +#306 = CARTESIAN_POINT('',(330.,650.,0.)); +#307 = VECTOR('',#308,1.); +#308 = DIRECTION('',(0.,0.,1.)); +#309 = ORIENTED_EDGE('',*,*,#310,.F.); +#310 = EDGE_CURVE('',#121,#303,#311,.T.); +#311 = LINE('',#312,#313); +#312 = CARTESIAN_POINT('',(-375.,650.,2.245E+03)); +#313 = VECTOR('',#314,1.); +#314 = DIRECTION('',(1.,0.,-0.)); +#315 = ORIENTED_EDGE('',*,*,#120,.F.); +#316 = PLANE('',#317); +#317 = AXIS2_PLACEMENT_3D('',#318,#319,#320); +#318 = CARTESIAN_POINT('',(0.,650.,1.15E+03)); +#319 = DIRECTION('',(0.,1.,0.)); +#320 = DIRECTION('',(0.,-0.,1.)); +#321 = ADVANCED_FACE('',(#322),#347,.F.); +#322 = FACE_BOUND('',#323,.F.); +#323 = EDGE_LOOP('',(#324,#334,#340,#341)); +#324 = ORIENTED_EDGE('',*,*,#325,.F.); +#325 = EDGE_CURVE('',#326,#328,#330,.T.); +#326 = VERTEX_POINT('',#327); +#327 = CARTESIAN_POINT('',(330.,605.,55.)); +#328 = VERTEX_POINT('',#329); +#329 = CARTESIAN_POINT('',(330.,605.,2.245E+03)); +#330 = LINE('',#331,#332); +#331 = CARTESIAN_POINT('',(330.,605.,0.)); +#332 = VECTOR('',#333,1.); +#333 = DIRECTION('',(0.,0.,1.)); +#334 = ORIENTED_EDGE('',*,*,#335,.F.); +#335 = EDGE_CURVE('',#295,#326,#336,.T.); +#336 = LINE('',#337,#338); +#337 = CARTESIAN_POINT('',(330.,600.,55.)); +#338 = VECTOR('',#339,1.); +#339 = DIRECTION('',(0.,-1.,0.)); +#340 = ORIENTED_EDGE('',*,*,#302,.T.); +#341 = ORIENTED_EDGE('',*,*,#342,.T.); +#342 = EDGE_CURVE('',#303,#328,#343,.T.); +#343 = LINE('',#344,#345); +#344 = CARTESIAN_POINT('',(330.,600.,2.245E+03)); +#345 = VECTOR('',#346,1.); +#346 = DIRECTION('',(0.,-1.,0.)); +#347 = PLANE('',#348); +#348 = AXIS2_PLACEMENT_3D('',#349,#350,#351); +#349 = CARTESIAN_POINT('',(330.,605.,0.)); +#350 = DIRECTION('',(1.,0.,-0.)); +#351 = DIRECTION('',(0.,0.,1.)); +#352 = ADVANCED_FACE('',(#353),#378,.F.); +#353 = FACE_BOUND('',#354,.F.); +#354 = EDGE_LOOP('',(#355,#363,#364,#372)); +#355 = ORIENTED_EDGE('',*,*,#356,.F.); +#356 = EDGE_CURVE('',#326,#357,#359,.T.); +#357 = VERTEX_POINT('',#358); +#358 = CARTESIAN_POINT('',(375.,605.,55.)); +#359 = LINE('',#360,#361); +#360 = CARTESIAN_POINT('',(-22.5,605.,55.)); +#361 = VECTOR('',#362,1.); +#362 = DIRECTION('',(1.,0.,-0.)); +#363 = ORIENTED_EDGE('',*,*,#325,.T.); +#364 = ORIENTED_EDGE('',*,*,#365,.T.); +#365 = EDGE_CURVE('',#328,#366,#368,.T.); +#366 = VERTEX_POINT('',#367); +#367 = CARTESIAN_POINT('',(375.,605.,2.245E+03)); +#368 = LINE('',#369,#370); +#369 = CARTESIAN_POINT('',(-22.5,605.,2.245E+03)); +#370 = VECTOR('',#371,1.); +#371 = DIRECTION('',(1.,0.,-0.)); +#372 = ORIENTED_EDGE('',*,*,#373,.F.); +#373 = EDGE_CURVE('',#357,#366,#374,.T.); +#374 = LINE('',#375,#376); +#375 = CARTESIAN_POINT('',(375.,605.,0.)); +#376 = VECTOR('',#377,1.); +#377 = DIRECTION('',(0.,0.,1.)); +#378 = PLANE('',#379); +#379 = AXIS2_PLACEMENT_3D('',#380,#381,#382); +#380 = CARTESIAN_POINT('',(330.,605.,0.)); +#381 = DIRECTION('',(-0.,1.,0.)); +#382 = DIRECTION('',(0.,0.,1.)); +#383 = ADVANCED_FACE('',(#384,#402),#436,.T.); +#384 = FACE_BOUND('',#385,.T.); +#385 = EDGE_LOOP('',(#386,#387,#388,#396)); +#386 = ORIENTED_EDGE('',*,*,#142,.T.); +#387 = ORIENTED_EDGE('',*,*,#286,.T.); +#388 = ORIENTED_EDGE('',*,*,#389,.F.); +#389 = EDGE_CURVE('',#390,#279,#392,.T.); +#390 = VERTEX_POINT('',#391); +#391 = CARTESIAN_POINT('',(375.,-650.,0.)); +#392 = LINE('',#393,#394); +#393 = CARTESIAN_POINT('',(375.,605.,0.)); +#394 = VECTOR('',#395,1.); +#395 = DIRECTION('',(-0.,1.,0.)); +#396 = ORIENTED_EDGE('',*,*,#397,.F.); +#397 = EDGE_CURVE('',#143,#390,#398,.T.); +#398 = LINE('',#399,#400); +#399 = CARTESIAN_POINT('',(330.,-650.,0.)); +#400 = VECTOR('',#401,1.); +#401 = DIRECTION('',(1.,0.,-0.)); +#402 = FACE_BOUND('',#403,.T.); +#403 = EDGE_LOOP('',(#404,#414,#422,#430)); +#404 = ORIENTED_EDGE('',*,*,#405,.F.); +#405 = EDGE_CURVE('',#406,#408,#410,.T.); +#406 = VERTEX_POINT('',#407); +#407 = CARTESIAN_POINT('',(-320.,595.,0.)); +#408 = VERTEX_POINT('',#409); +#409 = CARTESIAN_POINT('',(320.,595.,0.)); +#410 = LINE('',#411,#412); +#411 = CARTESIAN_POINT('',(-375.,595.,0.)); +#412 = VECTOR('',#413,1.); +#413 = DIRECTION('',(1.,0.,-0.)); +#414 = ORIENTED_EDGE('',*,*,#415,.F.); +#415 = EDGE_CURVE('',#416,#406,#418,.T.); +#416 = VERTEX_POINT('',#417); +#417 = CARTESIAN_POINT('',(-320.,-595.,0.)); +#418 = LINE('',#419,#420); +#419 = CARTESIAN_POINT('',(-320.,-650.,0.)); +#420 = VECTOR('',#421,1.); +#421 = DIRECTION('',(-0.,1.,0.)); +#422 = ORIENTED_EDGE('',*,*,#423,.T.); +#423 = EDGE_CURVE('',#416,#424,#426,.T.); +#424 = VERTEX_POINT('',#425); +#425 = CARTESIAN_POINT('',(320.,-595.,0.)); +#426 = LINE('',#427,#428); +#427 = CARTESIAN_POINT('',(-375.,-595.,0.)); +#428 = VECTOR('',#429,1.); +#429 = DIRECTION('',(1.,0.,-0.)); +#430 = ORIENTED_EDGE('',*,*,#431,.T.); +#431 = EDGE_CURVE('',#424,#408,#432,.T.); +#432 = LINE('',#433,#434); +#433 = CARTESIAN_POINT('',(320.,-650.,0.)); +#434 = VECTOR('',#435,1.); +#435 = DIRECTION('',(-0.,1.,0.)); +#436 = PLANE('',#437); +#437 = AXIS2_PLACEMENT_3D('',#438,#439,#440); +#438 = CARTESIAN_POINT('',(0.,0.,0.)); +#439 = DIRECTION('',(-0.,-0.,-1.)); +#440 = DIRECTION('',(-1.,0.,0.)); +#441 = ADVANCED_FACE('',(#442),#467,.F.); +#442 = FACE_BOUND('',#443,.F.); +#443 = EDGE_LOOP('',(#444,#445,#453,#461)); +#444 = ORIENTED_EDGE('',*,*,#405,.F.); +#445 = ORIENTED_EDGE('',*,*,#446,.F.); +#446 = EDGE_CURVE('',#447,#406,#449,.T.); +#447 = VERTEX_POINT('',#448); +#448 = CARTESIAN_POINT('',(-320.,595.,55.)); +#449 = LINE('',#450,#451); +#450 = CARTESIAN_POINT('',(-320.,595.,0.)); +#451 = VECTOR('',#452,1.); +#452 = DIRECTION('',(-0.,0.,-1.)); +#453 = ORIENTED_EDGE('',*,*,#454,.T.); +#454 = EDGE_CURVE('',#447,#455,#457,.T.); +#455 = VERTEX_POINT('',#456); +#456 = CARTESIAN_POINT('',(320.,595.,55.)); +#457 = LINE('',#458,#459); +#458 = CARTESIAN_POINT('',(-375.,595.,55.)); +#459 = VECTOR('',#460,1.); +#460 = DIRECTION('',(1.,0.,-0.)); +#461 = ORIENTED_EDGE('',*,*,#462,.T.); +#462 = EDGE_CURVE('',#455,#408,#463,.T.); +#463 = LINE('',#464,#465); +#464 = CARTESIAN_POINT('',(320.,595.,0.)); +#465 = VECTOR('',#466,1.); +#466 = DIRECTION('',(-0.,0.,-1.)); +#467 = PLANE('',#468); +#468 = AXIS2_PLACEMENT_3D('',#469,#470,#471); +#469 = CARTESIAN_POINT('',(-375.,595.,0.)); +#470 = DIRECTION('',(-0.,1.,0.)); +#471 = DIRECTION('',(0.,0.,1.)); +#472 = ADVANCED_FACE('',(#473),#491,.T.); +#473 = FACE_BOUND('',#474,.T.); +#474 = EDGE_LOOP('',(#475,#483,#484,#485)); +#475 = ORIENTED_EDGE('',*,*,#476,.T.); +#476 = EDGE_CURVE('',#477,#416,#479,.T.); +#477 = VERTEX_POINT('',#478); +#478 = CARTESIAN_POINT('',(-320.,-595.,55.)); +#479 = LINE('',#480,#481); +#480 = CARTESIAN_POINT('',(-320.,-595.,0.)); +#481 = VECTOR('',#482,1.); +#482 = DIRECTION('',(-0.,0.,-1.)); +#483 = ORIENTED_EDGE('',*,*,#415,.T.); +#484 = ORIENTED_EDGE('',*,*,#446,.F.); +#485 = ORIENTED_EDGE('',*,*,#486,.F.); +#486 = EDGE_CURVE('',#477,#447,#487,.T.); +#487 = LINE('',#488,#489); +#488 = CARTESIAN_POINT('',(-320.,-650.,55.)); +#489 = VECTOR('',#490,1.); +#490 = DIRECTION('',(-0.,1.,0.)); +#491 = PLANE('',#492); +#492 = AXIS2_PLACEMENT_3D('',#493,#494,#495); +#493 = CARTESIAN_POINT('',(-320.,-650.,0.)); +#494 = DIRECTION('',(1.,0.,-0.)); +#495 = DIRECTION('',(0.,0.,1.)); +#496 = ADVANCED_FACE('',(#497),#515,.F.); +#497 = FACE_BOUND('',#498,.F.); +#498 = EDGE_LOOP('',(#499,#507,#508,#509)); +#499 = ORIENTED_EDGE('',*,*,#500,.T.); +#500 = EDGE_CURVE('',#501,#424,#503,.T.); +#501 = VERTEX_POINT('',#502); +#502 = CARTESIAN_POINT('',(320.,-595.,55.)); +#503 = LINE('',#504,#505); +#504 = CARTESIAN_POINT('',(320.,-595.,0.)); +#505 = VECTOR('',#506,1.); +#506 = DIRECTION('',(-0.,0.,-1.)); +#507 = ORIENTED_EDGE('',*,*,#431,.T.); +#508 = ORIENTED_EDGE('',*,*,#462,.F.); +#509 = ORIENTED_EDGE('',*,*,#510,.F.); +#510 = EDGE_CURVE('',#501,#455,#511,.T.); +#511 = LINE('',#512,#513); +#512 = CARTESIAN_POINT('',(320.,-650.,55.)); +#513 = VECTOR('',#514,1.); +#514 = DIRECTION('',(-0.,1.,0.)); +#515 = PLANE('',#516); +#516 = AXIS2_PLACEMENT_3D('',#517,#518,#519); +#517 = CARTESIAN_POINT('',(320.,-650.,0.)); +#518 = DIRECTION('',(1.,0.,-0.)); +#519 = DIRECTION('',(0.,0.,1.)); +#520 = ADVANCED_FACE('',(#521),#532,.T.); +#521 = FACE_BOUND('',#522,.T.); +#522 = EDGE_LOOP('',(#523,#524,#525,#531)); +#523 = ORIENTED_EDGE('',*,*,#423,.F.); +#524 = ORIENTED_EDGE('',*,*,#476,.F.); +#525 = ORIENTED_EDGE('',*,*,#526,.T.); +#526 = EDGE_CURVE('',#477,#501,#527,.T.); +#527 = LINE('',#528,#529); +#528 = CARTESIAN_POINT('',(-375.,-595.,55.)); +#529 = VECTOR('',#530,1.); +#530 = DIRECTION('',(1.,0.,-0.)); +#531 = ORIENTED_EDGE('',*,*,#500,.T.); +#532 = PLANE('',#533); +#533 = AXIS2_PLACEMENT_3D('',#534,#535,#536); +#534 = CARTESIAN_POINT('',(-375.,-595.,0.)); +#535 = DIRECTION('',(-0.,1.,0.)); +#536 = DIRECTION('',(0.,0.,1.)); +#537 = ADVANCED_FACE('',(#538,#578),#584,.T.); +#538 = FACE_BOUND('',#539,.T.); +#539 = EDGE_LOOP('',(#540,#541,#542,#543,#551,#559,#567,#573,#574,#575, + #576,#577)); +#540 = ORIENTED_EDGE('',*,*,#193,.F.); +#541 = ORIENTED_EDGE('',*,*,#247,.T.); +#542 = ORIENTED_EDGE('',*,*,#217,.T.); +#543 = ORIENTED_EDGE('',*,*,#544,.T.); +#544 = EDGE_CURVE('',#208,#545,#547,.T.); +#545 = VERTEX_POINT('',#546); +#546 = CARTESIAN_POINT('',(330.,-650.,55.)); +#547 = LINE('',#548,#549); +#548 = CARTESIAN_POINT('',(-375.,-650.,55.)); +#549 = VECTOR('',#550,1.); +#550 = DIRECTION('',(1.,0.,-0.)); +#551 = ORIENTED_EDGE('',*,*,#552,.F.); +#552 = EDGE_CURVE('',#553,#545,#555,.T.); +#553 = VERTEX_POINT('',#554); +#554 = CARTESIAN_POINT('',(330.,-605.,55.)); +#555 = LINE('',#556,#557); +#556 = CARTESIAN_POINT('',(330.,-650.,55.)); +#557 = VECTOR('',#558,1.); +#558 = DIRECTION('',(0.,-1.,0.)); +#559 = ORIENTED_EDGE('',*,*,#560,.T.); +#560 = EDGE_CURVE('',#553,#561,#563,.T.); +#561 = VERTEX_POINT('',#562); +#562 = CARTESIAN_POINT('',(375.,-605.,55.)); +#563 = LINE('',#564,#565); +#564 = CARTESIAN_POINT('',(-22.5,-605.,55.)); +#565 = VECTOR('',#566,1.); +#566 = DIRECTION('',(1.,0.,-0.)); +#567 = ORIENTED_EDGE('',*,*,#568,.T.); +#568 = EDGE_CURVE('',#561,#357,#569,.T.); +#569 = LINE('',#570,#571); +#570 = CARTESIAN_POINT('',(375.,-650.,55.)); +#571 = VECTOR('',#572,1.); +#572 = DIRECTION('',(-0.,1.,0.)); +#573 = ORIENTED_EDGE('',*,*,#356,.F.); +#574 = ORIENTED_EDGE('',*,*,#335,.F.); +#575 = ORIENTED_EDGE('',*,*,#294,.F.); +#576 = ORIENTED_EDGE('',*,*,#112,.T.); +#577 = ORIENTED_EDGE('',*,*,#71,.F.); +#578 = FACE_BOUND('',#579,.T.); +#579 = EDGE_LOOP('',(#580,#581,#582,#583)); +#580 = ORIENTED_EDGE('',*,*,#454,.T.); +#581 = ORIENTED_EDGE('',*,*,#510,.F.); +#582 = ORIENTED_EDGE('',*,*,#526,.F.); +#583 = ORIENTED_EDGE('',*,*,#486,.T.); +#584 = PLANE('',#585); +#585 = AXIS2_PLACEMENT_3D('',#586,#587,#588); +#586 = CARTESIAN_POINT('',(0.,0.,55.)); +#587 = DIRECTION('',(0.,0.,1.)); +#588 = DIRECTION('',(1.,0.,-0.)); +#589 = ADVANCED_FACE('',(#590),#615,.T.); +#590 = FACE_BOUND('',#591,.T.); +#591 = EDGE_LOOP('',(#592,#593,#601,#609)); +#592 = ORIENTED_EDGE('',*,*,#560,.F.); +#593 = ORIENTED_EDGE('',*,*,#594,.T.); +#594 = EDGE_CURVE('',#553,#595,#597,.T.); +#595 = VERTEX_POINT('',#596); +#596 = CARTESIAN_POINT('',(330.,-605.,2.245E+03)); +#597 = LINE('',#598,#599); +#598 = CARTESIAN_POINT('',(330.,-605.,0.)); +#599 = VECTOR('',#600,1.); +#600 = DIRECTION('',(0.,0.,1.)); +#601 = ORIENTED_EDGE('',*,*,#602,.T.); +#602 = EDGE_CURVE('',#595,#603,#605,.T.); +#603 = VERTEX_POINT('',#604); +#604 = CARTESIAN_POINT('',(375.,-605.,2.245E+03)); +#605 = LINE('',#606,#607); +#606 = CARTESIAN_POINT('',(-22.5,-605.,2.245E+03)); +#607 = VECTOR('',#608,1.); +#608 = DIRECTION('',(1.,0.,-0.)); +#609 = ORIENTED_EDGE('',*,*,#610,.F.); +#610 = EDGE_CURVE('',#561,#603,#611,.T.); +#611 = LINE('',#612,#613); +#612 = CARTESIAN_POINT('',(375.,-605.,0.)); +#613 = VECTOR('',#614,1.); +#614 = DIRECTION('',(0.,0.,1.)); +#615 = PLANE('',#616); +#616 = AXIS2_PLACEMENT_3D('',#617,#618,#619); +#617 = CARTESIAN_POINT('',(330.,-605.,0.)); +#618 = DIRECTION('',(-0.,1.,0.)); +#619 = DIRECTION('',(0.,0.,1.)); +#620 = ADVANCED_FACE('',(#621),#639,.F.); +#621 = FACE_BOUND('',#622,.F.); +#622 = EDGE_LOOP('',(#623,#631,#632,#633)); +#623 = ORIENTED_EDGE('',*,*,#624,.F.); +#624 = EDGE_CURVE('',#545,#625,#627,.T.); +#625 = VERTEX_POINT('',#626); +#626 = CARTESIAN_POINT('',(330.,-650.,2.245E+03)); +#627 = LINE('',#628,#629); +#628 = CARTESIAN_POINT('',(330.,-650.,0.)); +#629 = VECTOR('',#630,1.); +#630 = DIRECTION('',(0.,0.,1.)); +#631 = ORIENTED_EDGE('',*,*,#552,.F.); +#632 = ORIENTED_EDGE('',*,*,#594,.T.); +#633 = ORIENTED_EDGE('',*,*,#634,.T.); +#634 = EDGE_CURVE('',#595,#625,#635,.T.); +#635 = LINE('',#636,#637); +#636 = CARTESIAN_POINT('',(330.,-650.,2.245E+03)); +#637 = VECTOR('',#638,1.); +#638 = DIRECTION('',(0.,-1.,0.)); +#639 = PLANE('',#640); +#640 = AXIS2_PLACEMENT_3D('',#641,#642,#643); +#641 = CARTESIAN_POINT('',(330.,-650.,0.)); +#642 = DIRECTION('',(1.,0.,-0.)); +#643 = DIRECTION('',(0.,0.,1.)); +#644 = ADVANCED_FACE('',(#645,#669),#703,.T.); +#645 = FACE_BOUND('',#646,.T.); +#646 = EDGE_LOOP('',(#647,#648,#649,#650,#651,#652,#653,#659,#660,#661, + #667,#668)); +#647 = ORIENTED_EDGE('',*,*,#177,.T.); +#648 = ORIENTED_EDGE('',*,*,#89,.T.); +#649 = ORIENTED_EDGE('',*,*,#128,.F.); +#650 = ORIENTED_EDGE('',*,*,#310,.T.); +#651 = ORIENTED_EDGE('',*,*,#342,.T.); +#652 = ORIENTED_EDGE('',*,*,#365,.T.); +#653 = ORIENTED_EDGE('',*,*,#654,.F.); +#654 = EDGE_CURVE('',#603,#366,#655,.T.); +#655 = LINE('',#656,#657); +#656 = CARTESIAN_POINT('',(375.,595.,2.245E+03)); +#657 = VECTOR('',#658,1.); +#658 = DIRECTION('',(-0.,1.,0.)); +#659 = ORIENTED_EDGE('',*,*,#602,.F.); +#660 = ORIENTED_EDGE('',*,*,#634,.T.); +#661 = ORIENTED_EDGE('',*,*,#662,.F.); +#662 = EDGE_CURVE('',#210,#625,#663,.T.); +#663 = LINE('',#664,#665); +#664 = CARTESIAN_POINT('',(-375.,-650.,2.245E+03)); +#665 = VECTOR('',#666,1.); +#666 = DIRECTION('',(1.,0.,-0.)); +#667 = ORIENTED_EDGE('',*,*,#233,.F.); +#668 = ORIENTED_EDGE('',*,*,#254,.F.); +#669 = FACE_BOUND('',#670,.T.); +#670 = EDGE_LOOP('',(#671,#681,#689,#697)); +#671 = ORIENTED_EDGE('',*,*,#672,.F.); +#672 = EDGE_CURVE('',#673,#675,#677,.T.); +#673 = VERTEX_POINT('',#674); +#674 = CARTESIAN_POINT('',(-320.,595.,2.245E+03)); +#675 = VERTEX_POINT('',#676); +#676 = CARTESIAN_POINT('',(320.,595.,2.245E+03)); +#677 = LINE('',#678,#679); +#678 = CARTESIAN_POINT('',(-375.,595.,2.245E+03)); +#679 = VECTOR('',#680,1.); +#680 = DIRECTION('',(1.,0.,-0.)); +#681 = ORIENTED_EDGE('',*,*,#682,.F.); +#682 = EDGE_CURVE('',#683,#673,#685,.T.); +#683 = VERTEX_POINT('',#684); +#684 = CARTESIAN_POINT('',(-320.,-595.,2.245E+03)); +#685 = LINE('',#686,#687); +#686 = CARTESIAN_POINT('',(-320.,-650.,2.245E+03)); +#687 = VECTOR('',#688,1.); +#688 = DIRECTION('',(-0.,1.,0.)); +#689 = ORIENTED_EDGE('',*,*,#690,.T.); +#690 = EDGE_CURVE('',#683,#691,#693,.T.); +#691 = VERTEX_POINT('',#692); +#692 = CARTESIAN_POINT('',(320.,-595.,2.245E+03)); +#693 = LINE('',#694,#695); +#694 = CARTESIAN_POINT('',(-375.,-595.,2.245E+03)); +#695 = VECTOR('',#696,1.); +#696 = DIRECTION('',(1.,0.,-0.)); +#697 = ORIENTED_EDGE('',*,*,#698,.T.); +#698 = EDGE_CURVE('',#691,#675,#699,.T.); +#699 = LINE('',#700,#701); +#700 = CARTESIAN_POINT('',(320.,-650.,2.245E+03)); +#701 = VECTOR('',#702,1.); +#702 = DIRECTION('',(-0.,1.,0.)); +#703 = PLANE('',#704); +#704 = AXIS2_PLACEMENT_3D('',#705,#706,#707); +#705 = CARTESIAN_POINT('',(0.,0.,2.245E+03)); +#706 = DIRECTION('',(-0.,-0.,-1.)); +#707 = DIRECTION('',(-1.,0.,0.)); +#708 = ADVANCED_FACE('',(#709),#734,.F.); +#709 = FACE_BOUND('',#710,.F.); +#710 = EDGE_LOOP('',(#711,#712,#720,#728)); +#711 = ORIENTED_EDGE('',*,*,#672,.F.); +#712 = ORIENTED_EDGE('',*,*,#713,.F.); +#713 = EDGE_CURVE('',#714,#673,#716,.T.); +#714 = VERTEX_POINT('',#715); +#715 = CARTESIAN_POINT('',(-320.,595.,2.3E+03)); +#716 = LINE('',#717,#718); +#717 = CARTESIAN_POINT('',(-320.,595.,2.245E+03)); +#718 = VECTOR('',#719,1.); +#719 = DIRECTION('',(-0.,0.,-1.)); +#720 = ORIENTED_EDGE('',*,*,#721,.T.); +#721 = EDGE_CURVE('',#714,#722,#724,.T.); +#722 = VERTEX_POINT('',#723); +#723 = CARTESIAN_POINT('',(320.,595.,2.3E+03)); +#724 = LINE('',#725,#726); +#725 = CARTESIAN_POINT('',(-375.,595.,2.3E+03)); +#726 = VECTOR('',#727,1.); +#727 = DIRECTION('',(1.,0.,-0.)); +#728 = ORIENTED_EDGE('',*,*,#729,.T.); +#729 = EDGE_CURVE('',#722,#675,#730,.T.); +#730 = LINE('',#731,#732); +#731 = CARTESIAN_POINT('',(320.,595.,2.245E+03)); +#732 = VECTOR('',#733,1.); +#733 = DIRECTION('',(-0.,0.,-1.)); +#734 = PLANE('',#735); +#735 = AXIS2_PLACEMENT_3D('',#736,#737,#738); +#736 = CARTESIAN_POINT('',(-375.,595.,2.245E+03)); +#737 = DIRECTION('',(-0.,1.,0.)); +#738 = DIRECTION('',(0.,0.,1.)); +#739 = ADVANCED_FACE('',(#740),#758,.T.); +#740 = FACE_BOUND('',#741,.T.); +#741 = EDGE_LOOP('',(#742,#750,#751,#752)); +#742 = ORIENTED_EDGE('',*,*,#743,.T.); +#743 = EDGE_CURVE('',#744,#683,#746,.T.); +#744 = VERTEX_POINT('',#745); +#745 = CARTESIAN_POINT('',(-320.,-595.,2.3E+03)); +#746 = LINE('',#747,#748); +#747 = CARTESIAN_POINT('',(-320.,-595.,2.245E+03)); +#748 = VECTOR('',#749,1.); +#749 = DIRECTION('',(-0.,0.,-1.)); +#750 = ORIENTED_EDGE('',*,*,#682,.T.); +#751 = ORIENTED_EDGE('',*,*,#713,.F.); +#752 = ORIENTED_EDGE('',*,*,#753,.F.); +#753 = EDGE_CURVE('',#744,#714,#754,.T.); +#754 = LINE('',#755,#756); +#755 = CARTESIAN_POINT('',(-320.,-650.,2.3E+03)); +#756 = VECTOR('',#757,1.); +#757 = DIRECTION('',(-0.,1.,0.)); +#758 = PLANE('',#759); +#759 = AXIS2_PLACEMENT_3D('',#760,#761,#762); +#760 = CARTESIAN_POINT('',(-320.,-650.,2.245E+03)); +#761 = DIRECTION('',(1.,0.,-0.)); +#762 = DIRECTION('',(0.,0.,1.)); +#763 = ADVANCED_FACE('',(#764),#782,.F.); +#764 = FACE_BOUND('',#765,.F.); +#765 = EDGE_LOOP('',(#766,#774,#775,#776)); +#766 = ORIENTED_EDGE('',*,*,#767,.T.); +#767 = EDGE_CURVE('',#768,#691,#770,.T.); +#768 = VERTEX_POINT('',#769); +#769 = CARTESIAN_POINT('',(320.,-595.,2.3E+03)); +#770 = LINE('',#771,#772); +#771 = CARTESIAN_POINT('',(320.,-595.,2.245E+03)); +#772 = VECTOR('',#773,1.); +#773 = DIRECTION('',(-0.,0.,-1.)); +#774 = ORIENTED_EDGE('',*,*,#698,.T.); +#775 = ORIENTED_EDGE('',*,*,#729,.F.); +#776 = ORIENTED_EDGE('',*,*,#777,.F.); +#777 = EDGE_CURVE('',#768,#722,#778,.T.); +#778 = LINE('',#779,#780); +#779 = CARTESIAN_POINT('',(320.,-650.,2.3E+03)); +#780 = VECTOR('',#781,1.); +#781 = DIRECTION('',(-0.,1.,0.)); +#782 = PLANE('',#783); +#783 = AXIS2_PLACEMENT_3D('',#784,#785,#786); +#784 = CARTESIAN_POINT('',(320.,-650.,2.245E+03)); +#785 = DIRECTION('',(1.,0.,-0.)); +#786 = DIRECTION('',(0.,0.,1.)); +#787 = ADVANCED_FACE('',(#788),#799,.T.); +#788 = FACE_BOUND('',#789,.T.); +#789 = EDGE_LOOP('',(#790,#791,#792,#798)); +#790 = ORIENTED_EDGE('',*,*,#690,.F.); +#791 = ORIENTED_EDGE('',*,*,#743,.F.); +#792 = ORIENTED_EDGE('',*,*,#793,.T.); +#793 = EDGE_CURVE('',#744,#768,#794,.T.); +#794 = LINE('',#795,#796); +#795 = CARTESIAN_POINT('',(-375.,-595.,2.3E+03)); +#796 = VECTOR('',#797,1.); +#797 = DIRECTION('',(1.,0.,-0.)); +#798 = ORIENTED_EDGE('',*,*,#767,.T.); +#799 = PLANE('',#800); +#800 = AXIS2_PLACEMENT_3D('',#801,#802,#803); +#801 = CARTESIAN_POINT('',(-375.,-595.,2.245E+03)); +#802 = DIRECTION('',(-0.,1.,0.)); +#803 = DIRECTION('',(0.,0.,1.)); +#804 = ADVANCED_FACE('',(#805,#823),#829,.T.); +#805 = FACE_BOUND('',#806,.T.); +#806 = EDGE_LOOP('',(#807,#808,#816,#822)); +#807 = ORIENTED_EDGE('',*,*,#160,.F.); +#808 = ORIENTED_EDGE('',*,*,#809,.T.); +#809 = EDGE_CURVE('',#153,#810,#812,.T.); +#810 = VERTEX_POINT('',#811); +#811 = CARTESIAN_POINT('',(375.,-650.,2.3E+03)); +#812 = LINE('',#813,#814); +#813 = CARTESIAN_POINT('',(-375.,-650.,2.3E+03)); +#814 = VECTOR('',#815,1.); +#815 = DIRECTION('',(1.,0.,-0.)); +#816 = ORIENTED_EDGE('',*,*,#817,.T.); +#817 = EDGE_CURVE('',#810,#271,#818,.T.); +#818 = LINE('',#819,#820); +#819 = CARTESIAN_POINT('',(375.,-650.,2.3E+03)); +#820 = VECTOR('',#821,1.); +#821 = DIRECTION('',(-0.,1.,0.)); +#822 = ORIENTED_EDGE('',*,*,#270,.F.); +#823 = FACE_BOUND('',#824,.T.); +#824 = EDGE_LOOP('',(#825,#826,#827,#828)); +#825 = ORIENTED_EDGE('',*,*,#721,.T.); +#826 = ORIENTED_EDGE('',*,*,#777,.F.); +#827 = ORIENTED_EDGE('',*,*,#793,.F.); +#828 = ORIENTED_EDGE('',*,*,#753,.T.); +#829 = PLANE('',#830); +#830 = AXIS2_PLACEMENT_3D('',#831,#832,#833); +#831 = CARTESIAN_POINT('',(0.,0.,2.3E+03)); +#832 = DIRECTION('',(0.,0.,1.)); +#833 = DIRECTION('',(1.,0.,-0.)); +#834 = ADVANCED_FACE('',(#835,#846),#852,.T.); +#835 = FACE_BOUND('',#836,.T.); +#836 = EDGE_LOOP('',(#837,#838,#839,#840)); +#837 = ORIENTED_EDGE('',*,*,#389,.T.); +#838 = ORIENTED_EDGE('',*,*,#278,.T.); +#839 = ORIENTED_EDGE('',*,*,#817,.F.); +#840 = ORIENTED_EDGE('',*,*,#841,.F.); +#841 = EDGE_CURVE('',#390,#810,#842,.T.); +#842 = LINE('',#843,#844); +#843 = CARTESIAN_POINT('',(375.,-650.,0.)); +#844 = VECTOR('',#845,1.); +#845 = DIRECTION('',(0.,0.,1.)); +#846 = FACE_BOUND('',#847,.T.); +#847 = EDGE_LOOP('',(#848,#849,#850,#851)); +#848 = ORIENTED_EDGE('',*,*,#568,.F.); +#849 = ORIENTED_EDGE('',*,*,#610,.T.); +#850 = ORIENTED_EDGE('',*,*,#654,.T.); +#851 = ORIENTED_EDGE('',*,*,#373,.F.); +#852 = PLANE('',#853); +#853 = AXIS2_PLACEMENT_3D('',#854,#855,#856); +#854 = CARTESIAN_POINT('',(375.,0.,1.15E+03)); +#855 = DIRECTION('',(1.,0.,0.)); +#856 = DIRECTION('',(-0.,0.,1.)); +#857 = ADVANCED_FACE('',(#858,#864),#870,.T.); +#858 = FACE_BOUND('',#859,.T.); +#859 = EDGE_LOOP('',(#860,#861,#862,#863)); +#860 = ORIENTED_EDGE('',*,*,#397,.T.); +#861 = ORIENTED_EDGE('',*,*,#841,.T.); +#862 = ORIENTED_EDGE('',*,*,#809,.F.); +#863 = ORIENTED_EDGE('',*,*,#152,.F.); +#864 = FACE_BOUND('',#865,.T.); +#865 = EDGE_LOOP('',(#866,#867,#868,#869)); +#866 = ORIENTED_EDGE('',*,*,#544,.F.); +#867 = ORIENTED_EDGE('',*,*,#207,.T.); +#868 = ORIENTED_EDGE('',*,*,#662,.T.); +#869 = ORIENTED_EDGE('',*,*,#624,.F.); +#870 = PLANE('',#871); +#871 = AXIS2_PLACEMENT_3D('',#872,#873,#874); +#872 = CARTESIAN_POINT('',(0.,-650.,1.15E+03)); +#873 = DIRECTION('',(-0.,-1.,-0.)); +#874 = DIRECTION('',(0.,0.,-1.)); +#875 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#879)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#876,#877,#878)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#876 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#877 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#878 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#879 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#876, + 'distance_accuracy_value','confusion accuracy'); +#880 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#881,#883); +#881 = ( REPRESENTATION_RELATIONSHIP('','',#64,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#882) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#882 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); +#883 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#884 + ); +#884 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','NAU03_Cabinet_Frame','',#5, + #59,$); +#885 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#61)); +#886 = SHAPE_DEFINITION_REPRESENTATION(#887,#893); +#887 = PRODUCT_DEFINITION_SHAPE('','',#888); +#888 = PRODUCT_DEFINITION('design','',#889,#892); +#889 = PRODUCT_DEFINITION_FORMATION('','',#890); +#890 = PRODUCT('NAU03_Left_Side_Panel','NAU03_Left_Side_Panel','',(#891) + ); +#891 = PRODUCT_CONTEXT('',#2,'mechanical'); +#892 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#893 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#894),#2404); +#894 = MANIFOLD_SOLID_BREP('',#895); +#895 = CLOSED_SHELL('',(#896,#936,#1307,#1331,#1695,#1712,#1724,#1746, + #1763,#1780,#1792,#1814,#1831,#1848,#1860,#1882,#1899,#1916,#1928, + #1950,#1967,#1984,#1996,#2018,#2035,#2052,#2064,#2086,#2103,#2120, + #2132,#2154,#2171,#2188,#2200,#2222,#2239,#2256,#2268,#2290,#2307, + #2324,#2336,#2358,#2375,#2392)); +#896 = ADVANCED_FACE('',(#897),#931,.F.); +#897 = FACE_BOUND('',#898,.F.); +#898 = EDGE_LOOP('',(#899,#909,#917,#925)); +#899 = ORIENTED_EDGE('',*,*,#900,.F.); +#900 = EDGE_CURVE('',#901,#903,#905,.T.); +#901 = VERTEX_POINT('',#902); +#902 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#903 = VERTEX_POINT('',#904); +#904 = CARTESIAN_POINT('',(-407.,-608.,2.25E+03)); +#905 = LINE('',#906,#907); +#906 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#907 = VECTOR('',#908,1.); +#908 = DIRECTION('',(0.,0.,1.)); +#909 = ORIENTED_EDGE('',*,*,#910,.T.); +#910 = EDGE_CURVE('',#901,#911,#913,.T.); +#911 = VERTEX_POINT('',#912); +#912 = CARTESIAN_POINT('',(-407.,608.,50.)); +#913 = LINE('',#914,#915); +#914 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#915 = VECTOR('',#916,1.); +#916 = DIRECTION('',(-0.,1.,0.)); +#917 = ORIENTED_EDGE('',*,*,#918,.T.); +#918 = EDGE_CURVE('',#911,#919,#921,.T.); +#919 = VERTEX_POINT('',#920); +#920 = CARTESIAN_POINT('',(-407.,608.,2.25E+03)); +#921 = LINE('',#922,#923); +#922 = CARTESIAN_POINT('',(-407.,608.,50.)); +#923 = VECTOR('',#924,1.); +#924 = DIRECTION('',(0.,0.,1.)); +#925 = ORIENTED_EDGE('',*,*,#926,.F.); +#926 = EDGE_CURVE('',#903,#919,#927,.T.); +#927 = LINE('',#928,#929); +#928 = CARTESIAN_POINT('',(-407.,-608.,2.25E+03)); +#929 = VECTOR('',#930,1.); +#930 = DIRECTION('',(-0.,1.,0.)); +#931 = PLANE('',#932); +#932 = AXIS2_PLACEMENT_3D('',#933,#934,#935); +#933 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#934 = DIRECTION('',(1.,0.,-0.)); +#935 = DIRECTION('',(0.,0.,1.)); +#936 = ADVANCED_FACE('',(#937,#962,#996,#1030,#1064,#1098,#1132,#1166, + #1200,#1234,#1268),#1302,.F.); +#937 = FACE_BOUND('',#938,.F.); +#938 = EDGE_LOOP('',(#939,#947,#948,#956)); +#939 = ORIENTED_EDGE('',*,*,#940,.F.); +#940 = EDGE_CURVE('',#901,#941,#943,.T.); +#941 = VERTEX_POINT('',#942); +#942 = CARTESIAN_POINT('',(-375.,-608.,50.)); +#943 = LINE('',#944,#945); +#944 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#945 = VECTOR('',#946,1.); +#946 = DIRECTION('',(1.,0.,-0.)); +#947 = ORIENTED_EDGE('',*,*,#900,.T.); +#948 = ORIENTED_EDGE('',*,*,#949,.T.); +#949 = EDGE_CURVE('',#903,#950,#952,.T.); +#950 = VERTEX_POINT('',#951); +#951 = CARTESIAN_POINT('',(-375.,-608.,2.25E+03)); +#952 = LINE('',#953,#954); +#953 = CARTESIAN_POINT('',(-407.,-608.,2.25E+03)); +#954 = VECTOR('',#955,1.); +#955 = DIRECTION('',(1.,0.,-0.)); +#956 = ORIENTED_EDGE('',*,*,#957,.F.); +#957 = EDGE_CURVE('',#941,#950,#958,.T.); +#958 = LINE('',#959,#960); +#959 = CARTESIAN_POINT('',(-375.,-608.,50.)); +#960 = VECTOR('',#961,1.); +#961 = DIRECTION('',(0.,0.,1.)); +#962 = FACE_BOUND('',#963,.F.); +#963 = EDGE_LOOP('',(#964,#974,#982,#990)); +#964 = ORIENTED_EDGE('',*,*,#965,.F.); +#965 = EDGE_CURVE('',#966,#968,#970,.T.); +#966 = VERTEX_POINT('',#967); +#967 = CARTESIAN_POINT('',(-400.92,-608.,550.)); +#968 = VERTEX_POINT('',#969); +#969 = CARTESIAN_POINT('',(-381.08,-608.,550.)); +#970 = LINE('',#971,#972); +#971 = CARTESIAN_POINT('',(-403.96,-608.,550.)); +#972 = VECTOR('',#973,1.); +#973 = DIRECTION('',(1.,0.,-0.)); +#974 = ORIENTED_EDGE('',*,*,#975,.T.); +#975 = EDGE_CURVE('',#966,#976,#978,.T.); +#976 = VERTEX_POINT('',#977); +#977 = CARTESIAN_POINT('',(-400.92,-608.,534.)); +#978 = LINE('',#979,#980); +#979 = CARTESIAN_POINT('',(-400.92,-608.,292.)); +#980 = VECTOR('',#981,1.); +#981 = DIRECTION('',(-0.,0.,-1.)); +#982 = ORIENTED_EDGE('',*,*,#983,.T.); +#983 = EDGE_CURVE('',#976,#984,#986,.T.); +#984 = VERTEX_POINT('',#985); +#985 = CARTESIAN_POINT('',(-381.08,-608.,534.)); +#986 = LINE('',#987,#988); +#987 = CARTESIAN_POINT('',(-403.96,-608.,534.)); +#988 = VECTOR('',#989,1.); +#989 = DIRECTION('',(1.,0.,-0.)); +#990 = ORIENTED_EDGE('',*,*,#991,.F.); +#991 = EDGE_CURVE('',#968,#984,#992,.T.); +#992 = LINE('',#993,#994); +#993 = CARTESIAN_POINT('',(-381.08,-608.,292.)); +#994 = VECTOR('',#995,1.); +#995 = DIRECTION('',(-0.,0.,-1.)); +#996 = FACE_BOUND('',#997,.F.); +#997 = EDGE_LOOP('',(#998,#1008,#1016,#1024)); +#998 = ORIENTED_EDGE('',*,*,#999,.F.); +#999 = EDGE_CURVE('',#1000,#1002,#1004,.T.); +#1000 = VERTEX_POINT('',#1001); +#1001 = CARTESIAN_POINT('',(-400.92,-608.,592.)); +#1002 = VERTEX_POINT('',#1003); +#1003 = CARTESIAN_POINT('',(-381.08,-608.,592.)); +#1004 = LINE('',#1005,#1006); +#1005 = CARTESIAN_POINT('',(-403.96,-608.,592.)); +#1006 = VECTOR('',#1007,1.); +#1007 = DIRECTION('',(1.,0.,-0.)); +#1008 = ORIENTED_EDGE('',*,*,#1009,.T.); +#1009 = EDGE_CURVE('',#1000,#1010,#1012,.T.); +#1010 = VERTEX_POINT('',#1011); +#1011 = CARTESIAN_POINT('',(-400.92,-608.,576.)); +#1012 = LINE('',#1013,#1014); +#1013 = CARTESIAN_POINT('',(-400.92,-608.,313.)); +#1014 = VECTOR('',#1015,1.); +#1015 = DIRECTION('',(-0.,0.,-1.)); +#1016 = ORIENTED_EDGE('',*,*,#1017,.T.); +#1017 = EDGE_CURVE('',#1010,#1018,#1020,.T.); +#1018 = VERTEX_POINT('',#1019); +#1019 = CARTESIAN_POINT('',(-381.08,-608.,576.)); +#1020 = LINE('',#1021,#1022); +#1021 = CARTESIAN_POINT('',(-403.96,-608.,576.)); +#1022 = VECTOR('',#1023,1.); +#1023 = DIRECTION('',(1.,0.,-0.)); +#1024 = ORIENTED_EDGE('',*,*,#1025,.F.); +#1025 = EDGE_CURVE('',#1002,#1018,#1026,.T.); +#1026 = LINE('',#1027,#1028); +#1027 = CARTESIAN_POINT('',(-381.08,-608.,313.)); +#1028 = VECTOR('',#1029,1.); +#1029 = DIRECTION('',(-0.,0.,-1.)); +#1030 = FACE_BOUND('',#1031,.F.); +#1031 = EDGE_LOOP('',(#1032,#1042,#1050,#1058)); +#1032 = ORIENTED_EDGE('',*,*,#1033,.F.); +#1033 = EDGE_CURVE('',#1034,#1036,#1038,.T.); +#1034 = VERTEX_POINT('',#1035); +#1035 = CARTESIAN_POINT('',(-400.92,-608.,634.)); +#1036 = VERTEX_POINT('',#1037); +#1037 = CARTESIAN_POINT('',(-381.08,-608.,634.)); +#1038 = LINE('',#1039,#1040); +#1039 = CARTESIAN_POINT('',(-403.96,-608.,634.)); +#1040 = VECTOR('',#1041,1.); +#1041 = DIRECTION('',(1.,0.,-0.)); +#1042 = ORIENTED_EDGE('',*,*,#1043,.T.); +#1043 = EDGE_CURVE('',#1034,#1044,#1046,.T.); +#1044 = VERTEX_POINT('',#1045); +#1045 = CARTESIAN_POINT('',(-400.92,-608.,618.)); +#1046 = LINE('',#1047,#1048); +#1047 = CARTESIAN_POINT('',(-400.92,-608.,334.)); +#1048 = VECTOR('',#1049,1.); +#1049 = DIRECTION('',(-0.,0.,-1.)); +#1050 = ORIENTED_EDGE('',*,*,#1051,.T.); +#1051 = EDGE_CURVE('',#1044,#1052,#1054,.T.); +#1052 = VERTEX_POINT('',#1053); +#1053 = CARTESIAN_POINT('',(-381.08,-608.,618.)); +#1054 = LINE('',#1055,#1056); +#1055 = CARTESIAN_POINT('',(-403.96,-608.,618.)); +#1056 = VECTOR('',#1057,1.); +#1057 = DIRECTION('',(1.,0.,-0.)); +#1058 = ORIENTED_EDGE('',*,*,#1059,.F.); +#1059 = EDGE_CURVE('',#1036,#1052,#1060,.T.); +#1060 = LINE('',#1061,#1062); +#1061 = CARTESIAN_POINT('',(-381.08,-608.,334.)); +#1062 = VECTOR('',#1063,1.); +#1063 = DIRECTION('',(-0.,0.,-1.)); +#1064 = FACE_BOUND('',#1065,.F.); +#1065 = EDGE_LOOP('',(#1066,#1076,#1084,#1092)); +#1066 = ORIENTED_EDGE('',*,*,#1067,.F.); +#1067 = EDGE_CURVE('',#1068,#1070,#1072,.T.); +#1068 = VERTEX_POINT('',#1069); +#1069 = CARTESIAN_POINT('',(-400.92,-608.,676.)); +#1070 = VERTEX_POINT('',#1071); +#1071 = CARTESIAN_POINT('',(-381.08,-608.,676.)); +#1072 = LINE('',#1073,#1074); +#1073 = CARTESIAN_POINT('',(-403.96,-608.,676.)); +#1074 = VECTOR('',#1075,1.); +#1075 = DIRECTION('',(1.,0.,-0.)); +#1076 = ORIENTED_EDGE('',*,*,#1077,.T.); +#1077 = EDGE_CURVE('',#1068,#1078,#1080,.T.); +#1078 = VERTEX_POINT('',#1079); +#1079 = CARTESIAN_POINT('',(-400.92,-608.,660.)); +#1080 = LINE('',#1081,#1082); +#1081 = CARTESIAN_POINT('',(-400.92,-608.,355.)); +#1082 = VECTOR('',#1083,1.); +#1083 = DIRECTION('',(-0.,0.,-1.)); +#1084 = ORIENTED_EDGE('',*,*,#1085,.T.); +#1085 = EDGE_CURVE('',#1078,#1086,#1088,.T.); +#1086 = VERTEX_POINT('',#1087); +#1087 = CARTESIAN_POINT('',(-381.08,-608.,660.)); +#1088 = LINE('',#1089,#1090); +#1089 = CARTESIAN_POINT('',(-403.96,-608.,660.)); +#1090 = VECTOR('',#1091,1.); +#1091 = DIRECTION('',(1.,0.,-0.)); +#1092 = ORIENTED_EDGE('',*,*,#1093,.F.); +#1093 = EDGE_CURVE('',#1070,#1086,#1094,.T.); +#1094 = LINE('',#1095,#1096); +#1095 = CARTESIAN_POINT('',(-381.08,-608.,355.)); +#1096 = VECTOR('',#1097,1.); +#1097 = DIRECTION('',(-0.,0.,-1.)); +#1098 = FACE_BOUND('',#1099,.F.); +#1099 = EDGE_LOOP('',(#1100,#1110,#1118,#1126)); +#1100 = ORIENTED_EDGE('',*,*,#1101,.F.); +#1101 = EDGE_CURVE('',#1102,#1104,#1106,.T.); +#1102 = VERTEX_POINT('',#1103); +#1103 = CARTESIAN_POINT('',(-400.92,-608.,718.)); +#1104 = VERTEX_POINT('',#1105); +#1105 = CARTESIAN_POINT('',(-381.08,-608.,718.)); +#1106 = LINE('',#1107,#1108); +#1107 = CARTESIAN_POINT('',(-403.96,-608.,718.)); +#1108 = VECTOR('',#1109,1.); +#1109 = DIRECTION('',(1.,0.,-0.)); +#1110 = ORIENTED_EDGE('',*,*,#1111,.T.); +#1111 = EDGE_CURVE('',#1102,#1112,#1114,.T.); +#1112 = VERTEX_POINT('',#1113); +#1113 = CARTESIAN_POINT('',(-400.92,-608.,702.)); +#1114 = LINE('',#1115,#1116); +#1115 = CARTESIAN_POINT('',(-400.92,-608.,376.)); +#1116 = VECTOR('',#1117,1.); +#1117 = DIRECTION('',(-0.,0.,-1.)); +#1118 = ORIENTED_EDGE('',*,*,#1119,.T.); +#1119 = EDGE_CURVE('',#1112,#1120,#1122,.T.); +#1120 = VERTEX_POINT('',#1121); +#1121 = CARTESIAN_POINT('',(-381.08,-608.,702.)); +#1122 = LINE('',#1123,#1124); +#1123 = CARTESIAN_POINT('',(-403.96,-608.,702.)); +#1124 = VECTOR('',#1125,1.); +#1125 = DIRECTION('',(1.,0.,-0.)); +#1126 = ORIENTED_EDGE('',*,*,#1127,.F.); +#1127 = EDGE_CURVE('',#1104,#1120,#1128,.T.); +#1128 = LINE('',#1129,#1130); +#1129 = CARTESIAN_POINT('',(-381.08,-608.,376.)); +#1130 = VECTOR('',#1131,1.); +#1131 = DIRECTION('',(-0.,0.,-1.)); +#1132 = FACE_BOUND('',#1133,.F.); +#1133 = EDGE_LOOP('',(#1134,#1144,#1152,#1160)); +#1134 = ORIENTED_EDGE('',*,*,#1135,.F.); +#1135 = EDGE_CURVE('',#1136,#1138,#1140,.T.); +#1136 = VERTEX_POINT('',#1137); +#1137 = CARTESIAN_POINT('',(-400.92,-608.,760.)); +#1138 = VERTEX_POINT('',#1139); +#1139 = CARTESIAN_POINT('',(-381.08,-608.,760.)); +#1140 = LINE('',#1141,#1142); +#1141 = CARTESIAN_POINT('',(-403.96,-608.,760.)); +#1142 = VECTOR('',#1143,1.); +#1143 = DIRECTION('',(1.,0.,-0.)); +#1144 = ORIENTED_EDGE('',*,*,#1145,.T.); +#1145 = EDGE_CURVE('',#1136,#1146,#1148,.T.); +#1146 = VERTEX_POINT('',#1147); +#1147 = CARTESIAN_POINT('',(-400.92,-608.,744.)); +#1148 = LINE('',#1149,#1150); +#1149 = CARTESIAN_POINT('',(-400.92,-608.,397.)); +#1150 = VECTOR('',#1151,1.); +#1151 = DIRECTION('',(-0.,0.,-1.)); +#1152 = ORIENTED_EDGE('',*,*,#1153,.T.); +#1153 = EDGE_CURVE('',#1146,#1154,#1156,.T.); +#1154 = VERTEX_POINT('',#1155); +#1155 = CARTESIAN_POINT('',(-381.08,-608.,744.)); +#1156 = LINE('',#1157,#1158); +#1157 = CARTESIAN_POINT('',(-403.96,-608.,744.)); +#1158 = VECTOR('',#1159,1.); +#1159 = DIRECTION('',(1.,0.,-0.)); +#1160 = ORIENTED_EDGE('',*,*,#1161,.F.); +#1161 = EDGE_CURVE('',#1138,#1154,#1162,.T.); +#1162 = LINE('',#1163,#1164); +#1163 = CARTESIAN_POINT('',(-381.08,-608.,397.)); +#1164 = VECTOR('',#1165,1.); +#1165 = DIRECTION('',(-0.,0.,-1.)); +#1166 = FACE_BOUND('',#1167,.F.); +#1167 = EDGE_LOOP('',(#1168,#1178,#1186,#1194)); +#1168 = ORIENTED_EDGE('',*,*,#1169,.F.); +#1169 = EDGE_CURVE('',#1170,#1172,#1174,.T.); +#1170 = VERTEX_POINT('',#1171); +#1171 = CARTESIAN_POINT('',(-400.92,-608.,802.)); +#1172 = VERTEX_POINT('',#1173); +#1173 = CARTESIAN_POINT('',(-381.08,-608.,802.)); +#1174 = LINE('',#1175,#1176); +#1175 = CARTESIAN_POINT('',(-403.96,-608.,802.)); +#1176 = VECTOR('',#1177,1.); +#1177 = DIRECTION('',(1.,0.,-0.)); +#1178 = ORIENTED_EDGE('',*,*,#1179,.T.); +#1179 = EDGE_CURVE('',#1170,#1180,#1182,.T.); +#1180 = VERTEX_POINT('',#1181); +#1181 = CARTESIAN_POINT('',(-400.92,-608.,786.)); +#1182 = LINE('',#1183,#1184); +#1183 = CARTESIAN_POINT('',(-400.92,-608.,418.)); +#1184 = VECTOR('',#1185,1.); +#1185 = DIRECTION('',(-0.,0.,-1.)); +#1186 = ORIENTED_EDGE('',*,*,#1187,.T.); +#1187 = EDGE_CURVE('',#1180,#1188,#1190,.T.); +#1188 = VERTEX_POINT('',#1189); +#1189 = CARTESIAN_POINT('',(-381.08,-608.,786.)); +#1190 = LINE('',#1191,#1192); +#1191 = CARTESIAN_POINT('',(-403.96,-608.,786.)); +#1192 = VECTOR('',#1193,1.); +#1193 = DIRECTION('',(1.,0.,-0.)); +#1194 = ORIENTED_EDGE('',*,*,#1195,.F.); +#1195 = EDGE_CURVE('',#1172,#1188,#1196,.T.); +#1196 = LINE('',#1197,#1198); +#1197 = CARTESIAN_POINT('',(-381.08,-608.,418.)); +#1198 = VECTOR('',#1199,1.); +#1199 = DIRECTION('',(-0.,0.,-1.)); +#1200 = FACE_BOUND('',#1201,.F.); +#1201 = EDGE_LOOP('',(#1202,#1212,#1220,#1228)); +#1202 = ORIENTED_EDGE('',*,*,#1203,.F.); +#1203 = EDGE_CURVE('',#1204,#1206,#1208,.T.); +#1204 = VERTEX_POINT('',#1205); +#1205 = CARTESIAN_POINT('',(-400.92,-608.,844.)); +#1206 = VERTEX_POINT('',#1207); +#1207 = CARTESIAN_POINT('',(-381.08,-608.,844.)); +#1208 = LINE('',#1209,#1210); +#1209 = CARTESIAN_POINT('',(-403.96,-608.,844.)); +#1210 = VECTOR('',#1211,1.); +#1211 = DIRECTION('',(1.,0.,-0.)); +#1212 = ORIENTED_EDGE('',*,*,#1213,.T.); +#1213 = EDGE_CURVE('',#1204,#1214,#1216,.T.); +#1214 = VERTEX_POINT('',#1215); +#1215 = CARTESIAN_POINT('',(-400.92,-608.,828.)); +#1216 = LINE('',#1217,#1218); +#1217 = CARTESIAN_POINT('',(-400.92,-608.,439.)); +#1218 = VECTOR('',#1219,1.); +#1219 = DIRECTION('',(-0.,0.,-1.)); +#1220 = ORIENTED_EDGE('',*,*,#1221,.T.); +#1221 = EDGE_CURVE('',#1214,#1222,#1224,.T.); +#1222 = VERTEX_POINT('',#1223); +#1223 = CARTESIAN_POINT('',(-381.08,-608.,828.)); +#1224 = LINE('',#1225,#1226); +#1225 = CARTESIAN_POINT('',(-403.96,-608.,828.)); +#1226 = VECTOR('',#1227,1.); +#1227 = DIRECTION('',(1.,0.,-0.)); +#1228 = ORIENTED_EDGE('',*,*,#1229,.F.); +#1229 = EDGE_CURVE('',#1206,#1222,#1230,.T.); +#1230 = LINE('',#1231,#1232); +#1231 = CARTESIAN_POINT('',(-381.08,-608.,439.)); +#1232 = VECTOR('',#1233,1.); +#1233 = DIRECTION('',(-0.,0.,-1.)); +#1234 = FACE_BOUND('',#1235,.F.); +#1235 = EDGE_LOOP('',(#1236,#1246,#1254,#1262)); +#1236 = ORIENTED_EDGE('',*,*,#1237,.F.); +#1237 = EDGE_CURVE('',#1238,#1240,#1242,.T.); +#1238 = VERTEX_POINT('',#1239); +#1239 = CARTESIAN_POINT('',(-400.92,-608.,886.)); +#1240 = VERTEX_POINT('',#1241); +#1241 = CARTESIAN_POINT('',(-381.08,-608.,886.)); +#1242 = LINE('',#1243,#1244); +#1243 = CARTESIAN_POINT('',(-403.96,-608.,886.)); +#1244 = VECTOR('',#1245,1.); +#1245 = DIRECTION('',(1.,0.,-0.)); +#1246 = ORIENTED_EDGE('',*,*,#1247,.T.); +#1247 = EDGE_CURVE('',#1238,#1248,#1250,.T.); +#1248 = VERTEX_POINT('',#1249); +#1249 = CARTESIAN_POINT('',(-400.92,-608.,870.)); +#1250 = LINE('',#1251,#1252); +#1251 = CARTESIAN_POINT('',(-400.92,-608.,460.)); +#1252 = VECTOR('',#1253,1.); +#1253 = DIRECTION('',(-0.,0.,-1.)); +#1254 = ORIENTED_EDGE('',*,*,#1255,.T.); +#1255 = EDGE_CURVE('',#1248,#1256,#1258,.T.); +#1256 = VERTEX_POINT('',#1257); +#1257 = CARTESIAN_POINT('',(-381.08,-608.,870.)); +#1258 = LINE('',#1259,#1260); +#1259 = CARTESIAN_POINT('',(-403.96,-608.,870.)); +#1260 = VECTOR('',#1261,1.); +#1261 = DIRECTION('',(1.,0.,-0.)); +#1262 = ORIENTED_EDGE('',*,*,#1263,.F.); +#1263 = EDGE_CURVE('',#1240,#1256,#1264,.T.); +#1264 = LINE('',#1265,#1266); +#1265 = CARTESIAN_POINT('',(-381.08,-608.,460.)); +#1266 = VECTOR('',#1267,1.); +#1267 = DIRECTION('',(-0.,0.,-1.)); +#1268 = FACE_BOUND('',#1269,.F.); +#1269 = EDGE_LOOP('',(#1270,#1280,#1288,#1296)); +#1270 = ORIENTED_EDGE('',*,*,#1271,.F.); +#1271 = EDGE_CURVE('',#1272,#1274,#1276,.T.); +#1272 = VERTEX_POINT('',#1273); +#1273 = CARTESIAN_POINT('',(-400.92,-608.,928.)); +#1274 = VERTEX_POINT('',#1275); +#1275 = CARTESIAN_POINT('',(-381.08,-608.,928.)); +#1276 = LINE('',#1277,#1278); +#1277 = CARTESIAN_POINT('',(-403.96,-608.,928.)); +#1278 = VECTOR('',#1279,1.); +#1279 = DIRECTION('',(1.,0.,-0.)); +#1280 = ORIENTED_EDGE('',*,*,#1281,.T.); +#1281 = EDGE_CURVE('',#1272,#1282,#1284,.T.); +#1282 = VERTEX_POINT('',#1283); +#1283 = CARTESIAN_POINT('',(-400.92,-608.,912.)); +#1284 = LINE('',#1285,#1286); +#1285 = CARTESIAN_POINT('',(-400.92,-608.,481.)); +#1286 = VECTOR('',#1287,1.); +#1287 = DIRECTION('',(-0.,0.,-1.)); +#1288 = ORIENTED_EDGE('',*,*,#1289,.T.); +#1289 = EDGE_CURVE('',#1282,#1290,#1292,.T.); +#1290 = VERTEX_POINT('',#1291); +#1291 = CARTESIAN_POINT('',(-381.08,-608.,912.)); +#1292 = LINE('',#1293,#1294); +#1293 = CARTESIAN_POINT('',(-403.96,-608.,912.)); +#1294 = VECTOR('',#1295,1.); +#1295 = DIRECTION('',(1.,0.,-0.)); +#1296 = ORIENTED_EDGE('',*,*,#1297,.F.); +#1297 = EDGE_CURVE('',#1274,#1290,#1298,.T.); +#1298 = LINE('',#1299,#1300); +#1299 = CARTESIAN_POINT('',(-381.08,-608.,481.)); +#1300 = VECTOR('',#1301,1.); +#1301 = DIRECTION('',(-0.,0.,-1.)); +#1302 = PLANE('',#1303); +#1303 = AXIS2_PLACEMENT_3D('',#1304,#1305,#1306); +#1304 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#1305 = DIRECTION('',(-0.,1.,0.)); +#1306 = DIRECTION('',(0.,0.,1.)); +#1307 = ADVANCED_FACE('',(#1308),#1326,.T.); +#1308 = FACE_BOUND('',#1309,.T.); +#1309 = EDGE_LOOP('',(#1310,#1311,#1312,#1320)); +#1310 = ORIENTED_EDGE('',*,*,#926,.F.); +#1311 = ORIENTED_EDGE('',*,*,#949,.T.); +#1312 = ORIENTED_EDGE('',*,*,#1313,.T.); +#1313 = EDGE_CURVE('',#950,#1314,#1316,.T.); +#1314 = VERTEX_POINT('',#1315); +#1315 = CARTESIAN_POINT('',(-375.,608.,2.25E+03)); +#1316 = LINE('',#1317,#1318); +#1317 = CARTESIAN_POINT('',(-375.,-608.,2.25E+03)); +#1318 = VECTOR('',#1319,1.); +#1319 = DIRECTION('',(-0.,1.,0.)); +#1320 = ORIENTED_EDGE('',*,*,#1321,.F.); +#1321 = EDGE_CURVE('',#919,#1314,#1322,.T.); +#1322 = LINE('',#1323,#1324); +#1323 = CARTESIAN_POINT('',(-407.,608.,2.25E+03)); +#1324 = VECTOR('',#1325,1.); +#1325 = DIRECTION('',(1.,0.,-0.)); +#1326 = PLANE('',#1327); +#1327 = AXIS2_PLACEMENT_3D('',#1328,#1329,#1330); +#1328 = CARTESIAN_POINT('',(-407.,-608.,2.25E+03)); +#1329 = DIRECTION('',(0.,0.,1.)); +#1330 = DIRECTION('',(1.,0.,-0.)); +#1331 = ADVANCED_FACE('',(#1332,#1350,#1384,#1418,#1452,#1486,#1520, + #1554,#1588,#1622,#1656),#1690,.T.); +#1332 = FACE_BOUND('',#1333,.T.); +#1333 = EDGE_LOOP('',(#1334,#1342,#1343,#1344)); +#1334 = ORIENTED_EDGE('',*,*,#1335,.F.); +#1335 = EDGE_CURVE('',#911,#1336,#1338,.T.); +#1336 = VERTEX_POINT('',#1337); +#1337 = CARTESIAN_POINT('',(-375.,608.,50.)); +#1338 = LINE('',#1339,#1340); +#1339 = CARTESIAN_POINT('',(-407.,608.,50.)); +#1340 = VECTOR('',#1341,1.); +#1341 = DIRECTION('',(1.,0.,-0.)); +#1342 = ORIENTED_EDGE('',*,*,#918,.T.); +#1343 = ORIENTED_EDGE('',*,*,#1321,.T.); +#1344 = ORIENTED_EDGE('',*,*,#1345,.F.); +#1345 = EDGE_CURVE('',#1336,#1314,#1346,.T.); +#1346 = LINE('',#1347,#1348); +#1347 = CARTESIAN_POINT('',(-375.,608.,50.)); +#1348 = VECTOR('',#1349,1.); +#1349 = DIRECTION('',(0.,0.,1.)); +#1350 = FACE_BOUND('',#1351,.T.); +#1351 = EDGE_LOOP('',(#1352,#1362,#1370,#1378)); +#1352 = ORIENTED_EDGE('',*,*,#1353,.F.); +#1353 = EDGE_CURVE('',#1354,#1356,#1358,.T.); +#1354 = VERTEX_POINT('',#1355); +#1355 = CARTESIAN_POINT('',(-400.92,608.,550.)); +#1356 = VERTEX_POINT('',#1357); +#1357 = CARTESIAN_POINT('',(-381.08,608.,550.)); +#1358 = LINE('',#1359,#1360); +#1359 = CARTESIAN_POINT('',(-403.96,608.,550.)); +#1360 = VECTOR('',#1361,1.); +#1361 = DIRECTION('',(1.,0.,-0.)); +#1362 = ORIENTED_EDGE('',*,*,#1363,.T.); +#1363 = EDGE_CURVE('',#1354,#1364,#1366,.T.); +#1364 = VERTEX_POINT('',#1365); +#1365 = CARTESIAN_POINT('',(-400.92,608.,534.)); +#1366 = LINE('',#1367,#1368); +#1367 = CARTESIAN_POINT('',(-400.92,608.,292.)); +#1368 = VECTOR('',#1369,1.); +#1369 = DIRECTION('',(-0.,0.,-1.)); +#1370 = ORIENTED_EDGE('',*,*,#1371,.T.); +#1371 = EDGE_CURVE('',#1364,#1372,#1374,.T.); +#1372 = VERTEX_POINT('',#1373); +#1373 = CARTESIAN_POINT('',(-381.08,608.,534.)); +#1374 = LINE('',#1375,#1376); +#1375 = CARTESIAN_POINT('',(-403.96,608.,534.)); +#1376 = VECTOR('',#1377,1.); +#1377 = DIRECTION('',(1.,0.,-0.)); +#1378 = ORIENTED_EDGE('',*,*,#1379,.F.); +#1379 = EDGE_CURVE('',#1356,#1372,#1380,.T.); +#1380 = LINE('',#1381,#1382); +#1381 = CARTESIAN_POINT('',(-381.08,608.,292.)); +#1382 = VECTOR('',#1383,1.); +#1383 = DIRECTION('',(-0.,0.,-1.)); +#1384 = FACE_BOUND('',#1385,.T.); +#1385 = EDGE_LOOP('',(#1386,#1396,#1404,#1412)); +#1386 = ORIENTED_EDGE('',*,*,#1387,.F.); +#1387 = EDGE_CURVE('',#1388,#1390,#1392,.T.); +#1388 = VERTEX_POINT('',#1389); +#1389 = CARTESIAN_POINT('',(-400.92,608.,592.)); +#1390 = VERTEX_POINT('',#1391); +#1391 = CARTESIAN_POINT('',(-381.08,608.,592.)); +#1392 = LINE('',#1393,#1394); +#1393 = CARTESIAN_POINT('',(-403.96,608.,592.)); +#1394 = VECTOR('',#1395,1.); +#1395 = DIRECTION('',(1.,0.,-0.)); +#1396 = ORIENTED_EDGE('',*,*,#1397,.T.); +#1397 = EDGE_CURVE('',#1388,#1398,#1400,.T.); +#1398 = VERTEX_POINT('',#1399); +#1399 = CARTESIAN_POINT('',(-400.92,608.,576.)); +#1400 = LINE('',#1401,#1402); +#1401 = CARTESIAN_POINT('',(-400.92,608.,313.)); +#1402 = VECTOR('',#1403,1.); +#1403 = DIRECTION('',(-0.,0.,-1.)); +#1404 = ORIENTED_EDGE('',*,*,#1405,.T.); +#1405 = EDGE_CURVE('',#1398,#1406,#1408,.T.); +#1406 = VERTEX_POINT('',#1407); +#1407 = CARTESIAN_POINT('',(-381.08,608.,576.)); +#1408 = LINE('',#1409,#1410); +#1409 = CARTESIAN_POINT('',(-403.96,608.,576.)); +#1410 = VECTOR('',#1411,1.); +#1411 = DIRECTION('',(1.,0.,-0.)); +#1412 = ORIENTED_EDGE('',*,*,#1413,.F.); +#1413 = EDGE_CURVE('',#1390,#1406,#1414,.T.); +#1414 = LINE('',#1415,#1416); +#1415 = CARTESIAN_POINT('',(-381.08,608.,313.)); +#1416 = VECTOR('',#1417,1.); +#1417 = DIRECTION('',(-0.,0.,-1.)); +#1418 = FACE_BOUND('',#1419,.T.); +#1419 = EDGE_LOOP('',(#1420,#1430,#1438,#1446)); +#1420 = ORIENTED_EDGE('',*,*,#1421,.F.); +#1421 = EDGE_CURVE('',#1422,#1424,#1426,.T.); +#1422 = VERTEX_POINT('',#1423); +#1423 = CARTESIAN_POINT('',(-400.92,608.,634.)); +#1424 = VERTEX_POINT('',#1425); +#1425 = CARTESIAN_POINT('',(-381.08,608.,634.)); +#1426 = LINE('',#1427,#1428); +#1427 = CARTESIAN_POINT('',(-403.96,608.,634.)); +#1428 = VECTOR('',#1429,1.); +#1429 = DIRECTION('',(1.,0.,-0.)); +#1430 = ORIENTED_EDGE('',*,*,#1431,.T.); +#1431 = EDGE_CURVE('',#1422,#1432,#1434,.T.); +#1432 = VERTEX_POINT('',#1433); +#1433 = CARTESIAN_POINT('',(-400.92,608.,618.)); +#1434 = LINE('',#1435,#1436); +#1435 = CARTESIAN_POINT('',(-400.92,608.,334.)); +#1436 = VECTOR('',#1437,1.); +#1437 = DIRECTION('',(-0.,0.,-1.)); +#1438 = ORIENTED_EDGE('',*,*,#1439,.T.); +#1439 = EDGE_CURVE('',#1432,#1440,#1442,.T.); +#1440 = VERTEX_POINT('',#1441); +#1441 = CARTESIAN_POINT('',(-381.08,608.,618.)); +#1442 = LINE('',#1443,#1444); +#1443 = CARTESIAN_POINT('',(-403.96,608.,618.)); +#1444 = VECTOR('',#1445,1.); +#1445 = DIRECTION('',(1.,0.,-0.)); +#1446 = ORIENTED_EDGE('',*,*,#1447,.F.); +#1447 = EDGE_CURVE('',#1424,#1440,#1448,.T.); +#1448 = LINE('',#1449,#1450); +#1449 = CARTESIAN_POINT('',(-381.08,608.,334.)); +#1450 = VECTOR('',#1451,1.); +#1451 = DIRECTION('',(-0.,0.,-1.)); +#1452 = FACE_BOUND('',#1453,.T.); +#1453 = EDGE_LOOP('',(#1454,#1464,#1472,#1480)); +#1454 = ORIENTED_EDGE('',*,*,#1455,.F.); +#1455 = EDGE_CURVE('',#1456,#1458,#1460,.T.); +#1456 = VERTEX_POINT('',#1457); +#1457 = CARTESIAN_POINT('',(-400.92,608.,676.)); +#1458 = VERTEX_POINT('',#1459); +#1459 = CARTESIAN_POINT('',(-381.08,608.,676.)); +#1460 = LINE('',#1461,#1462); +#1461 = CARTESIAN_POINT('',(-403.96,608.,676.)); +#1462 = VECTOR('',#1463,1.); +#1463 = DIRECTION('',(1.,0.,-0.)); +#1464 = ORIENTED_EDGE('',*,*,#1465,.T.); +#1465 = EDGE_CURVE('',#1456,#1466,#1468,.T.); +#1466 = VERTEX_POINT('',#1467); +#1467 = CARTESIAN_POINT('',(-400.92,608.,660.)); +#1468 = LINE('',#1469,#1470); +#1469 = CARTESIAN_POINT('',(-400.92,608.,355.)); +#1470 = VECTOR('',#1471,1.); +#1471 = DIRECTION('',(-0.,0.,-1.)); +#1472 = ORIENTED_EDGE('',*,*,#1473,.T.); +#1473 = EDGE_CURVE('',#1466,#1474,#1476,.T.); +#1474 = VERTEX_POINT('',#1475); +#1475 = CARTESIAN_POINT('',(-381.08,608.,660.)); +#1476 = LINE('',#1477,#1478); +#1477 = CARTESIAN_POINT('',(-403.96,608.,660.)); +#1478 = VECTOR('',#1479,1.); +#1479 = DIRECTION('',(1.,0.,-0.)); +#1480 = ORIENTED_EDGE('',*,*,#1481,.F.); +#1481 = EDGE_CURVE('',#1458,#1474,#1482,.T.); +#1482 = LINE('',#1483,#1484); +#1483 = CARTESIAN_POINT('',(-381.08,608.,355.)); +#1484 = VECTOR('',#1485,1.); +#1485 = DIRECTION('',(-0.,0.,-1.)); +#1486 = FACE_BOUND('',#1487,.T.); +#1487 = EDGE_LOOP('',(#1488,#1498,#1506,#1514)); +#1488 = ORIENTED_EDGE('',*,*,#1489,.F.); +#1489 = EDGE_CURVE('',#1490,#1492,#1494,.T.); +#1490 = VERTEX_POINT('',#1491); +#1491 = CARTESIAN_POINT('',(-400.92,608.,718.)); +#1492 = VERTEX_POINT('',#1493); +#1493 = CARTESIAN_POINT('',(-381.08,608.,718.)); +#1494 = LINE('',#1495,#1496); +#1495 = CARTESIAN_POINT('',(-403.96,608.,718.)); +#1496 = VECTOR('',#1497,1.); +#1497 = DIRECTION('',(1.,0.,-0.)); +#1498 = ORIENTED_EDGE('',*,*,#1499,.T.); +#1499 = EDGE_CURVE('',#1490,#1500,#1502,.T.); +#1500 = VERTEX_POINT('',#1501); +#1501 = CARTESIAN_POINT('',(-400.92,608.,702.)); +#1502 = LINE('',#1503,#1504); +#1503 = CARTESIAN_POINT('',(-400.92,608.,376.)); +#1504 = VECTOR('',#1505,1.); +#1505 = DIRECTION('',(-0.,0.,-1.)); +#1506 = ORIENTED_EDGE('',*,*,#1507,.T.); +#1507 = EDGE_CURVE('',#1500,#1508,#1510,.T.); +#1508 = VERTEX_POINT('',#1509); +#1509 = CARTESIAN_POINT('',(-381.08,608.,702.)); +#1510 = LINE('',#1511,#1512); +#1511 = CARTESIAN_POINT('',(-403.96,608.,702.)); +#1512 = VECTOR('',#1513,1.); +#1513 = DIRECTION('',(1.,0.,-0.)); +#1514 = ORIENTED_EDGE('',*,*,#1515,.F.); +#1515 = EDGE_CURVE('',#1492,#1508,#1516,.T.); +#1516 = LINE('',#1517,#1518); +#1517 = CARTESIAN_POINT('',(-381.08,608.,376.)); +#1518 = VECTOR('',#1519,1.); +#1519 = DIRECTION('',(-0.,0.,-1.)); +#1520 = FACE_BOUND('',#1521,.T.); +#1521 = EDGE_LOOP('',(#1522,#1532,#1540,#1548)); +#1522 = ORIENTED_EDGE('',*,*,#1523,.F.); +#1523 = EDGE_CURVE('',#1524,#1526,#1528,.T.); +#1524 = VERTEX_POINT('',#1525); +#1525 = CARTESIAN_POINT('',(-400.92,608.,760.)); +#1526 = VERTEX_POINT('',#1527); +#1527 = CARTESIAN_POINT('',(-381.08,608.,760.)); +#1528 = LINE('',#1529,#1530); +#1529 = CARTESIAN_POINT('',(-403.96,608.,760.)); +#1530 = VECTOR('',#1531,1.); +#1531 = DIRECTION('',(1.,0.,-0.)); +#1532 = ORIENTED_EDGE('',*,*,#1533,.T.); +#1533 = EDGE_CURVE('',#1524,#1534,#1536,.T.); +#1534 = VERTEX_POINT('',#1535); +#1535 = CARTESIAN_POINT('',(-400.92,608.,744.)); +#1536 = LINE('',#1537,#1538); +#1537 = CARTESIAN_POINT('',(-400.92,608.,397.)); +#1538 = VECTOR('',#1539,1.); +#1539 = DIRECTION('',(-0.,0.,-1.)); +#1540 = ORIENTED_EDGE('',*,*,#1541,.T.); +#1541 = EDGE_CURVE('',#1534,#1542,#1544,.T.); +#1542 = VERTEX_POINT('',#1543); +#1543 = CARTESIAN_POINT('',(-381.08,608.,744.)); +#1544 = LINE('',#1545,#1546); +#1545 = CARTESIAN_POINT('',(-403.96,608.,744.)); +#1546 = VECTOR('',#1547,1.); +#1547 = DIRECTION('',(1.,0.,-0.)); +#1548 = ORIENTED_EDGE('',*,*,#1549,.F.); +#1549 = EDGE_CURVE('',#1526,#1542,#1550,.T.); +#1550 = LINE('',#1551,#1552); +#1551 = CARTESIAN_POINT('',(-381.08,608.,397.)); +#1552 = VECTOR('',#1553,1.); +#1553 = DIRECTION('',(-0.,0.,-1.)); +#1554 = FACE_BOUND('',#1555,.T.); +#1555 = EDGE_LOOP('',(#1556,#1566,#1574,#1582)); +#1556 = ORIENTED_EDGE('',*,*,#1557,.F.); +#1557 = EDGE_CURVE('',#1558,#1560,#1562,.T.); +#1558 = VERTEX_POINT('',#1559); +#1559 = CARTESIAN_POINT('',(-400.92,608.,802.)); +#1560 = VERTEX_POINT('',#1561); +#1561 = CARTESIAN_POINT('',(-381.08,608.,802.)); +#1562 = LINE('',#1563,#1564); +#1563 = CARTESIAN_POINT('',(-403.96,608.,802.)); +#1564 = VECTOR('',#1565,1.); +#1565 = DIRECTION('',(1.,0.,-0.)); +#1566 = ORIENTED_EDGE('',*,*,#1567,.T.); +#1567 = EDGE_CURVE('',#1558,#1568,#1570,.T.); +#1568 = VERTEX_POINT('',#1569); +#1569 = CARTESIAN_POINT('',(-400.92,608.,786.)); +#1570 = LINE('',#1571,#1572); +#1571 = CARTESIAN_POINT('',(-400.92,608.,418.)); +#1572 = VECTOR('',#1573,1.); +#1573 = DIRECTION('',(-0.,0.,-1.)); +#1574 = ORIENTED_EDGE('',*,*,#1575,.T.); +#1575 = EDGE_CURVE('',#1568,#1576,#1578,.T.); +#1576 = VERTEX_POINT('',#1577); +#1577 = CARTESIAN_POINT('',(-381.08,608.,786.)); +#1578 = LINE('',#1579,#1580); +#1579 = CARTESIAN_POINT('',(-403.96,608.,786.)); +#1580 = VECTOR('',#1581,1.); +#1581 = DIRECTION('',(1.,0.,-0.)); +#1582 = ORIENTED_EDGE('',*,*,#1583,.F.); +#1583 = EDGE_CURVE('',#1560,#1576,#1584,.T.); +#1584 = LINE('',#1585,#1586); +#1585 = CARTESIAN_POINT('',(-381.08,608.,418.)); +#1586 = VECTOR('',#1587,1.); +#1587 = DIRECTION('',(-0.,0.,-1.)); +#1588 = FACE_BOUND('',#1589,.T.); +#1589 = EDGE_LOOP('',(#1590,#1600,#1608,#1616)); +#1590 = ORIENTED_EDGE('',*,*,#1591,.F.); +#1591 = EDGE_CURVE('',#1592,#1594,#1596,.T.); +#1592 = VERTEX_POINT('',#1593); +#1593 = CARTESIAN_POINT('',(-400.92,608.,844.)); +#1594 = VERTEX_POINT('',#1595); +#1595 = CARTESIAN_POINT('',(-381.08,608.,844.)); +#1596 = LINE('',#1597,#1598); +#1597 = CARTESIAN_POINT('',(-403.96,608.,844.)); +#1598 = VECTOR('',#1599,1.); +#1599 = DIRECTION('',(1.,0.,-0.)); +#1600 = ORIENTED_EDGE('',*,*,#1601,.T.); +#1601 = EDGE_CURVE('',#1592,#1602,#1604,.T.); +#1602 = VERTEX_POINT('',#1603); +#1603 = CARTESIAN_POINT('',(-400.92,608.,828.)); +#1604 = LINE('',#1605,#1606); +#1605 = CARTESIAN_POINT('',(-400.92,608.,439.)); +#1606 = VECTOR('',#1607,1.); +#1607 = DIRECTION('',(-0.,0.,-1.)); +#1608 = ORIENTED_EDGE('',*,*,#1609,.T.); +#1609 = EDGE_CURVE('',#1602,#1610,#1612,.T.); +#1610 = VERTEX_POINT('',#1611); +#1611 = CARTESIAN_POINT('',(-381.08,608.,828.)); +#1612 = LINE('',#1613,#1614); +#1613 = CARTESIAN_POINT('',(-403.96,608.,828.)); +#1614 = VECTOR('',#1615,1.); +#1615 = DIRECTION('',(1.,0.,-0.)); +#1616 = ORIENTED_EDGE('',*,*,#1617,.F.); +#1617 = EDGE_CURVE('',#1594,#1610,#1618,.T.); +#1618 = LINE('',#1619,#1620); +#1619 = CARTESIAN_POINT('',(-381.08,608.,439.)); +#1620 = VECTOR('',#1621,1.); +#1621 = DIRECTION('',(-0.,0.,-1.)); +#1622 = FACE_BOUND('',#1623,.T.); +#1623 = EDGE_LOOP('',(#1624,#1634,#1642,#1650)); +#1624 = ORIENTED_EDGE('',*,*,#1625,.F.); +#1625 = EDGE_CURVE('',#1626,#1628,#1630,.T.); +#1626 = VERTEX_POINT('',#1627); +#1627 = CARTESIAN_POINT('',(-400.92,608.,886.)); +#1628 = VERTEX_POINT('',#1629); +#1629 = CARTESIAN_POINT('',(-381.08,608.,886.)); +#1630 = LINE('',#1631,#1632); +#1631 = CARTESIAN_POINT('',(-403.96,608.,886.)); +#1632 = VECTOR('',#1633,1.); +#1633 = DIRECTION('',(1.,0.,-0.)); +#1634 = ORIENTED_EDGE('',*,*,#1635,.T.); +#1635 = EDGE_CURVE('',#1626,#1636,#1638,.T.); +#1636 = VERTEX_POINT('',#1637); +#1637 = CARTESIAN_POINT('',(-400.92,608.,870.)); +#1638 = LINE('',#1639,#1640); +#1639 = CARTESIAN_POINT('',(-400.92,608.,460.)); +#1640 = VECTOR('',#1641,1.); +#1641 = DIRECTION('',(-0.,0.,-1.)); +#1642 = ORIENTED_EDGE('',*,*,#1643,.T.); +#1643 = EDGE_CURVE('',#1636,#1644,#1646,.T.); +#1644 = VERTEX_POINT('',#1645); +#1645 = CARTESIAN_POINT('',(-381.08,608.,870.)); +#1646 = LINE('',#1647,#1648); +#1647 = CARTESIAN_POINT('',(-403.96,608.,870.)); +#1648 = VECTOR('',#1649,1.); +#1649 = DIRECTION('',(1.,0.,-0.)); +#1650 = ORIENTED_EDGE('',*,*,#1651,.F.); +#1651 = EDGE_CURVE('',#1628,#1644,#1652,.T.); +#1652 = LINE('',#1653,#1654); +#1653 = CARTESIAN_POINT('',(-381.08,608.,460.)); +#1654 = VECTOR('',#1655,1.); +#1655 = DIRECTION('',(-0.,0.,-1.)); +#1656 = FACE_BOUND('',#1657,.T.); +#1657 = EDGE_LOOP('',(#1658,#1668,#1676,#1684)); +#1658 = ORIENTED_EDGE('',*,*,#1659,.F.); +#1659 = EDGE_CURVE('',#1660,#1662,#1664,.T.); +#1660 = VERTEX_POINT('',#1661); +#1661 = CARTESIAN_POINT('',(-400.92,608.,928.)); +#1662 = VERTEX_POINT('',#1663); +#1663 = CARTESIAN_POINT('',(-381.08,608.,928.)); +#1664 = LINE('',#1665,#1666); +#1665 = CARTESIAN_POINT('',(-403.96,608.,928.)); +#1666 = VECTOR('',#1667,1.); +#1667 = DIRECTION('',(1.,0.,-0.)); +#1668 = ORIENTED_EDGE('',*,*,#1669,.T.); +#1669 = EDGE_CURVE('',#1660,#1670,#1672,.T.); +#1670 = VERTEX_POINT('',#1671); +#1671 = CARTESIAN_POINT('',(-400.92,608.,912.)); +#1672 = LINE('',#1673,#1674); +#1673 = CARTESIAN_POINT('',(-400.92,608.,481.)); +#1674 = VECTOR('',#1675,1.); +#1675 = DIRECTION('',(-0.,0.,-1.)); +#1676 = ORIENTED_EDGE('',*,*,#1677,.T.); +#1677 = EDGE_CURVE('',#1670,#1678,#1680,.T.); +#1678 = VERTEX_POINT('',#1679); +#1679 = CARTESIAN_POINT('',(-381.08,608.,912.)); +#1680 = LINE('',#1681,#1682); +#1681 = CARTESIAN_POINT('',(-403.96,608.,912.)); +#1682 = VECTOR('',#1683,1.); +#1683 = DIRECTION('',(1.,0.,-0.)); +#1684 = ORIENTED_EDGE('',*,*,#1685,.F.); +#1685 = EDGE_CURVE('',#1662,#1678,#1686,.T.); +#1686 = LINE('',#1687,#1688); +#1687 = CARTESIAN_POINT('',(-381.08,608.,481.)); +#1688 = VECTOR('',#1689,1.); +#1689 = DIRECTION('',(-0.,0.,-1.)); +#1690 = PLANE('',#1691); +#1691 = AXIS2_PLACEMENT_3D('',#1692,#1693,#1694); +#1692 = CARTESIAN_POINT('',(-407.,608.,50.)); +#1693 = DIRECTION('',(-0.,1.,0.)); +#1694 = DIRECTION('',(0.,0.,1.)); +#1695 = ADVANCED_FACE('',(#1696),#1707,.F.); +#1696 = FACE_BOUND('',#1697,.F.); +#1697 = EDGE_LOOP('',(#1698,#1699,#1700,#1706)); +#1698 = ORIENTED_EDGE('',*,*,#910,.F.); +#1699 = ORIENTED_EDGE('',*,*,#940,.T.); +#1700 = ORIENTED_EDGE('',*,*,#1701,.T.); +#1701 = EDGE_CURVE('',#941,#1336,#1702,.T.); +#1702 = LINE('',#1703,#1704); +#1703 = CARTESIAN_POINT('',(-375.,-608.,50.)); +#1704 = VECTOR('',#1705,1.); +#1705 = DIRECTION('',(-0.,1.,0.)); +#1706 = ORIENTED_EDGE('',*,*,#1335,.F.); +#1707 = PLANE('',#1708); +#1708 = AXIS2_PLACEMENT_3D('',#1709,#1710,#1711); +#1709 = CARTESIAN_POINT('',(-407.,-608.,50.)); +#1710 = DIRECTION('',(0.,0.,1.)); +#1711 = DIRECTION('',(1.,0.,-0.)); +#1712 = ADVANCED_FACE('',(#1713),#1719,.T.); +#1713 = FACE_BOUND('',#1714,.T.); +#1714 = EDGE_LOOP('',(#1715,#1716,#1717,#1718)); +#1715 = ORIENTED_EDGE('',*,*,#957,.F.); +#1716 = ORIENTED_EDGE('',*,*,#1701,.T.); +#1717 = ORIENTED_EDGE('',*,*,#1345,.T.); +#1718 = ORIENTED_EDGE('',*,*,#1313,.F.); +#1719 = PLANE('',#1720); +#1720 = AXIS2_PLACEMENT_3D('',#1721,#1722,#1723); +#1721 = CARTESIAN_POINT('',(-375.,-608.,50.)); +#1722 = DIRECTION('',(1.,0.,-0.)); +#1723 = DIRECTION('',(0.,0.,1.)); +#1724 = ADVANCED_FACE('',(#1725),#1741,.F.); +#1725 = FACE_BOUND('',#1726,.F.); +#1726 = EDGE_LOOP('',(#1727,#1733,#1734,#1740)); +#1727 = ORIENTED_EDGE('',*,*,#1728,.F.); +#1728 = EDGE_CURVE('',#966,#1354,#1729,.T.); +#1729 = LINE('',#1730,#1731); +#1730 = CARTESIAN_POINT('',(-400.92,-611.,550.)); +#1731 = VECTOR('',#1732,1.); +#1732 = DIRECTION('',(-0.,1.,0.)); +#1733 = ORIENTED_EDGE('',*,*,#965,.T.); +#1734 = ORIENTED_EDGE('',*,*,#1735,.T.); +#1735 = EDGE_CURVE('',#968,#1356,#1736,.T.); +#1736 = LINE('',#1737,#1738); +#1737 = CARTESIAN_POINT('',(-381.08,-611.,550.)); +#1738 = VECTOR('',#1739,1.); +#1739 = DIRECTION('',(-0.,1.,0.)); +#1740 = ORIENTED_EDGE('',*,*,#1353,.F.); +#1741 = PLANE('',#1742); +#1742 = AXIS2_PLACEMENT_3D('',#1743,#1744,#1745); +#1743 = CARTESIAN_POINT('',(-400.92,-611.,550.)); +#1744 = DIRECTION('',(0.,0.,1.)); +#1745 = DIRECTION('',(1.,0.,-0.)); +#1746 = ADVANCED_FACE('',(#1747),#1758,.T.); +#1747 = FACE_BOUND('',#1748,.T.); +#1748 = EDGE_LOOP('',(#1749,#1750,#1751,#1757)); +#1749 = ORIENTED_EDGE('',*,*,#1728,.F.); +#1750 = ORIENTED_EDGE('',*,*,#975,.T.); +#1751 = ORIENTED_EDGE('',*,*,#1752,.T.); +#1752 = EDGE_CURVE('',#976,#1364,#1753,.T.); +#1753 = LINE('',#1754,#1755); +#1754 = CARTESIAN_POINT('',(-400.92,-611.,534.)); +#1755 = VECTOR('',#1756,1.); +#1756 = DIRECTION('',(-0.,1.,0.)); +#1757 = ORIENTED_EDGE('',*,*,#1363,.F.); +#1758 = PLANE('',#1759); +#1759 = AXIS2_PLACEMENT_3D('',#1760,#1761,#1762); +#1760 = CARTESIAN_POINT('',(-400.92,-611.,534.)); +#1761 = DIRECTION('',(1.,0.,-0.)); +#1762 = DIRECTION('',(0.,0.,1.)); +#1763 = ADVANCED_FACE('',(#1764),#1775,.F.); +#1764 = FACE_BOUND('',#1765,.F.); +#1765 = EDGE_LOOP('',(#1766,#1767,#1768,#1774)); +#1766 = ORIENTED_EDGE('',*,*,#1735,.F.); +#1767 = ORIENTED_EDGE('',*,*,#991,.T.); +#1768 = ORIENTED_EDGE('',*,*,#1769,.T.); +#1769 = EDGE_CURVE('',#984,#1372,#1770,.T.); +#1770 = LINE('',#1771,#1772); +#1771 = CARTESIAN_POINT('',(-381.08,-611.,534.)); +#1772 = VECTOR('',#1773,1.); +#1773 = DIRECTION('',(-0.,1.,0.)); +#1774 = ORIENTED_EDGE('',*,*,#1379,.F.); +#1775 = PLANE('',#1776); +#1776 = AXIS2_PLACEMENT_3D('',#1777,#1778,#1779); +#1777 = CARTESIAN_POINT('',(-381.08,-611.,534.)); +#1778 = DIRECTION('',(1.,0.,-0.)); +#1779 = DIRECTION('',(0.,0.,1.)); +#1780 = ADVANCED_FACE('',(#1781),#1787,.T.); +#1781 = FACE_BOUND('',#1782,.T.); +#1782 = EDGE_LOOP('',(#1783,#1784,#1785,#1786)); +#1783 = ORIENTED_EDGE('',*,*,#1752,.F.); +#1784 = ORIENTED_EDGE('',*,*,#983,.T.); +#1785 = ORIENTED_EDGE('',*,*,#1769,.T.); +#1786 = ORIENTED_EDGE('',*,*,#1371,.F.); +#1787 = PLANE('',#1788); +#1788 = AXIS2_PLACEMENT_3D('',#1789,#1790,#1791); +#1789 = CARTESIAN_POINT('',(-400.92,-611.,534.)); +#1790 = DIRECTION('',(0.,0.,1.)); +#1791 = DIRECTION('',(1.,0.,-0.)); +#1792 = ADVANCED_FACE('',(#1793),#1809,.F.); +#1793 = FACE_BOUND('',#1794,.F.); +#1794 = EDGE_LOOP('',(#1795,#1801,#1802,#1808)); +#1795 = ORIENTED_EDGE('',*,*,#1796,.F.); +#1796 = EDGE_CURVE('',#1000,#1388,#1797,.T.); +#1797 = LINE('',#1798,#1799); +#1798 = CARTESIAN_POINT('',(-400.92,-611.,592.)); +#1799 = VECTOR('',#1800,1.); +#1800 = DIRECTION('',(-0.,1.,0.)); +#1801 = ORIENTED_EDGE('',*,*,#999,.T.); +#1802 = ORIENTED_EDGE('',*,*,#1803,.T.); +#1803 = EDGE_CURVE('',#1002,#1390,#1804,.T.); +#1804 = LINE('',#1805,#1806); +#1805 = CARTESIAN_POINT('',(-381.08,-611.,592.)); +#1806 = VECTOR('',#1807,1.); +#1807 = DIRECTION('',(-0.,1.,0.)); +#1808 = ORIENTED_EDGE('',*,*,#1387,.F.); +#1809 = PLANE('',#1810); +#1810 = AXIS2_PLACEMENT_3D('',#1811,#1812,#1813); +#1811 = CARTESIAN_POINT('',(-400.92,-611.,592.)); +#1812 = DIRECTION('',(0.,0.,1.)); +#1813 = DIRECTION('',(1.,0.,-0.)); +#1814 = ADVANCED_FACE('',(#1815),#1826,.T.); +#1815 = FACE_BOUND('',#1816,.T.); +#1816 = EDGE_LOOP('',(#1817,#1818,#1819,#1825)); +#1817 = ORIENTED_EDGE('',*,*,#1796,.F.); +#1818 = ORIENTED_EDGE('',*,*,#1009,.T.); +#1819 = ORIENTED_EDGE('',*,*,#1820,.T.); +#1820 = EDGE_CURVE('',#1010,#1398,#1821,.T.); +#1821 = LINE('',#1822,#1823); +#1822 = CARTESIAN_POINT('',(-400.92,-611.,576.)); +#1823 = VECTOR('',#1824,1.); +#1824 = DIRECTION('',(-0.,1.,0.)); +#1825 = ORIENTED_EDGE('',*,*,#1397,.F.); +#1826 = PLANE('',#1827); +#1827 = AXIS2_PLACEMENT_3D('',#1828,#1829,#1830); +#1828 = CARTESIAN_POINT('',(-400.92,-611.,576.)); +#1829 = DIRECTION('',(1.,0.,-0.)); +#1830 = DIRECTION('',(0.,0.,1.)); +#1831 = ADVANCED_FACE('',(#1832),#1843,.F.); +#1832 = FACE_BOUND('',#1833,.F.); +#1833 = EDGE_LOOP('',(#1834,#1835,#1836,#1842)); +#1834 = ORIENTED_EDGE('',*,*,#1803,.F.); +#1835 = ORIENTED_EDGE('',*,*,#1025,.T.); +#1836 = ORIENTED_EDGE('',*,*,#1837,.T.); +#1837 = EDGE_CURVE('',#1018,#1406,#1838,.T.); +#1838 = LINE('',#1839,#1840); +#1839 = CARTESIAN_POINT('',(-381.08,-611.,576.)); +#1840 = VECTOR('',#1841,1.); +#1841 = DIRECTION('',(-0.,1.,0.)); +#1842 = ORIENTED_EDGE('',*,*,#1413,.F.); +#1843 = PLANE('',#1844); +#1844 = AXIS2_PLACEMENT_3D('',#1845,#1846,#1847); +#1845 = CARTESIAN_POINT('',(-381.08,-611.,576.)); +#1846 = DIRECTION('',(1.,0.,-0.)); +#1847 = DIRECTION('',(0.,0.,1.)); +#1848 = ADVANCED_FACE('',(#1849),#1855,.T.); +#1849 = FACE_BOUND('',#1850,.T.); +#1850 = EDGE_LOOP('',(#1851,#1852,#1853,#1854)); +#1851 = ORIENTED_EDGE('',*,*,#1820,.F.); +#1852 = ORIENTED_EDGE('',*,*,#1017,.T.); +#1853 = ORIENTED_EDGE('',*,*,#1837,.T.); +#1854 = ORIENTED_EDGE('',*,*,#1405,.F.); +#1855 = PLANE('',#1856); +#1856 = AXIS2_PLACEMENT_3D('',#1857,#1858,#1859); +#1857 = CARTESIAN_POINT('',(-400.92,-611.,576.)); +#1858 = DIRECTION('',(0.,0.,1.)); +#1859 = DIRECTION('',(1.,0.,-0.)); +#1860 = ADVANCED_FACE('',(#1861),#1877,.F.); +#1861 = FACE_BOUND('',#1862,.F.); +#1862 = EDGE_LOOP('',(#1863,#1869,#1870,#1876)); +#1863 = ORIENTED_EDGE('',*,*,#1864,.F.); +#1864 = EDGE_CURVE('',#1034,#1422,#1865,.T.); +#1865 = LINE('',#1866,#1867); +#1866 = CARTESIAN_POINT('',(-400.92,-611.,634.)); +#1867 = VECTOR('',#1868,1.); +#1868 = DIRECTION('',(-0.,1.,0.)); +#1869 = ORIENTED_EDGE('',*,*,#1033,.T.); +#1870 = ORIENTED_EDGE('',*,*,#1871,.T.); +#1871 = EDGE_CURVE('',#1036,#1424,#1872,.T.); +#1872 = LINE('',#1873,#1874); +#1873 = CARTESIAN_POINT('',(-381.08,-611.,634.)); +#1874 = VECTOR('',#1875,1.); +#1875 = DIRECTION('',(-0.,1.,0.)); +#1876 = ORIENTED_EDGE('',*,*,#1421,.F.); +#1877 = PLANE('',#1878); +#1878 = AXIS2_PLACEMENT_3D('',#1879,#1880,#1881); +#1879 = CARTESIAN_POINT('',(-400.92,-611.,634.)); +#1880 = DIRECTION('',(0.,0.,1.)); +#1881 = DIRECTION('',(1.,0.,-0.)); +#1882 = ADVANCED_FACE('',(#1883),#1894,.T.); +#1883 = FACE_BOUND('',#1884,.T.); +#1884 = EDGE_LOOP('',(#1885,#1886,#1887,#1893)); +#1885 = ORIENTED_EDGE('',*,*,#1864,.F.); +#1886 = ORIENTED_EDGE('',*,*,#1043,.T.); +#1887 = ORIENTED_EDGE('',*,*,#1888,.T.); +#1888 = EDGE_CURVE('',#1044,#1432,#1889,.T.); +#1889 = LINE('',#1890,#1891); +#1890 = CARTESIAN_POINT('',(-400.92,-611.,618.)); +#1891 = VECTOR('',#1892,1.); +#1892 = DIRECTION('',(-0.,1.,0.)); +#1893 = ORIENTED_EDGE('',*,*,#1431,.F.); +#1894 = PLANE('',#1895); +#1895 = AXIS2_PLACEMENT_3D('',#1896,#1897,#1898); +#1896 = CARTESIAN_POINT('',(-400.92,-611.,618.)); +#1897 = DIRECTION('',(1.,0.,-0.)); +#1898 = DIRECTION('',(0.,0.,1.)); +#1899 = ADVANCED_FACE('',(#1900),#1911,.F.); +#1900 = FACE_BOUND('',#1901,.F.); +#1901 = EDGE_LOOP('',(#1902,#1903,#1904,#1910)); +#1902 = ORIENTED_EDGE('',*,*,#1871,.F.); +#1903 = ORIENTED_EDGE('',*,*,#1059,.T.); +#1904 = ORIENTED_EDGE('',*,*,#1905,.T.); +#1905 = EDGE_CURVE('',#1052,#1440,#1906,.T.); +#1906 = LINE('',#1907,#1908); +#1907 = CARTESIAN_POINT('',(-381.08,-611.,618.)); +#1908 = VECTOR('',#1909,1.); +#1909 = DIRECTION('',(-0.,1.,0.)); +#1910 = ORIENTED_EDGE('',*,*,#1447,.F.); +#1911 = PLANE('',#1912); +#1912 = AXIS2_PLACEMENT_3D('',#1913,#1914,#1915); +#1913 = CARTESIAN_POINT('',(-381.08,-611.,618.)); +#1914 = DIRECTION('',(1.,0.,-0.)); +#1915 = DIRECTION('',(0.,0.,1.)); +#1916 = ADVANCED_FACE('',(#1917),#1923,.T.); +#1917 = FACE_BOUND('',#1918,.T.); +#1918 = EDGE_LOOP('',(#1919,#1920,#1921,#1922)); +#1919 = ORIENTED_EDGE('',*,*,#1888,.F.); +#1920 = ORIENTED_EDGE('',*,*,#1051,.T.); +#1921 = ORIENTED_EDGE('',*,*,#1905,.T.); +#1922 = ORIENTED_EDGE('',*,*,#1439,.F.); +#1923 = PLANE('',#1924); +#1924 = AXIS2_PLACEMENT_3D('',#1925,#1926,#1927); +#1925 = CARTESIAN_POINT('',(-400.92,-611.,618.)); +#1926 = DIRECTION('',(0.,0.,1.)); +#1927 = DIRECTION('',(1.,0.,-0.)); +#1928 = ADVANCED_FACE('',(#1929),#1945,.F.); +#1929 = FACE_BOUND('',#1930,.F.); +#1930 = EDGE_LOOP('',(#1931,#1937,#1938,#1944)); +#1931 = ORIENTED_EDGE('',*,*,#1932,.F.); +#1932 = EDGE_CURVE('',#1068,#1456,#1933,.T.); +#1933 = LINE('',#1934,#1935); +#1934 = CARTESIAN_POINT('',(-400.92,-611.,676.)); +#1935 = VECTOR('',#1936,1.); +#1936 = DIRECTION('',(-0.,1.,0.)); +#1937 = ORIENTED_EDGE('',*,*,#1067,.T.); +#1938 = ORIENTED_EDGE('',*,*,#1939,.T.); +#1939 = EDGE_CURVE('',#1070,#1458,#1940,.T.); +#1940 = LINE('',#1941,#1942); +#1941 = CARTESIAN_POINT('',(-381.08,-611.,676.)); +#1942 = VECTOR('',#1943,1.); +#1943 = DIRECTION('',(-0.,1.,0.)); +#1944 = ORIENTED_EDGE('',*,*,#1455,.F.); +#1945 = PLANE('',#1946); +#1946 = AXIS2_PLACEMENT_3D('',#1947,#1948,#1949); +#1947 = CARTESIAN_POINT('',(-400.92,-611.,676.)); +#1948 = DIRECTION('',(0.,0.,1.)); +#1949 = DIRECTION('',(1.,0.,-0.)); +#1950 = ADVANCED_FACE('',(#1951),#1962,.T.); +#1951 = FACE_BOUND('',#1952,.T.); +#1952 = EDGE_LOOP('',(#1953,#1954,#1955,#1961)); +#1953 = ORIENTED_EDGE('',*,*,#1932,.F.); +#1954 = ORIENTED_EDGE('',*,*,#1077,.T.); +#1955 = ORIENTED_EDGE('',*,*,#1956,.T.); +#1956 = EDGE_CURVE('',#1078,#1466,#1957,.T.); +#1957 = LINE('',#1958,#1959); +#1958 = CARTESIAN_POINT('',(-400.92,-611.,660.)); +#1959 = VECTOR('',#1960,1.); +#1960 = DIRECTION('',(-0.,1.,0.)); +#1961 = ORIENTED_EDGE('',*,*,#1465,.F.); +#1962 = PLANE('',#1963); +#1963 = AXIS2_PLACEMENT_3D('',#1964,#1965,#1966); +#1964 = CARTESIAN_POINT('',(-400.92,-611.,660.)); +#1965 = DIRECTION('',(1.,0.,-0.)); +#1966 = DIRECTION('',(0.,0.,1.)); +#1967 = ADVANCED_FACE('',(#1968),#1979,.F.); +#1968 = FACE_BOUND('',#1969,.F.); +#1969 = EDGE_LOOP('',(#1970,#1971,#1972,#1978)); +#1970 = ORIENTED_EDGE('',*,*,#1939,.F.); +#1971 = ORIENTED_EDGE('',*,*,#1093,.T.); +#1972 = ORIENTED_EDGE('',*,*,#1973,.T.); +#1973 = EDGE_CURVE('',#1086,#1474,#1974,.T.); +#1974 = LINE('',#1975,#1976); +#1975 = CARTESIAN_POINT('',(-381.08,-611.,660.)); +#1976 = VECTOR('',#1977,1.); +#1977 = DIRECTION('',(-0.,1.,0.)); +#1978 = ORIENTED_EDGE('',*,*,#1481,.F.); +#1979 = PLANE('',#1980); +#1980 = AXIS2_PLACEMENT_3D('',#1981,#1982,#1983); +#1981 = CARTESIAN_POINT('',(-381.08,-611.,660.)); +#1982 = DIRECTION('',(1.,0.,-0.)); +#1983 = DIRECTION('',(0.,0.,1.)); +#1984 = ADVANCED_FACE('',(#1985),#1991,.T.); +#1985 = FACE_BOUND('',#1986,.T.); +#1986 = EDGE_LOOP('',(#1987,#1988,#1989,#1990)); +#1987 = ORIENTED_EDGE('',*,*,#1956,.F.); +#1988 = ORIENTED_EDGE('',*,*,#1085,.T.); +#1989 = ORIENTED_EDGE('',*,*,#1973,.T.); +#1990 = ORIENTED_EDGE('',*,*,#1473,.F.); +#1991 = PLANE('',#1992); +#1992 = AXIS2_PLACEMENT_3D('',#1993,#1994,#1995); +#1993 = CARTESIAN_POINT('',(-400.92,-611.,660.)); +#1994 = DIRECTION('',(0.,0.,1.)); +#1995 = DIRECTION('',(1.,0.,-0.)); +#1996 = ADVANCED_FACE('',(#1997),#2013,.F.); +#1997 = FACE_BOUND('',#1998,.F.); +#1998 = EDGE_LOOP('',(#1999,#2005,#2006,#2012)); +#1999 = ORIENTED_EDGE('',*,*,#2000,.F.); +#2000 = EDGE_CURVE('',#1102,#1490,#2001,.T.); +#2001 = LINE('',#2002,#2003); +#2002 = CARTESIAN_POINT('',(-400.92,-611.,718.)); +#2003 = VECTOR('',#2004,1.); +#2004 = DIRECTION('',(-0.,1.,0.)); +#2005 = ORIENTED_EDGE('',*,*,#1101,.T.); +#2006 = ORIENTED_EDGE('',*,*,#2007,.T.); +#2007 = EDGE_CURVE('',#1104,#1492,#2008,.T.); +#2008 = LINE('',#2009,#2010); +#2009 = CARTESIAN_POINT('',(-381.08,-611.,718.)); +#2010 = VECTOR('',#2011,1.); +#2011 = DIRECTION('',(-0.,1.,0.)); +#2012 = ORIENTED_EDGE('',*,*,#1489,.F.); +#2013 = PLANE('',#2014); +#2014 = AXIS2_PLACEMENT_3D('',#2015,#2016,#2017); +#2015 = CARTESIAN_POINT('',(-400.92,-611.,718.)); +#2016 = DIRECTION('',(0.,0.,1.)); +#2017 = DIRECTION('',(1.,0.,-0.)); +#2018 = ADVANCED_FACE('',(#2019),#2030,.T.); +#2019 = FACE_BOUND('',#2020,.T.); +#2020 = EDGE_LOOP('',(#2021,#2022,#2023,#2029)); +#2021 = ORIENTED_EDGE('',*,*,#2000,.F.); +#2022 = ORIENTED_EDGE('',*,*,#1111,.T.); +#2023 = ORIENTED_EDGE('',*,*,#2024,.T.); +#2024 = EDGE_CURVE('',#1112,#1500,#2025,.T.); +#2025 = LINE('',#2026,#2027); +#2026 = CARTESIAN_POINT('',(-400.92,-611.,702.)); +#2027 = VECTOR('',#2028,1.); +#2028 = DIRECTION('',(-0.,1.,0.)); +#2029 = ORIENTED_EDGE('',*,*,#1499,.F.); +#2030 = PLANE('',#2031); +#2031 = AXIS2_PLACEMENT_3D('',#2032,#2033,#2034); +#2032 = CARTESIAN_POINT('',(-400.92,-611.,702.)); +#2033 = DIRECTION('',(1.,0.,-0.)); +#2034 = DIRECTION('',(0.,0.,1.)); +#2035 = ADVANCED_FACE('',(#2036),#2047,.F.); +#2036 = FACE_BOUND('',#2037,.F.); +#2037 = EDGE_LOOP('',(#2038,#2039,#2040,#2046)); +#2038 = ORIENTED_EDGE('',*,*,#2007,.F.); +#2039 = ORIENTED_EDGE('',*,*,#1127,.T.); +#2040 = ORIENTED_EDGE('',*,*,#2041,.T.); +#2041 = EDGE_CURVE('',#1120,#1508,#2042,.T.); +#2042 = LINE('',#2043,#2044); +#2043 = CARTESIAN_POINT('',(-381.08,-611.,702.)); +#2044 = VECTOR('',#2045,1.); +#2045 = DIRECTION('',(-0.,1.,0.)); +#2046 = ORIENTED_EDGE('',*,*,#1515,.F.); +#2047 = PLANE('',#2048); +#2048 = AXIS2_PLACEMENT_3D('',#2049,#2050,#2051); +#2049 = CARTESIAN_POINT('',(-381.08,-611.,702.)); +#2050 = DIRECTION('',(1.,0.,-0.)); +#2051 = DIRECTION('',(0.,0.,1.)); +#2052 = ADVANCED_FACE('',(#2053),#2059,.T.); +#2053 = FACE_BOUND('',#2054,.T.); +#2054 = EDGE_LOOP('',(#2055,#2056,#2057,#2058)); +#2055 = ORIENTED_EDGE('',*,*,#2024,.F.); +#2056 = ORIENTED_EDGE('',*,*,#1119,.T.); +#2057 = ORIENTED_EDGE('',*,*,#2041,.T.); +#2058 = ORIENTED_EDGE('',*,*,#1507,.F.); +#2059 = PLANE('',#2060); +#2060 = AXIS2_PLACEMENT_3D('',#2061,#2062,#2063); +#2061 = CARTESIAN_POINT('',(-400.92,-611.,702.)); +#2062 = DIRECTION('',(0.,0.,1.)); +#2063 = DIRECTION('',(1.,0.,-0.)); +#2064 = ADVANCED_FACE('',(#2065),#2081,.F.); +#2065 = FACE_BOUND('',#2066,.F.); +#2066 = EDGE_LOOP('',(#2067,#2073,#2074,#2080)); +#2067 = ORIENTED_EDGE('',*,*,#2068,.F.); +#2068 = EDGE_CURVE('',#1136,#1524,#2069,.T.); +#2069 = LINE('',#2070,#2071); +#2070 = CARTESIAN_POINT('',(-400.92,-611.,760.)); +#2071 = VECTOR('',#2072,1.); +#2072 = DIRECTION('',(-0.,1.,0.)); +#2073 = ORIENTED_EDGE('',*,*,#1135,.T.); +#2074 = ORIENTED_EDGE('',*,*,#2075,.T.); +#2075 = EDGE_CURVE('',#1138,#1526,#2076,.T.); +#2076 = LINE('',#2077,#2078); +#2077 = CARTESIAN_POINT('',(-381.08,-611.,760.)); +#2078 = VECTOR('',#2079,1.); +#2079 = DIRECTION('',(-0.,1.,0.)); +#2080 = ORIENTED_EDGE('',*,*,#1523,.F.); +#2081 = PLANE('',#2082); +#2082 = AXIS2_PLACEMENT_3D('',#2083,#2084,#2085); +#2083 = CARTESIAN_POINT('',(-400.92,-611.,760.)); +#2084 = DIRECTION('',(0.,0.,1.)); +#2085 = DIRECTION('',(1.,0.,-0.)); +#2086 = ADVANCED_FACE('',(#2087),#2098,.T.); +#2087 = FACE_BOUND('',#2088,.T.); +#2088 = EDGE_LOOP('',(#2089,#2090,#2091,#2097)); +#2089 = ORIENTED_EDGE('',*,*,#2068,.F.); +#2090 = ORIENTED_EDGE('',*,*,#1145,.T.); +#2091 = ORIENTED_EDGE('',*,*,#2092,.T.); +#2092 = EDGE_CURVE('',#1146,#1534,#2093,.T.); +#2093 = LINE('',#2094,#2095); +#2094 = CARTESIAN_POINT('',(-400.92,-611.,744.)); +#2095 = VECTOR('',#2096,1.); +#2096 = DIRECTION('',(-0.,1.,0.)); +#2097 = ORIENTED_EDGE('',*,*,#1533,.F.); +#2098 = PLANE('',#2099); +#2099 = AXIS2_PLACEMENT_3D('',#2100,#2101,#2102); +#2100 = CARTESIAN_POINT('',(-400.92,-611.,744.)); +#2101 = DIRECTION('',(1.,0.,-0.)); +#2102 = DIRECTION('',(0.,0.,1.)); +#2103 = ADVANCED_FACE('',(#2104),#2115,.F.); +#2104 = FACE_BOUND('',#2105,.F.); +#2105 = EDGE_LOOP('',(#2106,#2107,#2108,#2114)); +#2106 = ORIENTED_EDGE('',*,*,#2075,.F.); +#2107 = ORIENTED_EDGE('',*,*,#1161,.T.); +#2108 = ORIENTED_EDGE('',*,*,#2109,.T.); +#2109 = EDGE_CURVE('',#1154,#1542,#2110,.T.); +#2110 = LINE('',#2111,#2112); +#2111 = CARTESIAN_POINT('',(-381.08,-611.,744.)); +#2112 = VECTOR('',#2113,1.); +#2113 = DIRECTION('',(-0.,1.,0.)); +#2114 = ORIENTED_EDGE('',*,*,#1549,.F.); +#2115 = PLANE('',#2116); +#2116 = AXIS2_PLACEMENT_3D('',#2117,#2118,#2119); +#2117 = CARTESIAN_POINT('',(-381.08,-611.,744.)); +#2118 = DIRECTION('',(1.,0.,-0.)); +#2119 = DIRECTION('',(0.,0.,1.)); +#2120 = ADVANCED_FACE('',(#2121),#2127,.T.); +#2121 = FACE_BOUND('',#2122,.T.); +#2122 = EDGE_LOOP('',(#2123,#2124,#2125,#2126)); +#2123 = ORIENTED_EDGE('',*,*,#2092,.F.); +#2124 = ORIENTED_EDGE('',*,*,#1153,.T.); +#2125 = ORIENTED_EDGE('',*,*,#2109,.T.); +#2126 = ORIENTED_EDGE('',*,*,#1541,.F.); +#2127 = PLANE('',#2128); +#2128 = AXIS2_PLACEMENT_3D('',#2129,#2130,#2131); +#2129 = CARTESIAN_POINT('',(-400.92,-611.,744.)); +#2130 = DIRECTION('',(0.,0.,1.)); +#2131 = DIRECTION('',(1.,0.,-0.)); +#2132 = ADVANCED_FACE('',(#2133),#2149,.F.); +#2133 = FACE_BOUND('',#2134,.F.); +#2134 = EDGE_LOOP('',(#2135,#2141,#2142,#2148)); +#2135 = ORIENTED_EDGE('',*,*,#2136,.F.); +#2136 = EDGE_CURVE('',#1170,#1558,#2137,.T.); +#2137 = LINE('',#2138,#2139); +#2138 = CARTESIAN_POINT('',(-400.92,-611.,802.)); +#2139 = VECTOR('',#2140,1.); +#2140 = DIRECTION('',(-0.,1.,0.)); +#2141 = ORIENTED_EDGE('',*,*,#1169,.T.); +#2142 = ORIENTED_EDGE('',*,*,#2143,.T.); +#2143 = EDGE_CURVE('',#1172,#1560,#2144,.T.); +#2144 = LINE('',#2145,#2146); +#2145 = CARTESIAN_POINT('',(-381.08,-611.,802.)); +#2146 = VECTOR('',#2147,1.); +#2147 = DIRECTION('',(-0.,1.,0.)); +#2148 = ORIENTED_EDGE('',*,*,#1557,.F.); +#2149 = PLANE('',#2150); +#2150 = AXIS2_PLACEMENT_3D('',#2151,#2152,#2153); +#2151 = CARTESIAN_POINT('',(-400.92,-611.,802.)); +#2152 = DIRECTION('',(0.,0.,1.)); +#2153 = DIRECTION('',(1.,0.,-0.)); +#2154 = ADVANCED_FACE('',(#2155),#2166,.T.); +#2155 = FACE_BOUND('',#2156,.T.); +#2156 = EDGE_LOOP('',(#2157,#2158,#2159,#2165)); +#2157 = ORIENTED_EDGE('',*,*,#2136,.F.); +#2158 = ORIENTED_EDGE('',*,*,#1179,.T.); +#2159 = ORIENTED_EDGE('',*,*,#2160,.T.); +#2160 = EDGE_CURVE('',#1180,#1568,#2161,.T.); +#2161 = LINE('',#2162,#2163); +#2162 = CARTESIAN_POINT('',(-400.92,-611.,786.)); +#2163 = VECTOR('',#2164,1.); +#2164 = DIRECTION('',(-0.,1.,0.)); +#2165 = ORIENTED_EDGE('',*,*,#1567,.F.); +#2166 = PLANE('',#2167); +#2167 = AXIS2_PLACEMENT_3D('',#2168,#2169,#2170); +#2168 = CARTESIAN_POINT('',(-400.92,-611.,786.)); +#2169 = DIRECTION('',(1.,0.,-0.)); +#2170 = DIRECTION('',(0.,0.,1.)); +#2171 = ADVANCED_FACE('',(#2172),#2183,.F.); +#2172 = FACE_BOUND('',#2173,.F.); +#2173 = EDGE_LOOP('',(#2174,#2175,#2176,#2182)); +#2174 = ORIENTED_EDGE('',*,*,#2143,.F.); +#2175 = ORIENTED_EDGE('',*,*,#1195,.T.); +#2176 = ORIENTED_EDGE('',*,*,#2177,.T.); +#2177 = EDGE_CURVE('',#1188,#1576,#2178,.T.); +#2178 = LINE('',#2179,#2180); +#2179 = CARTESIAN_POINT('',(-381.08,-611.,786.)); +#2180 = VECTOR('',#2181,1.); +#2181 = DIRECTION('',(-0.,1.,0.)); +#2182 = ORIENTED_EDGE('',*,*,#1583,.F.); +#2183 = PLANE('',#2184); +#2184 = AXIS2_PLACEMENT_3D('',#2185,#2186,#2187); +#2185 = CARTESIAN_POINT('',(-381.08,-611.,786.)); +#2186 = DIRECTION('',(1.,0.,-0.)); +#2187 = DIRECTION('',(0.,0.,1.)); +#2188 = ADVANCED_FACE('',(#2189),#2195,.T.); +#2189 = FACE_BOUND('',#2190,.T.); +#2190 = EDGE_LOOP('',(#2191,#2192,#2193,#2194)); +#2191 = ORIENTED_EDGE('',*,*,#2160,.F.); +#2192 = ORIENTED_EDGE('',*,*,#1187,.T.); +#2193 = ORIENTED_EDGE('',*,*,#2177,.T.); +#2194 = ORIENTED_EDGE('',*,*,#1575,.F.); +#2195 = PLANE('',#2196); +#2196 = AXIS2_PLACEMENT_3D('',#2197,#2198,#2199); +#2197 = CARTESIAN_POINT('',(-400.92,-611.,786.)); +#2198 = DIRECTION('',(0.,0.,1.)); +#2199 = DIRECTION('',(1.,0.,-0.)); +#2200 = ADVANCED_FACE('',(#2201),#2217,.F.); +#2201 = FACE_BOUND('',#2202,.F.); +#2202 = EDGE_LOOP('',(#2203,#2209,#2210,#2216)); +#2203 = ORIENTED_EDGE('',*,*,#2204,.F.); +#2204 = EDGE_CURVE('',#1204,#1592,#2205,.T.); +#2205 = LINE('',#2206,#2207); +#2206 = CARTESIAN_POINT('',(-400.92,-611.,844.)); +#2207 = VECTOR('',#2208,1.); +#2208 = DIRECTION('',(-0.,1.,0.)); +#2209 = ORIENTED_EDGE('',*,*,#1203,.T.); +#2210 = ORIENTED_EDGE('',*,*,#2211,.T.); +#2211 = EDGE_CURVE('',#1206,#1594,#2212,.T.); +#2212 = LINE('',#2213,#2214); +#2213 = CARTESIAN_POINT('',(-381.08,-611.,844.)); +#2214 = VECTOR('',#2215,1.); +#2215 = DIRECTION('',(-0.,1.,0.)); +#2216 = ORIENTED_EDGE('',*,*,#1591,.F.); +#2217 = PLANE('',#2218); +#2218 = AXIS2_PLACEMENT_3D('',#2219,#2220,#2221); +#2219 = CARTESIAN_POINT('',(-400.92,-611.,844.)); +#2220 = DIRECTION('',(0.,0.,1.)); +#2221 = DIRECTION('',(1.,0.,-0.)); +#2222 = ADVANCED_FACE('',(#2223),#2234,.T.); +#2223 = FACE_BOUND('',#2224,.T.); +#2224 = EDGE_LOOP('',(#2225,#2226,#2227,#2233)); +#2225 = ORIENTED_EDGE('',*,*,#2204,.F.); +#2226 = ORIENTED_EDGE('',*,*,#1213,.T.); +#2227 = ORIENTED_EDGE('',*,*,#2228,.T.); +#2228 = EDGE_CURVE('',#1214,#1602,#2229,.T.); +#2229 = LINE('',#2230,#2231); +#2230 = CARTESIAN_POINT('',(-400.92,-611.,828.)); +#2231 = VECTOR('',#2232,1.); +#2232 = DIRECTION('',(-0.,1.,0.)); +#2233 = ORIENTED_EDGE('',*,*,#1601,.F.); +#2234 = PLANE('',#2235); +#2235 = AXIS2_PLACEMENT_3D('',#2236,#2237,#2238); +#2236 = CARTESIAN_POINT('',(-400.92,-611.,828.)); +#2237 = DIRECTION('',(1.,0.,-0.)); +#2238 = DIRECTION('',(0.,0.,1.)); +#2239 = ADVANCED_FACE('',(#2240),#2251,.F.); +#2240 = FACE_BOUND('',#2241,.F.); +#2241 = EDGE_LOOP('',(#2242,#2243,#2244,#2250)); +#2242 = ORIENTED_EDGE('',*,*,#2211,.F.); +#2243 = ORIENTED_EDGE('',*,*,#1229,.T.); +#2244 = ORIENTED_EDGE('',*,*,#2245,.T.); +#2245 = EDGE_CURVE('',#1222,#1610,#2246,.T.); +#2246 = LINE('',#2247,#2248); +#2247 = CARTESIAN_POINT('',(-381.08,-611.,828.)); +#2248 = VECTOR('',#2249,1.); +#2249 = DIRECTION('',(-0.,1.,0.)); +#2250 = ORIENTED_EDGE('',*,*,#1617,.F.); +#2251 = PLANE('',#2252); +#2252 = AXIS2_PLACEMENT_3D('',#2253,#2254,#2255); +#2253 = CARTESIAN_POINT('',(-381.08,-611.,828.)); +#2254 = DIRECTION('',(1.,0.,-0.)); +#2255 = DIRECTION('',(0.,0.,1.)); +#2256 = ADVANCED_FACE('',(#2257),#2263,.T.); +#2257 = FACE_BOUND('',#2258,.T.); +#2258 = EDGE_LOOP('',(#2259,#2260,#2261,#2262)); +#2259 = ORIENTED_EDGE('',*,*,#2228,.F.); +#2260 = ORIENTED_EDGE('',*,*,#1221,.T.); +#2261 = ORIENTED_EDGE('',*,*,#2245,.T.); +#2262 = ORIENTED_EDGE('',*,*,#1609,.F.); +#2263 = PLANE('',#2264); +#2264 = AXIS2_PLACEMENT_3D('',#2265,#2266,#2267); +#2265 = CARTESIAN_POINT('',(-400.92,-611.,828.)); +#2266 = DIRECTION('',(0.,0.,1.)); +#2267 = DIRECTION('',(1.,0.,-0.)); +#2268 = ADVANCED_FACE('',(#2269),#2285,.F.); +#2269 = FACE_BOUND('',#2270,.F.); +#2270 = EDGE_LOOP('',(#2271,#2277,#2278,#2284)); +#2271 = ORIENTED_EDGE('',*,*,#2272,.F.); +#2272 = EDGE_CURVE('',#1238,#1626,#2273,.T.); +#2273 = LINE('',#2274,#2275); +#2274 = CARTESIAN_POINT('',(-400.92,-611.,886.)); +#2275 = VECTOR('',#2276,1.); +#2276 = DIRECTION('',(-0.,1.,0.)); +#2277 = ORIENTED_EDGE('',*,*,#1237,.T.); +#2278 = ORIENTED_EDGE('',*,*,#2279,.T.); +#2279 = EDGE_CURVE('',#1240,#1628,#2280,.T.); +#2280 = LINE('',#2281,#2282); +#2281 = CARTESIAN_POINT('',(-381.08,-611.,886.)); +#2282 = VECTOR('',#2283,1.); +#2283 = DIRECTION('',(-0.,1.,0.)); +#2284 = ORIENTED_EDGE('',*,*,#1625,.F.); +#2285 = PLANE('',#2286); +#2286 = AXIS2_PLACEMENT_3D('',#2287,#2288,#2289); +#2287 = CARTESIAN_POINT('',(-400.92,-611.,886.)); +#2288 = DIRECTION('',(0.,0.,1.)); +#2289 = DIRECTION('',(1.,0.,-0.)); +#2290 = ADVANCED_FACE('',(#2291),#2302,.T.); +#2291 = FACE_BOUND('',#2292,.T.); +#2292 = EDGE_LOOP('',(#2293,#2294,#2295,#2301)); +#2293 = ORIENTED_EDGE('',*,*,#2272,.F.); +#2294 = ORIENTED_EDGE('',*,*,#1247,.T.); +#2295 = ORIENTED_EDGE('',*,*,#2296,.T.); +#2296 = EDGE_CURVE('',#1248,#1636,#2297,.T.); +#2297 = LINE('',#2298,#2299); +#2298 = CARTESIAN_POINT('',(-400.92,-611.,870.)); +#2299 = VECTOR('',#2300,1.); +#2300 = DIRECTION('',(-0.,1.,0.)); +#2301 = ORIENTED_EDGE('',*,*,#1635,.F.); +#2302 = PLANE('',#2303); +#2303 = AXIS2_PLACEMENT_3D('',#2304,#2305,#2306); +#2304 = CARTESIAN_POINT('',(-400.92,-611.,870.)); +#2305 = DIRECTION('',(1.,0.,-0.)); +#2306 = DIRECTION('',(0.,0.,1.)); +#2307 = ADVANCED_FACE('',(#2308),#2319,.F.); +#2308 = FACE_BOUND('',#2309,.F.); +#2309 = EDGE_LOOP('',(#2310,#2311,#2312,#2318)); +#2310 = ORIENTED_EDGE('',*,*,#2279,.F.); +#2311 = ORIENTED_EDGE('',*,*,#1263,.T.); +#2312 = ORIENTED_EDGE('',*,*,#2313,.T.); +#2313 = EDGE_CURVE('',#1256,#1644,#2314,.T.); +#2314 = LINE('',#2315,#2316); +#2315 = CARTESIAN_POINT('',(-381.08,-611.,870.)); +#2316 = VECTOR('',#2317,1.); +#2317 = DIRECTION('',(-0.,1.,0.)); +#2318 = ORIENTED_EDGE('',*,*,#1651,.F.); +#2319 = PLANE('',#2320); +#2320 = AXIS2_PLACEMENT_3D('',#2321,#2322,#2323); +#2321 = CARTESIAN_POINT('',(-381.08,-611.,870.)); +#2322 = DIRECTION('',(1.,0.,-0.)); +#2323 = DIRECTION('',(0.,0.,1.)); +#2324 = ADVANCED_FACE('',(#2325),#2331,.T.); +#2325 = FACE_BOUND('',#2326,.T.); +#2326 = EDGE_LOOP('',(#2327,#2328,#2329,#2330)); +#2327 = ORIENTED_EDGE('',*,*,#2296,.F.); +#2328 = ORIENTED_EDGE('',*,*,#1255,.T.); +#2329 = ORIENTED_EDGE('',*,*,#2313,.T.); +#2330 = ORIENTED_EDGE('',*,*,#1643,.F.); +#2331 = PLANE('',#2332); +#2332 = AXIS2_PLACEMENT_3D('',#2333,#2334,#2335); +#2333 = CARTESIAN_POINT('',(-400.92,-611.,870.)); +#2334 = DIRECTION('',(0.,0.,1.)); +#2335 = DIRECTION('',(1.,0.,-0.)); +#2336 = ADVANCED_FACE('',(#2337),#2353,.F.); +#2337 = FACE_BOUND('',#2338,.F.); +#2338 = EDGE_LOOP('',(#2339,#2345,#2346,#2352)); +#2339 = ORIENTED_EDGE('',*,*,#2340,.F.); +#2340 = EDGE_CURVE('',#1272,#1660,#2341,.T.); +#2341 = LINE('',#2342,#2343); +#2342 = CARTESIAN_POINT('',(-400.92,-611.,928.)); +#2343 = VECTOR('',#2344,1.); +#2344 = DIRECTION('',(-0.,1.,0.)); +#2345 = ORIENTED_EDGE('',*,*,#1271,.T.); +#2346 = ORIENTED_EDGE('',*,*,#2347,.T.); +#2347 = EDGE_CURVE('',#1274,#1662,#2348,.T.); +#2348 = LINE('',#2349,#2350); +#2349 = CARTESIAN_POINT('',(-381.08,-611.,928.)); +#2350 = VECTOR('',#2351,1.); +#2351 = DIRECTION('',(-0.,1.,0.)); +#2352 = ORIENTED_EDGE('',*,*,#1659,.F.); +#2353 = PLANE('',#2354); +#2354 = AXIS2_PLACEMENT_3D('',#2355,#2356,#2357); +#2355 = CARTESIAN_POINT('',(-400.92,-611.,928.)); +#2356 = DIRECTION('',(0.,0.,1.)); +#2357 = DIRECTION('',(1.,0.,-0.)); +#2358 = ADVANCED_FACE('',(#2359),#2370,.F.); +#2359 = FACE_BOUND('',#2360,.F.); +#2360 = EDGE_LOOP('',(#2361,#2362,#2363,#2369)); +#2361 = ORIENTED_EDGE('',*,*,#2347,.F.); +#2362 = ORIENTED_EDGE('',*,*,#1297,.T.); +#2363 = ORIENTED_EDGE('',*,*,#2364,.T.); +#2364 = EDGE_CURVE('',#1290,#1678,#2365,.T.); +#2365 = LINE('',#2366,#2367); +#2366 = CARTESIAN_POINT('',(-381.08,-611.,912.)); +#2367 = VECTOR('',#2368,1.); +#2368 = DIRECTION('',(-0.,1.,0.)); +#2369 = ORIENTED_EDGE('',*,*,#1685,.F.); +#2370 = PLANE('',#2371); +#2371 = AXIS2_PLACEMENT_3D('',#2372,#2373,#2374); +#2372 = CARTESIAN_POINT('',(-381.08,-611.,912.)); +#2373 = DIRECTION('',(1.,0.,-0.)); +#2374 = DIRECTION('',(0.,0.,1.)); +#2375 = ADVANCED_FACE('',(#2376),#2387,.T.); +#2376 = FACE_BOUND('',#2377,.T.); +#2377 = EDGE_LOOP('',(#2378,#2384,#2385,#2386)); +#2378 = ORIENTED_EDGE('',*,*,#2379,.F.); +#2379 = EDGE_CURVE('',#1282,#1670,#2380,.T.); +#2380 = LINE('',#2381,#2382); +#2381 = CARTESIAN_POINT('',(-400.92,-611.,912.)); +#2382 = VECTOR('',#2383,1.); +#2383 = DIRECTION('',(-0.,1.,0.)); +#2384 = ORIENTED_EDGE('',*,*,#1289,.T.); +#2385 = ORIENTED_EDGE('',*,*,#2364,.T.); +#2386 = ORIENTED_EDGE('',*,*,#1677,.F.); +#2387 = PLANE('',#2388); +#2388 = AXIS2_PLACEMENT_3D('',#2389,#2390,#2391); +#2389 = CARTESIAN_POINT('',(-400.92,-611.,912.)); +#2390 = DIRECTION('',(0.,0.,1.)); +#2391 = DIRECTION('',(1.,0.,-0.)); +#2392 = ADVANCED_FACE('',(#2393),#2399,.T.); +#2393 = FACE_BOUND('',#2394,.T.); +#2394 = EDGE_LOOP('',(#2395,#2396,#2397,#2398)); +#2395 = ORIENTED_EDGE('',*,*,#2340,.F.); +#2396 = ORIENTED_EDGE('',*,*,#1281,.T.); +#2397 = ORIENTED_EDGE('',*,*,#2379,.T.); +#2398 = ORIENTED_EDGE('',*,*,#1669,.F.); +#2399 = PLANE('',#2400); +#2400 = AXIS2_PLACEMENT_3D('',#2401,#2402,#2403); +#2401 = CARTESIAN_POINT('',(-400.92,-611.,912.)); +#2402 = DIRECTION('',(1.,0.,-0.)); +#2403 = DIRECTION('',(0.,0.,1.)); +#2404 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#2408)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#2405,#2406,#2407)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#2405 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#2406 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#2407 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#2408 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-07),#2405, + 'distance_accuracy_value','confusion accuracy'); +#2409 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#2410,#2412); +#2410 = ( REPRESENTATION_RELATIONSHIP('','',#893,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#2411) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#2411 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19); +#2412 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #2413); +#2413 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','NAU03_Left_Side_Panel','',#5 + ,#888,$); +#2414 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#890)); +#2415 = SHAPE_DEFINITION_REPRESENTATION(#2416,#2422); +#2416 = PRODUCT_DEFINITION_SHAPE('','',#2417); +#2417 = PRODUCT_DEFINITION('design','',#2418,#2421); +#2418 = PRODUCT_DEFINITION_FORMATION('','',#2419); +#2419 = PRODUCT('NAU03_Right_Side_Panel','NAU03_Right_Side_Panel','',( + #2420)); +#2420 = PRODUCT_CONTEXT('',#2,'mechanical'); +#2421 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#2422 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#2423),#3933); +#2423 = MANIFOLD_SOLID_BREP('',#2424); +#2424 = CLOSED_SHELL('',(#2425,#2465,#2836,#2860,#3224,#3241,#3253,#3275 + ,#3292,#3309,#3321,#3343,#3360,#3377,#3389,#3411,#3428,#3445,#3457, + #3479,#3496,#3513,#3525,#3547,#3564,#3581,#3593,#3615,#3632,#3649, + #3661,#3683,#3700,#3717,#3729,#3751,#3768,#3785,#3797,#3819,#3836, + #3853,#3865,#3887,#3904,#3921)); +#2425 = ADVANCED_FACE('',(#2426),#2460,.F.); +#2426 = FACE_BOUND('',#2427,.F.); +#2427 = EDGE_LOOP('',(#2428,#2438,#2446,#2454)); +#2428 = ORIENTED_EDGE('',*,*,#2429,.F.); +#2429 = EDGE_CURVE('',#2430,#2432,#2434,.T.); +#2430 = VERTEX_POINT('',#2431); +#2431 = CARTESIAN_POINT('',(375.,-608.,50.)); +#2432 = VERTEX_POINT('',#2433); +#2433 = CARTESIAN_POINT('',(375.,-608.,2.25E+03)); +#2434 = LINE('',#2435,#2436); +#2435 = CARTESIAN_POINT('',(375.,-608.,50.)); +#2436 = VECTOR('',#2437,1.); +#2437 = DIRECTION('',(0.,0.,1.)); +#2438 = ORIENTED_EDGE('',*,*,#2439,.T.); +#2439 = EDGE_CURVE('',#2430,#2440,#2442,.T.); +#2440 = VERTEX_POINT('',#2441); +#2441 = CARTESIAN_POINT('',(375.,608.,50.)); +#2442 = LINE('',#2443,#2444); +#2443 = CARTESIAN_POINT('',(375.,-608.,50.)); +#2444 = VECTOR('',#2445,1.); +#2445 = DIRECTION('',(-0.,1.,0.)); +#2446 = ORIENTED_EDGE('',*,*,#2447,.T.); +#2447 = EDGE_CURVE('',#2440,#2448,#2450,.T.); +#2448 = VERTEX_POINT('',#2449); +#2449 = CARTESIAN_POINT('',(375.,608.,2.25E+03)); +#2450 = LINE('',#2451,#2452); +#2451 = CARTESIAN_POINT('',(375.,608.,50.)); +#2452 = VECTOR('',#2453,1.); +#2453 = DIRECTION('',(0.,0.,1.)); +#2454 = ORIENTED_EDGE('',*,*,#2455,.F.); +#2455 = EDGE_CURVE('',#2432,#2448,#2456,.T.); +#2456 = LINE('',#2457,#2458); +#2457 = CARTESIAN_POINT('',(375.,-608.,2.25E+03)); +#2458 = VECTOR('',#2459,1.); +#2459 = DIRECTION('',(-0.,1.,0.)); +#2460 = PLANE('',#2461); +#2461 = AXIS2_PLACEMENT_3D('',#2462,#2463,#2464); +#2462 = CARTESIAN_POINT('',(375.,-608.,50.)); +#2463 = DIRECTION('',(1.,0.,-0.)); +#2464 = DIRECTION('',(0.,0.,1.)); +#2465 = ADVANCED_FACE('',(#2466,#2491,#2525,#2559,#2593,#2627,#2661, + #2695,#2729,#2763,#2797),#2831,.F.); +#2466 = FACE_BOUND('',#2467,.F.); +#2467 = EDGE_LOOP('',(#2468,#2476,#2477,#2485)); +#2468 = ORIENTED_EDGE('',*,*,#2469,.F.); +#2469 = EDGE_CURVE('',#2430,#2470,#2472,.T.); +#2470 = VERTEX_POINT('',#2471); +#2471 = CARTESIAN_POINT('',(407.,-608.,50.)); +#2472 = LINE('',#2473,#2474); +#2473 = CARTESIAN_POINT('',(375.,-608.,50.)); +#2474 = VECTOR('',#2475,1.); +#2475 = DIRECTION('',(1.,0.,-0.)); +#2476 = ORIENTED_EDGE('',*,*,#2429,.T.); +#2477 = ORIENTED_EDGE('',*,*,#2478,.T.); +#2478 = EDGE_CURVE('',#2432,#2479,#2481,.T.); +#2479 = VERTEX_POINT('',#2480); +#2480 = CARTESIAN_POINT('',(407.,-608.,2.25E+03)); +#2481 = LINE('',#2482,#2483); +#2482 = CARTESIAN_POINT('',(375.,-608.,2.25E+03)); +#2483 = VECTOR('',#2484,1.); +#2484 = DIRECTION('',(1.,0.,-0.)); +#2485 = ORIENTED_EDGE('',*,*,#2486,.F.); +#2486 = EDGE_CURVE('',#2470,#2479,#2487,.T.); +#2487 = LINE('',#2488,#2489); +#2488 = CARTESIAN_POINT('',(407.,-608.,50.)); +#2489 = VECTOR('',#2490,1.); +#2490 = DIRECTION('',(0.,0.,1.)); +#2491 = FACE_BOUND('',#2492,.F.); +#2492 = EDGE_LOOP('',(#2493,#2503,#2511,#2519)); +#2493 = ORIENTED_EDGE('',*,*,#2494,.F.); +#2494 = EDGE_CURVE('',#2495,#2497,#2499,.T.); +#2495 = VERTEX_POINT('',#2496); +#2496 = CARTESIAN_POINT('',(381.08,-608.,550.)); +#2497 = VERTEX_POINT('',#2498); +#2498 = CARTESIAN_POINT('',(400.92,-608.,550.)); +#2499 = LINE('',#2500,#2501); +#2500 = CARTESIAN_POINT('',(378.04,-608.,550.)); +#2501 = VECTOR('',#2502,1.); +#2502 = DIRECTION('',(1.,0.,-0.)); +#2503 = ORIENTED_EDGE('',*,*,#2504,.T.); +#2504 = EDGE_CURVE('',#2495,#2505,#2507,.T.); +#2505 = VERTEX_POINT('',#2506); +#2506 = CARTESIAN_POINT('',(381.08,-608.,534.)); +#2507 = LINE('',#2508,#2509); +#2508 = CARTESIAN_POINT('',(381.08,-608.,292.)); +#2509 = VECTOR('',#2510,1.); +#2510 = DIRECTION('',(-0.,0.,-1.)); +#2511 = ORIENTED_EDGE('',*,*,#2512,.T.); +#2512 = EDGE_CURVE('',#2505,#2513,#2515,.T.); +#2513 = VERTEX_POINT('',#2514); +#2514 = CARTESIAN_POINT('',(400.92,-608.,534.)); +#2515 = LINE('',#2516,#2517); +#2516 = CARTESIAN_POINT('',(378.04,-608.,534.)); +#2517 = VECTOR('',#2518,1.); +#2518 = DIRECTION('',(1.,0.,-0.)); +#2519 = ORIENTED_EDGE('',*,*,#2520,.F.); +#2520 = EDGE_CURVE('',#2497,#2513,#2521,.T.); +#2521 = LINE('',#2522,#2523); +#2522 = CARTESIAN_POINT('',(400.92,-608.,292.)); +#2523 = VECTOR('',#2524,1.); +#2524 = DIRECTION('',(-0.,0.,-1.)); +#2525 = FACE_BOUND('',#2526,.F.); +#2526 = EDGE_LOOP('',(#2527,#2537,#2545,#2553)); +#2527 = ORIENTED_EDGE('',*,*,#2528,.F.); +#2528 = EDGE_CURVE('',#2529,#2531,#2533,.T.); +#2529 = VERTEX_POINT('',#2530); +#2530 = CARTESIAN_POINT('',(381.08,-608.,592.)); +#2531 = VERTEX_POINT('',#2532); +#2532 = CARTESIAN_POINT('',(400.92,-608.,592.)); +#2533 = LINE('',#2534,#2535); +#2534 = CARTESIAN_POINT('',(378.04,-608.,592.)); +#2535 = VECTOR('',#2536,1.); +#2536 = DIRECTION('',(1.,0.,-0.)); +#2537 = ORIENTED_EDGE('',*,*,#2538,.T.); +#2538 = EDGE_CURVE('',#2529,#2539,#2541,.T.); +#2539 = VERTEX_POINT('',#2540); +#2540 = CARTESIAN_POINT('',(381.08,-608.,576.)); +#2541 = LINE('',#2542,#2543); +#2542 = CARTESIAN_POINT('',(381.08,-608.,313.)); +#2543 = VECTOR('',#2544,1.); +#2544 = DIRECTION('',(-0.,0.,-1.)); +#2545 = ORIENTED_EDGE('',*,*,#2546,.T.); +#2546 = EDGE_CURVE('',#2539,#2547,#2549,.T.); +#2547 = VERTEX_POINT('',#2548); +#2548 = CARTESIAN_POINT('',(400.92,-608.,576.)); +#2549 = LINE('',#2550,#2551); +#2550 = CARTESIAN_POINT('',(378.04,-608.,576.)); +#2551 = VECTOR('',#2552,1.); +#2552 = DIRECTION('',(1.,0.,-0.)); +#2553 = ORIENTED_EDGE('',*,*,#2554,.F.); +#2554 = EDGE_CURVE('',#2531,#2547,#2555,.T.); +#2555 = LINE('',#2556,#2557); +#2556 = CARTESIAN_POINT('',(400.92,-608.,313.)); +#2557 = VECTOR('',#2558,1.); +#2558 = DIRECTION('',(-0.,0.,-1.)); +#2559 = FACE_BOUND('',#2560,.F.); +#2560 = EDGE_LOOP('',(#2561,#2571,#2579,#2587)); +#2561 = ORIENTED_EDGE('',*,*,#2562,.F.); +#2562 = EDGE_CURVE('',#2563,#2565,#2567,.T.); +#2563 = VERTEX_POINT('',#2564); +#2564 = CARTESIAN_POINT('',(381.08,-608.,634.)); +#2565 = VERTEX_POINT('',#2566); +#2566 = CARTESIAN_POINT('',(400.92,-608.,634.)); +#2567 = LINE('',#2568,#2569); +#2568 = CARTESIAN_POINT('',(378.04,-608.,634.)); +#2569 = VECTOR('',#2570,1.); +#2570 = DIRECTION('',(1.,0.,-0.)); +#2571 = ORIENTED_EDGE('',*,*,#2572,.T.); +#2572 = EDGE_CURVE('',#2563,#2573,#2575,.T.); +#2573 = VERTEX_POINT('',#2574); +#2574 = CARTESIAN_POINT('',(381.08,-608.,618.)); +#2575 = LINE('',#2576,#2577); +#2576 = CARTESIAN_POINT('',(381.08,-608.,334.)); +#2577 = VECTOR('',#2578,1.); +#2578 = DIRECTION('',(-0.,0.,-1.)); +#2579 = ORIENTED_EDGE('',*,*,#2580,.T.); +#2580 = EDGE_CURVE('',#2573,#2581,#2583,.T.); +#2581 = VERTEX_POINT('',#2582); +#2582 = CARTESIAN_POINT('',(400.92,-608.,618.)); +#2583 = LINE('',#2584,#2585); +#2584 = CARTESIAN_POINT('',(378.04,-608.,618.)); +#2585 = VECTOR('',#2586,1.); +#2586 = DIRECTION('',(1.,0.,-0.)); +#2587 = ORIENTED_EDGE('',*,*,#2588,.F.); +#2588 = EDGE_CURVE('',#2565,#2581,#2589,.T.); +#2589 = LINE('',#2590,#2591); +#2590 = CARTESIAN_POINT('',(400.92,-608.,334.)); +#2591 = VECTOR('',#2592,1.); +#2592 = DIRECTION('',(-0.,0.,-1.)); +#2593 = FACE_BOUND('',#2594,.F.); +#2594 = EDGE_LOOP('',(#2595,#2605,#2613,#2621)); +#2595 = ORIENTED_EDGE('',*,*,#2596,.F.); +#2596 = EDGE_CURVE('',#2597,#2599,#2601,.T.); +#2597 = VERTEX_POINT('',#2598); +#2598 = CARTESIAN_POINT('',(381.08,-608.,676.)); +#2599 = VERTEX_POINT('',#2600); +#2600 = CARTESIAN_POINT('',(400.92,-608.,676.)); +#2601 = LINE('',#2602,#2603); +#2602 = CARTESIAN_POINT('',(378.04,-608.,676.)); +#2603 = VECTOR('',#2604,1.); +#2604 = DIRECTION('',(1.,0.,-0.)); +#2605 = ORIENTED_EDGE('',*,*,#2606,.T.); +#2606 = EDGE_CURVE('',#2597,#2607,#2609,.T.); +#2607 = VERTEX_POINT('',#2608); +#2608 = CARTESIAN_POINT('',(381.08,-608.,660.)); +#2609 = LINE('',#2610,#2611); +#2610 = CARTESIAN_POINT('',(381.08,-608.,355.)); +#2611 = VECTOR('',#2612,1.); +#2612 = DIRECTION('',(-0.,0.,-1.)); +#2613 = ORIENTED_EDGE('',*,*,#2614,.T.); +#2614 = EDGE_CURVE('',#2607,#2615,#2617,.T.); +#2615 = VERTEX_POINT('',#2616); +#2616 = CARTESIAN_POINT('',(400.92,-608.,660.)); +#2617 = LINE('',#2618,#2619); +#2618 = CARTESIAN_POINT('',(378.04,-608.,660.)); +#2619 = VECTOR('',#2620,1.); +#2620 = DIRECTION('',(1.,0.,-0.)); +#2621 = ORIENTED_EDGE('',*,*,#2622,.F.); +#2622 = EDGE_CURVE('',#2599,#2615,#2623,.T.); +#2623 = LINE('',#2624,#2625); +#2624 = CARTESIAN_POINT('',(400.92,-608.,355.)); +#2625 = VECTOR('',#2626,1.); +#2626 = DIRECTION('',(-0.,0.,-1.)); +#2627 = FACE_BOUND('',#2628,.F.); +#2628 = EDGE_LOOP('',(#2629,#2639,#2647,#2655)); +#2629 = ORIENTED_EDGE('',*,*,#2630,.F.); +#2630 = EDGE_CURVE('',#2631,#2633,#2635,.T.); +#2631 = VERTEX_POINT('',#2632); +#2632 = CARTESIAN_POINT('',(381.08,-608.,718.)); +#2633 = VERTEX_POINT('',#2634); +#2634 = CARTESIAN_POINT('',(400.92,-608.,718.)); +#2635 = LINE('',#2636,#2637); +#2636 = CARTESIAN_POINT('',(378.04,-608.,718.)); +#2637 = VECTOR('',#2638,1.); +#2638 = DIRECTION('',(1.,0.,-0.)); +#2639 = ORIENTED_EDGE('',*,*,#2640,.T.); +#2640 = EDGE_CURVE('',#2631,#2641,#2643,.T.); +#2641 = VERTEX_POINT('',#2642); +#2642 = CARTESIAN_POINT('',(381.08,-608.,702.)); +#2643 = LINE('',#2644,#2645); +#2644 = CARTESIAN_POINT('',(381.08,-608.,376.)); +#2645 = VECTOR('',#2646,1.); +#2646 = DIRECTION('',(-0.,0.,-1.)); +#2647 = ORIENTED_EDGE('',*,*,#2648,.T.); +#2648 = EDGE_CURVE('',#2641,#2649,#2651,.T.); +#2649 = VERTEX_POINT('',#2650); +#2650 = CARTESIAN_POINT('',(400.92,-608.,702.)); +#2651 = LINE('',#2652,#2653); +#2652 = CARTESIAN_POINT('',(378.04,-608.,702.)); +#2653 = VECTOR('',#2654,1.); +#2654 = DIRECTION('',(1.,0.,-0.)); +#2655 = ORIENTED_EDGE('',*,*,#2656,.F.); +#2656 = EDGE_CURVE('',#2633,#2649,#2657,.T.); +#2657 = LINE('',#2658,#2659); +#2658 = CARTESIAN_POINT('',(400.92,-608.,376.)); +#2659 = VECTOR('',#2660,1.); +#2660 = DIRECTION('',(-0.,0.,-1.)); +#2661 = FACE_BOUND('',#2662,.F.); +#2662 = EDGE_LOOP('',(#2663,#2673,#2681,#2689)); +#2663 = ORIENTED_EDGE('',*,*,#2664,.F.); +#2664 = EDGE_CURVE('',#2665,#2667,#2669,.T.); +#2665 = VERTEX_POINT('',#2666); +#2666 = CARTESIAN_POINT('',(381.08,-608.,760.)); +#2667 = VERTEX_POINT('',#2668); +#2668 = CARTESIAN_POINT('',(400.92,-608.,760.)); +#2669 = LINE('',#2670,#2671); +#2670 = CARTESIAN_POINT('',(378.04,-608.,760.)); +#2671 = VECTOR('',#2672,1.); +#2672 = DIRECTION('',(1.,0.,-0.)); +#2673 = ORIENTED_EDGE('',*,*,#2674,.T.); +#2674 = EDGE_CURVE('',#2665,#2675,#2677,.T.); +#2675 = VERTEX_POINT('',#2676); +#2676 = CARTESIAN_POINT('',(381.08,-608.,744.)); +#2677 = LINE('',#2678,#2679); +#2678 = CARTESIAN_POINT('',(381.08,-608.,397.)); +#2679 = VECTOR('',#2680,1.); +#2680 = DIRECTION('',(-0.,0.,-1.)); +#2681 = ORIENTED_EDGE('',*,*,#2682,.T.); +#2682 = EDGE_CURVE('',#2675,#2683,#2685,.T.); +#2683 = VERTEX_POINT('',#2684); +#2684 = CARTESIAN_POINT('',(400.92,-608.,744.)); +#2685 = LINE('',#2686,#2687); +#2686 = CARTESIAN_POINT('',(378.04,-608.,744.)); +#2687 = VECTOR('',#2688,1.); +#2688 = DIRECTION('',(1.,0.,-0.)); +#2689 = ORIENTED_EDGE('',*,*,#2690,.F.); +#2690 = EDGE_CURVE('',#2667,#2683,#2691,.T.); +#2691 = LINE('',#2692,#2693); +#2692 = CARTESIAN_POINT('',(400.92,-608.,397.)); +#2693 = VECTOR('',#2694,1.); +#2694 = DIRECTION('',(-0.,0.,-1.)); +#2695 = FACE_BOUND('',#2696,.F.); +#2696 = EDGE_LOOP('',(#2697,#2707,#2715,#2723)); +#2697 = ORIENTED_EDGE('',*,*,#2698,.F.); +#2698 = EDGE_CURVE('',#2699,#2701,#2703,.T.); +#2699 = VERTEX_POINT('',#2700); +#2700 = CARTESIAN_POINT('',(381.08,-608.,802.)); +#2701 = VERTEX_POINT('',#2702); +#2702 = CARTESIAN_POINT('',(400.92,-608.,802.)); +#2703 = LINE('',#2704,#2705); +#2704 = CARTESIAN_POINT('',(378.04,-608.,802.)); +#2705 = VECTOR('',#2706,1.); +#2706 = DIRECTION('',(1.,0.,-0.)); +#2707 = ORIENTED_EDGE('',*,*,#2708,.T.); +#2708 = EDGE_CURVE('',#2699,#2709,#2711,.T.); +#2709 = VERTEX_POINT('',#2710); +#2710 = CARTESIAN_POINT('',(381.08,-608.,786.)); +#2711 = LINE('',#2712,#2713); +#2712 = CARTESIAN_POINT('',(381.08,-608.,418.)); +#2713 = VECTOR('',#2714,1.); +#2714 = DIRECTION('',(-0.,0.,-1.)); +#2715 = ORIENTED_EDGE('',*,*,#2716,.T.); +#2716 = EDGE_CURVE('',#2709,#2717,#2719,.T.); +#2717 = VERTEX_POINT('',#2718); +#2718 = CARTESIAN_POINT('',(400.92,-608.,786.)); +#2719 = LINE('',#2720,#2721); +#2720 = CARTESIAN_POINT('',(378.04,-608.,786.)); +#2721 = VECTOR('',#2722,1.); +#2722 = DIRECTION('',(1.,0.,-0.)); +#2723 = ORIENTED_EDGE('',*,*,#2724,.F.); +#2724 = EDGE_CURVE('',#2701,#2717,#2725,.T.); +#2725 = LINE('',#2726,#2727); +#2726 = CARTESIAN_POINT('',(400.92,-608.,418.)); +#2727 = VECTOR('',#2728,1.); +#2728 = DIRECTION('',(-0.,0.,-1.)); +#2729 = FACE_BOUND('',#2730,.F.); +#2730 = EDGE_LOOP('',(#2731,#2741,#2749,#2757)); +#2731 = ORIENTED_EDGE('',*,*,#2732,.F.); +#2732 = EDGE_CURVE('',#2733,#2735,#2737,.T.); +#2733 = VERTEX_POINT('',#2734); +#2734 = CARTESIAN_POINT('',(381.08,-608.,844.)); +#2735 = VERTEX_POINT('',#2736); +#2736 = CARTESIAN_POINT('',(400.92,-608.,844.)); +#2737 = LINE('',#2738,#2739); +#2738 = CARTESIAN_POINT('',(378.04,-608.,844.)); +#2739 = VECTOR('',#2740,1.); +#2740 = DIRECTION('',(1.,0.,-0.)); +#2741 = ORIENTED_EDGE('',*,*,#2742,.T.); +#2742 = EDGE_CURVE('',#2733,#2743,#2745,.T.); +#2743 = VERTEX_POINT('',#2744); +#2744 = CARTESIAN_POINT('',(381.08,-608.,828.)); +#2745 = LINE('',#2746,#2747); +#2746 = CARTESIAN_POINT('',(381.08,-608.,439.)); +#2747 = VECTOR('',#2748,1.); +#2748 = DIRECTION('',(-0.,0.,-1.)); +#2749 = ORIENTED_EDGE('',*,*,#2750,.T.); +#2750 = EDGE_CURVE('',#2743,#2751,#2753,.T.); +#2751 = VERTEX_POINT('',#2752); +#2752 = CARTESIAN_POINT('',(400.92,-608.,828.)); +#2753 = LINE('',#2754,#2755); +#2754 = CARTESIAN_POINT('',(378.04,-608.,828.)); +#2755 = VECTOR('',#2756,1.); +#2756 = DIRECTION('',(1.,0.,-0.)); +#2757 = ORIENTED_EDGE('',*,*,#2758,.F.); +#2758 = EDGE_CURVE('',#2735,#2751,#2759,.T.); +#2759 = LINE('',#2760,#2761); +#2760 = CARTESIAN_POINT('',(400.92,-608.,439.)); +#2761 = VECTOR('',#2762,1.); +#2762 = DIRECTION('',(-0.,0.,-1.)); +#2763 = FACE_BOUND('',#2764,.F.); +#2764 = EDGE_LOOP('',(#2765,#2775,#2783,#2791)); +#2765 = ORIENTED_EDGE('',*,*,#2766,.F.); +#2766 = EDGE_CURVE('',#2767,#2769,#2771,.T.); +#2767 = VERTEX_POINT('',#2768); +#2768 = CARTESIAN_POINT('',(381.08,-608.,886.)); +#2769 = VERTEX_POINT('',#2770); +#2770 = CARTESIAN_POINT('',(400.92,-608.,886.)); +#2771 = LINE('',#2772,#2773); +#2772 = CARTESIAN_POINT('',(378.04,-608.,886.)); +#2773 = VECTOR('',#2774,1.); +#2774 = DIRECTION('',(1.,0.,-0.)); +#2775 = ORIENTED_EDGE('',*,*,#2776,.T.); +#2776 = EDGE_CURVE('',#2767,#2777,#2779,.T.); +#2777 = VERTEX_POINT('',#2778); +#2778 = CARTESIAN_POINT('',(381.08,-608.,870.)); +#2779 = LINE('',#2780,#2781); +#2780 = CARTESIAN_POINT('',(381.08,-608.,460.)); +#2781 = VECTOR('',#2782,1.); +#2782 = DIRECTION('',(-0.,0.,-1.)); +#2783 = ORIENTED_EDGE('',*,*,#2784,.T.); +#2784 = EDGE_CURVE('',#2777,#2785,#2787,.T.); +#2785 = VERTEX_POINT('',#2786); +#2786 = CARTESIAN_POINT('',(400.92,-608.,870.)); +#2787 = LINE('',#2788,#2789); +#2788 = CARTESIAN_POINT('',(378.04,-608.,870.)); +#2789 = VECTOR('',#2790,1.); +#2790 = DIRECTION('',(1.,0.,-0.)); +#2791 = ORIENTED_EDGE('',*,*,#2792,.F.); +#2792 = EDGE_CURVE('',#2769,#2785,#2793,.T.); +#2793 = LINE('',#2794,#2795); +#2794 = CARTESIAN_POINT('',(400.92,-608.,460.)); +#2795 = VECTOR('',#2796,1.); +#2796 = DIRECTION('',(-0.,0.,-1.)); +#2797 = FACE_BOUND('',#2798,.F.); +#2798 = EDGE_LOOP('',(#2799,#2809,#2817,#2825)); +#2799 = ORIENTED_EDGE('',*,*,#2800,.F.); +#2800 = EDGE_CURVE('',#2801,#2803,#2805,.T.); +#2801 = VERTEX_POINT('',#2802); +#2802 = CARTESIAN_POINT('',(381.08,-608.,928.)); +#2803 = VERTEX_POINT('',#2804); +#2804 = CARTESIAN_POINT('',(400.92,-608.,928.)); +#2805 = LINE('',#2806,#2807); +#2806 = CARTESIAN_POINT('',(378.04,-608.,928.)); +#2807 = VECTOR('',#2808,1.); +#2808 = DIRECTION('',(1.,0.,-0.)); +#2809 = ORIENTED_EDGE('',*,*,#2810,.T.); +#2810 = EDGE_CURVE('',#2801,#2811,#2813,.T.); +#2811 = VERTEX_POINT('',#2812); +#2812 = CARTESIAN_POINT('',(381.08,-608.,912.)); +#2813 = LINE('',#2814,#2815); +#2814 = CARTESIAN_POINT('',(381.08,-608.,481.)); +#2815 = VECTOR('',#2816,1.); +#2816 = DIRECTION('',(-0.,0.,-1.)); +#2817 = ORIENTED_EDGE('',*,*,#2818,.T.); +#2818 = EDGE_CURVE('',#2811,#2819,#2821,.T.); +#2819 = VERTEX_POINT('',#2820); +#2820 = CARTESIAN_POINT('',(400.92,-608.,912.)); +#2821 = LINE('',#2822,#2823); +#2822 = CARTESIAN_POINT('',(378.04,-608.,912.)); +#2823 = VECTOR('',#2824,1.); +#2824 = DIRECTION('',(1.,0.,-0.)); +#2825 = ORIENTED_EDGE('',*,*,#2826,.F.); +#2826 = EDGE_CURVE('',#2803,#2819,#2827,.T.); +#2827 = LINE('',#2828,#2829); +#2828 = CARTESIAN_POINT('',(400.92,-608.,481.)); +#2829 = VECTOR('',#2830,1.); +#2830 = DIRECTION('',(-0.,0.,-1.)); +#2831 = PLANE('',#2832); +#2832 = AXIS2_PLACEMENT_3D('',#2833,#2834,#2835); +#2833 = CARTESIAN_POINT('',(375.,-608.,50.)); +#2834 = DIRECTION('',(-0.,1.,0.)); +#2835 = DIRECTION('',(0.,0.,1.)); +#2836 = ADVANCED_FACE('',(#2837),#2855,.T.); +#2837 = FACE_BOUND('',#2838,.T.); +#2838 = EDGE_LOOP('',(#2839,#2840,#2841,#2849)); +#2839 = ORIENTED_EDGE('',*,*,#2455,.F.); +#2840 = ORIENTED_EDGE('',*,*,#2478,.T.); +#2841 = ORIENTED_EDGE('',*,*,#2842,.T.); +#2842 = EDGE_CURVE('',#2479,#2843,#2845,.T.); +#2843 = VERTEX_POINT('',#2844); +#2844 = CARTESIAN_POINT('',(407.,608.,2.25E+03)); +#2845 = LINE('',#2846,#2847); +#2846 = CARTESIAN_POINT('',(407.,-608.,2.25E+03)); +#2847 = VECTOR('',#2848,1.); +#2848 = DIRECTION('',(-0.,1.,0.)); +#2849 = ORIENTED_EDGE('',*,*,#2850,.F.); +#2850 = EDGE_CURVE('',#2448,#2843,#2851,.T.); +#2851 = LINE('',#2852,#2853); +#2852 = CARTESIAN_POINT('',(375.,608.,2.25E+03)); +#2853 = VECTOR('',#2854,1.); +#2854 = DIRECTION('',(1.,0.,-0.)); +#2855 = PLANE('',#2856); +#2856 = AXIS2_PLACEMENT_3D('',#2857,#2858,#2859); +#2857 = CARTESIAN_POINT('',(375.,-608.,2.25E+03)); +#2858 = DIRECTION('',(0.,0.,1.)); +#2859 = DIRECTION('',(1.,0.,-0.)); +#2860 = ADVANCED_FACE('',(#2861,#2879,#2913,#2947,#2981,#3015,#3049, + #3083,#3117,#3151,#3185),#3219,.T.); +#2861 = FACE_BOUND('',#2862,.T.); +#2862 = EDGE_LOOP('',(#2863,#2871,#2872,#2873)); +#2863 = ORIENTED_EDGE('',*,*,#2864,.F.); +#2864 = EDGE_CURVE('',#2440,#2865,#2867,.T.); +#2865 = VERTEX_POINT('',#2866); +#2866 = CARTESIAN_POINT('',(407.,608.,50.)); +#2867 = LINE('',#2868,#2869); +#2868 = CARTESIAN_POINT('',(375.,608.,50.)); +#2869 = VECTOR('',#2870,1.); +#2870 = DIRECTION('',(1.,0.,-0.)); +#2871 = ORIENTED_EDGE('',*,*,#2447,.T.); +#2872 = ORIENTED_EDGE('',*,*,#2850,.T.); +#2873 = ORIENTED_EDGE('',*,*,#2874,.F.); +#2874 = EDGE_CURVE('',#2865,#2843,#2875,.T.); +#2875 = LINE('',#2876,#2877); +#2876 = CARTESIAN_POINT('',(407.,608.,50.)); +#2877 = VECTOR('',#2878,1.); +#2878 = DIRECTION('',(0.,0.,1.)); +#2879 = FACE_BOUND('',#2880,.T.); +#2880 = EDGE_LOOP('',(#2881,#2891,#2899,#2907)); +#2881 = ORIENTED_EDGE('',*,*,#2882,.F.); +#2882 = EDGE_CURVE('',#2883,#2885,#2887,.T.); +#2883 = VERTEX_POINT('',#2884); +#2884 = CARTESIAN_POINT('',(381.08,608.,550.)); +#2885 = VERTEX_POINT('',#2886); +#2886 = CARTESIAN_POINT('',(400.92,608.,550.)); +#2887 = LINE('',#2888,#2889); +#2888 = CARTESIAN_POINT('',(378.04,608.,550.)); +#2889 = VECTOR('',#2890,1.); +#2890 = DIRECTION('',(1.,0.,-0.)); +#2891 = ORIENTED_EDGE('',*,*,#2892,.T.); +#2892 = EDGE_CURVE('',#2883,#2893,#2895,.T.); +#2893 = VERTEX_POINT('',#2894); +#2894 = CARTESIAN_POINT('',(381.08,608.,534.)); +#2895 = LINE('',#2896,#2897); +#2896 = CARTESIAN_POINT('',(381.08,608.,292.)); +#2897 = VECTOR('',#2898,1.); +#2898 = DIRECTION('',(-0.,0.,-1.)); +#2899 = ORIENTED_EDGE('',*,*,#2900,.T.); +#2900 = EDGE_CURVE('',#2893,#2901,#2903,.T.); +#2901 = VERTEX_POINT('',#2902); +#2902 = CARTESIAN_POINT('',(400.92,608.,534.)); +#2903 = LINE('',#2904,#2905); +#2904 = CARTESIAN_POINT('',(378.04,608.,534.)); +#2905 = VECTOR('',#2906,1.); +#2906 = DIRECTION('',(1.,0.,-0.)); +#2907 = ORIENTED_EDGE('',*,*,#2908,.F.); +#2908 = EDGE_CURVE('',#2885,#2901,#2909,.T.); +#2909 = LINE('',#2910,#2911); +#2910 = CARTESIAN_POINT('',(400.92,608.,292.)); +#2911 = VECTOR('',#2912,1.); +#2912 = DIRECTION('',(-0.,0.,-1.)); +#2913 = FACE_BOUND('',#2914,.T.); +#2914 = EDGE_LOOP('',(#2915,#2925,#2933,#2941)); +#2915 = ORIENTED_EDGE('',*,*,#2916,.F.); +#2916 = EDGE_CURVE('',#2917,#2919,#2921,.T.); +#2917 = VERTEX_POINT('',#2918); +#2918 = CARTESIAN_POINT('',(381.08,608.,592.)); +#2919 = VERTEX_POINT('',#2920); +#2920 = CARTESIAN_POINT('',(400.92,608.,592.)); +#2921 = LINE('',#2922,#2923); +#2922 = CARTESIAN_POINT('',(378.04,608.,592.)); +#2923 = VECTOR('',#2924,1.); +#2924 = DIRECTION('',(1.,0.,-0.)); +#2925 = ORIENTED_EDGE('',*,*,#2926,.T.); +#2926 = EDGE_CURVE('',#2917,#2927,#2929,.T.); +#2927 = VERTEX_POINT('',#2928); +#2928 = CARTESIAN_POINT('',(381.08,608.,576.)); +#2929 = LINE('',#2930,#2931); +#2930 = CARTESIAN_POINT('',(381.08,608.,313.)); +#2931 = VECTOR('',#2932,1.); +#2932 = DIRECTION('',(-0.,0.,-1.)); +#2933 = ORIENTED_EDGE('',*,*,#2934,.T.); +#2934 = EDGE_CURVE('',#2927,#2935,#2937,.T.); +#2935 = VERTEX_POINT('',#2936); +#2936 = CARTESIAN_POINT('',(400.92,608.,576.)); +#2937 = LINE('',#2938,#2939); +#2938 = CARTESIAN_POINT('',(378.04,608.,576.)); +#2939 = VECTOR('',#2940,1.); +#2940 = DIRECTION('',(1.,0.,-0.)); +#2941 = ORIENTED_EDGE('',*,*,#2942,.F.); +#2942 = EDGE_CURVE('',#2919,#2935,#2943,.T.); +#2943 = LINE('',#2944,#2945); +#2944 = CARTESIAN_POINT('',(400.92,608.,313.)); +#2945 = VECTOR('',#2946,1.); +#2946 = DIRECTION('',(-0.,0.,-1.)); +#2947 = FACE_BOUND('',#2948,.T.); +#2948 = EDGE_LOOP('',(#2949,#2959,#2967,#2975)); +#2949 = ORIENTED_EDGE('',*,*,#2950,.F.); +#2950 = EDGE_CURVE('',#2951,#2953,#2955,.T.); +#2951 = VERTEX_POINT('',#2952); +#2952 = CARTESIAN_POINT('',(381.08,608.,634.)); +#2953 = VERTEX_POINT('',#2954); +#2954 = CARTESIAN_POINT('',(400.92,608.,634.)); +#2955 = LINE('',#2956,#2957); +#2956 = CARTESIAN_POINT('',(378.04,608.,634.)); +#2957 = VECTOR('',#2958,1.); +#2958 = DIRECTION('',(1.,0.,-0.)); +#2959 = ORIENTED_EDGE('',*,*,#2960,.T.); +#2960 = EDGE_CURVE('',#2951,#2961,#2963,.T.); +#2961 = VERTEX_POINT('',#2962); +#2962 = CARTESIAN_POINT('',(381.08,608.,618.)); +#2963 = LINE('',#2964,#2965); +#2964 = CARTESIAN_POINT('',(381.08,608.,334.)); +#2965 = VECTOR('',#2966,1.); +#2966 = DIRECTION('',(-0.,0.,-1.)); +#2967 = ORIENTED_EDGE('',*,*,#2968,.T.); +#2968 = EDGE_CURVE('',#2961,#2969,#2971,.T.); +#2969 = VERTEX_POINT('',#2970); +#2970 = CARTESIAN_POINT('',(400.92,608.,618.)); +#2971 = LINE('',#2972,#2973); +#2972 = CARTESIAN_POINT('',(378.04,608.,618.)); +#2973 = VECTOR('',#2974,1.); +#2974 = DIRECTION('',(1.,0.,-0.)); +#2975 = ORIENTED_EDGE('',*,*,#2976,.F.); +#2976 = EDGE_CURVE('',#2953,#2969,#2977,.T.); +#2977 = LINE('',#2978,#2979); +#2978 = CARTESIAN_POINT('',(400.92,608.,334.)); +#2979 = VECTOR('',#2980,1.); +#2980 = DIRECTION('',(-0.,0.,-1.)); +#2981 = FACE_BOUND('',#2982,.T.); +#2982 = EDGE_LOOP('',(#2983,#2993,#3001,#3009)); +#2983 = ORIENTED_EDGE('',*,*,#2984,.F.); +#2984 = EDGE_CURVE('',#2985,#2987,#2989,.T.); +#2985 = VERTEX_POINT('',#2986); +#2986 = CARTESIAN_POINT('',(381.08,608.,676.)); +#2987 = VERTEX_POINT('',#2988); +#2988 = CARTESIAN_POINT('',(400.92,608.,676.)); +#2989 = LINE('',#2990,#2991); +#2990 = CARTESIAN_POINT('',(378.04,608.,676.)); +#2991 = VECTOR('',#2992,1.); +#2992 = DIRECTION('',(1.,0.,-0.)); +#2993 = ORIENTED_EDGE('',*,*,#2994,.T.); +#2994 = EDGE_CURVE('',#2985,#2995,#2997,.T.); +#2995 = VERTEX_POINT('',#2996); +#2996 = CARTESIAN_POINT('',(381.08,608.,660.)); +#2997 = LINE('',#2998,#2999); +#2998 = CARTESIAN_POINT('',(381.08,608.,355.)); +#2999 = VECTOR('',#3000,1.); +#3000 = DIRECTION('',(-0.,0.,-1.)); +#3001 = ORIENTED_EDGE('',*,*,#3002,.T.); +#3002 = EDGE_CURVE('',#2995,#3003,#3005,.T.); +#3003 = VERTEX_POINT('',#3004); +#3004 = CARTESIAN_POINT('',(400.92,608.,660.)); +#3005 = LINE('',#3006,#3007); +#3006 = CARTESIAN_POINT('',(378.04,608.,660.)); +#3007 = VECTOR('',#3008,1.); +#3008 = DIRECTION('',(1.,0.,-0.)); +#3009 = ORIENTED_EDGE('',*,*,#3010,.F.); +#3010 = EDGE_CURVE('',#2987,#3003,#3011,.T.); +#3011 = LINE('',#3012,#3013); +#3012 = CARTESIAN_POINT('',(400.92,608.,355.)); +#3013 = VECTOR('',#3014,1.); +#3014 = DIRECTION('',(-0.,0.,-1.)); +#3015 = FACE_BOUND('',#3016,.T.); +#3016 = EDGE_LOOP('',(#3017,#3027,#3035,#3043)); +#3017 = ORIENTED_EDGE('',*,*,#3018,.F.); +#3018 = EDGE_CURVE('',#3019,#3021,#3023,.T.); +#3019 = VERTEX_POINT('',#3020); +#3020 = CARTESIAN_POINT('',(381.08,608.,718.)); +#3021 = VERTEX_POINT('',#3022); +#3022 = CARTESIAN_POINT('',(400.92,608.,718.)); +#3023 = LINE('',#3024,#3025); +#3024 = CARTESIAN_POINT('',(378.04,608.,718.)); +#3025 = VECTOR('',#3026,1.); +#3026 = DIRECTION('',(1.,0.,-0.)); +#3027 = ORIENTED_EDGE('',*,*,#3028,.T.); +#3028 = EDGE_CURVE('',#3019,#3029,#3031,.T.); +#3029 = VERTEX_POINT('',#3030); +#3030 = CARTESIAN_POINT('',(381.08,608.,702.)); +#3031 = LINE('',#3032,#3033); +#3032 = CARTESIAN_POINT('',(381.08,608.,376.)); +#3033 = VECTOR('',#3034,1.); +#3034 = DIRECTION('',(-0.,0.,-1.)); +#3035 = ORIENTED_EDGE('',*,*,#3036,.T.); +#3036 = EDGE_CURVE('',#3029,#3037,#3039,.T.); +#3037 = VERTEX_POINT('',#3038); +#3038 = CARTESIAN_POINT('',(400.92,608.,702.)); +#3039 = LINE('',#3040,#3041); +#3040 = CARTESIAN_POINT('',(378.04,608.,702.)); +#3041 = VECTOR('',#3042,1.); +#3042 = DIRECTION('',(1.,0.,-0.)); +#3043 = ORIENTED_EDGE('',*,*,#3044,.F.); +#3044 = EDGE_CURVE('',#3021,#3037,#3045,.T.); +#3045 = LINE('',#3046,#3047); +#3046 = CARTESIAN_POINT('',(400.92,608.,376.)); +#3047 = VECTOR('',#3048,1.); +#3048 = DIRECTION('',(-0.,0.,-1.)); +#3049 = FACE_BOUND('',#3050,.T.); +#3050 = EDGE_LOOP('',(#3051,#3061,#3069,#3077)); +#3051 = ORIENTED_EDGE('',*,*,#3052,.F.); +#3052 = EDGE_CURVE('',#3053,#3055,#3057,.T.); +#3053 = VERTEX_POINT('',#3054); +#3054 = CARTESIAN_POINT('',(381.08,608.,760.)); +#3055 = VERTEX_POINT('',#3056); +#3056 = CARTESIAN_POINT('',(400.92,608.,760.)); +#3057 = LINE('',#3058,#3059); +#3058 = CARTESIAN_POINT('',(378.04,608.,760.)); +#3059 = VECTOR('',#3060,1.); +#3060 = DIRECTION('',(1.,0.,-0.)); +#3061 = ORIENTED_EDGE('',*,*,#3062,.T.); +#3062 = EDGE_CURVE('',#3053,#3063,#3065,.T.); +#3063 = VERTEX_POINT('',#3064); +#3064 = CARTESIAN_POINT('',(381.08,608.,744.)); +#3065 = LINE('',#3066,#3067); +#3066 = CARTESIAN_POINT('',(381.08,608.,397.)); +#3067 = VECTOR('',#3068,1.); +#3068 = DIRECTION('',(-0.,0.,-1.)); +#3069 = ORIENTED_EDGE('',*,*,#3070,.T.); +#3070 = EDGE_CURVE('',#3063,#3071,#3073,.T.); +#3071 = VERTEX_POINT('',#3072); +#3072 = CARTESIAN_POINT('',(400.92,608.,744.)); +#3073 = LINE('',#3074,#3075); +#3074 = CARTESIAN_POINT('',(378.04,608.,744.)); +#3075 = VECTOR('',#3076,1.); +#3076 = DIRECTION('',(1.,0.,-0.)); +#3077 = ORIENTED_EDGE('',*,*,#3078,.F.); +#3078 = EDGE_CURVE('',#3055,#3071,#3079,.T.); +#3079 = LINE('',#3080,#3081); +#3080 = CARTESIAN_POINT('',(400.92,608.,397.)); +#3081 = VECTOR('',#3082,1.); +#3082 = DIRECTION('',(-0.,0.,-1.)); +#3083 = FACE_BOUND('',#3084,.T.); +#3084 = EDGE_LOOP('',(#3085,#3095,#3103,#3111)); +#3085 = ORIENTED_EDGE('',*,*,#3086,.F.); +#3086 = EDGE_CURVE('',#3087,#3089,#3091,.T.); +#3087 = VERTEX_POINT('',#3088); +#3088 = CARTESIAN_POINT('',(381.08,608.,802.)); +#3089 = VERTEX_POINT('',#3090); +#3090 = CARTESIAN_POINT('',(400.92,608.,802.)); +#3091 = LINE('',#3092,#3093); +#3092 = CARTESIAN_POINT('',(378.04,608.,802.)); +#3093 = VECTOR('',#3094,1.); +#3094 = DIRECTION('',(1.,0.,-0.)); +#3095 = ORIENTED_EDGE('',*,*,#3096,.T.); +#3096 = EDGE_CURVE('',#3087,#3097,#3099,.T.); +#3097 = VERTEX_POINT('',#3098); +#3098 = CARTESIAN_POINT('',(381.08,608.,786.)); +#3099 = LINE('',#3100,#3101); +#3100 = CARTESIAN_POINT('',(381.08,608.,418.)); +#3101 = VECTOR('',#3102,1.); +#3102 = DIRECTION('',(-0.,0.,-1.)); +#3103 = ORIENTED_EDGE('',*,*,#3104,.T.); +#3104 = EDGE_CURVE('',#3097,#3105,#3107,.T.); +#3105 = VERTEX_POINT('',#3106); +#3106 = CARTESIAN_POINT('',(400.92,608.,786.)); +#3107 = LINE('',#3108,#3109); +#3108 = CARTESIAN_POINT('',(378.04,608.,786.)); +#3109 = VECTOR('',#3110,1.); +#3110 = DIRECTION('',(1.,0.,-0.)); +#3111 = ORIENTED_EDGE('',*,*,#3112,.F.); +#3112 = EDGE_CURVE('',#3089,#3105,#3113,.T.); +#3113 = LINE('',#3114,#3115); +#3114 = CARTESIAN_POINT('',(400.92,608.,418.)); +#3115 = VECTOR('',#3116,1.); +#3116 = DIRECTION('',(-0.,0.,-1.)); +#3117 = FACE_BOUND('',#3118,.T.); +#3118 = EDGE_LOOP('',(#3119,#3129,#3137,#3145)); +#3119 = ORIENTED_EDGE('',*,*,#3120,.F.); +#3120 = EDGE_CURVE('',#3121,#3123,#3125,.T.); +#3121 = VERTEX_POINT('',#3122); +#3122 = CARTESIAN_POINT('',(381.08,608.,844.)); +#3123 = VERTEX_POINT('',#3124); +#3124 = CARTESIAN_POINT('',(400.92,608.,844.)); +#3125 = LINE('',#3126,#3127); +#3126 = CARTESIAN_POINT('',(378.04,608.,844.)); +#3127 = VECTOR('',#3128,1.); +#3128 = DIRECTION('',(1.,0.,-0.)); +#3129 = ORIENTED_EDGE('',*,*,#3130,.T.); +#3130 = EDGE_CURVE('',#3121,#3131,#3133,.T.); +#3131 = VERTEX_POINT('',#3132); +#3132 = CARTESIAN_POINT('',(381.08,608.,828.)); +#3133 = LINE('',#3134,#3135); +#3134 = CARTESIAN_POINT('',(381.08,608.,439.)); +#3135 = VECTOR('',#3136,1.); +#3136 = DIRECTION('',(-0.,0.,-1.)); +#3137 = ORIENTED_EDGE('',*,*,#3138,.T.); +#3138 = EDGE_CURVE('',#3131,#3139,#3141,.T.); +#3139 = VERTEX_POINT('',#3140); +#3140 = CARTESIAN_POINT('',(400.92,608.,828.)); +#3141 = LINE('',#3142,#3143); +#3142 = CARTESIAN_POINT('',(378.04,608.,828.)); +#3143 = VECTOR('',#3144,1.); +#3144 = DIRECTION('',(1.,0.,-0.)); +#3145 = ORIENTED_EDGE('',*,*,#3146,.F.); +#3146 = EDGE_CURVE('',#3123,#3139,#3147,.T.); +#3147 = LINE('',#3148,#3149); +#3148 = CARTESIAN_POINT('',(400.92,608.,439.)); +#3149 = VECTOR('',#3150,1.); +#3150 = DIRECTION('',(-0.,0.,-1.)); +#3151 = FACE_BOUND('',#3152,.T.); +#3152 = EDGE_LOOP('',(#3153,#3163,#3171,#3179)); +#3153 = ORIENTED_EDGE('',*,*,#3154,.F.); +#3154 = EDGE_CURVE('',#3155,#3157,#3159,.T.); +#3155 = VERTEX_POINT('',#3156); +#3156 = CARTESIAN_POINT('',(381.08,608.,886.)); +#3157 = VERTEX_POINT('',#3158); +#3158 = CARTESIAN_POINT('',(400.92,608.,886.)); +#3159 = LINE('',#3160,#3161); +#3160 = CARTESIAN_POINT('',(378.04,608.,886.)); +#3161 = VECTOR('',#3162,1.); +#3162 = DIRECTION('',(1.,0.,-0.)); +#3163 = ORIENTED_EDGE('',*,*,#3164,.T.); +#3164 = EDGE_CURVE('',#3155,#3165,#3167,.T.); +#3165 = VERTEX_POINT('',#3166); +#3166 = CARTESIAN_POINT('',(381.08,608.,870.)); +#3167 = LINE('',#3168,#3169); +#3168 = CARTESIAN_POINT('',(381.08,608.,460.)); +#3169 = VECTOR('',#3170,1.); +#3170 = DIRECTION('',(-0.,0.,-1.)); +#3171 = ORIENTED_EDGE('',*,*,#3172,.T.); +#3172 = EDGE_CURVE('',#3165,#3173,#3175,.T.); +#3173 = VERTEX_POINT('',#3174); +#3174 = CARTESIAN_POINT('',(400.92,608.,870.)); +#3175 = LINE('',#3176,#3177); +#3176 = CARTESIAN_POINT('',(378.04,608.,870.)); +#3177 = VECTOR('',#3178,1.); +#3178 = DIRECTION('',(1.,0.,-0.)); +#3179 = ORIENTED_EDGE('',*,*,#3180,.F.); +#3180 = EDGE_CURVE('',#3157,#3173,#3181,.T.); +#3181 = LINE('',#3182,#3183); +#3182 = CARTESIAN_POINT('',(400.92,608.,460.)); +#3183 = VECTOR('',#3184,1.); +#3184 = DIRECTION('',(-0.,0.,-1.)); +#3185 = FACE_BOUND('',#3186,.T.); +#3186 = EDGE_LOOP('',(#3187,#3197,#3205,#3213)); +#3187 = ORIENTED_EDGE('',*,*,#3188,.F.); +#3188 = EDGE_CURVE('',#3189,#3191,#3193,.T.); +#3189 = VERTEX_POINT('',#3190); +#3190 = CARTESIAN_POINT('',(381.08,608.,928.)); +#3191 = VERTEX_POINT('',#3192); +#3192 = CARTESIAN_POINT('',(400.92,608.,928.)); +#3193 = LINE('',#3194,#3195); +#3194 = CARTESIAN_POINT('',(378.04,608.,928.)); +#3195 = VECTOR('',#3196,1.); +#3196 = DIRECTION('',(1.,0.,-0.)); +#3197 = ORIENTED_EDGE('',*,*,#3198,.T.); +#3198 = EDGE_CURVE('',#3189,#3199,#3201,.T.); +#3199 = VERTEX_POINT('',#3200); +#3200 = CARTESIAN_POINT('',(381.08,608.,912.)); +#3201 = LINE('',#3202,#3203); +#3202 = CARTESIAN_POINT('',(381.08,608.,481.)); +#3203 = VECTOR('',#3204,1.); +#3204 = DIRECTION('',(-0.,0.,-1.)); +#3205 = ORIENTED_EDGE('',*,*,#3206,.T.); +#3206 = EDGE_CURVE('',#3199,#3207,#3209,.T.); +#3207 = VERTEX_POINT('',#3208); +#3208 = CARTESIAN_POINT('',(400.92,608.,912.)); +#3209 = LINE('',#3210,#3211); +#3210 = CARTESIAN_POINT('',(378.04,608.,912.)); +#3211 = VECTOR('',#3212,1.); +#3212 = DIRECTION('',(1.,0.,-0.)); +#3213 = ORIENTED_EDGE('',*,*,#3214,.F.); +#3214 = EDGE_CURVE('',#3191,#3207,#3215,.T.); +#3215 = LINE('',#3216,#3217); +#3216 = CARTESIAN_POINT('',(400.92,608.,481.)); +#3217 = VECTOR('',#3218,1.); +#3218 = DIRECTION('',(-0.,0.,-1.)); +#3219 = PLANE('',#3220); +#3220 = AXIS2_PLACEMENT_3D('',#3221,#3222,#3223); +#3221 = CARTESIAN_POINT('',(375.,608.,50.)); +#3222 = DIRECTION('',(-0.,1.,0.)); +#3223 = DIRECTION('',(0.,0.,1.)); +#3224 = ADVANCED_FACE('',(#3225),#3236,.F.); +#3225 = FACE_BOUND('',#3226,.F.); +#3226 = EDGE_LOOP('',(#3227,#3228,#3229,#3235)); +#3227 = ORIENTED_EDGE('',*,*,#2439,.F.); +#3228 = ORIENTED_EDGE('',*,*,#2469,.T.); +#3229 = ORIENTED_EDGE('',*,*,#3230,.T.); +#3230 = EDGE_CURVE('',#2470,#2865,#3231,.T.); +#3231 = LINE('',#3232,#3233); +#3232 = CARTESIAN_POINT('',(407.,-608.,50.)); +#3233 = VECTOR('',#3234,1.); +#3234 = DIRECTION('',(-0.,1.,0.)); +#3235 = ORIENTED_EDGE('',*,*,#2864,.F.); +#3236 = PLANE('',#3237); +#3237 = AXIS2_PLACEMENT_3D('',#3238,#3239,#3240); +#3238 = CARTESIAN_POINT('',(375.,-608.,50.)); +#3239 = DIRECTION('',(0.,0.,1.)); +#3240 = DIRECTION('',(1.,0.,-0.)); +#3241 = ADVANCED_FACE('',(#3242),#3248,.T.); +#3242 = FACE_BOUND('',#3243,.T.); +#3243 = EDGE_LOOP('',(#3244,#3245,#3246,#3247)); +#3244 = ORIENTED_EDGE('',*,*,#2486,.F.); +#3245 = ORIENTED_EDGE('',*,*,#3230,.T.); +#3246 = ORIENTED_EDGE('',*,*,#2874,.T.); +#3247 = ORIENTED_EDGE('',*,*,#2842,.F.); +#3248 = PLANE('',#3249); +#3249 = AXIS2_PLACEMENT_3D('',#3250,#3251,#3252); +#3250 = CARTESIAN_POINT('',(407.,-608.,50.)); +#3251 = DIRECTION('',(1.,0.,-0.)); +#3252 = DIRECTION('',(0.,0.,1.)); +#3253 = ADVANCED_FACE('',(#3254),#3270,.F.); +#3254 = FACE_BOUND('',#3255,.F.); +#3255 = EDGE_LOOP('',(#3256,#3262,#3263,#3269)); +#3256 = ORIENTED_EDGE('',*,*,#3257,.F.); +#3257 = EDGE_CURVE('',#2495,#2883,#3258,.T.); +#3258 = LINE('',#3259,#3260); +#3259 = CARTESIAN_POINT('',(381.08,-611.,550.)); +#3260 = VECTOR('',#3261,1.); +#3261 = DIRECTION('',(-0.,1.,0.)); +#3262 = ORIENTED_EDGE('',*,*,#2494,.T.); +#3263 = ORIENTED_EDGE('',*,*,#3264,.T.); +#3264 = EDGE_CURVE('',#2497,#2885,#3265,.T.); +#3265 = LINE('',#3266,#3267); +#3266 = CARTESIAN_POINT('',(400.92,-611.,550.)); +#3267 = VECTOR('',#3268,1.); +#3268 = DIRECTION('',(-0.,1.,0.)); +#3269 = ORIENTED_EDGE('',*,*,#2882,.F.); +#3270 = PLANE('',#3271); +#3271 = AXIS2_PLACEMENT_3D('',#3272,#3273,#3274); +#3272 = CARTESIAN_POINT('',(381.08,-611.,550.)); +#3273 = DIRECTION('',(0.,0.,1.)); +#3274 = DIRECTION('',(1.,0.,-0.)); +#3275 = ADVANCED_FACE('',(#3276),#3287,.T.); +#3276 = FACE_BOUND('',#3277,.T.); +#3277 = EDGE_LOOP('',(#3278,#3279,#3280,#3286)); +#3278 = ORIENTED_EDGE('',*,*,#3257,.F.); +#3279 = ORIENTED_EDGE('',*,*,#2504,.T.); +#3280 = ORIENTED_EDGE('',*,*,#3281,.T.); +#3281 = EDGE_CURVE('',#2505,#2893,#3282,.T.); +#3282 = LINE('',#3283,#3284); +#3283 = CARTESIAN_POINT('',(381.08,-611.,534.)); +#3284 = VECTOR('',#3285,1.); +#3285 = DIRECTION('',(-0.,1.,0.)); +#3286 = ORIENTED_EDGE('',*,*,#2892,.F.); +#3287 = PLANE('',#3288); +#3288 = AXIS2_PLACEMENT_3D('',#3289,#3290,#3291); +#3289 = CARTESIAN_POINT('',(381.08,-611.,534.)); +#3290 = DIRECTION('',(1.,0.,-0.)); +#3291 = DIRECTION('',(0.,0.,1.)); +#3292 = ADVANCED_FACE('',(#3293),#3304,.F.); +#3293 = FACE_BOUND('',#3294,.F.); +#3294 = EDGE_LOOP('',(#3295,#3296,#3297,#3303)); +#3295 = ORIENTED_EDGE('',*,*,#3264,.F.); +#3296 = ORIENTED_EDGE('',*,*,#2520,.T.); +#3297 = ORIENTED_EDGE('',*,*,#3298,.T.); +#3298 = EDGE_CURVE('',#2513,#2901,#3299,.T.); +#3299 = LINE('',#3300,#3301); +#3300 = CARTESIAN_POINT('',(400.92,-611.,534.)); +#3301 = VECTOR('',#3302,1.); +#3302 = DIRECTION('',(-0.,1.,0.)); +#3303 = ORIENTED_EDGE('',*,*,#2908,.F.); +#3304 = PLANE('',#3305); +#3305 = AXIS2_PLACEMENT_3D('',#3306,#3307,#3308); +#3306 = CARTESIAN_POINT('',(400.92,-611.,534.)); +#3307 = DIRECTION('',(1.,0.,-0.)); +#3308 = DIRECTION('',(0.,0.,1.)); +#3309 = ADVANCED_FACE('',(#3310),#3316,.T.); +#3310 = FACE_BOUND('',#3311,.T.); +#3311 = EDGE_LOOP('',(#3312,#3313,#3314,#3315)); +#3312 = ORIENTED_EDGE('',*,*,#3281,.F.); +#3313 = ORIENTED_EDGE('',*,*,#2512,.T.); +#3314 = ORIENTED_EDGE('',*,*,#3298,.T.); +#3315 = ORIENTED_EDGE('',*,*,#2900,.F.); +#3316 = PLANE('',#3317); +#3317 = AXIS2_PLACEMENT_3D('',#3318,#3319,#3320); +#3318 = CARTESIAN_POINT('',(381.08,-611.,534.)); +#3319 = DIRECTION('',(0.,0.,1.)); +#3320 = DIRECTION('',(1.,0.,-0.)); +#3321 = ADVANCED_FACE('',(#3322),#3338,.F.); +#3322 = FACE_BOUND('',#3323,.F.); +#3323 = EDGE_LOOP('',(#3324,#3330,#3331,#3337)); +#3324 = ORIENTED_EDGE('',*,*,#3325,.F.); +#3325 = EDGE_CURVE('',#2529,#2917,#3326,.T.); +#3326 = LINE('',#3327,#3328); +#3327 = CARTESIAN_POINT('',(381.08,-611.,592.)); +#3328 = VECTOR('',#3329,1.); +#3329 = DIRECTION('',(-0.,1.,0.)); +#3330 = ORIENTED_EDGE('',*,*,#2528,.T.); +#3331 = ORIENTED_EDGE('',*,*,#3332,.T.); +#3332 = EDGE_CURVE('',#2531,#2919,#3333,.T.); +#3333 = LINE('',#3334,#3335); +#3334 = CARTESIAN_POINT('',(400.92,-611.,592.)); +#3335 = VECTOR('',#3336,1.); +#3336 = DIRECTION('',(-0.,1.,0.)); +#3337 = ORIENTED_EDGE('',*,*,#2916,.F.); +#3338 = PLANE('',#3339); +#3339 = AXIS2_PLACEMENT_3D('',#3340,#3341,#3342); +#3340 = CARTESIAN_POINT('',(381.08,-611.,592.)); +#3341 = DIRECTION('',(0.,0.,1.)); +#3342 = DIRECTION('',(1.,0.,-0.)); +#3343 = ADVANCED_FACE('',(#3344),#3355,.T.); +#3344 = FACE_BOUND('',#3345,.T.); +#3345 = EDGE_LOOP('',(#3346,#3347,#3348,#3354)); +#3346 = ORIENTED_EDGE('',*,*,#3325,.F.); +#3347 = ORIENTED_EDGE('',*,*,#2538,.T.); +#3348 = ORIENTED_EDGE('',*,*,#3349,.T.); +#3349 = EDGE_CURVE('',#2539,#2927,#3350,.T.); +#3350 = LINE('',#3351,#3352); +#3351 = CARTESIAN_POINT('',(381.08,-611.,576.)); +#3352 = VECTOR('',#3353,1.); +#3353 = DIRECTION('',(-0.,1.,0.)); +#3354 = ORIENTED_EDGE('',*,*,#2926,.F.); +#3355 = PLANE('',#3356); +#3356 = AXIS2_PLACEMENT_3D('',#3357,#3358,#3359); +#3357 = CARTESIAN_POINT('',(381.08,-611.,576.)); +#3358 = DIRECTION('',(1.,0.,-0.)); +#3359 = DIRECTION('',(0.,0.,1.)); +#3360 = ADVANCED_FACE('',(#3361),#3372,.F.); +#3361 = FACE_BOUND('',#3362,.F.); +#3362 = EDGE_LOOP('',(#3363,#3364,#3365,#3371)); +#3363 = ORIENTED_EDGE('',*,*,#3332,.F.); +#3364 = ORIENTED_EDGE('',*,*,#2554,.T.); +#3365 = ORIENTED_EDGE('',*,*,#3366,.T.); +#3366 = EDGE_CURVE('',#2547,#2935,#3367,.T.); +#3367 = LINE('',#3368,#3369); +#3368 = CARTESIAN_POINT('',(400.92,-611.,576.)); +#3369 = VECTOR('',#3370,1.); +#3370 = DIRECTION('',(-0.,1.,0.)); +#3371 = ORIENTED_EDGE('',*,*,#2942,.F.); +#3372 = PLANE('',#3373); +#3373 = AXIS2_PLACEMENT_3D('',#3374,#3375,#3376); +#3374 = CARTESIAN_POINT('',(400.92,-611.,576.)); +#3375 = DIRECTION('',(1.,0.,-0.)); +#3376 = DIRECTION('',(0.,0.,1.)); +#3377 = ADVANCED_FACE('',(#3378),#3384,.T.); +#3378 = FACE_BOUND('',#3379,.T.); +#3379 = EDGE_LOOP('',(#3380,#3381,#3382,#3383)); +#3380 = ORIENTED_EDGE('',*,*,#3349,.F.); +#3381 = ORIENTED_EDGE('',*,*,#2546,.T.); +#3382 = ORIENTED_EDGE('',*,*,#3366,.T.); +#3383 = ORIENTED_EDGE('',*,*,#2934,.F.); +#3384 = PLANE('',#3385); +#3385 = AXIS2_PLACEMENT_3D('',#3386,#3387,#3388); +#3386 = CARTESIAN_POINT('',(381.08,-611.,576.)); +#3387 = DIRECTION('',(0.,0.,1.)); +#3388 = DIRECTION('',(1.,0.,-0.)); +#3389 = ADVANCED_FACE('',(#3390),#3406,.F.); +#3390 = FACE_BOUND('',#3391,.F.); +#3391 = EDGE_LOOP('',(#3392,#3398,#3399,#3405)); +#3392 = ORIENTED_EDGE('',*,*,#3393,.F.); +#3393 = EDGE_CURVE('',#2563,#2951,#3394,.T.); +#3394 = LINE('',#3395,#3396); +#3395 = CARTESIAN_POINT('',(381.08,-611.,634.)); +#3396 = VECTOR('',#3397,1.); +#3397 = DIRECTION('',(-0.,1.,0.)); +#3398 = ORIENTED_EDGE('',*,*,#2562,.T.); +#3399 = ORIENTED_EDGE('',*,*,#3400,.T.); +#3400 = EDGE_CURVE('',#2565,#2953,#3401,.T.); +#3401 = LINE('',#3402,#3403); +#3402 = CARTESIAN_POINT('',(400.92,-611.,634.)); +#3403 = VECTOR('',#3404,1.); +#3404 = DIRECTION('',(-0.,1.,0.)); +#3405 = ORIENTED_EDGE('',*,*,#2950,.F.); +#3406 = PLANE('',#3407); +#3407 = AXIS2_PLACEMENT_3D('',#3408,#3409,#3410); +#3408 = CARTESIAN_POINT('',(381.08,-611.,634.)); +#3409 = DIRECTION('',(0.,0.,1.)); +#3410 = DIRECTION('',(1.,0.,-0.)); +#3411 = ADVANCED_FACE('',(#3412),#3423,.T.); +#3412 = FACE_BOUND('',#3413,.T.); +#3413 = EDGE_LOOP('',(#3414,#3415,#3416,#3422)); +#3414 = ORIENTED_EDGE('',*,*,#3393,.F.); +#3415 = ORIENTED_EDGE('',*,*,#2572,.T.); +#3416 = ORIENTED_EDGE('',*,*,#3417,.T.); +#3417 = EDGE_CURVE('',#2573,#2961,#3418,.T.); +#3418 = LINE('',#3419,#3420); +#3419 = CARTESIAN_POINT('',(381.08,-611.,618.)); +#3420 = VECTOR('',#3421,1.); +#3421 = DIRECTION('',(-0.,1.,0.)); +#3422 = ORIENTED_EDGE('',*,*,#2960,.F.); +#3423 = PLANE('',#3424); +#3424 = AXIS2_PLACEMENT_3D('',#3425,#3426,#3427); +#3425 = CARTESIAN_POINT('',(381.08,-611.,618.)); +#3426 = DIRECTION('',(1.,0.,-0.)); +#3427 = DIRECTION('',(0.,0.,1.)); +#3428 = ADVANCED_FACE('',(#3429),#3440,.F.); +#3429 = FACE_BOUND('',#3430,.F.); +#3430 = EDGE_LOOP('',(#3431,#3432,#3433,#3439)); +#3431 = ORIENTED_EDGE('',*,*,#3400,.F.); +#3432 = ORIENTED_EDGE('',*,*,#2588,.T.); +#3433 = ORIENTED_EDGE('',*,*,#3434,.T.); +#3434 = EDGE_CURVE('',#2581,#2969,#3435,.T.); +#3435 = LINE('',#3436,#3437); +#3436 = CARTESIAN_POINT('',(400.92,-611.,618.)); +#3437 = VECTOR('',#3438,1.); +#3438 = DIRECTION('',(-0.,1.,0.)); +#3439 = ORIENTED_EDGE('',*,*,#2976,.F.); +#3440 = PLANE('',#3441); +#3441 = AXIS2_PLACEMENT_3D('',#3442,#3443,#3444); +#3442 = CARTESIAN_POINT('',(400.92,-611.,618.)); +#3443 = DIRECTION('',(1.,0.,-0.)); +#3444 = DIRECTION('',(0.,0.,1.)); +#3445 = ADVANCED_FACE('',(#3446),#3452,.T.); +#3446 = FACE_BOUND('',#3447,.T.); +#3447 = EDGE_LOOP('',(#3448,#3449,#3450,#3451)); +#3448 = ORIENTED_EDGE('',*,*,#3417,.F.); +#3449 = ORIENTED_EDGE('',*,*,#2580,.T.); +#3450 = ORIENTED_EDGE('',*,*,#3434,.T.); +#3451 = ORIENTED_EDGE('',*,*,#2968,.F.); +#3452 = PLANE('',#3453); +#3453 = AXIS2_PLACEMENT_3D('',#3454,#3455,#3456); +#3454 = CARTESIAN_POINT('',(381.08,-611.,618.)); +#3455 = DIRECTION('',(0.,0.,1.)); +#3456 = DIRECTION('',(1.,0.,-0.)); +#3457 = ADVANCED_FACE('',(#3458),#3474,.F.); +#3458 = FACE_BOUND('',#3459,.F.); +#3459 = EDGE_LOOP('',(#3460,#3466,#3467,#3473)); +#3460 = ORIENTED_EDGE('',*,*,#3461,.F.); +#3461 = EDGE_CURVE('',#2597,#2985,#3462,.T.); +#3462 = LINE('',#3463,#3464); +#3463 = CARTESIAN_POINT('',(381.08,-611.,676.)); +#3464 = VECTOR('',#3465,1.); +#3465 = DIRECTION('',(-0.,1.,0.)); +#3466 = ORIENTED_EDGE('',*,*,#2596,.T.); +#3467 = ORIENTED_EDGE('',*,*,#3468,.T.); +#3468 = EDGE_CURVE('',#2599,#2987,#3469,.T.); +#3469 = LINE('',#3470,#3471); +#3470 = CARTESIAN_POINT('',(400.92,-611.,676.)); +#3471 = VECTOR('',#3472,1.); +#3472 = DIRECTION('',(-0.,1.,0.)); +#3473 = ORIENTED_EDGE('',*,*,#2984,.F.); +#3474 = PLANE('',#3475); +#3475 = AXIS2_PLACEMENT_3D('',#3476,#3477,#3478); +#3476 = CARTESIAN_POINT('',(381.08,-611.,676.)); +#3477 = DIRECTION('',(0.,0.,1.)); +#3478 = DIRECTION('',(1.,0.,-0.)); +#3479 = ADVANCED_FACE('',(#3480),#3491,.T.); +#3480 = FACE_BOUND('',#3481,.T.); +#3481 = EDGE_LOOP('',(#3482,#3483,#3484,#3490)); +#3482 = ORIENTED_EDGE('',*,*,#3461,.F.); +#3483 = ORIENTED_EDGE('',*,*,#2606,.T.); +#3484 = ORIENTED_EDGE('',*,*,#3485,.T.); +#3485 = EDGE_CURVE('',#2607,#2995,#3486,.T.); +#3486 = LINE('',#3487,#3488); +#3487 = CARTESIAN_POINT('',(381.08,-611.,660.)); +#3488 = VECTOR('',#3489,1.); +#3489 = DIRECTION('',(-0.,1.,0.)); +#3490 = ORIENTED_EDGE('',*,*,#2994,.F.); +#3491 = PLANE('',#3492); +#3492 = AXIS2_PLACEMENT_3D('',#3493,#3494,#3495); +#3493 = CARTESIAN_POINT('',(381.08,-611.,660.)); +#3494 = DIRECTION('',(1.,0.,-0.)); +#3495 = DIRECTION('',(0.,0.,1.)); +#3496 = ADVANCED_FACE('',(#3497),#3508,.F.); +#3497 = FACE_BOUND('',#3498,.F.); +#3498 = EDGE_LOOP('',(#3499,#3500,#3501,#3507)); +#3499 = ORIENTED_EDGE('',*,*,#3468,.F.); +#3500 = ORIENTED_EDGE('',*,*,#2622,.T.); +#3501 = ORIENTED_EDGE('',*,*,#3502,.T.); +#3502 = EDGE_CURVE('',#2615,#3003,#3503,.T.); +#3503 = LINE('',#3504,#3505); +#3504 = CARTESIAN_POINT('',(400.92,-611.,660.)); +#3505 = VECTOR('',#3506,1.); +#3506 = DIRECTION('',(-0.,1.,0.)); +#3507 = ORIENTED_EDGE('',*,*,#3010,.F.); +#3508 = PLANE('',#3509); +#3509 = AXIS2_PLACEMENT_3D('',#3510,#3511,#3512); +#3510 = CARTESIAN_POINT('',(400.92,-611.,660.)); +#3511 = DIRECTION('',(1.,0.,-0.)); +#3512 = DIRECTION('',(0.,0.,1.)); +#3513 = ADVANCED_FACE('',(#3514),#3520,.T.); +#3514 = FACE_BOUND('',#3515,.T.); +#3515 = EDGE_LOOP('',(#3516,#3517,#3518,#3519)); +#3516 = ORIENTED_EDGE('',*,*,#3485,.F.); +#3517 = ORIENTED_EDGE('',*,*,#2614,.T.); +#3518 = ORIENTED_EDGE('',*,*,#3502,.T.); +#3519 = ORIENTED_EDGE('',*,*,#3002,.F.); +#3520 = PLANE('',#3521); +#3521 = AXIS2_PLACEMENT_3D('',#3522,#3523,#3524); +#3522 = CARTESIAN_POINT('',(381.08,-611.,660.)); +#3523 = DIRECTION('',(0.,0.,1.)); +#3524 = DIRECTION('',(1.,0.,-0.)); +#3525 = ADVANCED_FACE('',(#3526),#3542,.F.); +#3526 = FACE_BOUND('',#3527,.F.); +#3527 = EDGE_LOOP('',(#3528,#3534,#3535,#3541)); +#3528 = ORIENTED_EDGE('',*,*,#3529,.F.); +#3529 = EDGE_CURVE('',#2631,#3019,#3530,.T.); +#3530 = LINE('',#3531,#3532); +#3531 = CARTESIAN_POINT('',(381.08,-611.,718.)); +#3532 = VECTOR('',#3533,1.); +#3533 = DIRECTION('',(-0.,1.,0.)); +#3534 = ORIENTED_EDGE('',*,*,#2630,.T.); +#3535 = ORIENTED_EDGE('',*,*,#3536,.T.); +#3536 = EDGE_CURVE('',#2633,#3021,#3537,.T.); +#3537 = LINE('',#3538,#3539); +#3538 = CARTESIAN_POINT('',(400.92,-611.,718.)); +#3539 = VECTOR('',#3540,1.); +#3540 = DIRECTION('',(-0.,1.,0.)); +#3541 = ORIENTED_EDGE('',*,*,#3018,.F.); +#3542 = PLANE('',#3543); +#3543 = AXIS2_PLACEMENT_3D('',#3544,#3545,#3546); +#3544 = CARTESIAN_POINT('',(381.08,-611.,718.)); +#3545 = DIRECTION('',(0.,0.,1.)); +#3546 = DIRECTION('',(1.,0.,-0.)); +#3547 = ADVANCED_FACE('',(#3548),#3559,.T.); +#3548 = FACE_BOUND('',#3549,.T.); +#3549 = EDGE_LOOP('',(#3550,#3551,#3552,#3558)); +#3550 = ORIENTED_EDGE('',*,*,#3529,.F.); +#3551 = ORIENTED_EDGE('',*,*,#2640,.T.); +#3552 = ORIENTED_EDGE('',*,*,#3553,.T.); +#3553 = EDGE_CURVE('',#2641,#3029,#3554,.T.); +#3554 = LINE('',#3555,#3556); +#3555 = CARTESIAN_POINT('',(381.08,-611.,702.)); +#3556 = VECTOR('',#3557,1.); +#3557 = DIRECTION('',(-0.,1.,0.)); +#3558 = ORIENTED_EDGE('',*,*,#3028,.F.); +#3559 = PLANE('',#3560); +#3560 = AXIS2_PLACEMENT_3D('',#3561,#3562,#3563); +#3561 = CARTESIAN_POINT('',(381.08,-611.,702.)); +#3562 = DIRECTION('',(1.,0.,-0.)); +#3563 = DIRECTION('',(0.,0.,1.)); +#3564 = ADVANCED_FACE('',(#3565),#3576,.F.); +#3565 = FACE_BOUND('',#3566,.F.); +#3566 = EDGE_LOOP('',(#3567,#3568,#3569,#3575)); +#3567 = ORIENTED_EDGE('',*,*,#3536,.F.); +#3568 = ORIENTED_EDGE('',*,*,#2656,.T.); +#3569 = ORIENTED_EDGE('',*,*,#3570,.T.); +#3570 = EDGE_CURVE('',#2649,#3037,#3571,.T.); +#3571 = LINE('',#3572,#3573); +#3572 = CARTESIAN_POINT('',(400.92,-611.,702.)); +#3573 = VECTOR('',#3574,1.); +#3574 = DIRECTION('',(-0.,1.,0.)); +#3575 = ORIENTED_EDGE('',*,*,#3044,.F.); +#3576 = PLANE('',#3577); +#3577 = AXIS2_PLACEMENT_3D('',#3578,#3579,#3580); +#3578 = CARTESIAN_POINT('',(400.92,-611.,702.)); +#3579 = DIRECTION('',(1.,0.,-0.)); +#3580 = DIRECTION('',(0.,0.,1.)); +#3581 = ADVANCED_FACE('',(#3582),#3588,.T.); +#3582 = FACE_BOUND('',#3583,.T.); +#3583 = EDGE_LOOP('',(#3584,#3585,#3586,#3587)); +#3584 = ORIENTED_EDGE('',*,*,#3553,.F.); +#3585 = ORIENTED_EDGE('',*,*,#2648,.T.); +#3586 = ORIENTED_EDGE('',*,*,#3570,.T.); +#3587 = ORIENTED_EDGE('',*,*,#3036,.F.); +#3588 = PLANE('',#3589); +#3589 = AXIS2_PLACEMENT_3D('',#3590,#3591,#3592); +#3590 = CARTESIAN_POINT('',(381.08,-611.,702.)); +#3591 = DIRECTION('',(0.,0.,1.)); +#3592 = DIRECTION('',(1.,0.,-0.)); +#3593 = ADVANCED_FACE('',(#3594),#3610,.F.); +#3594 = FACE_BOUND('',#3595,.F.); +#3595 = EDGE_LOOP('',(#3596,#3602,#3603,#3609)); +#3596 = ORIENTED_EDGE('',*,*,#3597,.F.); +#3597 = EDGE_CURVE('',#2665,#3053,#3598,.T.); +#3598 = LINE('',#3599,#3600); +#3599 = CARTESIAN_POINT('',(381.08,-611.,760.)); +#3600 = VECTOR('',#3601,1.); +#3601 = DIRECTION('',(-0.,1.,0.)); +#3602 = ORIENTED_EDGE('',*,*,#2664,.T.); +#3603 = ORIENTED_EDGE('',*,*,#3604,.T.); +#3604 = EDGE_CURVE('',#2667,#3055,#3605,.T.); +#3605 = LINE('',#3606,#3607); +#3606 = CARTESIAN_POINT('',(400.92,-611.,760.)); +#3607 = VECTOR('',#3608,1.); +#3608 = DIRECTION('',(-0.,1.,0.)); +#3609 = ORIENTED_EDGE('',*,*,#3052,.F.); +#3610 = PLANE('',#3611); +#3611 = AXIS2_PLACEMENT_3D('',#3612,#3613,#3614); +#3612 = CARTESIAN_POINT('',(381.08,-611.,760.)); +#3613 = DIRECTION('',(0.,0.,1.)); +#3614 = DIRECTION('',(1.,0.,-0.)); +#3615 = ADVANCED_FACE('',(#3616),#3627,.T.); +#3616 = FACE_BOUND('',#3617,.T.); +#3617 = EDGE_LOOP('',(#3618,#3619,#3620,#3626)); +#3618 = ORIENTED_EDGE('',*,*,#3597,.F.); +#3619 = ORIENTED_EDGE('',*,*,#2674,.T.); +#3620 = ORIENTED_EDGE('',*,*,#3621,.T.); +#3621 = EDGE_CURVE('',#2675,#3063,#3622,.T.); +#3622 = LINE('',#3623,#3624); +#3623 = CARTESIAN_POINT('',(381.08,-611.,744.)); +#3624 = VECTOR('',#3625,1.); +#3625 = DIRECTION('',(-0.,1.,0.)); +#3626 = ORIENTED_EDGE('',*,*,#3062,.F.); +#3627 = PLANE('',#3628); +#3628 = AXIS2_PLACEMENT_3D('',#3629,#3630,#3631); +#3629 = CARTESIAN_POINT('',(381.08,-611.,744.)); +#3630 = DIRECTION('',(1.,0.,-0.)); +#3631 = DIRECTION('',(0.,0.,1.)); +#3632 = ADVANCED_FACE('',(#3633),#3644,.F.); +#3633 = FACE_BOUND('',#3634,.F.); +#3634 = EDGE_LOOP('',(#3635,#3636,#3637,#3643)); +#3635 = ORIENTED_EDGE('',*,*,#3604,.F.); +#3636 = ORIENTED_EDGE('',*,*,#2690,.T.); +#3637 = ORIENTED_EDGE('',*,*,#3638,.T.); +#3638 = EDGE_CURVE('',#2683,#3071,#3639,.T.); +#3639 = LINE('',#3640,#3641); +#3640 = CARTESIAN_POINT('',(400.92,-611.,744.)); +#3641 = VECTOR('',#3642,1.); +#3642 = DIRECTION('',(-0.,1.,0.)); +#3643 = ORIENTED_EDGE('',*,*,#3078,.F.); +#3644 = PLANE('',#3645); +#3645 = AXIS2_PLACEMENT_3D('',#3646,#3647,#3648); +#3646 = CARTESIAN_POINT('',(400.92,-611.,744.)); +#3647 = DIRECTION('',(1.,0.,-0.)); +#3648 = DIRECTION('',(0.,0.,1.)); +#3649 = ADVANCED_FACE('',(#3650),#3656,.T.); +#3650 = FACE_BOUND('',#3651,.T.); +#3651 = EDGE_LOOP('',(#3652,#3653,#3654,#3655)); +#3652 = ORIENTED_EDGE('',*,*,#3621,.F.); +#3653 = ORIENTED_EDGE('',*,*,#2682,.T.); +#3654 = ORIENTED_EDGE('',*,*,#3638,.T.); +#3655 = ORIENTED_EDGE('',*,*,#3070,.F.); +#3656 = PLANE('',#3657); +#3657 = AXIS2_PLACEMENT_3D('',#3658,#3659,#3660); +#3658 = CARTESIAN_POINT('',(381.08,-611.,744.)); +#3659 = DIRECTION('',(0.,0.,1.)); +#3660 = DIRECTION('',(1.,0.,-0.)); +#3661 = ADVANCED_FACE('',(#3662),#3678,.F.); +#3662 = FACE_BOUND('',#3663,.F.); +#3663 = EDGE_LOOP('',(#3664,#3670,#3671,#3677)); +#3664 = ORIENTED_EDGE('',*,*,#3665,.F.); +#3665 = EDGE_CURVE('',#2699,#3087,#3666,.T.); +#3666 = LINE('',#3667,#3668); +#3667 = CARTESIAN_POINT('',(381.08,-611.,802.)); +#3668 = VECTOR('',#3669,1.); +#3669 = DIRECTION('',(-0.,1.,0.)); +#3670 = ORIENTED_EDGE('',*,*,#2698,.T.); +#3671 = ORIENTED_EDGE('',*,*,#3672,.T.); +#3672 = EDGE_CURVE('',#2701,#3089,#3673,.T.); +#3673 = LINE('',#3674,#3675); +#3674 = CARTESIAN_POINT('',(400.92,-611.,802.)); +#3675 = VECTOR('',#3676,1.); +#3676 = DIRECTION('',(-0.,1.,0.)); +#3677 = ORIENTED_EDGE('',*,*,#3086,.F.); +#3678 = PLANE('',#3679); +#3679 = AXIS2_PLACEMENT_3D('',#3680,#3681,#3682); +#3680 = CARTESIAN_POINT('',(381.08,-611.,802.)); +#3681 = DIRECTION('',(0.,0.,1.)); +#3682 = DIRECTION('',(1.,0.,-0.)); +#3683 = ADVANCED_FACE('',(#3684),#3695,.T.); +#3684 = FACE_BOUND('',#3685,.T.); +#3685 = EDGE_LOOP('',(#3686,#3687,#3688,#3694)); +#3686 = ORIENTED_EDGE('',*,*,#3665,.F.); +#3687 = ORIENTED_EDGE('',*,*,#2708,.T.); +#3688 = ORIENTED_EDGE('',*,*,#3689,.T.); +#3689 = EDGE_CURVE('',#2709,#3097,#3690,.T.); +#3690 = LINE('',#3691,#3692); +#3691 = CARTESIAN_POINT('',(381.08,-611.,786.)); +#3692 = VECTOR('',#3693,1.); +#3693 = DIRECTION('',(-0.,1.,0.)); +#3694 = ORIENTED_EDGE('',*,*,#3096,.F.); +#3695 = PLANE('',#3696); +#3696 = AXIS2_PLACEMENT_3D('',#3697,#3698,#3699); +#3697 = CARTESIAN_POINT('',(381.08,-611.,786.)); +#3698 = DIRECTION('',(1.,0.,-0.)); +#3699 = DIRECTION('',(0.,0.,1.)); +#3700 = ADVANCED_FACE('',(#3701),#3712,.F.); +#3701 = FACE_BOUND('',#3702,.F.); +#3702 = EDGE_LOOP('',(#3703,#3704,#3705,#3711)); +#3703 = ORIENTED_EDGE('',*,*,#3672,.F.); +#3704 = ORIENTED_EDGE('',*,*,#2724,.T.); +#3705 = ORIENTED_EDGE('',*,*,#3706,.T.); +#3706 = EDGE_CURVE('',#2717,#3105,#3707,.T.); +#3707 = LINE('',#3708,#3709); +#3708 = CARTESIAN_POINT('',(400.92,-611.,786.)); +#3709 = VECTOR('',#3710,1.); +#3710 = DIRECTION('',(-0.,1.,0.)); +#3711 = ORIENTED_EDGE('',*,*,#3112,.F.); +#3712 = PLANE('',#3713); +#3713 = AXIS2_PLACEMENT_3D('',#3714,#3715,#3716); +#3714 = CARTESIAN_POINT('',(400.92,-611.,786.)); +#3715 = DIRECTION('',(1.,0.,-0.)); +#3716 = DIRECTION('',(0.,0.,1.)); +#3717 = ADVANCED_FACE('',(#3718),#3724,.T.); +#3718 = FACE_BOUND('',#3719,.T.); +#3719 = EDGE_LOOP('',(#3720,#3721,#3722,#3723)); +#3720 = ORIENTED_EDGE('',*,*,#3689,.F.); +#3721 = ORIENTED_EDGE('',*,*,#2716,.T.); +#3722 = ORIENTED_EDGE('',*,*,#3706,.T.); +#3723 = ORIENTED_EDGE('',*,*,#3104,.F.); +#3724 = PLANE('',#3725); +#3725 = AXIS2_PLACEMENT_3D('',#3726,#3727,#3728); +#3726 = CARTESIAN_POINT('',(381.08,-611.,786.)); +#3727 = DIRECTION('',(0.,0.,1.)); +#3728 = DIRECTION('',(1.,0.,-0.)); +#3729 = ADVANCED_FACE('',(#3730),#3746,.F.); +#3730 = FACE_BOUND('',#3731,.F.); +#3731 = EDGE_LOOP('',(#3732,#3738,#3739,#3745)); +#3732 = ORIENTED_EDGE('',*,*,#3733,.F.); +#3733 = EDGE_CURVE('',#2733,#3121,#3734,.T.); +#3734 = LINE('',#3735,#3736); +#3735 = CARTESIAN_POINT('',(381.08,-611.,844.)); +#3736 = VECTOR('',#3737,1.); +#3737 = DIRECTION('',(-0.,1.,0.)); +#3738 = ORIENTED_EDGE('',*,*,#2732,.T.); +#3739 = ORIENTED_EDGE('',*,*,#3740,.T.); +#3740 = EDGE_CURVE('',#2735,#3123,#3741,.T.); +#3741 = LINE('',#3742,#3743); +#3742 = CARTESIAN_POINT('',(400.92,-611.,844.)); +#3743 = VECTOR('',#3744,1.); +#3744 = DIRECTION('',(-0.,1.,0.)); +#3745 = ORIENTED_EDGE('',*,*,#3120,.F.); +#3746 = PLANE('',#3747); +#3747 = AXIS2_PLACEMENT_3D('',#3748,#3749,#3750); +#3748 = CARTESIAN_POINT('',(381.08,-611.,844.)); +#3749 = DIRECTION('',(0.,0.,1.)); +#3750 = DIRECTION('',(1.,0.,-0.)); +#3751 = ADVANCED_FACE('',(#3752),#3763,.T.); +#3752 = FACE_BOUND('',#3753,.T.); +#3753 = EDGE_LOOP('',(#3754,#3755,#3756,#3762)); +#3754 = ORIENTED_EDGE('',*,*,#3733,.F.); +#3755 = ORIENTED_EDGE('',*,*,#2742,.T.); +#3756 = ORIENTED_EDGE('',*,*,#3757,.T.); +#3757 = EDGE_CURVE('',#2743,#3131,#3758,.T.); +#3758 = LINE('',#3759,#3760); +#3759 = CARTESIAN_POINT('',(381.08,-611.,828.)); +#3760 = VECTOR('',#3761,1.); +#3761 = DIRECTION('',(-0.,1.,0.)); +#3762 = ORIENTED_EDGE('',*,*,#3130,.F.); +#3763 = PLANE('',#3764); +#3764 = AXIS2_PLACEMENT_3D('',#3765,#3766,#3767); +#3765 = CARTESIAN_POINT('',(381.08,-611.,828.)); +#3766 = DIRECTION('',(1.,0.,-0.)); +#3767 = DIRECTION('',(0.,0.,1.)); +#3768 = ADVANCED_FACE('',(#3769),#3780,.F.); +#3769 = FACE_BOUND('',#3770,.F.); +#3770 = EDGE_LOOP('',(#3771,#3772,#3773,#3779)); +#3771 = ORIENTED_EDGE('',*,*,#3740,.F.); +#3772 = ORIENTED_EDGE('',*,*,#2758,.T.); +#3773 = ORIENTED_EDGE('',*,*,#3774,.T.); +#3774 = EDGE_CURVE('',#2751,#3139,#3775,.T.); +#3775 = LINE('',#3776,#3777); +#3776 = CARTESIAN_POINT('',(400.92,-611.,828.)); +#3777 = VECTOR('',#3778,1.); +#3778 = DIRECTION('',(-0.,1.,0.)); +#3779 = ORIENTED_EDGE('',*,*,#3146,.F.); +#3780 = PLANE('',#3781); +#3781 = AXIS2_PLACEMENT_3D('',#3782,#3783,#3784); +#3782 = CARTESIAN_POINT('',(400.92,-611.,828.)); +#3783 = DIRECTION('',(1.,0.,-0.)); +#3784 = DIRECTION('',(0.,0.,1.)); +#3785 = ADVANCED_FACE('',(#3786),#3792,.T.); +#3786 = FACE_BOUND('',#3787,.T.); +#3787 = EDGE_LOOP('',(#3788,#3789,#3790,#3791)); +#3788 = ORIENTED_EDGE('',*,*,#3757,.F.); +#3789 = ORIENTED_EDGE('',*,*,#2750,.T.); +#3790 = ORIENTED_EDGE('',*,*,#3774,.T.); +#3791 = ORIENTED_EDGE('',*,*,#3138,.F.); +#3792 = PLANE('',#3793); +#3793 = AXIS2_PLACEMENT_3D('',#3794,#3795,#3796); +#3794 = CARTESIAN_POINT('',(381.08,-611.,828.)); +#3795 = DIRECTION('',(0.,0.,1.)); +#3796 = DIRECTION('',(1.,0.,-0.)); +#3797 = ADVANCED_FACE('',(#3798),#3814,.F.); +#3798 = FACE_BOUND('',#3799,.F.); +#3799 = EDGE_LOOP('',(#3800,#3806,#3807,#3813)); +#3800 = ORIENTED_EDGE('',*,*,#3801,.F.); +#3801 = EDGE_CURVE('',#2767,#3155,#3802,.T.); +#3802 = LINE('',#3803,#3804); +#3803 = CARTESIAN_POINT('',(381.08,-611.,886.)); +#3804 = VECTOR('',#3805,1.); +#3805 = DIRECTION('',(-0.,1.,0.)); +#3806 = ORIENTED_EDGE('',*,*,#2766,.T.); +#3807 = ORIENTED_EDGE('',*,*,#3808,.T.); +#3808 = EDGE_CURVE('',#2769,#3157,#3809,.T.); +#3809 = LINE('',#3810,#3811); +#3810 = CARTESIAN_POINT('',(400.92,-611.,886.)); +#3811 = VECTOR('',#3812,1.); +#3812 = DIRECTION('',(-0.,1.,0.)); +#3813 = ORIENTED_EDGE('',*,*,#3154,.F.); +#3814 = PLANE('',#3815); +#3815 = AXIS2_PLACEMENT_3D('',#3816,#3817,#3818); +#3816 = CARTESIAN_POINT('',(381.08,-611.,886.)); +#3817 = DIRECTION('',(0.,0.,1.)); +#3818 = DIRECTION('',(1.,0.,-0.)); +#3819 = ADVANCED_FACE('',(#3820),#3831,.T.); +#3820 = FACE_BOUND('',#3821,.T.); +#3821 = EDGE_LOOP('',(#3822,#3823,#3824,#3830)); +#3822 = ORIENTED_EDGE('',*,*,#3801,.F.); +#3823 = ORIENTED_EDGE('',*,*,#2776,.T.); +#3824 = ORIENTED_EDGE('',*,*,#3825,.T.); +#3825 = EDGE_CURVE('',#2777,#3165,#3826,.T.); +#3826 = LINE('',#3827,#3828); +#3827 = CARTESIAN_POINT('',(381.08,-611.,870.)); +#3828 = VECTOR('',#3829,1.); +#3829 = DIRECTION('',(-0.,1.,0.)); +#3830 = ORIENTED_EDGE('',*,*,#3164,.F.); +#3831 = PLANE('',#3832); +#3832 = AXIS2_PLACEMENT_3D('',#3833,#3834,#3835); +#3833 = CARTESIAN_POINT('',(381.08,-611.,870.)); +#3834 = DIRECTION('',(1.,0.,-0.)); +#3835 = DIRECTION('',(0.,0.,1.)); +#3836 = ADVANCED_FACE('',(#3837),#3848,.F.); +#3837 = FACE_BOUND('',#3838,.F.); +#3838 = EDGE_LOOP('',(#3839,#3840,#3841,#3847)); +#3839 = ORIENTED_EDGE('',*,*,#3808,.F.); +#3840 = ORIENTED_EDGE('',*,*,#2792,.T.); +#3841 = ORIENTED_EDGE('',*,*,#3842,.T.); +#3842 = EDGE_CURVE('',#2785,#3173,#3843,.T.); +#3843 = LINE('',#3844,#3845); +#3844 = CARTESIAN_POINT('',(400.92,-611.,870.)); +#3845 = VECTOR('',#3846,1.); +#3846 = DIRECTION('',(-0.,1.,0.)); +#3847 = ORIENTED_EDGE('',*,*,#3180,.F.); +#3848 = PLANE('',#3849); +#3849 = AXIS2_PLACEMENT_3D('',#3850,#3851,#3852); +#3850 = CARTESIAN_POINT('',(400.92,-611.,870.)); +#3851 = DIRECTION('',(1.,0.,-0.)); +#3852 = DIRECTION('',(0.,0.,1.)); +#3853 = ADVANCED_FACE('',(#3854),#3860,.T.); +#3854 = FACE_BOUND('',#3855,.T.); +#3855 = EDGE_LOOP('',(#3856,#3857,#3858,#3859)); +#3856 = ORIENTED_EDGE('',*,*,#3825,.F.); +#3857 = ORIENTED_EDGE('',*,*,#2784,.T.); +#3858 = ORIENTED_EDGE('',*,*,#3842,.T.); +#3859 = ORIENTED_EDGE('',*,*,#3172,.F.); +#3860 = PLANE('',#3861); +#3861 = AXIS2_PLACEMENT_3D('',#3862,#3863,#3864); +#3862 = CARTESIAN_POINT('',(381.08,-611.,870.)); +#3863 = DIRECTION('',(0.,0.,1.)); +#3864 = DIRECTION('',(1.,0.,-0.)); +#3865 = ADVANCED_FACE('',(#3866),#3882,.F.); +#3866 = FACE_BOUND('',#3867,.F.); +#3867 = EDGE_LOOP('',(#3868,#3874,#3875,#3881)); +#3868 = ORIENTED_EDGE('',*,*,#3869,.F.); +#3869 = EDGE_CURVE('',#2801,#3189,#3870,.T.); +#3870 = LINE('',#3871,#3872); +#3871 = CARTESIAN_POINT('',(381.08,-611.,928.)); +#3872 = VECTOR('',#3873,1.); +#3873 = DIRECTION('',(-0.,1.,0.)); +#3874 = ORIENTED_EDGE('',*,*,#2800,.T.); +#3875 = ORIENTED_EDGE('',*,*,#3876,.T.); +#3876 = EDGE_CURVE('',#2803,#3191,#3877,.T.); +#3877 = LINE('',#3878,#3879); +#3878 = CARTESIAN_POINT('',(400.92,-611.,928.)); +#3879 = VECTOR('',#3880,1.); +#3880 = DIRECTION('',(-0.,1.,0.)); +#3881 = ORIENTED_EDGE('',*,*,#3188,.F.); +#3882 = PLANE('',#3883); +#3883 = AXIS2_PLACEMENT_3D('',#3884,#3885,#3886); +#3884 = CARTESIAN_POINT('',(381.08,-611.,928.)); +#3885 = DIRECTION('',(0.,0.,1.)); +#3886 = DIRECTION('',(1.,0.,-0.)); +#3887 = ADVANCED_FACE('',(#3888),#3899,.F.); +#3888 = FACE_BOUND('',#3889,.F.); +#3889 = EDGE_LOOP('',(#3890,#3891,#3892,#3898)); +#3890 = ORIENTED_EDGE('',*,*,#3876,.F.); +#3891 = ORIENTED_EDGE('',*,*,#2826,.T.); +#3892 = ORIENTED_EDGE('',*,*,#3893,.T.); +#3893 = EDGE_CURVE('',#2819,#3207,#3894,.T.); +#3894 = LINE('',#3895,#3896); +#3895 = CARTESIAN_POINT('',(400.92,-611.,912.)); +#3896 = VECTOR('',#3897,1.); +#3897 = DIRECTION('',(-0.,1.,0.)); +#3898 = ORIENTED_EDGE('',*,*,#3214,.F.); +#3899 = PLANE('',#3900); +#3900 = AXIS2_PLACEMENT_3D('',#3901,#3902,#3903); +#3901 = CARTESIAN_POINT('',(400.92,-611.,912.)); +#3902 = DIRECTION('',(1.,0.,-0.)); +#3903 = DIRECTION('',(0.,0.,1.)); +#3904 = ADVANCED_FACE('',(#3905),#3916,.T.); +#3905 = FACE_BOUND('',#3906,.T.); +#3906 = EDGE_LOOP('',(#3907,#3913,#3914,#3915)); +#3907 = ORIENTED_EDGE('',*,*,#3908,.F.); +#3908 = EDGE_CURVE('',#2811,#3199,#3909,.T.); +#3909 = LINE('',#3910,#3911); +#3910 = CARTESIAN_POINT('',(381.08,-611.,912.)); +#3911 = VECTOR('',#3912,1.); +#3912 = DIRECTION('',(-0.,1.,0.)); +#3913 = ORIENTED_EDGE('',*,*,#2818,.T.); +#3914 = ORIENTED_EDGE('',*,*,#3893,.T.); +#3915 = ORIENTED_EDGE('',*,*,#3206,.F.); +#3916 = PLANE('',#3917); +#3917 = AXIS2_PLACEMENT_3D('',#3918,#3919,#3920); +#3918 = CARTESIAN_POINT('',(381.08,-611.,912.)); +#3919 = DIRECTION('',(0.,0.,1.)); +#3920 = DIRECTION('',(1.,0.,-0.)); +#3921 = ADVANCED_FACE('',(#3922),#3928,.T.); +#3922 = FACE_BOUND('',#3923,.T.); +#3923 = EDGE_LOOP('',(#3924,#3925,#3926,#3927)); +#3924 = ORIENTED_EDGE('',*,*,#3869,.F.); +#3925 = ORIENTED_EDGE('',*,*,#2810,.T.); +#3926 = ORIENTED_EDGE('',*,*,#3908,.T.); +#3927 = ORIENTED_EDGE('',*,*,#3198,.F.); +#3928 = PLANE('',#3929); +#3929 = AXIS2_PLACEMENT_3D('',#3930,#3931,#3932); +#3930 = CARTESIAN_POINT('',(381.08,-611.,912.)); +#3931 = DIRECTION('',(1.,0.,-0.)); +#3932 = DIRECTION('',(0.,0.,1.)); +#3933 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3937)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3934,#3935,#3936)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#3934 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3935 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3936 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3937 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-07),#3934, + 'distance_accuracy_value','confusion accuracy'); +#3938 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3939,#3941); +#3939 = ( REPRESENTATION_RELATIONSHIP('','',#2422,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3940) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#3940 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23); +#3941 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3942); +#3942 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','NAU03_Right_Side_Panel','', + #5,#2417,$); +#3943 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#2419)); +#3944 = SHAPE_DEFINITION_REPRESENTATION(#3945,#3951); +#3945 = PRODUCT_DEFINITION_SHAPE('','',#3946); +#3946 = PRODUCT_DEFINITION('design','',#3947,#3950); +#3947 = PRODUCT_DEFINITION_FORMATION('','',#3948); +#3948 = PRODUCT('NAU03_Rear_Panel','NAU03_Rear_Panel','',(#3949)); +#3949 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3950 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3951 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3952),#4102); +#3952 = MANIFOLD_SOLID_BREP('',#3953); +#3953 = CLOSED_SHELL('',(#3954,#3994,#4034,#4056,#4078,#4090)); +#3954 = ADVANCED_FACE('',(#3955),#3989,.F.); +#3955 = FACE_BOUND('',#3956,.F.); +#3956 = EDGE_LOOP('',(#3957,#3967,#3975,#3983)); +#3957 = ORIENTED_EDGE('',*,*,#3958,.F.); +#3958 = EDGE_CURVE('',#3959,#3961,#3963,.T.); +#3959 = VERTEX_POINT('',#3960); +#3960 = CARTESIAN_POINT('',(-357.,650.,45.)); +#3961 = VERTEX_POINT('',#3962); +#3962 = CARTESIAN_POINT('',(-357.,650.,2.255E+03)); +#3963 = LINE('',#3964,#3965); +#3964 = CARTESIAN_POINT('',(-357.,650.,45.)); +#3965 = VECTOR('',#3966,1.); +#3966 = DIRECTION('',(0.,0.,1.)); +#3967 = ORIENTED_EDGE('',*,*,#3968,.T.); +#3968 = EDGE_CURVE('',#3959,#3969,#3971,.T.); +#3969 = VERTEX_POINT('',#3970); +#3970 = CARTESIAN_POINT('',(-357.,682.,45.)); +#3971 = LINE('',#3972,#3973); +#3972 = CARTESIAN_POINT('',(-357.,650.,45.)); +#3973 = VECTOR('',#3974,1.); +#3974 = DIRECTION('',(-0.,1.,0.)); +#3975 = ORIENTED_EDGE('',*,*,#3976,.T.); +#3976 = EDGE_CURVE('',#3969,#3977,#3979,.T.); +#3977 = VERTEX_POINT('',#3978); +#3978 = CARTESIAN_POINT('',(-357.,682.,2.255E+03)); +#3979 = LINE('',#3980,#3981); +#3980 = CARTESIAN_POINT('',(-357.,682.,45.)); +#3981 = VECTOR('',#3982,1.); +#3982 = DIRECTION('',(0.,0.,1.)); +#3983 = ORIENTED_EDGE('',*,*,#3984,.F.); +#3984 = EDGE_CURVE('',#3961,#3977,#3985,.T.); +#3985 = LINE('',#3986,#3987); +#3986 = CARTESIAN_POINT('',(-357.,650.,2.255E+03)); +#3987 = VECTOR('',#3988,1.); +#3988 = DIRECTION('',(-0.,1.,0.)); +#3989 = PLANE('',#3990); +#3990 = AXIS2_PLACEMENT_3D('',#3991,#3992,#3993); +#3991 = CARTESIAN_POINT('',(-357.,650.,45.)); +#3992 = DIRECTION('',(1.,0.,-0.)); +#3993 = DIRECTION('',(0.,0.,1.)); +#3994 = ADVANCED_FACE('',(#3995),#4029,.T.); +#3995 = FACE_BOUND('',#3996,.T.); +#3996 = EDGE_LOOP('',(#3997,#4007,#4015,#4023)); +#3997 = ORIENTED_EDGE('',*,*,#3998,.F.); +#3998 = EDGE_CURVE('',#3999,#4001,#4003,.T.); +#3999 = VERTEX_POINT('',#4000); +#4000 = CARTESIAN_POINT('',(357.,650.,45.)); +#4001 = VERTEX_POINT('',#4002); +#4002 = CARTESIAN_POINT('',(357.,650.,2.255E+03)); +#4003 = LINE('',#4004,#4005); +#4004 = CARTESIAN_POINT('',(357.,650.,45.)); +#4005 = VECTOR('',#4006,1.); +#4006 = DIRECTION('',(0.,0.,1.)); +#4007 = ORIENTED_EDGE('',*,*,#4008,.T.); +#4008 = EDGE_CURVE('',#3999,#4009,#4011,.T.); +#4009 = VERTEX_POINT('',#4010); +#4010 = CARTESIAN_POINT('',(357.,682.,45.)); +#4011 = LINE('',#4012,#4013); +#4012 = CARTESIAN_POINT('',(357.,650.,45.)); +#4013 = VECTOR('',#4014,1.); +#4014 = DIRECTION('',(-0.,1.,0.)); +#4015 = ORIENTED_EDGE('',*,*,#4016,.T.); +#4016 = EDGE_CURVE('',#4009,#4017,#4019,.T.); +#4017 = VERTEX_POINT('',#4018); +#4018 = CARTESIAN_POINT('',(357.,682.,2.255E+03)); +#4019 = LINE('',#4020,#4021); +#4020 = CARTESIAN_POINT('',(357.,682.,45.)); +#4021 = VECTOR('',#4022,1.); +#4022 = DIRECTION('',(0.,0.,1.)); +#4023 = ORIENTED_EDGE('',*,*,#4024,.F.); +#4024 = EDGE_CURVE('',#4001,#4017,#4025,.T.); +#4025 = LINE('',#4026,#4027); +#4026 = CARTESIAN_POINT('',(357.,650.,2.255E+03)); +#4027 = VECTOR('',#4028,1.); +#4028 = DIRECTION('',(-0.,1.,0.)); +#4029 = PLANE('',#4030); +#4030 = AXIS2_PLACEMENT_3D('',#4031,#4032,#4033); +#4031 = CARTESIAN_POINT('',(357.,650.,45.)); +#4032 = DIRECTION('',(1.,0.,-0.)); +#4033 = DIRECTION('',(0.,0.,1.)); +#4034 = ADVANCED_FACE('',(#4035),#4051,.F.); +#4035 = FACE_BOUND('',#4036,.F.); +#4036 = EDGE_LOOP('',(#4037,#4043,#4044,#4050)); +#4037 = ORIENTED_EDGE('',*,*,#4038,.F.); +#4038 = EDGE_CURVE('',#3959,#3999,#4039,.T.); +#4039 = LINE('',#4040,#4041); +#4040 = CARTESIAN_POINT('',(-357.,650.,45.)); +#4041 = VECTOR('',#4042,1.); +#4042 = DIRECTION('',(1.,0.,-0.)); +#4043 = ORIENTED_EDGE('',*,*,#3958,.T.); +#4044 = ORIENTED_EDGE('',*,*,#4045,.T.); +#4045 = EDGE_CURVE('',#3961,#4001,#4046,.T.); +#4046 = LINE('',#4047,#4048); +#4047 = CARTESIAN_POINT('',(-357.,650.,2.255E+03)); +#4048 = VECTOR('',#4049,1.); +#4049 = DIRECTION('',(1.,0.,-0.)); +#4050 = ORIENTED_EDGE('',*,*,#3998,.F.); +#4051 = PLANE('',#4052); +#4052 = AXIS2_PLACEMENT_3D('',#4053,#4054,#4055); +#4053 = CARTESIAN_POINT('',(-357.,650.,45.)); +#4054 = DIRECTION('',(-0.,1.,0.)); +#4055 = DIRECTION('',(0.,0.,1.)); +#4056 = ADVANCED_FACE('',(#4057),#4073,.T.); +#4057 = FACE_BOUND('',#4058,.T.); +#4058 = EDGE_LOOP('',(#4059,#4065,#4066,#4072)); +#4059 = ORIENTED_EDGE('',*,*,#4060,.F.); +#4060 = EDGE_CURVE('',#3969,#4009,#4061,.T.); +#4061 = LINE('',#4062,#4063); +#4062 = CARTESIAN_POINT('',(-357.,682.,45.)); +#4063 = VECTOR('',#4064,1.); +#4064 = DIRECTION('',(1.,0.,-0.)); +#4065 = ORIENTED_EDGE('',*,*,#3976,.T.); +#4066 = ORIENTED_EDGE('',*,*,#4067,.T.); +#4067 = EDGE_CURVE('',#3977,#4017,#4068,.T.); +#4068 = LINE('',#4069,#4070); +#4069 = CARTESIAN_POINT('',(-357.,682.,2.255E+03)); +#4070 = VECTOR('',#4071,1.); +#4071 = DIRECTION('',(1.,0.,-0.)); +#4072 = ORIENTED_EDGE('',*,*,#4016,.F.); +#4073 = PLANE('',#4074); +#4074 = AXIS2_PLACEMENT_3D('',#4075,#4076,#4077); +#4075 = CARTESIAN_POINT('',(-357.,682.,45.)); +#4076 = DIRECTION('',(-0.,1.,0.)); +#4077 = DIRECTION('',(0.,0.,1.)); +#4078 = ADVANCED_FACE('',(#4079),#4085,.F.); +#4079 = FACE_BOUND('',#4080,.F.); +#4080 = EDGE_LOOP('',(#4081,#4082,#4083,#4084)); +#4081 = ORIENTED_EDGE('',*,*,#3968,.F.); +#4082 = ORIENTED_EDGE('',*,*,#4038,.T.); +#4083 = ORIENTED_EDGE('',*,*,#4008,.T.); +#4084 = ORIENTED_EDGE('',*,*,#4060,.F.); +#4085 = PLANE('',#4086); +#4086 = AXIS2_PLACEMENT_3D('',#4087,#4088,#4089); +#4087 = CARTESIAN_POINT('',(-357.,650.,45.)); +#4088 = DIRECTION('',(0.,0.,1.)); +#4089 = DIRECTION('',(1.,0.,-0.)); +#4090 = ADVANCED_FACE('',(#4091),#4097,.T.); +#4091 = FACE_BOUND('',#4092,.T.); +#4092 = EDGE_LOOP('',(#4093,#4094,#4095,#4096)); +#4093 = ORIENTED_EDGE('',*,*,#3984,.F.); +#4094 = ORIENTED_EDGE('',*,*,#4045,.T.); +#4095 = ORIENTED_EDGE('',*,*,#4024,.T.); +#4096 = ORIENTED_EDGE('',*,*,#4067,.F.); +#4097 = PLANE('',#4098); +#4098 = AXIS2_PLACEMENT_3D('',#4099,#4100,#4101); +#4099 = CARTESIAN_POINT('',(-357.,650.,2.255E+03)); +#4100 = DIRECTION('',(0.,0.,1.)); +#4101 = DIRECTION('',(1.,0.,-0.)); +#4102 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4106)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4103,#4104,#4105)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#4103 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4104 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4105 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4106 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4103, + 'distance_accuracy_value','confusion accuracy'); +#4107 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4108,#4110); +#4108 = ( REPRESENTATION_RELATIONSHIP('','',#3951,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4109) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#4109 = ITEM_DEFINED_TRANSFORMATION('','',#11,#27); +#4110 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4111); +#4111 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','NAU03_Rear_Panel','',#5, + #3946,$); +#4112 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3948)); +#4113 = SHAPE_DEFINITION_REPRESENTATION(#4114,#4120); +#4114 = PRODUCT_DEFINITION_SHAPE('','',#4115); +#4115 = PRODUCT_DEFINITION('design','',#4116,#4119); +#4116 = PRODUCT_DEFINITION_FORMATION('','',#4117); +#4117 = PRODUCT('NAU03_Front_Left_Door','NAU03_Front_Left_Door','',( + #4118)); +#4118 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4119 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4120 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4121),#4691); +#4121 = MANIFOLD_SOLID_BREP('',#4122); +#4122 = CLOSED_SHELL('',(#4123,#4163,#4262,#4286,#4344,#4361,#4373,#4404 + ,#4435,#4466,#4490,#4514,#4531,#4543,#4560,#4577,#4608,#4632,#4656, + #4673)); +#4123 = ADVANCED_FACE('',(#4124),#4158,.F.); +#4124 = FACE_BOUND('',#4125,.F.); +#4125 = EDGE_LOOP('',(#4126,#4136,#4144,#4152)); +#4126 = ORIENTED_EDGE('',*,*,#4127,.F.); +#4127 = EDGE_CURVE('',#4128,#4130,#4132,.T.); +#4128 = VERTEX_POINT('',#4129); +#4129 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4130 = VERTEX_POINT('',#4131); +#4131 = CARTESIAN_POINT('',(-363.,-686.,2.25E+03)); +#4132 = LINE('',#4133,#4134); +#4133 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4134 = VECTOR('',#4135,1.); +#4135 = DIRECTION('',(0.,0.,1.)); +#4136 = ORIENTED_EDGE('',*,*,#4137,.T.); +#4137 = EDGE_CURVE('',#4128,#4138,#4140,.T.); +#4138 = VERTEX_POINT('',#4139); +#4139 = CARTESIAN_POINT('',(-363.,-650.,55.)); +#4140 = LINE('',#4141,#4142); +#4141 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4142 = VECTOR('',#4143,1.); +#4143 = DIRECTION('',(-0.,1.,0.)); +#4144 = ORIENTED_EDGE('',*,*,#4145,.T.); +#4145 = EDGE_CURVE('',#4138,#4146,#4148,.T.); +#4146 = VERTEX_POINT('',#4147); +#4147 = CARTESIAN_POINT('',(-363.,-650.,2.25E+03)); +#4148 = LINE('',#4149,#4150); +#4149 = CARTESIAN_POINT('',(-363.,-650.,55.)); +#4150 = VECTOR('',#4151,1.); +#4151 = DIRECTION('',(0.,0.,1.)); +#4152 = ORIENTED_EDGE('',*,*,#4153,.F.); +#4153 = EDGE_CURVE('',#4130,#4146,#4154,.T.); +#4154 = LINE('',#4155,#4156); +#4155 = CARTESIAN_POINT('',(-363.,-686.,2.25E+03)); +#4156 = VECTOR('',#4157,1.); +#4157 = DIRECTION('',(-0.,1.,0.)); +#4158 = PLANE('',#4159); +#4159 = AXIS2_PLACEMENT_3D('',#4160,#4161,#4162); +#4160 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4161 = DIRECTION('',(1.,0.,-0.)); +#4162 = DIRECTION('',(0.,0.,1.)); +#4163 = ADVANCED_FACE('',(#4164,#4189,#4223),#4257,.F.); +#4164 = FACE_BOUND('',#4165,.F.); +#4165 = EDGE_LOOP('',(#4166,#4174,#4175,#4183)); +#4166 = ORIENTED_EDGE('',*,*,#4167,.F.); +#4167 = EDGE_CURVE('',#4128,#4168,#4170,.T.); +#4168 = VERTEX_POINT('',#4169); +#4169 = CARTESIAN_POINT('',(-7.,-686.,55.)); +#4170 = LINE('',#4171,#4172); +#4171 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4172 = VECTOR('',#4173,1.); +#4173 = DIRECTION('',(1.,0.,-0.)); +#4174 = ORIENTED_EDGE('',*,*,#4127,.T.); +#4175 = ORIENTED_EDGE('',*,*,#4176,.T.); +#4176 = EDGE_CURVE('',#4130,#4177,#4179,.T.); +#4177 = VERTEX_POINT('',#4178); +#4178 = CARTESIAN_POINT('',(-7.,-686.,2.25E+03)); +#4179 = LINE('',#4180,#4181); +#4180 = CARTESIAN_POINT('',(-363.,-686.,2.25E+03)); +#4181 = VECTOR('',#4182,1.); +#4182 = DIRECTION('',(1.,0.,-0.)); +#4183 = ORIENTED_EDGE('',*,*,#4184,.F.); +#4184 = EDGE_CURVE('',#4168,#4177,#4185,.T.); +#4185 = LINE('',#4186,#4187); +#4186 = CARTESIAN_POINT('',(-7.,-686.,55.)); +#4187 = VECTOR('',#4188,1.); +#4188 = DIRECTION('',(0.,0.,1.)); +#4189 = FACE_BOUND('',#4190,.F.); +#4190 = EDGE_LOOP('',(#4191,#4201,#4209,#4217)); +#4191 = ORIENTED_EDGE('',*,*,#4192,.F.); +#4192 = EDGE_CURVE('',#4193,#4195,#4197,.T.); +#4193 = VERTEX_POINT('',#4194); +#4194 = CARTESIAN_POINT('',(-280.,-686.,1.797E+03)); +#4195 = VERTEX_POINT('',#4196); +#4196 = CARTESIAN_POINT('',(-71.,-686.,1.797E+03)); +#4197 = LINE('',#4198,#4199); +#4198 = CARTESIAN_POINT('',(-321.5,-686.,1.797E+03)); +#4199 = VECTOR('',#4200,1.); +#4200 = DIRECTION('',(1.,0.,-0.)); +#4201 = ORIENTED_EDGE('',*,*,#4202,.T.); +#4202 = EDGE_CURVE('',#4193,#4203,#4205,.T.); +#4203 = VERTEX_POINT('',#4204); +#4204 = CARTESIAN_POINT('',(-280.,-686.,1.303E+03)); +#4205 = LINE('',#4206,#4207); +#4206 = CARTESIAN_POINT('',(-280.,-686.,679.)); +#4207 = VECTOR('',#4208,1.); +#4208 = DIRECTION('',(-0.,0.,-1.)); +#4209 = ORIENTED_EDGE('',*,*,#4210,.T.); +#4210 = EDGE_CURVE('',#4203,#4211,#4213,.T.); +#4211 = VERTEX_POINT('',#4212); +#4212 = CARTESIAN_POINT('',(-71.,-686.,1.303E+03)); +#4213 = LINE('',#4214,#4215); +#4214 = CARTESIAN_POINT('',(-321.5,-686.,1.303E+03)); +#4215 = VECTOR('',#4216,1.); +#4216 = DIRECTION('',(1.,0.,-0.)); +#4217 = ORIENTED_EDGE('',*,*,#4218,.F.); +#4218 = EDGE_CURVE('',#4195,#4211,#4219,.T.); +#4219 = LINE('',#4220,#4221); +#4220 = CARTESIAN_POINT('',(-71.,-686.,920.)); +#4221 = VECTOR('',#4222,1.); +#4222 = DIRECTION('',(-0.,0.,-1.)); +#4223 = FACE_BOUND('',#4224,.F.); +#4224 = EDGE_LOOP('',(#4225,#4235,#4243,#4251)); +#4225 = ORIENTED_EDGE('',*,*,#4226,.F.); +#4226 = EDGE_CURVE('',#4227,#4229,#4231,.T.); +#4227 = VERTEX_POINT('',#4228); +#4228 = CARTESIAN_POINT('',(-49.,-686.,1.2286E+03)); +#4229 = VERTEX_POINT('',#4230); +#4230 = CARTESIAN_POINT('',(-33.,-686.,1.2286E+03)); +#4231 = LINE('',#4232,#4233); +#4232 = CARTESIAN_POINT('',(-206.,-686.,1.2286E+03)); +#4233 = VECTOR('',#4234,1.); +#4234 = DIRECTION('',(1.,0.,-0.)); +#4235 = ORIENTED_EDGE('',*,*,#4236,.T.); +#4236 = EDGE_CURVE('',#4227,#4237,#4239,.T.); +#4237 = VERTEX_POINT('',#4238); +#4238 = CARTESIAN_POINT('',(-49.,-686.,1.1086E+03)); +#4239 = LINE('',#4240,#4241); +#4240 = CARTESIAN_POINT('',(-49.,-686.,581.8)); +#4241 = VECTOR('',#4242,1.); +#4242 = DIRECTION('',(-0.,0.,-1.)); +#4243 = ORIENTED_EDGE('',*,*,#4244,.T.); +#4244 = EDGE_CURVE('',#4237,#4245,#4247,.T.); +#4245 = VERTEX_POINT('',#4246); +#4246 = CARTESIAN_POINT('',(-33.,-686.,1.1086E+03)); +#4247 = LINE('',#4248,#4249); +#4248 = CARTESIAN_POINT('',(-206.,-686.,1.1086E+03)); +#4249 = VECTOR('',#4250,1.); +#4250 = DIRECTION('',(1.,0.,-0.)); +#4251 = ORIENTED_EDGE('',*,*,#4252,.F.); +#4252 = EDGE_CURVE('',#4229,#4245,#4253,.T.); +#4253 = LINE('',#4254,#4255); +#4254 = CARTESIAN_POINT('',(-33.,-686.,581.8)); +#4255 = VECTOR('',#4256,1.); +#4256 = DIRECTION('',(-0.,0.,-1.)); +#4257 = PLANE('',#4258); +#4258 = AXIS2_PLACEMENT_3D('',#4259,#4260,#4261); +#4259 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4260 = DIRECTION('',(-0.,1.,0.)); +#4261 = DIRECTION('',(0.,0.,1.)); +#4262 = ADVANCED_FACE('',(#4263),#4281,.T.); +#4263 = FACE_BOUND('',#4264,.T.); +#4264 = EDGE_LOOP('',(#4265,#4266,#4267,#4275)); +#4265 = ORIENTED_EDGE('',*,*,#4153,.F.); +#4266 = ORIENTED_EDGE('',*,*,#4176,.T.); +#4267 = ORIENTED_EDGE('',*,*,#4268,.T.); +#4268 = EDGE_CURVE('',#4177,#4269,#4271,.T.); +#4269 = VERTEX_POINT('',#4270); +#4270 = CARTESIAN_POINT('',(-7.,-650.,2.25E+03)); +#4271 = LINE('',#4272,#4273); +#4272 = CARTESIAN_POINT('',(-7.,-686.,2.25E+03)); +#4273 = VECTOR('',#4274,1.); +#4274 = DIRECTION('',(-0.,1.,0.)); +#4275 = ORIENTED_EDGE('',*,*,#4276,.F.); +#4276 = EDGE_CURVE('',#4146,#4269,#4277,.T.); +#4277 = LINE('',#4278,#4279); +#4278 = CARTESIAN_POINT('',(-363.,-650.,2.25E+03)); +#4279 = VECTOR('',#4280,1.); +#4280 = DIRECTION('',(1.,0.,-0.)); +#4281 = PLANE('',#4282); +#4282 = AXIS2_PLACEMENT_3D('',#4283,#4284,#4285); +#4283 = CARTESIAN_POINT('',(-363.,-686.,2.25E+03)); +#4284 = DIRECTION('',(0.,0.,1.)); +#4285 = DIRECTION('',(1.,0.,-0.)); +#4286 = ADVANCED_FACE('',(#4287,#4305),#4339,.T.); +#4287 = FACE_BOUND('',#4288,.T.); +#4288 = EDGE_LOOP('',(#4289,#4297,#4298,#4299)); +#4289 = ORIENTED_EDGE('',*,*,#4290,.F.); +#4290 = EDGE_CURVE('',#4138,#4291,#4293,.T.); +#4291 = VERTEX_POINT('',#4292); +#4292 = CARTESIAN_POINT('',(-7.,-650.,55.)); +#4293 = LINE('',#4294,#4295); +#4294 = CARTESIAN_POINT('',(-363.,-650.,55.)); +#4295 = VECTOR('',#4296,1.); +#4296 = DIRECTION('',(1.,0.,-0.)); +#4297 = ORIENTED_EDGE('',*,*,#4145,.T.); +#4298 = ORIENTED_EDGE('',*,*,#4276,.T.); +#4299 = ORIENTED_EDGE('',*,*,#4300,.F.); +#4300 = EDGE_CURVE('',#4291,#4269,#4301,.T.); +#4301 = LINE('',#4302,#4303); +#4302 = CARTESIAN_POINT('',(-7.,-650.,55.)); +#4303 = VECTOR('',#4304,1.); +#4304 = DIRECTION('',(0.,0.,1.)); +#4305 = FACE_BOUND('',#4306,.T.); +#4306 = EDGE_LOOP('',(#4307,#4317,#4325,#4333)); +#4307 = ORIENTED_EDGE('',*,*,#4308,.F.); +#4308 = EDGE_CURVE('',#4309,#4311,#4313,.T.); +#4309 = VERTEX_POINT('',#4310); +#4310 = CARTESIAN_POINT('',(-268.,-650.,1.785E+03)); +#4311 = VERTEX_POINT('',#4312); +#4312 = CARTESIAN_POINT('',(-83.,-650.,1.785E+03)); +#4313 = LINE('',#4314,#4315); +#4314 = CARTESIAN_POINT('',(-315.5,-650.,1.785E+03)); +#4315 = VECTOR('',#4316,1.); +#4316 = DIRECTION('',(1.,0.,-0.)); +#4317 = ORIENTED_EDGE('',*,*,#4318,.T.); +#4318 = EDGE_CURVE('',#4309,#4319,#4321,.T.); +#4319 = VERTEX_POINT('',#4320); +#4320 = CARTESIAN_POINT('',(-268.,-650.,1.315E+03)); +#4321 = LINE('',#4322,#4323); +#4322 = CARTESIAN_POINT('',(-268.,-650.,685.)); +#4323 = VECTOR('',#4324,1.); +#4324 = DIRECTION('',(-0.,0.,-1.)); +#4325 = ORIENTED_EDGE('',*,*,#4326,.T.); +#4326 = EDGE_CURVE('',#4319,#4327,#4329,.T.); +#4327 = VERTEX_POINT('',#4328); +#4328 = CARTESIAN_POINT('',(-83.,-650.,1.315E+03)); +#4329 = LINE('',#4330,#4331); +#4330 = CARTESIAN_POINT('',(-315.5,-650.,1.315E+03)); +#4331 = VECTOR('',#4332,1.); +#4332 = DIRECTION('',(1.,0.,-0.)); +#4333 = ORIENTED_EDGE('',*,*,#4334,.F.); +#4334 = EDGE_CURVE('',#4311,#4327,#4335,.T.); +#4335 = LINE('',#4336,#4337); +#4336 = CARTESIAN_POINT('',(-83.,-650.,685.)); +#4337 = VECTOR('',#4338,1.); +#4338 = DIRECTION('',(-0.,0.,-1.)); +#4339 = PLANE('',#4340); +#4340 = AXIS2_PLACEMENT_3D('',#4341,#4342,#4343); +#4341 = CARTESIAN_POINT('',(-363.,-650.,55.)); +#4342 = DIRECTION('',(-0.,1.,0.)); +#4343 = DIRECTION('',(0.,0.,1.)); +#4344 = ADVANCED_FACE('',(#4345),#4356,.F.); +#4345 = FACE_BOUND('',#4346,.F.); +#4346 = EDGE_LOOP('',(#4347,#4348,#4349,#4355)); +#4347 = ORIENTED_EDGE('',*,*,#4137,.F.); +#4348 = ORIENTED_EDGE('',*,*,#4167,.T.); +#4349 = ORIENTED_EDGE('',*,*,#4350,.T.); +#4350 = EDGE_CURVE('',#4168,#4291,#4351,.T.); +#4351 = LINE('',#4352,#4353); +#4352 = CARTESIAN_POINT('',(-7.,-686.,55.)); +#4353 = VECTOR('',#4354,1.); +#4354 = DIRECTION('',(-0.,1.,0.)); +#4355 = ORIENTED_EDGE('',*,*,#4290,.F.); +#4356 = PLANE('',#4357); +#4357 = AXIS2_PLACEMENT_3D('',#4358,#4359,#4360); +#4358 = CARTESIAN_POINT('',(-363.,-686.,55.)); +#4359 = DIRECTION('',(0.,0.,1.)); +#4360 = DIRECTION('',(1.,0.,-0.)); +#4361 = ADVANCED_FACE('',(#4362),#4368,.T.); +#4362 = FACE_BOUND('',#4363,.T.); +#4363 = EDGE_LOOP('',(#4364,#4365,#4366,#4367)); +#4364 = ORIENTED_EDGE('',*,*,#4184,.F.); +#4365 = ORIENTED_EDGE('',*,*,#4350,.T.); +#4366 = ORIENTED_EDGE('',*,*,#4300,.T.); +#4367 = ORIENTED_EDGE('',*,*,#4268,.F.); +#4368 = PLANE('',#4369); +#4369 = AXIS2_PLACEMENT_3D('',#4370,#4371,#4372); +#4370 = CARTESIAN_POINT('',(-7.,-686.,55.)); +#4371 = DIRECTION('',(1.,0.,-0.)); +#4372 = DIRECTION('',(0.,0.,1.)); +#4373 = ADVANCED_FACE('',(#4374),#4399,.T.); +#4374 = FACE_BOUND('',#4375,.T.); +#4375 = EDGE_LOOP('',(#4376,#4384,#4392,#4398)); +#4376 = ORIENTED_EDGE('',*,*,#4377,.F.); +#4377 = EDGE_CURVE('',#4378,#4193,#4380,.T.); +#4378 = VERTEX_POINT('',#4379); +#4379 = CARTESIAN_POINT('',(-280.,-690.,1.797E+03)); +#4380 = LINE('',#4381,#4382); +#4381 = CARTESIAN_POINT('',(-280.,-690.,1.797E+03)); +#4382 = VECTOR('',#4383,1.); +#4383 = DIRECTION('',(-0.,1.,0.)); +#4384 = ORIENTED_EDGE('',*,*,#4385,.T.); +#4385 = EDGE_CURVE('',#4378,#4386,#4388,.T.); +#4386 = VERTEX_POINT('',#4387); +#4387 = CARTESIAN_POINT('',(-71.,-690.,1.797E+03)); +#4388 = LINE('',#4389,#4390); +#4389 = CARTESIAN_POINT('',(-280.,-690.,1.797E+03)); +#4390 = VECTOR('',#4391,1.); +#4391 = DIRECTION('',(1.,0.,-0.)); +#4392 = ORIENTED_EDGE('',*,*,#4393,.T.); +#4393 = EDGE_CURVE('',#4386,#4195,#4394,.T.); +#4394 = LINE('',#4395,#4396); +#4395 = CARTESIAN_POINT('',(-71.,-690.,1.797E+03)); +#4396 = VECTOR('',#4397,1.); +#4397 = DIRECTION('',(-0.,1.,0.)); +#4398 = ORIENTED_EDGE('',*,*,#4192,.F.); +#4399 = PLANE('',#4400); +#4400 = AXIS2_PLACEMENT_3D('',#4401,#4402,#4403); +#4401 = CARTESIAN_POINT('',(-280.,-690.,1.797E+03)); +#4402 = DIRECTION('',(0.,0.,1.)); +#4403 = DIRECTION('',(1.,0.,-0.)); +#4404 = ADVANCED_FACE('',(#4405),#4430,.F.); +#4405 = FACE_BOUND('',#4406,.F.); +#4406 = EDGE_LOOP('',(#4407,#4415,#4423,#4429)); +#4407 = ORIENTED_EDGE('',*,*,#4408,.F.); +#4408 = EDGE_CURVE('',#4409,#4203,#4411,.T.); +#4409 = VERTEX_POINT('',#4410); +#4410 = CARTESIAN_POINT('',(-280.,-690.,1.303E+03)); +#4411 = LINE('',#4412,#4413); +#4412 = CARTESIAN_POINT('',(-280.,-690.,1.303E+03)); +#4413 = VECTOR('',#4414,1.); +#4414 = DIRECTION('',(-0.,1.,0.)); +#4415 = ORIENTED_EDGE('',*,*,#4416,.T.); +#4416 = EDGE_CURVE('',#4409,#4417,#4419,.T.); +#4417 = VERTEX_POINT('',#4418); +#4418 = CARTESIAN_POINT('',(-71.,-690.,1.303E+03)); +#4419 = LINE('',#4420,#4421); +#4420 = CARTESIAN_POINT('',(-280.,-690.,1.303E+03)); +#4421 = VECTOR('',#4422,1.); +#4422 = DIRECTION('',(1.,0.,-0.)); +#4423 = ORIENTED_EDGE('',*,*,#4424,.T.); +#4424 = EDGE_CURVE('',#4417,#4211,#4425,.T.); +#4425 = LINE('',#4426,#4427); +#4426 = CARTESIAN_POINT('',(-71.,-690.,1.303E+03)); +#4427 = VECTOR('',#4428,1.); +#4428 = DIRECTION('',(-0.,1.,0.)); +#4429 = ORIENTED_EDGE('',*,*,#4210,.F.); +#4430 = PLANE('',#4431); +#4431 = AXIS2_PLACEMENT_3D('',#4432,#4433,#4434); +#4432 = CARTESIAN_POINT('',(-280.,-690.,1.303E+03)); +#4433 = DIRECTION('',(0.,0.,1.)); +#4434 = DIRECTION('',(1.,0.,-0.)); +#4435 = ADVANCED_FACE('',(#4436),#4461,.T.); +#4436 = FACE_BOUND('',#4437,.T.); +#4437 = EDGE_LOOP('',(#4438,#4446,#4454,#4460)); +#4438 = ORIENTED_EDGE('',*,*,#4439,.F.); +#4439 = EDGE_CURVE('',#4440,#4227,#4442,.T.); +#4440 = VERTEX_POINT('',#4441); +#4441 = CARTESIAN_POINT('',(-49.,-698.,1.2286E+03)); +#4442 = LINE('',#4443,#4444); +#4443 = CARTESIAN_POINT('',(-49.,-698.,1.2286E+03)); +#4444 = VECTOR('',#4445,1.); +#4445 = DIRECTION('',(-0.,1.,0.)); +#4446 = ORIENTED_EDGE('',*,*,#4447,.T.); +#4447 = EDGE_CURVE('',#4440,#4448,#4450,.T.); +#4448 = VERTEX_POINT('',#4449); +#4449 = CARTESIAN_POINT('',(-33.,-698.,1.2286E+03)); +#4450 = LINE('',#4451,#4452); +#4451 = CARTESIAN_POINT('',(-49.,-698.,1.2286E+03)); +#4452 = VECTOR('',#4453,1.); +#4453 = DIRECTION('',(1.,0.,-0.)); +#4454 = ORIENTED_EDGE('',*,*,#4455,.T.); +#4455 = EDGE_CURVE('',#4448,#4229,#4456,.T.); +#4456 = LINE('',#4457,#4458); +#4457 = CARTESIAN_POINT('',(-33.,-698.,1.2286E+03)); +#4458 = VECTOR('',#4459,1.); +#4459 = DIRECTION('',(-0.,1.,0.)); +#4460 = ORIENTED_EDGE('',*,*,#4226,.F.); +#4461 = PLANE('',#4462); +#4462 = AXIS2_PLACEMENT_3D('',#4463,#4464,#4465); +#4463 = CARTESIAN_POINT('',(-49.,-698.,1.2286E+03)); +#4464 = DIRECTION('',(0.,0.,1.)); +#4465 = DIRECTION('',(1.,0.,-0.)); +#4466 = ADVANCED_FACE('',(#4467),#4485,.F.); +#4467 = FACE_BOUND('',#4468,.F.); +#4468 = EDGE_LOOP('',(#4469,#4470,#4478,#4484)); +#4469 = ORIENTED_EDGE('',*,*,#4439,.F.); +#4470 = ORIENTED_EDGE('',*,*,#4471,.F.); +#4471 = EDGE_CURVE('',#4472,#4440,#4474,.T.); +#4472 = VERTEX_POINT('',#4473); +#4473 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4474 = LINE('',#4475,#4476); +#4475 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4476 = VECTOR('',#4477,1.); +#4477 = DIRECTION('',(0.,0.,1.)); +#4478 = ORIENTED_EDGE('',*,*,#4479,.T.); +#4479 = EDGE_CURVE('',#4472,#4237,#4480,.T.); +#4480 = LINE('',#4481,#4482); +#4481 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4482 = VECTOR('',#4483,1.); +#4483 = DIRECTION('',(-0.,1.,0.)); +#4484 = ORIENTED_EDGE('',*,*,#4236,.F.); +#4485 = PLANE('',#4486); +#4486 = AXIS2_PLACEMENT_3D('',#4487,#4488,#4489); +#4487 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4488 = DIRECTION('',(1.,0.,-0.)); +#4489 = DIRECTION('',(0.,0.,1.)); +#4490 = ADVANCED_FACE('',(#4491),#4509,.T.); +#4491 = FACE_BOUND('',#4492,.T.); +#4492 = EDGE_LOOP('',(#4493,#4494,#4502,#4508)); +#4493 = ORIENTED_EDGE('',*,*,#4455,.F.); +#4494 = ORIENTED_EDGE('',*,*,#4495,.F.); +#4495 = EDGE_CURVE('',#4496,#4448,#4498,.T.); +#4496 = VERTEX_POINT('',#4497); +#4497 = CARTESIAN_POINT('',(-33.,-698.,1.1086E+03)); +#4498 = LINE('',#4499,#4500); +#4499 = CARTESIAN_POINT('',(-33.,-698.,1.1086E+03)); +#4500 = VECTOR('',#4501,1.); +#4501 = DIRECTION('',(0.,0.,1.)); +#4502 = ORIENTED_EDGE('',*,*,#4503,.T.); +#4503 = EDGE_CURVE('',#4496,#4245,#4504,.T.); +#4504 = LINE('',#4505,#4506); +#4505 = CARTESIAN_POINT('',(-33.,-698.,1.1086E+03)); +#4506 = VECTOR('',#4507,1.); +#4507 = DIRECTION('',(-0.,1.,0.)); +#4508 = ORIENTED_EDGE('',*,*,#4252,.F.); +#4509 = PLANE('',#4510); +#4510 = AXIS2_PLACEMENT_3D('',#4511,#4512,#4513); +#4511 = CARTESIAN_POINT('',(-33.,-698.,1.1086E+03)); +#4512 = DIRECTION('',(1.,0.,-0.)); +#4513 = DIRECTION('',(0.,0.,1.)); +#4514 = ADVANCED_FACE('',(#4515),#4526,.F.); +#4515 = FACE_BOUND('',#4516,.F.); +#4516 = EDGE_LOOP('',(#4517,#4518,#4524,#4525)); +#4517 = ORIENTED_EDGE('',*,*,#4479,.F.); +#4518 = ORIENTED_EDGE('',*,*,#4519,.T.); +#4519 = EDGE_CURVE('',#4472,#4496,#4520,.T.); +#4520 = LINE('',#4521,#4522); +#4521 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4522 = VECTOR('',#4523,1.); +#4523 = DIRECTION('',(1.,0.,-0.)); +#4524 = ORIENTED_EDGE('',*,*,#4503,.T.); +#4525 = ORIENTED_EDGE('',*,*,#4244,.F.); +#4526 = PLANE('',#4527); +#4527 = AXIS2_PLACEMENT_3D('',#4528,#4529,#4530); +#4528 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4529 = DIRECTION('',(0.,0.,1.)); +#4530 = DIRECTION('',(1.,0.,-0.)); +#4531 = ADVANCED_FACE('',(#4532),#4538,.F.); +#4532 = FACE_BOUND('',#4533,.F.); +#4533 = EDGE_LOOP('',(#4534,#4535,#4536,#4537)); +#4534 = ORIENTED_EDGE('',*,*,#4519,.F.); +#4535 = ORIENTED_EDGE('',*,*,#4471,.T.); +#4536 = ORIENTED_EDGE('',*,*,#4447,.T.); +#4537 = ORIENTED_EDGE('',*,*,#4495,.F.); +#4538 = PLANE('',#4539); +#4539 = AXIS2_PLACEMENT_3D('',#4540,#4541,#4542); +#4540 = CARTESIAN_POINT('',(-49.,-698.,1.1086E+03)); +#4541 = DIRECTION('',(-0.,1.,0.)); +#4542 = DIRECTION('',(0.,0.,1.)); +#4543 = ADVANCED_FACE('',(#4544),#4555,.T.); +#4544 = FACE_BOUND('',#4545,.T.); +#4545 = EDGE_LOOP('',(#4546,#4547,#4553,#4554)); +#4546 = ORIENTED_EDGE('',*,*,#4393,.F.); +#4547 = ORIENTED_EDGE('',*,*,#4548,.F.); +#4548 = EDGE_CURVE('',#4417,#4386,#4549,.T.); +#4549 = LINE('',#4550,#4551); +#4550 = CARTESIAN_POINT('',(-71.,-690.,1.785E+03)); +#4551 = VECTOR('',#4552,1.); +#4552 = DIRECTION('',(0.,0.,1.)); +#4553 = ORIENTED_EDGE('',*,*,#4424,.T.); +#4554 = ORIENTED_EDGE('',*,*,#4218,.F.); +#4555 = PLANE('',#4556); +#4556 = AXIS2_PLACEMENT_3D('',#4557,#4558,#4559); +#4557 = CARTESIAN_POINT('',(-71.,-688.,1.55E+03)); +#4558 = DIRECTION('',(1.,0.,0.)); +#4559 = DIRECTION('',(-0.,0.,1.)); +#4560 = ADVANCED_FACE('',(#4561),#4572,.T.); +#4561 = FACE_BOUND('',#4562,.T.); +#4562 = EDGE_LOOP('',(#4563,#4564,#4565,#4571)); +#4563 = ORIENTED_EDGE('',*,*,#4202,.T.); +#4564 = ORIENTED_EDGE('',*,*,#4408,.F.); +#4565 = ORIENTED_EDGE('',*,*,#4566,.T.); +#4566 = EDGE_CURVE('',#4409,#4378,#4567,.T.); +#4567 = LINE('',#4568,#4569); +#4568 = CARTESIAN_POINT('',(-280.,-690.,1.303E+03)); +#4569 = VECTOR('',#4570,1.); +#4570 = DIRECTION('',(0.,0.,1.)); +#4571 = ORIENTED_EDGE('',*,*,#4377,.T.); +#4572 = PLANE('',#4573); +#4573 = AXIS2_PLACEMENT_3D('',#4574,#4575,#4576); +#4574 = CARTESIAN_POINT('',(-280.,-688.,1.55E+03)); +#4575 = DIRECTION('',(-1.,-0.,-0.)); +#4576 = DIRECTION('',(0.,0.,-1.)); +#4577 = ADVANCED_FACE('',(#4578),#4603,.T.); +#4578 = FACE_BOUND('',#4579,.T.); +#4579 = EDGE_LOOP('',(#4580,#4581,#4589,#4597)); +#4580 = ORIENTED_EDGE('',*,*,#4308,.T.); +#4581 = ORIENTED_EDGE('',*,*,#4582,.F.); +#4582 = EDGE_CURVE('',#4583,#4311,#4585,.T.); +#4583 = VERTEX_POINT('',#4584); +#4584 = CARTESIAN_POINT('',(-83.,-690.,1.785E+03)); +#4585 = LINE('',#4586,#4587); +#4586 = CARTESIAN_POINT('',(-83.,-689.,1.785E+03)); +#4587 = VECTOR('',#4588,1.); +#4588 = DIRECTION('',(-0.,1.,0.)); +#4589 = ORIENTED_EDGE('',*,*,#4590,.F.); +#4590 = EDGE_CURVE('',#4591,#4583,#4593,.T.); +#4591 = VERTEX_POINT('',#4592); +#4592 = CARTESIAN_POINT('',(-268.,-690.,1.785E+03)); +#4593 = LINE('',#4594,#4595); +#4594 = CARTESIAN_POINT('',(-280.,-690.,1.785E+03)); +#4595 = VECTOR('',#4596,1.); +#4596 = DIRECTION('',(1.,0.,-0.)); +#4597 = ORIENTED_EDGE('',*,*,#4598,.T.); +#4598 = EDGE_CURVE('',#4591,#4309,#4599,.T.); +#4599 = LINE('',#4600,#4601); +#4600 = CARTESIAN_POINT('',(-268.,-690.,1.785E+03)); +#4601 = VECTOR('',#4602,1.); +#4602 = DIRECTION('',(-0.,1.,0.)); +#4603 = PLANE('',#4604); +#4604 = AXIS2_PLACEMENT_3D('',#4605,#4606,#4607); +#4605 = CARTESIAN_POINT('',(-175.5,-670.,1.785E+03)); +#4606 = DIRECTION('',(-0.,-0.,-1.)); +#4607 = DIRECTION('',(-1.,0.,0.)); +#4608 = ADVANCED_FACE('',(#4609),#4627,.T.); +#4609 = FACE_BOUND('',#4610,.T.); +#4610 = EDGE_LOOP('',(#4611,#4612,#4613,#4621)); +#4611 = ORIENTED_EDGE('',*,*,#4582,.T.); +#4612 = ORIENTED_EDGE('',*,*,#4334,.T.); +#4613 = ORIENTED_EDGE('',*,*,#4614,.F.); +#4614 = EDGE_CURVE('',#4615,#4327,#4617,.T.); +#4615 = VERTEX_POINT('',#4616); +#4616 = CARTESIAN_POINT('',(-83.,-690.,1.315E+03)); +#4617 = LINE('',#4618,#4619); +#4618 = CARTESIAN_POINT('',(-83.,-689.,1.315E+03)); +#4619 = VECTOR('',#4620,1.); +#4620 = DIRECTION('',(-0.,1.,0.)); +#4621 = ORIENTED_EDGE('',*,*,#4622,.T.); +#4622 = EDGE_CURVE('',#4615,#4583,#4623,.T.); +#4623 = LINE('',#4624,#4625); +#4624 = CARTESIAN_POINT('',(-83.,-690.,1.315E+03)); +#4625 = VECTOR('',#4626,1.); +#4626 = DIRECTION('',(0.,0.,1.)); +#4627 = PLANE('',#4628); +#4628 = AXIS2_PLACEMENT_3D('',#4629,#4630,#4631); +#4629 = CARTESIAN_POINT('',(-83.,-670.,1.55E+03)); +#4630 = DIRECTION('',(-1.,-0.,-0.)); +#4631 = DIRECTION('',(0.,0.,-1.)); +#4632 = ADVANCED_FACE('',(#4633),#4651,.T.); +#4633 = FACE_BOUND('',#4634,.T.); +#4634 = EDGE_LOOP('',(#4635,#4643,#4649,#4650)); +#4635 = ORIENTED_EDGE('',*,*,#4636,.F.); +#4636 = EDGE_CURVE('',#4637,#4319,#4639,.T.); +#4637 = VERTEX_POINT('',#4638); +#4638 = CARTESIAN_POINT('',(-268.,-690.,1.315E+03)); +#4639 = LINE('',#4640,#4641); +#4640 = CARTESIAN_POINT('',(-268.,-689.,1.315E+03)); +#4641 = VECTOR('',#4642,1.); +#4642 = DIRECTION('',(-0.,1.,0.)); +#4643 = ORIENTED_EDGE('',*,*,#4644,.T.); +#4644 = EDGE_CURVE('',#4637,#4615,#4645,.T.); +#4645 = LINE('',#4646,#4647); +#4646 = CARTESIAN_POINT('',(-280.,-690.,1.315E+03)); +#4647 = VECTOR('',#4648,1.); +#4648 = DIRECTION('',(1.,0.,-0.)); +#4649 = ORIENTED_EDGE('',*,*,#4614,.T.); +#4650 = ORIENTED_EDGE('',*,*,#4326,.F.); +#4651 = PLANE('',#4652); +#4652 = AXIS2_PLACEMENT_3D('',#4653,#4654,#4655); +#4653 = CARTESIAN_POINT('',(-175.5,-670.,1.315E+03)); +#4654 = DIRECTION('',(0.,0.,1.)); +#4655 = DIRECTION('',(1.,0.,-0.)); +#4656 = ADVANCED_FACE('',(#4657),#4668,.T.); +#4657 = FACE_BOUND('',#4658,.T.); +#4658 = EDGE_LOOP('',(#4659,#4660,#4666,#4667)); +#4659 = ORIENTED_EDGE('',*,*,#4598,.F.); +#4660 = ORIENTED_EDGE('',*,*,#4661,.F.); +#4661 = EDGE_CURVE('',#4637,#4591,#4662,.T.); +#4662 = LINE('',#4663,#4664); +#4663 = CARTESIAN_POINT('',(-268.,-690.,1.315E+03)); +#4664 = VECTOR('',#4665,1.); +#4665 = DIRECTION('',(0.,0.,1.)); +#4666 = ORIENTED_EDGE('',*,*,#4636,.T.); +#4667 = ORIENTED_EDGE('',*,*,#4318,.F.); +#4668 = PLANE('',#4669); +#4669 = AXIS2_PLACEMENT_3D('',#4670,#4671,#4672); +#4670 = CARTESIAN_POINT('',(-268.,-670.,1.55E+03)); +#4671 = DIRECTION('',(1.,0.,0.)); +#4672 = DIRECTION('',(-0.,0.,1.)); +#4673 = ADVANCED_FACE('',(#4674,#4680),#4686,.T.); +#4674 = FACE_BOUND('',#4675,.T.); +#4675 = EDGE_LOOP('',(#4676,#4677,#4678,#4679)); +#4676 = ORIENTED_EDGE('',*,*,#4548,.T.); +#4677 = ORIENTED_EDGE('',*,*,#4385,.F.); +#4678 = ORIENTED_EDGE('',*,*,#4566,.F.); +#4679 = ORIENTED_EDGE('',*,*,#4416,.T.); +#4680 = FACE_BOUND('',#4681,.T.); +#4681 = EDGE_LOOP('',(#4682,#4683,#4684,#4685)); +#4682 = ORIENTED_EDGE('',*,*,#4590,.T.); +#4683 = ORIENTED_EDGE('',*,*,#4622,.F.); +#4684 = ORIENTED_EDGE('',*,*,#4644,.F.); +#4685 = ORIENTED_EDGE('',*,*,#4661,.T.); +#4686 = PLANE('',#4687); +#4687 = AXIS2_PLACEMENT_3D('',#4688,#4689,#4690); +#4688 = CARTESIAN_POINT('',(-175.5,-690.,1.55E+03)); +#4689 = DIRECTION('',(-0.,-1.,-0.)); +#4690 = DIRECTION('',(0.,0.,-1.)); +#4691 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#4695)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#4692,#4693,#4694)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#4692 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#4693 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#4694 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#4695 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#4692, + 'distance_accuracy_value','confusion accuracy'); +#4696 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#4697,#4699); +#4697 = ( REPRESENTATION_RELATIONSHIP('','',#4120,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#4698) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#4698 = ITEM_DEFINED_TRANSFORMATION('','',#11,#31); +#4699 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #4700); +#4700 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','NAU03_Front_Left_Door','',#5 + ,#4115,$); +#4701 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4117)); +#4702 = SHAPE_DEFINITION_REPRESENTATION(#4703,#4709); +#4703 = PRODUCT_DEFINITION_SHAPE('','',#4704); +#4704 = PRODUCT_DEFINITION('design','',#4705,#4708); +#4705 = PRODUCT_DEFINITION_FORMATION('','',#4706); +#4706 = PRODUCT('NAU03_Front_Right_Door','NAU03_Front_Right_Door','',( + #4707)); +#4707 = PRODUCT_CONTEXT('',#2,'mechanical'); +#4708 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#4709 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#4710),#5280); +#4710 = MANIFOLD_SOLID_BREP('',#4711); +#4711 = CLOSED_SHELL('',(#4712,#4752,#4851,#4875,#4933,#4950,#4962,#4993 + ,#5024,#5055,#5079,#5103,#5120,#5132,#5149,#5166,#5197,#5221,#5245, + #5262)); +#4712 = ADVANCED_FACE('',(#4713),#4747,.F.); +#4713 = FACE_BOUND('',#4714,.F.); +#4714 = EDGE_LOOP('',(#4715,#4725,#4733,#4741)); +#4715 = ORIENTED_EDGE('',*,*,#4716,.F.); +#4716 = EDGE_CURVE('',#4717,#4719,#4721,.T.); +#4717 = VERTEX_POINT('',#4718); +#4718 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4719 = VERTEX_POINT('',#4720); +#4720 = CARTESIAN_POINT('',(1.,-686.,2.25E+03)); +#4721 = LINE('',#4722,#4723); +#4722 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4723 = VECTOR('',#4724,1.); +#4724 = DIRECTION('',(0.,0.,1.)); +#4725 = ORIENTED_EDGE('',*,*,#4726,.T.); +#4726 = EDGE_CURVE('',#4717,#4727,#4729,.T.); +#4727 = VERTEX_POINT('',#4728); +#4728 = CARTESIAN_POINT('',(1.,-650.,55.)); +#4729 = LINE('',#4730,#4731); +#4730 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4731 = VECTOR('',#4732,1.); +#4732 = DIRECTION('',(-0.,1.,0.)); +#4733 = ORIENTED_EDGE('',*,*,#4734,.T.); +#4734 = EDGE_CURVE('',#4727,#4735,#4737,.T.); +#4735 = VERTEX_POINT('',#4736); +#4736 = CARTESIAN_POINT('',(1.,-650.,2.25E+03)); +#4737 = LINE('',#4738,#4739); +#4738 = CARTESIAN_POINT('',(1.,-650.,55.)); +#4739 = VECTOR('',#4740,1.); +#4740 = DIRECTION('',(0.,0.,1.)); +#4741 = ORIENTED_EDGE('',*,*,#4742,.F.); +#4742 = EDGE_CURVE('',#4719,#4735,#4743,.T.); +#4743 = LINE('',#4744,#4745); +#4744 = CARTESIAN_POINT('',(1.,-686.,2.25E+03)); +#4745 = VECTOR('',#4746,1.); +#4746 = DIRECTION('',(-0.,1.,0.)); +#4747 = PLANE('',#4748); +#4748 = AXIS2_PLACEMENT_3D('',#4749,#4750,#4751); +#4749 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4750 = DIRECTION('',(1.,0.,-0.)); +#4751 = DIRECTION('',(0.,0.,1.)); +#4752 = ADVANCED_FACE('',(#4753,#4778,#4812),#4846,.F.); +#4753 = FACE_BOUND('',#4754,.F.); +#4754 = EDGE_LOOP('',(#4755,#4763,#4764,#4772)); +#4755 = ORIENTED_EDGE('',*,*,#4756,.F.); +#4756 = EDGE_CURVE('',#4717,#4757,#4759,.T.); +#4757 = VERTEX_POINT('',#4758); +#4758 = CARTESIAN_POINT('',(357.,-686.,55.)); +#4759 = LINE('',#4760,#4761); +#4760 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4761 = VECTOR('',#4762,1.); +#4762 = DIRECTION('',(1.,0.,-0.)); +#4763 = ORIENTED_EDGE('',*,*,#4716,.T.); +#4764 = ORIENTED_EDGE('',*,*,#4765,.T.); +#4765 = EDGE_CURVE('',#4719,#4766,#4768,.T.); +#4766 = VERTEX_POINT('',#4767); +#4767 = CARTESIAN_POINT('',(357.,-686.,2.25E+03)); +#4768 = LINE('',#4769,#4770); +#4769 = CARTESIAN_POINT('',(1.,-686.,2.25E+03)); +#4770 = VECTOR('',#4771,1.); +#4771 = DIRECTION('',(1.,0.,-0.)); +#4772 = ORIENTED_EDGE('',*,*,#4773,.F.); +#4773 = EDGE_CURVE('',#4757,#4766,#4774,.T.); +#4774 = LINE('',#4775,#4776); +#4775 = CARTESIAN_POINT('',(357.,-686.,55.)); +#4776 = VECTOR('',#4777,1.); +#4777 = DIRECTION('',(0.,0.,1.)); +#4778 = FACE_BOUND('',#4779,.F.); +#4779 = EDGE_LOOP('',(#4780,#4790,#4798,#4806)); +#4780 = ORIENTED_EDGE('',*,*,#4781,.F.); +#4781 = EDGE_CURVE('',#4782,#4784,#4786,.T.); +#4782 = VERTEX_POINT('',#4783); +#4783 = CARTESIAN_POINT('',(59.,-686.,1.797E+03)); +#4784 = VERTEX_POINT('',#4785); +#4785 = CARTESIAN_POINT('',(268.,-686.,1.797E+03)); +#4786 = LINE('',#4787,#4788); +#4787 = CARTESIAN_POINT('',(30.,-686.,1.797E+03)); +#4788 = VECTOR('',#4789,1.); +#4789 = DIRECTION('',(1.,0.,-0.)); +#4790 = ORIENTED_EDGE('',*,*,#4791,.T.); +#4791 = EDGE_CURVE('',#4782,#4792,#4794,.T.); +#4792 = VERTEX_POINT('',#4793); +#4793 = CARTESIAN_POINT('',(59.,-686.,1.303E+03)); +#4794 = LINE('',#4795,#4796); +#4795 = CARTESIAN_POINT('',(59.,-686.,679.)); +#4796 = VECTOR('',#4797,1.); +#4797 = DIRECTION('',(-0.,0.,-1.)); +#4798 = ORIENTED_EDGE('',*,*,#4799,.T.); +#4799 = EDGE_CURVE('',#4792,#4800,#4802,.T.); +#4800 = VERTEX_POINT('',#4801); +#4801 = CARTESIAN_POINT('',(268.,-686.,1.303E+03)); +#4802 = LINE('',#4803,#4804); +#4803 = CARTESIAN_POINT('',(30.,-686.,1.303E+03)); +#4804 = VECTOR('',#4805,1.); +#4805 = DIRECTION('',(1.,0.,-0.)); +#4806 = ORIENTED_EDGE('',*,*,#4807,.F.); +#4807 = EDGE_CURVE('',#4784,#4800,#4808,.T.); +#4808 = LINE('',#4809,#4810); +#4809 = CARTESIAN_POINT('',(268.,-686.,920.)); +#4810 = VECTOR('',#4811,1.); +#4811 = DIRECTION('',(-0.,0.,-1.)); +#4812 = FACE_BOUND('',#4813,.F.); +#4813 = EDGE_LOOP('',(#4814,#4824,#4832,#4840)); +#4814 = ORIENTED_EDGE('',*,*,#4815,.F.); +#4815 = EDGE_CURVE('',#4816,#4818,#4820,.T.); +#4816 = VERTEX_POINT('',#4817); +#4817 = CARTESIAN_POINT('',(315.,-686.,1.2286E+03)); +#4818 = VERTEX_POINT('',#4819); +#4819 = CARTESIAN_POINT('',(331.,-686.,1.2286E+03)); +#4820 = LINE('',#4821,#4822); +#4821 = CARTESIAN_POINT('',(158.,-686.,1.2286E+03)); +#4822 = VECTOR('',#4823,1.); +#4823 = DIRECTION('',(1.,0.,-0.)); +#4824 = ORIENTED_EDGE('',*,*,#4825,.T.); +#4825 = EDGE_CURVE('',#4816,#4826,#4828,.T.); +#4826 = VERTEX_POINT('',#4827); +#4827 = CARTESIAN_POINT('',(315.,-686.,1.1086E+03)); +#4828 = LINE('',#4829,#4830); +#4829 = CARTESIAN_POINT('',(315.,-686.,581.8)); +#4830 = VECTOR('',#4831,1.); +#4831 = DIRECTION('',(-0.,0.,-1.)); +#4832 = ORIENTED_EDGE('',*,*,#4833,.T.); +#4833 = EDGE_CURVE('',#4826,#4834,#4836,.T.); +#4834 = VERTEX_POINT('',#4835); +#4835 = CARTESIAN_POINT('',(331.,-686.,1.1086E+03)); +#4836 = LINE('',#4837,#4838); +#4837 = CARTESIAN_POINT('',(158.,-686.,1.1086E+03)); +#4838 = VECTOR('',#4839,1.); +#4839 = DIRECTION('',(1.,0.,-0.)); +#4840 = ORIENTED_EDGE('',*,*,#4841,.F.); +#4841 = EDGE_CURVE('',#4818,#4834,#4842,.T.); +#4842 = LINE('',#4843,#4844); +#4843 = CARTESIAN_POINT('',(331.,-686.,581.8)); +#4844 = VECTOR('',#4845,1.); +#4845 = DIRECTION('',(-0.,0.,-1.)); +#4846 = PLANE('',#4847); +#4847 = AXIS2_PLACEMENT_3D('',#4848,#4849,#4850); +#4848 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4849 = DIRECTION('',(-0.,1.,0.)); +#4850 = DIRECTION('',(0.,0.,1.)); +#4851 = ADVANCED_FACE('',(#4852),#4870,.T.); +#4852 = FACE_BOUND('',#4853,.T.); +#4853 = EDGE_LOOP('',(#4854,#4855,#4856,#4864)); +#4854 = ORIENTED_EDGE('',*,*,#4742,.F.); +#4855 = ORIENTED_EDGE('',*,*,#4765,.T.); +#4856 = ORIENTED_EDGE('',*,*,#4857,.T.); +#4857 = EDGE_CURVE('',#4766,#4858,#4860,.T.); +#4858 = VERTEX_POINT('',#4859); +#4859 = CARTESIAN_POINT('',(357.,-650.,2.25E+03)); +#4860 = LINE('',#4861,#4862); +#4861 = CARTESIAN_POINT('',(357.,-686.,2.25E+03)); +#4862 = VECTOR('',#4863,1.); +#4863 = DIRECTION('',(-0.,1.,0.)); +#4864 = ORIENTED_EDGE('',*,*,#4865,.F.); +#4865 = EDGE_CURVE('',#4735,#4858,#4866,.T.); +#4866 = LINE('',#4867,#4868); +#4867 = CARTESIAN_POINT('',(1.,-650.,2.25E+03)); +#4868 = VECTOR('',#4869,1.); +#4869 = DIRECTION('',(1.,0.,-0.)); +#4870 = PLANE('',#4871); +#4871 = AXIS2_PLACEMENT_3D('',#4872,#4873,#4874); +#4872 = CARTESIAN_POINT('',(1.,-686.,2.25E+03)); +#4873 = DIRECTION('',(0.,0.,1.)); +#4874 = DIRECTION('',(1.,0.,-0.)); +#4875 = ADVANCED_FACE('',(#4876,#4894),#4928,.T.); +#4876 = FACE_BOUND('',#4877,.T.); +#4877 = EDGE_LOOP('',(#4878,#4886,#4887,#4888)); +#4878 = ORIENTED_EDGE('',*,*,#4879,.F.); +#4879 = EDGE_CURVE('',#4727,#4880,#4882,.T.); +#4880 = VERTEX_POINT('',#4881); +#4881 = CARTESIAN_POINT('',(357.,-650.,55.)); +#4882 = LINE('',#4883,#4884); +#4883 = CARTESIAN_POINT('',(1.,-650.,55.)); +#4884 = VECTOR('',#4885,1.); +#4885 = DIRECTION('',(1.,0.,-0.)); +#4886 = ORIENTED_EDGE('',*,*,#4734,.T.); +#4887 = ORIENTED_EDGE('',*,*,#4865,.T.); +#4888 = ORIENTED_EDGE('',*,*,#4889,.F.); +#4889 = EDGE_CURVE('',#4880,#4858,#4890,.T.); +#4890 = LINE('',#4891,#4892); +#4891 = CARTESIAN_POINT('',(357.,-650.,55.)); +#4892 = VECTOR('',#4893,1.); +#4893 = DIRECTION('',(0.,0.,1.)); +#4894 = FACE_BOUND('',#4895,.T.); +#4895 = EDGE_LOOP('',(#4896,#4906,#4914,#4922)); +#4896 = ORIENTED_EDGE('',*,*,#4897,.F.); +#4897 = EDGE_CURVE('',#4898,#4900,#4902,.T.); +#4898 = VERTEX_POINT('',#4899); +#4899 = CARTESIAN_POINT('',(71.,-650.,1.785E+03)); +#4900 = VERTEX_POINT('',#4901); +#4901 = CARTESIAN_POINT('',(256.,-650.,1.785E+03)); +#4902 = LINE('',#4903,#4904); +#4903 = CARTESIAN_POINT('',(36.,-650.,1.785E+03)); +#4904 = VECTOR('',#4905,1.); +#4905 = DIRECTION('',(1.,0.,-0.)); +#4906 = ORIENTED_EDGE('',*,*,#4907,.T.); +#4907 = EDGE_CURVE('',#4898,#4908,#4910,.T.); +#4908 = VERTEX_POINT('',#4909); +#4909 = CARTESIAN_POINT('',(71.,-650.,1.315E+03)); +#4910 = LINE('',#4911,#4912); +#4911 = CARTESIAN_POINT('',(71.,-650.,685.)); +#4912 = VECTOR('',#4913,1.); +#4913 = DIRECTION('',(-0.,0.,-1.)); +#4914 = ORIENTED_EDGE('',*,*,#4915,.T.); +#4915 = EDGE_CURVE('',#4908,#4916,#4918,.T.); +#4916 = VERTEX_POINT('',#4917); +#4917 = CARTESIAN_POINT('',(256.,-650.,1.315E+03)); +#4918 = LINE('',#4919,#4920); +#4919 = CARTESIAN_POINT('',(36.,-650.,1.315E+03)); +#4920 = VECTOR('',#4921,1.); +#4921 = DIRECTION('',(1.,0.,-0.)); +#4922 = ORIENTED_EDGE('',*,*,#4923,.F.); +#4923 = EDGE_CURVE('',#4900,#4916,#4924,.T.); +#4924 = LINE('',#4925,#4926); +#4925 = CARTESIAN_POINT('',(256.,-650.,685.)); +#4926 = VECTOR('',#4927,1.); +#4927 = DIRECTION('',(-0.,0.,-1.)); +#4928 = PLANE('',#4929); +#4929 = AXIS2_PLACEMENT_3D('',#4930,#4931,#4932); +#4930 = CARTESIAN_POINT('',(1.,-650.,55.)); +#4931 = DIRECTION('',(-0.,1.,0.)); +#4932 = DIRECTION('',(0.,0.,1.)); +#4933 = ADVANCED_FACE('',(#4934),#4945,.F.); +#4934 = FACE_BOUND('',#4935,.F.); +#4935 = EDGE_LOOP('',(#4936,#4937,#4938,#4944)); +#4936 = ORIENTED_EDGE('',*,*,#4726,.F.); +#4937 = ORIENTED_EDGE('',*,*,#4756,.T.); +#4938 = ORIENTED_EDGE('',*,*,#4939,.T.); +#4939 = EDGE_CURVE('',#4757,#4880,#4940,.T.); +#4940 = LINE('',#4941,#4942); +#4941 = CARTESIAN_POINT('',(357.,-686.,55.)); +#4942 = VECTOR('',#4943,1.); +#4943 = DIRECTION('',(-0.,1.,0.)); +#4944 = ORIENTED_EDGE('',*,*,#4879,.F.); +#4945 = PLANE('',#4946); +#4946 = AXIS2_PLACEMENT_3D('',#4947,#4948,#4949); +#4947 = CARTESIAN_POINT('',(1.,-686.,55.)); +#4948 = DIRECTION('',(0.,0.,1.)); +#4949 = DIRECTION('',(1.,0.,-0.)); +#4950 = ADVANCED_FACE('',(#4951),#4957,.T.); +#4951 = FACE_BOUND('',#4952,.T.); +#4952 = EDGE_LOOP('',(#4953,#4954,#4955,#4956)); +#4953 = ORIENTED_EDGE('',*,*,#4773,.F.); +#4954 = ORIENTED_EDGE('',*,*,#4939,.T.); +#4955 = ORIENTED_EDGE('',*,*,#4889,.T.); +#4956 = ORIENTED_EDGE('',*,*,#4857,.F.); +#4957 = PLANE('',#4958); +#4958 = AXIS2_PLACEMENT_3D('',#4959,#4960,#4961); +#4959 = CARTESIAN_POINT('',(357.,-686.,55.)); +#4960 = DIRECTION('',(1.,0.,-0.)); +#4961 = DIRECTION('',(0.,0.,1.)); +#4962 = ADVANCED_FACE('',(#4963),#4988,.T.); +#4963 = FACE_BOUND('',#4964,.T.); +#4964 = EDGE_LOOP('',(#4965,#4973,#4981,#4987)); +#4965 = ORIENTED_EDGE('',*,*,#4966,.F.); +#4966 = EDGE_CURVE('',#4967,#4782,#4969,.T.); +#4967 = VERTEX_POINT('',#4968); +#4968 = CARTESIAN_POINT('',(59.,-690.,1.797E+03)); +#4969 = LINE('',#4970,#4971); +#4970 = CARTESIAN_POINT('',(59.,-690.,1.797E+03)); +#4971 = VECTOR('',#4972,1.); +#4972 = DIRECTION('',(-0.,1.,0.)); +#4973 = ORIENTED_EDGE('',*,*,#4974,.T.); +#4974 = EDGE_CURVE('',#4967,#4975,#4977,.T.); +#4975 = VERTEX_POINT('',#4976); +#4976 = CARTESIAN_POINT('',(268.,-690.,1.797E+03)); +#4977 = LINE('',#4978,#4979); +#4978 = CARTESIAN_POINT('',(59.,-690.,1.797E+03)); +#4979 = VECTOR('',#4980,1.); +#4980 = DIRECTION('',(1.,0.,-0.)); +#4981 = ORIENTED_EDGE('',*,*,#4982,.T.); +#4982 = EDGE_CURVE('',#4975,#4784,#4983,.T.); +#4983 = LINE('',#4984,#4985); +#4984 = CARTESIAN_POINT('',(268.,-690.,1.797E+03)); +#4985 = VECTOR('',#4986,1.); +#4986 = DIRECTION('',(-0.,1.,0.)); +#4987 = ORIENTED_EDGE('',*,*,#4781,.F.); +#4988 = PLANE('',#4989); +#4989 = AXIS2_PLACEMENT_3D('',#4990,#4991,#4992); +#4990 = CARTESIAN_POINT('',(59.,-690.,1.797E+03)); +#4991 = DIRECTION('',(0.,0.,1.)); +#4992 = DIRECTION('',(1.,0.,-0.)); +#4993 = ADVANCED_FACE('',(#4994),#5019,.F.); +#4994 = FACE_BOUND('',#4995,.F.); +#4995 = EDGE_LOOP('',(#4996,#5004,#5012,#5018)); +#4996 = ORIENTED_EDGE('',*,*,#4997,.F.); +#4997 = EDGE_CURVE('',#4998,#4792,#5000,.T.); +#4998 = VERTEX_POINT('',#4999); +#4999 = CARTESIAN_POINT('',(59.,-690.,1.303E+03)); +#5000 = LINE('',#5001,#5002); +#5001 = CARTESIAN_POINT('',(59.,-690.,1.303E+03)); +#5002 = VECTOR('',#5003,1.); +#5003 = DIRECTION('',(-0.,1.,0.)); +#5004 = ORIENTED_EDGE('',*,*,#5005,.T.); +#5005 = EDGE_CURVE('',#4998,#5006,#5008,.T.); +#5006 = VERTEX_POINT('',#5007); +#5007 = CARTESIAN_POINT('',(268.,-690.,1.303E+03)); +#5008 = LINE('',#5009,#5010); +#5009 = CARTESIAN_POINT('',(59.,-690.,1.303E+03)); +#5010 = VECTOR('',#5011,1.); +#5011 = DIRECTION('',(1.,0.,-0.)); +#5012 = ORIENTED_EDGE('',*,*,#5013,.T.); +#5013 = EDGE_CURVE('',#5006,#4800,#5014,.T.); +#5014 = LINE('',#5015,#5016); +#5015 = CARTESIAN_POINT('',(268.,-690.,1.303E+03)); +#5016 = VECTOR('',#5017,1.); +#5017 = DIRECTION('',(-0.,1.,0.)); +#5018 = ORIENTED_EDGE('',*,*,#4799,.F.); +#5019 = PLANE('',#5020); +#5020 = AXIS2_PLACEMENT_3D('',#5021,#5022,#5023); +#5021 = CARTESIAN_POINT('',(59.,-690.,1.303E+03)); +#5022 = DIRECTION('',(0.,0.,1.)); +#5023 = DIRECTION('',(1.,0.,-0.)); +#5024 = ADVANCED_FACE('',(#5025),#5050,.T.); +#5025 = FACE_BOUND('',#5026,.T.); +#5026 = EDGE_LOOP('',(#5027,#5035,#5043,#5049)); +#5027 = ORIENTED_EDGE('',*,*,#5028,.F.); +#5028 = EDGE_CURVE('',#5029,#4816,#5031,.T.); +#5029 = VERTEX_POINT('',#5030); +#5030 = CARTESIAN_POINT('',(315.,-698.,1.2286E+03)); +#5031 = LINE('',#5032,#5033); +#5032 = CARTESIAN_POINT('',(315.,-698.,1.2286E+03)); +#5033 = VECTOR('',#5034,1.); +#5034 = DIRECTION('',(-0.,1.,0.)); +#5035 = ORIENTED_EDGE('',*,*,#5036,.T.); +#5036 = EDGE_CURVE('',#5029,#5037,#5039,.T.); +#5037 = VERTEX_POINT('',#5038); +#5038 = CARTESIAN_POINT('',(331.,-698.,1.2286E+03)); +#5039 = LINE('',#5040,#5041); +#5040 = CARTESIAN_POINT('',(315.,-698.,1.2286E+03)); +#5041 = VECTOR('',#5042,1.); +#5042 = DIRECTION('',(1.,0.,-0.)); +#5043 = ORIENTED_EDGE('',*,*,#5044,.T.); +#5044 = EDGE_CURVE('',#5037,#4818,#5045,.T.); +#5045 = LINE('',#5046,#5047); +#5046 = CARTESIAN_POINT('',(331.,-698.,1.2286E+03)); +#5047 = VECTOR('',#5048,1.); +#5048 = DIRECTION('',(-0.,1.,0.)); +#5049 = ORIENTED_EDGE('',*,*,#4815,.F.); +#5050 = PLANE('',#5051); +#5051 = AXIS2_PLACEMENT_3D('',#5052,#5053,#5054); +#5052 = CARTESIAN_POINT('',(315.,-698.,1.2286E+03)); +#5053 = DIRECTION('',(0.,0.,1.)); +#5054 = DIRECTION('',(1.,0.,-0.)); +#5055 = ADVANCED_FACE('',(#5056),#5074,.F.); +#5056 = FACE_BOUND('',#5057,.F.); +#5057 = EDGE_LOOP('',(#5058,#5059,#5067,#5073)); +#5058 = ORIENTED_EDGE('',*,*,#5028,.F.); +#5059 = ORIENTED_EDGE('',*,*,#5060,.F.); +#5060 = EDGE_CURVE('',#5061,#5029,#5063,.T.); +#5061 = VERTEX_POINT('',#5062); +#5062 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5063 = LINE('',#5064,#5065); +#5064 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5065 = VECTOR('',#5066,1.); +#5066 = DIRECTION('',(0.,0.,1.)); +#5067 = ORIENTED_EDGE('',*,*,#5068,.T.); +#5068 = EDGE_CURVE('',#5061,#4826,#5069,.T.); +#5069 = LINE('',#5070,#5071); +#5070 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5071 = VECTOR('',#5072,1.); +#5072 = DIRECTION('',(-0.,1.,0.)); +#5073 = ORIENTED_EDGE('',*,*,#4825,.F.); +#5074 = PLANE('',#5075); +#5075 = AXIS2_PLACEMENT_3D('',#5076,#5077,#5078); +#5076 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5077 = DIRECTION('',(1.,0.,-0.)); +#5078 = DIRECTION('',(0.,0.,1.)); +#5079 = ADVANCED_FACE('',(#5080),#5098,.T.); +#5080 = FACE_BOUND('',#5081,.T.); +#5081 = EDGE_LOOP('',(#5082,#5083,#5091,#5097)); +#5082 = ORIENTED_EDGE('',*,*,#5044,.F.); +#5083 = ORIENTED_EDGE('',*,*,#5084,.F.); +#5084 = EDGE_CURVE('',#5085,#5037,#5087,.T.); +#5085 = VERTEX_POINT('',#5086); +#5086 = CARTESIAN_POINT('',(331.,-698.,1.1086E+03)); +#5087 = LINE('',#5088,#5089); +#5088 = CARTESIAN_POINT('',(331.,-698.,1.1086E+03)); +#5089 = VECTOR('',#5090,1.); +#5090 = DIRECTION('',(0.,0.,1.)); +#5091 = ORIENTED_EDGE('',*,*,#5092,.T.); +#5092 = EDGE_CURVE('',#5085,#4834,#5093,.T.); +#5093 = LINE('',#5094,#5095); +#5094 = CARTESIAN_POINT('',(331.,-698.,1.1086E+03)); +#5095 = VECTOR('',#5096,1.); +#5096 = DIRECTION('',(-0.,1.,0.)); +#5097 = ORIENTED_EDGE('',*,*,#4841,.F.); +#5098 = PLANE('',#5099); +#5099 = AXIS2_PLACEMENT_3D('',#5100,#5101,#5102); +#5100 = CARTESIAN_POINT('',(331.,-698.,1.1086E+03)); +#5101 = DIRECTION('',(1.,0.,-0.)); +#5102 = DIRECTION('',(0.,0.,1.)); +#5103 = ADVANCED_FACE('',(#5104),#5115,.F.); +#5104 = FACE_BOUND('',#5105,.F.); +#5105 = EDGE_LOOP('',(#5106,#5107,#5113,#5114)); +#5106 = ORIENTED_EDGE('',*,*,#5068,.F.); +#5107 = ORIENTED_EDGE('',*,*,#5108,.T.); +#5108 = EDGE_CURVE('',#5061,#5085,#5109,.T.); +#5109 = LINE('',#5110,#5111); +#5110 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5111 = VECTOR('',#5112,1.); +#5112 = DIRECTION('',(1.,0.,-0.)); +#5113 = ORIENTED_EDGE('',*,*,#5092,.T.); +#5114 = ORIENTED_EDGE('',*,*,#4833,.F.); +#5115 = PLANE('',#5116); +#5116 = AXIS2_PLACEMENT_3D('',#5117,#5118,#5119); +#5117 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5118 = DIRECTION('',(0.,0.,1.)); +#5119 = DIRECTION('',(1.,0.,-0.)); +#5120 = ADVANCED_FACE('',(#5121),#5127,.F.); +#5121 = FACE_BOUND('',#5122,.F.); +#5122 = EDGE_LOOP('',(#5123,#5124,#5125,#5126)); +#5123 = ORIENTED_EDGE('',*,*,#5108,.F.); +#5124 = ORIENTED_EDGE('',*,*,#5060,.T.); +#5125 = ORIENTED_EDGE('',*,*,#5036,.T.); +#5126 = ORIENTED_EDGE('',*,*,#5084,.F.); +#5127 = PLANE('',#5128); +#5128 = AXIS2_PLACEMENT_3D('',#5129,#5130,#5131); +#5129 = CARTESIAN_POINT('',(315.,-698.,1.1086E+03)); +#5130 = DIRECTION('',(-0.,1.,0.)); +#5131 = DIRECTION('',(0.,0.,1.)); +#5132 = ADVANCED_FACE('',(#5133),#5144,.T.); +#5133 = FACE_BOUND('',#5134,.T.); +#5134 = EDGE_LOOP('',(#5135,#5136,#5142,#5143)); +#5135 = ORIENTED_EDGE('',*,*,#4982,.F.); +#5136 = ORIENTED_EDGE('',*,*,#5137,.F.); +#5137 = EDGE_CURVE('',#5006,#4975,#5138,.T.); +#5138 = LINE('',#5139,#5140); +#5139 = CARTESIAN_POINT('',(268.,-690.,1.785E+03)); +#5140 = VECTOR('',#5141,1.); +#5141 = DIRECTION('',(0.,0.,1.)); +#5142 = ORIENTED_EDGE('',*,*,#5013,.T.); +#5143 = ORIENTED_EDGE('',*,*,#4807,.F.); +#5144 = PLANE('',#5145); +#5145 = AXIS2_PLACEMENT_3D('',#5146,#5147,#5148); +#5146 = CARTESIAN_POINT('',(268.,-688.,1.55E+03)); +#5147 = DIRECTION('',(1.,0.,0.)); +#5148 = DIRECTION('',(-0.,0.,1.)); +#5149 = ADVANCED_FACE('',(#5150),#5161,.T.); +#5150 = FACE_BOUND('',#5151,.T.); +#5151 = EDGE_LOOP('',(#5152,#5153,#5154,#5160)); +#5152 = ORIENTED_EDGE('',*,*,#4791,.T.); +#5153 = ORIENTED_EDGE('',*,*,#4997,.F.); +#5154 = ORIENTED_EDGE('',*,*,#5155,.T.); +#5155 = EDGE_CURVE('',#4998,#4967,#5156,.T.); +#5156 = LINE('',#5157,#5158); +#5157 = CARTESIAN_POINT('',(59.,-690.,1.303E+03)); +#5158 = VECTOR('',#5159,1.); +#5159 = DIRECTION('',(0.,0.,1.)); +#5160 = ORIENTED_EDGE('',*,*,#4966,.T.); +#5161 = PLANE('',#5162); +#5162 = AXIS2_PLACEMENT_3D('',#5163,#5164,#5165); +#5163 = CARTESIAN_POINT('',(59.,-688.,1.55E+03)); +#5164 = DIRECTION('',(-1.,-0.,-0.)); +#5165 = DIRECTION('',(0.,0.,-1.)); +#5166 = ADVANCED_FACE('',(#5167),#5192,.T.); +#5167 = FACE_BOUND('',#5168,.T.); +#5168 = EDGE_LOOP('',(#5169,#5170,#5178,#5186)); +#5169 = ORIENTED_EDGE('',*,*,#4897,.T.); +#5170 = ORIENTED_EDGE('',*,*,#5171,.F.); +#5171 = EDGE_CURVE('',#5172,#4900,#5174,.T.); +#5172 = VERTEX_POINT('',#5173); +#5173 = CARTESIAN_POINT('',(256.,-690.,1.785E+03)); +#5174 = LINE('',#5175,#5176); +#5175 = CARTESIAN_POINT('',(256.,-689.,1.785E+03)); +#5176 = VECTOR('',#5177,1.); +#5177 = DIRECTION('',(-0.,1.,0.)); +#5178 = ORIENTED_EDGE('',*,*,#5179,.F.); +#5179 = EDGE_CURVE('',#5180,#5172,#5182,.T.); +#5180 = VERTEX_POINT('',#5181); +#5181 = CARTESIAN_POINT('',(71.,-690.,1.785E+03)); +#5182 = LINE('',#5183,#5184); +#5183 = CARTESIAN_POINT('',(59.,-690.,1.785E+03)); +#5184 = VECTOR('',#5185,1.); +#5185 = DIRECTION('',(1.,0.,-0.)); +#5186 = ORIENTED_EDGE('',*,*,#5187,.T.); +#5187 = EDGE_CURVE('',#5180,#4898,#5188,.T.); +#5188 = LINE('',#5189,#5190); +#5189 = CARTESIAN_POINT('',(71.,-690.,1.785E+03)); +#5190 = VECTOR('',#5191,1.); +#5191 = DIRECTION('',(-0.,1.,0.)); +#5192 = PLANE('',#5193); +#5193 = AXIS2_PLACEMENT_3D('',#5194,#5195,#5196); +#5194 = CARTESIAN_POINT('',(163.5,-670.,1.785E+03)); +#5195 = DIRECTION('',(-0.,-0.,-1.)); +#5196 = DIRECTION('',(-1.,0.,0.)); +#5197 = ADVANCED_FACE('',(#5198),#5216,.T.); +#5198 = FACE_BOUND('',#5199,.T.); +#5199 = EDGE_LOOP('',(#5200,#5201,#5202,#5210)); +#5200 = ORIENTED_EDGE('',*,*,#5171,.T.); +#5201 = ORIENTED_EDGE('',*,*,#4923,.T.); +#5202 = ORIENTED_EDGE('',*,*,#5203,.F.); +#5203 = EDGE_CURVE('',#5204,#4916,#5206,.T.); +#5204 = VERTEX_POINT('',#5205); +#5205 = CARTESIAN_POINT('',(256.,-690.,1.315E+03)); +#5206 = LINE('',#5207,#5208); +#5207 = CARTESIAN_POINT('',(256.,-689.,1.315E+03)); +#5208 = VECTOR('',#5209,1.); +#5209 = DIRECTION('',(-0.,1.,0.)); +#5210 = ORIENTED_EDGE('',*,*,#5211,.T.); +#5211 = EDGE_CURVE('',#5204,#5172,#5212,.T.); +#5212 = LINE('',#5213,#5214); +#5213 = CARTESIAN_POINT('',(256.,-690.,1.315E+03)); +#5214 = VECTOR('',#5215,1.); +#5215 = DIRECTION('',(0.,0.,1.)); +#5216 = PLANE('',#5217); +#5217 = AXIS2_PLACEMENT_3D('',#5218,#5219,#5220); +#5218 = CARTESIAN_POINT('',(256.,-670.,1.55E+03)); +#5219 = DIRECTION('',(-1.,-0.,-0.)); +#5220 = DIRECTION('',(0.,0.,-1.)); +#5221 = ADVANCED_FACE('',(#5222),#5240,.T.); +#5222 = FACE_BOUND('',#5223,.T.); +#5223 = EDGE_LOOP('',(#5224,#5232,#5238,#5239)); +#5224 = ORIENTED_EDGE('',*,*,#5225,.F.); +#5225 = EDGE_CURVE('',#5226,#4908,#5228,.T.); +#5226 = VERTEX_POINT('',#5227); +#5227 = CARTESIAN_POINT('',(71.,-690.,1.315E+03)); +#5228 = LINE('',#5229,#5230); +#5229 = CARTESIAN_POINT('',(71.,-689.,1.315E+03)); +#5230 = VECTOR('',#5231,1.); +#5231 = DIRECTION('',(-0.,1.,0.)); +#5232 = ORIENTED_EDGE('',*,*,#5233,.T.); +#5233 = EDGE_CURVE('',#5226,#5204,#5234,.T.); +#5234 = LINE('',#5235,#5236); +#5235 = CARTESIAN_POINT('',(59.,-690.,1.315E+03)); +#5236 = VECTOR('',#5237,1.); +#5237 = DIRECTION('',(1.,0.,-0.)); +#5238 = ORIENTED_EDGE('',*,*,#5203,.T.); +#5239 = ORIENTED_EDGE('',*,*,#4915,.F.); +#5240 = PLANE('',#5241); +#5241 = AXIS2_PLACEMENT_3D('',#5242,#5243,#5244); +#5242 = CARTESIAN_POINT('',(163.5,-670.,1.315E+03)); +#5243 = DIRECTION('',(0.,0.,1.)); +#5244 = DIRECTION('',(1.,0.,-0.)); +#5245 = ADVANCED_FACE('',(#5246),#5257,.T.); +#5246 = FACE_BOUND('',#5247,.T.); +#5247 = EDGE_LOOP('',(#5248,#5249,#5255,#5256)); +#5248 = ORIENTED_EDGE('',*,*,#5187,.F.); +#5249 = ORIENTED_EDGE('',*,*,#5250,.F.); +#5250 = EDGE_CURVE('',#5226,#5180,#5251,.T.); +#5251 = LINE('',#5252,#5253); +#5252 = CARTESIAN_POINT('',(71.,-690.,1.315E+03)); +#5253 = VECTOR('',#5254,1.); +#5254 = DIRECTION('',(0.,0.,1.)); +#5255 = ORIENTED_EDGE('',*,*,#5225,.T.); +#5256 = ORIENTED_EDGE('',*,*,#4907,.F.); +#5257 = PLANE('',#5258); +#5258 = AXIS2_PLACEMENT_3D('',#5259,#5260,#5261); +#5259 = CARTESIAN_POINT('',(71.,-670.,1.55E+03)); +#5260 = DIRECTION('',(1.,0.,0.)); +#5261 = DIRECTION('',(-0.,0.,1.)); +#5262 = ADVANCED_FACE('',(#5263,#5269),#5275,.T.); +#5263 = FACE_BOUND('',#5264,.T.); +#5264 = EDGE_LOOP('',(#5265,#5266,#5267,#5268)); +#5265 = ORIENTED_EDGE('',*,*,#5137,.T.); +#5266 = ORIENTED_EDGE('',*,*,#4974,.F.); +#5267 = ORIENTED_EDGE('',*,*,#5155,.F.); +#5268 = ORIENTED_EDGE('',*,*,#5005,.T.); +#5269 = FACE_BOUND('',#5270,.T.); +#5270 = EDGE_LOOP('',(#5271,#5272,#5273,#5274)); +#5271 = ORIENTED_EDGE('',*,*,#5179,.T.); +#5272 = ORIENTED_EDGE('',*,*,#5211,.F.); +#5273 = ORIENTED_EDGE('',*,*,#5233,.F.); +#5274 = ORIENTED_EDGE('',*,*,#5250,.T.); +#5275 = PLANE('',#5276); +#5276 = AXIS2_PLACEMENT_3D('',#5277,#5278,#5279); +#5277 = CARTESIAN_POINT('',(163.5,-690.,1.55E+03)); +#5278 = DIRECTION('',(-0.,-1.,-0.)); +#5279 = DIRECTION('',(0.,0.,-1.)); +#5280 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5284)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5281,#5282,#5283)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#5281 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5282 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5283 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5284 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5281, + 'distance_accuracy_value','confusion accuracy'); +#5285 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5286,#5288); +#5286 = ( REPRESENTATION_RELATIONSHIP('','',#4709,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5287) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#5287 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35); +#5288 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5289); +#5289 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','NAU03_Front_Right_Door','', + #5,#4704,$); +#5290 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#4706)); +#5291 = SHAPE_DEFINITION_REPRESENTATION(#5292,#5298); +#5292 = PRODUCT_DEFINITION_SHAPE('','',#5293); +#5293 = PRODUCT_DEFINITION('design','',#5294,#5297); +#5294 = PRODUCT_DEFINITION_FORMATION('','',#5295); +#5295 = PRODUCT('NAU03_Top_Roof','NAU03_Top_Roof','',(#5296)); +#5296 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5297 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5298 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5299),#5733); +#5299 = MANIFOLD_SOLID_BREP('',#5300); +#5300 = CLOSED_SHELL('',(#5301,#5341,#5372,#5396,#5420,#5505,#5517,#5548 + ,#5572,#5596,#5613,#5644,#5668,#5692,#5709,#5721)); +#5301 = ADVANCED_FACE('',(#5302),#5336,.F.); +#5302 = FACE_BOUND('',#5303,.F.); +#5303 = EDGE_LOOP('',(#5304,#5314,#5322,#5330)); +#5304 = ORIENTED_EDGE('',*,*,#5305,.F.); +#5305 = EDGE_CURVE('',#5306,#5308,#5310,.T.); +#5306 = VERTEX_POINT('',#5307); +#5307 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5308 = VERTEX_POINT('',#5309); +#5309 = CARTESIAN_POINT('',(-410.,-700.,2.375E+03)); +#5310 = LINE('',#5311,#5312); +#5311 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5312 = VECTOR('',#5313,1.); +#5313 = DIRECTION('',(0.,0.,1.)); +#5314 = ORIENTED_EDGE('',*,*,#5315,.T.); +#5315 = EDGE_CURVE('',#5306,#5316,#5318,.T.); +#5316 = VERTEX_POINT('',#5317); +#5317 = CARTESIAN_POINT('',(-410.,700.,2.3E+03)); +#5318 = LINE('',#5319,#5320); +#5319 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5320 = VECTOR('',#5321,1.); +#5321 = DIRECTION('',(-0.,1.,0.)); +#5322 = ORIENTED_EDGE('',*,*,#5323,.T.); +#5323 = EDGE_CURVE('',#5316,#5324,#5326,.T.); +#5324 = VERTEX_POINT('',#5325); +#5325 = CARTESIAN_POINT('',(-410.,700.,2.375E+03)); +#5326 = LINE('',#5327,#5328); +#5327 = CARTESIAN_POINT('',(-410.,700.,2.3E+03)); +#5328 = VECTOR('',#5329,1.); +#5329 = DIRECTION('',(0.,0.,1.)); +#5330 = ORIENTED_EDGE('',*,*,#5331,.F.); +#5331 = EDGE_CURVE('',#5308,#5324,#5332,.T.); +#5332 = LINE('',#5333,#5334); +#5333 = CARTESIAN_POINT('',(-410.,-700.,2.375E+03)); +#5334 = VECTOR('',#5335,1.); +#5335 = DIRECTION('',(-0.,1.,0.)); +#5336 = PLANE('',#5337); +#5337 = AXIS2_PLACEMENT_3D('',#5338,#5339,#5340); +#5338 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5339 = DIRECTION('',(1.,0.,-0.)); +#5340 = DIRECTION('',(0.,0.,1.)); +#5341 = ADVANCED_FACE('',(#5342),#5367,.F.); +#5342 = FACE_BOUND('',#5343,.F.); +#5343 = EDGE_LOOP('',(#5344,#5352,#5353,#5361)); +#5344 = ORIENTED_EDGE('',*,*,#5345,.F.); +#5345 = EDGE_CURVE('',#5306,#5346,#5348,.T.); +#5346 = VERTEX_POINT('',#5347); +#5347 = CARTESIAN_POINT('',(410.,-700.,2.3E+03)); +#5348 = LINE('',#5349,#5350); +#5349 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5350 = VECTOR('',#5351,1.); +#5351 = DIRECTION('',(1.,0.,-0.)); +#5352 = ORIENTED_EDGE('',*,*,#5305,.T.); +#5353 = ORIENTED_EDGE('',*,*,#5354,.T.); +#5354 = EDGE_CURVE('',#5308,#5355,#5357,.T.); +#5355 = VERTEX_POINT('',#5356); +#5356 = CARTESIAN_POINT('',(410.,-700.,2.375E+03)); +#5357 = LINE('',#5358,#5359); +#5358 = CARTESIAN_POINT('',(-410.,-700.,2.375E+03)); +#5359 = VECTOR('',#5360,1.); +#5360 = DIRECTION('',(1.,0.,-0.)); +#5361 = ORIENTED_EDGE('',*,*,#5362,.F.); +#5362 = EDGE_CURVE('',#5346,#5355,#5363,.T.); +#5363 = LINE('',#5364,#5365); +#5364 = CARTESIAN_POINT('',(410.,-700.,2.3E+03)); +#5365 = VECTOR('',#5366,1.); +#5366 = DIRECTION('',(0.,0.,1.)); +#5367 = PLANE('',#5368); +#5368 = AXIS2_PLACEMENT_3D('',#5369,#5370,#5371); +#5369 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5370 = DIRECTION('',(-0.,1.,0.)); +#5371 = DIRECTION('',(0.,0.,1.)); +#5372 = ADVANCED_FACE('',(#5373),#5391,.T.); +#5373 = FACE_BOUND('',#5374,.T.); +#5374 = EDGE_LOOP('',(#5375,#5376,#5377,#5385)); +#5375 = ORIENTED_EDGE('',*,*,#5331,.F.); +#5376 = ORIENTED_EDGE('',*,*,#5354,.T.); +#5377 = ORIENTED_EDGE('',*,*,#5378,.T.); +#5378 = EDGE_CURVE('',#5355,#5379,#5381,.T.); +#5379 = VERTEX_POINT('',#5380); +#5380 = CARTESIAN_POINT('',(410.,700.,2.375E+03)); +#5381 = LINE('',#5382,#5383); +#5382 = CARTESIAN_POINT('',(410.,-700.,2.375E+03)); +#5383 = VECTOR('',#5384,1.); +#5384 = DIRECTION('',(-0.,1.,0.)); +#5385 = ORIENTED_EDGE('',*,*,#5386,.F.); +#5386 = EDGE_CURVE('',#5324,#5379,#5387,.T.); +#5387 = LINE('',#5388,#5389); +#5388 = CARTESIAN_POINT('',(-410.,700.,2.375E+03)); +#5389 = VECTOR('',#5390,1.); +#5390 = DIRECTION('',(1.,0.,-0.)); +#5391 = PLANE('',#5392); +#5392 = AXIS2_PLACEMENT_3D('',#5393,#5394,#5395); +#5393 = CARTESIAN_POINT('',(-410.,-700.,2.375E+03)); +#5394 = DIRECTION('',(0.,0.,1.)); +#5395 = DIRECTION('',(1.,0.,-0.)); +#5396 = ADVANCED_FACE('',(#5397),#5415,.T.); +#5397 = FACE_BOUND('',#5398,.T.); +#5398 = EDGE_LOOP('',(#5399,#5407,#5408,#5409)); +#5399 = ORIENTED_EDGE('',*,*,#5400,.F.); +#5400 = EDGE_CURVE('',#5316,#5401,#5403,.T.); +#5401 = VERTEX_POINT('',#5402); +#5402 = CARTESIAN_POINT('',(410.,700.,2.3E+03)); +#5403 = LINE('',#5404,#5405); +#5404 = CARTESIAN_POINT('',(-410.,700.,2.3E+03)); +#5405 = VECTOR('',#5406,1.); +#5406 = DIRECTION('',(1.,0.,-0.)); +#5407 = ORIENTED_EDGE('',*,*,#5323,.T.); +#5408 = ORIENTED_EDGE('',*,*,#5386,.T.); +#5409 = ORIENTED_EDGE('',*,*,#5410,.F.); +#5410 = EDGE_CURVE('',#5401,#5379,#5411,.T.); +#5411 = LINE('',#5412,#5413); +#5412 = CARTESIAN_POINT('',(410.,700.,2.3E+03)); +#5413 = VECTOR('',#5414,1.); +#5414 = DIRECTION('',(0.,0.,1.)); +#5415 = PLANE('',#5416); +#5416 = AXIS2_PLACEMENT_3D('',#5417,#5418,#5419); +#5417 = CARTESIAN_POINT('',(-410.,700.,2.3E+03)); +#5418 = DIRECTION('',(-0.,1.,0.)); +#5419 = DIRECTION('',(0.,0.,1.)); +#5420 = ADVANCED_FACE('',(#5421,#5432,#5466),#5500,.F.); +#5421 = FACE_BOUND('',#5422,.F.); +#5422 = EDGE_LOOP('',(#5423,#5424,#5425,#5431)); +#5423 = ORIENTED_EDGE('',*,*,#5315,.F.); +#5424 = ORIENTED_EDGE('',*,*,#5345,.T.); +#5425 = ORIENTED_EDGE('',*,*,#5426,.T.); +#5426 = EDGE_CURVE('',#5346,#5401,#5427,.T.); +#5427 = LINE('',#5428,#5429); +#5428 = CARTESIAN_POINT('',(410.,-700.,2.3E+03)); +#5429 = VECTOR('',#5430,1.); +#5430 = DIRECTION('',(-0.,1.,0.)); +#5431 = ORIENTED_EDGE('',*,*,#5400,.F.); +#5432 = FACE_BOUND('',#5433,.F.); +#5433 = EDGE_LOOP('',(#5434,#5444,#5452,#5460)); +#5434 = ORIENTED_EDGE('',*,*,#5435,.F.); +#5435 = EDGE_CURVE('',#5436,#5438,#5440,.T.); +#5436 = VERTEX_POINT('',#5437); +#5437 = CARTESIAN_POINT('',(-390.,-660.,2.3E+03)); +#5438 = VERTEX_POINT('',#5439); +#5439 = CARTESIAN_POINT('',(390.,-660.,2.3E+03)); +#5440 = LINE('',#5441,#5442); +#5441 = CARTESIAN_POINT('',(-390.,-660.,2.3E+03)); +#5442 = VECTOR('',#5443,1.); +#5443 = DIRECTION('',(1.,0.,-0.)); +#5444 = ORIENTED_EDGE('',*,*,#5445,.T.); +#5445 = EDGE_CURVE('',#5436,#5446,#5448,.T.); +#5446 = VERTEX_POINT('',#5447); +#5447 = CARTESIAN_POINT('',(-390.,-602.,2.3E+03)); +#5448 = LINE('',#5449,#5450); +#5449 = CARTESIAN_POINT('',(-390.,-660.,2.3E+03)); +#5450 = VECTOR('',#5451,1.); +#5451 = DIRECTION('',(-0.,1.,0.)); +#5452 = ORIENTED_EDGE('',*,*,#5453,.T.); +#5453 = EDGE_CURVE('',#5446,#5454,#5456,.T.); +#5454 = VERTEX_POINT('',#5455); +#5455 = CARTESIAN_POINT('',(390.,-602.,2.3E+03)); +#5456 = LINE('',#5457,#5458); +#5457 = CARTESIAN_POINT('',(-390.,-602.,2.3E+03)); +#5458 = VECTOR('',#5459,1.); +#5459 = DIRECTION('',(1.,0.,-0.)); +#5460 = ORIENTED_EDGE('',*,*,#5461,.F.); +#5461 = EDGE_CURVE('',#5438,#5454,#5462,.T.); +#5462 = LINE('',#5463,#5464); +#5463 = CARTESIAN_POINT('',(390.,-660.,2.3E+03)); +#5464 = VECTOR('',#5465,1.); +#5465 = DIRECTION('',(-0.,1.,0.)); +#5466 = FACE_BOUND('',#5467,.F.); +#5467 = EDGE_LOOP('',(#5468,#5478,#5486,#5494)); +#5468 = ORIENTED_EDGE('',*,*,#5469,.F.); +#5469 = EDGE_CURVE('',#5470,#5472,#5474,.T.); +#5470 = VERTEX_POINT('',#5471); +#5471 = CARTESIAN_POINT('',(-390.,602.,2.3E+03)); +#5472 = VERTEX_POINT('',#5473); +#5473 = CARTESIAN_POINT('',(390.,602.,2.3E+03)); +#5474 = LINE('',#5475,#5476); +#5475 = CARTESIAN_POINT('',(-390.,602.,2.3E+03)); +#5476 = VECTOR('',#5477,1.); +#5477 = DIRECTION('',(1.,0.,-0.)); +#5478 = ORIENTED_EDGE('',*,*,#5479,.T.); +#5479 = EDGE_CURVE('',#5470,#5480,#5482,.T.); +#5480 = VERTEX_POINT('',#5481); +#5481 = CARTESIAN_POINT('',(-390.,660.,2.3E+03)); +#5482 = LINE('',#5483,#5484); +#5483 = CARTESIAN_POINT('',(-390.,602.,2.3E+03)); +#5484 = VECTOR('',#5485,1.); +#5485 = DIRECTION('',(-0.,1.,0.)); +#5486 = ORIENTED_EDGE('',*,*,#5487,.T.); +#5487 = EDGE_CURVE('',#5480,#5488,#5490,.T.); +#5488 = VERTEX_POINT('',#5489); +#5489 = CARTESIAN_POINT('',(390.,660.,2.3E+03)); +#5490 = LINE('',#5491,#5492); +#5491 = CARTESIAN_POINT('',(-390.,660.,2.3E+03)); +#5492 = VECTOR('',#5493,1.); +#5493 = DIRECTION('',(1.,0.,-0.)); +#5494 = ORIENTED_EDGE('',*,*,#5495,.F.); +#5495 = EDGE_CURVE('',#5472,#5488,#5496,.T.); +#5496 = LINE('',#5497,#5498); +#5497 = CARTESIAN_POINT('',(390.,602.,2.3E+03)); +#5498 = VECTOR('',#5499,1.); +#5499 = DIRECTION('',(-0.,1.,0.)); +#5500 = PLANE('',#5501); +#5501 = AXIS2_PLACEMENT_3D('',#5502,#5503,#5504); +#5502 = CARTESIAN_POINT('',(-410.,-700.,2.3E+03)); +#5503 = DIRECTION('',(0.,0.,1.)); +#5504 = DIRECTION('',(1.,0.,-0.)); +#5505 = ADVANCED_FACE('',(#5506),#5512,.T.); +#5506 = FACE_BOUND('',#5507,.T.); +#5507 = EDGE_LOOP('',(#5508,#5509,#5510,#5511)); +#5508 = ORIENTED_EDGE('',*,*,#5362,.F.); +#5509 = ORIENTED_EDGE('',*,*,#5426,.T.); +#5510 = ORIENTED_EDGE('',*,*,#5410,.T.); +#5511 = ORIENTED_EDGE('',*,*,#5378,.F.); +#5512 = PLANE('',#5513); +#5513 = AXIS2_PLACEMENT_3D('',#5514,#5515,#5516); +#5514 = CARTESIAN_POINT('',(410.,-700.,2.3E+03)); +#5515 = DIRECTION('',(1.,0.,-0.)); +#5516 = DIRECTION('',(0.,0.,1.)); +#5517 = ADVANCED_FACE('',(#5518),#5543,.F.); +#5518 = FACE_BOUND('',#5519,.F.); +#5519 = EDGE_LOOP('',(#5520,#5530,#5536,#5537)); +#5520 = ORIENTED_EDGE('',*,*,#5521,.F.); +#5521 = EDGE_CURVE('',#5522,#5524,#5526,.T.); +#5522 = VERTEX_POINT('',#5523); +#5523 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5524 = VERTEX_POINT('',#5525); +#5525 = CARTESIAN_POINT('',(390.,-660.,2.255E+03)); +#5526 = LINE('',#5527,#5528); +#5527 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5528 = VECTOR('',#5529,1.); +#5529 = DIRECTION('',(1.,0.,-0.)); +#5530 = ORIENTED_EDGE('',*,*,#5531,.T.); +#5531 = EDGE_CURVE('',#5522,#5436,#5532,.T.); +#5532 = LINE('',#5533,#5534); +#5533 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5534 = VECTOR('',#5535,1.); +#5535 = DIRECTION('',(0.,0.,1.)); +#5536 = ORIENTED_EDGE('',*,*,#5435,.T.); +#5537 = ORIENTED_EDGE('',*,*,#5538,.F.); +#5538 = EDGE_CURVE('',#5524,#5438,#5539,.T.); +#5539 = LINE('',#5540,#5541); +#5540 = CARTESIAN_POINT('',(390.,-660.,2.255E+03)); +#5541 = VECTOR('',#5542,1.); +#5542 = DIRECTION('',(0.,0.,1.)); +#5543 = PLANE('',#5544); +#5544 = AXIS2_PLACEMENT_3D('',#5545,#5546,#5547); +#5545 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5546 = DIRECTION('',(-0.,1.,0.)); +#5547 = DIRECTION('',(0.,0.,1.)); +#5548 = ADVANCED_FACE('',(#5549),#5567,.F.); +#5549 = FACE_BOUND('',#5550,.F.); +#5550 = EDGE_LOOP('',(#5551,#5552,#5560,#5566)); +#5551 = ORIENTED_EDGE('',*,*,#5531,.F.); +#5552 = ORIENTED_EDGE('',*,*,#5553,.T.); +#5553 = EDGE_CURVE('',#5522,#5554,#5556,.T.); +#5554 = VERTEX_POINT('',#5555); +#5555 = CARTESIAN_POINT('',(-390.,-602.,2.255E+03)); +#5556 = LINE('',#5557,#5558); +#5557 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5558 = VECTOR('',#5559,1.); +#5559 = DIRECTION('',(-0.,1.,0.)); +#5560 = ORIENTED_EDGE('',*,*,#5561,.T.); +#5561 = EDGE_CURVE('',#5554,#5446,#5562,.T.); +#5562 = LINE('',#5563,#5564); +#5563 = CARTESIAN_POINT('',(-390.,-602.,2.255E+03)); +#5564 = VECTOR('',#5565,1.); +#5565 = DIRECTION('',(0.,0.,1.)); +#5566 = ORIENTED_EDGE('',*,*,#5445,.F.); +#5567 = PLANE('',#5568); +#5568 = AXIS2_PLACEMENT_3D('',#5569,#5570,#5571); +#5569 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5570 = DIRECTION('',(1.,0.,-0.)); +#5571 = DIRECTION('',(0.,0.,1.)); +#5572 = ADVANCED_FACE('',(#5573),#5591,.T.); +#5573 = FACE_BOUND('',#5574,.T.); +#5574 = EDGE_LOOP('',(#5575,#5576,#5584,#5590)); +#5575 = ORIENTED_EDGE('',*,*,#5538,.F.); +#5576 = ORIENTED_EDGE('',*,*,#5577,.T.); +#5577 = EDGE_CURVE('',#5524,#5578,#5580,.T.); +#5578 = VERTEX_POINT('',#5579); +#5579 = CARTESIAN_POINT('',(390.,-602.,2.255E+03)); +#5580 = LINE('',#5581,#5582); +#5581 = CARTESIAN_POINT('',(390.,-660.,2.255E+03)); +#5582 = VECTOR('',#5583,1.); +#5583 = DIRECTION('',(-0.,1.,0.)); +#5584 = ORIENTED_EDGE('',*,*,#5585,.T.); +#5585 = EDGE_CURVE('',#5578,#5454,#5586,.T.); +#5586 = LINE('',#5587,#5588); +#5587 = CARTESIAN_POINT('',(390.,-602.,2.255E+03)); +#5588 = VECTOR('',#5589,1.); +#5589 = DIRECTION('',(0.,0.,1.)); +#5590 = ORIENTED_EDGE('',*,*,#5461,.F.); +#5591 = PLANE('',#5592); +#5592 = AXIS2_PLACEMENT_3D('',#5593,#5594,#5595); +#5593 = CARTESIAN_POINT('',(390.,-660.,2.255E+03)); +#5594 = DIRECTION('',(1.,0.,-0.)); +#5595 = DIRECTION('',(0.,0.,1.)); +#5596 = ADVANCED_FACE('',(#5597),#5608,.T.); +#5597 = FACE_BOUND('',#5598,.T.); +#5598 = EDGE_LOOP('',(#5599,#5605,#5606,#5607)); +#5599 = ORIENTED_EDGE('',*,*,#5600,.F.); +#5600 = EDGE_CURVE('',#5554,#5578,#5601,.T.); +#5601 = LINE('',#5602,#5603); +#5602 = CARTESIAN_POINT('',(-390.,-602.,2.255E+03)); +#5603 = VECTOR('',#5604,1.); +#5604 = DIRECTION('',(1.,0.,-0.)); +#5605 = ORIENTED_EDGE('',*,*,#5561,.T.); +#5606 = ORIENTED_EDGE('',*,*,#5453,.T.); +#5607 = ORIENTED_EDGE('',*,*,#5585,.F.); +#5608 = PLANE('',#5609); +#5609 = AXIS2_PLACEMENT_3D('',#5610,#5611,#5612); +#5610 = CARTESIAN_POINT('',(-390.,-602.,2.255E+03)); +#5611 = DIRECTION('',(-0.,1.,0.)); +#5612 = DIRECTION('',(0.,0.,1.)); +#5613 = ADVANCED_FACE('',(#5614),#5639,.F.); +#5614 = FACE_BOUND('',#5615,.F.); +#5615 = EDGE_LOOP('',(#5616,#5626,#5632,#5633)); +#5616 = ORIENTED_EDGE('',*,*,#5617,.F.); +#5617 = EDGE_CURVE('',#5618,#5620,#5622,.T.); +#5618 = VERTEX_POINT('',#5619); +#5619 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5620 = VERTEX_POINT('',#5621); +#5621 = CARTESIAN_POINT('',(390.,602.,2.255E+03)); +#5622 = LINE('',#5623,#5624); +#5623 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5624 = VECTOR('',#5625,1.); +#5625 = DIRECTION('',(1.,0.,-0.)); +#5626 = ORIENTED_EDGE('',*,*,#5627,.T.); +#5627 = EDGE_CURVE('',#5618,#5470,#5628,.T.); +#5628 = LINE('',#5629,#5630); +#5629 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5630 = VECTOR('',#5631,1.); +#5631 = DIRECTION('',(0.,0.,1.)); +#5632 = ORIENTED_EDGE('',*,*,#5469,.T.); +#5633 = ORIENTED_EDGE('',*,*,#5634,.F.); +#5634 = EDGE_CURVE('',#5620,#5472,#5635,.T.); +#5635 = LINE('',#5636,#5637); +#5636 = CARTESIAN_POINT('',(390.,602.,2.255E+03)); +#5637 = VECTOR('',#5638,1.); +#5638 = DIRECTION('',(0.,0.,1.)); +#5639 = PLANE('',#5640); +#5640 = AXIS2_PLACEMENT_3D('',#5641,#5642,#5643); +#5641 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5642 = DIRECTION('',(-0.,1.,0.)); +#5643 = DIRECTION('',(0.,0.,1.)); +#5644 = ADVANCED_FACE('',(#5645),#5663,.T.); +#5645 = FACE_BOUND('',#5646,.T.); +#5646 = EDGE_LOOP('',(#5647,#5648,#5656,#5662)); +#5647 = ORIENTED_EDGE('',*,*,#5634,.F.); +#5648 = ORIENTED_EDGE('',*,*,#5649,.T.); +#5649 = EDGE_CURVE('',#5620,#5650,#5652,.T.); +#5650 = VERTEX_POINT('',#5651); +#5651 = CARTESIAN_POINT('',(390.,660.,2.255E+03)); +#5652 = LINE('',#5653,#5654); +#5653 = CARTESIAN_POINT('',(390.,602.,2.255E+03)); +#5654 = VECTOR('',#5655,1.); +#5655 = DIRECTION('',(-0.,1.,0.)); +#5656 = ORIENTED_EDGE('',*,*,#5657,.T.); +#5657 = EDGE_CURVE('',#5650,#5488,#5658,.T.); +#5658 = LINE('',#5659,#5660); +#5659 = CARTESIAN_POINT('',(390.,660.,2.255E+03)); +#5660 = VECTOR('',#5661,1.); +#5661 = DIRECTION('',(0.,0.,1.)); +#5662 = ORIENTED_EDGE('',*,*,#5495,.F.); +#5663 = PLANE('',#5664); +#5664 = AXIS2_PLACEMENT_3D('',#5665,#5666,#5667); +#5665 = CARTESIAN_POINT('',(390.,602.,2.255E+03)); +#5666 = DIRECTION('',(1.,0.,-0.)); +#5667 = DIRECTION('',(0.,0.,1.)); +#5668 = ADVANCED_FACE('',(#5669),#5687,.T.); +#5669 = FACE_BOUND('',#5670,.T.); +#5670 = EDGE_LOOP('',(#5671,#5679,#5685,#5686)); +#5671 = ORIENTED_EDGE('',*,*,#5672,.F.); +#5672 = EDGE_CURVE('',#5673,#5650,#5675,.T.); +#5673 = VERTEX_POINT('',#5674); +#5674 = CARTESIAN_POINT('',(-390.,660.,2.255E+03)); +#5675 = LINE('',#5676,#5677); +#5676 = CARTESIAN_POINT('',(-390.,660.,2.255E+03)); +#5677 = VECTOR('',#5678,1.); +#5678 = DIRECTION('',(1.,0.,-0.)); +#5679 = ORIENTED_EDGE('',*,*,#5680,.T.); +#5680 = EDGE_CURVE('',#5673,#5480,#5681,.T.); +#5681 = LINE('',#5682,#5683); +#5682 = CARTESIAN_POINT('',(-390.,660.,2.255E+03)); +#5683 = VECTOR('',#5684,1.); +#5684 = DIRECTION('',(0.,0.,1.)); +#5685 = ORIENTED_EDGE('',*,*,#5487,.T.); +#5686 = ORIENTED_EDGE('',*,*,#5657,.F.); +#5687 = PLANE('',#5688); +#5688 = AXIS2_PLACEMENT_3D('',#5689,#5690,#5691); +#5689 = CARTESIAN_POINT('',(-390.,660.,2.255E+03)); +#5690 = DIRECTION('',(-0.,1.,0.)); +#5691 = DIRECTION('',(0.,0.,1.)); +#5692 = ADVANCED_FACE('',(#5693),#5704,.F.); +#5693 = FACE_BOUND('',#5694,.F.); +#5694 = EDGE_LOOP('',(#5695,#5696,#5702,#5703)); +#5695 = ORIENTED_EDGE('',*,*,#5627,.F.); +#5696 = ORIENTED_EDGE('',*,*,#5697,.T.); +#5697 = EDGE_CURVE('',#5618,#5673,#5698,.T.); +#5698 = LINE('',#5699,#5700); +#5699 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5700 = VECTOR('',#5701,1.); +#5701 = DIRECTION('',(-0.,1.,0.)); +#5702 = ORIENTED_EDGE('',*,*,#5680,.T.); +#5703 = ORIENTED_EDGE('',*,*,#5479,.F.); +#5704 = PLANE('',#5705); +#5705 = AXIS2_PLACEMENT_3D('',#5706,#5707,#5708); +#5706 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5707 = DIRECTION('',(1.,0.,-0.)); +#5708 = DIRECTION('',(0.,0.,1.)); +#5709 = ADVANCED_FACE('',(#5710),#5716,.F.); +#5710 = FACE_BOUND('',#5711,.F.); +#5711 = EDGE_LOOP('',(#5712,#5713,#5714,#5715)); +#5712 = ORIENTED_EDGE('',*,*,#5553,.F.); +#5713 = ORIENTED_EDGE('',*,*,#5521,.T.); +#5714 = ORIENTED_EDGE('',*,*,#5577,.T.); +#5715 = ORIENTED_EDGE('',*,*,#5600,.F.); +#5716 = PLANE('',#5717); +#5717 = AXIS2_PLACEMENT_3D('',#5718,#5719,#5720); +#5718 = CARTESIAN_POINT('',(-390.,-660.,2.255E+03)); +#5719 = DIRECTION('',(0.,0.,1.)); +#5720 = DIRECTION('',(1.,0.,-0.)); +#5721 = ADVANCED_FACE('',(#5722),#5728,.F.); +#5722 = FACE_BOUND('',#5723,.F.); +#5723 = EDGE_LOOP('',(#5724,#5725,#5726,#5727)); +#5724 = ORIENTED_EDGE('',*,*,#5697,.F.); +#5725 = ORIENTED_EDGE('',*,*,#5617,.T.); +#5726 = ORIENTED_EDGE('',*,*,#5649,.T.); +#5727 = ORIENTED_EDGE('',*,*,#5672,.F.); +#5728 = PLANE('',#5729); +#5729 = AXIS2_PLACEMENT_3D('',#5730,#5731,#5732); +#5730 = CARTESIAN_POINT('',(-390.,602.,2.255E+03)); +#5731 = DIRECTION('',(0.,0.,1.)); +#5732 = DIRECTION('',(1.,0.,-0.)); +#5733 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#5737)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#5734,#5735,#5736)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#5734 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#5735 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#5736 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#5737 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#5734, + 'distance_accuracy_value','confusion accuracy'); +#5738 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#5739,#5741); +#5739 = ( REPRESENTATION_RELATIONSHIP('','',#5298,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#5740) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#5740 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39); +#5741 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #5742); +#5742 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','NAU03_Top_Roof','',#5,#5293, + $); +#5743 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5295)); +#5744 = SHAPE_DEFINITION_REPRESENTATION(#5745,#5751); +#5745 = PRODUCT_DEFINITION_SHAPE('','',#5746); +#5746 = PRODUCT_DEFINITION('design','',#5747,#5750); +#5747 = PRODUCT_DEFINITION_FORMATION('','',#5748); +#5748 = PRODUCT('NAU03_Bottom_Base','NAU03_Bottom_Base','',(#5749)); +#5749 = PRODUCT_CONTEXT('',#2,'mechanical'); +#5750 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#5751 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#5752),#6262); +#5752 = MANIFOLD_SOLID_BREP('',#5753); +#5753 = CLOSED_SHELL('',(#5754,#5810,#5841,#5865,#5889,#5945,#5974,#6028 + ,#6042,#6075,#6099,#6123,#6140,#6173,#6204,#6221,#6238,#6250)); +#5754 = ADVANCED_FACE('',(#5755),#5805,.F.); +#5755 = FACE_BOUND('',#5756,.F.); +#5756 = EDGE_LOOP('',(#5757,#5767,#5775,#5783,#5791,#5799)); +#5757 = ORIENTED_EDGE('',*,*,#5758,.F.); +#5758 = EDGE_CURVE('',#5759,#5761,#5763,.T.); +#5759 = VERTEX_POINT('',#5760); +#5760 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5761 = VERTEX_POINT('',#5762); +#5762 = CARTESIAN_POINT('',(-392.5,-665.,0.)); +#5763 = LINE('',#5764,#5765); +#5764 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5765 = VECTOR('',#5766,1.); +#5766 = DIRECTION('',(0.,0.,1.)); +#5767 = ORIENTED_EDGE('',*,*,#5768,.T.); +#5768 = EDGE_CURVE('',#5759,#5769,#5771,.T.); +#5769 = VERTEX_POINT('',#5770); +#5770 = CARTESIAN_POINT('',(-392.5,-595.,-110.)); +#5771 = LINE('',#5772,#5773); +#5772 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5773 = VECTOR('',#5774,1.); +#5774 = DIRECTION('',(-0.,1.,0.)); +#5775 = ORIENTED_EDGE('',*,*,#5776,.T.); +#5776 = EDGE_CURVE('',#5769,#5777,#5779,.T.); +#5777 = VERTEX_POINT('',#5778); +#5778 = CARTESIAN_POINT('',(-392.5,595.,-110.)); +#5779 = LINE('',#5780,#5781); +#5780 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5781 = VECTOR('',#5782,1.); +#5782 = DIRECTION('',(-0.,1.,0.)); +#5783 = ORIENTED_EDGE('',*,*,#5784,.T.); +#5784 = EDGE_CURVE('',#5777,#5785,#5787,.T.); +#5785 = VERTEX_POINT('',#5786); +#5786 = CARTESIAN_POINT('',(-392.5,665.,-110.)); +#5787 = LINE('',#5788,#5789); +#5788 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5789 = VECTOR('',#5790,1.); +#5790 = DIRECTION('',(-0.,1.,0.)); +#5791 = ORIENTED_EDGE('',*,*,#5792,.T.); +#5792 = EDGE_CURVE('',#5785,#5793,#5795,.T.); +#5793 = VERTEX_POINT('',#5794); +#5794 = CARTESIAN_POINT('',(-392.5,665.,0.)); +#5795 = LINE('',#5796,#5797); +#5796 = CARTESIAN_POINT('',(-392.5,665.,-110.)); +#5797 = VECTOR('',#5798,1.); +#5798 = DIRECTION('',(0.,0.,1.)); +#5799 = ORIENTED_EDGE('',*,*,#5800,.F.); +#5800 = EDGE_CURVE('',#5761,#5793,#5801,.T.); +#5801 = LINE('',#5802,#5803); +#5802 = CARTESIAN_POINT('',(-392.5,-665.,0.)); +#5803 = VECTOR('',#5804,1.); +#5804 = DIRECTION('',(-0.,1.,0.)); +#5805 = PLANE('',#5806); +#5806 = AXIS2_PLACEMENT_3D('',#5807,#5808,#5809); +#5807 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5808 = DIRECTION('',(1.,0.,-0.)); +#5809 = DIRECTION('',(0.,0.,1.)); +#5810 = ADVANCED_FACE('',(#5811),#5836,.F.); +#5811 = FACE_BOUND('',#5812,.F.); +#5812 = EDGE_LOOP('',(#5813,#5821,#5822,#5830)); +#5813 = ORIENTED_EDGE('',*,*,#5814,.F.); +#5814 = EDGE_CURVE('',#5759,#5815,#5817,.T.); +#5815 = VERTEX_POINT('',#5816); +#5816 = CARTESIAN_POINT('',(392.5,-665.,-110.)); +#5817 = LINE('',#5818,#5819); +#5818 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5819 = VECTOR('',#5820,1.); +#5820 = DIRECTION('',(1.,0.,-0.)); +#5821 = ORIENTED_EDGE('',*,*,#5758,.T.); +#5822 = ORIENTED_EDGE('',*,*,#5823,.T.); +#5823 = EDGE_CURVE('',#5761,#5824,#5826,.T.); +#5824 = VERTEX_POINT('',#5825); +#5825 = CARTESIAN_POINT('',(392.5,-665.,0.)); +#5826 = LINE('',#5827,#5828); +#5827 = CARTESIAN_POINT('',(-392.5,-665.,0.)); +#5828 = VECTOR('',#5829,1.); +#5829 = DIRECTION('',(1.,0.,-0.)); +#5830 = ORIENTED_EDGE('',*,*,#5831,.F.); +#5831 = EDGE_CURVE('',#5815,#5824,#5832,.T.); +#5832 = LINE('',#5833,#5834); +#5833 = CARTESIAN_POINT('',(392.5,-665.,-110.)); +#5834 = VECTOR('',#5835,1.); +#5835 = DIRECTION('',(0.,0.,1.)); +#5836 = PLANE('',#5837); +#5837 = AXIS2_PLACEMENT_3D('',#5838,#5839,#5840); +#5838 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5839 = DIRECTION('',(-0.,1.,0.)); +#5840 = DIRECTION('',(0.,0.,1.)); +#5841 = ADVANCED_FACE('',(#5842),#5860,.T.); +#5842 = FACE_BOUND('',#5843,.T.); +#5843 = EDGE_LOOP('',(#5844,#5845,#5846,#5854)); +#5844 = ORIENTED_EDGE('',*,*,#5800,.F.); +#5845 = ORIENTED_EDGE('',*,*,#5823,.T.); +#5846 = ORIENTED_EDGE('',*,*,#5847,.T.); +#5847 = EDGE_CURVE('',#5824,#5848,#5850,.T.); +#5848 = VERTEX_POINT('',#5849); +#5849 = CARTESIAN_POINT('',(392.5,665.,0.)); +#5850 = LINE('',#5851,#5852); +#5851 = CARTESIAN_POINT('',(392.5,-665.,0.)); +#5852 = VECTOR('',#5853,1.); +#5853 = DIRECTION('',(-0.,1.,0.)); +#5854 = ORIENTED_EDGE('',*,*,#5855,.F.); +#5855 = EDGE_CURVE('',#5793,#5848,#5856,.T.); +#5856 = LINE('',#5857,#5858); +#5857 = CARTESIAN_POINT('',(-392.5,665.,0.)); +#5858 = VECTOR('',#5859,1.); +#5859 = DIRECTION('',(1.,0.,-0.)); +#5860 = PLANE('',#5861); +#5861 = AXIS2_PLACEMENT_3D('',#5862,#5863,#5864); +#5862 = CARTESIAN_POINT('',(-392.5,-665.,0.)); +#5863 = DIRECTION('',(0.,0.,1.)); +#5864 = DIRECTION('',(1.,0.,-0.)); +#5865 = ADVANCED_FACE('',(#5866),#5884,.T.); +#5866 = FACE_BOUND('',#5867,.T.); +#5867 = EDGE_LOOP('',(#5868,#5876,#5877,#5878)); +#5868 = ORIENTED_EDGE('',*,*,#5869,.F.); +#5869 = EDGE_CURVE('',#5785,#5870,#5872,.T.); +#5870 = VERTEX_POINT('',#5871); +#5871 = CARTESIAN_POINT('',(392.5,665.,-110.)); +#5872 = LINE('',#5873,#5874); +#5873 = CARTESIAN_POINT('',(-392.5,665.,-110.)); +#5874 = VECTOR('',#5875,1.); +#5875 = DIRECTION('',(1.,0.,-0.)); +#5876 = ORIENTED_EDGE('',*,*,#5792,.T.); +#5877 = ORIENTED_EDGE('',*,*,#5855,.T.); +#5878 = ORIENTED_EDGE('',*,*,#5879,.F.); +#5879 = EDGE_CURVE('',#5870,#5848,#5880,.T.); +#5880 = LINE('',#5881,#5882); +#5881 = CARTESIAN_POINT('',(392.5,665.,-110.)); +#5882 = VECTOR('',#5883,1.); +#5883 = DIRECTION('',(0.,0.,1.)); +#5884 = PLANE('',#5885); +#5885 = AXIS2_PLACEMENT_3D('',#5886,#5887,#5888); +#5886 = CARTESIAN_POINT('',(-392.5,665.,-110.)); +#5887 = DIRECTION('',(-0.,1.,0.)); +#5888 = DIRECTION('',(0.,0.,1.)); +#5889 = ADVANCED_FACE('',(#5890),#5940,.T.); +#5890 = FACE_BOUND('',#5891,.T.); +#5891 = EDGE_LOOP('',(#5892,#5900,#5908,#5916,#5924,#5932,#5938,#5939)); +#5892 = ORIENTED_EDGE('',*,*,#5893,.F.); +#5893 = EDGE_CURVE('',#5894,#5769,#5896,.T.); +#5894 = VERTEX_POINT('',#5895); +#5895 = CARTESIAN_POINT('',(-417.5,-595.,-110.)); +#5896 = LINE('',#5897,#5898); +#5897 = CARTESIAN_POINT('',(-417.5,-595.,-110.)); +#5898 = VECTOR('',#5899,1.); +#5899 = DIRECTION('',(1.,0.,-0.)); +#5900 = ORIENTED_EDGE('',*,*,#5901,.F.); +#5901 = EDGE_CURVE('',#5902,#5894,#5904,.T.); +#5902 = VERTEX_POINT('',#5903); +#5903 = CARTESIAN_POINT('',(-417.5,-690.,-110.)); +#5904 = LINE('',#5905,#5906); +#5905 = CARTESIAN_POINT('',(-417.5,-690.,-110.)); +#5906 = VECTOR('',#5907,1.); +#5907 = DIRECTION('',(-0.,1.,0.)); +#5908 = ORIENTED_EDGE('',*,*,#5909,.T.); +#5909 = EDGE_CURVE('',#5902,#5910,#5912,.T.); +#5910 = VERTEX_POINT('',#5911); +#5911 = CARTESIAN_POINT('',(417.5,-690.,-110.)); +#5912 = LINE('',#5913,#5914); +#5913 = CARTESIAN_POINT('',(-417.5,-690.,-110.)); +#5914 = VECTOR('',#5915,1.); +#5915 = DIRECTION('',(1.,0.,-0.)); +#5916 = ORIENTED_EDGE('',*,*,#5917,.T.); +#5917 = EDGE_CURVE('',#5910,#5918,#5920,.T.); +#5918 = VERTEX_POINT('',#5919); +#5919 = CARTESIAN_POINT('',(417.5,-595.,-110.)); +#5920 = LINE('',#5921,#5922); +#5921 = CARTESIAN_POINT('',(417.5,-690.,-110.)); +#5922 = VECTOR('',#5923,1.); +#5923 = DIRECTION('',(-0.,1.,0.)); +#5924 = ORIENTED_EDGE('',*,*,#5925,.F.); +#5925 = EDGE_CURVE('',#5926,#5918,#5928,.T.); +#5926 = VERTEX_POINT('',#5927); +#5927 = CARTESIAN_POINT('',(392.5,-595.,-110.)); +#5928 = LINE('',#5929,#5930); +#5929 = CARTESIAN_POINT('',(-417.5,-595.,-110.)); +#5930 = VECTOR('',#5931,1.); +#5931 = DIRECTION('',(1.,0.,-0.)); +#5932 = ORIENTED_EDGE('',*,*,#5933,.F.); +#5933 = EDGE_CURVE('',#5815,#5926,#5934,.T.); +#5934 = LINE('',#5935,#5936); +#5935 = CARTESIAN_POINT('',(392.5,-665.,-110.)); +#5936 = VECTOR('',#5937,1.); +#5937 = DIRECTION('',(-0.,1.,0.)); +#5938 = ORIENTED_EDGE('',*,*,#5814,.F.); +#5939 = ORIENTED_EDGE('',*,*,#5768,.T.); +#5940 = PLANE('',#5941); +#5941 = AXIS2_PLACEMENT_3D('',#5942,#5943,#5944); +#5942 = CARTESIAN_POINT('',(-417.5,-690.,-110.)); +#5943 = DIRECTION('',(0.,0.,1.)); +#5944 = DIRECTION('',(1.,0.,-0.)); +#5945 = ADVANCED_FACE('',(#5946),#5969,.F.); +#5946 = FACE_BOUND('',#5947,.F.); +#5947 = EDGE_LOOP('',(#5948,#5949,#5955,#5963)); +#5948 = ORIENTED_EDGE('',*,*,#5776,.F.); +#5949 = ORIENTED_EDGE('',*,*,#5950,.T.); +#5950 = EDGE_CURVE('',#5769,#5926,#5951,.T.); +#5951 = LINE('',#5952,#5953); +#5952 = CARTESIAN_POINT('',(-417.5,-595.,-110.)); +#5953 = VECTOR('',#5954,1.); +#5954 = DIRECTION('',(1.,0.,-0.)); +#5955 = ORIENTED_EDGE('',*,*,#5956,.T.); +#5956 = EDGE_CURVE('',#5926,#5957,#5959,.T.); +#5957 = VERTEX_POINT('',#5958); +#5958 = CARTESIAN_POINT('',(392.5,595.,-110.)); +#5959 = LINE('',#5960,#5961); +#5960 = CARTESIAN_POINT('',(392.5,-665.,-110.)); +#5961 = VECTOR('',#5962,1.); +#5962 = DIRECTION('',(-0.,1.,0.)); +#5963 = ORIENTED_EDGE('',*,*,#5964,.F.); +#5964 = EDGE_CURVE('',#5777,#5957,#5965,.T.); +#5965 = LINE('',#5966,#5967); +#5966 = CARTESIAN_POINT('',(-417.5,595.,-110.)); +#5967 = VECTOR('',#5968,1.); +#5968 = DIRECTION('',(1.,0.,-0.)); +#5969 = PLANE('',#5970); +#5970 = AXIS2_PLACEMENT_3D('',#5971,#5972,#5973); +#5971 = CARTESIAN_POINT('',(-392.5,-665.,-110.)); +#5972 = DIRECTION('',(0.,0.,1.)); +#5973 = DIRECTION('',(1.,0.,-0.)); +#5974 = ADVANCED_FACE('',(#5975),#6023,.T.); +#5975 = FACE_BOUND('',#5976,.T.); +#5976 = EDGE_LOOP('',(#5977,#5987,#5995,#6001,#6002,#6003,#6009,#6017)); +#5977 = ORIENTED_EDGE('',*,*,#5978,.F.); +#5978 = EDGE_CURVE('',#5979,#5981,#5983,.T.); +#5979 = VERTEX_POINT('',#5980); +#5980 = CARTESIAN_POINT('',(-417.5,690.,-110.)); +#5981 = VERTEX_POINT('',#5982); +#5982 = CARTESIAN_POINT('',(417.5,690.,-110.)); +#5983 = LINE('',#5984,#5985); +#5984 = CARTESIAN_POINT('',(-417.5,690.,-110.)); +#5985 = VECTOR('',#5986,1.); +#5986 = DIRECTION('',(1.,0.,-0.)); +#5987 = ORIENTED_EDGE('',*,*,#5988,.F.); +#5988 = EDGE_CURVE('',#5989,#5979,#5991,.T.); +#5989 = VERTEX_POINT('',#5990); +#5990 = CARTESIAN_POINT('',(-417.5,595.,-110.)); +#5991 = LINE('',#5992,#5993); +#5992 = CARTESIAN_POINT('',(-417.5,595.,-110.)); +#5993 = VECTOR('',#5994,1.); +#5994 = DIRECTION('',(-0.,1.,0.)); +#5995 = ORIENTED_EDGE('',*,*,#5996,.T.); +#5996 = EDGE_CURVE('',#5989,#5777,#5997,.T.); +#5997 = LINE('',#5998,#5999); +#5998 = CARTESIAN_POINT('',(-417.5,595.,-110.)); +#5999 = VECTOR('',#6000,1.); +#6000 = DIRECTION('',(1.,0.,-0.)); +#6001 = ORIENTED_EDGE('',*,*,#5784,.T.); +#6002 = ORIENTED_EDGE('',*,*,#5869,.T.); +#6003 = ORIENTED_EDGE('',*,*,#6004,.F.); +#6004 = EDGE_CURVE('',#5957,#5870,#6005,.T.); +#6005 = LINE('',#6006,#6007); +#6006 = CARTESIAN_POINT('',(392.5,-665.,-110.)); +#6007 = VECTOR('',#6008,1.); +#6008 = DIRECTION('',(-0.,1.,0.)); +#6009 = ORIENTED_EDGE('',*,*,#6010,.T.); +#6010 = EDGE_CURVE('',#5957,#6011,#6013,.T.); +#6011 = VERTEX_POINT('',#6012); +#6012 = CARTESIAN_POINT('',(417.5,595.,-110.)); +#6013 = LINE('',#6014,#6015); +#6014 = CARTESIAN_POINT('',(-417.5,595.,-110.)); +#6015 = VECTOR('',#6016,1.); +#6016 = DIRECTION('',(1.,0.,-0.)); +#6017 = ORIENTED_EDGE('',*,*,#6018,.T.); +#6018 = EDGE_CURVE('',#6011,#5981,#6019,.T.); +#6019 = LINE('',#6020,#6021); +#6020 = CARTESIAN_POINT('',(417.5,595.,-110.)); +#6021 = VECTOR('',#6022,1.); +#6022 = DIRECTION('',(-0.,1.,0.)); +#6023 = PLANE('',#6024); +#6024 = AXIS2_PLACEMENT_3D('',#6025,#6026,#6027); +#6025 = CARTESIAN_POINT('',(-417.5,595.,-110.)); +#6026 = DIRECTION('',(0.,0.,1.)); +#6027 = DIRECTION('',(1.,0.,-0.)); +#6028 = ADVANCED_FACE('',(#6029),#6037,.T.); +#6029 = FACE_BOUND('',#6030,.T.); +#6030 = EDGE_LOOP('',(#6031,#6032,#6033,#6034,#6035,#6036)); +#6031 = ORIENTED_EDGE('',*,*,#5831,.F.); +#6032 = ORIENTED_EDGE('',*,*,#5933,.T.); +#6033 = ORIENTED_EDGE('',*,*,#5956,.T.); +#6034 = ORIENTED_EDGE('',*,*,#6004,.T.); +#6035 = ORIENTED_EDGE('',*,*,#5879,.T.); +#6036 = ORIENTED_EDGE('',*,*,#5847,.F.); +#6037 = PLANE('',#6038); +#6038 = AXIS2_PLACEMENT_3D('',#6039,#6040,#6041); +#6039 = CARTESIAN_POINT('',(392.5,-665.,-110.)); +#6040 = DIRECTION('',(1.,0.,-0.)); +#6041 = DIRECTION('',(0.,0.,1.)); +#6042 = ADVANCED_FACE('',(#6043),#6070,.T.); +#6043 = FACE_BOUND('',#6044,.T.); +#6044 = EDGE_LOOP('',(#6045,#6055,#6061,#6062,#6063,#6064)); +#6045 = ORIENTED_EDGE('',*,*,#6046,.F.); +#6046 = EDGE_CURVE('',#6047,#6049,#6051,.T.); +#6047 = VERTEX_POINT('',#6048); +#6048 = CARTESIAN_POINT('',(-417.5,-595.,-168.)); +#6049 = VERTEX_POINT('',#6050); +#6050 = CARTESIAN_POINT('',(417.5,-595.,-168.)); +#6051 = LINE('',#6052,#6053); +#6052 = CARTESIAN_POINT('',(-417.5,-595.,-168.)); +#6053 = VECTOR('',#6054,1.); +#6054 = DIRECTION('',(1.,0.,-0.)); +#6055 = ORIENTED_EDGE('',*,*,#6056,.T.); +#6056 = EDGE_CURVE('',#6047,#5894,#6057,.T.); +#6057 = LINE('',#6058,#6059); +#6058 = CARTESIAN_POINT('',(-417.5,-595.,-168.)); +#6059 = VECTOR('',#6060,1.); +#6060 = DIRECTION('',(0.,0.,1.)); +#6061 = ORIENTED_EDGE('',*,*,#5893,.T.); +#6062 = ORIENTED_EDGE('',*,*,#5950,.T.); +#6063 = ORIENTED_EDGE('',*,*,#5925,.T.); +#6064 = ORIENTED_EDGE('',*,*,#6065,.F.); +#6065 = EDGE_CURVE('',#6049,#5918,#6066,.T.); +#6066 = LINE('',#6067,#6068); +#6067 = CARTESIAN_POINT('',(417.5,-595.,-168.)); +#6068 = VECTOR('',#6069,1.); +#6069 = DIRECTION('',(0.,0.,1.)); +#6070 = PLANE('',#6071); +#6071 = AXIS2_PLACEMENT_3D('',#6072,#6073,#6074); +#6072 = CARTESIAN_POINT('',(-417.5,-595.,-168.)); +#6073 = DIRECTION('',(-0.,1.,0.)); +#6074 = DIRECTION('',(0.,0.,1.)); +#6075 = ADVANCED_FACE('',(#6076),#6094,.T.); +#6076 = FACE_BOUND('',#6077,.T.); +#6077 = EDGE_LOOP('',(#6078,#6086,#6092,#6093)); +#6078 = ORIENTED_EDGE('',*,*,#6079,.F.); +#6079 = EDGE_CURVE('',#6080,#5910,#6082,.T.); +#6080 = VERTEX_POINT('',#6081); +#6081 = CARTESIAN_POINT('',(417.5,-690.,-168.)); +#6082 = LINE('',#6083,#6084); +#6083 = CARTESIAN_POINT('',(417.5,-690.,-168.)); +#6084 = VECTOR('',#6085,1.); +#6085 = DIRECTION('',(0.,0.,1.)); +#6086 = ORIENTED_EDGE('',*,*,#6087,.T.); +#6087 = EDGE_CURVE('',#6080,#6049,#6088,.T.); +#6088 = LINE('',#6089,#6090); +#6089 = CARTESIAN_POINT('',(417.5,-690.,-168.)); +#6090 = VECTOR('',#6091,1.); +#6091 = DIRECTION('',(-0.,1.,0.)); +#6092 = ORIENTED_EDGE('',*,*,#6065,.T.); +#6093 = ORIENTED_EDGE('',*,*,#5917,.F.); +#6094 = PLANE('',#6095); +#6095 = AXIS2_PLACEMENT_3D('',#6096,#6097,#6098); +#6096 = CARTESIAN_POINT('',(417.5,-690.,-168.)); +#6097 = DIRECTION('',(1.,0.,-0.)); +#6098 = DIRECTION('',(0.,0.,1.)); +#6099 = ADVANCED_FACE('',(#6100),#6118,.F.); +#6100 = FACE_BOUND('',#6101,.F.); +#6101 = EDGE_LOOP('',(#6102,#6110,#6116,#6117)); +#6102 = ORIENTED_EDGE('',*,*,#6103,.F.); +#6103 = EDGE_CURVE('',#6104,#6080,#6106,.T.); +#6104 = VERTEX_POINT('',#6105); +#6105 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6106 = LINE('',#6107,#6108); +#6107 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6108 = VECTOR('',#6109,1.); +#6109 = DIRECTION('',(1.,0.,-0.)); +#6110 = ORIENTED_EDGE('',*,*,#6111,.T.); +#6111 = EDGE_CURVE('',#6104,#5902,#6112,.T.); +#6112 = LINE('',#6113,#6114); +#6113 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6114 = VECTOR('',#6115,1.); +#6115 = DIRECTION('',(0.,0.,1.)); +#6116 = ORIENTED_EDGE('',*,*,#5909,.T.); +#6117 = ORIENTED_EDGE('',*,*,#6079,.F.); +#6118 = PLANE('',#6119); +#6119 = AXIS2_PLACEMENT_3D('',#6120,#6121,#6122); +#6120 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6121 = DIRECTION('',(-0.,1.,0.)); +#6122 = DIRECTION('',(0.,0.,1.)); +#6123 = ADVANCED_FACE('',(#6124),#6135,.F.); +#6124 = FACE_BOUND('',#6125,.F.); +#6125 = EDGE_LOOP('',(#6126,#6127,#6133,#6134)); +#6126 = ORIENTED_EDGE('',*,*,#6111,.F.); +#6127 = ORIENTED_EDGE('',*,*,#6128,.T.); +#6128 = EDGE_CURVE('',#6104,#6047,#6129,.T.); +#6129 = LINE('',#6130,#6131); +#6130 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6131 = VECTOR('',#6132,1.); +#6132 = DIRECTION('',(-0.,1.,0.)); +#6133 = ORIENTED_EDGE('',*,*,#6056,.T.); +#6134 = ORIENTED_EDGE('',*,*,#5901,.F.); +#6135 = PLANE('',#6136); +#6136 = AXIS2_PLACEMENT_3D('',#6137,#6138,#6139); +#6137 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6138 = DIRECTION('',(1.,0.,-0.)); +#6139 = DIRECTION('',(0.,0.,1.)); +#6140 = ADVANCED_FACE('',(#6141),#6168,.F.); +#6141 = FACE_BOUND('',#6142,.F.); +#6142 = EDGE_LOOP('',(#6143,#6153,#6159,#6160,#6161,#6162)); +#6143 = ORIENTED_EDGE('',*,*,#6144,.F.); +#6144 = EDGE_CURVE('',#6145,#6147,#6149,.T.); +#6145 = VERTEX_POINT('',#6146); +#6146 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6147 = VERTEX_POINT('',#6148); +#6148 = CARTESIAN_POINT('',(417.5,595.,-168.)); +#6149 = LINE('',#6150,#6151); +#6150 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6151 = VECTOR('',#6152,1.); +#6152 = DIRECTION('',(1.,0.,-0.)); +#6153 = ORIENTED_EDGE('',*,*,#6154,.T.); +#6154 = EDGE_CURVE('',#6145,#5989,#6155,.T.); +#6155 = LINE('',#6156,#6157); +#6156 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6157 = VECTOR('',#6158,1.); +#6158 = DIRECTION('',(0.,0.,1.)); +#6159 = ORIENTED_EDGE('',*,*,#5996,.T.); +#6160 = ORIENTED_EDGE('',*,*,#5964,.T.); +#6161 = ORIENTED_EDGE('',*,*,#6010,.T.); +#6162 = ORIENTED_EDGE('',*,*,#6163,.F.); +#6163 = EDGE_CURVE('',#6147,#6011,#6164,.T.); +#6164 = LINE('',#6165,#6166); +#6165 = CARTESIAN_POINT('',(417.5,595.,-168.)); +#6166 = VECTOR('',#6167,1.); +#6167 = DIRECTION('',(0.,0.,1.)); +#6168 = PLANE('',#6169); +#6169 = AXIS2_PLACEMENT_3D('',#6170,#6171,#6172); +#6170 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6171 = DIRECTION('',(-0.,1.,0.)); +#6172 = DIRECTION('',(0.,0.,1.)); +#6173 = ADVANCED_FACE('',(#6174),#6199,.T.); +#6174 = FACE_BOUND('',#6175,.T.); +#6175 = EDGE_LOOP('',(#6176,#6186,#6192,#6193)); +#6176 = ORIENTED_EDGE('',*,*,#6177,.F.); +#6177 = EDGE_CURVE('',#6178,#6180,#6182,.T.); +#6178 = VERTEX_POINT('',#6179); +#6179 = CARTESIAN_POINT('',(-417.5,690.,-168.)); +#6180 = VERTEX_POINT('',#6181); +#6181 = CARTESIAN_POINT('',(417.5,690.,-168.)); +#6182 = LINE('',#6183,#6184); +#6183 = CARTESIAN_POINT('',(-417.5,690.,-168.)); +#6184 = VECTOR('',#6185,1.); +#6185 = DIRECTION('',(1.,0.,-0.)); +#6186 = ORIENTED_EDGE('',*,*,#6187,.T.); +#6187 = EDGE_CURVE('',#6178,#5979,#6188,.T.); +#6188 = LINE('',#6189,#6190); +#6189 = CARTESIAN_POINT('',(-417.5,690.,-168.)); +#6190 = VECTOR('',#6191,1.); +#6191 = DIRECTION('',(0.,0.,1.)); +#6192 = ORIENTED_EDGE('',*,*,#5978,.T.); +#6193 = ORIENTED_EDGE('',*,*,#6194,.F.); +#6194 = EDGE_CURVE('',#6180,#5981,#6195,.T.); +#6195 = LINE('',#6196,#6197); +#6196 = CARTESIAN_POINT('',(417.5,690.,-168.)); +#6197 = VECTOR('',#6198,1.); +#6198 = DIRECTION('',(0.,0.,1.)); +#6199 = PLANE('',#6200); +#6200 = AXIS2_PLACEMENT_3D('',#6201,#6202,#6203); +#6201 = CARTESIAN_POINT('',(-417.5,690.,-168.)); +#6202 = DIRECTION('',(-0.,1.,0.)); +#6203 = DIRECTION('',(0.,0.,1.)); +#6204 = ADVANCED_FACE('',(#6205),#6216,.T.); +#6205 = FACE_BOUND('',#6206,.T.); +#6206 = EDGE_LOOP('',(#6207,#6208,#6214,#6215)); +#6207 = ORIENTED_EDGE('',*,*,#6163,.F.); +#6208 = ORIENTED_EDGE('',*,*,#6209,.T.); +#6209 = EDGE_CURVE('',#6147,#6180,#6210,.T.); +#6210 = LINE('',#6211,#6212); +#6211 = CARTESIAN_POINT('',(417.5,595.,-168.)); +#6212 = VECTOR('',#6213,1.); +#6213 = DIRECTION('',(-0.,1.,0.)); +#6214 = ORIENTED_EDGE('',*,*,#6194,.T.); +#6215 = ORIENTED_EDGE('',*,*,#6018,.F.); +#6216 = PLANE('',#6217); +#6217 = AXIS2_PLACEMENT_3D('',#6218,#6219,#6220); +#6218 = CARTESIAN_POINT('',(417.5,595.,-168.)); +#6219 = DIRECTION('',(1.,0.,-0.)); +#6220 = DIRECTION('',(0.,0.,1.)); +#6221 = ADVANCED_FACE('',(#6222),#6233,.F.); +#6222 = FACE_BOUND('',#6223,.F.); +#6223 = EDGE_LOOP('',(#6224,#6225,#6231,#6232)); +#6224 = ORIENTED_EDGE('',*,*,#6154,.F.); +#6225 = ORIENTED_EDGE('',*,*,#6226,.T.); +#6226 = EDGE_CURVE('',#6145,#6178,#6227,.T.); +#6227 = LINE('',#6228,#6229); +#6228 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6229 = VECTOR('',#6230,1.); +#6230 = DIRECTION('',(-0.,1.,0.)); +#6231 = ORIENTED_EDGE('',*,*,#6187,.T.); +#6232 = ORIENTED_EDGE('',*,*,#5988,.F.); +#6233 = PLANE('',#6234); +#6234 = AXIS2_PLACEMENT_3D('',#6235,#6236,#6237); +#6235 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6236 = DIRECTION('',(1.,0.,-0.)); +#6237 = DIRECTION('',(0.,0.,1.)); +#6238 = ADVANCED_FACE('',(#6239),#6245,.F.); +#6239 = FACE_BOUND('',#6240,.F.); +#6240 = EDGE_LOOP('',(#6241,#6242,#6243,#6244)); +#6241 = ORIENTED_EDGE('',*,*,#6128,.F.); +#6242 = ORIENTED_EDGE('',*,*,#6103,.T.); +#6243 = ORIENTED_EDGE('',*,*,#6087,.T.); +#6244 = ORIENTED_EDGE('',*,*,#6046,.F.); +#6245 = PLANE('',#6246); +#6246 = AXIS2_PLACEMENT_3D('',#6247,#6248,#6249); +#6247 = CARTESIAN_POINT('',(-417.5,-690.,-168.)); +#6248 = DIRECTION('',(0.,0.,1.)); +#6249 = DIRECTION('',(1.,0.,-0.)); +#6250 = ADVANCED_FACE('',(#6251),#6257,.F.); +#6251 = FACE_BOUND('',#6252,.F.); +#6252 = EDGE_LOOP('',(#6253,#6254,#6255,#6256)); +#6253 = ORIENTED_EDGE('',*,*,#6226,.F.); +#6254 = ORIENTED_EDGE('',*,*,#6144,.T.); +#6255 = ORIENTED_EDGE('',*,*,#6209,.T.); +#6256 = ORIENTED_EDGE('',*,*,#6177,.F.); +#6257 = PLANE('',#6258); +#6258 = AXIS2_PLACEMENT_3D('',#6259,#6260,#6261); +#6259 = CARTESIAN_POINT('',(-417.5,595.,-168.)); +#6260 = DIRECTION('',(0.,0.,1.)); +#6261 = DIRECTION('',(1.,0.,-0.)); +#6262 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6266)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6263,#6264,#6265)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6263 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6264 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6265 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6266 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6263, + 'distance_accuracy_value','confusion accuracy'); +#6267 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6268,#6270); +#6268 = ( REPRESENTATION_RELATIONSHIP('','',#5751,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6269) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6269 = ITEM_DEFINED_TRANSFORMATION('','',#11,#43); +#6270 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6271); +#6271 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('8','NAU03_Bottom_Base','',#5, + #5746,$); +#6272 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#5748)); +#6273 = SHAPE_DEFINITION_REPRESENTATION(#6274,#6280); +#6274 = PRODUCT_DEFINITION_SHAPE('','',#6275); +#6275 = PRODUCT_DEFINITION('design','',#6276,#6279); +#6276 = PRODUCT_DEFINITION_FORMATION('','',#6277); +#6277 = PRODUCT('NAU03_Interior_Mounting_Plate', + 'NAU03_Interior_Mounting_Plate','',(#6278)); +#6278 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6279 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6280 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6281),#6431); +#6281 = MANIFOLD_SOLID_BREP('',#6282); +#6282 = CLOSED_SHELL('',(#6283,#6323,#6363,#6385,#6407,#6419)); +#6283 = ADVANCED_FACE('',(#6284),#6318,.F.); +#6284 = FACE_BOUND('',#6285,.F.); +#6285 = EDGE_LOOP('',(#6286,#6296,#6304,#6312)); +#6286 = ORIENTED_EDGE('',*,*,#6287,.F.); +#6287 = EDGE_CURVE('',#6288,#6290,#6292,.T.); +#6288 = VERTEX_POINT('',#6289); +#6289 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6290 = VERTEX_POINT('',#6291); +#6291 = CARTESIAN_POINT('',(-292.5,568.,2.12E+03)); +#6292 = LINE('',#6293,#6294); +#6293 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6294 = VECTOR('',#6295,1.); +#6295 = DIRECTION('',(0.,0.,1.)); +#6296 = ORIENTED_EDGE('',*,*,#6297,.T.); +#6297 = EDGE_CURVE('',#6288,#6298,#6300,.T.); +#6298 = VERTEX_POINT('',#6299); +#6299 = CARTESIAN_POINT('',(-292.5,582.,180.)); +#6300 = LINE('',#6301,#6302); +#6301 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6302 = VECTOR('',#6303,1.); +#6303 = DIRECTION('',(-0.,1.,0.)); +#6304 = ORIENTED_EDGE('',*,*,#6305,.T.); +#6305 = EDGE_CURVE('',#6298,#6306,#6308,.T.); +#6306 = VERTEX_POINT('',#6307); +#6307 = CARTESIAN_POINT('',(-292.5,582.,2.12E+03)); +#6308 = LINE('',#6309,#6310); +#6309 = CARTESIAN_POINT('',(-292.5,582.,180.)); +#6310 = VECTOR('',#6311,1.); +#6311 = DIRECTION('',(0.,0.,1.)); +#6312 = ORIENTED_EDGE('',*,*,#6313,.F.); +#6313 = EDGE_CURVE('',#6290,#6306,#6314,.T.); +#6314 = LINE('',#6315,#6316); +#6315 = CARTESIAN_POINT('',(-292.5,568.,2.12E+03)); +#6316 = VECTOR('',#6317,1.); +#6317 = DIRECTION('',(-0.,1.,0.)); +#6318 = PLANE('',#6319); +#6319 = AXIS2_PLACEMENT_3D('',#6320,#6321,#6322); +#6320 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6321 = DIRECTION('',(1.,0.,-0.)); +#6322 = DIRECTION('',(0.,0.,1.)); +#6323 = ADVANCED_FACE('',(#6324),#6358,.T.); +#6324 = FACE_BOUND('',#6325,.T.); +#6325 = EDGE_LOOP('',(#6326,#6336,#6344,#6352)); +#6326 = ORIENTED_EDGE('',*,*,#6327,.F.); +#6327 = EDGE_CURVE('',#6328,#6330,#6332,.T.); +#6328 = VERTEX_POINT('',#6329); +#6329 = CARTESIAN_POINT('',(292.5,568.,180.)); +#6330 = VERTEX_POINT('',#6331); +#6331 = CARTESIAN_POINT('',(292.5,568.,2.12E+03)); +#6332 = LINE('',#6333,#6334); +#6333 = CARTESIAN_POINT('',(292.5,568.,180.)); +#6334 = VECTOR('',#6335,1.); +#6335 = DIRECTION('',(0.,0.,1.)); +#6336 = ORIENTED_EDGE('',*,*,#6337,.T.); +#6337 = EDGE_CURVE('',#6328,#6338,#6340,.T.); +#6338 = VERTEX_POINT('',#6339); +#6339 = CARTESIAN_POINT('',(292.5,582.,180.)); +#6340 = LINE('',#6341,#6342); +#6341 = CARTESIAN_POINT('',(292.5,568.,180.)); +#6342 = VECTOR('',#6343,1.); +#6343 = DIRECTION('',(-0.,1.,0.)); +#6344 = ORIENTED_EDGE('',*,*,#6345,.T.); +#6345 = EDGE_CURVE('',#6338,#6346,#6348,.T.); +#6346 = VERTEX_POINT('',#6347); +#6347 = CARTESIAN_POINT('',(292.5,582.,2.12E+03)); +#6348 = LINE('',#6349,#6350); +#6349 = CARTESIAN_POINT('',(292.5,582.,180.)); +#6350 = VECTOR('',#6351,1.); +#6351 = DIRECTION('',(0.,0.,1.)); +#6352 = ORIENTED_EDGE('',*,*,#6353,.F.); +#6353 = EDGE_CURVE('',#6330,#6346,#6354,.T.); +#6354 = LINE('',#6355,#6356); +#6355 = CARTESIAN_POINT('',(292.5,568.,2.12E+03)); +#6356 = VECTOR('',#6357,1.); +#6357 = DIRECTION('',(-0.,1.,0.)); +#6358 = PLANE('',#6359); +#6359 = AXIS2_PLACEMENT_3D('',#6360,#6361,#6362); +#6360 = CARTESIAN_POINT('',(292.5,568.,180.)); +#6361 = DIRECTION('',(1.,0.,-0.)); +#6362 = DIRECTION('',(0.,0.,1.)); +#6363 = ADVANCED_FACE('',(#6364),#6380,.F.); +#6364 = FACE_BOUND('',#6365,.F.); +#6365 = EDGE_LOOP('',(#6366,#6372,#6373,#6379)); +#6366 = ORIENTED_EDGE('',*,*,#6367,.F.); +#6367 = EDGE_CURVE('',#6288,#6328,#6368,.T.); +#6368 = LINE('',#6369,#6370); +#6369 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6370 = VECTOR('',#6371,1.); +#6371 = DIRECTION('',(1.,0.,-0.)); +#6372 = ORIENTED_EDGE('',*,*,#6287,.T.); +#6373 = ORIENTED_EDGE('',*,*,#6374,.T.); +#6374 = EDGE_CURVE('',#6290,#6330,#6375,.T.); +#6375 = LINE('',#6376,#6377); +#6376 = CARTESIAN_POINT('',(-292.5,568.,2.12E+03)); +#6377 = VECTOR('',#6378,1.); +#6378 = DIRECTION('',(1.,0.,-0.)); +#6379 = ORIENTED_EDGE('',*,*,#6327,.F.); +#6380 = PLANE('',#6381); +#6381 = AXIS2_PLACEMENT_3D('',#6382,#6383,#6384); +#6382 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6383 = DIRECTION('',(-0.,1.,0.)); +#6384 = DIRECTION('',(0.,0.,1.)); +#6385 = ADVANCED_FACE('',(#6386),#6402,.T.); +#6386 = FACE_BOUND('',#6387,.T.); +#6387 = EDGE_LOOP('',(#6388,#6394,#6395,#6401)); +#6388 = ORIENTED_EDGE('',*,*,#6389,.F.); +#6389 = EDGE_CURVE('',#6298,#6338,#6390,.T.); +#6390 = LINE('',#6391,#6392); +#6391 = CARTESIAN_POINT('',(-292.5,582.,180.)); +#6392 = VECTOR('',#6393,1.); +#6393 = DIRECTION('',(1.,0.,-0.)); +#6394 = ORIENTED_EDGE('',*,*,#6305,.T.); +#6395 = ORIENTED_EDGE('',*,*,#6396,.T.); +#6396 = EDGE_CURVE('',#6306,#6346,#6397,.T.); +#6397 = LINE('',#6398,#6399); +#6398 = CARTESIAN_POINT('',(-292.5,582.,2.12E+03)); +#6399 = VECTOR('',#6400,1.); +#6400 = DIRECTION('',(1.,0.,-0.)); +#6401 = ORIENTED_EDGE('',*,*,#6345,.F.); +#6402 = PLANE('',#6403); +#6403 = AXIS2_PLACEMENT_3D('',#6404,#6405,#6406); +#6404 = CARTESIAN_POINT('',(-292.5,582.,180.)); +#6405 = DIRECTION('',(-0.,1.,0.)); +#6406 = DIRECTION('',(0.,0.,1.)); +#6407 = ADVANCED_FACE('',(#6408),#6414,.F.); +#6408 = FACE_BOUND('',#6409,.F.); +#6409 = EDGE_LOOP('',(#6410,#6411,#6412,#6413)); +#6410 = ORIENTED_EDGE('',*,*,#6297,.F.); +#6411 = ORIENTED_EDGE('',*,*,#6367,.T.); +#6412 = ORIENTED_EDGE('',*,*,#6337,.T.); +#6413 = ORIENTED_EDGE('',*,*,#6389,.F.); +#6414 = PLANE('',#6415); +#6415 = AXIS2_PLACEMENT_3D('',#6416,#6417,#6418); +#6416 = CARTESIAN_POINT('',(-292.5,568.,180.)); +#6417 = DIRECTION('',(0.,0.,1.)); +#6418 = DIRECTION('',(1.,0.,-0.)); +#6419 = ADVANCED_FACE('',(#6420),#6426,.T.); +#6420 = FACE_BOUND('',#6421,.T.); +#6421 = EDGE_LOOP('',(#6422,#6423,#6424,#6425)); +#6422 = ORIENTED_EDGE('',*,*,#6313,.F.); +#6423 = ORIENTED_EDGE('',*,*,#6374,.T.); +#6424 = ORIENTED_EDGE('',*,*,#6353,.T.); +#6425 = ORIENTED_EDGE('',*,*,#6396,.F.); +#6426 = PLANE('',#6427); +#6427 = AXIS2_PLACEMENT_3D('',#6428,#6429,#6430); +#6428 = CARTESIAN_POINT('',(-292.5,568.,2.12E+03)); +#6429 = DIRECTION('',(0.,0.,1.)); +#6430 = DIRECTION('',(1.,0.,-0.)); +#6431 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6435)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6432,#6433,#6434)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6432 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6433 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6434 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6435 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#6432, + 'distance_accuracy_value','confusion accuracy'); +#6436 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6437,#6439); +#6437 = ( REPRESENTATION_RELATIONSHIP('','',#6280,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6438) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6438 = ITEM_DEFINED_TRANSFORMATION('','',#11,#47); +#6439 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6440); +#6440 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('9', + 'NAU03_Interior_Mounting_Plate','',#5,#6275,$); +#6441 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6277)); +ENDSEC; +END-ISO-10303-21; diff --git a/data/examples/qet_split_cabinet/nau03_test_cabinet_split_report.json b/data/examples/qet_split_cabinet/nau03_test_cabinet_split_report.json new file mode 100644 index 0000000..ac341a7 --- /dev/null +++ b/data/examples/qet_split_cabinet/nau03_test_cabinet_split_report.json @@ -0,0 +1,25 @@ +{ + "source_reference": "D:\\downloadWX\\xwechat_files\\wxid_pv577xuccot722_5d4a\\msg\\file\\2026-04\\MCCB CABINET ASS'Y.STEP", + "outputs": { + "fcstd": "D:\\LightWork3D\\data\\examples\\qet_split_cabinet\\nau03_test_cabinet_split.FCStd", + "step": "D:\\LightWork3D\\data\\examples\\qet_split_cabinet\\nau03_test_cabinet_split.step" + }, + "dimensions_mm": { + "width": 750.0, + "depth": 1300.0, + "height_without_roof_base": 2300.0, + "overall_height": 2543.0 + }, + "hideable_parts": [ + "NAU03_Cabinet_Frame", + "NAU03_Left_Side_Panel", + "NAU03_Right_Side_Panel", + "NAU03_Rear_Panel", + "NAU03_Front_Left_Door", + "NAU03_Front_Right_Door", + "NAU03_Top_Roof", + "NAU03_Bottom_Base", + "NAU03_Interior_Mounting_Plate" + ], + "object_count": 9 +} \ No newline at end of file diff --git a/data/examples/qet_split_cabinet/verify_nau03_split_cabinet.py b/data/examples/qet_split_cabinet/verify_nau03_split_cabinet.py new file mode 100644 index 0000000..576fa5a --- /dev/null +++ b/data/examples/qet_split_cabinet/verify_nau03_split_cabinet.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +import json +import os +import sys +from pathlib import Path + + +def _bootstrap_windows_freecad_runtime() -> None: + if os.name != "nt": + return + runtime_json = os.environ.get("QET_FREECAD_RUNTIME_JSON") + if not runtime_json: + runtime_json = os.path.join(os.environ.get("LOCALAPPDATA", ""), "QETDeps", "runtime.json") + if not runtime_json or not os.path.exists(runtime_json): + return + with open(runtime_json, "r", encoding="utf-8-sig") as handle: + runtime = json.load(handle) + roots = [str(item) for item in runtime.get("path_prefix", []) if item] + freecad_root = runtime.get("freecad_root", "") + roots.extend( + [ + os.path.join(freecad_root, "build", "Mod", "Import"), + os.path.join(freecad_root, "build", "Mod", "Part"), + os.path.join(freecad_root, "build", "Mod"), + os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "downlevel"), + ] + ) + for root in roots: + if root and os.path.isdir(root): + try: + os.add_dll_directory(root) + except (AttributeError, OSError): + pass + if root not in sys.path: + sys.path.append(root) + + +_bootstrap_windows_freecad_runtime() + +import FreeCAD as App +import Import + + +OUT_DIR = Path(__file__).resolve().parent +STEP_PATH = Path(os.environ.get("NAU03_SPLIT_CABINET_STEP", OUT_DIR / "nau03_test_cabinet_split.step")) + +EXPECTED_LABELS = { + "NAU03_Cabinet_Frame", + "NAU03_Left_Side_Panel", + "NAU03_Right_Side_Panel", + "NAU03_Rear_Panel", + "NAU03_Front_Left_Door", + "NAU03_Front_Right_Door", + "NAU03_Top_Roof", + "NAU03_Bottom_Base", + "NAU03_Interior_Mounting_Plate", +} + + +def main() -> None: + if not STEP_PATH.exists(): + raise AssertionError(f"missing STEP output: {STEP_PATH}") + + header = STEP_PATH.read_text(encoding="utf-8", errors="ignore")[:256] + if "ISO-10303-21" not in header: + raise AssertionError("STEP output is missing ISO-10303-21 header") + + doc = App.newDocument("verify_nau03_split") + Import.insert(str(STEP_PATH), doc.Name) + doc.recompute() + + shape_objects = [ + obj + for obj in doc.Objects + if hasattr(obj, "Shape") and not obj.Shape.isNull() and len(obj.Shape.Solids) > 0 + ] + labels = {obj.Label for obj in shape_objects} + missing = sorted(EXPECTED_LABELS - labels) + if missing: + raise AssertionError(f"missing expected independently hideable labels: {missing}") + + if len(shape_objects) > 16: + raise AssertionError(f"too many top-level shape objects: {len(shape_objects)}") + + for obj in shape_objects: + if obj.Shape.Volume <= 0: + raise AssertionError(f"{obj.Label} has no positive volume") + + print("verified NAU03 split cabinet STEP") + print("shape_objects=", len(shape_objects)) + print("labels=", sorted(labels)) + + +if __name__ == "__main__": + main() diff --git a/docs/2D-3D交换协议.md b/docs/2D-3D交换协议.md index 3d41b82..5bc4f93 100644 --- a/docs/2D-3D交换协议.md +++ b/docs/2D-3D交换协议.md @@ -162,6 +162,18 @@ QET 在导出时负责: - `device_models`:设备 3D 模型解析结果 - `wires`:导线起点/终点与标注快照 +### 4.2 FreeCAD 侧 v2 校验规则 + +FreeCAD 当前只接受 `schema_version=2.0` 的交换文件。为了避免旧协议字段继续混入新链路,导入时会直接拒绝下列旧结构: + +- 根级 `terminals[]`:端子必须放在 `devices[].terminals[]` +- `devices[].instance_id`:设备实例必须使用 `devices[].device_instance_id` +- `devices[].element_uuid`:设备顶层不再表达单个 2D 符号,成员关系由 `devices[].terminals[].element_uuid` 表达 +- `device_models[].instance_id` 和 `device_models[].element_uuid`:模型只允许按 `device_models[].device_instance_id` 关联 +- `wires[].start_instance_id` / `wires[].end_instance_id`:第一版数据库绑定仍不依赖这两个字段,正式主键仍是 `terminal_uuid`;但在 QET 端 `terminal_uuid` 尚未完全做到端子实例唯一前,FreeCAD 可把它们作为自动布线端点消歧的辅助信息,优先按 `terminal_uuid + element_uuid + device_instance_id` 匹配 3D 工程端子,避免重复 `terminal_uuid` 时误接到其它设备端子。QET 后续把 `terminal_uuid` 修成真正端子实例 UUID 后,这两个字段可以退回诊断/兼容用途。 + +FreeCAD 内部对象属性 `QetInstanceId` 仍可保留,这是 3D 文档内的对象属性名,不等同于 JSON 旧字段 `instance_id`。 + --- ## 5. `cabinet` 结构 @@ -523,7 +535,7 @@ FreeCAD 根据 `resolved_model_path` 的扩展名导入 `.FCStd`,并在导入 ```json { - "schema_version": "1.0", + "schema_version": "2.0", "project_uuid": "string", "generated_at": "2026-05-18T11:00:00+08:00", "instances": [], @@ -555,6 +567,8 @@ FreeCAD 根据 `resolved_model_path` 的扩展名导入 `.FCStd`,并在导入 - `instances[]` 继续表达:某个 2D `element_uuid` 绑定到哪个 3D 设备实例 - `terminals[]` 表达:某个 2D `terminal_uuid` 绑定到哪个 3D 设备实例,以及可选的哪个 3D 端子实例 - 如果当前版本 QET 只消费设备实例级绑定,`terminal_instance_id` 可暂时忽略,但字段命名应保留清晰语义 +- `3d_to_2d.json` 与优化后的 `2d_to_3d.json` 使用同一套命名:设备实例字段统一为 `device_instance_id`,端子实例字段统一为 `terminal_instance_id` +- `3d_to_2d.json` 不再输出旧字段 `instance_id`;QET 读取后再把 `device_instance_id / terminal_instance_id` 写入两张绑定表的 `instance_id` 列 第一版不回写: diff --git a/docs/FreeCAD 机柜装配操作文档.md b/docs/FreeCAD 机柜装配操作文档.md index cf71a47..1d04455 100644 --- a/docs/FreeCAD 机柜装配操作文档.md +++ b/docs/FreeCAD 机柜装配操作文档.md @@ -805,6 +805,8 @@ FreeCADExchange 会生成 3D -> 2D 的回写结果。 面板中的 `端子接入警告距离 mm` 用于判断“端子接入过长”。设为 `0` 时按默认规则自动计算;如果当前机柜尺度较大,且 600-700mm 的端子接入属于可接受的设备局部出线,可以把该值调到 700mm 左右再检查。这个参数只影响质量告警,不会放宽 `端子接入最大距离 mm`,也不会让超过最大距离的端子强行接入。 +如果路径网络诊断包含 `unconnected_terminals`,点击 `选择未接入端子`。系统会从最新 `RoutingPathNetwork` 诊断中选择未接入路由网络、或端子出口到最近网络距离超过 `端子接入最大距离 mm` 的端子及所属设备;状态栏会显示本次样例里的最大最近网络距离。选中后先确认设备是否已经装配到柜内正确位置,再看端子附近是否缺线槽入口、过线孔、黄色 `UserPath` 或设备局部出线路径;如果装配和路径都合理,但实际柜型允许更长的局部接入,再考虑调大 `端子接入最大距离 mm`。 + 如果有线槽但导线仍大量走布线面,优先看 `RoutingPathNetwork.QetDiagnosticIssueCodes` 是否包含 `wire_ducts_without_terminal_access / 线槽未接入端子主网络`。这个问题表示线槽已经识别成路径 carrier,但它所在的路径组件没有任何 `TerminalAccess`,导线很难自然进入线槽。中文报告会尽量显示“建议桥接到哪个主网络”和最近距离;`QetDiagnosticJson.wire_ducts_without_terminal_access[].bridge_suggestion` 会保存建议连接的两段 carrier、两个最近点和距离。处理方式是在 FreeCAD 中用 UserPath、线槽开口或桥接路径,把线槽组件接到端子接入所在的主网络,再重新生成布线路径网络和导线。 `生成布线路径网络` 不会把 FreeCAD 的 Origin 坐标轴、已有 `QETRouteCarrier*` 或异常巨大包围盒对象当成用户路径源。真正的 `UserPath` 需要来自你选中的草图线、Draft 线、带 `Points` 的路径对象,或通过 `按诊断建议生成桥接` / `选中两路径生成桥接` 生成。如果 `生成布线连接` 后诊断显示 `路径采用:线槽/主路径 0 条,布线面/辅助路径 N 条`,说明当前导线基本都在走安装板/门板等辅助 RoutingRange,优先补线槽到端子主网络的桥接路径,或手动画柜内主路径后点击 `选中路径作为用户路径`。 @@ -893,12 +895,50 @@ FreeCADExchange 会生成 3D -> 2D 的回写结果。 如果某条线已经生成但端子附近拉出很长一段斜线或折线,选中该导线对象查看 `QetRouteEntryDistanceMm`、`QetRouteExitDistanceMm`、`QetRouteAccessWarningDistanceMm` 和 `QetRouteAccessStatus`。其中 `LongAccessWarning` 表示起点或终点到主路径网络的接入距离超过当前告警阈值;`QetRouteAccessWarningSides` 会显示触发侧,`entry` 是起点侧,`exit` 是终点侧。出现该提示时,优先检查设备是否已经装配到正确位置、端子局部出线路径是否存在、用户路径或线槽是否离设备端子太远。 +端子默认出线方向来自工程端子 LCS 的本地 `+Z` 方向;如果工程端子带 `QetTerminalExitDirectionJson`,则优先使用该显式方向。该字段使用 FreeCAD 文档坐标,例如 `{"x":1,"y":0,"z":0}` 表示沿全局 X 正方向出线。这个设计对应 SW 中 CPoint/连接点保存出线方向的思路,适合把常用设备模板里的真实出线方向固化下来。 + +如果当前只是端子 CPoint 方向不对、但不需要画完整局部路径,可以直接在工程里设置显式出线方向: + +1. 选中一个可布线工程端子。 +2. 再选中一条表示出线方向的草图线、Draft 线、边或连续 Wire。 +3. 点击 `选中端子设置出线方向`。 +4. 系统会取所选线的第一段方向,归一化后写入该端子的 `QetTerminalExitDirectionJson`,只修改当前 FreeCAD 文档,不写 QET 数据库。 +5. 重新点击 `生成布线路径网络` 或 `生成布线连接`。 + +这个动作只保存“方向”,仍由系统按 `端子出线长度 mm` 和 `端子出线最大长度 mm` 计算出线段;如果端子附近需要梳状、折线或跨平面局部走线,应使用 `选中端子设置局部出线`。 + +如果端子没有显式方向,且默认 LCS 方向会在设备包围盒内走很深才离开设备,系统会尝试自动改用最近的侧向出口,避免第一段导线穿过设备主体或悬空过长。选中导线后查看 `QetRouteDiagnosticsJson.endpoint_access.*_diagnostics.exit_direction_corrected`,为 `true` 表示本次使用了自动校正方向;`original_exit_direction` 是原 LCS 方向,`exit_direction` 是实际采用方向。显式方向不会被自动改,若显式方向错误,应修改设备模板方向、工程端子 `QetTerminalExitDirectionJson`,或给该端子设置局部出线路径。 + +端子默认出线长度仍是 `terminal_exit_length=20mm`,但现在有 `terminal_exit_max_length=80mm` 上限。端子如果位于设备包围盒内部,系统会尝试沿出线方向离开设备外轮廓;如果离开包围盒需要超过上限,出线段会被截断,并在诊断中标记 `terminal_exit_length_capped`。出现这个问题通常表示端子方向朝内、设备包围盒过大,或端子位置放在设备深处;不要简单把上限调得很大,应优先检查端子 LCS 方向、显式出线方向或局部出线路径。 + +选中生成的导线对象后,可以在 `QetRouteDiagnosticsJson.endpoint_access.start_diagnostics / end_diagnostics` 中查看每侧端子的 `exit_rule`、`exit_direction_source`、`exit_direction`、`requested_exit_length_mm`、`actual_exit_length_mm`、`device_exit_required_length_mm` 和 `exit_length_capped`。如果 `exit_rule=local_route`,说明该端子正在使用 `QetTerminalLocalRoutePointsJson` 局部出线路径;如果 `exit_length_capped=true`,说明这侧端子按当前显式方向无法在合理长度内离开设备包围盒,后续容易出现端子附近悬空过长或穿模,应优先修正端子方向或给该端子设置局部出线路径。 + +点击 `检查布线路径网络` 时,也会提前汇总端子出线问题。`corrected_terminal_exits[]` 表示默认 LCS 出线方向被系统自动改到最近侧向出口,通常说明设备模板端子方向还需要复查;`capped_terminal_exits[]` 表示端子按当前显式方向或默认方向无法在最大出线长度内离开设备包围盒,系统已经截断出线段。两个数组都会保留端子名、端子 UUID、父设备、原始方向、实际方向、请求长度、实际长度和上限,便于手动验收时先定位设备端子,再决定是修模板 CPoint、设置工程端子局部出线,还是补主路径入口。 + +如果 `QetTerminalExitDirectionJson` 格式错误、方向向量无法解析或方向长度为 0,路径网络诊断会额外输出 `invalid_terminal_exit_directions[]`。这种情况不会让 FreeCAD 依赖 QET 计算 3D 路径,而是明确提示当前 FreeCAD 文档或设备模板中的 CPoint 方向元数据需要修正;可以用 `选中端子设置出线方向` 重写当前工程端子的显式方向,或回到设备模板中修正后重新导入。 + +如果要直接定位这些端子,点击 `选择出线问题端子`。系统会从最新 `RoutingPathNetwork` 诊断中合并选择 `corrected_terminal_exits[]`、`capped_terminal_exits[]`、`invalid_terminal_exit_directions[]` 和 `invalid_terminal_local_routes[]` 对应的端子及父设备;这个操作只负责定位,不会自动改端子方向或重新布线。选中后先看端子 LCS 朝向、显式 `QetTerminalExitDirectionJson`、局部路径 `QetTerminalLocalRoutePointsJson`、设备包围盒是否过大,再决定是否设置显式出线方向、设置局部出线路径或回到设备模板修正 CPoint。 + +每个自动生成的 `TerminalAccess` carrier 会记录接入目标:`QetTerminalAccessTargetKind / Name / Label / DistanceMm` 表示端子局部出口接到哪条线槽、`UserPath`、过线孔或面板路径;`QetTerminalAccessTargetRule` 表示选择规则,`main_path_nearest` 是直接接入最近主路径,`main_path_preferred_over_fallback` 是附近虽有 `RoutingRange` 等兜底路径但系统仍优先接入主路径,`fallback_only` 表示当前找不到线槽/UserPath/过线孔等主路径,只能退回面板路径或辅助路径。`QetTerminalAccessFallbackTarget=1` 时,应优先补线槽入口、黄色草图 `UserPath`、过线孔或设备局部路径,再重新生成布线路径网络。 + +如果端子已经通过局部出线路径离开设备,但局部出口到主路径入口的短接入段会重新穿过该端子所属设备包围盒,系统会给这段 `TerminalAccess` 自动加一个外侧绕行折点。`QetTerminalAccessAvoidedEndpointDevice=1` 表示这条接入线已经做过端点设备避让;选中最终导线时,也可以在 `QetRouteDiagnosticsJson.network.start_terminal_access_avoided_endpoint_device / end_terminal_access_avoided_endpoint_device` 里看是哪一侧触发。这个规则只处理端子接入主路径前的短段,不替代整条导线的全局碰撞避让。如果避让后仍穿其它设备,仍需要补更合理的 UserPath、线槽入口或设备局部出线路径。 + +点击 `检查布线路径网络` 时,诊断 JSON 也会汇总 `terminal_access_fallback_targets[]` 和 `terminal_access_endpoint_device_avoidance[]`。前者表示某些端子接入只能退回 `RoutingRange` 等兜底路径,通常需要补线槽入口、`UserPath` 或过线孔;后者表示某些端子接入段已经为了避开端点设备做了绕行,后续我进行手动验收时会优先检查这些端子附近是否缺设备局部出线路径或主路径入口。这两个数组都包含端子名、端子 UUID、父设备、`TerminalAccess` 接入段对象名、目标路径类型、目标路径对象名、`access_points[]` 和 `access_length_mm`,便于自动定位对象并判断接入段是否过长、是否绕回设备附近。 + +如果要定位端子接入退回到布线面的对象,点击 `选择端子退回位置`。该按钮既能读取独立 `RoutingPathNetwork.terminal_access_fallback_targets[]`,也能读取批量布线诊断里的端子退回样例;只执行 `检查布线路径网络`、还没有生成导线时,也可以先选中端子、父设备、`TerminalAccess` 接入段和退回目标,判断应该补线槽入口、黄色 `UserPath`、过线孔还是设备局部出线路径。 + +如果这些退回目标只是缺一小段到主路径的入口,可以直接点击 `按诊断建议生成桥接`。该按钮现在既能读取批量布线诊断里的 `terminal_access_fallback_target_samples[]`,也能读取刚执行 `检查布线路径网络` 后生成的 `RoutingPathNetwork.terminal_access_fallback_targets[]`,自动在退回布线面和最近线槽、`UserPath`、过线孔等主路径之间生成 `TerminalAccessFallbackBridge`。生成后重新执行 `生成布线路径网络` 或 `生成布线连接`,端子接入会优先走补出的桥接路径;如果仍然退回布线面,说明需要补更明确的主路径入口或设备局部出线路径。 + +如果要直接定位端点设备避让问题,点击 `选择端点避让接入`。系统会读取最新 `RoutingPathNetwork` 诊断中的 `terminal_access_endpoint_device_avoidance[]`,选中对应端子、父设备、目标主路径和 `TerminalAccess` 接入段;这个按钮主要服务手动验收和开发侧复查,只定位对象,不重新布线、不写 QET 数据库。 + `检查布线路径网络` 和批量布线的 `routing_path_network_diagnostic.long_terminal_accesses[]` 会保留长接入样例。样例里包含 `parent_device_label / parent_device_name`、`terminal_origin`、`terminal_access_points`、`terminal_access_dominant_axis` 和 `terminal_access_axis_lengths_mm`。如果 `terminal_access_dominant_axis` 是 `z`,且 `z` 方向长度占大头,通常表示端子点和柜内主路径平面高度差过大;优先检查该设备装配高度、端子 LCS 方向,或为该设备补局部出线路径。 如果要快速定位这些端子,点击 `选择长接入端子`。系统会从最新批量布线诊断中的 `routing_path_network_diagnostic.long_terminal_accesses[]` 查找端子对象并选中。真实工程中类似 PEN 325-328 这类端子被选中后,可以直接检查它们是否位于异常高度、是否缺设备局部出线路径,或附近是否缺主路径入口。 如果要从设备角度排查,点击 `选择长接入设备`。系统会读取长接入样例里的 `parent_device_name / parent_device_label` 并选中对应设备。通常先用 `选择长接入端子` 看具体端子点,再用 `选择长接入设备` 检查该设备整体是否装配到正确高度、端子 LCS 是否随设备移动,以及设备附近是否需要补局部出线路径。 +这两个长接入定位按钮既能读取批量布线诊断内嵌的 `routing_path_network_diagnostic.long_terminal_accesses[]`,也能直接读取独立 `RoutingPathNetwork` 诊断里的 `long_terminal_accesses[]`。因此只执行 `检查布线路径网络`、还没有生成导线时,也可以先定位长接入端子和设备,适合在正式布线前先修装配高度、端子方向和局部出线路径。 + 如果确认是某个工程端子缺少设备局部出线路径,可以直接在当前装配工程里补: 1. 选中一个可布线工程端子。 @@ -945,6 +985,8 @@ FreeCADExchange 会生成 3D -> 2D 的回写结果。 `汇总布线诊断` 还会根据当前问题给出下一步建议,例如 `点击“选择缺端子设备”定位需要补工程端子的设备`、`点击“选择异常导线”定位带问题码的导线`、`点击“选择碰撞父装配”确认结构件后再标记忽略碰撞`。手测时可以先看这一行,再决定下一步点哪个定位按钮。 +如果路径网络诊断中存在 `terminal_exit_direction_corrected`、`terminal_exit_length_capped`、`invalid_terminal_exit_directions` 或 `invalid_terminal_local_routes`,汇总建议会提示点击 `选择出线问题端子`。这一步用于先定位设备端子本身的问题,再决定是否修设备模板 CPoint/LCS、重写显式出线方向、设置工程端子局部出线路径,或补端子附近到线槽/UserPath 的入口。 + 如果要判断某根线是明显穿模还是只是距离太近,选中导线对象查看 `QetRouteCollisionStatus`、`QetRouteHardIntersectionCount` 和 `QetRouteClearanceWarningCount`。`HardIntersectionWarning` 表示导线穿过障碍包围盒,应优先改路径或设备位置;`ClearanceWarning` 表示导线没有穿过障碍,但低于安全间隙,通常需要微调路径或安全间隙参数。 批量诊断中的 `collision_samples[]` 也会带 `wire_object_label`。如果报告出现“碰撞示例”,可以先复制这个 Label 到树目录中查找对应导线,再结合 `collision_kind` 判断是硬碰撞还是安全间隙。碰撞样例还会带 `obstacle_parent_labels / obstacle_parent_names`,用于判断类似 `NAUO141` 这样的零件属于前门、柜体、安装板还是具体设备;确认是装配辅助件或可穿过结构后,再手动标记为忽略碰撞对象。 diff --git a/docs/FreeCAD 端子显示连线保存回写开发文档.md b/docs/FreeCAD 端子显示连线保存回写开发文档.md index e69117e..9f85030 100644 --- a/docs/FreeCAD 端子显示连线保存回写开发文档.md +++ b/docs/FreeCAD 端子显示连线保存回写开发文档.md @@ -377,7 +377,9 @@ ManualWiring.py - `QET_Template_AddTerminal` - `QET_Template_SaveAsFCStd` - 第一版端子位置可以通过用户选择对象/点位后的三维坐标生成。 -- 第一版端子方向默认使用单位旋转,后续再补出线方向编辑。 +- 第一版端子方向以模板 LCS 的本地 `+Z` 作为默认出线方向;工程端子也允许保存 `QetTerminalExitDirectionJson`,用文档坐标明确指定出线方向,例如 `{"x":1,"y":0,"z":0}`。这相当于 SW Electrical 3D 的 CPoint 方向数据,适合沉淀到常用设备模板。 +- 如果没有显式出线方向,FreeCAD 侧会在端子位于设备包围盒内部且默认 LCS 方向需要很长距离才能离开设备时,自动尝试改用最近的侧向出口;显式方向不自动改,只按出线长度上限诊断,避免覆盖模板作者或人工指定的 CPoint 方向。 +- 当前工程可通过 `QetTerminalLocalRoutePointsJson` 保存端子局部出线路径;一旦存在局部路径,自动布线优先使用它连接到 TerminalAccess 和柜内主路径网络,不再按默认 LCS 出线段生成。 模板端子属性: @@ -616,4 +618,8 @@ ManualWiring.py - 2026-05-20:新增 `TemplateAuthoringPanel.py`,提供“设备模板端子制作”任务面板和 `QET_Template_OpenAuthoringPanel` 命令;面板支持输入端子名、添加端子、校验端子、保存 FCStd,并已同步到运行目录验证模块可导入。 - 2026-05-25:新增 `WiringImport.py`,把 `2d_to_3d.json` 中的 `wires` 导入为 `QETWiring_01_Tasks` 下的导线任务;`ExchangeBootstrap.py` 已接入启动导入流程。`ManualWiringPanel.py` 增加任务列表、选择导线任务和删除最后折点,按任务生成导线时会把 `wire_id / net_uuid / group_uuid / wire_mark` 写入正式导线对象,并把任务状态更新为 `Routed`。已通过 35 项 `freecad_exchange*_test.py` 单元测试,并安装到 `D:\fc\run-FreeCAD-1.1.1` 运行目录验证 `WiringImport / ManualWiring / ManualWiringPanel / WiringObjects` 可导入。 - 2026-05-25:修复 FCStd 设备导入后模板 LCS 留在工程场景的问题;导入时会把模板槽位位置和朝向缓存到设备组 `QetTemplateSlotsJson`,随后删除模板 LCS 及其 `OriginFeatures`,工程端子仍按 `terminal_uuid` 生成到 `QETTerminals_*`。已补单元测试验证 FCStd 导入不保留模板 LCS、切回 STEP 会清空旧槽位缓存,并避免重复访问已删除对象的 `Group / InList / Name`。 +- 2026-06-15:新增 QET 待装配设备导入策略。FreeCAD 从 QET 打开项目时,新设备默认只创建 `QETDevice_*` 设备组并标记 `QetAssemblyState=Pending`,不再自动导入几何到原点;已装配设备如果在 `scene.FCStd` 中已有模型对象,则继续复用并标记 `Placed`。新增 `list_pending_devices()` 后端清单和 `QET_Exchange_InsertPendingDevice` 命令,用户可选中整个 `QETDevice_*` 设备组执行“插入待装配设备”,导入模型后状态转为 `Placed`。已用 `freecad_exchange_device_import_fcstd_test.py` 验证默认 pending、显式插入、命令注册和清单粒度只返回整设备组,不返回 `JHD5-6灰001` 等内部几何子对象。待跟进:补专用待装配设备任务面板或树右键菜单。 +- 2026-06-15:新增 `PendingDeviceAssemblyPanel.py` 待装配设备任务面板,提供“刷新清单”“插入设备”“插入到选中目标”三个入口。面板清单按 `QETDevice_*` 整设备显示,用户可先在 3D 视图选择安装板、导轨、线槽或柜体面,再把设备插入到目标对象;如果 FreeCAD 提供选中面的拾取点或面中心点,则优先用该点作为设备 Placement,否则退回目标对象 Placement。`insert_pending_device()` 新增 `mount_target / mount_placement` 参数并写入 `QetMountMode / QetMountHostName / QetMountHostLabel / QetMountHostKind`,保存 `scene.FCStd` 后可作为装配状态恢复依据。已用单元测试验证插入到安装目标、显式安装点优先、面板命令注册和清单显示。 +- 2026-06-15:补强待装配设备贴合语义。`insert_pending_device()` 新增 `mount_normal / mount_offset_mm`,可按选中面的法向应用贴合间距,并把 `QetMountHostNormalJson / QetMountOffsetMm` 写入设备组;待装配面板新增“贴合间距”输入,选中面时会尽量读取面法向,插入到目标时传给后端。已用单元测试验证设备 Placement 会沿法向偏移,且法向和间距元数据被保存。 +- 2026-06-15:新增 `tests/manual/freecad_pending_device_scene_smoke.py`,用真实 `FreeCADCmd.exe` 创建设备模型和 `QETScene.FCStd`,执行待装配设备插入、保存、关闭、重新打开,并断言设备仍为 `Placed`、Placement 为 `(10,20,35)`、挂载目标和法向/间距元数据仍存在。已在 `D:\fc\run-FreeCAD-1.1.1\bin\FreeCADCmd.exe` 下执行通过。 ``` diff --git a/docs/superpowers/plans/2026-06-17-freecad-terminal-access-routing.md b/docs/superpowers/plans/2026-06-17-freecad-terminal-access-routing.md new file mode 100644 index 0000000..9e9eea6 --- /dev/null +++ b/docs/superpowers/plans/2026-06-17-freecad-terminal-access-routing.md @@ -0,0 +1,128 @@ +# FreeCAD Terminal Access Routing Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 参考 SOLIDWORKS Electrical 3D 的 CPoint/RPoint 思路,把 FreeCAD 自动布线的端子出线方向、出线长度和 TerminalAccess 接入路径做成可诊断、可测试、可手动验收的工程规则。 + +**Architecture:** 第一阶段保留现有 `RoutingNetwork.py` 作为路径网络核心,但把端子出线规则集中到少量函数:显式出线方向优先,其次 LCS 方向,再通过设备包围盒和候选方向做校正。`AutoRouting.py` 继续消费 `terminal_access_path_points_with_network_access()`,诊断数据写入 route/report,面板和文档读取这些字段。 + +**Tech Stack:** FreeCAD Python API, `src/Mod/FreeCADExchange`, `unittest`, `FreeCADCmd.exe` + +--- + +### Task 1: 出线长度上限和方向诊断 + +**Files:** +- Modify: `src/Mod/FreeCADExchange/RoutingNetwork.py` +- Modify: `src/Mod/FreeCADExchange/AutoRouting.py` +- Test: `tests/python/freecad_exchange_auto_routing_test.py` + +- [x] **Step 1: Write failing tests** + +Add tests that create a terminal inside a large device box and assert that the default access path does not extend indefinitely through the full box. Add a second test that verifies the access diagnostics include the selected direction, requested exit length, actual exit length, and whether the length was capped. + +- [x] **Step 2: Run focused tests** + +Run: + +```powershell +python -B -m unittest tests.python.freecad_exchange_auto_routing_test.AutoRoutingTest +``` + +Expected before implementation: the new tests fail because current bbox fallback can return a long exit segment and route diagnostics do not expose capped length metadata. + +- [x] **Step 3: Implement minimal routing rule** + +Add `terminal_exit_max_length` option with a conservative default. The device-aware exit point should cap bbox-derived length and record diagnostics when the cap is reached. Keep Chinese comments near non-obvious engineering rules. + +- [x] **Step 4: Verify** + +Run the same focused tests. Expected: PASS. + +### Task 2: 显式端子出线方向 + +**Files:** +- Modify: `src/Mod/FreeCADExchange/TerminalObjects.py` +- Modify: `src/Mod/FreeCADExchange/RoutingNetwork.py` +- Test: `tests/python/freecad_exchange_auto_routing_test.py` + +- [x] **Step 1: Write failing tests** + +Add tests that set a terminal property such as `QetTerminalExitDirectionJson={"x":1,"y":0,"z":0}` and verify the access path uses that vector instead of LCS `+Z`. + +- [x] **Step 2: Implement explicit direction reader** + +Add a small helper that reads explicit direction JSON or comma-separated text, normalizes it, and falls back to current LCS direction when missing or invalid. + +- [x] **Step 3: Verify** + +Run the focused tests and full auto-routing test module. + +### Task 3: TerminalAccess 接入主路径质量 + +**Files:** +- Modify: `src/Mod/FreeCADExchange/RoutingNetwork.py` +- Modify: `src/Mod/FreeCADExchange/AutoRouting.py` +- Test: `tests/python/freecad_exchange_auto_routing_test.py` + +- [x] **Step 1: Write failing tests** + +Add tests where both a main UserPath/WireDuct and a fallback RoutingRange exist. Assert TerminalAccess prefers the main path unless outside max distance. + +- [x] **Step 2: Improve target selection diagnostics** + +Expose target kind, target label, distance, primary segment count, and fallback reason in route diagnostics. + +- [x] **Step 3: Verify** + +Run focused and full routing tests. + +### Task 4: 文档和运行目录同步 + +**Files:** +- Modify: `docs/FreeCAD 机柜装配操作文档.md` +- Modify: `docs/FreeCAD 端子显示连线保存回写开发文档.md` +- Runtime copy: `D:\fc\run-FreeCAD-1.1.1\Mod\FreeCADExchange` + +- [x] **Step 1: Update Chinese docs** + +Document terminal exit direction, explicit direction property, exit length cap, TerminalAccess target metadata, and manual testing steps. + +- [x] **Step 2: Sync runtime plugin** + +Run: + +```powershell +robocopy D:\LightWork3D\src\Mod\FreeCADExchange D:\fc\run-FreeCAD-1.1.1\Mod\FreeCADExchange /E /NFL /NDL /NJH /NJS /NP +``` + +Robocopy return code 0 or 1 is acceptable. + +- [x] **Step 3: FreeCADCmd verification** + +Run: + +```powershell +D:\fc\run-FreeCAD-1.1.1\bin\FreeCADCmd.exe -c "import sys; sys.path.insert(0, r'D:\fc\run-FreeCAD-1.1.1\Mod\FreeCADExchange'); import AutoRouting, RoutingNetwork, TerminalObjects; print('freecad_exchange_import_ok')" +``` + +Expected: `freecad_exchange_import_ok`. + +### Task 5: TerminalAccess 端点设备避让 + +**Files:** +- Modify: `src/Mod/FreeCADExchange/RoutingNetwork.py` +- Test: `tests/python/freecad_exchange_auto_routing_test.py` +- Docs: `docs/FreeCAD 机柜装配操作文档.md` + +- [x] **Step 1: Write failing test** + +Add a local-route terminal case where the short TerminalAccess segment from the local route exit to a UserPath would re-enter the terminal parent device bbox. + +- [x] **Step 2: Implement endpoint-device avoidance** + +When generating TerminalAccess carriers, test only the short access-to-target segment against the terminal parent bbox. If the direct orthogonal path crosses that bbox, choose the shortest dogleg candidate outside the bbox and mark `QetTerminalAccessAvoidedEndpointDevice=1`. + +- [x] **Step 3: Verify and document** + +Run the focused TerminalAccess tests and document the manual-test property. diff --git a/docs/数据库设计.md b/docs/数据库设计.md index 9c45b58..998b34f 100644 --- a/docs/数据库设计.md +++ b/docs/数据库设计.md @@ -425,30 +425,74 @@ QET 侧建议保留并改造一个工具项: ### 15.1 `2d_to_3d.json` -第一版只要求包含最小绑定信息: +第一版交换文件使用优化后的 `schema_version=2.0` 快照结构。 -- 设备绑定: - - `project_uuid` - - `element_uuid` - - `instance_id` -- 端子绑定: +`2d_to_3d.json` 不再把设备顶层当成单个 `element_uuid` 镜像,而是按 3D 设备实例组织: + +- 顶层: - `project_uuid` - - `terminal_uuid` - - `instance_id` + - `devices[]` + - `device_models[]` + - `wires[]` +- 设备实例: + - `devices[].device_instance_id` + - `devices[].display_tag` + - `devices[].terminals[]` +- 设备端子: + - `devices[].terminals[].terminal_uuid` + - `devices[].terminals[].element_uuid` + - `devices[].terminals[].terminal_instance_id` +- 设备模型: + - `device_models[].device_instance_id` + - `device_models[].resolved_model_path` 说明: -- `instance_id` 在第一版中由 FreeCAD 侧生成更合理 -- 如果首次进入 3D 时尚未生成 `instance_id`,可以先导出为空,再由 FreeCAD 创建后回写 +- JSON 协议中用 `device_instance_id` 表达 3D 设备实例,避免和端子实例混用同一个字段名 +- JSON 协议中用 `terminal_instance_id` 表达 3D 端子对象实例 +- 数据库绑定表列名仍然保持 `instance_id`,由 QET 在读取 JSON 时把 `device_instance_id / terminal_instance_id` 映射进去 ### 15.2 `3d_to_2d.json` -第一版只建议回写: +`3d_to_2d.json` 文件名保持不变,但字段名同步为优化后的 2D/3D 交换协议。 + +推荐结构: + +```json +{ + "schema_version": "2.0", + "project_uuid": "string", + "generated_at": "2026-05-18T11:00:00+08:00", + "instances": [ + { + "element_uuid": "string", + "device_instance_id": "string" + } + ], + "terminals": [ + { + "terminal_uuid": "string", + "device_instance_id": "string", + "terminal_instance_id": "string" + } + ] +} +``` + +当前只建议回写: - `project_uuid` - `element_uuid` -- `instance_id` +- `device_instance_id` - `terminal_uuid` +- `terminal_instance_id` + +说明: + +- `3d_to_2d.json` 不再输出旧字段 `instance_id` +- QET 读取 `instances[].device_instance_id` 后写入 `project_2d3d_symbol_binding.instance_id` +- QET 读取 `terminals[].terminal_instance_id` 后写入 `project_2d3d_terminal_binding.instance_id` +- `terminals[].device_instance_id` 用于说明该端子属于哪个 3D 设备实例,便于校验和排障 当前不要求回写: diff --git a/src/Mod/FreeCADExchange/AutoRouting.py b/src/Mod/FreeCADExchange/AutoRouting.py index 204c93d..8026b8f 100644 --- a/src/Mod/FreeCADExchange/AutoRouting.py +++ b/src/Mod/FreeCADExchange/AutoRouting.py @@ -31,6 +31,8 @@ LOCAL_ACCESS_DETOUR_CLEARANCE = 10.0 DEFAULT_OPTIONS = { # 端子出来先走一小段,避免导线贴着设备外壳起步。 "terminal_exit_length": 20.0, + # 设备包围盒很大或端子方向朝内时,不允许默认出线无限延长;超限会写入诊断。 + "terminal_exit_max_length": 80.0, "lane_axis": "auto", "lane_spacing": 10.0, "lane_max_offset": 30.0, @@ -103,10 +105,13 @@ DEFAULT_OPTIONS = { "preflight_routeability_sample_limit": 0, # 自动布线时如果诊断能明确建议“线槽组件 -> 端子主网络”的桥接点, # 先生成 UserPath 桥再布线,避免真实工程长期退回 RoutingRange 兜底。 - "auto_create_diagnostic_bridges": False, + "auto_create_diagnostic_bridges": True, # 第一次布线若发现“兜底区域 -> 当前主路径”的缺主路径绕行配对, # 自动补一段 UserPath 桥并重跑一次,让少量剩余碰撞线回到主路径网络。 - "auto_create_main_path_detour_bridges": False, + "auto_create_main_path_detour_bridges": True, + # 第一次布线若发现端子接入退回布线面/辅助路径, + # 自动补一段到最近主路径的 UserPath 桥并重跑一次。 + "auto_create_terminal_access_fallback_bridges": True, } @@ -324,6 +329,44 @@ def _auto_lane_axis(route_points): return "x" +def _dominant_route_axis(route_points): + points = [_vector(point) for point in route_points or []] + if len(points) < 2: + return "" + extents = {"x": 0.0, "y": 0.0, "z": 0.0} + for index in range(len(points) - 1): + start = points[index] + end = points[index + 1] + extents["x"] += abs(float(end.x) - float(start.x)) + extents["y"] += abs(float(end.y) - float(start.y)) + extents["z"] += abs(float(end.z) - float(start.z)) + dominant_axis = max(extents, key=lambda axis: extents[axis]) + if extents[dominant_axis] <= 0.000001: + return "" + return dominant_axis + + +def _secondary_lane_axis(route_points, primary_axis): + dominant_axis = _dominant_route_axis(route_points) + for axis in ("z", "y", "x"): + if axis != primary_axis and axis != dominant_axis: + return axis + for axis in ("z", "y", "x"): + if axis != primary_axis: + return axis + return "" + + +def _lane_offset_for_order(lane_order, lane_direction, lane_spacing, max_offset): + primary_offset = float(lane_order) * lane_spacing * lane_direction + secondary_order = 0 + if max_offset > 0.0 and abs(primary_offset) > max_offset: + max_primary_order = max(int(math.floor(max_offset / lane_spacing)), 1) if lane_spacing > 0.0 else 1 + secondary_order = max(lane_order - max_primary_order, 0) + primary_offset = max_offset if primary_offset > 0.0 else -max_offset + return primary_offset, secondary_order + + def _lane_payload(route_index, options, route_points=None): opts = options or {} lane_axis = (opts.get("lane_axis") or "y").lower() @@ -335,32 +378,117 @@ def _lane_payload(route_index, options, route_points=None): lane_spacing = float(opts.get("lane_spacing", 0.0) or 0.0) if lane_index <= 0: lane_offset = 0.0 + secondary_axis = "" + secondary_offset = 0.0 else: lane_order = (lane_index + 1) // 2 lane_direction = 1.0 if lane_index % 2 == 1 else -1.0 - lane_offset = float(lane_order) * lane_spacing * lane_direction - # 多根线共路时 lane 序号可能很大;限制显示偏移,避免把线推到柜体或线槽外。 max_offset = float(opts.get("lane_max_offset", 0.0) or 0.0) - if max_offset > 0.0 and abs(lane_offset) > max_offset: - lane_offset = max_offset if lane_offset > 0.0 else -max_offset - return { + lane_offset, secondary_order = _lane_offset_for_order( + lane_order, + lane_direction, + lane_spacing, + max_offset, + ) + secondary_axis = "" + secondary_offset = 0.0 + if secondary_order > 0 and lane_spacing > 0.0: + secondary_axis = _secondary_lane_axis(route_points, lane_axis) + secondary_direction = 1.0 if secondary_order % 2 == 1 else -1.0 + secondary_magnitude = ((secondary_order + 1) // 2) * lane_spacing + if max_offset > 0.0 and secondary_magnitude > max_offset: + secondary_magnitude = max_offset + secondary_offset = secondary_magnitude * secondary_direction + payload = { "index": lane_index, "axis": lane_axis, "spacing_mm": lane_spacing, "max_offset_mm": float(opts.get("lane_max_offset", 0.0) or 0.0), "offset_mm": lane_offset, } + if secondary_axis and abs(secondary_offset) > 0.000001: + # 主方向达到上限后,使用第二方向继续错开密集导线,避免多根线在同一路径上完全重合。 + payload["secondary_axis"] = secondary_axis + payload["secondary_offset_mm"] = secondary_offset + return payload def _apply_lane_offset(points, lane): offset = float((lane or {}).get("offset_mm", 0.0) or 0.0) - if abs(offset) <= 0.000001: + secondary_offset = float((lane or {}).get("secondary_offset_mm", 0.0) or 0.0) + if abs(offset) <= 0.000001 and abs(secondary_offset) <= 0.000001: return list(points or []) axis = (lane or {}).get("axis", "y") - return [ - _with_axis(point, axis, _axis_value(point, axis) + offset) - for point in list(points or []) - ] + secondary_axis = (lane or {}).get("secondary_axis", "") + result = [] + for point in list(points or []): + shifted = point + if abs(offset) > 0.000001: + shifted = _with_axis(shifted, axis, _axis_value(shifted, axis) + offset) + if secondary_axis in {"x", "y", "z"} and abs(secondary_offset) > 0.000001: + shifted = _with_axis( + shifted, + secondary_axis, + _axis_value(shifted, secondary_axis) + secondary_offset, + ) + result.append(shifted) + return result + + +def _lane_payload_boundary_aware( + route_index, + options, + route_points=None, + boundary_violation_count=None, + obstacle_hit_count=None, +): + lane = _lane_payload(route_index, options, route_points=route_points) + opts = options or {} + has_boundary_score = callable(boundary_violation_count) + has_obstacle_score = callable(obstacle_hit_count) + if ( + str(opts.get("lane_axis", "auto") or "auto").lower() != "auto" + or abs(float(lane.get("offset_mm", 0.0) or 0.0)) <= 0.000001 + or (not has_boundary_score and not has_obstacle_score) + ): + return lane + + candidates = [] + current_axis = str(lane.get("axis", "") or "").strip() or "y" + current_offset = float(lane.get("offset_mm", 0.0) or 0.0) + current_points = _apply_lane_offset(route_points, lane) + current_obstacle_score = int(obstacle_hit_count(current_points) or 0) if has_obstacle_score else 0 + offsets = (current_offset, -current_offset) if current_obstacle_score > 0 else (current_offset,) + seen = set() + for axis in (current_axis, "x", "y", "z"): + if axis not in {"x", "y", "z"}: + continue + for offset in offsets: + key = (axis, round(float(offset), 6)) + if key in seen: + continue + seen.add(key) + candidate = dict(lane) + candidate["axis"] = axis + candidate["offset_mm"] = float(offset) + points = _apply_lane_offset(route_points, candidate) + boundary_score = int(boundary_violation_count(points) or 0) if has_boundary_score else 0 + obstacle_score = int(obstacle_hit_count(points) or 0) if has_obstacle_score else 0 + candidates.append((boundary_score, obstacle_score, axis, float(offset), candidate)) + if not candidates: + return lane + # lane 自动轴选择优先留在柜内、避开设备;分数相同时保持原先的轴和方向,减少既有工程变化。 + dominant_axis = _dominant_route_axis(route_points) + candidates.sort( + key=lambda item: ( + item[0], + item[1], + 1 if item[2] == dominant_axis else 0, + 0 if item[2] == current_axis else 1, + 0 if abs(item[3] - current_offset) <= 0.000001 else 1, + ) + ) + return candidates[0][4] def _orthogonal_axis_order(start_point, end_point, preferred_axis=None): @@ -787,8 +915,18 @@ def _project_uuid(doc, start_terminal=None, end_terminal=None): def index_terminals(doc): """Return {terminal_uuid: terminal_object} for routable engineering terminals.""" + indexed = {} + for terminal in _collect_routable_terminals(doc): + terminal_uuid = (getattr(terminal, "QetTerminalUuid", "") or "").strip() + if terminal_uuid and terminal_uuid not in indexed: + indexed[terminal_uuid] = terminal + return indexed + + +def _collect_routable_terminals(doc): + """Return routable engineering terminals, preserving duplicate QET terminal UUIDs.""" if doc is None: - return {} + return [] terminals = [] root = None @@ -805,12 +943,112 @@ def index_terminals(doc): if TerminalObjects.is_terminal_object(obj) ) - indexed = {} + unique = [] + seen = set() for terminal in terminals: - terminal_uuid = (getattr(terminal, "QetTerminalUuid", "") or "").strip() - if terminal_uuid and terminal_uuid not in indexed: - indexed[terminal_uuid] = terminal - return indexed + marker = id(terminal) + if marker in seen: + continue + seen.add(marker) + unique.append(terminal) + return unique + + +def _terminal_endpoint_value(terminal, property_name): + return str(getattr(terminal, property_name, "") or "").strip() + + +def _terminal_uuid_duplicate_summary(terminal_candidates, limit=8): + counts = {} + samples = [] + for terminal in list(terminal_candidates or []): + terminal_uuid = _terminal_endpoint_value(terminal, "QetTerminalUuid") + if not terminal_uuid: + continue + counts[terminal_uuid] = counts.get(terminal_uuid, 0) + 1 + for terminal_uuid, count in sorted(counts.items()): + if count <= 1: + continue + if len(samples) < limit: + samples.append({"terminal_uuid": terminal_uuid, "count": count}) + return { + "duplicate_terminal_uuid_count": sum(1 for count in counts.values() if count > 1), + "duplicate_terminal_uuid_samples": samples, + } + + +def _terminal_endpoint_match(terminal_candidates, item, side, allow_single_fallback=True): + terminal_uuid = _wire_item_value(item, "{0}_terminal_uuid".format(side)) + result = { + "terminal": None, + "terminal_uuid": terminal_uuid, + "candidate_count": 0, + "context_match_count": 0, + "ambiguous": False, + "reason_code": "", + } + if not terminal_uuid: + result["reason_code"] = "missing_terminal_uuid" + return result + candidates = [ + terminal + for terminal in list(terminal_candidates or []) + if _terminal_endpoint_value(terminal, "QetTerminalUuid") == terminal_uuid + ] + result["candidate_count"] = len(candidates) + if not candidates: + result["reason_code"] = "terminal_uuid_not_found" + return result + + expected_instance_id = _wire_item_value(item, "{0}_instance_id".format(side)) + expected_element_uuid = _wire_item_value(item, "{0}_element_uuid".format(side)) + if not expected_instance_id and not expected_element_uuid: + if len(candidates) == 1 and allow_single_fallback: + result["terminal"] = candidates[0] + return result + result["ambiguous"] = len(candidates) > 1 + result["reason_code"] = "ambiguous_terminal_uuid" + return result + + matched = [] + for terminal in candidates: + instance_match = ( + expected_instance_id + and _terminal_endpoint_value(terminal, "QetInstanceId") == expected_instance_id + ) + element_match = ( + expected_element_uuid + and _terminal_endpoint_value(terminal, "QetElementUuid") == expected_element_uuid + ) + if instance_match or element_match: + score = (4 if instance_match else 0) + (2 if element_match else 0) + matched.append((score, terminal)) + result["context_match_count"] = len(matched) + if not matched: + if allow_single_fallback and len(candidates) == 1: + result["terminal"] = candidates[0] + return result + result["reason_code"] = "terminal_uuid_not_in_endpoint_context" + return result + # 同名 terminal_uuid 在真实 v2 快照里可能重复;优先命中同一 3D 实例,再看 2D 设备。 + matched.sort(key=lambda pair: pair[0], reverse=True) + best_score = matched[0][0] + best_matches = [terminal for score, terminal in matched if score == best_score] + if len(best_matches) > 1: + result["ambiguous"] = True + result["reason_code"] = "ambiguous_terminal_uuid_context" + return result + result["terminal"] = best_matches[0] + return result + + +def _matching_terminal_for_wire_endpoint(terminal_candidates, item, side, allow_single_fallback=True): + return _terminal_endpoint_match( + terminal_candidates, + item, + side, + allow_single_fallback=allow_single_fallback, + ).get("terminal") def _terminal_element_summary(terminals, element_uuid, limit=5): @@ -825,15 +1063,21 @@ def _terminal_property_summary(terminals, property_name, expected_value, limit=5 expected = str(expected_value or "").strip() if not expected: return {"count": 0, "samples": []} + terminal_values = ( + list((terminals or {}).values()) + if isinstance(terminals, dict) + else list(terminals or []) + ) samples = [] count = 0 - for terminal_uuid, terminal in (terminals or {}).items(): + for terminal in terminal_values: terminal_value = str(getattr(terminal, property_name, "") or "").strip() if terminal_value != expected: continue count += 1 if len(samples) >= limit: continue + terminal_uuid = _terminal_endpoint_value(terminal, "QetTerminalUuid") samples.append( { "terminal_uuid": str(terminal_uuid or "").strip(), @@ -853,6 +1097,8 @@ _MISSING_ENDPOINT_REASON_LABELS = { "no_3d_terminals_for_element": "该 2D 设备在 FreeCAD 中没有工程端子", "no_3d_terminals_for_instance": "该 3D 实例在 FreeCAD 中没有工程端子", "terminal_uuid_not_in_element": "同设备存在端子,但没有匹配该 terminal_uuid", + "ambiguous_terminal_uuid": "terminal_uuid 重复且导线端点缺少设备上下文,无法安全选择端子", + "ambiguous_terminal_uuid_context": "terminal_uuid 重复且设备上下文仍匹配到多个端子,无法安全选择端子", } @@ -860,6 +1106,9 @@ def _missing_endpoint_reason_code(sample, side): terminal_uuid = str(sample.get("{0}_terminal_uuid".format(side), "") or "").strip() if not terminal_uuid: return "missing_terminal_uuid" + match_reason = str(sample.get("{0}_terminal_match_reason_code".format(side), "") or "").strip() + if match_reason in ("ambiguous_terminal_uuid", "ambiguous_terminal_uuid_context"): + return match_reason element_uuid = str(sample.get("{0}_element_uuid".format(side), "") or "").strip() instance_id = str(sample.get("{0}_instance_id".format(side), "") or "").strip() if not element_uuid and not instance_id: @@ -1017,14 +1266,17 @@ def _wire_endpoint_entries(payload): terminal_uuid = _wire_item_value(item, "{0}_terminal_uuid".format(prefix)) if not terminal_uuid or TerminalObjects.is_local_terminal_uuid(terminal_uuid): continue - if terminal_uuid in seen: + element_uuid = _wire_item_value(item, "{0}_element_uuid".format(prefix)) + instance_id = _wire_item_value(item, "{0}_instance_id".format(prefix)) + endpoint_key = (terminal_uuid, element_uuid, instance_id) + if endpoint_key in seen: continue - seen.add(terminal_uuid) + seen.add(endpoint_key) entries.append( { "terminal_uuid": terminal_uuid, - "element_uuid": _wire_item_value(item, "{0}_element_uuid".format(prefix)), - "instance_id": _wire_item_value(item, "{0}_instance_id".format(prefix)), + "element_uuid": element_uuid, + "instance_id": instance_id, "terminal_display": _wire_item_value( item, "{0}_terminal_display".format(prefix), @@ -1053,12 +1305,21 @@ def _bind_wire_task_terminals(doc, payload): except Exception: project_uuid = "" - indexed = index_terminals(doc) used_objects = set() used_slot_tokens = set() for entry in _wire_endpoint_entries(payload): terminal_uuid = entry["terminal_uuid"] - if terminal_uuid in indexed: + endpoint_item = { + "start_terminal_uuid": terminal_uuid, + "start_element_uuid": entry.get("element_uuid", ""), + "start_instance_id": entry.get("instance_id", ""), + } + if _matching_terminal_for_wire_endpoint( + _collect_routable_terminals(doc), + endpoint_item, + "start", + allow_single_fallback=False, + ) is not None: continue device_group = _device_group_for_wire_endpoint( @@ -1440,6 +1701,15 @@ def _route_issue_codes(route_data, collisions): "collision_warnings", _route_collision_payload(collisions).get("collision_count", 0) > 0, ) + collision_payload = _route_collision_payload(collisions) + append_once( + "hard_intersections", + _safe_int(collision_payload.get("hard_intersection_count", 0)) > 0, + ) + append_once( + "clearance_warnings", + _safe_int(collision_payload.get("clearance_warning_count", 0)) > 0, + ) relation_counts = {} for collision in list(collisions or []): if not isinstance(collision, dict): @@ -1479,6 +1749,14 @@ def _route_issue_codes(route_data, collisions): except Exception: obstacle_hits = 0 append_once("route_candidate_obstacle_hits", obstacle_hits > 0) + terminal_access_target_kinds = { + str(network.get("start_terminal_access_target_kind", "") or "").strip(), + str(network.get("end_terminal_access_target_kind", "") or "").strip(), + } + append_once( + "terminal_access_fallback_targets", + bool(terminal_access_target_kinds.intersection({"RoutingRange", "AuxiliaryPath"})), + ) return codes @@ -1839,8 +2117,29 @@ def build_network_route(start_terminal, end_terminal, route_index=0, options=Non ) exit_length = max(float(opts.get("terminal_exit_length", 0.0) or 0.0), 0.0) - start_access_points = RoutingNetwork.terminal_access_path_points(start_terminal, exit_length) - end_access_points = RoutingNetwork.terminal_access_path_points(end_terminal, exit_length) + max_exit_length = max(float(opts.get("terminal_exit_max_length", 0.0) or 0.0), 0.0) + start_access_points = RoutingNetwork.terminal_access_path_points_with_network_access( + start_terminal, + exit_length, + max_exit_length=max_exit_length, + ) + end_access_points = RoutingNetwork.terminal_access_path_points_with_network_access( + end_terminal, + exit_length, + max_exit_length=max_exit_length, + ) + start_access_diagnostics = RoutingNetwork.terminal_access_diagnostics( + start_terminal, + exit_length=exit_length, + max_exit_length=max_exit_length, + ) + end_access_diagnostics = RoutingNetwork.terminal_access_diagnostics( + end_terminal, + exit_length=exit_length, + max_exit_length=max_exit_length, + ) + start_terminal_access_carrier = RoutingNetwork.terminal_access_carrier_for_terminal(start_terminal) + end_terminal_access_carrier = RoutingNetwork.terminal_access_carrier_for_terminal(end_terminal) start_origin = start_access_points[0] if start_access_points else _terminal_origin(start_terminal) end_origin = end_access_points[0] if end_access_points else _terminal_origin(end_terminal) start_exit = start_access_points[-1] if start_access_points else _offset(start_origin, _terminal_direction(start_terminal), exit_length) @@ -1898,7 +2197,13 @@ def build_network_route(start_terminal, end_terminal, route_index=0, options=Non carrier_points = RoutingNetwork.path_points(network, path_keys) if not carrier_points: return None - lane = _lane_payload(route_index, opts, route_points=carrier_points) + lane = _lane_payload_boundary_aware( + route_index, + opts, + route_points=carrier_points, + boundary_violation_count=route_boundary_violation_count, + obstacle_hit_count=route_obstacle_hit_count, + ) carrier_points = _apply_lane_offset(carrier_points, lane) points = [] @@ -1929,6 +2234,8 @@ def build_network_route(start_terminal, end_terminal, route_index=0, options=Non "endpoint_access": { "start_points": [_point_payload(point) for point in start_access_points or []], "end_points": [_point_payload(point) for point in end_access_points or []], + "start_diagnostics": start_access_diagnostics, + "end_diagnostics": end_access_diagnostics, }, "network": { "carriers": int(network.get("carrier_count", 0)), @@ -1947,6 +2254,90 @@ def build_network_route(start_terminal, end_terminal, route_index=0, options=Non "terminal_access_warning_distance": float( opts.get("terminal_access_warning_distance", 0.0) or 0.0 ), + "start_terminal_access_consumed": start_terminal_access_carrier is not None, + "end_terminal_access_consumed": end_terminal_access_carrier is not None, + "start_terminal_access_carrier": getattr(start_terminal_access_carrier, "Name", ""), + "end_terminal_access_carrier": getattr(end_terminal_access_carrier, "Name", ""), + "start_terminal_access_label": getattr(start_terminal_access_carrier, "Label", ""), + "end_terminal_access_label": getattr(end_terminal_access_carrier, "Label", ""), + "start_terminal_access_target_kind": getattr( + start_terminal_access_carrier, + "QetTerminalAccessTargetKind", + "", + ), + "end_terminal_access_target_kind": getattr( + end_terminal_access_carrier, + "QetTerminalAccessTargetKind", + "", + ), + "start_terminal_access_target_name": getattr( + start_terminal_access_carrier, + "QetTerminalAccessTargetName", + "", + ), + "end_terminal_access_target_name": getattr( + end_terminal_access_carrier, + "QetTerminalAccessTargetName", + "", + ), + "start_terminal_access_target_label": getattr( + start_terminal_access_carrier, + "QetTerminalAccessTargetLabel", + "", + ), + "end_terminal_access_target_label": getattr( + end_terminal_access_carrier, + "QetTerminalAccessTargetLabel", + "", + ), + "start_terminal_access_target_rule": getattr( + start_terminal_access_carrier, + "QetTerminalAccessTargetRule", + "", + ), + "end_terminal_access_target_rule": getattr( + end_terminal_access_carrier, + "QetTerminalAccessTargetRule", + "", + ), + "start_terminal_access_fallback_target": str( + getattr(start_terminal_access_carrier, "QetTerminalAccessFallbackTarget", "") or "" + ) + == "1", + "end_terminal_access_fallback_target": str( + getattr(end_terminal_access_carrier, "QetTerminalAccessFallbackTarget", "") or "" + ) + == "1", + "start_terminal_access_avoided_endpoint_device": str( + getattr(start_terminal_access_carrier, "QetTerminalAccessAvoidedEndpointDevice", "") or "" + ) + == "1", + "end_terminal_access_avoided_endpoint_device": str( + getattr(end_terminal_access_carrier, "QetTerminalAccessAvoidedEndpointDevice", "") or "" + ) + == "1", + "start_terminal_access_target_distance": float( + getattr(start_terminal_access_carrier, "QetTerminalAccessTargetDistanceMm", 0.0) or 0.0 + ), + "end_terminal_access_target_distance": float( + getattr(end_terminal_access_carrier, "QetTerminalAccessTargetDistanceMm", 0.0) or 0.0 + ), + "start_terminal_access_target_component_primary_segments": int( + getattr( + start_terminal_access_carrier, + "QetTerminalAccessTargetComponentPrimarySegments", + 0, + ) + or 0 + ), + "end_terminal_access_target_component_primary_segments": int( + getattr( + end_terminal_access_carrier, + "QetTerminalAccessTargetComponentPrimarySegments", + 0, + ) + or 0 + ), "obstacle_aware": bool(obstacle_aware), "boundary_aware": bool(candidate_boundaries), "route_constraints": _route_constraint_payload(constraint_options), @@ -2313,6 +2704,28 @@ def _object_parent_chain(obj, limit=16): return chain +def _terminal_route_endpoint_metadata(terminal): + payload = { + "terminal_name": str(getattr(terminal, "Name", "") or ""), + "terminal_label": str(getattr(terminal, "Label", "") or ""), + "parent_device_name": "", + "parent_device_label": "", + "parent_device_instance_id": "", + "parent_device_element_uuid": "", + } + for parent in _object_parent_chain(terminal): + instance_id = str(getattr(parent, "QetInstanceId", "") or "").strip() + element_uuid = str(getattr(parent, "QetElementUuid", "") or "").strip() + if not instance_id and not element_uuid: + continue + payload["parent_device_name"] = str(getattr(parent, "Name", "") or "") + payload["parent_device_label"] = str(getattr(parent, "Label", "") or "") + payload["parent_device_instance_id"] = instance_id + payload["parent_device_element_uuid"] = element_uuid + break + return payload + + def _has_pass_through_obstacle_semantics(obj): if obj is None: return False @@ -3308,11 +3721,21 @@ def _payload_device_index(payload): if not isinstance(device, dict): continue element_uuid = str(device.get("element_uuid", "") or "").strip() - instance_id = str(device.get("instance_id", "") or "").strip() + instance_id = ( + str(device.get("instance_id", "") or "").strip() + or str(device.get("device_instance_id", "") or "").strip() + ) if element_uuid and element_uuid not in index["by_element"]: index["by_element"][element_uuid] = device if instance_id and instance_id not in index["by_instance"]: index["by_instance"][instance_id] = device + # v2 快照按 3D 设备实例组织,2D element_uuid 在端子数组里。 + for terminal in list(device.get("terminals", []) or []): + if not isinstance(terminal, dict): + continue + terminal_element_uuid = str(terminal.get("element_uuid", "") or "").strip() + if terminal_element_uuid and terminal_element_uuid not in index["by_element"]: + index["by_element"][terminal_element_uuid] = device return index @@ -3337,6 +3760,8 @@ def _payload_device_value(device, *names): return "" for name in names: value = device.get(name, "") + if (value is None or not str(value).strip()) and name == "instance_id": + value = device.get("device_instance_id", "") if value is not None and str(value).strip(): return str(value).strip() return "" @@ -4119,6 +4544,8 @@ def preflight_eplan_connections(doc, payload=None, options=None): opts.setdefault("__wire_style_cache", {}) project_uuid = str(source_payload.get("project_uuid", "") or _project_uuid(doc)).strip() terminals = index_terminals(doc) + terminal_candidates = _collect_routable_terminals(doc) + duplicate_terminal_summary = _terminal_uuid_duplicate_summary(terminal_candidates) local_terminal_count = sum( 1 for terminal_uuid in terminals @@ -4131,7 +4558,10 @@ def preflight_eplan_connections(doc, payload=None, options=None): "project_uuid": project_uuid, "total_wires": len(wires), "available_terminals": len(terminals), + "available_terminal_objects": len(terminal_candidates), "local_terminals": local_terminal_count, + "duplicate_terminal_uuid_count": duplicate_terminal_summary["duplicate_terminal_uuid_count"], + "duplicate_terminal_uuid_samples": duplicate_terminal_summary["duplicate_terminal_uuid_samples"], "route_network_carriers": 0, "route_network_segments": 0, "route_network_nodes": 0, @@ -4199,6 +4629,7 @@ def preflight_eplan_connections(doc, payload=None, options=None): path_diagnostic = RoutingNetwork.diagnose_routing_path_network( doc, terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), @@ -4232,8 +4663,10 @@ def preflight_eplan_connections(doc, payload=None, options=None): continue start_uuid = _wire_item_value(item, "start_terminal_uuid") end_uuid = _wire_item_value(item, "end_terminal_uuid") - start_found = bool(start_uuid and start_uuid in terminals) - end_found = bool(end_uuid and end_uuid in terminals) + start_match = _terminal_endpoint_match(terminal_candidates, item, "start") + end_match = _terminal_endpoint_match(terminal_candidates, item, "end") + start_found = start_match.get("terminal") is not None + end_found = end_match.get("terminal") is not None if start_found and end_found: continue for terminal_uuid, found in ((start_uuid, start_found), (end_uuid, end_found)): @@ -4250,16 +4683,24 @@ def preflight_eplan_connections(doc, payload=None, options=None): "start_element_uuid": _wire_item_value(item, "start_element_uuid"), "start_instance_id": _wire_item_value(item, "start_instance_id"), "start_terminal_display": _wire_item_value(item, "start_terminal_display"), + "start_terminal_candidate_count": int(start_match.get("candidate_count", 0) or 0), + "start_terminal_context_match_count": int(start_match.get("context_match_count", 0) or 0), + "start_terminal_match_reason_code": str(start_match.get("reason_code", "") or ""), + "start_terminal_match_ambiguous": bool(start_match.get("ambiguous", False)), "end_terminal_uuid": end_uuid, "end_found": end_found, "end_element_uuid": _wire_item_value(item, "end_element_uuid"), "end_instance_id": _wire_item_value(item, "end_instance_id"), "end_terminal_display": _wire_item_value(item, "end_terminal_display"), + "end_terminal_candidate_count": int(end_match.get("candidate_count", 0) or 0), + "end_terminal_context_match_count": int(end_match.get("context_match_count", 0) or 0), + "end_terminal_match_reason_code": str(end_match.get("reason_code", "") or ""), + "end_terminal_match_ambiguous": bool(end_match.get("ambiguous", False)), } if not start_found: - _add_missing_endpoint_terminal_context(sample, "start", terminals, doc=doc) + _add_missing_endpoint_terminal_context(sample, "start", terminal_candidates, doc=doc) if not end_found: - _add_missing_endpoint_terminal_context(sample, "end", terminals, doc=doc) + _add_missing_endpoint_terminal_context(sample, "end", terminal_candidates, doc=doc) report["missing_endpoint_samples"].append(sample) report["missing_endpoint_uuids"] = sorted(missing_endpoint_uuids) @@ -4551,10 +4992,14 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la opts.setdefault("__wire_style_cache", {}) terminal_binding_report = bind_wire_task_terminals_from_payload(doc, payload) terminals = index_terminals(doc) + terminal_candidates = _collect_routable_terminals(doc) + duplicate_terminal_summary = _terminal_uuid_duplicate_summary(terminal_candidates) local_terminal_count = sum( 1 - for terminal_uuid in terminals - if TerminalObjects.is_local_terminal_uuid(terminal_uuid) + for terminal in terminal_candidates + if TerminalObjects.is_local_terminal_uuid( + _terminal_endpoint_value(terminal, "QetTerminalUuid") + ) ) wires = payload.get("wires", []) or [] payload_devices = _payload_device_index(payload) @@ -4564,7 +5009,10 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la "runtime_version": AUTO_ROUTING_RUNTIME_VERSION, "total_wires": len(wires), "available_terminals": len(terminals), + "available_terminal_objects": len(terminal_candidates), "local_terminals": local_terminal_count, + "duplicate_terminal_uuid_count": duplicate_terminal_summary["duplicate_terminal_uuid_count"], + "duplicate_terminal_uuid_samples": duplicate_terminal_summary["duplicate_terminal_uuid_samples"], "auto_bound_terminals": terminal_binding_report["bound"], "auto_created_terminals": terminal_binding_report["created"], "auto_terminal_binding_warnings": terminal_binding_report["warnings"], @@ -4790,14 +5238,16 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la continue start_uuid = _wire_item_value(item, "start_terminal_uuid") end_uuid = _wire_item_value(item, "end_terminal_uuid") - start_terminal = terminals.get(start_uuid) - end_terminal = terminals.get(end_uuid) + start_match = _terminal_endpoint_match(terminal_candidates, item, "start") + end_match = _terminal_endpoint_match(terminal_candidates, item, "end") + start_terminal = start_match.get("terminal") + end_terminal = end_match.get("terminal") if start_terminal is None or end_terminal is None: report["skipped_missing_terminal"] += 1 add_status("MissingTerminal") set_item_task_status(item, "MissingTerminal") - for terminal_uuid in (start_uuid, end_uuid): - if terminal_uuid and terminal_uuid not in terminals: + for terminal_uuid, terminal in ((start_uuid, start_terminal), (end_uuid, end_terminal)): + if terminal_uuid and terminal is None: missing_endpoint_uuids.add(terminal_uuid) # 这里只保留少量样例,避免面板状态被大量导线任务刷屏。 if len(report["missing_endpoint_samples"]) < 8: @@ -4816,6 +5266,10 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la "start_device_label": _wire_item_value(item, "start_device_label", "start_display_tag") or _payload_device_value(start_payload_device, "display_tag", "label", "name"), "start_terminal_display": _wire_item_value(item, "start_terminal_display"), + "start_terminal_candidate_count": int(start_match.get("candidate_count", 0) or 0), + "start_terminal_context_match_count": int(start_match.get("context_match_count", 0) or 0), + "start_terminal_match_reason_code": str(start_match.get("reason_code", "") or ""), + "start_terminal_match_ambiguous": bool(start_match.get("ambiguous", False)), "end_terminal_uuid": end_uuid, "end_found": end_terminal is not None, "end_element_uuid": _wire_item_value(item, "end_element_uuid"), @@ -4824,11 +5278,15 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la "end_device_label": _wire_item_value(item, "end_device_label", "end_display_tag") or _payload_device_value(end_payload_device, "display_tag", "label", "name"), "end_terminal_display": _wire_item_value(item, "end_terminal_display"), + "end_terminal_candidate_count": int(end_match.get("candidate_count", 0) or 0), + "end_terminal_context_match_count": int(end_match.get("context_match_count", 0) or 0), + "end_terminal_match_reason_code": str(end_match.get("reason_code", "") or ""), + "end_terminal_match_ambiguous": bool(end_match.get("ambiguous", False)), } if start_terminal is None: - _add_missing_endpoint_terminal_context(sample, "start", terminals, doc=doc) + _add_missing_endpoint_terminal_context(sample, "start", terminal_candidates, doc=doc) if end_terminal is None: - _add_missing_endpoint_terminal_context(sample, "end", terminals, doc=doc) + _add_missing_endpoint_terminal_context(sample, "end", terminal_candidates, doc=doc) report["missing_endpoint_samples"].append(sample) continue if not has_route_network: @@ -5060,6 +5518,8 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la report["routed"] += 1 route_length = float(result.get("length_mm", 0.0) or 0.0) report["total_length_mm"] += route_length + start_endpoint_route_metadata = _terminal_route_endpoint_metadata(start_terminal) + end_endpoint_route_metadata = _terminal_route_endpoint_metadata(end_terminal) route_record = { "wire_uuid": _wire_item_value(item, "wire_id", "wire_uuid", "id"), "wire_label": _wire_item_value(item, "wire_label", "wire_mark"), @@ -5067,13 +5527,37 @@ def route_eplan_connections_from_payload(doc, payload, options=None, prepared_la "wire_style_id": _wire_item_value(item, "wire_style_id"), "wire_style_status": result.get("wire_style_status", ""), "start_terminal_uuid": start_uuid, + "start_terminal_name": start_endpoint_route_metadata.get("terminal_name", ""), + "start_terminal_label": start_endpoint_route_metadata.get("terminal_label", ""), "start_element_uuid": _wire_item_value(item, "start_element_uuid"), "start_terminal_display": _wire_item_value(item, "start_terminal_display"), "start_device_label": endpoint_metadata.get("start_device_label", ""), + "start_parent_device_name": start_endpoint_route_metadata.get("parent_device_name", ""), + "start_parent_device_label": start_endpoint_route_metadata.get("parent_device_label", ""), + "start_parent_device_instance_id": start_endpoint_route_metadata.get( + "parent_device_instance_id", + "", + ), + "start_parent_device_element_uuid": start_endpoint_route_metadata.get( + "parent_device_element_uuid", + "", + ), "end_terminal_uuid": end_uuid, + "end_terminal_name": end_endpoint_route_metadata.get("terminal_name", ""), + "end_terminal_label": end_endpoint_route_metadata.get("terminal_label", ""), "end_element_uuid": _wire_item_value(item, "end_element_uuid"), "end_terminal_display": _wire_item_value(item, "end_terminal_display"), "end_device_label": endpoint_metadata.get("end_device_label", ""), + "end_parent_device_name": end_endpoint_route_metadata.get("parent_device_name", ""), + "end_parent_device_label": end_endpoint_route_metadata.get("parent_device_label", ""), + "end_parent_device_instance_id": end_endpoint_route_metadata.get( + "parent_device_instance_id", + "", + ), + "end_parent_device_element_uuid": end_endpoint_route_metadata.get( + "parent_device_element_uuid", + "", + ), "endpoint_label": _wire_item_value(item, "endpoint_label"), "algorithm": result["algorithm"], "route_status": result["route_status"], @@ -5337,6 +5821,30 @@ def _route_warning_carrier_labels(route_track, warning_kinds, limit=4): return labels +def _fallback_route_source_label_counts(report, limit=6): + counts = {} + for route in report.get("routes", []) or []: + if not isinstance(route, dict): + continue + route_track = route.get("route_track", {}) + quality = _route_quality_payload(route_track) + if quality.get("quality_status") != "FallbackPathWarning": + continue + labels = _route_warning_carrier_labels( + route_track, + quality.get("fallback_carrier_kinds", []), + limit=8, + ) + if not labels: + labels = ["未命名布线面/辅助路径"] + for label in labels: + counts[label] = counts.get(label, 0) + 1 + return { + key: counts[key] + for key in sorted(counts, key=lambda item: (-counts[item], item))[: int(limit or 0)] + } + + def _route_network_metric_max(report, key): maximum = 0 for route in report.get("routes", []) or []: @@ -5416,6 +5924,72 @@ def _route_track_min_capacity(route_track): return min(capacities) +def _route_track_bottleneck_carriers(route_track, min_capacity=None, limit=8): + if not isinstance(route_track, dict): + return { + "names": [], + "kinds": [], + "source_labels": [], + } + try: + target_capacity = int(float(min_capacity)) if min_capacity is not None else _route_track_min_capacity(route_track) + except Exception: + target_capacity = _route_track_min_capacity(route_track) + if target_capacity is None or target_capacity <= 0: + return { + "names": [], + "kinds": [], + "source_labels": [], + } + max_items = int(limit or 0) + names = [] + kinds = [] + source_labels = [] + seen_names = set() + seen_kinds = set() + seen_sources = set() + for segment in route_track.get("segments", []) or []: + # 只看真实路径段;虚拟桥接段不代表实际线槽/路径容量。 + if isinstance(segment, dict) and bool(segment.get("is_bridge", False)): + continue + carrier = segment.get("carrier", {}) if isinstance(segment, dict) else {} + if not isinstance(carrier, dict): + continue + try: + capacity = int(float(carrier.get("capacity", 0) or 0)) + except Exception: + capacity = 0 + if capacity != target_capacity: + continue + name = str(carrier.get("name", "") or "").strip() + if name and name not in seen_names: + seen_names.add(name) + names.append(name) + kind = str(carrier.get("kind", "") or "").strip() + if kind and kind not in seen_kinds: + seen_kinds.add(kind) + kinds.append(kind) + label = ( + str(carrier.get("source_label", "") or "").strip() + or str(carrier.get("source_name", "") or "").strip() + or str(carrier.get("label", "") or "").strip() + or name + ) + source_path_index = str(carrier.get("source_path_index", "") or "").strip() + if label and source_path_index: + label = "{0}(路径{1})".format(label, source_path_index) + if label and label not in seen_sources: + seen_sources.add(label) + source_labels.append(label) + if max_items > 0 and len(names) >= max_items and len(source_labels) >= max_items: + break + return { + "names": names[:max_items] if max_items > 0 else names, + "kinds": kinds[:max_items] if max_items > 0 else kinds, + "source_labels": source_labels[:max_items] if max_items > 0 else source_labels, + } + + def _route_capacity_pressure_summary(report): samples = _route_capacity_pressure_samples(report, limit=0) if not samples: @@ -5450,6 +6024,11 @@ def _route_capacity_pressure_samples(report, limit=8): continue if max_samples <= 0 or len(samples) < max_samples: route_track = route.get("route_track", {}) + bottlenecks = _route_track_bottleneck_carriers( + route_track, + min_capacity=route_capacity, + limit=4, + ) samples.append( { "wire_uuid": route.get("wire_uuid", ""), @@ -5463,6 +6042,9 @@ def _route_capacity_pressure_samples(report, limit=8): "lane_index": int(lane.get("index", 0) or 0), "carrier_names": _route_track_carrier_names(route_track, limit=4), "route_source_labels": _route_source_labels(route_track, limit=4), + "bottleneck_carrier_names": bottlenecks["names"], + "bottleneck_carrier_kinds": bottlenecks["kinds"], + "bottleneck_route_source_labels": bottlenecks["source_labels"], } ) return samples @@ -5554,6 +6136,164 @@ def _route_path_usage_summary(report): return summary +def _terminal_access_usage_summary(report): + summary = { + "routes": 0, + "both_endpoints_consumed": 0, + "one_endpoint_consumed": 0, + "no_endpoint_consumed": 0, + "start_consumed": 0, + "end_consumed": 0, + } + for route in report.get("routes", []) or []: + if not isinstance(route, dict): + continue + network = route.get("network", {}) + if not isinstance(network, dict): + continue + start_consumed = bool(network.get("start_terminal_access_consumed", False)) + end_consumed = bool(network.get("end_terminal_access_consumed", False)) + summary["routes"] += 1 + if start_consumed: + summary["start_consumed"] += 1 + if end_consumed: + summary["end_consumed"] += 1 + if start_consumed and end_consumed: + summary["both_endpoints_consumed"] += 1 + elif start_consumed or end_consumed: + summary["one_endpoint_consumed"] += 1 + else: + summary["no_endpoint_consumed"] += 1 + return summary + + +def _terminal_access_target_kind_counts(report): + counts = {} + for route in report.get("routes", []) or []: + if not isinstance(route, dict): + continue + network = route.get("network", {}) + if not isinstance(network, dict): + continue + for key in ("start_terminal_access_target_kind", "end_terminal_access_target_kind"): + kind = str(network.get(key, "") or "").strip() + if not kind: + continue + counts[kind] = counts.get(kind, 0) + 1 + preferred_order = { + "WireDuct": 0, + "WireDuctOpenEnd": 1, + "UserPath": 2, + "WiringCutOut": 3, + "RoutingPath": 4, + "RoutingRange": 10, + "AuxiliaryPath": 11, + } + return { + key: counts[key] + for key in sorted(counts, key=lambda item: (preferred_order.get(item, 100), -counts[item], item)) + } + + +def _terminal_access_fallback_target_count(report): + counts = _terminal_access_target_kind_counts(report) + return sum(_safe_int(counts.get(kind, 0)) for kind in ("RoutingRange", "AuxiliaryPath")) + + +def _terminal_access_fallback_target_samples(report, limit=8): + samples = [] + for route in report.get("routes", []) or []: + if not isinstance(route, dict): + continue + network = route.get("network", {}) + if not isinstance(network, dict): + continue + for endpoint in ("start", "end"): + kind = str(network.get("{0}_terminal_access_target_kind".format(endpoint), "") or "").strip() + if kind not in {"RoutingRange", "AuxiliaryPath"}: + continue + sample = { + "wire_uuid": route.get("wire_uuid", ""), + "wire_label": route.get("wire_label", ""), + "endpoint": endpoint, + "target_kind": kind, + "target_name": str(network.get("{0}_terminal_access_target_name".format(endpoint), "") or ""), + "target_label": str(network.get("{0}_terminal_access_target_label".format(endpoint), "") or ""), + "target_distance": float( + network.get("{0}_terminal_access_target_distance".format(endpoint), 0.0) + or 0.0 + ), + } + optional_fields = { + "terminal_uuid": str(route.get("{0}_terminal_uuid".format(endpoint), "") or ""), + "terminal_name": str(route.get("{0}_terminal_name".format(endpoint), "") or ""), + "terminal_label": str( + route.get("{0}_terminal_label".format(endpoint), "") + or route.get("{0}_terminal_display".format(endpoint), "") + or "" + ), + "parent_device_name": str( + route.get("{0}_parent_device_name".format(endpoint), "") + or route.get("{0}_device_name".format(endpoint), "") + or "" + ), + "parent_device_label": str( + route.get("{0}_parent_device_label".format(endpoint), "") + or route.get("{0}_device_label".format(endpoint), "") + or "" + ), + "parent_device_instance_id": str( + route.get("{0}_parent_device_instance_id".format(endpoint), "") + or route.get("{0}_instance_id".format(endpoint), "") + or "" + ), + "parent_device_element_uuid": str( + route.get("{0}_parent_device_element_uuid".format(endpoint), "") + or route.get("{0}_element_uuid".format(endpoint), "") + or "" + ), + } + sample.update({key: value for key, value in optional_fields.items() if value}) + samples.append(sample) + if int(limit or 0) <= 0: + return samples + return samples[: int(limit or 0)] + + +def _terminal_access_fallback_targets(report): + if not isinstance(report, dict): + return False + if _route_network_main_path_carriers(report) <= 0: + return False + return _terminal_access_fallback_target_count(report) > 0 + + +def _terminal_access_fallback_targets_text(report): + if not _terminal_access_fallback_targets(report): + return "" + text = ( + "端子接入退回布线面:当前有线槽/UserPath/过线孔主路径 {0} 条," + "但仍有 {1} 个端子接入目标为 RoutingRange/辅助路径。" + ).format( + _route_network_main_path_carriers(report), + _terminal_access_fallback_target_count(report), + ) + samples = _terminal_access_fallback_target_samples(report, limit=1) + if samples: + sample = samples[0] + endpoint_text = "起点" if sample.get("endpoint") == "start" else "终点" + wire_text = str(sample.get("wire_label", "") or sample.get("wire_uuid", "") or "未知导线") + target_text = str(sample.get("target_label", "") or sample.get("target_kind", "") or "布线面") + text += "示例 {0} {1}接入到 {2},距离 {3:.1f}mm。".format( + wire_text, + endpoint_text, + target_text, + float(sample.get("target_distance", 0.0) or 0.0), + ) + text += "请检查端子附近是否缺少 UserPath/线槽桥接,或主路径是否被孤立。" + return text + + def _route_network_carrier_kind_counts(network): counts = {} if not isinstance(network, dict): @@ -5657,6 +6397,41 @@ def _main_path_not_used_text(report): ).format(fallback_routes) +def _main_path_underused(report): + if not isinstance(report, dict): + return False + if _safe_int(report.get("routed", 0)) <= 0: + return False + if _route_network_main_path_carriers(report) <= 0: + return False + usage = _route_path_usage_summary(report) + main_path_routes = _safe_int(usage.get("main_path_routes", 0)) + fallback_routes = _safe_int(usage.get("fallback_routes", 0)) + if main_path_routes <= 0 or fallback_routes <= 0: + return False + return fallback_routes >= main_path_routes * 2 + + +def _main_path_underused_text(report): + if not _main_path_underused(report): + return "" + usage = _route_path_usage_summary(report) + main_path_routes = _safe_int(usage.get("main_path_routes", 0)) + fallback_routes = _safe_int(usage.get("fallback_routes", 0)) + routed = max(1, _safe_int(report.get("routed", main_path_routes + fallback_routes))) + main_path_carriers = _route_network_main_path_carriers(report) + text = ( + "主路径使用率过低:当前有线槽/UserPath/过线孔路径 {0} 条," + "本批次 {1} 条导线中只有 {2} 条使用主路径,{3} 条仍走布线面/辅助路径。" + ).format(main_path_carriers, routed, main_path_routes, fallback_routes) + fallback_counts = _fallback_route_source_label_counts(report, limit=3) + if fallback_counts: + fallback_text = ",".join("{0} {1} 条".format(label, count) for label, count in fallback_counts.items()) + text += " 主要兜底路径:{0}。".format(fallback_text) + text += " 建议补 UserPath/线槽到端子区域的桥接,或标记柜内边界,避免整体退回柜板布线面。" + return text + + def _has_routing_path_network_diagnostic(report): if not isinstance(report, dict): return False @@ -5689,6 +6464,7 @@ def _attach_routing_path_network_diagnostic_if_needed(doc, report, opts): RoutingNetwork.diagnose_routing_path_network( doc, terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), @@ -6616,6 +7392,26 @@ def format_eplan_connection_route_report(report): if created_count > 0: reroute_text = "并重跑布线" if bool(auto_detour_bridges.get("rerouted", False)) else "" message += "\n自动主路径补桥:生成 UserPath {0} 条{1}。".format(created_count, reroute_text) + pair_labels = [ + str(label or "").strip() + for label in list(auto_detour_bridges.get("created_pair_labels", []) or []) + if str(label or "").strip() + ] + if pair_labels: + message += " 配对:{0}。".format("、".join(pair_labels[:3])) + auto_terminal_bridges = report.get("auto_terminal_access_fallback_bridges", {}) + if isinstance(auto_terminal_bridges, dict): + created_count = _safe_int(auto_terminal_bridges.get("created_count", 0)) + if created_count > 0: + reroute_text = "并重跑布线" if bool(auto_terminal_bridges.get("rerouted", False)) else "" + message += "\n自动端子接入补桥:生成 UserPath {0} 条{1}。".format(created_count, reroute_text) + pair_labels = [ + str(label or "").strip() + for label in list(auto_terminal_bridges.get("created_pair_labels", []) or []) + if str(label or "").strip() + ] + if pair_labels: + message += " 配对:{0}。".format("、".join(pair_labels[:3])) path_diagnostic = report.get("routing_path_network_diagnostic", {}) if isinstance(path_diagnostic, dict) and int(path_diagnostic.get("issue_count", 0) or 0) > 0: issue_labels = [ @@ -6714,6 +7510,11 @@ def format_eplan_connection_route_report(report): message += " 示例导线 {0}".format(sample.get("wire")) route_labels = list(sample.get("route_source_labels", []) or []) carrier_names = list(sample.get("carrier_names", []) or []) + bottleneck_labels = list(sample.get("bottleneck_route_source_labels", []) or []) + bottleneck_names = list(sample.get("bottleneck_carrier_names", []) or []) + bottleneck_paths = bottleneck_labels or bottleneck_names + if bottleneck_paths: + message += ",瓶颈路径 {0}".format("、".join(bottleneck_paths)) path_labels = route_labels or carrier_names if path_labels: message += ",路径 {0}".format("、".join(path_labels)) @@ -6814,6 +7615,12 @@ def format_eplan_connection_route_report(report): route_labels = list(sample.get("route_source_labels", []) or []) if route_labels: route_text = ",路径 {0}".format("、".join(route_labels)) + message += "\n导线越出柜内区域:{0} 条,示例导线 {1} {2} 个越界点{3}。".format( + boundary_warning.get("count", 0), + sample.get("wire", "未知导线"), + sample.get("violations", 0), + route_text, + ) message += "\n柜内边界提示:{0} 条导线最终路径仍越出柜内区域,示例导线 {1} {2} 个越界点{3}。请补柜内 UserPath/线槽或调整柜内边界。".format( boundary_warning.get("count", 0), sample.get("wire", "未知导线"), @@ -6847,9 +7654,29 @@ def format_eplan_connection_route_report(report): main_path_routes, fallback_routes, ) + terminal_access_usage = _terminal_access_usage_summary(report) + if _safe_int(terminal_access_usage.get("routes", 0)) > 0: + message += "\n端子接入采用:两端接入 {0} 条,一端接入 {1} 条,未接入 {2} 条。".format( + _safe_int(terminal_access_usage.get("both_endpoints_consumed", 0)), + _safe_int(terminal_access_usage.get("one_endpoint_consumed", 0)), + _safe_int(terminal_access_usage.get("no_endpoint_consumed", 0)), + ) + terminal_access_target_counts = _terminal_access_target_kind_counts(report) + if terminal_access_target_counts: + target_text = ",".join( + "{0} {1} 个".format(kind, count) + for kind, count in terminal_access_target_counts.items() + ) + message += "\n端子接入目标:{0}。".format(target_text) + fallback_target_text = _terminal_access_fallback_targets_text(report) + if fallback_target_text: + message += "\n{0}".format(fallback_target_text) main_path_text = _main_path_not_used_text(report) if main_path_text: message += "\n{0}".format(main_path_text) + main_path_underused_text = _main_path_underused_text(report) + if main_path_underused_text: + message += "\n{0}".format(main_path_underused_text) quality_warning = _route_quality_warning_summary(report) if quality_warning: message += "\n路径质量提示:{0} 条导线使用布线面/辅助路径,可能没有完全优先进入线槽。".format( @@ -7122,6 +7949,9 @@ _ROUTING_DIAGNOSTIC_ISSUE_LABELS = { "invalid_route_carriers": "路径对象几何无效", "routing_range_only_network": "仅使用布线面兜底", "main_path_not_used": "未使用线槽或用户主路径", + "main_path_underused": "主路径使用率过低", + "terminal_access_fallback_targets": "端子接入退回布线面", + "invalid_terminal_exit_directions": "端子出线方向无效", "invalid_terminal_local_routes": "端子局部路径无效", "route_carriers_outside_boundary": "路径越出柜内边界", "terminals_outside_boundary": "端子越出柜内边界", @@ -7132,6 +7962,8 @@ _ROUTING_DIAGNOSTIC_ISSUE_LABELS = { "isolated_network_components": "存在孤立路径网络", "routing_errors": "布线计算错误", "collision_warnings": "碰撞告警", + "hard_intersections": "硬穿模", + "clearance_warnings": "间隙不足", "structural_collision_candidates": "结构件碰撞候选", "device_or_layout_collisions": "设备/布局碰撞", "third_party_device_collisions": "第三方设备/布局碰撞", @@ -7572,6 +8404,7 @@ def _routing_diagnostic_recommended_actions(summary): _safe_int(issue_counts.get("route_candidate_boundary_violations", 0)) > 0 or _safe_int(issue_counts.get("boundary_warning", 0)) > 0 ): + add("点击“选择越界导线”定位越出柜内区域的导线及其路径") add("检查柜内边界和 UserPath,必要时补柜内主路径") if isinstance(issue_counts, dict) and _safe_int(issue_counts.get("route_capacity_pressure", 0)) > 0: add("检查路径容量,必要时补备用路径或提高线槽容量") @@ -7579,6 +8412,8 @@ def _routing_diagnostic_recommended_actions(summary): add("点击“选择缺主路径导线”定位需要补 UserPath 或主路径桥接的导线") issue_codes = set(str(code or "").strip() for code in list(summary.get("issue_codes", []) or [])) + hard_collision_count = _safe_int(issue_counts.get("hard_intersections", 0)) if isinstance(issue_counts, dict) else 0 + clearance_collision_count = _safe_int(issue_counts.get("clearance_warnings", 0)) if isinstance(issue_counts, dict) else 0 if "main_path_detour_missing" in issue_codes: add("点击“选择缺主路径导线”定位需要补 UserPath 或主路径桥接的导线") add("点击“选择缺主路径线路径”对照当前实际路径") @@ -7586,6 +8421,35 @@ def _routing_diagnostic_recommended_actions(summary): if isinstance(detour_summary, dict) and list(detour_summary.get("rejected_fallback_labels", []) or []): add("点击“选择缺主路径补路位置”快速定位汇总需补区域") add("选中缺主路径导线后点击“选择拒绝兜底路径”查看需补路径位置") + if "terminal_access_fallback_targets" in issue_codes: + add("优先补端子附近到线槽/UserPath 的接入桥,避免端子接入退回布线面") + add("点击“按诊断建议生成桥接”尝试自动补端子退回目标到最近主路径的 UserPath 桥") + diagnostics = summary.get("diagnostics", {}) or {} + batch_payload = ((diagnostics.get("RoutingConnectionBatch", {}) or {}).get("payload", {}) or {}) + path_payload = ((diagnostics.get("RoutingPathNetwork", {}) or {}).get("payload", {}) or {}) + has_batch_samples = isinstance(batch_payload, dict) and list( + batch_payload.get("terminal_access_fallback_target_samples", []) or [] + ) + has_path_samples = isinstance(path_payload, dict) and list( + path_payload.get("terminal_access_fallback_targets", []) or [] + ) + if has_batch_samples or has_path_samples: + add("按端子接入退回布线面示例定位设备侧缺口,再重新生成布线路径网络") + if "unconnected_terminals" in issue_codes: + add("点击“选择未接入端子”定位未接入路由网络或接入距离超限的端子") + add("补端子附近 UserPath/线槽入口,或确认设备装配位置和端子接入最大距离") + if ( + "terminal_exit_direction_corrected" in issue_codes + or "terminal_exit_length_capped" in issue_codes + or "invalid_terminal_exit_directions" in issue_codes + or "invalid_terminal_local_routes" in issue_codes + ): + add("点击“选择出线问题端子”定位方向校正、长度截断、显式方向无效或局部路径无效的端子") + add("复查设备模板 CPoint/LCS 出线方向,必要时设置端子局部出线路径") + if "invalid_terminal_exit_directions" in issue_codes: + add("检查 QetTerminalExitDirectionJson,必要时用“选中端子设置出线方向”重写显式方向") + if "invalid_terminal_local_routes" in issue_codes: + add("检查 QetTerminalLocalRoutePointsJson,必要时用“选中端子设置局部出线”重写局部路径") collision_count = 0 batch_payload = ((summary.get("diagnostics", {}) or {}).get("RoutingConnectionBatch", {}) or {}).get("payload", {}) if isinstance(batch_payload, dict): @@ -7595,6 +8459,10 @@ def _routing_diagnostic_recommended_actions(summary): or collision_count > 0 or _safe_int(issue_counts.get("collision_warnings", 0)) > 0 ): + if "hard_intersections" in issue_codes or hard_collision_count > 0: + add("硬穿模:优先补 UserPath/线槽主路径或调整装配,不能直接忽略") + if "clearance_warnings" in issue_codes or clearance_collision_count > 0: + add("间隙不足:核对设备安全间隙、线槽/UserPath位置,必要时补路径或调整装配") collision_resolution = summary.get("batch_collision_resolution_summary", {}) if isinstance(collision_resolution, dict): counts = collision_resolution.get("counts", {}) @@ -7619,10 +8487,9 @@ def _routing_diagnostic_recommended_actions(summary): and (list(item.get("parent_names", []) or []) or list(item.get("parent_labels", []) or [])) for item in top_obstacles ) + add("点击“选择高发碰撞对象”和“选择碰撞导线”核对穿模位置") if has_parent_refs: add("点击“选择碰撞父装配”确认结构件后再标记忽略碰撞") - else: - add("点击“选择高发碰撞对象”和“选择碰撞导线”核对穿模位置") return actions @@ -8111,6 +8978,32 @@ def _compact_route_sample(route): ), "route_constraints": network.get("route_constraints", {}), } + sample["network"]["terminal_access"] = { + "start_consumed": bool(network.get("start_terminal_access_consumed", False)), + "end_consumed": bool(network.get("end_terminal_access_consumed", False)), + "start_carrier": str(network.get("start_terminal_access_carrier", "") or ""), + "end_carrier": str(network.get("end_terminal_access_carrier", "") or ""), + "start_label": str(network.get("start_terminal_access_label", "") or ""), + "end_label": str(network.get("end_terminal_access_label", "") or ""), + "start_target_kind": str(network.get("start_terminal_access_target_kind", "") or ""), + "end_target_kind": str(network.get("end_terminal_access_target_kind", "") or ""), + "start_target_name": str(network.get("start_terminal_access_target_name", "") or ""), + "end_target_name": str(network.get("end_terminal_access_target_name", "") or ""), + "start_target_label": str(network.get("start_terminal_access_target_label", "") or ""), + "end_target_label": str(network.get("end_terminal_access_target_label", "") or ""), + "start_target_distance": float( + network.get("start_terminal_access_target_distance", 0.0) or 0.0 + ), + "end_target_distance": float( + network.get("end_terminal_access_target_distance", 0.0) or 0.0 + ), + "start_target_component_primary_segments": int( + network.get("start_terminal_access_target_component_primary_segments", 0) or 0 + ), + "end_target_component_primary_segments": int( + network.get("end_terminal_access_target_component_primary_segments", 0) or 0 + ), + } return sample @@ -8187,6 +9080,8 @@ def _routing_connection_batch_issue_codes(report): bool(_route_quality_warning_samples(report, limit=1)), ), ("main_path_not_used", _main_path_not_used(report)), + ("main_path_underused", _main_path_underused(report)), + ("terminal_access_fallback_targets", _terminal_access_fallback_targets(report)), ( "long_terminal_access", bool(_long_network_entry_warning_samples(report, limit=1)), @@ -8567,6 +9462,116 @@ def _main_path_detour_wire_uuids_from_report(report): return wire_uuids +def _terminal_access_fallback_wire_uuids_from_report(report): + wire_uuids = [] + seen = set() + for sample in _terminal_access_fallback_target_samples(report, limit=0): + if not isinstance(sample, dict): + continue + wire_uuid = str(sample.get("wire_uuid", "") or "").strip() + if not wire_uuid or wire_uuid in seen: + continue + seen.add(wire_uuid) + wire_uuids.append(wire_uuid) + return wire_uuids + + +def _create_terminal_access_fallback_bridges_from_report(doc, report, project_uuid=""): + samples = [] + if isinstance(report, dict): + samples = [ + item + for item in list(report.get("terminal_access_fallback_target_samples", []) or []) + if isinstance(item, dict) + ] + if not samples: + samples = [ + item + for item in list(report.get("terminal_access_fallback_targets", []) or []) + if isinstance(item, dict) + ] + if not samples: + samples = _terminal_access_fallback_target_samples(report, limit=0) + main_path_kinds = {"WireDuct", "WireDuctOpenEnd", "UserPath", "WiringCutOut", "RoutingPath"} + main_candidates = [ + carrier + for carrier in RoutingNetwork.collect_route_carriers(doc) + if str(getattr(carrier, "QetRouteCarrierKind", "") or "").strip() in main_path_kinds + ] + created = [] + duplicates = 0 + missing_refs = [] + seen_targets = set() + + for sample in samples: + if not isinstance(sample, dict): + continue + target_kind = str(sample.get("target_kind", "") or "").strip() + if target_kind not in {"RoutingRange", "AuxiliaryPath"}: + continue + target_name = str(sample.get("target_name", "") or "").strip() + target_label = str(sample.get("target_label", "") or "").strip() + target_matches = _find_route_bridge_sources_by_name_or_label(doc, name=target_name, label="") + if not target_matches: + target_matches = _find_route_bridge_sources_by_name_or_label(doc, name=target_label, label=target_label) + if not target_matches: + missing_ref = target_name or target_label or target_kind + if missing_ref and missing_ref not in missing_refs: + missing_refs.append(missing_ref) + continue + target = target_matches[0] + target_ref = getattr(target, "Name", "") or target_name or target_label + if target_ref in seen_targets: + continue + seen_targets.add(target_ref) + + best_main = None + best_distance = None + for candidate in main_candidates: + if candidate is target: + continue + bridge_candidate = RoutingNetwork.nearest_route_bridge_candidate_between_objects( + doc, + target, + candidate, + ) + if not isinstance(bridge_candidate, dict): + continue + distance = float(bridge_candidate.get("distance_mm", 0.0) or 0.0) + if best_distance is None or distance < best_distance: + best_distance = distance + best_main = candidate + if best_main is None: + missing_ref = "{0} -> 主路径".format(target_label or target_name or target_kind) + if missing_ref not in missing_refs: + missing_refs.append(missing_ref) + continue + new_bridges = RoutingNetwork.create_user_path_bridge_between_objects( + doc, + target, + best_main, + project_uuid=project_uuid, + bridge_kind="TerminalAccessFallbackBridge", + ) + if new_bridges: + created.extend(new_bridges) + else: + duplicates += 1 + + return { + "enabled": True, + "targets": len(seen_targets), + "created_count": len(created), + "duplicates": duplicates, + "missing_targets": missing_refs, + "created_pair_labels": [ + getattr(bridge, "QetRouteBridgePairLabel", "") + for bridge in created + ], + "rerouted": False, + } + + def _wire_item_uuid(item): if not isinstance(item, dict): return "" @@ -8640,7 +9645,7 @@ def _recompute_route_report_after_route_replacement(doc, report): return report -def _merge_retry_routes_into_report(doc, report, retry_report): +def _merge_retry_routes_into_report(doc, report, retry_report, retry_prefix="main_path_detour"): if not isinstance(report, dict) or not isinstance(retry_report, dict): return report retry_routes = { @@ -8662,8 +9667,9 @@ def _merge_retry_routes_into_report(doc, report, retry_report): else: merged_routes.append(route) report["routes"] = merged_routes - report["main_path_detour_retry_wires"] = len(retry_routes) - report["main_path_detour_retry_replaced_routes"] = replaced + prefix = str(retry_prefix or "main_path_detour").strip() or "main_path_detour" + report["{0}_retry_wires".format(prefix)] = len(retry_routes) + report["{0}_retry_replaced_routes".format(prefix)] = replaced return _recompute_route_report_after_route_replacement(doc, report) @@ -8765,6 +9771,10 @@ def _compact_routing_connection_batch_report(report, sample_limit=8): payload["auto_diagnostic_bridges"] = dict(report.get("auto_diagnostic_bridges") or {}) if isinstance(report.get("auto_main_path_detour_bridges"), dict): payload["auto_main_path_detour_bridges"] = dict(report.get("auto_main_path_detour_bridges") or {}) + if isinstance(report.get("auto_terminal_access_fallback_bridges"), dict): + payload["auto_terminal_access_fallback_bridges"] = dict( + report.get("auto_terminal_access_fallback_bridges") or {} + ) if isinstance(report.get("route_status_counts"), dict): payload["route_status_counts"] = dict(report.get("route_status_counts") or {}) carrier_kind_counts = _report_route_network_carrier_kind_counts(report) @@ -8823,6 +9833,20 @@ def _compact_routing_connection_batch_report(report, sample_limit=8): payload["route_samples"] = [_compact_route_sample(route) for route in prioritized_routes[:limit]] payload["route_sample_count"] = len(payload["route_samples"]) payload["route_path_usage"] = _route_path_usage_summary(report) + payload["terminal_access_usage"] = _terminal_access_usage_summary(report) + payload["terminal_access_target_kind_counts"] = _terminal_access_target_kind_counts(report) + payload["terminal_access_fallback_target_count"] = len( + _terminal_access_fallback_target_samples(report, limit=0) + ) + payload["terminal_access_fallback_target_samples"] = _terminal_access_fallback_target_samples( + report, + limit=limit, + ) + payload["main_path_usage"] = { + "main_path_carriers": _route_network_main_path_carriers(report), + "underused": _main_path_underused(report), + "fallback_source_label_counts": _fallback_route_source_label_counts(report, limit=limit), + } route_quality_warnings = _route_quality_warning_samples(report, limit=limit) payload["route_quality_warning_count"] = len(_route_quality_warning_samples(report, limit=0)) payload["route_quality_warning_samples"] = route_quality_warnings @@ -8841,6 +9865,9 @@ def _compact_routing_connection_batch_report(report, sample_limit=8): _route_candidate_boundary_warning_samples(report, limit=0) ) payload["route_candidate_boundary_warning_samples"] = candidate_boundary_warnings + # 给界面/诊断 JSON 一个更工程化的别名,避免用户只看到算法内部的 candidate 命名。 + payload["wire_outside_boundary_count"] = payload["route_candidate_boundary_warning_count"] + payload["wire_outside_boundary_samples"] = candidate_boundary_warnings route_constraint_samples = _route_constraint_samples(report, limit=limit) payload["route_constraint_warning_count"] = len(_route_constraint_samples(report, limit=0)) payload["route_constraint_warning_samples"] = route_constraint_samples @@ -8950,6 +9977,7 @@ def _direct_task_routing_path_network_diagnostic(doc, opts): RoutingNetwork.diagnose_routing_path_network( doc, terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), @@ -9076,6 +10104,7 @@ def generate_eplan_routing_path_network(doc, project_uuid="", options=None, sele project_uuid=target_project_uuid, selection_ex=selection_ex, terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), ) @@ -9096,6 +10125,7 @@ def check_eplan_routing_path_network(doc, project_uuid="", options=None): doc, project_uuid=target_project_uuid, terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), @@ -9174,6 +10204,24 @@ def _compact_routing_path_network_diagnostic(diagnostic): } for item in long_accesses[:5] ] + capped_exits = _dict_items(diagnostic.get("capped_terminal_exits", []) or []) + if capped_exits: + payload["capped_terminal_exits"] = [ + _compact_terminal_exit_diagnostic_sample(item) + for item in capped_exits[:8] + ] + corrected_exits = _dict_items(diagnostic.get("corrected_terminal_exits", []) or []) + if corrected_exits: + payload["corrected_terminal_exits"] = [ + _compact_terminal_exit_diagnostic_sample(item) + for item in corrected_exits[:8] + ] + invalid_exit_directions = _dict_items(diagnostic.get("invalid_terminal_exit_directions", []) or []) + if invalid_exit_directions: + payload["invalid_terminal_exit_directions"] = [ + _compact_terminal_metadata_issue_sample(item) + for item in invalid_exit_directions[:8] + ] wire_duct_components = _dict_items(diagnostic.get("wire_ducts_without_terminal_access", []) or []) if wire_duct_components: payload["wire_ducts_without_terminal_access"] = [ @@ -9189,9 +10237,85 @@ def _compact_routing_path_network_diagnostic(diagnostic): } for item in wire_duct_components[:5] ] + terminal_access_fallbacks = _dict_items(diagnostic.get("terminal_access_fallback_targets", []) or []) + if terminal_access_fallbacks: + payload["terminal_access_fallback_targets"] = [ + _compact_terminal_access_quality_sample(item) + for item in terminal_access_fallbacks[:8] + ] + terminal_access_endpoint_avoidance = _dict_items( + diagnostic.get("terminal_access_endpoint_device_avoidance", []) or [] + ) + if terminal_access_endpoint_avoidance: + payload["terminal_access_endpoint_device_avoidance"] = [ + _compact_terminal_access_quality_sample(item) + for item in terminal_access_endpoint_avoidance[:8] + ] return payload +def _compact_terminal_access_quality_sample(item): + return { + "access_carrier_name": item.get("access_carrier_name", ""), + "access_carrier_label": item.get("access_carrier_label", ""), + "terminal_name": item.get("terminal_name", ""), + "terminal_label": item.get("terminal_label", ""), + "terminal_uuid": item.get("terminal_uuid", ""), + "instance_id": item.get("instance_id", ""), + "parent_device_name": item.get("parent_device_name", ""), + "parent_device_label": item.get("parent_device_label", ""), + "parent_device_instance_id": item.get("parent_device_instance_id", ""), + "parent_device_element_uuid": item.get("parent_device_element_uuid", ""), + "target_kind": item.get("target_kind", ""), + "target_name": item.get("target_name", ""), + "target_label": item.get("target_label", ""), + "target_rule": item.get("target_rule", ""), + "target_distance_mm": item.get("target_distance_mm", 0.0), + } + + +def _compact_terminal_metadata_issue_sample(item): + return { + "name": item.get("name", ""), + "label": item.get("label", ""), + "terminal_uuid": item.get("terminal_uuid", ""), + "instance_id": item.get("instance_id", ""), + "parent_device_name": item.get("parent_device_name", ""), + "parent_device_label": item.get("parent_device_label", ""), + "parent_device_instance_id": item.get("parent_device_instance_id", ""), + "parent_device_element_uuid": item.get("parent_device_element_uuid", ""), + "property_name": item.get("property_name", ""), + "reason": item.get("reason", ""), + "message": item.get("message", ""), + "raw_sample": item.get("raw_sample", ""), + } + + +def _compact_terminal_exit_diagnostic_sample(item): + return { + "name": item.get("name", ""), + "label": item.get("label", ""), + "terminal_uuid": item.get("terminal_uuid", ""), + "instance_id": item.get("instance_id", ""), + "parent_device_name": item.get("parent_device_name", ""), + "parent_device_label": item.get("parent_device_label", ""), + "parent_device_instance_id": item.get("parent_device_instance_id", ""), + "parent_device_element_uuid": item.get("parent_device_element_uuid", ""), + "exit_rule": item.get("exit_rule", ""), + "exit_direction_source": item.get("exit_direction_source", ""), + "exit_direction": item.get("exit_direction", {}), + "original_exit_direction": item.get("original_exit_direction", {}), + "exit_direction_corrected": bool(item.get("exit_direction_corrected", False)), + "requested_exit_length_mm": item.get("requested_exit_length_mm", 0.0), + "actual_exit_length_mm": item.get("actual_exit_length_mm", 0.0), + "max_exit_length_mm": item.get("max_exit_length_mm", 0.0), + "device_exit_required_length_mm": item.get("device_exit_required_length_mm", 0.0), + "original_device_exit_required_length_mm": item.get("original_device_exit_required_length_mm", 0.0), + "exit_length_capped": bool(item.get("exit_length_capped", False)), + "device_bbox_detected": bool(item.get("device_bbox_detected", False)), + } + + _PATH_NETWORK_ISSUE_LABELS = { "empty_routing_path_network": "布线路径网络为空", "invalid_route_carriers": "路径对象几何无效", @@ -9200,6 +10324,10 @@ _PATH_NETWORK_ISSUE_LABELS = { "route_carriers_outside_boundary": "路径越出柜内边界", "terminals_outside_boundary": "端子越出柜内边界", "long_terminal_accesses": "端子接入过长", + "terminal_exit_length_capped": "端子出线长度截断", + "terminal_exit_direction_corrected": "端子默认出线方向校正", + "terminal_access_fallback_targets": "端子接入退回布线面", + "terminal_access_endpoint_device_avoidance": "端子接入避让端点设备", "unconnected_terminals": "端子未接入", "wire_duct_endpoint_breaks": "线槽端点疑似断开", "wire_ducts_without_terminal_access": "线槽未接入端子主网络", @@ -9353,6 +10481,14 @@ def format_routing_path_network_report(diagnostic): _format_distance_mm(sample.get("terminal_access_length_mm")), ) + invalid_exit_directions = _dict_items(diagnostic.get("invalid_terminal_exit_directions", []) or []) + if invalid_exit_directions: + sample = invalid_exit_directions[0] + message += "\n端子出线方向无效:{0},字段 {1}。请检查模板端子出线方向或 QetTerminalExitDirectionJson。".format( + _diagnostic_terminal_text(sample), + sample.get("property_name", "未知字段"), + ) + invalid_local_routes = _dict_items(diagnostic.get("invalid_terminal_local_routes", []) or []) if invalid_local_routes: sample = invalid_local_routes[0] @@ -9374,7 +10510,7 @@ def format_routing_path_network_report(diagnostic): carrier_text = "、".join([str(item) for item in carriers[:3]]) if carriers else "未知 carrier" message += "\n存在孤立路径网络:{0}。请用线槽/辅助路径把孤立网络接入主网络。".format(carrier_text) - if not (empty_network or unconnected or possible_breaks or wire_duct_components or invalid_carriers or outside_carriers or outside_terminals or long_accesses or invalid_local_routes or routing_range_only or isolated): + if not (empty_network or unconnected or possible_breaks or wire_duct_components or invalid_carriers or outside_carriers or outside_terminals or long_accesses or invalid_exit_directions or invalid_local_routes or routing_range_only or isolated): first_issue = issues[0] message += "\n首个问题:{0} ({1})。".format( first_issue.get("code", "unknown"), @@ -9425,11 +10561,12 @@ def route_eplan_connections( try: routing_path_network_diagnostic = _compact_routing_path_network_diagnostic( RoutingNetwork.diagnose_routing_path_network( - doc, - terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), - terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), - terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), - adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), + doc, + terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), + terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), + terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), + adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), ) ) except Exception as exc: @@ -9473,11 +10610,12 @@ def route_eplan_connections( ) routing_path_network_diagnostic = _compact_routing_path_network_diagnostic( RoutingNetwork.diagnose_routing_path_network( - doc, - terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), - terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), - terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), - adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), + doc, + terminal_exit_length=float(opts.get("terminal_exit_length", 20.0) or 0.0), + terminal_exit_max_length=float(opts.get("terminal_exit_max_length", 80.0) or 0.0), + terminal_access_max_distance=float(opts.get("terminal_access_max_distance", 1000.0) or 0.0), + terminal_access_warning_distance=float(opts.get("terminal_access_warning_distance", 0.0) or 0.0), + adjoining_duct_tolerance=float(opts.get("adjoining_duct_tolerance", 0.0) or 0.0), ) ) except Exception as exc: @@ -9567,11 +10705,74 @@ def route_eplan_connections( "error": str(exc), } + auto_terminal_access_fallback_bridges = { + "enabled": bool(opts.get("auto_create_terminal_access_fallback_bridges", True)), + "targets": 0, + "created_count": 0, + "duplicates": 0, + "missing_targets": [], + "created_pair_labels": [], + "rerouted": False, + } + if bool(opts.get("auto_create_terminal_access_fallback_bridges", True)): + try: + auto_terminal_access_fallback_bridges = _create_terminal_access_fallback_bridges_from_report( + doc, + report, + project_uuid=(project_uuid or _project_uuid(doc)), + ) + if int(auto_terminal_access_fallback_bridges.get("created_count", 0) or 0) > 0: + retry_wire_uuids = _terminal_access_fallback_wire_uuids_from_report(report) + if update_network: + prepared_network = update_eplan_routing_path_network( + doc, + project_uuid=project_uuid, + options=opts, + selection_ex=selection_ex, + ) + retry_payload = _payload_subset_for_wire_uuids(target_payload, retry_wire_uuids) + if isinstance(retry_payload, dict) and retry_payload.get("wires"): + retry_report = route_eplan_connections_from_payload( + doc, + retry_payload, + options=opts, + prepared_layout=prepared_network, + ) + report = _merge_retry_routes_into_report( + doc, + report, + retry_report, + retry_prefix="terminal_access_fallback", + ) + auto_terminal_access_fallback_bridges["retry_wires"] = len( + retry_payload.get("wires", []) or [] + ) + auto_terminal_access_fallback_bridges["retry_replaced_routes"] = int( + report.get("terminal_access_fallback_retry_replaced_routes", 0) or 0 + ) + auto_terminal_access_fallback_bridges["rerouted"] = True + else: + auto_terminal_access_fallback_bridges["retry_wires"] = 0 + auto_terminal_access_fallback_bridges["retry_replaced_routes"] = 0 + auto_terminal_access_fallback_bridges["rerouted"] = False + except Exception as exc: + auto_terminal_access_fallback_bridges = { + "enabled": True, + "targets": 0, + "created_count": 0, + "duplicates": 0, + "missing_targets": [], + "created_pair_labels": [], + "rerouted": False, + "error": str(exc), + } + report["routing_method"] = "eplan-route-v1" report["routing_path_network_updated"] = bool(update_network) report["routing_path_network_diagnostic"] = routing_path_network_diagnostic report["auto_diagnostic_bridges"] = auto_diagnostic_bridges report["auto_main_path_detour_bridges"] = auto_main_path_detour_bridges + report["auto_terminal_access_fallback_bridges"] = auto_terminal_access_fallback_bridges if isinstance(prepared_network, dict): report["routing_path_network"] = prepared_network if opts.get("hide_route_carriers_after_route", True): diff --git a/src/Mod/FreeCADExchange/AutoRoutingPanel.py b/src/Mod/FreeCADExchange/AutoRoutingPanel.py index 8453951..8176615 100644 --- a/src/Mod/FreeCADExchange/AutoRoutingPanel.py +++ b/src/Mod/FreeCADExchange/AutoRoutingPanel.py @@ -97,6 +97,96 @@ def _style_command_button(button, text, tooltip=""): return button +def _panel_safe_int(value): + try: + return int(value or 0) + except Exception: + return 0 + + +def _panel_pair_labels(payload, limit=3): + if not isinstance(payload, dict): + return [] + labels = [] + for label in list(payload.get("created_pair_labels", []) or []): + text = str(label or "").strip() + if text: + labels.append(text) + if len(labels) >= limit: + break + return labels + + +def _panel_default_auto_bridge_enabled(options, key): + if isinstance(options, dict) and key in options: + return bool(options.get(key)) + return key in { + "auto_create_diagnostic_bridges", + "auto_create_main_path_detour_bridges", + "auto_create_terminal_access_fallback_bridges", + } + + +def _format_terminal_access_fallback_selection_status(result): + wires = _panel_safe_int((result or {}).get("selected_terminal_access_fallback_wires", 0)) + targets = _panel_safe_int((result or {}).get("selected_terminal_access_fallback_targets", 0)) + access_carriers = _panel_safe_int( + (result or {}).get("selected_terminal_access_fallback_access_carriers", 0) + ) + terminals = _panel_safe_int((result or {}).get("selected_terminal_access_fallback_terminals", 0)) + devices = _panel_safe_int((result or {}).get("selected_terminal_access_fallback_devices", 0)) + message = "已选择端子退回位置:导线 {0} 条,目标 {1} 个".format(wires, targets) + if access_carriers > 0: + message += ",接入线 {0} 条".format(access_carriers) + if terminals > 0: + message += ",端子 {0} 个".format(terminals) + if devices > 0: + message += ",设备 {0} 个".format(devices) + return message + "。" + + +def _format_wire_outside_boundary_selection_status(result): + wires = _panel_safe_int((result or {}).get("selected_wire_outside_boundary_wires", 0)) + carriers = _panel_safe_int((result or {}).get("selected_wire_outside_boundary_route_carriers", 0)) + sources = _panel_safe_int((result or {}).get("selected_wire_outside_boundary_route_sources", 0)) + message = "已选择越界导线:{0} 条".format(wires) + if carriers > 0: + message += ",路径 carrier {0} 条".format(carriers) + if sources > 0: + message += ",源对象 {0} 个".format(sources) + return message + "。" + + +def _format_route_panel_status(report): + message = AutoRouting.format_eplan_connection_route_report(report) + if not isinstance(report, dict): + return message + diagnostic = report.get("auto_diagnostic_bridges", {}) + main_path = report.get("auto_main_path_detour_bridges", {}) + terminal_access = report.get("auto_terminal_access_fallback_bridges", {}) + diagnostic_count = _panel_safe_int(diagnostic.get("created_count", 0)) if isinstance(diagnostic, dict) else 0 + main_path_count = _panel_safe_int(main_path.get("created_count", 0)) if isinstance(main_path, dict) else 0 + terminal_count = ( + _panel_safe_int(terminal_access.get("created_count", 0)) if isinstance(terminal_access, dict) else 0 + ) + if diagnostic_count <= 0 and main_path_count <= 0 and terminal_count <= 0: + return message + + # 状态栏空间有限,这里把自动修复结果提前汇总,方便手动测试时一眼确认补桥是否生效。 + message += "\n自动补桥摘要:诊断桥 {0} 条,主路径补桥 {1} 条,端子接入补桥 {2} 条。".format( + diagnostic_count, + main_path_count, + terminal_count, + ) + main_pairs = _panel_pair_labels(main_path) + if main_pairs: + message += "\n主路径配对:{0}。".format("、".join(main_pairs)) + terminal_pairs = _panel_pair_labels(terminal_access) + if terminal_pairs: + message += "\n端子接入配对:{0}。".format("、".join(terminal_pairs)) + return message + + class AutoRoutingController: def __init__(self, options=None): self.last_report = None @@ -189,6 +279,15 @@ class AutoRoutingController: sample_limit = int(AutoRouting.DEFAULT_OPTIONS["preflight_routeability_sample_limit"]) self.options["preflight_routeability_sample_limit"] = max(sample_limit, 0) + def set_auto_create_diagnostic_bridges(self, value): + self.options["auto_create_diagnostic_bridges"] = bool(value) + + def set_auto_create_main_path_detour_bridges(self, value): + self.options["auto_create_main_path_detour_bridges"] = bool(value) + + def set_auto_create_terminal_access_fallback_bridges(self, value): + self.options["auto_create_terminal_access_fallback_bridges"] = bool(value) + def summary(self): doc = _active_document() terminal_count = len(AutoRouting.index_terminals(doc)) @@ -627,17 +726,18 @@ class AutoRoutingController: source_refs.append({"name": source_name, "label": source_label}) return carrier_refs, source_refs - def _select_route_refs(self, doc, route_tracks, result_prefix): + def _select_route_refs(self, doc, route_tracks, result_prefix, clear_selection=True): selected = [] selected_names = set() selected_carriers = [] selected_sources = [] missing_refs = [] - try: - Gui.Selection.clearSelection() - except Exception: - pass + if clear_selection: + try: + Gui.Selection.clearSelection() + except Exception: + pass def add_object(obj, bucket): if obj is None: @@ -882,6 +982,155 @@ class AutoRoutingController: } return self.last_report + def select_wire_outside_boundary_wires(self): + doc = _active_document() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + batch_payload = ( + ((summary.get("diagnostics", {}) or {}).get("RoutingConnectionBatch", {}) or {}).get("payload", {}) + if isinstance(summary.get("diagnostics", {}), dict) + else {} + ) + samples = [] + seen_refs = set() + + def add_sample(item): + if not isinstance(item, dict): + return + wire_uuid = str(item.get("wire_uuid", "") or "").strip() + wire_label = str(item.get("wire_object_label", "") or item.get("wire_label", "") or "").strip() + key = wire_uuid or wire_label + if not key or key in seen_refs: + return + seen_refs.add(key) + samples.append({"wire_uuid": wire_uuid, "wire_label": wire_label, "ref": key}) + + for sample in list(batch_payload.get("wire_outside_boundary_samples", []) or []): + add_sample(sample) + for sample in list(batch_payload.get("route_candidate_boundary_warning_samples", []) or []): + add_sample(sample) + for sample in list(batch_payload.get("route_samples", []) or []): + issue_codes = [ + str(code or "").strip() + for code in list(sample.get("issue_codes", []) or []) + if str(code or "").strip() + ] + if "route_candidate_boundary_violations" in issue_codes or "boundary_warning" in issue_codes: + add_sample(sample) + + def find_wire(sample): + wire_uuid = sample.get("wire_uuid", "") + wire_label = sample.get("wire_label", "") + for candidate in list(getattr(doc, "Objects", []) or []): + if (getattr(candidate, "RouteType", "") or "").strip() != "RoutedConnection": + continue + if wire_uuid and str(getattr(candidate, "QetWireUuid", "") or "").strip() == wire_uuid: + return candidate + if wire_label: + for candidate in list(getattr(doc, "Objects", []) or []): + if (getattr(candidate, "RouteType", "") or "").strip() != "RoutedConnection": + continue + if str(getattr(candidate, "Label", "") or "").strip() == wire_label: + return candidate + return None + + selected = [] + selected_names = set() + missing_refs = [] + try: + Gui.Selection.clearSelection() + except Exception: + pass + for sample in samples: + obj = find_wire(sample) + if obj is None: + missing_refs.append(sample.get("wire_uuid") or sample.get("wire_label") or sample.get("ref", "")) + continue + try: + Gui.Selection.addSelection(obj) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), getattr(obj, "Name", "")) + except Exception: + continue + selected_names.add(getattr(obj, "Name", "")) + selected.append(obj) + + # 样例列表会被 limit 截断,已生成导线对象上的问题码才是完整定位来源。 + boundary_issue_codes = {"route_candidate_boundary_violations", "boundary_warning"} + for candidate in list(getattr(doc, "Objects", []) or []): + if (getattr(candidate, "RouteType", "") or "").strip() != "RoutedConnection": + continue + if getattr(candidate, "Name", "") in selected_names: + continue + issue_codes = { + code.strip() + for code in str(getattr(candidate, "QetRouteIssueCodes", "") or "").split(",") + if code.strip() + } + if not issue_codes.intersection(boundary_issue_codes): + continue + try: + Gui.Selection.addSelection(candidate) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), getattr(candidate, "Name", "")) + except Exception: + continue + selected_names.add(getattr(candidate, "Name", "")) + selected.append(candidate) + + route_tracks = [] + route_track_missing_refs = [] + for wire in selected: + route_track_text = str(getattr(wire, "QetRouteTrackJson", "") or "").strip() + if not route_track_text: + continue + try: + route_track = json.loads(route_track_text) + except Exception: + route_track_missing_refs.append(getattr(wire, "Name", "")) + continue + if isinstance(route_track, dict): + route_tracks.append(route_track) + route_ref_report = self._select_route_refs( + doc, + route_tracks, + "selected_wire_outside_boundary_route", + clear_selection=False, + ) + self.last_report = { + "selected_wire_outside_boundary_wires": len(selected), + "selected_wire_outside_boundary_wire_names": [getattr(obj, "Name", "") for obj in selected], + "selected_wire_outside_boundary_route_objects": route_ref_report.get( + "selected_wire_outside_boundary_route_objects", + 0, + ), + "selected_wire_outside_boundary_route_carriers": route_ref_report.get( + "selected_wire_outside_boundary_route_carriers", + 0, + ), + "selected_wire_outside_boundary_route_carrier_names": route_ref_report.get( + "selected_wire_outside_boundary_route_carrier_names", + [], + ), + "selected_wire_outside_boundary_route_sources": route_ref_report.get( + "selected_wire_outside_boundary_route_sources", + 0, + ), + "selected_wire_outside_boundary_route_source_names": route_ref_report.get( + "selected_wire_outside_boundary_route_source_names", + [], + ), + "missing_wire_outside_boundary_refs": missing_refs + + [ + ref + for ref in route_ref_report.get("missing_selected_wire_outside_boundary_route_refs", []) + + route_track_missing_refs + if ref and ref not in missing_refs + ], + } + return self.last_report + def select_main_path_detour_missing_wires(self): doc = _active_document() summary = AutoRouting.collect_routing_diagnostic_summary(doc) @@ -1248,57 +1497,602 @@ class AutoRoutingController: } selected = [] - selected_fallback = [] - selected_current = [] + selected_fallback = [] + selected_current = [] + selected_names = set() + missing_refs = [] + missing_current_route_refs = [] + try: + Gui.Selection.clearSelection() + except Exception: + pass + def select_refs_for_label(label, missing_bucket, selected_bucket): + matches = self._find_objects_by_name_or_label(doc, name=label, label=label) + if not matches: + missing_bucket.append(label) + return + for obj in matches: + obj_name = getattr(obj, "Name", "") + if obj_name in selected_names: + continue + try: + Gui.Selection.addSelection(obj) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), obj_name) + except Exception: + continue + selected_names.add(obj_name) + selected.append(obj) + selected_bucket.append(obj) + + for label in labels: + select_refs_for_label(label, missing_refs, selected_fallback) + for label in current_route_labels: + select_refs_for_label(label, missing_current_route_refs, selected_current) + self.last_report = { + "selected_main_path_detour_bridge_endpoint_objects": len(selected), + "selected_main_path_detour_rejected_fallback_sources": len(selected_fallback), + "selected_main_path_detour_current_route_sources": len(selected_current), + "selected_main_path_detour_rejected_fallback_source_names": [ + getattr(obj, "Name", "") for obj in selected_fallback + ], + "selected_main_path_detour_current_route_source_names": [ + getattr(obj, "Name", "") for obj in selected_current + ], + "main_path_detour_rejected_fallback_labels": labels, + "main_path_detour_rejected_fallback_label_counts": label_counts, + "main_path_detour_rejected_fallback_kind_counts": kind_counts, + "main_path_detour_current_route_source_labels": current_route_labels, + "main_path_detour_current_route_source_label_counts": current_route_label_counts, + "main_path_detour_bridge_pair_counts": bridge_pair_counts, + "missing_main_path_detour_rejected_fallback_refs": missing_refs, + "missing_main_path_detour_current_route_refs": missing_current_route_refs, + } + return self.last_report + + def select_terminal_access_fallback_targets(self): + doc = _active_document() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + batch_payload = ( + ((summary.get("diagnostics", {}) or {}).get("RoutingConnectionBatch", {}) or {}).get("payload", {}) + if isinstance(summary.get("diagnostics", {}), dict) + else {} + ) + samples = list(batch_payload.get("terminal_access_fallback_target_samples", []) or []) + if not samples and isinstance(summary.get("diagnostics", {}), dict): + path_payload = ( + ((summary.get("diagnostics", {}) or {}).get("RoutingPathNetwork", {}) or {}).get("payload", {}) + ) + if isinstance(path_payload, dict): + samples = list(path_payload.get("terminal_access_fallback_targets", []) or []) + selected = [] + selected_wires = [] + selected_targets = [] + selected_access_carriers = [] + selected_terminals = [] + selected_devices = [] + selected_names = set() + missing_refs = [] + + def add_selection(obj, bucket): + if obj is None: + return False + obj_name = getattr(obj, "Name", "") + if obj_name in selected_names: + return True + try: + Gui.Selection.addSelection(obj) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), obj_name) + except Exception: + return False + selected_names.add(obj_name) + selected.append(obj) + bucket.append(obj) + return True + + def find_wire(wire_uuid): + wire_uuid = str(wire_uuid or "").strip() + if not wire_uuid: + return None + for candidate in list(getattr(doc, "Objects", []) or []): + if (getattr(candidate, "RouteType", "") or "").strip() != "RoutedConnection": + continue + if str(getattr(candidate, "QetWireUuid", "") or "").strip() == wire_uuid: + return candidate + return None + + def terminal_access_carrier_from_wire(wire, endpoint): + if wire is None: + return None + endpoint = str(endpoint or "").strip().lower() + if endpoint not in {"start", "end"}: + return None + try: + network_payload = json.loads(str(getattr(wire, "QetRouteNetworkJson", "") or "{}")) + except Exception: + network_payload = {} + if not isinstance(network_payload, dict): + return None + carrier_name = str( + network_payload.get("{0}_terminal_access_carrier".format(endpoint), "") or "" + ).strip() + if not carrier_name: + return None + try: + return doc.getObject(carrier_name) + except Exception: + return None + + def terminal_access_carrier_from_sample(sample): + carrier = self._find_object_by_name_or_label( + doc, + sample.get("access_carrier_name", ""), + sample.get("access_carrier_label", ""), + ) + if carrier is not None: + return carrier + return terminal_access_carrier_from_wire(sample.get("_wire"), sample.get("endpoint", "")) + + def find_terminal(sample): + terminal_name = str(sample.get("terminal_name", "") or "").strip() + terminal_uuid = str(sample.get("terminal_uuid", "") or "").strip() + terminal_label = str(sample.get("terminal_label", "") or "").strip() + if terminal_name: + obj = doc.getObject(terminal_name) + if obj is not None: + return obj + for candidate in list(getattr(doc, "Objects", []) or []): + if terminal_uuid and str(getattr(candidate, "QetTerminalUuid", "") or "").strip() == terminal_uuid: + return candidate + if terminal_label: + for candidate in list(getattr(doc, "Objects", []) or []): + if str(getattr(candidate, "Label", "") or "").strip() == terminal_label: + return candidate + return None + + def find_parent_device(sample): + device_name = str(sample.get("parent_device_name", "") or "").strip() + device_label = str(sample.get("parent_device_label", "") or "").strip() + return self._find_object_by_name_or_label(doc, device_name, device_label) + + try: + Gui.Selection.clearSelection() + except Exception: + pass + for sample in samples: + if not isinstance(sample, dict): + continue + wire_ref = str(sample.get("wire_uuid", "") or sample.get("wire_label", "") or "").strip() + wire = find_wire(sample.get("wire_uuid", "")) + sample["_wire"] = wire + if wire is None: + if wire_ref and wire_ref not in missing_refs: + missing_refs.append(wire_ref) + else: + add_selection(wire, selected_wires) + + target_name = str(sample.get("target_name", "") or "").strip() + target_label = str(sample.get("target_label", "") or "").strip() + target_kind = str(sample.get("target_kind", "") or "").strip() + target_matches = self._find_objects_by_name_or_label(doc, name=target_name, label="") + if not target_matches: + target_matches = self._find_objects_by_name_or_label(doc, name=target_label, label=target_label) + if not target_matches: + missing_ref = target_name or target_label or target_kind + if missing_ref and missing_ref not in missing_refs: + missing_refs.append(missing_ref) + else: + for target in target_matches: + add_selection(target, selected_targets) + + access_carrier = terminal_access_carrier_from_sample(sample) + if access_carrier is not None: + add_selection(access_carrier, selected_access_carriers) + elif sample.get("access_carrier_name", "") or sample.get("access_carrier_label", ""): + missing_ref = sample.get("access_carrier_name", "") or sample.get("access_carrier_label", "") + if missing_ref and missing_ref not in missing_refs: + missing_refs.append(missing_ref) + terminal = find_terminal(sample) + if terminal is not None: + add_selection(terminal, selected_terminals) + elif sample.get("terminal_name", "") or sample.get("terminal_label", "") or sample.get("terminal_uuid", ""): + missing_ref = sample.get("terminal_name", "") or sample.get("terminal_label", "") or sample.get("terminal_uuid", "") + if missing_ref and missing_ref not in missing_refs: + missing_refs.append(missing_ref) + parent_device = find_parent_device(sample) + if parent_device is not None: + add_selection(parent_device, selected_devices) + elif sample.get("parent_device_name", "") or sample.get("parent_device_label", ""): + missing_ref = sample.get("parent_device_name", "") or sample.get("parent_device_label", "") + if missing_ref and missing_ref not in missing_refs: + missing_refs.append(missing_ref) + + # 诊断样例会被显示数量截断;已生成导线对象上的问题码用于补全选择。 + for candidate in list(getattr(doc, "Objects", []) or []): + if (getattr(candidate, "RouteType", "") or "").strip() != "RoutedConnection": + continue + if getattr(candidate, "Name", "") in selected_names: + continue + issue_codes = { + code.strip() + for code in str(getattr(candidate, "QetRouteIssueCodes", "") or "").split(",") + if code.strip() + } + if "terminal_access_fallback_targets" not in issue_codes: + continue + add_selection(candidate, selected_wires) + + self.last_report = { + "selected_terminal_access_fallback_objects": len(selected), + "selected_terminal_access_fallback_wires": len(selected_wires), + "selected_terminal_access_fallback_targets": len(selected_targets), + "selected_terminal_access_fallback_access_carriers": len(selected_access_carriers), + "selected_terminal_access_fallback_terminals": len(selected_terminals), + "selected_terminal_access_fallback_devices": len(selected_devices), + "selected_terminal_access_fallback_wire_names": [ + getattr(obj, "Name", "") for obj in selected_wires + ], + "selected_terminal_access_fallback_target_names": [ + getattr(obj, "Name", "") for obj in selected_targets + ], + "selected_terminal_access_fallback_access_carrier_names": [ + getattr(obj, "Name", "") for obj in selected_access_carriers + ], + "selected_terminal_access_fallback_terminal_names": [ + getattr(obj, "Name", "") for obj in selected_terminals + ], + "selected_terminal_access_fallback_device_names": [ + getattr(obj, "Name", "") for obj in selected_devices + ], + "missing_terminal_access_fallback_refs": missing_refs, + } + return self.last_report + + def select_terminal_access_endpoint_device_avoidance(self): + doc = _active_document() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + path_payload = ( + ((summary.get("diagnostics", {}) or {}).get("RoutingPathNetwork", {}) or {}).get("payload", {}) + if isinstance(summary.get("diagnostics", {}), dict) + else {} + ) + samples = list(path_payload.get("terminal_access_endpoint_device_avoidance", []) or []) + selected = [] + selected_terminals = [] + selected_devices = [] + selected_targets = [] + selected_access_carriers = [] + selected_names = set() + missing_refs = [] + + def add_selection(obj, bucket): + if obj is None: + return False + obj_name = getattr(obj, "Name", "") + if obj_name in selected_names: + return True + try: + Gui.Selection.addSelection(obj) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), obj_name) + except Exception: + return False + selected_names.add(obj_name) + selected.append(obj) + bucket.append(obj) + return True + + def remember_missing(ref): + ref = str(ref or "").strip() + if ref and ref not in missing_refs: + missing_refs.append(ref) + + def find_terminal(sample): + terminal_name = str(sample.get("terminal_name", "") or "").strip() + terminal_uuid = str(sample.get("terminal_uuid", "") or "").strip() + terminal_label = str(sample.get("terminal_label", "") or "").strip() + if terminal_name: + obj = doc.getObject(terminal_name) + if obj is not None: + return obj + for candidate in list(getattr(doc, "Objects", []) or []): + if terminal_uuid and str(getattr(candidate, "QetTerminalUuid", "") or "").strip() == terminal_uuid: + return candidate + if terminal_label: + for candidate in list(getattr(doc, "Objects", []) or []): + if str(getattr(candidate, "Label", "") or "").strip() == terminal_label: + return candidate + return None + + def find_one_by_name_or_label(name, label): + matches = self._find_objects_by_name_or_label(doc, name=name, label="") + if not matches: + matches = self._find_objects_by_name_or_label(doc, name=label, label=label) + return matches[0] if matches else None + + try: + Gui.Selection.clearSelection() + except Exception: + pass + for sample in samples: + if not isinstance(sample, dict): + continue + # 端点设备避让样本用于验收定位:先选端子/设备,再选接入目标和 TerminalAccess 接入段。 + terminal = find_terminal(sample) + if terminal is None: + remember_missing( + sample.get("terminal_name", "") + or sample.get("terminal_label", "") + or sample.get("terminal_uuid", "") + ) + else: + add_selection(terminal, selected_terminals) + + parent_device = self._find_object_by_name_or_label( + doc, + sample.get("parent_device_name", ""), + sample.get("parent_device_label", ""), + ) + if parent_device is None: + remember_missing(sample.get("parent_device_name", "") or sample.get("parent_device_label", "")) + else: + add_selection(parent_device, selected_devices) + + target = find_one_by_name_or_label(sample.get("target_name", ""), sample.get("target_label", "")) + if target is None: + remember_missing(sample.get("target_name", "") or sample.get("target_label", "")) + else: + add_selection(target, selected_targets) + + access_carrier = find_one_by_name_or_label( + sample.get("access_carrier_name", ""), + sample.get("access_carrier_label", ""), + ) + if access_carrier is None: + remember_missing(sample.get("access_carrier_name", "") or sample.get("access_carrier_label", "")) + else: + add_selection(access_carrier, selected_access_carriers) + + self.last_report = { + "selected_terminal_access_endpoint_avoidance_objects": len(selected), + "selected_terminal_access_endpoint_avoidance_terminals": len(selected_terminals), + "selected_terminal_access_endpoint_avoidance_devices": len(selected_devices), + "selected_terminal_access_endpoint_avoidance_targets": len(selected_targets), + "selected_terminal_access_endpoint_avoidance_access_carriers": len(selected_access_carriers), + "selected_terminal_access_endpoint_avoidance_terminal_names": [ + getattr(obj, "Name", "") for obj in selected_terminals + ], + "selected_terminal_access_endpoint_avoidance_device_names": [ + getattr(obj, "Name", "") for obj in selected_devices + ], + "selected_terminal_access_endpoint_avoidance_target_names": [ + getattr(obj, "Name", "") for obj in selected_targets + ], + "selected_terminal_access_endpoint_avoidance_access_carrier_names": [ + getattr(obj, "Name", "") for obj in selected_access_carriers + ], + "missing_terminal_access_endpoint_avoidance_refs": missing_refs, + } + return self.last_report + + def select_unconnected_terminal_access_issues(self): + doc = _active_document() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + path_payload = ( + ((summary.get("diagnostics", {}) or {}).get("RoutingPathNetwork", {}) or {}).get("payload", {}) + if isinstance(summary.get("diagnostics", {}), dict) + else {} + ) + samples = list(path_payload.get("unconnected_terminals", []) or []) if isinstance(path_payload, dict) else [] + selected = [] + selected_terminals = [] + selected_devices = [] + selected_names = set() + missing_refs = [] + max_distance = 0.0 + + def add_selection(obj, bucket): + if obj is None: + return False + obj_name = getattr(obj, "Name", "") + if obj_name in selected_names: + return True + try: + Gui.Selection.addSelection(obj) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), obj_name) + except Exception: + return False + selected_names.add(obj_name) + selected.append(obj) + bucket.append(obj) + return True + + def remember_missing(ref): + ref = str(ref or "").strip() + if ref and ref not in missing_refs: + missing_refs.append(ref) + + def find_terminal(sample): + terminal_name = str(sample.get("name", "") or sample.get("terminal_name", "") or "").strip() + terminal_uuid = str(sample.get("terminal_uuid", "") or "").strip() + terminal_label = str(sample.get("label", "") or sample.get("terminal_label", "") or "").strip() + if terminal_name: + obj = doc.getObject(terminal_name) + if obj is not None: + return obj + for candidate in list(getattr(doc, "Objects", []) or []): + if terminal_uuid and str(getattr(candidate, "QetTerminalUuid", "") or "").strip() == terminal_uuid: + return candidate + if terminal_label: + for candidate in list(getattr(doc, "Objects", []) or []): + if str(getattr(candidate, "Label", "") or "").strip() == terminal_label: + return candidate + return None + + try: + Gui.Selection.clearSelection() + except Exception: + pass + for sample in samples: + if not isinstance(sample, dict): + continue + try: + max_distance = max(max_distance, float(sample.get("nearest_network_distance_mm", 0.0) or 0.0)) + except Exception: + pass + terminal = find_terminal(sample) + if terminal is None: + remember_missing( + sample.get("name", "") + or sample.get("terminal_name", "") + or sample.get("terminal_uuid", "") + or sample.get("label", "") + ) + else: + add_selection(terminal, selected_terminals) + + parent_device = self._find_object_by_name_or_label( + doc, + sample.get("parent_device_name", ""), + sample.get("parent_device_label", ""), + ) + if parent_device is None: + remember_missing(sample.get("parent_device_name", "") or sample.get("parent_device_label", "")) + else: + add_selection(parent_device, selected_devices) + + self.last_report = { + "selected_unconnected_terminal_access_objects": len(selected), + "selected_unconnected_terminal_access_terminals": len(selected_terminals), + "selected_unconnected_terminal_access_devices": len(selected_devices), + "selected_unconnected_terminal_access_terminal_names": [ + getattr(obj, "Name", "") for obj in selected_terminals + ], + "selected_unconnected_terminal_access_device_names": [ + getattr(obj, "Name", "") for obj in selected_devices + ], + "missing_unconnected_terminal_access_refs": missing_refs, + "max_unconnected_terminal_access_distance_mm": float(max_distance), + } + return self.last_report + + def select_terminal_exit_issue_terminals(self): + doc = _active_document() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + path_payload = ( + ((summary.get("diagnostics", {}) or {}).get("RoutingPathNetwork", {}) or {}).get("payload", {}) + if isinstance(summary.get("diagnostics", {}), dict) + else {} + ) + issue_groups = ( + ("corrected", list(path_payload.get("corrected_terminal_exits", []) or [])), + ("capped", list(path_payload.get("capped_terminal_exits", []) or [])), + ("invalid_direction", list(path_payload.get("invalid_terminal_exit_directions", []) or [])), + ("invalid_local_route", list(path_payload.get("invalid_terminal_local_routes", []) or [])), + ) + selected = [] + selected_terminals = [] + selected_devices = [] selected_names = set() missing_refs = [] - missing_current_route_refs = [] + issue_terminal_counts = { + "corrected": 0, + "capped": 0, + "invalid_direction": 0, + "invalid_local_route": 0, + } + + def add_selection(obj, bucket): + if obj is None: + return False + obj_name = getattr(obj, "Name", "") + if obj_name in selected_names: + return True + try: + Gui.Selection.addSelection(obj) + except Exception: + try: + Gui.Selection.addSelection(getattr(doc, "Name", ""), obj_name) + except Exception: + return False + selected_names.add(obj_name) + selected.append(obj) + bucket.append(obj) + return True + + def remember_missing(ref): + ref = str(ref or "").strip() + if ref and ref not in missing_refs: + missing_refs.append(ref) + + def find_terminal(sample): + terminal_name = str(sample.get("name", "") or sample.get("terminal_name", "") or "").strip() + terminal_uuid = str(sample.get("terminal_uuid", "") or "").strip() + terminal_label = str(sample.get("label", "") or sample.get("terminal_label", "") or "").strip() + if terminal_name: + obj = doc.getObject(terminal_name) + if obj is not None: + return obj + for candidate in list(getattr(doc, "Objects", []) or []): + if terminal_uuid and str(getattr(candidate, "QetTerminalUuid", "") or "").strip() == terminal_uuid: + return candidate + if terminal_label: + for candidate in list(getattr(doc, "Objects", []) or []): + if str(getattr(candidate, "Label", "") or "").strip() == terminal_label: + return candidate + return None + try: Gui.Selection.clearSelection() except Exception: pass - def select_refs_for_label(label, missing_bucket, selected_bucket): - matches = self._find_objects_by_name_or_label(doc, name=label, label=label) - if not matches: - missing_bucket.append(label) - return - for obj in matches: - obj_name = getattr(obj, "Name", "") - if obj_name in selected_names: + for issue_kind, samples in issue_groups: + for sample in samples: + if not isinstance(sample, dict): continue - try: - Gui.Selection.addSelection(obj) - except Exception: - try: - Gui.Selection.addSelection(getattr(doc, "Name", ""), obj_name) - except Exception: - continue - selected_names.add(obj_name) - selected.append(obj) - selected_bucket.append(obj) + terminal = find_terminal(sample) + if terminal is None: + remember_missing( + sample.get("name", "") + or sample.get("terminal_name", "") + or sample.get("terminal_uuid", "") + or sample.get("label", "") + ) + else: + if add_selection(terminal, selected_terminals): + issue_terminal_counts[issue_kind] += 1 + + parent_device = self._find_object_by_name_or_label( + doc, + sample.get("parent_device_name", ""), + sample.get("parent_device_label", ""), + ) + if parent_device is None: + remember_missing(sample.get("parent_device_name", "") or sample.get("parent_device_label", "")) + else: + add_selection(parent_device, selected_devices) - for label in labels: - select_refs_for_label(label, missing_refs, selected_fallback) - for label in current_route_labels: - select_refs_for_label(label, missing_current_route_refs, selected_current) self.last_report = { - "selected_main_path_detour_bridge_endpoint_objects": len(selected), - "selected_main_path_detour_rejected_fallback_sources": len(selected_fallback), - "selected_main_path_detour_current_route_sources": len(selected_current), - "selected_main_path_detour_rejected_fallback_source_names": [ - getattr(obj, "Name", "") for obj in selected_fallback + "selected_terminal_exit_issue_objects": len(selected), + "selected_terminal_exit_issue_terminals": len(selected_terminals), + "selected_terminal_exit_issue_devices": len(selected_devices), + "selected_terminal_exit_corrected_terminals": issue_terminal_counts["corrected"], + "selected_terminal_exit_capped_terminals": issue_terminal_counts["capped"], + "selected_terminal_exit_invalid_direction_terminals": issue_terminal_counts["invalid_direction"], + "selected_terminal_exit_invalid_local_route_terminals": issue_terminal_counts["invalid_local_route"], + "selected_terminal_exit_issue_terminal_names": [ + getattr(obj, "Name", "") for obj in selected_terminals ], - "selected_main_path_detour_current_route_source_names": [ - getattr(obj, "Name", "") for obj in selected_current + "selected_terminal_exit_issue_device_names": [ + getattr(obj, "Name", "") for obj in selected_devices ], - "main_path_detour_rejected_fallback_labels": labels, - "main_path_detour_rejected_fallback_label_counts": label_counts, - "main_path_detour_rejected_fallback_kind_counts": kind_counts, - "main_path_detour_current_route_source_labels": current_route_labels, - "main_path_detour_current_route_source_label_counts": current_route_label_counts, - "main_path_detour_bridge_pair_counts": bridge_pair_counts, - "missing_main_path_detour_rejected_fallback_refs": missing_refs, - "missing_main_path_detour_current_route_refs": missing_current_route_refs, + "missing_terminal_exit_issue_refs": missing_refs, } return self.last_report @@ -1337,18 +2131,28 @@ class AutoRoutingController: seen_names.add(candidate_name) return refs - def select_long_terminal_accesses(self): - doc = _active_document() - summary = AutoRouting.collect_routing_diagnostic_summary(doc) - batch_payload = ( - ((summary.get("diagnostics", {}) or {}).get("RoutingConnectionBatch", {}) or {}).get("payload", {}) - if isinstance(summary.get("diagnostics", {}), dict) - else {} - ) + @staticmethod + def _long_terminal_access_samples_from_summary(summary): + diagnostics = summary.get("diagnostics", {}) if isinstance(summary, dict) else {} + if not isinstance(diagnostics, dict): + diagnostics = {} + path_payload = ((diagnostics.get("RoutingPathNetwork", {}) or {}).get("payload", {})) + if isinstance(path_payload, dict): + samples = list(path_payload.get("long_terminal_accesses", []) or []) + if samples: + return samples + batch_payload = ((diagnostics.get("RoutingConnectionBatch", {}) or {}).get("payload", {})) + if not isinstance(batch_payload, dict): + return [] path_diagnostic = batch_payload.get("routing_path_network_diagnostic", {}) if not isinstance(path_diagnostic, dict): path_diagnostic = {} - samples = list(path_diagnostic.get("long_terminal_accesses", []) or []) + return list(path_diagnostic.get("long_terminal_accesses", []) or []) + + def select_long_terminal_accesses(self): + doc = _active_document() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + samples = self._long_terminal_access_samples_from_summary(summary) def find_terminal(item): terminal_uuid = str(item.get("terminal_uuid", "") or "").strip() @@ -1400,15 +2204,7 @@ class AutoRoutingController: def select_long_terminal_access_devices(self): doc = _active_document() summary = AutoRouting.collect_routing_diagnostic_summary(doc) - batch_payload = ( - ((summary.get("diagnostics", {}) or {}).get("RoutingConnectionBatch", {}) or {}).get("payload", {}) - if isinstance(summary.get("diagnostics", {}), dict) - else {} - ) - path_diagnostic = batch_payload.get("routing_path_network_diagnostic", {}) - if not isinstance(path_diagnostic, dict): - path_diagnostic = {} - samples = list(path_diagnostic.get("long_terminal_accesses", []) or []) + samples = self._long_terminal_access_samples_from_summary(summary) selected = [] selected_names = set() missing_refs = [] @@ -1944,6 +2740,19 @@ class AutoRoutingController: } return self.last_report + def set_selected_terminal_exit_direction(self): + result = RoutingNetwork.set_terminal_exit_direction_from_selection(_selection_ex()) + terminal = result.get("terminal") + self.last_report = { + "terminal_exit_directions": 1, + "terminal_exit_direction_names": [getattr(terminal, "Name", "")] if terminal is not None else [], + "terminal_exit_direction_labels": [getattr(terminal, "Label", "")] if terminal is not None else [], + "terminal_exit_direction": dict(result.get("direction", {}) or {}), + "terminal_exit_direction_point_count": int(result.get("point_count", 0) or 0), + "property_name": result.get("property_name", ""), + } + return self.last_report + def create_user_path_bridge_from_selection(self): doc = _active_document() project_uuid = getattr(TerminalObjects.ensure_root_group(doc), "QetProjectUuid", "").strip() @@ -2010,6 +2819,37 @@ class AutoRoutingController: } return self.last_report + def create_user_path_bridges_from_terminal_access_fallback_targets(self): + doc = _active_document() + project_uuid = getattr(TerminalObjects.ensure_root_group(doc), "QetProjectUuid", "").strip() + summary = AutoRouting.collect_routing_diagnostic_summary(doc) + report_payload = {} + diagnostics = summary.get("diagnostics", {}) if isinstance(summary, dict) else {} + if isinstance(diagnostics, dict): + batch_payload = ((diagnostics.get("RoutingConnectionBatch", {}) or {}).get("payload", {}) or {}) + report_payload = batch_payload if isinstance(batch_payload, dict) else {} + if not list(report_payload.get("terminal_access_fallback_target_samples", []) or []): + path_payload = ((diagnostics.get("RoutingPathNetwork", {}) or {}).get("payload", {}) or {}) + if isinstance(path_payload, dict) and list(path_payload.get("terminal_access_fallback_targets", []) or []): + # 只检查路径网络时还没有导线批量报告,也要能按诊断结果补 TerminalAccess 桥。 + report_payload = path_payload + bridge_report = AutoRouting._create_terminal_access_fallback_bridges_from_report( + doc, + report_payload, + project_uuid=project_uuid, + ) + + self.last_report = { + "terminal_access_fallback_bridge_targets": int(bridge_report.get("targets", 0) or 0), + "terminal_access_fallback_user_path_bridges": int(bridge_report.get("created_count", 0) or 0), + "terminal_access_fallback_bridge_duplicates": int(bridge_report.get("duplicates", 0) or 0), + "missing_terminal_access_fallback_bridge_refs": list(bridge_report.get("missing_targets", []) or []), + "terminal_access_fallback_bridge_pair_labels": list( + bridge_report.get("created_pair_labels", []) or [] + ), + } + return self.last_report + def create_user_path_bridges_from_diagnostic_suggestions(self): doc = _active_document() project_uuid = getattr(TerminalObjects.ensure_root_group(doc), "QetProjectUuid", "").strip() @@ -2041,8 +2881,10 @@ class AutoRoutingController: break detour_bridge_report = self.create_user_path_bridges_from_main_path_detour_pairs() detour_created = int(detour_bridge_report.get("main_path_detour_user_path_bridges", 0) or 0) + fallback_bridge_report = self.create_user_path_bridges_from_terminal_access_fallback_targets() + fallback_created = int(fallback_bridge_report.get("terminal_access_fallback_user_path_bridges", 0) or 0) self.last_report = { - "user_path_bridges": total_created + detour_created, + "user_path_bridges": total_created + detour_created + fallback_created, "diagnostic_suggestions": total_suggestions, "duplicate_bridges": total_duplicates, "stale_suggestions": total_stale, @@ -2053,6 +2895,19 @@ class AutoRoutingController: "missing_main_path_detour_bridge_pairs": list( detour_bridge_report.get("missing_main_path_detour_bridge_pairs", []) or [] ), + "terminal_access_fallback_bridge_targets": int( + fallback_bridge_report.get("terminal_access_fallback_bridge_targets", 0) or 0 + ), + "terminal_access_fallback_user_path_bridges": fallback_created, + "terminal_access_fallback_bridge_duplicates": int( + fallback_bridge_report.get("terminal_access_fallback_bridge_duplicates", 0) or 0 + ), + "missing_terminal_access_fallback_bridge_refs": list( + fallback_bridge_report.get("missing_terminal_access_fallback_bridge_refs", []) or [] + ), + "terminal_access_fallback_bridge_pair_labels": list( + fallback_bridge_report.get("terminal_access_fallback_bridge_pair_labels", []) or [] + ), "routing_path_network_checked": True, "network": RoutingNetwork.network_summary( doc, @@ -2428,6 +3283,43 @@ class AutoRoutingTaskPanel: ) options_layout.addWidget(self.user_path_sketch_offset_spin) + auto_options_layout = QtWidgets.QHBoxLayout() + self.auto_create_diagnostic_bridges_check = QtWidgets.QCheckBox("自动诊断桥接") + self.auto_create_diagnostic_bridges_check.setToolTip( + "生成布线连接前,按路径网络诊断建议自动生成线槽/端子网络桥接 UserPath。" + ) + self.auto_create_diagnostic_bridges_check.setChecked( + _panel_default_auto_bridge_enabled( + self.controller.routing_options(), + "auto_create_diagnostic_bridges", + ) + ) + auto_options_layout.addWidget(self.auto_create_diagnostic_bridges_check) + + self.auto_create_main_path_detour_bridges_check = QtWidgets.QCheckBox("自动缺主路径补桥") + self.auto_create_main_path_detour_bridges_check.setToolTip( + "首轮布线发现导线只能退回布线面/辅助路径时,自动把兜底区域桥接到当前主路径并重跑相关导线。" + ) + self.auto_create_main_path_detour_bridges_check.setChecked( + _panel_default_auto_bridge_enabled( + self.controller.routing_options(), + "auto_create_main_path_detour_bridges", + ) + ) + auto_options_layout.addWidget(self.auto_create_main_path_detour_bridges_check) + + self.auto_create_terminal_access_fallback_bridges_check = QtWidgets.QCheckBox("自动端子接入补桥") + self.auto_create_terminal_access_fallback_bridges_check.setToolTip( + "首轮布线发现端子接入退回布线面/辅助路径时,自动桥接到最近主路径并重跑相关导线。" + ) + self.auto_create_terminal_access_fallback_bridges_check.setChecked( + _panel_default_auto_bridge_enabled( + self.controller.routing_options(), + "auto_create_terminal_access_fallback_bridges", + ) + ) + auto_options_layout.addWidget(self.auto_create_terminal_access_fallback_bridges_check) + self.generate_layout_button = _style_command_button( QtWidgets.QPushButton(), "准备布线布局空间", @@ -2470,6 +3362,12 @@ class AutoRoutingTaskPanel: "选中一个可布线端子和一条草图/Draft 局部路径,把路径写入端子的 QetTerminalLocalRoutePointsJson;不写数据库。", ) + self.set_terminal_exit_direction_button = _style_command_button( + QtWidgets.QPushButton(), + "选中端子设置出线方向", + "选中一个可布线端子和一条草图/Draft 方向线,把归一化方向写入 QetTerminalExitDirectionJson;不写数据库。", + ) + self.create_user_path_bridge_button = _style_command_button( QtWidgets.QPushButton(), "选中两路径生成桥接", @@ -2479,7 +3377,7 @@ class AutoRoutingTaskPanel: self.create_diagnostic_bridges_button = _style_command_button( QtWidgets.QPushButton(), "按诊断建议生成桥接", - "先刷新布线路径网络诊断,再按 wire_ducts_without_terminal_access 的 bridge_suggestion 生成 UserPath 桥接。", + "按路径网络诊断、缺主路径配对和端子接入退回目标生成 UserPath 桥接;不写数据库。", ) self.mark_cabinet_boundary_button = _style_command_button( @@ -2494,6 +3392,12 @@ class AutoRoutingTaskPanel: "从最新路径网络诊断中选择越出 CabinetInterior 的路径 carrier 和工程端子,便于修正 UserPath、边界或设备位置。", ) + self.select_wire_outside_boundary_wires_button = _style_command_button( + QtWidgets.QPushButton(), + "选择越界导线", + "从最新批量布线诊断中选择最终路径越出柜内区域的导线,便于补柜内 UserPath/线槽或修正柜内边界。", + ) + self.mark_pass_through_obstacle_button = _style_command_button( QtWidgets.QPushButton(), "选中对象忽略碰撞", @@ -2554,6 +3458,30 @@ class AutoRoutingTaskPanel: "从汇总诊断的需补路径位置中反选被拒绝的 RoutingRange/AuxiliaryPath 来源对象。", ) + self.select_terminal_access_fallback_targets_button = _style_command_button( + QtWidgets.QPushButton(), + "选择端子退回位置", + "从最新路径网络或批量布线诊断中选择端子接入退回布线面/辅助路径的端子、接入段和目标对象。", + ) + + self.select_terminal_access_endpoint_avoidance_button = _style_command_button( + QtWidgets.QPushButton(), + "选择端点避让接入", + "从最新路径网络诊断中选择发生端点设备避让的端子、设备、主路径和 TerminalAccess 接入段。", + ) + + self.select_unconnected_terminal_access_button = _style_command_button( + QtWidgets.QPushButton(), + "选择未接入端子", + "从最新路径网络诊断中选择未接入路由网络或接入距离超过上限的端子及所属设备。", + ) + + self.select_terminal_exit_issue_terminals_button = _style_command_button( + QtWidgets.QPushButton(), + "选择出线问题端子", + "从最新路径网络诊断中选择默认出线方向被校正或出线长度被截断的端子和所属设备。", + ) + self.select_issue_wires_button = _style_command_button( QtWidgets.QPushButton(), "选择异常导线", @@ -2682,10 +3610,12 @@ class AutoRoutingTaskPanel: self.create_orthogonal_3d_user_path_button, self.create_user_paths_button, self.set_terminal_local_route_button, + self.set_terminal_exit_direction_button, self.create_user_path_bridge_button, self.create_diagnostic_bridges_button, self.mark_cabinet_boundary_button, self.select_boundary_issue_objects_button, + self.select_wire_outside_boundary_wires_button, self.select_top_collision_obstacles_button, self.select_device_collision_obstacles_button, self.select_collision_parent_assemblies_button, @@ -2695,6 +3625,10 @@ class AutoRoutingTaskPanel: self.select_main_path_detour_missing_wires_button, self.select_main_path_detour_missing_route_sources_button, self.select_main_path_detour_rejected_fallback_sources_button, + self.select_terminal_access_fallback_targets_button, + self.select_terminal_access_endpoint_avoidance_button, + self.select_unconnected_terminal_access_button, + self.select_terminal_exit_issue_terminals_button, self.select_issue_wires_button, self.select_issue_route_sources_button, self.select_selected_wire_route_sources_button, @@ -2723,6 +3657,7 @@ class AutoRoutingTaskPanel: layout.addWidget(widget) layout.addLayout(options_layout) + layout.addLayout(auto_options_layout) layout.addWidget(self.status_label) self.generate_paths_button.clicked.connect(self.generate_routing_paths) @@ -2731,10 +3666,12 @@ class AutoRoutingTaskPanel: self.create_orthogonal_3d_user_path_button.clicked.connect(self.create_orthogonal_user_path_from_selected_points) self.create_user_paths_button.clicked.connect(self.create_user_paths_from_selection) self.set_terminal_local_route_button.clicked.connect(self.set_selected_terminal_local_route_points) + self.set_terminal_exit_direction_button.clicked.connect(self.set_selected_terminal_exit_direction) self.create_user_path_bridge_button.clicked.connect(self.create_user_path_bridge_from_selection) self.create_diagnostic_bridges_button.clicked.connect(self.create_user_path_bridges_from_diagnostic_suggestions) self.mark_cabinet_boundary_button.clicked.connect(self.mark_cabinet_boundary_from_selection) self.select_boundary_issue_objects_button.clicked.connect(self.select_boundary_issue_route_carriers_and_terminals) + self.select_wire_outside_boundary_wires_button.clicked.connect(self.select_wire_outside_boundary_wires) self.select_top_collision_obstacles_button.clicked.connect(self.select_top_collision_obstacles) self.select_device_collision_obstacles_button.clicked.connect(self.select_device_or_layout_collision_obstacles) self.select_collision_parent_assemblies_button.clicked.connect(self.select_top_collision_parent_assemblies) @@ -2752,6 +3689,18 @@ class AutoRoutingTaskPanel: self.select_main_path_detour_rejected_fallback_sources_button.clicked.connect( self.select_main_path_detour_rejected_fallback_sources ) + self.select_terminal_access_fallback_targets_button.clicked.connect( + self.select_terminal_access_fallback_targets + ) + self.select_terminal_access_endpoint_avoidance_button.clicked.connect( + self.select_terminal_access_endpoint_device_avoidance + ) + self.select_unconnected_terminal_access_button.clicked.connect( + self.select_unconnected_terminal_access_issues + ) + self.select_terminal_exit_issue_terminals_button.clicked.connect( + self.select_terminal_exit_issue_terminals + ) self.select_issue_wires_button.clicked.connect(self.select_issue_wires) self.select_issue_route_sources_button.clicked.connect(self.select_issue_route_sources) self.select_selected_wire_route_sources_button.clicked.connect(self.select_selected_wire_route_sources) @@ -2812,6 +3761,13 @@ class AutoRoutingTaskPanel: self.controller.set_lane_axis(self.lane_axis_combo.currentText()) self.controller.set_selected_route_capacity(self.selected_route_capacity_spin.value()) self.controller.set_user_path_sketch_offset(self.user_path_sketch_offset_spin.value()) + self.controller.set_auto_create_diagnostic_bridges(self.auto_create_diagnostic_bridges_check.isChecked()) + self.controller.set_auto_create_main_path_detour_bridges( + self.auto_create_main_path_detour_bridges_check.isChecked() + ) + self.controller.set_auto_create_terminal_access_fallback_bridges( + self.auto_create_terminal_access_fallback_bridges_check.isChecked() + ) def generate_routing_paths(self): try: @@ -2979,6 +3935,31 @@ class AutoRoutingTaskPanel: except Exception as exc: self._set_error(str(exc)) + def set_selected_terminal_exit_direction(self): + try: + result = self.controller.set_selected_terminal_exit_direction() + count = result.get("terminal_exit_directions", 0) + labels = list(result.get("terminal_exit_direction_labels", []) or []) + display = labels[0] if labels else "" + direction = result.get("terminal_exit_direction", {}) or {} + if count <= 0: + self._set_status( + "未设置端子出线方向。请同时选中一个可布线端子和一条草图/Draft 方向线。" + + self.controller.summary() + ) + return + self._set_status( + "已设置端子出线方向:{0} -> ({1:.3f}, {2:.3f}, {3:.3f})。重新生成布线路径网络后生效。{4}".format( + display or "选中端子", + float(direction.get("x", 0.0) or 0.0), + float(direction.get("y", 0.0) or 0.0), + float(direction.get("z", 0.0) or 0.0), + self.controller.summary(), + ) + ) + except Exception as exc: + self._set_error(str(exc)) + def create_user_path_bridge_from_selection(self): try: self._sync_options_from_widgets() @@ -3008,6 +3989,10 @@ class AutoRoutingTaskPanel: detour_created = result.get("main_path_detour_user_path_bridges", 0) detour_duplicates = result.get("main_path_detour_bridge_duplicates", 0) missing_detour_pairs = list(result.get("missing_main_path_detour_bridge_pairs", []) or []) + terminal_fallback_targets = result.get("terminal_access_fallback_bridge_targets", 0) + terminal_fallback_created = result.get("terminal_access_fallback_user_path_bridges", 0) + terminal_fallback_duplicates = result.get("terminal_access_fallback_bridge_duplicates", 0) + missing_terminal_fallback_refs = list(result.get("missing_terminal_access_fallback_bridge_refs", []) or []) if created <= 0: detour_text = "" if detour_pairs: @@ -3015,15 +4000,26 @@ class AutoRoutingTaskPanel: int(detour_pairs or 0), int(detour_duplicates or 0), ) + terminal_fallback_text = "" + if terminal_fallback_targets: + terminal_fallback_text = " 端子退回目标 {0} 个,已存在 {1} 条。".format( + int(terminal_fallback_targets or 0), + int(terminal_fallback_duplicates or 0), + ) missing_text = "" if missing_detour_pairs: missing_text = " 未找到配对:{0}。".format("、".join(missing_detour_pairs[:3])) + if missing_terminal_fallback_refs: + missing_text += " 未找到端子退回目标:{0}。".format( + "、".join(missing_terminal_fallback_refs[:3]) + ) self._set_status( - "未按诊断建议生成桥接。建议 {0} 条,已存在 {1} 条,失效 {2} 条。{3}{4}请先点击“检查布线路径网络”或“汇总布线诊断”确认是否存在可桥接建议。{5}".format( + "未按诊断建议生成桥接。建议 {0} 条,已存在 {1} 条,失效 {2} 条。{3}{4}{5}请先点击“检查布线路径网络”或“汇总布线诊断”确认是否存在可桥接建议。{6}".format( suggestions, duplicates, stale, detour_text, + terminal_fallback_text, missing_text, self.controller.summary(), ) @@ -3035,13 +4031,20 @@ class AutoRoutingTaskPanel: int(detour_pairs or 0), int(detour_created or 0), ) + terminal_fallback_text = "" + if terminal_fallback_targets or terminal_fallback_created: + terminal_fallback_text = " 端子退回目标 {0} 个,生成 {1} 条。".format( + int(terminal_fallback_targets or 0), + int(terminal_fallback_created or 0), + ) self._set_status( - "已按诊断建议生成桥接 UserPath:{0} 条。建议 {1} 条,已存在 {2} 条,失效 {3} 条。{4}{5}".format( + "已按诊断建议生成桥接 UserPath:{0} 条。建议 {1} 条,已存在 {2} 条,失效 {3} 条。{4}{5}请重新生成布线路径网络/布线连接验证效果。{6}".format( created, suggestions, duplicates, stale, detour_text, + terminal_fallback_text, self.controller.summary(), ) ) @@ -3086,6 +4089,25 @@ class AutoRoutingTaskPanel: except Exception as exc: self._set_error(str(exc)) + def select_wire_outside_boundary_wires(self): + try: + result = self.controller.select_wire_outside_boundary_wires() + selected = result.get("selected_wire_outside_boundary_wires", 0) + missing = list(result.get("missing_wire_outside_boundary_refs", []) or []) + if selected <= 0: + self._set_status( + "未选择越界导线。请先生成布线连接,并确认批量诊断中存在“导线越出柜内区域”。" + + self.controller.summary() + ) + return + message = _format_wire_outside_boundary_selection_status(result) + if missing: + message += " 未找到:{0}。".format("、".join(missing[:5])) + message += "请检查这些导线附近是否缺少柜内 UserPath/线槽,或柜内边界是否标记过小。" + self._set_status(message + self.controller.summary()) + except Exception as exc: + self._set_error(str(exc)) + def mark_selected_objects_pass_through_obstacle(self): self._mark_selected_objects_obstacle_mode("PassThrough", "忽略碰撞") @@ -3324,6 +4346,112 @@ class AutoRoutingTaskPanel: except Exception as exc: self._set_error(str(exc)) + def select_terminal_access_fallback_targets(self): + try: + result = self.controller.select_terminal_access_fallback_targets() + wires = result.get("selected_terminal_access_fallback_wires", 0) + targets = result.get("selected_terminal_access_fallback_targets", 0) + missing = list(result.get("missing_terminal_access_fallback_refs", []) or []) + target_names = list(result.get("selected_terminal_access_fallback_target_names", []) or []) + if wires <= 0 and targets <= 0: + self._set_status( + "未选择端子退回位置。请先检查布线路径网络或生成布线连接,确认存在 terminal_access_fallback_targets。" + + self.controller.summary() + ) + return + message = _format_terminal_access_fallback_selection_status(result) + if target_names: + message += " 目标:{0}。".format("、".join(str(name) for name in target_names[:5])) + if missing: + message += " 未找到:{0}。".format("、".join(str(item) for item in missing[:5])) + message += "请优先在这些端子附近补 UserPath、线槽接入桥或设备局部出线路径。" + self._set_status(message + self.controller.summary()) + except Exception as exc: + self._set_error(str(exc)) + + def select_terminal_access_endpoint_device_avoidance(self): + try: + result = self.controller.select_terminal_access_endpoint_device_avoidance() + terminals = result.get("selected_terminal_access_endpoint_avoidance_terminals", 0) + devices = result.get("selected_terminal_access_endpoint_avoidance_devices", 0) + targets = result.get("selected_terminal_access_endpoint_avoidance_targets", 0) + access_carriers = result.get("selected_terminal_access_endpoint_avoidance_access_carriers", 0) + missing = list(result.get("missing_terminal_access_endpoint_avoidance_refs", []) or []) + if terminals <= 0 and devices <= 0 and targets <= 0 and access_carriers <= 0: + self._set_status( + "未选择端点避让接入对象。请先检查布线路径网络,确认存在 terminal_access_endpoint_device_avoidance。" + + self.controller.summary() + ) + return + message = "已选择端点避让接入:端子 {0} 个,设备 {1} 个,目标路径 {2} 个,接入段 {3} 条。".format( + terminals, + devices, + targets, + access_carriers, + ) + if missing: + message += " 未找到:{0}。".format("、".join(str(item) for item in missing[:5])) + message += "请检查端子局部出线是否贴设备、接入段是否绕回设备包围盒,以及目标主路径入口是否合理。" + self._set_status(message + self.controller.summary()) + except Exception as exc: + self._set_error(str(exc)) + + def select_unconnected_terminal_access_issues(self): + try: + result = self.controller.select_unconnected_terminal_access_issues() + terminals = result.get("selected_unconnected_terminal_access_terminals", 0) + devices = result.get("selected_unconnected_terminal_access_devices", 0) + max_distance = float(result.get("max_unconnected_terminal_access_distance_mm", 0.0) or 0.0) + missing = list(result.get("missing_unconnected_terminal_access_refs", []) or []) + if terminals <= 0 and devices <= 0: + self._set_status( + "未选择未接入端子。请先检查布线路径网络,确认存在 unconnected_terminals。" + + self.controller.summary() + ) + return + message = "已选择未接入端子:端子 {0} 个,设备 {1} 个;最大最近网络距离 {2:.1f} mm。".format( + terminals, + devices, + max_distance, + ) + if missing: + message += " 未找到:{0}。".format("、".join(str(item) for item in missing[:5])) + message += "请检查设备是否已装配、附近是否缺 UserPath/线槽入口,或端子接入最大距离是否过小。" + self._set_status(message + self.controller.summary()) + except Exception as exc: + self._set_error(str(exc)) + + def select_terminal_exit_issue_terminals(self): + try: + result = self.controller.select_terminal_exit_issue_terminals() + terminals = result.get("selected_terminal_exit_issue_terminals", 0) + devices = result.get("selected_terminal_exit_issue_devices", 0) + corrected = result.get("selected_terminal_exit_corrected_terminals", 0) + capped = result.get("selected_terminal_exit_capped_terminals", 0) + invalid_direction = result.get("selected_terminal_exit_invalid_direction_terminals", 0) + invalid_local_route = result.get("selected_terminal_exit_invalid_local_route_terminals", 0) + missing = list(result.get("missing_terminal_exit_issue_refs", []) or []) + if terminals <= 0 and devices <= 0: + self._set_status( + "未选择出线问题端子。请先检查布线路径网络,确认存在 corrected_terminal_exits、capped_terminal_exits、invalid_terminal_exit_directions 或 invalid_terminal_local_routes。" + + self.controller.summary() + ) + return + message = "已选择出线问题端子:端子 {0} 个,设备 {1} 个;方向校正 {2} 个,长度截断 {3} 个,显式方向无效 {4} 个,局部路径无效 {5} 个。".format( + terminals, + devices, + corrected, + capped, + invalid_direction, + invalid_local_route, + ) + if missing: + message += " 未找到:{0}。".format("、".join(str(item) for item in missing[:5])) + message += "请优先检查设备模板端子 LCS、显式出线方向和局部出线路径元数据。" + self._set_status(message + self.controller.summary()) + except Exception as exc: + self._set_error(str(exc)) + def select_issue_wires(self): try: result = self.controller.select_issue_wires() @@ -3686,7 +4814,7 @@ class AutoRoutingTaskPanel: try: self._sync_options_from_widgets() report = self.controller.route_eplan_connections() - self._set_status(AutoRouting.format_eplan_connection_route_report(report)) + self._set_status(_format_route_panel_status(report)) except Exception as exc: self._set_error(str(exc)) diff --git a/src/Mod/FreeCADExchange/CMakeLists.txt b/src/Mod/FreeCADExchange/CMakeLists.txt index 62207d8..34538df 100644 --- a/src/Mod/FreeCADExchange/CMakeLists.txt +++ b/src/Mod/FreeCADExchange/CMakeLists.txt @@ -5,6 +5,7 @@ set(FreeCADExchange_Scripts ExchangeBootstrap.py DeviceImport.py DevicePreview.py + PendingDeviceAssemblyPanel.py TerminalObjects.py TemplateSemantics.py TemplateAuthoring.py diff --git a/src/Mod/FreeCADExchange/DeviceImport.py b/src/Mod/FreeCADExchange/DeviceImport.py index a0e4643..94e2614 100644 --- a/src/Mod/FreeCADExchange/DeviceImport.py +++ b/src/Mod/FreeCADExchange/DeviceImport.py @@ -1,6 +1,7 @@ import os from pathlib import Path import uuid +import json from datetime import datetime import FreeCAD as App @@ -28,6 +29,8 @@ TERMINAL_GROUP_PREFIX = "QETTerminals_" WIRE_GROUP_PREFIX = "QETWires_" GROUP_KIND_TERMINALS = "Terminals" GROUP_KIND_WIRES = "Wires" +ASSEMBLY_STATE_PENDING = "Pending" +ASSEMBLY_STATE_PLACED = "Placed" class DeviceImportError(RuntimeError): @@ -525,18 +528,12 @@ def _device_report_label(display_tag, instance_id, element_uuid=""): def _payload_device_instance_id(device): if not isinstance(device, dict): return "" - return ( - (device.get("device_instance_id") or "").strip() - or (device.get("instance_id") or "").strip() - ) + return (device.get("device_instance_id") or "").strip() def _payload_device_element_uuid(device): if not isinstance(device, dict): return "" - element_uuid = (device.get("element_uuid") or "").strip() - if element_uuid: - return element_uuid for terminal in device.get("terminals", []) or []: if not isinstance(terminal, dict): continue @@ -653,6 +650,16 @@ def _update_device_group_metadata(device_group, root_group, element_uuid, instan ) +def _set_device_assembly_state(device_group, state): + _ensure_string_property( + device_group, + "QetAssemblyState", + "QET Assembly", + "Assembly state in the FreeCAD scene.", + state, + ) + + def _ensure_device_group(doc, root_group, element_uuid, instance_id, model_path, display_tag, layout_index): created_now = False device_group = _find_device_group_by_instance_id(doc, instance_id) @@ -725,6 +732,282 @@ def _ensure_device_group(doc, root_group, element_uuid, instance_id, model_path, return device_group, created_now +def _register_pending_device(report, device_group, display_tag, instance_id, element_uuid, resolved_model_path): + _set_device_assembly_state(device_group, ASSEMBLY_STATE_PENDING) + report.setdefault("pending_devices", 0) + report.setdefault("pending_device_details", []) + report["pending_devices"] += 1 + report["pending_device_details"].append( + _device_change_detail( + display_tag, + instance_id, + element_uuid=element_uuid, + change_types=["待装配"], + resolved_model_path=resolved_model_path, + ) + ) + + +def _looks_like_qet_device_group(obj): + if obj is None: + return False + if not getattr(obj, "Name", "").startswith(DEVICE_GROUP_PREFIX): + return False + return bool((getattr(obj, "QetInstanceId", "") or "").strip()) + + +def _find_device_group_from_object(obj): + if _looks_like_qet_device_group(obj): + return obj + pending = list(getattr(obj, "InList", []) or []) + seen = set() + while pending: + parent = pending.pop(0) + parent_name = getattr(parent, "Name", "") + if parent_name in seen: + continue + seen.add(parent_name) + if _looks_like_qet_device_group(parent): + return parent + pending.extend(list(getattr(parent, "InList", []) or [])) + return None + + +def list_pending_devices(doc): + if doc is None: + return [] + root = doc.getObject(ROOT_GROUP_NAME) + if root is None: + return [] + + pending_devices = [] + for child in list(getattr(root, "Group", []) or []): + if not _looks_like_qet_device_group(child): + continue + if (getattr(child, "QetAssemblyState", "") or "").strip() != ASSEMBLY_STATE_PENDING: + continue + pending_devices.append( + { + "device": child, + "instance_id": (getattr(child, "QetInstanceId", "") or "").strip(), + "element_uuid": (getattr(child, "QetElementUuid", "") or "").strip(), + "display_tag": (getattr(child, "QetDisplayTag", "") or "").strip(), + "label": getattr(child, "Label", "") or getattr(child, "Name", ""), + "resolved_model_path": ( + getattr(child, "QetResolvedModelPath", "") or "" + ).strip(), + } + ) + return pending_devices + + +def _target_mount_kind(target_obj): + if target_obj is None: + return "" + kind = (getattr(target_obj, "QetCarrierKind", "") or "").strip() + if kind: + return kind + text = " ".join( + [ + getattr(target_obj, "Label", "") or "", + getattr(target_obj, "Name", "") or "", + getattr(target_obj, "TypeId", "") or "", + ] + ).lower() + if "rail" in text or "din" in text or "导轨" in text: + return "rail" + if "wireduct" in text or "wire_duct" in text or "线槽" in text: + return "wire_duct" + if "plate" in text or "panel" in text or "安装板" in text or "面板" in text: + return "mounting_plate" + if "cabinet" in text or "柜" in text: + return "cabinet" + return "" + + +def _placement_for_mount_target(mount_target, fallback_rotation=None): + placement = getattr(mount_target, "Placement", None) + base = getattr(placement, "Base", None) + if placement is None or base is None: + return None + rotation = getattr(placement, "Rotation", None) or fallback_rotation or App.Rotation() + return App.Placement(base, rotation) + + +def _vector_payload(vector): + return { + "x": float(getattr(vector, "x", 0.0) or 0.0), + "y": float(getattr(vector, "y", 0.0) or 0.0), + "z": float(getattr(vector, "z", 0.0) or 0.0), + } + + +def _normalized_vector(vector): + if vector is None: + return None + x = float(getattr(vector, "x", 0.0) or 0.0) + y = float(getattr(vector, "y", 0.0) or 0.0) + z = float(getattr(vector, "z", 0.0) or 0.0) + length = (x * x + y * y + z * z) ** 0.5 + if length <= 1e-9: + return None + return App.Vector(x / length, y / length, z / length) + + +def _placement_with_normal_offset(placement, normal=None, offset_mm=0.0): + if placement is None: + return None + normal = _normalized_vector(normal) + if normal is None or not float(offset_mm or 0.0): + return placement + base = getattr(placement, "Base", None) + if base is None: + return placement + offset = float(offset_mm or 0.0) + moved_base = App.Vector( + float(getattr(base, "x", 0.0) or 0.0) + normal.x * offset, + float(getattr(base, "y", 0.0) or 0.0) + normal.y * offset, + float(getattr(base, "z", 0.0) or 0.0) + normal.z * offset, + ) + return App.Placement(moved_base, getattr(placement, "Rotation", App.Rotation())) + + +def _set_device_mount_metadata(device_group, mount_target, normal=None, offset_mm=0.0): + if device_group is None or mount_target is None: + return + target_name = getattr(mount_target, "Name", "") or "" + target_label = getattr(mount_target, "Label", "") or target_name + _ensure_string_property( + device_group, + "QetMountMode", + "QET Mount", + "How this QET device was mounted in the FreeCAD scene.", + "manual_insert", + ) + _ensure_string_property( + device_group, + "QetMountHostName", + "QET Mount", + "Mount target object name.", + target_name, + ) + _ensure_string_property( + device_group, + "QetMountHostLabel", + "QET Mount", + "Mount target object label.", + target_label, + ) + _ensure_string_property( + device_group, + "QetMountHostKind", + "QET Mount", + "Mount target kind.", + _target_mount_kind(mount_target), + ) + normal = _normalized_vector(normal) + if normal is not None: + _ensure_string_property( + device_group, + "QetMountHostNormalJson", + "QET Mount", + "Mount target face normal at insert time.", + json.dumps(_vector_payload(normal), sort_keys=True), + ) + _ensure_string_property( + device_group, + "QetMountOffsetMm", + "QET Mount", + "Mount offset in target normal direction.", + "{0:.6f}".format(float(offset_mm or 0.0)), + ) + + +def insert_pending_device( + doc, + device_group, + source_doc_cache=None, + mount_target=None, + mount_placement=None, + mount_normal=None, + mount_offset_mm=0.0, +): + if doc is None: + raise DeviceImportError("A FreeCAD document is required.") + device_group = _find_device_group_from_object(device_group) + if device_group is None: + raise DeviceImportError("请选择一个待装配 QET 设备。") + + model_path = _native_path(getattr(device_group, "QetResolvedModelPath", "")) + if not model_path: + raise DeviceImportError("待装配设备缺少模型路径。") + if not os.path.isfile(model_path): + raise DeviceImportError("待装配设备模型文件不存在:{0}".format(model_path)) + if not _supported_for_import(model_path): + raise DeviceImportError("待装配设备模型格式暂不支持:{0}".format(model_path)) + + existing_model_objects = _existing_model_objects(doc, device_group) + if existing_model_objects: + _set_device_assembly_state(device_group, ASSEMBLY_STATE_PLACED) + target_placement = mount_placement or _placement_for_mount_target( + mount_target, + getattr(getattr(device_group, "Placement", None), "Rotation", None), + ) + target_placement = _placement_with_normal_offset( + target_placement, + mount_normal, + mount_offset_mm, + ) + if target_placement is not None: + device_group.Placement = target_placement + _set_device_mount_metadata( + device_group, + mount_target, + normal=mount_normal, + offset_mm=mount_offset_mm, + ) + return { + "device": device_group, + "imported_objects": existing_model_objects, + "already_placed": True, + } + + _clear_group_contents(doc, device_group) + imported_objects = _import_model_into_group( + doc, + device_group, + model_path, + source_doc_cache=source_doc_cache if source_doc_cache is not None else {}, + ) + target_placement = mount_placement or _placement_for_mount_target( + mount_target, + getattr(getattr(device_group, "Placement", None), "Rotation", None), + ) + target_placement = _placement_with_normal_offset( + target_placement, + mount_normal, + mount_offset_mm, + ) + if target_placement is not None: + device_group.Placement = target_placement + _set_device_mount_metadata( + device_group, + mount_target, + normal=mount_normal, + offset_mm=mount_offset_mm, + ) + _set_device_assembly_state(device_group, ASSEMBLY_STATE_PLACED) + try: + doc.recompute() + except Exception: + pass + return { + "device": device_group, + "imported_objects": list(imported_objects or []), + "already_placed": False, + } + + def _remove_object_tree(doc, obj): if obj is None: return @@ -1208,15 +1491,9 @@ def _close_cached_source_documents(source_doc_cache, target_doc=None): def _model_index(payload): index = {} for item in payload.get("device_models", []): - instance_id = ( - (item.get("device_instance_id") or "").strip() - or (item.get("instance_id") or "").strip() - ) - element_uuid = (item.get("element_uuid") or "").strip() + instance_id = (item.get("device_instance_id") or "").strip() if instance_id and instance_id not in index: index[instance_id] = item - if element_uuid and element_uuid not in index: - index[element_uuid] = item return index @@ -1313,7 +1590,7 @@ def _import_cabinet_model(doc, root_group, cabinet, report, source_doc_cache=Non ) -def import_devices_from_payload(payload, scene_path=""): +def import_devices_from_payload(payload, scene_path="", auto_insert_pending_devices=False): _append_debug_log("DeviceImport.import_devices_from_payload entered") doc = _ensure_document(scene_path) cabinet = payload.get("cabinet") @@ -1345,6 +1622,8 @@ def import_devices_from_payload(payload, scene_path=""): "cabinet_skipped_missing_file": 0, "cabinet_skipped_unsupported_format": 0, "cabinet_skipped_import_error": 0, + "pending_devices": 0, + "pending_device_details": [], "warnings": [], } @@ -1390,8 +1669,6 @@ def import_devices_from_payload(payload, scene_path=""): doc, existing_device_group ) model_info = models_by_element.get(instance_id, {}) - if not model_info and element_uuid: - model_info = models_by_element.get(element_uuid, {}) resolved_model_path = _native_path(model_info.get("resolved_model_path", "")) _append_debug_log( "DeviceImport device instance_id={0}, display_tag={1}, resolved_model_path={2}".format( @@ -1490,7 +1767,25 @@ def import_devices_from_payload(payload, scene_path=""): not created_now and (not existing_model_objects or not same_source) ) + if not auto_insert_pending_devices and not existing_model_objects: + _register_pending_device( + report, + device_group, + display_tag, + instance_id, + element_uuid, + resolved_model_path, + ) + _append_debug_log( + "DeviceImport registered pending device without importing model: instance_id={0}, model_path={1}".format( + instance_id, + resolved_model_path, + ) + ) + continue + if existing_model_objects and same_source: + _set_device_assembly_state(device_group, ASSEMBLY_STATE_PLACED) if display_tag_changed or terminals_changed: change_types = [] if display_tag_changed: @@ -1562,6 +1857,7 @@ def import_devices_from_payload(payload, scene_path=""): ) if existing_model_objects: _remove_model_objects(doc, existing_model_objects) + _set_device_assembly_state(device_group, ASSEMBLY_STATE_PLACED) except Exception as exc: if existing_model_objects: _ensure_string_property( @@ -1643,3 +1939,66 @@ def import_devices_from_payload(payload, scene_path=""): ) ) return report + + +class CommandInsertPendingDevice: + def GetResources(self): + return { + "MenuText": "插入待装配设备", + "ToolTip": "将选中的 QET 待装配设备模型插入当前 3D 场景", + } + + def IsActive(self): + return getattr(App, "ActiveDocument", None) is not None and Gui is not None + + def Activated(self): + if Gui is None: + return + selection = list(Gui.Selection.getSelection() or []) + device_group = None + for obj in selection: + device_group = _find_device_group_from_object(obj) + if device_group is not None: + break + if device_group is None: + try: + App.Console.PrintWarning("[FreeCADExchange] 请先选择一个待装配 QET 设备。\n") + except Exception: + pass + return + try: + result = insert_pending_device(App.ActiveDocument, device_group) + try: + App.Console.PrintMessage( + "[FreeCADExchange] 已插入设备:{0},导入对象 {1} 个。\n".format( + getattr(result["device"], "Label", ""), + len(result.get("imported_objects", []) or []), + ) + ) + except Exception: + pass + try: + Gui.SendMsgToActiveView("ViewFit") + except Exception: + pass + except Exception as exc: + try: + App.Console.PrintError("[FreeCADExchange] 插入待装配设备失败:{0}\n".format(exc)) + except Exception: + pass + + +_COMMANDS_REGISTERED = False + + +def register_commands(): + global _COMMANDS_REGISTERED + if _COMMANDS_REGISTERED: + return + if Gui is None or not hasattr(Gui, "addCommand"): + return + try: + Gui.addCommand("QET_Exchange_InsertPendingDevice", CommandInsertPendingDevice()) + _COMMANDS_REGISTERED = True + except Exception as exc: + _append_debug_log("failed to register pending device command: {0}".format(exc)) diff --git a/src/Mod/FreeCADExchange/ExchangeBootstrap.py b/src/Mod/FreeCADExchange/ExchangeBootstrap.py index 4a89645..3140582 100644 --- a/src/Mod/FreeCADExchange/ExchangeBootstrap.py +++ b/src/Mod/FreeCADExchange/ExchangeBootstrap.py @@ -567,7 +567,7 @@ def _normalize_devices(payload): normalized_terminals.append( { "terminal_uuid": terminal_uuid, - "instance_id": device_instance_id, + "device_instance_id": device_instance_id, "element_uuid": terminal_element_uuid, "terminal_display": _optional_string( terminal_item, "terminal_display", terminal_entry_label @@ -591,7 +591,7 @@ def _normalize_devices(payload): { "element_uuid": element_uuid, "element_uuids": list(device_element_uuids), - "instance_id": device_instance_id, + "device_instance_id": device_instance_id, "display_tag": display_tag.strip() if isinstance(display_tag, str) else "", "terminals": normalized_terminals, } @@ -604,8 +604,8 @@ def _normalize_terminals(devices): for device in devices: for terminal in device.get("terminals", []) or []: entry = dict(terminal) - if not entry.get("instance_id"): - entry["instance_id"] = device.get("instance_id", "") + if not entry.get("device_instance_id"): + entry["device_instance_id"] = device.get("device_instance_id", "") normalized.append(entry) return normalized @@ -618,23 +618,6 @@ def _normalize_top_level_terminals(payload): return [] -def _merge_terminal_entries(*terminal_groups): - merged = [] - seen = set() - for terminal_group in terminal_groups: - for item in terminal_group: - key = ( - item.get("terminal_uuid", ""), - item.get("element_uuid", ""), - item.get("instance_id", ""), - ) - if key in seen: - continue - seen.add(key) - merged.append(item) - return merged - - def _optional_string(item, field_name, entry_label): value = item.get(field_name, "") if value is None: @@ -710,10 +693,8 @@ def _normalize_wires(payload): "wire_mark_is_manual": wire_mark_is_manual, "wire_style_id": _optional_text(item, "wire_style_id"), "start_element_uuid": _optional_string(item, "start_element_uuid", entry_label), - "start_instance_id": _optional_string(item, "start_instance_id", entry_label), "start_terminal_uuid": _optional_string(item, "start_terminal_uuid", entry_label), "end_element_uuid": _optional_string(item, "end_element_uuid", entry_label), - "end_instance_id": _optional_string(item, "end_instance_id", entry_label), "end_terminal_uuid": _optional_string(item, "end_terminal_uuid", entry_label), "start_terminal_display": _optional_string(item, "start_terminal_display", entry_label), "end_terminal_display": _optional_string(item, "end_terminal_display", entry_label), @@ -747,7 +728,6 @@ def _normalize_device_models(payload): entry_label ) ) - element_uuid = "" instance_id = _require_string(item, "device_instance_id") parts_3d = item.get("parts_3d", "") if parts_3d and not isinstance(parts_3d, str): @@ -774,8 +754,7 @@ def _normalize_device_models(payload): normalized.append( { - "element_uuid": element_uuid, - "instance_id": instance_id, + "device_instance_id": instance_id, "device_id": device_id, "parts_3d": parts_3d.strip() if isinstance(parts_3d, str) else "", "resolved_model_path": ( @@ -906,16 +885,17 @@ def load_exchange_payload(json_path): raise ExchangeValidationError("Exchange JSON root must be an object.") project_uuid = _require_string(payload, "project_uuid") - schema_version = payload.get("schema_version", "1.0") + schema_version = payload.get("schema_version", "") if not isinstance(schema_version, str) or not schema_version.strip(): raise ExchangeValidationError("Field 'schema_version' must be a string.") + if schema_version.strip() != "2.0": + raise ExchangeValidationError( + "Field 'schema_version' must be '2.0' for the 2D/3D exchange v2 protocol." + ) normalized_devices = _normalize_devices(payload) - normalized_terminals = _merge_terminal_entries( - _normalize_terminals(normalized_devices), - _normalize_top_level_terminals(payload), - ) + _normalize_top_level_terminals(payload) normalized = { "schema_version": schema_version.strip(), @@ -924,7 +904,6 @@ def load_exchange_payload(json_path): "source": payload.get("source", {}), "cabinet": _normalize_cabinet(payload), "devices": normalized_devices, - "terminals": normalized_terminals, "device_models": _normalize_device_models(payload), "wires": _normalize_wires(payload), } @@ -936,13 +915,13 @@ def load_exchange_payload(json_path): def _build_summary(payload, json_path): devices = payload["devices"] - terminals = payload["terminals"] + terminals = _normalize_terminals(devices) device_models = payload["device_models"] wires = payload.get("wires", []) cabinet = payload.get("cabinet") - missing_device_instances = sum(1 for item in devices if not item["instance_id"]) + missing_device_instances = sum(1 for item in devices if not item["device_instance_id"]) missing_terminal_instances = sum( - 1 for item in terminals if not item["instance_id"] + 1 for item in terminals if not item["device_instance_id"] ) with_model_paths = sum( 1 for item in device_models if item["resolved_model_path"] or item["parts_3d"] @@ -1073,8 +1052,8 @@ def _mark_stale_objects(payload): # Log each payload device element_uuid for comparison for item in (payload.get("devices", []) or [])[:10]: _append_debug_log( - " payload device: element_uuid={0}, instance_id={1}".format( - item.get("element_uuid", ""), item.get("instance_id", "") + " payload device: element_uuid={0}, device_instance_id={1}".format( + item.get("element_uuid", ""), item.get("device_instance_id", "") ) ) diff --git a/src/Mod/FreeCADExchange/InitGui.py b/src/Mod/FreeCADExchange/InitGui.py index 0173a0b..d2ced15 100644 --- a/src/Mod/FreeCADExchange/InitGui.py +++ b/src/Mod/FreeCADExchange/InitGui.py @@ -12,6 +12,8 @@ COMMANDS = [ "QET_Template_AddTerminal", "QET_Template_ValidateTerminals", "QET_Template_SaveAsFCStd", + "QET_Exchange_OpenPendingDevicePanel", + "QET_Exchange_InsertPendingDevice", "QET_Template_ImportInstance", "QET_Template_CreateEngineeringTerminals", "QET_Exchange_CreateManualWire", @@ -72,6 +74,8 @@ def _register_exchange_commands( auto_routing_panel = safe_import("AutoRoutingPanel") manual_wiring = safe_import("ManualWiring") manual_wiring_panel = safe_import("ManualWiringPanel") + device_import = safe_import("DeviceImport") + pending_device_panel = safe_import("PendingDeviceAssemblyPanel") stale_object_actions = safe_import("StaleObjectActions") template_authoring = safe_import("TemplateAuthoring") template_authoring_panel = safe_import("TemplateAuthoringPanel") @@ -117,6 +121,26 @@ def _register_exchange_commands( ) ) + try: + if pending_device_panel is not None: + pending_device_panel.register_commands() + except Exception: + append_init_log( + "InitGui failed to register pending device panel command:\n{0}".format( + traceback_module.format_exc() + ) + ) + + try: + if device_import is not None: + device_import.register_commands() + except Exception: + append_init_log( + "InitGui failed to register pending device command:\n{0}".format( + traceback_module.format_exc() + ) + ) + try: if manual_wiring is not None: manual_wiring.register_commands() diff --git a/src/Mod/FreeCADExchange/PendingDeviceAssemblyPanel.py b/src/Mod/FreeCADExchange/PendingDeviceAssemblyPanel.py new file mode 100644 index 0000000..f09a305 --- /dev/null +++ b/src/Mod/FreeCADExchange/PendingDeviceAssemblyPanel.py @@ -0,0 +1,309 @@ +# FreeCADExchange GUI panel for QET pending device assembly. + +from pathlib import Path + +import FreeCAD as App + +try: + import FreeCADGui as Gui +except ImportError: + Gui = None + +try: + from PySide6 import QtCore, QtWidgets +except ImportError: + try: + from PySide2 import QtCore, QtWidgets + except ImportError: + try: + from PySide import QtCore + from PySide import QtGui as QtWidgets + except ImportError: + QtCore = None + QtWidgets = None + +import DeviceImport + + +COMMAND_NAME = "QET_Exchange_OpenPendingDevicePanel" + + +class PendingDeviceAssemblyPanelError(RuntimeError): + pass + + +def pending_device_rows(doc): + rows = [] + for item in DeviceImport.list_pending_devices(doc): + model_path = (item.get("resolved_model_path", "") or "").strip() + model_name = Path(model_path).name if model_path else "未绑定模型" + display_tag = (item.get("display_tag", "") or "").strip() + label = display_tag or (item.get("label", "") or "").strip() + instance_id = (item.get("instance_id", "") or "").strip() + title = label or instance_id or "未命名设备" + rows.append( + { + "device": item.get("device"), + "display_tag": display_tag, + "instance_id": instance_id, + "element_uuid": (item.get("element_uuid", "") or "").strip(), + "resolved_model_path": model_path, + "display_text": "{0} {1}".format(title, model_name), + } + ) + return rows + + +def _document(): + doc = getattr(App, "ActiveDocument", None) + if doc is None: + raise PendingDeviceAssemblyPanelError("请先打开 FreeCAD 工程。") + return doc + + +def _selected_objects(): + if Gui is None: + return [] + try: + return list(Gui.Selection.getSelection() or []) + except Exception: + return [] + + +def selected_mount_target(exclude_device=None): + excluded = DeviceImport._find_device_group_from_object(exclude_device) + for obj in _selected_objects(): + candidate_device = DeviceImport._find_device_group_from_object(obj) + if excluded is not None and candidate_device is excluded: + continue + return obj + return None + + +def _vector_from_tuple(value): + try: + if value is None: + return None + return App.Vector(value[0], value[1], value[2]) + except Exception: + return None + + +def _face_anchor_point(face): + if face is None: + return None + for attr_name in ("CenterOfMass", "Center"): + point = getattr(face, attr_name, None) + if point is not None: + return point + try: + return face.valueAt(0.0, 0.0) + except Exception: + return None + + +def _face_normal(face): + if face is None: + return None + for attr_name in ("normalAt", "NormalAt"): + normal_getter = getattr(face, attr_name, None) + if callable(normal_getter): + try: + return normal_getter(0.0, 0.0) + except Exception: + pass + return getattr(face, "Normal", None) + + +def selected_mount_context(exclude_device=None): + excluded = DeviceImport._find_device_group_from_object(exclude_device) + if Gui is not None: + try: + selection_ex = list(Gui.Selection.getSelectionEx() or []) + except Exception: + selection_ex = [] + for selected in selection_ex: + obj = getattr(selected, "Object", None) + candidate_device = DeviceImport._find_device_group_from_object(obj) + if excluded is not None and candidate_device is excluded: + continue + picked_points = list(getattr(selected, "PickedPoints", []) or []) + point = picked_points[0] if picked_points else None + if point is None: + for sub_object in list(getattr(selected, "SubObjects", []) or []): + if (getattr(sub_object, "ShapeType", "") or "").lower() == "face": + point = _face_anchor_point(sub_object) + normal = _face_normal(sub_object) + break + else: + normal = None + for sub_object in list(getattr(selected, "SubObjects", []) or []): + if (getattr(sub_object, "ShapeType", "") or "").lower() == "face": + normal = _face_normal(sub_object) + break + if point is not None: + rotation = getattr(getattr(obj, "Placement", None), "Rotation", None) + return { + "target": obj, + "placement": App.Placement(point, rotation or App.Rotation()), + "normal": normal, + } + if obj is not None: + return {"target": obj, "placement": None, "normal": None} + + target = selected_mount_target(exclude_device=exclude_device) + return {"target": target, "placement": None, "normal": None} + + +def _set_status(label, message, error=False): + try: + label.setText(message) + except Exception: + pass + try: + if error: + App.Console.PrintError("[FreeCADExchange] {0}\n".format(message)) + else: + App.Console.PrintMessage("[FreeCADExchange] {0}\n".format(message)) + except Exception: + pass + + +class PendingDeviceAssemblyTaskPanel: + def __init__(self): + if QtWidgets is None: + raise PendingDeviceAssemblyPanelError("Qt widgets are not available.") + + self.rows = [] + self.form = QtWidgets.QWidget() + self.form.setWindowTitle("QET待装配设备") + + layout = QtWidgets.QVBoxLayout(self.form) + self.device_list = QtWidgets.QListWidget() + layout.addWidget(self.device_list) + + self.refresh_button = QtWidgets.QPushButton("刷新清单") + self.insert_button = QtWidgets.QPushButton("插入设备") + self.insert_to_target_button = QtWidgets.QPushButton("插入到选中目标") + layout.addWidget(self.refresh_button) + layout.addWidget(self.insert_button) + + offset_row = QtWidgets.QHBoxLayout() + offset_row.addWidget(QtWidgets.QLabel("贴合间距")) + self.mount_offset_input = QtWidgets.QDoubleSpinBox() + self.mount_offset_input.setRange(-10000.0, 10000.0) + self.mount_offset_input.setDecimals(1) + self.mount_offset_input.setSingleStep(1.0) + self.mount_offset_input.setSuffix(" mm") + self.mount_offset_input.setValue(0.0) + offset_row.addWidget(self.mount_offset_input) + layout.addLayout(offset_row) + + layout.addWidget(self.insert_to_target_button) + + self.status_label = QtWidgets.QLabel("") + self.status_label.setWordWrap(True) + layout.addWidget(self.status_label) + + self.refresh_button.clicked.connect(self.refresh) + self.insert_button.clicked.connect(self.insert_selected_device) + self.insert_to_target_button.clicked.connect(self.insert_selected_device_to_target) + + self.refresh() + + def _selected_device(self): + item = self.device_list.currentItem() + if item is None: + raise PendingDeviceAssemblyPanelError("请先在清单中选择一个待装配设备。") + row_index = self.device_list.row(item) + if row_index < 0 or row_index >= len(self.rows): + raise PendingDeviceAssemblyPanelError("待装配设备清单已变化,请刷新后重试。") + device = self.rows[row_index].get("device") + if device is None: + raise PendingDeviceAssemblyPanelError("待装配设备无效,请刷新后重试。") + return device + + def refresh(self): + try: + self.rows = pending_device_rows(getattr(App, "ActiveDocument", None)) + self.device_list.clear() + for row in self.rows: + self.device_list.addItem(row["display_text"]) + if self.rows: + self.device_list.setCurrentRow(0) + _set_status(self.status_label, "待装配设备:{0} 个".format(len(self.rows))) + except Exception as exc: + _set_status(self.status_label, str(exc), error=True) + + def insert_selected_device(self): + try: + result = DeviceImport.insert_pending_device(_document(), self._selected_device()) + self.refresh() + _set_status( + self.status_label, + "已插入设备:{0}".format(getattr(result["device"], "Label", "") or getattr(result["device"], "Name", "")), + ) + except Exception as exc: + _set_status(self.status_label, str(exc), error=True) + + def insert_selected_device_to_target(self): + try: + device = self._selected_device() + context = selected_mount_context(exclude_device=device) + target = context.get("target") + if target is None: + raise PendingDeviceAssemblyPanelError("请先在 3D 视图中选择安装板、导轨、线槽或柜体安装面。") + result = DeviceImport.insert_pending_device( + _document(), + device, + mount_target=target, + mount_placement=context.get("placement"), + mount_normal=context.get("normal"), + mount_offset_mm=self.mount_offset_input.value(), + ) + self.refresh() + _set_status( + self.status_label, + "已插入设备到选中目标:{0}".format( + getattr(result["device"], "Label", "") or getattr(result["device"], "Name", "") + ), + ) + except Exception as exc: + _set_status(self.status_label, str(exc), error=True) + + def accept(self): + return True + + def reject(self): + return True + + +class CommandOpenPendingDevicePanel: + def GetResources(self): + return { + "MenuText": "待装配设备", + "ToolTip": "打开 QET 待装配设备清单,并将设备插入到当前 3D 场景", + } + + def IsActive(self): + return getattr(App, "ActiveDocument", None) is not None and Gui is not None + + def Activated(self): + if Gui is None or not hasattr(Gui, "Control"): + return + if hasattr(Gui.Control, "activeDialog") and Gui.Control.activeDialog(): + Gui.Control.closeDialog() + Gui.Control.showDialog(PendingDeviceAssemblyTaskPanel()) + + +_COMMANDS_REGISTERED = False + + +def register_commands(): + global _COMMANDS_REGISTERED + if _COMMANDS_REGISTERED: + return + if Gui is None or not hasattr(Gui, "addCommand"): + return + Gui.addCommand(COMMAND_NAME, CommandOpenPendingDevicePanel()) + _COMMANDS_REGISTERED = True diff --git a/src/Mod/FreeCADExchange/RoutingNetwork.py b/src/Mod/FreeCADExchange/RoutingNetwork.py index 126ab24..ea9c8a4 100644 --- a/src/Mod/FreeCADExchange/RoutingNetwork.py +++ b/src/Mod/FreeCADExchange/RoutingNetwork.py @@ -58,6 +58,7 @@ DEFAULT_TERMINAL_ACCESS_FALLBACK_ONLY_COMPONENT_PENALTY = 1000.0 DEFAULT_TERMINAL_ACCESS_FALLBACK_CARRIER_PENALTY = 5000.0 DEFAULT_TERMINAL_ACCESS_ENTRY_CANDIDATE_PENALTY = 2000.0 DEFAULT_TERMINAL_DEVICE_EXIT_CLEARANCE = 10.0 +DEFAULT_TERMINAL_EXIT_MAX_LENGTH = 80.0 DEFAULT_ADJOINING_DUCT_TOLERANCE = 5.0 DEFAULT_WIRING_CUT_OUT_BRIDGE_EXTENSION = 20.0 WIRE_DUCT_OBSTACLE_MODE = "PassThrough" @@ -1119,6 +1120,23 @@ def _segment_hits_blocked_bbox(start, end, blocked_bboxes): return False +def _bbox_payload(bbox, clearance=0.0): + if bbox is None: + return None + margin = max(float(clearance or 0.0), 0.0) + try: + return { + "xmin": float(bbox.XMin) - margin, + "xmax": float(bbox.XMax) + margin, + "ymin": float(bbox.YMin) - margin, + "ymax": float(bbox.YMax) + margin, + "zmin": float(bbox.ZMin) - margin, + "zmax": float(bbox.ZMax) + margin, + } + except Exception: + return None + + def collect_route_carriers(doc): if doc is None: return [] @@ -2304,8 +2322,8 @@ def _route_carriers_for_bridge_object(doc, source): return carriers -def create_user_path_bridge_between_objects(doc, left_source, right_source, project_uuid=""): - """Create a UserPath bridge between the nearest carriers of two selected source objects.""" +def nearest_route_bridge_candidate_between_objects(doc, left_source, right_source): + """Return the nearest bridge candidate between two route sources/carriers.""" left_carriers = _route_carriers_for_bridge_object(doc, left_source) right_carriers = _route_carriers_for_bridge_object(doc, right_source) best = None @@ -2319,12 +2337,33 @@ def create_user_path_bridge_between_objects(doc, left_source, right_source, proj if nearest is None: continue distance_mm, left_point, right_point = nearest - if best is None or float(distance_mm) < float(best[0]): - best = (distance_mm, left, right, left_point, right_point) + if best is None or float(distance_mm) < float(best["distance_mm"]): + best = { + "distance_mm": float(distance_mm), + "left_carrier": left, + "right_carrier": right, + "left_point": left_point, + "right_point": right_point, + } + return best + + +def create_user_path_bridge_between_objects( + doc, + left_source, + right_source, + project_uuid="", + bridge_kind="MainPathDetourBridge", +): + """Create a UserPath bridge between the nearest carriers of two selected source objects.""" + best = nearest_route_bridge_candidate_between_objects(doc, left_source, right_source) if best is None: return [] - distance_mm, left, right, left_point, right_point = best + left = best["left_carrier"] + right = best["right_carrier"] + left_point = best["left_point"] + right_point = best["right_point"] if _distance(left_point, right_point) <= DEFAULT_NODE_TOLERANCE: return [] if _route_bridge_already_exists(doc, left_point, right_point): @@ -2363,7 +2402,7 @@ def create_user_path_bridge_between_objects(doc, left_source, right_source, proj "QetRouteBridgeKind", PROPERTY_GROUP, "QET route bridge kind", - "MainPathDetourBridge", + str(bridge_kind or "MainPathDetourBridge"), ) TerminalObjects.ensure_string_property( bridge, @@ -3463,6 +3502,93 @@ def _terminal_local_route_issue(terminal): return payload +def _terminal_exit_direction_issue(terminal): + invalid_samples = [] + saw_raw = False + for property_name in ("QetTerminalExitDirectionJson", "QetExitDirectionJson"): + raw = (getattr(terminal, property_name, "") or "").strip() + if not raw: + continue + saw_raw = True + parsed = None + try: + parsed = json.loads(raw) + except Exception as exc: + parts = [part.strip() for part in raw.replace(";", ",").split(",")] + if len(parts) < 3: + invalid_samples.append( + { + "property_name": property_name, + "reason": "invalid_json", + "message": str(exc), + "raw_sample": raw[:160], + } + ) + continue + parsed = parts[:3] + + direction = None + if isinstance(parsed, dict): + try: + direction = App.Vector( + float(parsed.get("x", 0.0) or 0.0), + float(parsed.get("y", 0.0) or 0.0), + float(parsed.get("z", 0.0) or 0.0), + ) + except Exception as exc: + invalid_samples.append( + { + "property_name": property_name, + "reason": "invalid_vector", + "message": str(exc), + "raw_sample": raw[:160], + } + ) + continue + elif isinstance(parsed, (list, tuple)) and len(parsed) >= 3: + try: + direction = App.Vector(float(parsed[0] or 0.0), float(parsed[1] or 0.0), float(parsed[2] or 0.0)) + except Exception as exc: + invalid_samples.append( + { + "property_name": property_name, + "reason": "invalid_vector", + "message": str(exc), + "raw_sample": raw[:160], + } + ) + continue + else: + invalid_samples.append( + { + "property_name": property_name, + "reason": "unsupported_shape", + "message": "Exit direction must be a vector object, array, or comma-separated x,y,z text.", + "raw_sample": raw[:160], + } + ) + continue + + normalized = _normalize(direction) + if normalized is not None: + return None + invalid_samples.append( + { + "property_name": property_name, + "reason": "zero_vector", + "message": "Exit direction vector length must be greater than 0.", + "raw_sample": raw[:160], + } + ) + if not saw_raw or not invalid_samples: + return None + payload = _terminal_diagnostic_payload(terminal) + payload.update(invalid_samples[0]) + payload["invalid_samples"] = invalid_samples + payload["code"] = "terminal_exit_direction_invalid" + return payload + + def _terminal_parent_chain(terminal): chain = [] current = terminal @@ -3531,19 +3657,207 @@ def _ray_exit_distance_from_bbox(origin, direction, bbox): return min(distances) -def _terminal_device_aware_exit_point(terminal, exit_length): +def _terminal_exit_direction_candidates(preferred_direction): + preferred = _normalize(_vector(preferred_direction)) + candidates = [] + + def add_candidate(direction): + normalized = _normalize(_vector(direction)) + if normalized is None: + return + key = ( + round(float(normalized.x), 6), + round(float(normalized.y), 6), + round(float(normalized.z), 6), + ) + if key in [item[0] for item in candidates]: + return + candidates.append((key, normalized)) + + add_candidate(preferred or App.Vector(0, 0, 1)) + for direction in ( + App.Vector(1, 0, 0), + App.Vector(-1, 0, 0), + App.Vector(0, 1, 0), + App.Vector(0, -1, 0), + App.Vector(0, 0, 1), + App.Vector(0, 0, -1), + ): + add_candidate(direction) + if preferred is not None: + # 反向通常意味着从设备背面/底面退出,只有其它轴向没有更好出口时才采用。 + add_candidate(_scale(preferred, -1.0)) + return [direction for _key, direction in candidates] + + +def _terminal_exit_required_length(origin, direction, bbox): + exit_distance = _ray_exit_distance_from_bbox(origin, direction, bbox) + if exit_distance is None: + return None + return exit_distance + DEFAULT_TERMINAL_DEVICE_EXIT_CLEARANCE + + +def _correct_default_terminal_exit_direction(origin, direction, bbox, max_length): + if bbox is None or max_length <= 0.0: + return None + current_required = _terminal_exit_required_length(origin, direction, bbox) + if current_required is None or current_required <= max_length + DEFAULT_NODE_TOLERANCE: + return None + + ranked = [] + for candidate in _terminal_exit_direction_candidates(direction): + required = _terminal_exit_required_length(origin, candidate, bbox) + if required is None: + continue + ranked.append((float(required), candidate)) + if not ranked: + return None + ranked.sort(key=lambda item: item[0]) + best_required, best_direction = ranked[0] + if best_required + DEFAULT_NODE_TOLERANCE >= current_required: + return None + return { + "direction": best_direction, + "device_exit_required_length_mm": float(best_required), + "original_device_exit_required_length_mm": float(current_required), + } + + +def _terminal_exit_plan(terminal, exit_length=20.0, max_exit_length=None): origin = _vector(TerminalObjects.terminal_origin(terminal)) direction = _normalize(_vector(TerminalObjects.terminal_direction(terminal))) if direction is None: direction = App.Vector(0, 0, 1) + original_direction = direction + try: + direction_source = TerminalObjects.terminal_direction_source(terminal) + except Exception: + direction_source = "lcs" - length = max(float(exit_length or 0.0), 0.0) + requested_length = max(float(exit_length or 0.0), 0.0) + max_length = DEFAULT_TERMINAL_EXIT_MAX_LENGTH if max_exit_length is None else max(float(max_exit_length or 0.0), 0.0) + length = requested_length + required_length = 0.0 bbox = _terminal_parent_device_bbox(terminal, origin) - exit_distance = _ray_exit_distance_from_bbox(origin, direction, bbox) - if exit_distance is not None: + corrected = False + original_required_length = 0.0 + if direction_source != "explicit": + correction = _correct_default_terminal_exit_direction(origin, direction, bbox, max_length) + if correction is not None: + # 默认 LCS 方向如果要穿过很深的设备包围盒,优先改用最近的出线面; + # 显式方向不自动改,留给设备模板或人工 CPoint 数据负责。 + direction = correction["direction"] + required_length = float(correction["device_exit_required_length_mm"]) + original_required_length = float(correction["original_device_exit_required_length_mm"]) + corrected = True + if not corrected: + exit_distance = _ray_exit_distance_from_bbox(origin, direction, bbox) + if exit_distance is not None: + required_length = exit_distance + DEFAULT_TERMINAL_DEVICE_EXIT_CLEARANCE + if required_length > 0.0: # 没有人工局部路径时,默认出线至少先离开所属设备外轮廓,避免导线贴在模型内部。 - length = max(length, exit_distance + DEFAULT_TERMINAL_DEVICE_EXIT_CLEARANCE) - return _add(origin, _scale(direction, length)) + length = max(length, required_length) + capped = False + if max_length > 0.0 and length > max_length: + # 工程上不能为了离开一个过大的包围盒无限拉长端子出线;超限时截断并交给诊断提示。 + length = max_length + capped = True + return { + "origin": origin, + "direction": direction, + "requested_exit_length_mm": float(requested_length), + "actual_exit_length_mm": float(length), + "max_exit_length_mm": float(max_length), + "device_exit_required_length_mm": float(required_length), + "original_device_exit_required_length_mm": float(original_required_length), + "exit_length_capped": capped, + "exit_direction_source": direction_source, + "exit_direction_corrected": corrected, + "original_direction": original_direction, + "point": _add(origin, _scale(direction, length)), + "device_bbox_detected": required_length > 0.0, + } + + +def _terminal_device_aware_exit_point(terminal, exit_length, max_exit_length=None): + return _terminal_exit_plan( + terminal, + exit_length=exit_length, + max_exit_length=max_exit_length, + )["point"] + + +def terminal_access_diagnostics(terminal, exit_length=20.0, max_exit_length=None): + """Return engineering diagnostics for the terminal's first exit segment.""" + local_points = _terminal_local_route_points(terminal) + if local_points: + origin = _vector(TerminalObjects.terminal_origin(terminal)) + points = [_terminal_local_point_to_global(terminal, point) for point in local_points] + if not points or _distance(points[0], origin) > DEFAULT_NODE_TOLERANCE: + points.insert(0, origin) + points = _normalized_route_points(points) + if len(points) >= 2: + direction = _normalize(_subtract(points[1], points[0])) or App.Vector(0, 0, 1) + return { + "requested_exit_length_mm": max(float(exit_length or 0.0), 0.0), + "actual_exit_length_mm": float(sum(_distance(points[index], points[index + 1]) for index in range(len(points) - 1))), + "max_exit_length_mm": DEFAULT_TERMINAL_EXIT_MAX_LENGTH if max_exit_length is None else max(float(max_exit_length or 0.0), 0.0), + "device_exit_required_length_mm": 0.0, + "original_device_exit_required_length_mm": 0.0, + "exit_length_capped": False, + "exit_direction_source": "local_route", + "exit_direction_corrected": False, + "exit_rule": "local_route", + "local_route_used": True, + "local_route_point_count": len(points), + "device_bbox_detected": False, + "exit_direction": { + "x": round(float(direction.x), 6), + "y": round(float(direction.y), 6), + "z": round(float(direction.z), 6), + }, + "original_exit_direction": { + "x": round(float(direction.x), 6), + "y": round(float(direction.y), 6), + "z": round(float(direction.z), 6), + }, + "origin": _point_payload(points[0]), + "exit_point": _point_payload(points[-1]), + } + + plan = _terminal_exit_plan( + terminal, + exit_length=exit_length, + max_exit_length=max_exit_length, + ) + direction = plan["direction"] + original_direction = plan["original_direction"] + return { + "requested_exit_length_mm": plan["requested_exit_length_mm"], + "actual_exit_length_mm": plan["actual_exit_length_mm"], + "max_exit_length_mm": plan["max_exit_length_mm"], + "device_exit_required_length_mm": plan["device_exit_required_length_mm"], + "original_device_exit_required_length_mm": plan["original_device_exit_required_length_mm"], + "exit_length_capped": bool(plan["exit_length_capped"]), + "exit_direction_source": plan["exit_direction_source"], + "exit_direction_corrected": bool(plan["exit_direction_corrected"]), + "exit_rule": "default_exit", + "local_route_used": False, + "local_route_point_count": 0, + "device_bbox_detected": bool(plan["device_bbox_detected"]), + "exit_direction": { + "x": round(float(direction.x), 6), + "y": round(float(direction.y), 6), + "z": round(float(direction.z), 6), + }, + "original_exit_direction": { + "x": round(float(original_direction.x), 6), + "y": round(float(original_direction.y), 6), + "z": round(float(original_direction.z), 6), + }, + "origin": _point_payload(plan["origin"]), + "exit_point": _point_payload(plan["point"]), + } def _terminal_local_point_to_global(terminal, local_point): @@ -3617,6 +3931,65 @@ def set_terminal_local_route_points(terminal, document_points): } +def set_terminal_exit_direction(terminal, document_points): + """Store an explicit document-space CPoint direction on one engineering terminal.""" + if not TerminalObjects.is_terminal_object(terminal): + raise RoutingNetworkError("请选择一个可布线端子,再设置端子出线方向。") + points = _normalized_route_points([_vector(point) for point in list(document_points or [])]) + if len(points) < 2: + raise RoutingNetworkError("端子出线方向至少需要两个有效点。") + direction = _normalize(_subtract(points[1], points[0])) + if direction is None: + raise RoutingNetworkError("端子出线方向长度为 0,请选择一条有效线段或两个不同点。") + payload = { + "x": round(float(direction.x), 6), + "y": round(float(direction.y), 6), + "z": round(float(direction.z), 6), + } + TerminalObjects.ensure_string_property( + terminal, + "QetTerminalExitDirectionJson", + PROPERTY_GROUP, + "端子显式出线方向,使用 FreeCAD 文档坐标", + json.dumps(payload, ensure_ascii=False), + ) + try: + terminal.Document.recompute() + except Exception: + pass + return { + "terminal": terminal, + "property_name": "QetTerminalExitDirectionJson", + "direction": payload, + "point_count": len(points), + } + + +def set_terminal_exit_direction_from_selection(selection_ex): + """Use one selected terminal and one selected line/path as its explicit exit direction.""" + terminal = None + direction_runs = [] + for item in list(selection_ex or []): + source = getattr(item, "Object", None) + if TerminalObjects.is_terminal_object(source): + if terminal is not None and source is not terminal: + raise RoutingNetworkError("一次只能为一个端子设置出线方向。") + terminal = source + continue + for points in _point_runs_from_selection_item(item): + normalized = _normalize_point_run(points) + if len(normalized) >= 2: + direction_runs.append(normalized) + + if terminal is None: + raise RoutingNetworkError("请同时选中一个可布线端子和一条表示方向的草图/Draft 线或边。") + if not direction_runs: + raise RoutingNetworkError("请选择至少包含两个点的草图、Draft 线、边或路径对象作为端子出线方向。") + if len(direction_runs) > 1: + raise RoutingNetworkError("端子出线方向一次只支持一条方向线,请只选择一条草图线或一个连续 Wire。") + return set_terminal_exit_direction(terminal, direction_runs[0]) + + def set_terminal_local_route_points_from_selection(selection_ex): """Use one selected terminal and one selected sketch/edge path as its local exit path.""" terminal = None @@ -3651,7 +4024,7 @@ def set_terminal_local_route_points_from_selection(selection_ex): return set_terminal_local_route_points(terminal, route_runs[0]) -def terminal_access_path_points(terminal, exit_length=20.0): +def terminal_access_path_points(terminal, exit_length=20.0, max_exit_length=None): """Return terminal-to-network access points, honoring optional local route metadata.""" origin = _vector(TerminalObjects.terminal_origin(terminal)) local_points = _terminal_local_route_points(terminal) @@ -3662,7 +4035,46 @@ def terminal_access_path_points(terminal, exit_length=20.0): normalized = _normalized_route_points(points) if len(normalized) >= 2: return normalized - return _normalized_route_points([origin, _terminal_device_aware_exit_point(terminal, exit_length)]) + return _normalized_route_points( + [origin, _terminal_device_aware_exit_point(terminal, exit_length, max_exit_length=max_exit_length)] + ) + + +def terminal_access_carrier_for_terminal(terminal): + doc = getattr(terminal, "Document", None) + carrier = _live_source_carrier(doc, terminal) + if ( + carrier is not None + and (getattr(carrier, "QetRouteCarrierKind", "") or "").strip() + == ROUTE_CARRIER_KIND_TERMINAL_ACCESS + ): + return carrier + return None + + +def terminal_access_path_points_with_network_access(terminal, exit_length=20.0, max_exit_length=None): + """Return terminal local exit plus its generated TerminalAccess carrier. + + TerminalAccess 是端子自己的短接入路径。布线结果应沿这段接入线进入 + 线槽/UserPath 主网络,但它仍不能作为其它导线共享的主路径。 + """ + points = list( + terminal_access_path_points( + terminal, + exit_length, + max_exit_length=max_exit_length, + ) + ) + carrier = terminal_access_carrier_for_terminal(terminal) + if carrier is None: + return points + carrier_points = _normalized_route_points(getattr(carrier, "Points", []) or []) + if len(carrier_points) < 2: + return points + for point in carrier_points: + if not points or _distance(points[-1], point) > DEFAULT_NODE_TOLERANCE: + points.append(point) + return _normalized_route_points(points) def _orthogonal_access_points(start, end): @@ -3687,6 +4099,94 @@ def _orthogonal_access_points(start, end): return points +def _route_points_hit_bbox(points, bbox_payload): + if not bbox_payload: + return False + normalized = _normalized_route_points(points) + for index in range(max(len(normalized) - 1, 0)): + if _segment_intersects_bbox_payload(normalized[index], normalized[index + 1], bbox_payload): + return True + return False + + +def _orthogonal_access_point_candidates(start, end): + start = _vector(start) + end = _vector(end) + candidates = [_orthogonal_access_points(start, end)] + for axes in ( + ("x", "y", "z"), + ("x", "z", "y"), + ("y", "x", "z"), + ("y", "z", "x"), + ("z", "x", "y"), + ("z", "y", "x"), + ): + points = [start] + current = start + for axis in axes: + if abs(_axis_value(end, axis) - _axis_value(current, axis)) <= DEFAULT_NODE_TOLERANCE: + continue + current = _set_axis(current, axis, _axis_value(end, axis)) + points.append(current) + if _distance(points[-1], end) > DEFAULT_NODE_TOLERANCE: + points.append(end) + candidates.append(points) + return [_normalized_route_points(points) for points in candidates] + + +def _terminal_access_dogleg_candidates(start, end, bbox, clearance): + start = _vector(start) + end = _vector(end) + candidates = [] + for axis in ("x", "y", "z"): + low, high = _bbox_axis_range(bbox, axis) + for via_value in ( + float(low) - float(clearance), + float(high) + float(clearance), + ): + first = _set_axis(start, axis, via_value) + second = _set_axis(end, axis, via_value) + candidates.append(_normalized_route_points([start, first, second, end])) + return candidates + + +def _route_length(points): + total = 0.0 + normalized = _normalized_route_points(points) + for index in range(max(len(normalized) - 1, 0)): + total += _distance(normalized[index], normalized[index + 1]) + return total + + +def _terminal_access_points_to_target(exit_point, target_point, endpoint_bbox=None): + default_points = _orthogonal_access_points(exit_point, target_point) + if endpoint_bbox is None: + return default_points, False + start = _vector(exit_point) + end = _vector(target_point) + if _point_inside_bbox(start, endpoint_bbox) or _point_inside_bbox(end, endpoint_bbox): + return default_points, False + + blocked_bbox = _bbox_payload(endpoint_bbox, clearance=0.0) + if not _route_points_hit_bbox(default_points, blocked_bbox): + return default_points, False + + avoid_clearance = DEFAULT_TERMINAL_DEVICE_EXIT_CLEARANCE + 1.0 + expanded_bbox = _bbox_payload(endpoint_bbox, clearance=DEFAULT_NODE_TOLERANCE) + candidates = [] + candidates.extend(_orthogonal_access_point_candidates(start, end)) + candidates.extend(_terminal_access_dogleg_candidates(start, end, endpoint_bbox, avoid_clearance)) + valid = [ + points + for points in candidates + if len(points) >= 2 and not _route_points_hit_bbox(points, expanded_bbox) + ] + if not valid: + return default_points, False + valid.sort(key=_route_length) + return valid[0], True + + def _is_primary_route_carrier(carrier): kind = (getattr(carrier, "QetRouteCarrierKind", "") or "").strip() or ROUTE_CARRIER_KIND return kind in { @@ -3699,6 +4199,17 @@ def _is_primary_route_carrier(carrier): } +def _is_terminal_access_main_path_target(carrier): + kind = (getattr(carrier, "QetRouteCarrierKind", "") or "").strip() or ROUTE_CARRIER_KIND + return kind in { + ROUTE_CARRIER_KIND, + ROUTE_CARRIER_KIND_WIRE_DUCT, + ROUTE_CARRIER_KIND_WIRE_DUCT_OPEN_END, + ROUTE_CARRIER_KIND_WIRING_CUT_OUT, + ROUTE_CARRIER_KIND_USER_PATH, + } + + def _component_metrics_by_node(network): nodes = network.get("nodes", {}) if isinstance(network, dict) else {} edges = network.get("edges", {}) if isinstance(network, dict) else {} @@ -3869,13 +4380,103 @@ def _terminal_access_target_candidate(network, exit_point, max_distance): ranked = rank_connection_point_candidates(network, candidates) if not ranked: return None - return ranked[0] + nearest_physical = min( + candidates, + key=lambda candidate: float(candidate.get("distance", 0.0) or 0.0), + ) + main_path_candidates = [ + candidate + for candidate in ranked + if _is_terminal_access_main_path_target(candidate.get("carrier")) + ] + if main_path_candidates: + main_path_candidates.sort( + key=lambda candidate: ( + -int(candidate.get("route_entry_component_primary_segments", 0) or 0), + float(candidate.get("distance", 0.0) or 0.0), + ) + ) + selected = dict(main_path_candidates[0]) + selected["terminal_access_target_rule"] = ( + "main_path_preferred_over_fallback" + if not _is_terminal_access_main_path_target(nearest_physical.get("carrier")) + else "main_path_nearest" + ) + selected["terminal_access_fallback_target"] = False + return selected + selected = dict(ranked[0]) + selected["terminal_access_target_rule"] = "fallback_only" + selected["terminal_access_fallback_target"] = True + return selected + + +def _set_terminal_access_target_metadata(carrier, candidate): + if carrier is None or not isinstance(candidate, dict): + return + target_carrier = candidate.get("carrier") + target_kind = (getattr(target_carrier, "QetRouteCarrierKind", "") or "").strip() or ROUTE_CARRIER_KIND + target_name = (getattr(target_carrier, "Name", "") or "").strip() + target_label = (getattr(target_carrier, "Label", "") or "").strip() or target_name + TerminalObjects.ensure_string_property( + carrier, + "QetTerminalAccessTargetKind", + PROPERTY_GROUP, + "Carrier kind selected as terminal access target", + target_kind, + ) + TerminalObjects.ensure_string_property( + carrier, + "QetTerminalAccessTargetName", + PROPERTY_GROUP, + "Carrier name selected as terminal access target", + target_name, + ) + TerminalObjects.ensure_string_property( + carrier, + "QetTerminalAccessTargetLabel", + PROPERTY_GROUP, + "Carrier label selected as terminal access target", + target_label, + ) + TerminalObjects.ensure_string_property( + carrier, + "QetTerminalAccessTargetRule", + PROPERTY_GROUP, + "Why this carrier was selected as terminal access target", + str(candidate.get("terminal_access_target_rule", "") or ""), + ) + TerminalObjects.ensure_string_property( + carrier, + "QetTerminalAccessFallbackTarget", + PROPERTY_GROUP, + "Whether the terminal access target is only a fallback carrier", + "1" if bool(candidate.get("terminal_access_fallback_target", False)) else "0", + ) + _ensure_float_property( + carrier, + "QetTerminalAccessTargetDistanceMm", + "Distance from terminal local exit to selected access target", + float(candidate.get("distance", 0.0) or 0.0), + ) + _ensure_integer_property( + carrier, + "QetTerminalAccessTargetComponentPrimarySegments", + "Primary route segment count in the selected target component", + int(candidate.get("route_entry_component_primary_segments", 0) or 0), + ) + _ensure_integer_property( + carrier, + "QetTerminalAccessTargetComponentSegments", + "Route segment count in the selected target component", + int(candidate.get("route_entry_component_segments", 0) or 0), + ) def create_terminal_access_carriers_from_document( doc, project_uuid="", terminal_exit_length=20.0, + terminal_exit_max_length=DEFAULT_TERMINAL_EXIT_MAX_LENGTH, max_distance=DEFAULT_TERMINAL_ACCESS_MAX_DISTANCE, ): """Connect every engineering terminal to the generated route network. @@ -3910,7 +4511,11 @@ def create_terminal_access_carriers_from_document( if _live_source_carrier(doc, terminal) is not None: continue has_local_route_points = bool(_terminal_local_route_points(terminal)) - terminal_access_points = terminal_access_path_points(terminal, terminal_exit_length) + terminal_access_points = terminal_access_path_points( + terminal, + terminal_exit_length, + max_exit_length=terminal_exit_max_length, + ) if len(terminal_access_points) < 2: continue exit_point = terminal_access_points[-1] @@ -3924,13 +4529,19 @@ def create_terminal_access_carriers_from_document( if float(distance or 0.0) <= DEFAULT_NODE_TOLERANCE: continue + endpoint_bbox = _terminal_parent_device_bbox(terminal, _vector(TerminalObjects.terminal_origin(terminal))) + access_to_target_points, avoided_endpoint_device = _terminal_access_points_to_target( + exit_point, + nearest_point, + endpoint_bbox=endpoint_bbox, + ) if has_local_route_points: points = list(terminal_access_points) - for point in _orthogonal_access_points(exit_point, nearest_point)[1:]: + for point in access_to_target_points[1:]: if _distance(points[-1], point) > DEFAULT_NODE_TOLERANCE: points.append(point) else: - points = _orthogonal_access_points(exit_point, nearest_point) + points = access_to_target_points if len(points) < 2: continue label = getattr(terminal, "Label", "") or getattr(terminal, "Name", "") or "Terminal" @@ -3942,6 +4553,14 @@ def create_terminal_access_carriers_from_document( kind=ROUTE_CARRIER_KIND_TERMINAL_ACCESS, ) _mark_terminal_access_source(terminal, carrier) + _set_terminal_access_target_metadata(carrier, candidate) + TerminalObjects.ensure_string_property( + carrier, + "QetTerminalAccessAvoidedEndpointDevice", + PROPERTY_GROUP, + "Whether TerminalAccess detoured around the terminal parent device bbox", + "1" if avoided_endpoint_device else "0", + ) created.append(carrier) return created @@ -3951,6 +4570,7 @@ def create_routing_path_network_from_document( project_uuid="", selection_ex=None, terminal_exit_length=20.0, + terminal_exit_max_length=DEFAULT_TERMINAL_EXIT_MAX_LENGTH, terminal_access_max_distance=DEFAULT_TERMINAL_ACCESS_MAX_DISTANCE, adjoining_duct_tolerance=DEFAULT_ADJOINING_DUCT_TOLERANCE, ): @@ -3997,6 +4617,7 @@ def create_routing_path_network_from_document( doc, project_uuid=project_uuid, terminal_exit_length=terminal_exit_length, + terminal_exit_max_length=terminal_exit_max_length, max_distance=terminal_access_max_distance, ) all_wire_duct_created = list(selected_wire_ducts) + list(wire_ducts) @@ -5292,6 +5913,66 @@ def _invalid_route_carriers(network): return invalid +def _terminal_for_access_carrier(carrier): + doc = getattr(carrier, "Document", None) + carrier_name = (getattr(carrier, "Name", "") or "").strip() + if doc is None or not carrier_name: + return None + for terminal in _collect_routable_terminals(doc): + if (getattr(terminal, "QetRouteCarrierName", "") or "").strip() == carrier_name: + return terminal + return None + + +def _terminal_access_diagnostic_payload(carrier): + terminal = _terminal_for_access_carrier(carrier) + access_points = _normalized_route_points(_carrier_points(carrier)) + payload = { + "access_carrier_name": getattr(carrier, "Name", "") or "", + "access_carrier_label": getattr(carrier, "Label", "") or "", + "target_kind": (getattr(carrier, "QetTerminalAccessTargetKind", "") or "").strip(), + "target_name": (getattr(carrier, "QetTerminalAccessTargetName", "") or "").strip(), + "target_label": (getattr(carrier, "QetTerminalAccessTargetLabel", "") or "").strip(), + "target_rule": (getattr(carrier, "QetTerminalAccessTargetRule", "") or "").strip(), + "target_distance_mm": float(getattr(carrier, "QetTerminalAccessTargetDistanceMm", 0.0) or 0.0), + "access_length_mm": float(_route_length(access_points)), + "access_points": [_point_payload(point) for point in access_points], + } + if terminal is not None: + terminal_payload = _terminal_diagnostic_payload(terminal) + payload.update( + { + "terminal_name": terminal_payload.get("name", ""), + "terminal_label": terminal_payload.get("label", ""), + "terminal_uuid": terminal_payload.get("terminal_uuid", ""), + "instance_id": terminal_payload.get("instance_id", ""), + "parent_device_name": terminal_payload.get("parent_device_name", ""), + "parent_device_label": terminal_payload.get("parent_device_label", ""), + "parent_device_instance_id": terminal_payload.get("parent_device_instance_id", ""), + "parent_device_element_uuid": terminal_payload.get("parent_device_element_uuid", ""), + } + ) + return payload + + +def _terminal_access_quality_diagnostics(network): + fallback_targets = [] + endpoint_device_avoidance = [] + for carrier in network.get("carriers", []) or []: + kind = (getattr(carrier, "QetRouteCarrierKind", "") or "").strip() + if kind != ROUTE_CARRIER_KIND_TERMINAL_ACCESS: + continue + if str(getattr(carrier, "QetTerminalAccessFallbackTarget", "") or "").strip() == "1": + payload = _terminal_access_diagnostic_payload(carrier) + payload["code"] = "terminal_access_fallback_target" + fallback_targets.append(payload) + if str(getattr(carrier, "QetTerminalAccessAvoidedEndpointDevice", "") or "").strip() == "1": + payload = _terminal_access_diagnostic_payload(carrier) + payload["code"] = "terminal_access_endpoint_device_avoidance" + endpoint_device_avoidance.append(payload) + return fallback_targets, endpoint_device_avoidance + + def _cabinet_interior_boundary_bboxes(doc): bboxes = [] for obj in list(getattr(doc, "Objects", []) or []): @@ -5447,6 +6128,7 @@ def _terminal_access_geometry_payload(access_points): def diagnose_routing_path_network( doc, terminal_exit_length=20.0, + terminal_exit_max_length=DEFAULT_TERMINAL_EXIT_MAX_LENGTH, terminal_access_max_distance=DEFAULT_TERMINAL_ACCESS_MAX_DISTANCE, terminal_access_warning_distance=0.0, adjoining_duct_tolerance=DEFAULT_ADJOINING_DUCT_TOLERANCE, @@ -5461,6 +6143,9 @@ def diagnose_routing_path_network( isolated_components = _actionable_isolated_components(components) unconnected_terminals = [] long_terminal_accesses = [] + capped_terminal_exits = [] + corrected_terminal_exits = [] + invalid_terminal_exit_directions = [] invalid_terminal_local_routes = [] routing_range_only_network = _routing_range_only_network_payload(summary) boundary_bboxes = _cabinet_interior_boundary_bboxes(doc) @@ -5473,10 +6158,32 @@ def diagnose_routing_path_network( else: warning_distance = min(max(max_distance * 0.5, DEFAULT_TERMINAL_ACCESS_WARNING_DISTANCE), max_distance) if max_distance > 0.0 else DEFAULT_TERMINAL_ACCESS_WARNING_DISTANCE for terminal in routable_terminals: + exit_direction_issue = _terminal_exit_direction_issue(terminal) + if exit_direction_issue is not None: + invalid_terminal_exit_directions.append(exit_direction_issue) local_route_issue = _terminal_local_route_issue(terminal) if local_route_issue is not None: invalid_terminal_local_routes.append(local_route_issue) - terminal_access_points = terminal_access_path_points(terminal, terminal_exit_length) + access_diagnostics = terminal_access_diagnostics( + terminal, + exit_length=terminal_exit_length, + max_exit_length=terminal_exit_max_length, + ) + if access_diagnostics.get("exit_direction_corrected"): + corrected_payload = _terminal_diagnostic_payload(terminal) + corrected_payload.update(access_diagnostics) + corrected_payload["code"] = "terminal_exit_direction_corrected" + corrected_terminal_exits.append(corrected_payload) + if access_diagnostics.get("exit_length_capped"): + capped_payload = _terminal_diagnostic_payload(terminal) + capped_payload.update(access_diagnostics) + capped_payload["code"] = "terminal_exit_length_capped" + capped_terminal_exits.append(capped_payload) + terminal_access_points = terminal_access_path_points( + terminal, + terminal_exit_length, + max_exit_length=terminal_exit_max_length, + ) exit_point = terminal_access_points[-1] if terminal_access_points else _terminal_exit_point(terminal, terminal_exit_length) nearest_point, distance = nearest_point_on_network(network, exit_point) access_carrier = _live_source_carrier(doc, terminal) @@ -5517,6 +6224,9 @@ def diagnose_routing_path_network( possible_breaks = _wire_duct_endpoint_breaks(network) wire_ducts_without_terminal_access = _wire_duct_components_without_terminal_access(components, network) + terminal_access_fallback_targets, terminal_access_endpoint_device_avoidance = ( + _terminal_access_quality_diagnostics(network) + ) invalid_route_carriers = _invalid_route_carriers(network) route_carriers_outside_boundary = _route_carriers_outside_boundary(network, boundary_bboxes) terminals_outside_boundary = _terminals_outside_boundary( @@ -5570,6 +6280,24 @@ def diagnose_routing_path_network( "count": len(wire_ducts_without_terminal_access), } ) + if terminal_access_fallback_targets: + issues.append( + { + "severity": "warning", + "code": "terminal_access_fallback_targets", + "message": "Some terminal access carriers connect to fallback routing ranges instead of main paths.", + "count": len(terminal_access_fallback_targets), + } + ) + if terminal_access_endpoint_device_avoidance: + issues.append( + { + "severity": "info", + "code": "terminal_access_endpoint_device_avoidance", + "message": "Some terminal access carriers detoured around endpoint device bounding boxes.", + "count": len(terminal_access_endpoint_device_avoidance), + } + ) if long_terminal_accesses: issues.append( { @@ -5579,6 +6307,33 @@ def diagnose_routing_path_network( "count": len(long_terminal_accesses), } ) + if capped_terminal_exits: + issues.append( + { + "severity": "warning", + "code": "terminal_exit_length_capped", + "message": "Some terminal exit segments were capped before leaving the device bounding box.", + "count": len(capped_terminal_exits), + } + ) + if corrected_terminal_exits: + issues.append( + { + "severity": "info", + "code": "terminal_exit_direction_corrected", + "message": "Some default terminal exit directions were corrected before routing.", + "count": len(corrected_terminal_exits), + } + ) + if invalid_terminal_exit_directions: + issues.append( + { + "severity": "warning", + "code": "invalid_terminal_exit_directions", + "message": "Some terminals have invalid explicit exit direction metadata.", + "count": len(invalid_terminal_exit_directions), + } + ) if invalid_terminal_local_routes: issues.append( { @@ -5632,6 +6387,9 @@ def diagnose_routing_path_network( "isolated_components": isolated_components, "unconnected_terminals": unconnected_terminals, "long_terminal_accesses": long_terminal_accesses, + "capped_terminal_exits": capped_terminal_exits, + "corrected_terminal_exits": corrected_terminal_exits, + "invalid_terminal_exit_directions": invalid_terminal_exit_directions, "invalid_terminal_local_routes": invalid_terminal_local_routes, "routing_range_only_network": routing_range_only_network, "invalid_route_carriers": invalid_route_carriers, @@ -5639,6 +6397,8 @@ def diagnose_routing_path_network( "terminals_outside_boundary": terminals_outside_boundary, "possible_breaks": possible_breaks, "wire_ducts_without_terminal_access": wire_ducts_without_terminal_access, + "terminal_access_fallback_targets": terminal_access_fallback_targets, + "terminal_access_endpoint_device_avoidance": terminal_access_endpoint_device_avoidance, "issues": issues, "issue_codes": _diagnostic_issue_codes(issues), "ok": not issues, @@ -5661,6 +6421,24 @@ def _highlight_routing_network_diagnostics(doc, diagnostic): if item.get("name", "") ) unconnected_terminal_names.update(long_access_terminal_names) + capped_terminal_names = set( + item.get("name", "") + for item in diagnostic.get("capped_terminal_exits", []) or [] + if item.get("name", "") + ) + unconnected_terminal_names.update(capped_terminal_names) + corrected_terminal_names = set( + item.get("name", "") + for item in diagnostic.get("corrected_terminal_exits", []) or [] + if item.get("name", "") + ) + unconnected_terminal_names.update(corrected_terminal_names) + invalid_exit_direction_terminal_names = set( + item.get("name", "") + for item in diagnostic.get("invalid_terminal_exit_directions", []) or [] + if item.get("name", "") + ) + unconnected_terminal_names.update(invalid_exit_direction_terminal_names) invalid_local_route_terminal_names = set( item.get("name", "") for item in diagnostic.get("invalid_terminal_local_routes", []) or [] @@ -5786,6 +6564,27 @@ def _routing_path_network_diagnostic_message(diagnostic): _diagnostic_terminal_text(sample), _diagnostic_distance_text(sample.get("terminal_access_length_mm")), ) + capped_exits = _diagnostic_items(diagnostic.get("capped_terminal_exits", []) or []) + if capped_exits: + sample = capped_exits[0] + message += "\n端子出线长度截断:{0},实际 {1} / 上限 {2}。".format( + _diagnostic_terminal_text(sample), + _diagnostic_distance_text(sample.get("actual_exit_length_mm")), + _diagnostic_distance_text(sample.get("max_exit_length_mm")), + ) + corrected_exits = _diagnostic_items(diagnostic.get("corrected_terminal_exits", []) or []) + if corrected_exits: + sample = corrected_exits[0] + message += "\n端子默认出线方向已校正:{0},建议复查设备端子 LCS 或模板出线方向。".format( + _diagnostic_terminal_text(sample) + ) + invalid_exit_directions = _diagnostic_items(diagnostic.get("invalid_terminal_exit_directions", []) or []) + if invalid_exit_directions: + sample = invalid_exit_directions[0] + message += "\n端子出线方向无效:{0},属性 {1}。".format( + _diagnostic_terminal_text(sample), + sample.get("property_name", "QetTerminalExitDirectionJson"), + ) invalid_carriers = _diagnostic_items(diagnostic.get("invalid_route_carriers", []) or []) if invalid_carriers: sample = invalid_carriers[0] @@ -5856,10 +6655,13 @@ _ROUTING_PATH_NETWORK_ISSUE_LABELS = { "empty_routing_path_network": "布线路径网络为空", "invalid_route_carriers": "路径对象几何无效", "routing_range_only_network": "仅使用布线面兜底", + "invalid_terminal_exit_directions": "端子出线方向无效", "invalid_terminal_local_routes": "端子局部路径无效", "route_carriers_outside_boundary": "路径越出柜内边界", "terminals_outside_boundary": "端子越出柜内边界", "long_terminal_accesses": "端子接入过长", + "terminal_exit_length_capped": "端子出线长度截断", + "terminal_exit_direction_corrected": "端子默认出线方向校正", "unconnected_terminals": "端子未接入", "wire_duct_endpoint_breaks": "线槽端点疑似断开", "wire_ducts_without_terminal_access": "线槽未接入端子主网络", @@ -5884,6 +6686,7 @@ def write_routing_path_network_diagnostic( doc, project_uuid="", terminal_exit_length=20.0, + terminal_exit_max_length=DEFAULT_TERMINAL_EXIT_MAX_LENGTH, terminal_access_max_distance=DEFAULT_TERMINAL_ACCESS_MAX_DISTANCE, terminal_access_warning_distance=0.0, adjoining_duct_tolerance=DEFAULT_ADJOINING_DUCT_TOLERANCE, @@ -5891,6 +6694,7 @@ def write_routing_path_network_diagnostic( diagnostic = diagnose_routing_path_network( doc, terminal_exit_length=terminal_exit_length, + terminal_exit_max_length=terminal_exit_max_length, terminal_access_max_distance=terminal_access_max_distance, terminal_access_warning_distance=terminal_access_warning_distance, adjoining_duct_tolerance=adjoining_duct_tolerance, diff --git a/src/Mod/FreeCADExchange/StaleObjectSync.py b/src/Mod/FreeCADExchange/StaleObjectSync.py index 5960664..7db16af 100644 --- a/src/Mod/FreeCADExchange/StaleObjectSync.py +++ b/src/Mod/FreeCADExchange/StaleObjectSync.py @@ -64,9 +64,7 @@ def _payload_identity_sets(payload): break for item in payload.get("devices", []) or []: - instance_id = _string_value(item, "device_instance_id") or _string_value( - item, "instance_id" - ) + instance_id = _string_value(item, "device_instance_id") if instance_id: device_instance_ids.add(instance_id) for terminal in item.get("terminals", []) or []: @@ -74,11 +72,6 @@ def _payload_identity_sets(payload): if terminal_uuid: terminal_uuids.add(terminal_uuid) - for item in payload.get("terminals", []) or []: - terminal_uuid = _string_value(item, "terminal_uuid") - if terminal_uuid: - terminal_uuids.add(terminal_uuid) - for item in payload.get("wires", []) or []: wire_uuid = ( _string_value(item, "wire_id") diff --git a/src/Mod/FreeCADExchange/TerminalImport.py b/src/Mod/FreeCADExchange/TerminalImport.py index d33b888..6329853 100644 --- a/src/Mod/FreeCADExchange/TerminalImport.py +++ b/src/Mod/FreeCADExchange/TerminalImport.py @@ -38,10 +38,7 @@ def _normalize_terminal_entry(item, index): "Terminal entry #{0} is missing terminal_uuid.".format(index) ) - instance_id = ( - (item.get("device_instance_id") or "").strip() - or (item.get("instance_id") or "").strip() - ) + device_instance_id = (item.get("device_instance_id") or "").strip() element_uuid = (item.get("element_uuid") or "").strip() terminal_display = (item.get("terminal_display") or "").strip() slot_name_hint = ( @@ -55,7 +52,7 @@ def _normalize_terminal_entry(item, index): return { "terminal_uuid": terminal_uuid, - "instance_id": instance_id, + "device_instance_id": device_instance_id, "element_uuid": element_uuid, "terminal_display": terminal_display, "slot_name_hint": slot_name_hint, @@ -70,10 +67,7 @@ def _payload_device_lookup(payload): if not isinstance(item, dict): continue - instance_id = ( - (item.get("device_instance_id") or "").strip() - or (item.get("instance_id") or "").strip() - ) + instance_id = (item.get("device_instance_id") or "").strip() if instance_id: by_instance_id.add(instance_id) @@ -99,10 +93,7 @@ def _payload_device_instance_by_element(payload): for device in payload.get("devices", []) or []: if not isinstance(device, dict): continue - device_instance_id = ( - (device.get("device_instance_id") or "").strip() - or (device.get("instance_id") or "").strip() - ) + device_instance_id = (device.get("device_instance_id") or "").strip() if not device_instance_id: continue for terminal in device.get("terminals", []) or []: @@ -111,43 +102,26 @@ def _payload_device_instance_by_element(payload): element_uuid = (terminal.get("element_uuid") or "").strip() if element_uuid and element_uuid not in result: result[element_uuid] = device_instance_id - for terminal in payload.get("terminals", []) or []: - if not isinstance(terminal, dict): - continue - element_uuid = (terminal.get("element_uuid") or "").strip() - device_instance_id = ( - (terminal.get("device_instance_id") or "").strip() - or (terminal.get("instance_id") or "").strip() - ) - if element_uuid and device_instance_id and element_uuid not in result: - result[element_uuid] = device_instance_id return result def _payload_terminal_entries(payload): if "terminals" in payload and payload.get("terminals") is not None: - terminal_entries = payload.get("terminals", []) - if not isinstance(terminal_entries, list): - raise TerminalImportError("Field 'terminals' must be a list.") - return list(terminal_entries) + raise TerminalImportError( + "Field 'terminals' at the JSON root is no longer supported. Use devices[].terminals[]." + ) terminal_entries = [] for device in payload.get("devices", []) or []: if not isinstance(device, dict): continue - device_instance_id = ( - (device.get("device_instance_id") or "").strip() - or (device.get("instance_id") or "").strip() - ) + device_instance_id = (device.get("device_instance_id") or "").strip() for terminal in device.get("terminals", []) or []: if not isinstance(terminal, dict): continue entry = dict(terminal) - if device_instance_id and not ( - (entry.get("device_instance_id") or "").strip() - or (entry.get("instance_id") or "").strip() - ): - entry["instance_id"] = device_instance_id + if device_instance_id: + entry["device_instance_id"] = device_instance_id terminal_entries.append(entry) return terminal_entries @@ -163,8 +137,7 @@ def _device_embedded_terminal_entries(payload, existing_keys): if not isinstance(device, dict): continue - device_element_uuid = (device.get("element_uuid") or "").strip() - device_instance_id = (device.get("instance_id") or "").strip() + device_instance_id = (device.get("device_instance_id") or "").strip() device_terminals = device.get("terminals", []) or [] if not isinstance(device_terminals, list): continue @@ -173,9 +146,8 @@ def _device_embedded_terminal_entries(payload, existing_keys): if not isinstance(terminal, dict): continue terminal_uuid = (terminal.get("terminal_uuid") or "").strip() - element_uuid = (terminal.get("element_uuid") or "").strip() or device_element_uuid - instance_id = (terminal.get("instance_id") or "").strip() or device_instance_id - if not terminal_uuid or not (element_uuid or instance_id): + element_uuid = (terminal.get("element_uuid") or "").strip() + if not terminal_uuid or not (element_uuid or device_instance_id): continue # QET 的正式端子可能直接挂在 devices[].terminals[] 下。 @@ -194,7 +166,7 @@ def _device_embedded_terminal_entries(payload, existing_keys): { "terminal_uuid": terminal_uuid, "element_uuid": element_uuid, - "instance_id": instance_id, + "device_instance_id": device_instance_id, "terminal_display": terminal_display, "slot_name_hint": terminal_display, } @@ -216,10 +188,8 @@ def _wire_endpoint_terminal_entries(payload, existing_keys): for side in ("start", "end"): terminal_uuid = (wire.get("{0}_terminal_uuid".format(side)) or "").strip() element_uuid = (wire.get("{0}_element_uuid".format(side)) or "").strip() - instance_id = (wire.get("{0}_instance_id".format(side)) or "").strip() - if not instance_id and element_uuid: - instance_id = instance_by_element.get(element_uuid, "") - if not terminal_uuid or not (element_uuid or instance_id): + device_instance_id = instance_by_element.get(element_uuid, "") + if not terminal_uuid or not (element_uuid or device_instance_id): continue key = (element_uuid, terminal_uuid) @@ -235,7 +205,7 @@ def _wire_endpoint_terminal_entries(payload, existing_keys): { "terminal_uuid": terminal_uuid, "element_uuid": element_uuid, - "instance_id": instance_id, + "device_instance_id": device_instance_id, "terminal_display": terminal_display, "slot_name_hint": terminal_display, } @@ -244,7 +214,7 @@ def _wire_endpoint_terminal_entries(payload, existing_keys): def _terminal_belongs_to_payload_devices(entry, device_lookup): - instance_id = entry["instance_id"] + instance_id = entry["device_instance_id"] element_uuid = entry["element_uuid"] if instance_id and instance_id in device_lookup["instance_ids"]: @@ -324,7 +294,7 @@ def _device_key(device_group): def _locate_device_group(doc, entry): - instance_id = entry["instance_id"] + instance_id = entry["device_instance_id"] element_uuid = entry["element_uuid"] device_group = None diff --git a/src/Mod/FreeCADExchange/TerminalObjects.py b/src/Mod/FreeCADExchange/TerminalObjects.py index 5f59081..e4cc32f 100644 --- a/src/Mod/FreeCADExchange/TerminalObjects.py +++ b/src/Mod/FreeCADExchange/TerminalObjects.py @@ -419,7 +419,50 @@ def _normalized_direction(vector): return App.Vector(vector.x / length, vector.y / length, vector.z / length) +def _direction_from_payload(value): + if isinstance(value, dict): + try: + return App.Vector( + float(value.get("x", 0.0) or 0.0), + float(value.get("y", 0.0) or 0.0), + float(value.get("z", 0.0) or 0.0), + ) + except Exception: + return None + if isinstance(value, (list, tuple)) and len(value) >= 3: + try: + return App.Vector(float(value[0] or 0.0), float(value[1] or 0.0), float(value[2] or 0.0)) + except Exception: + return None + return None + + +def _explicit_terminal_exit_direction(obj): + for property_name in ("QetTerminalExitDirectionJson", "QetExitDirectionJson"): + raw = str(getattr(obj, property_name, "") or "").strip() + if not raw: + continue + parsed = None + try: + parsed = json.loads(raw) + except Exception: + parts = [part.strip() for part in raw.replace(";", ",").split(",")] + if len(parts) >= 3: + parsed = parts[:3] + direction = _direction_from_payload(parsed) + if direction is None: + continue + normalized = _normalized_direction(direction) + if abs(normalized.x) + abs(normalized.y) + abs(normalized.z) > 1e-9: + return normalized + return None + + def terminal_direction(obj): + explicit_direction = _explicit_terminal_exit_direction(obj) + if explicit_direction is not None: + return explicit_direction + direction = App.Vector(0, 0, 1) try: @@ -464,6 +507,13 @@ def terminal_direction(obj): return App.Vector(0, 0, 1) +def terminal_direction_source(obj): + """Return where the terminal exit direction currently comes from.""" + if _explicit_terminal_exit_direction(obj) is not None: + return "explicit" + return "lcs" + + def create_lcs_object(doc, name_hint, placement=None, label=None): base_name = safe_token(name_hint) or "QETTerminal" object_name = _unique_object_name(doc, base_name) diff --git a/src/Mod/FreeCADExchange/WiringImport.py b/src/Mod/FreeCADExchange/WiringImport.py index e0272c1..86fa4ce 100644 --- a/src/Mod/FreeCADExchange/WiringImport.py +++ b/src/Mod/FreeCADExchange/WiringImport.py @@ -47,13 +47,46 @@ def _device_display_map(payload): for item in payload.get("devices", []) or []: if not isinstance(item, dict): continue - element_uuid = _string_value(item, "element_uuid") display_tag = _string_value(item, "display_tag") - if element_uuid and display_tag: + if not display_tag: + continue + + # 新交换协议中,一个 3D 设备实例可能合并多个 2D 符号; + # 导线端点仍用 element_uuid,所以这里要把组内所有 2D 符号都映射到同一设备标注。 + candidate_element_uuids = [] + for terminal in item.get("terminals", []) or []: + if not isinstance(terminal, dict): + continue + element_uuid = _string_value(terminal, "element_uuid") + if element_uuid: + candidate_element_uuids.append(element_uuid) + + for element_uuid in candidate_element_uuids: labels[element_uuid] = display_tag return labels +def _endpoint_instance_map(payload): + by_terminal = {} + by_element = {} + for device in payload.get("devices", []) or []: + if not isinstance(device, dict): + continue + device_instance_id = _string_value(device, "device_instance_id") + if not device_instance_id: + continue + for terminal in device.get("terminals", []) or []: + if not isinstance(terminal, dict): + continue + element_uuid = _string_value(terminal, "element_uuid") + terminal_uuid = _string_value(terminal, "terminal_uuid") + if element_uuid: + by_element.setdefault(element_uuid, device_instance_id) + if element_uuid and terminal_uuid: + by_terminal[(element_uuid, terminal_uuid)] = device_instance_id + return by_terminal, by_element + + def _endpoint_text(device_label, terminal_display, terminal_uuid): terminal = terminal_display or terminal_uuid if device_label and terminal: @@ -61,11 +94,12 @@ def _endpoint_text(device_label, terminal_display, terminal_uuid): return device_label or terminal or "未命名端子" -def _normalize_wire_entry(item, index, device_labels=None): +def _normalize_wire_entry(item, index, device_labels=None, endpoint_instances=None): if not isinstance(item, dict): raise WiringImportError("Wire entry #{0} must be an object.".format(index)) device_labels = device_labels or {} + endpoint_by_terminal, endpoint_by_element = endpoint_instances or ({}, {}) wire_uuid = ( _string_value(item, "wire_id") or _string_value(item, "wire_uuid") @@ -89,6 +123,14 @@ def _normalize_wire_entry(item, index, device_labels=None): end_element_uuid = _string_value(item, "end_element_uuid") start_terminal_display = _string_value(item, "start_terminal_display") end_terminal_display = _string_value(item, "end_terminal_display") + start_instance_id = endpoint_by_terminal.get( + (start_element_uuid, start_terminal_uuid), + endpoint_by_element.get(start_element_uuid, ""), + ) + end_instance_id = endpoint_by_terminal.get( + (end_element_uuid, end_terminal_uuid), + endpoint_by_element.get(end_element_uuid, ""), + ) start_device_label = _string_value(item, "start_device_label") or device_labels.get( start_element_uuid, "" ) @@ -109,12 +151,12 @@ def _normalize_wire_entry(item, index, device_labels=None): "wire_style_id": _int_text_value(item, "wire_style_id"), "start_element_uuid": start_element_uuid, "start_terminal_uuid": start_terminal_uuid, - "start_instance_id": _string_value(item, "start_instance_id"), + "start_instance_id": start_instance_id, "start_terminal_display": start_terminal_display, "start_device_label": start_device_label, "end_element_uuid": end_element_uuid, "end_terminal_uuid": end_terminal_uuid, - "end_instance_id": _string_value(item, "end_instance_id"), + "end_instance_id": end_instance_id, "end_terminal_display": end_terminal_display, "end_device_label": end_device_label, "endpoint_label": endpoint_label, @@ -243,9 +285,15 @@ def import_wire_tasks_from_payload(payload, doc=None): } device_labels = _device_display_map(payload) + endpoint_instances = _endpoint_instance_map(payload) for index, item in enumerate(wires): try: - entry = _normalize_wire_entry(item, index, device_labels=device_labels) + entry = _normalize_wire_entry( + item, + index, + device_labels=device_labels, + endpoint_instances=endpoint_instances, + ) except WiringImportError as exc: report["skipped_invalid"] += 1 report["warnings"].append(str(exc)) diff --git a/tests/manual/freecad_pending_device_scene_smoke.py b/tests/manual/freecad_pending_device_scene_smoke.py new file mode 100644 index 0000000..bf48e7f --- /dev/null +++ b/tests/manual/freecad_pending_device_scene_smoke.py @@ -0,0 +1,148 @@ +r"""Smoke test for QET pending-device scene persistence. + +Run with FreeCADCmd.exe, not system Python: + + D:\fc\run-FreeCAD-1.1.1\bin\FreeCADCmd.exe tests\manual\freecad_pending_device_scene_smoke.py +""" + +import json +import os +import shutil +import sys +import tempfile +from pathlib import Path + +import FreeCAD as App + + +REPO_ROOT = Path(__file__).resolve().parents[2] +MODULE_DIR = REPO_ROOT / "src" / "Mod" / "FreeCADExchange" +if str(MODULE_DIR) not in sys.path: + sys.path.insert(0, str(MODULE_DIR)) + +import DeviceImport # noqa: E402 + + +def _close_doc(doc): + if doc is None: + return + try: + App.closeDocument(doc.Name) + except Exception: + pass + + +def _make_source_model(path): + doc = App.newDocument("SmokeSourceModel") + try: + body = doc.addObject("Part::Box", "Body") + body.Length = 10 + body.Width = 8 + body.Height = 6 + doc.recompute() + doc.saveAs(str(path)) + finally: + _close_doc(doc) + + +def _assert_close(actual, expected, label): + if abs(float(actual) - float(expected)) > 1e-6: + raise AssertionError("{0}: expected {1}, got {2}".format(label, expected, actual)) + + +def main(): + temp_dir = Path(tempfile.mkdtemp(prefix="qet_pending_device_smoke_")) + try: + source_model = temp_dir / "device.FCStd" + scene_file = temp_dir / "QETScene.FCStd" + _make_source_model(source_model) + + scene = App.newDocument("QETSceneSmoke") + root = DeviceImport._ensure_root_group(scene, None, "project-smoke") + device_group, created = DeviceImport._ensure_device_group( + scene, + root, + "element-smoke", + "instance-smoke", + str(source_model), + "N600", + 0, + ) + if not created: + raise AssertionError("smoke device group should be newly created") + DeviceImport._set_device_assembly_state( + device_group, + DeviceImport.ASSEMBLY_STATE_PENDING, + ) + + mount_target = scene.addObject("App::Part", "MountingPlate") + mount_target.Label = "安装板" + mount_target.Placement = App.Placement(App.Vector(100, 200, 300), App.Rotation()) + DeviceImport._ensure_string_property( + mount_target, + "QetCarrierKind", + "QET Mount", + "Smoke mount target kind", + "mounting_plate", + ) + + DeviceImport.insert_pending_device( + scene, + device_group, + mount_target=mount_target, + mount_placement=App.Placement(App.Vector(10, 20, 30), App.Rotation()), + mount_normal=App.Vector(0, 0, 1), + mount_offset_mm=5.0, + ) + device_group_name = device_group.Name + scene.recompute() + scene.saveAs(str(scene_file)) + _close_doc(scene) + + reopened = App.openDocument(str(scene_file)) + try: + reopened_device = reopened.getObject(device_group_name) + if reopened_device is None: + raise AssertionError("reopened scene does not contain device group") + if getattr(reopened_device, "QetAssemblyState", "") != DeviceImport.ASSEMBLY_STATE_PLACED: + raise AssertionError("reopened device is not marked Placed") + _assert_close(reopened_device.Placement.Base.x, 10.0, "placement x") + _assert_close(reopened_device.Placement.Base.y, 20.0, "placement y") + _assert_close(reopened_device.Placement.Base.z, 35.0, "placement z") + if getattr(reopened_device, "QetMountHostName", "") != "MountingPlate": + raise AssertionError("mount host name was not persisted") + if getattr(reopened_device, "QetMountHostKind", "") != "mounting_plate": + raise AssertionError("mount host kind was not persisted") + if getattr(reopened_device, "QetMountOffsetMm", "") != "5.000000": + raise AssertionError("mount offset was not persisted") + normal_payload = json.loads(getattr(reopened_device, "QetMountHostNormalJson", "{}") or "{}") + _assert_close(normal_payload.get("z", 0.0), 1.0, "normal z") + finally: + _close_doc(reopened) + + result_path = os.environ.get("QET_PENDING_DEVICE_SMOKE_RESULT", "").strip() + if result_path: + Path(result_path).write_text( + json.dumps( + { + "ok": True, + "scene": str(scene_file), + "device": device_group_name, + "placement": {"x": 10.0, "y": 20.0, "z": 35.0}, + "assembly_state": DeviceImport.ASSEMBLY_STATE_PLACED, + "mount_host": "MountingPlate", + }, + ensure_ascii=False, + indent=2, + ), + encoding="utf-8", + ) + print("SMOKE_OK scene={0}".format(scene_file)) + return 0 + finally: + if os.environ.get("QET_KEEP_SMOKE_OUTPUT", "").strip() != "1": + shutil.rmtree(str(temp_dir), ignore_errors=True) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/python/freecad_exchange_auto_routing_test.py b/tests/python/freecad_exchange_auto_routing_test.py index 6e321e8..395f615 100644 --- a/tests/python/freecad_exchange_auto_routing_test.py +++ b/tests/python/freecad_exchange_auto_routing_test.py @@ -2599,6 +2599,218 @@ class AutoRoutingTest(unittest.TestCase): self.assertEqual(0, second["main_path_detour_user_path_bridges"]) self.assertEqual(1, second["main_path_detour_bridge_duplicates"]) + def test_controller_creates_user_path_bridge_from_terminal_access_fallback_target(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + fallback_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSource") + fallback_source.Label = "安装板布线面" + fallback_duplicate = doc.addObject("Part::Feature", "CabinetRoutingRangeDuplicate") + fallback_duplicate.Label = "安装板布线面" + fallback_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板布线面 carrier", + ) + duplicate_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(-500, 0, 0), app.Vector(-400, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板布线面 duplicate carrier", + ) + main_path = routing_network.create_route_carrier( + doc, + [app.Vector(150, 20, 0), app.Vector(250, 20, 0)], + project_uuid="project-1", + kind="UserPath", + label="柜内主路径", + ) + fallback_carrier.QetRouteSourceName = fallback_source.Name + fallback_carrier.QetRouteSourceLabel = fallback_source.Label + duplicate_carrier.QetRouteSourceName = fallback_duplicate.Name + duplicate_carrier.QetRouteSourceLabel = fallback_duplicate.Label + main_path.QetRouteSourceLabel = "柜内主路径" + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "terminal_access_fallback_target_samples": [ + { + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_name": fallback_carrier.Name, + "target_label": "安装板布线面", + "target_distance": 35.0, + } + ], + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + + first = auto_routing_panel.AutoRoutingController().create_user_path_bridges_from_diagnostic_suggestions() + + bridges = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteBridgeKind", "") == "TerminalAccessFallbackBridge" + ] + self.assertEqual(1, first["terminal_access_fallback_bridge_targets"]) + self.assertEqual(1, first["terminal_access_fallback_user_path_bridges"]) + self.assertEqual( + ["安装板布线面 -> 柜内主路径"], + first["terminal_access_fallback_bridge_pair_labels"], + ) + self.assertEqual(1, len(bridges)) + self.assertEqual("安装板布线面 -> 柜内主路径", bridges[0].QetRouteBridgePairLabel) + self.assertEqual(fallback_carrier.Name, bridges[0].QetRouteBridgeLeftSourceName) + self.assertEqual(main_path.Name, bridges[0].QetRouteBridgeRightSourceName) + self.assertEqual( + [(100.0, 0.0, 0.0), (150.0, 20.0, 0.0)], + [(point.x, point.y, point.z) for point in bridges[0].Points], + ) + + second = auto_routing_panel.AutoRoutingController().create_user_path_bridges_from_diagnostic_suggestions() + + self.assertEqual(0, second["terminal_access_fallback_user_path_bridges"]) + self.assertEqual(1, second["terminal_access_fallback_bridge_duplicates"]) + + def test_controller_creates_terminal_access_fallback_bridge_from_path_network_diagnostic(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + fallback_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板布线面", + ) + main_path = routing_network.create_route_carrier( + doc, + [app.Vector(150, 20, 0), app.Vector(250, 20, 0)], + project_uuid="project-1", + kind="UserPath", + label="柜内主路径", + ) + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "terminal_access_fallback_targets": [ + { + "target_kind": "RoutingRange", + "target_name": fallback_carrier.Name, + "target_label": "安装板布线面", + "target_distance": 35.0, + "terminal_uuid": "terminal-ud8-as", + "terminal_label": "as", + "parent_device_label": "UD:8", + } + ], + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + + result = auto_routing_panel.AutoRoutingController().create_user_path_bridges_from_terminal_access_fallback_targets() + + bridges = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteBridgeKind", "") == "TerminalAccessFallbackBridge" + ] + self.assertEqual(1, result["terminal_access_fallback_bridge_targets"]) + self.assertEqual(1, result["terminal_access_fallback_user_path_bridges"]) + self.assertEqual(["安装板布线面 -> 柜内主路径"], result["terminal_access_fallback_bridge_pair_labels"]) + self.assertEqual(1, len(bridges)) + self.assertEqual(fallback_carrier.Name, bridges[0].QetRouteBridgeLeftSourceName) + self.assertEqual(main_path.Name, bridges[0].QetRouteBridgeRightSourceName) + + def test_controller_terminal_access_fallback_bridge_prefers_nearest_segment_not_endpoint(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + fallback_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板布线面", + ) + near_segment_main_path = routing_network.create_route_carrier( + doc, + [app.Vector(50, 10, 0), app.Vector(50, 1000, 0)], + project_uuid="project-1", + kind="UserPath", + label="经过端子附近的长主路径", + ) + near_endpoint_but_farther_path = routing_network.create_route_carrier( + doc, + [app.Vector(120, 0, 0), app.Vector(130, 0, 0)], + project_uuid="project-1", + kind="UserPath", + label="端点较近但整体更远路径", + ) + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "terminal_access_fallback_target_samples": [ + { + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_name": fallback_carrier.Name, + "target_label": "安装板布线面", + "target_distance": 35.0, + } + ], + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + + result = auto_routing_panel.AutoRoutingController().create_user_path_bridges_from_diagnostic_suggestions() + + bridges = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteBridgeKind", "") == "TerminalAccessFallbackBridge" + ] + self.assertEqual(1, result["terminal_access_fallback_user_path_bridges"]) + self.assertEqual(1, len(bridges)) + self.assertEqual(near_segment_main_path.Name, bridges[0].QetRouteBridgeRightSourceName) + self.assertNotEqual(near_endpoint_but_farther_path.Name, bridges[0].QetRouteBridgeRightSourceName) + self.assertEqual( + [(50.0, 0.0, 0.0), (50.0, 10.0, 0.0)], + [(point.x, point.y, point.z) for point in bridges[0].Points], + ) + def test_controller_does_not_duplicate_diagnostic_user_path_bridge(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() @@ -2678,7 +2890,7 @@ class AutoRoutingTest(unittest.TestCase): ) self.assertIn("自动诊断桥接:生成 UserPath 1 条", message) - def test_route_eplan_connections_does_not_auto_create_diagnostic_bridge_by_default(self): + def test_route_eplan_connections_does_not_auto_create_diagnostic_bridge_when_disabled(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] @@ -2703,6 +2915,7 @@ class AutoRoutingTest(unittest.TestCase): report = auto_routing.route_eplan_connections( doc, payload={"project_uuid": "project-1", "wires": []}, + options={"auto_create_diagnostic_bridges": False}, project_uuid="project-1", update_network=False, ) @@ -3886,6 +4099,143 @@ class AutoRoutingTest(unittest.TestCase): self.assertEqual(["wire-missing"], result["missing_issue_wire_refs"]) self.assertEqual([long_wire, boundary_wire], selected) + def test_controller_selects_wire_outside_boundary_wires(self): + _install_fake_freecad() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + sampled_wire = doc.addObject("Part::Feature", "QETRoutedConnection_sampled_boundary") + sampled_wire.Label = "N-OUT-A: A1 -> B1 (BoundaryWarning)" + sampled_wire.RouteType = "RoutedConnection" + sampled_wire.QetWireUuid = "wire-sampled-boundary" + object_issue_wire = doc.addObject("Part::Feature", "QETRoutedConnection_object_boundary") + object_issue_wire.Label = "N-OUT-B: A2 -> B2 (BoundaryWarning)" + object_issue_wire.RouteType = "RoutedConnection" + object_issue_wire.QetWireUuid = "wire-object-boundary" + object_issue_wire.QetRouteIssueCodes = "route_candidate_boundary_violations" + normal_wire = doc.addObject("Part::Feature", "QETRoutedConnection_normal_boundary") + normal_wire.Label = "N-OK: A3 -> B3 (Routed)" + normal_wire.RouteType = "RoutedConnection" + normal_wire.QetWireUuid = "wire-ok" + normal_wire.QetRouteIssueCodes = "" + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "wire_outside_boundary_samples": [ + { + "wire_uuid": "wire-sampled-boundary", + "wire_object_label": "N-OUT-A: A1 -> B1 (BoundaryWarning)", + }, + { + "wire_uuid": "wire-missing-boundary", + "wire_object_label": "N-MISSING: A4 -> B4 (BoundaryWarning)", + }, + ], + "route_samples": [ + { + "wire_uuid": "wire-ok", + "wire_object_label": "N-OK: A3 -> B3 (Routed)", + "issue_codes": [], + } + ], + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], + ) + + result = auto_routing_panel.AutoRoutingController().select_wire_outside_boundary_wires() + + self.assertEqual(2, result["selected_wire_outside_boundary_wires"]) + self.assertEqual( + ["QETRoutedConnection_sampled_boundary", "QETRoutedConnection_object_boundary"], + result["selected_wire_outside_boundary_wire_names"], + ) + self.assertEqual(["wire-missing-boundary"], result["missing_wire_outside_boundary_refs"]) + self.assertEqual([sampled_wire, object_issue_wire], selected) + + def test_controller_selects_wire_outside_boundary_route_sources_from_wire_track(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + source_path = doc.addObject("Part::Feature", "OutsideUserPathSketch") + source_path.Label = "越界用户路径草图" + carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(120, 0, 20)], + label="越界 UserPath", + project_uuid="project-1", + kind="UserPath", + ) + carrier.QetRouteSourceName = source_path.Name + carrier.QetRouteSourceLabel = source_path.Label + wire = doc.addObject("Part::Feature", "QETRoutedConnection_boundary_with_track") + wire.RouteType = "RoutedConnection" + wire.QetWireUuid = "wire-boundary-track" + wire.QetRouteIssueCodes = "route_candidate_boundary_violations" + wire.QetRouteTrackJson = json.dumps( + { + "segments": [ + { + "carrier": { + "name": carrier.Name, + "label": carrier.Label, + "source_name": source_path.Name, + "source_label": source_path.Label, + } + } + ], + }, + ensure_ascii=False, + ) + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "wire_outside_boundary_samples": [ + {"wire_uuid": "wire-boundary-track"}, + ], + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], + ) + + result = auto_routing_panel.AutoRoutingController().select_wire_outside_boundary_wires() + + self.assertEqual(1, result["selected_wire_outside_boundary_wires"]) + self.assertEqual(1, result["selected_wire_outside_boundary_route_carriers"]) + self.assertEqual(1, result["selected_wire_outside_boundary_route_sources"]) + self.assertEqual([carrier.Name], result["selected_wire_outside_boundary_route_carrier_names"]) + self.assertEqual([source_path.Name], result["selected_wire_outside_boundary_route_source_names"]) + self.assertEqual([wire, carrier, source_path], selected) + def test_controller_selects_main_path_detour_missing_wires(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() @@ -4325,59 +4675,51 @@ class AutoRoutingTest(unittest.TestCase): self.assertEqual(["缺失补路位置"], result["missing_main_path_detour_rejected_fallback_refs"]) self.assertEqual([fallback_source], selected) - def test_controller_selects_main_path_detour_bridge_endpoint_sources_from_summary(self): + def test_controller_selects_terminal_access_fallback_targets_from_latest_batch_diagnostic(self): _install_fake_freecad() - terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - wiring_objects.ensure_diagnostic_group(doc, "project-1") - routed_group = wiring_objects.ensure_routed_group(doc, "project-1") + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") fallback_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSource") - fallback_source.QetRouteSourceLabel = "安装板布线面" - current_source = doc.addObject("Part::Feature", "MainWireDuctSource") - current_source.QetRouteSourceLabel = "主线槽A" - wire = doc.addObject("Part::Feature", "QETRoutedConnection_main_path_pair") - wire.Label = "N-PAIR: A1 -> B1" + fallback_source.Label = "安装板布线面" + duplicate_label_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSourceDuplicate") + duplicate_label_source.Label = "安装板布线面" + wire = doc.addObject("Part::Feature", "QETRoutedConnection_access_fallback") wire.RouteType = "RoutedConnection" - wire.QetWireUuid = "wire-main-path-pair" - wire.QetRouteIssueCodes = "collision_warnings, main_path_detour_missing" - wire.PropertiesList = [ - "QetStartTerminalUuid", - "QetEndTerminalUuid", - "QetRouteDiagnosticsJson", - "QetRouteTrackJson", - ] - wire.QetStartTerminalUuid = "terminal-a" - wire.QetEndTerminalUuid = "terminal-b" - wire.QetRouteDiagnosticsJson = json.dumps( - { - "selective_collision_reroute": { - "status": "RejectedFallback", - "rejected_fallback_kinds": ["RoutingRange"], - "rejected_fallback_labels": ["安装板布线面"], - } - }, - ensure_ascii=False, - ) - wire.QetRouteTrackJson = json.dumps( + wire.QetWireUuid = "wire-fallback" + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( { - "segments": [ + "terminal_access_fallback_target_samples": [ { - "carrier": { - "kind": "WireDuct", - "source_label": "主线槽A", - "source_name": current_source.Name, - } - } - ] + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_name": fallback_source.Name, + "target_label": "安装板布线面", + "target_distance": 35.0, + }, + { + "wire_uuid": "wire-missing", + "wire_label": "W404", + "endpoint": "end", + "target_kind": "RoutingRange", + "target_label": "缺失布线面", + "target_distance": 50.0, + }, + ], }, ensure_ascii=False, ) - routed_group.addObject(wire) + diagnostic_group.addObject(diagnostic) selected = [] gui.Selection = types.SimpleNamespace( clearSelection=lambda: selected.clear(), @@ -4386,19 +4728,17 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_main_path_detour_rejected_fallback_sources() + result = auto_routing_panel.AutoRoutingController().select_terminal_access_fallback_targets() - self.assertEqual(2, result["selected_main_path_detour_bridge_endpoint_objects"]) - self.assertEqual(1, result["selected_main_path_detour_rejected_fallback_sources"]) - self.assertEqual(1, result["selected_main_path_detour_current_route_sources"]) - self.assertEqual([fallback_source.Name], result["selected_main_path_detour_rejected_fallback_source_names"]) - self.assertEqual([current_source.Name], result["selected_main_path_detour_current_route_source_names"]) - self.assertEqual({"主线槽A": 1}, result["main_path_detour_current_route_source_label_counts"]) - self.assertEqual({"安装板布线面 -> 主线槽A": 1}, result["main_path_detour_bridge_pair_counts"]) - self.assertEqual([], result["missing_main_path_detour_current_route_refs"]) - self.assertEqual([fallback_source, current_source], selected) + self.assertEqual(1, result["selected_terminal_access_fallback_wires"]) + self.assertEqual(1, result["selected_terminal_access_fallback_targets"]) + self.assertEqual([wire.Name], result["selected_terminal_access_fallback_wire_names"]) + self.assertEqual([fallback_source.Name], result["selected_terminal_access_fallback_target_names"]) + self.assertEqual(["wire-missing", "缺失布线面"], result["missing_terminal_access_fallback_refs"]) + self.assertEqual([wire, fallback_source], selected) + self.assertNotIn(duplicate_label_source, selected) - def test_controller_selects_issue_wires_from_wire_object_issue_codes(self): + def test_controller_selects_terminal_access_fallback_wires_by_issue_code_when_samples_are_limited(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4407,33 +4747,33 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - sampled_wire = doc.addObject("Part::Feature", "QETRoutedConnection_sampled") - sampled_wire.Label = "N-SAMPLED: A1 -> B1 (BoundaryWarning)" + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + sampled_wire = doc.addObject("Part::Feature", "QETRoutedConnection_sampled_access_fallback") sampled_wire.RouteType = "RoutedConnection" sampled_wire.QetWireUuid = "wire-sampled" - hidden_issue_wire = doc.addObject("Part::Feature", "QETRoutedConnection_hidden") - hidden_issue_wire.Label = "N-HIDDEN: A2 -> B2 (LongAccessWarning)" - hidden_issue_wire.RouteType = "RoutedConnection" - hidden_issue_wire.QetWireUuid = "wire-hidden" - hidden_issue_wire.QetRouteIssueCodes = "long_terminal_access" + hidden_wire = doc.addObject("Part::Feature", "QETRoutedConnection_hidden_access_fallback") + hidden_wire.RouteType = "RoutedConnection" + hidden_wire.QetWireUuid = "wire-hidden" + hidden_wire.QetRouteIssueCodes = "terminal_access_fallback_targets" normal_wire = doc.addObject("Part::Feature", "QETRoutedConnection_normal") - normal_wire.Label = "N-OK: A3 -> B3 (Routed)" normal_wire.RouteType = "RoutedConnection" - normal_wire.QetWireUuid = "wire-ok" + normal_wire.QetWireUuid = "wire-normal" normal_wire.QetRouteIssueCodes = "" - diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "route_samples": [ + "terminal_access_fallback_target_samples": [ { "wire_uuid": "wire-sampled", - "wire_object_label": "N-SAMPLED: A1 -> B1 (BoundaryWarning)", - "issue_codes": ["boundary_warning"], - } - ] + "wire_label": "W1", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_label": "安装板布线面", + "target_distance": 35.0, + }, + ], }, ensure_ascii=False, ) @@ -4446,17 +4786,17 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_issue_wires() + result = auto_routing_panel.AutoRoutingController().select_terminal_access_fallback_targets() - self.assertEqual(2, result["selected_issue_wires"]) + self.assertEqual(2, result["selected_terminal_access_fallback_wires"]) self.assertEqual( - ["QETRoutedConnection_sampled", "QETRoutedConnection_hidden"], - result["selected_issue_wire_names"], + [sampled_wire.Name, hidden_wire.Name], + result["selected_terminal_access_fallback_wire_names"], ) - self.assertEqual([], result["missing_issue_wire_refs"]) - self.assertEqual([sampled_wire, hidden_issue_wire], selected) + self.assertEqual([sampled_wire, hidden_wire], selected) + self.assertNotIn(normal_wire, selected) - def test_controller_selects_long_terminal_accesses_from_latest_batch_diagnostic(self): + def test_controller_selects_terminal_access_carrier_for_fallback_endpoint(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4465,21 +4805,37 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - terminal_a = _terminal(doc, terminal_objects, "Terminal325", "terminal-325", app.Vector(0, 0, 0)) - terminal_b = _terminal(doc, terminal_objects, "Terminal326", "terminal-326", app.Vector(10, 0, 0)) diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + fallback_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSource") + fallback_source.Label = "安装板布线面" + access_carrier = doc.addObject("Part::Feature", "QETTerminalAccess_start") + access_carrier.QetRouteCarrierKind = "TerminalAccess" + access_carrier.Label = "起点端子接入" + wire = doc.addObject("Part::Feature", "QETRoutedConnection_access_fallback") + wire.RouteType = "RoutedConnection" + wire.QetWireUuid = "wire-fallback" + wire.QetRouteNetworkJson = json.dumps( + { + "start_terminal_access_carrier": access_carrier.Name, + "end_terminal_access_carrier": "", + }, + ensure_ascii=False, + ) diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "routing_path_network_diagnostic": { - "long_terminal_accesses": [ - {"terminal_uuid": "terminal-325", "name": "Terminal325", "label": "325"}, - {"terminal_uuid": "terminal-326", "name": "Terminal326", "label": "326"}, - {"terminal_uuid": "terminal-404", "name": "Terminal404", "label": "404"}, - ] - } + "terminal_access_fallback_target_samples": [ + { + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_name": fallback_source.Name, + "target_label": "安装板布线面", + }, + ], }, ensure_ascii=False, ) @@ -4492,14 +4848,13 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_long_terminal_accesses() + result = auto_routing_panel.AutoRoutingController().select_terminal_access_fallback_targets() - self.assertEqual(2, result["selected_long_terminal_accesses"]) - self.assertEqual(["Terminal325", "Terminal326"], result["selected_long_terminal_names"]) - self.assertEqual(["terminal-404"], result["missing_long_terminal_refs"]) - self.assertEqual([terminal_a, terminal_b], selected) + self.assertEqual(1, result["selected_terminal_access_fallback_access_carriers"]) + self.assertEqual([access_carrier.Name], result["selected_terminal_access_fallback_access_carrier_names"]) + self.assertEqual([wire, fallback_source, access_carrier], selected) - def test_controller_selects_long_terminal_access_devices_from_latest_batch_diagnostic(self): + def test_controller_selects_terminal_access_fallback_terminal_and_device_from_samples(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4508,39 +4863,42 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - device_pen = doc.addObject("App::DocumentObjectGroup", "DevicePEN") - device_pen.Label = "PEN" - device_pe = doc.addObject("App::DocumentObjectGroup", "DevicePE") - device_pe.Label = "PE" diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_UD8") + device.Label = "UD:8" + terminal = doc.addObject("Part::LocalCoordinateSystem", "QETTerminal_UD8_as") + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + "element-ud8", + "terminal-ud8-as", + "instance-ud8", + label="as", + ) + device.addObject(terminal) + fallback_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSource") + fallback_source.Label = "安装板布线面" + wire = doc.addObject("Part::Feature", "QETRoutedConnection_access_fallback") + wire.RouteType = "RoutedConnection" + wire.QetWireUuid = "wire-fallback" diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "routing_path_network_diagnostic": { - "long_terminal_accesses": [ - { - "terminal_uuid": "terminal-325", - "parent_device_name": "DevicePEN", - "parent_device_label": "PEN", - }, - { - "terminal_uuid": "terminal-326", - "parent_device_name": "DevicePEN", - "parent_device_label": "PEN", - }, - { - "terminal_uuid": "terminal-327", - "parent_device_label": "PE", - }, - { - "terminal_uuid": "terminal-404", - "parent_device_name": "Device404", - "parent_device_label": "404", - }, - ] - } + "terminal_access_fallback_target_samples": [ + { + "wire_uuid": "wire-fallback", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_name": fallback_source.Name, + "terminal_uuid": "terminal-ud8-as", + "terminal_name": terminal.Name, + "terminal_label": "as", + "parent_device_name": device.Name, + "parent_device_label": "UD:8", + }, + ], }, ensure_ascii=False, ) @@ -4553,14 +4911,15 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_long_terminal_access_devices() + result = auto_routing_panel.AutoRoutingController().select_terminal_access_fallback_targets() - self.assertEqual(2, result["selected_long_terminal_access_devices"]) - self.assertEqual(["DevicePEN", "DevicePE"], result["selected_long_terminal_access_device_names"]) - self.assertEqual(["Device404"], result["missing_long_terminal_access_device_refs"]) - self.assertEqual([device_pen, device_pe], selected) + self.assertEqual(1, result["selected_terminal_access_fallback_terminals"]) + self.assertEqual(1, result["selected_terminal_access_fallback_devices"]) + self.assertEqual([terminal.Name], result["selected_terminal_access_fallback_terminal_names"]) + self.assertEqual([device.Name], result["selected_terminal_access_fallback_device_names"]) + self.assertEqual([wire, fallback_source, terminal, device], selected) - def test_controller_selects_missing_terminal_devices_from_latest_batch_diagnostic(self): + def test_controller_selects_terminal_access_fallback_targets_from_path_network_diagnostic(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4569,37 +4928,50 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - device_a = doc.addObject("App::DocumentObjectGroup", "QETDevice_device_a") - terminal_objects.ensure_string_property(device_a, "QetElementUuid", "QET Exchange", "", "device-a") - terminal_objects.ensure_string_property(device_a, "QetInstanceId", "QET Exchange", "", "instance-a") - device_b = doc.addObject("App::DocumentObjectGroup", "QETDevice_device_b") - terminal_objects.ensure_string_property(device_b, "QetElementUuid", "QET Exchange", "", "device-b") diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") - diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") - diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_UD8") + device.Label = "UD:8" + terminal = doc.addObject("Part::LocalCoordinateSystem", "QETTerminal_UD8_as") + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + "element-ud8", + "terminal-ud8-as", + "instance-ud8", + label="as", + ) + device.addObject(terminal) + fallback_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSource") + fallback_source.Label = "安装板布线面" + access_carrier = doc.addObject("Part::Feature", "QETTerminalAccess_UD8_as") + access_carrier.QetRouteCarrierKind = "TerminalAccess" + access_carrier.Label = "UD:8/as 接入段" + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "missing_endpoint_samples": [ + "terminal_access_fallback_targets": [ { - "wire_uuid": "wire-a", - "start_found": False, - "start_terminal_uuid": "terminal-missing-a", - "start_instance_id": "instance-a", - "start_element_uuid": "device-a", - "end_found": True, + "target_kind": "RoutingRange", + "target_name": fallback_source.Name, + "target_label": "安装板布线面", + "access_carrier_name": access_carrier.Name, + "access_carrier_label": "UD:8/as 接入段", + "terminal_uuid": "terminal-ud8-as", + "terminal_name": terminal.Name, + "terminal_label": "as", + "parent_device_name": device.Name, + "parent_device_label": "UD:8", }, { - "wire_uuid": "wire-b", - "start_found": False, - "start_terminal_uuid": "terminal-missing-b", - "start_instance_id": "instance-missing", - "start_element_uuid": "device-missing", - "end_found": False, - "end_terminal_uuid": "terminal-missing-c", - "end_element_uuid": "device-b", + "target_kind": "RoutingRange", + "target_name": "MissingFallbackTarget", + "access_carrier_name": "MissingFallbackAccess", + "terminal_name": "MissingFallbackTerminal", + "parent_device_name": "MissingFallbackDevice", }, - ] + ], }, ensure_ascii=False, ) @@ -4612,14 +4984,24 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_missing_terminal_devices() + result = auto_routing_panel.AutoRoutingController().select_terminal_access_fallback_targets() - self.assertEqual(2, result["selected_missing_terminal_devices"]) - self.assertEqual(["QETDevice_device_a", "QETDevice_device_b"], result["selected_missing_terminal_device_names"]) - self.assertEqual(["terminal-missing-b"], result["missing_terminal_device_refs"]) - self.assertEqual([device_a, device_b], selected) + self.assertEqual(0, result["selected_terminal_access_fallback_wires"]) + self.assertEqual(1, result["selected_terminal_access_fallback_targets"]) + self.assertEqual(1, result["selected_terminal_access_fallback_access_carriers"]) + self.assertEqual(1, result["selected_terminal_access_fallback_terminals"]) + self.assertEqual(1, result["selected_terminal_access_fallback_devices"]) + self.assertEqual([fallback_source.Name], result["selected_terminal_access_fallback_target_names"]) + self.assertEqual([access_carrier.Name], result["selected_terminal_access_fallback_access_carrier_names"]) + self.assertEqual([terminal.Name], result["selected_terminal_access_fallback_terminal_names"]) + self.assertEqual([device.Name], result["selected_terminal_access_fallback_device_names"]) + self.assertEqual( + ["MissingFallbackTarget", "MissingFallbackAccess", "MissingFallbackTerminal", "MissingFallbackDevice"], + result["missing_terminal_access_fallback_refs"], + ) + self.assertEqual([fallback_source, access_carrier, terminal, device], selected) - def test_controller_selects_missing_terminal_device_by_device_label_fallback(self): + def test_controller_selects_terminal_access_endpoint_device_avoidance_from_path_diagnostic(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4628,23 +5010,48 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - device = doc.addObject("App::DocumentObjectGroup", "QETDevice_no_uuid") - device.Label = "缺端子设备A" diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") - diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") - diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_UD8") + device.Label = "UD:8" + terminal = doc.addObject("Part::LocalCoordinateSystem", "QETTerminal_UD8_as") + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + "element-ud8", + "terminal-ud8-as", + "instance-ud8", + label="as", + ) + device.addObject(terminal) + target_path = doc.addObject("Part::Feature", "QETRouteCarrier_UserPathMain") + target_path.Label = "柜内主路径A" + access_carrier = doc.addObject("Part::Feature", "QETTerminalAccess_UD8_as") + access_carrier.QetRouteCarrierKind = "TerminalAccess" + access_carrier.Label = "UD:8/as 接入段" + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "missing_endpoint_samples": [ + "terminal_access_endpoint_device_avoidance": [ { - "wire_uuid": "wire-a", - "start_found": False, - "start_terminal_uuid": "terminal-missing-a", - "start_device_label": "缺端子设备A", - "end_found": True, - } - ] + "terminal_uuid": "terminal-ud8-as", + "terminal_name": terminal.Name, + "terminal_label": "as", + "parent_device_name": device.Name, + "parent_device_label": "UD:8", + "target_name": target_path.Name, + "target_label": "柜内主路径A", + "access_carrier_name": access_carrier.Name, + "access_carrier_label": "UD:8/as 接入段", + }, + { + "terminal_uuid": "terminal-missing", + "terminal_name": "MissingTerminal", + "target_name": "MissingPath", + "access_carrier_name": "MissingAccess", + }, + ], }, ensure_ascii=False, ) @@ -4657,14 +5064,24 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_missing_terminal_devices() + result = auto_routing_panel.AutoRoutingController().select_terminal_access_endpoint_device_avoidance() - self.assertEqual(1, result["selected_missing_terminal_devices"]) - self.assertEqual(["QETDevice_no_uuid"], result["selected_missing_terminal_device_names"]) - self.assertEqual([], result["missing_terminal_device_refs"]) - self.assertEqual([device], selected) + self.assertEqual(4, result["selected_terminal_access_endpoint_avoidance_objects"]) + self.assertEqual(1, result["selected_terminal_access_endpoint_avoidance_terminals"]) + self.assertEqual(1, result["selected_terminal_access_endpoint_avoidance_devices"]) + self.assertEqual(1, result["selected_terminal_access_endpoint_avoidance_targets"]) + self.assertEqual(1, result["selected_terminal_access_endpoint_avoidance_access_carriers"]) + self.assertEqual([terminal.Name], result["selected_terminal_access_endpoint_avoidance_terminal_names"]) + self.assertEqual([device.Name], result["selected_terminal_access_endpoint_avoidance_device_names"]) + self.assertEqual([target_path.Name], result["selected_terminal_access_endpoint_avoidance_target_names"]) + self.assertEqual( + [access_carrier.Name], + result["selected_terminal_access_endpoint_avoidance_access_carrier_names"], + ) + self.assertEqual(["MissingTerminal", "MissingPath", "MissingAccess"], result["missing_terminal_access_endpoint_avoidance_refs"]) + self.assertEqual([terminal, device, target_path, access_carrier], selected) - def test_controller_reports_missing_terminal_device_reason_counts_when_device_not_in_scene(self): + def test_controller_selects_unconnected_terminal_access_issues_from_path_diagnostic(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4674,25 +5091,37 @@ class AutoRoutingTest(unittest.TestCase): app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") - diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") - diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + device = doc.addObject("App::DocumentObjectGroup", "DeviceUnconnected") + device.Label = "未接入设备" + terminal = _terminal( + doc, + terminal_objects, + "TerminalUnconnected", + "terminal-unconnected", + app.Vector(0, 0, 0), + ) + device.addObject(terminal) + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "missing_endpoint_samples": [ + "unconnected_terminals": [ { - "wire_uuid": "wire-a", - "start_found": False, - "start_terminal_uuid": "terminal-missing-a", - "start_element_uuid": "device-a", - "start_instance_id": "instance-a", - "start_device_label": "UD:8", - "start_terminal_display": "as", - "start_missing_endpoint_reason_code": "device_not_in_3d_scene", - "start_missing_endpoint_reason_label": "该 2D 设备未在 FreeCAD 场景中找到", - "end_found": True, - } - ] + "name": terminal.Name, + "label": "A1", + "terminal_uuid": "terminal-unconnected", + "parent_device_name": device.Name, + "parent_device_label": "未接入设备", + "nearest_network_distance_mm": 125.0, + "terminal_access_max_distance_mm": 50.0, + }, + { + "name": "MissingUnconnectedTerminal", + "terminal_uuid": "terminal-missing-unconnected", + "parent_device_name": "MissingUnconnectedDevice", + }, + ], }, ensure_ascii=False, ) @@ -4705,17 +5134,18 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_missing_terminal_devices() + result = auto_routing_panel.AutoRoutingController().select_unconnected_terminal_access_issues() - self.assertEqual(0, result["selected_missing_terminal_devices"]) - self.assertEqual(["terminal-missing-a"], result["missing_terminal_device_refs"]) - self.assertEqual(["UD:8"], result["missing_terminal_device_labels"]) - self.assertEqual(["instance-a"], result["missing_terminal_device_instance_ids"]) - self.assertEqual(["device-a"], result["missing_terminal_device_element_uuids"]) - self.assertEqual({"device_not_in_3d_scene": 1}, result["missing_terminal_device_reason_counts"]) - self.assertEqual([], selected) + self.assertEqual(2, result["selected_unconnected_terminal_access_objects"]) + self.assertEqual(1, result["selected_unconnected_terminal_access_terminals"]) + self.assertEqual(1, result["selected_unconnected_terminal_access_devices"]) + self.assertEqual([terminal.Name], result["selected_unconnected_terminal_access_terminal_names"]) + self.assertEqual([device.Name], result["selected_unconnected_terminal_access_device_names"]) + self.assertEqual(["MissingUnconnectedTerminal", "MissingUnconnectedDevice"], result["missing_unconnected_terminal_access_refs"]) + self.assertEqual(125.0, result["max_unconnected_terminal_access_distance_mm"]) + self.assertEqual([terminal, device], selected) - def test_controller_selects_found_counterpart_terminals_from_missing_endpoint_samples(self): + def test_controller_selects_terminal_exit_issue_terminals_from_path_diagnostic(self): _install_fake_freecad() terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -4724,47 +5154,108 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - end_terminal = _terminal(doc, terminal_objects, "TerminalFoundEnd", "terminal-found-end", app.Vector(20, 0, 0)) - start_terminal = _terminal( + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + corrected_device = doc.addObject("App::DocumentObjectGroup", "DeviceCorrected") + corrected_device.Label = "方向校正设备" + corrected_terminal = _terminal( doc, terminal_objects, - "TerminalFoundStart", - "terminal-found-start", - app.Vector(40, 0, 0), + "TerminalCorrectedExit", + "terminal-corrected", + app.Vector(0, 0, 0), ) - diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") - diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") - diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" - diagnostic.QetProjectUuid = "project-1" - diagnostic.QetDiagnosticJson = json.dumps( - { - "missing_endpoint_samples": [ - { - "wire_uuid": "wire-a", - "wire_label": "F6", - "start_found": False, - "start_terminal_uuid": "terminal-missing-start", - "end_found": True, - "end_terminal_uuid": "terminal-found-end", - "end_terminal_display": "6", + corrected_device.addObject(corrected_terminal) + capped_device = doc.addObject("App::DocumentObjectGroup", "DeviceCapped") + capped_device.Label = "长度截断设备" + capped_terminal = _terminal( + doc, + terminal_objects, + "TerminalCappedExit", + "terminal-capped", + app.Vector(100, 0, 0), + ) + capped_device.addObject(capped_terminal) + invalid_device = doc.addObject("App::DocumentObjectGroup", "DeviceInvalidDirection") + invalid_device.Label = "方向无效设备" + invalid_terminal = _terminal( + doc, + terminal_objects, + "TerminalInvalidDirection", + "terminal-invalid-direction", + app.Vector(200, 0, 0), + ) + invalid_device.addObject(invalid_terminal) + invalid_local_device = doc.addObject("App::DocumentObjectGroup", "DeviceInvalidLocalRoute") + invalid_local_device.Label = "局部路径无效设备" + invalid_local_terminal = _terminal( + doc, + terminal_objects, + "TerminalInvalidLocalRoute", + "terminal-invalid-local-route", + app.Vector(300, 0, 0), + ) + invalid_local_device.addObject(invalid_local_terminal) + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "corrected_terminal_exits": [ + { + "name": corrected_terminal.Name, + "label": "A1", + "terminal_uuid": "terminal-corrected", + "parent_device_name": corrected_device.Name, + "parent_device_label": "方向校正设备", }, { - "wire_uuid": "wire-b", - "wire_label": "N2", - "start_found": True, - "start_terminal_uuid": "terminal-found-start", - "start_terminal_display": "1", - "end_found": False, - "end_terminal_uuid": "terminal-missing-end", + "name": "MissingCorrectedTerminal", + "terminal_uuid": "terminal-missing-corrected", + "parent_device_name": "MissingCorrectedDevice", }, + ], + "capped_terminal_exits": [ { - "wire_uuid": "wire-c", - "start_found": False, - "start_terminal_uuid": "terminal-missing-both-a", - "end_found": False, - "end_terminal_uuid": "terminal-missing-both-b", + "name": capped_terminal.Name, + "label": "B1", + "terminal_uuid": "terminal-capped", + "parent_device_name": capped_device.Name, + "parent_device_label": "长度截断设备", }, - ] + { + "name": "MissingCappedTerminal", + "terminal_uuid": "terminal-missing-capped", + "parent_device_name": "MissingCappedDevice", + }, + ], + "invalid_terminal_exit_directions": [ + { + "name": invalid_terminal.Name, + "label": "C1", + "terminal_uuid": "terminal-invalid-direction", + "parent_device_name": invalid_device.Name, + "parent_device_label": "方向无效设备", + }, + { + "name": "MissingInvalidDirectionTerminal", + "terminal_uuid": "terminal-missing-invalid-direction", + "parent_device_name": "MissingInvalidDirectionDevice", + }, + ], + "invalid_terminal_local_routes": [ + { + "name": invalid_local_terminal.Name, + "label": "D1", + "terminal_uuid": "terminal-invalid-local-route", + "parent_device_name": invalid_local_device.Name, + "parent_device_label": "局部路径无效设备", + }, + { + "name": "MissingInvalidLocalRouteTerminal", + "terminal_uuid": "terminal-missing-invalid-local-route", + "parent_device_name": "MissingInvalidLocalRouteDevice", + }, + ], }, ensure_ascii=False, ) @@ -4777,54 +5268,118 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_missing_terminal_counterpart_terminals() + result = auto_routing_panel.AutoRoutingController().select_terminal_exit_issue_terminals() - self.assertEqual(2, result["selected_missing_terminal_counterpart_terminals"]) - self.assertEqual(["TerminalFoundEnd", "TerminalFoundStart"], result["selected_missing_terminal_counterpart_terminal_names"]) - self.assertEqual(["terminal-missing-both-a", "terminal-missing-both-b"], result["missing_terminal_counterpart_refs"]) - self.assertEqual([end_terminal, start_terminal], selected) + self.assertEqual(8, result["selected_terminal_exit_issue_objects"]) + self.assertEqual(4, result["selected_terminal_exit_issue_terminals"]) + self.assertEqual(4, result["selected_terminal_exit_issue_devices"]) + self.assertEqual(1, result["selected_terminal_exit_corrected_terminals"]) + self.assertEqual(1, result["selected_terminal_exit_capped_terminals"]) + self.assertEqual(1, result["selected_terminal_exit_invalid_direction_terminals"]) + self.assertEqual(1, result["selected_terminal_exit_invalid_local_route_terminals"]) + self.assertEqual( + [corrected_terminal.Name, capped_terminal.Name, invalid_terminal.Name, invalid_local_terminal.Name], + result["selected_terminal_exit_issue_terminal_names"], + ) + self.assertEqual( + [corrected_device.Name, capped_device.Name, invalid_device.Name, invalid_local_device.Name], + result["selected_terminal_exit_issue_device_names"], + ) + self.assertEqual( + [ + "MissingCorrectedTerminal", + "MissingCorrectedDevice", + "MissingCappedTerminal", + "MissingCappedDevice", + "MissingInvalidDirectionTerminal", + "MissingInvalidDirectionDevice", + "MissingInvalidLocalRouteTerminal", + "MissingInvalidLocalRouteDevice", + ], + result["missing_terminal_exit_issue_refs"], + ) + self.assertEqual( + [ + corrected_terminal, + corrected_device, + capped_terminal, + capped_device, + invalid_terminal, + invalid_device, + invalid_local_terminal, + invalid_local_device, + ], + selected, + ) - def test_controller_selects_missing_terminal_candidate_terminals_from_latest_batch_diagnostic(self): + def test_route_issue_codes_include_terminal_access_fallback_targets(self): _install_fake_freecad() - terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + route_data = { + "network": { + "start_terminal_access_target_kind": "RoutingRange", + "end_terminal_access_target_kind": "WireDuct", + }, + "route_track": {"segments": []}, + } + + issue_codes = auto_routing._route_issue_codes(route_data, []) + + self.assertIn("terminal_access_fallback_targets", issue_codes) + + def test_controller_selects_main_path_detour_bridge_endpoint_sources_from_summary(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - candidate_a1 = _terminal(doc, terminal_objects, "TerminalA1", "terminal-a1", app.Vector(0, 0, 0)) - candidate_a2 = _terminal(doc, terminal_objects, "TerminalA2", "terminal-a2", app.Vector(10, 0, 0)) - found_b1 = _terminal(doc, terminal_objects, "TerminalB1", "terminal-b1", app.Vector(20, 0, 0)) - for terminal in (candidate_a1, candidate_a2): - terminal_objects.ensure_string_property(terminal, "QetElementUuid", "QET Exchange", "", "device-a") - terminal_objects.ensure_string_property(terminal, "QetInstanceId", "QET Exchange", "", "instance-a") - diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") - diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") - diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" - diagnostic.QetProjectUuid = "project-1" - diagnostic.QetDiagnosticJson = json.dumps( + wiring_objects.ensure_diagnostic_group(doc, "project-1") + routed_group = wiring_objects.ensure_routed_group(doc, "project-1") + fallback_source = doc.addObject("Part::Feature", "CabinetRoutingRangeSource") + fallback_source.QetRouteSourceLabel = "安装板布线面" + current_source = doc.addObject("Part::Feature", "MainWireDuctSource") + current_source.QetRouteSourceLabel = "主线槽A" + wire = doc.addObject("Part::Feature", "QETRoutedConnection_main_path_pair") + wire.Label = "N-PAIR: A1 -> B1" + wire.RouteType = "RoutedConnection" + wire.QetWireUuid = "wire-main-path-pair" + wire.QetRouteIssueCodes = "collision_warnings, main_path_detour_missing" + wire.PropertiesList = [ + "QetStartTerminalUuid", + "QetEndTerminalUuid", + "QetRouteDiagnosticsJson", + "QetRouteTrackJson", + ] + wire.QetStartTerminalUuid = "terminal-a" + wire.QetEndTerminalUuid = "terminal-b" + wire.QetRouteDiagnosticsJson = json.dumps( { - "missing_endpoint_samples": [ + "selective_collision_reroute": { + "status": "RejectedFallback", + "rejected_fallback_kinds": ["RoutingRange"], + "rejected_fallback_labels": ["安装板布线面"], + } + }, + ensure_ascii=False, + ) + wire.QetRouteTrackJson = json.dumps( + { + "segments": [ { - "wire_uuid": "wire-a", - "start_found": False, - "start_terminal_uuid": "terminal-missing-a", - "start_instance_id": "instance-a", - "start_element_uuid": "device-a", - "start_missing_endpoint_reason_code": "terminal_uuid_not_in_element", - "start_instance_terminal_samples": [ - {"name": "TerminalA1", "terminal_uuid": "terminal-a1"}, - {"name": "TerminalA2", "terminal_uuid": "terminal-a2"}, - ], - "end_found": True, - "end_terminal_uuid": "terminal-b1", + "carrier": { + "kind": "WireDuct", + "source_label": "主线槽A", + "source_name": current_source.Name, + } } ] }, ensure_ascii=False, ) - diagnostic_group.addObject(diagnostic) + routed_group.addObject(wire) selected = [] gui.Selection = types.SimpleNamespace( clearSelection=lambda: selected.clear(), @@ -4833,66 +5388,54 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_missing_terminal_candidate_terminals() + result = auto_routing_panel.AutoRoutingController().select_main_path_detour_rejected_fallback_sources() - self.assertEqual(2, result["selected_missing_terminal_candidate_terminals"]) - self.assertEqual(["TerminalA1", "TerminalA2"], result["selected_missing_terminal_candidate_terminal_names"]) - self.assertEqual([], result["missing_terminal_candidate_terminal_refs"]) - self.assertEqual([candidate_a1, candidate_a2], selected) - self.assertNotIn(found_b1, selected) + self.assertEqual(2, result["selected_main_path_detour_bridge_endpoint_objects"]) + self.assertEqual(1, result["selected_main_path_detour_rejected_fallback_sources"]) + self.assertEqual(1, result["selected_main_path_detour_current_route_sources"]) + self.assertEqual([fallback_source.Name], result["selected_main_path_detour_rejected_fallback_source_names"]) + self.assertEqual([current_source.Name], result["selected_main_path_detour_current_route_source_names"]) + self.assertEqual({"主线槽A": 1}, result["main_path_detour_current_route_source_label_counts"]) + self.assertEqual({"安装板布线面 -> 主线槽A": 1}, result["main_path_detour_bridge_pair_counts"]) + self.assertEqual([], result["missing_main_path_detour_current_route_refs"]) + self.assertEqual([fallback_source, current_source], selected) - def test_controller_selects_boundary_issue_route_carriers_and_terminals(self): + def test_controller_selects_issue_wires_from_wire_object_issue_codes(self): _install_fake_freecad() - terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(140, 0, 20)], - label="柜内主路径A", - project_uuid="project-1", - kind="UserPath", - ) - terminal = _terminal(doc, terminal_objects, "TerminalOutside", "terminal-outside", app.Vector(140, 0, 0)) + sampled_wire = doc.addObject("Part::Feature", "QETRoutedConnection_sampled") + sampled_wire.Label = "N-SAMPLED: A1 -> B1 (BoundaryWarning)" + sampled_wire.RouteType = "RoutedConnection" + sampled_wire.QetWireUuid = "wire-sampled" + hidden_issue_wire = doc.addObject("Part::Feature", "QETRoutedConnection_hidden") + hidden_issue_wire.Label = "N-HIDDEN: A2 -> B2 (LongAccessWarning)" + hidden_issue_wire.RouteType = "RoutedConnection" + hidden_issue_wire.QetWireUuid = "wire-hidden" + hidden_issue_wire.QetRouteIssueCodes = "long_terminal_access" + normal_wire = doc.addObject("Part::Feature", "QETRoutedConnection_normal") + normal_wire.Label = "N-OK: A3 -> B3 (Routed)" + normal_wire.RouteType = "RoutedConnection" + normal_wire.QetWireUuid = "wire-ok" + normal_wire.QetRouteIssueCodes = "" diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") - diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") - diagnostic.QetDiagnosticKind = "RoutingPathNetwork" + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" diagnostic.QetProjectUuid = "project-1" diagnostic.QetDiagnosticJson = json.dumps( { - "route_carriers_outside_boundary": [ - { - "carrier": { - "name": route.Name, - "label": "柜内主路径A", - }, - "outside_point_count": 1, - }, - { - "carrier": { - "name": "MissingRouteCarrier", - "label": "缺失路径", - }, - "outside_point_count": 1, - }, - ], - "terminals_outside_boundary": [ - { - "name": "TerminalOutside", - "label": "TerminalOutside", - "terminal_uuid": "terminal-outside", - "outside_point_count": 2, - }, + "route_samples": [ { - "name": "MissingTerminal", - "terminal_uuid": "terminal-missing", - "outside_point_count": 1, - }, - ], + "wire_uuid": "wire-sampled", + "wire_object_label": "N-SAMPLED: A1 -> B1 (BoundaryWarning)", + "issue_codes": ["boundary_warning"], + } + ] }, ensure_ascii=False, ) @@ -4905,341 +5448,570 @@ class AutoRoutingTest(unittest.TestCase): getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().select_boundary_issue_route_carriers_and_terminals() + result = auto_routing_panel.AutoRoutingController().select_issue_wires() - self.assertEqual(1, result["selected_boundary_route_carriers"]) - self.assertEqual(1, result["selected_boundary_terminals"]) - self.assertEqual([route.Name], result["selected_boundary_route_carrier_names"]) - self.assertEqual(["TerminalOutside"], result["selected_boundary_terminal_names"]) - self.assertEqual(["MissingRouteCarrier"], result["missing_boundary_route_carrier_refs"]) - self.assertEqual(["MissingTerminal"], result["missing_boundary_terminal_refs"]) - self.assertEqual([route, terminal], selected) + self.assertEqual(2, result["selected_issue_wires"]) + self.assertEqual( + ["QETRoutedConnection_sampled", "QETRoutedConnection_hidden"], + result["selected_issue_wire_names"], + ) + self.assertEqual([], result["missing_issue_wire_refs"]) + self.assertEqual([sampled_wire, hidden_issue_wire], selected) - def test_controller_marks_selected_route_carrier_constraint_modes(self): + def test_controller_selects_long_terminal_accesses_from_latest_batch_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - carrier = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="测试路径", - project_uuid="project-1", - kind="UserPath", - ) - gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=carrier)], - ) - controller = auto_routing_panel.AutoRoutingController() - - forbidden = controller.mark_selected_route_carriers_forbidden() - required = controller.mark_selected_route_carriers_required() - cleared = controller.clear_selected_route_carrier_constraints() - - self.assertEqual(1, forbidden["route_constraint_carriers"]) - self.assertEqual(1, required["route_constraint_carriers"]) - self.assertEqual(1, cleared["route_constraint_carriers"]) - self.assertEqual("", carrier.QetRouteConstraintMode) + terminal_a = _terminal(doc, terminal_objects, "Terminal325", "terminal-325", app.Vector(0, 0, 0)) + terminal_b = _terminal(doc, terminal_objects, "Terminal326", "terminal-326", app.Vector(10, 0, 0)) + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "routing_path_network_diagnostic": { + "long_terminal_accesses": [ + {"terminal_uuid": "terminal-325", "name": "Terminal325", "label": "325"}, + {"terminal_uuid": "terminal-326", "name": "Terminal326", "label": "326"}, + {"terminal_uuid": "terminal-404", "name": "Terminal404", "label": "404"}, + ] + } + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], + ) - def test_controller_sets_selected_route_carrier_capacity(self): + result = auto_routing_panel.AutoRoutingController().select_long_terminal_accesses() + + self.assertEqual(2, result["selected_long_terminal_accesses"]) + self.assertEqual(["Terminal325", "Terminal326"], result["selected_long_terminal_names"]) + self.assertEqual(["terminal-404"], result["missing_long_terminal_refs"]) + self.assertEqual([terminal_a, terminal_b], selected) + + def test_controller_selects_long_terminal_accesses_from_path_network_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - source = doc.addObject("Sketcher::SketchObject", "CapacityPathSketch") - source.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], - ) - carrier = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="测试路径", - project_uuid="project-1", - kind="UserPath", + terminal_a = _terminal(doc, terminal_objects, "TerminalPathLongA", "terminal-path-a", app.Vector(0, 0, 0)) + terminal_b = _terminal(doc, terminal_objects, "TerminalPathLongB", "terminal-path-b", app.Vector(10, 0, 0)) + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "long_terminal_accesses": [ + {"terminal_uuid": "terminal-path-a", "name": "TerminalPathLongA", "label": "A"}, + {"terminal_uuid": "terminal-path-b", "name": "TerminalPathLongB", "label": "B"}, + {"terminal_uuid": "terminal-path-missing", "name": "TerminalPathMissing"}, + ] + }, + ensure_ascii=False, ) - routing_network._mark_user_path_source(source, carrier) + diagnostic_group.addObject(diagnostic) + selected = [] gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=source)], + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - controller = auto_routing_panel.AutoRoutingController(options={"selected_route_capacity": 5}) - report = controller.set_selected_route_carriers_capacity() + result = auto_routing_panel.AutoRoutingController().select_long_terminal_accesses() - self.assertEqual(1, report["route_capacity_carriers"]) - self.assertEqual(1, report["route_capacity_sources"]) - self.assertEqual(5, source.QetRouteCarrierCapacity) - self.assertEqual(5, carrier.QetRouteCarrierCapacity) + self.assertEqual(2, result["selected_long_terminal_accesses"]) + self.assertEqual(["TerminalPathLongA", "TerminalPathLongB"], result["selected_long_terminal_names"]) + self.assertEqual(["terminal-path-missing"], result["missing_long_terminal_refs"]) + self.assertEqual([terminal_a, terminal_b], selected) - def test_controller_reports_selected_source_route_constraint_before_carrier_generation(self): + def test_controller_selects_long_terminal_access_devices_from_latest_batch_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Sketcher::SketchObject", "FutureUserRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + device_pen = doc.addObject("App::DocumentObjectGroup", "DevicePEN") + device_pen.Label = "PEN" + device_pe = doc.addObject("App::DocumentObjectGroup", "DevicePE") + device_pe.Label = "PE" + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "routing_path_network_diagnostic": { + "long_terminal_accesses": [ + { + "terminal_uuid": "terminal-325", + "parent_device_name": "DevicePEN", + "parent_device_label": "PEN", + }, + { + "terminal_uuid": "terminal-326", + "parent_device_name": "DevicePEN", + "parent_device_label": "PEN", + }, + { + "terminal_uuid": "terminal-327", + "parent_device_label": "PE", + }, + { + "terminal_uuid": "terminal-404", + "parent_device_name": "Device404", + "parent_device_label": "404", + }, + ] + } + }, + ensure_ascii=False, ) + diagnostic_group.addObject(diagnostic) + selected = [] gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - report = auto_routing_panel.AutoRoutingController().mark_selected_route_carriers_required() + result = auto_routing_panel.AutoRoutingController().select_long_terminal_access_devices() - self.assertEqual(0, report["route_constraint_carriers"]) - self.assertEqual(1, report["route_constraint_sources"]) - self.assertEqual("Required", route_path.QetRouteConstraintMode) + self.assertEqual(2, result["selected_long_terminal_access_devices"]) + self.assertEqual(["DevicePEN", "DevicePE"], result["selected_long_terminal_access_device_names"]) + self.assertEqual(["Device404"], result["missing_long_terminal_access_device_refs"]) + self.assertEqual([device_pen, device_pe], selected) - def test_controller_clears_all_route_carrier_constraint_modes(self): + def test_controller_selects_long_terminal_access_devices_from_path_network_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - required = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="必经路径", - project_uuid="project-1", - kind="UserPath", + device_a = doc.addObject("App::DocumentObjectGroup", "DevicePathLongA") + device_a.Label = "长接入设备A" + device_b = doc.addObject("App::DocumentObjectGroup", "DevicePathLongB") + device_b.Label = "长接入设备B" + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "long_terminal_accesses": [ + { + "terminal_uuid": "terminal-path-a", + "parent_device_name": "DevicePathLongA", + "parent_device_label": "长接入设备A", + }, + { + "terminal_uuid": "terminal-path-b", + "parent_device_label": "长接入设备B", + }, + { + "terminal_uuid": "terminal-path-missing", + "parent_device_name": "DevicePathMissing", + }, + ] + }, + ensure_ascii=False, ) - forbidden = routing_network.create_route_carrier( - doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="禁经路径", - project_uuid="project-1", - kind="UserPath", + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - required.QetRouteConstraintMode = "Required" - forbidden.QetRouteConstraintMode = "Forbidden" - controller = auto_routing_panel.AutoRoutingController() - report = controller.clear_all_route_carrier_constraints() + result = auto_routing_panel.AutoRoutingController().select_long_terminal_access_devices() - self.assertEqual(2, report["route_constraint_carriers"]) - self.assertEqual("", required.QetRouteConstraintMode) - self.assertEqual("", forbidden.QetRouteConstraintMode) - self.assertNotIn("路径约束", controller.summary()) + self.assertEqual(2, result["selected_long_terminal_access_devices"]) + self.assertEqual(["DevicePathLongA", "DevicePathLongB"], result["selected_long_terminal_access_device_names"]) + self.assertEqual(["DevicePathMissing"], result["missing_long_terminal_access_device_refs"]) + self.assertEqual([device_a, device_b], selected) - def test_selected_source_route_constraint_survives_carrier_regeneration(self): + def test_controller_selects_missing_terminal_devices_from_latest_batch_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "UserRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + device_a = doc.addObject("App::DocumentObjectGroup", "QETDevice_device_a") + terminal_objects.ensure_string_property(device_a, "QetElementUuid", "QET Exchange", "", "device-a") + terminal_objects.ensure_string_property(device_a, "QetInstanceId", "QET Exchange", "", "instance-a") + device_b = doc.addObject("App::DocumentObjectGroup", "QETDevice_device_b") + terminal_objects.ensure_string_property(device_b, "QetElementUuid", "QET Exchange", "", "device-b") + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "missing_endpoint_samples": [ + { + "wire_uuid": "wire-a", + "start_found": False, + "start_terminal_uuid": "terminal-missing-a", + "start_instance_id": "instance-a", + "start_element_uuid": "device-a", + "end_found": True, + }, + { + "wire_uuid": "wire-b", + "start_found": False, + "start_terminal_uuid": "terminal-missing-b", + "start_instance_id": "instance-missing", + "start_element_uuid": "device-missing", + "end_found": False, + "end_terminal_uuid": "terminal-missing-c", + "end_element_uuid": "device-b", + }, + ] + }, + ensure_ascii=False, ) - selection = [FakeSelectionItem(obj=route_path)] - first = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") - routing_network.clear_route_carriers(doc) - second = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", - ) + result = auto_routing_panel.AutoRoutingController().select_missing_terminal_devices() - self.assertEqual(1, len(first)) - self.assertEqual(1, len(second)) - self.assertEqual("Required", route_path.QetRouteConstraintMode) - self.assertEqual("Required", second[0].QetRouteConstraintMode) + self.assertEqual(2, result["selected_missing_terminal_devices"]) + self.assertEqual(["QETDevice_device_a", "QETDevice_device_b"], result["selected_missing_terminal_device_names"]) + self.assertEqual(["terminal-missing-b"], result["missing_terminal_device_refs"]) + self.assertEqual([device_a, device_b], selected) - def test_refreshing_user_path_clears_stale_constraint_when_source_is_cleared(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "UserRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], - ) - selection = [FakeSelectionItem(obj=route_path)] - carriers = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", - ) - route_path.QetRouteConstraintMode = "" - carriers[0].QetRouteConstraintMode = "Required" - - refreshed = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", - ) - - self.assertEqual(1, len(refreshed)) - self.assertEqual("", refreshed[0].QetRouteConstraintMode) - - def test_selected_multi_wire_source_route_constraint_marks_all_user_paths(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Sketcher::SketchObject", "MultiWireRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 120, 0, 80, 20, 20), - wires=[ - FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), - FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), - ], - ) - selection = [FakeSelectionItem(obj=route_path)] - carriers = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", - ) - - marked = routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") - - self.assertEqual(2, len(carriers)) - self.assertEqual(2, len(marked)) - self.assertEqual("Required", route_path.QetRouteConstraintMode) - self.assertEqual(["Required", "Required"], [carrier.QetRouteConstraintMode for carrier in carriers]) - - def test_controller_clears_selected_multi_wire_source_route_constraints(self): + def test_controller_selects_missing_terminal_device_by_device_label_fallback(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Sketcher::SketchObject", "MultiWireRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 120, 0, 80, 20, 20), - wires=[ - FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), - FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), - ], - ) - selection = [FakeSelectionItem(obj=route_path)] - carriers = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_no_uuid") + device.Label = "缺端子设备A" + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "missing_endpoint_samples": [ + { + "wire_uuid": "wire-a", + "start_found": False, + "start_terminal_uuid": "terminal-missing-a", + "start_device_label": "缺端子设备A", + "end_found": True, + } + ] + }, + ensure_ascii=False, ) - routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") + diagnostic_group.addObject(diagnostic) + selected = [] gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: selection, + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - cleared = auto_routing_panel.AutoRoutingController().clear_selected_route_carrier_constraints() + result = auto_routing_panel.AutoRoutingController().select_missing_terminal_devices() - self.assertEqual(2, cleared["route_constraint_carriers"]) - self.assertEqual("", route_path.QetRouteConstraintMode) - self.assertEqual(["", ""], [carrier.QetRouteConstraintMode for carrier in carriers]) + self.assertEqual(1, result["selected_missing_terminal_devices"]) + self.assertEqual(["QETDevice_no_uuid"], result["selected_missing_terminal_device_names"]) + self.assertEqual([], result["missing_terminal_device_refs"]) + self.assertEqual([device], selected) - def test_clear_all_route_constraints_clears_source_objects_too(self): + def test_controller_reports_missing_terminal_device_reason_counts_when_device_not_in_scene(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "UserRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "missing_endpoint_samples": [ + { + "wire_uuid": "wire-a", + "start_found": False, + "start_terminal_uuid": "terminal-missing-a", + "start_element_uuid": "device-a", + "start_instance_id": "instance-a", + "start_device_label": "UD:8", + "start_terminal_display": "as", + "start_missing_endpoint_reason_code": "device_not_in_3d_scene", + "start_missing_endpoint_reason_label": "该 2D 设备未在 FreeCAD 场景中找到", + "end_found": True, + } + ] + }, + ensure_ascii=False, ) - selection = [FakeSelectionItem(obj=route_path)] - carriers = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") - report = routing_network.clear_all_route_constraint_modes(doc) + result = auto_routing_panel.AutoRoutingController().select_missing_terminal_devices() - self.assertEqual(1, report["route_constraint_carriers"]) - self.assertEqual(1, report["route_constraint_sources"]) - self.assertEqual("", route_path.QetRouteConstraintMode) - self.assertEqual("", carriers[0].QetRouteConstraintMode) + self.assertEqual(0, result["selected_missing_terminal_devices"]) + self.assertEqual(["terminal-missing-a"], result["missing_terminal_device_refs"]) + self.assertEqual(["UD:8"], result["missing_terminal_device_labels"]) + self.assertEqual(["instance-a"], result["missing_terminal_device_instance_ids"]) + self.assertEqual(["device-a"], result["missing_terminal_device_element_uuids"]) + self.assertEqual({"device_not_in_3d_scene": 1}, result["missing_terminal_device_reason_counts"]) + self.assertEqual([], selected) - def test_selected_points_object_can_be_used_as_user_path(self): + def test_controller_selects_found_counterpart_terminals_from_missing_endpoint_samples(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "PointRoute") - route_path.Points = [ - app.Vector(0, 0, 20), - app.Vector(40, 0, 20), - app.Vector(40, 30, 20), - ] + end_terminal = _terminal(doc, terminal_objects, "TerminalFoundEnd", "terminal-found-end", app.Vector(20, 0, 0)) + start_terminal = _terminal( + doc, + terminal_objects, + "TerminalFoundStart", + "terminal-found-start", + app.Vector(40, 0, 0), + ) + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "missing_endpoint_samples": [ + { + "wire_uuid": "wire-a", + "wire_label": "F6", + "start_found": False, + "start_terminal_uuid": "terminal-missing-start", + "end_found": True, + "end_terminal_uuid": "terminal-found-end", + "end_terminal_display": "6", + }, + { + "wire_uuid": "wire-b", + "wire_label": "N2", + "start_found": True, + "start_terminal_uuid": "terminal-found-start", + "start_terminal_display": "1", + "end_found": False, + "end_terminal_uuid": "terminal-missing-end", + }, + { + "wire_uuid": "wire-c", + "start_found": False, + "start_terminal_uuid": "terminal-missing-both-a", + "end_found": False, + "end_terminal_uuid": "terminal-missing-both-b", + }, + ] + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + selected = [] gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], ) - result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() - carriers = routing_network.collect_route_carriers(doc) + result = auto_routing_panel.AutoRoutingController().select_missing_terminal_counterpart_terminals() - self.assertEqual(1, result["user_path_carriers"]) - self.assertEqual( - [(0.0, 0.0, 20.0), (40.0, 0.0, 20.0), (40.0, 30.0, 20.0)], - [(point.x, point.y, point.z) for point in carriers[0].Points], - ) + self.assertEqual(2, result["selected_missing_terminal_counterpart_terminals"]) + self.assertEqual(["TerminalFoundEnd", "TerminalFoundStart"], result["selected_missing_terminal_counterpart_terminal_names"]) + self.assertEqual(["terminal-missing-both-a", "terminal-missing-both-b"], result["missing_terminal_counterpart_refs"]) + self.assertEqual([end_terminal, start_terminal], selected) - def test_selected_user_path_copies_source_capacity(self): + def test_controller_selects_missing_terminal_candidate_terminals_from_latest_batch_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "PointRoute") - route_path.Points = [app.Vector(0, 0, 20), app.Vector(100, 0, 20)] - route_path.QetRouteCarrierCapacity = 5 - gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], - ) - - auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() - carrier = routing_network.collect_route_carriers(doc)[0] + candidate_a1 = _terminal(doc, terminal_objects, "TerminalA1", "terminal-a1", app.Vector(0, 0, 0)) + candidate_a2 = _terminal(doc, terminal_objects, "TerminalA2", "terminal-a2", app.Vector(10, 0, 0)) + found_b1 = _terminal(doc, terminal_objects, "TerminalB1", "terminal-b1", app.Vector(20, 0, 0)) + for terminal in (candidate_a1, candidate_a2): + terminal_objects.ensure_string_property(terminal, "QetElementUuid", "QET Exchange", "", "device-a") + terminal_objects.ensure_string_property(terminal, "QetInstanceId", "QET Exchange", "", "instance-a") + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingConnectionBatch") + diagnostic.QetDiagnosticKind = "RoutingConnectionBatch" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "missing_endpoint_samples": [ + { + "wire_uuid": "wire-a", + "start_found": False, + "start_terminal_uuid": "terminal-missing-a", + "start_instance_id": "instance-a", + "start_element_uuid": "device-a", + "start_missing_endpoint_reason_code": "terminal_uuid_not_in_element", + "start_instance_terminal_samples": [ + {"name": "TerminalA1", "terminal_uuid": "terminal-a1"}, + {"name": "TerminalA2", "terminal_uuid": "terminal-a2"}, + ], + "end_found": True, + "end_terminal_uuid": "terminal-b1", + } + ] + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], + ) - self.assertEqual(5, carrier.QetRouteCarrierCapacity) + result = auto_routing_panel.AutoRoutingController().select_missing_terminal_candidate_terminals() - def test_selected_multi_wire_user_path_copies_source_capacity_to_all_carriers(self): + self.assertEqual(2, result["selected_missing_terminal_candidate_terminals"]) + self.assertEqual(["TerminalA1", "TerminalA2"], result["selected_missing_terminal_candidate_terminal_names"]) + self.assertEqual([], result["missing_terminal_candidate_terminal_refs"]) + self.assertEqual([candidate_a1, candidate_a2], selected) + self.assertNotIn(found_b1, selected) + + def test_controller_selects_boundary_issue_route_carriers_and_terminals(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + route = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(140, 0, 20)], + label="柜内主路径A", + project_uuid="project-1", + kind="UserPath", + ) + terminal = _terminal(doc, terminal_objects, "TerminalOutside", "terminal-outside", app.Vector(140, 0, 0)) + diagnostic_group = wiring_objects.ensure_diagnostic_group(doc, "project-1") + diagnostic = doc.addObject("App::DocumentObjectGroup", "Diagnostic_RoutingPathNetwork") + diagnostic.QetDiagnosticKind = "RoutingPathNetwork" + diagnostic.QetProjectUuid = "project-1" + diagnostic.QetDiagnosticJson = json.dumps( + { + "route_carriers_outside_boundary": [ + { + "carrier": { + "name": route.Name, + "label": "柜内主路径A", + }, + "outside_point_count": 1, + }, + { + "carrier": { + "name": "MissingRouteCarrier", + "label": "缺失路径", + }, + "outside_point_count": 1, + }, + ], + "terminals_outside_boundary": [ + { + "name": "TerminalOutside", + "label": "TerminalOutside", + "terminal_uuid": "terminal-outside", + "outside_point_count": 2, + }, + { + "name": "MissingTerminal", + "terminal_uuid": "terminal-missing", + "outside_point_count": 1, + }, + ], + }, + ensure_ascii=False, + ) + diagnostic_group.addObject(diagnostic) + selected = [] + gui.Selection = types.SimpleNamespace( + clearSelection=lambda: selected.clear(), + addSelection=lambda obj: selected.append(obj), + getSelection=lambda: list(selected), + getSelectionEx=lambda: [], + ) + + result = auto_routing_panel.AutoRoutingController().select_boundary_issue_route_carriers_and_terminals() + + self.assertEqual(1, result["selected_boundary_route_carriers"]) + self.assertEqual(1, result["selected_boundary_terminals"]) + self.assertEqual([route.Name], result["selected_boundary_route_carrier_names"]) + self.assertEqual(["TerminalOutside"], result["selected_boundary_terminal_names"]) + self.assertEqual(["MissingRouteCarrier"], result["missing_boundary_route_carrier_refs"]) + self.assertEqual(["MissingTerminal"], result["missing_boundary_terminal_refs"]) + self.assertEqual([route, terminal], selected) + + def test_controller_marks_selected_route_carrier_constraint_modes(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -5248,27 +6020,29 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Sketcher::SketchObject", "CapacityMultiWireRouteSketch") - route_path.QetRouteCarrierCapacity = 4 - route_path.Shape = FakeShape( - FakeBoundBox(0, 120, 0, 80, 20, 20), - wires=[ - FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), - FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), - ], + carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="测试路径", + project_uuid="project-1", + kind="UserPath", ) gui.Selection = types.SimpleNamespace( getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], + getSelectionEx=lambda: [FakeSelectionItem(obj=carrier)], ) + controller = auto_routing_panel.AutoRoutingController() - result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() - carriers = routing_network.collect_route_carriers(doc) + forbidden = controller.mark_selected_route_carriers_forbidden() + required = controller.mark_selected_route_carriers_required() + cleared = controller.clear_selected_route_carrier_constraints() - self.assertEqual(2, result["user_path_carriers"]) - self.assertEqual([4, 4], [carrier.QetRouteCarrierCapacity for carrier in carriers]) + self.assertEqual(1, forbidden["route_constraint_carriers"]) + self.assertEqual(1, required["route_constraint_carriers"]) + self.assertEqual(1, cleared["route_constraint_carriers"]) + self.assertEqual("", carrier.QetRouteConstraintMode) - def test_selected_user_path_projects_line_to_selected_face(self): + def test_controller_sets_selected_route_carrier_capacity(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -5277,39 +6051,42 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - face = FakeFace( - FakeBoundBox(0, 100, 0, 100, 0, 0), - app.Vector(0, 0, 1), + source = doc.addObject("Sketcher::SketchObject", "CapacityPathSketch") + source.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], ) - draft_line = doc.addObject("Part::Feature", "FloatingDraftLine") - draft_line.Shape = FakeShape( - FakeBoundBox(10, 90, 10, 90, 25, 35), - edges=[FakeEdge(app.Vector(10, 10, 25), app.Vector(90, 90, 35))], + carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="测试路径", + project_uuid="project-1", + kind="UserPath", ) + routing_network._mark_user_path_source(source, carrier) gui.Selection = types.SimpleNamespace( getSelection=lambda: [], - getSelectionEx=lambda: [ - FakeSelectionItem([face]), - FakeSelectionItem(obj=draft_line), - ], + getSelectionEx=lambda: [FakeSelectionItem(obj=source)], ) + controller = auto_routing_panel.AutoRoutingController(options={"selected_route_capacity": 5}) - result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() - carriers = routing_network.collect_route_carriers(doc) + report = controller.set_selected_route_carriers_capacity() - self.assertEqual(1, result["user_path_carriers"]) - self.assertEqual([2.0, 2.0], [point.z for point in carriers[0].Points]) + self.assertEqual(1, report["route_capacity_carriers"]) + self.assertEqual(1, report["route_capacity_sources"]) + self.assertEqual(5, source.QetRouteCarrierCapacity) + self.assertEqual(5, carrier.QetRouteCarrierCapacity) - def test_controller_create_user_paths_reports_removed_stale_source_carriers(self): + def test_controller_reports_selected_source_route_constraint_before_carrier_generation(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "UserRouteSketch") + route_path = doc.addObject("Sketcher::SketchObject", "FutureUserRouteSketch") route_path.Shape = FakeShape( FakeBoundBox(0, 100, 0, 80, 20, 20), edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], @@ -5318,143 +6095,135 @@ class AutoRoutingTest(unittest.TestCase): getSelection=lambda: [], getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], ) - auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() - doc.removeObject("UserRouteSketch") - gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [], - ) - result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() + report = auto_routing_panel.AutoRoutingController().mark_selected_route_carriers_required() - self.assertEqual(1, result["removed_stale_carriers"]) - self.assertEqual(0, result["network"]["carriers"]) - self.assertEqual([], routing_network.collect_route_carriers(doc)) + self.assertEqual(0, report["route_constraint_carriers"]) + self.assertEqual(1, report["route_constraint_sources"]) + self.assertEqual("Required", route_path.QetRouteConstraintMode) - def test_terminal_access_uses_terminal_local_route_points_before_main_network(self): + def test_controller_clears_all_route_carrier_constraint_modes(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") - terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [10, 0, 0], [10, 30, 0]]) - routing_network.create_route_carrier( + required = routing_network.create_route_carrier( doc, - [app.Vector(10, 80, 0), app.Vector(110, 80, 0)], + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="必经路径", project_uuid="project-1", kind="UserPath", ) - - created = routing_network.create_terminal_access_carriers_from_document( + forbidden = routing_network.create_route_carrier( doc, + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="禁经路径", project_uuid="project-1", - terminal_exit_length=20.0, - max_distance=100.0, + kind="UserPath", ) + required.QetRouteConstraintMode = "Required" + forbidden.QetRouteConstraintMode = "Forbidden" + controller = auto_routing_panel.AutoRoutingController() - self.assertEqual(1, len(created)) - self.assertEqual( - [(0.0, 0.0, 0.0), (10.0, 0.0, 0.0), (10.0, 30.0, 0.0)], - [(p.x, p.y, p.z) for p in created[0].Points[:3]], - ) + report = controller.clear_all_route_carrier_constraints() - def test_terminal_access_accepts_object_wrapped_local_route_points(self): + self.assertEqual(2, report["route_constraint_carriers"]) + self.assertEqual("", required.QetRouteConstraintMode) + self.assertEqual("", forbidden.QetRouteConstraintMode) + self.assertNotIn("路径约束", controller.summary()) + + def test_selected_source_route_constraint_survives_carrier_regeneration(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") - terminal.QetTerminalLocalRoutePointsJson = json.dumps( - { - "points": [ - {"x": 0, "y": 0, "z": 0}, - {"x": 10, "y": 0, "z": 0}, - {"x": 10, "y": 30, "z": 0}, - ] - } - ) - routing_network.create_route_carrier( - doc, - [app.Vector(10, 80, 0), app.Vector(110, 80, 0)], + route_path = doc.addObject("Part::Feature", "UserRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + ) + selection = [FakeSelectionItem(obj=route_path)] + first = routing_network.create_user_path_carriers_from_selection( + doc, + selection, project_uuid="project-1", - kind="UserPath", ) + routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") + routing_network.clear_route_carriers(doc) - created = routing_network.create_terminal_access_carriers_from_document( + second = routing_network.create_user_path_carriers_from_selection( doc, + selection, project_uuid="project-1", - terminal_exit_length=20.0, - max_distance=100.0, ) - self.assertEqual(1, len(created)) - self.assertEqual( - [(0.0, 0.0, 0.0), (10.0, 0.0, 0.0), (10.0, 30.0, 0.0)], - [(p.x, p.y, p.z) for p in created[0].Points[:3]], - ) + self.assertEqual(1, len(first)) + self.assertEqual(1, len(second)) + self.assertEqual("Required", route_path.QetRouteConstraintMode) + self.assertEqual("Required", second[0].QetRouteConstraintMode) - def test_controller_sets_selected_terminal_local_route_from_selected_path(self): + def test_refreshing_user_path_clears_stale_constraint_when_source_is_cleared(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] - gui = sys.modules["FreeCADGui"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(100, 10, 0)) - route_path = doc.addObject("Part::Feature", "LocalExitSketch") + route_path = doc.addObject("Part::Feature", "UserRouteSketch") route_path.Shape = FakeShape( - FakeBoundBox(100, 130, 10, 40, 0, 0), - edges=[ - FakeEdge(app.Vector(100, 10, 0), app.Vector(130, 10, 0)), - FakeEdge(app.Vector(130, 10, 0), app.Vector(130, 40, 0)), - ], + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], ) - gui.Selection = types.SimpleNamespace( - getSelection=lambda: [], - getSelectionEx=lambda: [ - FakeSelectionItem(obj=terminal), - FakeSelectionItem(obj=route_path), - ], + selection = [FakeSelectionItem(obj=route_path)] + carriers = routing_network.create_user_path_carriers_from_selection( + doc, + selection, + project_uuid="project-1", ) + route_path.QetRouteConstraintMode = "" + carriers[0].QetRouteConstraintMode = "Required" - result = auto_routing_panel.AutoRoutingController().set_selected_terminal_local_route_points() - points = json.loads(terminal.QetTerminalLocalRoutePointsJson) - access_points = routing_network.terminal_access_path_points(terminal, exit_length=20.0) - - self.assertEqual(1, result["terminal_local_routes"]) - self.assertEqual("TerminalStart", result["terminal_local_route_names"][0]) - self.assertEqual( - [[0.0, 0.0, 0.0], [30.0, 0.0, 0.0], [30.0, 30.0, 0.0]], - points, - ) - self.assertEqual( - [(100.0, 10.0, 0.0), (130.0, 10.0, 0.0), (130.0, 40.0, 0.0)], - [(point.x, point.y, point.z) for point in access_points], + refreshed = routing_network.create_user_path_carriers_from_selection( + doc, + selection, + project_uuid="project-1", ) - def test_terminal_access_extends_past_parent_device_bbox_when_no_local_route_exists(self): + self.assertEqual(1, len(refreshed)) + self.assertEqual("", refreshed[0].QetRouteConstraintMode) + + def test_selected_multi_wire_source_route_constraint_marks_all_user_paths(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - device = doc.addObject("App::DocumentObjectGroup", "ProtectionDevice") - device.Shape = FakeShape(FakeBoundBox(-20, 20, -20, 20, -5, 60)) - terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - device.addObject(terminal) + route_path = doc.addObject("Sketcher::SketchObject", "MultiWireRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 120, 0, 80, 20, 20), + wires=[ + FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), + FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), + ], + ) + selection = [FakeSelectionItem(obj=route_path)] + carriers = routing_network.create_user_path_carriers_from_selection( + doc, + selection, + project_uuid="project-1", + ) - access_points = routing_network.terminal_access_path_points(terminal, exit_length=20.0) + marked = routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") - self.assertEqual((0.0, 0.0, 0.0), (access_points[0].x, access_points[0].y, access_points[0].z)) - self.assertGreater(access_points[-1].z, 60.0) + self.assertEqual(2, len(carriers)) + self.assertEqual(2, len(marked)) + self.assertEqual("Required", route_path.QetRouteConstraintMode) + self.assertEqual(["Required", "Required"], [carrier.QetRouteConstraintMode for carrier in carriers]) - def test_generate_routing_paths_refreshes_selected_user_path_without_duplicate(self): + def test_controller_clears_selected_multi_wire_source_route_constraints(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -5463,54 +6232,59 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Part::Feature", "UserRouteSketch") + route_path = doc.addObject("Sketcher::SketchObject", "MultiWireRouteSketch") route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + FakeBoundBox(0, 120, 0, 80, 20, 20), + wires=[ + FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), + FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), + ], + ) + selection = [FakeSelectionItem(obj=route_path)] + carriers = routing_network.create_user_path_carriers_from_selection( + doc, + selection, + project_uuid="project-1", ) + routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") gui.Selection = types.SimpleNamespace( getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], + getSelectionEx=lambda: selection, ) - first = auto_routing_panel.AutoRoutingController().generate_routing_paths() - route_path.Shape = FakeShape( - FakeBoundBox(0, 200, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(200, 0, 20))], - ) - second = auto_routing_panel.AutoRoutingController().generate_routing_paths() - user_paths = [ - item - for item in routing_network.collect_route_carriers(doc) - if item.QetRouteCarrierKind == "UserPath" - ] + cleared = auto_routing_panel.AutoRoutingController().clear_selected_route_carrier_constraints() - self.assertEqual(1, first["user_path_carriers"]) - self.assertEqual(1, second["user_path_carriers"]) - self.assertEqual(1, len(user_paths)) - self.assertEqual([(0.0, 0.0, 20.0), (200.0, 0.0, 20.0)], [(p.x, p.y, p.z) for p in user_paths[0].Points]) + self.assertEqual(2, cleared["route_constraint_carriers"]) + self.assertEqual("", route_path.QetRouteConstraintMode) + self.assertEqual(["", ""], [carrier.QetRouteConstraintMode for carrier in carriers]) - def test_eplan_connection_route_can_use_generated_user_path(self): + def test_clear_all_route_constraints_clears_source_objects_too(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(200, 0, 0)) - routing_network.create_route_carrier( + route_path = doc.addObject("Part::Feature", "UserRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + ) + selection = [FakeSelectionItem(obj=route_path)] + carriers = routing_network.create_user_path_carriers_from_selection( doc, - [app.Vector(0, 0, 20), app.Vector(200, 0, 20)], + selection, project_uuid="project-1", - kind="UserPath", ) + routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + report = routing_network.clear_all_route_constraint_modes(doc) - self.assertEqual("Routed", result["route_status"]) - self.assertIn("UserPath", result["route_track"]["carrier_kinds"]) + self.assertEqual(1, report["route_constraint_carriers"]) + self.assertEqual(1, report["route_constraint_sources"]) + self.assertEqual("", route_path.QetRouteConstraintMode) + self.assertEqual("", carriers[0].QetRouteConstraintMode) - def test_generate_routing_paths_does_not_duplicate_selected_wire_duct_carriers(self): + def test_selected_points_object_can_be_used_as_user_path(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -5519,29 +6293,27 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - duct = doc.addObject("Part::Feature", "UnlabeledLongDuct") - duct.Shape = FakeShape(FakeBoundBox(0, 160, -10, 10, 0, 20)) + route_path = doc.addObject("Part::Feature", "PointRoute") + route_path.Points = [ + app.Vector(0, 0, 20), + app.Vector(40, 0, 20), + app.Vector(40, 30, 20), + ] gui.Selection = types.SimpleNamespace( getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=duct)], + getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], ) - first = auto_routing_panel.AutoRoutingController().generate_routing_paths() - second = auto_routing_panel.AutoRoutingController().generate_routing_paths() + result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() carriers = routing_network.collect_route_carriers(doc) - self.assertEqual(1, first["selected_wire_duct_carriers"]) - self.assertEqual(0, second["selected_wire_duct_carriers"]) - self.assertEqual( - 1, - len([item for item in carriers if item.QetRouteCarrierKind == "WireDuct"]), - ) + self.assertEqual(1, result["user_path_carriers"]) self.assertEqual( - 2, - len([item for item in carriers if item.QetRouteCarrierKind == "WireDuctOpenEnd"]), + [(0.0, 0.0, 20.0), (40.0, 0.0, 20.0), (40.0, 30.0, 20.0)], + [(point.x, point.y, point.z) for point in carriers[0].Points], ) - def test_generate_routing_paths_refreshes_selected_wire_duct_geometry(self): + def test_selected_user_path_copies_source_capacity(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -5550,421 +6322,387 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - duct = doc.addObject("Part::Feature", "UnlabeledLongDuct") - duct.Shape = FakeShape(FakeBoundBox(0, 160, -10, 10, 0, 20)) + route_path = doc.addObject("Part::Feature", "PointRoute") + route_path.Points = [app.Vector(0, 0, 20), app.Vector(100, 0, 20)] + route_path.QetRouteCarrierCapacity = 5 gui.Selection = types.SimpleNamespace( getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=duct)], + getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], ) - auto_routing_panel.AutoRoutingController().generate_routing_paths() - duct.Shape = FakeShape(FakeBoundBox(0, 220, -10, 10, 0, 20)) - second = auto_routing_panel.AutoRoutingController().generate_routing_paths() - carriers = routing_network.collect_route_carriers(doc) - main = [item for item in carriers if item.QetRouteCarrierKind == "WireDuct"][0] - open_end_x_values = sorted( - point.x - for item in carriers - if item.QetRouteCarrierKind == "WireDuctOpenEnd" - for point in item.Points - ) + auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() + carrier = routing_network.collect_route_carriers(doc)[0] - self.assertEqual(0, second["selected_wire_duct_carriers"]) - self.assertEqual([(20.0, 0.0, 10.0), (200.0, 0.0, 10.0)], [(p.x, p.y, p.z) for p in main.Points]) - self.assertEqual([20.0, 20.0, 200.0, 200.0], open_end_x_values) + self.assertEqual(5, carrier.QetRouteCarrierCapacity) - def test_generate_routing_paths_removes_generated_wire_duct_carriers_after_source_deleted(self): + def test_selected_multi_wire_user_path_copies_source_capacity_to_all_carriers(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "Wire Duct A" - duct.Shape = FakeShape(FakeBoundBox(0, 160, -10, 10, 0, 20)) + route_path = doc.addObject("Sketcher::SketchObject", "CapacityMultiWireRouteSketch") + route_path.QetRouteCarrierCapacity = 4 + route_path.Shape = FakeShape( + FakeBoundBox(0, 120, 0, 80, 20, 20), + wires=[ + FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), + FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), + ], + ) + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], + ) - auto_routing_panel.AutoRoutingController().generate_routing_paths() - generated = [ - item - for item in routing_network.collect_route_carriers(doc) - if getattr(item, "QetRouteSourceName", "") == "WireDuctA" - ] - doc.removeObject("WireDuctA") - auto_routing_panel.AutoRoutingController().generate_routing_paths() + result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() + carriers = routing_network.collect_route_carriers(doc) - self.assertEqual(3, len(generated)) - self.assertEqual([], routing_network.collect_route_carriers(doc)) + self.assertEqual(2, result["user_path_carriers"]) + self.assertEqual([4, 4], [carrier.QetRouteCarrierCapacity for carrier in carriers]) - def test_prepare_layout_space_uses_whole_document_not_selected_face_workflow(self): + def test_selected_user_path_projects_line_to_selected_face(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - panel = doc.addObject("Part::Feature", "MountingPlateA") - panel.Label = "Mounting Plate A" - panel.Shape = FakeShape(FakeBoundBox(0, 120, 0, 5, 0, 100)) + face = FakeFace( + FakeBoundBox(0, 100, 0, 100, 0, 0), + app.Vector(0, 0, 1), + ) + draft_line = doc.addObject("Part::Feature", "FloatingDraftLine") + draft_line.Shape = FakeShape( + FakeBoundBox(10, 90, 10, 90, 25, 35), + edges=[FakeEdge(app.Vector(10, 10, 25), app.Vector(90, 90, 35))], + ) gui.Selection = types.SimpleNamespace( getSelection=lambda: [], - getSelectionEx=lambda: [FakeSelectionItem(obj=panel)], + getSelectionEx=lambda: [ + FakeSelectionItem([face]), + FakeSelectionItem(obj=draft_line), + ], ) - result = auto_routing_panel.AutoRoutingController().generate_layout_space() - - self.assertGreater(result["support_surface_sources"], 0) - self.assertEqual("document", result["source_mode"]) - - def test_generate_routing_path_network_adds_terminal_access_to_route_network(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") - app = sys.modules["FreeCAD"] - doc = FakeDocument() - app.ActiveDocument = doc - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "Wire Duct A" - duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) - - result = auto_routing_panel.AutoRoutingController().generate_routing_paths() - result_again = auto_routing_panel.AutoRoutingController().generate_routing_paths() - access_carriers = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteCarrierKind", "") == "TerminalAccess" - ] + result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() + carriers = routing_network.collect_route_carriers(doc) - self.assertEqual(1, result["wire_duct_carriers"]) - self.assertEqual(2, result["wire_duct_open_end_carriers"]) - self.assertEqual(2, result["terminal_access_carriers"]) - self.assertEqual(0, result_again["wire_duct_carriers"]) - self.assertEqual(0, result_again["wire_duct_open_end_carriers"]) - self.assertEqual(2, result_again["terminal_access_carriers"]) - self.assertEqual(2, len(access_carriers)) - self.assertGreater(result["network"]["segments"], 0) + self.assertEqual(1, result["user_path_carriers"]) + self.assertEqual([2.0, 2.0], [point.z for point in carriers[0].Points]) - def test_generate_routing_path_network_connects_terminal_access_to_nearest_segment_point(self): + def test_controller_create_user_paths_reports_removed_stale_source_carriers(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalMid", "terminal-mid", app.Vector(50, 30, 0)) - duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "Wire Duct A" - duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) + route_path = doc.addObject("Part::Feature", "UserRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + ) + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], + ) + auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() + doc.removeObject("UserRouteSketch") + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [], + ) - auto_routing_panel.AutoRoutingController().generate_routing_paths() - access_carriers = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteCarrierKind", "") == "TerminalAccess" - ] + result = auto_routing_panel.AutoRoutingController().create_user_paths_from_selection() - self.assertEqual(1, len(access_carriers)) - end_point = access_carriers[0].Points[-1] - self.assertEqual((50.0, 0.0, 20.0), (end_point.x, end_point.y, end_point.z)) + self.assertEqual(1, result["removed_stale_carriers"]) + self.assertEqual(0, result["network"]["carriers"]) + self.assertEqual([], routing_network.collect_route_carriers(doc)) - def test_terminal_access_prefers_larger_connected_network_over_nearer_isolated_stub(self): + def test_terminal_access_uses_terminal_local_route_points_before_main_network(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 1, 20), app.Vector(5, 1, 20)], - project_uuid="project-1", - kind="WireDuct", - ) + terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [10, 0, 0], [10, 30, 0]]) routing_network.create_route_carrier( doc, - [ - app.Vector(0, 10, 20), - app.Vector(40, 10, 20), - app.Vector(80, 10, 20), - app.Vector(120, 10, 20), - ], + [app.Vector(10, 80, 0), app.Vector(110, 80, 0)], project_uuid="project-1", - kind="WireDuct", + kind="UserPath", ) created = routing_network.create_terminal_access_carriers_from_document( doc, project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=100.0, ) self.assertEqual(1, len(created)) - end_point = created[0].Points[-1] - self.assertEqual((0.0, 10.0, 20.0), (end_point.x, end_point.y, end_point.z)) - - def test_connection_entry_candidates_prefer_wire_duct_over_terminal_access(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(0, 10, 20)], - project_uuid="project-1", - kind="TerminalAccess", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 10, 20), app.Vector(100, 10, 20)], - project_uuid="project-1", - kind="WireDuct", - ) - network = routing_network.build_route_graph(doc) - - ranked = routing_network.rank_connection_point_candidates( - network, - routing_network.connection_point_candidates(network, app.Vector(0, 0, 20), limit=0), + self.assertEqual( + [(0.0, 0.0, 0.0), (10.0, 0.0, 0.0), (10.0, 30.0, 0.0)], + [(p.x, p.y, p.z) for p in created[0].Points[:3]], ) - first_kind = getattr(ranked[0]["carrier"], "QetRouteCarrierKind", "") - self.assertEqual("WireDuct", first_kind) - - def test_terminal_access_prefers_wire_duct_over_nearer_routing_range(self): + def test_terminal_access_accepts_object_wrapped_local_route_points(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 5, 20), app.Vector(100, 5, 20)], - project_uuid="project-1", - kind="RoutingRange", - label="近处布线面", + terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps( + { + "points": [ + {"x": 0, "y": 0, "z": 0}, + {"x": 10, "y": 0, "z": 0}, + {"x": 10, "y": 30, "z": 0}, + ] + } ) routing_network.create_route_carrier( doc, - [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], + [app.Vector(10, 80, 0), app.Vector(110, 80, 0)], project_uuid="project-1", - kind="WireDuct", - label="较远线槽", + kind="UserPath", ) created = routing_network.create_terminal_access_carriers_from_document( doc, project_uuid="project-1", terminal_exit_length=20.0, - max_distance=1000.0, + max_distance=100.0, ) self.assertEqual(1, len(created)) - end_point = created[0].Points[-1] - self.assertEqual((50.0, 100.0, 20.0), (end_point.x, end_point.y, end_point.z)) + self.assertEqual( + [(0.0, 0.0, 0.0), (10.0, 0.0, 0.0), (10.0, 30.0, 0.0)], + [(p.x, p.y, p.z) for p in created[0].Points[:3]], + ) - def test_terminal_access_prefers_main_path_over_routing_range_in_same_component(self): + def test_controller_sets_selected_terminal_local_route_from_selected_path(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 5, 20), app.Vector(100, 5, 20)], - project_uuid="project-1", - kind="RoutingRange", - label="近处布线面", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], - project_uuid="project-1", - kind="WireDuct", - label="较远线槽", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(50, 5, 20), app.Vector(50, 100, 20)], - project_uuid="project-1", - kind="UserPath", - label="线槽接入桥", + terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(100, 10, 0)) + route_path = doc.addObject("Part::Feature", "LocalExitSketch") + route_path.Shape = FakeShape( + FakeBoundBox(100, 130, 10, 40, 0, 0), + edges=[ + FakeEdge(app.Vector(100, 10, 0), app.Vector(130, 10, 0)), + FakeEdge(app.Vector(130, 10, 0), app.Vector(130, 40, 0)), + ], ) - network = routing_network.build_route_graph(doc) - ranked = routing_network.rank_connection_point_candidates( - network, - routing_network.connection_point_candidates(network, app.Vector(50, 0, 20), limit=0), + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [ + FakeSelectionItem(obj=terminal), + FakeSelectionItem(obj=route_path), + ], ) - created = routing_network.create_terminal_access_carriers_from_document( - doc, - project_uuid="project-1", - terminal_exit_length=20.0, - max_distance=1000.0, - ) + result = auto_routing_panel.AutoRoutingController().set_selected_terminal_local_route_points() + points = json.loads(terminal.QetTerminalLocalRoutePointsJson) + access_points = routing_network.terminal_access_path_points(terminal, exit_length=20.0) - self.assertEqual(1, len(created)) - self.assertEqual("UserPath", getattr(ranked[0]["carrier"], "QetRouteCarrierKind", "")) - end_point = created[0].Points[-1] - self.assertEqual((50.0, 5.0, 20.0), (end_point.x, end_point.y, end_point.z)) + self.assertEqual(1, result["terminal_local_routes"]) + self.assertEqual("TerminalStart", result["terminal_local_route_names"][0]) + self.assertEqual( + [[0.0, 0.0, 0.0], [30.0, 0.0, 0.0], [30.0, 30.0, 0.0]], + points, + ) + self.assertEqual( + [(100.0, 10.0, 0.0), (130.0, 10.0, 0.0), (130.0, 40.0, 0.0)], + [(point.x, point.y, point.z) for point in access_points], + ) - def test_diverse_connection_entry_candidates_keep_multiple_components(self): + def test_controller_sets_selected_terminal_exit_direction_from_selected_path(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - near = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], - project_uuid="project-1", - kind="WireDuct", - label="近组件", + terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(100, 10, 0)) + direction_path = doc.addObject("Part::Feature", "ExitDirectionLine") + direction_path.Shape = FakeShape( + FakeBoundBox(100, 100, 10, 40, 0, 0), + edges=[FakeEdge(app.Vector(100, 10, 0), app.Vector(100, 40, 0))], ) - far = routing_network.create_route_carrier( - doc, - [app.Vector(0, 100, 0), app.Vector(100, 100, 0)], - project_uuid="project-1", - kind="RoutingRange", - label="远组件", - ) - network = routing_network.build_route_graph(doc) - near_key = routing_network._point_key(app.Vector(0, 0, 0)) - far_key = routing_network._point_key(app.Vector(0, 100, 0)) - candidates = [ - { - "key": near_key, - "projected_key": routing_network._point_key(app.Vector(index, 0, 0)), - "point": app.Vector(index, 0, 0), - "distance": index, - "carrier": near, - } - for index in range(1, 6) - ] - candidates.append( - { - "key": far_key, - "projected_key": far_key, - "point": app.Vector(0, 100, 0), - "distance": 100.0, - "carrier": far, - } + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [ + FakeSelectionItem(obj=terminal), + FakeSelectionItem(obj=direction_path), + ], ) - selected = routing_network.select_diverse_connection_point_candidates(network, candidates, limit=3) + result = auto_routing_panel.AutoRoutingController().set_selected_terminal_exit_direction() + direction = json.loads(terminal.QetTerminalExitDirectionJson) + access_points = routing_network.terminal_access_path_points(terminal, exit_length=20.0) - self.assertEqual(3, len(selected)) - self.assertIn(far, [candidate.get("carrier") for candidate in selected]) + self.assertEqual(1, result["terminal_exit_directions"]) + self.assertEqual("TerminalStart", result["terminal_exit_direction_names"][0]) + self.assertEqual({"x": 0.0, "y": 1.0, "z": 0.0}, direction) + self.assertEqual((100.0, 30.0, 0.0), (access_points[-1].x, access_points[-1].y, access_points[-1].z)) + self.assertEqual({"x": 0.0, "y": 1.0, "z": 0.0}, result["terminal_exit_direction"]) - def test_terminal_access_prefers_wire_duct_over_nearer_routing_range(self): + def test_terminal_access_extends_past_parent_device_bbox_when_no_local_route_exists(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 1, 20), app.Vector(120, 1, 20)], - project_uuid="project-1", - kind="RoutingRange", + device = doc.addObject("App::DocumentObjectGroup", "ProtectionDevice") + device.Shape = FakeShape(FakeBoundBox(-20, 20, -20, 20, -5, 60)) + terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + device.addObject(terminal) + + access_points = routing_network.terminal_access_path_points(terminal, exit_length=20.0) + + self.assertEqual((0.0, 0.0, 0.0), (access_points[0].x, access_points[0].y, access_points[0].z)) + self.assertGreater(access_points[-1].z, 60.0) + + def test_generate_routing_paths_refreshes_selected_user_path_without_duplicate(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + route_path = doc.addObject("Part::Feature", "UserRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 10, 20), app.Vector(120, 10, 20)], - project_uuid="project-1", - kind="WireDuct", + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [FakeSelectionItem(obj=route_path)], ) - created = routing_network.create_terminal_access_carriers_from_document( - doc, - project_uuid="project-1", + first = auto_routing_panel.AutoRoutingController().generate_routing_paths() + route_path.Shape = FakeShape( + FakeBoundBox(0, 200, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(200, 0, 20))], ) + second = auto_routing_panel.AutoRoutingController().generate_routing_paths() + user_paths = [ + item + for item in routing_network.collect_route_carriers(doc) + if item.QetRouteCarrierKind == "UserPath" + ] - self.assertEqual(1, len(created)) - end_point = created[0].Points[-1] - self.assertEqual((0.0, 10.0, 20.0), (end_point.x, end_point.y, end_point.z)) + self.assertEqual(1, first["user_path_carriers"]) + self.assertEqual(1, second["user_path_carriers"]) + self.assertEqual(1, len(user_paths)) + self.assertEqual([(0.0, 0.0, 20.0), (200.0, 0.0, 20.0)], [(p.x, p.y, p.z) for p in user_paths[0].Points]) - def test_eplan_connection_route_enters_network_at_segment_projection(self): + def test_eplan_connection_route_can_use_generated_user_path(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(150, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(200, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(200, 0, 20)], project_uuid="project-1", - kind="WireDuct", + kind="UserPath", ) result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertEqual("segment_projection", result["network"]["entry_point_mode"]) - self.assertEqual("segment_projection", result["network"]["exit_point_mode"]) - self.assertNotIn(0.0, [point.x for point in result["points"][1:-1]]) - self.assertNotIn(200.0, [point.x for point in result["points"][1:-1]]) - self.assertLess(result["length_mm"], 150.0) + self.assertEqual("Routed", result["route_status"]) + self.assertIn("UserPath", result["route_track"]["carrier_kinds"]) - def test_generate_routing_path_network_adds_wiring_cut_out_carrier(self): + def test_generate_routing_paths_does_not_duplicate_selected_wire_duct_carriers(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - cut_out = doc.addObject("Part::Feature", "WiringCutoutA") - cut_out.Label = "Wiring Cut-Out A" - cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) + duct = doc.addObject("Part::Feature", "UnlabeledLongDuct") + duct.Shape = FakeShape(FakeBoundBox(0, 160, -10, 10, 0, 20)) + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [FakeSelectionItem(obj=duct)], + ) - result = auto_routing_panel.AutoRoutingController().generate_routing_paths() - cut_out_carriers = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteCarrierKind", "") == "WiringCutOut" - ] + first = auto_routing_panel.AutoRoutingController().generate_routing_paths() + second = auto_routing_panel.AutoRoutingController().generate_routing_paths() + carriers = routing_network.collect_route_carriers(doc) - self.assertEqual(1, result["wiring_cut_out_carriers"]) - self.assertEqual(1, len(cut_out_carriers)) - self.assertEqual("PassThrough", cut_out.QetRoutingObstacleMode) + self.assertEqual(1, first["selected_wire_duct_carriers"]) + self.assertEqual(0, second["selected_wire_duct_carriers"]) + self.assertEqual( + 1, + len([item for item in carriers if item.QetRouteCarrierKind == "WireDuct"]), + ) + self.assertEqual( + 2, + len([item for item in carriers if item.QetRouteCarrierKind == "WireDuctOpenEnd"]), + ) - def test_generate_routing_path_network_refreshes_wiring_cut_out_geometry(self): + def test_generate_routing_paths_refreshes_selected_wire_duct_geometry(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - cut_out = doc.addObject("Part::Feature", "WiringCutoutA") - cut_out.Label = "Wiring Cut-Out A" - cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) + duct = doc.addObject("Part::Feature", "UnlabeledLongDuct") + duct.Shape = FakeShape(FakeBoundBox(0, 160, -10, 10, 0, 20)) + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [FakeSelectionItem(obj=duct)], + ) - first = auto_routing_panel.AutoRoutingController().generate_routing_paths() - cut_out.Shape = FakeShape(FakeBoundBox(65, 75, -2, 2, 15, 25)) + auto_routing_panel.AutoRoutingController().generate_routing_paths() + duct.Shape = FakeShape(FakeBoundBox(0, 220, -10, 10, 0, 20)) second = auto_routing_panel.AutoRoutingController().generate_routing_paths() - cut_out_carriers = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteCarrierKind", "") == "WiringCutOut" - ] + carriers = routing_network.collect_route_carriers(doc) + main = [item for item in carriers if item.QetRouteCarrierKind == "WireDuct"][0] + open_end_x_values = sorted( + point.x + for item in carriers + if item.QetRouteCarrierKind == "WireDuctOpenEnd" + for point in item.Points + ) - self.assertEqual(1, first["wiring_cut_out_carriers"]) - self.assertEqual(0, second["wiring_cut_out_carriers"]) - self.assertEqual(1, len(cut_out_carriers)) - self.assertEqual([(70.0, -22.0, 20.0), (70.0, 22.0, 20.0)], [(p.x, p.y, p.z) for p in cut_out_carriers[0].Points]) + self.assertEqual(0, second["selected_wire_duct_carriers"]) + self.assertEqual([(20.0, 0.0, 10.0), (200.0, 0.0, 10.0)], [(p.x, p.y, p.z) for p in main.Points]) + self.assertEqual([20.0, 20.0, 200.0, 200.0], open_end_x_values) - def test_wiring_cut_out_source_bridge_extension_controls_generated_path_length(self): + def test_generate_routing_paths_removes_generated_wire_duct_carriers_after_source_deleted(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") @@ -5972,684 +6710,707 @@ class AutoRoutingTest(unittest.TestCase): doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - cut_out = doc.addObject("Part::Feature", "WiringCutoutA") - cut_out.Label = "过线孔A" - cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) - cut_out.QetWiringCutOutBridgeExtensionMm = 8.0 + duct = doc.addObject("Part::Feature", "WireDuctA") + duct.Label = "Wire Duct A" + duct.Shape = FakeShape(FakeBoundBox(0, 160, -10, 10, 0, 20)) auto_routing_panel.AutoRoutingController().generate_routing_paths() - cut_out_carriers = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteCarrierKind", "") == "WiringCutOut" + generated = [ + item + for item in routing_network.collect_route_carriers(doc) + if getattr(item, "QetRouteSourceName", "") == "WireDuctA" ] + doc.removeObject("WireDuctA") + auto_routing_panel.AutoRoutingController().generate_routing_paths() - self.assertEqual(1, len(cut_out_carriers)) - self.assertIn("QetWiringCutOutBridgeExtensionMm", cut_out.PropertiesList) - self.assertEqual(8.0, cut_out.QetWiringCutOutBridgeExtensionMm) - self.assertEqual([(50.0, -10.0, 20.0), (50.0, 10.0, 20.0)], [(p.x, p.y, p.z) for p in cut_out_carriers[0].Points]) + self.assertEqual(3, len(generated)) + self.assertEqual([], routing_network.collect_route_carriers(doc)) - def test_wiring_cut_out_bridges_nearby_ducts_on_both_sides_of_panel(self): + def test_prepare_layout_space_uses_whole_document_not_selected_face_workflow(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] + gui = sys.modules["FreeCADGui"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, -20, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 20, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, -20, 20), app.Vector(50, -20, 20)], - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(50, 20, 20), app.Vector(100, 20, 20)], - project_uuid="project-1", - kind="WireDuct", + panel = doc.addObject("Part::Feature", "MountingPlateA") + panel.Label = "Mounting Plate A" + panel.Shape = FakeShape(FakeBoundBox(0, 120, 0, 5, 0, 100)) + gui.Selection = types.SimpleNamespace( + getSelection=lambda: [], + getSelectionEx=lambda: [FakeSelectionItem(obj=panel)], ) - cut_out = doc.addObject("Part::Feature", "WiringCutoutA") - cut_out.Label = "过线孔A" - cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) - auto_routing_panel.AutoRoutingController().generate_routing_paths() - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + result = auto_routing_panel.AutoRoutingController().generate_layout_space() - self.assertEqual("Routed", result["route_status"]) - self.assertIn("WiringCutOut", result["route_track"]["carrier_kinds"]) - self.assertEqual(0, result["collision_count"]) + self.assertGreater(result["support_surface_sources"], 0) + self.assertEqual("document", result["source_mode"]) - def test_check_routing_path_network_writes_diagnostic_for_unconnected_terminal(self): + def test_generate_routing_path_network_adds_terminal_access_to_route_network(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalFar", "terminal-far", app.Vector(5000, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - project_uuid="project-1", - kind="WireDuct", - ) - - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + duct = doc.addObject("Part::Feature", "WireDuctA") + duct.Label = "Wire Duct A" + duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) - self.assertFalse(result["ok"]) - self.assertIn("unconnected_terminals", result["issue_codes"]) - self.assertEqual("RoutingPathNetwork", diagnostic_group.Group[0].QetDiagnosticKind) - self.assertEqual("project-1", diagnostic_group.Group[0].QetProjectUuid) - self.assertFalse(diagnostic_group.Group[0].QetDiagnosticOk) - self.assertIn("unconnected_terminals", diagnostic_group.Group[0].QetDiagnosticIssueCodes) - self.assertIn("端子未接入", diagnostic_group.Group[0].QetDiagnosticIssueLabels) - self.assertIn("端子未接入", diagnostic_group.Group[0].QetDiagnosticMessage) - self.assertIn("unconnected_terminals", payload["issue_codes"]) - self.assertEqual(1, len(payload["unconnected_terminals"])) - self.assertEqual("terminal-far", payload["unconnected_terminals"][0]["terminal_uuid"]) - self.assertEqual(1000.0, payload["unconnected_terminals"][0]["terminal_access_max_distance_mm"]) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - self.assertIn("端子未接入", message) - self.assertIn("terminal-far", message) - self.assertIn("4900.0 mm", message) - self.assertIn("端子接入最大距离 1000.0 mm", message) - self.assertIn("补一段线槽/辅助路径", message) + result = auto_routing_panel.AutoRoutingController().generate_routing_paths() + result_again = auto_routing_panel.AutoRoutingController().generate_routing_paths() + access_carriers = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteCarrierKind", "") == "TerminalAccess" + ] - def test_check_routing_path_network_warns_for_long_terminal_access(self): + self.assertEqual(1, result["wire_duct_carriers"]) + self.assertEqual(2, result["wire_duct_open_end_carriers"]) + self.assertEqual(2, result["terminal_access_carriers"]) + self.assertEqual(0, result_again["wire_duct_carriers"]) + self.assertEqual(0, result_again["wire_duct_open_end_carriers"]) + self.assertEqual(2, result_again["terminal_access_carriers"]) + self.assertEqual(2, len(access_carriers)) + self.assertGreater(result["network"]["segments"], 0) + + def test_generate_routing_path_network_connects_terminal_access_to_nearest_segment_point(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - device = doc.addObject("App::Part", "DevicePEN") - device.Label = "PEN" - device.Placement = app.Placement(app.Vector(100, 0, 0), app.Rotation()) - terminal = _terminal(doc, terminal_objects, "TerminalLongAccess", "terminal-long-access", app.Vector(0, 0, 0)) - device.addObject(terminal) + _terminal(doc, terminal_objects, "TerminalMid", "terminal-mid", app.Vector(50, 30, 0)) + duct = doc.addObject("Part::Feature", "WireDuctA") + duct.Label = "Wire Duct A" + duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) + + auto_routing_panel.AutoRoutingController().generate_routing_paths() + access_carriers = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteCarrierKind", "") == "TerminalAccess" + ] + + self.assertEqual(1, len(access_carriers)) + end_point = access_carriers[0].Points[-1] + self.assertEqual((50.0, 0.0, 20.0), (end_point.x, end_point.y, end_point.z)) + + def test_terminal_access_prefers_larger_connected_network_over_nearer_isolated_stub(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(1000, 0, 20), app.Vector(1100, 0, 20)], + [app.Vector(0, 1, 20), app.Vector(5, 1, 20)], project_uuid="project-1", kind="WireDuct", ) - routing_network.create_terminal_access_carriers_from_document( + routing_network.create_route_carrier( doc, + [ + app.Vector(0, 10, 20), + app.Vector(40, 10, 20), + app.Vector(80, 10, 20), + app.Vector(120, 10, 20), + ], project_uuid="project-1", - terminal_exit_length=20.0, - max_distance=1000.0, + kind="WireDuct", ) - result = auto_routing.check_eplan_routing_path_network( + created = routing_network.create_terminal_access_carriers_from_document( doc, project_uuid="project-1", - options={"terminal_access_max_distance": 1000.0}, ) - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - self.assertFalse(result["ok"]) - self.assertEqual(1, len(payload["long_terminal_accesses"])) - long_access = payload["long_terminal_accesses"][0] - self.assertEqual("terminal-long-access", long_access["terminal_uuid"]) - self.assertEqual(900.0, long_access["terminal_access_length_mm"]) - self.assertEqual("PEN", long_access["parent_device_label"]) - self.assertEqual("DevicePEN", long_access["parent_device_name"]) - self.assertEqual({"x": 100.0, "y": 0.0, "z": 0.0}, long_access["terminal_origin"]) - self.assertEqual("x", long_access["terminal_access_dominant_axis"]) - self.assertEqual(2, len(long_access["terminal_access_points"])) - self.assertEqual({"x": 100.0, "y": 0.0, "z": 20.0}, long_access["terminal_access_points"][0]) - self.assertEqual({"x": 1000.0, "y": 0.0, "z": 20.0}, long_access["terminal_access_points"][1]) - self.assertIn("端子接入过长", message) - self.assertIn("TerminalLongAccess", message) - self.assertIn("terminal-long-access", message) - self.assertIn("900.0 mm", message) + self.assertEqual(1, len(created)) + end_point = created[0].Points[-1] + self.assertEqual((0.0, 10.0, 20.0), (end_point.x, end_point.y, end_point.z)) - def test_check_routing_path_network_ignores_isolated_routing_range_only_components(self): + def test_terminal_access_prefers_richer_main_path_component_over_near_short_duct(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + [app.Vector(0, 10, 20), app.Vector(10, 10, 20)], project_uuid="project-1", kind="WireDuct", + label="近处短线槽孤岛", ) - routing_network.create_route_carrier( + for index in range(8): + routing_network.create_route_carrier( + doc, + [ + app.Vector(index * 30, 500, 20), + app.Vector((index + 1) * 30, 500, 20), + ], + project_uuid="project-1", + kind="WireDuct", + label="完整主线槽{0}".format(index + 1), + ) + + created = routing_network.create_terminal_access_carriers_from_document( doc, - [app.Vector(0, 0, 0), app.Vector(0, 40, 0)], project_uuid="project-1", - kind="TerminalAccess", + terminal_exit_length=20.0, + max_distance=1000.0, ) + + self.assertEqual(1, len(created)) + end_point = created[0].Points[-1] + self.assertEqual((0.0, 500.0, 20.0), (end_point.x, end_point.y, end_point.z)) + + def test_terminal_access_records_selected_target_metadata(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(1000, 0, 0), app.Vector(1100, 0, 0)], + [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], project_uuid="project-1", - kind="RoutingRange", - label="孤立布线面", + kind="UserPath", + label="柜内主路径", ) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + created = routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=200.0, + ) - self.assertNotIn("isolated_network_components", result["issue_codes"]) - self.assertEqual(0, len(result["diagnostic"]["isolated_components"])) + self.assertEqual(1, len(created)) + carrier = created[0] + self.assertEqual("UserPath", carrier.QetTerminalAccessTargetKind) + self.assertEqual("柜内主路径", carrier.QetTerminalAccessTargetLabel) + self.assertEqual(100.0, carrier.QetTerminalAccessTargetDistanceMm) + self.assertEqual(1, carrier.QetTerminalAccessTargetComponentPrimarySegments) - def test_check_routing_path_network_warns_for_isolated_primary_route_components(self): + def test_connection_entry_candidates_prefer_wire_duct_over_terminal_access(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 0), app.Vector(0, 40, 0)], + [app.Vector(0, 0, 20), app.Vector(0, 10, 20)], project_uuid="project-1", kind="TerminalAccess", ) routing_network.create_route_carrier( doc, - [app.Vector(1000, 0, 0), app.Vector(1100, 0, 0)], + [app.Vector(0, 10, 20), app.Vector(100, 10, 20)], project_uuid="project-1", - kind="UserPath", - label="孤立用户路径", + kind="WireDuct", ) + network = routing_network.build_route_graph(doc) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + ranked = routing_network.rank_connection_point_candidates( + network, + routing_network.connection_point_candidates(network, app.Vector(0, 0, 20), limit=0), + ) - self.assertIn("isolated_network_components", result["issue_codes"]) - self.assertEqual(2, len(result["diagnostic"]["isolated_components"])) + first_kind = getattr(ranked[0]["carrier"], "QetRouteCarrierKind", "") + self.assertEqual("WireDuct", first_kind) - def test_check_routing_path_network_warns_for_wire_duct_without_terminal_access(self): + def test_auto_routing_consumes_terminal_access_carrier_as_endpoint_access_path(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], project_uuid="project-1", kind="WireDuct", - label="孤立线槽", + label="主线槽", ) - routing_network.create_route_carrier( + routing_network.create_terminal_access_carriers_from_document( doc, - [app.Vector(1000, 0, 0), app.Vector(1000, 100, 0)], project_uuid="project-1", - kind="TerminalAccess", - label="端子接入", + terminal_exit_length=20.0, + max_distance=200.0, ) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 20.0, "terminal_access_max_distance": 200.0}, + ) - self.assertIn("wire_ducts_without_terminal_access", result["issue_codes"]) - self.assertEqual(1, len(result["diagnostic"]["wire_ducts_without_terminal_access"])) - suggestion = result["diagnostic"]["wire_ducts_without_terminal_access"][0]["bridge_suggestion"] - self.assertEqual("孤立线槽", suggestion["from_carrier"]["label"]) - self.assertEqual("端子接入", suggestion["to_carrier"]["label"]) - self.assertEqual(900.0, suggestion["distance_mm"]) - self.assertEqual({"x": 100.0, "y": 0.0, "z": 0.0}, suggestion["from_point"]) - self.assertEqual({"x": 1000.0, "y": 0.0, "z": 0.0}, suggestion["to_point"]) - compact_suggestion = payload["wire_ducts_without_terminal_access"][0]["bridge_suggestion"] - self.assertEqual("端子接入", compact_suggestion["to_carrier"]["label"]) - self.assertIn("线槽未接入端子主网络", message) - self.assertIn("建议桥接到 端子接入", message) - self.assertIn("900.0 mm", message) + self.assertEqual("network-dijkstra-v1", result["algorithm"]) + self.assertEqual(0.0, result["network"]["entry_distance"]) + self.assertEqual(0.0, result["network"]["exit_distance"]) + self.assertIn( + (0.0, 100.0, 20.0), + [(point.x, point.y, point.z) for point in result["points"]], + ) + self.assertIn( + (100.0, 100.0, 20.0), + [(point.x, point.y, point.z) for point in result["points"]], + ) - def test_zero_distance_user_path_endpoint_splits_wire_duct_segment(self): + def test_auto_routing_reports_consumed_terminal_access_carriers(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 100, 0)], + [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], project_uuid="project-1", kind="WireDuct", - label="斜向线槽", + label="主线槽", ) - routing_network.create_route_carrier( + created_access = routing_network.create_terminal_access_carriers_from_document( doc, - [app.Vector(50, 50, 0), app.Vector(50, 90, 0)], project_uuid="project-1", - kind="UserPath", - label="零距离桥接", + terminal_exit_length=20.0, + max_distance=200.0, ) - routing_network.create_route_carrier( + + result = auto_routing.route_eplan_connection_between_terminals( doc, - [app.Vector(50, 90, 0), app.Vector(50, 130, 0)], - project_uuid="project-1", - kind="TerminalAccess", - label="端子接入", + start, + end, + options={"terminal_exit_length": 20.0, "terminal_access_max_distance": 200.0}, ) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - - self.assertNotIn("wire_ducts_without_terminal_access", result["issue_codes"]) + self.assertEqual(2, len(created_access)) + self.assertTrue(result["network"]["start_terminal_access_consumed"]) + self.assertTrue(result["network"]["end_terminal_access_consumed"]) + self.assertIn( + result["network"]["start_terminal_access_carrier"], + [carrier.Name for carrier in created_access], + ) + self.assertIn( + result["network"]["end_terminal_access_carrier"], + [carrier.Name for carrier in created_access], + ) - def test_create_user_path_bridge_from_selection_connects_nearest_route_points(self): + def test_terminal_access_prefers_wire_duct_over_nearer_routing_range(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - duct = routing_network.create_route_carrier( + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) + routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + [app.Vector(0, 5, 20), app.Vector(100, 5, 20)], project_uuid="project-1", - kind="WireDuct", - label="线槽", + kind="RoutingRange", + label="近处布线面", ) - main_path = routing_network.create_route_carrier( + routing_network.create_route_carrier( doc, - [app.Vector(120, 20, 0), app.Vector(200, 20, 0)], + [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], project_uuid="project-1", - kind="RoutingRange", - label="主网络", + kind="WireDuct", + label="较远线槽", ) - created = routing_network.create_user_path_bridge_from_selection( + created = routing_network.create_terminal_access_carriers_from_document( doc, - [ - types.SimpleNamespace(Object=duct), - types.SimpleNamespace(Object=main_path), - ], project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=1000.0, ) self.assertEqual(1, len(created)) - self.assertEqual("UserPath", created[0].QetRouteCarrierKind) - self.assertEqual([(100.0, 0.0, 0.0), (120.0, 20.0, 0.0)], [ - (point.x, point.y, point.z) - for point in created[0].Points - ]) + end_point = created[0].Points[-1] + self.assertEqual((50.0, 100.0, 20.0), (end_point.x, end_point.y, end_point.z)) - def test_create_user_path_bridge_between_source_objects_uses_nearest_carrier_pair(self): + def test_terminal_access_prefers_distant_main_path_over_near_routing_range_within_limit(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - fallback_source = doc.addObject("Part::Feature", "DoorRoutingRangeSource") - fallback_source.Label = "门板布线面" - current_source = doc.addObject("Part::Feature", "MainDuctSource") - current_source.Label = "主线槽" - far_fallback = routing_network.create_route_carrier( - doc, - [app.Vector(-500, 0, 0), app.Vector(-400, 0, 0)], - project_uuid="project-1", - kind="RoutingRange", - label="远处布线面", - ) - near_fallback = routing_network.create_route_carrier( + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) + routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + [app.Vector(0, 5, 20), app.Vector(100, 5, 20)], project_uuid="project-1", kind="RoutingRange", - label="近处布线面", + label="近处安装板布线面", ) - main_path = routing_network.create_route_carrier( + routing_network.create_route_carrier( doc, - [app.Vector(130, 20, 0), app.Vector(200, 20, 0)], + [app.Vector(0, 7000, 20), app.Vector(100, 7000, 20)], project_uuid="project-1", kind="WireDuct", - label="主线槽路径", + label="远处主线槽", ) - for carrier in (far_fallback, near_fallback): - carrier.QetRouteSourceName = fallback_source.Name - carrier.QetRouteSourceLabel = fallback_source.Label - main_path.QetRouteSourceName = current_source.Name - main_path.QetRouteSourceLabel = current_source.Label - created = routing_network.create_user_path_bridge_between_objects( + created = routing_network.create_terminal_access_carriers_from_document( doc, - fallback_source, - current_source, project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=8000.0, ) self.assertEqual(1, len(created)) - self.assertEqual("UserPath", created[0].QetRouteCarrierKind) - self.assertEqual( - [(100.0, 0.0, 0.0), (130.0, 20.0, 0.0)], - [(point.x, point.y, point.z) for point in created[0].Points], + end_point = created[0].Points[-1] + self.assertEqual((50.0, 7000.0, 20.0), (end_point.x, end_point.y, end_point.z)) + + def test_terminal_access_uses_routing_range_when_no_main_path_target_exists(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 5, 20), app.Vector(100, 5, 20)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板布线面", ) - self.assertEqual("MainPathDetourBridge", created[0].QetRouteBridgeKind) - self.assertEqual("门板布线面 -> 主线槽", created[0].QetRouteBridgePairLabel) - self.assertEqual(fallback_source.Name, created[0].QetRouteBridgeLeftSourceName) - self.assertEqual(current_source.Name, created[0].QetRouteBridgeRightSourceName) - duplicated = routing_network.create_user_path_bridge_between_objects( + created = routing_network.create_terminal_access_carriers_from_document( doc, - fallback_source, - current_source, project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=100.0, ) - self.assertEqual([], duplicated) + self.assertEqual(1, len(created)) + end_point = created[0].Points[-1] + self.assertEqual((50.0, 5.0, 20.0), (end_point.x, end_point.y, end_point.z)) - def test_check_routing_path_network_warns_for_invalid_terminal_local_route_points(self): + def test_terminal_access_prefers_main_path_over_routing_range_in_same_component(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - terminal = _terminal(doc, terminal_objects, "TerminalInvalidLocalPath", "terminal-invalid-local-path", app.Vector(0, 0, 0)) - terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") - terminal.QetTerminalLocalRoutePointsJson = "{not-valid-json" + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(0, 5, 20), app.Vector(100, 5, 20)], + project_uuid="project-1", + kind="RoutingRange", + label="近处布线面", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 100, 20), app.Vector(100, 100, 20)], project_uuid="project-1", kind="WireDuct", + label="较远线槽", ) - routing_network.create_terminal_access_carriers_from_document( + routing_network.create_route_carrier( + doc, + [app.Vector(50, 5, 20), app.Vector(50, 100, 20)], + project_uuid="project-1", + kind="UserPath", + label="线槽接入桥", + ) + network = routing_network.build_route_graph(doc) + ranked = routing_network.rank_connection_point_candidates( + network, + routing_network.connection_point_candidates(network, app.Vector(50, 0, 20), limit=0), + ) + + created = routing_network.create_terminal_access_carriers_from_document( doc, project_uuid="project-1", terminal_exit_length=20.0, max_distance=1000.0, ) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + self.assertEqual(1, len(created)) + self.assertEqual("UserPath", getattr(ranked[0]["carrier"], "QetRouteCarrierKind", "")) + end_point = created[0].Points[-1] + self.assertEqual((50.0, 5.0, 20.0), (end_point.x, end_point.y, end_point.z)) - self.assertFalse(result["ok"]) - self.assertEqual(1, len(payload["invalid_terminal_local_routes"])) - self.assertEqual( - "terminal-invalid-local-path", - payload["invalid_terminal_local_routes"][0]["terminal_uuid"], + def test_diverse_connection_entry_candidates_keep_multiple_components(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + near = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + project_uuid="project-1", + kind="WireDuct", + label="近组件", ) - self.assertEqual( - "QetTerminalLocalRoutePointsJson", - payload["invalid_terminal_local_routes"][0]["property_name"], + far = routing_network.create_route_carrier( + doc, + [app.Vector(0, 100, 0), app.Vector(100, 100, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="远组件", + ) + network = routing_network.build_route_graph(doc) + near_key = routing_network._point_key(app.Vector(0, 0, 0)) + far_key = routing_network._point_key(app.Vector(0, 100, 0)) + candidates = [ + { + "key": near_key, + "projected_key": routing_network._point_key(app.Vector(index, 0, 0)), + "point": app.Vector(index, 0, 0), + "distance": index, + "carrier": near, + } + for index in range(1, 6) + ] + candidates.append( + { + "key": far_key, + "projected_key": far_key, + "point": app.Vector(0, 100, 0), + "distance": 100.0, + "carrier": far, + } ) - self.assertIn("端子局部路径无效", message) - self.assertIn("terminal-invalid-local-path", message) - def test_check_routing_path_network_uses_terminal_local_route_end_for_connectivity(self): + selected = routing_network.select_diverse_connection_point_candidates(network, candidates, limit=3) + + self.assertEqual(3, len(selected)) + self.assertIn(far, [candidate.get("carrier") for candidate in selected]) + + def test_terminal_access_prefers_wire_duct_over_nearer_routing_range(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - terminal = _terminal(doc, terminal_objects, "TerminalLocalEndOnDuct", "terminal-local-end-on-duct", app.Vector(0, 0, 0)) - terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") - terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [1000, 0, 0]]) + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(1000, 0, 0), app.Vector(1100, 0, 0)], + [app.Vector(0, 1, 20), app.Vector(120, 1, 20)], project_uuid="project-1", - kind="WireDuct", + kind="RoutingRange", ) - created = routing_network.create_terminal_access_carriers_from_document( + routing_network.create_route_carrier( doc, + [app.Vector(0, 10, 20), app.Vector(120, 10, 20)], project_uuid="project-1", - terminal_exit_length=20.0, - max_distance=100.0, + kind="WireDuct", ) - result = auto_routing.check_eplan_routing_path_network( + created = routing_network.create_terminal_access_carriers_from_document( doc, project_uuid="project-1", - options={"terminal_access_max_distance": 100.0}, - ) - - self.assertEqual([], created) - self.assertEqual([], result["diagnostic"]["unconnected_terminals"]) - self.assertNotIn( - "unconnected_terminals", - [issue.get("code") for issue in result["diagnostic"]["issues"]], ) - def test_format_routing_path_network_report_tolerates_malformed_samples(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - diagnostic = { - "issues": [{"code": "external_issue", "count": 1}], - "unconnected_terminals": ["bad-terminal-sample"], - "possible_breaks": ["bad-break-sample"], - "isolated_components": ["bad-component-sample"], - } - - message = auto_routing.format_routing_path_network_report(diagnostic) - - self.assertIn("布线路径网络检查发现", message) - self.assertIn("首个问题:external_issue", message) + self.assertEqual(1, len(created)) + end_point = created[0].Points[-1] + self.assertEqual((0.0, 10.0, 20.0), (end_point.x, end_point.y, end_point.z)) - def test_format_routing_path_network_report_calls_out_wire_duct_break_point(self): + def test_eplan_connection_route_enters_network_at_segment_projection(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(150, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="线槽A", + [app.Vector(0, 0, 20), app.Vector(200, 0, 20)], project_uuid="project-1", kind="WireDuct", ) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertIn("线槽端点疑似断开", message) - self.assertIn("线槽A", message) - self.assertIn("(0.0, 0.0, 20.0)", message) - self.assertIn("补齐相邻线槽", message) + self.assertEqual("segment_projection", result["network"]["entry_point_mode"]) + self.assertEqual("segment_projection", result["network"]["exit_point_mode"]) + self.assertNotIn(0.0, [point.x for point in result["points"][1:-1]]) + self.assertNotIn(200.0, [point.x for point in result["points"][1:-1]]) + self.assertLess(result["length_mm"], 150.0) - def test_check_routing_path_network_warns_when_network_is_empty(self): + def test_generate_routing_path_network_adds_wiring_cut_out_carrier(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") + cut_out = doc.addObject("Part::Feature", "WiringCutoutA") + cut_out.Label = "Wiring Cut-Out A" + cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + result = auto_routing_panel.AutoRoutingController().generate_routing_paths() + cut_out_carriers = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteCarrierKind", "") == "WiringCutOut" + ] - self.assertFalse(result["ok"]) - self.assertEqual("empty_routing_path_network", payload["issues"][0]["code"]) - self.assertEqual(0, payload["summary"]["segments"]) - self.assertIn("布线路径网络为空", message) + self.assertEqual(1, result["wiring_cut_out_carriers"]) + self.assertEqual(1, len(cut_out_carriers)) + self.assertEqual("PassThrough", cut_out.QetRoutingObstacleMode) - def test_check_routing_path_network_warns_for_invalid_route_carrier_geometry(self): + def test_generate_routing_path_network_refreshes_wiring_cut_out_geometry(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - carrier = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="坏用户路径", - project_uuid="project-1", - kind="UserPath", - ) - carrier.Points = [app.Vector(0, 0, 20)] + cut_out = doc.addObject("Part::Feature", "WiringCutoutA") + cut_out.Label = "Wiring Cut-Out A" + cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + first = auto_routing_panel.AutoRoutingController().generate_routing_paths() + cut_out.Shape = FakeShape(FakeBoundBox(65, 75, -2, 2, 15, 25)) + second = auto_routing_panel.AutoRoutingController().generate_routing_paths() + cut_out_carriers = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteCarrierKind", "") == "WiringCutOut" + ] - self.assertFalse(result["ok"]) - self.assertEqual(1, len(payload["invalid_route_carriers"])) - self.assertEqual("UserPath", payload["invalid_route_carriers"][0]["carrier"]["kind"]) - self.assertEqual(1, payload["invalid_route_carriers"][0]["point_count"]) - self.assertIn("路径对象几何无效", message) - self.assertIn("坏用户路径", message) + self.assertEqual(1, first["wiring_cut_out_carriers"]) + self.assertEqual(0, second["wiring_cut_out_carriers"]) + self.assertEqual(1, len(cut_out_carriers)) + self.assertEqual([(70.0, -22.0, 20.0), (70.0, 22.0, 20.0)], [(p.x, p.y, p.z) for p in cut_out_carriers[0].Points]) - def test_check_routing_path_network_warns_when_only_routing_range_is_available(self): + def test_wiring_cut_out_source_bridge_extension_controls_generated_path_length(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - project_uuid="project-1", - kind="RoutingRange", - ) - - result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - - self.assertFalse(result["ok"]) - self.assertEqual(1, payload["routing_range_only_network"]["routing_range_carriers"]) - self.assertEqual( - 0, - payload["routing_range_only_network"]["primary_route_carriers"], - ) - self.assertIn("routing_range_only_network", [issue.get("code") for issue in payload["issues"]]) - self.assertIn("仅使用布线面兜底", message) - - def test_format_routing_path_network_report_includes_bridged_segment_count(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - diagnostic = { - "summary": { - "carriers": 5, - "segments": 6, - "nodes": 5, - "bridged_segments": 1, - }, - "issues": [], - "ok": True, - } - - message = auto_routing.format_routing_path_network_report(diagnostic) - - self.assertIn("桥接 1 段相邻/投影主路径", message) - - def test_routing_path_network_diagnostic_message_tolerates_malformed_bridge_count(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - diagnostic = { - "summary": { - "carriers": 1, - "segments": 1, - "nodes": 2, - "bridged_segments": "not-a-number", - }, - "issues": [], - } + cut_out = doc.addObject("Part::Feature", "WiringCutoutA") + cut_out.Label = "过线孔A" + cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) + cut_out.QetWiringCutOutBridgeExtensionMm = 8.0 - message = routing_network._routing_path_network_diagnostic_message(diagnostic) + auto_routing_panel.AutoRoutingController().generate_routing_paths() + cut_out_carriers = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteCarrierKind", "") == "WiringCutOut" + ] - self.assertIn("布线路径网络检查通过", message) + self.assertEqual(1, len(cut_out_carriers)) + self.assertIn("QetWiringCutOutBridgeExtensionMm", cut_out.PropertiesList) + self.assertEqual(8.0, cut_out.QetWiringCutOutBridgeExtensionMm) + self.assertEqual([(50.0, -10.0, 20.0), (50.0, 10.0, 20.0)], [(p.x, p.y, p.z) for p in cut_out_carriers[0].Points]) - def test_check_routing_path_network_uses_adjoining_duct_tolerance_option(self): + def test_wiring_cut_out_bridges_nearby_ducts_on_both_sides_of_panel(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - for index, points in enumerate( - ( - [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], - [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], - [app.Vector(100, 0, 20), app.Vector(100, 100, 20)], - [app.Vector(100, 100, 20), app.Vector(0, 100, 20)], - [app.Vector(0, 100, 20), app.Vector(0, 0, 20)], - ), - start=1, - ): - routing_network.create_route_carrier( - doc, - points, - label="线槽{0}".format(index), - project_uuid="project-1", - kind="WireDuct", - ) - - result = auto_routing.check_eplan_routing_path_network( + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, -20, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 20, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, -20, 20), app.Vector(50, -20, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + routing_network.create_route_carrier( doc, + [app.Vector(50, 20, 20), app.Vector(100, 20, 20)], project_uuid="project-1", - options={"adjoining_duct_tolerance": 15.0}, + kind="WireDuct", ) + cut_out = doc.addObject("Part::Feature", "WiringCutoutA") + cut_out.Label = "过线孔A" + cut_out.Shape = FakeShape(FakeBoundBox(45, 55, -2, 2, 15, 25)) - self.assertTrue(result["ok"]) - self.assertEqual(1, result["diagnostic"]["summary"]["bridged_segments"]) - self.assertEqual([], result["diagnostic"]["possible_breaks"]) - - def test_generate_routing_path_network_skips_far_terminal_access_to_protect_view_bbox(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") - app = sys.modules["FreeCAD"] - doc = FakeDocument() - app.ActiveDocument = doc - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - duct = doc.addObject("Part::Feature", "WireDuctFar") - duct.Label = "Wire Duct Far" - duct.Shape = FakeShape(FakeBoundBox(5000, 5100, -5, 5, 15, 25)) - - result = auto_routing_panel.AutoRoutingController().generate_routing_paths() + auto_routing_panel.AutoRoutingController().generate_routing_paths() + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertEqual(1, result["wire_duct_carriers"]) - self.assertEqual(2, result["wire_duct_open_end_carriers"]) - self.assertEqual(0, result["terminal_access_carriers"]) + self.assertEqual("Routed", result["route_status"]) + self.assertIn("WiringCutOut", result["route_track"]["carrier_kinds"]) + self.assertEqual(0, result["collision_count"]) - def test_auto_routing_controller_exposes_terminal_access_max_distance(self): + def test_check_routing_path_network_writes_diagnostic_for_unconnected_terminal(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - duct = doc.addObject("Part::Feature", "WireDuctFar") - duct.Label = "Wire Duct Far" - duct.Shape = FakeShape(FakeBoundBox(5000, 5100, -5, 5, 15, 25)) + _terminal(doc, terminal_objects, "TerminalFar", "terminal-far", app.Vector(5000, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) - controller = auto_routing_panel.AutoRoutingController() - controller.set_terminal_access_max_distance(6000.0) - result = controller.generate_routing_paths() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - self.assertEqual(1, result["terminal_access_carriers"]) - self.assertEqual(6000.0, controller.routing_options()["terminal_access_max_distance"]) + self.assertFalse(result["ok"]) + self.assertIn("unconnected_terminals", result["issue_codes"]) + self.assertEqual("RoutingPathNetwork", diagnostic_group.Group[0].QetDiagnosticKind) + self.assertEqual("project-1", diagnostic_group.Group[0].QetProjectUuid) + self.assertFalse(diagnostic_group.Group[0].QetDiagnosticOk) + self.assertIn("unconnected_terminals", diagnostic_group.Group[0].QetDiagnosticIssueCodes) + self.assertIn("端子未接入", diagnostic_group.Group[0].QetDiagnosticIssueLabels) + self.assertIn("端子未接入", diagnostic_group.Group[0].QetDiagnosticMessage) + self.assertIn("unconnected_terminals", payload["issue_codes"]) + self.assertEqual(1, len(payload["unconnected_terminals"])) + self.assertEqual("terminal-far", payload["unconnected_terminals"][0]["terminal_uuid"]) + self.assertEqual(1000.0, payload["unconnected_terminals"][0]["terminal_access_max_distance_mm"]) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + self.assertIn("端子未接入", message) + self.assertIn("terminal-far", message) + self.assertIn("4900.0 mm", message) + self.assertIn("端子接入最大距离 1000.0 mm", message) + self.assertIn("补一段线槽/辅助路径", message) - def test_auto_routing_controller_exposes_terminal_access_warning_distance(self): + def test_check_routing_path_network_warns_for_long_terminal_access(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalLongAccess", "terminal-long-access", app.Vector(0, 0, 0)) + device = doc.addObject("App::Part", "DevicePEN") + device.Label = "PEN" + device.Placement = app.Placement(app.Vector(100, 0, 0), app.Rotation()) + terminal = _terminal(doc, terminal_objects, "TerminalLongAccess", "terminal-long-access", app.Vector(0, 0, 0)) + device.addObject(terminal) routing_network.create_route_carrier( doc, - [app.Vector(900, 0, 20), app.Vector(1000, 0, 20)], + [app.Vector(1000, 0, 20), app.Vector(1100, 0, 20)], project_uuid="project-1", kind="WireDuct", ) @@ -6659,1461 +7420,1525 @@ class AutoRoutingTest(unittest.TestCase): terminal_exit_length=20.0, max_distance=1000.0, ) - controller = auto_routing_panel.AutoRoutingController() - controller.set_terminal_access_max_distance(1000.0) - controller.set_terminal_access_warning_distance(950.0) - result = controller.check_routing_path_network() - - self.assertNotIn("long_terminal_accesses", result["issue_codes"]) - self.assertEqual(950.0, controller.routing_options()["terminal_access_warning_distance"]) - - def test_auto_routing_controller_exposes_terminal_exit_length(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") - app = sys.modules["FreeCAD"] - doc = FakeDocument() - app.ActiveDocument = doc - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) - duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "Wire Duct A" - duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) - - controller = auto_routing_panel.AutoRoutingController() - controller.set_terminal_exit_length(40.0) - controller.generate_routing_paths() - access_carriers = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteCarrierKind", "") == "TerminalAccess" - ] - - self.assertEqual(1, len(access_carriers)) - self.assertEqual( - (50.0, 0.0, 40.0), - tuple(getattr(access_carriers[0].Points[0], axis) for axis in ("x", "y", "z")), + result = auto_routing.check_eplan_routing_path_network( + doc, + project_uuid="project-1", + options={"terminal_access_max_distance": 1000.0}, ) - self.assertEqual(40.0, controller.routing_options()["terminal_exit_length"]) - - def test_auto_routing_controller_readiness_writes_preflight_diagnostic(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") - app = sys.modules["FreeCAD"] - doc = FakeDocument() - app.ActiveDocument = doc - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-missing", - } - ], - } - - report = auto_routing_panel.AutoRoutingController().check_routing_readiness() diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - self.assertIn("missing_endpoints", report["issue_codes"]) - self.assertIsNotNone(diagnostic_group) - self.assertEqual(1, len(diagnostic_group.Group)) - self.assertEqual("RoutingPreflight", diagnostic_group.Group[0].QetDiagnosticKind) + self.assertFalse(result["ok"]) + self.assertEqual(1, len(payload["long_terminal_accesses"])) + long_access = payload["long_terminal_accesses"][0] + self.assertEqual("terminal-long-access", long_access["terminal_uuid"]) + self.assertEqual(900.0, long_access["terminal_access_length_mm"]) + self.assertEqual("PEN", long_access["parent_device_label"]) + self.assertEqual("DevicePEN", long_access["parent_device_name"]) + self.assertEqual({"x": 100.0, "y": 0.0, "z": 0.0}, long_access["terminal_origin"]) + self.assertEqual("x", long_access["terminal_access_dominant_axis"]) + self.assertEqual(2, len(long_access["terminal_access_points"])) + self.assertEqual({"x": 100.0, "y": 0.0, "z": 20.0}, long_access["terminal_access_points"][0]) + self.assertEqual({"x": 1000.0, "y": 0.0, "z": 20.0}, long_access["terminal_access_points"][1]) + self.assertIn("端子接入过长", message) + self.assertIn("TerminalLongAccess", message) + self.assertIn("terminal-long-access", message) + self.assertIn("900.0 mm", message) - def test_route_eplan_connections_prepares_layout_space_like_eplan_route(self): + def test_check_routing_path_network_ignores_isolated_routing_range_only_components(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "Wire Duct A" - duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - } - ], - } + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + project_uuid="project-1", + kind="WireDuct", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(0, 40, 0)], + project_uuid="project-1", + kind="TerminalAccess", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(1000, 0, 0), app.Vector(1100, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="孤立布线面", + ) - report = auto_routing_panel.AutoRoutingController().route_eplan_connections() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - self.assertEqual(1, report["routed"]) - self.assertEqual("eplan-route-v1", report["routing_method"]) - self.assertTrue(report["routing_path_network_updated"]) - self.assertEqual(1, report["prepared_layout"]["wire_duct_carriers"]) - self.assertEqual(1, report["routing_path_network"]["wire_duct_carriers"]) - self.assertEqual(2, report["prepared_layout"]["terminal_access_carriers"]) - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - self.assertIsNotNone(diagnostic_group) - self.assertEqual(1, len(diagnostic_group.Group)) - diagnostic_payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - self.assertEqual(1, diagnostic_payload["prepared_layout"]["wire_duct_carriers"]) - self.assertEqual(2, diagnostic_payload["prepared_layout"]["terminal_access_carriers"]) + self.assertNotIn("isolated_network_components", result["issue_codes"]) + self.assertEqual(0, len(result["diagnostic"]["isolated_components"])) - def test_auto_routing_controller_passes_adjoining_duct_tolerance_to_batch_route(self): + def test_check_routing_path_network_warns_for_isolated_primary_route_components(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(1000, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], project_uuid="project-1", kind="WireDuct", ) routing_network.create_route_carrier( doc, - [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(0, 0, 0), app.Vector(0, 40, 0)], project_uuid="project-1", - kind="WireDuct", + kind="TerminalAccess", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(1000, 0, 0), app.Vector(1100, 0, 0)], + project_uuid="project-1", + kind="UserPath", + label="孤立用户路径", ) - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - } - ], - } - report = auto_routing_panel.AutoRoutingController( - options={"adjoining_duct_tolerance": 15.0} - ).route_eplan_connections() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - self.assertEqual(1, report["routed"]) - self.assertEqual(1, report["routes"][0]["network"]["bridged_segments"]) + self.assertIn("isolated_network_components", result["issue_codes"]) + self.assertEqual(2, len(result["diagnostic"]["isolated_components"])) - def test_auto_routing_controller_summary_uses_adjoining_duct_tolerance(self): + def test_check_routing_path_network_warns_for_wire_duct_without_terminal_access(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], project_uuid="project-1", kind="WireDuct", + label="孤立线槽", ) routing_network.create_route_carrier( doc, - [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(1000, 0, 0), app.Vector(1000, 100, 0)], project_uuid="project-1", - kind="WireDuct", + kind="TerminalAccess", + label="端子接入", ) - summary = auto_routing_panel.AutoRoutingController( - options={"adjoining_duct_tolerance": 15.0} - ).summary() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - self.assertIn("桥接:1", summary) + self.assertIn("wire_ducts_without_terminal_access", result["issue_codes"]) + self.assertEqual(1, len(result["diagnostic"]["wire_ducts_without_terminal_access"])) + suggestion = result["diagnostic"]["wire_ducts_without_terminal_access"][0]["bridge_suggestion"] + self.assertEqual("孤立线槽", suggestion["from_carrier"]["label"]) + self.assertEqual("端子接入", suggestion["to_carrier"]["label"]) + self.assertEqual(900.0, suggestion["distance_mm"]) + self.assertEqual({"x": 100.0, "y": 0.0, "z": 0.0}, suggestion["from_point"]) + self.assertEqual({"x": 1000.0, "y": 0.0, "z": 0.0}, suggestion["to_point"]) + compact_suggestion = payload["wire_ducts_without_terminal_access"][0]["bridge_suggestion"] + self.assertEqual("端子接入", compact_suggestion["to_carrier"]["label"]) + self.assertIn("线槽未接入端子主网络", message) + self.assertIn("建议桥接到 端子接入", message) + self.assertIn("900.0 mm", message) - def test_auto_routing_controller_summary_includes_runtime_version(self): + def test_check_routing_path_network_compact_payload_includes_terminal_access_fallback_targets(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalFallbackAccess", "terminal-fallback", app.Vector(0, 0, 0)) + fallback = routing_network.create_route_carrier( + doc, + [app.Vector(20, 0, 20), app.Vector(20, 80, 20)], + label="安装板兜底路径", + project_uuid="project-1", + kind="RoutingRange", + ) + routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + ) - summary = auto_routing_panel.AutoRoutingController().summary() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - self.assertIn("版本:{0}".format(auto_routing.AUTO_ROUTING_RUNTIME_VERSION), summary) + self.assertIn("terminal_access_fallback_targets", result["issue_codes"]) + self.assertEqual(1, len(payload["terminal_access_fallback_targets"])) + sample = payload["terminal_access_fallback_targets"][0] + self.assertEqual("TerminalFallbackAccess", sample["terminal_name"]) + self.assertEqual("terminal-fallback", sample["terminal_uuid"]) + access_carrier = doc.getObject(sample["access_carrier_name"]) + self.assertIsNotNone(access_carrier) + self.assertEqual("TerminalAccess", access_carrier.QetRouteCarrierKind) + self.assertEqual(fallback.Name, sample["target_name"]) + self.assertEqual("RoutingRange", sample["target_kind"]) + self.assertEqual(20.0, sample["access_length_mm"]) + self.assertEqual( + [{"x": 0.0, "y": 0.0, "z": 20.0}, {"x": 20.0, "y": 0.0, "z": 20.0}], + sample["access_points"], + ) - def test_auto_routing_controller_summary_includes_cabinet_boundary_count(self): + def test_check_routing_path_network_compact_payload_includes_terminal_access_endpoint_avoidance(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc - terminal_objects.ensure_root_group(doc, "project-1") - boundary = doc.addObject("Part::Feature", "CabinetInteriorSpace") - boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) - boundary.QetRoutingBoundaryKind = "CabinetInterior" + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceAccessBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalWithLocalExit", "terminal-local-exit", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [20, 0, 0]]) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "EndpointDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 10)) + device.addObject(body) + routing_network.create_route_carrier( + doc, + [app.Vector(-20, 0, 0), app.Vector(-20, 80, 0)], + label="左侧主路径", + project_uuid="project-1", + kind="UserPath", + ) + routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + ) - summary = auto_routing_panel.AutoRoutingController().summary() - - self.assertIn("柜内边界:1", summary) + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - def test_auto_routing_controller_summary_includes_wire_style_database_path(self): + self.assertIn("terminal_access_endpoint_device_avoidance", result["issue_codes"]) + self.assertEqual(1, len(payload["terminal_access_endpoint_device_avoidance"])) + sample = payload["terminal_access_endpoint_device_avoidance"][0] + self.assertEqual("TerminalWithLocalExit", sample["terminal_name"]) + self.assertEqual("terminal-local-exit", sample["terminal_uuid"]) + self.assertEqual("QETDeviceAccessBox", sample["parent_device_name"]) + access_carrier = doc.getObject(sample["access_carrier_name"]) + self.assertIsNotNone(access_carrier) + self.assertEqual("TerminalAccess", access_carrier.QetRouteCarrierKind) + self.assertEqual("UserPath", sample["target_kind"]) + self.assertGreater(sample["access_length_mm"], 0.0) + self.assertGreaterEqual(len(sample["access_points"]), 2) + + def test_check_routing_path_network_compact_payload_includes_terminal_exit_diagnostics(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc - app._qet_exchange_summary = { - "wire_style_database_path": "D:/project/project-local.sqlite", - } - terminal_objects.ensure_root_group(doc, "project-1") + root = terminal_objects.ensure_root_group(doc, "project-1") - summary = auto_routing_panel.AutoRoutingController().summary() + corrected_device = doc.addObject("App::DocumentObjectGroup", "QETDeviceCorrectedExit") + root.addObject(corrected_device) + corrected = _terminal(doc, terminal_objects, "TerminalCorrectedExit", "terminal-corrected", app.Vector(0, 0, 0)) + corrected_device.addObject(corrected) + corrected_body = doc.addObject("Part::Feature", "CorrectedDeepBody") + corrected_body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 500)) + corrected_device.addObject(corrected_body) + + capped_device = doc.addObject("App::DocumentObjectGroup", "QETDeviceCappedExit") + root.addObject(capped_device) + capped = _terminal(doc, terminal_objects, "TerminalCappedExit", "terminal-capped", app.Vector(100, 0, 0)) + capped.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + capped.QetTerminalExitDirectionJson = json.dumps({"x": 0, "y": 0, "z": 1}) + capped_device.addObject(capped) + capped_body = doc.addObject("Part::Feature", "CappedDeepBody") + capped_body.Shape = FakeShape(FakeBoundBox(90, 110, -10, 10, -10, 500)) + capped_device.addObject(capped_body) - self.assertIn("导线样式库:D:/project/project-local.sqlite", summary) + routing_network.create_route_carrier( + doc, + [app.Vector(20, 0, 0), app.Vector(120, 0, 0)], + label="侧向主路径", + project_uuid="project-1", + kind="UserPath", + ) - def test_auto_routing_controller_summary_reads_wire_style_database_path_from_payload(self): + result = auto_routing.check_eplan_routing_path_network( + doc, + project_uuid="project-1", + options={"terminal_exit_length": 20.0, "terminal_exit_max_length": 30.0}, + ) + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + + self.assertIn("terminal_exit_direction_corrected", result["issue_codes"]) + self.assertIn("terminal_exit_length_capped", result["issue_codes"]) + self.assertEqual(1, len(payload["corrected_terminal_exits"])) + corrected_sample = payload["corrected_terminal_exits"][0] + self.assertEqual("TerminalCorrectedExit", corrected_sample["name"]) + self.assertEqual("terminal-corrected", corrected_sample["terminal_uuid"]) + self.assertEqual({"x": 1.0, "y": 0.0, "z": 0.0}, corrected_sample["exit_direction"]) + self.assertEqual({"x": 0.0, "y": 0.0, "z": 1.0}, corrected_sample["original_exit_direction"]) + self.assertEqual(1, len(payload["capped_terminal_exits"])) + capped_sample = payload["capped_terminal_exits"][0] + self.assertEqual("TerminalCappedExit", capped_sample["name"]) + self.assertEqual("terminal-capped", capped_sample["terminal_uuid"]) + self.assertEqual(30.0, capped_sample["max_exit_length_mm"]) + self.assertEqual(30.0, capped_sample["actual_exit_length_mm"]) + self.assertTrue(capped_sample["exit_length_capped"]) + + def test_compact_routing_path_network_diagnostic_keeps_terminal_access_quality_samples(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") - app = sys.modules["FreeCAD"] - doc = FakeDocument() - app.ActiveDocument = doc - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wire_style_database_path": "D:/project/payload-style.sqlite", - "wires": [], + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + diagnostic = { + "ok": False, + "issues": [ + {"severity": "warning", "code": "terminal_access_fallback_targets", "count": 1}, + {"severity": "info", "code": "terminal_access_endpoint_device_avoidance", "count": 1}, + ], + "terminal_access_fallback_targets": [ + { + "terminal_name": "TerminalFallbackAccess", + "terminal_label": "P1", + "terminal_uuid": "terminal-fallback", + "access_carrier_name": "TerminalAccessFallback001", + "access_carrier_label": "P1 接入段", + "instance_id": "instance-fallback", + "parent_device_name": "DeviceQF1", + "parent_device_label": "QF1", + "target_kind": "RoutingRange", + "target_name": "RoutingRange001", + "target_label": "安装板兜底路径", + "target_rule": "fallback_only", + "target_distance_mm": 35.0, + } + ], + "terminal_access_endpoint_device_avoidance": [ + { + "terminal_name": "TerminalWithLocalExit", + "terminal_label": "A1", + "terminal_uuid": "terminal-local-exit", + "access_carrier_name": "TerminalAccessAvoid001", + "access_carrier_label": "A1 接入段", + "instance_id": "instance-local-exit", + "parent_device_name": "DeviceKA1", + "parent_device_label": "KA1", + "target_kind": "UserPath", + "target_name": "UserPath001", + "target_label": "左侧主路径", + "target_rule": "main_path_nearest", + "target_distance_mm": 40.0, + } + ], } - terminal_objects.ensure_root_group(doc, "project-1") - - summary = auto_routing_panel.AutoRoutingController().summary() - self.assertIn("导线样式库:D:/project/payload-style.sqlite", summary) + payload = auto_routing._compact_routing_path_network_diagnostic(diagnostic) + + self.assertEqual(1, len(payload["terminal_access_fallback_targets"])) + fallback_sample = payload["terminal_access_fallback_targets"][0] + self.assertEqual("TerminalFallbackAccess", fallback_sample["terminal_name"]) + self.assertEqual("terminal-fallback", fallback_sample["terminal_uuid"]) + self.assertEqual("DeviceQF1", fallback_sample["parent_device_name"]) + self.assertEqual("TerminalAccessFallback001", fallback_sample["access_carrier_name"]) + self.assertEqual("P1 接入段", fallback_sample["access_carrier_label"]) + self.assertEqual("RoutingRange001", fallback_sample["target_name"]) + self.assertEqual("fallback_only", fallback_sample["target_rule"]) + self.assertEqual(1, len(payload["terminal_access_endpoint_device_avoidance"])) + avoidance_sample = payload["terminal_access_endpoint_device_avoidance"][0] + self.assertEqual("TerminalWithLocalExit", avoidance_sample["terminal_name"]) + self.assertEqual("terminal-local-exit", avoidance_sample["terminal_uuid"]) + self.assertEqual("DeviceKA1", avoidance_sample["parent_device_name"]) + self.assertEqual("TerminalAccessAvoid001", avoidance_sample["access_carrier_name"]) + self.assertEqual("A1 接入段", avoidance_sample["access_carrier_label"]) + self.assertEqual("UserPath001", avoidance_sample["target_name"]) - def test_auto_routing_controller_summary_prefers_current_payload_style_database_path(self): + def test_zero_distance_user_path_endpoint_splits_wire_duct_segment(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc - app._qet_exchange_summary = { - "project_uuid": "project-old", - "wire_style_database_path": "D:/old/project-local.sqlite", - } - app._qet_exchange_payload = { - "project_uuid": "project-current", - "wire_style_database_path": "D:/current/project-local.sqlite", - "wires": [], - } - terminal_objects.ensure_root_group(doc, "project-current") + terminal_objects.ensure_root_group(doc, "project-1") + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 100, 0)], + project_uuid="project-1", + kind="WireDuct", + label="斜向线槽", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(50, 50, 0), app.Vector(50, 90, 0)], + project_uuid="project-1", + kind="UserPath", + label="零距离桥接", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(50, 90, 0), app.Vector(50, 130, 0)], + project_uuid="project-1", + kind="TerminalAccess", + label="端子接入", + ) - summary = auto_routing_panel.AutoRoutingController().summary() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") - self.assertIn("导线样式库:D:/current/project-local.sqlite", summary) - self.assertNotIn("D:/old/project-local.sqlite", summary) + self.assertNotIn("wire_ducts_without_terminal_access", result["issue_codes"]) - def test_auto_routing_controller_summary_includes_route_constraint_counts(self): + def test_create_user_path_bridge_from_selection_connects_nearest_route_points(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - required = routing_network.create_route_carrier( + duct = routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], project_uuid="project-1", - kind="UserPath", + kind="WireDuct", + label="线槽", ) - required.QetRouteConstraintMode = "Required" - forbidden = routing_network.create_route_carrier( + main_path = routing_network.create_route_carrier( doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + [app.Vector(120, 20, 0), app.Vector(200, 20, 0)], project_uuid="project-1", - kind="UserPath", + kind="RoutingRange", + label="主网络", ) - forbidden.QetRouteConstraintMode = "Forbidden" - summary = auto_routing_panel.AutoRoutingController().summary() + created = routing_network.create_user_path_bridge_from_selection( + doc, + [ + types.SimpleNamespace(Object=duct), + types.SimpleNamespace(Object=main_path), + ], + project_uuid="project-1", + ) - self.assertIn("路径约束:必经 1,禁经 1", summary) + self.assertEqual(1, len(created)) + self.assertEqual("UserPath", created[0].QetRouteCarrierKind) + self.assertEqual([(100.0, 0.0, 0.0), (120.0, 20.0, 0.0)], [ + (point.x, point.y, point.z) + for point in created[0].Points + ]) - def test_auto_routing_controller_summary_includes_source_route_constraint_counts(self): + def test_create_user_path_bridge_between_source_objects_uses_nearest_carrier_pair(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Sketcher::SketchObject", "FutureUserRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], + fallback_source = doc.addObject("Part::Feature", "DoorRoutingRangeSource") + fallback_source.Label = "门板布线面" + current_source = doc.addObject("Part::Feature", "MainDuctSource") + current_source.Label = "主线槽" + far_fallback = routing_network.create_route_carrier( + doc, + [app.Vector(-500, 0, 0), app.Vector(-400, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="远处布线面", ) - route_path.QetRouteConstraintMode = "Required" + near_fallback = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(100, 0, 0)], + project_uuid="project-1", + kind="RoutingRange", + label="近处布线面", + ) + main_path = routing_network.create_route_carrier( + doc, + [app.Vector(130, 20, 0), app.Vector(200, 20, 0)], + project_uuid="project-1", + kind="WireDuct", + label="主线槽路径", + ) + for carrier in (far_fallback, near_fallback): + carrier.QetRouteSourceName = fallback_source.Name + carrier.QetRouteSourceLabel = fallback_source.Label + main_path.QetRouteSourceName = current_source.Name + main_path.QetRouteSourceLabel = current_source.Label - summary = auto_routing_panel.AutoRoutingController().summary() + created = routing_network.create_user_path_bridge_between_objects( + doc, + fallback_source, + current_source, + project_uuid="project-1", + ) - self.assertIn("源路径约束:必经 1,禁经 0", summary) + self.assertEqual(1, len(created)) + self.assertEqual("UserPath", created[0].QetRouteCarrierKind) + self.assertEqual( + [(100.0, 0.0, 0.0), (130.0, 20.0, 0.0)], + [(point.x, point.y, point.z) for point in created[0].Points], + ) + self.assertEqual("MainPathDetourBridge", created[0].QetRouteBridgeKind) + self.assertEqual("门板布线面 -> 主线槽", created[0].QetRouteBridgePairLabel) + self.assertEqual(fallback_source.Name, created[0].QetRouteBridgeLeftSourceName) + self.assertEqual(current_source.Name, created[0].QetRouteBridgeRightSourceName) - def test_auto_routing_controller_summary_counts_wire_duct_source_route_constraints(self): + duplicated = routing_network.create_user_path_bridge_between_objects( + doc, + fallback_source, + current_source, + project_uuid="project-1", + ) + + self.assertEqual([], duplicated) + + def test_check_routing_path_network_warns_for_invalid_terminal_exit_direction(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - wire_duct_source = doc.addObject("Part::Feature", "WireDuctBody") - wire_duct_source.Shape = FakeShape(FakeBoundBox(0, 100, 0, 20, 0, 20)) - wire_duct_source.Shape.Solids = [object()] - wire_duct_source.QetRoutingSourceKind = "WireDuct" - wire_duct_source.QetRouteConstraintMode = "Forbidden" + terminal = _terminal(doc, terminal_objects, "TerminalInvalidDirection", "terminal-invalid-direction", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + terminal.QetTerminalExitDirectionJson = "{not-valid-json" + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=1000.0, + ) - summary = auto_routing_panel.AutoRoutingController().summary() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - self.assertIn("源路径约束:必经 0,禁经 1", summary) + self.assertFalse(result["ok"]) + self.assertIn("invalid_terminal_exit_directions", payload["issue_codes"]) + self.assertEqual(1, len(payload["invalid_terminal_exit_directions"])) + self.assertEqual( + "terminal-invalid-direction", + payload["invalid_terminal_exit_directions"][0]["terminal_uuid"], + ) + self.assertEqual( + "QetTerminalExitDirectionJson", + payload["invalid_terminal_exit_directions"][0]["property_name"], + ) + self.assertIn("端子出线方向无效", message) + self.assertIn("terminal-invalid-direction", message) - def test_auto_routing_controller_exposes_lane_spacing(self): + def test_check_routing_path_network_warns_for_invalid_terminal_local_route_points(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 0, 0)) - _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 0, 0)) + terminal = _terminal(doc, terminal_objects, "TerminalInvalidLocalPath", "terminal-invalid-local-path", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = "{not-valid-json" routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", kind="WireDuct", ) - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_terminal_uuid": "terminal-start-a", - "end_terminal_uuid": "terminal-end-a", - }, - { - "wire_id": "wire-b", - "start_terminal_uuid": "terminal-start-b", - "end_terminal_uuid": "terminal-end-b", - }, - ], - } + routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=1000.0, + ) - controller = auto_routing_panel.AutoRoutingController() - controller.set_lane_spacing(14.0) - report = controller.route_eplan_connections() + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - self.assertEqual(14.0, controller.routing_options()["lane_spacing"]) - self.assertEqual(14.0, report["routes"][1]["lane"]["spacing_mm"]) - self.assertEqual(14.0, report["routes"][1]["lane"]["offset_mm"]) + self.assertFalse(result["ok"]) + self.assertEqual(1, len(payload["invalid_terminal_local_routes"])) + self.assertEqual( + "terminal-invalid-local-path", + payload["invalid_terminal_local_routes"][0]["terminal_uuid"], + ) + self.assertEqual( + "QetTerminalLocalRoutePointsJson", + payload["invalid_terminal_local_routes"][0]["property_name"], + ) + self.assertEqual( + "invalid_json", + payload["invalid_terminal_local_routes"][0]["reason"], + ) + self.assertIn("端子局部路径无效", message) + self.assertIn("terminal-invalid-local-path", message) - def test_auto_routing_controller_exposes_lane_axis(self): + def test_check_routing_path_network_uses_terminal_local_route_end_for_connectivity(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(0, 100, 0)) - _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(0, 100, 0)) + terminal = _terminal(doc, terminal_objects, "TerminalLocalEndOnDuct", "terminal-local-end-on-duct", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [1000, 0, 0]]) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(0, 100, 20)], + [app.Vector(1000, 0, 0), app.Vector(1100, 0, 0)], project_uuid="project-1", kind="WireDuct", ) - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_terminal_uuid": "terminal-start-a", - "end_terminal_uuid": "terminal-end-a", - }, - { - "wire_id": "wire-b", - "start_terminal_uuid": "terminal-start-b", - "end_terminal_uuid": "terminal-end-b", - }, - ], + created = routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=100.0, + ) + + result = auto_routing.check_eplan_routing_path_network( + doc, + project_uuid="project-1", + options={"terminal_access_max_distance": 100.0}, + ) + + self.assertEqual([], created) + self.assertEqual([], result["diagnostic"]["unconnected_terminals"]) + self.assertNotIn( + "unconnected_terminals", + [issue.get("code") for issue in result["diagnostic"]["issues"]], + ) + + def test_format_routing_path_network_report_tolerates_malformed_samples(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + diagnostic = { + "issues": [{"code": "external_issue", "count": 1}], + "unconnected_terminals": ["bad-terminal-sample"], + "possible_breaks": ["bad-break-sample"], + "isolated_components": ["bad-component-sample"], } - controller = auto_routing_panel.AutoRoutingController() - controller.set_lane_spacing(8.0) - controller.set_lane_axis("z") - report = controller.route_eplan_connections() + message = auto_routing.format_routing_path_network_report(diagnostic) - self.assertEqual("z", controller.routing_options()["lane_axis"]) - self.assertEqual("z", report["routes"][1]["lane"]["axis"]) - self.assertEqual(8.0, report["routes"][1]["lane"]["offset_mm"]) + self.assertIn("布线路径网络检查发现", message) + self.assertIn("首个问题:external_issue", message) - def test_auto_routing_controller_exposes_lane_max_offset(self): + def test_format_routing_path_network_report_calls_out_wire_duct_break_point(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="线槽A", project_uuid="project-1", kind="WireDuct", ) - controller = auto_routing_panel.AutoRoutingController() - controller.set_lane_spacing(10.0) - controller.set_lane_axis("y") - controller.set_lane_max_offset(18.0) - result = _auto_routing.route_eplan_connection_between_terminals( + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + + self.assertIn("线槽端点疑似断开", message) + self.assertIn("线槽A", message) + self.assertIn("(0.0, 0.0, 20.0)", message) + self.assertIn("补齐相邻线槽", message) + + def test_check_routing_path_network_warns_when_network_is_empty(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + + self.assertFalse(result["ok"]) + self.assertEqual("empty_routing_path_network", payload["issues"][0]["code"]) + self.assertEqual(0, payload["summary"]["segments"]) + self.assertIn("布线路径网络为空", message) + + def test_check_routing_path_network_warns_for_invalid_route_carrier_geometry(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + carrier = routing_network.create_route_carrier( doc, - start, - end, - route_index=21, - options=controller.routing_options(), + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="坏用户路径", + project_uuid="project-1", + kind="UserPath", ) + carrier.Points = [app.Vector(0, 0, 20)] - self.assertEqual(18.0, controller.routing_options()["lane_max_offset"]) - self.assertEqual(18.0, result["lane"]["max_offset_mm"]) - self.assertEqual(18.0, result["lane"]["offset_mm"]) + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) - def test_auto_routing_controller_exposes_obstacle_clearance(self): + self.assertFalse(result["ok"]) + self.assertEqual(1, len(payload["invalid_route_carriers"])) + self.assertEqual("UserPath", payload["invalid_route_carriers"][0]["carrier"]["kind"]) + self.assertEqual(1, payload["invalid_route_carriers"][0]["point_count"]) + self.assertIn("路径对象几何无效", message) + self.assertIn("坏用户路径", message) + + def test_check_routing_path_network_warns_when_only_routing_range_is_available(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", - kind="WireDuct", + kind="RoutingRange", ) - obstacle = doc.addObject("Part::Feature", "NearObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(40, 60, 3, 6, 15, 25)) - controller = auto_routing_panel.AutoRoutingController() - controller.set_obstacle_clearance(5.0) - result = _auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options=controller.routing_options(), + result = auto_routing.check_eplan_routing_path_network(doc, project_uuid="project-1") + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + message = auto_routing.format_routing_path_network_report(result["diagnostic"]) + + self.assertFalse(result["ok"]) + self.assertEqual(1, payload["routing_range_only_network"]["routing_range_carriers"]) + self.assertEqual( + 0, + payload["routing_range_only_network"]["primary_route_carriers"], ) + self.assertIn("routing_range_only_network", [issue.get("code") for issue in payload["issues"]]) + self.assertIn("仅使用布线面兜底", message) - self.assertEqual(5.0, controller.routing_options()["obstacle_clearance"]) - self.assertEqual("CollisionWarning", result["route_status"]) - self.assertEqual("ClearanceWarning", result["collisions"][0]["collision_kind"]) - self.assertEqual(["QET Route Carrier"], result["collisions"][0]["route_source_labels"]) - diagnostics = json.loads(result["wire"].QetRouteDiagnosticsJson) - self.assertEqual(["QET Route Carrier"], diagnostics["collisions"][0]["route_source_labels"]) + def test_format_routing_path_network_report_includes_bridged_segment_count(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + diagnostic = { + "summary": { + "carriers": 5, + "segments": 6, + "nodes": 5, + "bridged_segments": 1, + }, + "issues": [], + "ok": True, + } - def test_auto_routing_controller_exposes_preflight_routeability_sample_limit(self): + message = auto_routing.format_routing_path_network_report(diagnostic) + + self.assertIn("桥接 1 段相邻/投影主路径", message) + + def test_routing_path_network_diagnostic_message_tolerates_malformed_bridge_count(self): _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + _terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + diagnostic = { + "summary": { + "carriers": 1, + "segments": 1, + "nodes": 2, + "bridged_segments": "not-a-number", + }, + "issues": [], + } - controller = auto_routing_panel.AutoRoutingController() - controller.set_preflight_routeability_sample_limit(75) + message = routing_network._routing_path_network_diagnostic_message(diagnostic) - self.assertEqual(75, controller.routing_options()["preflight_routeability_sample_limit"]) + self.assertIn("布线路径网络检查通过", message) - def test_auto_routing_controller_exposes_segment_reuse_penalty(self): + def test_check_routing_path_network_uses_adjoining_duct_tolerance_option(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - auto_routing_panel = importlib.import_module("AutoRoutingPanel") + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 0, 0)) - _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="Direct Duct", - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(0, 40, 20)], - label="Left Bridge", - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="Alternate Duct", - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( + for index, points in enumerate( + ( + [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], + [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(100, 0, 20), app.Vector(100, 100, 20)], + [app.Vector(100, 100, 20), app.Vector(0, 100, 20)], + [app.Vector(0, 100, 20), app.Vector(0, 0, 20)], + ), + start=1, + ): + routing_network.create_route_carrier( + doc, + points, + label="线槽{0}".format(index), + project_uuid="project-1", + kind="WireDuct", + ) + + result = auto_routing.check_eplan_routing_path_network( doc, - [app.Vector(100, 40, 20), app.Vector(100, 0, 20)], - label="Right Bridge", project_uuid="project-1", - kind="WireDuct", + options={"adjoining_duct_tolerance": 15.0}, ) - app._qet_exchange_payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_terminal_uuid": "terminal-start-a", - "end_terminal_uuid": "terminal-end-a", - }, - { - "wire_id": "wire-b", - "start_terminal_uuid": "terminal-start-b", - "end_terminal_uuid": "terminal-end-b", - }, - ], - } - - controller = auto_routing_panel.AutoRoutingController() - controller.set_segment_reuse_penalty(0.0) - report = controller.route_eplan_connections() - second_labels = [ - segment["carrier"]["label"] - for segment in report["routes"][1]["route_track"]["segments"] - ] - self.assertEqual(0.0, controller.routing_options()["segment_reuse_penalty"]) - self.assertIn("Direct Duct", second_labels) - self.assertNotIn("Alternate Duct", second_labels) + self.assertTrue(result["ok"]) + self.assertEqual(1, result["diagnostic"]["summary"]["bridged_segments"]) + self.assertEqual([], result["diagnostic"]["possible_breaks"]) - def test_auto_routing_panel_command_button_style_keeps_text_visible(self): + def test_generate_routing_path_network_skips_far_terminal_access_to_protect_view_bbox(self): _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() auto_routing_panel = importlib.import_module("AutoRoutingPanel") - - class FakeButton: - def __init__(self): - self.text = "" - self.tooltip = "" - self.minimum_height = 0 - self.stylesheet = "" - - def setText(self, text): - self.text = text - - def setToolTip(self, tooltip): - self.tooltip = tooltip - - def setMinimumHeight(self, height): - self.minimum_height = height - - def setStyleSheet(self, stylesheet): - self.stylesheet = stylesheet - - button = FakeButton() - - auto_routing_panel._style_command_button(button, "生成布线连接", "按导线任务布线") - - self.assertEqual("生成布线连接", button.text) - self.assertEqual("按导线任务布线", button.tooltip) - self.assertGreaterEqual(button.minimum_height, 28) - self.assertIn("color", button.stylesheet) - - def test_eplan_connection_route_rejects_far_network_entry_to_avoid_huge_render_bbox(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(5000, 0, 20), app.Vector(5100, 0, 20)], - project_uuid="project-1", - kind="WireDuct", - ) + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + duct = doc.addObject("Part::Feature", "WireDuctFar") + duct.Label = "Wire Duct Far" + duct.Shape = FakeShape(FakeBoundBox(5000, 5100, -5, 5, 15, 25)) - with self.assertRaises(auto_routing.AutoRoutingError): - auto_routing.route_eplan_connection_between_terminals(doc, start, end) + result = auto_routing_panel.AutoRoutingController().generate_routing_paths() - def test_route_eplan_connection_between_terminals_fails_without_network(self): + self.assertEqual(1, result["wire_duct_carriers"]) + self.assertEqual(2, result["wire_duct_open_end_carriers"]) + self.assertEqual(0, result["terminal_access_carriers"]) + + def test_auto_routing_controller_exposes_terminal_access_max_distance(self): _install_fake_freecad() - terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 30, 0)) + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + duct = doc.addObject("Part::Feature", "WireDuctFar") + duct.Label = "Wire Duct Far" + duct.Shape = FakeShape(FakeBoundBox(5000, 5100, -5, 5, 15, 25)) - with self.assertRaises(auto_routing.AutoRoutingError): - auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertEqual(0, len(wiring_objects.iter_routed_wire_objects(doc))) + controller = auto_routing_panel.AutoRoutingController() + controller.set_terminal_access_max_distance(6000.0) + result = controller.generate_routing_paths() - def test_surface_carrier_grid_uses_actual_rotated_face_plane(self): + self.assertEqual(1, result["terminal_access_carriers"]) + self.assertEqual(6000.0, controller.routing_options()["terminal_access_max_distance"]) + + def test_auto_routing_controller_exposes_terminal_access_warning_distance(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - normal = app.Vector(0, 1, 1) - vertices = [ - app.Vector(0, 0, 0), - app.Vector(100, 0, 0), - app.Vector(0, 50, -50), - app.Vector(100, 50, -50), - ] - face = FakeFace( - FakeBoundBox(0, 100, 0, 50, -50, 0), - normal, - vertices=vertices, - center=app.Vector(50, 25, -25), - ) - - created = routing_network.create_surface_carriers_from_selection( + _terminal(doc, terminal_objects, "TerminalLongAccess", "terminal-long-access", app.Vector(0, 0, 0)) + routing_network.create_route_carrier( doc, - [FakeSelectionItem([face])], + [app.Vector(900, 0, 20), app.Vector(1000, 0, 20)], project_uuid="project-1", - spacing=50.0, - offset=10.0, - margin=0.0, - ) - - self.assertGreater(len(created), 0) - first_point = created[0].Points[0] - for carrier in created: - for point in carrier.Points: - # The rotated face is y + z = 0; after a 10 mm normal offset, - # all generated points must stay on one parallel plane. - self.assertAlmostEqual(first_point.y + first_point.z, point.y + point.z, places=6) - - def test_route_path_creation_ignores_whole_solid_object_edges(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - solid = doc.addObject("Part::Feature", "CabinetSolid") - solid.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 100, 0, 10), - edges=[FakeEdge(app.Vector(0, 0, 0), app.Vector(100, 0, 0))], - faces=[object()], + kind="WireDuct", ) - - created = routing_network.create_carriers_from_selection( + routing_network.create_terminal_access_carriers_from_document( doc, - [FakeSelectionItem(obj=solid)], project_uuid="project-1", + terminal_exit_length=20.0, + max_distance=1000.0, ) + controller = auto_routing_panel.AutoRoutingController() + controller.set_terminal_access_max_distance(1000.0) + controller.set_terminal_access_warning_distance(950.0) - self.assertEqual([], created) + result = controller.check_routing_path_network() - def test_route_path_creation_splits_disconnected_shape_wires(self): + self.assertNotIn("long_terminal_accesses", result["issue_codes"]) + self.assertEqual(950.0, controller.routing_options()["terminal_access_warning_distance"]) + + def test_auto_routing_controller_exposes_terminal_exit_length(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - route_path = doc.addObject("Sketcher::SketchObject", "MultiWireRouteSketch") - route_path.Shape = FakeShape( - FakeBoundBox(0, 120, 0, 80, 20, 20), - wires=[ - FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), - FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), - ], - ) + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(50, 0, 0)) + duct = doc.addObject("Part::Feature", "WireDuctA") + duct.Label = "Wire Duct A" + duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) - created = routing_network.create_carriers_from_selection( - doc, - [FakeSelectionItem(obj=route_path)], - project_uuid="project-1", - ) + controller = auto_routing_panel.AutoRoutingController() + controller.set_terminal_exit_length(40.0) + controller.generate_routing_paths() + access_carriers = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteCarrierKind", "") == "TerminalAccess" + ] - self.assertEqual(2, len(created)) + self.assertEqual(1, len(access_carriers)) self.assertEqual( - [ - [(0.0, 0.0, 20.0), (40.0, 0.0, 20.0)], - [(80.0, 80.0, 20.0), (120.0, 80.0, 20.0)], - ], - [[(point.x, point.y, point.z) for point in carrier.Points] for carrier in created], + (50.0, 0.0, 40.0), + tuple(getattr(access_carriers[0].Points[0], axis) for axis in ("x", "y", "z")), ) + self.assertEqual(40.0, controller.routing_options()["terminal_exit_length"]) - def test_route_path_creation_projects_line_to_selected_face(self): + def test_auto_routing_controller_readiness_writes_preflight_diagnostic(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - face = FakeFace( - FakeBoundBox(0, 100, 0, 100, 0, 0), - app.Vector(0, 0, 1), - ) - draft_line = doc.addObject("Part::Feature", "DraftLine") - draft_line.Shape = FakeShape( - FakeBoundBox(10, 90, 10, 90, 25, 35), - edges=[FakeEdge(app.Vector(10, 10, 25), app.Vector(90, 90, 35))], - ) - - created = routing_network.create_carriers_from_selection( - doc, - [ - FakeSelectionItem([face]), - FakeSelectionItem(obj=draft_line), + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-missing", + } ], - project_uuid="project-1", - ) - - self.assertEqual(1, len(created)) - self.assertEqual([2.0, 2.0], [point.z for point in created[0].Points]) - - def test_wire_duct_entity_generates_centerline_and_marks_source_pass_through(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - duct = doc.addObject("Part::Feature", "WireDuct") - duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) + } - created = routing_network.create_wire_duct_carriers_from_selection( - doc, - [FakeSelectionItem(obj=duct)], - project_uuid="project-1", - margin=20.0, - ) + report = auto_routing_panel.AutoRoutingController().check_routing_readiness() + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - self.assertEqual(3, len(created)) - carrier = [item for item in created if item.QetRouteCarrierKind == "WireDuct"][0] - open_ends = [item for item in created if item.QetRouteCarrierKind == "WireDuctOpenEnd"] - self.assertEqual("WireDuct", carrier.QetRouteCarrierKind) - self.assertEqual(2, len(open_ends)) - self.assertEqual("PassThrough", duct.QetRoutingObstacleMode) - self.assertEqual([(20.0, 0.0, 15.0), (100.0, 0.0, 15.0)], [(p.x, p.y, p.z) for p in carrier.Points]) + self.assertIn("missing_endpoints", report["issue_codes"]) + self.assertIsNotNone(diagnostic_group) + self.assertEqual(1, len(diagnostic_group.Group)) + self.assertEqual("RoutingPreflight", diagnostic_group.Group[0].QetDiagnosticKind) - def test_wire_duct_source_end_margin_controls_generated_centerline_length(self): + def test_route_eplan_connections_prepares_layout_space_like_eplan_route(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "线槽A" - duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) - duct.QetWireDuctEndMarginMm = 5.0 - - created = routing_network.create_wire_duct_carriers_from_document( - doc, - project_uuid="project-1", - ) - - carrier = [item for item in created if item.QetRouteCarrierKind == "WireDuct"][0] - self.assertIn("QetWireDuctEndMarginMm", duct.PropertiesList) - self.assertEqual(5.0, duct.QetWireDuctEndMarginMm) - self.assertEqual([(5.0, 0.0, 15.0), (115.0, 0.0, 15.0)], [(p.x, p.y, p.z) for p in carrier.Points]) - - def test_wire_duct_source_capacity_is_copied_to_generated_carriers(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - duct = doc.addObject("Part::Feature", "WireDuct") - duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) - duct.QetRouteCarrierCapacity = 4 + duct.Label = "Wire Duct A" + duct.Shape = FakeShape(FakeBoundBox(0, 100, -5, 5, 15, 25)) + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + } + ], + } - created = routing_network.create_wire_duct_carriers_from_selection( - doc, - [FakeSelectionItem(obj=duct)], - project_uuid="project-1", - margin=20.0, - ) + report = auto_routing_panel.AutoRoutingController().route_eplan_connections() - self.assertIn("QetRouteCarrierCapacity", duct.PropertiesList) - self.assertTrue(all(item.QetRouteCarrierCapacity == 4 for item in created)) + self.assertEqual(1, report["routed"]) + self.assertEqual("eplan-route-v1", report["routing_method"]) + self.assertTrue(report["routing_path_network_updated"]) + self.assertEqual(1, report["prepared_layout"]["wire_duct_carriers"]) + self.assertEqual(1, report["routing_path_network"]["wire_duct_carriers"]) + self.assertEqual(2, report["prepared_layout"]["terminal_access_carriers"]) + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + self.assertIsNotNone(diagnostic_group) + self.assertEqual(1, len(diagnostic_group.Group)) + diagnostic_payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + self.assertEqual(1, diagnostic_payload["prepared_layout"]["wire_duct_carriers"]) + self.assertEqual(2, diagnostic_payload["prepared_layout"]["terminal_access_carriers"]) - def test_auto_detect_wire_ducts_ignores_cabinet_models(self): + def test_auto_routing_controller_passes_adjoining_duct_tolerance_to_batch_route(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - duct = doc.addObject("Part::Feature", "WireDuctA") - duct.Label = "线槽A" - duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) - cabinet = doc.addObject("Part::Feature", "Cabinet") - cabinet.Label = "3D机柜" - cabinet.Shape = FakeShape(FakeBoundBox(0, 300, 0, 80, 0, 400)) - - created = routing_network.create_wire_duct_carriers_from_document( - doc, - project_uuid="project-1", - ) - created_again = routing_network.create_wire_duct_carriers_from_document( + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(1000, 0, 0)) + routing_network.create_route_carrier( doc, + [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], project_uuid="project-1", + kind="WireDuct", ) - - self.assertEqual(3, len(created)) - self.assertEqual(0, len(created_again)) - self.assertEqual(1, len([item for item in created if item.QetRouteCarrierKind == "WireDuct"])) - self.assertEqual(2, len([item for item in created if item.QetRouteCarrierKind == "WireDuctOpenEnd"])) - self.assertEqual("PassThrough", duct.QetRoutingObstacleMode) - self.assertFalse(hasattr(cabinet, "QetRoutingObstacleMode")) - - def test_wire_duct_source_is_not_reported_as_collision(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) - duct = doc.addObject("Part::Feature", "WireDuct") - duct.Shape = FakeShape(FakeBoundBox(-10, 130, -10, 10, 15, 25)) - routing_network.create_wire_duct_carriers_from_selection( + routing_network.create_route_carrier( doc, - [FakeSelectionItem(obj=duct)], + [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", - margin=0.0, + kind="WireDuct", ) + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + } + ], + } - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + report = auto_routing_panel.AutoRoutingController( + options={"adjoining_duct_tolerance": 15.0} + ).route_eplan_connections() - self.assertEqual("network-dijkstra-v1", result["algorithm"]) - self.assertEqual("Routed", result["route_status"]) - self.assertEqual(0, result["collision_count"]) + self.assertEqual(1, report["routed"]) + self.assertEqual(1, report["routes"][0]["network"]["bridged_segments"]) - def test_eplan_connection_route_uses_alternate_carrier_to_avoid_obstacle(self): + def test_auto_routing_controller_summary_uses_adjoining_duct_tolerance(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], project_uuid="project-1", kind="WireDuct", ) routing_network.create_route_carrier( doc, - [ - app.Vector(0, 0, 20), - app.Vector(0, 50, 20), - app.Vector(100, 50, 20), - app.Vector(100, 0, 20), - ], + [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", kind="WireDuct", ) - obstacle = doc.addObject("Part::Feature", "CabinetObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(40, 60, -10, 10, 15, 25)) - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + summary = auto_routing_panel.AutoRoutingController( + options={"adjoining_duct_tolerance": 15.0} + ).summary() - self.assertEqual("network-dijkstra-v1", result["algorithm"]) - self.assertEqual("Routed", result["route_status"]) - self.assertEqual(0, result["collision_count"]) - self.assertTrue(result["network"]["obstacle_aware"]) - self.assertGreaterEqual(result["network"]["blocked_segments"], 1) - self.assertIn(50.0, [point.y for point in result["points"]]) + self.assertIn("桥接:1", summary) - def test_eplan_connection_route_prefers_entry_candidate_without_access_collision(self): + def test_auto_routing_controller_summary_includes_runtime_version(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(20, 0, 0), app.Vector(100, 0, 0)], - label="Near Duct", - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 30, 0), app.Vector(100, 30, 0)], - label="Clear Duct", - project_uuid="project-1", - kind="WireDuct", - ) - obstacle = doc.addObject("Part::Feature", "AccessObstacle") - obstacle.Label = "Access Obstacle" - obstacle.Shape = FakeShape(FakeBoundBox(10, 15, -5, 5, -5, 5)) - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + summary = auto_routing_panel.AutoRoutingController().summary() - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("Clear Duct", labels) - self.assertNotIn("Near Duct", labels) - self.assertEqual(0, result["collision_count"]) + self.assertIn("版本:{0}".format(auto_routing.AUTO_ROUTING_RUNTIME_VERSION), summary) - def test_eplan_connection_route_keeps_clear_access_candidates_beyond_distance_limit(self): + def test_auto_routing_controller_summary_includes_cabinet_boundary_count(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - for index in range(9): - routing_network.create_route_carrier( - doc, - [app.Vector(20, index, 0), app.Vector(100, index, 0)], - label="Near Blocked Duct {0}".format(index + 1), - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 30, 0), app.Vector(100, 30, 0)], - label="Clear Duct", - project_uuid="project-1", - kind="WireDuct", - ) - obstacle = doc.addObject("Part::Feature", "AccessObstacle") - obstacle.Label = "Access Obstacle" - obstacle.Shape = FakeShape(FakeBoundBox(10, 15, -5, 20, -5, 5)) + boundary = doc.addObject("Part::Feature", "CabinetInteriorSpace") + boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) + boundary.QetRoutingBoundaryKind = "CabinetInterior" - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + summary = auto_routing_panel.AutoRoutingController().summary() - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("Clear Duct", labels) - self.assertTrue(all(not label.startswith("Near Blocked Duct") for label in labels)) - self.assertEqual(0, result["network"]["route_candidate_obstacle_hits"]) + self.assertIn("柜内边界:1", summary) - def test_eplan_connection_route_prefers_carrier_inside_cabinet_boundary(self): + def test_auto_routing_controller_summary_includes_wire_style_database_path(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc + app._qet_exchange_summary = { + "wire_style_database_path": "D:/project/project-local.sqlite", + } terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 49, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 49, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 51, 0), app.Vector(100, 51, 0)], - label="Outside Cabinet Path", - project_uuid="project-1", - kind="UserPath", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, -40, 0), app.Vector(100, -40, 0)], - label="Inside Cabinet Path", - project_uuid="project-1", - kind="UserPath", - ) - boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") - boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) - boundary.QetRoutingBoundaryKind = "CabinetInterior" - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + summary = auto_routing_panel.AutoRoutingController().summary() - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("Inside Cabinet Path", labels) - self.assertNotIn("Outside Cabinet Path", labels) - self.assertEqual(0, result["network"]["route_candidate_boundary_violations"]) + self.assertIn("导线样式库:D:/project/project-local.sqlite", summary) - def test_eplan_connection_route_prefers_inside_detour_over_shorter_outside_shortcut(self): + def test_auto_routing_controller_summary_reads_wire_style_database_path_from_payload(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wire_style_database_path": "D:/project/payload-style.sqlite", + "wires": [], + } terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( + + summary = auto_routing_panel.AutoRoutingController().summary() + + self.assertIn("导线样式库:D:/project/payload-style.sqlite", summary) + + def test_auto_routing_controller_summary_prefers_current_payload_style_database_path(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + doc = FakeDocument() + app.ActiveDocument = doc + app._qet_exchange_summary = { + "project_uuid": "project-old", + "wire_style_database_path": "D:/old/project-local.sqlite", + } + app._qet_exchange_payload = { + "project_uuid": "project-current", + "wire_style_database_path": "D:/current/project-local.sqlite", + "wires": [], + } + terminal_objects.ensure_root_group(doc, "project-current") + + summary = auto_routing_panel.AutoRoutingController().summary() + + self.assertIn("导线样式库:D:/current/project-local.sqlite", summary) + self.assertNotIn("D:/old/project-local.sqlite", summary) + + def test_auto_routing_controller_summary_includes_route_constraint_counts(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + required = routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(100, 51, 0), app.Vector(100, 0, 0)], - label="Outside Shortcut", + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", kind="UserPath", ) - routing_network.create_route_carrier( + required.QetRouteConstraintMode = "Required" + forbidden = routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 0), app.Vector(0, -40, 0), app.Vector(100, -40, 0), app.Vector(100, 0, 0)], - label="Inside Cabinet Detour", + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], project_uuid="project-1", kind="UserPath", ) - boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") - boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) - boundary.QetRoutingBoundaryKind = "CabinetInterior" + forbidden.QetRouteConstraintMode = "Forbidden" - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + summary = auto_routing_panel.AutoRoutingController().summary() - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("Inside Cabinet Detour", labels) - self.assertNotIn("Outside Shortcut", labels) - self.assertEqual(0, result["network"]["route_candidate_boundary_violations"]) + self.assertIn("路径约束:必经 1,禁经 1", summary) - def test_eplan_connection_wire_records_boundary_warning_when_route_leaves_cabinet(self): + def test_auto_routing_controller_summary_includes_source_route_constraint_counts(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 49, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 49, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 60, 0), app.Vector(100, 60, 0)], - label="Only Outside Cabinet Path", - project_uuid="project-1", - kind="UserPath", + route_path = doc.addObject("Sketcher::SketchObject", "FutureUserRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + edges=[FakeEdge(app.Vector(0, 0, 20), app.Vector(100, 0, 20))], ) - boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") - boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) - boundary.QetRoutingBoundaryKind = "CabinetInterior" + route_path.QetRouteConstraintMode = "Required" - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + summary = auto_routing_panel.AutoRoutingController().summary() - self.assertGreater(result["network"]["route_candidate_boundary_violations"], 0) - self.assertTrue(result["wire"].QetRouteBoundaryAware) - self.assertEqual("BoundaryWarning", result["wire"].QetRouteBoundaryStatus) - self.assertEqual( - str(result["network"]["route_candidate_boundary_violations"]), - result["wire"].QetRouteBoundaryViolationCount, - ) + self.assertIn("源路径约束:必经 1,禁经 0", summary) - def test_eplan_connection_wire_records_long_network_access_warning(self): + def test_auto_routing_controller_summary_counts_wire_duct_source_route_constraints(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 125, 0), app.Vector(100, 125, 0)], - label="Far Cabinet Main Path", - project_uuid="project-1", - kind="UserPath", - ) + wire_duct_source = doc.addObject("Part::Feature", "WireDuctBody") + wire_duct_source.Shape = FakeShape(FakeBoundBox(0, 100, 0, 20, 0, 20)) + wire_duct_source.Shape.Solids = [object()] + wire_duct_source.QetRoutingSourceKind = "WireDuct" + wire_duct_source.QetRouteConstraintMode = "Forbidden" - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={ - "terminal_exit_length": 0.0, - "lane_spacing": 0.0, - "terminal_access_warning_distance": 50.0, - }, - ) + summary = auto_routing_panel.AutoRoutingController().summary() - wire = result["wire"] - self.assertEqual("125.000", wire.QetRouteEntryDistanceMm) - self.assertEqual("125.000", wire.QetRouteExitDistanceMm) - self.assertEqual("node", wire.QetRouteEntryPointMode) - self.assertEqual("node", wire.QetRouteExitPointMode) - self.assertEqual("1", wire.QetRouteEntryCandidateRank) - self.assertEqual("1", wire.QetRouteExitCandidateRank) - self.assertEqual("50.000", wire.QetRouteAccessWarningDistanceMm) - self.assertEqual("LongAccessWarning", wire.QetRouteAccessStatus) - self.assertEqual("entry,exit", wire.QetRouteAccessWarningSides) - payload = json.loads(wire.QetRouteDiagnosticsJson) - self.assertEqual("LongAccessWarning", payload["access"]["access_status"]) - self.assertEqual(["entry", "exit"], payload["access"]["warning_sides"]) + self.assertIn("源路径约束:必经 0,禁经 1", summary) - def test_eplan_connection_route_keeps_inside_boundary_candidates_beyond_distance_limit(self): + def test_auto_routing_controller_exposes_lane_spacing(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 49, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 49, 0)) - for index in range(9): - y = 51 + index - routing_network.create_route_carrier( - doc, - [app.Vector(0, y, 0), app.Vector(100, y, 0)], - label="Outside Candidate {0}".format(index + 1), - project_uuid="project-1", - kind="UserPath", - ) + _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 0, 0)) + _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, -40, 0), app.Vector(100, -40, 0)], - label="Inside Cabinet Path", + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") - boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) - boundary.QetRoutingBoundaryKind = "CabinetInterior" + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start-a", + "end_terminal_uuid": "terminal-end-a", + }, + { + "wire_id": "wire-b", + "start_terminal_uuid": "terminal-start-b", + "end_terminal_uuid": "terminal-end-b", + }, + ], + } - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + controller = auto_routing_panel.AutoRoutingController() + controller.set_lane_spacing(14.0) + report = controller.route_eplan_connections() - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("Inside Cabinet Path", labels) - self.assertTrue(all(not label.startswith("Outside Candidate") for label in labels)) - self.assertEqual(0, result["network"]["route_candidate_boundary_violations"]) + self.assertEqual(14.0, controller.routing_options()["lane_spacing"]) + self.assertEqual(14.0, report["routes"][1]["lane"]["spacing_mm"]) + self.assertEqual(14.0, report["routes"][1]["lane"]["offset_mm"]) - def test_eplan_connection_route_tolerates_missing_route_constraint_collector(self): + def test_auto_routing_controller_exposes_lane_axis(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(0, 100, 0)) + _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(0, 100, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="主路径", + [app.Vector(0, 0, 20), app.Vector(0, 100, 20)], project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - collector = routing_network.collect_route_constraint_options - delattr(routing_network, "collect_route_constraint_options") - try: - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) - finally: - routing_network.collect_route_constraint_options = collector + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start-a", + "end_terminal_uuid": "terminal-end-a", + }, + { + "wire_id": "wire-b", + "start_terminal_uuid": "terminal-start-b", + "end_terminal_uuid": "terminal-end-b", + }, + ], + } - self.assertEqual("Routed", result["route_status"]) - self.assertEqual({}, result["network"].get("route_constraints", {})) + controller = auto_routing_panel.AutoRoutingController() + controller.set_lane_spacing(8.0) + controller.set_lane_axis("z") + report = controller.route_eplan_connections() - def test_eplan_connection_route_avoids_forbidden_carrier_label(self): + self.assertEqual("z", controller.routing_options()["lane_axis"]) + self.assertEqual("z", report["routes"][1]["lane"]["axis"]) + self.assertEqual(8.0, report["routes"][1]["lane"]["offset_mm"]) + + def test_auto_routing_controller_exposes_lane_max_offset(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="禁止路径", - project_uuid="project-1", - kind="UserPath", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="允许路径", project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - result = auto_routing.route_eplan_connection_between_terminals( + controller = auto_routing_panel.AutoRoutingController() + controller.set_lane_spacing(10.0) + controller.set_lane_axis("y") + controller.set_lane_max_offset(18.0) + result = _auto_routing.route_eplan_connection_between_terminals( doc, start, end, - options={ - "terminal_exit_length": 0.0, - "lane_spacing": 0.0, - "forbidden_route_carrier_labels": ["禁止路径"], - }, + route_index=21, + options=controller.routing_options(), ) - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("允许路径", labels) - self.assertNotIn("禁止路径", labels) + self.assertEqual(18.0, controller.routing_options()["lane_max_offset"]) + self.assertEqual(18.0, result["lane"]["max_offset_mm"]) + self.assertEqual(18.0, result["lane"]["offset_mm"]) - def test_eplan_connection_route_avoids_carrier_marked_forbidden(self): + def test_auto_routing_controller_exposes_obstacle_clearance(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - forbidden = routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="近路径", - project_uuid="project-1", - kind="UserPath", - ) - forbidden.QetRouteConstraintMode = "Forbidden" routing_network.create_route_carrier( doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="远路径", + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) + obstacle = doc.addObject("Part::Feature", "NearObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(40, 60, 3, 6, 15, 25)) - result = auto_routing.route_eplan_connection_between_terminals( + controller = auto_routing_panel.AutoRoutingController() + controller.set_obstacle_clearance(5.0) + result = _auto_routing.route_eplan_connection_between_terminals( doc, start, end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + options=controller.routing_options(), ) - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("远路径", labels) - self.assertNotIn("近路径", labels) - self.assertIn( - forbidden.Name, - result["network"]["route_constraints"]["forbidden"]["names"], - ) + self.assertEqual(5.0, controller.routing_options()["obstacle_clearance"]) + self.assertEqual("CollisionWarning", result["route_status"]) + self.assertEqual("ClearanceWarning", result["collisions"][0]["collision_kind"]) + self.assertEqual(["QET Route Carrier"], result["collisions"][0]["route_source_labels"]) + diagnostics = json.loads(result["wire"].QetRouteDiagnosticsJson) + self.assertEqual(["QET Route Carrier"], diagnostics["collisions"][0]["route_source_labels"]) - def test_eplan_connection_route_accepts_chinese_constraint_mode_aliases(self): + def test_auto_routing_controller_exposes_preflight_routeability_sample_limit(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + + controller = auto_routing_panel.AutoRoutingController() + controller.set_preflight_routeability_sample_limit(75) + + self.assertEqual(75, controller.routing_options()["preflight_routeability_sample_limit"]) + + def test_auto_routing_controller_exposes_auto_bridge_options(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + + controller = auto_routing_panel.AutoRoutingController() + controller.set_auto_create_diagnostic_bridges(True) + controller.set_auto_create_main_path_detour_bridges(True) + controller.set_auto_create_terminal_access_fallback_bridges(True) + + self.assertTrue(controller.routing_options()["auto_create_diagnostic_bridges"]) + self.assertTrue(controller.routing_options()["auto_create_main_path_detour_bridges"]) + self.assertTrue(controller.routing_options()["auto_create_terminal_access_fallback_bridges"]) + + def test_auto_routing_controller_exposes_segment_reuse_penalty(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - forbidden = routing_network.create_route_carrier( + _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 0, 0)) + _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="近路径", + label="Direct Duct", project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - forbidden.QetRouteConstraintMode = "禁止经过" routing_network.create_route_carrier( doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="远路径", + [app.Vector(0, 0, 20), app.Vector(0, 40, 20)], + label="Left Bridge", project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - - result = auto_routing.route_eplan_connection_between_terminals( + routing_network.create_route_carrier( doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) - - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("远路径", labels) - self.assertNotIn("近路径", labels) - self.assertIn( - forbidden.Name, - result["network"]["route_constraints"]["forbidden"]["names"], + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="Alternate Duct", + project_uuid="project-1", + kind="WireDuct", ) - - def test_eplan_connection_route_uses_carrier_marked_required(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="近路径", - project_uuid="project-1", - kind="UserPath", - ) - required = routing_network.create_route_carrier( - doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="远路径", + [app.Vector(100, 40, 20), app.Vector(100, 0, 20)], + label="Right Bridge", project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - required.QetRouteConstraintMode = "Required" + app._qet_exchange_payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start-a", + "end_terminal_uuid": "terminal-end-a", + }, + { + "wire_id": "wire-b", + "start_terminal_uuid": "terminal-start-b", + "end_terminal_uuid": "terminal-end-b", + }, + ], + } - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + controller = auto_routing_panel.AutoRoutingController() + controller.set_segment_reuse_penalty(0.0) + report = controller.route_eplan_connections() - labels = [ + second_labels = [ segment["carrier"]["label"] - for segment in result["route_track"]["segments"] + for segment in report["routes"][1]["route_track"]["segments"] ] - self.assertIn("远路径", labels) - self.assertNotIn("近路径", labels) - self.assertIn( - required.Name, - result["network"]["route_constraints"]["required"]["names"], - ) + self.assertEqual(0.0, controller.routing_options()["segment_reuse_penalty"]) + self.assertIn("Direct Duct", second_labels) + self.assertNotIn("Alternate Duct", second_labels) - def test_source_required_constraint_from_multi_wire_sketch_accepts_one_generated_path(self): + def test_auto_routing_panel_command_button_style_keeps_text_visible(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - route_path = doc.addObject("Sketcher::SketchObject", "YellowMainRouteSketch") - route_path.Label = "黄色主路径" - route_path.Shape = FakeShape( - FakeBoundBox(0, 100, 0, 80, 20, 20), - wires=[ - FakeWire([app.Vector(0, 0, 20), app.Vector(100, 0, 20)]), - FakeWire([app.Vector(0, 80, 20), app.Vector(100, 80, 20)]), - ], - ) - selection = [FakeSelectionItem(obj=route_path)] - routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") - carriers = routing_network.create_user_path_carriers_from_selection( - doc, - selection, - project_uuid="project-1", - ) + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + class FakeButton: + def __init__(self): + self.text = "" + self.tooltip = "" + self.minimum_height = 0 + self.stylesheet = "" - route_carrier_names = [ - segment["carrier"]["name"] - for segment in result["route_track"]["segments"] - if not segment.get("is_bridge") - ] - self.assertEqual("network-dijkstra-v1", result["algorithm"]) - self.assertIn(carriers[0].Name, route_carrier_names) - self.assertNotIn(carriers[1].Name, route_carrier_names) - self.assertEqual( - ["黄色主路径"], - result["network"]["route_constraints"]["required"]["source_labels"], - ) + def setText(self, text): + self.text = text - def test_eplan_connection_route_requires_carrier_label(self): + def setToolTip(self, tooltip): + self.tooltip = tooltip + + def setMinimumHeight(self, height): + self.minimum_height = height + + def setStyleSheet(self, stylesheet): + self.stylesheet = stylesheet + + button = FakeButton() + + auto_routing_panel._style_command_button(button, "生成布线连接", "按导线任务布线") + + self.assertEqual("生成布线连接", button.text) + self.assertEqual("按导线任务布线", button.tooltip) + self.assertGreaterEqual(button.minimum_height, 28) + self.assertIn("color", button.stylesheet) + + def test_auto_routing_panel_status_highlights_auto_bridge_results(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="普通路径", - project_uuid="project-1", - kind="UserPath", + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + + report = { + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "auto_diagnostic_bridges": {"created_count": 2}, + "auto_main_path_detour_bridges": { + "created_count": 1, + "rerouted": True, + "created_pair_labels": ["门板布线面 -> 主线槽A"], + }, + "auto_terminal_access_fallback_bridges": { + "created_count": 1, + "rerouted": True, + "created_pair_labels": ["安装板布线面 -> 柜内主路径"], + }, + } + + message = auto_routing_panel._format_route_panel_status(report) + + self.assertIn("自动补桥摘要:诊断桥 2 条,主路径补桥 1 条,端子接入补桥 1 条。", message) + self.assertIn("主路径配对:门板布线面 -> 主线槽A。", message) + self.assertIn("端子接入配对:安装板布线面 -> 柜内主路径。", message) + + def test_auto_routing_panel_auto_bridge_options_default_enabled_for_manual_testing(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + + self.assertTrue( + auto_routing_panel._panel_default_auto_bridge_enabled({}, "auto_create_diagnostic_bridges") ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="必经路径", - project_uuid="project-1", - kind="UserPath", + self.assertTrue( + auto_routing_panel._panel_default_auto_bridge_enabled({}, "auto_create_main_path_detour_bridges") + ) + self.assertTrue( + auto_routing_panel._panel_default_auto_bridge_enabled( + {}, + "auto_create_terminal_access_fallback_bridges", + ) + ) + self.assertFalse( + auto_routing_panel._panel_default_auto_bridge_enabled( + {"auto_create_diagnostic_bridges": False}, + "auto_create_diagnostic_bridges", + ) ) - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={ - "terminal_exit_length": 0.0, - "lane_spacing": 0.0, - "required_route_carrier_labels": ["必经路径"], - }, + def test_terminal_access_fallback_selection_status_includes_access_carriers(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + + message = auto_routing_panel._format_terminal_access_fallback_selection_status( + { + "selected_terminal_access_fallback_wires": 2, + "selected_terminal_access_fallback_targets": 1, + "selected_terminal_access_fallback_access_carriers": 1, + "selected_terminal_access_fallback_terminals": 1, + "selected_terminal_access_fallback_devices": 1, + } ) - labels = [ - segment["carrier"]["label"] - for segment in result["route_track"]["segments"] - ] - self.assertIn("必经路径", labels) - self.assertNotIn("普通路径", labels) - self.assertEqual( - ["必经路径"], - result["network"]["route_constraints"]["required"]["labels"], + self.assertIn("导线 2 条", message) + self.assertIn("目标 1 个", message) + self.assertIn("接入线 1 条", message) + self.assertIn("端子 1 个", message) + self.assertIn("设备 1 个", message) + + def test_wire_outside_boundary_selection_status_includes_route_refs(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + + message = auto_routing_panel._format_wire_outside_boundary_selection_status( + { + "selected_wire_outside_boundary_wires": 2, + "selected_wire_outside_boundary_route_carriers": 1, + "selected_wire_outside_boundary_route_sources": 1, + } ) - def test_eplan_connection_route_reports_unsatisfied_route_constraints(self): + self.assertIn("越界导线:2 条", message) + self.assertIn("路径 carrier 1 条", message) + self.assertIn("源对象 1 个", message) + + def test_eplan_connection_route_rejects_far_network_entry_to_avoid_huge_render_bbox(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] @@ -8123,326 +8948,258 @@ class AutoRoutingTest(unittest.TestCase): end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="普通路径", + [app.Vector(5000, 0, 20), app.Vector(5100, 0, 20)], project_uuid="project-1", - kind="UserPath", + kind="WireDuct", ) - with self.assertRaises(auto_routing.AutoRoutingError) as context: - auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={ - "terminal_exit_length": 0.0, - "required_route_carrier_labels": ["不存在的必经路径"], - }, - ) - - self.assertIn("路径约束", str(context.exception)) + with self.assertRaises(auto_routing.AutoRoutingError): + auto_routing.route_eplan_connection_between_terminals(doc, start, end) - def test_eplan_connection_route_chooses_clear_orthogonal_access_order(self): + def test_route_eplan_connection_between_terminals_fails_without_network(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() + app.ActiveDocument = doc terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(30, 30, 0), app.Vector(100, 30, 0)], - label="Only Duct", - project_uuid="project-1", - kind="WireDuct", - ) - obstacle = doc.addObject("Part::Feature", "AccessOrderObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(10, 20, -5, 5, -5, 5)) - - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, - ) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 30, 0)) - point_tuples = [(point.x, point.y, point.z) for point in result["points"]] - self.assertIn((0.0, 30.0, 0.0), point_tuples) - self.assertNotIn((30.0, 0.0, 0.0), point_tuples) - self.assertEqual(0, result["collision_count"]) + with self.assertRaises(auto_routing.AutoRoutingError): + auto_routing.route_eplan_connection_between_terminals(doc, start, end) + self.assertEqual(0, len(wiring_objects.iter_routed_wire_objects(doc))) - def test_eplan_connection_route_marks_collision_warning_against_obstacle_bbox(self): + def test_surface_carrier_grid_uses_actual_rotated_face_plane(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 100), app.Vector(100, 0, 100)], - project_uuid="project-1", - ) - obstacle = doc.addObject("Part::Feature", "Obstacle") - obstacle.Shape = FakeShape(FakeBoundBox(40, 60, -10, 10, 90, 110)) - parent = doc.addObject("App::Part", "DoorAssembly") - parent.Label = "FRONT DOOR-R ASS'Y" - parent.addObject(obstacle) + normal = app.Vector(0, 1, 1) + vertices = [ + app.Vector(0, 0, 0), + app.Vector(100, 0, 0), + app.Vector(0, 50, -50), + app.Vector(100, 50, -50), + ] + face = FakeFace( + FakeBoundBox(0, 100, 0, 50, -50, 0), + normal, + vertices=vertices, + center=app.Vector(50, 25, -25), + ) - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + created = routing_network.create_surface_carriers_from_selection( + doc, + [FakeSelectionItem([face])], + project_uuid="project-1", + spacing=50.0, + offset=10.0, + margin=0.0, + ) - self.assertEqual("CollisionWarning", result["route_status"]) - self.assertEqual("CollisionWarning", result["wire"].RouteStatus) - self.assertEqual(1, result["collision_count"]) - self.assertEqual("HardIntersection", result["collisions"][0]["collision_kind"]) - self.assertEqual(["FRONT DOOR-R ASS'Y"], result["collisions"][0]["obstacle_parent_labels"]) - self.assertEqual(["DoorAssembly"], result["collisions"][0]["obstacle_parent_names"]) - self.assertEqual("1", result["wire"].QetRouteCollisionCount) - self.assertEqual("1", result["wire"].QetRouteHardIntersectionCount) - self.assertEqual("0", result["wire"].QetRouteClearanceWarningCount) - self.assertEqual("HardIntersectionWarning", result["wire"].QetRouteCollisionStatus) + self.assertGreater(len(created), 0) + first_point = created[0].Points[0] + for carrier in created: + for point in carrier.Points: + # The rotated face is y + z = 0; after a 10 mm normal offset, + # all generated points must stay on one parallel plane. + self.assertAlmostEqual(first_point.y + first_point.z, point.y + point.z, places=6) - def test_eplan_connection_route_locally_detours_terminal_access_around_third_party_device(self): + def test_route_path_creation_ignores_whole_solid_object_edges(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 100, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 50), app.Vector(100, 0, 50)], - project_uuid="project-1", - kind="WireDuct", - ) - obstacle = doc.addObject("Part::Feature", "ThirdPartyDevice") - obstacle.Label = "第三方设备" - terminal_objects.ensure_string_property( - obstacle, - "QetElementUuid", - "QET Exchange", - "", - "device-obstacle", + solid = doc.addObject("Part::Feature", "CabinetSolid") + solid.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 100, 0, 10), + edges=[FakeEdge(app.Vector(0, 0, 0), app.Vector(100, 0, 0))], + faces=[object()], ) - obstacle.Shape = FakeShape(FakeBoundBox(90, 110, 40, 60, -10, 60)) - result = auto_routing.route_eplan_connection_between_terminals( + created = routing_network.create_carriers_from_selection( doc, - start, - end, - options={ - "avoid_obstacles": False, - "avoid_local_access_obstacles": True, - "terminal_exit_length": 0.0, - }, - endpoint_metadata={ - "start_element_uuid": "device-start", - "end_element_uuid": "device-end", - }, + [FakeSelectionItem(obj=solid)], + project_uuid="project-1", ) - self.assertEqual("Routed", result["route_status"]) - self.assertEqual(0, result["collision_count"]) - self.assertTrue(any(abs(point.x - 75.0) <= 0.001 for point in result["points"])) + self.assertEqual([], created) - def test_network_route_limits_local_access_obstacles_to_nearby_bboxes(self): + def test_route_path_creation_splits_disconnected_shape_wires(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 100, 0)) - routing_network.create_route_carrier( + route_path = doc.addObject("Sketcher::SketchObject", "MultiWireRouteSketch") + route_path.Shape = FakeShape( + FakeBoundBox(0, 120, 0, 80, 20, 20), + wires=[ + FakeWire([app.Vector(0, 0, 20), app.Vector(40, 0, 20)]), + FakeWire([app.Vector(80, 80, 20), app.Vector(120, 80, 20)]), + ], + ) + + created = routing_network.create_carriers_from_selection( doc, - [app.Vector(0, 0, 50), app.Vector(100, 0, 50)], + [FakeSelectionItem(obj=route_path)], project_uuid="project-1", - kind="WireDuct", - ) - near_obstacle = doc.addObject("Part::Feature", "NearThirdPartyDevice") - near_obstacle.Label = "近处第三方设备" - terminal_objects.ensure_string_property( - near_obstacle, - "QetElementUuid", - "QET Exchange", - "", - "device-near-obstacle", ) - near_obstacle.Shape = FakeShape(FakeBoundBox(90, 110, 40, 60, -10, 60)) - for index in range(120): - far_obstacle = doc.addObject("Part::Feature", "FarDevice{0}".format(index)) - far_obstacle.Shape = FakeShape( - FakeBoundBox(10000 + index * 20, 10010 + index * 20, 10000, 10010, 10000, 10010) - ) - - calls = {"count": 0} - original_segment_intersects_bbox = auto_routing._segment_intersects_bbox - - def counted_segment_intersects_bbox(start_point, end_point, bbox): - calls["count"] += 1 - return original_segment_intersects_bbox(start_point, end_point, bbox) - - auto_routing._segment_intersects_bbox = counted_segment_intersects_bbox - try: - result = auto_routing.build_network_route( - start, - end, - options={ - "avoid_obstacles": False, - "avoid_local_access_obstacles": True, - "terminal_exit_length": 0.0, - }, - doc=doc, - ) - finally: - auto_routing._segment_intersects_bbox = original_segment_intersects_bbox - self.assertIsNotNone(result) - self.assertTrue(any(abs(point.x - 75.0) <= 0.001 for point in result["points"])) - self.assertLess(calls["count"], 80) + self.assertEqual(2, len(created)) + self.assertEqual( + [ + [(0.0, 0.0, 20.0), (40.0, 0.0, 20.0)], + [(80.0, 80.0, 20.0), (120.0, 80.0, 20.0)], + ], + [[(point.x, point.y, point.z) for point in carrier.Points] for carrier in created], + ) - def test_network_route_ignores_unbound_structural_bboxes_for_local_access_avoidance(self): + def test_route_path_creation_projects_line_to_selected_face(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 100, 0)) - routing_network.create_route_carrier( + face = FakeFace( + FakeBoundBox(0, 100, 0, 100, 0, 0), + app.Vector(0, 0, 1), + ) + draft_line = doc.addObject("Part::Feature", "DraftLine") + draft_line.Shape = FakeShape( + FakeBoundBox(10, 90, 10, 90, 25, 35), + edges=[FakeEdge(app.Vector(10, 10, 25), app.Vector(90, 90, 35))], + ) + + created = routing_network.create_carriers_from_selection( doc, - [app.Vector(0, 0, 50), app.Vector(100, 0, 50)], + [ + FakeSelectionItem([face]), + FakeSelectionItem(obj=draft_line), + ], project_uuid="project-1", - kind="WireDuct", - ) - near_device = doc.addObject("Part::Feature", "BoundNearDevice") - terminal_objects.ensure_string_property( - near_device, - "QetElementUuid", - "QET Exchange", - "", - "device-near-obstacle", ) - near_device.Shape = FakeShape(FakeBoundBox(90, 110, 40, 60, -10, 60)) - for index in range(80): - cabinet_part = doc.addObject("Part::Feature", "ImportedCabinetPart{0}".format(index)) - cabinet_part.Shape = FakeShape(FakeBoundBox(-1000, 1000, -1000, 1000, -1000, 1000)) - calls = {"count": 0} - original_segment_intersects_bbox = auto_routing._segment_intersects_bbox + self.assertEqual(1, len(created)) + self.assertEqual([2.0, 2.0], [point.z for point in created[0].Points]) - def counted_segment_intersects_bbox(start_point, end_point, bbox): - calls["count"] += 1 - return original_segment_intersects_bbox(start_point, end_point, bbox) + def test_wire_duct_entity_generates_centerline_and_marks_source_pass_through(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + duct = doc.addObject("Part::Feature", "WireDuct") + duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) - auto_routing._segment_intersects_bbox = counted_segment_intersects_bbox - try: - result = auto_routing.build_network_route( - start, - end, - options={ - "avoid_obstacles": False, - "avoid_local_access_obstacles": True, - "terminal_exit_length": 0.0, - }, - doc=doc, - ) - finally: - auto_routing._segment_intersects_bbox = original_segment_intersects_bbox + created = routing_network.create_wire_duct_carriers_from_selection( + doc, + [FakeSelectionItem(obj=duct)], + project_uuid="project-1", + margin=20.0, + ) - self.assertIsNotNone(result) - self.assertTrue(any(abs(point.x - 75.0) <= 0.001 for point in result["points"])) - self.assertLess(calls["count"], 80) + self.assertEqual(3, len(created)) + carrier = [item for item in created if item.QetRouteCarrierKind == "WireDuct"][0] + open_ends = [item for item in created if item.QetRouteCarrierKind == "WireDuctOpenEnd"] + self.assertEqual("WireDuct", carrier.QetRouteCarrierKind) + self.assertEqual(2, len(open_ends)) + self.assertEqual("PassThrough", duct.QetRoutingObstacleMode) + self.assertEqual([(20.0, 0.0, 15.0), (100.0, 0.0, 15.0)], [(p.x, p.y, p.z) for p in carrier.Points]) - def test_network_route_caps_extra_entry_candidates_in_batch_mode(self): + def test_wire_duct_source_end_margin_controls_generated_centerline_length(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - for index in range(8): - routing_network.create_route_carrier( - doc, - [app.Vector(0, index * 10, 50), app.Vector(100, index * 10, 50)], - project_uuid="project-1", - kind="WireDuct", - ) - obstacle = doc.addObject("Part::Feature", "BoundNearDevice") - terminal_objects.ensure_string_property( - obstacle, - "QetElementUuid", - "QET Exchange", - "", - "device-near-obstacle", + duct = doc.addObject("Part::Feature", "WireDuctA") + duct.Label = "线槽A" + duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) + duct.QetWireDuctEndMarginMm = 5.0 + + created = routing_network.create_wire_duct_carriers_from_document( + doc, + project_uuid="project-1", ) - obstacle.Shape = FakeShape(FakeBoundBox(15, 25, -5, 5, 40, 60)) - calls = {"shortest_path": 0} - original_shortest_path = routing_network.shortest_path_with_carriers - def counted_shortest_path(*args, **kwargs): - calls["shortest_path"] += 1 - return original_shortest_path(*args, **kwargs) + carrier = [item for item in created if item.QetRouteCarrierKind == "WireDuct"][0] + self.assertIn("QetWireDuctEndMarginMm", duct.PropertiesList) + self.assertEqual(5.0, duct.QetWireDuctEndMarginMm) + self.assertEqual([(5.0, 0.0, 15.0), (115.0, 0.0, 15.0)], [(p.x, p.y, p.z) for p in carrier.Points]) - routing_network.shortest_path_with_carriers = counted_shortest_path - try: - result = auto_routing.build_network_route( - start, - end, - options={ - "network_entry_candidate_limit": 3, - "network_entry_candidate_total_limit": 4, - "avoid_obstacles": False, - "avoid_local_access_obstacles": True, - "terminal_exit_length": 0.0, - }, - doc=doc, - ) - finally: - routing_network.shortest_path_with_carriers = original_shortest_path + def test_wire_duct_source_capacity_is_copied_to_generated_carriers(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + duct = doc.addObject("Part::Feature", "WireDuct") + duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) + duct.QetRouteCarrierCapacity = 4 - self.assertIsNotNone(result) - self.assertLessEqual(calls["shortest_path"], 16) + created = routing_network.create_wire_duct_carriers_from_selection( + doc, + [FakeSelectionItem(obj=duct)], + project_uuid="project-1", + margin=20.0, + ) - def test_eplan_connection_route_marks_clearance_warning_against_expanded_obstacle_bbox(self): + self.assertIn("QetRouteCarrierCapacity", duct.PropertiesList) + self.assertTrue(all(item.QetRouteCarrierCapacity == 4 for item in created)) + + def test_auto_detect_wire_ducts_ignores_cabinet_models(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + duct = doc.addObject("Part::Feature", "WireDuctA") + duct.Label = "线槽A" + duct.Shape = FakeShape(FakeBoundBox(0, 120, -10, 10, 5, 25)) + cabinet = doc.addObject("Part::Feature", "Cabinet") + cabinet.Label = "3D机柜" + cabinet.Shape = FakeShape(FakeBoundBox(0, 300, 0, 80, 0, 400)) + + created = routing_network.create_wire_duct_carriers_from_document( + doc, + project_uuid="project-1", + ) + created_again = routing_network.create_wire_duct_carriers_from_document( + doc, + project_uuid="project-1", + ) + + self.assertEqual(3, len(created)) + self.assertEqual(0, len(created_again)) + self.assertEqual(1, len([item for item in created if item.QetRouteCarrierKind == "WireDuct"])) + self.assertEqual(2, len([item for item in created if item.QetRouteCarrierKind == "WireDuctOpenEnd"])) + self.assertEqual("PassThrough", duct.QetRoutingObstacleMode) + self.assertFalse(hasattr(cabinet, "QetRoutingObstacleMode")) + + def test_wire_duct_source_is_not_reported_as_collision(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + duct = doc.addObject("Part::Feature", "WireDuct") + duct.Shape = FakeShape(FakeBoundBox(-10, 130, -10, 10, 15, 25)) + routing_network.create_wire_duct_carriers_from_selection( doc, - [app.Vector(0, 0, 100), app.Vector(100, 0, 100)], - label="主线槽A", + [FakeSelectionItem(obj=duct)], project_uuid="project-1", + margin=0.0, ) - obstacle = doc.addObject("Part::Feature", "NearObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(40, 60, 3, 6, 90, 110)) - result = auto_routing.route_eplan_connection_between_terminals( - doc, - start, - end, - options={"obstacle_clearance": 5.0}, - ) + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertEqual("CollisionWarning", result["route_status"]) - self.assertEqual(1, result["collision_count"]) - self.assertEqual("ClearanceWarning", result["collisions"][0]["collision_kind"]) - self.assertEqual(3.0, result["collisions"][0]["obstacle_bbox"]["ymin"]) - self.assertEqual(-2.0, result["collisions"][0]["collision_bbox"]["ymin"]) - self.assertEqual("1", result["wire"].QetRouteCollisionCount) - self.assertEqual("0", result["wire"].QetRouteHardIntersectionCount) - self.assertEqual("1", result["wire"].QetRouteClearanceWarningCount) - self.assertEqual("ClearanceWarning", result["wire"].QetRouteCollisionStatus) + self.assertEqual("network-dijkstra-v1", result["algorithm"]) + self.assertEqual("Routed", result["route_status"]) + self.assertEqual(0, result["collision_count"]) - def test_eplan_connection_route_ignores_terminal_exit_segment_collision(self): + def test_eplan_connection_route_uses_alternate_carrier_to_avoid_obstacle(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] @@ -8454,107 +9211,156 @@ class AutoRoutingTest(unittest.TestCase): doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", + kind="WireDuct", ) - terminal_body = doc.addObject("Part::Feature", "UngroupedTerminalBody") - terminal_body.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, -5, 15)) + routing_network.create_route_carrier( + doc, + [ + app.Vector(0, 0, 20), + app.Vector(0, 50, 20), + app.Vector(100, 50, 20), + app.Vector(100, 0, 20), + ], + project_uuid="project-1", + kind="WireDuct", + ) + obstacle = doc.addObject("Part::Feature", "CabinetObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(40, 60, -10, 10, 15, 25)) result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + self.assertEqual("network-dijkstra-v1", result["algorithm"]) self.assertEqual("Routed", result["route_status"]) self.assertEqual(0, result["collision_count"]) + self.assertTrue(result["network"]["obstacle_aware"]) + self.assertGreaterEqual(result["network"]["blocked_segments"], 1) + self.assertIn(50.0, [point.y for point in result["points"]]) - def test_eplan_connection_route_ignores_explicit_start_local_route_collision(self): + def test_eplan_connection_route_prefers_entry_candidate_without_access_collision(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) - start.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") - start.QetTerminalLocalRoutePointsJson = json.dumps( - [[0, 0, 0], [20, 0, 0], [20, 40, 0]] + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(20, 0, 0), app.Vector(100, 0, 0)], + label="Near Duct", + project_uuid="project-1", + kind="WireDuct", ) routing_network.create_route_carrier( doc, - [app.Vector(20, 80, 0), app.Vector(120, 80, 0)], - label="Cabinet Main Path", + [app.Vector(0, 30, 0), app.Vector(100, 30, 0)], + label="Clear Duct", project_uuid="project-1", + kind="WireDuct", ) - local_body = doc.addObject("Part::Feature", "StartDeviceLocalShell") - local_body.Shape = FakeShape(FakeBoundBox(15, 25, 15, 25, -5, 5)) + obstacle = doc.addObject("Part::Feature", "AccessObstacle") + obstacle.Label = "Access Obstacle" + obstacle.Shape = FakeShape(FakeBoundBox(10, 15, -5, 5, -5, 5)) result = auto_routing.route_eplan_connection_between_terminals( doc, start, end, - options={"avoid_obstacles": False, "terminal_exit_length": 0.0}, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) - self.assertEqual("Routed", result["route_status"]) + labels = [ + segment["carrier"]["label"] + for segment in result["route_track"]["segments"] + ] + self.assertIn("Clear Duct", labels) + self.assertNotIn("Near Duct", labels) self.assertEqual(0, result["collision_count"]) - diagnostics = json.loads(result["wire"].QetRouteDiagnosticsJson) - self.assertEqual(3, len(diagnostics["endpoint_access"]["start_points"])) - def test_eplan_connection_route_still_reports_main_path_collision_after_local_route(self): + def test_eplan_connection_route_keeps_clear_access_candidates_beyond_distance_limit(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) - start.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") - start.QetTerminalLocalRoutePointsJson = json.dumps( - [[0, 0, 0], [20, 0, 0], [20, 40, 0]] - ) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + for index in range(9): + routing_network.create_route_carrier( + doc, + [app.Vector(20, index, 0), app.Vector(100, index, 0)], + label="Near Blocked Duct {0}".format(index + 1), + project_uuid="project-1", + kind="WireDuct", + ) routing_network.create_route_carrier( doc, - [app.Vector(20, 80, 0), app.Vector(120, 80, 0)], - label="Cabinet Main Path", + [app.Vector(0, 30, 0), app.Vector(100, 30, 0)], + label="Clear Duct", project_uuid="project-1", + kind="WireDuct", ) - main_obstacle = doc.addObject("Part::Feature", "MainPathObstacle") - main_obstacle.Shape = FakeShape(FakeBoundBox(55, 65, 75, 85, -5, 5)) + obstacle = doc.addObject("Part::Feature", "AccessObstacle") + obstacle.Label = "Access Obstacle" + obstacle.Shape = FakeShape(FakeBoundBox(10, 15, -5, 20, -5, 5)) result = auto_routing.route_eplan_connection_between_terminals( doc, start, end, - options={"avoid_obstacles": False, "terminal_exit_length": 0.0}, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) - self.assertEqual("CollisionWarning", result["route_status"]) - self.assertEqual(1, result["collision_count"]) - self.assertEqual("MainPathObstacle", result["collisions"][0]["obstacle_name"]) + labels = [ + segment["carrier"]["label"] + for segment in result["route_track"]["segments"] + ] + self.assertIn("Clear Duct", labels) + self.assertTrue(all(not label.startswith("Near Blocked Duct") for label in labels)) + self.assertEqual(0, result["network"]["route_candidate_obstacle_hits"]) - def test_eplan_connection_route_detours_local_access_segment_around_obstacle(self): + def test_eplan_connection_route_prefers_carrier_inside_cabinet_boundary(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 49, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 49, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 100), app.Vector(100, 0, 100)], - label="主线槽A", + [app.Vector(0, 51, 0), app.Vector(100, 51, 0)], + label="Outside Cabinet Path", project_uuid="project-1", + kind="UserPath", ) - obstacle = doc.addObject("Part::Feature", "AccessObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, 40, 60)) - - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + routing_network.create_route_carrier( + doc, + [app.Vector(0, -40, 0), app.Vector(100, -40, 0)], + label="Inside Cabinet Path", + project_uuid="project-1", + kind="UserPath", + ) + boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") + boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) + boundary.QetRoutingBoundaryKind = "CabinetInterior" - self.assertEqual("Routed", result["route_status"]) - self.assertEqual(0, result["collision_count"]) - self.assertTrue( - any(abs(point.x) > 5.0 or abs(point.y) > 5.0 for point in result["points"]), - "局部接入段应增加侧向绕障拐点,而不是直接穿过障碍盒。", + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) - def test_eplan_connection_route_ignores_endpoint_device_body_as_obstacle(self): + labels = [ + segment["carrier"]["label"] + for segment in result["route_track"]["segments"] + ] + self.assertIn("Inside Cabinet Path", labels) + self.assertNotIn("Outside Cabinet Path", labels) + self.assertEqual(0, result["network"]["route_candidate_boundary_violations"]) + + def test_eplan_connection_route_prefers_inside_detour_over_shorter_outside_shortcut(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] @@ -8562,666 +9368,490 @@ class AutoRoutingTest(unittest.TestCase): terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - device = doc.addObject("App::DocumentObjectGroup", "QETDeviceStart") - device.QetInstanceId = start.QetInstanceId - device.addObject(start) - body = doc.addObject("Part::Feature", "StartDeviceBody") - body.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, -5, 15)) - device.addObject(body) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(0, 0, 0), app.Vector(100, 51, 0), app.Vector(100, 0, 0)], + label="Outside Shortcut", project_uuid="project-1", + kind="UserPath", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 0), app.Vector(0, -40, 0), app.Vector(100, -40, 0), app.Vector(100, 0, 0)], + label="Inside Cabinet Detour", + project_uuid="project-1", + kind="UserPath", ) + boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") + boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) + boundary.QetRoutingBoundaryKind = "CabinetInterior" - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) - self.assertEqual("Routed", result["route_status"]) - self.assertEqual(0, result["collision_count"]) + labels = [ + segment["carrier"]["label"] + for segment in result["route_track"]["segments"] + ] + self.assertIn("Inside Cabinet Detour", labels) + self.assertNotIn("Outside Shortcut", labels) + self.assertEqual(0, result["network"]["route_candidate_boundary_violations"]) - def test_route_eplan_connections_from_payload_skips_missing_terminal(self): + def test_eplan_connection_wire_records_boundary_warning_when_route_leaves_cabinet(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - payload = { - "wires": [ - { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-missing", - "end_element_uuid": "device-missing", - "end_instance_id": "instance-missing", - "end_terminal_display": "A1", - } - ] - } + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 49, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 49, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 60, 0), app.Vector(100, 60, 0)], + label="Only Outside Cabinet Path", + project_uuid="project-1", + kind="UserPath", + ) + boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") + boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) + boundary.QetRoutingBoundaryKind = "CabinetInterior" - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - message = auto_routing.format_eplan_connection_route_report(report) + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) - self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_terminal"]) - self.assertEqual(1, report["available_terminals"]) - self.assertEqual(0, report["local_terminals"]) - self.assertEqual(["terminal-missing"], report["missing_endpoint_uuids"]) - self.assertEqual("terminal-start", report["missing_endpoint_samples"][0]["start_terminal_uuid"]) - self.assertTrue(report["missing_endpoint_samples"][0]["start_found"]) - self.assertFalse(report["missing_endpoint_samples"][0]["end_found"]) - self.assertEqual("instance-missing", report["missing_endpoint_samples"][0]["end_instance_id"]) - self.assertEqual("A1", report["missing_endpoint_samples"][0]["end_terminal_display"]) - self.assertEqual(0, report["missing_endpoint_samples"][0]["end_element_terminal_count"]) - self.assertEqual([], report["missing_endpoint_samples"][0]["end_element_terminal_samples"]) - self.assertEqual(0, report["missing_endpoint_samples"][0]["end_instance_terminal_count"]) - self.assertEqual([], report["missing_endpoint_samples"][0]["end_instance_terminal_samples"]) + self.assertGreater(result["network"]["route_candidate_boundary_violations"], 0) + self.assertTrue(result["wire"].QetRouteBoundaryAware) + self.assertEqual("BoundaryWarning", result["wire"].QetRouteBoundaryStatus) self.assertEqual( - "device_not_in_3d_scene", - report["missing_endpoint_samples"][0]["end_missing_endpoint_reason_code"], + str(result["network"]["route_candidate_boundary_violations"]), + result["wire"].QetRouteBoundaryViolationCount, ) - self.assertIn("终点 element=device-missing, instance=instance-missing, terminal=A1", message) - self.assertIn("原因=该 2D 设备未在 FreeCAD 场景中找到", message) - def test_route_eplan_connections_backfills_missing_endpoint_device_info_from_payload_devices(self): + def test_eplan_connection_wire_records_long_network_access_warning(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - payload = { - "devices": [ - { - "element_uuid": "device-missing", - "instance_id": "instance-from-device-list", - "display_tag": "UD:8", - "terminals": [ - { - "terminal_uuid": "device-missing:terminal-a", - "terminal_display": "A1", - } - ], - } - ], - "wires": [ - { - "wire_id": "wire-1", - "wire_mark": "N-MISS", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "device-missing:terminal-a", - "end_element_uuid": "device-missing", - "end_terminal_display": "A1", - } - ], - } - - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - message = auto_routing.format_eplan_connection_route_report(report) - sample = report["missing_endpoint_samples"][0] + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 125, 0), app.Vector(100, 125, 0)], + label="Far Cabinet Main Path", + project_uuid="project-1", + kind="UserPath", + ) - self.assertEqual("instance-from-device-list", sample["end_instance_id"]) - self.assertEqual("UD:8", sample["end_device_label"]) - self.assertEqual( - {"device_not_in_3d_scene": 1}, - report["missing_terminal_summary"]["reason_code_counts"], + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={ + "terminal_exit_length": 0.0, + "lane_spacing": 0.0, + "terminal_access_warning_distance": 50.0, + }, ) - self.assertEqual(1, len(report["missing_terminal_summary"]["device_groups"])) - self.assertEqual("UD:8", report["missing_terminal_summary"]["device_groups"][0]["device_label"]) - self.assertEqual(["A1"], report["missing_terminal_summary"]["device_groups"][0]["terminal_displays"]) - self.assertIn("UD:8", message) - self.assertIn("需补端子设备:UD:8 缺 1 处(A1)", message) - self.assertIn("instance=instance-from-device-list", message) - def test_route_eplan_connections_backfills_missing_endpoint_device_info_from_context_json_devices(self): + wire = result["wire"] + self.assertEqual("125.000", wire.QetRouteEntryDistanceMm) + self.assertEqual("125.000", wire.QetRouteExitDistanceMm) + self.assertEqual("node", wire.QetRouteEntryPointMode) + self.assertEqual("node", wire.QetRouteExitPointMode) + self.assertEqual("1", wire.QetRouteEntryCandidateRank) + self.assertEqual("1", wire.QetRouteExitCandidateRank) + self.assertEqual("50.000", wire.QetRouteAccessWarningDistanceMm) + self.assertEqual("LongAccessWarning", wire.QetRouteAccessStatus) + self.assertEqual("entry,exit", wire.QetRouteAccessWarningSides) + payload = json.loads(wire.QetRouteDiagnosticsJson) + self.assertEqual("LongAccessWarning", payload["access"]["access_status"]) + self.assertEqual(["entry", "exit"], payload["access"]["warning_sides"]) + + def test_eplan_connection_route_keeps_inside_boundary_candidates_beyond_distance_limit(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - with tempfile.TemporaryDirectory() as temp_dir: - json_path = Path(temp_dir) / "2d_to_3d.json" - json_path.write_text( - json.dumps( - { - "project_uuid": "project-1", - "devices": [ - { - "element_uuid": "device-missing", - "instance_id": "instance-from-context-json", - "display_tag": "UD:8", - } - ], - "wires": [ - { - "wire_id": "wire-1", - "wire_mark": "N-MISS", - "wire_style_id": "1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "device-missing:terminal-a", - "end_element_uuid": "device-missing", - "end_terminal_display": "A1", - } - ], - }, - ensure_ascii=False, - ), - encoding="utf-8", + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 49, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 49, 0)) + for index in range(9): + y = 51 + index + routing_network.create_route_carrier( + doc, + [app.Vector(0, y, 0), app.Vector(100, y, 0)], + label="Outside Candidate {0}".format(index + 1), + project_uuid="project-1", + kind="UserPath", ) - app._qet_exchange_summary = {"json_path": str(json_path)} - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-1", - "wire_mark": "N-MISS", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "device-missing:terminal-a", - "end_element_uuid": "device-missing", - "end_terminal_display": "A1", - } - ], - } - - report = auto_routing.route_eplan_connections_from_payload(doc, payload) + routing_network.create_route_carrier( + doc, + [app.Vector(0, -40, 0), app.Vector(100, -40, 0)], + label="Inside Cabinet Path", + project_uuid="project-1", + kind="UserPath", + ) + boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") + boundary.Shape = FakeShape(FakeBoundBox(-10, 110, -50, 50, -10, 10)) + boundary.QetRoutingBoundaryKind = "CabinetInterior" - sample = report["missing_endpoint_samples"][0] - self.assertEqual("instance-from-context-json", sample["end_instance_id"]) - self.assertEqual("UD:8", sample["end_device_label"]) - self.assertEqual( - "instance-from-context-json", - report["missing_terminal_summary"]["device_groups"][0]["instance_id"], + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) - self.assertTrue(report["context_devices_loaded"]) - self.assertEqual(1, report["context_device_count"]) - self.assertEqual(str(json_path), report["context_devices_json_path"]) - def test_route_eplan_connections_from_payload_reports_device_without_terminals(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - device = doc.addObject("App::DocumentObjectGroup", "QETDevice_without_terminals") - terminal_objects.ensure_string_property(device, "QetElementUuid", "QET Exchange", "", "device-no-terminals") - terminal_objects.ensure_string_property(device, "QetInstanceId", "QET Exchange", "", "instance-no-terminals") - payload = { - "wires": [ - { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-missing", - "end_element_uuid": "device-no-terminals", - "end_instance_id": "instance-no-terminals", - "end_terminal_display": "A1", - } - ] - } - - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - message = auto_routing.format_eplan_connection_route_report(report) - - sample = report["missing_endpoint_samples"][0] - self.assertEqual("QETDevice_without_terminals", sample["end_device_name"]) - self.assertTrue(sample["end_device_in_scene"]) - self.assertEqual("no_3d_terminals_for_element", sample["end_missing_endpoint_reason_code"]) - self.assertIn("原因=该 2D 设备在 FreeCAD 中没有工程端子", message) + labels = [ + segment["carrier"]["label"] + for segment in result["route_track"]["segments"] + ] + self.assertIn("Inside Cabinet Path", labels) + self.assertTrue(all(not label.startswith("Outside Candidate") for label in labels)) + self.assertEqual(0, result["network"]["route_candidate_boundary_violations"]) - def test_route_eplan_connections_from_payload_reports_missing_device_binding_metadata(self): + def test_eplan_connection_route_tolerates_missing_route_constraint_collector(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - payload = { - "wires": [ - { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-missing", - "end_terminal_display": "A1", - } - ] - } - - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - message = auto_routing.format_eplan_connection_route_report(report) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="主路径", + project_uuid="project-1", + kind="UserPath", + ) + collector = routing_network.collect_route_constraint_options + delattr(routing_network, "collect_route_constraint_options") + try: + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) + finally: + routing_network.collect_route_constraint_options = collector - sample = report["missing_endpoint_samples"][0] - self.assertEqual("missing_device_binding_metadata", sample["end_missing_endpoint_reason_code"]) - self.assertEqual("导线端点缺少 2D/3D 设备绑定信息", sample["end_missing_endpoint_reason_label"]) - self.assertIn("QET 导线端点缺少 element_uuid", message) - self.assertIn("第一版不要求 start/end_instance_id", message) - self.assertIn("原因=导线端点缺少 2D/3D 设备绑定信息", message) + self.assertEqual("Routed", result["route_status"]) + self.assertEqual({}, result["network"].get("route_constraints", {})) - def test_route_eplan_connections_from_payload_applies_per_wire_required_route(self): + def test_eplan_connection_route_avoids_forbidden_carrier_label(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="普通路径", + label="禁止路径", project_uuid="project-1", kind="UserPath", ) routing_network.create_route_carrier( doc, [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="必经路径", + label="允许路径", project_uuid="project-1", kind="UserPath", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-required", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - "required_route_carrier_labels": ["必经路径"], - } - ], - } - report = auto_routing.route_eplan_connections_from_payload( + result = auto_routing.route_eplan_connection_between_terminals( doc, - payload, - options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + start, + end, + options={ + "terminal_exit_length": 0.0, + "lane_spacing": 0.0, + "forbidden_route_carrier_labels": ["禁止路径"], + }, ) labels = [ segment["carrier"]["label"] - for segment in report["routes"][0]["route_track"]["segments"] + for segment in result["route_track"]["segments"] ] - self.assertIn("必经路径", labels) - self.assertNotIn("普通路径", labels) + self.assertIn("允许路径", labels) + self.assertNotIn("禁止路径", labels) - def test_route_eplan_connections_from_payload_applies_per_wire_required_source_name(self): + def test_eplan_connection_route_avoids_carrier_marked_forbidden(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - direct = routing_network.create_route_carrier( + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + forbidden = routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="普通路径", + label="近路径", project_uuid="project-1", kind="UserPath", ) - direct.QetRouteSourceName = "NormalSketch" - required = routing_network.create_route_carrier( + forbidden.QetRouteConstraintMode = "Forbidden" + routing_network.create_route_carrier( doc, [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="黄色主路径", + label="远路径", project_uuid="project-1", kind="UserPath", ) - required.QetRouteSourceName = "RequiredSketch" - required.QetRouteSourceLabel = "黄色主路径草图" - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-required-source", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - "required_route_carrier_source_names": ["RequiredSketch"], - } - ], - } - report = auto_routing.route_eplan_connections_from_payload( + result = auto_routing.route_eplan_connection_between_terminals( doc, - payload, + start, + end, options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) labels = [ segment["carrier"]["label"] - for segment in report["routes"][0]["route_track"]["segments"] + for segment in result["route_track"]["segments"] ] - self.assertIn("黄色主路径", labels) - self.assertNotIn("普通路径", labels) - self.assertEqual( - ["RequiredSketch"], - report["routes"][0]["network"]["route_constraints"]["required"]["source_names"], + self.assertIn("远路径", labels) + self.assertNotIn("近路径", labels) + self.assertIn( + forbidden.Name, + result["network"]["route_constraints"]["forbidden"]["names"], ) - def test_route_eplan_connections_from_payload_applies_per_wire_forbidden_route(self): + def test_eplan_connection_route_accepts_chinese_constraint_mode_aliases(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + forbidden = routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="禁止路径", + label="近路径", project_uuid="project-1", kind="UserPath", ) + forbidden.QetRouteConstraintMode = "禁止经过" routing_network.create_route_carrier( doc, [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="允许路径", + label="远路径", project_uuid="project-1", kind="UserPath", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-forbidden", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - "forbidden_route_carrier_labels": ["禁止路径"], - } - ], - } - report = auto_routing.route_eplan_connections_from_payload( + result = auto_routing.route_eplan_connection_between_terminals( doc, - payload, + start, + end, options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) labels = [ segment["carrier"]["label"] - for segment in report["routes"][0]["route_track"]["segments"] + for segment in result["route_track"]["segments"] ] - self.assertIn("允许路径", labels) - self.assertNotIn("禁止路径", labels) + self.assertIn("远路径", labels) + self.assertNotIn("近路径", labels) + self.assertIn( + forbidden.Name, + result["network"]["route_constraints"]["forbidden"]["names"], + ) - def test_route_eplan_connections_from_payload_applies_per_wire_forbidden_source_name(self): + def test_eplan_connection_route_uses_carrier_marked_required(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - forbidden = routing_network.create_route_carrier( + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="禁止源路径", + label="近路径", project_uuid="project-1", kind="UserPath", ) - forbidden.QetRouteSourceName = "ForbiddenSketch" - allowed = routing_network.create_route_carrier( + required = routing_network.create_route_carrier( doc, [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], - label="允许源路径", + label="远路径", project_uuid="project-1", kind="UserPath", ) - allowed.QetRouteSourceName = "AllowedSketch" - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-forbidden-source", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - "forbidden_route_carrier_source_names": ["ForbiddenSketch"], - } - ], - } + required.QetRouteConstraintMode = "Required" - report = auto_routing.route_eplan_connections_from_payload( + result = auto_routing.route_eplan_connection_between_terminals( doc, - payload, + start, + end, options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) labels = [ segment["carrier"]["label"] - for segment in report["routes"][0]["route_track"]["segments"] + for segment in result["route_track"]["segments"] ] - self.assertIn("允许源路径", labels) - self.assertNotIn("禁止源路径", labels) - self.assertEqual( - ["ForbiddenSketch"], - report["routes"][0]["network"]["route_constraints"]["forbidden"]["source_names"], + self.assertIn("远路径", labels) + self.assertNotIn("近路径", labels) + self.assertIn( + required.Name, + result["network"]["route_constraints"]["required"]["names"], ) - def test_route_eplan_connections_from_payload_classifies_unsatisfied_route_constraints(self): + def test_source_required_constraint_from_multi_wire_sketch_accepts_one_generated_path(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + route_path = doc.addObject("Sketcher::SketchObject", "YellowMainRouteSketch") + route_path.Label = "黄色主路径" + route_path.Shape = FakeShape( + FakeBoundBox(0, 100, 0, 80, 20, 20), + wires=[ + FakeWire([app.Vector(0, 0, 20), app.Vector(100, 0, 20)]), + FakeWire([app.Vector(0, 80, 20), app.Vector(100, 80, 20)]), + ], + ) + selection = [FakeSelectionItem(obj=route_path)] + routing_network.mark_route_constraint_mode_from_selection(doc, selection, "Required") + carriers = routing_network.create_user_path_carriers_from_selection( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - label="普通路径", + selection, project_uuid="project-1", - kind="UserPath", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-unsatisfied", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - "required_route_carrier_labels": ["不存在的必经路径"], - } - ], - } - report = auto_routing.route_eplan_connections_from_payload( + result = auto_routing.route_eplan_connection_between_terminals( doc, - payload, - options={"terminal_exit_length": 0.0}, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) - self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_route_network"]) - self.assertEqual(1, report["route_status_counts"]["MissingRouteNetwork"]) - self.assertIn("路径约束", report["missing_route_network_samples"][0]["error"]) - - def test_route_eplan_connections_from_payload_skips_resolved_tasks_without_route_network(self): - _install_fake_freecad() - terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(1000, 0, 0)) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-{0}".format(index), - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - } - for index in range(3) - ], - } - original_route = auto_routing.route_eplan_connection_between_terminals - - def fail_if_called(*_args, **_kwargs): - raise AssertionError("batch route must not call per-wire routing without route carriers") - - auto_routing.route_eplan_connection_between_terminals = fail_if_called - try: - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - finally: - auto_routing.route_eplan_connection_between_terminals = original_route - - self.assertEqual(0, report["routed"]) - self.assertEqual(3, report["skipped_missing_route_network"]) - self.assertEqual(3, report["route_status_counts"]["MissingRouteNetwork"]) - self.assertEqual([], report["errors"]) - self.assertEqual([], wiring_objects.iter_routed_wire_objects(doc)) - - def test_route_eplan_connection_tasks_marks_task_missing_route_network_when_skipped(self): - _install_fake_freecad() - terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - task = wiring_objects.create_wire_task( - doc, - "project-1", - "wire-missing-network", - "N1", - "terminal-start", - "terminal-end", - "instance-a", - "instance-b", + route_carrier_names = [ + segment["carrier"]["name"] + for segment in result["route_track"]["segments"] + if not segment.get("is_bridge") + ] + self.assertEqual("network-dijkstra-v1", result["algorithm"]) + self.assertIn(carriers[0].Name, route_carrier_names) + self.assertNotIn(carriers[1].Name, route_carrier_names) + self.assertEqual( + ["黄色主路径"], + result["network"]["route_constraints"]["required"]["source_labels"], ) - task.RouteStatus = "Routed" - - report = auto_routing.route_eplan_connection_tasks(doc) - - self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_route_network"]) - self.assertEqual("MissingRouteNetwork", task.RouteStatus) - def test_route_eplan_connection_tasks_auto_creates_diagnostic_bridge_before_routing(self): + def test_eplan_connection_route_requires_carrier_label(self): _install_fake_freecad() - terminal_objects, wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="普通路径", project_uuid="project-1", - kind="RoutingRange", - label="安装板兜底路径", + kind="UserPath", ) - wiring_objects.create_wire_task( + routing_network.create_route_carrier( doc, - "project-1", - "wire-task-bridge", - "N1", - "terminal-start", - "terminal-end", - "instance-a", - "instance-b", + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="必经路径", + project_uuid="project-1", + kind="UserPath", ) - original_diagnostic = routing_network.diagnose_routing_path_network - original_create = routing_network.create_user_path_bridges_from_diagnostic_suggestions - calls = {"diagnostic": 0} - - def fake_diagnostic(*_args, **_kwargs): - calls["diagnostic"] += 1 - if calls["diagnostic"] == 1: - return { - "ok": False, - "issues": [ - { - "severity": "warning", - "code": "wire_ducts_without_terminal_access", - "count": 1, - }, - ], - "summary": {"carriers": 1}, - "wire_ducts_without_terminal_access": [ - { - "index": 0, - "carrier_names": ["孤立线槽"], - "bridge_suggestion": {"distance_mm": 40.0}, - }, - ], - } - return {"ok": True, "issues": [], "summary": {"carriers": 2}} - - def fake_create(_doc, _diagnostic, project_uuid=""): - carrier = routing_network.create_route_carrier( - _doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - project_uuid=project_uuid or "project-1", - kind="WireDuct", - label="诊断桥接后主路径", - ) - return {"suggestions": 1, "created": [carrier], "duplicates": 0, "stale_suggestions": 0} - routing_network.diagnose_routing_path_network = fake_diagnostic - routing_network.create_user_path_bridges_from_diagnostic_suggestions = fake_create - try: - report = auto_routing.route_eplan_connection_tasks( - doc, - options={"auto_create_diagnostic_bridges": True}, - ) - finally: - routing_network.diagnose_routing_path_network = original_diagnostic - routing_network.create_user_path_bridges_from_diagnostic_suggestions = original_create + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={ + "terminal_exit_length": 0.0, + "lane_spacing": 0.0, + "required_route_carrier_labels": ["必经路径"], + }, + ) - self.assertEqual(1, report["auto_diagnostic_bridges"]["created_count"]) - self.assertEqual({"main_path_routes": 1, "fallback_routes": 0}, report["route_path_usage"]) - self.assertEqual(["Routed"], list(report["route_status_counts"].keys())) - self.assertNotIn("main_path_not_used", report["issue_codes"]) + labels = [ + segment["carrier"]["label"] + for segment in result["route_track"]["segments"] + ] + self.assertIn("必经路径", labels) + self.assertNotIn("普通路径", labels) + self.assertEqual( + ["必经路径"], + result["network"]["route_constraints"]["required"]["labels"], + ) - def test_eplan_connection_route_prefers_wire_duct_over_shorter_routing_range(self): + def test_eplan_connection_route_reports_unsatisfied_route_constraints(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(300, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(300, 0, 20)], - project_uuid="project-1", - kind="RoutingRange", - ) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [ - app.Vector(0, 0, 20), - app.Vector(0, 1200, 20), - app.Vector(300, 1200, 20), - app.Vector(300, 0, 20), - ], + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="普通路径", project_uuid="project-1", - kind="WireDuct", + kind="UserPath", ) - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + with self.assertRaises(auto_routing.AutoRoutingError) as context: + auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={ + "terminal_exit_length": 0.0, + "required_route_carrier_labels": ["不存在的必经路径"], + }, + ) - self.assertIn("WireDuct", result["route_track"]["carrier_kinds"]) - self.assertNotIn("RoutingRange", result["route_track"]["carrier_kinds"]) + self.assertIn("路径约束", str(context.exception)) - def test_eplan_connection_wire_records_fallback_route_quality_warning(self): + def test_eplan_connection_route_chooses_clear_orthogonal_access_order(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(120, 0, 20)], - label="安装板兜底路径", + [app.Vector(30, 30, 0), app.Vector(100, 30, 0)], + label="Only Duct", project_uuid="project-1", - kind="RoutingRange", + kind="WireDuct", ) + obstacle = doc.addObject("Part::Feature", "AccessOrderObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(10, 20, -5, 5, -5, 5)) result = auto_routing.route_eplan_connection_between_terminals( doc, @@ -9230,35 +9860,59 @@ class AutoRoutingTest(unittest.TestCase): options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, ) - wire = result["wire"] - self.assertEqual("FallbackPathWarning", wire.QetRouteQualityStatus) - self.assertEqual("RoutingRange", wire.QetRouteFallbackCarrierKinds) - self.assertEqual("安装板兜底路径", wire.QetRouteFallbackCarrierLabels) - self.assertEqual("route_quality_warnings", wire.QetRouteIssueCodes) - self.assertEqual("路径质量告警", wire.QetRouteIssueLabels) - payload = json.loads(wire.QetRouteDiagnosticsJson) - self.assertEqual(["route_quality_warnings"], payload["issue_codes"]) - self.assertEqual(["路径质量告警"], payload["issue_labels"]) - self.assertEqual("FallbackPathWarning", payload["quality"]["quality_status"]) - self.assertEqual(["RoutingRange"], payload["quality"]["fallback_carrier_kinds"]) + point_tuples = [(point.x, point.y, point.z) for point in result["points"]] + self.assertIn((0.0, 30.0, 0.0), point_tuples) + self.assertNotIn((30.0, 0.0, 0.0), point_tuples) + self.assertEqual(0, result["collision_count"]) - def test_eplan_connection_wire_records_third_party_collision_issue(self): + def test_eplan_connection_route_marks_collision_warning_against_obstacle_bbox(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(120, 0, 20)], - label="线槽主路径", + [app.Vector(0, 0, 100), app.Vector(100, 0, 100)], + project_uuid="project-1", + ) + obstacle = doc.addObject("Part::Feature", "Obstacle") + obstacle.Shape = FakeShape(FakeBoundBox(40, 60, -10, 10, 90, 110)) + parent = doc.addObject("App::Part", "DoorAssembly") + parent.Label = "FRONT DOOR-R ASS'Y" + parent.addObject(obstacle) + + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + + self.assertEqual("CollisionWarning", result["route_status"]) + self.assertEqual("CollisionWarning", result["wire"].RouteStatus) + self.assertEqual(1, result["collision_count"]) + self.assertEqual("HardIntersection", result["collisions"][0]["collision_kind"]) + self.assertEqual(["FRONT DOOR-R ASS'Y"], result["collisions"][0]["obstacle_parent_labels"]) + self.assertEqual(["DoorAssembly"], result["collisions"][0]["obstacle_parent_names"]) + self.assertEqual("1", result["wire"].QetRouteCollisionCount) + self.assertEqual("1", result["wire"].QetRouteHardIntersectionCount) + self.assertEqual("0", result["wire"].QetRouteClearanceWarningCount) + self.assertEqual("HardIntersectionWarning", result["wire"].QetRouteCollisionStatus) + + def test_eplan_connection_route_locally_detours_terminal_access_around_third_party_device(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 100, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 50), app.Vector(100, 0, 50)], project_uuid="project-1", kind="WireDuct", ) obstacle = doc.addObject("Part::Feature", "ThirdPartyDevice") - obstacle.Label = "设备A" + obstacle.Label = "第三方设备" terminal_objects.ensure_string_property( obstacle, "QetElementUuid", @@ -9266,101 +9920,137 @@ class AutoRoutingTest(unittest.TestCase): "", "device-obstacle", ) - obstacle.Shape = FakeShape(FakeBoundBox(50, 70, -10, 10, 15, 25)) + obstacle.Shape = FakeShape(FakeBoundBox(90, 110, 40, 60, -10, 60)) result = auto_routing.route_eplan_connection_between_terminals( doc, start, end, - options={"avoid_obstacles": False, "terminal_exit_length": 0.0}, + options={ + "avoid_obstacles": False, + "avoid_local_access_obstacles": True, + "terminal_exit_length": 0.0, + }, endpoint_metadata={ "start_element_uuid": "device-start", "end_element_uuid": "device-end", }, ) - wire = result["wire"] - self.assertIn("collision_warnings", wire.QetRouteIssueCodes) - self.assertIn("third_party_device_collisions", wire.QetRouteIssueCodes) - self.assertIn("第三方设备/布局碰撞", wire.QetRouteIssueLabels) - payload = json.loads(wire.QetRouteDiagnosticsJson) - self.assertIn("third_party_device_collisions", payload["issue_codes"]) - self.assertEqual( - "third_party_device_collision", - payload["collisions"][0]["collision_relation"], - ) + self.assertEqual("Routed", result["route_status"]) + self.assertEqual(0, result["collision_count"]) + self.assertTrue(any(abs(point.x - 75.0) <= 0.001 for point in result["points"])) - def test_collision_relation_marks_endpoint_device_collision(self): + def test_network_route_limits_local_access_obstacles_to_nearby_bboxes(self): _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - - relation = auto_routing._collision_relation( - { - "obstacle_element_uuid": "device-start", - "start_element_uuid": "device-start", - "end_element_uuid": "device-end", - } + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 100, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 50), app.Vector(100, 0, 50)], + project_uuid="project-1", + kind="WireDuct", + ) + near_obstacle = doc.addObject("Part::Feature", "NearThirdPartyDevice") + near_obstacle.Label = "近处第三方设备" + terminal_objects.ensure_string_property( + near_obstacle, + "QetElementUuid", + "QET Exchange", + "", + "device-near-obstacle", ) + near_obstacle.Shape = FakeShape(FakeBoundBox(90, 110, 40, 60, -10, 60)) + for index in range(120): + far_obstacle = doc.addObject("Part::Feature", "FarDevice{0}".format(index)) + far_obstacle.Shape = FakeShape( + FakeBoundBox(10000 + index * 20, 10010 + index * 20, 10000, 10010, 10000, 10010) + ) - self.assertEqual("endpoint_device_collision", relation) + calls = {"count": 0} + original_segment_intersects_bbox = auto_routing._segment_intersects_bbox - def test_unbound_structural_collision_can_be_auto_ignored_without_ignoring_devices(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + def counted_segment_intersects_bbox(start_point, end_point, bbox): + calls["count"] += 1 + return original_segment_intersects_bbox(start_point, end_point, bbox) - structural = { - "obstacle_label": "NFB BRACKET_P00", - "obstacle_name": "Solid043", - "obstacle_element_uuid": "", - "obstacle_parent_labels": ["CABINET ASS'Y", "QET Exchange Devices"], - "obstacle_parent_names": ["LinkGroup005", "QETExchangeDevices"], - } - device = { - "obstacle_label": "3S001", - "obstacle_name": "Device3S001", - "obstacle_element_uuid": "device-uuid", - "obstacle_parent_labels": ["QET Exchange Devices"], - "obstacle_parent_names": ["QETExchangeDevices"], - } + auto_routing._segment_intersects_bbox = counted_segment_intersects_bbox + try: + result = auto_routing.build_network_route( + start, + end, + options={ + "avoid_obstacles": False, + "avoid_local_access_obstacles": True, + "terminal_exit_length": 0.0, + }, + doc=doc, + ) + finally: + auto_routing._segment_intersects_bbox = original_segment_intersects_bbox - self.assertTrue(auto_routing._is_auto_ignorable_unbound_structural_collision(structural)) - self.assertFalse(auto_routing._is_auto_ignorable_unbound_structural_collision(device)) - kept, ignored = auto_routing._filter_auto_ignored_collisions([structural, device]) - self.assertEqual([device], kept) - self.assertEqual([structural], ignored) + self.assertIsNotNone(result) + self.assertTrue(any(abs(point.x - 75.0) <= 0.001 for point in result["points"])) + self.assertLess(calls["count"], 80) - def test_eplan_connection_route_prefers_wire_duct_when_routing_range_is_only_moderately_shorter(self): + def test_network_route_ignores_unbound_structural_bboxes_for_local_access_avoidance(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(10, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(10, 0, 20)], - project_uuid="project-1", - kind="RoutingRange", - ) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 100, 0)) routing_network.create_route_carrier( doc, - [ - app.Vector(0, 0, 20), - app.Vector(0, 145, 20), - app.Vector(10, 145, 20), - app.Vector(10, 0, 20), - ], + [app.Vector(0, 0, 50), app.Vector(100, 0, 50)], project_uuid="project-1", kind="WireDuct", ) + near_device = doc.addObject("Part::Feature", "BoundNearDevice") + terminal_objects.ensure_string_property( + near_device, + "QetElementUuid", + "QET Exchange", + "", + "device-near-obstacle", + ) + near_device.Shape = FakeShape(FakeBoundBox(90, 110, 40, 60, -10, 60)) + for index in range(80): + cabinet_part = doc.addObject("Part::Feature", "ImportedCabinetPart{0}".format(index)) + cabinet_part.Shape = FakeShape(FakeBoundBox(-1000, 1000, -1000, 1000, -1000, 1000)) - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + calls = {"count": 0} + original_segment_intersects_bbox = auto_routing._segment_intersects_bbox - self.assertIn("WireDuct", result["route_track"]["carrier_kinds"]) - self.assertNotIn("RoutingRange", result["route_track"]["carrier_kinds"]) + def counted_segment_intersects_bbox(start_point, end_point, bbox): + calls["count"] += 1 + return original_segment_intersects_bbox(start_point, end_point, bbox) - def test_eplan_connection_route_considers_primary_entry_beyond_nearest_surface_candidates(self): + auto_routing._segment_intersects_bbox = counted_segment_intersects_bbox + try: + result = auto_routing.build_network_route( + start, + end, + options={ + "avoid_obstacles": False, + "avoid_local_access_obstacles": True, + "terminal_exit_length": 0.0, + }, + doc=doc, + ) + finally: + auto_routing._segment_intersects_bbox = original_segment_intersects_bbox + + self.assertIsNotNone(result) + self.assertTrue(any(abs(point.x - 75.0) <= 0.001 for point in result["points"])) + self.assertLess(calls["count"], 80) + + def test_network_route_caps_extra_entry_candidates_in_batch_mode(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] @@ -9368,954 +10058,3172 @@ class AutoRoutingTest(unittest.TestCase): terminal_objects.ensure_root_group(doc, "project-1") start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - for y in range(1, 11): + for index in range(8): routing_network.create_route_carrier( doc, - [app.Vector(0, y, 20), app.Vector(100, y, 20)], + [app.Vector(0, index * 10, 50), app.Vector(100, index * 10, 50)], project_uuid="project-1", - kind="RoutingRange", + kind="WireDuct", ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 20, 20), app.Vector(100, 20, 20)], - project_uuid="project-1", - kind="WireDuct", + obstacle = doc.addObject("Part::Feature", "BoundNearDevice") + terminal_objects.ensure_string_property( + obstacle, + "QetElementUuid", + "QET Exchange", + "", + "device-near-obstacle", ) + obstacle.Shape = FakeShape(FakeBoundBox(15, 25, -5, 5, 40, 60)) + calls = {"shortest_path": 0} + original_shortest_path = routing_network.shortest_path_with_carriers - result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + def counted_shortest_path(*args, **kwargs): + calls["shortest_path"] += 1 + return original_shortest_path(*args, **kwargs) - self.assertIn("WireDuct", result["route_track"]["carrier_kinds"]) - self.assertNotIn("RoutingRange", result["route_track"]["carrier_kinds"]) + routing_network.shortest_path_with_carriers = counted_shortest_path + try: + result = auto_routing.build_network_route( + start, + end, + options={ + "network_entry_candidate_limit": 3, + "network_entry_candidate_total_limit": 4, + "avoid_obstacles": False, + "avoid_local_access_obstacles": True, + "terminal_exit_length": 0.0, + }, + doc=doc, + ) + finally: + routing_network.shortest_path_with_carriers = original_shortest_path - def test_route_eplan_connections_from_payload_skips_tasks_when_carriers_have_no_segments(self): - _install_fake_freecad() - terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() + self.assertIsNotNone(result) + self.assertLessEqual(calls["shortest_path"], 16) + + def test_eplan_connection_route_marks_clearance_warning_against_expanded_obstacle_bbox(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - broken_carrier = doc.addObject("Part::Feature", "BrokenCarrier") - terminal_objects.ensure_string_property( - broken_carrier, - "QetRoutingRole", - "QET Routing", - "Routing role marker", - "RoutingCarrier", - ) - terminal_objects.ensure_string_property( - broken_carrier, - "QetRouteCarrierKind", - "QET Routing", - "Route carrier kind", - "WireDuct", - ) - terminal_objects.ensure_bool_property( - broken_carrier, - "CanRouteWire", - "QET Routing", - "Whether routing connections can use this path", - True, + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 100), app.Vector(100, 0, 100)], + label="主线槽A", + project_uuid="project-1", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - }, - ], - } + obstacle = doc.addObject("Part::Feature", "NearObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(40, 60, 3, 6, 90, 110)) - report = auto_routing.route_eplan_connections_from_payload( + result = auto_routing.route_eplan_connection_between_terminals( doc, - payload, - options={"network_entry_max_distance": 30.0}, + start, + end, + options={"obstacle_clearance": 5.0}, ) - self.assertEqual(1, report["route_network_carriers"]) - self.assertEqual(0, report["route_network_segments"]) - self.assertEqual(0, report["route_network_nodes"]) - self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_route_network"]) - self.assertEqual(1, report["route_status_counts"]["MissingRouteNetwork"]) - self.assertEqual([], report["errors"]) - self.assertEqual([], wiring_objects.iter_routed_wire_objects(doc)) + self.assertEqual("CollisionWarning", result["route_status"]) + self.assertEqual(1, result["collision_count"]) + self.assertEqual("ClearanceWarning", result["collisions"][0]["collision_kind"]) + self.assertEqual(3.0, result["collisions"][0]["obstacle_bbox"]["ymin"]) + self.assertEqual(-2.0, result["collisions"][0]["collision_bbox"]["ymin"]) + self.assertEqual("1", result["wire"].QetRouteCollisionCount) + self.assertEqual("0", result["wire"].QetRouteHardIntersectionCount) + self.assertEqual("1", result["wire"].QetRouteClearanceWarningCount) + self.assertEqual("ClearanceWarning", result["wire"].QetRouteCollisionStatus) - def test_route_eplan_connections_from_payload_applies_batch_entry_candidate_limit(self): + def test_eplan_connection_route_ignores_terminal_exit_segment_collision(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], project_uuid="project-1", - kind="WireDuct", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - }, - ], - } - captured_options = [] - original = auto_routing.route_eplan_connection_between_terminals - - def fake_route(*args, **kwargs): - captured_options.append(dict(kwargs.get("options") or {})) - return { - "algorithm": "fake", - "route_status": "Routed", - "length_mm": 10.0, - "lane": {"index": 0}, - "network": {}, - "route_track": {}, - "collision_count": 0, - "collisions": [], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a", - } + terminal_body = doc.addObject("Part::Feature", "UngroupedTerminalBody") + terminal_body.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, -5, 15)) - auto_routing.route_eplan_connection_between_terminals = fake_route - try: - report = auto_routing.route_eplan_connections_from_payload( - doc, - payload, - options={ - "network_entry_candidate_limit": 8, - "batch_network_entry_candidate_limit": 2, - "batch_network_entry_total_candidate_limit": 4, - }, - ) - finally: - auto_routing.route_eplan_connection_between_terminals = original + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertEqual(1, report["routed"]) - self.assertEqual(2, report["batch_network_entry_candidate_limit"]) - self.assertEqual(4, report["batch_network_entry_total_candidate_limit"]) - self.assertFalse(report["batch_avoid_obstacles"]) - self.assertEqual(2, captured_options[0]["network_entry_candidate_limit"]) - self.assertEqual(4, captured_options[0]["network_entry_candidate_total_limit"]) - self.assertFalse(captured_options[0]["avoid_obstacles"]) - self.assertIsInstance(captured_options[0]["__base_route_network"], dict) - self.assertIsInstance(captured_options[0]["__obstacle_candidate_cache"], dict) + self.assertEqual("Routed", result["route_status"]) + self.assertEqual(0, result["collision_count"]) - def test_route_eplan_connections_retries_missing_route_with_wider_candidate_limit(self): + def test_eplan_connection_route_ignores_explicit_start_local_route_collision(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + start.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + start.QetTerminalLocalRoutePointsJson = json.dumps( + [[0, 0, 0], [20, 0, 0], [20, 40, 0]] + ) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(20, 80, 0), app.Vector(120, 80, 0)], + label="Cabinet Main Path", project_uuid="project-1", - kind="WireDuct", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - }, - ], - } - captured_limits = [] - original = auto_routing.route_eplan_connection_between_terminals - - def fake_route(*args, **kwargs): - limit = int((kwargs.get("options") or {}).get("network_entry_candidate_limit", 0) or 0) - captured_limits.append(limit) - if limit < 8: - raise auto_routing.AutoRoutingError( - "没有可用的布线路径网络;请先生成布线布局空间和布线路径网络。" - ) - return { - "algorithm": "fake", - "route_status": "Routed", - "length_mm": 10.0, - "lane": {"index": 0}, - "network": {}, - "route_track": {}, - "collision_count": 0, - "collisions": [], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a", - } + local_body = doc.addObject("Part::Feature", "StartDeviceLocalShell") + local_body.Shape = FakeShape(FakeBoundBox(15, 25, 15, 25, -5, 5)) - auto_routing.route_eplan_connection_between_terminals = fake_route - try: - report = auto_routing.route_eplan_connections_from_payload( - doc, - payload, - options={ - "network_entry_candidate_limit": 8, - "batch_network_entry_candidate_limit": 3, - "missing_route_retry_candidate_limit": 8, - }, - ) - finally: - auto_routing.route_eplan_connection_between_terminals = original + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"avoid_obstacles": False, "terminal_exit_length": 0.0}, + ) - self.assertEqual([3, 8], captured_limits) - self.assertEqual(1, report["routed"]) - self.assertEqual(0, report["skipped_missing_route_network"]) - self.assertEqual(1, report["missing_route_retries"]) - self.assertEqual(1, report["route_status_counts"]["Routed"]) + self.assertEqual("Routed", result["route_status"]) + self.assertEqual(0, result["collision_count"]) + diagnostics = json.loads(result["wire"].QetRouteDiagnosticsJson) + self.assertEqual(3, len(diagnostics["endpoint_access"]["start_points"])) - def test_route_eplan_connections_selectively_reroutes_third_party_collisions(self): + def test_eplan_connection_route_still_reports_main_path_collision_after_local_route(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + start.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + start.QetTerminalLocalRoutePointsJson = json.dumps( + [[0, 0, 0], [20, 0, 0], [20, 40, 0]] + ) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(20, 80, 0), app.Vector(120, 80, 0)], + label="Cabinet Main Path", project_uuid="project-1", - kind="WireDuct", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_element_uuid": "device-start", - "start_terminal_uuid": "terminal-start", - "end_element_uuid": "device-end", - "end_terminal_uuid": "terminal-end", - }, - ], - } - captured_avoid = [] - original = auto_routing.route_eplan_connection_between_terminals + main_obstacle = doc.addObject("Part::Feature", "MainPathObstacle") + main_obstacle.Shape = FakeShape(FakeBoundBox(55, 65, 75, 85, -5, 5)) - def fake_route(*args, **kwargs): - route_options = dict(kwargs.get("options") or {}) - avoid = bool(route_options.get("avoid_obstacles", False)) - captured_avoid.append(avoid) - if avoid: - return { - "algorithm": "fake", - "route_status": "Routed", - "length_mm": 12.0, - "lane": {"index": 0}, - "network": {}, - "route_track": {}, - "collision_count": 0, - "collisions": [], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a clean", - } - return { - "algorithm": "fake", - "route_status": "CollisionWarning", - "length_mm": 10.0, - "lane": {"index": 0}, - "network": {}, - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} - ] - }, - "collision_count": 1, - "collisions": [ - { - "collision_kind": "HardIntersection", - "obstacle_element_uuid": "device-obstacle", - "obstacle_label": "设备A", - } - ], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a collision", - } - - auto_routing.route_eplan_connection_between_terminals = fake_route - try: - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - finally: - auto_routing.route_eplan_connection_between_terminals = original + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"avoid_obstacles": False, "terminal_exit_length": 0.0}, + ) - self.assertEqual([False, True], captured_avoid) - self.assertEqual(1, report["selective_collision_reroute_attempts"]) - self.assertEqual(1, report["selective_collision_reroutes"]) - self.assertEqual(0, report["selective_collision_reroute_no_improvement"]) - self.assertEqual(1, report["routed"]) - self.assertEqual(0, report["collision_warnings"]) - self.assertEqual("Routed", report["routes"][0]["route_status"]) + self.assertEqual("CollisionWarning", result["route_status"]) + self.assertEqual(1, result["collision_count"]) + self.assertEqual("MainPathObstacle", result["collisions"][0]["obstacle_name"]) - def test_route_eplan_connections_rejects_selective_reroute_when_it_uses_fallback_path(self): + def test_eplan_connection_route_detours_local_access_segment_around_obstacle(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(0, 0, 100), app.Vector(100, 0, 100)], + label="主线槽A", project_uuid="project-1", - kind="WireDuct", ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_element_uuid": "device-start", - "start_terminal_uuid": "terminal-start", - "end_element_uuid": "device-end", - "end_terminal_uuid": "terminal-end", - }, - ], - } - original = auto_routing.route_eplan_connection_between_terminals - created_wires = [] + obstacle = doc.addObject("Part::Feature", "AccessObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, 40, 60)) - def fake_route(*args, **kwargs): - route_doc = args[0] - avoid = bool((kwargs.get("options") or {}).get("avoid_obstacles", False)) - if avoid: - retry_wire = route_doc.addObject("Part::Feature", "RetryFallbackWire") - created_wires.append(retry_wire) - return { - "wire": retry_wire, - "algorithm": "fake", - "route_status": "Routed", - "length_mm": 12.0, - "lane": {"index": 0}, - "network": {}, - "route_track": { - "segments": [ - {"carrier": {"kind": "RoutingRange", "label": "辅助面"}} - ] - }, - "collision_count": 0, - "collisions": [], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a fallback", - } - original_wire = route_doc.addObject("Part::Feature", "OriginalCollisionWire") - created_wires.append(original_wire) - return { - "wire": original_wire, - "algorithm": "fake", - "route_status": "CollisionWarning", - "length_mm": 10.0, - "lane": {"index": 0}, - "network": {}, - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} - ] - }, - "collision_count": 1, - "collisions": [ - { - "collision_kind": "HardIntersection", - "obstacle_element_uuid": "device-obstacle", - "obstacle_label": "设备A", - } - ], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a collision", - } + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - auto_routing.route_eplan_connection_between_terminals = fake_route - try: - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - finally: - auto_routing.route_eplan_connection_between_terminals = original + self.assertEqual("Routed", result["route_status"]) + self.assertEqual(0, result["collision_count"]) + self.assertTrue( + any(abs(point.x) > 5.0 or abs(point.y) > 5.0 for point in result["points"]), + "局部接入段应增加侧向绕障拐点,而不是直接穿过障碍盒。", + ) - self.assertEqual(1, report["selective_collision_reroute_attempts"]) - self.assertEqual(0, report["selective_collision_reroutes"]) - self.assertEqual(1, report["selective_collision_reroute_rejected_fallback"]) - self.assertEqual(1, report["collision_warnings"]) - self.assertEqual("CollisionWarning", report["routes"][0]["route_status"]) - self.assertEqual("RejectedFallback", report["routes"][0]["selective_collision_reroute_status"]) - self.assertEqual( - ["RoutingRange"], - report["routes"][0]["selective_collision_reroute_rejected_fallback_kinds"], + def test_terminal_access_corrects_default_lcs_direction_when_bbox_exit_is_too_deep(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceDeepBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalDeepInside", "terminal-deep", app.Vector(0, 0, 0)) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "DeepDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 500)) + device.addObject(body) + + points = routing_network.terminal_access_path_points( + terminal, + exit_length=20.0, + max_exit_length=80.0, ) - self.assertEqual( - ["辅助面"], - report["routes"][0]["selective_collision_reroute_rejected_fallback_labels"], + diagnostics = routing_network.terminal_access_diagnostics( + terminal, + exit_length=20.0, + max_exit_length=80.0, ) - self.assertIn("main_path_detour_missing", report["routes"][0]["issue_codes"]) - compact = auto_routing._compact_routing_connection_batch_report(report) - self.assertIn("main_path_detour_missing", compact["route_samples"][0]["issue_codes"]) - self.assertEqual( - ["辅助面"], - compact["route_samples"][0]["selective_collision_reroute"]["rejected_fallback_labels"], + + self.assertEqual(2, len(points)) + self.assertEqual(20.0, points[-1].x) + self.assertEqual(0.0, points[-1].z) + self.assertTrue(diagnostics["exit_direction_corrected"]) + self.assertEqual({"x": 1.0, "y": 0.0, "z": 0.0}, diagnostics["exit_direction"]) + + def test_terminal_access_exit_length_is_capped_for_explicit_deep_direction(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceDeepBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalDeepInside", "terminal-deep", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + terminal.QetTerminalExitDirectionJson = json.dumps({"x": 0, "y": 0, "z": 1}) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "DeepDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 500)) + device.addObject(body) + + points = routing_network.terminal_access_path_points( + terminal, + exit_length=20.0, + max_exit_length=80.0, ) - self.assertEqual(1, report["main_path_detour_missing_summary"]["wire_count"]) - self.assertEqual( - {"辅助面": 1}, - report["main_path_detour_missing_summary"]["rejected_fallback_label_counts"], + diagnostics = routing_network.terminal_access_diagnostics( + terminal, + exit_length=20.0, + max_exit_length=80.0, ) - self.assertEqual( - {"主线槽A": 1}, - report["main_path_detour_missing_summary"]["current_route_source_label_counts"], + + self.assertEqual(80.0, points[-1].z) + self.assertFalse(diagnostics["exit_direction_corrected"]) + self.assertEqual("explicit", diagnostics["exit_direction_source"]) + + def test_terminal_access_diagnostics_reports_capped_device_exit(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceDeepBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalDeepInside", "terminal-deep", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + terminal.QetTerminalExitDirectionJson = json.dumps({"x": 0, "y": 0, "z": 1}) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "DeepDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 500)) + device.addObject(body) + + payload = routing_network.terminal_access_diagnostics( + terminal, + exit_length=20.0, + max_exit_length=80.0, ) - self.assertEqual( - {"辅助面 -> 主线槽A": 1}, - report["main_path_detour_missing_summary"]["bridge_pair_counts"], + + self.assertTrue(payload["exit_length_capped"]) + self.assertEqual(20.0, payload["requested_exit_length_mm"]) + self.assertEqual(80.0, payload["actual_exit_length_mm"]) + self.assertEqual(510.0, payload["device_exit_required_length_mm"]) + self.assertEqual({"x": 0.0, "y": 0.0, "z": 1.0}, payload["exit_direction"]) + + def test_terminal_access_uses_explicit_terminal_exit_direction_before_lcs_direction(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + terminal = _terminal(doc, terminal_objects, "TerminalWithExplicitDirection", "terminal-dir", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + terminal.QetTerminalExitDirectionJson = json.dumps({"x": 1, "y": 0, "z": 0}) + + points = routing_network.terminal_access_path_points(terminal, exit_length=30.0) + diagnostics = routing_network.terminal_access_diagnostics(terminal, exit_length=30.0) + + self.assertEqual(30.0, points[-1].x) + self.assertEqual(0.0, points[-1].z) + self.assertEqual({"x": 1.0, "y": 0.0, "z": 0.0}, diagnostics["exit_direction"]) + + def test_terminal_access_local_route_overrides_explicit_direction_and_reports_source(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + terminal = _terminal(doc, terminal_objects, "TerminalWithLocalRoute", "terminal-local", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + terminal.QetTerminalExitDirectionJson = json.dumps({"x": 0, "y": 0, "z": 1}) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps( + [[0, 0, 0], [15, 0, 0], [15, 35, 0]] ) - self.assertEqual( - ["点击“选择缺主路径补路位置”快速定位汇总需补区域"], - [ - action - for action in report["recommended_actions"] - if "选择缺主路径补路位置" in action - ], + + points = routing_network.terminal_access_path_points( + terminal, + exit_length=30.0, + max_exit_length=40.0, ) - self.assertIn("main_path_detour_missing", created_wires[0].QetRouteIssueCodes) - wire_payload = json.loads(created_wires[0].QetRouteDiagnosticsJson) - self.assertEqual( - ["辅助面"], - wire_payload["selective_collision_reroute"]["rejected_fallback_labels"], + diagnostics = routing_network.terminal_access_diagnostics( + terminal, + exit_length=30.0, + max_exit_length=40.0, ) - self.assertIn("main_path_detour_missing", report["issue_codes"]) - message = auto_routing.format_eplan_connection_route_report(report) - self.assertIn("局部避障:尝试 1 条,接受 0 条,拒绝辅助路径 1 条", message) - self.assertIn("请补主路径/UserPath 或调整装配", message) - self.assertIn("缺主路径绕行:1 条,需补路径位置:辅助面 1 条", message) - self.assertIn("辅助面 -> 主线槽A 1 条", message) - def test_route_eplan_connections_auto_bridges_main_path_detour_pairs_and_retries_once(self): + self.assertEqual([(0.0, 0.0, 0.0), (15.0, 0.0, 0.0), (15.0, 35.0, 0.0)], [(p.x, p.y, p.z) for p in points]) + self.assertTrue(diagnostics["local_route_used"]) + self.assertEqual("local_route", diagnostics["exit_rule"]) + self.assertEqual(3, diagnostics["local_route_point_count"]) + self.assertEqual({"x": 1.0, "y": 0.0, "z": 0.0}, diagnostics["exit_direction"]) + self.assertEqual({"x": 15.0, "y": 35.0, "z": 0.0}, diagnostics["exit_point"]) + + def test_terminal_access_prefers_main_path_over_nearer_routing_range_and_records_rule(self): _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - fallback_source = doc.addObject("Part::Feature", "DoorRoutingRangeSource") - fallback_source.Label = "门板布线面" - current_source = doc.addObject("Part::Feature", "MainDuctSource") - current_source.Label = "主线槽A" - fallback_carrier = routing_network.create_route_carrier( + terminal = _terminal(doc, terminal_objects, "TerminalNearPanel", "terminal-panel", app.Vector(0, 0, 0)) + routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(8, 0, 20), app.Vector(8, 80, 20)], + label="安装板布线面", project_uuid="project-1", kind="RoutingRange", - label="门板布线面 carrier", ) - current_carrier = routing_network.create_route_carrier( + main_path = routing_network.create_route_carrier( doc, - [app.Vector(140, 20, 20), app.Vector(240, 20, 20)], + [app.Vector(40, 0, 20), app.Vector(40, 80, 20)], + label="柜内主路径", project_uuid="project-1", - kind="WireDuct", - label="主线槽A carrier", + kind="UserPath", ) - fallback_carrier.QetRouteSourceName = fallback_source.Name - fallback_carrier.QetRouteSourceLabel = fallback_source.Label - current_carrier.QetRouteSourceName = current_source.Name - current_carrier.QetRouteSourceLabel = current_source.Label - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "start_element_uuid": "device-start", - "start_terminal_uuid": "terminal-start", - "end_element_uuid": "device-end", - "end_terminal_uuid": "terminal-end", - }, - ], - } - original = auto_routing.route_eplan_connection_between_terminals - calls = [] - def fake_route(*args, **kwargs): - route_doc = args[0] - calls.append(bool((kwargs.get("options") or {}).get("avoid_obstacles", False))) - detour_path_exists = any( - getattr(carrier, "QetRouteBridgeKind", "") == "MainPathDetourPath" - for carrier in routing_network.collect_route_carriers(route_doc) - ) - wire = route_doc.addObject("Part::Feature", "WireAfterDetourPath" if detour_path_exists else "WireBeforeDetourPath") - if detour_path_exists: - return { - "wire": wire, - "algorithm": "fake", - "route_status": "Routed", - "length_mm": 10.0, - "lane": {"index": 0}, - "network": {}, - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} - ] - }, - "collision_count": 0, - "collisions": [], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a routed", - } - if bool((kwargs.get("options") or {}).get("avoid_obstacles", False)): - points = [ - app.Vector(0, 0, 0), - app.Vector(0, 0, 20), - app.Vector(80, 0, 20), - app.Vector(140, 20, 20), - app.Vector(100, 0, 0), - ] - wire.Points = points - return { - "wire": wire, - "algorithm": "fake", - "route_status": "Routed", - "length_mm": 12.0, - "lane": {"index": 0}, - "network": {}, - "points": points, - "route_track": { - "segments": [ - {"carrier": {"kind": "RoutingRange", "label": "门板布线面"}} - ] - }, - "collision_count": 0, - "collisions": [], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a fallback", - } - return { - "wire": wire, - "algorithm": "fake", - "route_status": "CollisionWarning", - "length_mm": 10.0, - "lane": {"index": 0}, - "network": {}, - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} - ] - }, - "collision_count": 1, - "collisions": [ - { - "collision_kind": "HardIntersection", - "obstacle_element_uuid": "device-obstacle", - "obstacle_label": "设备A", - } - ], - "wire_style_status": "NotRequested", - "wire_object_label": "wire-a collision", - } + carriers = routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + ) - auto_routing.route_eplan_connection_between_terminals = fake_route - try: - report = auto_routing.route_eplan_connections( - doc, - payload=payload, - options={"auto_create_main_path_detour_bridges": True}, - project_uuid="project-1", - update_network=False, - ) - finally: - auto_routing.route_eplan_connection_between_terminals = original + self.assertEqual(1, len(carriers)) + access = carriers[0] + self.assertEqual("UserPath", access.QetTerminalAccessTargetKind) + self.assertEqual(main_path.Name, access.QetTerminalAccessTargetName) + self.assertEqual("main_path_preferred_over_fallback", access.QetTerminalAccessTargetRule) + self.assertEqual("0", access.QetTerminalAccessFallbackTarget) - bridges = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteBridgeKind", "") == "MainPathDetourBridge" - ] - detour_paths = [ - carrier - for carrier in routing_network.collect_route_carriers(doc) - if getattr(carrier, "QetRouteBridgeKind", "") == "MainPathDetourPath" - ] + def test_terminal_access_from_local_route_avoids_reentering_endpoint_device_bbox(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceAccessBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalWithLocalExit", "terminal-local-exit", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [20, 0, 0]]) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "EndpointDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 10)) + device.addObject(body) + routing_network.create_route_carrier( + doc, + [app.Vector(-20, 0, 0), app.Vector(-20, 80, 0)], + label="左侧主路径", + project_uuid="project-1", + kind="UserPath", + ) - self.assertEqual(1, report["routed"]) - self.assertEqual(0, report["collision_warnings"]) - self.assertEqual({"Routed": 1}, report["route_status_counts"]) - self.assertEqual(1, report["auto_main_path_detour_bridges"]["created_count"]) - self.assertTrue(report["auto_main_path_detour_bridges"]["rerouted"]) - self.assertEqual(1, report["auto_main_path_detour_bridges"]["retry_wires"]) - self.assertEqual(1, report["auto_main_path_detour_bridges"]["retry_replaced_routes"]) - self.assertEqual("门板布线面 -> 主线槽A", bridges[0].QetRouteBridgePairLabel) - self.assertEqual("门板布线面 -> 主线槽A", detour_paths[0].QetRouteBridgePairLabel) - self.assertEqual([False, True, False], calls) - compact = auto_routing._compact_routing_connection_batch_report(report) - message = auto_routing.format_eplan_connection_route_report(report) - self.assertEqual(1, compact["auto_main_path_detour_bridges"]["created_count"]) - self.assertIn("自动主路径补桥:生成 UserPath 1 条并重跑布线", message) + carriers = routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + ) - def test_auto_main_path_detour_user_path_raises_capacity_when_same_path_reused(self): + self.assertEqual(1, len(carriers)) + access = carriers[0] + self.assertEqual("1", access.QetTerminalAccessAvoidedEndpointDevice) + points = [(round(point.x, 3), round(point.y, 3), round(point.z, 3)) for point in access.Points] + self.assertNotEqual([(0.0, 0.0, 0.0), (20.0, 0.0, 0.0), (-20.0, 0.0, 0.0)], points) + for start, end in zip(access.Points[1:], access.Points[2:]): + self.assertFalse( + routing_network._segment_intersects_bbox_payload( + start, + end, + {"xmin": -10, "xmax": 10, "ymin": -10, "ymax": 10, "zmin": -10, "zmax": 10}, + ), + "局部出线后的 TerminalAccess 接入段不应重新穿过端点设备包围盒。", + ) + + def test_routing_path_diagnostic_reports_terminal_access_fallback_targets(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") - points = [ - app.Vector(0, 0, 0), - app.Vector(0, 0, 20), - app.Vector(100, 0, 20), - app.Vector(100, 0, 0), - ] - retry_result = { - "points": points, - "route_track": { - "segments": [ - {"carrier": {"kind": "RoutingRange", "label": "门板布线面"}} - ] - }, - } - original_result = { - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} - ] - }, - } - - first = auto_routing._create_main_path_detour_user_path_from_retry( + _terminal(doc, terminal_objects, "TerminalFallbackAccess", "terminal-fallback", app.Vector(0, 0, 0)) + fallback = routing_network.create_route_carrier( doc, - retry_result, - original_result, + [app.Vector(20, 0, 20), app.Vector(20, 80, 20)], + label="安装板兜底路径", project_uuid="project-1", + kind="RoutingRange", ) - second = auto_routing._create_main_path_detour_user_path_from_retry( + routing_network.create_terminal_access_carriers_from_document( doc, - retry_result, - original_result, project_uuid="project-1", + terminal_exit_length=20.0, ) - self.assertIs(first, second) - self.assertEqual(2, first.QetRouteCarrierCapacity) + diagnostic = routing_network.diagnose_routing_path_network(doc) - def test_auto_main_path_detour_user_path_initial_capacity_matches_lane_parallel_count(self): + self.assertIn("terminal_access_fallback_targets", diagnostic["issue_codes"]) + self.assertEqual(1, len(diagnostic["terminal_access_fallback_targets"])) + sample = diagnostic["terminal_access_fallback_targets"][0] + self.assertEqual("TerminalFallbackAccess", sample["terminal_name"]) + self.assertEqual(fallback.Name, sample["target_name"]) + self.assertEqual("RoutingRange", sample["target_kind"]) + self.assertEqual(20.0, sample["access_length_mm"]) + self.assertEqual( + [{"x": 0.0, "y": 0.0, "z": 20.0}, {"x": 20.0, "y": 0.0, "z": 20.0}], + sample["access_points"], + ) + + def test_routing_path_diagnostic_reports_terminal_access_endpoint_device_avoidance(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - retry_result = { - "points": [ - app.Vector(0, 0, 0), - app.Vector(0, 0, 20), - app.Vector(100, 0, 20), - app.Vector(100, 0, 0), - ], - "lane": {"index": 1}, - "route_track": { - "segments": [ - {"carrier": {"kind": "RoutingRange", "label": "门板布线面"}} - ] - }, - } - original_result = { - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} - ] - }, - } + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceAccessBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalWithLocalExit", "terminal-local-exit", app.Vector(0, 0, 0)) + terminal.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + terminal.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [20, 0, 0]]) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "EndpointDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 10)) + device.addObject(body) + routing_network.create_route_carrier( + doc, + [app.Vector(-20, 0, 0), app.Vector(-20, 80, 0)], + label="左侧主路径", + project_uuid="project-1", + kind="UserPath", + ) + routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + ) - carrier = auto_routing._create_main_path_detour_user_path_from_retry( + diagnostic = routing_network.diagnose_routing_path_network(doc) + + self.assertIn("terminal_access_endpoint_device_avoidance", diagnostic["issue_codes"]) + self.assertEqual(1, len(diagnostic["terminal_access_endpoint_device_avoidance"])) + sample = diagnostic["terminal_access_endpoint_device_avoidance"][0] + self.assertEqual("TerminalWithLocalExit", sample["terminal_name"]) + self.assertEqual("QETDeviceAccessBox", sample["parent_device_name"]) + self.assertEqual("UserPath", sample["target_kind"]) + self.assertGreater(sample["access_length_mm"], 0.0) + self.assertGreaterEqual(len(sample["access_points"]), 2) + self.assertEqual({"x": 0.0, "y": 0.0, "z": 0.0}, sample["access_points"][0]) + + def test_routing_path_diagnostic_reports_terminal_exit_direction_corrections(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceDeepBox") + root.addObject(device) + terminal = _terminal(doc, terminal_objects, "TerminalDeepInside", "terminal-deep", app.Vector(0, 0, 0)) + device.addObject(terminal) + body = doc.addObject("Part::Feature", "DeepDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 500)) + device.addObject(body) + routing_network.create_route_carrier( doc, - retry_result, - original_result, + [app.Vector(20, 0, 0), app.Vector(20, 80, 0)], + label="侧向主路径", project_uuid="project-1", + kind="UserPath", ) - self.assertEqual(2, carrier.QetRouteCarrierCapacity) + diagnostic = routing_network.diagnose_routing_path_network( + doc, + terminal_exit_length=20.0, + terminal_exit_max_length=80.0, + ) - def test_route_report_raises_auto_detour_path_capacity_from_final_lane_usage(self): + self.assertIn("terminal_exit_direction_corrected", diagnostic["issue_codes"]) + self.assertEqual(1, len(diagnostic["corrected_terminal_exits"])) + sample = diagnostic["corrected_terminal_exits"][0] + self.assertEqual("TerminalDeepInside", sample["name"]) + self.assertEqual("terminal-deep", sample["terminal_uuid"]) + self.assertTrue(sample["exit_direction_corrected"]) + self.assertEqual({"x": 0.0, "y": 0.0, "z": 1.0}, sample["original_exit_direction"]) + self.assertEqual({"x": 1.0, "y": 0.0, "z": 0.0}, sample["exit_direction"]) + self.assertEqual(510.0, sample["original_device_exit_required_length_mm"]) + + def test_routed_wire_diagnostics_include_terminal_access_endpoint_device_avoidance(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - carrier = routing_network.create_route_carrier( + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceAccessBox") + root.addObject(device) + start = _terminal(doc, terminal_objects, "TerminalWithLocalExit", "terminal-local-exit", app.Vector(0, 0, 0)) + start.addProperty("App::PropertyString", "QetTerminalLocalRoutePointsJson", "QET Routing", "") + start.QetTerminalLocalRoutePointsJson = json.dumps([[0, 0, 0], [20, 0, 0]]) + device.addObject(start) + body = doc.addObject("Part::Feature", "EndpointDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 10)) + device.addObject(body) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(-20, 80, 0)) + routing_network.create_route_carrier( doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + [app.Vector(-20, 0, 0), app.Vector(-20, 80, 0)], + label="左侧主路径", project_uuid="project-1", kind="UserPath", - capacity=1, ) - carrier.QetRouteBridgeKind = "MainPathDetourPath" - report = { - "routes": [ - { - "wire_uuid": "wire-auto-detour", - "route_status": "Routed", - "lane": {"index": 1}, - "route_track": { - "segments": [ - { - "carrier": { - "name": carrier.Name, - "kind": "UserPath", - "capacity": 1, - } - } - ] - }, - } - ], - "skipped_missing_terminal": 0, - "skipped_missing_route_network": 0, - "skipped_invalid": 0, - "errors": [], - } + routing_network.create_terminal_access_carriers_from_document( + doc, + project_uuid="project-1", + terminal_exit_length=20.0, + ) - auto_routing._raise_main_path_detour_capacities_from_report(doc, report) + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 20.0}, + ) - self.assertEqual(2, carrier.QetRouteCarrierCapacity) - self.assertEqual(2, report["routes"][0]["route_track"]["segments"][0]["carrier"]["capacity"]) - self.assertEqual([], auto_routing._route_capacity_pressure_samples(report, limit=0)) + self.assertEqual("Routed", result["route_status"]) + diagnostics = json.loads(result["wire"].QetRouteDiagnosticsJson) + self.assertTrue(diagnostics["network"]["start_terminal_access_avoided_endpoint_device"]) + self.assertFalse(diagnostics["network"]["end_terminal_access_avoided_endpoint_device"]) - def test_collect_obstacles_cache_preserves_endpoint_filters(self): + def test_routed_wire_diagnostics_include_terminal_exit_length_cap(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() - terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - - endpoint_body = doc.addObject("Part::Feature", "EndpointBody") - endpoint_body.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, -5, 5)) - endpoint_body.QetInstanceId = terminal.QetInstanceId - - near_body = doc.addObject("Part::Feature", "NearBody") - near_body.Shape = FakeShape(FakeBoundBox(1, 2, -1, 1, -1, 1)) - - far_body = doc.addObject("Part::Feature", "FarBody") - far_body.Shape = FakeShape(FakeBoundBox(80, 90, -1, 1, -1, 1)) - - options = {"terminal_exit_length": 20.0, "obstacle_clearance": 0.0} - uncached = auto_routing.collect_obstacles(doc, exclude=[terminal], options=options) - cache = auto_routing._obstacle_candidate_cache(doc, options=options) - cached = auto_routing.collect_obstacles( + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceDeepBox") + root.addObject(device) + start = _terminal(doc, terminal_objects, "TerminalDeepInside", "terminal-deep", app.Vector(0, 0, 0)) + start.addProperty("App::PropertyString", "QetTerminalExitDirectionJson", "QET Routing", "") + start.QetTerminalExitDirectionJson = json.dumps({"x": 0, "y": 0, "z": 1}) + device.addObject(start) + body = doc.addObject("Part::Feature", "DeepDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-10, 10, -10, 10, -10, 500)) + device.addObject(body) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( doc, - exclude=[terminal], - options=dict(options, __obstacle_candidate_cache=cache), + [app.Vector(0, 0, 80), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="UserPath", ) - self.assertEqual(["FarBody"], [item["name"] for item in uncached]) - self.assertEqual(["FarBody"], [item["name"] for item in cached]) - - def test_collect_obstacles_skips_parent_of_support_surface_source(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - doc = FakeDocument() - parent = doc.addObject("App::LinkGroup", "DoorAssembly") - parent.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 20)) - panel = doc.addObject("Part::Feature", "DoorPanel") - panel.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 2)) - panel.QetRoutingObstacleMode = "SupportSurface" - parent.addObject(panel) - obstacle = doc.addObject("Part::Feature", "DeviceObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) - - obstacles = auto_routing.collect_obstacles(doc) - cache = auto_routing._obstacle_candidate_cache(doc) - cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) - - self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) - self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) - - def test_collect_obstacles_skips_descendant_of_pass_through_ancestor(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - doc = FakeDocument() - assembly = doc.addObject("App::LinkGroup", "DoorAssembly") - assembly.QetRoutingObstacleMode = "PassThrough" - compound = doc.addObject("Part::Compound2", "DoorCompound") - panel = doc.addObject("Part::Feature", "DoorPanel") - panel.Shape = FakeShape(FakeBoundBox(0, 40, 0, 40, 0, 40)) - assembly.addObject(compound) - compound.addObject(panel) - obstacle = doc.addObject("Part::Feature", "DeviceObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) - - obstacles = auto_routing.collect_obstacles(doc) - cache = auto_routing._obstacle_candidate_cache(doc) - cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) - - self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) - self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) - - def test_collect_obstacles_reports_full_parent_chain_for_nested_import_parts(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - doc = FakeDocument() - assembly = doc.addObject("App::LinkGroup", "DoorAssembly") - assembly.Label = "FRONT DOOR-R ASS'Y" - compound = doc.addObject("Part::Compound2", "DoorCompound") - compound.Label = "NAUO141" - panel = doc.addObject("Part::Feature", "DoorPanel") - panel.Shape = FakeShape(FakeBoundBox(0, 40, 0, 40, 0, 40)) - assembly.addObject(compound) - compound.addObject(panel) - - obstacles = auto_routing.collect_obstacles(doc) - - self.assertEqual(["DoorPanel"], [item["name"] for item in obstacles]) - self.assertEqual(["DoorCompound", "DoorAssembly"], obstacles[0]["parent_refs"]["names"]) - self.assertEqual(["NAUO141", "FRONT DOOR-R ASS'Y"], obstacles[0]["parent_refs"]["labels"]) - - def test_collect_obstacles_skips_auto_detected_support_surface_candidate(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - doc = FakeDocument() - side_cover = doc.addObject("Part::Feature", "SideCover") - side_cover.Label = "SIDE COVER-1_P00" - side_cover.Shape = FakeShape(FakeBoundBox(0, 600, 0, 2148, 0, 30)) - obstacle = doc.addObject("Part::Feature", "DeviceObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) - - obstacles = auto_routing.collect_obstacles(doc) - cache = auto_routing._obstacle_candidate_cache(doc) - cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 20.0, "terminal_exit_max_length": 80.0}, + ) - self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) - self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) + self.assertEqual("Routed", result["route_status"]) + diagnostics = json.loads(result["wire"].QetRouteDiagnosticsJson) + start_diagnostics = diagnostics["endpoint_access"]["start_diagnostics"] + self.assertTrue(start_diagnostics["exit_length_capped"]) + self.assertEqual(80.0, start_diagnostics["actual_exit_length_mm"]) + self.assertEqual(510.0, start_diagnostics["device_exit_required_length_mm"]) - def test_collect_obstacles_skips_outlist_ancestor_of_support_surface_source(self): + def test_eplan_connection_route_ignores_endpoint_device_body_as_obstacle(self): _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] doc = FakeDocument() - parent = doc.addObject("App::LinkGroup", "DoorAssembly") - parent.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 20)) - compound = doc.addObject("Part::Compound2", "DoorCompound") - compound.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 20)) - panel = doc.addObject("Part::Feature", "DoorPanel") - panel.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 2)) - panel.QetRoutingObstacleMode = "SupportSurface" - parent.OutList = [compound] - compound.InList = [parent] - compound.OutList = [panel] - panel.InList = [compound] - obstacle = doc.addObject("Part::Feature", "DeviceObstacle") - obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + device = doc.addObject("App::DocumentObjectGroup", "QETDeviceStart") + device.QetInstanceId = start.QetInstanceId + device.addObject(start) + body = doc.addObject("Part::Feature", "StartDeviceBody") + body.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, -5, 15)) + device.addObject(body) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + ) - obstacles = auto_routing.collect_obstacles(doc) - cache = auto_routing._obstacle_candidate_cache(doc) - cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) - self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) - self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) + self.assertEqual("Routed", result["route_status"]) + self.assertEqual(0, result["collision_count"]) - def test_route_eplan_connections_classifies_disconnected_network_as_missing_route_network(self): + def test_route_eplan_connections_from_payload_skips_missing_terminal(self): _install_fake_freecad() - terminal_objects, wiring_objects, routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(10, 0, 20)], - project_uuid="project-1", - kind="WireDuct", - ) - routing_network.create_route_carrier( - doc, - [app.Vector(1000, 0, 20), app.Vector(1010, 0, 20)], - project_uuid="project-1", - kind="WireDuct", - ) payload = { - "project_uuid": "project-1", "wires": [ { - "wire_id": "wire-a", - "wire_label": "N4111", + "wire_id": "wire-1", "start_terminal_uuid": "terminal-start", - "start_element_uuid": "QF1", - "start_terminal_display": "A1", - "end_terminal_uuid": "terminal-end", - "end_element_uuid": "KM1", - "end_terminal_display": "13", - }, - ], + "end_terminal_uuid": "terminal-missing", + "end_element_uuid": "device-missing", + "end_instance_id": "instance-missing", + "end_terminal_display": "A1", + } + ] } - report = auto_routing.route_eplan_connections_from_payload( - doc, - payload, - options={"network_entry_max_distance": 30.0}, - ) + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + message = auto_routing.format_eplan_connection_route_report(report) self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_route_network"]) - self.assertEqual(1, report["route_status_counts"]["MissingRouteNetwork"]) - self.assertEqual([], report["errors"]) - self.assertEqual("wire-a", report["missing_route_network_samples"][0]["wire_uuid"]) - self.assertEqual("N4111", report["missing_route_network_samples"][0]["wire_object_label"]) - self.assertEqual([], wiring_objects.iter_routed_wire_objects(doc)) + self.assertEqual(1, report["skipped_missing_terminal"]) + self.assertEqual(1, report["available_terminals"]) + self.assertEqual(0, report["local_terminals"]) + self.assertEqual(["terminal-missing"], report["missing_endpoint_uuids"]) + self.assertEqual("terminal-start", report["missing_endpoint_samples"][0]["start_terminal_uuid"]) + self.assertTrue(report["missing_endpoint_samples"][0]["start_found"]) + self.assertFalse(report["missing_endpoint_samples"][0]["end_found"]) + self.assertEqual("instance-missing", report["missing_endpoint_samples"][0]["end_instance_id"]) + self.assertEqual("A1", report["missing_endpoint_samples"][0]["end_terminal_display"]) + self.assertEqual(0, report["missing_endpoint_samples"][0]["end_element_terminal_count"]) + self.assertEqual([], report["missing_endpoint_samples"][0]["end_element_terminal_samples"]) + self.assertEqual(0, report["missing_endpoint_samples"][0]["end_instance_terminal_count"]) + self.assertEqual([], report["missing_endpoint_samples"][0]["end_instance_terminal_samples"]) + self.assertEqual( + "device_not_in_3d_scene", + report["missing_endpoint_samples"][0]["end_missing_endpoint_reason_code"], + ) + self.assertIn("终点 element=device-missing, instance=instance-missing, terminal=A1", message) + self.assertIn("原因=该 2D 设备未在 FreeCAD 场景中找到", message) + + def test_route_eplan_connections_backfills_missing_endpoint_device_info_from_payload_devices(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + payload = { + "devices": [ + { + "element_uuid": "device-missing", + "instance_id": "instance-from-device-list", + "display_tag": "UD:8", + "terminals": [ + { + "terminal_uuid": "device-missing:terminal-a", + "terminal_display": "A1", + } + ], + } + ], + "wires": [ + { + "wire_id": "wire-1", + "wire_mark": "N-MISS", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "device-missing:terminal-a", + "end_element_uuid": "device-missing", + "end_terminal_display": "A1", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + message = auto_routing.format_eplan_connection_route_report(report) + sample = report["missing_endpoint_samples"][0] + + self.assertEqual("instance-from-device-list", sample["end_instance_id"]) + self.assertEqual("UD:8", sample["end_device_label"]) + self.assertEqual( + {"device_not_in_3d_scene": 1}, + report["missing_terminal_summary"]["reason_code_counts"], + ) + self.assertEqual(1, len(report["missing_terminal_summary"]["device_groups"])) + self.assertEqual("UD:8", report["missing_terminal_summary"]["device_groups"][0]["device_label"]) + self.assertEqual(["A1"], report["missing_terminal_summary"]["device_groups"][0]["terminal_displays"]) + self.assertIn("UD:8", message) + self.assertIn("需补端子设备:UD:8 缺 1 处(A1)", message) + self.assertIn("instance=instance-from-device-list", message) + + def test_route_eplan_connections_backfills_missing_endpoint_device_info_from_v2_payload_devices(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + payload = { + "schema_version": "2.0", + "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "instance-from-v2-device", + "display_tag": "UD:8", + "terminals": [ + { + "element_uuid": "device-missing", + "terminal_uuid": "terminal-a", + "terminal_instance_id": "instance-from-v2-terminal-a", + "terminal_display": "A1", + } + ], + } + ], + "wires": [ + { + "wire_id": "wire-1", + "wire_mark": "N-MISS", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-a", + "end_element_uuid": "device-missing", + "end_terminal_display": "A1", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + sample = report["missing_endpoint_samples"][0] + + self.assertEqual("instance-from-v2-device", sample["end_instance_id"]) + self.assertEqual("UD:8", sample["end_device_label"]) + self.assertEqual("UD:8", report["missing_terminal_summary"]["device_groups"][0]["device_label"]) + self.assertEqual( + "instance-from-v2-device", + report["missing_terminal_summary"]["device_groups"][0]["instance_id"], + ) + + def test_route_eplan_connections_backfills_missing_endpoint_device_info_from_context_json_devices(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + with tempfile.TemporaryDirectory() as temp_dir: + json_path = Path(temp_dir) / "2d_to_3d.json" + json_path.write_text( + json.dumps( + { + "project_uuid": "project-1", + "devices": [ + { + "element_uuid": "device-missing", + "instance_id": "instance-from-context-json", + "display_tag": "UD:8", + } + ], + "wires": [ + { + "wire_id": "wire-1", + "wire_mark": "N-MISS", + "wire_style_id": "1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "device-missing:terminal-a", + "end_element_uuid": "device-missing", + "end_terminal_display": "A1", + } + ], + }, + ensure_ascii=False, + ), + encoding="utf-8", + ) + app._qet_exchange_summary = {"json_path": str(json_path)} + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-1", + "wire_mark": "N-MISS", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "device-missing:terminal-a", + "end_element_uuid": "device-missing", + "end_terminal_display": "A1", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + + sample = report["missing_endpoint_samples"][0] + self.assertEqual("instance-from-context-json", sample["end_instance_id"]) + self.assertEqual("UD:8", sample["end_device_label"]) + self.assertEqual( + "instance-from-context-json", + report["missing_terminal_summary"]["device_groups"][0]["instance_id"], + ) + self.assertTrue(report["context_devices_loaded"]) + self.assertEqual(1, report["context_device_count"]) + self.assertEqual(str(json_path), report["context_devices_json_path"]) + + def test_route_eplan_connections_from_payload_reports_device_without_terminals(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_without_terminals") + terminal_objects.ensure_string_property(device, "QetElementUuid", "QET Exchange", "", "device-no-terminals") + terminal_objects.ensure_string_property(device, "QetInstanceId", "QET Exchange", "", "instance-no-terminals") + payload = { + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-missing", + "end_element_uuid": "device-no-terminals", + "end_instance_id": "instance-no-terminals", + "end_terminal_display": "A1", + } + ] + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + message = auto_routing.format_eplan_connection_route_report(report) + + sample = report["missing_endpoint_samples"][0] + self.assertEqual("QETDevice_without_terminals", sample["end_device_name"]) + self.assertTrue(sample["end_device_in_scene"]) + self.assertEqual("no_3d_terminals_for_element", sample["end_missing_endpoint_reason_code"]) + self.assertIn("原因=该 2D 设备在 FreeCAD 中没有工程端子", message) + + def test_route_eplan_connections_treats_duplicate_terminal_uuid_without_matching_device_as_missing(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + for element_uuid, instance_id, terminal_uuid, x in ( + ("device-a", "instance-a", "shared-terminal", 10), + ("device-b", "instance-b", "shared-terminal", 20), + ("device-c", "instance-c", "other-terminal", 30), + ): + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_{0}".format(element_uuid)) + root.addObject(device) + terminal_objects.ensure_string_property(device, "QetElementUuid", "QET Exchange", "", element_uuid) + terminal_objects.ensure_string_property(device, "QetInstanceId", "QET Exchange", "", instance_id) + terminal_objects.ensure_string_property(device, "QetProjectUuid", "QET Exchange", "", "project-1") + terminal_group = terminal_objects.ensure_terminal_group( + doc, + device, + project_uuid="project-1", + instance_id=instance_id, + ) + terminal = terminal_objects.create_lcs_object( + doc, + "QETTerminal_{0}".format(instance_id), + placement=app.Placement(app.Vector(x, 0, 0), app.Rotation()), + label=terminal_uuid, + ) + terminal_group.addObject(terminal) + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + element_uuid, + terminal_uuid, + instance_id, + label=terminal_uuid, + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-duplicate-context", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "shared-terminal", + "end_element_uuid": "device-c", + "end_instance_id": "instance-c", + "end_terminal_display": "1", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + sample = report["missing_endpoint_samples"][0] + + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_terminal"]) + self.assertEqual(["shared-terminal"], report["missing_endpoint_uuids"]) + self.assertFalse(sample["end_found"]) + self.assertEqual("device-c", sample["end_element_uuid"]) + self.assertEqual("instance-c", sample["end_instance_id"]) + self.assertEqual(1, sample["end_element_terminal_count"]) + self.assertEqual(1, sample["end_instance_terminal_count"]) + self.assertEqual( + "terminal_uuid_not_in_element", + sample["end_missing_endpoint_reason_code"], + ) + + def test_preflight_treats_duplicate_terminal_uuid_without_matching_device_as_missing(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + for element_uuid, instance_id, terminal_uuid, x in ( + ("device-a", "instance-a", "shared-terminal", 10), + ("device-b", "instance-b", "shared-terminal", 20), + ("device-c", "instance-c", "other-terminal", 30), + ): + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_{0}".format(element_uuid)) + root.addObject(device) + terminal_objects.ensure_string_property(device, "QetElementUuid", "QET Exchange", "", element_uuid) + terminal_objects.ensure_string_property(device, "QetInstanceId", "QET Exchange", "", instance_id) + terminal_objects.ensure_string_property(device, "QetProjectUuid", "QET Exchange", "", "project-1") + terminal_group = terminal_objects.ensure_terminal_group( + doc, + device, + project_uuid="project-1", + instance_id=instance_id, + ) + terminal = terminal_objects.create_lcs_object( + doc, + "QETTerminal_preflight_{0}".format(instance_id), + placement=app.Placement(app.Vector(x, 0, 0), app.Rotation()), + label=terminal_uuid, + ) + terminal_group.addObject(terminal) + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + element_uuid, + terminal_uuid, + instance_id, + label=terminal_uuid, + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-duplicate-context", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "shared-terminal", + "end_element_uuid": "device-c", + "end_instance_id": "instance-c", + "end_terminal_display": "1", + } + ], + } + + report = auto_routing.preflight_eplan_connections(doc, payload) + sample = report["missing_endpoint_samples"][0] + + self.assertFalse(report["ok"]) + self.assertEqual(["shared-terminal"], report["missing_endpoint_uuids"]) + self.assertFalse(sample["end_found"]) + self.assertEqual("device-c", sample["end_element_uuid"]) + self.assertEqual("instance-c", sample["end_instance_id"]) + self.assertEqual( + "terminal_uuid_not_in_element", + sample["end_missing_endpoint_reason_code"], + ) + + def test_route_eplan_connections_from_payload_reports_missing_device_binding_metadata(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + payload = { + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-missing", + "end_terminal_display": "A1", + } + ] + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + message = auto_routing.format_eplan_connection_route_report(report) + + sample = report["missing_endpoint_samples"][0] + self.assertEqual("missing_device_binding_metadata", sample["end_missing_endpoint_reason_code"]) + self.assertEqual("导线端点缺少 2D/3D 设备绑定信息", sample["end_missing_endpoint_reason_label"]) + self.assertIn("QET 导线端点缺少 element_uuid", message) + self.assertIn("第一版不要求 start/end_instance_id", message) + self.assertIn("原因=导线端点缺少 2D/3D 设备绑定信息", message) + + def test_route_eplan_connections_from_payload_applies_per_wire_required_route(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="普通路径", + project_uuid="project-1", + kind="UserPath", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="必经路径", + project_uuid="project-1", + kind="UserPath", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-required", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "required_route_carrier_labels": ["必经路径"], + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) + + labels = [ + segment["carrier"]["label"] + for segment in report["routes"][0]["route_track"]["segments"] + ] + self.assertIn("必经路径", labels) + self.assertNotIn("普通路径", labels) + + def test_route_eplan_connections_from_payload_applies_per_wire_required_source_name(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + direct = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="普通路径", + project_uuid="project-1", + kind="UserPath", + ) + direct.QetRouteSourceName = "NormalSketch" + required = routing_network.create_route_carrier( + doc, + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="黄色主路径", + project_uuid="project-1", + kind="UserPath", + ) + required.QetRouteSourceName = "RequiredSketch" + required.QetRouteSourceLabel = "黄色主路径草图" + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-required-source", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "required_route_carrier_source_names": ["RequiredSketch"], + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) + + labels = [ + segment["carrier"]["label"] + for segment in report["routes"][0]["route_track"]["segments"] + ] + self.assertIn("黄色主路径", labels) + self.assertNotIn("普通路径", labels) + self.assertEqual( + ["RequiredSketch"], + report["routes"][0]["network"]["route_constraints"]["required"]["source_names"], + ) + + def test_route_eplan_connections_from_payload_applies_per_wire_forbidden_route(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="禁止路径", + project_uuid="project-1", + kind="UserPath", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="允许路径", + project_uuid="project-1", + kind="UserPath", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-forbidden", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "forbidden_route_carrier_labels": ["禁止路径"], + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) + + labels = [ + segment["carrier"]["label"] + for segment in report["routes"][0]["route_track"]["segments"] + ] + self.assertIn("允许路径", labels) + self.assertNotIn("禁止路径", labels) + + def test_route_eplan_connections_from_payload_applies_per_wire_forbidden_source_name(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + forbidden = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="禁止源路径", + project_uuid="project-1", + kind="UserPath", + ) + forbidden.QetRouteSourceName = "ForbiddenSketch" + allowed = routing_network.create_route_carrier( + doc, + [app.Vector(0, 40, 20), app.Vector(100, 40, 20)], + label="允许源路径", + project_uuid="project-1", + kind="UserPath", + ) + allowed.QetRouteSourceName = "AllowedSketch" + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-forbidden-source", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "forbidden_route_carrier_source_names": ["ForbiddenSketch"], + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) + + labels = [ + segment["carrier"]["label"] + for segment in report["routes"][0]["route_track"]["segments"] + ] + self.assertIn("允许源路径", labels) + self.assertNotIn("禁止源路径", labels) + self.assertEqual( + ["ForbiddenSketch"], + report["routes"][0]["network"]["route_constraints"]["forbidden"]["source_names"], + ) + + def test_route_eplan_connections_from_payload_classifies_unsatisfied_route_constraints(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + label="普通路径", + project_uuid="project-1", + kind="UserPath", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-unsatisfied", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "required_route_carrier_labels": ["不存在的必经路径"], + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"terminal_exit_length": 0.0}, + ) + + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_route_network"]) + self.assertEqual(1, report["route_status_counts"]["MissingRouteNetwork"]) + self.assertIn("路径约束", report["missing_route_network_samples"][0]["error"]) + + def test_route_eplan_connections_from_payload_skips_resolved_tasks_without_route_network(self): + _install_fake_freecad() + terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(1000, 0, 0)) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-{0}".format(index), + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + } + for index in range(3) + ], + } + original_route = auto_routing.route_eplan_connection_between_terminals + + def fail_if_called(*_args, **_kwargs): + raise AssertionError("batch route must not call per-wire routing without route carriers") + + auto_routing.route_eplan_connection_between_terminals = fail_if_called + try: + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + finally: + auto_routing.route_eplan_connection_between_terminals = original_route + + self.assertEqual(0, report["routed"]) + self.assertEqual(3, report["skipped_missing_route_network"]) + self.assertEqual(3, report["route_status_counts"]["MissingRouteNetwork"]) + self.assertEqual([], report["errors"]) + self.assertEqual([], wiring_objects.iter_routed_wire_objects(doc)) + + def test_route_eplan_connection_tasks_marks_task_missing_route_network_when_skipped(self): + _install_fake_freecad() + terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + task = wiring_objects.create_wire_task( + doc, + "project-1", + "wire-missing-network", + "N1", + "terminal-start", + "terminal-end", + "instance-a", + "instance-b", + ) + task.RouteStatus = "Routed" + + report = auto_routing.route_eplan_connection_tasks(doc) + + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_route_network"]) + self.assertEqual("MissingRouteNetwork", task.RouteStatus) + + def test_route_eplan_connection_tasks_auto_creates_diagnostic_bridge_before_routing(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板兜底路径", + ) + wiring_objects.create_wire_task( + doc, + "project-1", + "wire-task-bridge", + "N1", + "terminal-start", + "terminal-end", + "instance-a", + "instance-b", + ) + original_diagnostic = routing_network.diagnose_routing_path_network + original_create = routing_network.create_user_path_bridges_from_diagnostic_suggestions + calls = {"diagnostic": 0} + + def fake_diagnostic(*_args, **_kwargs): + calls["diagnostic"] += 1 + if calls["diagnostic"] == 1: + return { + "ok": False, + "issues": [ + { + "severity": "warning", + "code": "wire_ducts_without_terminal_access", + "count": 1, + }, + ], + "summary": {"carriers": 1}, + "wire_ducts_without_terminal_access": [ + { + "index": 0, + "carrier_names": ["孤立线槽"], + "bridge_suggestion": {"distance_mm": 40.0}, + }, + ], + } + return {"ok": True, "issues": [], "summary": {"carriers": 2}} + + def fake_create(_doc, _diagnostic, project_uuid=""): + carrier = routing_network.create_route_carrier( + _doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid=project_uuid or "project-1", + kind="WireDuct", + label="诊断桥接后主路径", + ) + return {"suggestions": 1, "created": [carrier], "duplicates": 0, "stale_suggestions": 0} + + routing_network.diagnose_routing_path_network = fake_diagnostic + routing_network.create_user_path_bridges_from_diagnostic_suggestions = fake_create + try: + report = auto_routing.route_eplan_connection_tasks(doc) + finally: + routing_network.diagnose_routing_path_network = original_diagnostic + routing_network.create_user_path_bridges_from_diagnostic_suggestions = original_create + + self.assertEqual(1, report["auto_diagnostic_bridges"]["created_count"]) + self.assertEqual({"main_path_routes": 1, "fallback_routes": 0}, report["route_path_usage"]) + self.assertEqual(["Routed"], list(report["route_status_counts"].keys())) + self.assertNotIn("main_path_not_used", report["issue_codes"]) + + def test_eplan_connection_route_prefers_wire_duct_over_shorter_routing_range(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(300, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(300, 0, 20)], + project_uuid="project-1", + kind="RoutingRange", + ) + routing_network.create_route_carrier( + doc, + [ + app.Vector(0, 0, 20), + app.Vector(0, 1200, 20), + app.Vector(300, 1200, 20), + app.Vector(300, 0, 20), + ], + project_uuid="project-1", + kind="WireDuct", + ) + + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + + self.assertIn("WireDuct", result["route_track"]["carrier_kinds"]) + self.assertNotIn("RoutingRange", result["route_track"]["carrier_kinds"]) + + def test_eplan_connection_wire_records_fallback_route_quality_warning(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(120, 0, 20)], + label="安装板兜底路径", + project_uuid="project-1", + kind="RoutingRange", + ) + + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"terminal_exit_length": 0.0, "lane_spacing": 0.0}, + ) + + wire = result["wire"] + self.assertEqual("FallbackPathWarning", wire.QetRouteQualityStatus) + self.assertEqual("RoutingRange", wire.QetRouteFallbackCarrierKinds) + self.assertEqual("安装板兜底路径", wire.QetRouteFallbackCarrierLabels) + self.assertEqual("route_quality_warnings", wire.QetRouteIssueCodes) + self.assertEqual("路径质量告警", wire.QetRouteIssueLabels) + payload = json.loads(wire.QetRouteDiagnosticsJson) + self.assertEqual(["route_quality_warnings"], payload["issue_codes"]) + self.assertEqual(["路径质量告警"], payload["issue_labels"]) + self.assertEqual("FallbackPathWarning", payload["quality"]["quality_status"]) + self.assertEqual(["RoutingRange"], payload["quality"]["fallback_carrier_kinds"]) + + def test_eplan_connection_wire_records_third_party_collision_issue(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(120, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(120, 0, 20)], + label="线槽主路径", + project_uuid="project-1", + kind="WireDuct", + ) + obstacle = doc.addObject("Part::Feature", "ThirdPartyDevice") + obstacle.Label = "设备A" + terminal_objects.ensure_string_property( + obstacle, + "QetElementUuid", + "QET Exchange", + "", + "device-obstacle", + ) + obstacle.Shape = FakeShape(FakeBoundBox(50, 70, -10, 10, 15, 25)) + + result = auto_routing.route_eplan_connection_between_terminals( + doc, + start, + end, + options={"avoid_obstacles": False, "terminal_exit_length": 0.0}, + endpoint_metadata={ + "start_element_uuid": "device-start", + "end_element_uuid": "device-end", + }, + ) + + wire = result["wire"] + self.assertIn("collision_warnings", wire.QetRouteIssueCodes) + self.assertIn("third_party_device_collisions", wire.QetRouteIssueCodes) + self.assertIn("第三方设备/布局碰撞", wire.QetRouteIssueLabels) + payload = json.loads(wire.QetRouteDiagnosticsJson) + self.assertIn("third_party_device_collisions", payload["issue_codes"]) + self.assertEqual( + "third_party_device_collision", + payload["collisions"][0]["collision_relation"], + ) + + def test_collision_relation_marks_endpoint_device_collision(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + + relation = auto_routing._collision_relation( + { + "obstacle_element_uuid": "device-start", + "start_element_uuid": "device-start", + "end_element_uuid": "device-end", + } + ) + + self.assertEqual("endpoint_device_collision", relation) + + def test_unbound_structural_collision_can_be_auto_ignored_without_ignoring_devices(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + + structural = { + "obstacle_label": "NFB BRACKET_P00", + "obstacle_name": "Solid043", + "obstacle_element_uuid": "", + "obstacle_parent_labels": ["CABINET ASS'Y", "QET Exchange Devices"], + "obstacle_parent_names": ["LinkGroup005", "QETExchangeDevices"], + } + device = { + "obstacle_label": "3S001", + "obstacle_name": "Device3S001", + "obstacle_element_uuid": "device-uuid", + "obstacle_parent_labels": ["QET Exchange Devices"], + "obstacle_parent_names": ["QETExchangeDevices"], + } + + self.assertTrue(auto_routing._is_auto_ignorable_unbound_structural_collision(structural)) + self.assertFalse(auto_routing._is_auto_ignorable_unbound_structural_collision(device)) + kept, ignored = auto_routing._filter_auto_ignored_collisions([structural, device]) + self.assertEqual([device], kept) + self.assertEqual([structural], ignored) + + def test_eplan_connection_route_prefers_wire_duct_when_routing_range_is_only_moderately_shorter(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(10, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(10, 0, 20)], + project_uuid="project-1", + kind="RoutingRange", + ) + routing_network.create_route_carrier( + doc, + [ + app.Vector(0, 0, 20), + app.Vector(0, 145, 20), + app.Vector(10, 145, 20), + app.Vector(10, 0, 20), + ], + project_uuid="project-1", + kind="WireDuct", + ) + + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + + self.assertIn("WireDuct", result["route_track"]["carrier_kinds"]) + self.assertNotIn("RoutingRange", result["route_track"]["carrier_kinds"]) + + def test_eplan_connection_route_considers_primary_entry_beyond_nearest_surface_candidates(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + for y in range(1, 11): + routing_network.create_route_carrier( + doc, + [app.Vector(0, y, 20), app.Vector(100, y, 20)], + project_uuid="project-1", + kind="RoutingRange", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 20, 20), app.Vector(100, 20, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + + result = auto_routing.route_eplan_connection_between_terminals(doc, start, end) + + self.assertIn("WireDuct", result["route_track"]["carrier_kinds"]) + self.assertNotIn("RoutingRange", result["route_track"]["carrier_kinds"]) + + def test_route_eplan_connections_from_payload_skips_tasks_when_carriers_have_no_segments(self): + _install_fake_freecad() + terminal_objects, wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + broken_carrier = doc.addObject("Part::Feature", "BrokenCarrier") + terminal_objects.ensure_string_property( + broken_carrier, + "QetRoutingRole", + "QET Routing", + "Routing role marker", + "RoutingCarrier", + ) + terminal_objects.ensure_string_property( + broken_carrier, + "QetRouteCarrierKind", + "QET Routing", + "Route carrier kind", + "WireDuct", + ) + terminal_objects.ensure_bool_property( + broken_carrier, + "CanRouteWire", + "QET Routing", + "Whether routing connections can use this path", + True, + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + }, + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"network_entry_max_distance": 30.0}, + ) + + self.assertEqual(1, report["route_network_carriers"]) + self.assertEqual(0, report["route_network_segments"]) + self.assertEqual(0, report["route_network_nodes"]) + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_route_network"]) + self.assertEqual(1, report["route_status_counts"]["MissingRouteNetwork"]) + self.assertEqual([], report["errors"]) + self.assertEqual([], wiring_objects.iter_routed_wire_objects(doc)) + + def test_route_eplan_connections_from_payload_applies_batch_entry_candidate_limit(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + }, + ], + } + captured_options = [] + original = auto_routing.route_eplan_connection_between_terminals + + def fake_route(*args, **kwargs): + captured_options.append(dict(kwargs.get("options") or {})) + return { + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": {}, + "route_track": {}, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a", + } + + auto_routing.route_eplan_connection_between_terminals = fake_route + try: + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={ + "network_entry_candidate_limit": 8, + "batch_network_entry_candidate_limit": 2, + "batch_network_entry_total_candidate_limit": 4, + }, + ) + finally: + auto_routing.route_eplan_connection_between_terminals = original + + self.assertEqual(1, report["routed"]) + self.assertEqual(2, report["batch_network_entry_candidate_limit"]) + self.assertEqual(4, report["batch_network_entry_total_candidate_limit"]) + self.assertFalse(report["batch_avoid_obstacles"]) + self.assertEqual(2, captured_options[0]["network_entry_candidate_limit"]) + self.assertEqual(4, captured_options[0]["network_entry_candidate_total_limit"]) + self.assertFalse(captured_options[0]["avoid_obstacles"]) + self.assertIsInstance(captured_options[0]["__base_route_network"], dict) + self.assertIsInstance(captured_options[0]["__obstacle_candidate_cache"], dict) + + def test_route_eplan_connections_retries_missing_route_with_wider_candidate_limit(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + }, + ], + } + captured_limits = [] + original = auto_routing.route_eplan_connection_between_terminals + + def fake_route(*args, **kwargs): + limit = int((kwargs.get("options") or {}).get("network_entry_candidate_limit", 0) or 0) + captured_limits.append(limit) + if limit < 8: + raise auto_routing.AutoRoutingError( + "没有可用的布线路径网络;请先生成布线布局空间和布线路径网络。" + ) + return { + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": {}, + "route_track": {}, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a", + } + + auto_routing.route_eplan_connection_between_terminals = fake_route + try: + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={ + "network_entry_candidate_limit": 8, + "batch_network_entry_candidate_limit": 3, + "missing_route_retry_candidate_limit": 8, + }, + ) + finally: + auto_routing.route_eplan_connection_between_terminals = original + + self.assertEqual([3, 8], captured_limits) + self.assertEqual(1, report["routed"]) + self.assertEqual(0, report["skipped_missing_route_network"]) + self.assertEqual(1, report["missing_route_retries"]) + self.assertEqual(1, report["route_status_counts"]["Routed"]) + + def test_route_eplan_connections_selectively_reroutes_third_party_collisions(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_element_uuid": "device-start", + "start_terminal_uuid": "terminal-start", + "end_element_uuid": "device-end", + "end_terminal_uuid": "terminal-end", + }, + ], + } + captured_avoid = [] + original = auto_routing.route_eplan_connection_between_terminals + + def fake_route(*args, **kwargs): + route_options = dict(kwargs.get("options") or {}) + avoid = bool(route_options.get("avoid_obstacles", False)) + captured_avoid.append(avoid) + if avoid: + return { + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 12.0, + "lane": {"index": 0}, + "network": {}, + "route_track": {}, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a clean", + } + return { + "algorithm": "fake", + "route_status": "CollisionWarning", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": {}, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} + ] + }, + "collision_count": 1, + "collisions": [ + { + "collision_kind": "HardIntersection", + "obstacle_element_uuid": "device-obstacle", + "obstacle_label": "设备A", + } + ], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a collision", + } + + auto_routing.route_eplan_connection_between_terminals = fake_route + try: + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + finally: + auto_routing.route_eplan_connection_between_terminals = original + + self.assertEqual([False, True], captured_avoid) + self.assertEqual(1, report["selective_collision_reroute_attempts"]) + self.assertEqual(1, report["selective_collision_reroutes"]) + self.assertEqual(0, report["selective_collision_reroute_no_improvement"]) + self.assertEqual(1, report["routed"]) + self.assertEqual(0, report["collision_warnings"]) + self.assertEqual("Routed", report["routes"][0]["route_status"]) + + def test_route_eplan_connections_rejects_selective_reroute_when_it_uses_fallback_path(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_element_uuid": "device-start", + "start_terminal_uuid": "terminal-start", + "end_element_uuid": "device-end", + "end_terminal_uuid": "terminal-end", + }, + ], + } + original = auto_routing.route_eplan_connection_between_terminals + created_wires = [] + + def fake_route(*args, **kwargs): + route_doc = args[0] + avoid = bool((kwargs.get("options") or {}).get("avoid_obstacles", False)) + if avoid: + retry_wire = route_doc.addObject("Part::Feature", "RetryFallbackWire") + created_wires.append(retry_wire) + return { + "wire": retry_wire, + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 12.0, + "lane": {"index": 0}, + "network": {}, + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "辅助面"}} + ] + }, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a fallback", + } + original_wire = route_doc.addObject("Part::Feature", "OriginalCollisionWire") + created_wires.append(original_wire) + return { + "wire": original_wire, + "algorithm": "fake", + "route_status": "CollisionWarning", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": {}, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} + ] + }, + "collision_count": 1, + "collisions": [ + { + "collision_kind": "HardIntersection", + "obstacle_element_uuid": "device-obstacle", + "obstacle_label": "设备A", + } + ], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a collision", + } + + auto_routing.route_eplan_connection_between_terminals = fake_route + try: + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + finally: + auto_routing.route_eplan_connection_between_terminals = original + + self.assertEqual(1, report["selective_collision_reroute_attempts"]) + self.assertEqual(0, report["selective_collision_reroutes"]) + self.assertEqual(1, report["selective_collision_reroute_rejected_fallback"]) + self.assertEqual(1, report["collision_warnings"]) + self.assertEqual("CollisionWarning", report["routes"][0]["route_status"]) + self.assertEqual("RejectedFallback", report["routes"][0]["selective_collision_reroute_status"]) + self.assertEqual( + ["RoutingRange"], + report["routes"][0]["selective_collision_reroute_rejected_fallback_kinds"], + ) + self.assertEqual( + ["辅助面"], + report["routes"][0]["selective_collision_reroute_rejected_fallback_labels"], + ) + self.assertIn("main_path_detour_missing", report["routes"][0]["issue_codes"]) + compact = auto_routing._compact_routing_connection_batch_report(report) + self.assertIn("main_path_detour_missing", compact["route_samples"][0]["issue_codes"]) + self.assertEqual( + ["辅助面"], + compact["route_samples"][0]["selective_collision_reroute"]["rejected_fallback_labels"], + ) + self.assertEqual(1, report["main_path_detour_missing_summary"]["wire_count"]) + self.assertEqual( + {"辅助面": 1}, + report["main_path_detour_missing_summary"]["rejected_fallback_label_counts"], + ) + self.assertEqual( + {"主线槽A": 1}, + report["main_path_detour_missing_summary"]["current_route_source_label_counts"], + ) + self.assertEqual( + {"辅助面 -> 主线槽A": 1}, + report["main_path_detour_missing_summary"]["bridge_pair_counts"], + ) + self.assertEqual( + ["点击“选择缺主路径补路位置”快速定位汇总需补区域"], + [ + action + for action in report["recommended_actions"] + if "选择缺主路径补路位置" in action + ], + ) + self.assertIn("main_path_detour_missing", created_wires[0].QetRouteIssueCodes) + wire_payload = json.loads(created_wires[0].QetRouteDiagnosticsJson) + self.assertEqual( + ["辅助面"], + wire_payload["selective_collision_reroute"]["rejected_fallback_labels"], + ) + self.assertIn("main_path_detour_missing", report["issue_codes"]) + message = auto_routing.format_eplan_connection_route_report(report) + self.assertIn("局部避障:尝试 1 条,接受 0 条,拒绝辅助路径 1 条", message) + self.assertIn("请补主路径/UserPath 或调整装配", message) + self.assertIn("缺主路径绕行:1 条,需补路径位置:辅助面 1 条", message) + self.assertIn("辅助面 -> 主线槽A 1 条", message) + + def test_route_eplan_connections_auto_bridges_main_path_detour_pairs_by_default_and_retries_once(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + fallback_source = doc.addObject("Part::Feature", "DoorRoutingRangeSource") + fallback_source.Label = "门板布线面" + current_source = doc.addObject("Part::Feature", "MainDuctSource") + current_source.Label = "主线槽A" + fallback_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="RoutingRange", + label="门板布线面 carrier", + ) + current_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(140, 20, 20), app.Vector(240, 20, 20)], + project_uuid="project-1", + kind="WireDuct", + label="主线槽A carrier", + ) + fallback_carrier.QetRouteSourceName = fallback_source.Name + fallback_carrier.QetRouteSourceLabel = fallback_source.Label + current_carrier.QetRouteSourceName = current_source.Name + current_carrier.QetRouteSourceLabel = current_source.Label + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_element_uuid": "device-start", + "start_terminal_uuid": "terminal-start", + "end_element_uuid": "device-end", + "end_terminal_uuid": "terminal-end", + }, + ], + } + original = auto_routing.route_eplan_connection_between_terminals + calls = [] + + def fake_route(*args, **kwargs): + route_doc = args[0] + calls.append(bool((kwargs.get("options") or {}).get("avoid_obstacles", False))) + detour_path_exists = any( + getattr(carrier, "QetRouteBridgeKind", "") == "MainPathDetourPath" + for carrier in routing_network.collect_route_carriers(route_doc) + ) + wire = route_doc.addObject("Part::Feature", "WireAfterDetourPath" if detour_path_exists else "WireBeforeDetourPath") + if detour_path_exists: + return { + "wire": wire, + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": {}, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} + ] + }, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a routed", + } + if bool((kwargs.get("options") or {}).get("avoid_obstacles", False)): + points = [ + app.Vector(0, 0, 0), + app.Vector(0, 0, 20), + app.Vector(80, 0, 20), + app.Vector(140, 20, 20), + app.Vector(100, 0, 0), + ] + wire.Points = points + return { + "wire": wire, + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 12.0, + "lane": {"index": 0}, + "network": {}, + "points": points, + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "门板布线面"}} + ] + }, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a fallback", + } + return { + "wire": wire, + "algorithm": "fake", + "route_status": "CollisionWarning", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": {}, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} + ] + }, + "collision_count": 1, + "collisions": [ + { + "collision_kind": "HardIntersection", + "obstacle_element_uuid": "device-obstacle", + "obstacle_label": "设备A", + } + ], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a collision", + } + + auto_routing.route_eplan_connection_between_terminals = fake_route + try: + report = auto_routing.route_eplan_connections( + doc, + payload=payload, + project_uuid="project-1", + update_network=False, + ) + finally: + auto_routing.route_eplan_connection_between_terminals = original + + bridges = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteBridgeKind", "") == "MainPathDetourBridge" + ] + detour_paths = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteBridgeKind", "") == "MainPathDetourPath" + ] + + self.assertEqual(1, report["routed"]) + self.assertEqual(0, report["collision_warnings"]) + self.assertEqual({"Routed": 1}, report["route_status_counts"]) + self.assertEqual(1, report["auto_main_path_detour_bridges"]["created_count"]) + self.assertTrue(report["auto_main_path_detour_bridges"]["rerouted"]) + self.assertEqual(1, report["auto_main_path_detour_bridges"]["retry_wires"]) + self.assertEqual(1, report["auto_main_path_detour_bridges"]["retry_replaced_routes"]) + self.assertEqual("门板布线面 -> 主线槽A", bridges[0].QetRouteBridgePairLabel) + self.assertEqual("门板布线面 -> 主线槽A", detour_paths[0].QetRouteBridgePairLabel) + self.assertEqual([False, True, False], calls) + compact = auto_routing._compact_routing_connection_batch_report(report) + message = auto_routing.format_eplan_connection_route_report(report) + self.assertEqual(1, compact["auto_main_path_detour_bridges"]["created_count"]) + self.assertIn("自动主路径补桥:生成 UserPath 1 条并重跑布线", message) + + def test_route_eplan_connections_auto_bridges_terminal_access_fallback_targets_by_default_and_retries_once(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + fallback_carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="RoutingRange", + label="安装板布线面", + ) + main_path = routing_network.create_route_carrier( + doc, + [app.Vector(130, 20, 20), app.Vector(230, 20, 20)], + project_uuid="project-1", + kind="UserPath", + label="柜内主路径", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_element_uuid": "device-start", + "start_terminal_uuid": "terminal-start", + "end_element_uuid": "device-end", + "end_terminal_uuid": "terminal-end", + }, + ], + } + original = auto_routing.route_eplan_connection_between_terminals + calls = [] + + def fake_route(*args, **kwargs): + route_doc = args[0] + calls.append("route") + bridge_exists = any( + getattr(carrier, "QetRouteBridgeKind", "") == "TerminalAccessFallbackBridge" + for carrier in routing_network.collect_route_carriers(route_doc) + ) + wire = route_doc.addObject( + "Part::Feature", + "WireAfterTerminalAccessBridge" if bridge_exists else "WireBeforeTerminalAccessBridge", + ) + if bridge_exists: + return { + "wire": wire, + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 10.0, + "lane": {"index": 0}, + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + "start_terminal_access_target_kind": "UserPath", + "start_terminal_access_target_name": main_path.Name, + "start_terminal_access_target_label": "柜内主路径", + "start_terminal_access_target_distance": 20.0, + }, + "route_track": { + "segments": [ + {"carrier": {"kind": "UserPath", "name": main_path.Name, "label": "柜内主路径"}} + ] + }, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a routed", + } + return { + "wire": wire, + "algorithm": "fake", + "route_status": "Routed", + "length_mm": 12.0, + "lane": {"index": 0}, + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + "start_terminal_access_target_kind": "RoutingRange", + "start_terminal_access_target_name": fallback_carrier.Name, + "start_terminal_access_target_label": "安装板布线面", + "start_terminal_access_target_distance": 35.0, + "end_terminal_access_target_kind": "UserPath", + "end_terminal_access_target_name": main_path.Name, + "end_terminal_access_target_label": "柜内主路径", + }, + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "name": fallback_carrier.Name, "label": "安装板布线面"}} + ] + }, + "collision_count": 0, + "collisions": [], + "wire_style_status": "NotRequested", + "wire_object_label": "wire-a fallback", + } + + auto_routing.route_eplan_connection_between_terminals = fake_route + try: + report = auto_routing.route_eplan_connections( + doc, + payload=payload, + project_uuid="project-1", + update_network=False, + ) + finally: + auto_routing.route_eplan_connection_between_terminals = original + + bridges = [ + carrier + for carrier in routing_network.collect_route_carriers(doc) + if getattr(carrier, "QetRouteBridgeKind", "") == "TerminalAccessFallbackBridge" + ] + self.assertEqual(1, report["routed"]) + self.assertNotIn("terminal_access_fallback_targets", report["issue_codes"]) + self.assertEqual(1, len(bridges)) + self.assertEqual(1, report["auto_terminal_access_fallback_bridges"]["created_count"]) + self.assertTrue(report["auto_terminal_access_fallback_bridges"]["rerouted"]) + self.assertEqual(1, report["auto_terminal_access_fallback_bridges"]["retry_wires"]) + self.assertEqual(1, report["auto_terminal_access_fallback_bridges"]["retry_replaced_routes"]) + self.assertEqual( + ["安装板布线面 -> 柜内主路径"], + report["auto_terminal_access_fallback_bridges"]["created_pair_labels"], + ) + self.assertEqual(["route", "route"], calls) + compact = auto_routing._compact_routing_connection_batch_report(report) + message = auto_routing.format_eplan_connection_route_report(report) + self.assertEqual(1, compact["auto_terminal_access_fallback_bridges"]["created_count"]) + self.assertEqual( + ["安装板布线面 -> 柜内主路径"], + compact["auto_terminal_access_fallback_bridges"]["created_pair_labels"], + ) + self.assertIn("自动端子接入补桥:生成 UserPath 1 条并重跑布线", message) + self.assertIn("安装板布线面 -> 柜内主路径", message) + + def test_auto_main_path_detour_user_path_raises_capacity_when_same_path_reused(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + points = [ + app.Vector(0, 0, 0), + app.Vector(0, 0, 20), + app.Vector(100, 0, 20), + app.Vector(100, 0, 0), + ] + retry_result = { + "points": points, + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "门板布线面"}} + ] + }, + } + original_result = { + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} + ] + }, + } + + first = auto_routing._create_main_path_detour_user_path_from_retry( + doc, + retry_result, + original_result, + project_uuid="project-1", + ) + second = auto_routing._create_main_path_detour_user_path_from_retry( + doc, + retry_result, + original_result, + project_uuid="project-1", + ) + + self.assertIs(first, second) + self.assertEqual(2, first.QetRouteCarrierCapacity) + + def test_auto_main_path_detour_user_path_initial_capacity_matches_lane_parallel_count(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + retry_result = { + "points": [ + app.Vector(0, 0, 0), + app.Vector(0, 0, 20), + app.Vector(100, 0, 20), + app.Vector(100, 0, 0), + ], + "lane": {"index": 1}, + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "门板布线面"}} + ] + }, + } + original_result = { + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "source_label": "主线槽A"}} + ] + }, + } + + carrier = auto_routing._create_main_path_detour_user_path_from_retry( + doc, + retry_result, + original_result, + project_uuid="project-1", + ) + + self.assertEqual(2, carrier.QetRouteCarrierCapacity) + + def test_route_report_raises_auto_detour_path_capacity_from_final_lane_usage(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + carrier = routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="UserPath", + capacity=1, + ) + carrier.QetRouteBridgeKind = "MainPathDetourPath" + report = { + "routes": [ + { + "wire_uuid": "wire-auto-detour", + "route_status": "Routed", + "lane": {"index": 1}, + "route_track": { + "segments": [ + { + "carrier": { + "name": carrier.Name, + "kind": "UserPath", + "capacity": 1, + } + } + ] + }, + } + ], + "skipped_missing_terminal": 0, + "skipped_missing_route_network": 0, + "skipped_invalid": 0, + "errors": [], + } + + auto_routing._raise_main_path_detour_capacities_from_report(doc, report) + + self.assertEqual(2, carrier.QetRouteCarrierCapacity) + self.assertEqual(2, report["routes"][0]["route_track"]["segments"][0]["carrier"]["capacity"]) + self.assertEqual([], auto_routing._route_capacity_pressure_samples(report, limit=0)) + + def test_collect_obstacles_cache_preserves_endpoint_filters(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + + endpoint_body = doc.addObject("Part::Feature", "EndpointBody") + endpoint_body.Shape = FakeShape(FakeBoundBox(-5, 5, -5, 5, -5, 5)) + endpoint_body.QetInstanceId = terminal.QetInstanceId + + near_body = doc.addObject("Part::Feature", "NearBody") + near_body.Shape = FakeShape(FakeBoundBox(1, 2, -1, 1, -1, 1)) + + far_body = doc.addObject("Part::Feature", "FarBody") + far_body.Shape = FakeShape(FakeBoundBox(80, 90, -1, 1, -1, 1)) + + options = {"terminal_exit_length": 20.0, "obstacle_clearance": 0.0} + uncached = auto_routing.collect_obstacles(doc, exclude=[terminal], options=options) + cache = auto_routing._obstacle_candidate_cache(doc, options=options) + cached = auto_routing.collect_obstacles( + doc, + exclude=[terminal], + options=dict(options, __obstacle_candidate_cache=cache), + ) + + self.assertEqual(["FarBody"], [item["name"] for item in uncached]) + self.assertEqual(["FarBody"], [item["name"] for item in cached]) + + def test_collect_obstacles_skips_parent_of_support_surface_source(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + parent = doc.addObject("App::LinkGroup", "DoorAssembly") + parent.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 20)) + panel = doc.addObject("Part::Feature", "DoorPanel") + panel.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 2)) + panel.QetRoutingObstacleMode = "SupportSurface" + parent.addObject(panel) + obstacle = doc.addObject("Part::Feature", "DeviceObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) + + obstacles = auto_routing.collect_obstacles(doc) + cache = auto_routing._obstacle_candidate_cache(doc) + cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) + + self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) + self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) + + def test_collect_obstacles_skips_descendant_of_pass_through_ancestor(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + assembly = doc.addObject("App::LinkGroup", "DoorAssembly") + assembly.QetRoutingObstacleMode = "PassThrough" + compound = doc.addObject("Part::Compound2", "DoorCompound") + panel = doc.addObject("Part::Feature", "DoorPanel") + panel.Shape = FakeShape(FakeBoundBox(0, 40, 0, 40, 0, 40)) + assembly.addObject(compound) + compound.addObject(panel) + obstacle = doc.addObject("Part::Feature", "DeviceObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) + + obstacles = auto_routing.collect_obstacles(doc) + cache = auto_routing._obstacle_candidate_cache(doc) + cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) + + self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) + self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) + + def test_collect_obstacles_reports_full_parent_chain_for_nested_import_parts(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + assembly = doc.addObject("App::LinkGroup", "DoorAssembly") + assembly.Label = "FRONT DOOR-R ASS'Y" + compound = doc.addObject("Part::Compound2", "DoorCompound") + compound.Label = "NAUO141" + panel = doc.addObject("Part::Feature", "DoorPanel") + panel.Shape = FakeShape(FakeBoundBox(0, 40, 0, 40, 0, 40)) + assembly.addObject(compound) + compound.addObject(panel) + + obstacles = auto_routing.collect_obstacles(doc) + + self.assertEqual(["DoorPanel"], [item["name"] for item in obstacles]) + self.assertEqual(["DoorCompound", "DoorAssembly"], obstacles[0]["parent_refs"]["names"]) + self.assertEqual(["NAUO141", "FRONT DOOR-R ASS'Y"], obstacles[0]["parent_refs"]["labels"]) + + def test_collect_obstacles_skips_auto_detected_support_surface_candidate(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + side_cover = doc.addObject("Part::Feature", "SideCover") + side_cover.Label = "SIDE COVER-1_P00" + side_cover.Shape = FakeShape(FakeBoundBox(0, 600, 0, 2148, 0, 30)) + obstacle = doc.addObject("Part::Feature", "DeviceObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) + + obstacles = auto_routing.collect_obstacles(doc) + cache = auto_routing._obstacle_candidate_cache(doc) + cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) + + self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) + self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) + + def test_collect_obstacles_skips_outlist_ancestor_of_support_surface_source(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + parent = doc.addObject("App::LinkGroup", "DoorAssembly") + parent.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 20)) + compound = doc.addObject("Part::Compound2", "DoorCompound") + compound.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 20)) + panel = doc.addObject("Part::Feature", "DoorPanel") + panel.Shape = FakeShape(FakeBoundBox(0, 100, 0, 100, 0, 2)) + panel.QetRoutingObstacleMode = "SupportSurface" + parent.OutList = [compound] + compound.InList = [parent] + compound.OutList = [panel] + panel.InList = [compound] + obstacle = doc.addObject("Part::Feature", "DeviceObstacle") + obstacle.Shape = FakeShape(FakeBoundBox(20, 40, 20, 40, 0, 20)) + + obstacles = auto_routing.collect_obstacles(doc) + cache = auto_routing._obstacle_candidate_cache(doc) + cached = auto_routing.collect_obstacles(doc, options={"__obstacle_candidate_cache": cache}) + + self.assertEqual(["DeviceObstacle"], [item["name"] for item in obstacles]) + self.assertEqual(["DeviceObstacle"], [item["name"] for item in cached]) + + def test_route_eplan_connections_classifies_disconnected_network_as_missing_route_network(self): + _install_fake_freecad() + terminal_objects, wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(10, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(1000, 0, 20), app.Vector(1010, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "wire_label": "N4111", + "start_terminal_uuid": "terminal-start", + "start_element_uuid": "QF1", + "start_terminal_display": "A1", + "end_terminal_uuid": "terminal-end", + "end_element_uuid": "KM1", + "end_terminal_display": "13", + }, + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"network_entry_max_distance": 30.0}, + ) + + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_route_network"]) + self.assertEqual(1, report["route_status_counts"]["MissingRouteNetwork"]) + self.assertEqual([], report["errors"]) + self.assertEqual("wire-a", report["missing_route_network_samples"][0]["wire_uuid"]) + self.assertEqual("N4111", report["missing_route_network_samples"][0]["wire_object_label"]) + self.assertEqual([], wiring_objects.iter_routed_wire_objects(doc)) + + def test_route_eplan_connections_from_payload_attaches_path_diagnostic_when_network_missing(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-no-network", + "wire_label": "N-NET", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + message = auto_routing.format_eplan_connection_route_report(report) + + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_route_network"]) + self.assertIn("routing_path_network_diagnostic", report) + self.assertFalse(report["routing_path_network_diagnostic"]["ok"]) + self.assertTrue(report["routing_path_network_diagnostic"]["issue_codes"]) + self.assertEqual(0, report["routing_sources"]["candidate_sources"]) + self.assertEqual(0, report["routing_sources"]["route_carriers"]) + self.assertIn("路径网络检查提示", message) + self.assertIn("未识别到线槽、布线面或用户路径源", message) + + def test_route_eplan_connections_from_payload_reports_sources_not_generated(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) + panel = doc.addObject("Part::Feature", "MarkedRoutingSource") + panel.Label = "已标记布线面" + panel.Shape = FakeShape(FakeBoundBox(0, 300, 0, 200, 0, 5)) + panel.QetRoutingSourceKind = "RoutingRange" + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-source-only", + "wire_label": "N-SRC", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + message = auto_routing.format_eplan_connection_route_report(report) + + self.assertEqual(0, report["routed"]) + self.assertEqual(1, report["skipped_missing_route_network"]) + self.assertEqual(1, report["routing_sources"]["candidate_sources"]) + self.assertEqual(0, report["routing_sources"]["route_carriers"]) + self.assertEqual({"RoutingRange": 1}, report["routing_sources"]["marked_source_counts"]) + self.assertIn("已识别到布线源 1 个,但还没有生成可用路径 carrier", message) + + def test_network_entry_uses_terminal_access_max_distance_when_smaller(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(500, 0, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(10, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + + route = auto_routing.build_network_route( + start, + end, + options={"terminal_access_max_distance": 30.0}, + doc=doc, + ) + + self.assertIsNone(route) + + def test_route_eplan_connections_writes_diagnostic_object_for_missing_terminal(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-missing", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + + self.assertEqual(1, report["skipped_missing_terminal"]) + self.assertIsNotNone(diagnostic_group) + self.assertEqual(1, len(diagnostic_group.Group)) + diagnostic = diagnostic_group.Group[0] + self.assertEqual("RoutingConnectionBatch", diagnostic.QetDiagnosticKind) + self.assertEqual("project-1", diagnostic.QetProjectUuid) + self.assertFalse(diagnostic.QetDiagnosticOk) + self.assertIn("missing_terminals", diagnostic.QetDiagnosticIssueCodes) + self.assertIn("端子匹配失败", diagnostic.QetDiagnosticIssueLabels) + self.assertIn("批量生成布线连接完成", diagnostic.QetDiagnosticMessage) + self.assertIn("缺失端子 1 条", diagnostic.QetDiagnosticMessage) + self.assertIn("terminal-missing", diagnostic.QetDiagnosticJson) + + def test_route_eplan_connections_writes_diagnostic_object_when_no_wire_tasks(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + payload = {"project_uuid": "project-1", "wires": []} + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + + self.assertEqual(0, report["total_wires"]) + self.assertIn("no_wire_tasks", report["issue_codes"]) + self.assertIsNotNone(diagnostic_group) + self.assertEqual(1, len(diagnostic_group.Group)) + diagnostic = diagnostic_group.Group[0] + self.assertEqual("RoutingConnectionBatch", diagnostic.QetDiagnosticKind) + self.assertEqual("project-1", diagnostic.QetProjectUuid) + self.assertFalse(diagnostic.QetDiagnosticOk) + self.assertIn("routed=0", diagnostic.QetDiagnosticMessage) + self.assertIn("没有导线任务", diagnostic.QetDiagnosticMessage) + diagnostic_payload = json.loads(diagnostic.QetDiagnosticJson) + self.assertEqual(0, diagnostic_payload["total_wires"]) + self.assertIn("no_wire_tasks", diagnostic_payload["issue_codes"]) + + def test_route_eplan_connections_writes_compact_batch_diagnostic(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 0, 0)) + _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 20, 0)) + _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 20, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 20, 20), app.Vector(100, 20, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "wire_label": "N1", + "start_terminal_uuid": "terminal-start-a", + "end_terminal_uuid": "terminal-end-a", + }, + { + "wire_id": "wire-b", + "wire_label": "N2", + "start_terminal_uuid": "terminal-start-b", + "end_terminal_uuid": "terminal-end-b", + }, + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + diagnostic_payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + + self.assertEqual(auto_routing.AUTO_ROUTING_RUNTIME_VERSION, report["runtime_version"]) + self.assertEqual(auto_routing.AUTO_ROUTING_RUNTIME_VERSION, diagnostic_payload["runtime_version"]) + self.assertEqual(2, len(report["routes"])) + self.assertNotIn("routes", diagnostic_payload) + self.assertEqual(2, diagnostic_payload["route_sample_count"]) + self.assertEqual(2, len(diagnostic_payload["route_samples"])) + self.assertEqual("wire-a", diagnostic_payload["route_samples"][0]["wire_uuid"]) + self.assertEqual("Routed", diagnostic_payload["route_samples"][0]["route_status"]) + + def test_compact_batch_report_prioritizes_problem_route_samples(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "total_wires": 3, + "routed": 3, + "routes": [ + {"wire_uuid": "normal-a", "route_status": "Routed"}, + {"wire_uuid": "normal-b", "route_status": "Routed"}, + { + "wire_uuid": "problem-collision", + "route_status": "CollisionWarning", + "collisions": [ + { + "collision_kind": "HardIntersection", + "collision_relation": "third_party_device_collision", + } + ], + }, + ], + } + + payload = auto_routing._compact_routing_connection_batch_report( + report, + sample_limit=2, + ) + + self.assertEqual(3, payload["route_count"]) + self.assertEqual(2, payload["route_sample_count"]) + self.assertEqual("problem-collision", payload["route_samples"][0]["wire_uuid"]) + self.assertEqual( + ["collision_warnings", "hard_intersections", "third_party_device_collisions"], + payload["route_samples"][0]["issue_codes"], + ) + + def test_compact_route_sample_distinguishes_clearance_and_hard_collision_issues(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + + clearance_sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-clearance", + "route_status": "CollisionWarning", + "collisions": [ + { + "collision_kind": "ClearanceWarning", + "collision_relation": "third_party_device_collision", + } + ], + } + ) + hard_sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-hard", + "route_status": "CollisionWarning", + "collisions": [ + { + "collision_kind": "HardIntersection", + "collision_relation": "third_party_device_collision", + } + ], + } + ) + + self.assertIn("clearance_warnings", clearance_sample["issue_codes"]) + self.assertNotIn("hard_intersections", clearance_sample["issue_codes"]) + self.assertIn("hard_intersections", hard_sample["issue_codes"]) + self.assertNotIn("clearance_warnings", hard_sample["issue_codes"]) + + def test_compact_route_sample_includes_wire_object_label(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-label", + "wire_label": "N4111", + "wire_object_label": "N4111: terminal-start -> terminal-end (Routed)", + } + ) + + self.assertEqual( + "N4111: terminal-start -> terminal-end (Routed)", + sample["wire_object_label"], + ) + + def test_compact_route_sample_prefers_route_track_bridged_segment_count(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-bridge", + "route_track": { + "bridged_segments": 1, + }, + "network": { + "bridged_segments": 3, + }, + } + ) + + self.assertEqual(1, sample["network"]["bridged_segments"]) + + def test_compact_route_sample_includes_terminal_access_consumption(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-terminal-access", + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": False, + "start_terminal_access_carrier": "QETRouteCarrier_start", + "end_terminal_access_carrier": "", + "start_terminal_access_label": "起点接入", + "end_terminal_access_label": "", + "start_terminal_access_target_kind": "UserPath", + "start_terminal_access_target_label": "柜内主路径", + "start_terminal_access_target_distance": 100.0, + "start_terminal_access_target_component_primary_segments": 4, + }, + "route_track": {"segments": []}, + } + ) + + self.assertEqual( + { + "start_consumed": True, + "end_consumed": False, + "start_carrier": "QETRouteCarrier_start", + "end_carrier": "", + "start_label": "起点接入", + "end_label": "", + "start_target_kind": "UserPath", + "start_target_name": "", + "start_target_label": "柜内主路径", + "start_target_distance": 100.0, + "start_target_component_primary_segments": 4, + "end_target_kind": "", + "end_target_name": "", + "end_target_label": "", + "end_target_distance": 0.0, + "end_target_component_primary_segments": 0, + }, + sample["network"]["terminal_access"], + ) + + def test_compact_route_sample_includes_candidate_obstacle_hits(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-obstacle-entry", + "network": { + "entry_candidate_rank": 3, + "exit_candidate_rank": 2, + "entry_candidate_score": 125.0, + "route_candidate_obstacle_hits": 2, + }, + } + ) + + self.assertEqual(3, sample["network"]["entry_candidate_rank"]) + self.assertEqual(2, sample["network"]["exit_candidate_rank"]) + self.assertEqual(125.0, sample["network"]["entry_candidate_score"]) + self.assertEqual(2, sample["network"]["route_candidate_obstacle_hits"]) + + def test_compact_route_sample_includes_candidate_boundary_metadata(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-boundary", + "network": { + "boundary_aware": True, + "route_candidate_boundary_violations": 2, + }, + } + ) + + self.assertTrue(sample["network"]["boundary_aware"]) + self.assertEqual(2, sample["network"]["route_candidate_boundary_violations"]) + + def test_compact_route_sample_includes_single_wire_status_summaries(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-status-summary", + "collisions": [ + {"collision_kind": "HardIntersection"}, + {"collision_kind": "ClearanceWarning"}, + ], + "lane": {"index": 2, "spacing_mm": 10.0, "axis": "y"}, + "network": { + "entry_distance": 125.0, + "exit_distance": 20.0, + "terminal_access_warning_distance": 100.0, + "boundary_aware": True, + "route_candidate_boundary_violations": 1, + }, + "route_track": { + "segments": [ + { + "carrier": { + "kind": "RoutingRange", + "label": "安装板兜底路径", + "capacity": 1, + } + } + ] + }, + } + ) + + self.assertEqual("LongAccessWarning", sample["access"]["access_status"]) + self.assertEqual(["entry"], sample["access"]["warning_sides"]) + self.assertEqual("HardIntersectionWarning", sample["collision_summary"]["collision_status"]) + self.assertEqual(1, sample["collision_summary"]["hard_intersection_count"]) + self.assertEqual(1, sample["collision_summary"]["clearance_warning_count"]) + self.assertEqual("FallbackPathWarning", sample["quality"]["quality_status"]) + self.assertEqual(["RoutingRange"], sample["quality"]["fallback_carrier_kinds"]) + self.assertEqual("CapacityWarning", sample["capacity"]["capacity_status"]) + self.assertEqual(3, sample["capacity"]["parallel_wire_count"]) + self.assertEqual("BoundaryWarning", sample["boundary"]["boundary_status"]) + self.assertEqual( + [ + "long_terminal_access", + "collision_warnings", + "hard_intersections", + "clearance_warnings", + "route_quality_warnings", + "route_capacity_pressure", + "route_candidate_boundary_violations", + ], + sample["issue_codes"], + ) + self.assertIn("端子接入过长", sample["issue_labels"]) + self.assertIn("碰撞告警", sample["issue_labels"]) + self.assertIn("硬穿模", sample["issue_labels"]) + self.assertIn("间隙不足", sample["issue_labels"]) + + def test_compact_route_sample_includes_route_constraints(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-constraints", + "network": { + "route_constraints": { + "required": {"labels": ["必经路径"]}, + "forbidden": {"labels": ["禁止路径"]}, + }, + }, + } + ) + + self.assertEqual( + ["必经路径"], + sample["network"]["route_constraints"]["required"]["labels"], + ) + self.assertEqual( + ["禁止路径"], + sample["network"]["route_constraints"]["forbidden"]["labels"], + ) + + def test_compact_route_sample_formats_user_path_source_index(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-source-index", + "route_track": { + "segments": [ + { + "carrier": { + "kind": "UserPath", + "source_label": "多路径草图", + "source_path_index": "1", + } + }, + { + "carrier": { + "kind": "UserPath", + "source_label": "多路径草图", + "source_path_index": "2", + } + }, + ] + }, + } + ) - def test_route_eplan_connections_from_payload_attaches_path_diagnostic_when_network_missing(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-no-network", - "wire_label": "N-NET", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - } - ], - } + self.assertEqual( + ["多路径草图(路径1)", "多路径草图(路径2)"], + sample["route_source_labels"], + ) - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - message = auto_routing.format_eplan_connection_route_report(report) + def test_compact_route_sample_ignores_bridge_only_carrier_summary(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + sample = auto_routing._compact_route_sample( + { + "wire_uuid": "wire-bridge", + "route_track": { + "carrier_kinds": {"RoutingRange": 1}, + "carrier_names": ["VirtualBridge"], + "segments": [ + { + "is_bridge": True, + "carrier": {"name": "VirtualBridge", "kind": "RoutingRange"}, + }, + { + "carrier": {"name": "WireDuctA", "kind": "WireDuct"}, + }, + ], + }, + } + ) - self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_route_network"]) - self.assertIn("routing_path_network_diagnostic", report) - self.assertFalse(report["routing_path_network_diagnostic"]["ok"]) - self.assertTrue(report["routing_path_network_diagnostic"]["issue_codes"]) - self.assertEqual(0, report["routing_sources"]["candidate_sources"]) - self.assertEqual(0, report["routing_sources"]["route_carriers"]) - self.assertIn("路径网络检查提示", message) - self.assertIn("未识别到线槽、布线面或用户路径源", message) + self.assertEqual({"WireDuct": 1}, sample["carrier_kinds"]) + self.assertEqual(["WireDuctA"], sample["carrier_names"]) - def test_route_eplan_connections_from_payload_reports_sources_not_generated(self): + def test_route_eplan_connections_batch_diagnostic_includes_quality_warnings(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() app = sys.modules["FreeCAD"] doc = FakeDocument() terminal_objects.ensure_root_group(doc, "project-1") _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - panel = doc.addObject("Part::Feature", "MarkedRoutingSource") - panel.Label = "已标记布线面" - panel.Shape = FakeShape(FakeBoundBox(0, 300, 0, 200, 0, 5)) - panel.QetRoutingSourceKind = "RoutingRange" + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="RoutingRange", + ) payload = { "project_uuid": "project-1", "wires": [ { - "wire_id": "wire-source-only", - "wire_label": "N-SRC", + "wire_id": "wire-surface", + "wire_label": "N-SURFACE", "start_terminal_uuid": "terminal-start", "end_terminal_uuid": "terminal-end", } @@ -10323,821 +13231,890 @@ class AutoRoutingTest(unittest.TestCase): } report = auto_routing.route_eplan_connections_from_payload(doc, payload) - message = auto_routing.format_eplan_connection_route_report(report) - - self.assertEqual(0, report["routed"]) - self.assertEqual(1, report["skipped_missing_route_network"]) - self.assertEqual(1, report["routing_sources"]["candidate_sources"]) - self.assertEqual(0, report["routing_sources"]["route_carriers"]) - self.assertEqual({"RoutingRange": 1}, report["routing_sources"]["marked_source_counts"]) - self.assertIn("已识别到布线源 1 个,但还没有生成可用路径 carrier", message) + diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") + diagnostic_payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) - def test_network_entry_uses_terminal_access_max_distance_when_smaller(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(500, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(10, 0, 20)], - project_uuid="project-1", - kind="WireDuct", + self.assertEqual(1, report["routed"]) + self.assertEqual(1, diagnostic_payload["route_quality_warning_count"]) + self.assertEqual( + "wire-surface", + diagnostic_payload["route_quality_warning_samples"][0]["wire_uuid"], ) - - route = auto_routing.build_network_route( - start, - end, - options={"terminal_access_max_distance": 30.0}, - doc=doc, + self.assertEqual( + ["RoutingRange"], + diagnostic_payload["route_quality_warning_samples"][0]["carrier_kinds"], ) - self.assertIsNone(route) - - def test_route_eplan_connections_writes_diagnostic_object_for_missing_terminal(self): + def test_compact_batch_report_includes_entry_distance_warning_samples(self): _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - payload = { - "project_uuid": "project-1", - "wires": [ + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "terminal_access_warning_distance": 100.0, + "routes": [ { - "wire_id": "wire-1", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-missing", + "wire_uuid": "wire-long-entry", + "wire_label": "N-LONG", + "wire_object_label": "N-LONG: T1 -> T2 (Routed)", + "network": { + "entry_distance": 125.0, + "exit_distance": 20.0, + }, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "label": "主线槽A"}}, + ], + }, } ], } - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - - self.assertEqual(1, report["skipped_missing_terminal"]) - self.assertIsNotNone(diagnostic_group) - self.assertEqual(1, len(diagnostic_group.Group)) - diagnostic = diagnostic_group.Group[0] - self.assertEqual("RoutingConnectionBatch", diagnostic.QetDiagnosticKind) - self.assertEqual("project-1", diagnostic.QetProjectUuid) - self.assertFalse(diagnostic.QetDiagnosticOk) - self.assertIn("missing_terminals", diagnostic.QetDiagnosticIssueCodes) - self.assertIn("端子匹配失败", diagnostic.QetDiagnosticIssueLabels) - self.assertIn("批量生成布线连接完成", diagnostic.QetDiagnosticMessage) - self.assertIn("缺失端子 1 条", diagnostic.QetDiagnosticMessage) - self.assertIn("terminal-missing", diagnostic.QetDiagnosticJson) - - def test_route_eplan_connections_writes_diagnostic_object_when_no_wire_tasks(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - payload = {"project_uuid": "project-1", "wires": []} - - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - - self.assertEqual(0, report["total_wires"]) - self.assertIn("no_wire_tasks", report["issue_codes"]) - self.assertIsNotNone(diagnostic_group) - self.assertEqual(1, len(diagnostic_group.Group)) - diagnostic = diagnostic_group.Group[0] - self.assertEqual("RoutingConnectionBatch", diagnostic.QetDiagnosticKind) - self.assertEqual("project-1", diagnostic.QetProjectUuid) - self.assertFalse(diagnostic.QetDiagnosticOk) - self.assertIn("routed=0", diagnostic.QetDiagnosticMessage) - self.assertIn("没有导线任务", diagnostic.QetDiagnosticMessage) - diagnostic_payload = json.loads(diagnostic.QetDiagnosticJson) - self.assertEqual(0, diagnostic_payload["total_wires"]) - self.assertIn("no_wire_tasks", diagnostic_payload["issue_codes"]) + payload = auto_routing._compact_routing_connection_batch_report(report) - def test_route_eplan_connections_writes_compact_batch_diagnostic(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 0, 0)) - _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 20, 0)) - _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 20, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - project_uuid="project-1", - kind="WireDuct", + self.assertEqual(1, payload["route_entry_distance_warning_count"]) + self.assertEqual( + "wire-long-entry", + payload["route_entry_distance_warning_samples"][0]["wire_uuid"], ) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 20, 20), app.Vector(100, 20, 20)], - project_uuid="project-1", - kind="WireDuct", + self.assertEqual( + "N-LONG: T1 -> T2 (Routed)", + payload["route_entry_distance_warning_samples"][0]["wire_object_label"], ) - payload = { - "project_uuid": "project-1", - "wires": [ - { - "wire_id": "wire-a", - "wire_label": "N1", - "start_terminal_uuid": "terminal-start-a", - "end_terminal_uuid": "terminal-end-a", - }, + self.assertEqual( + ["entry"], + payload["route_entry_distance_warning_samples"][0]["warning_sides"], + ) + self.assertEqual( + ["主线槽A"], + payload["route_entry_distance_warning_samples"][0]["route_source_labels"], + ) + + def test_compact_batch_report_quality_warning_includes_specific_carrier_labels(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ { - "wire_id": "wire-b", - "wire_label": "N2", - "start_terminal_uuid": "terminal-start-b", - "end_terminal_uuid": "terminal-end-b", - }, + "wire_uuid": "wire-surface", + "wire_label": "N-SURFACE", + "route_track": { + "segments": [ + { + "carrier": { + "kind": "RoutingRange", + "label": "安装板辅助路径", + } + } + ], + }, + } ], } - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - diagnostic_payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual(auto_routing.AUTO_ROUTING_RUNTIME_VERSION, report["runtime_version"]) - self.assertEqual(auto_routing.AUTO_ROUTING_RUNTIME_VERSION, diagnostic_payload["runtime_version"]) - self.assertEqual(2, len(report["routes"])) - self.assertNotIn("routes", diagnostic_payload) - self.assertEqual(2, diagnostic_payload["route_sample_count"]) - self.assertEqual(2, len(diagnostic_payload["route_samples"])) - self.assertEqual("wire-a", diagnostic_payload["route_samples"][0]["wire_uuid"]) - self.assertEqual("Routed", diagnostic_payload["route_samples"][0]["route_status"]) + self.assertEqual( + ["安装板辅助路径"], + payload["route_quality_warning_samples"][0]["route_carrier_labels"], + ) - def test_compact_batch_report_prioritizes_problem_route_samples(self): + def test_compact_batch_report_includes_candidate_obstacle_warning_samples(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "total_wires": 3, - "routed": 3, + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, "routes": [ - {"wire_uuid": "normal-a", "route_status": "Routed"}, - {"wire_uuid": "normal-b", "route_status": "Routed"}, { - "wire_uuid": "problem-collision", - "route_status": "CollisionWarning", - "collisions": [ - { - "collision_kind": "HardIntersection", - "collision_relation": "third_party_device_collision", - } - ], - }, + "wire_uuid": "wire-obstacle-entry", + "wire_label": "N-OBSTACLE", + "network": { + "route_candidate_obstacle_hits": 2, + }, + "route_track": { + "segments": [ + {"carrier": {"kind": "UserPath", "label": "绕行路径A"}}, + ], + }, + } ], } - payload = auto_routing._compact_routing_connection_batch_report( - report, - sample_limit=2, - ) + payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual(3, payload["route_count"]) - self.assertEqual(2, payload["route_sample_count"]) - self.assertEqual("problem-collision", payload["route_samples"][0]["wire_uuid"]) + self.assertEqual(1, payload["route_candidate_obstacle_warning_count"]) self.assertEqual( - ["collision_warnings", "third_party_device_collisions"], - payload["route_samples"][0]["issue_codes"], + "wire-obstacle-entry", + payload["route_candidate_obstacle_warning_samples"][0]["wire_uuid"], + ) + self.assertEqual(2, payload["route_candidate_obstacle_warning_samples"][0]["hits"]) + self.assertEqual( + ["绕行路径A"], + payload["route_candidate_obstacle_warning_samples"][0]["route_source_labels"], ) - def test_compact_route_sample_includes_wire_object_label(self): + def test_compact_batch_report_includes_candidate_boundary_warning_samples(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-label", - "wire_label": "N4111", - "wire_object_label": "N4111: terminal-start -> terminal-end (Routed)", - } - ) + report = { + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ + { + "wire_uuid": "wire-outside-cabinet", + "wire_label": "N-OUT", + "network": { + "boundary_aware": True, + "route_candidate_boundary_violations": 3, + }, + "route_track": { + "segments": [ + {"carrier": {"kind": "UserPath", "label": "柜内主路径A"}}, + ], + }, + } + ], + } + payload = auto_routing._compact_routing_connection_batch_report(report) + + self.assertEqual(1, payload["route_candidate_boundary_warning_count"]) self.assertEqual( - "N4111: terminal-start -> terminal-end (Routed)", - sample["wire_object_label"], + "wire-outside-cabinet", + payload["route_candidate_boundary_warning_samples"][0]["wire_uuid"], + ) + self.assertEqual( + 3, + payload["route_candidate_boundary_warning_samples"][0]["violations"], + ) + self.assertEqual( + ["柜内主路径A"], + payload["route_candidate_boundary_warning_samples"][0]["route_source_labels"], ) - def test_compact_route_sample_prefers_route_track_bridged_segment_count(self): + def test_compact_batch_report_includes_route_constraint_samples(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-bridge", - "route_track": { - "bridged_segments": 1, - }, - "network": { - "bridged_segments": 3, - }, - } - ) + report = { + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ + { + "wire_uuid": "wire-constrained", + "wire_label": "N-CONSTRAINT", + "network": { + "route_constraints": { + "required": {"labels": ["必经路径"]}, + "forbidden": {"labels": ["禁止路径"]}, + }, + }, + } + ], + } - self.assertEqual(1, sample["network"]["bridged_segments"]) + payload = auto_routing._compact_routing_connection_batch_report(report) - def test_compact_route_sample_includes_candidate_obstacle_hits(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-obstacle-entry", - "network": { - "entry_candidate_rank": 3, - "exit_candidate_rank": 2, - "entry_candidate_score": 125.0, - "route_candidate_obstacle_hits": 2, - }, - } + self.assertEqual(1, payload["route_constraint_warning_count"]) + self.assertEqual( + "wire-constrained", + payload["route_constraint_warning_samples"][0]["wire_uuid"], + ) + self.assertEqual( + ["必经路径"], + payload["route_constraint_warning_samples"][0]["required"]["labels"], + ) + self.assertEqual( + ["禁止路径"], + payload["route_constraint_warning_samples"][0]["forbidden"]["labels"], ) - self.assertEqual(3, sample["network"]["entry_candidate_rank"]) - self.assertEqual(2, sample["network"]["exit_candidate_rank"]) - self.assertEqual(125.0, sample["network"]["entry_candidate_score"]) - self.assertEqual(2, sample["network"]["route_candidate_obstacle_hits"]) - - def test_compact_route_sample_includes_candidate_boundary_metadata(self): + def test_compact_batch_report_includes_capacity_pressure_samples(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-boundary", - "network": { - "boundary_aware": True, - "route_candidate_boundary_violations": 2, - }, - } - ) + report = { + "routed": 3, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ + { + "wire_uuid": "wire-crowded", + "wire_label": "N-CROWDED", + "lane": {"index": 2, "spacing_mm": 10.0}, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "name": "DuctA", "capacity": 2}}, + {"carrier": {"kind": "WireDuct", "name": "DuctB", "capacity": 4}}, + ] + }, + } + ], + } - self.assertTrue(sample["network"]["boundary_aware"]) - self.assertEqual(2, sample["network"]["route_candidate_boundary_violations"]) + payload = auto_routing._compact_routing_connection_batch_report(report) - def test_compact_route_sample_includes_single_wire_status_summaries(self): - _install_fake_freecad() - _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-status-summary", - "collisions": [ - {"collision_kind": "HardIntersection"}, - {"collision_kind": "ClearanceWarning"}, - ], - "lane": {"index": 2, "spacing_mm": 10.0, "axis": "y"}, - "network": { - "entry_distance": 125.0, - "exit_distance": 20.0, - "terminal_access_warning_distance": 100.0, - "boundary_aware": True, - "route_candidate_boundary_violations": 1, - }, - "route_track": { - "segments": [ - { - "carrier": { - "kind": "RoutingRange", - "label": "安装板兜底路径", - "capacity": 1, - } - } - ] - }, - } + self.assertEqual(1, payload["route_capacity_pressure_warning_count"]) + self.assertEqual( + "wire-crowded", + payload["route_capacity_pressure_warning_samples"][0]["wire_uuid"], + ) + self.assertEqual( + 3, + payload["route_capacity_pressure_warning_samples"][0]["max_parallel_wires"], + ) + self.assertEqual( + 2, + payload["route_capacity_pressure_warning_samples"][0]["min_capacity"], + ) + self.assertEqual( + ["DuctA", "DuctB"], + payload["route_capacity_pressure_warning_samples"][0]["carrier_names"], ) - - self.assertEqual("LongAccessWarning", sample["access"]["access_status"]) - self.assertEqual(["entry"], sample["access"]["warning_sides"]) - self.assertEqual("HardIntersectionWarning", sample["collision_summary"]["collision_status"]) - self.assertEqual(1, sample["collision_summary"]["hard_intersection_count"]) - self.assertEqual(1, sample["collision_summary"]["clearance_warning_count"]) - self.assertEqual("FallbackPathWarning", sample["quality"]["quality_status"]) - self.assertEqual(["RoutingRange"], sample["quality"]["fallback_carrier_kinds"]) - self.assertEqual("CapacityWarning", sample["capacity"]["capacity_status"]) - self.assertEqual(3, sample["capacity"]["parallel_wire_count"]) - self.assertEqual("BoundaryWarning", sample["boundary"]["boundary_status"]) self.assertEqual( - [ - "long_terminal_access", - "collision_warnings", - "route_quality_warnings", - "route_capacity_pressure", - "route_candidate_boundary_violations", - ], - sample["issue_codes"], + ["DuctA"], + payload["route_capacity_pressure_warning_samples"][0]["bottleneck_carrier_names"], + ) + self.assertEqual( + ["WireDuct"], + payload["route_capacity_pressure_warning_samples"][0]["bottleneck_carrier_kinds"], ) - self.assertIn("端子接入过长", sample["issue_labels"]) - self.assertIn("碰撞告警", sample["issue_labels"]) - def test_compact_route_sample_includes_route_constraints(self): + def test_compact_batch_report_capacity_pressure_includes_user_path_source_labels(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-constraints", - "network": { - "route_constraints": { - "required": {"labels": ["必经路径"]}, - "forbidden": {"labels": ["禁止路径"]}, + report = { + "routed": 3, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ + { + "wire_uuid": "wire-crowded", + "wire_label": "N-CROWDED", + "lane": {"index": 2, "spacing_mm": 10.0}, + "route_track": { + "segments": [ + { + "carrier": { + "kind": "UserPath", + "name": "QETRoutePath_001", + "capacity": 1, + "source_label": "黄色主路径", + "source_path_index": "1", + } + } + ] }, - }, - } - ) + } + ], + } + + payload = auto_routing._compact_routing_connection_batch_report(report) self.assertEqual( - ["必经路径"], - sample["network"]["route_constraints"]["required"]["labels"], - ) - self.assertEqual( - ["禁止路径"], - sample["network"]["route_constraints"]["forbidden"]["labels"], + ["黄色主路径(路径1)"], + payload["route_capacity_pressure_warning_samples"][0]["route_source_labels"], ) - def test_compact_route_sample_formats_user_path_source_index(self): + def test_compact_batch_report_includes_collision_kind_counts(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-source-index", - "route_track": { - "segments": [ + report = { + "total_wires": 2, + "routed": 2, + "collision_warnings": 2, + "skipped_missing_terminal": 0, + "routes": [ + { + "wire_uuid": "wire-hard", + "collision_samples": [ + {"collision_kind": "HardIntersection", "obstacle_label": "设备A"}, + ], + }, + { + "wire_uuid": "wire-clearance", + "collision_samples": [ + {"collision_kind": "ClearanceWarning", "obstacle_label": "设备B"}, + ], + }, + ], + } + + payload = auto_routing._compact_routing_connection_batch_report(report) + + self.assertEqual(1, payload["collision_kind_counts"]["HardIntersection"]) + self.assertEqual(1, payload["collision_kind_counts"]["ClearanceWarning"]) + + def test_compact_batch_report_includes_collision_relation_counts(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "total_wires": 2, + "routed": 2, + "collision_warnings": 2, + "skipped_missing_terminal": 0, + "selective_collision_reroute": True, + "selective_collision_reroute_limit": 5, + "selective_collision_reroute_attempts": 2, + "selective_collision_reroutes": 1, + "selective_collision_reroute_no_improvement": 1, + "selective_collision_reroute_rejected_fallback": 1, + "selective_collision_reroute_errors": 0, + "routes": [ + { + "collision_samples": [ { - "carrier": { - "kind": "UserPath", - "source_label": "多路径草图", - "source_path_index": "1", - } + "collision_kind": "HardIntersection", + "collision_relation": "third_party_device_collision", + "obstacle_label": "设备A", }, + ], + }, + { + "collision_samples": [ { - "carrier": { - "kind": "UserPath", - "source_label": "多路径草图", - "source_path_index": "2", - } + "collision_kind": "ClearanceWarning", + "collision_relation": "endpoint_device_collision", + "obstacle_label": "设备B", }, - ] + ], }, - } - ) + ], + } + + payload = auto_routing._compact_routing_connection_batch_report(report) + self.assertEqual(1, payload["collision_relation_counts"]["third_party_device_collision"]) + self.assertEqual(1, payload["collision_relation_counts"]["endpoint_device_collision"]) + self.assertEqual(2, payload["selective_collision_reroute_attempts"]) + self.assertEqual(1, payload["selective_collision_reroutes"]) + self.assertEqual(1, payload["selective_collision_reroute_no_improvement"]) + self.assertEqual(1, payload["selective_collision_reroute_rejected_fallback"]) + self.assertIn("third_party_device_collisions", payload["issue_codes"]) + self.assertIn("endpoint_device_collisions", payload["issue_codes"]) + self.assertIn("main_path_detour_missing", payload["issue_codes"]) self.assertEqual( - ["多路径草图(路径1)", "多路径草图(路径2)"], - sample["route_source_labels"], + "selective_local_reroute_or_user_path", + payload["collision_reroute_recommendation"]["strategy"], ) + self.assertFalse(payload["collision_reroute_recommendation"]["global_avoid_obstacles_recommended"]) + self.assertIn("局部", payload["collision_reroute_recommendation"]["reason"]) - def test_compact_route_sample_ignores_bridge_only_carrier_summary(self): + def test_compact_batch_report_includes_top_collision_obstacles(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - sample = auto_routing._compact_route_sample( - { - "wire_uuid": "wire-bridge", - "route_track": { - "carrier_kinds": {"RoutingRange": 1}, - "carrier_names": ["VirtualBridge"], - "segments": [ + report = { + "total_wires": 3, + "routed": 3, + "collision_warnings": 3, + "skipped_missing_terminal": 0, + "routes": [ + { + "collision_samples": [ { - "is_bridge": True, - "carrier": {"name": "VirtualBridge", "kind": "RoutingRange"}, + "collision_kind": "HardIntersection", + "obstacle_name": "DeviceAObject", + "obstacle_label": "设备A", + "obstacle_parent_labels": ["安装板A"], + "obstacle_parent_names": ["MountPanelA"], }, { - "carrier": {"name": "WireDuctA", "kind": "WireDuct"}, + "collision_kind": "ClearanceWarning", + "obstacle_name": "DeviceAObject", + "obstacle_label": "设备A", + "obstacle_parent_labels": ["安装板A"], + "obstacle_parent_names": ["MountPanelA"], }, ], }, - } - ) - - self.assertEqual({"WireDuct": 1}, sample["carrier_kinds"]) - self.assertEqual(["WireDuctA"], sample["carrier_names"]) - - def test_route_eplan_connections_batch_diagnostic_includes_quality_warnings(self): - _install_fake_freecad() - terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() - app = sys.modules["FreeCAD"] - doc = FakeDocument() - terminal_objects.ensure_root_group(doc, "project-1") - _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0)) - _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0)) - routing_network.create_route_carrier( - doc, - [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], - project_uuid="project-1", - kind="RoutingRange", - ) - payload = { - "project_uuid": "project-1", - "wires": [ { - "wire_id": "wire-surface", - "wire_label": "N-SURFACE", - "start_terminal_uuid": "terminal-start", - "end_terminal_uuid": "terminal-end", - } + "collision_samples": [ + { + "collision_kind": "HardIntersection", + "obstacle_name": "BracketBObject", + "obstacle_label": "支架B", + "obstacle_parent_labels": ["柜体总成"], + "obstacle_parent_names": ["CabinetAssembly"], + }, + ], + }, ], } - report = auto_routing.route_eplan_connections_from_payload(doc, payload) - diagnostic_group = doc.getObject("QETWiring_05_Diagnostics") - diagnostic_payload = json.loads(diagnostic_group.Group[0].QetDiagnosticJson) + payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual(1, report["routed"]) - self.assertEqual(1, diagnostic_payload["route_quality_warning_count"]) - self.assertEqual( - "wire-surface", - diagnostic_payload["route_quality_warning_samples"][0]["wire_uuid"], - ) self.assertEqual( - ["RoutingRange"], - diagnostic_payload["route_quality_warning_samples"][0]["carrier_kinds"], + [ + { + "label": "设备A", + "name": "DeviceAObject", + "count": 2, + "collision_kind_counts": { + "HardIntersection": 1, + "ClearanceWarning": 1, + }, + "parent_labels": ["安装板A"], + "parent_names": ["MountPanelA"], + "resolution_hint_code": "review_device_or_layout_collision", + "resolution_hint_label": "疑似设备/安装区域碰撞,优先补柜内路径或调整装配", + }, + { + "label": "支架B", + "name": "BracketBObject", + "count": 1, + "collision_kind_counts": {"HardIntersection": 1}, + "parent_labels": ["柜体总成"], + "parent_names": ["CabinetAssembly"], + "resolution_hint_code": "review_pass_through_structural_obstacle", + "resolution_hint_label": "疑似柜体/门板/支架结构,确认可穿越后标记忽略碰撞", + }, + ], + payload["top_collision_obstacles"], ) - def test_compact_batch_report_includes_entry_distance_warning_samples(self): + def test_compact_batch_report_summarizes_collision_resolution_categories(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "routed": 1, - "collision_warnings": 0, + "routed": 2, + "collision_warnings": 2, "skipped_missing_terminal": 0, - "terminal_access_warning_distance": 100.0, "routes": [ { - "wire_uuid": "wire-long-entry", - "wire_label": "N-LONG", - "wire_object_label": "N-LONG: T1 -> T2 (Routed)", - "network": { - "entry_distance": 125.0, - "exit_distance": 20.0, - }, - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "label": "主线槽A"}}, - ], - }, - } + "wire_uuid": "wire-device", + "collision_samples": [ + { + "obstacle_label": "ID:12", + "obstacle_name": "QETDevice_A", + "collision_kind": "HardIntersection", + "obstacle_parent_labels": ["QET Exchange Devices"], + } + ], + }, + { + "wire_uuid": "wire-structure", + "collision_samples": [ + { + "obstacle_label": "NAUO141", + "obstacle_name": "Compound039", + "collision_kind": "HardIntersection", + "obstacle_parent_labels": ["FRONT DOOR-R ASS'Y"], + "obstacle_parent_names": ["DoorAssembly"], + }, + { + "obstacle_label": "支架B", + "obstacle_name": "BracketB", + "collision_kind": "ClearanceWarning", + }, + ], + }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual(1, payload["route_entry_distance_warning_count"]) - self.assertEqual( - "wire-long-entry", - payload["route_entry_distance_warning_samples"][0]["wire_uuid"], - ) self.assertEqual( - "N-LONG: T1 -> T2 (Routed)", - payload["route_entry_distance_warning_samples"][0]["wire_object_label"], - ) - self.assertEqual( - ["entry"], - payload["route_entry_distance_warning_samples"][0]["warning_sides"], + { + "review_device_or_layout_collision": 1, + "review_pass_through_structural_obstacle": 2, + }, + payload["collision_resolution_summary"]["counts"], ) self.assertEqual( - ["主线槽A"], - payload["route_entry_distance_warning_samples"][0]["route_source_labels"], + "先处理 2 个疑似结构件碰撞候选:确认后可标记 PassThrough;另有 1 个疑似设备/装配碰撞需要补路径或调整装配。", + payload["collision_resolution_summary"]["recommended_action"], ) - def test_compact_batch_report_quality_warning_includes_specific_carrier_labels(self): + def test_compact_batch_report_issue_codes_include_collision_resolution_categories(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "routed": 1, - "collision_warnings": 0, + "routed": 2, + "collision_warnings": 2, "skipped_missing_terminal": 0, "routes": [ { - "wire_uuid": "wire-surface", - "wire_label": "N-SURFACE", - "route_track": { - "segments": [ - { - "carrier": { - "kind": "RoutingRange", - "label": "安装板辅助路径", - } - } - ], - }, - } + "collision_samples": [ + { + "obstacle_label": "ID:12", + "obstacle_name": "QETDevice_A", + "collision_kind": "HardIntersection", + } + ], + }, + { + "collision_samples": [ + { + "obstacle_label": "NAUO141", + "obstacle_name": "Compound039", + "collision_kind": "HardIntersection", + "obstacle_parent_labels": ["FRONT DOOR-R ASS'Y"], + } + ], + }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual( - ["安装板辅助路径"], - payload["route_quality_warning_samples"][0]["route_carrier_labels"], - ) + self.assertIn("collision_warnings", payload["issue_codes"]) + self.assertIn("device_or_layout_collisions", payload["issue_codes"]) + self.assertIn("structural_collision_candidates", payload["issue_codes"]) + self.assertIn("设备/布局碰撞", payload["issue_labels"]) + self.assertIn("结构件碰撞候选", payload["issue_labels"]) - def test_compact_batch_report_includes_candidate_obstacle_warning_samples(self): + def test_compact_batch_report_issue_codes_include_missing_endpoint_reasons(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { + "total_wires": 3, "routed": 1, "collision_warnings": 0, - "skipped_missing_terminal": 0, - "routes": [ + "skipped_missing_terminal": 2, + "missing_endpoint_uuids": ["terminal-missing-a", "terminal-missing-b"], + "missing_endpoint_samples": [ { - "wire_uuid": "wire-obstacle-entry", - "wire_label": "N-OBSTACLE", - "network": { - "route_candidate_obstacle_hits": 2, - }, - "route_track": { - "segments": [ - {"carrier": {"kind": "UserPath", "label": "绕行路径A"}}, - ], - }, - } + "wire_uuid": "wire-missing-device", + "wire_label": "N-MISSING", + "start_found": False, + "start_terminal_uuid": "terminal-missing-a", + "start_element_uuid": "device-a", + "start_terminal_display": "A1", + "start_missing_endpoint_reason_code": "device_not_in_3d_scene", + "start_missing_endpoint_reason_label": "该 2D 设备未在 FreeCAD 场景中找到", + }, + { + "wire_uuid": "wire-mismatch", + "wire_label": "N-MISMATCH", + "end_found": False, + "end_terminal_uuid": "terminal-missing-b", + "end_element_uuid": "device-b", + "end_device_label": "设备B", + "end_terminal_display": "B1", + "end_missing_endpoint_reason_code": "terminal_uuid_not_in_element", + "end_missing_endpoint_reason_label": "同设备存在端子,但没有匹配该 terminal_uuid", + }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual(1, payload["route_candidate_obstacle_warning_count"]) - self.assertEqual( - "wire-obstacle-entry", - payload["route_candidate_obstacle_warning_samples"][0]["wire_uuid"], - ) - self.assertEqual(2, payload["route_candidate_obstacle_warning_samples"][0]["hits"]) + self.assertIn("missing_terminals", payload["issue_codes"]) + self.assertIn("device_not_in_3d_scene", payload["issue_codes"]) + self.assertIn("terminal_uuid_not_in_element", payload["issue_codes"]) + self.assertIn("3D场景缺少设备", payload["issue_labels"]) + self.assertIn("端子UUID不匹配", payload["issue_labels"]) self.assertEqual( - ["绕行路径A"], - payload["route_candidate_obstacle_warning_samples"][0]["route_source_labels"], + { + "device_not_in_3d_scene": 1, + "terminal_uuid_not_in_element": 1, + }, + payload["missing_terminal_summary"]["reason_code_counts"], ) + self.assertEqual(2, len(payload["missing_terminal_summary"]["device_groups"])) + self.assertEqual("device-a", payload["missing_terminal_summary"]["device_groups"][0]["element_uuid"]) + self.assertEqual("设备B", payload["missing_terminal_summary"]["device_groups"][1]["device_label"]) - def test_compact_batch_report_includes_candidate_boundary_warning_samples(self): + def test_routing_diagnostic_recommended_actions_use_collision_resolution_summary(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - report = { - "routed": 1, - "collision_warnings": 0, - "skipped_missing_terminal": 0, - "routes": [ + summary = { + "issue_codes": ["collision_warnings"], + "batch_collision_resolution_summary": { + "counts": { + "review_pass_through_structural_obstacle": 2, + "review_device_or_layout_collision": 1, + }, + "recommended_action": ( + "先处理 2 个疑似结构件碰撞候选:确认后可标记 PassThrough;" + "另有 1 个疑似设备/装配碰撞需要补路径或调整装配。" + ), + }, + "diagnostics": { + "RoutingConnectionBatch": { + "payload": {"collision_warnings": 3}, + } + }, + "routed_wire_issue_summary": {"issue_code_counts": {}}, + } + + actions = auto_routing._routing_diagnostic_recommended_actions(summary) + + self.assertIn("先处理 2 个疑似结构件碰撞候选:确认后可标记 PassThrough", actions) + self.assertIn("另有 1 个疑似设备/装配碰撞需要补路径或调整装配", actions) + + def test_routing_diagnostic_recommended_actions_include_collision_object_and_wire_selection_with_parent_refs(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + summary = { + "issue_codes": ["collision_warnings"], + "batch_top_collision_obstacles": [ { - "wire_uuid": "wire-outside-cabinet", - "wire_label": "N-OUT", - "network": { - "boundary_aware": True, - "route_candidate_boundary_violations": 3, - }, - "route_track": { - "segments": [ - {"carrier": {"kind": "UserPath", "label": "柜内主路径A"}}, - ], - }, + "label": "N600", + "count": 3, + "parent_names": ["QETExchangeDevices"], + "parent_labels": ["QET Exchange Devices"], } ], + "diagnostics": { + "RoutingConnectionBatch": { + "payload": {"collision_warnings": 3}, + } + }, + "routed_wire_issue_summary": {"issue_code_counts": {}}, + } + + actions = auto_routing._routing_diagnostic_recommended_actions(summary) + + self.assertIn("点击“选择高发碰撞对象”和“选择碰撞导线”核对穿模位置", actions) + self.assertIn("点击“选择碰撞父装配”确认结构件后再标记忽略碰撞", actions) + + def test_routing_diagnostic_recommended_actions_distinguish_clearance_warnings(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + summary = { + "issue_codes": ["collision_warnings", "clearance_warnings"], + "diagnostics": { + "RoutingConnectionBatch": { + "payload": {"collision_warnings": 3}, + } + }, + "routed_wire_issue_summary": { + "issue_wire_count": 3, + "issue_code_counts": { + "collision_warnings": 3, + "clearance_warnings": 3, + }, + }, + } + + actions = auto_routing._routing_diagnostic_recommended_actions(summary) + + self.assertIn("间隙不足:核对设备安全间隙、线槽/UserPath位置,必要时补路径或调整装配", actions) + + def test_routing_diagnostic_recommended_actions_distinguish_hard_intersections(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + summary = { + "issue_codes": ["collision_warnings", "hard_intersections"], + "diagnostics": { + "RoutingConnectionBatch": { + "payload": {"collision_warnings": 1}, + } + }, + "routed_wire_issue_summary": { + "issue_wire_count": 1, + "issue_code_counts": { + "collision_warnings": 1, + "hard_intersections": 1, + }, + }, } - payload = auto_routing._compact_routing_connection_batch_report(report) + actions = auto_routing._routing_diagnostic_recommended_actions(summary) - self.assertEqual(1, payload["route_candidate_boundary_warning_count"]) - self.assertEqual( - "wire-outside-cabinet", - payload["route_candidate_boundary_warning_samples"][0]["wire_uuid"], - ) - self.assertEqual( - 3, - payload["route_candidate_boundary_warning_samples"][0]["violations"], - ) - self.assertEqual( - ["柜内主路径A"], - payload["route_candidate_boundary_warning_samples"][0]["route_source_labels"], - ) + self.assertIn("硬穿模:优先补 UserPath/线槽主路径或调整装配,不能直接忽略", actions) - def test_compact_batch_report_includes_route_constraint_samples(self): + def test_routing_diagnostic_recommended_actions_include_terminal_access_fallback_targets(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - report = { - "routed": 1, - "collision_warnings": 0, - "skipped_missing_terminal": 0, - "routes": [ - { - "wire_uuid": "wire-constrained", - "wire_label": "N-CONSTRAINT", - "network": { - "route_constraints": { - "required": {"labels": ["必经路径"]}, - "forbidden": {"labels": ["禁止路径"]}, - }, + summary = { + "issue_codes": ["terminal_access_fallback_targets"], + "diagnostics": { + "RoutingConnectionBatch": { + "payload": { + "terminal_access_fallback_target_samples": [ + { + "wire_label": "W1", + "endpoint": "start", + "target_label": "安装板布线面", + "target_distance": 35.0, + } + ] }, - } - ], + }, + }, + "routed_wire_issue_summary": {"issue_code_counts": {}}, } - payload = auto_routing._compact_routing_connection_batch_report(report) + actions = auto_routing._routing_diagnostic_recommended_actions(summary) - self.assertEqual(1, payload["route_constraint_warning_count"]) - self.assertEqual( - "wire-constrained", - payload["route_constraint_warning_samples"][0]["wire_uuid"], - ) - self.assertEqual( - ["必经路径"], - payload["route_constraint_warning_samples"][0]["required"]["labels"], - ) - self.assertEqual( - ["禁止路径"], - payload["route_constraint_warning_samples"][0]["forbidden"]["labels"], - ) + self.assertIn("优先补端子附近到线槽/UserPath 的接入桥,避免端子接入退回布线面", actions) + self.assertIn("点击“按诊断建议生成桥接”尝试自动补端子退回目标到最近主路径的 UserPath 桥", actions) + self.assertIn("按端子接入退回布线面示例定位设备侧缺口,再重新生成布线路径网络", actions) - def test_compact_batch_report_includes_capacity_pressure_samples(self): + def test_routing_diagnostic_recommended_actions_use_path_network_terminal_access_fallback_samples(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - report = { - "routed": 3, - "collision_warnings": 0, - "skipped_missing_terminal": 0, - "routes": [ - { - "wire_uuid": "wire-crowded", - "wire_label": "N-CROWDED", - "lane": {"index": 2, "spacing_mm": 10.0}, - "route_track": { - "segments": [ - {"carrier": {"kind": "WireDuct", "name": "DuctA", "capacity": 2}}, - {"carrier": {"kind": "WireDuct", "name": "DuctB", "capacity": 4}}, + summary = { + "issue_codes": ["terminal_access_fallback_targets"], + "diagnostics": { + "RoutingPathNetwork": { + "payload": { + "terminal_access_fallback_targets": [ + { + "target_label": "安装板布线面", + "terminal_label": "as", + "parent_device_label": "UD:8", + } ] }, - } + }, + }, + "routed_wire_issue_summary": {"issue_code_counts": {}}, + } + + actions = auto_routing._routing_diagnostic_recommended_actions(summary) + + self.assertIn("点击“按诊断建议生成桥接”尝试自动补端子退回目标到最近主路径的 UserPath 桥", actions) + self.assertIn("按端子接入退回布线面示例定位设备侧缺口,再重新生成布线路径网络", actions) + + def test_routing_diagnostic_recommended_actions_include_terminal_exit_issue_selection(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + summary = { + "issue_codes": [ + "terminal_exit_direction_corrected", + "terminal_exit_length_capped", + "invalid_terminal_exit_directions", + "invalid_terminal_local_routes", ], + "routed_wire_issue_summary": {"issue_code_counts": {}}, + "diagnostics": { + "RoutingPathNetwork": { + "payload": { + "corrected_terminal_exits": [{"name": "TerminalCorrectedExit"}], + "capped_terminal_exits": [{"name": "TerminalCappedExit"}], + "invalid_terminal_exit_directions": [{"name": "TerminalInvalidDirection"}], + "invalid_terminal_local_routes": [{"name": "TerminalInvalidLocalRoute"}], + }, + }, + }, } - payload = auto_routing._compact_routing_connection_batch_report(report) + actions = auto_routing._routing_diagnostic_recommended_actions(summary) - self.assertEqual(1, payload["route_capacity_pressure_warning_count"]) - self.assertEqual( - "wire-crowded", - payload["route_capacity_pressure_warning_samples"][0]["wire_uuid"], - ) - self.assertEqual( - 3, - payload["route_capacity_pressure_warning_samples"][0]["max_parallel_wires"], - ) - self.assertEqual( - 2, - payload["route_capacity_pressure_warning_samples"][0]["min_capacity"], - ) - self.assertEqual( - ["DuctA", "DuctB"], - payload["route_capacity_pressure_warning_samples"][0]["carrier_names"], - ) + self.assertIn("点击“选择出线问题端子”定位方向校正、长度截断、显式方向无效或局部路径无效的端子", actions) + self.assertIn("复查设备模板 CPoint/LCS 出线方向,必要时设置端子局部出线路径", actions) + self.assertIn("检查 QetTerminalExitDirectionJson,必要时用“选中端子设置出线方向”重写显式方向", actions) + self.assertIn("检查 QetTerminalLocalRoutePointsJson,必要时用“选中端子设置局部出线”重写局部路径", actions) - def test_compact_batch_report_capacity_pressure_includes_user_path_source_labels(self): + def test_routing_diagnostic_recommended_actions_include_unconnected_terminal_selection(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - report = { - "routed": 3, - "collision_warnings": 0, - "skipped_missing_terminal": 0, - "routes": [ - { - "wire_uuid": "wire-crowded", - "wire_label": "N-CROWDED", - "lane": {"index": 2, "spacing_mm": 10.0}, - "route_track": { - "segments": [ + summary = { + "issue_codes": ["unconnected_terminals"], + "routed_wire_issue_summary": {"issue_code_counts": {}}, + "diagnostics": { + "RoutingPathNetwork": { + "payload": { + "unconnected_terminals": [ { - "carrier": { - "kind": "UserPath", - "name": "QETRoutePath_001", - "capacity": 1, - "source_label": "黄色主路径", - "source_path_index": "1", - } + "name": "TerminalUnconnected", + "terminal_uuid": "terminal-unconnected", + "nearest_network_distance_mm": 125.0, } - ] + ], }, - } - ], + }, + }, } - payload = auto_routing._compact_routing_connection_batch_report(report) + actions = auto_routing._routing_diagnostic_recommended_actions(summary) - self.assertEqual( - ["黄色主路径(路径1)"], - payload["route_capacity_pressure_warning_samples"][0]["route_source_labels"], - ) + self.assertIn("点击“选择未接入端子”定位未接入路由网络或接入距离超限的端子", actions) + self.assertIn("补端子附近 UserPath/线槽入口,或确认设备装配位置和端子接入最大距离", actions) - def test_compact_batch_report_includes_collision_kind_counts(self): + def test_routing_diagnostic_recommended_actions_include_wire_outside_boundary_selection(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - report = { - "total_wires": 2, - "routed": 2, - "collision_warnings": 2, - "skipped_missing_terminal": 0, - "routes": [ - { - "wire_uuid": "wire-hard", - "collision_samples": [ - {"collision_kind": "HardIntersection", "obstacle_label": "设备A"}, - ], - }, - { - "wire_uuid": "wire-clearance", - "collision_samples": [ - {"collision_kind": "ClearanceWarning", "obstacle_label": "设备B"}, - ], + summary = { + "issue_codes": ["route_candidate_boundary_violations"], + "routed_wire_issue_summary": { + "issue_wire_count": 1, + "issue_code_counts": {"route_candidate_boundary_violations": 1}, + }, + "diagnostics": { + "RoutingConnectionBatch": { + "payload": { + "wire_outside_boundary_count": 1, + }, }, - ], + }, } - payload = auto_routing._compact_routing_connection_batch_report(report) + actions = auto_routing._routing_diagnostic_recommended_actions(summary) - self.assertEqual(1, payload["collision_kind_counts"]["HardIntersection"]) - self.assertEqual(1, payload["collision_kind_counts"]["ClearanceWarning"]) + self.assertIn("点击“选择越界导线”定位越出柜内区域的导线及其路径", actions) - def test_compact_batch_report_includes_collision_relation_counts(self): + def test_compact_batch_report_includes_route_path_usage_summary(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { "total_wires": 2, "routed": 2, - "collision_warnings": 2, + "collision_warnings": 0, "skipped_missing_terminal": 0, - "selective_collision_reroute": True, - "selective_collision_reroute_limit": 5, - "selective_collision_reroute_attempts": 2, - "selective_collision_reroutes": 1, - "selective_collision_reroute_no_improvement": 1, - "selective_collision_reroute_rejected_fallback": 1, - "selective_collision_reroute_errors": 0, "routes": [ { - "collision_samples": [ - { - "collision_kind": "HardIntersection", - "collision_relation": "third_party_device_collision", - "obstacle_label": "设备A", - }, - ], + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "label": "线槽A"}}, + ], + }, }, { - "collision_samples": [ - { - "collision_kind": "ClearanceWarning", - "collision_relation": "endpoint_device_collision", - "obstacle_label": "设备B", - }, - ], + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "安装板辅助路径"}}, + ], + }, }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual(1, payload["collision_relation_counts"]["third_party_device_collision"]) - self.assertEqual(1, payload["collision_relation_counts"]["endpoint_device_collision"]) - self.assertEqual(2, payload["selective_collision_reroute_attempts"]) - self.assertEqual(1, payload["selective_collision_reroutes"]) - self.assertEqual(1, payload["selective_collision_reroute_no_improvement"]) - self.assertEqual(1, payload["selective_collision_reroute_rejected_fallback"]) - self.assertIn("third_party_device_collisions", payload["issue_codes"]) - self.assertIn("endpoint_device_collisions", payload["issue_codes"]) - self.assertIn("main_path_detour_missing", payload["issue_codes"]) self.assertEqual( - "selective_local_reroute_or_user_path", - payload["collision_reroute_recommendation"]["strategy"], + {"main_path_routes": 1, "fallback_routes": 1}, + payload["route_path_usage"], ) - self.assertFalse(payload["collision_reroute_recommendation"]["global_avoid_obstacles_recommended"]) - self.assertIn("局部", payload["collision_reroute_recommendation"]["reason"]) - def test_compact_batch_report_includes_top_collision_obstacles(self): + def test_compact_batch_report_summarizes_terminal_access_consumption(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { "total_wires": 3, "routed": 3, - "collision_warnings": 3, + "collision_warnings": 0, "skipped_missing_terminal": 0, "routes": [ { - "collision_samples": [ - { - "collision_kind": "HardIntersection", - "obstacle_name": "DeviceAObject", - "obstacle_label": "设备A", - "obstacle_parent_labels": ["安装板A"], - "obstacle_parent_names": ["MountPanelA"], - }, - { - "collision_kind": "ClearanceWarning", - "obstacle_name": "DeviceAObject", - "obstacle_label": "设备A", - "obstacle_parent_labels": ["安装板A"], - "obstacle_parent_names": ["MountPanelA"], - }, - ], + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + }, + "route_track": {"segments": []}, }, { - "collision_samples": [ - { - "collision_kind": "HardIntersection", - "obstacle_name": "BracketBObject", - "obstacle_label": "支架B", - "obstacle_parent_labels": ["柜体总成"], - "obstacle_parent_names": ["CabinetAssembly"], - }, - ], + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": False, + }, + "route_track": {"segments": []}, + }, + { + "network": { + "start_terminal_access_consumed": False, + "end_terminal_access_consumed": False, + }, + "route_track": {"segments": []}, }, ], } @@ -11145,206 +14122,278 @@ class AutoRoutingTest(unittest.TestCase): payload = auto_routing._compact_routing_connection_batch_report(report) self.assertEqual( - [ + { + "routes": 3, + "both_endpoints_consumed": 1, + "one_endpoint_consumed": 1, + "no_endpoint_consumed": 1, + "start_consumed": 2, + "end_consumed": 1, + }, + payload["terminal_access_usage"], + ) + self.assertIn( + "端子接入采用:两端接入 1 条,一端接入 1 条,未接入 1 条。", + auto_routing.format_eplan_connection_route_report(report), + ) + + def test_compact_batch_report_summarizes_terminal_access_target_kinds(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "total_wires": 2, + "routed": 2, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ { - "label": "设备A", - "name": "DeviceAObject", - "count": 2, - "collision_kind_counts": { - "HardIntersection": 1, - "ClearanceWarning": 1, + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + "start_terminal_access_target_kind": "WireDuct", + "end_terminal_access_target_kind": "UserPath", }, - "parent_labels": ["安装板A"], - "parent_names": ["MountPanelA"], - "resolution_hint_code": "review_device_or_layout_collision", - "resolution_hint_label": "疑似设备/安装区域碰撞,优先补柜内路径或调整装配", + "route_track": {"segments": []}, }, { - "label": "支架B", - "name": "BracketBObject", - "count": 1, - "collision_kind_counts": {"HardIntersection": 1}, - "parent_labels": ["柜体总成"], - "parent_names": ["CabinetAssembly"], - "resolution_hint_code": "review_pass_through_structural_obstacle", - "resolution_hint_label": "疑似柜体/门板/支架结构,确认可穿越后标记忽略碰撞", + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + "start_terminal_access_target_kind": "RoutingRange", + "end_terminal_access_target_kind": "WireDuct", + }, + "route_track": {"segments": []}, }, ], - payload["top_collision_obstacles"], + } + + payload = auto_routing._compact_routing_connection_batch_report(report) + + self.assertEqual( + {"WireDuct": 2, "UserPath": 1, "RoutingRange": 1}, + payload["terminal_access_target_kind_counts"], + ) + self.assertIn( + "端子接入目标:WireDuct 2 个,UserPath 1 个,RoutingRange 1 个。", + auto_routing.format_eplan_connection_route_report(report), ) - def test_compact_batch_report_summarizes_collision_resolution_categories(self): + def test_compact_batch_report_flags_terminal_access_fallback_targets_when_main_path_exists(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "routed": 2, - "collision_warnings": 2, + "total_wires": 1, + "routed": 1, + "collision_warnings": 0, "skipped_missing_terminal": 0, + "route_network_carrier_kind_counts": { + "WireDuct": 2, + "UserPath": 1, + "RoutingRange": 4, + }, "routes": [ { - "wire_uuid": "wire-device", - "collision_samples": [ - { - "obstacle_label": "ID:12", - "obstacle_name": "QETDevice_A", - "collision_kind": "HardIntersection", - "obstacle_parent_labels": ["QET Exchange Devices"], - } - ], - }, - { - "wire_uuid": "wire-structure", - "collision_samples": [ - { - "obstacle_label": "NAUO141", - "obstacle_name": "Compound039", - "collision_kind": "HardIntersection", - "obstacle_parent_labels": ["FRONT DOOR-R ASS'Y"], - "obstacle_parent_names": ["DoorAssembly"], - }, - { - "obstacle_label": "支架B", - "obstacle_name": "BracketB", - "collision_kind": "ClearanceWarning", - }, - ], + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + "start_terminal_access_target_kind": "RoutingRange", + "start_terminal_access_target_name": "RoutingRange001", + "start_terminal_access_target_label": "安装板布线面", + "start_terminal_access_target_distance": 35.0, + "end_terminal_access_target_kind": "WireDuct", + }, + "route_track": {"segments": []}, }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) + self.assertIn("terminal_access_fallback_targets", payload["issue_codes"]) + self.assertIn("端子接入退回布线面", payload["issue_labels"]) + self.assertEqual(1, payload["terminal_access_fallback_target_count"]) self.assertEqual( { - "review_device_or_layout_collision": 1, - "review_pass_through_structural_obstacle": 2, + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "endpoint": "start", + "target_kind": "RoutingRange", + "target_name": "RoutingRange001", + "target_label": "安装板布线面", + "target_distance": 35.0, }, - payload["collision_resolution_summary"]["counts"], + payload["terminal_access_fallback_target_samples"][0], ) - self.assertEqual( - "先处理 2 个疑似结构件碰撞候选:确认后可标记 PassThrough;另有 1 个疑似设备/装配碰撞需要补路径或调整装配。", - payload["collision_resolution_summary"]["recommended_action"], + self.assertIn( + "端子接入退回布线面:当前有线槽/UserPath/过线孔主路径 3 条,但仍有 1 个端子接入目标为 RoutingRange/辅助路径。示例 W1 起点接入到 安装板布线面,距离 35.0mm。", + auto_routing.format_eplan_connection_route_report(report), ) - def test_compact_batch_report_issue_codes_include_collision_resolution_categories(self): + def test_terminal_access_fallback_samples_include_endpoint_terminal_and_device_metadata(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "routed": 2, - "collision_warnings": 2, + "total_wires": 1, + "routed": 1, + "collision_warnings": 0, "skipped_missing_terminal": 0, "routes": [ { - "collision_samples": [ - { - "obstacle_label": "ID:12", - "obstacle_name": "QETDevice_A", - "collision_kind": "HardIntersection", - } - ], + "wire_uuid": "wire-fallback", + "wire_label": "W1", + "start_terminal_uuid": "terminal-ud8-as", + "start_terminal_name": "QETTerminal_UD8_as", + "start_terminal_label": "as", + "start_device_label": "UD:8", + "start_parent_device_name": "QETDevice_UD8", + "start_parent_device_label": "UD:8", + "end_terminal_uuid": "terminal-sa", + "network": { + "start_terminal_access_target_kind": "RoutingRange", + "start_terminal_access_target_name": "RoutingRange001", + "start_terminal_access_target_label": "安装板布线面", + }, + "route_track": {"segments": []}, }, + ], + } + + payload = auto_routing._compact_routing_connection_batch_report(report) + sample = payload["terminal_access_fallback_target_samples"][0] + + self.assertEqual("terminal-ud8-as", sample["terminal_uuid"]) + self.assertEqual("QETTerminal_UD8_as", sample["terminal_name"]) + self.assertEqual("as", sample["terminal_label"]) + self.assertEqual("QETDevice_UD8", sample["parent_device_name"]) + self.assertEqual("UD:8", sample["parent_device_label"]) + + def test_compact_batch_report_does_not_flag_terminal_access_fallback_targets_without_main_path(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "total_wires": 1, + "routed": 1, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "route_network_carrier_kind_counts": { + "RoutingRange": 4, + }, + "routes": [ { - "collision_samples": [ - { - "obstacle_label": "NAUO141", - "obstacle_name": "Compound039", - "collision_kind": "HardIntersection", - "obstacle_parent_labels": ["FRONT DOOR-R ASS'Y"], - } - ], + "network": { + "start_terminal_access_consumed": True, + "end_terminal_access_consumed": True, + "start_terminal_access_target_kind": "RoutingRange", + "end_terminal_access_target_kind": "RoutingRange", + }, + "route_track": {"segments": []}, }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertIn("collision_warnings", payload["issue_codes"]) - self.assertIn("device_or_layout_collisions", payload["issue_codes"]) - self.assertIn("structural_collision_candidates", payload["issue_codes"]) - self.assertIn("设备/布局碰撞", payload["issue_labels"]) - self.assertIn("结构件碰撞候选", payload["issue_labels"]) + self.assertNotIn("terminal_access_fallback_targets", payload["issue_codes"]) - def test_compact_batch_report_issue_codes_include_missing_endpoint_reasons(self): + def test_compact_batch_report_flags_when_no_main_path_is_used(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "total_wires": 3, - "routed": 1, + "total_wires": 2, + "routed": 2, "collision_warnings": 0, - "skipped_missing_terminal": 2, - "missing_endpoint_uuids": ["terminal-missing-a", "terminal-missing-b"], - "missing_endpoint_samples": [ + "skipped_missing_terminal": 0, + "route_network_carrier_kind_counts": { + "WireDuct": 2, + "WireDuctOpenEnd": 4, + "RoutingRange": 10, + }, + "routes": [ { - "wire_uuid": "wire-missing-device", - "wire_label": "N-MISSING", - "start_found": False, - "start_terminal_uuid": "terminal-missing-a", - "start_element_uuid": "device-a", - "start_terminal_display": "A1", - "start_missing_endpoint_reason_code": "device_not_in_3d_scene", - "start_missing_endpoint_reason_label": "该 2D 设备未在 FreeCAD 场景中找到", + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "安装板辅助路径"}}, + ], + }, }, { - "wire_uuid": "wire-mismatch", - "wire_label": "N-MISMATCH", - "end_found": False, - "end_terminal_uuid": "terminal-missing-b", - "end_element_uuid": "device-b", - "end_device_label": "设备B", - "end_terminal_display": "B1", - "end_missing_endpoint_reason_code": "terminal_uuid_not_in_element", - "end_missing_endpoint_reason_label": "同设备存在端子,但没有匹配该 terminal_uuid", + "route_track": { + "segments": [ + {"carrier": {"kind": "AuxiliaryPath", "label": "门板辅助路径"}}, + ], + }, }, ], } payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertIn("missing_terminals", payload["issue_codes"]) - self.assertIn("device_not_in_3d_scene", payload["issue_codes"]) - self.assertIn("terminal_uuid_not_in_element", payload["issue_codes"]) - self.assertIn("3D场景缺少设备", payload["issue_labels"]) - self.assertIn("端子UUID不匹配", payload["issue_labels"]) self.assertEqual( - { - "device_not_in_3d_scene": 1, - "terminal_uuid_not_in_element": 1, - }, - payload["missing_terminal_summary"]["reason_code_counts"], + {"main_path_routes": 0, "fallback_routes": 2}, + payload["route_path_usage"], + ) + self.assertEqual( + {"WireDuct": 2, "WireDuctOpenEnd": 4, "RoutingRange": 10}, + payload["route_network_carrier_kind_counts"], + ) + self.assertEqual(6, payload["route_network_main_path_carriers"]) + self.assertIn("main_path_not_used", payload["issue_codes"]) + self.assertIn("未使用线槽或用户主路径", payload["issue_labels"]) + self.assertIn( + "主路径未采用:当前有线槽/UserPath/过线孔路径 6 条,但本批次 2 条导线都走了布线面/辅助路径。", + auto_routing.format_eplan_connection_route_report(report), ) - self.assertEqual(2, len(payload["missing_terminal_summary"]["device_groups"])) - self.assertEqual("device-a", payload["missing_terminal_summary"]["device_groups"][0]["element_uuid"]) - self.assertEqual("设备B", payload["missing_terminal_summary"]["device_groups"][1]["device_label"]) - def test_routing_diagnostic_recommended_actions_use_collision_resolution_summary(self): + def test_compact_batch_report_flags_when_main_path_is_underused(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() - summary = { - "issue_codes": ["collision_warnings"], - "batch_collision_resolution_summary": { - "counts": { - "review_pass_through_structural_obstacle": 2, - "review_device_or_layout_collision": 1, - }, - "recommended_action": ( - "先处理 2 个疑似结构件碰撞候选:确认后可标记 PassThrough;" - "另有 1 个疑似设备/装配碰撞需要补路径或调整装配。" - ), - }, - "diagnostics": { - "RoutingConnectionBatch": { - "payload": {"collision_warnings": 3}, - } + report = { + "total_wires": 5, + "routed": 5, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "route_network_carrier_kind_counts": { + "WireDuct": 2, + "UserPath": 3, + "RoutingRange": 10, }, - "routed_wire_issue_summary": {"issue_code_counts": {}}, + "routes": [ + { + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "label": "主线槽A"}}, + ], + }, + }, + *[ + { + "route_track": { + "segments": [ + {"carrier": {"kind": "RoutingRange", "label": "安装板布线面"}}, + ], + }, + } + for _index in range(4) + ], + ], } - actions = auto_routing._routing_diagnostic_recommended_actions(summary) + payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertIn("先处理 2 个疑似结构件碰撞候选:确认后可标记 PassThrough", actions) - self.assertIn("另有 1 个疑似设备/装配碰撞需要补路径或调整装配", actions) + self.assertEqual( + {"main_path_routes": 1, "fallback_routes": 4}, + payload["route_path_usage"], + ) + self.assertIn("main_path_underused", payload["issue_codes"]) + self.assertIn("主路径使用率过低", payload["issue_labels"]) + self.assertIn( + "主路径使用率过低:当前有线槽/UserPath/过线孔路径 5 条,本批次 5 条导线中只有 1 条使用主路径,4 条仍走布线面/辅助路径。", + auto_routing.format_eplan_connection_route_report(report), + ) - def test_compact_batch_report_includes_route_path_usage_summary(self): + def test_compact_batch_report_does_not_flag_balanced_main_path_usage_as_underused(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { @@ -11352,6 +14401,10 @@ class AutoRoutingTest(unittest.TestCase): "routed": 2, "collision_warnings": 0, "skipped_missing_terminal": 0, + "route_network_carrier_kind_counts": { + "WireDuct": 1, + "RoutingRange": 1, + }, "routes": [ { "route_track": { @@ -11363,7 +14416,7 @@ class AutoRoutingTest(unittest.TestCase): { "route_track": { "segments": [ - {"carrier": {"kind": "RoutingRange", "label": "安装板辅助路径"}}, + {"carrier": {"kind": "RoutingRange", "label": "安装板布线面"}}, ], }, }, @@ -11372,36 +14425,30 @@ class AutoRoutingTest(unittest.TestCase): payload = auto_routing._compact_routing_connection_batch_report(report) - self.assertEqual( - {"main_path_routes": 1, "fallback_routes": 1}, - payload["route_path_usage"], - ) + self.assertNotIn("main_path_underused", payload["issue_codes"]) + self.assertFalse(payload["main_path_usage"]["underused"]) - def test_compact_batch_report_flags_when_no_main_path_is_used(self): + def test_compact_batch_report_exposes_wire_outside_boundary_aliases(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() report = { - "total_wires": 2, - "routed": 2, + "total_wires": 1, + "routed": 1, "collision_warnings": 0, "skipped_missing_terminal": 0, - "route_network_carrier_kind_counts": { - "WireDuct": 2, - "WireDuctOpenEnd": 4, - "RoutingRange": 10, - }, "routes": [ { - "route_track": { - "segments": [ - {"carrier": {"kind": "RoutingRange", "label": "安装板辅助路径"}}, - ], + "wire_uuid": "wire-outside", + "wire_label": "N-OUT", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "network": { + "boundary_aware": True, + "route_candidate_boundary_violations": 3, }, - }, - { "route_track": { "segments": [ - {"carrier": {"kind": "AuxiliaryPath", "label": "门板辅助路径"}}, + {"carrier": {"kind": "UserPath", "label": "柜内主路径A"}}, ], }, }, @@ -11409,22 +14456,24 @@ class AutoRoutingTest(unittest.TestCase): } payload = auto_routing._compact_routing_connection_batch_report(report) + message = auto_routing.format_eplan_connection_route_report(report) + self.assertIn("route_candidate_boundary_violations", payload["issue_codes"]) + self.assertEqual(1, payload["wire_outside_boundary_count"]) self.assertEqual( - {"main_path_routes": 0, "fallback_routes": 2}, - payload["route_path_usage"], - ) - self.assertEqual( - {"WireDuct": 2, "WireDuctOpenEnd": 4, "RoutingRange": 10}, - payload["route_network_carrier_kind_counts"], - ) - self.assertEqual(6, payload["route_network_main_path_carriers"]) - self.assertIn("main_path_not_used", payload["issue_codes"]) - self.assertIn("未使用线槽或用户主路径", payload["issue_labels"]) - self.assertIn( - "主路径未采用:当前有线槽/UserPath/过线孔路径 6 条,但本批次 2 条导线都走了布线面/辅助路径。", - auto_routing.format_eplan_connection_route_report(report), + { + "wire_uuid": "wire-outside", + "wire_label": "N-OUT", + "wire_object_label": "", + "wire": "N-OUT", + "start_terminal_uuid": "terminal-start", + "end_terminal_uuid": "terminal-end", + "violations": 3, + "route_source_labels": ["柜内主路径A"], + }, + payload["wire_outside_boundary_samples"][0], ) + self.assertIn("导线越出柜内区域:1 条", message) def test_route_eplan_connections_report_includes_top_level_path_usage_summary(self): _install_fake_freecad() @@ -12223,6 +15272,31 @@ class AutoRoutingTest(unittest.TestCase): self.assertIn("示例导线 N-CROWDED", message) self.assertIn("DuctA", message) + def test_route_report_capacity_pressure_highlights_bottleneck_path(self): + _install_fake_freecad() + _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + report = { + "routed": 3, + "collision_warnings": 0, + "skipped_missing_terminal": 0, + "routes": [ + { + "wire_label": "N-CROWDED", + "lane": {"index": 2, "spacing_mm": 10.0}, + "route_track": { + "segments": [ + {"carrier": {"kind": "WireDuct", "name": "DuctA", "capacity": 2}}, + {"carrier": {"kind": "WireDuct", "name": "DuctB", "capacity": 4}}, + ] + }, + } + ], + } + + message = auto_routing.format_eplan_connection_route_report(report) + + self.assertIn("瓶颈路径 DuctA", message) + def test_route_report_capacity_pressure_prefers_user_path_source_label(self): _install_fake_freecad() _terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() @@ -13188,6 +16262,109 @@ class AutoRoutingTest(unittest.TestCase): self.assertEqual("1", second_wire.QetRouteMinCarrierCapacity) self.assertTrue(any(abs(point.y - 10.0) <= 0.001 for point in second_wire.Points[1:-1])) + def test_route_eplan_connections_dense_shared_route_uses_secondary_lane_offset_after_primary_cap(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + wires = [] + for index in range(8): + suffix = str(index) + _terminal(doc, terminal_objects, "TerminalStart{0}".format(suffix), "terminal-start-{0}".format(suffix), app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEnd{0}".format(suffix), "terminal-end-{0}".format(suffix), app.Vector(100, 0, 0)) + wires.append( + { + "wire_id": "wire-{0}".format(index), + "start_terminal_uuid": "terminal-start-{0}".format(index), + "end_terminal_uuid": "terminal-end-{0}".format(index), + } + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + + report = auto_routing.route_eplan_connections_from_payload( + doc, + {"project_uuid": "project-1", "wires": wires}, + options={"lane_spacing": 10.0, "lane_axis": "y", "lane_max_offset": 30.0}, + ) + + self.assertEqual(8, report["routed"]) + self.assertEqual(7, report["routes"][7]["lane"]["index"]) + self.assertEqual("y", report["routes"][7]["lane"]["axis"]) + self.assertEqual(30.0, report["routes"][7]["lane"]["offset_mm"]) + self.assertEqual("z", report["routes"][7]["lane"]["secondary_axis"]) + self.assertEqual(10.0, report["routes"][7]["lane"]["secondary_offset_mm"]) + routed_group = doc.getObject("QETWiring_04_Routed") + wire_by_uuid = { + getattr(wire, "QetWireUuid", ""): wire + for wire in list(getattr(routed_group, "Group", []) or []) + } + capped_primary_wire = wire_by_uuid["wire-5"] + secondary_offset_wire = wire_by_uuid["wire-7"] + capped_midpoints = [(round(point.y, 3), round(point.z, 3)) for point in capped_primary_wire.Points[1:-1]] + secondary_midpoints = [(round(point.y, 3), round(point.z, 3)) for point in secondary_offset_wire.Points[1:-1]] + self.assertNotEqual(capped_midpoints, secondary_midpoints) + self.assertTrue(any(abs(point.z - 30.0) <= 0.001 for point in secondary_offset_wire.Points[1:-1])) + + def test_route_eplan_connections_matches_duplicate_terminal_uuid_by_endpoint_device(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + + wrong_start = _terminal(doc, terminal_objects, "WrongStartP1", "P1", app.Vector(0, 0, 0)) + wrong_end = _terminal(doc, terminal_objects, "WrongEndP2", "P2", app.Vector(120, 0, 0)) + terminal_objects.set_terminal_semantics( + wrong_start, "project-1", "wrong-start", "P1", "instance-wrong-start", label="P1" + ) + terminal_objects.set_terminal_semantics( + wrong_end, "project-1", "wrong-end", "P2", "instance-wrong-end", label="P2" + ) + expected_start = _terminal(doc, terminal_objects, "ExpectedStartP1", "P1", app.Vector(0, 50, 0)) + expected_end = _terminal(doc, terminal_objects, "ExpectedEndP2", "P2", app.Vector(120, 50, 0)) + terminal_objects.set_terminal_semantics( + expected_start, "project-1", "device-start", "P1", "instance-device-start", label="P1" + ) + terminal_objects.set_terminal_semantics( + expected_end, "project-1", "device-end", "P2", "instance-device-end", label="P2" + ) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 50, 20), app.Vector(120, 50, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-target", + "start_element_uuid": "device-start", + "start_instance_id": "instance-device-start", + "start_terminal_uuid": "P1", + "end_element_uuid": "device-end", + "end_instance_id": "instance-device-end", + "end_terminal_uuid": "P2", + } + ], + } + + report = auto_routing.route_eplan_connections_from_payload(doc, payload) + + self.assertEqual(1, report["routed"]) + routed_group = doc.getObject("QETWiring_04_Routed") + wire = list(getattr(routed_group, "Group", []) or [])[0] + self.assertEqual("instance-device-start", wire.QetStartInstanceId) + self.assertEqual("instance-device-end", wire.QetEndInstanceId) + self.assertEqual(50.0, wire.Points[0].y) + self.assertEqual(50.0, wire.Points[-1].y) + def test_route_eplan_connections_lane_index_accounts_for_existing_routed_segments(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() @@ -13285,6 +16462,113 @@ class AutoRoutingTest(unittest.TestCase): self.assertTrue(any(abs(point.x - 10.0) <= 0.001 for point in second_wire.Points[1:-1])) self.assertFalse(all(abs(point.x) <= 0.001 for point in second_wire.Points[1:-1])) + def test_route_eplan_connections_auto_lane_axis_avoids_cabinet_boundary(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + boundary = doc.addObject("Part::Feature", "CabinetInteriorBoundary") + boundary.Label = "柜内空间" + boundary.Shape = FakeShape(FakeBoundBox(-10, 110, 0, 100, -10, 80)) + routing_network.mark_cabinet_interior_boundaries_from_selection( + [FakeSelectionItem(obj=boundary)] + ) + _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 95, 0)) + _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(100, 95, 0)) + _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 95, 0)) + _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(100, 95, 0)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 95, 20), app.Vector(100, 95, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start-a", + "end_terminal_uuid": "terminal-end-a", + }, + { + "wire_id": "wire-b", + "start_terminal_uuid": "terminal-start-b", + "end_terminal_uuid": "terminal-end-b", + }, + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={"lane_spacing": 10.0}, + ) + + self.assertEqual(1, report["routes"][1]["lane"]["index"]) + self.assertEqual("z", report["routes"][1]["lane"]["axis"]) + self.assertEqual(0, report["routes"][1]["network"]["route_candidate_boundary_violations"]) + routed_group = doc.getObject("QETWiring_04_Routed") + second_wire = [ + wire + for wire in list(getattr(routed_group, "Group", []) or []) + if getattr(wire, "QetWireUuid", "") == "wire-b" + ][0] + self.assertTrue(all(point.y <= 100.0 for point in second_wire.Points)) + self.assertTrue(any(abs(point.z - 30.0) <= 0.001 for point in second_wire.Points[1:-1])) + + def test_route_eplan_connections_auto_lane_axis_avoids_obstacle_side(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + _terminal(doc, terminal_objects, "TerminalStartA", "terminal-start-a", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndA", "terminal-end-a", app.Vector(0, 100, 0)) + _terminal(doc, terminal_objects, "TerminalStartB", "terminal-start-b", app.Vector(0, 0, 0)) + _terminal(doc, terminal_objects, "TerminalEndB", "terminal-end-b", app.Vector(0, 100, 0)) + obstacle = doc.addObject("Part::Feature", "ObstacleDevice") + obstacle.Label = "右侧设备障碍" + obstacle.Shape = FakeShape(FakeBoundBox(5, 15, 40, 60, 15, 25)) + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(0, 100, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-a", + "start_terminal_uuid": "terminal-start-a", + "end_terminal_uuid": "terminal-end-a", + }, + { + "wire_id": "wire-b", + "start_terminal_uuid": "terminal-start-b", + "end_terminal_uuid": "terminal-end-b", + }, + ], + } + + report = auto_routing.route_eplan_connections_from_payload( + doc, + payload, + options={ + "lane_spacing": 10.0, + "batch_avoid_obstacles": True, + "obstacle_clearance": 0.0, + }, + ) + + self.assertEqual(1, report["routes"][1]["lane"]["index"]) + self.assertEqual("x", report["routes"][1]["lane"]["axis"]) + self.assertEqual(-10.0, report["routes"][1]["lane"]["offset_mm"]) + self.assertEqual("Routed", report["routes"][1]["route_status"]) + self.assertEqual(0, report["routes"][1]["network"]["route_candidate_obstacle_hits"]) + def test_route_eplan_connections_prefers_unused_alternate_route_segments(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() @@ -14999,6 +18283,7 @@ class AutoRoutingTest(unittest.TestCase): "点击“选择缺端子设备”定位需要补工程端子的设备", "点击“选择异常导线”定位带问题码的导线", "点击“选择长接入端子/设备”检查设备高度和局部出线路径", + "点击“选择高发碰撞对象”和“选择碰撞导线”核对穿模位置", "点击“选择碰撞父装配”确认结构件后再标记忽略碰撞", ], summary["recommended_actions"], @@ -15860,6 +19145,73 @@ class AutoRoutingTest(unittest.TestCase): self.assertFalse(indexed["qet-terminal-p1"].ViewObject.Visibility) self.assertFalse(indexed["qet-terminal-p2"].ViewObject.Visibility) + def test_bind_wire_task_terminals_keeps_duplicate_terminal_uuid_on_different_devices(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules() + app = sys.modules["FreeCAD"] + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + for element_uuid, instance_id, x in ( + ("device-a", "instance-a", 0), + ("device-b", "instance-b", 100), + ): + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_{0}".format(element_uuid)) + root.addObject(device) + terminal_objects.ensure_string_property(device, "QetElementUuid", "QET Exchange", "", element_uuid) + terminal_objects.ensure_string_property(device, "QetInstanceId", "QET Exchange", "", instance_id) + terminal_objects.ensure_string_property(device, "QetProjectUuid", "QET Exchange", "", "project-1") + terminal_group = terminal_objects.ensure_terminal_group( + doc, + device, + project_uuid="project-1", + instance_id=instance_id, + ) + terminal = terminal_objects.create_lcs_object( + doc, + "QETTerminal_{0}_P1".format(instance_id), + placement=app.Placement(app.Vector(x, 0, 0), app.Rotation()), + label="P1", + ) + terminal_group.addObject(terminal) + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + element_uuid, + "local:{0}:P1".format(instance_id), + instance_id, + label="P1", + slot_name="P1", + ) + payload = { + "project_uuid": "project-1", + "wires": [ + { + "wire_id": "wire-1", + "start_element_uuid": "device-a", + "start_instance_id": "instance-a", + "start_terminal_uuid": "same-terminal-uuid", + "start_terminal_display": "P1", + "end_element_uuid": "device-b", + "end_instance_id": "instance-b", + "end_terminal_uuid": "same-terminal-uuid", + "end_terminal_display": "P1", + } + ], + } + + report = auto_routing.bind_wire_task_terminals_from_payload(doc, payload) + + candidates = [ + terminal + for terminal in auto_routing._collect_routable_terminals(doc) + if getattr(terminal, "QetTerminalUuid", "") == "same-terminal-uuid" + ] + self.assertEqual(2, report["bound"]) + self.assertEqual( + ["instance-a", "instance-b"], + sorted(getattr(terminal, "QetInstanceId", "") for terminal in candidates), + ) + def test_route_eplan_connections_rebinds_local_template_terminals_from_wire_endpoints(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules() diff --git a/tests/python/freecad_exchange_bootstrap_wiring_test.py b/tests/python/freecad_exchange_bootstrap_wiring_test.py index 502d785..47ffb6f 100644 --- a/tests/python/freecad_exchange_bootstrap_wiring_test.py +++ b/tests/python/freecad_exchange_bootstrap_wiring_test.py @@ -109,7 +109,7 @@ class ExchangeBootstrapWiringTest(unittest.TestCase): sys.modules.pop("ExchangeBootstrap", None) bootstrap = importlib.import_module("ExchangeBootstrap") payload = { - "schema_version": "1.2", + "schema_version": "2.0", "project_uuid": "project-1", "devices": [], "device_models": [], @@ -166,20 +166,27 @@ class ExchangeBootstrapWiringTest(unittest.TestCase): path.write_text(json.dumps(payload), encoding="utf-8") normalized = bootstrap.load_exchange_payload(str(path)) - self.assertEqual("device-inst-1", normalized["devices"][0]["instance_id"]) + self.assertEqual("device-inst-1", normalized["devices"][0]["device_instance_id"]) self.assertEqual("element-a", normalized["devices"][0]["element_uuid"]) self.assertEqual(["element-a"], normalized["devices"][0]["element_uuids"]) - self.assertEqual(1, len(normalized["terminals"])) - self.assertEqual("terminal-a", normalized["terminals"][0]["terminal_uuid"]) - self.assertEqual("device-inst-1", normalized["terminals"][0]["instance_id"]) - self.assertEqual("device-inst-1", normalized["device_models"][0]["instance_id"]) + self.assertNotIn("terminals", normalized) + self.assertEqual(1, len(normalized["devices"][0]["terminals"])) + self.assertEqual("terminal-a", normalized["devices"][0]["terminals"][0]["terminal_uuid"]) + self.assertEqual( + "device-inst-1", + normalized["devices"][0]["terminals"][0]["device_instance_id"], + ) + self.assertEqual( + "device-inst-1", + normalized["device_models"][0]["device_instance_id"], + ) def test_load_exchange_payload_preserves_wire_label_and_style_id(self): _install_fake_modules() sys.modules.pop("ExchangeBootstrap", None) bootstrap = importlib.import_module("ExchangeBootstrap") payload = { - "schema_version": "1.2", + "schema_version": "2.0", "project_uuid": "project-1", "devices": [], "device_models": [], @@ -221,7 +228,7 @@ class ExchangeBootstrapWiringTest(unittest.TestCase): with self.assertRaises(bootstrap.ExchangeValidationError): bootstrap.load_exchange_payload(str(path)) - def test_load_exchange_payload_detects_wire_properties_database_next_to_json(self): + def test_load_exchange_payload_rejects_non_v2_schema(self): _install_fake_modules() sys.modules.pop("ExchangeBootstrap", None) bootstrap = importlib.import_module("ExchangeBootstrap") @@ -233,6 +240,125 @@ class ExchangeBootstrapWiringTest(unittest.TestCase): "wires": [], } + with tempfile.TemporaryDirectory() as temp_dir: + path = Path(temp_dir) / "2d_to_3d.json" + path.write_text(json.dumps(payload), encoding="utf-8") + with self.assertRaises(bootstrap.ExchangeValidationError): + bootstrap.load_exchange_payload(str(path)) + + def test_load_exchange_payload_rejects_legacy_device_instance_id_field(self): + _install_fake_modules() + sys.modules.pop("ExchangeBootstrap", None) + bootstrap = importlib.import_module("ExchangeBootstrap") + payload = { + "schema_version": "2.0", + "project_uuid": "project-1", + "devices": [ + { + "instance_id": "legacy-device-instance", + "display_tag": "QF1", + "terminals": [], + } + ], + "device_models": [], + "wires": [], + } + + with tempfile.TemporaryDirectory() as temp_dir: + path = Path(temp_dir) / "2d_to_3d.json" + path.write_text(json.dumps(payload), encoding="utf-8") + with self.assertRaises(bootstrap.ExchangeValidationError): + bootstrap.load_exchange_payload(str(path)) + + def test_load_exchange_payload_rejects_legacy_device_level_element_uuid(self): + _install_fake_modules() + sys.modules.pop("ExchangeBootstrap", None) + bootstrap = importlib.import_module("ExchangeBootstrap") + payload = { + "schema_version": "2.0", + "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "device-inst-1", + "element_uuid": "legacy-device-element", + "display_tag": "QF1", + "terminals": [], + } + ], + "device_models": [], + "wires": [], + } + + with tempfile.TemporaryDirectory() as temp_dir: + path = Path(temp_dir) / "2d_to_3d.json" + path.write_text(json.dumps(payload), encoding="utf-8") + with self.assertRaises(bootstrap.ExchangeValidationError): + bootstrap.load_exchange_payload(str(path)) + + def test_load_exchange_payload_rejects_legacy_device_model_element_uuid(self): + _install_fake_modules() + sys.modules.pop("ExchangeBootstrap", None) + bootstrap = importlib.import_module("ExchangeBootstrap") + payload = { + "schema_version": "2.0", + "project_uuid": "project-1", + "devices": [], + "device_models": [ + { + "element_uuid": "legacy-device", + "resolved_model_path": r"D:\models\legacy.step", + } + ], + "wires": [], + } + + with tempfile.TemporaryDirectory() as temp_dir: + path = Path(temp_dir) / "2d_to_3d.json" + path.write_text(json.dumps(payload), encoding="utf-8") + with self.assertRaises(bootstrap.ExchangeValidationError): + bootstrap.load_exchange_payload(str(path)) + + def test_load_exchange_payload_ignores_legacy_wire_endpoint_instance_ids(self): + _install_fake_modules() + sys.modules.pop("ExchangeBootstrap", None) + bootstrap = importlib.import_module("ExchangeBootstrap") + payload = { + "schema_version": "2.0", + "project_uuid": "project-1", + "devices": [], + "device_models": [], + "wires": [ + { + "wire_id": "wire-1", + "start_terminal_uuid": "terminal-a", + "end_terminal_uuid": "terminal-b", + "start_instance_id": "legacy-start", + "end_instance_id": "legacy-end", + } + ], + } + + with tempfile.TemporaryDirectory() as temp_dir: + path = Path(temp_dir) / "2d_to_3d.json" + path.write_text(json.dumps(payload), encoding="utf-8") + normalized = bootstrap.load_exchange_payload(str(path)) + + self.assertEqual("wire-1", normalized["wires"][0]["wire_id"]) + self.assertNotIn("start_instance_id", normalized["wires"][0]) + self.assertNotIn("end_instance_id", normalized["wires"][0]) + + def test_load_exchange_payload_detects_wire_properties_database_next_to_json(self): + _install_fake_modules() + sys.modules.pop("ExchangeBootstrap", None) + bootstrap = importlib.import_module("ExchangeBootstrap") + payload = { + "schema_version": "2.0", + "project_uuid": "project-1", + "devices": [], + "device_models": [], + "wires": [], + } + with tempfile.TemporaryDirectory() as temp_dir: path = Path(temp_dir) / "2d_to_3d.json" db_path = Path(temp_dir) / "project-local.sqlite" @@ -261,7 +387,7 @@ class ExchangeBootstrapWiringTest(unittest.TestCase): sys.modules.pop("ExchangeBootstrap", None) bootstrap = importlib.import_module("ExchangeBootstrap") payload = { - "schema_version": "1.2", + "schema_version": "2.0", "project_uuid": "project-1", "devices": [], "device_models": [], @@ -303,7 +429,6 @@ class ExchangeBootstrapWiringTest(unittest.TestCase): payload = { "project_uuid": "project-1", "devices": [], - "terminals": [], "device_models": [], "wires": [], "wire_style_database_path": "D:/project/project-local.sqlite", diff --git a/tests/python/freecad_exchange_device_import_fcstd_test.py b/tests/python/freecad_exchange_device_import_fcstd_test.py index 30dcf48..8e57b1e 100644 --- a/tests/python/freecad_exchange_device_import_fcstd_test.py +++ b/tests/python/freecad_exchange_device_import_fcstd_test.py @@ -444,14 +444,19 @@ class FcstdDeviceImportTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-1", - "instance_id": "instance-1", + "device_instance_id": "instance-1", "display_tag": "QF1", + "terminals": [ + { + "terminal_uuid": "terminal-1", + "element_uuid": "device-1", + } + ], } ], "device_models": [ { - "element_uuid": "device-1", + "device_instance_id": "instance-1", "resolved_model_path": str(model_path), } ], @@ -779,7 +784,8 @@ class FcstdDeviceImportTest(unittest.TestCase): } ) - self.assertEqual(1, report["imported_devices"]) + self.assertEqual(0, report["imported_devices"]) + self.assertEqual(1, report["pending_devices"]) root = doc.getObject(device_import.ROOT_GROUP_NAME) self.assertIsNotNone(root) devices = [ @@ -790,6 +796,410 @@ class FcstdDeviceImportTest(unittest.TestCase): self.assertEqual(1, len(devices)) self.assertEqual("device-inst-1", devices[0].QetInstanceId) self.assertEqual("element-a", devices[0].QetElementUuid) + self.assertEqual("Pending", devices[0].QetAssemblyState) + + def test_import_devices_from_payload_registers_new_devices_as_pending_without_importing_model(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "device.step" + model_path.write_text("fake step placeholder", encoding="utf-8") + _install_fake_freecad(None) + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + doc.recompute = lambda: None + device_import._ensure_document = lambda scene_path: doc + import_calls = [] + device_import._import_model_into_group = lambda *args, **kwargs: import_calls.append((args, kwargs)) + + report = device_import.import_devices_from_payload( + { + "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "device-inst-1", + "display_tag": "N600", + "terminals": [ + { + "terminal_uuid": "terminal-a", + "element_uuid": "element-a", + } + ], + } + ], + "device_models": [ + { + "device_instance_id": "device-inst-1", + "resolved_model_path": str(model_path), + } + ], + } + ) + + self.assertEqual([], import_calls) + self.assertEqual(0, report["imported_devices"]) + self.assertEqual(1, report["pending_devices"]) + root = doc.getObject(device_import.ROOT_GROUP_NAME) + devices = [ + obj + for obj in root.Group + if getattr(obj, "Name", "").startswith(device_import.DEVICE_GROUP_PREFIX) + ] + self.assertEqual(1, len(devices)) + self.assertEqual("Pending", devices[0].QetAssemblyState) + self.assertEqual(str(model_path), devices[0].QetResolvedModelPath) + self.assertEqual([], device_import._existing_model_objects(doc, devices[0])) + + def test_import_devices_from_payload_keeps_existing_pending_device_without_importing_model(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "device.step" + model_path.write_text("fake step placeholder", encoding="utf-8") + _install_fake_freecad(None) + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + doc.recompute = lambda: None + device_import._ensure_document = lambda scene_path: doc + root = device_import._ensure_root_group(doc, None, "project-1") + device_group, _created = device_import._ensure_device_group( + doc, + root, + "element-a", + "device-inst-1", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + device_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + import_calls = [] + device_import._import_model_into_group = lambda *args, **kwargs: import_calls.append((args, kwargs)) + + report = device_import.import_devices_from_payload( + { + "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "device-inst-1", + "display_tag": "N600", + "terminals": [ + { + "terminal_uuid": "terminal-a", + "element_uuid": "element-a", + } + ], + } + ], + "device_models": [ + { + "device_instance_id": "device-inst-1", + "resolved_model_path": str(model_path), + } + ], + } + ) + + self.assertEqual([], import_calls) + self.assertEqual(0, report["imported_devices"]) + self.assertEqual(1, report["pending_devices"]) + self.assertEqual("Pending", device_group.QetAssemblyState) + + def test_insert_pending_device_imports_model_and_marks_device_placed(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "device.step" + model_path.write_text("fake step placeholder", encoding="utf-8") + _install_fake_freecad(None) + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + root = device_import._ensure_root_group(doc, None, "project-1") + device_group, _created = device_import._ensure_device_group( + doc, + root, + "element-a", + "device-inst-1", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + device_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + import_calls = [] + + def fake_import_model(doc_arg, group_arg, path_arg, **kwargs): + import_calls.append((doc_arg, group_arg, path_arg, kwargs)) + body = doc_arg.addObject("Part::Feature", "DeviceBody") + group_arg.addObject(body) + return [body] + + device_import._import_model_into_group = fake_import_model + + result = device_import.insert_pending_device(doc, device_group) + + self.assertEqual(1, len(import_calls)) + self.assertEqual(str(model_path), import_calls[0][2]) + self.assertEqual(device_group, result["device"]) + self.assertEqual("Placed", device_group.QetAssemblyState) + self.assertEqual(["DeviceBody"], [obj.Name for obj in device_group.Group if obj.Name == "DeviceBody"]) + + def test_insert_pending_device_can_place_whole_device_on_mount_target(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "device.step" + model_path.write_text("fake step placeholder", encoding="utf-8") + _install_fake_freecad(None) + app = sys.modules["FreeCAD"] + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + root = device_import._ensure_root_group(doc, None, "project-1") + device_group, _created = device_import._ensure_device_group( + doc, + root, + "element-a", + "device-inst-1", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + device_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + mount_target = doc.addObject("App::Part", "MountingPlate") + mount_target.Label = "安装板" + mount_target.Placement = app.Placement(app.Vector(100, 200, 300), app.Rotation()) + device_import._ensure_string_property( + mount_target, + "QetCarrierKind", + "QET Mount", + "", + "mounting_plate", + ) + + def fake_import_model(doc_arg, group_arg, path_arg, **kwargs): + body = doc_arg.addObject("Part::Feature", "DeviceBody") + group_arg.addObject(body) + return [body] + + device_import._import_model_into_group = fake_import_model + + result = device_import.insert_pending_device( + doc, + device_group, + mount_target=mount_target, + ) + + self.assertEqual(device_group, result["device"]) + self.assertEqual("Placed", device_group.QetAssemblyState) + self.assertEqual(100.0, device_group.Placement.Base.x) + self.assertEqual(200.0, device_group.Placement.Base.y) + self.assertEqual(300.0, device_group.Placement.Base.z) + self.assertEqual("manual_insert", device_group.QetMountMode) + self.assertEqual("MountingPlate", device_group.QetMountHostName) + self.assertEqual("安装板", device_group.QetMountHostLabel) + self.assertEqual("mounting_plate", device_group.QetMountHostKind) + + def test_insert_pending_device_prefers_explicit_mount_placement_over_target_origin(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "device.step" + model_path.write_text("fake step placeholder", encoding="utf-8") + _install_fake_freecad(None) + app = sys.modules["FreeCAD"] + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + root = device_import._ensure_root_group(doc, None, "project-1") + device_group, _created = device_import._ensure_device_group( + doc, + root, + "element-a", + "device-inst-1", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + device_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + mount_target = doc.addObject("App::Part", "CabinetFace") + mount_target.Label = "柜体安装面" + mount_target.Placement = app.Placement(app.Vector(100, 200, 300), app.Rotation()) + explicit_placement = app.Placement(app.Vector(11, 22, 33), app.Rotation()) + + def fake_import_model(doc_arg, group_arg, path_arg, **kwargs): + body = doc_arg.addObject("Part::Feature", "DeviceBody") + group_arg.addObject(body) + return [body] + + device_import._import_model_into_group = fake_import_model + + device_import.insert_pending_device( + doc, + device_group, + mount_target=mount_target, + mount_placement=explicit_placement, + ) + + self.assertEqual(11.0, device_group.Placement.Base.x) + self.assertEqual(22.0, device_group.Placement.Base.y) + self.assertEqual(33.0, device_group.Placement.Base.z) + self.assertEqual("CabinetFace", device_group.QetMountHostName) + + def test_insert_pending_device_applies_mount_normal_offset_and_records_face_metadata(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "device.step" + model_path.write_text("fake step placeholder", encoding="utf-8") + _install_fake_freecad(None) + app = sys.modules["FreeCAD"] + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + root = device_import._ensure_root_group(doc, None, "project-1") + device_group, _created = device_import._ensure_device_group( + doc, + root, + "element-a", + "device-inst-1", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + device_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + mount_target = doc.addObject("App::Part", "CabinetFace") + mount_target.Label = "柜体安装面" + base_placement = app.Placement(app.Vector(10, 20, 30), app.Rotation()) + + def fake_import_model(doc_arg, group_arg, path_arg, **kwargs): + body = doc_arg.addObject("Part::Feature", "DeviceBody") + group_arg.addObject(body) + return [body] + + device_import._import_model_into_group = fake_import_model + + device_import.insert_pending_device( + doc, + device_group, + mount_target=mount_target, + mount_placement=base_placement, + mount_normal=app.Vector(0, 0, 1), + mount_offset_mm=5.0, + ) + + self.assertEqual(10.0, device_group.Placement.Base.x) + self.assertEqual(20.0, device_group.Placement.Base.y) + self.assertEqual(35.0, device_group.Placement.Base.z) + self.assertEqual("5.000000", device_group.QetMountOffsetMm) + self.assertIn('"z": 1.0', device_group.QetMountHostNormalJson) + + def test_register_commands_adds_insert_pending_device_command(self): + _install_fake_freecad(None) + gui = sys.modules["FreeCADGui"] + registered = {} + gui.addCommand = lambda name, command: registered.setdefault(name, command) + + device_import, _ = _reload_modules() + device_import.register_commands() + + self.assertIn("QET_Exchange_InsertPendingDevice", registered) + + def test_list_pending_devices_returns_device_groups_not_internal_model_children(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "jhd5.FCStd" + model_path.write_text("fake fcstd placeholder", encoding="utf-8") + _install_fake_freecad(None) + + device_import, _ = _reload_modules() + + doc = FakeDocument("QETScene") + root = device_import._ensure_root_group(doc, None, "project-1") + pending_group, _ = device_import._ensure_device_group( + doc, + root, + "element-n600", + "inst-n600", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + pending_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + internal_model = doc.addObject("Part::Feature", "JHD5_6_grey001") + pending_group.addObject(internal_model) + + placed_group, _ = device_import._ensure_device_group( + doc, + root, + "element-ta", + "inst-ta", + str(model_path), + "TAa", + 1, + ) + device_import._set_device_assembly_state( + placed_group, + device_import.ASSEMBLY_STATE_PLACED, + ) + + pending_devices = device_import.list_pending_devices(doc) + + self.assertEqual(1, len(pending_devices)) + self.assertEqual("inst-n600", pending_devices[0]["instance_id"]) + self.assertEqual("N600", pending_devices[0]["display_tag"]) + self.assertEqual(str(model_path), pending_devices[0]["resolved_model_path"]) + self.assertIs(pending_group, pending_devices[0]["device"]) + + def test_pending_device_panel_registers_command_and_formats_pending_rows(self): + with tempfile.TemporaryDirectory() as temp_dir: + model_path = Path(temp_dir) / "jhd5.FCStd" + model_path.write_text("fake fcstd placeholder", encoding="utf-8") + _install_fake_freecad(None) + gui = sys.modules["FreeCADGui"] + registered = {} + gui.addCommand = lambda name, command: registered.setdefault(name, command) + + device_import, _ = _reload_modules() + sys.modules.pop("PendingDeviceAssemblyPanel", None) + pending_panel = importlib.import_module("PendingDeviceAssemblyPanel") + + doc = FakeDocument("QETScene") + root = device_import._ensure_root_group(doc, None, "project-1") + pending_group, _ = device_import._ensure_device_group( + doc, + root, + "element-n600", + "inst-n600", + str(model_path), + "N600", + 0, + ) + device_import._set_device_assembly_state( + pending_group, + device_import.ASSEMBLY_STATE_PENDING, + ) + + rows = pending_panel.pending_device_rows(doc) + pending_panel.register_commands() + + self.assertEqual(1, len(rows)) + self.assertEqual("N600", rows[0]["display_tag"]) + self.assertIn("N600", rows[0]["display_text"]) + self.assertIn("jhd5.FCStd", rows[0]["display_text"]) + self.assertIn("QET_Exchange_OpenPendingDevicePanel", registered) def test_import_devices_from_payload_reuses_fcstd_source_document_within_one_sync(self): source = FakeDocument("TerminalSlice", r"D:\models\qet_terminal_slice.FCStd") @@ -841,7 +1251,8 @@ class FcstdDeviceImportTest(unittest.TestCase): "resolved_model_path": source.FileName, }, ], - } + }, + auto_insert_pending_devices=True, ) finally: device_import.os.path.isfile = original_isfile diff --git a/tests/python/freecad_exchange_terminal_import_template_slots_test.py b/tests/python/freecad_exchange_terminal_import_template_slots_test.py index 85055c9..92aa105 100644 --- a/tests/python/freecad_exchange_terminal_import_template_slots_test.py +++ b/tests/python/freecad_exchange_terminal_import_template_slots_test.py @@ -165,15 +165,13 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-a", - "instance_id": "instance-a", - } - ], - "terminals": [ - { - "terminal_uuid": "terminal-a", - "element_uuid": "device-a", - "instance_id": "instance-a", + "device_instance_id": "instance-a", + "terminals": [ + { + "terminal_uuid": "terminal-a", + "element_uuid": "device-a", + } + ], } ], } @@ -253,11 +251,10 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-a", - "instance_id": "instance-a", + "device_instance_id": "instance-a", + "terminals": [], } ], - "terminals": [], } ) @@ -326,6 +323,33 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): self.assertEqual(1, len(terminals)) self.assertEqual("terminal-a", terminals[0].QetTerminalUuid) + def test_import_rejects_legacy_top_level_terminals(self): + _install_fake_freecad() + terminal_import, _terminal_objects, device_import = _reload_modules() + + doc = FakeDocument() + device_import._ensure_document = lambda scene_path: doc + + with self.assertRaises(terminal_import.TerminalImportError): + terminal_import.import_terminals_from_payload( + { + "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "instance-a", + "terminals": [], + } + ], + "terminals": [ + { + "terminal_uuid": "terminal-a", + "element_uuid": "device-a", + "device_instance_id": "instance-a", + } + ], + } + ) + def test_import_synthesizes_missing_terminal_entries_from_wire_endpoints(self): _install_fake_freecad() terminal_import, terminal_objects, device_import = _reload_modules() @@ -367,19 +391,32 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): { "project_uuid": "project-1", "devices": [ - {"element_uuid": "device-a", "instance_id": "instance-a"}, - {"element_uuid": "device-b", "instance_id": "instance-b"}, + { + "device_instance_id": "instance-a", + "terminals": [ + { + "terminal_uuid": "known-a", + "element_uuid": "device-a", + } + ], + }, + { + "device_instance_id": "instance-b", + "terminals": [ + { + "terminal_uuid": "known-b", + "element_uuid": "device-b", + } + ], + }, ], - "terminals": [], "wires": [ { "wire_id": "wire-1", "start_element_uuid": "device-a", "start_terminal_uuid": "terminal-a", - "start_instance_id": "", "end_element_uuid": "device-b", "end_terminal_uuid": "terminal-b", - "end_instance_id": "", } ], } @@ -402,12 +439,12 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): ) ) - self.assertEqual(2, report["imported_terminals"]) + self.assertEqual(4, report["imported_terminals"]) self.assertEqual(2, report["synthesized_wire_endpoint_terminals"]) - self.assertEqual("terminal-a", start_terminals[0].QetTerminalUuid) - self.assertEqual("device-a", start_terminals[0].QetElementUuid) - self.assertEqual("terminal-b", end_terminals[0].QetTerminalUuid) - self.assertEqual("device-b", end_terminals[0].QetElementUuid) + start_by_uuid = {terminal.QetTerminalUuid: terminal for terminal in start_terminals} + end_by_uuid = {terminal.QetTerminalUuid: terminal for terminal in end_terminals} + self.assertEqual("device-a", start_by_uuid["terminal-a"].QetElementUuid) + self.assertEqual("device-b", end_by_uuid["terminal-b"].QetElementUuid) def test_import_reads_qet_terminals_embedded_in_devices(self): _install_fake_freecad() @@ -445,29 +482,24 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-a", - "instance_id": "instance-a", + "device_instance_id": "instance-a", "terminals": [ { "element_uuid": "device-a", - "instance_id": "instance-a", "terminal_uuid": "device-a:terminal-p1", "terminal_display": "P1", } ], } ], - "terminals": [], "wires": [ { "wire_id": "wire-1", "start_element_uuid": "device-a", "start_terminal_uuid": "device-a:terminal-p1", - "start_instance_id": "instance-a", "start_terminal_display": "P1", "end_element_uuid": "device-a", "end_terminal_uuid": "device-a:terminal-p1", - "end_instance_id": "instance-a", "end_terminal_display": "P1", } ], @@ -481,7 +513,7 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): terminals = terminal_objects.collect_terminal_objects(terminal_group) self.assertEqual(1, report["imported_terminals"]) - self.assertEqual(1, report["device_embedded_terminals"]) + self.assertEqual(0, report["device_embedded_terminals"]) self.assertEqual(0, report["synthesized_wire_endpoint_terminals"]) self.assertEqual(1, len(terminals)) self.assertEqual("device-a:terminal-p1", terminals[0].QetTerminalUuid) @@ -531,16 +563,20 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): { "project_uuid": "project-1", "devices": [ - {"element_uuid": "device-a", "instance_id": "instance-a"}, - {"element_uuid": "device-b", "instance_id": "instance-b"}, - ], - "terminals": [ { - "terminal_uuid": "terminal-a", - "element_uuid": "device-a", - "instance_id": "instance-b", - "terminal_display": "12", - } + "device_instance_id": "instance-a", + "terminals": [ + { + "terminal_uuid": "terminal-a", + "element_uuid": "device-a", + "terminal_display": "12", + } + ], + }, + { + "device_instance_id": "instance-b", + "terminals": [], + }, ], } ) @@ -630,26 +666,23 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-a", - "instance_id": "instance-a", + "device_instance_id": "instance-a", + "terminals": [ + { + "terminal_uuid": "terminal-p2", + "element_uuid": "device-a", + "slot_name_hint": "P2", + "terminal_label": "P2", + }, + { + "terminal_uuid": "terminal-p1", + "element_uuid": "device-a", + "slot_name_hint": "P1", + "terminal_label": "P1", + }, + ], } ], - "terminals": [ - { - "terminal_uuid": "terminal-p2", - "element_uuid": "device-a", - "instance_id": "instance-a", - "slot_name_hint": "P2", - "terminal_label": "P2", - }, - { - "terminal_uuid": "terminal-p1", - "element_uuid": "device-a", - "instance_id": "instance-a", - "slot_name_hint": "P1", - "terminal_label": "P1", - }, - ], } ) @@ -723,18 +756,16 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-a", - "instance_id": "instance-a", + "device_instance_id": "instance-a", + "terminals": [ + { + "terminal_uuid": "terminal-p1", + "element_uuid": "device-a", + "terminal_display": "P1", + }, + ], } ], - "terminals": [ - { - "terminal_uuid": "terminal-p1", - "element_uuid": "device-a", - "instance_id": "instance-a", - "terminal_display": "P1", - }, - ], } ) @@ -822,16 +853,14 @@ class TerminalImportTemplateSlotPolicyTest(unittest.TestCase): "project_uuid": "project-1", "devices": [ { - "element_uuid": "device-a", - "instance_id": "instance-a", - } - ], - "terminals": [ - { - "terminal_uuid": "terminal-real-p1", - "element_uuid": "device-a", - "instance_id": "instance-a", - "slot_name_hint": "P1", + "device_instance_id": "instance-a", + "terminals": [ + { + "terminal_uuid": "terminal-real-p1", + "element_uuid": "device-a", + "slot_name_hint": "P1", + } + ], } ], } diff --git a/tests/python/freecad_exchange_wiring_import_test.py b/tests/python/freecad_exchange_wiring_import_test.py index 3b1980c..3718ff2 100644 --- a/tests/python/freecad_exchange_wiring_import_test.py +++ b/tests/python/freecad_exchange_wiring_import_test.py @@ -113,6 +113,28 @@ class WiringImportTest(unittest.TestCase): terminal_objects.ensure_root_group(doc, "project-1") payload = { "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "instance-a", + "display_tag": "TAa", + "terminals": [ + { + "element_uuid": "device-a", + "terminal_uuid": "device-a:terminal-a", + } + ], + }, + { + "device_instance_id": "instance-b", + "display_tag": "PEN001", + "terminals": [ + { + "element_uuid": "device-b", + "terminal_uuid": "device-b:terminal-b", + } + ], + }, + ], "wires": [ { "wire_id": "wire-1", @@ -123,11 +145,9 @@ class WiringImportTest(unittest.TestCase): "net_uuid": "net-1", "group_uuid": "group-1", "start_element_uuid": "device-a", - "start_instance_id": "instance-a", "start_terminal_uuid": "device-a:terminal-a", "start_terminal_display": "A1", "end_element_uuid": "device-b", - "end_instance_id": "instance-b", "end_terminal_uuid": "device-b:terminal-b", "end_terminal_display": "B1", } @@ -153,8 +173,26 @@ class WiringImportTest(unittest.TestCase): payload = { "project_uuid": "project-1", "devices": [ - {"element_uuid": "device-a", "display_tag": "TAa"}, - {"element_uuid": "device-b", "display_tag": "PEN001"}, + { + "device_instance_id": "instance-a", + "display_tag": "TAa", + "terminals": [ + { + "element_uuid": "device-a", + "terminal_uuid": "device-a:terminal-a", + } + ], + }, + { + "device_instance_id": "instance-b", + "display_tag": "PEN001", + "terminals": [ + { + "element_uuid": "device-b", + "terminal_uuid": "device-b:terminal-b", + } + ], + }, ], "wires": [ { @@ -209,6 +247,50 @@ class WiringImportTest(unittest.TestCase): self.assertEqual("W001-updated", task_group.Group[0].QetWireMark) self.assertEqual("Routed", task_group.Group[0].RouteStatus) + def test_import_wire_tasks_maps_labels_from_nested_device_terminals(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, wiring_import = _reload_modules() + + doc = FakeDocument() + terminal_objects.ensure_root_group(doc, "project-1") + payload = { + "project_uuid": "project-1", + "devices": [ + { + "device_instance_id": "instance-qf1", + "display_tag": "QF1", + "terminals": [ + { + "element_uuid": "symbol-qf1-a", + "terminal_uuid": "terminal-a", + "terminal_display": "1", + }, + { + "element_uuid": "symbol-qf1-b", + "terminal_uuid": "terminal-b", + "terminal_display": "2", + }, + ], + } + ], + "wires": [ + { + "wire_id": "wire-1", + "start_element_uuid": "symbol-qf1-b", + "start_terminal_uuid": "terminal-b", + "start_terminal_display": "2", + "end_element_uuid": "symbol-qf1-a", + "end_terminal_uuid": "terminal-a", + "end_terminal_display": "1", + } + ], + } + + wiring_import.import_wire_tasks_from_payload(payload, doc) + + task = doc.getObject("QETWiring_01_Tasks").Group[0] + self.assertEqual("QF1:2 -> QF1:1", task.QetEndpointLabel) + def test_reimport_keeps_stale_wire_tasks_for_sync_marking(self): _install_fake_freecad() terminal_objects, wiring_objects, wiring_import = _reload_modules() diff --git a/tests/python/freecad_exchange_wiring_test.py b/tests/python/freecad_exchange_wiring_test.py index fa06c5d..5eddf26 100644 --- a/tests/python/freecad_exchange_wiring_test.py +++ b/tests/python/freecad_exchange_wiring_test.py @@ -158,7 +158,7 @@ class FakeDocument: def _reload_modules(): - for name in ["TerminalObjects", "WiringObjects", "ManualWiring", "ExchangeWriteBack"]: + for name in ["TerminalObjects", "WiringObjects", "ManualWiring", "ExchangeWriteBack", "DeviceImport"]: sys.modules.pop(name, None) import TerminalObjects import WiringObjects @@ -435,6 +435,81 @@ class WiringTest(unittest.TestCase): else: os.environ["QET_2D_TO_3D_JSON"] = old_json + def test_writeback_file_uses_v2_binding_field_names_only(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, _manual_wiring, write_back = _reload_modules() + + doc = FakeDocument() + root = terminal_objects.ensure_root_group(doc, "project-1") + device = doc.addObject("App::DocumentObjectGroup", "QETDevice_device_a") + root.addObject(device) + terminal_objects.ensure_string_property( + device, + "QetElementUuid", + "QET Exchange", + "Element UUID", + "device-a", + ) + terminal_objects.ensure_string_property( + device, + "QetInstanceId", + "QET Exchange", + "Instance ID", + "instance-a", + ) + terminal_group = terminal_objects.ensure_terminal_group( + doc, + device, + project_uuid="project-1", + instance_id="instance-a", + ) + terminal = terminal_objects.create_lcs_object(doc, "QETTerminal_A") + terminal_group.addObject(terminal) + terminal_objects.set_terminal_semantics( + terminal, + "project-1", + "device-a", + "terminal-a", + "terminal-instance-a", + label="A", + ) + + with tempfile.TemporaryDirectory() as tmp_dir: + output_path = Path(tmp_dir) / "3d_to_2d.json" + report = write_back.write_back_document( + doc, + scene_path=str(Path(tmp_dir) / "scene.FCStd"), + payload={"project_uuid": "project-1"}, + ) + payload = json.loads(output_path.read_text(encoding="utf-8")) + + self.assertEqual(str(output_path), report["output_path"]) + self.assertEqual("2.0", payload["schema_version"]) + self.assertEqual( + [{"element_uuid": "device-a", "device_instance_id": "instance-a"}], + payload["instances"], + ) + self.assertEqual( + [ + { + "terminal_uuid": "terminal-a", + "device_instance_id": "instance-a", + "terminal_instance_id": "terminal-instance-a", + } + ], + payload["terminals"], + ) + def keys_from(value): + if isinstance(value, dict): + for key, child in value.items(): + yield key + yield from keys_from(child) + elif isinstance(value, list): + for child in value: + yield from keys_from(child) + + self.assertNotIn("instance_id", set(keys_from(payload))) + def test_writeback_skips_local_terminal_bindings(self): _install_fake_freecad() terminal_objects, _wiring_objects, _manual_wiring, write_back = _reload_modules()