From 1a3c20b6307cbbdbbf14c5bce3a3cf94acf85537 Mon Sep 17 00:00:00 2001 From: Raserino Date: Wed, 3 Apr 2024 20:25:31 +0200 Subject: [PATCH 01/25] Option for closed path polygon sweeping --- tests/test_creation.py | 16 ++++++++++++ trimesh/creation.py | 59 ++++++++++++++++++++++++++++-------------- 2 files changed, 55 insertions(+), 20 deletions(-) diff --git a/tests/test_creation.py b/tests/test_creation.py index 647e51fb0..effa23bac 100644 --- a/tests/test_creation.py +++ b/tests/test_creation.py @@ -147,6 +147,7 @@ def test_path_sweep(self): vec = g.np.dot(rotmat, vec) poly = g.Polygon(perim) + # --- test open sweep # Create 3D path angles = g.np.linspace(0, 8 * g.np.pi, 1000) x = angles / 10.0 @@ -159,6 +160,21 @@ def test_path_sweep(self): mesh = g.trimesh.creation.sweep_polygon(poly, path, engine=engine) assert mesh.is_volume + # --- test closed sweep + # Create 3D path + angles = g.np.linspace(0, 2 * 0.999 * g.np.pi, 1000) + x = g.np.zeros((1000,)) + y = g.np.cos(angles) + z = g.np.sin(angles) + path_closed = g.np.c_[x, y, z] + + # Extrude + for engine in self.engines: + mesh = g.trimesh.creation.sweep_polygon( + poly, path_closed, closed=True, engine=engine + ) + assert mesh.is_volume + def test_annulus(self): """ Basic tests of annular cylinder creation diff --git a/trimesh/creation.py b/trimesh/creation.py index e194efb17..3ee8613da 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -206,20 +206,25 @@ def extrude_polygon( def sweep_polygon( - polygon: "Polygon", path: ArrayLike, angles: Optional[ArrayLike] = None, **kwargs -): + polygon: "Polygon", + path: ArrayLike, + closed: bool = False, + angles: Optional[ArrayLike] = None, + **kwargs, +) -> Trimesh: """ Extrude a 2D shapely polygon into a 3D mesh along an arbitrary 3D path. Doesn't handle sharp curvature well. - Parameters ---------- polygon : shapely.geometry.Polygon Profile to sweep along path path : (n, 3) float A path in 3D - angles : (n,) float + closed : bool + Whether to close the 2 ends of the path + angles : (n,) float Optional rotation angle relative to prior vertex at each vertex **kwargs : dict @@ -248,12 +253,16 @@ def sweep_polygon( # Compute 3D locations of those vertices verts_3d = np.c_[verts_2d, np.zeros(n)] verts_3d = tf.transform_points(verts_3d, tf_mat) - base_verts_3d = np.c_[base_verts_2d, np.zeros(len(base_verts_2d))] - base_verts_3d = tf.transform_points(base_verts_3d, tf_mat) - # keep matching sequence of vertices and 0- indexed faces - vertices = [base_verts_3d] - faces = [faces_2d] + if closed: + vertices = [] + faces = [] + else: + base_verts_3d = np.c_[base_verts_2d, np.zeros(len(base_verts_2d))] + base_verts_3d = tf.transform_points(base_verts_3d, tf_mat) + + vertices = [base_verts_3d] + faces = [faces_2d] # Compute plane normals for each turn -- # each turn induces a plane halfway between the two vectors @@ -286,6 +295,15 @@ def sweep_polygon( new_faces = [[i + n, (i + 1) % n, i] for i in range(n)] new_faces.extend([[(i - 1) % n + n, i + n, i] for i in range(n)]) + if i == len(norms) - 1 and closed: # add faces to close mesh + N = 2 * n * len(norms) # total number of vertices in mesh + new_faces.extend( + [[i + n - (N - n), (i + 1) % n + n, i + n] for i in range(n)] + ) + new_faces.extend( + [[(i - 1) % n + n - (N - n), i + n - (N - n), i + n] for i in range(n)] + ) + # save faces and vertices into a sequence faces.append(np.array(new_faces)) vertices.append(np.vstack((verts_3d, verts_3d_new))) @@ -294,20 +312,21 @@ def sweep_polygon( # do the main stack operation from a sequence to (n,3) arrays # doing one vstack provides a substantial speedup by - # avoiding a bunch of temporary allocations + # avoiding a bunch of temporary allocations vertices, faces = util.append_faces(vertices, faces) # Create final cap - x, y, z = util.generate_basis(path[-1] - path[-2]) - vecs = verts_3d - path[-1] - coords = np.c_[np.einsum("ij,j->i", vecs, x), np.einsum("ij,j->i", vecs, y)] - base_verts_2d, faces_2d = triangulate_polygon(Polygon(coords), **kwargs) - base_verts_3d = ( - np.einsum("i,j->ij", base_verts_2d[:, 0], x) - + np.einsum("i,j->ij", base_verts_2d[:, 1], y) - ) + path[-1] - faces = np.vstack((faces, faces_2d + len(vertices))) - vertices = np.vstack((vertices, base_verts_3d)) + if not closed: + x, y, z = util.generate_basis(path[-1] - path[-2]) + vecs = verts_3d - path[-1] + coords = np.c_[np.einsum("ij,j->i", vecs, x), np.einsum("ij,j->i", vecs, y)] + base_verts_2d, faces_2d = triangulate_polygon(Polygon(coords), **kwargs) + base_verts_3d = ( + np.einsum("i,j->ij", base_verts_2d[:, 0], x) + + np.einsum("i,j->ij", base_verts_2d[:, 1], y) + ) + path[-1] + faces = np.vstack((faces, faces_2d + len(vertices))) + vertices = np.vstack((vertices, base_verts_3d)) return Trimesh(vertices, faces) From 6266623cbcc24cef2df04f2198bb31d9489e83ff Mon Sep 17 00:00:00 2001 From: Lorenz Koehler Date: Thu, 4 Apr 2024 21:59:56 +0200 Subject: [PATCH 02/25] remove broken gmsh.isInitialized() check --- trimesh/interfaces/gmsh.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/trimesh/interfaces/gmsh.py b/trimesh/interfaces/gmsh.py index 00eed2ee6..983aaadaf 100644 --- a/trimesh/interfaces/gmsh.py +++ b/trimesh/interfaces/gmsh.py @@ -76,8 +76,7 @@ def load_gmsh(file_name, gmsh_args=None): raise ValueError("No import since no file was provided!") # if we initialize with sys.argv it could be anything - if not gmsh.isInitialized(): - gmsh.initialize() + gmsh.initialize() gmsh.option.setNumber("General.Terminal", 1) gmsh.model.add("Surface_Mesh_Generation") # loop through our numbered args which do things, stuff From 17ded387084a86ef249a67e9b1d133f30e7079e2 Mon Sep 17 00:00:00 2001 From: Lorenz Koehler Date: Thu, 4 Apr 2024 22:15:26 +0200 Subject: [PATCH 03/25] bump version number (patch) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e3e7906f0..72c047b5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = ["setuptools >= 61.0", "wheel"] [project] name = "trimesh" requires-python = ">=3.7" -version = "4.2.4" +version = "4.2.5" authors = [{name = "Michael Dawson-Haggerty", email = "mikedh@kerfed.com"}] license = {file = "LICENSE.md"} description = "Import, export, process, analyze and view triangular meshes." From 44f53dd03a5adb92f9ba35957f47c5b4717546d9 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 15:04:49 -0400 Subject: [PATCH 04/25] add version check for gmsh --- pyproject.toml | 1 + tests/test_gmsh.py | 11 ++- tests/test_step.py | 5 ++ trimesh/interfaces/gmsh.py | 135 +++++++++++++++++++++---------------- 4 files changed, 93 insertions(+), 59 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 72c047b5b..03b781607 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -102,6 +102,7 @@ test = [ "coveralls", "pyright", "ezdxf", + "gmsh>=4.12.1", "pytest", "pymeshlab", "pyinstrument", diff --git a/tests/test_gmsh.py b/tests/test_gmsh.py index 61797958f..2d49d5b53 100644 --- a/tests/test_gmsh.py +++ b/tests/test_gmsh.py @@ -23,11 +23,20 @@ def test_load(self): if gmsh is None: return r = g.trimesh.interfaces.gmsh.load_gmsh( - g.os.path.join(g.dir_models, "wrench.STEP") + g.os.path.join(g.dir_models, "featuretype.STEP") ) assert isinstance(r, dict) assert len(g.trimesh.Trimesh(**r).faces) > 0 + def test_to_volume(self): + if gmsh is None: + return + m = g.trimesh.creation.box() + + r = g.trimesh.interfaces.gmsh.to_volume(mesh=m) + + assert isinstance(r, bytes) + if __name__ == "__main__": g.trimesh.util.attach_to_log() diff --git a/tests/test_step.py b/tests/test_step.py index 0138d75de..33ed248b1 100644 --- a/tests/test_step.py +++ b/tests/test_step.py @@ -15,6 +15,11 @@ def test_basic(self): s = g.get_mesh("box_sides.STEP") assert len(s.geometry) == 10 + b = g.get_mesh("featuretype.STEP") + assert len(b.geometry) == 1 + m = next(iter(b.geometry.values())) + assert m.is_watertight + if __name__ == "__main__": g.trimesh.util.attach_to_log() diff --git a/trimesh/interfaces/gmsh.py b/trimesh/interfaces/gmsh.py index 983aaadaf..524a34fd7 100644 --- a/trimesh/interfaces/gmsh.py +++ b/trimesh/interfaces/gmsh.py @@ -1,7 +1,14 @@ +import os import tempfile import numpy as np +from ..constants import log + +# the old `gmsh-sdk` package is deprectated and +# has a different incompatible API! +_min_gmsh = (4, 12, 1) + def load_gmsh(file_name, gmsh_args=None): """ @@ -12,9 +19,9 @@ def load_gmsh(file_name, gmsh_args=None): For a list of possible options to pass to GMSH, check: http://gmsh.info/doc/texinfo/gmsh.html - An easy way to install the GMSH SDK is through the `gmsh-sdk` + An easy way to install the GMSH SDK is through the `gmsh` package on PyPi, which downloads and sets up gmsh: - >>> pip install gmsh-sdk + >>> pip install gmsh Parameters -------------- @@ -35,6 +42,13 @@ def load_gmsh(file_name, gmsh_args=None): # do import here to avoid very occasional segfaults import gmsh + # the deprecated `pip install gmsh-sdk` package has an entirely different API + # require a minimum version here + if tuple(int(i) for i in gmsh.__version__.split(".")) < _min_gmsh: + raise ImportError( + f"`gmsh.__version__ < {_min_gmsh}`: run `pip install --upgrade gmsh`" + ) + from ..exchange.stl import load_stl # start with default args for the meshing step @@ -75,8 +89,19 @@ def load_gmsh(file_name, gmsh_args=None): else: raise ValueError("No import since no file was provided!") - # if we initialize with sys.argv it could be anything - gmsh.initialize() + # hmmm + init = False + try: + if hasattr(gmsh, "isInitialized"): + init = gmsh.isInitialized() + elif hasattr(gmsh, "is_initialized"): + init = gmsh.is_initialized() + except BaseException: + log.debug("gmsh unexpected", exc_info=True) + + if not init: + gmsh.initialize() + gmsh.option.setNumber("General.Terminal", 1) gmsh.model.add("Surface_Mesh_Generation") # loop through our numbered args which do things, stuff @@ -113,13 +138,13 @@ def load_gmsh(file_name, gmsh_args=None): return kwargs -def to_volume(mesh, file_name=None, max_element=None, mesher_id=1): +def to_volume(mesh, file_type='msh', max_element=None, mesher_id=1) -> bytes: """ Convert a surface mesh to a 3D volume mesh generated by gmsh. - An easy way to install the gmsh sdk is through the gmsh-sdk + An easy way to install the gmsh sdk is through the gmsh package on pypi, which downloads and sets up gmsh: - pip install gmsh-sdk + pip install gmsh Algorithm details, although check gmsh docs for more information: The "Delaunay" algorithm is split into three separate steps. @@ -140,7 +165,7 @@ def to_volume(mesh, file_name=None, max_element=None, mesher_id=1): -------------- mesh : trimesh.Trimesh Surface mesh of input geometry - file_name : str or None + file_type Location to save output, in .msh (gmsh) or .bdf (Nastran) format max_element : float or None Maximum length of an element in the volume mesh @@ -157,6 +182,11 @@ def to_volume(mesh, file_name=None, max_element=None, mesher_id=1): # do import here to avoid very occasional segfaults import gmsh + if tuple(int(i) for i in gmsh.__version__.split(".")) < _min_gmsh: + raise ImportError( + f"`gmsh.__version__ < {_min_gmsh}`: run `pip install --upgrade gmsh`" + ) + # checks mesher selection if mesher_id not in [1, 3, 4, 7, 9, 10]: raise ValueError("unavailable mesher selected!") @@ -167,59 +197,48 @@ def to_volume(mesh, file_name=None, max_element=None, mesher_id=1): if max_element is None: max_element = np.sqrt(np.mean(mesh.area_faces)) - if file_name is not None: - # check extensions to make sure it is supported format - if not any( - file_name.lower().endswith(e) - for e in [".bdf", ".msh", ".inp", ".diff", ".mesh"] - ): - raise ValueError( - "Only Nastran (.bdf), Gmsh (.msh), Abaqus (*.inp), " - + "Diffpack (*.diff) and Inria Medit (*.mesh) formats " - + "are available!" - ) - # exports to disk for gmsh to read using a temp file - mesh_file = tempfile.NamedTemporaryFile(suffix=".stl", delete=False) - mesh_file.close() - mesh.export(mesh_file.name) + file_type = file_type.lower().strip('.') + if file_type not in ["bdf", "msh", "inp", "diff", "mesh"]: + raise ValueError( + "Only Nastran (`bdf`), Gmsh (`msh`), Abaqus (`inp`), " + + "Diffpack (`diff`) and Inria Medit (`mesh`) formats " + + "are available!") - # starts Gmsh Python API script - gmsh.initialize() - gmsh.option.setNumber("General.Terminal", 1) - gmsh.model.add("Nastran_stl") - - gmsh.merge(mesh_file.name) - dimtag = gmsh.model.getEntities()[0] - dim = dimtag[0] - tag = dimtag[1] - - surf_loop = gmsh.model.geo.addSurfaceLoop([tag]) - gmsh.model.geo.addVolume([surf_loop]) - gmsh.model.geo.synchronize() - - # We can then generate a 3D mesh... - gmsh.option.setNumber("Mesh.Algorithm3D", mesher_id) - gmsh.option.setNumber("Mesh.CharacteristicLengthMax", max_element) - gmsh.model.mesh.generate(3) - - dimtag2 = gmsh.model.getEntities()[1] - dim2 = dimtag2[0] - tag2 = dimtag2[1] - p2 = gmsh.model.addPhysicalGroup(dim2, [tag2]) - gmsh.model.setPhysicalName(dim, p2, "Nastran_bdf") - - data = None - # if file name is None, return msh data using a tempfile - if file_name is None: - out_data = tempfile.NamedTemporaryFile(suffix=".msh", delete=False) - # windows gets mad if two processes try to open the same file - out_data.close() - gmsh.write(out_data.name) - with open(out_data.name, "rb") as f: + # use a temporary directory for input and output + with tempfile.TemporaryDirectory() as D: + mesh_file = os.path.join(D, 'input.stl') + mesh.export(mesh_file) + + # starts Gmsh Python API script + gmsh.initialize() + gmsh.option.setNumber("General.Terminal", 1) + gmsh.model.add("Nastran_stl") + + gmsh.merge(mesh_file) + dimtag = gmsh.model.getEntities()[0] + dim = dimtag[0] + tag = dimtag[1] + + surf_loop = gmsh.model.geo.addSurfaceLoop([tag]) + gmsh.model.geo.addVolume([surf_loop]) + gmsh.model.geo.synchronize() + + # We can then generate a 3D mesh... + gmsh.option.setNumber("Mesh.Algorithm3D", mesher_id) + gmsh.option.setNumber("Mesh.CharacteristicLengthMax", max_element) + gmsh.model.mesh.generate(3) + + dimtag2 = gmsh.model.getEntities()[1] + dim2 = dimtag2[0] + tag2 = dimtag2[1] + p2 = gmsh.model.addPhysicalGroup(dim2, [tag2]) + gmsh.model.setPhysicalName(dim, p2, "Nastran_bdf") + + out_path = os.path.join(D, f'temp.{file_type}') + gmsh.write(out_path) + with open(out_path, "rb") as f: data = f.read() - else: - gmsh.write(file_name) # close up shop gmsh.finalize() From 9300a2bf83bc72057ef0d240a3ba996da3982b93 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 16:08:43 -0400 Subject: [PATCH 05/25] add test step model --- models/featuretype.STEP | 3083 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 3083 insertions(+) create mode 100644 models/featuretype.STEP diff --git a/models/featuretype.STEP b/models/featuretype.STEP new file mode 100644 index 000000000..c9a339e6c --- /dev/null +++ b/models/featuretype.STEP @@ -0,0 +1,3083 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION (( 'STEP AP214' ), + '1' ); +FILE_NAME ('featuretype.STEP', + '2014-10-03T02:30:11', + ( '' ), + ( '' ), + 'SwSTEP 2.0', + 'SolidWorks 2013', + '' ); +FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' )); +ENDSEC; + +DATA; +#1 = EDGE_CURVE ( 'NONE', #1685, #2945, #662, .T. ) ; +#2 = FACE_BOUND ( 'NONE', #288, .T. ) ; +#3 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, 0.6250000000000000000, 1.000000000000000000 ) ) ; +#4 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#5 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#6 = EDGE_CURVE ( 'NONE', #2382, #729, #1512, .T. ) ; +#7 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026637000, 0.2549102234176834900, 1.375000000000000000 ) ) ; +#8 = ADVANCED_FACE ( 'NONE', ( #2457 ), #2682, .F. ) ; +#9 = VERTEX_POINT ( 'NONE', #2455 ) ; +#10 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#11 = EDGE_CURVE ( 'NONE', #1734, #2105, #888, .T. ) ; +#12 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#13 = AXIS2_PLACEMENT_3D ( 'NONE', #1964, #2680, #2210 ) ; +#14 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#15 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#16 = CYLINDRICAL_SURFACE ( 'NONE', #609, 0.09999999999999992200 ) ; +#17 = ORIENTED_EDGE ( 'NONE', *, *, #2434, .F. ) ; +#18 = VECTOR ( 'NONE', #2300, 39.37007874015748100 ) ; +#19 = VECTOR ( 'NONE', #2331, 39.37007874015748100 ) ; +#20 = ORIENTED_EDGE ( 'NONE', *, *, #336, .T. ) ; +#21 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#22 = VECTOR ( 'NONE', #2611, 39.37007874015748100 ) ; +#23 = ORIENTED_EDGE ( 'NONE', *, *, #2845, .T. ) ; +#24 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#25 = CIRCLE ( 'NONE', #1872, 0.09999999999999989500 ) ; +#26 = EDGE_LOOP ( 'NONE', ( #2746, #2734, #296, #996 ) ) ; +#27 = CARTESIAN_POINT ( 'NONE', ( -1.340750000000000100, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#28 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.4999999999999996700 ) ) ; +#29 = VECTOR ( 'NONE', #2485, 39.37007874015748100 ) ; +#30 = VERTEX_POINT ( 'NONE', #1770 ) ; +#31 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#32 = PRESENTATION_STYLE_ASSIGNMENT (( #2151 ) ) ; +#33 = ORIENTED_EDGE ( 'NONE', *, *, #1030, .F. ) ; +#34 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, -0.1318487067688302900, 1.375000000000000000 ) ) ; +#35 = CIRCLE ( 'NONE', #1705, 0.2187499999999999400 ) ; +#36 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#37 = EDGE_CURVE ( 'NONE', #1946, #371, #1800, .T. ) ; +#38 = ADVANCED_FACE ( 'NONE', ( #738 ), #2146, .F. ) ; +#39 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#40 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#41 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.2060549223287785900, 1.375000000000000000 ) ) ; +#42 = AXIS2_PLACEMENT_3D ( 'NONE', #2435, #1257, #1751 ) ; +#43 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#44 = VERTEX_POINT ( 'NONE', #115 ) ; +#45 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'featuretype', ( #551, #390 ), #2086 ) ; +#46 = CARTESIAN_POINT ( 'NONE', ( 0.9092499999999998900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#47 = FACE_OUTER_BOUND ( 'NONE', #2995, .T. ) ; +#48 = EDGE_CURVE ( 'NONE', #1802, #59, #2061, .T. ) ; +#49 = AXIS2_PLACEMENT_3D ( 'NONE', #575, #330, #1258 ) ; +#50 = EDGE_CURVE ( 'NONE', #997, #1793, #1281, .T. ) ; +#51 = CIRCLE ( 'NONE', #2659, 0.1250000000000000300 ) ; +#52 = CYLINDRICAL_SURFACE ( 'NONE', #1991, 0.1249999999999999000 ) ; +#53 = ORIENTED_EDGE ( 'NONE', *, *, #1064, .F. ) ; +#54 = ORIENTED_EDGE ( 'NONE', *, *, #532, .T. ) ; +#55 = CIRCLE ( 'NONE', #2414, 0.1330000000000002000 ) ; +#56 = ADVANCED_FACE ( 'NONE', ( #2422 ), #2259, .F. ) ; +#57 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#58 = FACE_BOUND ( 'NONE', #129, .T. ) ; +#59 = VERTEX_POINT ( 'NONE', #2051 ) ; +#60 = ORIENTED_EDGE ( 'NONE', *, *, #1690, .T. ) ; +#61 = ORIENTED_EDGE ( 'NONE', *, *, #1395, .T. ) ; +#62 = EDGE_LOOP ( 'NONE', ( #2150, #1546, #2307, #1683 ) ) ; +#63 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#64 = CYLINDRICAL_SURFACE ( 'NONE', #2691, 0.2187499999999999400 ) ; +#65 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.174999999999999800 ) ) ; +#66 = CARTESIAN_POINT ( 'NONE', ( 1.999999999999998900, -1.250000000000000000, 0.0000000000000000000 ) ) ; +#67 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#68 = EDGE_CURVE ( 'NONE', #1497, #691, #2355, .T. ) ; +#69 = AXIS2_PLACEMENT_3D ( 'NONE', #1399, #3002, #1613 ) ; +#70 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#71 = FACE_BOUND ( 'NONE', #1781, .T. ) ; +#72 = ADVANCED_FACE ( 'NONE', ( #2753 ), #1032, .F. ) ; +#73 = AXIS2_PLACEMENT_3D ( 'NONE', #454, #233, #3012 ) ; +#74 = LINE ( 'NONE', #1615, #1879 ) ; +#75 = ORIENTED_EDGE ( 'NONE', *, *, #690, .T. ) ; +#76 = CARTESIAN_POINT ( 'NONE', ( -2.465749999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#77 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#78 = ORIENTED_EDGE ( 'NONE', *, *, #1297, .T. ) ; +#79 = CARTESIAN_POINT ( 'NONE', ( -3.161825413516036900, 0.6874999999999995600, 1.000000000000000000 ) ) ; +#80 = VERTEX_POINT ( 'NONE', #151 ) ; +#81 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#82 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#83 = AXIS2_PLACEMENT_3D ( 'NONE', #1296, #1763, #833 ) ; +#84 = PLANE ( 'NONE', #815 ) ; +#85 = LINE ( 'NONE', #420, #2813 ) ; +#86 = ORIENTED_EDGE ( 'NONE', *, *, #1698, .F. ) ; +#87 = VECTOR ( 'NONE', #1529, 39.37007874015748100 ) ; +#88 = LINE ( 'NONE', #476, #678 ) ; +#89 = ORIENTED_EDGE ( 'NONE', *, *, #2904, .T. ) ; +#90 = ORIENTED_EDGE ( 'NONE', *, *, #768, .F. ) ; +#91 = LINE ( 'NONE', #472, #1822 ) ; +#92 = ORIENTED_EDGE ( 'NONE', *, *, #2567, .F. ) ; +#93 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#94 = EDGE_LOOP ( 'NONE', ( #1974, #317 ) ) ; +#95 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279700, -0.1318487067688303100, 1.375000000000000000 ) ) ; +#96 = ORIENTED_EDGE ( 'NONE', *, *, #2474, .F. ) ; +#97 = CARTESIAN_POINT ( 'NONE', ( 2.227291815900829300, -0.4188565208705536900, 0.6250000000000000000 ) ) ; +#98 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#99 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#100 = EDGE_CURVE ( 'NONE', #2476, #2013, #1577, .T. ) ; +#101 = CIRCLE ( 'NONE', #49, 0.1249999999999999000 ) ; +#102 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#103 = ORIENTED_EDGE ( 'NONE', *, *, #2862, .F. ) ; +#104 = ORIENTED_EDGE ( 'NONE', *, *, #1522, .T. ) ; +#105 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#106 = EDGE_LOOP ( 'NONE', ( #2673, #259, #473, #914, #401, #2450, #1244, #2211, #2175, #2787, #1537, #2974 ) ) ; +#107 = CARTESIAN_POINT ( 'NONE', ( 2.526213591511189200, -0.08733638245144770300, 0.6250000000000000000 ) ) ; +#108 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#109 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#110 = ORIENTED_EDGE ( 'NONE', *, *, #2383, .F. ) ; +#111 = VECTOR ( 'NONE', #1545, 39.37007874015748100 ) ; +#112 = EDGE_CURVE ( 'NONE', #836, #1548, #258, .T. ) ; +#113 = AXIS2_PLACEMENT_3D ( 'NONE', #1263, #539, #1713 ) ; +#114 = EDGE_CURVE ( 'NONE', #2919, #2359, #2453, .T. ) ; +#115 = CARTESIAN_POINT ( 'NONE', ( -0.2157500000000000300, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#116 = CARTESIAN_POINT ( 'NONE', ( 2.500000003366624800, 0.4375503453205060200, 0.8124999999999998900 ) ) ; +#117 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979653500, 0.5624999999999996700, 1.000000000000000000 ) ) ; +#118 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#119 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.000000000000000000 ) ) ; +#120 = VERTEX_POINT ( 'NONE', #1101 ) ; +#121 = EDGE_CURVE ( 'NONE', #2945, #2282, #2992, .T. ) ; +#122 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#123 = VECTOR ( 'NONE', #2739, 39.37007874015748100 ) ; +#124 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.174999999999999800 ) ) ; +#125 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 1.250000000000000000, 0.4999999999999996100 ) ) ; +#126 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, -0.1318487067688302900, 1.174999999999999800 ) ) ; +#127 = LINE ( 'NONE', #3004, #2235 ) ; +#128 = ORIENTED_EDGE ( 'NONE', *, *, #2541, .F. ) ; +#129 = EDGE_LOOP ( 'NONE', ( #1470, #1620 ) ) ; +#130 = LINE ( 'NONE', #1689, #2555 ) ; +#131 = FACE_OUTER_BOUND ( 'NONE', #1288, .T. ) ; +#132 = ORIENTED_EDGE ( 'NONE', *, *, #1010, .F. ) ; +#133 = ORIENTED_EDGE ( 'NONE', *, *, #559, .T. ) ; +#134 = ORIENTED_EDGE ( 'NONE', *, *, #671, .T. ) ; +#135 = ORIENTED_EDGE ( 'NONE', *, *, #958, .F. ) ; +#136 = ORIENTED_EDGE ( 'NONE', *, *, #1159, .F. ) ; +#137 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, 0.6250000000000000000, 1.375000000000000000 ) ) ; +#138 = VECTOR ( 'NONE', #1245, 39.37007874015748100 ) ; +#139 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000003200, 1.000000000000000000, 1.000000000000000000 ) ) ; +#140 = ORIENTED_EDGE ( 'NONE', *, *, #2244, .T. ) ; +#141 = EDGE_CURVE ( 'NONE', #2233, #2444, #2826, .T. ) ; +#142 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#143 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#144 = CIRCLE ( 'NONE', #855, 0.2187499999999999400 ) ; +#145 = AXIS2_PLACEMENT_3D ( 'NONE', #2021, #1373, #180 ) ; +#146 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.6875000000000001100, 0.8125000000000000000 ) ) ; +#147 = LINE ( 'NONE', #2914, #307 ) ; +#148 = ORIENTED_EDGE ( 'NONE', *, *, #2796, .F. ) ; +#149 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#150 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#151 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, 0.2500000000000002200, 1.000000000000000000 ) ) ; +#152 = EDGE_CURVE ( 'NONE', #326, #680, #2386, .T. ) ; +#153 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.601555123121432500E-016, 0.0000000000000000000 ) ) ; +#154 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#155 = EDGE_CURVE ( 'NONE', #645, #791, #2961, .T. ) ; +#156 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#157 = ORIENTED_EDGE ( 'NONE', *, *, #1289, .T. ) ; +#158 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#159 = ORIENTED_EDGE ( 'NONE', *, *, #2383, .T. ) ; +#160 = VECTOR ( 'NONE', #1674, 39.37007874015748100 ) ; +#161 = VERTEX_POINT ( 'NONE', #2707 ) ; +#162 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#163 = VECTOR ( 'NONE', #1737, 39.37007874015748100 ) ; +#164 = ORIENTED_EDGE ( 'NONE', *, *, #1593, .F. ) ; +#165 = CYLINDRICAL_SURFACE ( 'NONE', #1992, 0.1330000000000002000 ) ; +#166 = EDGE_CURVE ( 'NONE', #1343, #1273, #658, .T. ) ; +#167 = ORIENTED_EDGE ( 'NONE', *, *, #2338, .T. ) ; +#168 = ORIENTED_EDGE ( 'NONE', *, *, #2072, .T. ) ; +#169 = FACE_OUTER_BOUND ( 'NONE', #277, .T. ) ; +#170 = ORIENTED_EDGE ( 'NONE', *, *, #1552, .F. ) ; +#171 = ORIENTED_EDGE ( 'NONE', *, *, #1211, .T. ) ; +#172 = ORIENTED_EDGE ( 'NONE', *, *, #1327, .T. ) ; +#173 = EDGE_CURVE ( 'NONE', #653, #2678, #959, .T. ) ; +#174 = VECTOR ( 'NONE', #570, 39.37007874015748100 ) ; +#175 = VERTEX_POINT ( 'NONE', #1043 ) ; +#176 = ORIENTED_EDGE ( 'NONE', *, *, #68, .F. ) ; +#177 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026637200, 0.2549102234176834900, 1.174999999999999800 ) ) ; +#178 = CARTESIAN_POINT ( 'NONE', ( 2.294434124949071000, 0.1559617977120215700, 0.6250000000000000000 ) ) ; +#179 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.731847993664262700E-016, -0.0000000000000000000 ) ) ; +#180 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#181 = ORIENTED_EDGE ( 'NONE', *, *, #2244, .F. ) ; +#182 = ADVANCED_FACE ( 'NONE', ( #1733 ), #84, .F. ) ; +#183 = VECTOR ( 'NONE', #2601, 39.37007874015748100 ) ; +#184 = EDGE_LOOP ( 'NONE', ( #1907, #520 ) ) ; +#185 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#186 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#187 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979653700, 0.6874999999999998900, 1.000000000000000000 ) ) ; +#188 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000003200, -1.000000000000000000, 1.000000000000000000 ) ) ; +#189 = AXIS2_PLACEMENT_3D ( 'NONE', #1897, #24, #1850 ) ; +#190 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#191 = EDGE_LOOP ( 'NONE', ( #2237, #2598, #688, #1339 ) ) ; +#192 = ADVANCED_FACE ( 'NONE', ( #2215 ), #1765, .F. ) ; +#193 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 1.000000000000000000 ) ) ; +#194 = EDGE_CURVE ( 'NONE', #2278, #852, #1174, .T. ) ; +#195 = ORIENTED_EDGE ( 'NONE', *, *, #1075, .F. ) ; +#196 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250981300, 0.1874999999999998300, 0.5000000000000000000 ) ) ; +#197 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979653500, 0.5624999999999996700, 0.8125000000000000000 ) ) ; +#198 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#199 = LINE ( 'NONE', #125, #1021 ) ; +#200 = FACE_OUTER_BOUND ( 'NONE', #1036, .T. ) ; +#201 = CIRCLE ( 'NONE', #1078, 0.09999999999999989500 ) ; +#202 = ORIENTED_EDGE ( 'NONE', *, *, #1425, .F. ) ; +#203 = VERTEX_POINT ( 'NONE', #352 ) ; +#204 = FACE_OUTER_BOUND ( 'NONE', #2624, .T. ) ; +#205 = AXIS2_PLACEMENT_3D ( 'NONE', #1644, #1218, #1732 ) ; +#206 = FACE_BOUND ( 'NONE', #1220, .T. ) ; +#207 = EDGE_LOOP ( 'NONE', ( #2912, #1829, #720, #90, #75, #1060, #2336, #2508, #2099, #461, #2841, #1480, #2600, #2558, #801, #719 ) ) ; +#208 = EDGE_LOOP ( 'NONE', ( #1905, #167, #444, #571 ) ) ; +#209 = VERTEX_POINT ( 'NONE', #2918 ) ; +#210 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060131000, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#211 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.6250000000000000000, 1.375000000000000000 ) ) ; +#212 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279400, 0.1318487067688303100, 1.174999999999999800 ) ) ; +#213 = ORIENTED_EDGE ( 'NONE', *, *, #2338, .F. ) ; +#214 = EDGE_CURVE ( 'NONE', #2502, #2605, #589, .T. ) ; +#215 = VECTOR ( 'NONE', #2931, 39.37007874015748100 ) ; +#216 = AXIS2_PLACEMENT_3D ( 'NONE', #1282, #1760, #2262 ) ; +#217 = ADVANCED_FACE ( 'NONE', ( #556 ), #809, .F. ) ; +#218 = AXIS2_PLACEMENT_3D ( 'NONE', #2697, #109, #594 ) ; +#219 = ORIENTED_EDGE ( 'NONE', *, *, #690, .F. ) ; +#220 = VERTEX_POINT ( 'NONE', #1747 ) ; +#221 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 1.000000000000000000 ) ) ; +#222 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000100, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#223 = PLANE ( 'NONE', #561 ) ; +#224 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#225 = FACE_OUTER_BOUND ( 'NONE', #2101, .T. ) ; +#226 = EDGE_LOOP ( 'NONE', ( #263, #558, #89, #2928 ) ) ; +#227 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#228 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#229 = EDGE_CURVE ( 'NONE', #1508, #2047, #1828, .T. ) ; +#230 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026637200, 0.3549102234176833600, 1.375000000000000000 ) ) ; +#231 = ADVANCED_FACE ( 'NONE', ( #2280 ), #477, .F. ) ; +#232 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#233 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#234 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 0.8125000000000000000 ) ) ; +#235 = ORIENTED_EDGE ( 'NONE', *, *, #2938, .F. ) ; +#236 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#237 = ORIENTED_EDGE ( 'NONE', *, *, #2706, .F. ) ; +#238 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 1.250000000000000000, 1.000000000000000000 ) ) ; +#239 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#240 = CIRCLE ( 'NONE', #1557, 0.09999999999999989500 ) ; +#241 = ORIENTED_EDGE ( 'NONE', *, *, #2577, .T. ) ; +#242 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#243 = CIRCLE ( 'NONE', #413, 0.1250000000000000300 ) ; +#244 = ORIENTED_EDGE ( 'NONE', *, *, #1582, .T. ) ; +#245 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#246 = CIRCLE ( 'NONE', #2866, 0.1330000000000002000 ) ; +#247 = EDGE_LOOP ( 'NONE', ( #1380, #1326, #387, #1209 ) ) ; +#248 = VERTEX_POINT ( 'NONE', #2890 ) ; +#249 = VECTOR ( 'NONE', #1189, 39.37007874015748100 ) ; +#250 = VERTEX_POINT ( 'NONE', #2874 ) ; +#251 = ADVANCED_FACE ( 'NONE', ( #329 ), #1098, .F. ) ; +#252 = FILL_AREA_STYLE_COLOUR ( '', #2981 ) ; +#253 = ORIENTED_EDGE ( 'NONE', *, *, #1048, .T. ) ; +#254 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#255 = ORIENTED_EDGE ( 'NONE', *, *, #812, .F. ) ; +#256 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250981300, 0.1874999999999998300, 0.5000000000000000000 ) ) ; +#257 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#258 = LINE ( 'NONE', #1814, #29 ) ; +#259 = ORIENTED_EDGE ( 'NONE', *, *, #141, .T. ) ; +#260 = VECTOR ( 'NONE', #1932, 39.37007874015748100 ) ; +#261 = VERTEX_POINT ( 'NONE', #2407 ) ; +#262 = PLANE ( 'NONE', #2452 ) ; +#263 = ORIENTED_EDGE ( 'NONE', *, *, #981, .F. ) ; +#264 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) ); +#265 = EDGE_CURVE ( 'NONE', #956, #209, #1212, .T. ) ; +#266 = LINE ( 'NONE', #2195, #1774 ) ; +#267 = ADVANCED_FACE ( 'NONE', ( #1471 ), #2026, .F. ) ; +#268 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, 0.2060549223287782800, 1.375000000000000000 ) ) ; +#269 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#270 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#271 = ORIENTED_EDGE ( 'NONE', *, *, #315, .F. ) ; +#272 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, -0.2499999999999998100, 1.000000000000000000 ) ) ; +#273 = EDGE_CURVE ( 'NONE', #1685, #963, #408, .T. ) ; +#274 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2998 ) ) ; +#275 = EDGE_CURVE ( 'NONE', #2579, #2152, #775, .T. ) ; +#276 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#277 = EDGE_LOOP ( 'NONE', ( #475, #2681, #913, #1550 ) ) ; +#278 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#279 = CIRCLE ( 'NONE', #2003, 0.2187500000000000800 ) ; +#280 = CIRCLE ( 'NONE', #1616, 0.09999999999999992200 ) ; +#281 = VECTOR ( 'NONE', #2777, 39.37007874015748100 ) ; +#282 = ORIENTED_EDGE ( 'NONE', *, *, #1659, .F. ) ; +#283 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060137900, 0.3549102234176832500, 1.174999999999999800 ) ) ; +#284 = VECTOR ( 'NONE', #102, 39.37007874015748100 ) ; +#285 = CARTESIAN_POINT ( 'NONE', ( 1.346749999999999700, 1.000000000000000000, 1.000000000000000000 ) ) ; +#286 = CIRCLE ( 'NONE', #1199, 0.1330000000000002600 ) ; +#287 = ORIENTED_EDGE ( 'NONE', *, *, #1443, .F. ) ; +#288 = EDGE_LOOP ( 'NONE', ( #2911, #1889 ) ) ; +#290 = EDGE_LOOP ( 'NONE', ( #1242, #148, #2304, #1791 ) ) ; +#289 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250981300, 0.6874999999999998900, 1.000000000000000000 ) ) ; +#291 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#292 = VECTOR ( 'NONE', #3015, 39.37007874015748100 ) ; +#293 = PLANE ( 'NONE', #973 ) ; +#294 = EDGE_CURVE ( 'NONE', #2047, #2579, #2565, .T. ) ; +#295 = ORIENTED_EDGE ( 'NONE', *, *, #2797, .F. ) ; +#296 = ORIENTED_EDGE ( 'NONE', *, *, #1270, .T. ) ; +#297 = AXIS2_PLACEMENT_3D ( 'NONE', #2764, #2077, #664 ) ; +#298 = ORIENTED_EDGE ( 'NONE', *, *, #2690, .T. ) ; +#299 = ORIENTED_EDGE ( 'NONE', *, *, #1846, .T. ) ; +#300 = ADVANCED_FACE ( 'NONE', ( #698 ), #2189, .F. ) ; +#301 = AXIS2_PLACEMENT_3D ( 'NONE', #1358, #3001, #2320 ) ; +#302 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#303 = FACE_OUTER_BOUND ( 'NONE', #2830, .T. ) ; +#304 = PRODUCT_CONTEXT ( 'NONE', #478, 'mechanical' ) ; +#305 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#306 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#307 = VECTOR ( 'NONE', #2721, 39.37007874015748100 ) ; +#308 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#310 = ADVANCED_FACE ( 'NONE', ( #1985 ), #776, .F. ) ; +#311 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979654000, -0.6875000000000001100, 0.8125000000000000000 ) ) ; +#312 = VERTEX_POINT ( 'NONE', #1721 ) ; +#313 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#314 = CARTESIAN_POINT ( 'NONE', ( -0.1300000000000003100, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#315 = EDGE_CURVE ( 'NONE', #1390, #1439, #1350, .T. ) ; +#316 = VECTOR ( 'NONE', #3011, 39.37007874015748100 ) ; +#317 = ORIENTED_EDGE ( 'NONE', *, *, #981, .T. ) ; +#318 = VECTOR ( 'NONE', #1602, 39.37007874015748100 ) ; +#319 = ORIENTED_EDGE ( 'NONE', *, *, #48, .F. ) ; +#320 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250980800, -0.1875000000000002500, 1.000000000000000000 ) ) ; +#321 = CARTESIAN_POINT ( 'NONE', ( -3.161825413516036900, 0.6874999999999995600, 0.5000000000000000000 ) ) ; +#322 = CIRCLE ( 'NONE', #668, 0.1330000000000005100 ) ; +#323 = VERTEX_POINT ( 'NONE', #845 ) ; +#324 = EDGE_CURVE ( 'NONE', #2885, #1827, #885, .T. ) ; +#325 = CIRCLE ( 'NONE', #1680, 0.1330000000000004800 ) ; +#326 = VERTEX_POINT ( 'NONE', #2906 ) ; +#327 = VERTEX_POINT ( 'NONE', #2423 ) ; +#328 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.000000000000000000 ) ) ; +#329 = FACE_OUTER_BOUND ( 'NONE', #2342, .T. ) ; +#330 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#331 = ORIENTED_EDGE ( 'NONE', *, *, #1142, .T. ) ; +#332 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#333 = ORIENTED_EDGE ( 'NONE', *, *, #100, .F. ) ; +#334 = VECTOR ( 'NONE', #851, 39.37007874015748100 ) ; +#335 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#336 = EDGE_CURVE ( 'NONE', #2487, #30, #1510, .T. ) ; +#337 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#338 = CARTESIAN_POINT ( 'NONE', ( -0.2157500000000000800, -1.000000000000000000, 1.000000000000000000 ) ) ; +#339 = EDGE_CURVE ( 'NONE', #1497, #2487, #1397, .T. ) ; +#340 = AXIS2_PLACEMENT_3D ( 'NONE', #1890, #1227, #722 ) ; +#341 = CIRCLE ( 'NONE', #2473, 0.2187499999999999400 ) ; +#342 = CARTESIAN_POINT ( 'NONE', ( -0.9032500000000000000, -1.000000000000000000, 1.000000000000000000 ) ) ; +#343 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#344 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, 0.2060549223287783100, 1.174999999999999800 ) ) ; +#345 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060137900, 0.3549102234176832500, 1.375000000000000000 ) ) ; +#346 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#347 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#348 = ORIENTED_EDGE ( 'NONE', *, *, #2576, .F. ) ; +#349 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.6875000000000000000, 1.000000000000000000 ) ) ; +#350 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, 0.2060549223287782800, 1.174999999999999800 ) ) ; +#351 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 1.250000000000000000, 0.4999999999999996100 ) ) ; +#352 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, -0.6875000000000003300, 0.5000000000000000000 ) ) ; +#353 = AXIS2_PLACEMENT_3D ( 'NONE', #2615, #2843, #2042 ) ; +#354 = CIRCLE ( 'NONE', #1349, 0.1330000000000004800 ) ; +#355 = VECTOR ( 'NONE', #1153, 39.37007874015748100 ) ; +#356 = ORIENTED_EDGE ( 'NONE', *, *, #2284, .F. ) ; +#357 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#358 = VECTOR ( 'NONE', #2585, 39.37007874015748100 ) ; +#359 = VECTOR ( 'NONE', #2962, 39.37007874015748100 ) ; +#360 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#361 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#362 = ORIENTED_EDGE ( 'NONE', *, *, #694, .T. ) ; +#363 = CARTESIAN_POINT ( 'NONE', ( 2.262952316657397900, 0.4790639956390647100, 0.8124999999999998900 ) ) ; +#364 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#365 = EDGE_LOOP ( 'NONE', ( #1044, #2896, #92, #689 ) ) ; +#366 = VERTEX_POINT ( 'NONE', #314 ) ; +#367 = EDGE_CURVE ( 'NONE', #323, #1117, #101, .T. ) ; +#368 = VECTOR ( 'NONE', #1507, 39.37007874015748100 ) ; +#369 = EDGE_LOOP ( 'NONE', ( #1982, #1745 ) ) ; +#370 = ORIENTED_EDGE ( 'NONE', *, *, #1893, .T. ) ; +#371 = VERTEX_POINT ( 'NONE', #2898 ) ; +#372 = ORIENTED_EDGE ( 'NONE', *, *, #2690, .F. ) ; +#373 = AXIS2_PLACEMENT_3D ( 'NONE', #156, #1555, #2004 ) ; +#374 = CARTESIAN_POINT ( 'NONE', ( 0.2217499999999999200, -1.000000000000000000, 1.000000000000000000 ) ) ; +#375 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, 0.2060549223287782800, 1.375000000000000000 ) ) ; +#376 = SURFACE_STYLE_FILL_AREA ( #1891 ) ; +#377 = VECTOR ( 'NONE', #389, 39.37007874015748100 ) ; +#378 = EDGE_CURVE ( 'NONE', #2127, #1685, #1874, .T. ) ; +#379 = AXIS2_PLACEMENT_3D ( 'NONE', #1708, #1018, #2425 ) ; +#380 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#381 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #1303, #628, #2703, #1286, #2941, #616, #2475, #1096, #1797, #2925 ), + .UNSPECIFIED., .F., .F., + ( 4, 1, 1, 1, 1, 1, 1, 4 ), + ( 0.1804171056932548400, 0.2574214255684045300, 0.3271167815832054000, 0.3787956272272490800, 0.4753932694299508600, 0.5595206077257001100, 0.6412861705332345600, 0.6905092016622677000 ), + .UNSPECIFIED. ) ; +#382 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000004500, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#383 = DIRECTION ( 'NONE', ( -0.7071067811865486800, 0.0000000000000000000, -0.7071067811865463500 ) ) ; +#384 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#385 = VERTEX_POINT ( 'NONE', #1251 ) ; +#386 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#387 = ORIENTED_EDGE ( 'NONE', *, *, #2932, .T. ) ; +#388 = EDGE_CURVE ( 'NONE', #1748, #409, #993, .T. ) ; +#389 = DIRECTION ( 'NONE', ( 1.986798540846736800E-016, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#390 = AXIS2_PLACEMENT_3D ( 'NONE', #457, #2620, #1933 ) ; +#391 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#392 = CIRCLE ( 'NONE', #1518, 0.1330000000000002000 ) ; +#393 = VECTOR ( 'NONE', #1295, 39.37007874015748100 ) ; +#394 = ORIENTED_EDGE ( 'NONE', *, *, #1330, .F. ) ; +#395 = LINE ( 'NONE', #1547, #2756 ) ; +#396 = EDGE_LOOP ( 'NONE', ( #1803, #1851, #2022, #1265 ) ) ; +#397 = EDGE_CURVE ( 'NONE', #435, #1984, #2784, .T. ) ; +#398 = AXIS2_PLACEMENT_3D ( 'NONE', #1885, #1201, #711 ) ; +#399 = CIRCLE ( 'NONE', #1453, 0.2187499999999999400 ) ; +#400 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#401 = ORIENTED_EDGE ( 'NONE', *, *, #1812, .T. ) ; +#402 = ORIENTED_EDGE ( 'NONE', *, *, #1225, .F. ) ; +#403 = ORIENTED_EDGE ( 'NONE', *, *, #555, .F. ) ; +#404 = DIRECTION ( 'NONE', ( -1.924323260793499400E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#405 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#406 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#407 = CARTESIAN_POINT ( 'NONE', ( 2.262952316802713200, 0.4790639941476706500, 0.6250000000000000000 ) ) ; +#408 = LINE ( 'NONE', #302, #2894 ) ; +#409 = VERTEX_POINT ( 'NONE', #342 ) ; +#410 = ORIENTED_EDGE ( 'NONE', *, *, #2901, .F. ) ; +#411 = ORIENTED_EDGE ( 'NONE', *, *, #2002, .T. ) ; +#412 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#413 = AXIS2_PLACEMENT_3D ( 'NONE', #2711, #2779, #850 ) ; +#414 = FACE_OUTER_BOUND ( 'NONE', #513, .T. ) ; +#415 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000001800, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#416 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#417 = ADVANCED_FACE ( 'NONE', ( #2183, #919 ), #804, .F. ) ; +#418 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#419 = EDGE_CURVE ( 'NONE', #2557, #2589, #2855, .T. ) ; +#420 = CARTESIAN_POINT ( 'NONE', ( -1.340750000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#421 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.375000000000000000 ) ) ; +#422 = ORIENTED_EDGE ( 'NONE', *, *, #388, .T. ) ; +#423 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#424 = VERTEX_POINT ( 'NONE', #1040 ) ; +#425 = LINE ( 'NONE', #824, #18 ) ; +#426 = CIRCLE ( 'NONE', #1775, 0.1330000000000002000 ) ; +#427 = ORIENTED_EDGE ( 'NONE', *, *, #2000, .T. ) ; +#428 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#429 = LINE ( 'NONE', #3016, #1758 ) ; +#430 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#431 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#432 = CYLINDRICAL_SURFACE ( 'NONE', #301, 0.1330000000000002000 ) ; +#433 = ORIENTED_EDGE ( 'NONE', *, *, #2404, .F. ) ; +#434 = EDGE_CURVE ( 'NONE', #2557, #1355, #1614, .T. ) ; +#435 = VERTEX_POINT ( 'NONE', #1875 ) ; +#436 = ADVANCED_FACE ( 'NONE', ( #516 ), #1697, .F. ) ; +#437 = EDGE_CURVE ( 'NONE', #1162, #2790, #1062, .T. ) ; +#438 = VECTOR ( 'NONE', #2353, 39.37007874015748100 ) ; +#439 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#440 = ORIENTED_EDGE ( 'NONE', *, *, #2590, .F. ) ; +#441 = VERTEX_POINT ( 'NONE', #238 ) ; +#442 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000004500, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#443 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#444 = ORIENTED_EDGE ( 'NONE', *, *, #1280, .F. ) ; +#445 = PLANE ( 'NONE', #2096 ) ; +#446 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#447 = FACE_OUTER_BOUND ( 'NONE', #726, .T. ) ; +#448 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#449 = EDGE_CURVE ( 'NONE', #2127, #865, #2312, .T. ) ; +#450 = FACE_BOUND ( 'NONE', #369, .T. ) ; +#451 = ADVANCED_FACE ( 'NONE', ( #1544 ), #1409, .F. ) ; +#452 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#453 = CARTESIAN_POINT ( 'NONE', ( -1.255000000000000300, 1.000000000000000000, 1.000000000000000000 ) ) ; +#454 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026639400, -0.2549102234176833200, 1.174999999999999800 ) ) ; +#455 = AXIS2_PLACEMENT_3D ( 'NONE', #2775, #2309, #1368 ) ; +#456 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#457 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#458 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#459 = VERTEX_POINT ( 'NONE', #2785 ) ; +#460 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#461 = ORIENTED_EDGE ( 'NONE', *, *, #2751, .F. ) ; +#462 = DIRECTION ( 'NONE', ( 9.621616303967501900E-017, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#463 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, 0.2500000000000000600, 1.000000000000000000 ) ) ; +#464 = ADVANCED_FACE ( 'NONE', ( #2524 ), #64, .F. ) ; +#465 = LINE ( 'NONE', #2023, #3018 ) ; +#466 = FACE_OUTER_BOUND ( 'NONE', #1382, .T. ) ; +#467 = ORIENTED_EDGE ( 'NONE', *, *, #483, .T. ) ; +#468 = FACE_OUTER_BOUND ( 'NONE', #991, .T. ) ; +#469 = AXIS2_PLACEMENT_3D ( 'NONE', #573, #347, #822 ) ; +#470 = VECTOR ( 'NONE', #1768, 39.37007874015748100 ) ; +#471 = ORIENTED_EDGE ( 'NONE', *, *, #2284, .T. ) ; +#472 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.6250000000000000000, 1.000000000000000000 ) ) ; +#473 = ORIENTED_EDGE ( 'NONE', *, *, #2319, .F. ) ; +#474 = ORIENTED_EDGE ( 'NONE', *, *, #793, .F. ) ; +#475 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .F. ) ; +#476 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#477 = CYLINDRICAL_SURFACE ( 'NONE', #1067, 0.2187500000000000800 ) ; +#478 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#479 = EDGE_CURVE ( 'NONE', #120, #175, #1129, .T. ) ; +#480 = ORIENTED_EDGE ( 'NONE', *, *, #141, .F. ) ; +#481 = CARTESIAN_POINT ( 'NONE', ( 0.9949999999999994400, -1.000000000000000000, 1.000000000000000000 ) ) ; +#482 = ORIENTED_EDGE ( 'NONE', *, *, #2169, .F. ) ; +#483 = EDGE_CURVE ( 'NONE', #729, #1429, #2523, .T. ) ; +#484 = ADVANCED_FACE ( 'NONE', ( #1667 ), #2687, .F. ) ; +#485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#486 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#487 = VECTOR ( 'NONE', #578, 39.37007874015748100 ) ; +#488 = SURFACE_SIDE_STYLE ('',( #2880 ) ) ; +#489 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, -0.3310549223287785900, 1.375000000000000000 ) ) ; +#490 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979654000, -0.6875000000000001100, 1.000000000000000000 ) ) ; +#491 = EDGE_CURVE ( 'NONE', #2560, #2049, #1004, .T. ) ; +#492 = DIRECTION ( 'NONE', ( 1.000000000000000000, 6.481953218662490300E-017, -0.0000000000000000000 ) ) ; +#493 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#494 = EDGE_CURVE ( 'NONE', #1429, #1424, #1219, .T. ) ; +#495 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#496 = AXIS2_PLACEMENT_3D ( 'NONE', #421, #2372, #2313 ) ; +#497 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#498 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#499 = EDGE_LOOP ( 'NONE', ( #164, #1459, #2783, #2781 ) ) ; +#500 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.375000000000000000 ) ) ; +#501 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .F. ) ; +#502 = VERTEX_POINT ( 'NONE', #2337 ) ; +#503 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#504 = FACE_OUTER_BOUND ( 'NONE', #847, .T. ) ; +#505 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999998800, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#506 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#507 = FACE_OUTER_BOUND ( 'NONE', #1037, .T. ) ; +#508 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#509 = ORIENTED_EDGE ( 'NONE', *, *, #1075, .T. ) ; +#510 = LINE ( 'NONE', #2397, #730 ) ; +#511 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#512 = VECTOR ( 'NONE', #1108, 39.37007874015748100 ) ; +#513 = EDGE_LOOP ( 'NONE', ( #2190, #2963, #2025, #877 ) ) ; +#514 = ORIENTED_EDGE ( 'NONE', *, *, #1482, .T. ) ; +#515 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#516 = FACE_OUTER_BOUND ( 'NONE', #1903, .T. ) ; +#517 = ADVANCED_FACE ( 'NONE', ( #2833, #447 ), #1621, .F. ) ; +#518 = AXIS2_PLACEMENT_3D ( 'NONE', #667, #685, #1406 ) ; +#519 = EDGE_LOOP ( 'NONE', ( #2948, #2754, #827, #1962 ) ) ; +#520 = ORIENTED_EDGE ( 'NONE', *, *, #1862, .T. ) ; +#521 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#522 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#523 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#524 = EDGE_CURVE ( 'NONE', #2047, #1168, #2253, .T. ) ; +#525 = FACE_OUTER_BOUND ( 'NONE', #26, .T. ) ; +#526 = DIRECTION ( 'NONE', ( 1.294972880571175600E-016, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#527 = VECTOR ( 'NONE', #154, 39.37007874015748100 ) ; +#528 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#529 = ADVANCED_FACE ( 'NONE', ( #2223 ), #1478, .F. ) ; +#530 = CARTESIAN_POINT ( 'NONE', ( 1.999999999999998900, -1.250000000000000000, 0.0000000000000000000 ) ) ; +#531 = AXIS2_PLACEMENT_3D ( 'NONE', #423, #2529, #1836 ) ; +#532 = EDGE_CURVE ( 'NONE', #366, #852, #1624, .T. ) ; +#533 = AXIS2_PLACEMENT_3D ( 'NONE', #1076, #1779, #1083 ) ; +#534 = AXIS2_PLACEMENT_3D ( 'NONE', #1712, #536, #2644 ) ; +#535 = ORIENTED_EDGE ( 'NONE', *, *, #968, .T. ) ; +#536 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#537 = ORIENTED_EDGE ( 'NONE', *, *, #1030, .T. ) ; +#538 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #1948 ) ; +#539 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#540 = FACE_OUTER_BOUND ( 'NONE', #1166, .T. ) ; +#541 = LINE ( 'NONE', #1360, #1564 ) ; +#542 = VERTEX_POINT ( 'NONE', #1838 ) ; +#543 = VECTOR ( 'NONE', #2030, 39.37007874015748100 ) ; +#544 = ADVANCED_FACE ( 'NONE', ( #2798 ), #2934, .F. ) ; +#545 = CIRCLE ( 'NONE', #2299, 0.1249999999999999000 ) ; +#546 = ORIENTED_EDGE ( 'NONE', *, *, #1279, .F. ) ; +#547 = ORIENTED_EDGE ( 'NONE', *, *, #378, .T. ) ; +#548 = VERTEX_POINT ( 'NONE', #256 ) ; +#549 = ORIENTED_EDGE ( 'NONE', *, *, #2723, .F. ) ; +#550 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, 0.6250000000000000000, 1.375000000000000000 ) ) ; +#551 = MANIFOLD_SOLID_BREP ( 'Cut-Extrude6', #2137 ) ; +#552 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -0.6875000000000001100, 1.000000000000000000 ) ) ; +#553 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#554 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#555 = EDGE_CURVE ( 'NONE', #1117, #1695, #2533, .T. ) ; +#556 = FACE_OUTER_BOUND ( 'NONE', #1001, .T. ) ; +#557 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, -0.6875000000000003300, 1.000000000000000000 ) ) ; +#558 = ORIENTED_EDGE ( 'NONE', *, *, #1623, .T. ) ; +#559 = EDGE_CURVE ( 'NONE', #2712, #2266, #2652, .T. ) ; +#560 = ORIENTED_EDGE ( 'NONE', *, *, #2059, .F. ) ; +#561 = AXIS2_PLACEMENT_3D ( 'NONE', #3036, #1386, #1852 ) ; +#562 = CARTESIAN_POINT ( 'NONE', ( -0.9032500000000000000, -1.000000000000000000, 1.000000000000000000 ) ) ; +#563 = LINE ( 'NONE', #1591, #783 ) ; +#564 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#565 = FACE_BOUND ( 'NONE', #1539, .T. ) ; +#566 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#567 = ADVANCED_FACE ( 'NONE', ( #303 ), #293, .F. ) ; +#568 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#569 = AXIS2_PLACEMENT_3D ( 'NONE', #344, #332, #1035 ) ; +#570 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#571 = ORIENTED_EDGE ( 'NONE', *, *, #2010, .F. ) ; +#572 = AXIS2_PLACEMENT_3D ( 'NONE', #2516, #1598, #2760 ) ; +#573 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#574 = ORIENTED_EDGE ( 'NONE', *, *, #194, .F. ) ; +#575 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979654000, -0.5625000000000001100, 0.8125000000000000000 ) ) ; +#576 = ORIENTED_EDGE ( 'NONE', *, *, #906, .F. ) ; +#577 = LINE ( 'NONE', #76, #2913 ) ; +#578 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#579 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#580 = CIRCLE ( 'NONE', #1353, 0.2187500000000000300 ) ; +#581 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.4375503462087235700, 0.6250000000000000000 ) ) ; +#582 = EDGE_LOOP ( 'NONE', ( #1095, #2053, #2788, #1858 ) ) ; +#583 = EDGE_CURVE ( 'NONE', #803, #2509, #2612, .T. ) ; +#584 = CIRCLE ( 'NONE', #2506, 0.1330000000000004800 ) ; +#585 = ORIENTED_EDGE ( 'NONE', *, *, #273, .T. ) ; +#586 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#587 = CYLINDRICAL_SURFACE ( 'NONE', #2398, 0.1250000000000000300 ) ; +#588 = ORIENTED_EDGE ( 'NONE', *, *, #595, .T. ) ; +#589 = LINE ( 'NONE', #826, #174 ) ; +#590 = DIRECTION ( 'NONE', ( 9.621616303967501900E-017, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#591 = VERTEX_POINT ( 'NONE', #489 ) ; +#592 = ORIENTED_EDGE ( 'NONE', *, *, #1582, .F. ) ; +#593 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000300, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#594 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#595 = EDGE_CURVE ( 'NONE', #2909, #2265, #2031, .T. ) ; +#596 = AXIS2_PLACEMENT_3D ( 'NONE', #1148, #1883, #458 ) ; +#597 = EDGE_CURVE ( 'NONE', #2439, #2349, #969, .T. ) ; +#598 = LINE ( 'NONE', #57, #748 ) ; +#599 = VERTEX_POINT ( 'NONE', #1433 ) ; +#600 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#601 = LINE ( 'NONE', #2500, #527 ) ; +#602 = CARTESIAN_POINT ( 'NONE', ( 1.346749999999999700, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#603 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, 0.6874999999999996700, 1.000000000000000000 ) ) ; +#604 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #1773 ) ; +#605 = EDGE_CURVE ( 'NONE', #261, #2006, #341, .T. ) ; +#606 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#607 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, -0.2499999999999998100, 1.000000000000000000 ) ) ; +#608 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.6875000000000001100, 1.000000000000000000 ) ) ; +#609 = AXIS2_PLACEMENT_3D ( 'NONE', #2478, #149, #2503 ) ; +#610 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#611 = EDGE_LOOP ( 'NONE', ( #2378, #1612, #1938, #2079 ) ) ; +#612 = AXIS2_PLACEMENT_3D ( 'NONE', #970, #2838, #1438 ) ; +#613 = VECTOR ( 'NONE', #384, 39.37007874015748100 ) ; +#614 = FACE_OUTER_BOUND ( 'NONE', #2553, .T. ) ; +#615 = EDGE_LOOP ( 'NONE', ( #1757, #813 ) ) ; +#616 = CARTESIAN_POINT ( 'NONE', ( 2.526213591511189200, -0.08733638245144770300, 0.8125000000000000000 ) ) ; +#617 = FACE_BOUND ( 'NONE', #1500, .T. ) ; +#618 = CIRCLE ( 'NONE', #2032, 0.1330000000000004800 ) ; +#619 = ORIENTED_EDGE ( 'NONE', *, *, #324, .F. ) ; +#620 = DIRECTION ( 'NONE', ( 0.7071067811865463500, 0.0000000000000000000, -0.7071067811865486800 ) ) ; +#621 = ORIENTED_EDGE ( 'NONE', *, *, #1913, .T. ) ; +#622 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#623 = ORIENTED_EDGE ( 'NONE', *, *, #6, .F. ) ; +#624 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#625 = ORIENTED_EDGE ( 'NONE', *, *, #2107, .F. ) ; +#626 = CARTESIAN_POINT ( 'NONE', ( -3.161825413516036900, 0.6874999999999995600, 0.5000000000000000000 ) ) ; +#627 = VECTOR ( 'NONE', #820, 39.37007874015748100 ) ; +#628 = CARTESIAN_POINT ( 'NONE', ( 2.405623983195961800, 0.4624496051557517900, 0.8125000000000000000 ) ) ; +#629 = AXIS2_PLACEMENT_3D ( 'NONE', #1167, #239, #1402 ) ; +#630 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#631 = FACE_BOUND ( 'NONE', #1034, .T. ) ; +#632 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#633 = FACE_BOUND ( 'NONE', #2683, .T. ) ; +#634 = EDGE_CURVE ( 'NONE', #691, #30, #782, .T. ) ; +#635 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#636 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106012700, 0.3549102234176832500, 1.375000000000000000 ) ) ; +#637 = EDGE_CURVE ( 'NONE', #1028, #2582, #1994, .T. ) ; +#638 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#639 = ORIENTED_EDGE ( 'NONE', *, *, #2412, .T. ) ; +#640 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#641 = EDGE_CURVE ( 'NONE', #2634, #2610, #598, .T. ) ; +#642 = PLANE ( 'NONE', #572 ) ; +#643 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999400, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#644 = FACE_OUTER_BOUND ( 'NONE', #1750, .T. ) ; +#645 = VERTEX_POINT ( 'NONE', #41 ) ; +#646 = LINE ( 'NONE', #1742, #797 ) ; +#647 = EDGE_CURVE ( 'NONE', #1275, #2669, #2393, .T. ) ; +#648 = AXIS2_PLACEMENT_3D ( 'NONE', #1631, #2123, #2102 ) ; +#649 = CIRCLE ( 'NONE', #2960, 0.1330000000000002600 ) ; +#650 = ORIENTED_EDGE ( 'NONE', *, *, #812, .T. ) ; +#651 = EDGE_LOOP ( 'NONE', ( #2873, #1298, #104, #2744 ) ) ; +#652 = CIRCLE ( 'NONE', #189, 0.2187499999999999400 ) ; +#653 = VERTEX_POINT ( 'NONE', #2599 ) ; +#654 = LINE ( 'NONE', #744, #2098 ) ; +#655 = VERTEX_POINT ( 'NONE', #530 ) ; +#656 = PLANE ( 'NONE', #1719 ) ; +#657 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.2549102234176833800, 1.174999999999999800 ) ) ; +#658 = CIRCLE ( 'NONE', #218, 0.1330000000000004800 ) ; +#659 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#660 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#661 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#662 = LINE ( 'NONE', #506, #962 ) ; +#663 = ADVANCED_FACE ( 'NONE', ( #414 ), #766, .F. ) ; +#664 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#665 = ORIENTED_EDGE ( 'NONE', *, *, #2462, .T. ) ; +#666 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.174999999999999800 ) ) ; +#667 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, 0.2500000000000000600, 0.8750000000000000000 ) ) ; +#668 = AXIS2_PLACEMENT_3D ( 'NONE', #1328, #198, #3025 ) ; +#669 = VECTOR ( 'NONE', #406, 39.37007874015748100 ) ; +#670 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#671 = EDGE_CURVE ( 'NONE', #1748, #248, #144, .T. ) ; +#672 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#673 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#674 = ADVANCED_FACE ( 'NONE', ( #1517 ), #1005, .F. ) ; +#675 = VERTEX_POINT ( 'NONE', #980 ) ; +#676 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#677 = FACE_BOUND ( 'NONE', #1837, .T. ) ; +#678 = VECTOR ( 'NONE', #486, 39.37007874015748100 ) ; +#679 = VECTOR ( 'NONE', #1176, 39.37007874015748100 ) ; +#680 = VERTEX_POINT ( 'NONE', #1675 ) ; +#681 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026637000, 0.2549102234176834900, 1.174999999999999800 ) ) ; +#682 = ORIENTED_EDGE ( 'NONE', *, *, #194, .T. ) ; +#683 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#684 = LINE ( 'NONE', #1041, #2850 ) ; +#685 = DIRECTION ( 'NONE', ( -2.731847993664262700E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#686 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#687 = FACE_BOUND ( 'NONE', #2819, .T. ) ; +#688 = ORIENTED_EDGE ( 'NONE', *, *, #2642, .T. ) ; +#689 = ORIENTED_EDGE ( 'NONE', *, *, #1010, .T. ) ; +#690 = EDGE_CURVE ( 'NONE', #2596, #2273, #1922, .T. ) ; +#691 = VERTEX_POINT ( 'NONE', #2621 ) ; +#692 = AXIS2_PLACEMENT_3D ( 'NONE', #1741, #400, #1483 ) ; +#693 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#694 = EDGE_CURVE ( 'NONE', #2720, #998, #2159, .T. ) ; +#695 = ORIENTED_EDGE ( 'NONE', *, *, #437, .T. ) ; +#696 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#697 = ORIENTED_EDGE ( 'NONE', *, *, #2517, .F. ) ; +#698 = FACE_OUTER_BOUND ( 'NONE', #62, .T. ) ; +#699 = ADVANCED_FACE ( 'NONE', ( #1585 ), #1445, .F. ) ; +#700 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060135200, 0.2549102234176833200, 1.174999999999999800 ) ) ; +#701 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026637200, 0.3549102234176833600, 1.174999999999999800 ) ) ; +#702 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#703 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#704 = CARTESIAN_POINT ( 'NONE', ( -2.380000000000000300, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#705 = LINE ( 'NONE', #747, #1739 ) ; +#706 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#707 = EDGE_CURVE ( 'NONE', #1243, #956, #266, .T. ) ; +#708 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#709 = LINE ( 'NONE', #374, #111 ) ; +#710 = VERTEX_POINT ( 'NONE', #2413 ) ; +#711 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#712 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, 0.2500000000000002200, 0.8750000000000000000 ) ) ; +#713 = EDGE_CURVE ( 'NONE', #209, #791, #1287, .T. ) ; +#714 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#715 = AXIS2_PLACEMENT_3D ( 'NONE', #2607, #2825, #1682 ) ; +#716 = ADVANCED_FACE ( 'NONE', ( #525 ), #2865, .F. ) ; +#717 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#718 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#719 = ORIENTED_EDGE ( 'NONE', *, *, #2862, .T. ) ; +#720 = ORIENTED_EDGE ( 'NONE', *, *, #1131, .T. ) ; +#721 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#722 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#723 = LINE ( 'NONE', #2526, #1087 ) ; +#724 = ORIENTED_EDGE ( 'NONE', *, *, #265, .T. ) ; +#725 = VECTOR ( 'NONE', #2097, 39.37007874015748100 ) ; +#726 = EDGE_LOOP ( 'NONE', ( #2957, #1506, #1241, #1237, #103 ) ) ; +#727 = FACE_OUTER_BOUND ( 'NONE', #756, .T. ) ; +#728 = ORIENTED_EDGE ( 'NONE', *, *, #837, .F. ) ; +#729 = VERTEX_POINT ( 'NONE', #2618 ) ; +#730 = VECTOR ( 'NONE', #70, 39.37007874015748100 ) ; +#731 = EDGE_LOOP ( 'NONE', ( #2944, #1207, #2881, #923 ) ) ; +#732 = ADVANCED_FACE ( 'NONE', ( #2761 ), #2429, .F. ) ; +#733 = EDGE_LOOP ( 'NONE', ( #2402, #621, #2742, #1953 ) ) ; +#734 = VERTEX_POINT ( 'NONE', #1926 ) ; +#735 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#736 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#737 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#738 = FACE_OUTER_BOUND ( 'NONE', #1063, .T. ) ; +#739 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979653500, 0.6874999999999998900, 0.8125000000000000000 ) ) ; +#740 = ORIENTED_EDGE ( 'NONE', *, *, #434, .F. ) ; +#741 = EDGE_LOOP ( 'NONE', ( #763, #2853, #625, #1133 ) ) ; +#742 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#743 = EDGE_CURVE ( 'NONE', #1424, #1429, #1709, .T. ) ; +#744 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#745 = EDGE_LOOP ( 'NONE', ( #1170, #2594, #881, #2792 ) ) ; +#746 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#747 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.5625000000000001100, 0.8125000000000000000 ) ) ; +#748 = VECTOR ( 'NONE', #269, 39.37007874015748100 ) ; +#749 = ORIENTED_EDGE ( 'NONE', *, *, #597, .T. ) ; +#750 = AXIS2_PLACEMENT_3D ( 'NONE', #1283, #81, #2915 ) ; +#751 = VECTOR ( 'NONE', #590, 39.37007874015748100 ) ; +#752 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -0.6875000000000003300, 1.000000000000000000 ) ) ; +#753 = EDGE_CURVE ( 'NONE', #2605, #883, #2361, .T. ) ; +#754 = AXIS2_PLACEMENT_3D ( 'NONE', #254, #2177, #995 ) ; +#755 = AXIS2_PLACEMENT_3D ( 'NONE', #346, #1531, #2236 ) ; +#756 = EDGE_LOOP ( 'NONE', ( #1194, #1981, #195, #411 ) ) ; +#757 = EDGE_LOOP ( 'NONE', ( #2301, #1565 ) ) ; +#758 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279400, 0.1318487067688303100, 1.174999999999999800 ) ) ; +#759 = VECTOR ( 'NONE', #2201, 39.37007874015748100 ) ; +#760 = CIRCLE ( 'NONE', #893, 0.2187499999999999400 ) ; +#761 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#762 = FACE_OUTER_BOUND ( 'NONE', #1346, .T. ) ; +#763 = ORIENTED_EDGE ( 'NONE', *, *, #1179, .F. ) ; +#764 = ORIENTED_EDGE ( 'NONE', *, *, #68, .T. ) ; +#765 = LINE ( 'NONE', #1633, #358 ) ; +#766 = PLANE ( 'NONE', #754 ) ; +#767 = FACE_OUTER_BOUND ( 'NONE', #2056, .T. ) ; +#768 = EDGE_CURVE ( 'NONE', #2596, #675, #2968, .T. ) ; +#769 = ORIENTED_EDGE ( 'NONE', *, *, #121, .T. ) ; +#770 = EDGE_LOOP ( 'NONE', ( #1514, #2852 ) ) ; +#771 = AXIS2_PLACEMENT_3D ( 'NONE', #1625, #1599, #1833 ) ; +#772 = ORIENTED_EDGE ( 'NONE', *, *, #634, .F. ) ; +#773 = AXIS2_PLACEMENT_3D ( 'NONE', #886, #1103, #872 ) ; +#774 = ORIENTED_EDGE ( 'NONE', *, *, #1928, .F. ) ; +#775 = LINE ( 'NONE', #1230, #138 ) ; +#776 = PLANE ( 'NONE', #1916 ) ; +#777 = ORIENTED_EDGE ( 'NONE', *, *, #324, .T. ) ; +#778 = ADVANCED_FACE ( 'NONE', ( #1805, #71, #1323 ), #2392, .F. ) ; +#779 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#780 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979653500, 0.6874999999999998900, 0.8125000000000000000 ) ) ; +#781 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#782 = LINE ( 'NONE', #2374, #2463 ) ; +#783 = VECTOR ( 'NONE', #2527, 39.37007874015748100 ) ; +#784 = ORIENTED_EDGE ( 'NONE', *, *, #1593, .T. ) ; +#785 = CARTESIAN_POINT ( 'NONE', ( 2.426749360703121600, -0.4133649961045401400, 0.8124999999999998900 ) ) ; +#786 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#787 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#788 = VERTEX_POINT ( 'NONE', #975 ) ; +#789 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 1.000000000000000000 ) ) ; +#790 = AXIS2_PLACEMENT_3D ( 'NONE', #28, #1192, #1576 ) ; +#791 = VERTEX_POINT ( 'NONE', #2765 ) ; +#792 = CARTESIAN_POINT ( 'NONE', ( -1.255000000000000300, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#793 = EDGE_CURVE ( 'NONE', #1650, #1730, #1104, .T. ) ; +#794 = LINE ( 'NONE', #1383, #316 ) ; +#795 = ORIENTED_EDGE ( 'NONE', *, *, #1595, .F. ) ; +#796 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.5625000000000001100, 1.000000000000000000 ) ) ; +#797 = VECTOR ( 'NONE', #2213, 39.37007874015748100 ) ; +#798 = ORIENTED_EDGE ( 'NONE', *, *, #1425, .T. ) ; +#799 = VECTOR ( 'NONE', #2591, 39.37007874015748100 ) ; +#800 = ORIENTED_EDGE ( 'NONE', *, *, #2776, .F. ) ; +#801 = ORIENTED_EDGE ( 'NONE', *, *, #1714, .T. ) ; +#802 = CIRCLE ( 'NONE', #1006, 0.1330000000000004800 ) ; +#803 = VERTEX_POINT ( 'NONE', #2979 ) ; +#804 = PLANE ( 'NONE', #13 ) ; +#805 = ORIENTED_EDGE ( 'NONE', *, *, #713, .F. ) ; +#806 = ORIENTED_EDGE ( 'NONE', *, *, #968, .F. ) ; +#807 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#808 = EDGE_CURVE ( 'NONE', #1944, #323, #705, .T. ) ; +#809 = CYLINDRICAL_SURFACE ( 'NONE', #2692, 0.1947179912523943300 ) ; +#810 = CARTESIAN_POINT ( 'NONE', ( -1.340750000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#811 = VERTEX_POINT ( 'NONE', #1370 ) ; +#812 = EDGE_CURVE ( 'NONE', #2808, #326, #1877, .T. ) ; +#813 = ORIENTED_EDGE ( 'NONE', *, *, #2642, .F. ) ; +#814 = AXIS2_PLACEMENT_3D ( 'NONE', #2771, #3000, #1394 ) ; +#815 = AXIS2_PLACEMENT_3D ( 'NONE', #337, #2227, #2461 ) ; +#816 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#817 = EDGE_LOOP ( 'NONE', ( #241, #132, #2554, #23 ) ) ; +#818 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#819 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, -1.250000000000000000, 0.3052820087476053000 ) ) ; +#820 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#821 = VECTOR ( 'NONE', #2869, 39.37007874015748100 ) ; +#822 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#823 = CARTESIAN_POINT ( 'NONE', ( -2.028250000000000300, -1.000000000000000000, 1.000000000000000000 ) ) ; +#824 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279400, 0.1318487067688303100, 1.375000000000000000 ) ) ; +#825 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2863 ), #2140 ) ; +#826 = CARTESIAN_POINT ( 'NONE', ( -2.028250000000000300, -1.000000000000000000, 1.000000000000000000 ) ) ; +#827 = ORIENTED_EDGE ( 'NONE', *, *, #1806, .T. ) ; +#828 = PLANE ( 'NONE', #2547 ) ; +#829 = ORIENTED_EDGE ( 'NONE', *, *, #671, .F. ) ; +#830 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.000000000000000000 ) ) ; +#831 = FACE_OUTER_BOUND ( 'NONE', #1361, .T. ) ; +#832 = PLANE ( 'NONE', #771 ) ; +#833 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#834 = VECTOR ( 'NONE', #1635, 39.37007874015748100 ) ; +#835 = CIRCLE ( 'NONE', #983, 0.2187499999999999400 ) ; +#836 = VERTEX_POINT ( 'NONE', #2839 ) ; +#837 = EDGE_CURVE ( 'NONE', #2349, #1262, #1183, .T. ) ; +#838 = ORIENTED_EDGE ( 'NONE', *, *, #1755, .F. ) ; +#839 = LINE ( 'NONE', #2895, #1941 ) ; +#840 = FACE_BOUND ( 'NONE', #1679, .T. ) ; +#841 = EDGE_LOOP ( 'NONE', ( #2829, #2388, #471, #682 ) ) ; +#842 = ORIENTED_EDGE ( 'NONE', *, *, #1595, .T. ) ; +#843 = EDGE_LOOP ( 'NONE', ( #2464, #1094 ) ) ; +#844 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#845 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.5625000000000001100, 0.8125000000000000000 ) ) ; +#846 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#847 = EDGE_LOOP ( 'NONE', ( #176, #2718, #20, #772 ) ) ; +#848 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#849 = VECTOR ( 'NONE', #1324, 39.37007874015748100 ) ; +#850 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#851 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#852 = VERTEX_POINT ( 'NONE', #2538 ) ; +#853 = EDGE_LOOP ( 'NONE', ( #2052, #902 ) ) ; +#854 = EDGE_CURVE ( 'NONE', #1117, #2613, #563, .T. ) ; +#855 = AXIS2_PLACEMENT_3D ( 'NONE', #15, #2401, #1475 ) ; +#856 = EDGE_CURVE ( 'NONE', #1641, #865, #74, .T. ) ; +#857 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#858 = VECTOR ( 'NONE', #105, 39.37007874015748100 ) ; +#859 = EDGE_LOOP ( 'NONE', ( #1820, #1278, #2065, #1664 ) ) ; +#860 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#861 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#862 = EDGE_CURVE ( 'NONE', #591, #312, #2501, .T. ) ; +#863 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#864 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999842800, 0.4375503462087652600, 0.6250000000000000000 ) ) ; +#865 = VERTEX_POINT ( 'NONE', #920 ) ; +#866 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#867 = ORIENTED_EDGE ( 'NONE', *, *, #1640, .T. ) ; +#868 = EDGE_CURVE ( 'NONE', #710, #459, #35, .T. ) ; +#869 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#870 = LINE ( 'NONE', #1810, #2510 ) ; +#871 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .T. ) ; +#872 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#873 = VECTOR ( 'NONE', #1137, 39.37007874015748100 ) ; +#874 = ORIENTED_EDGE ( 'NONE', *, *, #2901, .T. ) ; +#875 = LINE ( 'NONE', #2076, #1051 ) ; +#876 = ORIENTED_EDGE ( 'NONE', *, *, #229, .F. ) ; +#877 = ORIENTED_EDGE ( 'NONE', *, *, #449, .T. ) ; +#878 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#879 = CARTESIAN_POINT ( 'NONE', ( 2.405623983195884600, 0.4624496051557608300, 0.6250000000000000000 ) ) ; +#880 = LINE ( 'NONE', #1864, #911 ) ; +#881 = ORIENTED_EDGE ( 'NONE', *, *, #2367, .T. ) ; +#882 = PLANE ( 'NONE', #2454 ) ; +#883 = VERTEX_POINT ( 'NONE', #1600 ) ; +#884 = EDGE_LOOP ( 'NONE', ( #1022, #2511, #874, #3028, #3031, #1315, #1178, #724 ) ) ; +#885 = LINE ( 'NONE', #550, #2679 ) ; +#886 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#887 = ORIENTED_EDGE ( 'NONE', *, *, #1374, .F. ) ; +#888 = LINE ( 'NONE', #1900, #260 ) ; +#889 = ORIENTED_EDGE ( 'NONE', *, *, #1665, .T. ) ; +#890 = AXIS2_PLACEMENT_3D ( 'NONE', #686, #224, #1652 ) ; +#891 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000300, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#892 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#893 = AXIS2_PLACEMENT_3D ( 'NONE', #1886, #714, #12 ) ; +#894 = ORIENTED_EDGE ( 'NONE', *, *, #555, .T. ) ; +#895 = VECTOR ( 'NONE', #2654, 39.37007874015748100 ) ; +#896 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.601555123121432500E-016, -0.0000000000000000000 ) ) ; +#897 = EDGE_CURVE ( 'NONE', #3029, #2669, #2396, .T. ) ; +#898 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#899 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#900 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, 0.2060549223287782800, 1.375000000000000000 ) ) ; +#901 = ADVANCED_FACE ( 'NONE', ( #1479 ), #2545, .T. ) ; +#902 = ORIENTED_EDGE ( 'NONE', *, *, #2122, .T. ) ; +#903 = AXIS2_PLACEMENT_3D ( 'NONE', #2071, #1071, #661 ) ; +#904 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#905 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#906 = EDGE_CURVE ( 'NONE', #2419, #1390, #2430, .T. ) ; +#907 = AXIS2_PLACEMENT_3D ( 'NONE', #2245, #2469, #2018 ) ; +#908 = CYLINDRICAL_SURFACE ( 'NONE', #2495, 0.2187500000000000000 ) ; +#909 = FACE_OUTER_BOUND ( 'NONE', #2219, .T. ) ; +#910 = ORIENTED_EDGE ( 'NONE', *, *, #595, .F. ) ; +#911 = VECTOR ( 'NONE', #718, 39.37007874015748100 ) ; +#912 = LINE ( 'NONE', #636, #1127 ) ; +#913 = ORIENTED_EDGE ( 'NONE', *, *, #1538, .T. ) ; +#914 = ORIENTED_EDGE ( 'NONE', *, *, #1714, .F. ) ; +#915 = ADVANCED_FACE ( 'NONE', ( #225 ), #2936, .F. ) ; +#916 = EDGE_LOOP ( 'NONE', ( #440, #2081, #697, #2335 ) ) ; +#917 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.375000000000000000 ) ) ; +#918 = PLANE ( 'NONE', #2713 ) ; +#919 = FACE_OUTER_BOUND ( 'NONE', #2514, .T. ) ; +#920 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 1.000000000000000000 ) ) ; +#921 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#922 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999998800, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#923 = ORIENTED_EDGE ( 'NONE', *, *, #2837, .T. ) ; +#924 = ORIENTED_EDGE ( 'NONE', *, *, #367, .T. ) ; +#925 = CARTESIAN_POINT ( 'NONE', ( 0.9092499999999998900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#926 = ORIENTED_EDGE ( 'NONE', *, *, #2847, .T. ) ; +#927 = EDGE_LOOP ( 'NONE', ( #2716, #985, #2633, #777 ) ) ; +#928 = EDGE_CURVE ( 'NONE', #952, #2439, #2324, .T. ) ; +#929 = AXIS2_PLACEMENT_3D ( 'NONE', #1172, #2128, #1648 ) ; +#930 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#931 = CARTESIAN_POINT ( 'NONE', ( -1.255000000000000300, -1.000000000000000000, 1.000000000000000000 ) ) ; +#932 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#933 = LINE ( 'NONE', #2954, #1290 ) ; +#934 = ADVANCED_FACE ( 'NONE', ( #1809 ), #1363, .F. ) ; +#935 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#936 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#937 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.6875000000000000000, 0.8125000000000000000 ) ) ; +#938 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, 0.3310549223287783100, 1.375000000000000000 ) ) ; +#939 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#940 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 1.000000000000000000 ) ) ; +#941 = PLANE ( 'NONE', #1476 ) ; +#942 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#943 = ORIENTED_EDGE ( 'NONE', *, *, #1957, .T. ) ; +#944 = AXIS2_PLACEMENT_3D ( 'NONE', #1556, #2769, #1362 ) ; +#945 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#946 = ADVANCED_FACE ( 'NONE', ( #1841 ), #2708, .T. ) ; +#947 = EDGE_LOOP ( 'NONE', ( #2156, #237, #619, #1418 ) ) ; +#948 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000300, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#949 = FACE_OUTER_BOUND ( 'NONE', #2241, .T. ) ; +#950 = ORIENTED_EDGE ( 'NONE', *, *, #1375, .T. ) ; +#951 = VECTOR ( 'NONE', #1807, 39.37007874015748100 ) ; +#952 = VERTEX_POINT ( 'NONE', #349 ) ; +#953 = LINE ( 'NONE', #137, #543 ) ; +#954 = ORIENTED_EDGE ( 'NONE', *, *, #1179, .T. ) ; +#955 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#956 = VERTEX_POINT ( 'NONE', #1527 ) ; +#957 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#958 = EDGE_CURVE ( 'NONE', #2657, #645, #147, .T. ) ; +#959 = LINE ( 'NONE', #581, #627 ) ; +#960 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 1.000000000000000000 ) ) ; +#961 = ORIENTED_EDGE ( 'NONE', *, *, #2847, .F. ) ; +#962 = VECTOR ( 'NONE', #736, 39.37007874015748100 ) ; +#963 = VERTEX_POINT ( 'NONE', #607 ) ; +#964 = CARTESIAN_POINT ( 'NONE', ( -0.9032500000000001100, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#965 = ADVANCED_FACE ( 'NONE', ( #1255, #633, #450, #2970, #2117, #2, #3006, #1186, #2800, #2034, #565 ), #2935, .F. ) ; +#966 =( CONVERSION_BASED_UNIT ( 'INCH', #1049 ) LENGTH_UNIT ( ) NAMED_UNIT ( #1437 ) ); +#967 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#968 = EDGE_CURVE ( 'NONE', #2013, #599, #1710, .T. ) ; +#969 = LINE ( 'NONE', #739, #1401 ) ; +#970 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#971 = EDGE_CURVE ( 'NONE', #2582, #1439, #2616, .T. ) ; +#972 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#973 = AXIS2_PLACEMENT_3D ( 'NONE', #500, #1699, #1908 ) ; +#974 = EDGE_CURVE ( 'NONE', #312, #2634, #1776, .T. ) ; +#975 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250980800, -0.1875000000000002500, 0.5000000000000000000 ) ) ; +#976 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#977 = ORIENTED_EDGE ( 'NONE', *, *, #397, .F. ) ; +#978 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 0.0000000000000000000 ) ) ; +#979 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#980 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250981300, 0.1874999999999998300, 1.000000000000000000 ) ) ; +#981 = EDGE_CURVE ( 'NONE', #59, #1802, #2868, .T. ) ; +#982 = CIRCLE ( 'NONE', #2729, 0.2187499999999999400 ) ; +#983 = AXIS2_PLACEMENT_3D ( 'NONE', #2966, #2973, #1583 ) ; +#984 = LINE ( 'NONE', #2142, #2050 ) ; +#985 = ORIENTED_EDGE ( 'NONE', *, *, #2491, .T. ) ; +#986 = CYLINDRICAL_SURFACE ( 'NONE', #1410, 0.1330000000000002000 ) ; +#987 = AXIS2_PLACEMENT_3D ( 'NONE', #2057, #2750, #1335 ) ; +#988 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026638100, -0.2549102234176833200, 1.375000000000000000 ) ) ; +#989 = CYLINDRICAL_SURFACE ( 'NONE', #1930, 0.1330000000000003700 ) ; +#990 = EDGE_LOOP ( 'NONE', ( #2976, #2040, #298, #1313 ) ) ; +#991 = EDGE_LOOP ( 'NONE', ( #2066, #894, #2270, #170 ) ) ; +#992 = ORIENTED_EDGE ( 'NONE', *, *, #1280, .T. ) ; +#993 = LINE ( 'NONE', #562, #368 ) ; +#994 = ADVANCED_FACE ( 'NONE', ( #2256 ), #2656, .F. ) ; +#995 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#996 = ORIENTED_EDGE ( 'NONE', *, *, #2230, .T. ) ; +#997 = VERTEX_POINT ( 'NONE', #2246 ) ; +#998 = VERTEX_POINT ( 'NONE', #1553 ) ; +#999 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1000 = EDGE_CURVE ( 'NONE', #2006, #424, #709, .T. ) ; +#1001 = EDGE_LOOP ( 'NONE', ( #2593, #2104, #172, #1568 ) ) ; +#1002 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1003 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1004 = CIRCLE ( 'NONE', #596, 0.09999999999999989500 ) ; +#1005 = PLANE ( 'NONE', #340 ) ; +#1006 = AXIS2_PLACEMENT_3D ( 'NONE', #308, #2882, #2168 ) ; +#1007 = FACE_OUTER_BOUND ( 'NONE', #2698, .T. ) ; +#1008 = DIRECTION ( 'NONE', ( -1.924323260793499400E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1009 = ADVANCED_FACE ( 'NONE', ( #1403, #1007 ), #1045, .F. ) ; +#1010 = EDGE_CURVE ( 'NONE', #2282, #1641, #1325, .T. ) ; +#1011 = AXIS2_PLACEMENT_3D ( 'NONE', #221, #228, #1130 ) ; +#1012 = EDGE_CURVE ( 'NONE', #1390, #1435, #1554, .T. ) ; +#1013 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1014 = ORIENTED_EDGE ( 'NONE', *, *, #2517, .T. ) ; +#1015 = ORIENTED_EDGE ( 'NONE', *, *, #2567, .T. ) ; +#1016 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1017 = LINE ( 'NONE', #1584, #2879 ) ; +#1018 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1019 = FACE_OUTER_BOUND ( 'NONE', #947, .T. ) ; +#1020 = EDGE_LOOP ( 'NONE', ( #2714, #2674, #362, #2020 ) ) ; +#1021 = VECTOR ( 'NONE', #383, 39.37007874015748100 ) ; +#1022 = ORIENTED_EDGE ( 'NONE', *, *, #713, .T. ) ; +#1023 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1024 = FACE_OUTER_BOUND ( 'NONE', #2015, .T. ) ; +#1025 = EDGE_CURVE ( 'NONE', #2359, #2265, #2363, .T. ) ; +#1026 = ORIENTED_EDGE ( 'NONE', *, *, #37, .T. ) ; +#1027 = ORIENTED_EDGE ( 'NONE', *, *, #837, .T. ) ; +#1028 = VERTEX_POINT ( 'NONE', #95 ) ; +#1029 = PLANE ( 'NONE', #42 ) ; +#1030 = EDGE_CURVE ( 'NONE', #2419, #2582, #1107, .T. ) ; +#1031 = AXIS2_PLACEMENT_3D ( 'NONE', #2343, #1663, #2832 ) ; +#1032 = CYLINDRICAL_SURFACE ( 'NONE', #1259, 0.2187499999999999400 ) ; +#1033 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1034 = EDGE_LOOP ( 'NONE', ( #576, #3003, #2559, #1490 ) ) ; +#1035 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1036 = EDGE_LOOP ( 'NONE', ( #1058, #1308, #1511, #1466 ) ) ; +#1037 = EDGE_LOOP ( 'NONE', ( #96, #2486, #157, #2035 ) ) ; +#1038 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1039 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1040 = CARTESIAN_POINT ( 'NONE', ( 0.2217499999999999700, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1041 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 0.6250000000000000000 ) ) ; +#1042 = AXIS2_PLACEMENT_3D ( 'NONE', #2803, #456, #932 ) ; +#1043 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 1.250000000000000000, 0.0000000000000000000 ) ) ; +#1044 = ORIENTED_EDGE ( 'NONE', *, *, #856, .T. ) ; +#1045 = PLANE ( 'NONE', #2145 ) ; +#1046 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1047 = ORIENTED_EDGE ( 'NONE', *, *, #2655, .T. ) ; +#1048 = EDGE_CURVE ( 'NONE', #2782, #2857, #1997, .T. ) ; +#1049 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #1432 ); +#1050 = CYLINDRICAL_SURFACE ( 'NONE', #1366, 0.4999999999999998300 ) ; +#1051 = VECTOR ( 'NONE', #1381, 39.37007874015748100 ) ; +#1052 = EDGE_LOOP ( 'NONE', ( #410, #60, #1169, #1969 ) ) ; +#1053 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1054 = CIRCLE ( 'NONE', #2878, 0.2187499999999999400 ) ; +#1055 = EDGE_CURVE ( 'NONE', #459, #710, #2535, .T. ) ; +#1056 = FACE_OUTER_BOUND ( 'NONE', #2953, .T. ) ; +#1057 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1058 = ORIENTED_EDGE ( 'NONE', *, *, #1970, .F. ) ; +#1059 = CARTESIAN_POINT ( 'NONE', ( 1.880274082640043300, 0.1643791425749027100, 0.6250000000000000000 ) ) ; +#1060 = ORIENTED_EDGE ( 'NONE', *, *, #2888, .F. ) ; +#1061 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.4999999999999996700 ) ) ; +#1062 = CIRCLE ( 'NONE', #2939, 0.1330000000000002000 ) ; +#1063 = EDGE_LOOP ( 'NONE', ( #2640, #402, #1513, #2206 ) ) ; +#1064 = EDGE_CURVE ( 'NONE', #2889, #2153, #1740, .T. ) ; +#1065 = VERTEX_POINT ( 'NONE', #2019 ) ; +#1066 = AXIS2_PLACEMENT_3D ( 'NONE', #1670, #967, #5 ) ; +#1067 = AXIS2_PLACEMENT_3D ( 'NONE', #1764, #1999, #118 ) ; +#1068 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1069 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, 0.2500000000000000600, 0.8750000000000000000 ) ) ; +#1070 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1071 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1072 = LINE ( 'NONE', #1559, #1959 ) ; +#1073 = VECTOR ( 'NONE', #361, 39.37007874015748100 ) ; +#1074 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1075 = EDGE_CURVE ( 'NONE', #1262, #323, #2902, .T. ) ; +#1076 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, 0.1874999999999997500, 0.5000000000000000000 ) ) ; +#1077 = CARTESIAN_POINT ( 'NONE', ( 2.499999999999842800, 0.4375503462087652600, 0.6250000000000000000 ) ) ; +#1078 = AXIS2_PLACEMENT_3D ( 'NONE', #2575, #1639, #227 ) ; +#1079 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1080 = ORIENTED_EDGE ( 'NONE', *, *, #494, .F. ) ; +#1081 = DIRECTION ( 'NONE', ( -1.601555123121432500E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1082 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .T. ) ; +#1083 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1084 = CARTESIAN_POINT ( 'NONE', ( 1.346749999999999700, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1085 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1086 = LINE ( 'NONE', #1899, #2406 ) ; +#1087 = VECTOR ( 'NONE', #892, 39.37007874015748100 ) ; +#1088 = ORIENTED_EDGE ( 'NONE', *, *, #1893, .F. ) ; +#1089 = VECTOR ( 'NONE', #452, 39.37007874015748100 ) ; +#1090 = FACE_OUTER_BOUND ( 'NONE', #2858, .T. ) ; +#1091 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.731847993664262700E-016, -0.0000000000000000000 ) ) ; +#1092 = ORIENTED_EDGE ( 'NONE', *, *, #2472, .F. ) ; +#1093 = ORIENTED_EDGE ( 'NONE', *, *, #1698, .T. ) ; +#1094 = ORIENTED_EDGE ( 'NONE', *, *, #2904, .F. ) ; +#1095 = ORIENTED_EDGE ( 'NONE', *, *, #2268, .F. ) ; +#1096 = CARTESIAN_POINT ( 'NONE', ( 2.227291815932487900, -0.4188565208918158000, 0.8125000000000000000 ) ) ; +#1097 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999900, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1098 = CYLINDRICAL_SURFACE ( 'NONE', #2532, 0.1250000000000000300 ) ; +#1099 = ORIENTED_EDGE ( 'NONE', *, *, #1, .T. ) ; +#1100 = ORIENTED_EDGE ( 'NONE', *, *, #1159, .T. ) ; +#1101 = CARTESIAN_POINT ( 'NONE', ( 1.999999999999998900, 1.250000000000000000, 0.0000000000000000000 ) ) ; +#1102 = AXIS2_PLACEMENT_3D ( 'NONE', #412, #869, #2505 ) ; +#1103 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1104 = LINE ( 'NONE', #1918, #2498 ) ; +#1105 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 0.4999999999999996100 ) ) ; +#1106 = EDGE_CURVE ( 'NONE', #2782, #2919, #933, .T. ) ; +#1107 = LINE ( 'NONE', #2477, #487 ) ; +#1108 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1109 = EDGE_CURVE ( 'NONE', #1650, #1783, #601, .T. ) ; +#1110 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1111 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1112 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279400, 0.1318487067688303100, 1.174999999999999800 ) ) ; +#1113 = ORIENTED_EDGE ( 'NONE', *, *, #1538, .F. ) ; +#1114 = EDGE_CURVE ( 'NONE', #250, #1944, #1072, .T. ) ; +#1115 = AXIS2_PLACEMENT_3D ( 'NONE', #1472, #761, #40 ) ; +#1116 = ORIENTED_EDGE ( 'NONE', *, *, #2143, .F. ) ; +#1117 = VERTEX_POINT ( 'NONE', #311 ) ; +#1118 = CIRCLE ( 'NONE', #83, 0.1330000000000002600 ) ; +#1119 = ADVANCED_FACE ( 'NONE', ( #2465 ), #1736, .F. ) ; +#1120 = VECTOR ( 'NONE', #2525, 39.37007874015748100 ) ; +#1121 = ORIENTED_EDGE ( 'NONE', *, *, #2999, .T. ) ; +#1122 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1123 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1124 = CIRCLE ( 'NONE', #1738, 0.1947179912523943300 ) ; +#1125 = DIRECTION ( 'NONE', ( 1.294972880571175400E-016, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1126 = CARTESIAN_POINT ( 'NONE', ( -2.465750000000000300, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1127 = VECTOR ( 'NONE', #896, 39.37007874015748100 ) ; +#1128 = VERTEX_POINT ( 'NONE', #2028 ) ; +#1129 = LINE ( 'NONE', #1364, #2926 ) ; +#1130 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1131 = EDGE_CURVE ( 'NONE', #2487, #675, #1925, .T. ) ; +#1132 = ORIENTED_EDGE ( 'NONE', *, *, #2706, .T. ) ; +#1133 = ORIENTED_EDGE ( 'NONE', *, *, #37, .F. ) ; +#1134 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, 0.6250000000000000000, 1.000000000000000000 ) ) ; +#1135 = CARTESIAN_POINT ( 'NONE', ( -2.380000000000000300, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1136 = AXIS2_PLACEMENT_3D ( 'NONE', #2170, #1681, #1002 ) ; +#1137 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1138 = ADVANCED_FACE ( 'NONE', ( #1252 ), #587, .F. ) ; +#1139 = VECTOR ( 'NONE', #306, 39.37007874015748100 ) ; +#1140 = VECTOR ( 'NONE', #2730, 39.37007874015748100 ) ; +#1141 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1142 = EDGE_CURVE ( 'NONE', #653, #2153, #381, .T. ) ; +#1143 = CARTESIAN_POINT ( 'NONE', ( 2.526213591511189200, -0.08733638245144770300, 0.6250000000000000000 ) ) ; +#1144 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1145 = CARTESIAN_POINT ( 'NONE', ( -0.9032500000000001100, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1146 = B_SPLINE_CURVE_WITH_KNOTS ( 'NONE', 3, + ( #864, #879, #407, #178, #2311, #1143, #1155, #2291, #2060, #2978 ), + .UNSPECIFIED., .F., .F., + ( 4, 1, 1, 1, 1, 1, 1, 4 ), + ( 0.1804171056932950000, 0.2574214255684045300, 0.3271167815832054000, 0.3787956272272490800, 0.4753932694299508000, 0.5595206077257001100, 0.6412861705332345600, 0.6905092016622609300 ), + .UNSPECIFIED. ) ; +#1147 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1148 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026637200, 0.2549102234176834900, 1.375000000000000000 ) ) ; +#1149 = AXIS2_PLACEMENT_3D ( 'NONE', #2427, #807, #1486 ) ; +#1150 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1151 = ADVANCED_FACE ( 'NONE', ( #2637 ), #2818, .F. ) ; +#1152 = ORIENTED_EDGE ( 'NONE', *, *, #1318, .T. ) ; +#1153 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1154 = ORIENTED_EDGE ( 'NONE', *, *, #2932, .F. ) ; +#1155 = CARTESIAN_POINT ( 'NONE', ( 1.904415784228984400, -0.2020162695637367200, 0.6250000000000000000 ) ) ; +#1156 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#1157 = AXIS2_PLACEMENT_3D ( 'NONE', #1643, #2134, #2806 ) ; +#1158 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1159 = EDGE_CURVE ( 'NONE', #852, #2278, #2207, .T. ) ; +#1160 = LINE ( 'NONE', #2504, #1645 ) ; +#1161 = CIRCLE ( 'NONE', #2916, 0.1947179912523943300 ) ; +#1162 = VERTEX_POINT ( 'NONE', #2466 ) ; +#1163 = LINE ( 'NONE', #703, #1089 ) ; +#1164 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#1165 = LINE ( 'NONE', #2693, #1789 ) ; +#1166 = EDGE_LOOP ( 'NONE', ( #1731, #2001, #427, #798 ) ) ; +#1167 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, 0.1874999999999997500, 0.5000000000000000000 ) ) ; +#1168 = VERTEX_POINT ( 'NONE', #2242 ) ; +#1169 = ORIENTED_EDGE ( 'NONE', *, *, #1704, .T. ) ; +#1170 = ORIENTED_EDGE ( 'NONE', *, *, #1846, .F. ) ; +#1171 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1172 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1173 = PLANE ( 'NONE', #1042 ) ; +#1174 = CIRCLE ( 'NONE', #755, 0.1330000000000005100 ) ; +#1175 = ADVANCED_FACE ( 'NONE', ( #3027 ), #1777, .F. ) ; +#1176 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1177 = EDGE_LOOP ( 'NONE', ( #2373, #2357, #805, #1767 ) ) ; +#1178 = ORIENTED_EDGE ( 'NONE', *, *, #1184, .T. ) ; +#1179 = EDGE_CURVE ( 'NONE', #2814, #1946, #2017, .T. ) ; +#1180 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1181 = AXIS2_PLACEMENT_3D ( 'NONE', #1630, #955, #2148 ) ; +#1182 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1183 = CIRCLE ( 'NONE', #1540, 0.1249999999999999000 ) ; +#1184 = EDGE_CURVE ( 'NONE', #836, #956, #2415, .T. ) ; +#1185 = AXIS2_PLACEMENT_3D ( 'NONE', #1801, #2264, #2045 ) ; +#1186 = FACE_BOUND ( 'NONE', #615, .T. ) ; +#1187 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1188 =( CONVERSION_BASED_UNIT ( 'INCH', #2113 ) LENGTH_UNIT ( ) NAMED_UNIT ( #2162 ) ); +#1189 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1190 = ADVANCED_FACE ( 'NONE', ( #1090 ), #828, .F. ) ; +#1191 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1192 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1193 = SURFACE_STYLE_USAGE ( .BOTH. , #488 ) ; +#1194 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .T. ) ; +#1195 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1196 = SURFACE_SIDE_STYLE ('',( #376 ) ) ; +#1197 = AXIS2_PLACEMENT_3D ( 'NONE', #564, #1023, #818 ) ; +#1198 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1199 = AXIS2_PLACEMENT_3D ( 'NONE', #31, #1213, #2856 ) ; +#1200 = EDGE_LOOP ( 'NONE', ( #2997, #370, #1396, #2923 ) ) ; +#1201 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1202 = CYLINDRICAL_SURFACE ( 'NONE', #1306, 0.1330000000000002000 ) ; +#1203 = PLANE ( 'NONE', #2810 ) ; +#1204 = CIRCLE ( 'NONE', #612, 0.2187500000000000800 ) ; +#1205 = ORIENTED_EDGE ( 'NONE', *, *, #2807, .T. ) ; +#1206 = VECTOR ( 'NONE', #1314, 39.37007874015748100 ) ; +#1207 = ORIENTED_EDGE ( 'NONE', *, *, #1609, .T. ) ; +#1208 = FACE_BOUND ( 'NONE', #2185, .T. ) ; +#1209 = ORIENTED_EDGE ( 'NONE', *, *, #1450, .T. ) ; +#1210 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1211 = EDGE_CURVE ( 'NONE', #1802, #2712, #2780, .T. ) ; +#1212 = CIRCLE ( 'NONE', #1115, 0.1250000000000000300 ) ; +#1213 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1214 = ORIENTED_EDGE ( 'NONE', *, *, #868, .T. ) ; +#1215 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1216 = EDGE_CURVE ( 'NONE', #2885, #502, #1165, .T. ) ; +#1217 = AXIS2_PLACEMENT_3D ( 'NONE', #1228, #2649, #787 ) ; +#1218 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1219 = CIRCLE ( 'NONE', #2231, 0.1330000000000004800 ) ; +#1220 = EDGE_LOOP ( 'NONE', ( #2930, #695 ) ) ; +#1221 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999400, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1222 = VECTOR ( 'NONE', #672, 39.37007874015748100 ) ; +#1223 = EDGE_CURVE ( 'NONE', #2875, #175, #1307, .T. ) ; +#1224 = AXIS2_PLACEMENT_3D ( 'NONE', #2817, #1849, #439 ) ; +#1225 = EDGE_CURVE ( 'NONE', #1734, #1787, #2851, .T. ) ; +#1226 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1227 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1228 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1229 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999400, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1230 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026639400, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#1231 = ORIENTED_EDGE ( 'NONE', *, *, #2977, .T. ) ; +#1232 = ADVANCED_FACE ( 'NONE', ( #1388 ), #2922, .F. ) ; +#1233 = EDGE_CURVE ( 'NONE', #2153, #2613, #2179, .T. ) ; +#1234 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #2863 ) ) ; +#1235 = CIRCLE ( 'NONE', #2768, 0.2187499999999999400 ) ; +#1236 = ORIENTED_EDGE ( 'NONE', *, *, #483, .F. ) ; +#1237 = ORIENTED_EDGE ( 'NONE', *, *, #1223, .F. ) ; +#1238 = CIRCLE ( 'NONE', #1884, 0.2187499999999999400 ) ; +#1239 = AXIS2_PLACEMENT_3D ( 'NONE', #212, #1601, #1125 ) ; +#1240 = FACE_OUTER_BOUND ( 'NONE', #208, .T. ) ; +#1241 = ORIENTED_EDGE ( 'NONE', *, *, #479, .T. ) ; +#1242 = ORIENTED_EDGE ( 'NONE', *, *, #1913, .F. ) ; +#1243 = VERTEX_POINT ( 'NONE', #2289 ) ; +#1244 = ORIENTED_EDGE ( 'NONE', *, *, #173, .T. ) ; +#1245 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1246 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #1948, 'design' ) ; +#1247 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000100, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1248 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1249 = VECTOR ( 'NONE', #2267, 39.37007874015748100 ) ; +#1250 = ADVANCED_FACE ( 'NONE', ( #131 ), #1727, .F. ) ; +#1251 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#1252 = FACE_OUTER_BOUND ( 'NONE', #2574, .T. ) ; +#1253 = CARTESIAN_POINT ( 'NONE', ( 2.405623984976974100, 0.4624496049483496400, 0.6250000000000000000 ) ) ; +#1254 = AXIS2_PLACEMENT_3D ( 'NONE', #77, #566, #2229 ) ; +#1255 = FACE_BOUND ( 'NONE', #2767, .T. ) ; +#1256 = ORIENTED_EDGE ( 'NONE', *, *, #2474, .T. ) ; +#1257 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1258 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1259 = AXIS2_PLACEMENT_3D ( 'NONE', #1079, #632, #1790 ) ; +#1260 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, -0.1875000000000003900, 0.5000000000000000000 ) ) ; +#1261 = EDGE_CURVE ( 'NONE', #1695, #1944, #545, .T. ) ; +#1262 = VERTEX_POINT ( 'NONE', #2759 ) ; +#1263 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1264 = FACE_OUTER_BOUND ( 'NONE', #1717, .T. ) ; +#1265 = ORIENTED_EDGE ( 'NONE', *, *, #1330, .T. ) ; +#1266 = LINE ( 'NONE', #1493, #2668 ) ; +#1267 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979653700, 0.6874999999999998900, 0.8125000000000000000 ) ) ; +#1268 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1269 = LINE ( 'NONE', #1191, #613 ) ; +#1270 = EDGE_CURVE ( 'NONE', #710, #2702, #2347, .T. ) ; +#1271 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1272 = ORIENTED_EDGE ( 'NONE', *, *, #1109, .F. ) ; +#1273 = VERTEX_POINT ( 'NONE', #1229 ) ; +#1274 = LINE ( 'NONE', #2864, #22 ) ; +#1275 = VERTEX_POINT ( 'NONE', #1221 ) ; +#1276 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1277 = VECTOR ( 'NONE', #503, 39.37007874015748100 ) ; +#1278 = ORIENTED_EDGE ( 'NONE', *, *, #155, .F. ) ; +#1279 = EDGE_CURVE ( 'NONE', #366, #811, #286, .T. ) ; +#1280 = EDGE_CURVE ( 'NONE', #1730, #655, #2884, .T. ) ; +#1281 = CIRCLE ( 'NONE', #790, 0.1947179912523943300 ) ; +#1282 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1283 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.6875000000000001100, 0.8125000000000000000 ) ) ; +#1284 = ORIENTED_EDGE ( 'NONE', *, *, #2196, .F. ) ; +#1285 = ORIENTED_EDGE ( 'NONE', *, *, #1832, .T. ) ; +#1286 = CARTESIAN_POINT ( 'NONE', ( 2.294434124949071000, 0.1559617977120215700, 0.8125000000000000000 ) ) ; +#1287 = LINE ( 'NONE', #2202, #1139 ) ; +#1288 = EDGE_LOOP ( 'NONE', ( #1729, #1205, #2251, #2748 ) ) ; +#1289 = EDGE_CURVE ( 'NONE', #1435, #1316, #2556, .T. ) ; +#1290 = VECTOR ( 'NONE', #863, 39.37007874015748100 ) ; +#1291 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#1292 = AXIS2_PLACEMENT_3D ( 'NONE', #643, #2991, #1123 ) ; +#1293 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1294 = AXIS2_PLACEMENT_3D ( 'NONE', #3021, #2369, #1171 ) ; +#1295 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1296 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1297 = EDGE_CURVE ( 'NONE', #1968, #591, #2272, .T. ) ; +#1298 = ORIENTED_EDGE ( 'NONE', *, *, #2541, .T. ) ; +#1299 = VECTOR ( 'NONE', #622, 39.37007874015748100 ) ; +#1300 = FACE_OUTER_BOUND ( 'NONE', #1619, .T. ) ; +#1301 = LINE ( 'NONE', #1870, #1895 ) ; +#1302 = ORIENTED_EDGE ( 'NONE', *, *, #3022, .F. ) ; +#1303 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.4375503462087652100, 0.8125000000000000000 ) ) ; +#1304 = ORIENTED_EDGE ( 'NONE', *, *, #2169, .T. ) ; +#1305 = CIRCLE ( 'NONE', #629, 0.5000000000000001100 ) ; +#1306 = AXIS2_PLACEMENT_3D ( 'NONE', #2194, #1746, #1038 ) ; +#1307 = LINE ( 'NONE', #2737, #470 ) ; +#1308 = ORIENTED_EDGE ( 'NONE', *, *, #2776, .T. ) ; +#1309 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1310 = ORIENTED_EDGE ( 'NONE', *, *, #2107, .T. ) ; +#1311 = CARTESIAN_POINT ( 'NONE', ( -3.161825413516036900, -0.6875000000000003300, 0.5000000000000000000 ) ) ; +#1312 = CARTESIAN_POINT ( 'NONE', ( 0.2217499999999999200, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1313 = ORIENTED_EDGE ( 'NONE', *, *, #11, .F. ) ; +#1314 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1315 = ORIENTED_EDGE ( 'NONE', *, *, #2590, .T. ) ; +#1316 = VERTEX_POINT ( 'NONE', #1711 ) ; +#1317 = VECTOR ( 'NONE', #2254, 39.37007874015748100 ) ; +#1318 = EDGE_CURVE ( 'NONE', #963, #80, #2239, .T. ) ; +#1319 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1320 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1321 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1322 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.8750000000000000000 ) ) ; +#1323 = FACE_OUTER_BOUND ( 'NONE', #927, .T. ) ; +#1324 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1325 = LINE ( 'NONE', #1069, #1629 ) ; +#1326 = ORIENTED_EDGE ( 'NONE', *, *, #1106, .T. ) ; +#1327 = EDGE_CURVE ( 'NONE', #997, #2405, #1942, .T. ) ; +#1328 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1329 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279400, 0.1318487067688303100, 1.375000000000000000 ) ) ; +#1330 = EDGE_CURVE ( 'NONE', #1533, #2209, #1826, .T. ) ; +#1331 = AXIS2_PLACEMENT_3D ( 'NONE', #2971, #2975, #162 ) ; +#1332 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1333 = VERTEX_POINT ( 'NONE', #752 ) ; +#1334 = ORIENTED_EDGE ( 'NONE', *, *, #2222, .T. ) ; +#1335 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1336 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250981300, 0.6874999999999998900, 0.5000000000000000000 ) ) ; +#1337 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1338 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #2812 ); +#1339 = ORIENTED_EDGE ( 'NONE', *, *, #388, .F. ) ; +#1340 = FACE_OUTER_BOUND ( 'NONE', #519, .T. ) ; +#1341 = ORIENTED_EDGE ( 'NONE', *, *, #275, .F. ) ; +#1342 = CYLINDRICAL_SURFACE ( 'NONE', #398, 0.09999999999999992200 ) ; +#1343 = VERTEX_POINT ( 'NONE', #1446 ) ; +#1344 = ORIENTED_EDGE ( 'NONE', *, *, #2684, .F. ) ; +#1345 = CIRCLE ( 'NONE', #469, 0.2187499999999999400 ) ; +#1346 = EDGE_LOOP ( 'NONE', ( #333, #159, #1542, #806 ) ) ; +#1347 = ORIENTED_EDGE ( 'NONE', *, *, #1812, .F. ) ; +#1348 = ORIENTED_EDGE ( 'NONE', *, *, #1806, .F. ) ; +#1349 = AXIS2_PLACEMENT_3D ( 'NONE', #1509, #82, #2411 ) ; +#1350 = LINE ( 'NONE', #65, #1317 ) ; +#1351 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.4999999999999996700 ) ) ; +#1352 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1353 = AXIS2_PLACEMENT_3D ( 'NONE', #1647, #232, #242 ) ; +#1354 = VERTEX_POINT ( 'NONE', #268 ) ; +#1355 = VERTEX_POINT ( 'NONE', #2164 ) ; +#1356 = ADVANCED_FACE ( 'NONE', ( #1024 ), #1469, .T. ) ; +#1357 = VERTEX_POINT ( 'NONE', #46 ) ; +#1358 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1359 = EDGE_CURVE ( 'NONE', #542, #1275, #654, .T. ) ; +#1360 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, 0.2500000000000002200, 0.8750000000000000000 ) ) ; +#1361 = EDGE_LOOP ( 'NONE', ( #1393, #2827 ) ) ; +#1362 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#1363 = CYLINDRICAL_SURFACE ( 'NONE', #1594, 0.1330000000000003700 ) ; +#1364 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 1.250000000000000000, 0.0000000000000000000 ) ) ; +#1365 = EDGE_CURVE ( 'NONE', #1923, #2909, #25, .T. ) ; +#1366 = AXIS2_PLACEMENT_3D ( 'NONE', #1260, #335, #2689 ) ; +#1367 = ADVANCED_FACE ( 'NONE', ( #1056 ), #432, .F. ) ; +#1368 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1369 = PLANE ( 'NONE', #1292 ) ; +#1370 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000001800, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1371 = PLANE ( 'NONE', #1239 ) ; +#1372 = EDGE_LOOP ( 'NONE', ( #1116, #467, #2039, #2587 ) ) ; +#1373 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1374 = EDGE_CURVE ( 'NONE', #734, #1946, #1759, .T. ) ; +#1375 = EDGE_CURVE ( 'NONE', #2560, #2359, #912, .T. ) ; +#1376 = ORIENTED_EDGE ( 'NONE', *, *, #583, .F. ) ; +#1377 = CIRCLE ( 'NONE', #1197, 0.2187499999999999400 ) ; +#1378 = FACE_OUTER_BOUND ( 'NONE', #1978, .T. ) ; +#1379 = LINE ( 'NONE', #925, #160 ) ; +#1380 = ORIENTED_EDGE ( 'NONE', *, *, #1048, .F. ) ; +#1381 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1382 = EDGE_LOOP ( 'NONE', ( #954, #887, #2217, #1132 ) ) ; +#1383 = CARTESIAN_POINT ( 'NONE', ( -3.161825413516036900, -0.6875000000000003300, 1.000000000000000000 ) ) ; +#1384 = LINE ( 'NONE', #2216, #284 ) ; +#1385 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1386 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1387 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#1388 = FACE_OUTER_BOUND ( 'NONE', #1200, .T. ) ; +#1389 = ORIENTED_EDGE ( 'NONE', *, *, #743, .T. ) ; +#1390 = VERTEX_POINT ( 'NONE', #1831 ) ; +#1391 = ADVANCED_FACE ( 'NONE', ( #1653 ), #1463, .F. ) ; +#1392 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1393 = ORIENTED_EDGE ( 'NONE', *, *, #1755, .T. ) ; +#1394 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1395 = EDGE_CURVE ( 'NONE', #599, #220, #399, .T. ) ; +#1396 = ORIENTED_EDGE ( 'NONE', *, *, #583, .T. ) ; +#1397 = LINE ( 'NONE', #1744, #1431 ) ; +#1398 = VERTEX_POINT ( 'NONE', #442 ) ; +#1399 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, 0.6250000000000000000, 1.375000000000000000 ) ) ; +#1400 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1401 = VECTOR ( 'NONE', #2149, 39.37007874015748100 ) ; +#1402 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1403 = FACE_BOUND ( 'NONE', #2089, .T. ) ; +#1404 = ORIENTED_EDGE ( 'NONE', *, *, #166, .F. ) ; +#1405 = ADVANCED_FACE ( 'NONE', ( #2448 ), #989, .F. ) ; +#1406 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.731847993664262700E-016, 0.0000000000000000000 ) ) ; +#1407 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999996600, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1408 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#1409 = PLANE ( 'NONE', #648 ) ; +#1410 = AXIS2_PLACEMENT_3D ( 'NONE', #257, #2836, #2154 ) ; +#1411 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1412 = ORIENTED_EDGE ( 'NONE', *, *, #152, .T. ) ; +#1413 = ORIENTED_EDGE ( 'NONE', *, *, #1365, .T. ) ; +#1414 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1415 = ADVANCED_FACE ( 'NONE', ( #687, #840, #58, #1208, #1608, #2306, #206, #2484, #1240 ), #656, .T. ) ; +#1416 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #478 ) ; +#1417 = CIRCLE ( 'NONE', #929, 0.1330000000000004800 ) ; +#1418 = ORIENTED_EDGE ( 'NONE', *, *, #1216, .T. ) ; +#1419 = CYLINDRICAL_SURFACE ( 'NONE', #1149, 0.2187499999999999400 ) ; +#1420 = EDGE_LOOP ( 'NONE', ( #1816, #319, #171, #133 ) ) ; +#1421 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) ); +#1422 = VECTOR ( 'NONE', #493, 39.37007874015748100 ) ; +#1423 = ORIENTED_EDGE ( 'NONE', *, *, #856, .F. ) ; +#1424 = VERTEX_POINT ( 'NONE', #891 ) ; +#1425 = EDGE_CURVE ( 'NONE', #1273, #1343, #618, .T. ) ; +#1426 = CIRCLE ( 'NONE', #1569, 0.1330000000000002000 ) ; +#1427 = ORIENTED_EDGE ( 'NONE', *, *, #3009, .F. ) ; +#1428 = ORIENTED_EDGE ( 'NONE', *, *, #2627, .T. ) ; +#1429 = VERTEX_POINT ( 'NONE', #3010 ) ; +#1430 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1431 = VECTOR ( 'NONE', #93, 39.37007874015748100 ) ; +#1432 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) ); +#1433 = CARTESIAN_POINT ( 'NONE', ( -2.028250000000000300, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1434 = EDGE_LOOP ( 'NONE', ( #2218, #1460, #219, #1945 ) ) ; +#1435 = VERTEX_POINT ( 'NONE', #2067 ) ; +#1436 = EDGE_CURVE ( 'NONE', #788, #548, #2984, .T. ) ; +#1437 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ; +#1438 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1439 = VERTEX_POINT ( 'NONE', #917 ) ; +#1440 = EDGE_CURVE ( 'NONE', #655, #2233, #2011, .T. ) ; +#1441 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 0.0000000000000000000 ) ) ; +#1442 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1443 = EDGE_CURVE ( 'NONE', #865, #963, #2377, .T. ) ; +#1444 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1445 = CYLINDRICAL_SURFACE ( 'NONE', #1794, 0.09999999999999989500 ) ; +#1446 = CARTESIAN_POINT ( 'NONE', ( -2.380000000000000800, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1447 = ADVANCED_FACE ( 'NONE', ( #1901 ), #642, .T. ) ; +#1448 = ORIENTED_EDGE ( 'NONE', *, *, #971, .F. ) ; +#1449 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1450 = EDGE_CURVE ( 'NONE', #1168, #2857, #875, .T. ) ; +#1451 = CARTESIAN_POINT ( 'NONE', ( 2.499999999243048200, -0.3967912632750754100, 0.8124999999999998900 ) ) ; +#1452 = ORIENTED_EDGE ( 'NONE', *, *, #315, .T. ) ; +#1453 = AXIS2_PLACEMENT_3D ( 'NONE', #904, #1141, #418 ) ; +#1454 = CIRCLE ( 'NONE', #373, 0.2187500000000000800 ) ; +#1455 = VECTOR ( 'NONE', #2078, 39.37007874015748100 ) ; +#1456 = DIRECTION ( 'NONE', ( -1.986798540846736500E-016, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#1457 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.3549102234176832500, 1.375000000000000000 ) ) ; +#1458 = FACE_OUTER_BOUND ( 'NONE', #859, .T. ) ; +#1459 = ORIENTED_EDGE ( 'NONE', *, *, #1025, .F. ) ; +#1460 = ORIENTED_EDGE ( 'NONE', *, *, #1967, .F. ) ; +#1461 = CYLINDRICAL_SURFACE ( 'NONE', #2671, 0.1250000000000000300 ) ; +#1462 = DIRECTION ( 'NONE', ( 1.000000000000000000, 6.481953218662490300E-017, -0.0000000000000000000 ) ) ; +#1463 = CYLINDRICAL_SURFACE ( 'NONE', #455, 0.2187499999999999400 ) ; +#1464 = ORIENTED_EDGE ( 'NONE', *, *, #1928, .T. ) ; +#1465 = ORIENTED_EDGE ( 'NONE', *, *, #637, .T. ) ; +#1466 = ORIENTED_EDGE ( 'NONE', *, *, #2531, .F. ) ; +#1467 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, 0.3310549223287783100, 1.174999999999999800 ) ) ; +#1468 = EDGE_CURVE ( 'NONE', #502, #2814, #2773, .T. ) ; +#1469 = PLANE ( 'NONE', #353 ) ; +#1470 = ORIENTED_EDGE ( 'NONE', *, *, #1769, .T. ) ; +#1471 = FACE_OUTER_BOUND ( 'NONE', #611, .T. ) ; +#1472 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, 0.2060549223287782800, 1.174999999999999800 ) ) ; +#1473 = ORIENTED_EDGE ( 'NONE', *, *, #1184, .F. ) ; +#1474 = ORIENTED_EDGE ( 'NONE', *, *, #1501, .F. ) ; +#1475 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1476 = AXIS2_PLACEMENT_3D ( 'NONE', #1407, #1845, #446 ) ; +#1477 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 0.4999999999999996100 ) ) ; +#1478 = CYLINDRICAL_SURFACE ( 'NONE', #1224, 0.2187500000000000000 ) ; +#1479 = FACE_OUTER_BOUND ( 'NONE', #2109, .T. ) ; +#1480 = ORIENTED_EDGE ( 'NONE', *, *, #1114, .F. ) ; +#1481 = AXIS2_PLACEMENT_3D ( 'NONE', #1951, #1248, #554 ) ; +#1482 = EDGE_CURVE ( 'NONE', #203, #788, #1530, .T. ) ; +#1483 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1484 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#1485 = ADVANCED_FACE ( 'NONE', ( #1605, #1756 ), #2571, .F. ) ; +#1486 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1487 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026637200, 0.2549102234176834900, 1.174999999999999800 ) ) ; +#1488 = PLANE ( 'NONE', #2568 ) ; +#1489 = ORIENTED_EDGE ( 'NONE', *, *, #294, .T. ) ; +#1490 = ORIENTED_EDGE ( 'NONE', *, *, #1012, .F. ) ; +#1491 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999997700, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1492 = CARTESIAN_POINT ( 'NONE', ( 2.499999999148911000, -0.3967912632963749900, 0.6250000000000000000 ) ) ; +#1493 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#1494 = EDGE_CURVE ( 'NONE', #385, #371, #984, .T. ) ; +#1495 = AXIS2_PLACEMENT_3D ( 'NONE', #1337, #2263, #1799 ) ; +#1496 = CYLINDRICAL_SURFACE ( 'NONE', #1818, 0.2187499999999999400 ) ; +#1497 = VERTEX_POINT ( 'NONE', #2824 ) ; +#1498 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1499 = VECTOR ( 'NONE', #1949, 39.37007874015748100 ) ; +#1500 = EDGE_LOOP ( 'NONE', ( #1551, #961 ) ) ; +#1501 = EDGE_CURVE ( 'NONE', #2049, #1923, #2700, .T. ) ; +#1502 = VECTOR ( 'NONE', #1627, 39.37007874015748100 ) ; +#1503 = ORIENTED_EDGE ( 'NONE', *, *, #647, .F. ) ; +#1504 = ORIENTED_EDGE ( 'NONE', *, *, #2072, .F. ) ; +#1505 = LINE ( 'NONE', #2903, #1573 ) ; +#1506 = ORIENTED_EDGE ( 'NONE', *, *, #2723, .T. ) ; +#1507 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1508 = VERTEX_POINT ( 'NONE', #210 ) ; +#1509 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1510 = LINE ( 'NONE', #79, #2492 ) ; +#1511 = ORIENTED_EDGE ( 'NONE', *, *, #397, .T. ) ; +#1512 = CIRCLE ( 'NONE', #2940, 0.1330000000000002000 ) ; +#1513 = ORIENTED_EDGE ( 'NONE', *, *, #11, .T. ) ; +#1514 = ORIENTED_EDGE ( 'NONE', *, *, #2977, .F. ) ; +#1515 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000004500, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1516 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1517 = FACE_OUTER_BOUND ( 'NONE', #3035, .T. ) ; +#1518 = AXIS2_PLACEMENT_3D ( 'NONE', #150, #610, #2037 ) ; +#1519 = CARTESIAN_POINT ( 'NONE', ( -2.028250000000000300, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1520 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, -0.2060549223287785900, 1.375000000000000000 ) ) ; +#1521 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060131000, -0.3549102234176832500, 1.375000000000000000 ) ) ; +#1522 = EDGE_CURVE ( 'NONE', #1993, #424, #2443, .T. ) ; +#1523 = ORIENTED_EDGE ( 'NONE', *, *, #2083, .T. ) ; +#1524 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1525 = AXIS2_PLACEMENT_3D ( 'NONE', #515, #1921, #781 ) ; +#1526 = VECTOR ( 'NONE', #2120, 39.37007874015748100 ) ; +#1527 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, 0.3310549223287783100, 1.174999999999999800 ) ) ; +#1528 = CARTESIAN_POINT ( 'NONE', ( 2.526213591511189200, -0.08733638245144770300, 0.8124999999999998900 ) ) ; +#1529 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1530 = CIRCLE ( 'NONE', #1294, 0.4999999999999998300 ) ; +#1531 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1532 = VECTOR ( 'NONE', #860, 39.37007874015748100 ) ; +#1533 = VERTEX_POINT ( 'NONE', #2119 ) ; +#1534 = B_SPLINE_SURFACE_WITH_KNOTS ( 'NONE', 3, 1, ( + ( #1998, #116 ), + ( #1253, #2212 ), + ( #1762, #363 ), + ( #2907, #2661 ), + ( #1059, #2459 ), + ( #107, #1528 ), + ( #2929, #1735 ), + ( #97, #2225 ), + ( #2891, #785 ), + ( #1492, #1965 ) ), + .UNSPECIFIED., .F., .F., .F., + ( 4, 1, 1, 1, 1, 1, 1, 4 ), + ( 2, 2 ), + ( 0.1804171047776078100, 0.2574214255684045300, 0.3271167815832054000, 0.3787956272272490800, 0.4753932694299508000, 0.5595206077257001100, 0.6412861705332345600, 0.6905092016411746900 ), + ( 0.0000000000000000000, 1.000000000000000000 ), + .UNSPECIFIED. ) ; +#1535 = LINE ( 'NONE', #1112, #1206 ) ; +#1536 = VECTOR ( 'NONE', #1693, 39.37007874015748100 ) ; +#1537 = ORIENTED_EDGE ( 'NONE', *, *, #1552, .T. ) ; +#1538 = EDGE_CURVE ( 'NONE', #1357, #2702, #1977, .T. ) ; +#1539 = EDGE_LOOP ( 'NONE', ( #592, #977 ) ) ; +#1540 = AXIS2_PLACEMENT_3D ( 'NONE', #197, #1144, #2993 ) ; +#1541 = EDGE_CURVE ( 'NONE', #2405, #2296, #1936, .T. ) ; +#1542 = ORIENTED_EDGE ( 'NONE', *, *, #2623, .T. ) ; +#1543 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1544 = FACE_OUTER_BOUND ( 'NONE', #365, .T. ) ; +#1545 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1546 = ORIENTED_EDGE ( 'NONE', *, *, #1967, .T. ) ; +#1547 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#1548 = VERTEX_POINT ( 'NONE', #938 ) ; +#1549 = CARTESIAN_POINT ( 'NONE', ( -2.028250000000000300, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1550 = ORIENTED_EDGE ( 'NONE', *, *, #1270, .F. ) ; +#1551 = ORIENTED_EDGE ( 'NONE', *, *, #1541, .F. ) ; +#1552 = EDGE_CURVE ( 'NONE', #2613, #2650, #1819, .T. ) ; +#1553 = CARTESIAN_POINT ( 'NONE', ( 1.346749999999999700, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1554 = LINE ( 'NONE', #124, #1140 ) ; +#1555 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1556 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#1557 = AXIS2_PLACEMENT_3D ( 'NONE', #1906, #942, #2327 ) ; +#1558 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1559 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.6875000000000001100, 1.000000000000000000 ) ) ; +#1560 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1561 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, 0.6250000000000000000, 1.375000000000000000 ) ) ; +#1562 = ORIENTED_EDGE ( 'NONE', *, *, #707, .F. ) ; +#1563 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1564 = VECTOR ( 'NONE', #2562, 39.37007874015748100 ) ; +#1565 = ORIENTED_EDGE ( 'NONE', *, *, #2623, .F. ) ; +#1566 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, 0.3310549223287783100, 1.174999999999999800 ) ) ; +#1567 = LINE ( 'NONE', #900, #87 ) ; +#1568 = ORIENTED_EDGE ( 'NONE', *, *, #1541, .T. ) ; +#1569 = AXIS2_PLACEMENT_3D ( 'NONE', #523, #1963, #63 ) ; +#1570 = FACE_OUTER_BOUND ( 'NONE', #2955, .T. ) ; +#1571 = ORIENTED_EDGE ( 'NONE', *, *, #2010, .T. ) ; +#1572 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1573 = VECTOR ( 'NONE', #586, 39.37007874015748100 ) ; +#1574 = ORIENTED_EDGE ( 'NONE', *, *, #971, .T. ) ; +#1575 = ORIENTED_EDGE ( 'NONE', *, *, #2996, .F. ) ; +#1576 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1577 = CIRCLE ( 'NONE', #2328, 0.2187499999999999400 ) ; +#1578 = PRODUCT ( 'featuretype', 'featuretype', '', ( #304 ) ) ; +#1579 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .T. ) ; +#1580 = ORIENTED_EDGE ( 'NONE', *, *, #1917, .F. ) ; +#1581 = ORIENTED_EDGE ( 'NONE', *, *, #1142, .F. ) ; +#1582 = EDGE_CURVE ( 'NONE', #1984, #435, #580, .T. ) ; +#1583 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1584 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -0.6875000000000003300, 1.000000000000000000 ) ) ; +#1585 = FACE_OUTER_BOUND ( 'NONE', #1857, .T. ) ; +#1586 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 0.8125000000000000000 ) ) ; +#1587 = ADVANCED_FACE ( 'NONE', ( #1570 ), #1342, .F. ) ; +#1588 = EDGE_CURVE ( 'NONE', #2105, #1995, #1204, .T. ) ; +#1589 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1590 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999996600, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1591 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.6875000000000001100, 0.8125000000000000000 ) ) ; +#1592 = CARTESIAN_POINT ( 'NONE', ( -2.465749999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1593 = EDGE_CURVE ( 'NONE', #2265, #2782, #280, .T. ) ; +#1594 = AXIS2_PLACEMENT_3D ( 'NONE', #2069, #899, #2877 ) ; +#1595 = EDGE_CURVE ( 'NONE', #680, #1398, #322, .T. ) ; +#1596 = EDGE_LOOP ( 'NONE', ( #202, #1404 ) ) ; +#1597 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #966, 'distance_accuracy_value', 'NONE'); +#1598 = DIRECTION ( 'NONE', ( 6.481953218662490300E-017, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1599 = DIRECTION ( 'NONE', ( 6.481953218662490300E-017, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1600 = CARTESIAN_POINT ( 'NONE', ( -2.465750000000000300, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1601 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.294972880571175400E-016, 0.0000000000000000000 ) ) ; +#1602 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1603 = LINE ( 'NONE', #1312, #318 ) ; +#1604 = ADVANCED_FACE ( 'NONE', ( #2172 ), #1687, .F. ) ; +#1605 = FACE_BOUND ( 'NONE', #2515, .T. ) ; +#1606 = ORIENTED_EDGE ( 'NONE', *, *, #743, .F. ) ; +#1607 = VECTOR ( 'NONE', #640, 39.37007874015748100 ) ; +#1608 = FACE_BOUND ( 'NONE', #2667, .T. ) ; +#1609 = EDGE_CURVE ( 'NONE', #788, #2596, #2745, .T. ) ; +#1610 = ORIENTED_EDGE ( 'NONE', *, *, #1494, .F. ) ; +#1611 = EDGE_LOOP ( 'NONE', ( #774, #1121, #1579, #1943 ) ) ; +#1612 = ORIENTED_EDGE ( 'NONE', *, *, #419, .F. ) ; +#1613 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1614 = LINE ( 'NONE', #1491, #292 ) ; +#1615 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 1.000000000000000000 ) ) ; +#1616 = AXIS2_PLACEMENT_3D ( 'NONE', #700, #2106, #635 ) ; +#1617 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1618 = ORIENTED_EDGE ( 'NONE', *, *, #1640, .F. ) ; +#1619 = EDGE_LOOP ( 'NONE', ( #1152, #2293, #2489, #585 ) ) ; +#1620 = ORIENTED_EDGE ( 'NONE', *, *, #1279, .T. ) ; +#1621 = PLANE ( 'NONE', #814 ) ; +#1622 = ADVANCED_FACE ( 'NONE', ( #507 ), #1371, .T. ) ; +#1623 = EDGE_CURVE ( 'NONE', #59, #2266, #2135, .T. ) ; +#1624 = LINE ( 'NONE', #2583, #183 ) ; +#1625 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.174999999999999800 ) ) ; +#1626 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1627 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1628 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1629 = VECTOR ( 'NONE', #343, 39.37007874015748100 ) ; +#1630 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1631 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#1632 = AXIS2_PLACEMENT_3D ( 'NONE', #313, #999, #2428 ) ; +#1633 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1634 = PLANE ( 'NONE', #69 ) ; +#1635 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1636 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1637 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2499 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #1188, #2828, #1421 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#1638 = ADVANCED_FACE ( 'NONE', ( #1855 ), #223, .F. ) ; +#1639 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1640 = EDGE_CURVE ( 'NONE', #691, #2409, #2917, .T. ) ; +#1641 = VERTEX_POINT ( 'NONE', #2539 ) ; +#1642 = ORIENTED_EDGE ( 'NONE', *, *, #2893, .T. ) ; +#1643 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1644 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, 0.2060549223287782800, 1.375000000000000000 ) ) ; +#1645 = VECTOR ( 'NONE', #391, 39.37007874015748100 ) ; +#1646 = ORIENTED_EDGE ( 'NONE', *, *, #1839, .T. ) ; +#1647 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1648 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1649 = FACE_OUTER_BOUND ( 'NONE', #2823, .T. ) ; +#1650 = VERTEX_POINT ( 'NONE', #1156 ) ; +#1651 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 0.5000000000000000000 ) ) ; +#1652 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1653 = FACE_OUTER_BOUND ( 'NONE', #1020, .T. ) ; +#1654 = VERTEX_POINT ( 'NONE', #2110 ) ; +#1655 = ORIENTED_EDGE ( 'NONE', *, *, #1753, .F. ) ; +#1656 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1657 = ORIENTED_EDGE ( 'NONE', *, *, #793, .T. ) ; +#1658 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1659 = EDGE_CURVE ( 'NONE', #2589, #2557, #426, .T. ) ; +#1660 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1661 = VECTOR ( 'NONE', #1563, 39.37007874015748100 ) ; +#1662 = ADVANCED_FACE ( 'NONE', ( #200 ), #908, .F. ) ; +#1663 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1664 = ORIENTED_EDGE ( 'NONE', *, *, #1690, .F. ) ; +#1665 = EDGE_CURVE ( 'NONE', #2808, #1398, #2551, .T. ) ; +#1666 = EDGE_LOOP ( 'NONE', ( #1310, #2350, #1902, #2646 ) ) ; +#1667 = FACE_OUTER_BOUND ( 'NONE', #2982, .T. ) ; +#1668 = AXIS2_PLACEMENT_3D ( 'NONE', #1057, #1309, #2224 ) ; +#1669 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979654000, -0.5625000000000001100, 0.8125000000000000000 ) ) ; +#1670 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1671 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#1672 = CARTESIAN_POINT ( 'NONE', ( 1.750000000000000200, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#1673 = ADVANCED_FACE ( 'NONE', ( #727 ), #445, .F. ) ; +#1674 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1675 = CARTESIAN_POINT ( 'NONE', ( -0.1300000000000005900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1676 = FILL_AREA_STYLE_COLOUR ( '', #1671 ) ; +#1677 = AXIS2_PLACEMENT_3D ( 'NONE', #1147, #2835, #14 ) ; +#1678 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1679 = EDGE_LOOP ( 'NONE', ( #2283, #2886 ) ) ; +#1680 = AXIS2_PLACEMENT_3D ( 'NONE', #1811, #2943, #1558 ) ; +#1681 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1682 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1683 = ORIENTED_EDGE ( 'NONE', *, *, #1832, .F. ) ; +#1684 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1685 = VERTEX_POINT ( 'NONE', #660 ) ; +#1686 = FACE_OUTER_BOUND ( 'NONE', #1666, .T. ) ; +#1687 = CYLINDRICAL_SURFACE ( 'NONE', #73, 0.09999999999999989500 ) ; +#1688 = ORIENTED_EDGE ( 'NONE', *, *, #114, .T. ) ; +#1689 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026638100, -0.3549102234176832500, 1.375000000000000000 ) ) ; +#1690 = EDGE_CURVE ( 'NONE', #2208, #161, #2848, .T. ) ; +#1691 = FACE_OUTER_BOUND ( 'NONE', #731, .T. ) ; +#1692 = ADVANCED_FACE ( 'NONE', ( #2513 ), #2095, .F. ) ; +#1693 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1694 = VECTOR ( 'NONE', #2184, 39.37007874015748100 ) ; +#1695 = VERTEX_POINT ( 'NONE', #2332 ) ; +#1696 = ORIENTED_EDGE ( 'NONE', *, *, #1233, .F. ) ; +#1697 = CYLINDRICAL_SURFACE ( 'NONE', #1011, 0.2187500000000000000 ) ; +#1698 = EDGE_CURVE ( 'NONE', #542, #3029, #246, .T. ) ; +#1699 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1700 = AXIS2_PLACEMENT_3D ( 'NONE', #117, #1772, #2994 ) ; +#1701 = ORIENTED_EDGE ( 'NONE', *, *, #1440, .F. ) ; +#1702 = EDGE_LOOP ( 'NONE', ( #1606, #1080 ) ) ; +#1703 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1704 = EDGE_CURVE ( 'NONE', #161, #591, #127, .T. ) ; +#1705 = AXIS2_PLACEMENT_3D ( 'NONE', #659, #508, #1111 ) ; +#1706 = AXIS2_PLACEMENT_3D ( 'NONE', #2221, #1516, #1293 ) ; +#1707 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1708 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1709 = CIRCLE ( 'NONE', #2121, 0.1330000000000004800 ) ; +#1710 = LINE ( 'NONE', #2942, #858 ) ; +#1711 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279700, -0.1318487067688303100, 1.174999999999999800 ) ) ; +#1712 = CARTESIAN_POINT ( 'NONE', ( -3.161825413516036900, -0.6875000000000003300, 0.5000000000000000000 ) ) ; +#1713 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1714 = EDGE_CURVE ( 'NONE', #952, #441, #88, .T. ) ; +#1715 = ORIENTED_EDGE ( 'NONE', *, *, #1365, .F. ) ; +#1716 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1717 = EDGE_LOOP ( 'NONE', ( #1979, #2191, #2530, #403 ) ) ; +#1718 = ADVANCED_FACE ( 'NONE', ( #1300 ), #1203, .F. ) ; +#1719 = AXIS2_PLACEMENT_3D ( 'NONE', #2290, #2090, #1842 ) ; +#1720 = CYLINDRICAL_SURFACE ( 'NONE', #1825, 0.2187499999999999400 ) ; +#1721 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#1722 = FACE_BOUND ( 'NONE', #2276, .T. ) ; +#1723 = ORIENTED_EDGE ( 'NONE', *, *, #1440, .T. ) ; +#1724 = FACE_OUTER_BOUND ( 'NONE', #2118, .T. ) ; +#1725 = DIRECTION ( 'NONE', ( -1.986798540846736500E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#1726 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1727 = CYLINDRICAL_SURFACE ( 'NONE', #987, 0.1330000000000002000 ) ; +#1728 = ORIENTED_EDGE ( 'NONE', *, *, #2938, .T. ) ; +#1729 = ORIENTED_EDGE ( 'NONE', *, *, #437, .F. ) ; +#1730 = VERTEX_POINT ( 'NONE', #1441 ) ; +#1731 = ORIENTED_EDGE ( 'NONE', *, *, #2807, .F. ) ; +#1732 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1733 = FACE_OUTER_BOUND ( 'NONE', #2985, .T. ) ; +#1734 = VERTEX_POINT ( 'NONE', #964 ) ; +#1735 = CARTESIAN_POINT ( 'NONE', ( 1.904415784228984400, -0.2020162695637367200, 0.8124999999999998900 ) ) ; +#1736 = CYLINDRICAL_SURFACE ( 'NONE', #2384, 0.1249999999999999000 ) ; +#1737 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1738 = AXIS2_PLACEMENT_3D ( 'NONE', #2161, #708, #976 ) ; +#1739 = VECTOR ( 'NONE', #1626, 39.37007874015748100 ) ; +#1740 = LINE ( 'NONE', #1798, #669 ) ; +#1741 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1742 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 1.250000000000000000, 1.000000000000000000 ) ) ; +#1743 = EDGE_CURVE ( 'NONE', #161, #645, #51, .T. ) ; +#1744 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, 0.6874999999999996700, 1.000000000000000000 ) ) ; +#1745 = ORIENTED_EDGE ( 'NONE', *, *, #2467, .F. ) ; +#1746 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1748 = VERTEX_POINT ( 'NONE', #1145 ) ; +#1747 = CARTESIAN_POINT ( 'NONE', ( -2.465750000000000300, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1749 = PRESENTATION_STYLE_ASSIGNMENT (( #1193 ) ) ; +#1750 = EDGE_LOOP ( 'NONE', ( #1655, #271, #2204, #2736 ) ) ; +#1751 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1752 = FACE_OUTER_BOUND ( 'NONE', #191, .T. ) ; +#1753 = EDGE_CURVE ( 'NONE', #1439, #2757, #2672, .T. ) ; +#1754 = AXIS2_PLACEMENT_3D ( 'NONE', #1996, #620, #1784 ) ; +#1755 = EDGE_CURVE ( 'NONE', #1128, #44, #760, .T. ) ; +#1756 = FACE_OUTER_BOUND ( 'NONE', #2247, .T. ) ; +#1757 = ORIENTED_EDGE ( 'NONE', *, *, #2462, .F. ) ; +#1758 = VECTOR ( 'NONE', #492, 39.37007874015748100 ) ; +#1759 = LINE ( 'NONE', #2752, #1861 ) ; +#1760 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1761 = EDGE_LOOP ( 'NONE', ( #728, #1989, #1092, #2859 ) ) ; +#1762 = CARTESIAN_POINT ( 'NONE', ( 2.262952316657397900, 0.4790639956390647100, 0.6250000000000000000 ) ) ; +#1763 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1764 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1765 = CYLINDRICAL_SURFACE ( 'NONE', #1706, 0.1330000000000003400 ) ; +#1766 = ORIENTED_EDGE ( 'NONE', *, *, #854, .T. ) ; +#1767 = ORIENTED_EDGE ( 'NONE', *, *, #2436, .T. ) ; +#1768 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1769 = EDGE_CURVE ( 'NONE', #811, #366, #649, .T. ) ; +#1770 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 0.6874999999999996700, 1.000000000000000000 ) ) ; +#1771 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -0.6875000000000002200, 0.8125000000000000000 ) ) ; +#1772 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1773 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #1868, #1246 ) ; +#1774 = VECTOR ( 'NONE', #786, 39.37007874015748100 ) ; +#1775 = AXIS2_PLACEMENT_3D ( 'NONE', #1400, #702, #1871 ) ; +#1776 = CIRCLE ( 'NONE', #2641, 0.1250000000000000300 ) ; +#1777 = PLANE ( 'NONE', #2921 ) ; +#1778 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1780 = EDGE_CURVE ( 'NONE', #2013, #2476, #2479, .T. ) ; +#1781 = EDGE_LOOP ( 'NONE', ( #1914, #2664, #135, #1082, #1344, #1014, #1348, #78 ) ) ; +#1782 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1783 = VERTEX_POINT ( 'NONE', #2144 ) ; +#1784 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#1785 = VECTOR ( 'NONE', #624, 39.37007874015748100 ) ; +#1786 = FACE_BOUND ( 'NONE', #843, .T. ) ; +#1787 = VERTEX_POINT ( 'NONE', #27 ) ; +#1788 = LINE ( 'NONE', #1387, #725 ) ; +#1789 = VECTOR ( 'NONE', #1524, 39.37007874015748100 ) ; +#1790 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1791 = ORIENTED_EDGE ( 'NONE', *, *, #753, .T. ) ; +#1792 = ORIENTED_EDGE ( 'NONE', *, *, #1000, .T. ) ; +#1793 = VERTEX_POINT ( 'NONE', #2360 ) ; +#1794 = AXIS2_PLACEMENT_3D ( 'NONE', #1487, #67, #1726 ) ; +#1795 = EDGE_CURVE ( 'NONE', #2849, #2509, #1269, .T. ) ; +#1796 = EDGE_LOOP ( 'NONE', ( #1869, #2482, #1154, #1688, #501, #2774, #2308, #2125 ) ) ; +#1797 = CARTESIAN_POINT ( 'NONE', ( 2.426749360767359100, -0.4133649961027716100, 0.8125000000000001100 ) ) ; +#1798 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000007500, -0.3967912631038053000, 0.6250000000000000000 ) ) ; +#1799 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1800 = LINE ( 'NONE', #830, #3033 ) ; +#1801 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#1802 = VERTEX_POINT ( 'NONE', #505 ) ; +#1803 = ORIENTED_EDGE ( 'NONE', *, *, #2232, .T. ) ; +#1804 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1805 = FACE_BOUND ( 'NONE', #1796, .T. ) ; +#1806 = EDGE_CURVE ( 'NONE', #1968, #1354, #1086, .T. ) ; +#1807 = DIRECTION ( 'NONE', ( 0.7071067811865486800, -0.0000000000000000000, 0.7071067811865463500 ) ) ; +#1808 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1809 = FACE_OUTER_BOUND ( 'NONE', #841, .T. ) ; +#1810 = CARTESIAN_POINT ( 'NONE', ( -0.2157500000000000500, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1811 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1812 = EDGE_CURVE ( 'NONE', #952, #2133, #465, .T. ) ; +#1813 = AXIS2_PLACEMENT_3D ( 'NONE', #1572, #1808, #2043 ) ; +#1814 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, 0.3310549223287783100, 1.375000000000000000 ) ) ; +#1815 = ORIENTED_EDGE ( 'NONE', *, *, #2287, .F. ) ; +#1816 = ORIENTED_EDGE ( 'NONE', *, *, #1623, .F. ) ; +#1817 = VECTOR ( 'NONE', #673, 39.37007874015748100 ) ; +#1818 = AXIS2_PLACEMENT_3D ( 'NONE', #1656, #2334, #935 ) ; +#1819 = LINE ( 'NONE', #2356, #355 ) ; +#1820 = ORIENTED_EDGE ( 'NONE', *, *, #2424, .F. ) ; +#1821 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1822 = VECTOR ( 'NONE', #2362, 39.37007874015748100 ) ; +#1823 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1824 = ORIENTED_EDGE ( 'NONE', *, *, #1055, .T. ) ; +#1825 = AXIS2_PLACEMENT_3D ( 'NONE', #630, #2494, #2967 ) ; +#1826 = LINE ( 'NONE', #988, #1694 ) ; +#1827 = VERTEX_POINT ( 'NONE', #1561 ) ; +#1828 = LINE ( 'NONE', #1521, #215 ) ; +#1829 = ORIENTED_EDGE ( 'NONE', *, *, #336, .F. ) ; +#1830 = ADVANCED_FACE ( 'NONE', ( #2340 ), #2740, .F. ) ; +#1831 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.174999999999999800 ) ) ; +#1832 = EDGE_CURVE ( 'NONE', #1333, #2409, #1017, .T. ) ; +#1833 = DIRECTION ( 'NONE', ( -1.000000000000000000, 6.481953218662490300E-017, 0.0000000000000000000 ) ) ; +#1834 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#1835 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, -0.3310549223287785900, 1.375000000000000000 ) ) ; +#1836 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1837 = EDGE_LOOP ( 'NONE', ( #574, #136 ) ) ; +#1838 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999900, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1839 = EDGE_CURVE ( 'NONE', #1508, #2152, #1160, .T. ) ; +#1840 = AXIS2_PLACEMENT_3D ( 'NONE', #568, #1268, #1990 ) ; +#1841 = FACE_OUTER_BOUND ( 'NONE', #2167, .T. ) ; +#1842 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1843 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1844 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1845 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1846 = EDGE_CURVE ( 'NONE', #3029, #542, #392, .T. ) ; +#1847 = AXIS2_PLACEMENT_3D ( 'NONE', #1351, #1385, #497 ) ; +#1848 = ADVANCED_FACE ( 'NONE', ( #2946 ), #1720, .F. ) ; +#1849 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1850 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1851 = ORIENTED_EDGE ( 'NONE', *, *, #1501, .T. ) ; +#1852 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1853 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#1854 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1855 = FACE_OUTER_BOUND ( 'NONE', #884, .T. ) ; +#1856 = LINE ( 'NONE', #453, #2586 ) ; +#1857 = EDGE_LOOP ( 'NONE', ( #1715, #1474, #2924, #560 ) ) ; +#1858 = ORIENTED_EDGE ( 'NONE', *, *, #339, .F. ) ; +#1859 = VECTOR ( 'NONE', #1276, 39.37007874015748100 ) ; +#1860 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1861 = VECTOR ( 'NONE', #1110, 39.37007874015748100 ) ; +#1862 = EDGE_CURVE ( 'NONE', #2989, #2502, #1235, .T. ) ; +#1863 = EDGE_LOOP ( 'NONE', ( #546, #54, #1100, #356 ) ) ; +#1864 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 0.0000000000000000000 ) ) ; +#1865 = ORIENTED_EDGE ( 'NONE', *, *, #1659, .T. ) ; +#1866 = ORIENTED_EDGE ( 'NONE', *, *, #2268, .T. ) ; +#1867 = ADVANCED_FACE ( 'NONE', ( #540 ), #165, .F. ) ; +#1868 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #1578, .NOT_KNOWN. ) ; +#1869 = ORIENTED_EDGE ( 'NONE', *, *, #294, .F. ) ; +#1870 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.3549102234176832500, 1.375000000000000000 ) ) ; +#1871 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1872 = AXIS2_PLACEMENT_3D ( 'NONE', #177, #878, #428 ) ; +#1873 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1874 = LINE ( 'NONE', #2660, #2243 ) ; +#1875 = CARTESIAN_POINT ( 'NONE', ( -0.2157500000000000800, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1876 = CARTESIAN_POINT ( 'NONE', ( -0.9032500000000000000, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1877 = CIRCLE ( 'NONE', #1971, 0.1330000000000002600 ) ; +#1878 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1879 = VECTOR ( 'NONE', #1844, 39.37007874015748100 ) ; +#1880 = ORIENTED_EDGE ( 'NONE', *, *, #605, .T. ) ; +#1881 = ADVANCED_FACE ( 'NONE', ( #767 ), #2277, .F. ) ; +#1882 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1883 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1884 = AXIS2_PLACEMENT_3D ( 'NONE', #2696, #364, #2080 ) ; +#1885 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060131000, -0.2549102234176833200, 1.174999999999999800 ) ) ; +#1886 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#1887 = ORIENTED_EDGE ( 'NONE', *, *, #275, .T. ) ; +#1888 = FILL_AREA_STYLE ('',( #252 ) ) ; +#1889 = ORIENTED_EDGE ( 'NONE', *, *, #1950, .F. ) ; +#1890 = CARTESIAN_POINT ( 'NONE', ( 2.254535607008163500, -0.1166834469789727500, 0.6250000000000000000 ) ) ; +#1891 = FILL_AREA_STYLE ('',( #1676 ) ) ; +#1892 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#1893 = EDGE_CURVE ( 'NONE', #327, #803, #2269, .T. ) ; +#1894 = ADVANCED_FACE ( 'NONE', ( #631, #1378 ), #882, .F. ) ; +#1895 = VECTOR ( 'NONE', #462, 39.37007874015748100 ) ; +#1896 = ORIENTED_EDGE ( 'NONE', *, *, #2871, .F. ) ; +#1897 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1898 = LINE ( 'NONE', #463, #1526 ) ; +#1899 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, -0.3310549223287785900, 1.375000000000000000 ) ) ; +#1900 = CARTESIAN_POINT ( 'NONE', ( -0.9032500000000000000, 1.000000000000000000, 1.000000000000000000 ) ) ; +#1901 = FACE_OUTER_BOUND ( 'NONE', #2840, .T. ) ; +#1902 = ORIENTED_EDGE ( 'NONE', *, *, #2584, .F. ) ; +#1903 = EDGE_LOOP ( 'NONE', ( #128, #1284, #1792, #1231 ) ) ; +#1904 = CIRCLE ( 'NONE', #2214, 0.1330000000000002000 ) ; +#1905 = ORIENTED_EDGE ( 'NONE', *, *, #479, .F. ) ; +#1906 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026639400, -0.2549102234176833200, 1.174999999999999800 ) ) ; +#1907 = ORIENTED_EDGE ( 'NONE', *, *, #2796, .T. ) ; +#1908 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#1909 = VECTOR ( 'NONE', #357, 39.37007874015748100 ) ; +#1910 = EDGE_LOOP ( 'NONE', ( #1696, #1581, #348, #2182, #1027, #509, #924, #1766 ) ) ; +#1911 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#1912 = VECTOR ( 'NONE', #717, 39.37007874015748100 ) ; +#1913 = EDGE_CURVE ( 'NONE', #2989, #883, #2321, .T. ) ; +#1914 = ORIENTED_EDGE ( 'NONE', *, *, #1704, .F. ) ; +#1915 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.375000000000000000 ) ) ; +#1916 = AXIS2_PLACEMENT_3D ( 'NONE', #1484, #1003, #1958 ) ; +#1917 = EDGE_CURVE ( 'NONE', #1355, #1065, #325, .T. ) ; +#1918 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#1919 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1920 = ORIENTED_EDGE ( 'NONE', *, *, #1753, .T. ) ; +#1921 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1922 = CIRCLE ( 'NONE', #1481, 0.4999999999999998300 ) ; +#1923 = VERTEX_POINT ( 'NONE', #2763 ) ; +#1924 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#1925 = CIRCLE ( 'NONE', #2592, 0.5000000000000001100 ) ; +#1926 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#1927 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1928 = EDGE_CURVE ( 'NONE', #1654, #2720, #652, .T. ) ; +#1929 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, 0.2500000000000000600, 0.8750000000000000000 ) ) ; +#1930 = AXIS2_PLACEMENT_3D ( 'NONE', #193, #1122, #185 ) ; +#1931 = ORIENTED_EDGE ( 'NONE', *, *, #974, .F. ) ; +#1932 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1933 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1934 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#1935 = LINE ( 'NONE', #1311, #123 ) ; +#1936 = CIRCLE ( 'NONE', #1031, 0.1947179912523943300 ) ; +#1937 = LINE ( 'NONE', #2092, #281 ) ; +#1938 = ORIENTED_EDGE ( 'NONE', *, *, #434, .T. ) ; +#1939 = EDGE_CURVE ( 'NONE', #1435, #2757, #1535, .T. ) ; +#1940 = ORIENTED_EDGE ( 'NONE', *, *, #2122, .F. ) ; +#1941 = VECTOR ( 'NONE', #2569, 39.37007874015748100 ) ; +#1942 = LINE ( 'NONE', #2399, #2951 ) ; +#1943 = ORIENTED_EDGE ( 'NONE', *, *, #694, .F. ) ; +#1944 = VERTEX_POINT ( 'NONE', #796 ) ; +#1945 = ORIENTED_EDGE ( 'NONE', *, *, #1609, .F. ) ; +#1946 = VERTEX_POINT ( 'NONE', #328 ) ; +#1947 = ADVANCED_FACE ( 'NONE', ( #2138 ), #1029, .F. ) ; +#1948 = APPLICATION_CONTEXT ( 'automotive_design' ) ; +#1949 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1950 = EDGE_CURVE ( 'NONE', #883, #2605, #1345, .T. ) ; +#1951 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, -0.1875000000000003900, 1.000000000000000000 ) ) ; +#1952 = AXIS2_PLACEMENT_3D ( 'NONE', #2379, #1678, #2831 ) ; +#1953 = ORIENTED_EDGE ( 'NONE', *, *, #214, .F. ) ; +#1954 = VECTOR ( 'NONE', #528, 39.37007874015748100 ) ; +#1955 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.731847993664262700E-016, -0.0000000000000000000 ) ) ; +#1956 = AXIS2_PLACEMENT_3D ( 'NONE', #1226, #1215, #276 ) ; +#1957 = EDGE_CURVE ( 'NONE', #248, #1748, #1054, .T. ) ; +#1958 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#1959 = VECTOR ( 'NONE', #2274, 39.37007874015748100 ) ; +#1960 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250981300, 0.6874999999999998900, 0.5000000000000000000 ) ) ; +#1961 = VECTOR ( 'NONE', #2762, 39.37007874015748100 ) ; +#1962 = ORIENTED_EDGE ( 'NONE', *, *, #2325, .T. ) ; +#1963 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1964 = CARTESIAN_POINT ( 'NONE', ( 1.261000000000000300, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#1965 = CARTESIAN_POINT ( 'NONE', ( 2.499999999148911000, -0.3967912632963749900, 0.8124999999999998900 ) ) ; +#1966 = PLANE ( 'NONE', #2178 ) ; +#1967 = EDGE_CURVE ( 'NONE', #2273, #203, #1384, .T. ) ; +#1968 = VERTEX_POINT ( 'NONE', #2456 ) ; +#1969 = ORIENTED_EDGE ( 'NONE', *, *, #862, .T. ) ; +#1970 = EDGE_CURVE ( 'NONE', #44, #1128, #2747, .T. ) ; +#1971 = AXIS2_PLACEMENT_3D ( 'NONE', #1444, #2793, #737 ) ; +#1972 = EDGE_LOOP ( 'NONE', ( #1575, #1341, #1427, #394 ) ) ; +#1973 = VECTOR ( 'NONE', #1617, 39.37007874015748100 ) ; +#1974 = ORIENTED_EDGE ( 'NONE', *, *, #48, .T. ) ; +#1975 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.6947179912523939700 ) ) ; +#1976 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.073645923333782200E-016, 0.0000000000000000000 ) ) ; +#1977 = CIRCLE ( 'NONE', #2252, 0.2187499999999999400 ) ; +#1978 = EDGE_LOOP ( 'NONE', ( #1334, #1413, #588, #784, #253, #168, #1646, #2749 ) ) ; +#1979 = ORIENTED_EDGE ( 'NONE', *, *, #367, .F. ) ; +#1980 = LINE ( 'NONE', #230, #249 ) ; +#1981 = ORIENTED_EDGE ( 'NONE', *, *, #808, .T. ) ; +#1982 = ORIENTED_EDGE ( 'NONE', *, *, #2728, .F. ) ; +#1983 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1984 = VERTEX_POINT ( 'NONE', #2685 ) ; +#1985 = FACE_OUTER_BOUND ( 'NONE', #1052, .T. ) ; +#1986 = ORIENTED_EDGE ( 'NONE', *, *, #419, .T. ) ; +#1987 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060137200, 0.3549102234176832500, 1.174999999999999800 ) ) ; +#1988 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#1989 = ORIENTED_EDGE ( 'NONE', *, *, #597, .F. ) ; +#1990 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#1991 = AXIS2_PLACEMENT_3D ( 'NONE', #1669, #2550, #1854 ) ; +#1992 = AXIS2_PLACEMENT_3D ( 'NONE', #2732, #638, #1352 ) ; +#1993 = VERTEX_POINT ( 'NONE', #338 ) ; +#1994 = LINE ( 'NONE', #34, #2572 ) ; +#1995 = VERTEX_POINT ( 'NONE', #810 ) ; +#1996 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 0.4999999999999996100 ) ) ; +#1997 = LINE ( 'NONE', #2470, #751 ) ; +#1998 = CARTESIAN_POINT ( 'NONE', ( 2.500000003366624800, 0.4375503453205060200, 0.6250000000000000000 ) ) ; +#1999 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2000 = EDGE_CURVE ( 'NONE', #2790, #1273, #1505, .T. ) ; +#2001 = ORIENTED_EDGE ( 'NONE', *, *, #2952, .F. ) ; +#2002 = EDGE_CURVE ( 'NONE', #1262, #250, #2305, .T. ) ; +#2003 = AXIS2_PLACEMENT_3D ( 'NONE', #1988, #1046, #2695 ) ; +#2004 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2005 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -0.6875000000000003300, 0.5000000000000000000 ) ) ; +#2006 = VERTEX_POINT ( 'NONE', #2910 ) ; +#2007 = LINE ( 'NONE', #1975, #2084 ) ; +#2008 = EDGE_CURVE ( 'NONE', #1787, #1995, #839, .T. ) ; +#2009 = AXIS2_PLACEMENT_3D ( 'NONE', #2297, #430, #2166 ) ; +#2010 = EDGE_CURVE ( 'NONE', #175, #1730, #880, .T. ) ; +#2011 = LINE ( 'NONE', #1105, #951 ) ; +#2012 = LINE ( 'NONE', #683, #2947 ) ; +#2013 = VERTEX_POINT ( 'NONE', #1519 ) ; +#2014 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2015 = EDGE_LOOP ( 'NONE', ( #1448, #33, #2606, #1452 ) ) ; +#2016 = FACE_OUTER_BOUND ( 'NONE', #2141, .T. ) ; +#2017 = LINE ( 'NONE', #119, #359 ) ; +#2018 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2019 = CARTESIAN_POINT ( 'NONE', ( -1.255000000000000800, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2020 = ORIENTED_EDGE ( 'NONE', *, *, #2728, .T. ) ; +#2021 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2022 = ORIENTED_EDGE ( 'NONE', *, *, #2222, .F. ) ; +#2023 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.6875000000000000000, 1.000000000000000000 ) ) ; +#2024 = EDGE_LOOP ( 'NONE', ( #1896, #829, #422, #665 ) ) ; +#2025 = ORIENTED_EDGE ( 'NONE', *, *, #378, .F. ) ; +#2026 = CYLINDRICAL_SURFACE ( 'NONE', #379, 0.1330000000000003400 ) ; +#2027 = ORIENTED_EDGE ( 'NONE', *, *, #2797, .T. ) ; +#2028 = CARTESIAN_POINT ( 'NONE', ( 0.2217499999999998900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2029 = EDGE_CURVE ( 'NONE', #2382, #1424, #765, .T. ) ; +#2030 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2031 = LINE ( 'NONE', #2365, #821 ) ; +#2032 = AXIS2_PLACEMENT_3D ( 'NONE', #2507, #1589, #2542 ) ; +#2033 = CARTESIAN_POINT ( 'NONE', ( -0.1300000000000004500, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2034 = FACE_BOUND ( 'NONE', #770, .T. ) ; +#2035 = ORIENTED_EDGE ( 'NONE', *, *, #2434, .T. ) ; +#2036 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, 0.3310549223287783100, 1.375000000000000000 ) ) ; +#2037 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2038 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#2039 = ORIENTED_EDGE ( 'NONE', *, *, #494, .T. ) ; +#2040 = ORIENTED_EDGE ( 'NONE', *, *, #2008, .T. ) ; +#2041 = AXIS2_PLACEMENT_3D ( 'NONE', #2111, #2333, #1628 ) ; +#2042 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2043 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2044 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999996600, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2045 = DIRECTION ( 'NONE', ( 9.621616303967501900E-017, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2046 = FACE_BOUND ( 'NONE', #1596, .T. ) ; +#2047 = VERTEX_POINT ( 'NONE', #2820 ) ; +#2048 = LINE ( 'NONE', #66, #163 ) ; +#2049 = VERTEX_POINT ( 'NONE', #7 ) ; +#2050 = VECTOR ( 'NONE', #2155, 39.37007874015748100 ) ; +#2051 = CARTESIAN_POINT ( 'NONE', ( -1.255000000000000300, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2052 = ORIENTED_EDGE ( 'NONE', *, *, #50, .T. ) ; +#2053 = ORIENTED_EDGE ( 'NONE', *, *, #2837, .F. ) ; +#2054 = CIRCLE ( 'NONE', #1525, 0.2187499999999999400 ) ; +#2055 = ORIENTED_EDGE ( 'NONE', *, *, #1795, .T. ) ; +#2056 = EDGE_LOOP ( 'NONE', ( #1015, #547, #1099, #769 ) ) ; +#2057 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2058 = ORIENTED_EDGE ( 'NONE', *, *, #1588, .F. ) ; +#2059 = EDGE_CURVE ( 'NONE', #2909, #2560, #1980, .T. ) ; +#2060 = CARTESIAN_POINT ( 'NONE', ( 2.426749360767337800, -0.4133649961027721600, 0.6250000000000000000 ) ) ; +#2061 = CIRCLE ( 'NONE', #2735, 0.1330000000000002000 ) ; +#2062 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2063 = ORIENTED_EDGE ( 'NONE', *, *, #2029, .T. ) ; +#2064 = ORIENTED_EDGE ( 'NONE', *, *, #2436, .F. ) ; +#2065 = ORIENTED_EDGE ( 'NONE', *, *, #1743, .F. ) ; +#2066 = ORIENTED_EDGE ( 'NONE', *, *, #854, .F. ) ; +#2067 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279400, 0.1318487067688303100, 1.174999999999999800 ) ) ; +#2068 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, -1.250000000000000000, 0.4999999999999996700 ) ) ; +#2069 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2070 = DIRECTION ( 'NONE', ( 1.986798540846737300E-016, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2071 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#2072 = EDGE_CURVE ( 'NONE', #2857, #1508, #2176, .T. ) ; +#2073 = AXIS2_PLACEMENT_3D ( 'NONE', #1782, #143, #380 ) ; +#2074 = ADVANCED_FACE ( 'NONE', ( #2986 ), #2483, .F. ) ; +#2075 = EDGE_CURVE ( 'NONE', #1316, #2419, #429, .T. ) ; +#2076 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.2549102234176833200, 1.174999999999999800 ) ) ; +#2077 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2078 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2079 = ORIENTED_EDGE ( 'NONE', *, *, #1917, .T. ) ; +#2080 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2081 = ORIENTED_EDGE ( 'NONE', *, *, #2325, .F. ) ; +#2082 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060131000, -0.2549102234176833200, 1.375000000000000000 ) ) ; +#2083 = EDGE_CURVE ( 'NONE', #327, #2849, #55, .T. ) ; +#2084 = VECTOR ( 'NONE', #2670, 39.37007874015748100 ) ; +#2085 = ADVANCED_FACE ( 'NONE', ( #204 ), #2778, .F. ) ; +#2086 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #2658 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #2581, #1408, #1187 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2087 = VECTOR ( 'NONE', #905, 39.37007874015748100 ) ; +#2088 = CYLINDRICAL_SURFACE ( 'NONE', #297, 0.1250000000000000300 ) ; +#2089 = EDGE_LOOP ( 'NONE', ( #235, #795 ) ) ; +#2090 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2091 = ORIENTED_EDGE ( 'NONE', *, *, #2577, .F. ) ; +#2092 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 1.250000000000000000, 1.000000000000000000 ) ) ; +#2093 = FACE_OUTER_BOUND ( 'NONE', #916, .T. ) ; +#2094 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2095 = PLANE ( 'NONE', #518 ) ; +#2096 = AXIS2_PLACEMENT_3D ( 'NONE', #2546, #2802, #2070 ) ; +#2097 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2098 = VECTOR ( 'NONE', #2537, 39.37007874015748100 ) ; +#2099 = ORIENTED_EDGE ( 'NONE', *, *, #2310, .T. ) ; +#2100 = ORIENTED_EDGE ( 'NONE', *, *, #2738, .F. ) ; +#2101 = EDGE_LOOP ( 'NONE', ( #1940, #1428, #926, #2352 ) ) ; +#2102 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2103 = ORIENTED_EDGE ( 'NONE', *, *, #634, .T. ) ; +#2104 = ORIENTED_EDGE ( 'NONE', *, *, #50, .F. ) ; +#2105 = VERTEX_POINT ( 'NONE', #1876 ) ; +#2106 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2107 = EDGE_CURVE ( 'NONE', #371, #502, #91, .T. ) ; +#2108 = CARTESIAN_POINT ( 'NONE', ( 2.499999999243017500, -0.3967912632750822400, 0.6250000000000000000 ) ) ; +#2109 = EDGE_LOOP ( 'NONE', ( #1047, #514, #871, #1866, #764, #867 ) ) ; +#2110 = CARTESIAN_POINT ( 'NONE', ( 0.9092499999999998900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2111 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#2112 = ADVANCED_FACE ( 'NONE', ( #2704 ), #986, .F. ) ; +#2113 = LENGTH_MEASURE_WITH_UNIT ( LENGTH_MEASURE( 0.02539999999999999900 ), #264 ); +#2114 = EDGE_CURVE ( 'NONE', #2509, #803, #584, .T. ) ; +#2115 = AXIS2_PLACEMENT_3D ( 'NONE', #36, #2622, #1703 ) ; +#2116 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2117 = FACE_OUTER_BOUND ( 'NONE', #207, .T. ) ; +#2118 = EDGE_LOOP ( 'NONE', ( #2315, #639 ) ) ; +#2119 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026638100, -0.2549102234176833200, 1.174999999999999800 ) ) ; +#2120 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.731847993664262700E-016, -0.0000000000000000000 ) ) ; +#2121 = AXIS2_PLACEMENT_3D ( 'NONE', #1707, #521, #2173 ) ; +#2122 = EDGE_CURVE ( 'NONE', #1793, #997, #1124, .T. ) ; +#2123 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2124 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, 0.2060549223287783100, 1.174999999999999800 ) ) ; +#2125 = ORIENTED_EDGE ( 'NONE', *, *, #3009, .T. ) ; +#2126 = ADVANCED_FACE ( 'NONE', ( #2093 ), #1461, .F. ) ; +#2127 = VERTEX_POINT ( 'NONE', #696 ) ; +#2128 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2129 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2130 = CIRCLE ( 'NONE', #2493, 0.1330000000000002000 ) ; +#2131 = ORIENTED_EDGE ( 'NONE', *, *, #2258, .F. ) ; +#2132 = LINE ( 'NONE', #3026, #2410 ) ; +#2133 = VERTEX_POINT ( 'NONE', #937 ) ; +#2134 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2135 = LINE ( 'NONE', #931, #1455 ) ; +#2136 = EDGE_CURVE ( 'NONE', #2657, #1243, #2675, .T. ) ; +#2137 = CLOSED_SHELL ( 'NONE', ( #915, #2317, #1232, #1848, #2112, #1662, #2074, #2147, #1405, #8, #544, #2421, #3007, #2990, #1250, #464, #2351, #965, #182, #2391, #2192, #517, #1415, #3038, #2536, #2522, #2834, #778, #56, #2200, #2549, #310, #1638, #1830, #1190, #1175, #2570, #1894, #1356, #1447, #1622, #2804, #567, #2872, #251, #2126, #1138, #2636, #2604, #1947, #1673, #3017, #1119, #732, #2770, #72, #1867, #2822, #484, #192, #2860, #231, #267, #2580, #38, #2085, #1009, #436, #934, #2653, #529, #1367, #417, #1391, #1151, #1485, #716, #674, #2619, #2364, #300, #901, #2294, #2330, #994, #217, #946, #699, #2789, #1587, #1604, #451, #1692, #1718, #663, #1881 ) ) ; +#2138 = FACE_OUTER_BOUND ( 'NONE', #1910, .T. ) ; +#2139 = ORIENTED_EDGE ( 'NONE', *, *, #1450, .F. ) ; +#2140 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #1597 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #966, #2597, #779 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) ); +#2141 = EDGE_LOOP ( 'NONE', ( #1473, #2249, #2709, #3030 ) ) ; +#2142 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#2143 = EDGE_CURVE ( 'NONE', #729, #2382, #1426, .T. ) ; +#2144 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#2145 = AXIS2_PLACEMENT_3D ( 'NONE', #382, #2255, #857 ) ; +#2146 = CYLINDRICAL_SURFACE ( 'NONE', #907, 0.2187500000000000800 ) ; +#2147 = ADVANCED_FACE ( 'NONE', ( #2635 ), #2445, .F. ) ; +#2148 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2149 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2150 = ORIENTED_EDGE ( 'NONE', *, *, #2888, .T. ) ; +#2151 = SURFACE_STYLE_USAGE ( .BOTH. , #1196 ) ; +#2152 = VERTEX_POINT ( 'NONE', #2854 ) ; +#2153 = VERTEX_POINT ( 'NONE', #1451 ) ; +#2154 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2155 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2156 = ORIENTED_EDGE ( 'NONE', *, *, #1468, .T. ) ; +#2157 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2158 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2159 = LINE ( 'NONE', #2609, #895 ) ; +#2160 = AXIS2_PLACEMENT_3D ( 'NONE', #1515, #1321, #1070 ) ; +#2161 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.4999999999999996700 ) ) ; +#2162 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ; +#2163 = AXIS2_PLACEMENT_3D ( 'NONE', #1322, #158, #2062 ) ; +#2164 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999996600, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2165 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2166 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2167 = EDGE_LOOP ( 'NONE', ( #1701, #213, #549, #480 ) ) ; +#2168 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2169 = EDGE_CURVE ( 'NONE', #2849, #327, #1904, .T. ) ; +#2170 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, -0.2060549223287785900, 1.375000000000000000 ) ) ; +#2171 = CIRCLE ( 'NONE', #145, 0.2187499999999999400 ) ; +#2172 = FACE_OUTER_BOUND ( 'NONE', #1972, .T. ) ; +#2173 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2174 = FACE_OUTER_BOUND ( 'NONE', #499, .T. ) ; +#2175 = ORIENTED_EDGE ( 'NONE', *, *, #1064, .T. ) ; +#2176 = CIRCLE ( 'NONE', #1952, 0.09999999999999992200 ) ; +#2177 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2178 = AXIS2_PLACEMENT_3D ( 'NONE', #1960, #2892, #1725 ) ; +#2179 = LINE ( 'NONE', #1586, #512 ) ; +#2180 = EDGE_LOOP ( 'NONE', ( #1026, #1610, #2316, #2481 ) ) ; +#2181 = ORIENTED_EDGE ( 'NONE', *, *, #1780, .F. ) ; +#2182 = ORIENTED_EDGE ( 'NONE', *, *, #2258, .T. ) ; +#2183 = FACE_BOUND ( 'NONE', #1702, .T. ) ; +#2184 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2185 = EDGE_LOOP ( 'NONE', ( #650, #2187 ) ) ; +#2186 = EDGE_CURVE ( 'NONE', #1827, #734, #510, .T. ) ; +#2187 = ORIENTED_EDGE ( 'NONE', *, *, #2404, .T. ) ; +#2188 = AXIS2_PLACEMENT_3D ( 'NONE', #1449, #511, #2387 ) ; +#2189 = PLANE ( 'NONE', #534 ) ; +#2190 = ORIENTED_EDGE ( 'NONE', *, *, #1443, .T. ) ; +#2191 = ORIENTED_EDGE ( 'NONE', *, *, #808, .F. ) ; +#2192 = ADVANCED_FACE ( 'NONE', ( #2518 ), #2390, .F. ) ; +#2193 = VECTOR ( 'NONE', #979, 39.37007874015748100 ) ; +#2194 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2195 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, 0.3310549223287783100, 1.174999999999999800 ) ) ; +#2196 = EDGE_CURVE ( 'NONE', #2006, #261, #2380, .T. ) ; +#2197 = CARTESIAN_POINT ( 'NONE', ( -1.255000000000000800, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2198 = ORIENTED_EDGE ( 'NONE', *, *, #2059, .T. ) ; +#2199 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2200 = ADVANCED_FACE ( 'NONE', ( #2016 ), #1488, .F. ) ; +#2201 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2202 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.3310549223287785900, 1.174999999999999800 ) ) ; +#2203 = VECTOR ( 'NONE', #1843, 39.37007874015748100 ) ; +#2204 = ORIENTED_EDGE ( 'NONE', *, *, #1012, .T. ) ; +#2205 = LINE ( 'NONE', #431, #873 ) ; +#2206 = ORIENTED_EDGE ( 'NONE', *, *, #1588, .T. ) ; +#2207 = CIRCLE ( 'NONE', #2073, 0.1330000000000005100 ) ; +#2208 = VERTEX_POINT ( 'NONE', #43 ) ; +#2209 = VERTEX_POINT ( 'NONE', #2403 ) ; +#2210 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2211 = ORIENTED_EDGE ( 'NONE', *, *, #2287, .T. ) ; +#2212 = CARTESIAN_POINT ( 'NONE', ( 2.405623984976974100, 0.4624496049483496400, 0.8124999999999998900 ) ) ; +#2213 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2214 = AXIS2_PLACEMENT_3D ( 'NONE', #2420, #1210, #270 ) ; +#2215 = FACE_OUTER_BOUND ( 'NONE', #1420, .T. ) ; +#2216 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, -0.6875000000000003300, 0.5000000000000000000 ) ) ; +#2217 = ORIENTED_EDGE ( 'NONE', *, *, #2186, .F. ) ; +#2218 = ORIENTED_EDGE ( 'NONE', *, *, #1482, .F. ) ; +#2219 = EDGE_LOOP ( 'NONE', ( #2375, #2368 ) ) ; +#2220 = CARTESIAN_POINT ( 'NONE', ( -2.380000000000000800, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2221 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2222 = EDGE_CURVE ( 'NONE', #1533, #1923, #1274, .T. ) ; +#2223 = FACE_OUTER_BOUND ( 'NONE', #2626, .T. ) ; +#2224 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2225 = CARTESIAN_POINT ( 'NONE', ( 2.227291815900829300, -0.4188565208705536900, 0.8124999999999998900 ) ) ; +#2226 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2227 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2228 = ORIENTED_EDGE ( 'NONE', *, *, #229, .T. ) ; +#2229 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2230 = EDGE_CURVE ( 'NONE', #2702, #1357, #2054, .T. ) ; +#2231 = AXIS2_PLACEMENT_3D ( 'NONE', #3032, #3008, #936 ) ; +#2232 = EDGE_CURVE ( 'NONE', #2209, #2049, #130, .T. ) ; +#2233 = VERTEX_POINT ( 'NONE', #1477 ) ; +#2234 = FACE_OUTER_BOUND ( 'NONE', #1434, .T. ) ; +#2235 = VECTOR ( 'NONE', #921, 39.37007874015748100 ) ; +#2236 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2237 = ORIENTED_EDGE ( 'NONE', *, *, #1957, .F. ) ; +#2238 = LINE ( 'NONE', #139, #1607 ) ; +#2239 = LINE ( 'NONE', #272, #1277 ) ; +#2240 = ORIENTED_EDGE ( 'NONE', *, *, #1297, .F. ) ; +#2241 = EDGE_LOOP ( 'NONE', ( #992, #1723, #2100, #1272, #1657 ) ) ; +#2242 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.2549102234176833800, 1.375000000000000000 ) ) ; +#2243 = VECTOR ( 'NONE', #1016, 39.37007874015748100 ) ; +#2244 = EDGE_CURVE ( 'NONE', #1065, #1355, #802, .T. ) ; +#2245 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2246 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.3052820087476053000 ) ) ; +#2247 = EDGE_LOOP ( 'NONE', ( #1214, #1824 ) ) ; +#2248 = PLANE ( 'NONE', #2339 ) ; +#2249 = ORIENTED_EDGE ( 'NONE', *, *, #112, .T. ) ; +#2250 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #1578 ) ) ; +#2251 = ORIENTED_EDGE ( 'NONE', *, *, #166, .T. ) ; +#2252 = AXIS2_PLACEMENT_3D ( 'NONE', #2809, #460, #1414 ) ; +#2253 = CIRCLE ( 'NONE', #2288, 0.09999999999999992200 ) ; +#2254 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2255 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2256 = FACE_OUTER_BOUND ( 'NONE', #582, .T. ) ; +#2257 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2258 = EDGE_CURVE ( 'NONE', #2133, #2349, #2920, .T. ) ; +#2259 = PLANE ( 'NONE', #1102 ) ; +#2260 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106012700, 0.3549102234176832500, 1.174999999999999800 ) ) ; +#2261 = AXIS2_PLACEMENT_3D ( 'NONE', #1411, #1180, #1660 ) ; +#2262 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2263 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2264 = DIRECTION ( 'NONE', ( -1.000000000000000000, -9.621616303967501900E-017, 0.0000000000000000000 ) ) ; +#2265 = VERTEX_POINT ( 'NONE', #283 ) ; +#2266 = VERTEX_POINT ( 'NONE', #2197 ) ; +#2267 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.073645923333782200E-016, -0.0000000000000000000 ) ) ; +#2268 = EDGE_CURVE ( 'NONE', #548, #1497, #1305, .T. ) ; +#2269 = LINE ( 'NONE', #2980, #1785 ) ; +#2270 = ORIENTED_EDGE ( 'NONE', *, *, #2751, .T. ) ; +#2271 = CIRCLE ( 'NONE', #569, 0.1250000000000000300 ) ; +#2272 = CIRCLE ( 'NONE', #1136, 0.1250000000000000300 ) ; +#2273 = VERTEX_POINT ( 'NONE', #557 ) ; +#2274 = DIRECTION ( 'NONE', ( 1.986798540846736800E-016, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2275 = ORIENTED_EDGE ( 'NONE', *, *, #2114, .F. ) ; +#2276 = EDGE_LOOP ( 'NONE', ( #1503, #2643 ) ) ; +#2277 = PLANE ( 'NONE', #2163 ) ; +#2278 = VERTEX_POINT ( 'NONE', #2958 ) ; +#2279 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2280 = FACE_OUTER_BOUND ( 'NONE', #2024, .T. ) ; +#2281 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, 0.1874999999999997500, 1.000000000000000000 ) ) ; +#2282 = VERTEX_POINT ( 'NONE', #1929 ) ; +#2283 = ORIENTED_EDGE ( 'NONE', *, *, #6, .T. ) ; +#2284 = EDGE_CURVE ( 'NONE', #811, #2278, #2238, .T. ) ; +#2285 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2286 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2287 = EDGE_CURVE ( 'NONE', #2678, #2889, #684, .T. ) ; +#2288 = AXIS2_PLACEMENT_3D ( 'NONE', #2082, #670, #2318 ) ; +#2289 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, 0.3310549223287783100, 1.375000000000000000 ) ) ; +#2290 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2291 = CARTESIAN_POINT ( 'NONE', ( 2.227291815932477700, -0.4188565208918088600, 0.6250000000000000000 ) ) ; +#2292 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.174999999999999800 ) ) ; +#2293 = ORIENTED_EDGE ( 'NONE', *, *, #2845, .F. ) ; +#2294 = ADVANCED_FACE ( 'NONE', ( #1691 ), #1966, .F. ) ; +#2295 = AXIS2_PLACEMENT_3D ( 'NONE', #939, #2358, #1392 ) ; +#2296 = VERTEX_POINT ( 'NONE', #2876 ) ; +#2297 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.5000000000000000000 ) ) ; +#2298 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2299 = AXIS2_PLACEMENT_3D ( 'NONE', #2965, #1033, #2366 ) ; +#2300 = DIRECTION ( 'NONE', ( 1.294972880571175600E-016, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#2301 = ORIENTED_EDGE ( 'NONE', *, *, #1395, .F. ) ; +#2302 = CIRCLE ( 'NONE', #903, 0.1250000000000000300 ) ; +#2303 = VECTOR ( 'NONE', #405, 39.37007874015748100 ) ; +#2304 = ORIENTED_EDGE ( 'NONE', *, *, #214, .T. ) ; +#2305 = LINE ( 'NONE', #2665, #1859 ) ; +#2306 = FACE_BOUND ( 'NONE', #94, .T. ) ; +#2307 = ORIENTED_EDGE ( 'NONE', *, *, #2655, .F. ) ; +#2308 = ORIENTED_EDGE ( 'NONE', *, *, #2232, .F. ) ; +#2309 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2310 = EDGE_CURVE ( 'NONE', #1783, #2650, #1266, .T. ) ; +#2311 = CARTESIAN_POINT ( 'NONE', ( 1.880274082640043300, 0.1643791425749027100, 0.6250000000000000000 ) ) ; +#2312 = LINE ( 'NONE', #1164, #438 ) ; +#2313 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2314 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2315 = ORIENTED_EDGE ( 'NONE', *, *, #1225, .T. ) ; +#2316 = ORIENTED_EDGE ( 'NONE', *, *, #2491, .F. ) ; +#2317 = ADVANCED_FACE ( 'NONE', ( #169 ), #1419, .F. ) ; +#2318 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2319 = EDGE_CURVE ( 'NONE', #441, #2444, #646, .T. ) ; +#2320 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2321 = LINE ( 'NONE', #1592, #334 ) ; +#2322 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2323 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, -0.1318487067688302900, 1.375000000000000000 ) ) ; +#2324 = LINE ( 'NONE', #187, #2726 ) ; +#2325 = EDGE_CURVE ( 'NONE', #1354, #2610, #2815, .T. ) ; +#2326 = AXIS2_PLACEMENT_3D ( 'NONE', #2625, #39, #2158 ) ; +#2327 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2328 = AXIS2_PLACEMENT_3D ( 'NONE', #1332, #2969, #1804 ) ; +#2329 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2330 = ADVANCED_FACE ( 'NONE', ( #2234 ), #1050, .F. ) ; +#2331 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2332 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979654000, -0.6875000000000001100, 1.000000000000000000 ) ) ; +#2333 = DIRECTION ( 'NONE', ( 1.000000000000000000, -0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2334 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2335 = ORIENTED_EDGE ( 'NONE', *, *, #112, .F. ) ; +#2336 = ORIENTED_EDGE ( 'NONE', *, *, #3022, .T. ) ; +#2337 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.6250000000000000000, 1.000000000000000000 ) ) ; +#2338 = EDGE_CURVE ( 'NONE', #120, #655, #2048, .T. ) ; +#2339 = AXIS2_PLACEMENT_3D ( 'NONE', #2710, #848, #2285 ) ; +#2340 = FACE_OUTER_BOUND ( 'NONE', #247, .T. ) ; +#2341 = FACE_OUTER_BOUND ( 'NONE', #184, .T. ) ; +#2342 = EDGE_LOOP ( 'NONE', ( #1931, #2348, #2240, #2534 ) ) ; +#2343 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, -1.250000000000000000, 0.4999999999999996700 ) ) ; +#2344 = FACE_OUTER_BOUND ( 'NONE', #2180, .T. ) ; +#2345 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2346 = AXIS2_PLACEMENT_3D ( 'NONE', #960, #1182, #3034 ) ; +#2347 = LINE ( 'NONE', #285, #1536 ) ; +#2348 = ORIENTED_EDGE ( 'NONE', *, *, #862, .F. ) ; +#2349 = VERTEX_POINT ( 'NONE', #780 ) ; +#2350 = ORIENTED_EDGE ( 'NONE', *, *, #1216, .F. ) ; +#2351 = ADVANCED_FACE ( 'NONE', ( #2588 ), #1202, .F. ) ; +#2352 = ORIENTED_EDGE ( 'NONE', *, *, #1327, .F. ) ; +#2353 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2354 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2355 = LINE ( 'NONE', #626, #1249 ) ; +#2356 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, -0.6875000000000001100, 1.000000000000000000 ) ) ; +#2357 = ORIENTED_EDGE ( 'NONE', *, *, #155, .T. ) ; +#2358 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2359 = VERTEX_POINT ( 'NONE', #345 ) ; +#2360 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.6947179912523939700 ) ) ; +#2361 = CIRCLE ( 'NONE', #2326, 0.2187499999999999400 ) ; +#2362 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2363 = LINE ( 'NONE', #1987, #2573 ) ; +#2364 = ADVANCED_FACE ( 'NONE', ( #504 ), #2662, .F. ) ; +#2365 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106012700, 0.3549102234176832500, 1.174999999999999800 ) ) ; +#2366 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2367 = EDGE_CURVE ( 'NONE', #2669, #1275, #354, .T. ) ; +#2368 = ORIENTED_EDGE ( 'NONE', *, *, #100, .T. ) ; +#2369 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2370 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, -0.2060549223287785900, 1.375000000000000000 ) ) ; +#2371 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2372 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2373 = ORIENTED_EDGE ( 'NONE', *, *, #958, .T. ) ; +#2374 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 0.6875000000000000000, 1.000000000000000000 ) ) ; +#2375 = ORIENTED_EDGE ( 'NONE', *, *, #1780, .T. ) ; +#2376 = CIRCLE ( 'NONE', #1495, 0.2187499999999999400 ) ; +#2377 = LINE ( 'NONE', #2791, #2303 ) ; +#2378 = ORIENTED_EDGE ( 'NONE', *, *, #2893, .F. ) ; +#2379 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060131000, -0.2549102234176833200, 1.174999999999999800 ) ) ; +#2380 = CIRCLE ( 'NONE', #2115, 0.2187499999999999400 ) ; +#2381 = VECTOR ( 'NONE', #1319, 39.37007874015748100 ) ; +#2382 = VERTEX_POINT ( 'NONE', #1247 ) ; +#2383 = EDGE_CURVE ( 'NONE', #2476, #220, #577, .T. ) ; +#2384 = AXIS2_PLACEMENT_3D ( 'NONE', #2490, #386, #2458 ) ; +#2385 = AXIS2_PLACEMENT_3D ( 'NONE', #2725, #2279, #142 ) ; +#2386 = LINE ( 'NONE', #2033, #849 ) ; +#2387 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2388 = ORIENTED_EDGE ( 'NONE', *, *, #1769, .F. ) ; +#2389 = EDGE_LOOP ( 'NONE', ( #2058, #372 ) ) ; +#2390 = PLANE ( 'NONE', #1632 ) ; +#2391 = ADVANCED_FACE ( 'NONE', ( #617, #949 ), #2900, .F. ) ; +#2392 = PLANE ( 'NONE', #496 ) ; +#2393 = CIRCLE ( 'NONE', #2905, 0.1330000000000004800 ) ; +#2394 = EDGE_LOOP ( 'NONE', ( #2417, #86, #2677, #2821 ) ) ; +#2395 = EDGE_CURVE ( 'NONE', #2720, #1654, #982, .T. ) ; +#2396 = LINE ( 'NONE', #1135, #1222 ) ; +#2397 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#2398 = AXIS2_PLACEMENT_3D ( 'NONE', #2719, #1068, #2014 ) ; +#2399 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, 1.250000000000000000, 0.3052820087476053000 ) ) ; +#2400 = DIMENSIONAL_EXPONENTS ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ; +#2401 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2402 = ORIENTED_EDGE ( 'NONE', *, *, #1862, .F. ) ; +#2403 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026638100, -0.2549102234176833200, 1.375000000000000000 ) ) ; +#2404 = EDGE_CURVE ( 'NONE', #326, #2808, #1118, .T. ) ; +#2405 = VERTEX_POINT ( 'NONE', #819 ) ; +#2406 = VECTOR ( 'NONE', #2157, 39.37007874015748100 ) ; +#2407 = CARTESIAN_POINT ( 'NONE', ( -0.2157500000000000300, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2408 = LINE ( 'NONE', #196, #2203 ) ; +#2409 = VERTEX_POINT ( 'NONE', #2005 ) ; +#2410 = VECTOR ( 'NONE', #1873, 39.37007874015748100 ) ; +#2411 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2412 = EDGE_CURVE ( 'NONE', #1787, #1734, #2171, .T. ) ; +#2413 = CARTESIAN_POINT ( 'NONE', ( 1.346749999999999700, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2414 = AXIS2_PLACEMENT_3D ( 'NONE', #1911, #2354, #2602 ) ; +#2415 = LINE ( 'NONE', #1566, #1909 ) ; +#2416 = ORIENTED_EDGE ( 'NONE', *, *, #1839, .F. ) ; +#2417 = ORIENTED_EDGE ( 'NONE', *, *, #897, .F. ) ; +#2418 = ORIENTED_EDGE ( 'NONE', *, *, #637, .F. ) ; +#2419 = VERTEX_POINT ( 'NONE', #126 ) ; +#2420 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2421 = ADVANCED_FACE ( 'NONE', ( #1752 ), #2512, .F. ) ; +#2422 = FACE_OUTER_BOUND ( 'NONE', #1177, .T. ) ; +#2423 = CARTESIAN_POINT ( 'NONE', ( 0.9949999999999996600, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2424 = EDGE_CURVE ( 'NONE', #791, #2208, #2302, .T. ) ; +#2425 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2426 = ORIENTED_EDGE ( 'NONE', *, *, #1318, .F. ) ; +#2427 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2428 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2429 = CYLINDRICAL_SURFACE ( 'NONE', #1956, 0.1330000000000002000 ) ; +#2430 = LINE ( 'NONE', #666, #1961 ) ; +#2431 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.073645923333782200E-016, -0.0000000000000000000 ) ) ; +#2432 = DIRECTION ( 'NONE', ( -1.000000000000000000, -2.731847993664262700E-016, 0.0000000000000000000 ) ) ; +#2433 = DIRECTION ( 'NONE', ( -2.073645923333782200E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2434 = EDGE_CURVE ( 'NONE', #1316, #1028, #2844, .T. ) ; +#2435 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 0.8125000000000000000 ) ) ; +#2436 = EDGE_CURVE ( 'NONE', #209, #2657, #1567, .T. ) ; +#2437 = AXIS2_PLACEMENT_3D ( 'NONE', #2645, #278, #2628 ) ; +#2438 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2439 = VERTEX_POINT ( 'NONE', #2540 ) ; +#2440 = PLANE ( 'NONE', #750 ) ; +#2441 = ORIENTED_EDGE ( 'NONE', *, *, #2075, .T. ) ; +#2442 = LINE ( 'NONE', #234, #2883 ) ; +#2443 = CIRCLE ( 'NONE', #2346, 0.2187500000000000300 ) ; +#2444 = VERTEX_POINT ( 'NONE', #351 ) ; +#2445 = CYLINDRICAL_SURFACE ( 'NONE', #1217, 0.2187500000000000000 ) ; +#2446 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2447 = EDGE_LOOP ( 'NONE', ( #1093, #299 ) ) ; +#2448 = FACE_OUTER_BOUND ( 'NONE', #2521, .T. ) ; +#2449 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.375000000000000000 ) ) ; +#2450 = ORIENTED_EDGE ( 'NONE', *, *, #2576, .T. ) ; +#2451 = PLANE ( 'NONE', #2786 ) ; +#2452 = AXIS2_PLACEMENT_3D ( 'NONE', #236, #1882, #693 ) ; +#2453 = CIRCLE ( 'NONE', #2385, 0.09999999999999992200 ) ; +#2454 = AXIS2_PLACEMENT_3D ( 'NONE', #2292, #2257, #1823 ) ; +#2455 = CARTESIAN_POINT ( 'NONE', ( -1.340750000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2456 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, -0.2060549223287785900, 1.375000000000000000 ) ) ; +#2457 = FACE_OUTER_BOUND ( 'NONE', #990, .T. ) ; +#2458 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2459 = CARTESIAN_POINT ( 'NONE', ( 1.880274082640043300, 0.1643791425749027100, 0.8124999999999998900 ) ) ; +#2460 = CARTESIAN_POINT ( 'NONE', ( 0.1340121486582279700, -0.1318487067688303100, 1.174999999999999800 ) ) ; +#2461 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2462 = EDGE_CURVE ( 'NONE', #409, #9, #2743, .T. ) ; +#2463 = VECTOR ( 'NONE', #1919, 39.37007874015748100 ) ; +#2464 = ORIENTED_EDGE ( 'NONE', *, *, #559, .F. ) ; +#2465 = FACE_OUTER_BOUND ( 'NONE', #1761, .T. ) ; +#2466 = CARTESIAN_POINT ( 'NONE', ( -2.380000000000000300, 1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2467 = EDGE_CURVE ( 'NONE', #3020, #998, #1238, .T. ) ; +#2468 = AXIS2_PLACEMENT_3D ( 'NONE', #3005, #2314, #2937 ) ; +#2469 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2470 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#2471 = PLANE ( 'NONE', #944 ) ; +#2472 = EDGE_CURVE ( 'NONE', #250, #2439, #3024, .T. ) ; +#2473 = AXIS2_PLACEMENT_3D ( 'NONE', #2861, #522, #1934 ) ; +#2474 = EDGE_CURVE ( 'NONE', #2757, #1028, #425, .T. ) ; +#2475 = CARTESIAN_POINT ( 'NONE', ( 1.904415784228984400, -0.2020162695637367200, 0.8125000000000000000 ) ) ; +#2476 = VERTEX_POINT ( 'NONE', #1126 ) ; +#2477 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, -0.1318487067688302900, 1.174999999999999800 ) ) ; +#2478 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060135200, 0.2549102234176833200, 1.174999999999999800 ) ) ; +#2479 = CIRCLE ( 'NONE', #715, 0.2187499999999999400 ) ; +#2480 = SHAPE_DEFINITION_REPRESENTATION ( #604, #45 ) ; +#2481 = ORIENTED_EDGE ( 'NONE', *, *, #1374, .T. ) ; +#2482 = ORIENTED_EDGE ( 'NONE', *, *, #524, .T. ) ; +#2483 = CYLINDRICAL_SURFACE ( 'NONE', #2261, 0.1330000000000003700 ) ; +#2484 = FACE_BOUND ( 'NONE', #2447, .T. ) ; +#2485 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2486 = ORIENTED_EDGE ( 'NONE', *, *, #1939, .F. ) ; +#2487 = VERTEX_POINT ( 'NONE', #603 ) ; +#2488 = ORIENTED_EDGE ( 'NONE', *, *, #265, .F. ) ; +#2489 = ORIENTED_EDGE ( 'NONE', *, *, #1, .F. ) ; +#2490 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979653500, 0.5624999999999996700, 0.8125000000000000000 ) ) ; +#2491 = EDGE_CURVE ( 'NONE', #734, #385, #2205, .T. ) ; +#2492 = VECTOR ( 'NONE', #2431, 39.37007874015748100 ) ; +#2493 = AXIS2_PLACEMENT_3D ( 'NONE', #498, #2566, #1158 ) ; +#2494 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2495 = AXIS2_PLACEMENT_3D ( 'NONE', #940, #2766, #2345 ) ; +#2496 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, 0.2500000000000000600, 0.8750000000000000000 ) ) ; +#2497 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.924323260793499400E-016, 0.0000000000000000000 ) ) ; +#2498 = VECTOR ( 'NONE', #2094, 39.37007874015748100 ) ; +#2499 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #1188, 'distance_accuracy_value', 'NONE'); +#2500 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, -1.250000000000000000, 1.000000000000000000 ) ) ; +#2501 = LINE ( 'NONE', #1834, #2193 ) ; +#2502 = VERTEX_POINT ( 'NONE', #1549 ) ; +#2503 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2504 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#2505 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2506 = AXIS2_PLACEMENT_3D ( 'NONE', #957, #742, #21 ) ; +#2507 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2508 = ORIENTED_EDGE ( 'NONE', *, *, #1109, .T. ) ; +#2509 = VERTEX_POINT ( 'NONE', #593 ) ; +#2510 = VECTOR ( 'NONE', #1560, 39.37007874015748100 ) ; +#2511 = ORIENTED_EDGE ( 'NONE', *, *, #2424, .T. ) ; +#2512 = CYLINDRICAL_SURFACE ( 'NONE', #2468, 0.2187500000000000800 ) ; +#2513 = FACE_OUTER_BOUND ( 'NONE', #817, .T. ) ; +#2514 = EDGE_LOOP ( 'NONE', ( #2717, #1464 ) ) ; +#2515 = EDGE_LOOP ( 'NONE', ( #2275, #1376 ) ) ; +#2516 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, -0.1318487067688302900, 1.174999999999999800 ) ) ; +#2517 = EDGE_CURVE ( 'NONE', #1548, #1354, #243, .T. ) ; +#2518 = FACE_OUTER_BOUND ( 'NONE', #106, .T. ) ; +#2519 = ORIENTED_EDGE ( 'NONE', *, *, #1223, .T. ) ; +#2520 = ORIENTED_EDGE ( 'NONE', *, *, #173, .F. ) ; +#2521 = EDGE_LOOP ( 'NONE', ( #433, #1412, #842, #2987 ) ) ; +#2522 = ADVANCED_FACE ( 'NONE', ( #1686 ), #2471, .F. ) ; +#2523 = LINE ( 'NONE', #481, #1912 ) ; +#2524 = FACE_OUTER_BOUND ( 'NONE', #733, .T. ) ; +#2525 = DIRECTION ( 'NONE', ( -1.986798540846736500E-016, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2526 = CARTESIAN_POINT ( 'NONE', ( -2.380000000000000300, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2527 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2528 = CARTESIAN_POINT ( 'NONE', ( -1.844412463250980800, -0.1875000000000002800, 1.000000000000000000 ) ) ; +#2529 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2530 = ORIENTED_EDGE ( 'NONE', *, *, #1261, .F. ) ; +#2531 = EDGE_CURVE ( 'NONE', #1128, #1984, #1603, .T. ) ; +#2532 = AXIS2_PLACEMENT_3D ( 'NONE', #291, #309, #2651 ) ; +#2533 = LINE ( 'NONE', #490, #2724 ) ; +#2534 = ORIENTED_EDGE ( 'NONE', *, *, #2639, .F. ) ; +#2535 = CIRCLE ( 'NONE', #1813, 0.2187499999999999400 ) ; +#2536 = ADVANCED_FACE ( 'NONE', ( #2344 ), #3037, .F. ) ; +#2537 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2538 = CARTESIAN_POINT ( 'NONE', ( -0.1300000000000005900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2539 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, 0.2500000000000000600, 1.000000000000000000 ) ) ; +#2540 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979653500, 0.6874999999999998900, 1.000000000000000000 ) ) ; +#2541 = EDGE_CURVE ( 'NONE', #261, #1993, #2132, .T. ) ; +#2542 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2543 = ORIENTED_EDGE ( 'NONE', *, *, #2196, .T. ) ; +#2544 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 1.250000000000000000, 1.000000000000000000 ) ) ; +#2545 = PLANE ( 'NONE', #2009 ) ; +#2546 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979654000, -0.6875000000000001100, 0.8125000000000000000 ) ) ; +#2547 = AXIS2_PLACEMENT_3D ( 'NONE', #2260, #1081, #153 ) ; +#2548 = LINE ( 'NONE', #2036, #1299 ) ; +#2549 = ADVANCED_FACE ( 'NONE', ( #1340 ), #2795, .F. ) ; +#2550 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2551 = LINE ( 'NONE', #188, #1502 ) ; +#2552 = LINE ( 'NONE', #2722, #1532 ) ; +#2553 = EDGE_LOOP ( 'NONE', ( #134, #943 ) ) ; +#2554 = ORIENTED_EDGE ( 'NONE', *, *, #121, .F. ) ; +#2555 = VECTOR ( 'NONE', #1008, 39.37007874015748100 ) ; +#2556 = LINE ( 'NONE', #758, #2988 ) ; +#2557 = VERTEX_POINT ( 'NONE', #922 ) ; +#2558 = ORIENTED_EDGE ( 'NONE', *, *, #928, .F. ) ; +#2559 = ORIENTED_EDGE ( 'NONE', *, *, #1289, .F. ) ; +#2560 = VERTEX_POINT ( 'NONE', #2811 ) ; +#2561 = EDGE_CURVE ( 'NONE', #2875, #30, #1788, .T. ) ; +#2562 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2563 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026639400, -0.3549102234176832500, 1.375000000000000000 ) ) ; +#2564 = ORIENTED_EDGE ( 'NONE', *, *, #928, .T. ) ; +#2565 = LINE ( 'NONE', #1457, #1954 ) ; +#2566 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2567 = EDGE_CURVE ( 'NONE', #2282, #2127, #2772, .T. ) ; +#2568 = AXIS2_PLACEMENT_3D ( 'NONE', #1467, #2870, #1716 ) ; +#2569 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2570 = ADVANCED_FACE ( 'NONE', ( #2983 ), #1173, .F. ) ; +#2571 = PLANE ( 'NONE', #2614 ) ; +#2572 = VECTOR ( 'NONE', #1462, 39.37007874015748100 ) ; +#2573 = VECTOR ( 'NONE', #1320, 39.37007874015748100 ) ; +#2574 = EDGE_LOOP ( 'NONE', ( #2488, #1562, #2638, #2064 ) ) ; +#2575 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026639400, -0.2549102234176833200, 1.375000000000000000 ) ) ; +#2576 = EDGE_CURVE ( 'NONE', #2133, #653, #2442, .T. ) ; +#2577 = EDGE_CURVE ( 'NONE', #80, #1641, #1898, .T. ) ; +#2578 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106012700, 0.2549102234176832100, 1.375000000000000000 ) ) ; +#2579 = VERTEX_POINT ( 'NONE', #2563 ) ; +#2580 = ADVANCED_FACE ( 'NONE', ( #2950, #1724 ), #941, .F. ) ; +#2581 =( CONVERSION_BASED_UNIT ( 'INCH', #1338 ) LENGTH_UNIT ( ) NAMED_UNIT ( #2400 ) ); +#2582 = VERTEX_POINT ( 'NONE', #2323 ) ; +#2583 = CARTESIAN_POINT ( 'NONE', ( -0.1300000000000004500, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2584 = EDGE_CURVE ( 'NONE', #385, #2885, #1163, .T. ) ; +#2585 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2586 = VECTOR ( 'NONE', #2801, 39.37007874015748100 ) ; +#2587 = ORIENTED_EDGE ( 'NONE', *, *, #2029, .F. ) ; +#2588 = FACE_OUTER_BOUND ( 'NONE', #745, .T. ) ; +#2589 = VERTEX_POINT ( 'NONE', #792 ) ; +#2590 = EDGE_CURVE ( 'NONE', #2610, #836, #2271, .T. ) ; +#2591 = DIRECTION ( 'NONE', ( -1.000000000000000000, 6.481953218662490300E-017, 0.0000000000000000000 ) ) ; +#2592 = AXIS2_PLACEMENT_3D ( 'NONE', #2281, #1053, #1074 ) ; +#2593 = ORIENTED_EDGE ( 'NONE', *, *, #2627, .F. ) ; +#2594 = ORIENTED_EDGE ( 'NONE', *, *, #897, .T. ) ; +#2595 = VECTOR ( 'NONE', #1955, 39.37007874015748100 ) ; +#2596 = VERTEX_POINT ( 'NONE', #320 ) ; +#2597 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2598 = ORIENTED_EDGE ( 'NONE', *, *, #2871, .T. ) ; +#2599 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 0.4375503462087652100, 0.8125000000000000000 ) ) ; +#2600 = ORIENTED_EDGE ( 'NONE', *, *, #2472, .T. ) ; +#2601 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2602 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2603 = VECTOR ( 'NONE', #1091, 39.37007874015748100 ) ; +#2604 = ADVANCED_FACE ( 'NONE', ( #468 ), #2440, .F. ) ; +#2605 = VERTEX_POINT ( 'NONE', #823 ) ; +#2606 = ORIENTED_EDGE ( 'NONE', *, *, #906, .T. ) ; +#2607 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2608 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2609 = CARTESIAN_POINT ( 'NONE', ( 1.346749999999999700, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2610 = VERTEX_POINT ( 'NONE', #350 ) ; +#2611 = DIRECTION ( 'NONE', ( -1.924323260793499400E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2612 = CIRCLE ( 'NONE', #2188, 0.1330000000000004800 ) ; +#2613 = VERTEX_POINT ( 'NONE', #1771 ) ; +#2614 = AXIS2_PLACEMENT_3D ( 'NONE', #948, #485, #10 ) ; +#2615 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, 0.1318487067688302900, 1.174999999999999800 ) ) ; +#2616 = LINE ( 'NONE', #2449, #1073 ) ; +#2617 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2618 = CARTESIAN_POINT ( 'NONE', ( 0.9949999999999996600, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2619 = ADVANCED_FACE ( 'NONE', ( #1649 ), #1534, .F. ) ; +#2620 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2621 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 0.6874999999999996700, 0.5000000000000000000 ) ) ; +#2622 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2623 = EDGE_CURVE ( 'NONE', #220, #599, #1377, .T. ) ; +#2624 = EDGE_LOOP ( 'NONE', ( #3014, #255, #889, #1728 ) ) ; +#2625 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2626 = EDGE_LOOP ( 'NONE', ( #800, #838, #2959, #244 ) ) ; +#2627 = EDGE_CURVE ( 'NONE', #1793, #2296, #2007, .T. ) ; +#2628 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2629 = AXIS2_PLACEMENT_3D ( 'NONE', #2116, #1198, #945 ) ; +#2630 = LINE ( 'NONE', #1520, #759 ) ; +#2631 = VECTOR ( 'NONE', #2322, 39.37007874015748100 ) ; +#2632 = CYLINDRICAL_SURFACE ( 'NONE', #1181, 0.1330000000000003400 ) ; +#2633 = ORIENTED_EDGE ( 'NONE', *, *, #2584, .T. ) ; +#2634 = VERTEX_POINT ( 'NONE', #1291 ) ; +#2635 = FACE_OUTER_BOUND ( 'NONE', #651, .T. ) ; +#2636 = ADVANCED_FACE ( 'NONE', ( #47 ), #2451, .F. ) ; +#2637 = FACE_OUTER_BOUND ( 'NONE', #2686, .T. ) ; +#2638 = ORIENTED_EDGE ( 'NONE', *, *, #2136, .F. ) ; +#2639 = EDGE_CURVE ( 'NONE', #2634, #1968, #2630, .T. ) ; +#2640 = ORIENTED_EDGE ( 'NONE', *, *, #2008, .F. ) ; +#2641 = AXIS2_PLACEMENT_3D ( 'NONE', #846, #816, #2927 ) ; +#2642 = EDGE_CURVE ( 'NONE', #9, #409, #279, .T. ) ; +#2643 = ORIENTED_EDGE ( 'NONE', *, *, #2367, .F. ) ; +#2644 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2645 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2646 = ORIENTED_EDGE ( 'NONE', *, *, #1494, .T. ) ; +#2647 = VECTOR ( 'NONE', #360, 39.37007874015748100 ) ; +#2648 = ORIENTED_EDGE ( 'NONE', *, *, #2114, .T. ) ; +#2649 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2650 = VERTEX_POINT ( 'NONE', #552 ) ; +#2651 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2652 = CIRCLE ( 'NONE', #2437, 0.1330000000000004800 ) ; +#2653 = ADVANCED_FACE ( 'NONE', ( #677, #831 ), #2899, .F. ) ; +#2654 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2655 = EDGE_CURVE ( 'NONE', #2409, #203, #1935, .T. ) ; +#2656 = CYLINDRICAL_SURFACE ( 'NONE', #533, 0.5000000000000001100 ) ; +#2657 = VERTEX_POINT ( 'NONE', #375 ) ; +#2658 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000100E-005 ), #2581, 'distance_accuracy_value', 'NONE'); +#2659 = AXIS2_PLACEMENT_3D ( 'NONE', #2370, #245, #1878 ) ; +#2660 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 0.8750000000000000000 ) ) ; +#2661 = CARTESIAN_POINT ( 'NONE', ( 2.294434124949071000, 0.1559617977120215700, 0.8124999999999998900 ) ) ; +#2662 = PLANE ( 'NONE', #2972 ) ; +#2663 = ORIENTED_EDGE ( 'NONE', *, *, #524, .F. ) ; +#2664 = ORIENTED_EDGE ( 'NONE', *, *, #1743, .T. ) ; +#2665 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979653700, 0.5624999999999996700, 1.000000000000000000 ) ) ; +#2666 = LINE ( 'NONE', #721, #679 ) ; +#2667 = EDGE_LOOP ( 'NONE', ( #1986, #1865 ) ) ; +#2668 = VECTOR ( 'NONE', #553, 39.37007874015748100 ) ; +#2669 = VERTEX_POINT ( 'NONE', #2220 ) ; +#2670 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2671 = AXIS2_PLACEMENT_3D ( 'NONE', #2124, #1892, #1150 ) ; +#2672 = LINE ( 'NONE', #1915, #799 ) ; +#2673 = ORIENTED_EDGE ( 'NONE', *, *, #2738, .T. ) ; +#2674 = ORIENTED_EDGE ( 'NONE', *, *, #2395, .F. ) ; +#2675 = CIRCLE ( 'NONE', #205, 0.1250000000000000300 ) ; +#2676 = EDGE_LOOP ( 'NONE', ( #2416, #2228, #1489, #1887 ) ) ; +#2677 = ORIENTED_EDGE ( 'NONE', *, *, #1359, .T. ) ; +#2678 = VERTEX_POINT ( 'NONE', #1077 ) ; +#2679 = VECTOR ( 'NONE', #2199, 39.37007874015748100 ) ; +#2680 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2681 = ORIENTED_EDGE ( 'NONE', *, *, #2755, .T. ) ; +#2682 = CYLINDRICAL_SURFACE ( 'NONE', #3039, 0.2187500000000000800 ) ; +#2683 = EDGE_LOOP ( 'NONE', ( #2897, #1113 ) ) ; +#2684 = EDGE_CURVE ( 'NONE', #1548, #1243, #2548, .T. ) ; +#2685 = CARTESIAN_POINT ( 'NONE', ( 0.2217499999999999700, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2686 = EDGE_LOOP ( 'NONE', ( #1088, #482, #2055, #2648 ) ) ; +#2687 = CYLINDRICAL_SURFACE ( 'NONE', #1157, 0.2187499999999999400 ) ; +#2688 = DIRECTION ( 'NONE', ( -2.731847993664262700E-016, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2689 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2690 = EDGE_CURVE ( 'NONE', #1995, #2105, #1454, .T. ) ; +#2691 = AXIS2_PLACEMENT_3D ( 'NONE', #1860, #1658, #190 ) ; +#2692 = AXIS2_PLACEMENT_3D ( 'NONE', #1061, #1271, #99 ) ; +#2693 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, 0.6250000000000000000, 1.375000000000000000 ) ) ; +#2694 = ORIENTED_EDGE ( 'NONE', *, *, #2561, .F. ) ; +#2695 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2696 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2697 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2698 = EDGE_LOOP ( 'NONE', ( #2543, #1880 ) ) ; +#2699 = LINE ( 'NONE', #608, #393 ) ; +#2700 = LINE ( 'NONE', #681, #19 ) ; +#2701 = CIRCLE ( 'NONE', #2295, 0.1330000000000005100 ) ; +#2702 = VERTEX_POINT ( 'NONE', #1084 ) ; +#2703 = CARTESIAN_POINT ( 'NONE', ( 2.262952316802707000, 0.4790639941477360900, 0.8125000000000000000 ) ) ; +#2704 = FACE_OUTER_BOUND ( 'NONE', #1372, .T. ) ; +#2705 = VECTOR ( 'NONE', #2867, 39.37007874015748100 ) ; +#2706 = EDGE_CURVE ( 'NONE', #1827, #2814, #953, .T. ) ; +#2707 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, -0.3310549223287785900, 1.375000000000000000 ) ) ; +#2708 = PLANE ( 'NONE', #1754 ) ; +#2709 = ORIENTED_EDGE ( 'NONE', *, *, #2684, .T. ) ; +#2710 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999400, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2711 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, 0.2060549223287783100, 1.375000000000000000 ) ) ; +#2712 = VERTEX_POINT ( 'NONE', #2044 ) ; +#2713 = AXIS2_PLACEMENT_3D ( 'NONE', #1590, #930, #443 ) ; +#2714 = ORIENTED_EDGE ( 'NONE', *, *, #2999, .F. ) ; +#2715 = AXIS2_PLACEMENT_3D ( 'NONE', #2933, #1543, #844 ) ; +#2716 = ORIENTED_EDGE ( 'NONE', *, *, #2186, .T. ) ; +#2717 = ORIENTED_EDGE ( 'NONE', *, *, #2395, .T. ) ; +#2718 = ORIENTED_EDGE ( 'NONE', *, *, #339, .T. ) ; +#2719 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, 0.2060549223287782800, 1.174999999999999800 ) ) ; +#2720 = VERTEX_POINT ( 'NONE', #602 ) ; +#2721 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2722 = CARTESIAN_POINT ( 'NONE', ( 0.9092499999999998900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2723 = EDGE_CURVE ( 'NONE', #2444, #120, #199, .T. ) ; +#2724 = VECTOR ( 'NONE', #448, 39.37007874015748100 ) ; +#2725 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060135200, 0.2549102234176833200, 1.375000000000000000 ) ) ; +#2726 = VECTOR ( 'NONE', #179, 39.37007874015748100 ) ; +#2727 = CARTESIAN_POINT ( 'NONE', ( -0.9889999999999997700, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2728 = EDGE_CURVE ( 'NONE', #998, #3020, #2376, .T. ) ; +#2729 = AXIS2_PLACEMENT_3D ( 'NONE', #2226, #108, #305 ) ; +#2730 = DIRECTION ( 'NONE', ( -1.000000000000000000, 6.481953218662490300E-017, 0.0000000000000000000 ) ) ; +#2731 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2732 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2733 = CARTESIAN_POINT ( 'NONE', ( 2.500000000000000000, 1.250000000000000000, 0.4999999999999996100 ) ) ; +#2734 = ORIENTED_EDGE ( 'NONE', *, *, #868, .F. ) ; +#2735 = AXIS2_PLACEMENT_3D ( 'NONE', #122, #1778, #606 ) ; +#2736 = ORIENTED_EDGE ( 'NONE', *, *, #1939, .T. ) ; +#2737 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 1.250000000000000000, 1.000000000000000000 ) ) ; +#2738 = EDGE_CURVE ( 'NONE', #1783, #2233, #395, .T. ) ; +#2739 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2740 = PLANE ( 'NONE', #1185 ) ; +#2741 = CIRCLE ( 'NONE', #1677, 0.2187500000000000300 ) ; +#2742 = ORIENTED_EDGE ( 'NONE', *, *, #1950, .T. ) ; +#2743 = CIRCLE ( 'NONE', #531, 0.2187500000000000800 ) ; +#2744 = ORIENTED_EDGE ( 'NONE', *, *, #1000, .F. ) ; +#2745 = LINE ( 'NONE', #2528, #2087 ) ; +#2746 = ORIENTED_EDGE ( 'NONE', *, *, #2755, .F. ) ; +#2747 = CIRCLE ( 'NONE', #1254, 0.2187499999999999400 ) ; +#2748 = ORIENTED_EDGE ( 'NONE', *, *, #2000, .F. ) ; +#2749 = ORIENTED_EDGE ( 'NONE', *, *, #2996, .T. ) ; +#2750 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2751 = EDGE_CURVE ( 'NONE', #1695, #2650, #2699, .T. ) ; +#2752 = CARTESIAN_POINT ( 'NONE', ( -1.500000000000000200, -0.6250000000000000000, 1.375000000000000000 ) ) ; +#2753 = FACE_OUTER_BOUND ( 'NONE', #290, .T. ) ; +#2754 = ORIENTED_EDGE ( 'NONE', *, *, #2639, .T. ) ; +#2755 = EDGE_CURVE ( 'NONE', #459, #1357, #2552, .T. ) ; +#2756 = VECTOR ( 'NONE', #2731, 39.37007874015748100 ) ; +#2757 = VERTEX_POINT ( 'NONE', #1329 ) ; +#2758 = AXIS2_PLACEMENT_3D ( 'NONE', #789, #2438, #2446 ) ; +#2759 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979653700, 0.5624999999999996700, 0.8125000000000000000 ) ) ; +#2760 = DIRECTION ( 'NONE', ( 1.000000000000000000, 6.481953218662490300E-017, 0.0000000000000000000 ) ) ; +#2761 = FACE_OUTER_BOUND ( 'NONE', #2394, .T. ) ; +#2762 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, -0.0000000000000000000 ) ) ; +#2763 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026637000, 0.2549102234176834900, 1.174999999999999800 ) ) ; +#2764 = CARTESIAN_POINT ( 'NONE', ( -1.163431963356009700, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#2765 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.2060549223287785900, 1.174999999999999800 ) ) ; +#2766 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2767 = EDGE_LOOP ( 'NONE', ( #287, #1423, #2091, #2426 ) ) ; +#2768 = AXIS2_PLACEMENT_3D ( 'NONE', #866, #1085, #416 ) ; +#2769 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2770 = ADVANCED_FACE ( 'NONE', ( #1722, #2341 ), #2248, .F. ) ; +#2771 = CARTESIAN_POINT ( 'NONE', ( -2.500000000000000000, 1.250000000000000000, 1.000000000000000000 ) ) ; +#2772 = LINE ( 'NONE', #1853, #1817 ) ; +#2773 = LINE ( 'NONE', #3, #1422 ) ; +#2774 = ORIENTED_EDGE ( 'NONE', *, *, #491, .T. ) ; +#2775 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2776 = EDGE_CURVE ( 'NONE', #44, #435, #870, .T. ) ; +#2777 = DIRECTION ( 'NONE', ( -1.000000000000000000, -0.0000000000000000000, -0.0000000000000000000 ) ) ; +#2778 = CYLINDRICAL_SURFACE ( 'NONE', #2629, 0.1330000000000003700 ) ; +#2779 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2780 = LINE ( 'NONE', #2727, #2381 ) ; +#2781 = ORIENTED_EDGE ( 'NONE', *, *, #1106, .F. ) ; +#2782 = VERTEX_POINT ( 'NONE', #2956 ) ; +#2783 = ORIENTED_EDGE ( 'NONE', *, *, #114, .F. ) ; +#2784 = CIRCLE ( 'NONE', #2758, 0.2187500000000000300 ) ; +#2785 = CARTESIAN_POINT ( 'NONE', ( 0.9092499999999998900, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2786 = AXIS2_PLACEMENT_3D ( 'NONE', #1267, #2688, #2432 ) ; +#2787 = ORIENTED_EDGE ( 'NONE', *, *, #1233, .T. ) ; +#2788 = ORIENTED_EDGE ( 'NONE', *, *, #1131, .F. ) ; +#2789 = ADVANCED_FACE ( 'NONE', ( #2174 ), #16, .F. ) ; +#2790 = VERTEX_POINT ( 'NONE', #1097 ) ; +#2791 = CARTESIAN_POINT ( 'NONE', ( 1.250000000000000000, -0.2499999999999998100, 1.000000000000000000 ) ) ; +#2792 = ORIENTED_EDGE ( 'NONE', *, *, #1359, .F. ) ; +#2793 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2794 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2795 = PLANE ( 'NONE', #2041 ) ; +#2796 = EDGE_CURVE ( 'NONE', #2502, #2989, #835, .T. ) ; +#2797 = EDGE_CURVE ( 'NONE', #2678, #2889, #1146, .T. ) ; +#2798 = FACE_OUTER_BOUND ( 'NONE', #2964, .T. ) ; +#2799 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2800 = FACE_BOUND ( 'NONE', #2389, .T. ) ; +#2801 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2802 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.986798540846737300E-016, 0.0000000000000000000 ) ) ; +#2803 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106011900, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#2804 = ADVANCED_FACE ( 'NONE', ( #644 ), #832, .T. ) ; +#2805 = CARTESIAN_POINT ( 'NONE', ( 0.9092499999999998900, -1.000000000000000000, 1.000000000000000000 ) ) ; +#2806 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2807 = EDGE_CURVE ( 'NONE', #1162, #1343, #723, .T. ) ; +#2808 = VERTEX_POINT ( 'NONE', #415 ) ; +#2809 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2810 = AXIS2_PLACEMENT_3D ( 'NONE', #1672, #495, #2129 ) ; +#2811 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026637200, 0.3549102234176833600, 1.375000000000000000 ) ) ; +#2812 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( $, .METRE. ) ); +#2813 = VECTOR ( 'NONE', #3023, 39.37007874015748100 ) ; +#2814 = VERTEX_POINT ( 'NONE', #1134 ) ; +#2815 = LINE ( 'NONE', #2908, #1499 ) ; +#2816 = ORIENTED_EDGE ( 'NONE', *, *, #1025, .T. ) ; +#2817 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2818 = CYLINDRICAL_SURFACE ( 'NONE', #2715, 0.1330000000000002000 ) ; +#2819 = EDGE_LOOP ( 'NONE', ( #1304, #1523 ) ) ; +#2820 = CARTESIAN_POINT ( 'NONE', ( -0.06160349221060131000, -0.3549102234176832500, 1.375000000000000000 ) ) ; +#2821 = ORIENTED_EDGE ( 'NONE', *, *, #647, .T. ) ; +#2822 = ADVANCED_FACE ( 'NONE', ( #2046, #909 ), #1369, .F. ) ; +#2823 = EDGE_LOOP ( 'NONE', ( #331, #53, #295, #2520 ) ) ; +#2824 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, 0.6874999999999996700, 0.5000000000000000000 ) ) ; +#2825 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2826 = LINE ( 'NONE', #2733, #1661 ) ; +#2827 = ORIENTED_EDGE ( 'NONE', *, *, #1970, .T. ) ; +#2828 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) ); +#2829 = ORIENTED_EDGE ( 'NONE', *, *, #532, .F. ) ; +#2830 = EDGE_LOOP ( 'NONE', ( #1574, #1920, #1256, #1465 ) ) ; +#2831 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2832 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2833 = FACE_BOUND ( 'NONE', #853, .T. ) ; +#2834 = ADVANCED_FACE ( 'NONE', ( #1019 ), #1634, .F. ) ; +#2835 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2836 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2837 = EDGE_CURVE ( 'NONE', #675, #548, #2408, .T. ) ; +#2838 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2839 = CARTESIAN_POINT ( 'NONE', ( -0.8790460201818491900, 0.3310549223287783100, 1.174999999999999800 ) ) ; +#2840 = EDGE_LOOP ( 'NONE', ( #2418, #17, #2441, #537 ) ) ; +#2841 = ORIENTED_EDGE ( 'NONE', *, *, #1261, .T. ) ; +#2842 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979653700, 0.6874999999999998900, 0.8125000000000000000 ) ) ; +#2843 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2844 = LINE ( 'NONE', #2460, #1973 ) ; +#2845 = EDGE_CURVE ( 'NONE', #2945, #80, #541, .T. ) ; +#2846 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #2998 ), #1637 ) ; +#2847 = EDGE_CURVE ( 'NONE', #2296, #2405, #1161, .T. ) ; +#2848 = LINE ( 'NONE', #1835, #2631 ) ; +#2849 = VERTEX_POINT ( 'NONE', #222 ) ; +#2850 = VECTOR ( 'NONE', #98, 39.37007874015748100 ) ; +#2851 = CIRCLE ( 'NONE', #773, 0.2187499999999999400 ) ; +#2852 = ORIENTED_EDGE ( 'NONE', *, *, #1522, .F. ) ; +#2853 = ORIENTED_EDGE ( 'NONE', *, *, #1468, .F. ) ; +#2854 = CARTESIAN_POINT ( 'NONE', ( 0.5912700537026639400, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#2855 = CIRCLE ( 'NONE', #692, 0.1330000000000002000 ) ; +#2856 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2857 = VERTEX_POINT ( 'NONE', #657 ) ; +#2858 = EDGE_LOOP ( 'NONE', ( #910, #2198, #950, #2816 ) ) ; +#2859 = ORIENTED_EDGE ( 'NONE', *, *, #2002, .F. ) ; +#2860 = ADVANCED_FACE ( 'NONE', ( #1786, #614 ), #918, .F. ) ; +#2861 = CARTESIAN_POINT ( 'NONE', ( 0.002999999999999940600, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2862 = EDGE_CURVE ( 'NONE', #441, #2875, #1937, .T. ) ; +#2863 = STYLED_ITEM ( 'NONE', ( #1749 ), #45 ) ; +#2864 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026638100, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#2865 = CYLINDRICAL_SURFACE ( 'NONE', #113, 0.2187499999999999400 ) ; +#2866 = AXIS2_PLACEMENT_3D ( 'NONE', #2794, #2298, #1430 ) ; +#2867 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2868 = CIRCLE ( 'NONE', #216, 0.1330000000000002000 ) ; +#2869 = DIRECTION ( 'NONE', ( -1.000000000000000000, -1.601555123121432500E-016, -0.0000000000000000000 ) ) ; +#2870 = DIRECTION ( 'NONE', ( -0.0000000000000000000, 1.000000000000000000, 0.0000000000000000000 ) ) ; +#2871 = EDGE_CURVE ( 'NONE', #248, #9, #85, .T. ) ; +#2872 = ADVANCED_FACE ( 'NONE', ( #1458 ), #2088, .F. ) ; +#2873 = ORIENTED_EDGE ( 'NONE', *, *, #605, .F. ) ; +#2874 = CARTESIAN_POINT ( 'NONE', ( 1.893314055979653700, 0.5624999999999996700, 1.000000000000000000 ) ) ; +#2875 = VERTEX_POINT ( 'NONE', #2544 ) ; +#2876 = CARTESIAN_POINT ( 'NONE', ( -0.5595000000000000000, -1.250000000000000000, 0.6947179912523939700 ) ) ; +#2877 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2878 = AXIS2_PLACEMENT_3D ( 'NONE', #1498, #1983, #1039 ) ; +#2879 = VECTOR ( 'NONE', #861, 39.37007874015748100 ) ; +#2880 = SURFACE_STYLE_FILL_AREA ( #1888 ) ; +#2881 = ORIENTED_EDGE ( 'NONE', *, *, #768, .T. ) ; +#2882 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2883 = VECTOR ( 'NONE', #1636, 39.37007874015748100 ) ; +#2884 = LINE ( 'NONE', #978, #2705 ) ; +#2885 = VERTEX_POINT ( 'NONE', #211 ) ; +#2886 = ORIENTED_EDGE ( 'NONE', *, *, #2143, .T. ) ; +#2887 = EDGE_LOOP ( 'NONE', ( #1580, #181 ) ) ; +#2888 = EDGE_CURVE ( 'NONE', #1333, #2273, #794, .T. ) ; +#2889 = VERTEX_POINT ( 'NONE', #2108 ) ; +#2890 = CARTESIAN_POINT ( 'NONE', ( -1.340750000000000100, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2891 = CARTESIAN_POINT ( 'NONE', ( 2.426749360703121600, -0.4133649961045401400, 0.6250000000000000000 ) ) ; +#2892 = DIRECTION ( 'NONE', ( 1.000000000000000000, 1.986798540846736500E-016, 0.0000000000000000000 ) ) ; +#2893 = EDGE_CURVE ( 'NONE', #2589, #1065, #1856, .T. ) ; +#2894 = VECTOR ( 'NONE', #1013, 39.37007874015748100 ) ; +#2895 = CARTESIAN_POINT ( 'NONE', ( -1.340750000000000100, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2896 = ORIENTED_EDGE ( 'NONE', *, *, #449, .F. ) ; +#2897 = ORIENTED_EDGE ( 'NONE', *, *, #2230, .F. ) ; +#2898 = CARTESIAN_POINT ( 'NONE', ( 1.000000000000000000, -0.6250000000000000000, 1.000000000000000000 ) ) ; +#2899 = PLANE ( 'NONE', #2160 ) ; +#2900 = PLANE ( 'NONE', #1840 ) ; +#2901 = EDGE_CURVE ( 'NONE', #2208, #312, #2012, .T. ) ; +#2902 = LINE ( 'NONE', #146, #377 ) ; +#2903 = CARTESIAN_POINT ( 'NONE', ( -2.113999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2904 = EDGE_CURVE ( 'NONE', #2266, #2712, #1417, .T. ) ; +#2905 = AXIS2_PLACEMENT_3D ( 'NONE', #1684, #1927, #1195 ) ; +#2906 = CARTESIAN_POINT ( 'NONE', ( -0.1300000000000003100, -1.000000000000000000, -2.731847993664263200E-016 ) ) ; +#2907 = CARTESIAN_POINT ( 'NONE', ( 2.294434124949071000, 0.1559617977120215700, 0.6250000000000000000 ) ) ; +#2908 = CARTESIAN_POINT ( 'NONE', ( -0.7540460201818490700, 0.2060549223287783100, 1.174999999999999800 ) ) ; +#2909 = VERTEX_POINT ( 'NONE', #701 ) ; +#2910 = CARTESIAN_POINT ( 'NONE', ( 0.2217499999999998900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2911 = ORIENTED_EDGE ( 'NONE', *, *, #753, .F. ) ; +#2912 = ORIENTED_EDGE ( 'NONE', *, *, #2561, .T. ) ; +#2913 = VECTOR ( 'NONE', #579, 39.37007874015748100 ) ; +#2914 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.3310549223287785900, 1.375000000000000000 ) ) ; +#2915 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -0.0000000000000000000, -1.000000000000000000 ) ) ; +#2916 = AXIS2_PLACEMENT_3D ( 'NONE', #2068, #186, #1821 ) ; +#2917 = LINE ( 'NONE', #1651, #834 ) ; +#2918 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, 0.2060549223287782800, 1.174999999999999800 ) ) ; +#2919 = VERTEX_POINT ( 'NONE', #2578 ) ; +#2920 = LINE ( 'NONE', #2842, #2595 ) ; +#2921 = AXIS2_PLACEMENT_3D ( 'NONE', #2949, #2497, #404 ) ; +#2922 = CYLINDRICAL_SURFACE ( 'NONE', #1331, 0.1330000000000002000 ) ; +#2923 = ORIENTED_EDGE ( 'NONE', *, *, #1795, .F. ) ; +#2924 = ORIENTED_EDGE ( 'NONE', *, *, #491, .F. ) ; +#2925 = CARTESIAN_POINT ( 'NONE', ( 2.499999999243048200, -0.3967912632750754100, 0.8124999999999998900 ) ) ; +#2926 = VECTOR ( 'NONE', #676, 39.37007874015748100 ) ; +#2927 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2928 = ORIENTED_EDGE ( 'NONE', *, *, #1211, .F. ) ; +#2929 = CARTESIAN_POINT ( 'NONE', ( 1.904415784228984400, -0.2020162695637367200, 0.6250000000000000000 ) ) ; +#2930 = ORIENTED_EDGE ( 'NONE', *, *, #2952, .T. ) ; +#2931 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.000000000000000000 ) ) ; +#2932 = EDGE_CURVE ( 'NONE', #2919, #1168, #1301, .T. ) ; +#2933 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2934 = CYLINDRICAL_SURFACE ( 'NONE', #1066, 0.1330000000000003400 ) ; +#2935 = PLANE ( 'NONE', #1668 ) ; +#2936 = CYLINDRICAL_SURFACE ( 'NONE', #1847, 0.1947179912523943300 ) ; +#2937 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2938 = EDGE_CURVE ( 'NONE', #1398, #680, #2701, .T. ) ; +#2939 = AXIS2_PLACEMENT_3D ( 'NONE', #2329, #706, #2799 ) ; +#2940 = AXIS2_PLACEMENT_3D ( 'NONE', #2617, #1442, #746 ) ; +#2941 = CARTESIAN_POINT ( 'NONE', ( 1.880274082640043300, 0.1643791425749027100, 0.8125000000000000000 ) ) ; +#2942 = CARTESIAN_POINT ( 'NONE', ( -2.028250000000000300, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2943 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2944 = ORIENTED_EDGE ( 'NONE', *, *, #1436, .F. ) ; +#2945 = VERTEX_POINT ( 'NONE', #712 ) ; +#2946 = FACE_OUTER_BOUND ( 'NONE', #1611, .T. ) ; +#2947 = VECTOR ( 'NONE', #898, 39.37007874015748100 ) ; +#2948 = ORIENTED_EDGE ( 'NONE', *, *, #641, .F. ) ; +#2949 = CARTESIAN_POINT ( 'NONE', ( 0.6912700537026638100, -0.3549102234176832500, 1.174999999999999800 ) ) ; +#2950 = FACE_BOUND ( 'NONE', #2887, .T. ) ; +#2951 = VECTOR ( 'NONE', #1924, 39.37007874015748100 ) ; +#2952 = EDGE_CURVE ( 'NONE', #2790, #1162, #2130, .T. ) ; +#2953 = EDGE_LOOP ( 'NONE', ( #1236, #623, #2063, #1389 ) ) ; +#2954 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106012700, 0.2549102234176833200, 1.375000000000000000 ) ) ; +#2955 = EDGE_LOOP ( 'NONE', ( #1504, #2139, #2663, #876 ) ) ; +#2956 = CARTESIAN_POINT ( 'NONE', ( -0.1616034922106012700, 0.2549102234176832100, 1.174999999999999800 ) ) ; +#2957 = ORIENTED_EDGE ( 'NONE', *, *, #2319, .T. ) ; +#2958 = CARTESIAN_POINT ( 'NONE', ( 0.1360000000000004500, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2959 = ORIENTED_EDGE ( 'NONE', *, *, #2531, .T. ) ; +#2960 = AXIS2_PLACEMENT_3D ( 'NONE', #972, #735, #4 ) ; +#2961 = LINE ( 'NONE', #2038, #2647 ) ; +#2962 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -1.000000000000000000, -0.0000000000000000000 ) ) ; +#2963 = ORIENTED_EDGE ( 'NONE', *, *, #273, .F. ) ; +#2964 = EDGE_LOOP ( 'NONE', ( #282, #1642, #140, #740 ) ) ; +#2965 = CARTESIAN_POINT ( 'NONE', ( 2.018314055979654000, -0.5625000000000001100, 1.000000000000000000 ) ) ; +#2966 = CARTESIAN_POINT ( 'NONE', ( -2.246999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#2967 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2968 = LINE ( 'NONE', #289, #3040 ) ; +#2969 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2970 = FACE_BOUND ( 'NONE', #741, .T. ) ; +#2971 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2972 = AXIS2_PLACEMENT_3D ( 'NONE', #321, #2433, #1976 ) ; +#2973 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2974 = ORIENTED_EDGE ( 'NONE', *, *, #2310, .F. ) ; +#2975 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#2976 = ORIENTED_EDGE ( 'NONE', *, *, #2412, .F. ) ; +#2977 = EDGE_CURVE ( 'NONE', #424, #1993, #2741, .T. ) ; +#2978 = CARTESIAN_POINT ( 'NONE', ( 2.499999999243017500, -0.3967912632750822400, 0.6250000000000000000 ) ) ; +#2979 = CARTESIAN_POINT ( 'NONE', ( 0.9949999999999993300, 1.000000000000000000, 0.7499999999999998900 ) ) ; +#2980 = CARTESIAN_POINT ( 'NONE', ( 0.9949999999999994400, 1.000000000000000000, 1.000000000000000000 ) ) ; +#2981 = COLOUR_RGB ( '',0.7921568627450980000, 0.8196078431372548800, 0.9333333333333333500 ) ; +#2982 = EDGE_LOOP ( 'NONE', ( #110, #2181, #535, #61 ) ) ; +#2983 = FACE_OUTER_BOUND ( 'NONE', #2676, .T. ) ; +#2984 = LINE ( 'NONE', #1336, #1120 ) ; +#2985 = EDGE_LOOP ( 'NONE', ( #1618, #2103, #2694, #2519, #1571, #474, #1302, #1285 ) ) ; +#2986 = FACE_OUTER_BOUND ( 'NONE', #1863, .T. ) ; +#2987 = ORIENTED_EDGE ( 'NONE', *, *, #1665, .F. ) ; +#2988 = VECTOR ( 'NONE', #526, 39.37007874015748100 ) ; +#2989 = VERTEX_POINT ( 'NONE', #3013 ) ; +#2990 = ADVANCED_FACE ( 'NONE', ( #762 ), #1496, .F. ) ; +#2991 = DIRECTION ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, -1.000000000000000000 ) ) ; +#2992 = LINE ( 'NONE', #2496, #2603 ) ; +#2993 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2994 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#2995 = EDGE_LOOP ( 'NONE', ( #2564, #749, #2131, #1347 ) ) ; +#2996 = EDGE_CURVE ( 'NONE', #2152, #1533, #240, .T. ) ; +#2997 = ORIENTED_EDGE ( 'NONE', *, *, #2083, .F. ) ; +#2998 = STYLED_ITEM ( 'NONE', ( #32 ), #551 ) ; +#2999 = EDGE_CURVE ( 'NONE', #1654, #3020, #1379, .T. ) ; +#3000 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3001 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3002 = DIRECTION ( 'NONE', ( 0.0000000000000000000, -1.000000000000000000, 0.0000000000000000000 ) ) ; +#3003 = ORIENTED_EDGE ( 'NONE', *, *, #2075, .F. ) ; +#3004 = CARTESIAN_POINT ( 'NONE', ( -1.288431963356009700, -0.3310549223287785900, 1.375000000000000000 ) ) ; +#3005 = CARTESIAN_POINT ( 'NONE', ( -1.122000000000000100, -1.000000000000000000, 1.000000000000000000 ) ) ; +#3006 = FACE_BOUND ( 'NONE', #757, .T. ) ; +#3007 = ADVANCED_FACE ( 'NONE', ( #3019 ), #2632, .F. ) ; +#3008 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3009 = EDGE_CURVE ( 'NONE', #2209, #2579, #201, .T. ) ; +#3010 = CARTESIAN_POINT ( 'NONE', ( 0.9949999999999993300, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#3011 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3012 = DIRECTION ( 'NONE', ( -1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3013 = CARTESIAN_POINT ( 'NONE', ( -2.465750000000000300, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#3014 = ORIENTED_EDGE ( 'NONE', *, *, #152, .F. ) ; +#3015 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3016 = CARTESIAN_POINT ( 'NONE', ( 0.3974211765303045700, -0.1318487067688302900, 1.174999999999999800 ) ) ; +#3017 = ADVANCED_FACE ( 'NONE', ( #1264 ), #52, .F. ) ; +#3018 = VECTOR ( 'NONE', #2286, 39.37007874015748100 ) ; +#3019 = FACE_OUTER_BOUND ( 'NONE', #226, .T. ) ; +#3020 = VERTEX_POINT ( 'NONE', #2805 ) ; +#3021 = CARTESIAN_POINT ( 'NONE', ( -2.344412463250980800, -0.1875000000000003900, 0.5000000000000000000 ) ) ; +#3022 = EDGE_CURVE ( 'NONE', #1333, #1650, #2666, .T. ) ; +#3023 = DIRECTION ( 'NONE', ( -0.0000000000000000000, -0.0000000000000000000, 1.000000000000000000 ) ) ; +#3024 = CIRCLE ( 'NONE', #1700, 0.1249999999999999000 ) ; +#3025 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3026 = CARTESIAN_POINT ( 'NONE', ( -0.2157500000000000500, -1.000000000000000000, 1.000000000000000000 ) ) ; +#3027 = FACE_OUTER_BOUND ( 'NONE', #396, .T. ) ; +#3028 = ORIENTED_EDGE ( 'NONE', *, *, #974, .T. ) ; +#3029 = VERTEX_POINT ( 'NONE', #704 ) ; +#3030 = ORIENTED_EDGE ( 'NONE', *, *, #707, .T. ) ; +#3031 = ORIENTED_EDGE ( 'NONE', *, *, #641, .T. ) ; +#3032 = CARTESIAN_POINT ( 'NONE', ( 1.127999999999999900, -1.000000000000000000, 0.7499999999999998900 ) ) ; +#3033 = VECTOR ( 'NONE', #600, 39.37007874015748100 ) ; +#3034 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.0000000000000000000, 0.0000000000000000000 ) ) ; +#3035 = EDGE_LOOP ( 'NONE', ( #2027, #1815 ) ) ; +#3036 = CARTESIAN_POINT ( 'NONE', ( 0.0000000000000000000, 0.0000000000000000000, 1.174999999999999800 ) ) ; +#3037 = PLANE ( 'NONE', #890 ) ; +#3038 = ADVANCED_FACE ( 'NONE', ( #466 ), #262, .F. ) ; +#3039 = AXIS2_PLACEMENT_3D ( 'NONE', #2371, #2608, #2165 ) ; +#3040 = VECTOR ( 'NONE', #1456, 39.37007874015748100 ) ; +ENDSEC; +END-ISO-10303-21; From a9e90610ce31c96cb48f7cb8d0cb42e5d8233410 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 17:08:06 -0400 Subject: [PATCH 06/25] attempt to pre-generate matrices for sweeping --- tests/test_creation.py | 2 +- trimesh/creation.py | 227 ++++++++++++++++++++++--------------- trimesh/transformations.py | 14 ++- trimesh/util.py | 5 +- 4 files changed, 151 insertions(+), 97 deletions(-) diff --git a/tests/test_creation.py b/tests/test_creation.py index effa23bac..d769b7358 100644 --- a/tests/test_creation.py +++ b/tests/test_creation.py @@ -171,7 +171,7 @@ def test_path_sweep(self): # Extrude for engine in self.engines: mesh = g.trimesh.creation.sweep_polygon( - poly, path_closed, closed=True, engine=engine + poly, path_closed, engine=engine ) assert mesh.is_volume diff --git a/trimesh/creation.py b/trimesh/creation.py index 3ee8613da..84155f691 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -208,13 +208,11 @@ def extrude_polygon( def sweep_polygon( polygon: "Polygon", path: ArrayLike, - closed: bool = False, angles: Optional[ArrayLike] = None, **kwargs, ) -> Trimesh: """ - Extrude a 2D shapely polygon into a 3D mesh along an - arbitrary 3D path. Doesn't handle sharp curvature well. + Extrude a 2D polygon into a 3D mesh along a 3D path. Parameters ---------- @@ -222,13 +220,12 @@ def sweep_polygon( Profile to sweep along path path : (n, 3) float A path in 3D - closed : bool - Whether to close the 2 ends of the path angles : (n,) float Optional rotation angle relative to prior vertex - at each vertex + at each vertex. **kwargs : dict - Passed to `triangulate_polygon`. + Passed to `triangulate_polygon` + Returns ------- mesh : trimesh.Trimesh @@ -239,94 +236,142 @@ def sweep_polygon( if not util.is_shape(path, (-1, 3)): raise ValueError("Path must be (n, 3)!") + if angles is not None: + angles = np.asanyarray(angles, dtype=np.float64) + if angles.shape != (len(path),): + raise ValueError(angles.shape) + else: + # set all angles to zero + angles = np.zeros(len(path), dtype=np.float64) + + # check to see if path is closed + closed = np.linalg.norm(path[0] - path[-1]) < tol.merge + if closed: + # make sure vertices are exactly identical + path[-1] = path[0] + # Extract 2D vertices and triangulation - verts_2d = np.array(polygon.exterior.coords)[:-1] - base_verts_2d, faces_2d = triangulate_polygon(polygon, **kwargs) - n = len(verts_2d) + vertices_2D, faces = triangulate_polygon(polygon, **kwargs) - # Create basis for first planar polygon cap - x, y, z = util.generate_basis(path[0] - path[1]) - tf_mat = np.ones((4, 4)) - tf_mat[:3, :3] = np.c_[x, y, z] - tf_mat[:3, 3] = path[0] + # stack the `(n, 3)` faces into `(3 * n, 2)` edges + edges = faces_to_edges(faces) + # edges which only occur once are on the boundary of the polygon + # since the triangulation may have subdivided the boundary of the + # shapely polygon, we need to find it again + edges_unique = grouping.group_rows(np.sort(edges, axis=1), require_count=1) - # Compute 3D locations of those vertices - verts_3d = np.c_[verts_2d, np.zeros(n)] - verts_3d = tf.transform_points(verts_3d, tf_mat) + # subset the vertices to only ones included in the boundary + unique, inverse = np.unique(edges[edges_unique].reshape(-1), return_inverse=True) + # take only the vertices in the boundary + # and stack them with zeros and ones so we can use dot + # products to transform them all over the place + vertices_tf = np.column_stack( + (vertices_2D[unique], np.zeros(len(unique)), np.ones(len(unique))) + ).T + # the indices of vertices_tf + boundary = inverse.reshape((-1, 2)) - if closed: - vertices = [] - faces = [] - else: - base_verts_3d = np.c_[base_verts_2d, np.zeros(len(base_verts_2d))] - base_verts_3d = tf.transform_points(base_verts_3d, tf_mat) - - vertices = [base_verts_3d] - faces = [faces_2d] - - # Compute plane normals for each turn -- - # each turn induces a plane halfway between the two vectors - v1s = util.unitize(path[1:-1] - path[:-2]) - v2s = util.unitize(path[1:-1] - path[2:]) - norms = np.cross(np.cross(v1s, v2s), v1s + v2s) - norms[(norms == 0.0).all(1)] = v1s[(norms == 0.0).all(1)] - norms = util.unitize(norms) - final_v1 = util.unitize(path[-1] - path[-2]) - norms = np.vstack((norms, final_v1)) - v1s = np.vstack((v1s, final_v1)) - - # Create all side walls by projecting the 3d vertices into each plane - # in succession - for i in range(len(norms)): - verts_3d_prev = verts_3d - - # Rotate if needed - if angles is not None: - tf_mat = tf.rotation_matrix(angles[i], norms[i], path[i]) - verts_3d_prev = tf.transform_points(verts_3d_prev, tf_mat) - - # Project vertices onto plane in 3D - ds = np.einsum("ij,j->i", (path[i + 1] - verts_3d_prev), norms[i]) - ds = ds / np.dot(v1s[i], norms[i]) - - verts_3d_new = np.einsum("i,j->ij", ds, v1s[i]) + verts_3d_prev - - # Add to face and vertex lists - new_faces = [[i + n, (i + 1) % n, i] for i in range(n)] - new_faces.extend([[(i - 1) % n + n, i + n, i] for i in range(n)]) - - if i == len(norms) - 1 and closed: # add faces to close mesh - N = 2 * n * len(norms) # total number of vertices in mesh - new_faces.extend( - [[i + n - (N - n), (i + 1) % n + n, i + n] for i in range(n)] - ) - new_faces.extend( - [[(i - 1) % n + n - (N - n), i + n - (N - n), i + n] for i in range(n)] - ) - - # save faces and vertices into a sequence - faces.append(np.array(new_faces)) - vertices.append(np.vstack((verts_3d, verts_3d_new))) - - verts_3d = verts_3d_new - - # do the main stack operation from a sequence to (n,3) arrays - # doing one vstack provides a substantial speedup by - # avoiding a bunch of temporary allocations - vertices, faces = util.append_faces(vertices, faces) - - # Create final cap - if not closed: - x, y, z = util.generate_basis(path[-1] - path[-2]) - vecs = verts_3d - path[-1] - coords = np.c_[np.einsum("ij,j->i", vecs, x), np.einsum("ij,j->i", vecs, y)] - base_verts_2d, faces_2d = triangulate_polygon(Polygon(coords), **kwargs) - base_verts_3d = ( - np.einsum("i,j->ij", base_verts_2d[:, 0], x) - + np.einsum("i,j->ij", base_verts_2d[:, 1], y) - ) + path[-1] - faces = np.vstack((faces, faces_2d + len(vertices))) - vertices = np.vstack((vertices, base_verts_3d)) + # now create a matrix for every vertex along our path. + # - plane origin at the vertex + # - plane normal along the induced normal from the vector + # - rotation specified by angle + + # this will be the plane normal for each slice + normal = path[1:] - path[:-1] + normal = np.vstack((normal, [normal[-1]])) + + normal = util.unitize(normal) + + # try to vectorize some things + syaw, spitch = util.vector_to_spherical(normal).T + + # this will be the roll vector + roll = np.cross(normal[1:], normal[:-1]) + roll_norm = np.linalg.norm(roll, axis=1) + roll_nonzero = roll_norm > tol.zero + roll[roll_nonzero] /= roll_norm[roll_nonzero].reshape((-1, 1)) + + roll = np.zeros(len(syaw)) + x, y, z = path.T + + assert len(roll) == len(syaw) + assert len(roll) == len(x) + + cos = np.cos + sin = np.sin + ze = np.zeros_like(x) + o = np.ones_like(x) + + import sympy as sp + + yaw, pitch, roll, xt, yt, zt = sp.symbols("yaw pitch roll xt yt zt") + + """ + - polygon is rolled around z by requested-induced angle + - polygon is yaw around y + - polygon is pitch around x + - polygon is translated + """ + + rm = tf.rotation_matrix(roll, [0, 0, 1]) + ym = tf.rotation_matrix(yaw, [0, 1, 0]) + pm = tf.rotation_matrix(pitch, [1, 0, 0]) + tm = tf.translation_matrix([xt, yt, zt]) + + final = rm @ ym @ pm @ tm + + chk = np.array( + final.subs({roll: 0.0, yaw: syaw[0], pitch: spitch[0], xt: 0, yt: 0, zt: 0}), + dtype=np.float64, + ) + + from IPython import embed + + embed() + + # generate a transform for every slice in a somewhat vectorized way + # originally generated using sympy: + # print(tf.euler_matrix(*sympy.symbols('yaw pitch roll'))) + mats = np.column_stack( + [ + cos(pitch) * cos(roll), + sin(pitch) * sin(yaw) * cos(roll) - sin(roll) * cos(yaw), + sin(pitch) * cos(roll) * cos(yaw) + sin(roll) * sin(yaw), + x, + sin(roll) * cos(pitch), + sin(pitch) * sin(roll) * sin(yaw) + cos(roll) * cos(yaw), + sin(pitch) * sin(roll) * cos(yaw) - sin(yaw) * cos(roll), + y, + -sin(pitch), + sin(yaw) * cos(pitch), + cos(pitch) * cos(yaw), + z, + ze, + ze, + ze, + o, + ] + ).reshape((-1, 4, 4)) + + import trimesh + + check = np.array( + [ + trimesh.transform_points([[0.0, 0.0, 1.0]], m, translate=False)[0] + for n, m in zip(normal, mats) + ] + ) + + vertices_3D = np.vstack([np.dot(m, vertices_tf).T[:, :3] for m in mats]) + + # check = [tf.transform_points(ver + + # matrix_init = align_c + # matrices = + + from IPython import embed + + embed() return Trimesh(vertices, faces) diff --git a/trimesh/transformations.py b/trimesh/transformations.py index 44c92aa14..330b79ece 100644 --- a/trimesh/transformations.py +++ b/trimesh/transformations.py @@ -197,6 +197,7 @@ """ import numpy as np +from numpy.typing import ArrayLike, NDArray _IDENTITY = np.eye(4) _IDENTITY.flags["WRITEABLE"] = False @@ -228,10 +229,19 @@ def translation_matrix(direction): """ # are we 2D or 3D dim = len(direction) + + # start with identity matrix - M = np.identity(dim + 1) + if any(type(v).__name__ == "Symbol" for v in direction): + # if we have been passed input values as sympy.Symbol + from sympy import eye + M = eye(dim + 1) + else: + M = np.eye(dim + 1) + # apply the offset M[:dim, dim] = direction[:dim] + return M @@ -2131,7 +2141,7 @@ def spherical_matrix(theta, phi, axes="sxyz"): return result -def transform_points(points, matrix, translate=True): +def transform_points(points: ArrayLike, matrix: ArrayLike, translate: bool=True) -> NDArray[np.float64]: """ Returns points rotated by a homogeneous transformation matrix. diff --git a/trimesh/util.py b/trimesh/util.py index aaf03d00c..39d12ee82 100644 --- a/trimesh/util.py +++ b/trimesh/util.py @@ -470,7 +470,7 @@ def vector_to_spherical(cartesian): def spherical_to_vector(spherical): """ - Convert a set of (n, 2) spherical vectors to (n, 3) vectors + Convert an array of `(n, 2)` spherical angles to `(n, 3)` unit vectors. Parameters ------------ @@ -489,8 +489,7 @@ def spherical_to_vector(spherical): theta, phi = spherical.T st, ct = np.sin(theta), np.cos(theta) sp, cp = np.sin(phi), np.cos(phi) - vectors = np.column_stack((ct * sp, st * sp, cp)) - return vectors + return np.column_stack((ct * sp, st * sp, cp)) def pairwise(iterable): From 473bbc71fb0d041a7ead17b37e90b3258dcfce4f Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 20:50:15 -0400 Subject: [PATCH 07/25] producing a mesh for the screw example --- tests/test_creation.py | 4 +- tests/test_transformations.py | 25 ++++++ trimesh/creation.py | 144 +++++++++++++++------------------- trimesh/interfaces/gmsh.py | 12 +-- trimesh/transformations.py | 14 ++-- 5 files changed, 105 insertions(+), 94 deletions(-) diff --git a/tests/test_creation.py b/tests/test_creation.py index d769b7358..e7f1abd67 100644 --- a/tests/test_creation.py +++ b/tests/test_creation.py @@ -170,9 +170,7 @@ def test_path_sweep(self): # Extrude for engine in self.engines: - mesh = g.trimesh.creation.sweep_polygon( - poly, path_closed, engine=engine - ) + mesh = g.trimesh.creation.sweep_polygon(poly, path_closed, engine=engine) assert mesh.is_volume def test_annulus(self): diff --git a/tests/test_transformations.py b/tests/test_transformations.py index 1d54c310f..18762415b 100644 --- a/tests/test_transformations.py +++ b/tests/test_transformations.py @@ -227,6 +227,31 @@ def test_symbolic_euler(self): # they should be the same matrix assert g.np.allclose(s, n) + def test_symbolic_translate(self): + # some of the functions have been modified to support `sympy.Symbol` + # values which is useful for calculating final rotations symbolically + try: + import sympy as sp + except BaseException: + return + + translate = g.trimesh.transformations.translation_matrix + + x, y, z = sp.symbols("x y z") + + m = translate([x, y, z]) + + for T in g.random((100, 3)): + # get the euler matrix evaluated from the symbolic matrix + s = g.np.array( + m.subs({x: T[0], y: T[1], z: T[2]}).evalf(), dtype=g.np.float64 + ) + # get it from a numeric scalar + n = translate(T) + + # they should be the same matrix + assert g.np.allclose(s, n) + if __name__ == "__main__": g.trimesh.util.attach_to_log() diff --git a/trimesh/creation.py b/trimesh/creation.py index 84155f691..8b4942d66 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -252,14 +252,12 @@ def sweep_polygon( # Extract 2D vertices and triangulation vertices_2D, faces = triangulate_polygon(polygon, **kwargs) - # stack the `(n, 3)` faces into `(3 * n, 2)` edges edges = faces_to_edges(faces) # edges which only occur once are on the boundary of the polygon # since the triangulation may have subdivided the boundary of the # shapely polygon, we need to find it again edges_unique = grouping.group_rows(np.sort(edges, axis=1), require_count=1) - # subset the vertices to only ones included in the boundary unique, inverse = np.unique(edges[edges_unique].reshape(-1), return_inverse=True) # take only the vertices in the boundary @@ -279,101 +277,87 @@ def sweep_polygon( # this will be the plane normal for each slice normal = path[1:] - path[:-1] normal = np.vstack((normal, [normal[-1]])) - normal = util.unitize(normal) # try to vectorize some things - syaw, spitch = util.vector_to_spherical(normal).T - - # this will be the roll vector - roll = np.cross(normal[1:], normal[:-1]) - roll_norm = np.linalg.norm(roll, axis=1) - roll_nonzero = roll_norm > tol.zero - roll[roll_nonzero] /= roll_norm[roll_nonzero].reshape((-1, 1)) + theta, phi = util.vector_to_spherical(normal).T + cos_theta, sin_theta = np.cos(theta), np.sin(theta) + cos_phi, sin_phi = np.cos(phi), np.sin(phi) - roll = np.zeros(len(syaw)) - x, y, z = path.T - - assert len(roll) == len(syaw) - assert len(roll) == len(x) - - cos = np.cos - sin = np.sin - ze = np.zeros_like(x) - o = np.ones_like(x) - - import sympy as sp - - yaw, pitch, roll, xt, yt, zt = sp.symbols("yaw pitch roll xt yt zt") + # plane origins are the points on the path + o_x, o_y, o_z = path.T + # this was constructed from the following sympy block: """ - - polygon is rolled around z by requested-induced angle - - polygon is yaw around y - - polygon is pitch around x - - polygon is translated + theta, phi = sp.symbols("theta phi") + matrix = ( + tf.rotation_matrix(phi, [1, 0, 0]) + @ tf.rotation_matrix((sp.pi / 2) - theta, [0, 0, 1]) + ).inv() + matrix.simplify() """ - - rm = tf.rotation_matrix(roll, [0, 0, 1]) - ym = tf.rotation_matrix(yaw, [0, 1, 0]) - pm = tf.rotation_matrix(pitch, [1, 0, 0]) - tm = tf.translation_matrix([xt, yt, zt]) - - final = rm @ ym @ pm @ tm - - chk = np.array( - final.subs({roll: 0.0, yaw: syaw[0], pitch: spitch[0], xt: 0, yt: 0, zt: 0}), - dtype=np.float64, - ) - - from IPython import embed - - embed() - - # generate a transform for every slice in a somewhat vectorized way - # originally generated using sympy: - # print(tf.euler_matrix(*sympy.symbols('yaw pitch roll'))) - mats = np.column_stack( + # shorthand for stacking + zeros = np.zeros(len(theta)) + ones = np.ones(len(theta)) + # stack initially as one unrolled matrix per row + transforms = np.column_stack( [ - cos(pitch) * cos(roll), - sin(pitch) * sin(yaw) * cos(roll) - sin(roll) * cos(yaw), - sin(pitch) * cos(roll) * cos(yaw) + sin(roll) * sin(yaw), - x, - sin(roll) * cos(pitch), - sin(pitch) * sin(roll) * sin(yaw) + cos(roll) * cos(yaw), - sin(pitch) * sin(roll) * cos(yaw) - sin(yaw) * cos(roll), - y, - -sin(pitch), - sin(yaw) * cos(pitch), - cos(pitch) * cos(yaw), - z, - ze, - ze, - ze, - o, + sin_theta, + cos_phi * cos_theta, + sin_phi * cos_theta, + o_x, + -cos_theta, + sin_theta * cos_phi, + sin_phi * sin_theta, + o_y, + zeros, + -sin_phi, + cos_phi, + o_z, + zeros, + zeros, + zeros, + ones, ] ).reshape((-1, 4, 4)) - import trimesh + if tol.strict or True: + # make sure that each transform moves the Z+ vector to the requested normal + for n, matrix in zip(normal, transforms): + check = tf.transform_points([[0.0, 0.0, 1.0]], matrix, translate=False)[0] + assert np.allclose(check, n) - check = np.array( - [ - trimesh.transform_points([[0.0, 0.0, 1.0]], m, translate=False)[0] - for n, m in zip(normal, mats) - ] - ) - - vertices_3D = np.vstack([np.dot(m, vertices_tf).T[:, :3] for m in mats]) + """ + # this will be the roll vector + roll = np.cross(normal[1:], normal[:-1]) + roll_norm = np.linalg.norm(roll, axis=1) + roll_nonzero = roll_norm > tol.zero + roll[roll_nonzero] /= roll_norm[roll_nonzero].reshape((-1, 1)) + """ - # check = [tf.transform_points(ver + # apply transforms to prebaked homogenous coordinates + vertices_3D = np.vstack( + [np.dot(matrix, vertices_tf).T[:, :3] for matrix in transforms] + ) - # matrix_init = align_c - # matrices = + # now construct the faces + stride = len(unique) + boundary_next = boundary + stride + faces_slice = np.column_stack( + [boundary, boundary_next[:, :1], boundary_next[:, ::-1], boundary[:, 1:]] + ).reshape((-1, 3)) - from IPython import embed + # offset the slices + faces = np.vstack( + [faces_slice + offset for offset in np.arange(len(path) - 1) * stride] + ) - embed() + # import trimesh + # m = trimesh.Trimesh(vertices_3D, faces).show() + # from IPython import embed + # embed() - return Trimesh(vertices, faces) + return Trimesh(vertices_3D, faces) def extrude_triangulation( diff --git a/trimesh/interfaces/gmsh.py b/trimesh/interfaces/gmsh.py index 524a34fd7..1e25fefc3 100644 --- a/trimesh/interfaces/gmsh.py +++ b/trimesh/interfaces/gmsh.py @@ -138,7 +138,7 @@ def load_gmsh(file_name, gmsh_args=None): return kwargs -def to_volume(mesh, file_type='msh', max_element=None, mesher_id=1) -> bytes: +def to_volume(mesh, file_type="msh", max_element=None, mesher_id=1) -> bytes: """ Convert a surface mesh to a 3D volume mesh generated by gmsh. @@ -197,17 +197,17 @@ def to_volume(mesh, file_type='msh', max_element=None, mesher_id=1) -> bytes: if max_element is None: max_element = np.sqrt(np.mean(mesh.area_faces)) - - file_type = file_type.lower().strip('.') + file_type = file_type.lower().strip(".") if file_type not in ["bdf", "msh", "inp", "diff", "mesh"]: raise ValueError( "Only Nastran (`bdf`), Gmsh (`msh`), Abaqus (`inp`), " + "Diffpack (`diff`) and Inria Medit (`mesh`) formats " - + "are available!") + + "are available!" + ) # use a temporary directory for input and output with tempfile.TemporaryDirectory() as D: - mesh_file = os.path.join(D, 'input.stl') + mesh_file = os.path.join(D, "input.stl") mesh.export(mesh_file) # starts Gmsh Python API script @@ -235,7 +235,7 @@ def to_volume(mesh, file_type='msh', max_element=None, mesher_id=1) -> bytes: p2 = gmsh.model.addPhysicalGroup(dim2, [tag2]) gmsh.model.setPhysicalName(dim, p2, "Nastran_bdf") - out_path = os.path.join(D, f'temp.{file_type}') + out_path = os.path.join(D, f"temp.{file_type}") gmsh.write(out_path) with open(out_path, "rb") as f: data = f.read() diff --git a/trimesh/transformations.py b/trimesh/transformations.py index 330b79ece..8fedecfc8 100644 --- a/trimesh/transformations.py +++ b/trimesh/transformations.py @@ -230,11 +230,12 @@ def translation_matrix(direction): # are we 2D or 3D dim = len(direction) - # start with identity matrix - if any(type(v).__name__ == "Symbol" for v in direction): + + if any("sympy" in str(type(v)) for v in direction): # if we have been passed input values as sympy.Symbol from sympy import eye + M = eye(dim + 1) else: M = np.eye(dim + 1) @@ -354,7 +355,7 @@ def rotation_matrix(angle, direction, point=None): True """ - if type(angle).__name__ == "Symbol": + if "sympy" in str(type(angle)): # special case sympy symbolic angles import sympy as sp @@ -367,6 +368,7 @@ def rotation_matrix(angle, direction, point=None): cosa = np.cos(angle) direction = unit_vector(direction[:3]) + # rotation matrix around unit vector M = np.diag([cosa, cosa, cosa, 1.0]) M[:3, :3] += np.outer(direction, direction) * (1.0 - cosa) @@ -1134,7 +1136,7 @@ def euler_matrix(ai, aj, ak, axes="sxyz"): if parity: ai, aj, ak = -ai, -aj, -ak - if type(ai).__name__ == "Symbol": + if "sympy" in str(type(ai)): # if we have been passed input values as sympy.Symbol # use symbolic cosine and identity matrix from sympy import cos, eye, sin @@ -2141,7 +2143,9 @@ def spherical_matrix(theta, phi, axes="sxyz"): return result -def transform_points(points: ArrayLike, matrix: ArrayLike, translate: bool=True) -> NDArray[np.float64]: +def transform_points( + points: ArrayLike, matrix: ArrayLike, translate: bool = True +) -> NDArray[np.float64]: """ Returns points rotated by a homogeneous transformation matrix. From 309eab9760b4bc3ffc72e42a55fd936a8c201a2f Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 20:53:23 -0400 Subject: [PATCH 08/25] lol check was 10x slower than logic --- trimesh/creation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trimesh/creation.py b/trimesh/creation.py index 8b4942d66..3887dd788 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -321,7 +321,7 @@ def sweep_polygon( ] ).reshape((-1, 4, 4)) - if tol.strict or True: + if tol.strict: # make sure that each transform moves the Z+ vector to the requested normal for n, matrix in zip(normal, transforms): check = tf.transform_points([[0.0, 0.0, 1.0]], matrix, translate=False)[0] From 667f111cc41ee8f6ffac96eece4b4b31f7489e38 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 21:14:26 -0400 Subject: [PATCH 09/25] use passed roll --- trimesh/creation.py | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/trimesh/creation.py b/trimesh/creation.py index 3887dd788..a6fdb2e5f 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -283,37 +283,43 @@ def sweep_polygon( theta, phi = util.vector_to_spherical(normal).T cos_theta, sin_theta = np.cos(theta), np.sin(theta) cos_phi, sin_phi = np.cos(phi), np.sin(phi) + cos_roll, sin_roll = np.cos(angles), np.sin(angles) - # plane origins are the points on the path - o_x, o_y, o_z = path.T + if angles is None: + angles = np.zeros(len(path)) + else: + angles = np.asanyarray(angles, dtype=np.float64) + assert angles.shape == (len(path),) # this was constructed from the following sympy block: """ - theta, phi = sp.symbols("theta phi") + theta, phi, roll = sp.symbols("theta phi roll") matrix = ( - tf.rotation_matrix(phi, [1, 0, 0]) - @ tf.rotation_matrix((sp.pi / 2) - theta, [0, 0, 1]) + tf.rotation_matrix(roll, [0, 0, 1]) @ + tf.rotation_matrix(phi, [1, 0, 0]) @ + tf.rotation_matrix((sp.pi / 2) - theta, [0, 0, 1]) ).inv() matrix.simplify() """ # shorthand for stacking zeros = np.zeros(len(theta)) ones = np.ones(len(theta)) + # stack initially as one unrolled matrix per row transforms = np.column_stack( [ - sin_theta, - cos_phi * cos_theta, + -sin_roll * cos_phi * cos_theta + sin_theta * cos_roll, + sin_roll * sin_theta + cos_phi * cos_roll * cos_theta, sin_phi * cos_theta, - o_x, - -cos_theta, - sin_theta * cos_phi, + path[:, 0], + -sin_roll * sin_theta * cos_phi - cos_roll * cos_theta, + -sin_roll * cos_theta + sin_theta * cos_phi * cos_roll, sin_phi * sin_theta, - o_y, - zeros, - -sin_phi, + path[:, 1], + sin_phi * sin_roll, + -sin_phi * cos_roll, cos_phi, - o_z, + path[:, 2], zeros, zeros, zeros, @@ -327,20 +333,12 @@ def sweep_polygon( check = tf.transform_points([[0.0, 0.0, 1.0]], matrix, translate=False)[0] assert np.allclose(check, n) - """ - # this will be the roll vector - roll = np.cross(normal[1:], normal[:-1]) - roll_norm = np.linalg.norm(roll, axis=1) - roll_nonzero = roll_norm > tol.zero - roll[roll_nonzero] /= roll_norm[roll_nonzero].reshape((-1, 1)) - """ - # apply transforms to prebaked homogenous coordinates vertices_3D = np.vstack( [np.dot(matrix, vertices_tf).T[:, :3] for matrix in transforms] ) - # now construct the faces + # now construct the faces with one group of boundary faces per slice stride = len(unique) boundary_next = boundary + stride faces_slice = np.column_stack( From dc8c0d01208bd7fb3c50bb92da445b85fcc370bd Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 21:38:34 -0400 Subject: [PATCH 10/25] libxft2 -_- --- docker/trimesh-setup | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/trimesh-setup b/docker/trimesh-setup index 5ed0f0d26..fbd95d7f3 100755 --- a/docker/trimesh-setup +++ b/docker/trimesh-setup @@ -45,7 +45,8 @@ config_json = """ "blender", "openscad", "curl", - "git" + "git", + "libxft2" ] }, "fetch": { From 2f6c4f2933fd9611bf8a3f941b92926a41ac2ca4 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 21:48:15 -0400 Subject: [PATCH 11/25] gmsh requires everything --- Dockerfile | 2 +- docker/trimesh-setup | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index f994ef1a1..fe40e20c0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -63,7 +63,7 @@ COPY --chown=499 pyproject.toml . COPY --chown=499 ./.git ./.git/ USER root -RUN trimesh-setup --install=test,gltf_validator,llvmpipe,binvox +RUN trimesh-setup --install=test,gmsh,gltf_validator,llvmpipe,binvox USER user # install things like pytest diff --git a/docker/trimesh-setup b/docker/trimesh-setup index fbd95d7f3..d8642c1b0 100755 --- a/docker/trimesh-setup +++ b/docker/trimesh-setup @@ -47,7 +47,8 @@ config_json = """ "curl", "git", "libxft2" - ] + ], + "gmsh": ["libxft2", "libxinerama-dev", "libxcursor1","libgomp1"] }, "fetch": { "gltf_validator": { From 601ce36d0f326724691754d3d410b8b968881747 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 21:56:08 -0400 Subject: [PATCH 12/25] apt deps --- docker/trimesh-setup | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/trimesh-setup b/docker/trimesh-setup index d8642c1b0..e0d8fa171 100755 --- a/docker/trimesh-setup +++ b/docker/trimesh-setup @@ -45,8 +45,7 @@ config_json = """ "blender", "openscad", "curl", - "git", - "libxft2" + "git" ], "gmsh": ["libxft2", "libxinerama-dev", "libxcursor1","libgomp1"] }, From 262aa30bc3065dd0a12fd20c29bd9b28181de86d Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sat, 6 Apr 2024 22:13:39 -0400 Subject: [PATCH 13/25] use stored sample data --- tests/data/random_tree.json | 1 + tests/test_scenegraph.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 tests/data/random_tree.json diff --git a/tests/data/random_tree.json b/tests/data/random_tree.json new file mode 100644 index 000000000..98de02f35 --- /dev/null +++ b/tests/data/random_tree.json @@ -0,0 +1 @@ +[[0, 710], [0, 906], [0, 758], [1, 205], [1, 82], [2, 750], [3, 323], [3, 209], [7, 999], [8, 394], [9, 298], [9, 224], [10, 850], [12, 619], [13, 179], [14, 178], [14, 218], [15, 740], [15, 307], [16, 248], [19, 788], [20, 817], [20, 155], [22, 512], [22, 773], [23, 534], [27, 75], [27, 994], [28, 718], [30, 708], [30, 353], [31, 810], [32, 683], [33, 191], [33, 20], [34, 955], [36, 635], [36, 329], [36, 964], [36, 421], [37, 511], [38, 876], [39, 347], [39, 712], [39, 193], [40, 552], [40, 937], [40, 956], [41, 18], [41, 789], [41, 133], [42, 843], [43, 19], [43, 803], [43, 918], [45, 979], [46, 467], [46, 625], [47, 692], [48, 469], [49, 854], [51, 720], [56, 342], [59, 576], [61, 902], [62, 526], [62, 184], [62, 226], [63, 171], [63, 451], [63, 974], [64, 233], [64, 995], [65, 456], [65, 117], [67, 89], [67, 481], [67, 950], [67, 340], [70, 328], [71, 546], [72, 857], [72, 360], [72, 610], [73, 547], [75, 110], [75, 483], [77, 647], [78, 614], [80, 620], [80, 258], [82, 252], [82, 352], [82, 665], [83, 771], [83, 734], [84, 422], [85, 648], [85, 903], [86, 827], [86, 947], [86, 958], [89, 654], [91, 70], [92, 587], [93, 251], [93, 299], [93, 501], [95, 180], [95, 836], [95, 235], [97, 81], [100, 754], [100, 8], [101, 108], [101, 111], [101, 64], [102, 766], [103, 129], [103, 453], [103, 543], [103, 554], [103, 48], [107, 924], [107, 154], [107, 331], [107, 425], [111, 264], [111, 424], [113, 502], [116, 149], [117, 355], [117, 851], [117, 908], [118, 426], [118, 504], [118, 779], [118, 490], [119, 442], [120, 589], [121, 756], [121, 916], [122, 496], [124, 829], [124, 998], [126, 522], [126, 765], [127, 273], [127, 484], [127, 351], [127, 666], [130, 957], [130, 869], [132, 561], [133, 335], [133, 738], [133, 230], [135, 649], [135, 632], [136, 782], [138, 287], [141, 832], [142, 69], [143, 76], [144, 978], [145, 246], [146, 212], [149, 460], [149, 638], [149, 436], [150, 105], [151, 499], [151, 537], [152, 819], [153, 339], [153, 847], [154, 141], [154, 846], [155, 984], [155, 988], [157, 256], [158, 787], [159, 878], [159, 943], [159, 751], [161, 701], [162, 584], [163, 670], [164, 882], [165, 586], [167, 276], [167, 63], [169, 47], [170, 883], [170, 904], [173, 570], [174, 448], [179, 592], [182, 550], [182, 10], [183, 315], [184, 446], [186, 705], [186, 309], [188, 297], [189, 521], [191, 320], [192, 728], [193, 188], [193, 488], [193, 804], [194, 439], [195, 234], [195, 755], [195, 774], [196, 608], [196, 907], [199, 513], [199, 354], [202, 890], [202, 925], [203, 760], [204, 400], [206, 693], [206, 934], [208, 283], [208, 573], [209, 143], [209, 674], [210, 790], [211, 772], [212, 823], [212, 262], [212, 3], [215, 524], [218, 745], [220, 385], [221, 816], [221, 896], [222, 901], [223, 66], [224, 465], [224, 936], [225, 443], [225, 377], [226, 71], [226, 767], [227, 240], [228, 673], [230, 951], [235, 221], [236, 838], [239, 600], [241, 383], [244, 227], [244, 975], [245, 138], [245, 163], [245, 748], [247, 314], [248, 194], [249, 219], [256, 90], [256, 588], [256, 613], [258, 739], [260, 583], [261, 497], [262, 781], [262, 407], [263, 895], [265, 21], [265, 699], [265, 793], [266, 168], [266, 326], [266, 545], [266, 204], [267, 225], [268, 880], [276, 42], [277, 440], [277, 833], [281, 405], [281, 22], [282, 378], [285, 158], [286, 762], [287, 557], [288, 74], [293, 244], [294, 292], [294, 634], [296, 597], [296, 892], [296, 211], [297, 247], [298, 271], [298, 601], [300, 132], [300, 818], [301, 596], [303, 636], [306, 336], [307, 41], [308, 269], [308, 549], [309, 761], [309, 858], [309, 38], [309, 519], [310, 52], [310, 844], [312, 968], [315, 49], [317, 106], [317, 657], [318, 605], [319, 333], [322, 571], [323, 137], [323, 744], [324, 311], [325, 920], [327, 253], [329, 837], [330, 909], [331, 645], [332, 84], [332, 985], [333, 229], [333, 714], [336, 855], [338, 123], [338, 459], [340, 275], [340, 174], [340, 260], [341, 217], [341, 277], [342, 668], [342, 849], [343, 437], [343, 621], [343, 877], [345, 341], [345, 485], [345, 991], [346, 840], [348, 9], [350, 165], [351, 831], [353, 356], [354, 664], [355, 660], [356, 182], [358, 308], [360, 631], [360, 80], [361, 987], [362, 131], [365, 420], [365, 606], [365, 466], [366, 55], [367, 266], [367, 637], [367, 196], [367, 124], [369, 848], [370, 387], [374, 72], [375, 797], [376, 835], [377, 85], [379, 93], [380, 444], [380, 952], [380, 455], [381, 445], [384, 828], [384, 578], [387, 458], [387, 926], [388, 862], [391, 517], [392, 973], [392, 199], [393, 417], [394, 5], [394, 305], [394, 62], [395, 477], [396, 933], [397, 607], [397, 317], [397, 970], [400, 368], [400, 122], [400, 558], [401, 800], [403, 100], [404, 369], [406, 769], [407, 509], [408, 187], [411, 32], [411, 741], [412, 859], [414, 29], [415, 577], [417, 791], [419, 594], [421, 361], [424, 661], [424, 681], [424, 306], [425, 727], [425, 101], [425, 792], [427, 743], [427, 962], [427, 492], [427, 30], [428, 688], [429, 399], [430, 17], [430, 536], [432, 945], [433, 222], [433, 696], [435, 539], [436, 449], [436, 875], [436, 764], [436, 913], [441, 170], [441, 702], [444, 134], [445, 655], [446, 358], [452, 591], [453, 156], [455, 295], [455, 401], [456, 169], [457, 161], [457, 441], [458, 250], [458, 652], [459, 894], [459, 864], [461, 408], [462, 538], [463, 775], [466, 195], [468, 12], [469, 820], [469, 202], [469, 395], [471, 671], [477, 626], [478, 515], [478, 719], [478, 717], [481, 564], [481, 826], [482, 13], [482, 103], [483, 125], [485, 866], [487, 327], [487, 102], [488, 54], [488, 150], [489, 852], [490, 523], [490, 872], [492, 863], [492, 976], [493, 630], [493, 966], [497, 26], [497, 40], [498, 429], [498, 706], [499, 929], [500, 899], [501, 259], [502, 796], [503, 144], [504, 409], [505, 213], [505, 67], [506, 713], [506, 815], [507, 533], [508, 996], [509, 874], [509, 121], [510, 853], [510, 932], [514, 542], [514, 798], [515, 551], [516, 68], [517, 953], [519, 430], [519, 312], [520, 255], [520, 603], [523, 25], [528, 948], [530, 824], [531, 569], [531, 993], [532, 967], [533, 166], [533, 669], [533, 898], [534, 282], [535, 856], [536, 715], [537, 373], [537, 942], [538, 915], [540, 704], [541, 691], [542, 350], [542, 954], [545, 96], [547, 476], [548, 296], [550, 822], [553, 280], [553, 364], [555, 206], [556, 249], [557, 23], [557, 46], [559, 370], [560, 274], [560, 290], [561, 176], [561, 192], [561, 404], [562, 716], [564, 270], [565, 148], [569, 403], [571, 265], [573, 128], [574, 157], [574, 707], [574, 860], [577, 930], [578, 641], [579, 432], [581, 238], [581, 679], [581, 687], [581, 799], [582, 595], [582, 682], [583, 568], [583, 972], [585, 582], [587, 472], [587, 34], [589, 313], [589, 495], [593, 402], [596, 388], [597, 57], [597, 153], [598, 900], [599, 267], [600, 622], [601, 291], [601, 431], [601, 830], [603, 389], [604, 639], [608, 1], [610, 302], [610, 553], [610, 928], [610, 914], [611, 120], [612, 961], [612, 33], [614, 776], [616, 99], [616, 479], [616, 982], [617, 289], [617, 263], [618, 709], [620, 491], [620, 37], [622, 757], [622, 812], [622, 397], [624, 633], [624, 555], [624, 61], [625, 139], [626, 207], [626, 541], [626, 36], [627, 321], [627, 423], [629, 478], [632, 612], [633, 87], [635, 435], [635, 646], [635, 842], [636, 730], [638, 921], [640, 201], [641, 886], [642, 406], [642, 910], [645, 434], [645, 135], [647, 629], [647, 808], [648, 643], [648, 733], [649, 473], [650, 486], [650, 510], [652, 228], [653, 415], [654, 887], [655, 140], [655, 821], [656, 413], [656, 917], [656, 167], [659, 729], [660, 785], [662, 73], [664, 318], [664, 759], [664, 562], [666, 663], [666, 784], [666, 345], [669, 136], [671, 814], [671, 889], [672, 324], [672, 971], [673, 611], [674, 689], [676, 410], [678, 690], [681, 452], [682, 532], [684, 200], [686, 650], [688, 572], [689, 294], [689, 677], [689, 83], [689, 749], [691, 753], [692, 580], [693, 770], [694, 742], [694, 92], [695, 91], [695, 386], [695, 529], [695, 731], [695, 507], [696, 480], [696, 653], [697, 593], [697, 210], [697, 980], [698, 992], [699, 366], [700, 115], [702, 427], [703, 752], [705, 286], [707, 615], [708, 367], [714, 464], [714, 173], [715, 667], [715, 983], [715, 514], [716, 359], [716, 556], [716, 118], [716, 989], [717, 414], [717, 624], [718, 685], [718, 700], [718, 811], [718, 873], [720, 231], [722, 97], [722, 372], [722, 119], [722, 348], [723, 272], [723, 735], [726, 678], [727, 190], [727, 675], [729, 506], [730, 698], [731, 598], [732, 651], [734, 14], [734, 616], [735, 189], [735, 376], [735, 301], [736, 181], [739, 332], [742, 737], [744, 215], [746, 535], [746, 293], [747, 109], [747, 223], [748, 489], [749, 16], [749, 563], [749, 960], [751, 977], [752, 343], [756, 623], [758, 186], [759, 468], [763, 938], [764, 939], [764, 78], [765, 7], [766, 658], [767, 806], [767, 891], [770, 462], [772, 747], [772, 927], [773, 79], [773, 618], [774, 380], [775, 334], [776, 6], [776, 530], [777, 15], [780, 627], [785, 575], [790, 428], [791, 310], [792, 159], [794, 95], [795, 599], [795, 802], [796, 482], [796, 795], [798, 346], [798, 642], [800, 39], [801, 454], [802, 44], [802, 617], [802, 392], [803, 198], [804, 881], [807, 59], [807, 500], [807, 303], [808, 834], [808, 365], [810, 865], [810, 457], [811, 778], [812, 418], [813, 447], [813, 694], [816, 919], [817, 304], [817, 861], [817, 885], [818, 88], [818, 288], [818, 396], [819, 525], [819, 463], [819, 946], [819, 164], [822, 242], [822, 145], [824, 172], [824, 813], [825, 384], [826, 723], [827, 888], [828, 51], [829, 98], [829, 393], [829, 986], [829, 697], [831, 382], [831, 726], [831, 870], [834, 278], [835, 450], [836, 470], [836, 783], [837, 325], [838, 374], [839, 794], [841, 316], [841, 65], [842, 721], [842, 2], [844, 197], [844, 965], [845, 390], [845, 963], [846, 559], [847, 214], [848, 662], [849, 50], [849, 363], [849, 746], [850, 494], [850, 997], [853, 379], [853, 330], [855, 544], [855, 412], [857, 371], [857, 609], [857, 319], [857, 736], [858, 565], [860, 185], [861, 867], [862, 349], [862, 944], [864, 4], [864, 777], [865, 438], [865, 162], [865, 493], [866, 805], [869, 241], [869, 801], [869, 807], [870, 114], [871, 285], [871, 239], [873, 912], [874, 644], [874, 487], [875, 461], [877, 183], [880, 505], [881, 531], [882, 780], [882, 338], [884, 841], [884, 911], [884, 941], [885, 871], [886, 160], [888, 216], [889, 528], [889, 152], [891, 232], [892, 684], [892, 786], [892, 381], [893, 763], [894, 203], [895, 602], [895, 680], [895, 686], [895, 151], [896, 254], [896, 676], [896, 724], [896, 585], [897, 337], [898, 433], [902, 113], [905, 711], [905, 839], [906, 540], [906, 672], [909, 931], [910, 905], [911, 11], [911, 503], [913, 58], [913, 640], [913, 579], [914, 146], [915, 703], [916, 220], [919, 357], [920, 112], [920, 940], [921, 419], [922, 391], [922, 548], [922, 261], [922, 126], [923, 104], [923, 566], [923, 45], [924, 659], [924, 28], [926, 560], [927, 959], [929, 60], [929, 498], [930, 574], [931, 94], [931, 474], [931, 581], [933, 981], [934, 142], [935, 281], [937, 177], [937, 949], [938, 416], [938, 300], [939, 237], [939, 520], [939, 695], [940, 35], [940, 175], [940, 567], [941, 879], [941, 508], [942, 897], [943, 590], [944, 279], [944, 768], [945, 344], [945, 362], [945, 86], [953, 935], [955, 257], [956, 245], [956, 990], [956, 923], [957, 656], [958, 475], [958, 107], [959, 527], [960, 375], [960, 922], [964, 56], [965, 268], [967, 27], [968, 116], [969, 604], [969, 322], [970, 43], [972, 398], [972, 411], [976, 628], [977, 31], [979, 77], [980, 893], [981, 130], [984, 516], [984, 809], [985, 722], [985, 884], [986, 284], [986, 732], [988, 24], [989, 147], [989, 208], [990, 243], [991, 53], [991, 471], [992, 127], [993, 518], [995, 845], [995, 969], [997, 725], [997, 825], [997, 236], [999, 868]] \ No newline at end of file diff --git a/tests/test_scenegraph.py b/tests/test_scenegraph.py index 77e787f3e..b5556a316 100644 --- a/tests/test_scenegraph.py +++ b/tests/test_scenegraph.py @@ -206,13 +206,13 @@ def test_shortest_path(self): return tf = g.trimesh.transformations - # start with creating a random tree - edgelist = {} - tree = g.nx.random_tree(n=1000, seed=0, create_using=g.nx.DiGraph) - edges = list(tree.edges) + # start with a known good random tree + edges = [tuple(row) for row in g.data["random_tree"]] + tree = g.nx.from_edgelist(edges, create_using=g.nx.DiGraph) r_choices = g.random((len(edges), 2)) r_matrices = g.random_transforms(len(edges)) + edgelist = {} for e, r_choice, r_mat in zip(edges, r_choices, r_matrices): data = {} if r_choice[0] > 0.5: From c82d29da23c68bab400836f8613bd3f681636c39 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 01:26:00 -0400 Subject: [PATCH 14/25] average plane --- trimesh/creation.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/trimesh/creation.py b/trimesh/creation.py index a6fdb2e5f..decb8b66c 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -251,9 +251,9 @@ def sweep_polygon( path[-1] = path[0] # Extract 2D vertices and triangulation - vertices_2D, faces = triangulate_polygon(polygon, **kwargs) + vertices_2D, faces_2D = triangulate_polygon(polygon, **kwargs) # stack the `(n, 3)` faces into `(3 * n, 2)` edges - edges = faces_to_edges(faces) + edges = faces_to_edges(faces_2D) # edges which only occur once are on the boundary of the polygon # since the triangulation may have subdivided the boundary of the # shapely polygon, we need to find it again @@ -265,7 +265,7 @@ def sweep_polygon( # products to transform them all over the place vertices_tf = np.column_stack( (vertices_2D[unique], np.zeros(len(unique)), np.ones(len(unique))) - ).T + ) # the indices of vertices_tf boundary = inverse.reshape((-1, 2)) @@ -275,9 +275,19 @@ def sweep_polygon( # - rotation specified by angle # this will be the plane normal for each slice - normal = path[1:] - path[:-1] - normal = np.vstack((normal, [normal[-1]])) + normal = util.unitize(path[1:] - path[:-1]) + + if closed: + ends = normal[[0, -1]] + normal[0] = ends.mean(axis=0) + normal[-1] = normal[0] + + normal[1:] += normal[:-1] + normal = util.unitize(normal) + normal = np.vstack((normal, normal[-1])) + + assert normal.shape == path.shape # try to vectorize some things theta, phi = util.vector_to_spherical(normal).T @@ -334,9 +344,9 @@ def sweep_polygon( assert np.allclose(check, n) # apply transforms to prebaked homogenous coordinates - vertices_3D = np.vstack( - [np.dot(matrix, vertices_tf).T[:, :3] for matrix in transforms] - ) + vertices_3D = np.concatenate( + [np.dot(vertices_tf, matrix.T) for matrix in transforms], axis=0 + )[:, :3] # now construct the faces with one group of boundary faces per slice stride = len(unique) @@ -350,6 +360,13 @@ def sweep_polygon( [faces_slice + offset for offset in np.arange(len(path) - 1) * stride] ) + if closed: + # merge the last slices + faces[-len(faces_slice) :] %= (len(path) - 1) * stride + else: + # todo : apply some caps + pass + # import trimesh # m = trimesh.Trimesh(vertices_3D, faces).show() # from IPython import embed From d39cf5bbd3245d4574587c9e767ec353e6de6345 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 13:45:54 -0400 Subject: [PATCH 15/25] simplify plane logic --- trimesh/creation.py | 60 +++++++++++++++++--------------------- trimesh/interfaces/gmsh.py | 2 +- 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/trimesh/creation.py b/trimesh/creation.py index decb8b66c..a67768b61 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -246,9 +246,6 @@ def sweep_polygon( # check to see if path is closed closed = np.linalg.norm(path[0] - path[-1]) < tol.merge - if closed: - # make sure vertices are exactly identical - path[-1] = path[0] # Extract 2D vertices and triangulation vertices_2D, faces_2D = triangulate_polygon(polygon, **kwargs) @@ -269,48 +266,43 @@ def sweep_polygon( # the indices of vertices_tf boundary = inverse.reshape((-1, 2)) - # now create a matrix for every vertex along our path. - # - plane origin at the vertex - # - plane normal along the induced normal from the vector - # - rotation specified by angle - + # now create the planes each slice will lie on + # consider a path with 3 vertices and therefore 2 vectors: + # - the first plane will be exactly along the first vector + # - the second plane will be the average of the two vectors + # - the last plane will be exactly along the last vector # this will be the plane normal for each slice - normal = util.unitize(path[1:] - path[:-1]) + # and each plane origin will be a vertex on the path + vector = util.unitize(path[1:] - path[:-1]) + # unitize instead of / 2 as they may be degenerate / zero + vector_mean = util.unitize(vector[1:] + vector[:-1]) + # collect the vectors into plane normals + normal = np.concatenate([[vector[0]], vector_mean, [vector[-1]]], axis=0) if closed: - ends = normal[[0, -1]] - normal[0] = ends.mean(axis=0) - normal[-1] = normal[0] - - normal[1:] += normal[:-1] - - normal = util.unitize(normal) - normal = np.vstack((normal, normal[-1])) + # if we have a closed loop average the planes here + normal[0] = normal[[0, -1]].mean(axis=0) + # planes should have one unit normal and one vertex each assert normal.shape == path.shape - # try to vectorize some things + # get the spherical coordinates for the normal vectors theta, phi = util.vector_to_spherical(normal).T + + # collect the trig terms into numpy arrays cos_theta, sin_theta = np.cos(theta), np.sin(theta) cos_phi, sin_phi = np.cos(phi), np.sin(phi) cos_roll, sin_roll = np.cos(angles), np.sin(angles) - if angles is None: - angles = np.zeros(len(path)) - else: - angles = np.asanyarray(angles, dtype=np.float64) - assert angles.shape == (len(path),) + # this was constructed from the following sympy block + # theta, phi, roll = sp.symbols("theta phi roll") + # matrix = ( + # tf.rotation_matrix(roll, [0, 0, 1]) @ + # tf.rotation_matrix(phi, [1, 0, 0]) @ + # tf.rotation_matrix((sp.pi / 2) - theta, [0, 0, 1]) + # ).inv() + # matrix.simplify() - # this was constructed from the following sympy block: - """ - theta, phi, roll = sp.symbols("theta phi roll") - matrix = ( - tf.rotation_matrix(roll, [0, 0, 1]) @ - tf.rotation_matrix(phi, [1, 0, 0]) @ - tf.rotation_matrix((sp.pi / 2) - theta, [0, 0, 1]) - ).inv() - matrix.simplify() - """ # shorthand for stacking zeros = np.zeros(len(theta)) ones = np.ones(len(theta)) @@ -343,7 +335,7 @@ def sweep_polygon( check = tf.transform_points([[0.0, 0.0, 1.0]], matrix, translate=False)[0] assert np.allclose(check, n) - # apply transforms to prebaked homogenous coordinates + # apply transforms to prebaked homogeneous coordinates vertices_3D = np.concatenate( [np.dot(vertices_tf, matrix.T) for matrix in transforms], axis=0 )[:, :3] diff --git a/trimesh/interfaces/gmsh.py b/trimesh/interfaces/gmsh.py index 1e25fefc3..aac0e645b 100644 --- a/trimesh/interfaces/gmsh.py +++ b/trimesh/interfaces/gmsh.py @@ -5,7 +5,7 @@ from ..constants import log -# the old `gmsh-sdk` package is deprectated and +# the old `gmsh-sdk` package is deprecated and # has a different incompatible API! _min_gmsh = (4, 12, 1) From cc90afcff3a423ff0c6eee70619251dcd28e0783 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 14:13:44 -0400 Subject: [PATCH 16/25] move creation data to a json file --- trimesh/creation.py | 204 ++------------------------------ trimesh/resources/creation.json | 1 + 2 files changed, 12 insertions(+), 193 deletions(-) create mode 100644 trimesh/resources/creation.json diff --git a/trimesh/creation.py b/trimesh/creation.py index a67768b61..c3cd5e67c 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -15,6 +15,7 @@ from .base import Trimesh from .constants import log, tol from .geometry import align_vectors, faces_to_edges, plane_transform +from .resources import get_json from .typed import ArrayLike, Dict, Integer, Number, Optional try: @@ -32,6 +33,9 @@ except BaseException as E: _tri_earcut = exceptions.ExceptionWrapper(E) +# get stored values for simple box and icosahedron primitives +_data = get_json("creation.json") + def revolve( linestring: ArrayLike, @@ -642,12 +646,10 @@ def box( geometry : trimesh.Trimesh Mesh of a cuboid """ - # vertices of the cube - vertices = np.array( - [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1], - order="C", - dtype=np.float64, - ).reshape((-1, 3)) + # vertices of the cube from reference + vertices = np.array(_data["box"]["vertices"], order="C", dtype=np.float64) + faces = np.array(_data["box"]["faces"], order="C", dtype=np.int64) + face_normals = np.array(_data["box"]["face_normals"], order="C", dtype=np.float64) # resize cube based on passed extents if bounds is not None: @@ -669,88 +671,6 @@ def box( vertices -= 0.5 extents = np.asarray((1.0, 1.0, 1.0), dtype=np.float64) - # hardcoded face indices - # TODO : make less lol? - faces = [ - 1, - 3, - 0, - 4, - 1, - 0, - 0, - 3, - 2, - 2, - 4, - 0, - 1, - 7, - 3, - 5, - 1, - 4, - 5, - 7, - 1, - 3, - 7, - 2, - 6, - 4, - 2, - 2, - 7, - 6, - 6, - 5, - 4, - 7, - 5, - 6, - ] - faces = np.array(faces, order="C", dtype=np.int64).reshape((-1, 3)) - - face_normals = [ - -1, - 0, - 0, - 0, - -1, - 0, - -1, - 0, - 0, - 0, - 0, - -1, - 0, - 0, - 1, - 0, - -1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - -1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - ] - face_normals = np.asanyarray(face_normals, order="C", dtype=np.float64).reshape(-1, 3) - if "metadata" not in kwargs: kwargs["metadata"] = {} kwargs["metadata"].update({"shape": "box", "extents": extents}) @@ -780,111 +700,9 @@ def icosahedron(**kwargs) -> Trimesh: ico : trimesh.Trimesh Icosahederon centered at the origin. """ - t = (1.0 + 5.0**0.5) / 2.0 - vertices = [ - -1, - t, - 0, - 1, - t, - 0, - -1, - -t, - 0, - 1, - -t, - 0, - 0, - -1, - t, - 0, - 1, - t, - 0, - -1, - -t, - 0, - 1, - -t, - t, - 0, - -1, - t, - 0, - 1, - -t, - 0, - -1, - -t, - 0, - 1, - ] - faces = [ - 0, - 11, - 5, - 0, - 5, - 1, - 0, - 1, - 7, - 0, - 7, - 10, - 0, - 10, - 11, - 1, - 5, - 9, - 5, - 11, - 4, - 11, - 10, - 2, - 10, - 7, - 6, - 7, - 1, - 8, - 3, - 9, - 4, - 3, - 4, - 2, - 3, - 2, - 6, - 3, - 6, - 8, - 3, - 8, - 9, - 4, - 9, - 5, - 2, - 4, - 11, - 6, - 2, - 10, - 8, - 6, - 7, - 9, - 8, - 1, - ] - # scale vertices so each vertex radius is 1.0 - vertices = np.reshape(vertices, (-1, 3)) / np.sqrt(2.0 + t) - faces = np.reshape(faces, (-1, 3)) - + # get stored pre-baked primitive values + vertices = np.array(_data["icosahedron"]["vertices"], dtype=np.float64) + faces = np.array(_data["icosahedron"]["faces"], dtype=np.int64) return Trimesh( vertices=vertices, faces=faces, process=kwargs.pop("process", False), **kwargs ) diff --git a/trimesh/resources/creation.json b/trimesh/resources/creation.json new file mode 100644 index 000000000..91d558015 --- /dev/null +++ b/trimesh/resources/creation.json @@ -0,0 +1 @@ +{"box":{"vertices":[[0.0,0.0,0.0],[0.0,0.0,1.0],[0.0,1.0,0.0],[0.0,1.0,1.0],[1.0,0.0,0.0],[1.0,0.0,1.0],[1.0,1.0,0.0],[1.0,1.0,1.0]],"faces":[[1,3,0],[4,1,0],[0,3,2],[2,4,0],[1,7,3],[5,1,4],[5,7,1],[3,7,2],[6,4,2],[2,7,6],[6,5,4],[7,5,6]],"face_normals":[[-1,0,0],[0,-1,0],[-1,0,0],[0,0,-1],[0,0,1],[0,-1,0],[0,0,1],[0,1,0],[0,0,-1],[0,1,0],[1,0,0],[1,0,0]]},"icosahedron":{"vertices":[[-0.5257311121191336,0.85065080835204,0.0],[0.5257311121191336,0.85065080835204,0.0],[-0.5257311121191336,-0.85065080835204,0.0],[0.5257311121191336,-0.85065080835204,0.0],[0.0,-0.5257311121191336,0.85065080835204],[0.0,0.5257311121191336,0.85065080835204],[0.0,-0.5257311121191336,-0.85065080835204],[0.0,0.5257311121191336,-0.85065080835204],[0.85065080835204,0.0,-0.5257311121191336],[0.85065080835204,0.0,0.5257311121191336],[-0.85065080835204,0.0,-0.5257311121191336],[-0.85065080835204,0.0,0.5257311121191336]],"faces":[[0,11,5],[0,5,1],[0,1,7],[0,7,10],[0,10,11],[1,5,9],[5,11,4],[11,10,2],[10,7,6],[7,1,8],[3,9,4],[3,4,2],[3,2,6],[3,6,8],[3,8,9],[4,9,5],[2,4,11],[6,2,10],[8,6,7],[9,8,1]]}} \ No newline at end of file From 01ec51c341302992a5bbaecfe0c6a1b57a9bda49 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 15:56:34 -0400 Subject: [PATCH 17/25] add cap logic --- tests/test_creation.py | 39 +++++++++++++++++++++ trimesh/creation.py | 78 ++++++++++++++++++++++++++++++------------ 2 files changed, 96 insertions(+), 21 deletions(-) diff --git a/tests/test_creation.py b/tests/test_creation.py index e7f1abd67..6adab44a8 100644 --- a/tests/test_creation.py +++ b/tests/test_creation.py @@ -304,6 +304,45 @@ def test_truncated(self, count=10): assert len(split) == count assert all(s.volume > 0 for s in split) + def test_simple_sweep_closed(self): + # a simple closed path + h1 = 1 + w = 2 + r = 4.4 + square = g.Polygon( + [(-0.01, -h1 / 2), (w, -h1 / 2), (w, +h1 / 2), (-0.01, +h1 / 2)] + ) + circle = g.Point([0, 0]).buffer(1.0) + + # a simple square of side `r` + path = [[0, 0, 0], [r, 0, 0], [r, r, 0], [0, r, 0], [0, 0, 0]] + + a = g.trimesh.creation.sweep_polygon(square, path) + assert a.is_volume + + b = g.trimesh.creation.sweep_polygon(circle, path) + assert b.is_volume + + def test_simple_extrude(self): + # make sure sweep behaves okay on a simple single segment path + # this should be identical to the extrude operation + height = 10.0 + circle = g.Point([0, 0]).buffer(1.0) + + # a simple extrusion + path = [[0, 0, 0], [0, 0, height]] + # will be running asserts inside function + b = g.trimesh.creation.sweep_polygon(circle, path) + + # should be a straight extrude along Z + expected = g.np.append(g.np.reshape(circle.bounds, (2, 2)).ptp(axis=0), height) + assert g.np.allclose(expected, b.extents) + + # should be well constructed + assert b.is_volume + # volume should correspond to expected cylinder area + assert g.np.isclose(b.volume, circle.area * height) + def check_triangulation(v, f, true_area): assert g.trimesh.util.is_shape(v, (-1, 2)) diff --git a/trimesh/creation.py b/trimesh/creation.py index c3cd5e67c..9fac72d2c 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -213,7 +213,8 @@ def sweep_polygon( polygon: "Polygon", path: ArrayLike, angles: Optional[ArrayLike] = None, - **kwargs, + triangulation: Optional[Dict] = None, + kwargs: Optional[Dict] = None, ) -> Trimesh: """ Extrude a 2D polygon into a 3D mesh along a 3D path. @@ -252,7 +253,11 @@ def sweep_polygon( closed = np.linalg.norm(path[0] - path[-1]) < tol.merge # Extract 2D vertices and triangulation - vertices_2D, faces_2D = triangulate_polygon(polygon, **kwargs) + if triangulation is None: + triangulation = {} + + vertices_2D, faces_2D = triangulate_polygon(polygon, **triangulation) + # stack the `(n, 3)` faces into `(3 * n, 2)` edges edges = faces_to_edges(faces_2D) # edges which only occur once are on the boundary of the polygon @@ -270,13 +275,12 @@ def sweep_polygon( # the indices of vertices_tf boundary = inverse.reshape((-1, 2)) - # now create the planes each slice will lie on - # consider a path with 3 vertices and therefore 2 vectors: + # now create the normals for the plane each slice will lie on + # consider the simple path with 3 vertices and therefore 2 vectors: # - the first plane will be exactly along the first vector # - the second plane will be the average of the two vectors # - the last plane will be exactly along the last vector - # this will be the plane normal for each slice - # and each plane origin will be a vertex on the path + # and each plane origin will be the corresponding vertex on the path vector = util.unitize(path[1:] - path[:-1]) # unitize instead of / 2 as they may be degenerate / zero vector_mean = util.unitize(vector[1:] + vector[:-1]) @@ -284,7 +288,7 @@ def sweep_polygon( normal = np.concatenate([[vector[0]], vector_mean, [vector[-1]]], axis=0) if closed: - # if we have a closed loop average the planes here + # if we have a closed loop average the first and last planes normal[0] = normal[[0, -1]].mean(axis=0) # planes should have one unit normal and one vertex each @@ -293,12 +297,13 @@ def sweep_polygon( # get the spherical coordinates for the normal vectors theta, phi = util.vector_to_spherical(normal).T - # collect the trig terms into numpy arrays + # collect the trig values into numpy arrays we can compose into matrices cos_theta, sin_theta = np.cos(theta), np.sin(theta) cos_phi, sin_phi = np.cos(phi), np.sin(phi) cos_roll, sin_roll = np.cos(angles), np.sin(angles) - # this was constructed from the following sympy block + # we want a rotation which will be the identity for a Z+ vector + # this was constructed and unrolled from the following sympy block # theta, phi, roll = sp.symbols("theta phi roll") # matrix = ( # tf.rotation_matrix(roll, [0, 0, 1]) @ @@ -352,23 +357,54 @@ def sweep_polygon( ).reshape((-1, 3)) # offset the slices - faces = np.vstack( - [faces_slice + offset for offset in np.arange(len(path) - 1) * stride] - ) + faces = [faces_slice + offset for offset in np.arange(len(path) - 1) * stride] if closed: - # merge the last slices - faces[-len(faces_slice) :] %= (len(path) - 1) * stride + # the last slice will not be required + max_vertex = (len(path) - 1) * stride + # clip off the duplicated vertices + vertices_3D = vertices_3D[:max_vertex] + # apply the modulus in-place to a conservative subset + faces[-1] %= max_vertex else: - # todo : apply some caps - pass + # we don't want to sloppily add vertices everywhere so we need to + # - find the vertices in `faces_2D` not referenced by boundary + # - stack them onto the first and last planes + # - append faces for both end caps + # these are indices of `vertices_2D` that were not included + if set(unique) != set(faces_2D.ravel()): + raise NotImplementedError("triangulation added vertices: no logic to cap!") + + # hmm map the 2D faces to the order we used + mapped = np.zeros(unique.max() + 2) + mapped[unique] = np.arange(len(unique)) + cap_zero = mapped[faces_2D] + # winding will be along +Z so flip for the bottom cap + faces.append(np.fliplr(cap_zero)) + # offset the end cap + faces.append(cap_zero + stride * (len(path) - 1)) + + if kwargs is None: + kwargs = {} + + if "process" not in kwargs: + # we should be constructing clean meshes here + # so we don't need to run an expensive verex merge + kwargs["process"] = False + + # stack the faces used + faces = np.concatenate(faces, axis=0) + + # generate the mesh from the face data + mesh = Trimesh(vertices=vertices_3D, faces=faces, **kwargs) - # import trimesh - # m = trimesh.Trimesh(vertices_3D, faces).show() - # from IPython import embed - # embed() + if tol.strict: + # we should not have included any unused vertices + assert len(np.unique(faces)) == len(vertices_3D) + # mesh should be a volume + assert mesh.is_volume - return Trimesh(vertices_3D, faces) + return mesh def extrude_triangulation( From ca2a660a1b2cc7358b4c13e604de09a4cadbb2aa Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 16:07:30 -0400 Subject: [PATCH 18/25] explain unconsumed implementation --- trimesh/creation.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/trimesh/creation.py b/trimesh/creation.py index 9fac72d2c..23c05abda 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -213,6 +213,7 @@ def sweep_polygon( polygon: "Polygon", path: ArrayLike, angles: Optional[ArrayLike] = None, + cap: bool = True, triangulation: Optional[Dict] = None, kwargs: Optional[Dict] = None, ) -> Trimesh: @@ -367,17 +368,19 @@ def sweep_polygon( # apply the modulus in-place to a conservative subset faces[-1] %= max_vertex else: - # we don't want to sloppily add vertices everywhere so we need to - # - find the vertices in `faces_2D` not referenced by boundary - # - stack them onto the first and last planes - # - append faces for both end caps - # these are indices of `vertices_2D` that were not included - if set(unique) != set(faces_2D.ravel()): + # these are indices of `vertices_2D` that were not on the boundary + # which can happen for triangulation algorithms that added vertices + # we don't currently support that but you could append the unconsumed + # vertices and then update the mapping below to reflect that + unconsumed = set(unique).difference(faces_2D.ravel()) + if len(unconsumed) > 0: raise NotImplementedError("triangulation added vertices: no logic to cap!") - # hmm map the 2D faces to the order we used - mapped = np.zeros(unique.max() + 2) + # map the 2D faces to the order we used + mapped = np.zeros(unique.max() + 2, dtype=np.int64) mapped[unique] = np.arange(len(unique)) + + # now should correspond to the first vertex block cap_zero = mapped[faces_2D] # winding will be along +Z so flip for the bottom cap faces.append(np.fliplr(cap_zero)) From f74c8b60f94f84257ba0885910084c22fdb91f8a Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 16:13:56 -0400 Subject: [PATCH 19/25] fix test_creation --- trimesh/creation.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/trimesh/creation.py b/trimesh/creation.py index 23c05abda..aec9d330d 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -213,9 +213,9 @@ def sweep_polygon( polygon: "Polygon", path: ArrayLike, angles: Optional[ArrayLike] = None, - cap: bool = True, - triangulation: Optional[Dict] = None, + cap: bool = True, kwargs: Optional[Dict] = None, + **triangulation, ) -> Trimesh: """ Extrude a 2D polygon into a 3D mesh along a 3D path. @@ -254,9 +254,6 @@ def sweep_polygon( closed = np.linalg.norm(path[0] - path[-1]) < tol.merge # Extract 2D vertices and triangulation - if triangulation is None: - triangulation = {} - vertices_2D, faces_2D = triangulate_polygon(polygon, **triangulation) # stack the `(n, 3)` faces into `(3 * n, 2)` edges @@ -290,7 +287,7 @@ def sweep_polygon( if closed: # if we have a closed loop average the first and last planes - normal[0] = normal[[0, -1]].mean(axis=0) + normal[0] = util.unitize(normal[[0, -1]].mean(axis=0)) # planes should have one unit normal and one vertex each assert normal.shape == path.shape From f2385c38544fd0b5891cf49ca5f7dba75cb9fe4a Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Sun, 7 Apr 2024 16:52:17 -0400 Subject: [PATCH 20/25] deprecate interfaces.gmsh --- trimesh/interfaces/gmsh.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/trimesh/interfaces/gmsh.py b/trimesh/interfaces/gmsh.py index aac0e645b..93e54c4ad 100644 --- a/trimesh/interfaces/gmsh.py +++ b/trimesh/interfaces/gmsh.py @@ -1,5 +1,6 @@ import os import tempfile +import warnings import numpy as np @@ -10,6 +11,17 @@ _min_gmsh = (4, 12, 1) +_warning = " ".join( + [ + "`trimesh.interfaces.gmsh` is deprecated and will be removed January 2025!", + "There are *many* gmsh options on PyPi: `scikit-gmsh` `gmsh` `pygmsh` `gmsh-sdk`,", + "users should pick one of those and use it directly. If STEP loading is the only", + "thing needed you may want `pip install cascadio` which uses OpenCASCADE more", + "directly and will immediatly enable STEP as a loadable format in trimesh.", + ] +) + + def load_gmsh(file_name, gmsh_args=None): """ Returns a surface mesh from CAD model in Open Cascade @@ -38,6 +50,8 @@ def load_gmsh(file_name, gmsh_args=None): mesh : trimesh.Trimesh Surface mesh of input geometry """ + warnings.warn(_warning, category=DeprecationWarning, stacklevel=2) + # use STL as an intermediate format # do import here to avoid very occasional segfaults import gmsh @@ -179,6 +193,8 @@ def to_volume(mesh, file_type="msh", max_element=None, mesher_id=1) -> bytes: MSH data, only returned if file_name is None """ + warnings.warn(_warning, category=DeprecationWarning, stacklevel=2) + # do import here to avoid very occasional segfaults import gmsh From a61f9dfee1722c5fe27e07f38aaa9a9b62aa0e3d Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Mon, 8 Apr 2024 16:02:54 -0400 Subject: [PATCH 21/25] add boolean options again --- tests/test_creation.py | 39 ------------- tests/test_sweep.py | 130 +++++++++++++++++++++++++++++++++++++++++ trimesh/creation.py | 32 +++++++--- 3 files changed, 153 insertions(+), 48 deletions(-) create mode 100644 tests/test_sweep.py diff --git a/tests/test_creation.py b/tests/test_creation.py index 6adab44a8..e7f1abd67 100644 --- a/tests/test_creation.py +++ b/tests/test_creation.py @@ -304,45 +304,6 @@ def test_truncated(self, count=10): assert len(split) == count assert all(s.volume > 0 for s in split) - def test_simple_sweep_closed(self): - # a simple closed path - h1 = 1 - w = 2 - r = 4.4 - square = g.Polygon( - [(-0.01, -h1 / 2), (w, -h1 / 2), (w, +h1 / 2), (-0.01, +h1 / 2)] - ) - circle = g.Point([0, 0]).buffer(1.0) - - # a simple square of side `r` - path = [[0, 0, 0], [r, 0, 0], [r, r, 0], [0, r, 0], [0, 0, 0]] - - a = g.trimesh.creation.sweep_polygon(square, path) - assert a.is_volume - - b = g.trimesh.creation.sweep_polygon(circle, path) - assert b.is_volume - - def test_simple_extrude(self): - # make sure sweep behaves okay on a simple single segment path - # this should be identical to the extrude operation - height = 10.0 - circle = g.Point([0, 0]).buffer(1.0) - - # a simple extrusion - path = [[0, 0, 0], [0, 0, height]] - # will be running asserts inside function - b = g.trimesh.creation.sweep_polygon(circle, path) - - # should be a straight extrude along Z - expected = g.np.append(g.np.reshape(circle.bounds, (2, 2)).ptp(axis=0), height) - assert g.np.allclose(expected, b.extents) - - # should be well constructed - assert b.is_volume - # volume should correspond to expected cylinder area - assert g.np.isclose(b.volume, circle.area * height) - def check_triangulation(v, f, true_area): assert g.trimesh.util.is_shape(v, (-1, 2)) diff --git a/tests/test_sweep.py b/tests/test_sweep.py new file mode 100644 index 000000000..402f8a2d6 --- /dev/null +++ b/tests/test_sweep.py @@ -0,0 +1,130 @@ +import numpy as np +from pyinstrument import Profiler +from shapely.geometry import Point, Polygon + +import trimesh +from trimesh.creation import sweep_polygon + +trimesh.tol.strict = True + + +def arc_2d(final_angle, d=1, start_angle=0, splits=20): + xs = np.linspace(start_angle, final_angle, splits) + return np.stack((d / 2 * np.cos(xs), d / 2 * np.sin(xs)), axis=1) + + +def test_simple_closed(h1=1, w=2, r=4.4): + # a simple closed path + square = Polygon([(-0.01, -h1 / 2), (w, -h1 / 2), (w, +h1 / 2), (-0.01, +h1 / 2)]) + circle = Point([0, 0]).buffer(1.0) + + # a simple square of side `r` + path = [[0, 0, 0], [r, 0, 0], [r, r, 0], [0, r, 0], [0, 0, 0]] + + a = sweep_polygon(square, path) + assert a.is_volume + + aa = sweep_polygon(square, path, connect=False) + assert aa.is_volume + + # should have the same bounds but no longer a volume + aaa = sweep_polygon(square, path, connect=False, cap=False) + assert np.allclose(aa.bounds, aaa.bounds) + assert not aaa.is_volume + + b = sweep_polygon(circle, path) + assert b.is_volume + + +def test_simple_extrude(height=10): + # make sure sweep behaves okay on a simple single segment path + # this should be identical to the extrude operation + circle = Point([0, 0]).buffer(1.0) + + # a simple extrusion + path = [[0, 0, 0], [0, 0, height]] + # will be running asserts inside function + b = sweep_polygon(circle, path) + + # should be a straight extrude along Z + expected = np.append(np.reshape(circle.bounds, (2, 2)).ptp(axis=0), height) + assert np.allclose(expected, b.extents) + + # should be well constructed + assert b.is_volume + # volume should correspond to expected cylinder area + assert np.isclose(b.volume, circle.area * height) + + +def test_simple_open(): + circle = Point([0, 0]).buffer(1.0) + theta = np.linspace(0.0, np.pi, 100) + path = np.column_stack([np.cos(theta), np.sin(theta), np.zeros(len(theta))]) * 10 + + a = sweep_polygon(circle, path) + assert a.is_volume + + +def test_spline_3D(): + circle = Point([0, 0]).buffer(1.0) + # make a 3D noodle using spline smoothing + path = trimesh.path.simplify.resample_spline( + [[0, 0, 0], [4, 4, 0], [5, 5, 0], [10, 0, 10], [0, 20, 0]], smooth=0.25, count=100 + ) + + a = sweep_polygon(circle, path) + assert a.is_volume + assert a.body_count == 1 + + +def test_screw(): + h = 200 + d = 8 + h1 = 1 + w = 2 + d = d - w + h2 = h1 + + lead = 2 + splits_per_turn = 4 * 20 + polygon = np.array([(-0.01, -h1 / 2), (w, -h2 / 2), (w, +h2 / 2), (-0.01, +h1 / 2)]) + h_ = h + h1 + n = int(np.ceil(splits_per_turn * h_ / lead)) + turns = n / splits_per_turn + xys = arc_2d(2 * np.pi * turns, d, splits=n) + zs = np.linspace(0, h_, n)[:, None] + spin_path = np.concatenate((xys, zs), axis=1) + + with Profiler() as P: + x = sweep_polygon(Polygon(polygon), spin_path) + P.print() + + assert x.is_volume + # should have produced a result corresponding to the input dimensions + assert np.allclose(x.extents[:2], d + w * 2, atol=0.01) + assert np.allclose(x.extents[2], h + h1 * 2, atol=0.01) + + # check without capping: should be the same size just without caps + o = sweep_polygon(Polygon(polygon), spin_path, cap=False, connect=False) + assert np.allclose(x.bounds, o.bounds) + assert not o.is_volume + + # try spinning along an angle + sweep_polygon( + Polygon(polygon), spin_path, angles=np.linspace(0.0, np.pi / 2, len(spin_path)) + ) + + circle = Point([0, 0]).buffer(1.0) + theta = np.linspace(0.0, np.pi, 100) + path = np.column_stack([np.cos(theta), np.sin(theta), np.zeros(len(theta))]) * 10 + + a = sweep_polygon(circle, path) + assert a.is_volume + + +if __name__ == "__main__": + test_simple_closed() + test_simple_extrude() + test_simple_open() + test_screw() + test_spline_3D() diff --git a/trimesh/creation.py b/trimesh/creation.py index aec9d330d..d8cb99984 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -214,6 +214,7 @@ def sweep_polygon( path: ArrayLike, angles: Optional[ArrayLike] = None, cap: bool = True, + connect: bool = True, kwargs: Optional[Dict] = None, **triangulation, ) -> Trimesh: @@ -229,8 +230,15 @@ def sweep_polygon( angles : (n,) float Optional rotation angle relative to prior vertex at each vertex. - **kwargs : dict - Passed to `triangulate_polygon` + cap + If an open path is passed apply a cap to both ends. + connect + If a closed path is passed connect the sweep into + a single watertight mesh. + kwargs : dict + Passed to the mesh constructor. + **triangulation + Passed to `triangulate_polygon`, i.e. `engine='triangle'` Returns ------- @@ -250,9 +258,8 @@ def sweep_polygon( # set all angles to zero angles = np.zeros(len(path), dtype=np.float64) - # check to see if path is closed + # check to see if path is closed i.e. first and last vertex are the same closed = np.linalg.norm(path[0] - path[-1]) < tol.merge - # Extract 2D vertices and triangulation vertices_2D, faces_2D = triangulate_polygon(polygon, **triangulation) @@ -285,7 +292,7 @@ def sweep_polygon( # collect the vectors into plane normals normal = np.concatenate([[vector[0]], vector_mean, [vector[-1]]], axis=0) - if closed: + if closed and connect: # if we have a closed loop average the first and last planes normal[0] = util.unitize(normal[[0, -1]].mean(axis=0)) @@ -357,14 +364,15 @@ def sweep_polygon( # offset the slices faces = [faces_slice + offset for offset in np.arange(len(path) - 1) * stride] - if closed: + # connect only applies to closed paths + if closed and connect: # the last slice will not be required max_vertex = (len(path) - 1) * stride # clip off the duplicated vertices vertices_3D = vertices_3D[:max_vertex] # apply the modulus in-place to a conservative subset faces[-1] %= max_vertex - else: + elif cap: # these are indices of `vertices_2D` that were not on the boundary # which can happen for triangulation algorithms that added vertices # we don't currently support that but you could append the unconsumed @@ -401,8 +409,14 @@ def sweep_polygon( if tol.strict: # we should not have included any unused vertices assert len(np.unique(faces)) == len(vertices_3D) - # mesh should be a volume - assert mesh.is_volume + + if cap: + # mesh should always be a volume if cap is true + assert mesh.is_volume + + if closed and connect: + assert mesh.is_volume + assert mesh.body_count == 1 return mesh From 9084e1200991b632e32dd8e056a1e2322e41a7f8 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Mon, 8 Apr 2024 16:12:02 -0400 Subject: [PATCH 22/25] fix test_step --- tests/test_step.py | 1 + trimesh/creation.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/test_step.py b/tests/test_step.py index 33ed248b1..f60a92e09 100644 --- a/tests/test_step.py +++ b/tests/test_step.py @@ -18,6 +18,7 @@ def test_basic(self): b = g.get_mesh("featuretype.STEP") assert len(b.geometry) == 1 m = next(iter(b.geometry.values())) + m.merge_vertices(merge_tex=True, merge_norm=True) assert m.is_watertight diff --git a/trimesh/creation.py b/trimesh/creation.py index d8cb99984..0ed4a7930 100644 --- a/trimesh/creation.py +++ b/trimesh/creation.py @@ -214,12 +214,18 @@ def sweep_polygon( path: ArrayLike, angles: Optional[ArrayLike] = None, cap: bool = True, - connect: bool = True, + connect: bool = True, kwargs: Optional[Dict] = None, **triangulation, ) -> Trimesh: """ - Extrude a 2D polygon into a 3D mesh along a 3D path. + Extrude a 2D polygon into a 3D mesh along a 3D path. Note that this + does *not* handle the case where there is very sharp curvature leading + the polygon to intersect the plane of a previous slice, and does *not* + scale the polygon along the induced normal to result in a constant cross section. + + You may want to resample your path with a B-spline, i.e: + `trimesh.path.simplify.resample_spline(path, smooth=0.2, count=100)` Parameters ---------- From 9d6521fc103e94333c13a331154e1f6f0eacbc35 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Mon, 8 Apr 2024 20:33:05 -0400 Subject: [PATCH 23/25] add numpy 2 migration rule --- pyproject.toml | 3 ++- trimesh/visual/texture.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 03b781607..c56d2820b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -134,7 +134,8 @@ select = [ "UP", # upgrade "W", # style warnings "YTT", # sys.version - "ISC002" + "ISC002", + "NPY201" ] ignore = [ diff --git a/trimesh/visual/texture.py b/trimesh/visual/texture.py index 0db1ed54e..e2be87fc3 100644 --- a/trimesh/visual/texture.py +++ b/trimesh/visual/texture.py @@ -273,7 +273,7 @@ def unmerge_faces(faces, *args, **kwargs): # a column diff and sort but this seemed easier and is fast enough # turn default attribute value of -1 to nan before median computation # and use nanmedian to compute the median ignoring the nan values - masks_nan = np.where(masks != -1, masks, np.NaN) + masks_nan = np.where(masks != -1, masks, np.nan) result.append(np.nanmedian(masks_nan, axis=0).astype(np.int64)) return result From f38fc29fa90a8a4258ed7f9ba6984efb29ea16a0 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Tue, 9 Apr 2024 13:37:39 -0400 Subject: [PATCH 24/25] restore file_name option --- trimesh/interfaces/gmsh.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/trimesh/interfaces/gmsh.py b/trimesh/interfaces/gmsh.py index 93e54c4ad..a3df156a5 100644 --- a/trimesh/interfaces/gmsh.py +++ b/trimesh/interfaces/gmsh.py @@ -5,6 +5,7 @@ import numpy as np from ..constants import log +from ..typed import Integer, Number, Optional # the old `gmsh-sdk` package is deprecated and # has a different incompatible API! @@ -152,7 +153,13 @@ def load_gmsh(file_name, gmsh_args=None): return kwargs -def to_volume(mesh, file_type="msh", max_element=None, mesher_id=1) -> bytes: +def to_volume( + mesh, + file_name: Optional[str] = None, + file_type: Optional[str] = None, + max_element: Optional[Number] = None, + mesher_id: Integer = 1, +) -> bytes: """ Convert a surface mesh to a 3D volume mesh generated by gmsh. @@ -213,7 +220,13 @@ def to_volume(mesh, file_type="msh", max_element=None, mesher_id=1) -> bytes: if max_element is None: max_element = np.sqrt(np.mean(mesh.area_faces)) - file_type = file_type.lower().strip(".") + if file_name is not None: + file_type = file_name.split(".")[-1].lower() + elif file_type is not None: + file_type = file_type.lower().strip(".") + else: + file_type = "msh" + if file_type not in ["bdf", "msh", "inp", "diff", "mesh"]: raise ValueError( "Only Nastran (`bdf`), Gmsh (`msh`), Abaqus (`inp`), " @@ -259,4 +272,9 @@ def to_volume(mesh, file_type="msh", max_element=None, mesher_id=1) -> bytes: # close up shop gmsh.finalize() + # write the data + if file_name is not None: + with open(os.path.abspath(os.path.expanduser(file_name)), "wb") as f: + f.write(data) + return data From 73bed1f683201c1b99ccd770f2138b9fcc9df010 Mon Sep 17 00:00:00 2001 From: Michael Dawson-Haggerty Date: Tue, 9 Apr 2024 13:38:26 -0400 Subject: [PATCH 25/25] minor bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c56d2820b..52db3f63a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = ["setuptools >= 61.0", "wheel"] [project] name = "trimesh" requires-python = ">=3.7" -version = "4.2.5" +version = "4.3.0" authors = [{name = "Michael Dawson-Haggerty", email = "mikedh@kerfed.com"}] license = {file = "LICENSE.md"} description = "Import, export, process, analyze and view triangular meshes."