Sfoglia il codice sorgente

feat: initial commit

lstzcy 1 mese fa
commit
e2cd9c3543

+ 3 - 0
.idea/.gitignore

@@ -0,0 +1,3 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml

+ 1 - 0
.idea/.name

@@ -0,0 +1 @@
+Drawing_Match

+ 8 - 0
.idea/Drawing_Match.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 7 - 0
.idea/misc.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Black">
+    <option name="sdkName" value="3denv" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="3denv" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/Drawing_Match.iml" filepath="$PROJECT_DIR$/.idea/Drawing_Match.iml" />
+    </modules>
+  </component>
+</project>

BIN
__pycache__/glWidget_simple.cpython-39.pyc


BIN
__pycache__/handle_simple.cpython-39.pyc


+ 329 - 0
glWidget_simple.py

@@ -0,0 +1,329 @@
+import sys
+import numpy as np
+from PyQt5.QtWidgets import QApplication, QOpenGLWidget, QVBoxLayout, QWidget
+from PyQt5.QtCore import Qt, pyqtSignal
+from OpenGL.GL import *
+from OpenGL.GLU import *
+from OpenGL.GLUT import glutBitmapCharacter, glutStrokeCharacter, GLUT_BITMAP_HELVETICA_18, GLUT_BITMAP_TIMES_ROMAN_24  # GLUT_BITMAP_HELVETICA_18是运行时调用,标红正常
+
+
+class Simple3DWidget(QOpenGLWidget):
+    pointPicked = pyqtSignal(float, float, float)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        self.vertices = np.array([])  # 顶点数据
+        self.colors = np.array([])  # 颜色数据
+        self.triangles = np.array([], dtype=np.int32)  # 三角面数据 ← 新增
+        self.normals = np.array([])  # 法线数据 ← 新增
+
+        self.rotation = [0.0, 0.0]  # 旋转角度 [俯仰, 偏航]
+        self.zoom = -5.0  # 视距(负值表示拉远)
+        self.pan = [0.0, 0.0]  # 平移偏移 [x, y]
+        self.last_mouse_pos = None  # 鼠标位置
+        self.setMouseTracking(True)  # 启用鼠标跟踪
+        self.display_mode = 'points'  # 默认显示模式: 点云
+        self.axes_display_mode = False
+        self.axes_world_display_mode = True
+
+        # 🔧 模型变换
+        self.model_rotation = [0.0, 0.0]  # 模型的 [俯仰, 偏航]
+        self.model_pan = [0.0, 0.0]  # 模型平移 (x, y)
+        self.model_scale = 1.0  # 模型缩放
+
+        # 🎯 视角(世界)变换
+        self.view_rotation = [0.0, 0.0]  # 模型的 [俯仰, 偏航]
+        self.view_pan = [0.0, 0.0]  # 视点平移 (X, Y),用于 Ctrl+右键
+        self.view_distance = 8.0  # 视点到目标的距离
+
+
+
+    def initializeGL(self):
+        """初始化 OpenGL 状态"""
+        print("✅ 3D OpenGL 初始化")
+        glEnable(GL_DEPTH_TEST)
+        glEnable(GL_COLOR_MATERIAL)
+        glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
+        glEnable(GL_LIGHT0)
+        glLightfv(GL_LIGHT0, GL_POSITION, (1.0, 1.0, 1.0, 0.0))  # 平行光
+        glClearColor(0.1, 0.1, 0.1, 1.0)
+
+    def resizeGL(self, width, height):
+        """窗口大小改变时调用"""
+        print(f"✅ 调整大小: {width}x{height}")
+        if height == 0:
+            height = 1
+        glViewport(0, 0, width, height)
+        self.update()  # 重新绘制
+
+    def paintGL(self):
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+        glEnable(GL_DEPTH_TEST)
+
+        glMatrixMode(GL_PROJECTION)
+        glLoadIdentity()
+        gluPerspective(45, self.width() / max(self.height(), 1), 0.1, 100.0)
+
+        glMatrixMode(GL_MODELVIEW)
+        glLoadIdentity()
+
+        # ✅ 使用 gluLookAt 构建轨道摄像机
+        # 视角参数
+        yaw = self.view_rotation[1]  # 偏航角(左右)
+        pitch = self.view_rotation[0]  # 俯仰角(上下)
+        distance = self.view_distance
+
+        # 1. 计算摄像机位置(绕原点轨道)
+        radius = distance
+        cam_x = radius * np.cos(np.radians(yaw)) * np.cos(np.radians(pitch))
+        cam_y = radius * np.sin(np.radians(pitch))
+        cam_z = radius * np.sin(np.radians(yaw)) * np.cos(np.radians(pitch))
+
+        # 2. 目标点 = 世界原点 (0,0,0)
+        target_x, target_y, target_z = 0.0, 0.0, 0.0
+
+        # 3. 上方向(防止翻滚)
+        up_x, up_y, up_z = 0.0, 1.0, 0.0
+
+        # ✅ 设置摄像机(绕原点轨道旋转)
+        gluLookAt(
+            cam_x, cam_y, cam_z,  # 摄像机位置
+            target_x, target_y, target_z,  # 看向目标(世界原点)
+            up_x, up_y, up_z  # 上方向
+        )
+
+        # ✅ 应用视点平移(Ctrl+右键平移)
+        glTranslatef(self.view_pan[0], self.view_pan[1], 0)
+
+        # ✅ 绘制世界坐标系(在原点)
+        if self.axes_world_display_mode:
+            self.drawWorldAxes()
+
+        # ✅ 模型变换
+        glPushMatrix()
+        glTranslatef(self.model_pan[0], self.model_pan[1], 0)
+        glRotatef(self.model_rotation[0], 1, 0, 0)
+        glRotatef(self.model_rotation[1], 0, 1, 0)
+        glScalef(self.model_scale, self.model_scale, self.model_scale)
+
+        if self.axes_display_mode:
+            self.drawModelAxes()
+
+        self._draw_model()
+
+        glPopMatrix()
+
+    def _draw_model(self):
+        """私有方法:绘制模型"""
+        if self.display_mode == 'points' and len(self.vertices) > 0:
+            glPointSize(8.0)
+            glBegin(GL_POINTS)
+            for i, v in enumerate(self.vertices):
+                if i < len(self.colors):
+                    glColor3f(*self.colors[i])
+                glVertex3f(v[0], v[1], v[2])
+            glEnd()
+
+        elif self.display_mode == 'surface' and len(self.triangles) > 0:
+            glEnable(GL_LIGHTING)
+            glEnable(GL_LIGHT0)
+            glBegin(GL_TRIANGLES)
+            for tri in self.triangles:
+                for idx in tri:
+                    if len(self.normals) > idx:
+                        n = self.normals[idx]
+                        if not np.any(np.isnan(n)) and not np.any(np.isinf(n)):
+                            glNormal3f(*n)
+                    if len(self.colors) > idx:
+                        glColor3f(*self.colors[idx])
+                    glVertex3f(*self.vertices[idx])
+            glEnd()
+            glDisable(GL_LIGHTING)
+
+
+    def renderText(self, x, y, z, text):
+        """
+        在指定的三维坐标位置渲染文本。
+
+        :param x: X轴坐标
+        :param y: Y轴坐标
+        :param z: Z轴坐标
+        :param text: 要渲染的文本内容
+        """
+        glRasterPos3f(x, y, z)  # 设置文本位置
+        for ch in text:
+            glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, ord(ch))  # 渲染每个字符
+
+    def drawWorldAxes(self):
+        """绘制固定的世界坐标系(左下角)"""
+        glPushMatrix()
+        # 移动到左下角
+        glTranslatef(-4.0, -4.0, -5.0)
+
+        glLineWidth(2.0)
+        glBegin(GL_LINES)
+        # X (红)
+        glColor3f(1, 0, 0)
+        glVertex3f(0, 0, 0);
+        glVertex3f(1000, 0, 0)
+        # Y (绿)
+        glColor3f(0, 1, 0)
+        glVertex3f(0, 0, 0);
+        glVertex3f(0, 1000, 0)
+        # Z (蓝)
+        glColor3f(0, 0, 1)
+        glVertex3f(0, 0, 0);
+        glVertex3f(0, 0, 1000)
+        glEnd()
+
+        # 绘制文本标签
+        glColor3f(1.0, 0.0, 0.0)  # 设置颜色为红色
+        self.renderText(1.5, 0, 0, 'X')  # X轴标签
+
+        glColor3f(0.0, 1.0, 0.0)  # 设置颜色为绿色
+        self.renderText(0, 1.5, 0, 'Y')  # Y轴标签
+
+        glColor3f(0.0, 0.0, 1.0)  # 设置颜色为蓝色
+        self.renderText(0, 0, 1.5, 'Z')  # Z轴标签
+
+        glPopMatrix()
+
+    def drawModelAxes(self):
+        """绘制随模型移动的坐标系"""
+        glPushMatrix()
+        glLineWidth(2.5)
+        glBegin(GL_LINES)
+        # X
+        glColor3f(1, 0, 0)
+        glVertex3f(0, 0, 0);
+        glVertex3f(2, 0, 0)
+        # Y
+        glColor3f(0, 1, 0)
+        glVertex3f(0, 0, 0);
+        glVertex3f(0, 2, 0)
+        # Z
+        glColor3f(0, 0, 1)
+        glVertex3f(0, 0, 0);
+        glVertex3f(0, 0, 2)
+        glEnd()
+
+        # 绘制文本标签
+        glColor3f(1.0, 0.0, 0.0)  # 设置颜色为红色
+        self.renderText(1.5, 0, 0, 'X')  # X轴标签
+
+        glColor3f(0.0, 1.0, 0.0)  # 设置颜色为绿色
+        self.renderText(0, 1.5, 0, 'Y')  # Y轴标签
+
+        glColor3f(0.0, 0.0, 1.0)  # 设置颜色为蓝色
+        self.renderText(0, 0, 1.5, 'Z')  # Z轴标签
+
+        glPopMatrix()
+
+        # if hasattr(self, 'model_scale'):
+        #     glScalef(self.model_scale, self.model_scale, self.model_scale)
+
+    # def paintGLAxes(self):
+    #     """绘制坐标轴"""
+    #     glLineWidth(3.0)
+    #     glBegin(GL_LINES)
+    #     # X轴 - 红色
+    #     glColor3f(1.0, 0.0, 0.0)
+    #     glVertex3f(0.0, 0.0, 0.0)
+    #     glVertex3f(100.0, 0.0, 0.0)
+    #
+    #     # Y轴 - 绿色
+    #     glColor3f(0.0, 1.0, 0.0)
+    #     glVertex3f(0.0, 0.0, 0.0)
+    #     glVertex3f(0.0, 100.0, 0.0)
+    #
+    #     # Z轴 - 蓝色
+    #     glColor3f(0.0, 0.0, 1.0)
+    #     glVertex3f(0.0, 0.0, 0.0)
+    #     glVertex3f(0.0, 0.0, 100.0)
+    #     glEnd()
+    #
+    #     # 绘制文本标签
+    #     glColor3f(1.0, 0.0, 0.0)  # 设置颜色为红色
+    #     self.renderText(1.5, 0, 0, 'X')  # X轴标签
+    #
+    #     glColor3f(0.0, 1.0, 0.0)  # 设置颜色为绿色
+    #     self.renderText(0, 1.5, 0, 'Y')  # Y轴标签
+    #
+    #     glColor3f(0.0, 0.0, 1.0)  # 设置颜色为蓝色
+    #     self.renderText(0, 0, 1.5, 'Z')  # Z轴标签
+
+    def set_data(self, vertices, colors, triangles=None, normals=None):
+        """设置 3D 数据(支持 mesh)"""
+        self.vertices = np.array(vertices, dtype=np.float32)
+        self.colors = np.array(colors, dtype=np.float32)
+
+        if triangles is not None:
+            self.triangles = np.array(triangles, dtype=np.int32)
+        else:
+            self.triangles = np.array([])
+
+        if normals is not None:
+            self.normals = np.array(normals, dtype=np.float32)
+        else:
+            self.normals = np.array([])
+
+        print(f"✅ 设置数据: {len(self.vertices)} 个顶点, {len(self.triangles)} 个三角面")
+        self.update()
+
+    def mousePressEvent(self, event):
+        self.last_mouse_pos = event.pos()
+
+    def mouseMoveEvent(self, event):
+        if self.last_mouse_pos is None:
+            return
+
+        dx = event.x() - self.last_mouse_pos.x()
+        dy = event.y() - self.last_mouse_pos.y()
+
+        is_ctrl = event.modifiers() & Qt.ControlModifier
+
+        if event.buttons() & Qt.LeftButton:
+            if is_ctrl:
+                # Ctrl + 左键:旋转世界(视角)
+                self.view_rotation[0] += dy * 0.5  # 俯仰
+                self.view_rotation[1] += dx * 0.5  # 偏航
+                self.view_rotation[0] = max(-89.0, min(89.0, self.view_rotation[0]))
+            else:
+                # 左键:旋转模型
+                self.model_rotation[0] += dy * 0.5
+                self.model_rotation[1] += dx * 0.5
+
+        elif event.buttons() & Qt.RightButton:
+            if is_ctrl:
+                # Ctrl + 右键:平移世界(视点平移)
+                self.view_pan[0] += dx * 0.01
+                self.view_pan[1] -= dy * 0.01
+            else:
+                # 右键:平移模型
+                self.model_pan[0] += dx * 0.01
+                self.model_pan[1] -= dy * 0.01
+
+        self.last_mouse_pos = event.pos()
+        self.update()
+
+    def wheelEvent(self, event):
+        delta = event.angleDelta().y()
+        self.view_distance -= delta * 0.05
+        self.view_distance = max(1.0, min(50.0, self.view_distance))
+        self.update()
+
+    def toggle_display_mode(self):
+        """切换显示模式:点云 <-> 表面"""
+        if self.display_mode == 'points':
+            self.display_mode = 'surface'
+        else:
+            self.display_mode = 'points'
+        self.update()  # 切换模式后重新绘制
+
+    def toggle_axes_display_mode(self):
+        "切换坐标系显示模式"
+        if self.axes_display_mode == False:
+            self.axes_display_mode = True
+        else:
+            self.axes_display_mode = False
+        self.update()

+ 116 - 0
handle_simple.py

@@ -0,0 +1,116 @@
+from PyQt5.QtCore import QObject, pyqtSlot
+import open3d as o3d
+import numpy as np
+import os
+from OCC.Core.TopoDS import TopoDS_Face
+
+
+class Datahandle(QObject):
+    def __init__(self):
+        super().__init__()
+        self.qml_item = None
+        self.vertices, self.colors = self.load_data()  # 预加载数据
+        self.colors = np.array([])
+        self.triangles = np.array([])  # 新增:三角面索引
+        self.normals = np.array([])  # 新增:法线
+
+    def load_data(self):
+        """
+        加载 3D 数据(这里用随机点云代替实际文件)
+        返回: vertices, colors (numpy arrays)
+        """
+        pcd = o3d.geometry.PointCloud()
+        pcd.points = o3d.utility.Vector3dVector(np.random.rand(5000, 3))
+        pcd.colors = o3d.utility.Vector3dVector(np.random.rand(5000, 3))
+        vertices = np.asarray(pcd.points)
+        colors = np.asarray(pcd.colors)
+        return vertices, colors
+
+    @pyqtSlot('QVariant')
+    def set3DItem(self, item):
+        """接收 QML 中的 QML3DItem 实例"""
+        self.qml_item = item
+        if self.qml_item:
+            self.qml_item.set_data(self.vertices, self.colors)
+            print("✅ 数据已传递给 QML3DItem")
+
+    @pyqtSlot(float, float, float)
+    def onPointPicked(self, x, y, z):
+        """接收从 QML3DItem 发出的拾取信号"""
+        print(f"✅ 拾取到点: ({x:.3f}, {y:.3f}, {z:.3f})")
+        # 这里可以扩展:保存坐标、发送到其他模块等
+
+class Dataload(QObject):
+    def __init__(self):
+        super().__init__()
+        self.qml_item = None
+        self.vertices = np.array([])
+        self.colors = np.array([])
+        self.triangles = np.array([])  # 新增:三角面索引
+        self.normals = np.array([])  # 新增:法线
+
+    def load_data_from_file(self, file_path: str):
+        """
+        使用 numpy-stl 自动识别 STL 格式(兼容旧版本)
+        """
+        print(f"📁 正在加载: {file_path}")
+
+        if not os.path.exists(file_path):
+            print(f"❌ 文件不存在: {file_path}")
+            return np.array([]), np.array([]), np.array([]), np.array([])
+
+        ext = os.path.splitext(file_path)[1].lower()
+        if ext != '.stl':
+            print(f"❌ 不支持的格式: {ext}")
+            return np.array([]), np.array([]), np.array([]), np.array([])
+
+        try:
+            from stl import mesh as stl_mesh
+
+            # ✅ 自动识别格式(旧版本也支持)
+            stl_data = stl_mesh.Mesh.from_file(file_path)
+
+            # 获取三角面 (N, 3, 3)
+            vectors = stl_data.vectors.astype(np.float32)
+            print(f"✅ 加载 {len(vectors)} 个三角面")
+
+            # 展平顶点
+            vertices = vectors.reshape(-1, 3)
+            print(f"原始顶点数: {len(vertices)}")
+
+            # 三角面索引
+            num_triangles = len(vectors)
+            triangles = np.arange(num_triangles * 3, dtype=np.int32).reshape(-1, 3)
+            print(f"三角面数量: {num_triangles}")
+
+            # 法线(每个三角面对应一个法线)
+            normals = stl_data.normals.astype(np.float32)
+            vertex_normals = np.repeat(normals, 3, axis=0)  # 每个顶点复制一次
+            print(f"法线数量: {len(vertex_normals)}")
+
+            # 颜色:使用法线生成
+            colors = (vertex_normals + 1.0) / 2.0
+            if np.any(np.isnan(colors)) or np.any(np.isinf(colors)):
+                colors = np.ones_like(vertex_normals) * 0.8
+
+            # --- 归一化 ---
+            if len(vertices) > 0:
+                min_coords = np.min(vertices, axis=0)
+                max_coords = np.max(vertices, axis=0)
+                center = (min_coords + max_coords) / 2.0
+                scale = np.max(max_coords - min_coords)
+                if scale > 0:
+                    vertices = (vertices - center) / scale * 2.0
+
+                    z_range = np.max(vertices[:, 2]) - np.min(vertices[:, 2])
+                    if z_range < 0.1:
+                        z_center = (np.min(vertices[:, 2]) + np.max(vertices[:, 2])) / 2.0
+                        vertices[:, 2] = (vertices[:, 2] - z_center) * (0.2 / z_range) + z_center
+                        print(f"调整Z轴范围: {z_range:.6f} -> 0.2")
+
+            print(f"✅ 加载成功: {file_path}")
+            return vertices, colors, triangles, vertex_normals
+
+        except Exception as e:
+            print(f"❌ 加载失败: {e}")
+            return np.array([]), np.array([]), np.array([]), np.array([])

+ 153 - 0
main_simple.py

@@ -0,0 +1,153 @@
+# main_simple.py - 使用QOpenGLWidget的新主程序
+
+import sys
+import os
+from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QFileDialog
+from PyQt5.QtCore import Qt
+from OpenGL.GLUT import glutInit
+from glWidget_simple import Simple3DWidget
+from handle_simple import Dataload
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super().__init__()
+        self.setWindowTitle('3D模型查看器')
+        self.setGeometry(100, 100, 1200, 800)
+        
+        # 创建中央部件
+        central_widget = QWidget()
+        self.setCentralWidget(central_widget)
+        
+        # 创建布局
+        layout = QHBoxLayout()
+        central_widget.setLayout(layout)
+
+        # 创建3D渲染器
+        self.gl_widget = Simple3DWidget()
+
+        # 创建控制面板
+        control_panel = QWidget()
+        control_panel.setFixedWidth(200)
+        control_layout = QVBoxLayout()
+        control_panel.setLayout(control_layout)
+
+        # 创建按钮
+        self.open_button = QPushButton("打开STL文件")
+        self.switch_button = QPushButton("切换显示模式")
+        self.axes_button = QPushButton("坐标系显示")
+        self.open_button.clicked.connect(self.open_file)
+        self.switch_button.clicked.connect(self.gl_widget.toggle_display_mode)
+        self.axes_button.clicked.connect(self.gl_widget.toggle_axes_display_mode)
+
+        control_layout.addWidget(self.open_button)
+        control_layout.addWidget(self.switch_button)
+        control_layout.addWidget(self.axes_button)
+
+        # 添加一些空间
+        control_layout.addStretch()
+
+        
+        # 添加到主布局
+        layout.addWidget(control_panel)
+        layout.addWidget(self.gl_widget)
+        
+        # 连接信号
+        self.gl_widget.pointPicked.connect(self.on_point_picked)
+        
+        # 创建数据加载器
+        self.dataload = Dataload()
+
+    def open_file(self):
+        """打开文件对话框,选择 3D 模型文件并根据类型调用对应加载函数"""
+        # 设置文件过滤器
+        filter = (
+            "3D Model Files (*.stp *.step *.stl);;"
+            "STL Files (*.stl);;"
+            "All Files (*)"
+        )
+
+        file_path, _ = QFileDialog.getOpenFileName(
+            self,
+            "选择 3D 模型文件",
+            "",  # 初始路径,可改为上次打开的目录
+            filter
+        )
+
+        if not file_path:
+            print("用户取消选择")
+            return
+
+        if not os.path.exists(file_path):
+            print(f"❌ 文件不存在: {file_path}")
+            return
+
+        # 获取文件扩展名(转小写,便于判断)
+        ext = os.path.splitext(file_path)[1].lower()
+
+        print(f"选中的文件: {file_path}")
+        print(f"文件扩展名: {ext}")
+
+        # 根据扩展名分发到不同加载函数
+        if ext in ['.stp', '.step']:
+            self.load_step_file(file_path)  # 加载 STEP 文件
+        elif ext == '.stl':
+            self.load_stl_file(file_path)  # 加载 STL 文件
+        else:
+            print(f"❌ 不支持的文件格式: {ext}")
+            # 可选:弹出警告框
+            from PyQt5.QtWidgets import QMessageBox
+            QMessageBox.warning(self, "不支持的格式", f"无法加载文件类型: {ext}")
+    
+    def load_stl_file(self, file_path):
+        """加载STL文件"""
+        print(f"📁 正在加载: {file_path}")
+        
+        # 使用Dataload类加载数据
+        vertices, colors,triangles, normals = self.dataload.load_data_from_file(file_path)
+        
+        if len(vertices) == 0:
+            print("❌ 加载失败")
+            return
+        
+        # 设置数据到渲染器
+        self.gl_widget.set_data(vertices, colors,triangles, normals)
+        print("✅ 数据已设置到渲染器")
+
+    def load_step_file(self, file_path):
+        """加载STL文件"""
+        print(f"📁 正在加载: {file_path}")
+
+        # 使用Dataload类加载数据
+        vertices, colors, triangles, normals = self.dataload.load_step_file(file_path)
+
+        if len(vertices) == 0:
+            print("❌ 加载失败")
+            return
+
+        # 设置数据到渲染器
+        self.gl_widget.set_data(vertices, colors, triangles, normals)
+        print("✅ 数据已设置到渲染器")
+    
+    def on_point_picked(self, x, y, z):
+        """点拾取回调"""
+        print(f"✅ 拾取到点: ({x:.3f}, {y:.3f}, {z:.3f})")
+
+def main():
+    print("当前工作目录:", os.getcwd())
+    app = QApplication(sys.argv)
+
+    # 初始化 GLUT(必须在创建任何 OpenGL 上下文前调用)
+    glutInit(sys.argv)
+
+
+    window = MainWindow()
+    window.show()
+    
+    print("✅ 3D模型查看器启动成功")
+    print("点击'打开STL文件'按钮来加载模型")
+    
+    return app.exec_()
+
+if __name__ == "__main__":
+    main() 

BIN
models/yixing10.STL


BIN
models/测试(1).STL


+ 780 - 0
models/测试.STP

@@ -0,0 +1,780 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION (( 'STEP AP203' ),
+    '1' );
+FILE_NAME ('²âÊÔ.STP',
+    '2025-08-07T05:47:30',
+    ( '' ),
+    ( '' ),
+    'SwSTEP 2.0',
+    'SolidWorks 2024',
+    '' );
+FILE_SCHEMA (( 'CONFIG_CONTROL_DESIGN' ));
+ENDSEC;
+
+DATA;
+#1 = DATE_AND_TIME ( #285, #717 ) ;
+#2 = PERSON_AND_ORGANIZATION_ROLE ( 'design_supplier' ) ;
+#3 = ORIENTED_EDGE ( 'NONE', *, *, #200, .T. ) ;
+#4 = VERTEX_POINT ( 'NONE', #213 ) ;
+#5 = CIRCLE ( 'NONE', #399, 1235.000000000000682 ) ;
+#6 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ;
+#7 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#8 = EDGE_LOOP ( 'NONE', ( #181, #262, #303, #49 ) ) ;
+#9 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#10 = VERTEX_POINT ( 'NONE', #687 ) ;
+#11 = ORIENTED_EDGE ( 'NONE', *, *, #637, .F. ) ;
+#12 = ORIENTED_EDGE ( 'NONE', *, *, #45, .F. ) ;
+#13 = AXIS2_PLACEMENT_3D ( 'NONE', #548, #238, #231 ) ;
+#14 = AXIS2_PLACEMENT_3D ( 'NONE', #627, #335, #278 ) ;
+#15 = ADVANCED_FACE ( 'NONE', ( #207 ), #539, .F. ) ;
+#16 = FACE_OUTER_BOUND ( 'NONE', #550, .T. ) ;
+#17 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#18 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #653, #406, ( #722 ) ) ;
+#19 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#20 = ORIENTED_EDGE ( 'NONE', *, *, #48, .F. ) ;
+#21 = ORIENTED_EDGE ( 'NONE', *, *, #239, .T. ) ;
+#22 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#23 = CYLINDRICAL_SURFACE ( 'NONE', #407, 600.0000000000000000 ) ;
+#24 = EDGE_CURVE ( 'NONE', #243, #350, #610, .T. ) ;
+#25 = LINE ( 'NONE', #382, #703 ) ;
+#26 = EDGE_CURVE ( 'NONE', #602, #685, #438, .T. ) ;
+#27 = AXIS2_PLACEMENT_3D ( 'NONE', #726, #186, #555 ) ;
+#28 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#29 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#30 = DIRECTION ( 'NONE',  ( 1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#31 = ORIENTED_EDGE ( 'NONE', *, *, #201, .F. ) ;
+#32 = CARTESIAN_POINT ( 'NONE',  ( 2600.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#33 = FACE_OUTER_BOUND ( 'NONE', #364, .T. ) ;
+#34 = AXIS2_PLACEMENT_3D ( 'NONE', #574, #112, #757 ) ;
+#35 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#36 = AXIS2_PLACEMENT_3D ( 'NONE', #506, #746, #635 ) ;
+#37 = ORIENTED_EDGE ( 'NONE', *, *, #657, .T. ) ;
+#38 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#39 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#40 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 6.980486755139914804E-14, 570.0000000000002274 ) ) ;
+#41 = FACE_OUTER_BOUND ( 'NONE', #716, .T. ) ;
+#42 = PLANE ( 'NONE',  #34 ) ;
+#43 = AXIS2_PLACEMENT_3D ( 'NONE', #691, #44, #579 ) ;
+#44 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#45 = EDGE_CURVE ( 'NONE', #10, #591, #662, .T. ) ;
+#46 = ORIENTED_EDGE ( 'NONE', *, *, #343, .T. ) ;
+#47 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#48 = EDGE_CURVE ( 'NONE', #340, #133, #649, .T. ) ;
+#49 = ORIENTED_EDGE ( 'NONE', *, *, #518, .F. ) ;
+#50 = DIRECTION ( 'NONE',  ( 0.7071067811865449082, 8.659560562354964906E-17, 0.7071067811865502373 ) ) ;
+#51 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#52 = DATE_AND_TIME ( #531, #525 ) ;
+#53 = CIRCLE ( 'NONE', #643, 275.0000000000003979 ) ;
+#54 = APPROVAL_ROLE ( '' ) ;
+#55 = CYLINDRICAL_SURFACE ( 'NONE', #255, 275.0000000000002274 ) ;
+#56 = ORIENTED_EDGE ( 'NONE', *, *, #155, .T. ) ;
+#57 = LOCAL_TIME ( 13, 47, 30.00000000000000000, #412 ) ;
+#58 = CALENDAR_DATE ( 2025, 7, 8 ) ;
+#59 = VECTOR ( 'NONE', #470, 1000.000000000000000 ) ;
+#60 = ORIENTED_EDGE ( 'NONE', *, *, #658, .T. ) ;
+#61 = ORIENTED_EDGE ( 'NONE', *, *, #508, .F. ) ;
+#62 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 275.0000000000002274 ) ) ;
+#63 = VERTEX_POINT ( 'NONE', #449 ) ;
+#64 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #587, #467, ( #722 ) ) ;
+#65 = ORIENTED_EDGE ( 'NONE', *, *, #76, .T. ) ;
+#66 = AXIS2_PLACEMENT_3D ( 'NONE', #701, #273, #584 ) ;
+#67 = VECTOR ( 'NONE', #50, 1000.000000000000114 ) ;
+#68 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#69 = VERTEX_POINT ( 'NONE', #189 ) ;
+#70 = ADVANCED_FACE ( 'NONE', ( #453 ), #196, .F. ) ;
+#71 = DESIGN_CONTEXT ( 'detailed design', #100, 'design' ) ;
+#72 = CARTESIAN_POINT ( 'NONE',  ( 29.99999999999947775, 0.000000000000000000, 600.0000000000000000 ) ) ;
+#73 = PRODUCT ( '\X2\6d4b8bd5\X0\', '\X2\6d4b8bd5\X0\', '', ( #245 ) ) ;
+#74 = EDGE_LOOP ( 'NONE', ( #305, #542 ) ) ;
+#75 = AXIS2_PLACEMENT_3D ( 'NONE', #83, #679, #203 ) ;
+#76 = EDGE_CURVE ( 'NONE', #63, #4, #673, .T. ) ;
+#77 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#78 = AXIS2_PLACEMENT_3D ( 'NONE', #455, #264, #391 ) ;
+#79 = FACE_OUTER_BOUND ( 'NONE', #302, .T. ) ;
+#80 = EDGE_LOOP ( 'NONE', ( #581, #450, #616, #421 ) ) ;
+#81 = ADVANCED_FACE ( 'NONE', ( #728 ), #622, .T. ) ;
+#82 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#83 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#84 = FACE_OUTER_BOUND ( 'NONE', #601, .T. ) ;
+#85 = VERTEX_POINT ( 'NONE', #142 ) ;
+#86 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#87 = LINE ( 'NONE', #209, #428 ) ;
+#88 = ORIENTED_EDGE ( 'NONE', *, *, #648, .T. ) ;
+#89 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#90 = CIRCLE ( 'NONE', #13, 275.0000000000000000 ) ;
+#91 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#92 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 600.0000000000000000 ) ) ;
+#93 = AXIS2_PLACEMENT_3D ( 'NONE', #38, #89, #216 ) ;
+#94 = LINE ( 'NONE', #739, #329 ) ;
+#95 = ORIENTED_EDGE ( 'NONE', *, *, #556, .F. ) ;
+#96 = EDGE_CURVE ( 'NONE', #270, #758, #128, .T. ) ;
+#97 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#98 = ORIENTED_EDGE ( 'NONE', *, *, #322, .F. ) ;
+#99 = CIRCLE ( 'NONE', #725, 399.9999999999998863 ) ;
+#100 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
+#101 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#102 = AXIS2_PLACEMENT_3D ( 'NONE', #310, #552, #19 ) ;
+#103 = VERTEX_POINT ( 'NONE', #502 ) ;
+#104 = LINE ( 'NONE', #159, #137 ) ;
+#105 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#106 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#107 = VECTOR ( 'NONE', #309, 1000.000000000000000 ) ;
+#108 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #585, #346, ( #417 ) ) ;
+#109 = ORIENTED_EDGE ( 'NONE', *, *, #241, .T. ) ;
+#110 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#111 = ORIENTED_EDGE ( 'NONE', *, *, #633, .F. ) ;
+#112 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#113 = ADVANCED_FACE ( 'NONE', ( #33, #741 ), #379, .F. ) ;
+#114 = ADVANCED_FACE ( 'NONE', ( #567 ), #747, .F. ) ;
+#115 = AXIS2_PLACEMENT_3D ( 'NONE', #120, #590, #68 ) ;
+#116 = AXIS2_PLACEMENT_3D ( 'NONE', #521, #271, #378 ) ;
+#117 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#118 = CARTESIAN_POINT ( 'NONE',  ( 29.99999999999947775, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#119 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ;
+#120 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#121 = ORIENTED_EDGE ( 'NONE', *, *, #484, .T. ) ;
+#122 = ORIENTED_EDGE ( 'NONE', *, *, #96, .T. ) ;
+#123 = ORGANIZATION ( '未', '未', '' ) ;
+#124 = EDGE_CURVE ( 'NONE', #485, #243, #573, .T. ) ;
+#125 = VECTOR ( 'NONE', #491, 1000.000000000000000 ) ;
+#126 = ORIENTED_EDGE ( 'NONE', *, *, #26, .F. ) ;
+#127 = EDGE_LOOP ( 'NONE', ( #656, #321, #293, #639 ) ) ;
+#128 = CIRCLE ( 'NONE', #501, 1235.000000000000682 ) ;
+#129 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#130 = ORIENTED_EDGE ( 'NONE', *, *, #241, .F. ) ;
+#131 = AXIS2_PLACEMENT_3D ( 'NONE', #110, #338, #105 ) ;
+#132 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#133 = VERTEX_POINT ( 'NONE', #751 ) ;
+#134 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, -1205.000000000001364 ) ) ;
+#135 = LINE ( 'NONE', #492, #604 ) ;
+#136 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#137 = VECTOR ( 'NONE', #333, 1000.000000000000000 ) ;
+#138 = LINE ( 'NONE', #380, #688 ) ;
+#139 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 0.000000000000000000, 80.00000000000001421 ) ) ;
+#140 = ORIENTED_EDGE ( 'NONE', *, *, #277, .F. ) ;
+#141 = ORIENTED_EDGE ( 'NONE', *, *, #459, .F. ) ;
+#142 = CARTESIAN_POINT ( 'NONE',  ( 2299.999999999997272, 9.797174393178823212E-14, -600.0000000000000000 ) ) ;
+#143 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#144 = CARTESIAN_POINT ( 'NONE',  ( 29.99999999999947775, 7.347880794884118987E-14, -600.0000000000000000 ) ) ;
+#145 = FACE_OUTER_BOUND ( 'NONE', #418, .T. ) ;
+#146 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#147 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 0.000000000000000000, 1235.000000000000682 ) ) ;
+#148 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#149 = VERTEX_POINT ( 'NONE', #199 ) ;
+#150 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#151 = AXIS2_PLACEMENT_3D ( 'NONE', #551, #17, #143 ) ;
+#152 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#153 = CARTESIAN_POINT ( 'NONE',  ( 140.0000000000001990, 9.797174393178827630E-15, -80.00000000000001421 ) ) ;
+#154 = ORIENTED_EDGE ( 'NONE', *, *, #200, .F. ) ;
+#155 = EDGE_CURVE ( 'NONE', #414, #474, #423, .T. ) ;
+#156 = FACE_OUTER_BOUND ( 'NONE', #401, .T. ) ;
+#157 = AXIS2_PLACEMENT_3D ( 'NONE', #680, #35, #674 ) ;
+#158 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#159 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 9.797174393178827630E-15, -80.00000000000001421 ) ) ;
+#160 = EDGE_CURVE ( 'NONE', #69, #485, #529, .T. ) ;
+#161 = ORIENTED_EDGE ( 'NONE', *, *, #349, .F. ) ;
+#162 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#163 = LINE ( 'NONE', #328, #172 ) ;
+#164 = ADVANCED_FACE ( 'NONE', ( #755 ), #308, .F. ) ;
+#165 = EDGE_LOOP ( 'NONE', ( #154, #439, #596, #122 ) ) ;
+#166 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#167 = TOROIDAL_SURFACE ( 'NONE', #600, 675.0000000000003411, 399.9999999999999432 ) ;
+#168 = CIRCLE ( 'NONE', #157, 1205.000000000000000 ) ;
+#169 = DIRECTION ( 'NONE',  ( 0.000000000000000000, -1.224646799147353207E-16, 1.000000000000000000 ) ) ;
+#170 = AXIS2_PLACEMENT_3D ( 'NONE', #106, #148, #204 ) ;
+#171 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#172 = VECTOR ( 'NONE', #211, 1000.000000000000000 ) ;
+#173 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #100 ) ;
+#174 = ORIENTED_EDGE ( 'NONE', *, *, #603, .T. ) ;
+#175 = EDGE_LOOP ( 'NONE', ( #279, #475, #126, #61 ) ) ;
+#176 = ADVANCED_FACE ( 'NONE', ( #458 ), #549, .T. ) ;
+#177 = ADVANCED_FACE ( 'NONE', ( #156 ), #410, .T. ) ;
+#178 = APPROVAL_DATE_TIME ( #476, #700 ) ;
+#179 = VERTEX_POINT ( 'NONE', #696 ) ;
+#180 = EDGE_CURVE ( 'NONE', #758, #270, #5, .T. ) ;
+#181 = ORIENTED_EDGE ( 'NONE', *, *, #368, .F. ) ;
+#182 = ORIENTED_EDGE ( 'NONE', *, *, #180, .T. ) ;
+#183 = ORIENTED_EDGE ( 'NONE', *, *, #459, .T. ) ;
+#184 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE',  #722 ) ;
+#185 = CONICAL_SURFACE ( 'NONE', #742, 1205.000000000001364, 0.7853981633974335130 ) ;
+#186 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#187 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#188 = LOCAL_TIME ( 13, 47, 30.00000000000000000, #471 ) ;
+#189 = CARTESIAN_POINT ( 'NONE',  ( 140.0000000000001990, 0.000000000000000000, 80.00000000000001421 ) ) ;
+#190 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#191 = CONICAL_SURFACE ( 'NONE', #638, 1235.000000000000682, 0.7853981633974410625 ) ;
+#192 = CARTESIAN_POINT ( 'NONE',  ( 2600.000000000000000, 8.266365894244638909E-14, -675.0000000000003411 ) ) ;
+#193 = EDGE_LOOP ( 'NONE', ( #564, #675 ) ) ;
+#194 = ORIENTED_EDGE ( 'NONE', *, *, #398, .F. ) ;
+#195 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#196 = TOROIDAL_SURFACE ( 'NONE', #464, 1000.000000000000000, 399.9999999999999432 ) ;
+#197 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -570.0000000000002274 ) ) ;
+#198 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 1.494069094959772342E-13, 1205.000000000001364 ) ) ;
+#199 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 1.494069094959771584E-13, -1205.000000000000000 ) ) ;
+#200 = EDGE_CURVE ( 'NONE', #685, #758, #512, .T. ) ;
+#201 = EDGE_CURVE ( 'NONE', #602, #270, #163, .T. ) ;
+#202 = CARTESIAN_POINT ( 'NONE',  ( 2300.000000000000455, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#203 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#204 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#205 = ORIENTED_EDGE ( 'NONE', *, *, #556, .T. ) ;
+#206 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 0.000000000000000000, -89.99999999999985789 ) ) ;
+#207 = FACE_OUTER_BOUND ( 'NONE', #80, .T. ) ;
+#208 = EDGE_CURVE ( 'NONE', #583, #234, #275, .T. ) ;
+#209 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 1.475699392972562322E-13, 1205.000000000001364 ) ) ;
+#210 = EDGE_LOOP ( 'NONE', ( #559, #608, #375, #183 ) ) ;
+#211 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#212 = AXIS2_PLACEMENT_3D ( 'NONE', #672, #737, #562 ) ;
+#213 = CARTESIAN_POINT ( 'NONE',  ( 2599.999999999996817, 0.000000000000000000, 275.0000000000003979 ) ) ;
+#214 = ADVANCED_FACE ( 'NONE', ( #571 ), #566, .T. ) ;
+#215 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 1.224646799147353249E-13, -1000.000000000000000 ) ) ;
+#216 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#217 = ORIENTED_EDGE ( 'NONE', *, *, #358, .T. ) ;
+#218 = CARTESIAN_POINT ( 'NONE',  ( 2300.000000000000455, 0.000000000000000000, 1000.000000000000000 ) ) ;
+#219 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#220 = EDGE_CURVE ( 'NONE', #243, #251, #104, .T. ) ;
+#221 = ORIENTED_EDGE ( 'NONE', *, *, #603, .F. ) ;
+#222 = DIRECTION ( 'NONE',  ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ;
+#223 = CIRCLE ( 'NONE', #660, 275.0000000000000000 ) ;
+#224 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#225 = AXIS2_PLACEMENT_3D ( 'NONE', #152, #385, #330 ) ;
+#226 = ADVANCED_FACE ( 'NONE', ( #145 ), #167, .T. ) ;
+#227 = APPROVAL_DATE_TIME ( #762, #339 ) ;
+#228 = CIRCLE ( 'NONE', #530, 399.9999999999998863 ) ;
+#229 = AXIS2_PLACEMENT_3D ( 'NONE', #47, #158, #634 ) ;
+#230 = DATE_TIME_ROLE ( 'classification_date' ) ;
+#231 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#232 = APPROVAL ( #592, '未' ) ;
+#233 = ORIENTED_EDGE ( 'NONE', *, *, #96, .F. ) ;
+#234 = VERTEX_POINT ( 'NONE', #206 ) ;
+#235 = ADVANCED_FACE ( 'NONE', ( #41 ), #646, .F. ) ;
+#236 = AXIS2_PLACEMENT_3D ( 'NONE', #39, #253, #554 ) ;
+#237 = APPROVAL_DATE_TIME ( #52, #232 ) ;
+#238 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#239 = EDGE_CURVE ( 'NONE', #85, #481, #362, .T. ) ;
+#240 = ORIENTED_EDGE ( 'NONE', *, *, #345, .T. ) ;
+#241 = EDGE_CURVE ( 'NONE', #474, #414, #507, .T. ) ;
+#242 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#243 = VERTEX_POINT ( 'NONE', #615 ) ;
+#244 = ORIENTED_EDGE ( 'NONE', *, *, #711, .F. ) ;
+#245 = MECHANICAL_CONTEXT ( 'NONE', #400, 'mechanical' ) ;
+#246 = ORIENTED_EDGE ( 'NONE', *, *, #24, .T. ) ;
+#247 = FACE_OUTER_BOUND ( 'NONE', #655, .T. ) ;
+#248 = CYLINDRICAL_SURFACE ( 'NONE', #102, 80.00000000000001421 ) ;
+#249 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000001421, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#250 = DIRECTION ( 'NONE',  ( -0.7071067811865526798, 8.659560562354868763E-17, -0.7071067811865422437 ) ) ;
+#251 = VERTEX_POINT ( 'NONE', #315 ) ;
+#252 = ORIENTED_EDGE ( 'NONE', *, *, #676, .T. ) ;
+#253 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#254 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#255 = AXIS2_PLACEMENT_3D ( 'NONE', #132, #595, #654 ) ;
+#256 = DIRECTION ( 'NONE',  ( -0.7071067811865416886, 0.000000000000000000, 0.7071067811865534569 ) ) ;
+#257 = ADVANCED_FACE ( 'NONE', ( #84 ), #268, .F. ) ;
+#258 = ORIENTED_EDGE ( 'NONE', *, *, #657, .F. ) ;
+#259 = CLOSED_SHELL ( 'NONE', ( #257, #15, #740, #177, #577, #488, #70, #644, #176, #732, #427, #263, #286, #114, #226, #463, #214, #113, #164, #81, #479, #693, #352, #705, #235, #411 ) ) ;
+#260 = DIRECTION ( 'NONE',  ( -0.7071067811865526798, 0.000000000000000000, 0.7071067811865422437 ) ) ;
+#261 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#262 = ORIENTED_EDGE ( 'NONE', *, *, #544, .F. ) ;
+#263 = ADVANCED_FACE ( 'NONE', ( #79 ), #248, .F. ) ;
+#264 = DIRECTION ( 'NONE',  ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#265 = AXIS2_PLACEMENT_3D ( 'NONE', #394, #640, #390 ) ;
+#266 = EDGE_CURVE ( 'NONE', #149, #103, #168, .T. ) ;
+#267 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#268 = CONICAL_SURFACE ( 'NONE', #287, 89.99999999999985789, 0.7853981633974469467 ) ;
+#269 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 1.512438796946982109E-13, -1235.000000000000682 ) ) ;
+#270 = VERTEX_POINT ( 'NONE', #447 ) ;
+#271 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#272 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 9.797174393178827630E-15, -80.00000000000001421 ) ) ;
+#273 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#274 = CARTESIAN_POINT ( 'NONE',  ( 2600.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#275 = CIRCLE ( 'NONE', #708, 89.99999999999985789 ) ;
+#276 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#277 = EDGE_CURVE ( 'NONE', #85, #292, #684, .T. ) ;
+#278 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#279 = ORIENTED_EDGE ( 'NONE', *, *, #266, .F. ) ;
+#280 = FACE_OUTER_BOUND ( 'NONE', #127, .T. ) ;
+#281 = APPROVAL_PERSON_ORGANIZATION ( #51, #232, #54 ) ;
+#282 = ORIENTED_EDGE ( 'NONE', *, *, #711, .T. ) ;
+#283 = CARTESIAN_POINT ( 'NONE',  ( 2300.000000000000455, 1.224646799147353249E-13, -1000.000000000000000 ) ) ;
+#284 = AXIS2_PLACEMENT_3D ( 'NONE', #534, #304, #242 ) ;
+#285 = CALENDAR_DATE ( 2025, 7, 8 ) ;
+#286 = ADVANCED_FACE ( 'NONE', ( #504, #731 ), #510, .F. ) ;
+#287 = AXIS2_PLACEMENT_3D ( 'NONE', #500, #30, #557 ) ;
+#288 = SECURITY_CLASSIFICATION_LEVEL ( 'unclassified' ) ;
+#289 = EDGE_CURVE ( 'NONE', #350, #179, #25, .T. ) ;
+#290 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#291 = APPROVAL_PERSON_ORGANIZATION ( #538, #700, #533 ) ;
+#292 = VERTEX_POINT ( 'NONE', #144 ) ;
+#293 = ORIENTED_EDGE ( 'NONE', *, *, #494, .T. ) ;
+#294 = CONICAL_SURFACE ( 'NONE', #396, 570.0000000000002274, 0.7853981633974520538 ) ;
+#295 = PERSON_AND_ORGANIZATION_ROLE ( 'classification_officer' ) ;
+#296 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
+#297 = ORIENTED_EDGE ( 'NONE', *, *, #398, .T. ) ;
+#298 = EDGE_CURVE ( 'NONE', #149, #685, #748, .T. ) ;
+#299 = AXIS2_PLACEMENT_3D ( 'NONE', #441, #628, #317 ) ;
+#300 = APPLICATION_PROTOCOL_DEFINITION ( 'international standard', 'config_control_design', 1994, #400 ) ;
+#301 = AXIS2_PLACEMENT_3D ( 'NONE', #578, #101, #461 ) ;
+#302 = EDGE_LOOP ( 'NONE', ( #749, #240, #719, #217 ) ) ;
+#303 = ORIENTED_EDGE ( 'NONE', *, *, #524, .T. ) ;
+#304 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#305 = ORIENTED_EDGE ( 'NONE', *, *, #480, .T. ) ;
+#306 = FACE_OUTER_BOUND ( 'NONE', #456, .T. ) ;
+#307 = VERTEX_POINT ( 'NONE', #744 ) ;
+#308 = TOROIDAL_SURFACE ( 'NONE', #116, 1000.000000000000000, 399.9999999999999432 ) ;
+#309 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#310 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#311 = ORIENTED_EDGE ( 'NONE', *, *, #322, .T. ) ;
+#312 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#313 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#314 = EDGE_CURVE ( 'NONE', #69, #350, #135, .T. ) ;
+#315 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 1.102182119232621540E-14, -90.00000000000029843 ) ) ;
+#316 = EDGE_LOOP ( 'NONE', ( #282, #374 ) ) ;
+#317 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#318 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#319 = CIRCLE ( 'NONE', #115, 1235.000000000000682 ) ;
+#320 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#321 = ORIENTED_EDGE ( 'NONE', *, *, #345, .F. ) ;
+#322 = EDGE_CURVE ( 'NONE', #63, #414, #532, .T. ) ;
+#323 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#324 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#325 = AXIS2_PLACEMENT_3D ( 'NONE', #678, #195, #736 ) ;
+#326 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 275.0000000000000000, 0.000000000000000000 ) ) ;
+#327 = ORIENTED_EDGE ( 'NONE', *, *, #155, .F. ) ;
+#328 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1235.000000000000682 ) ) ;
+#329 = VECTOR ( 'NONE', #437, 1000.000000000000000 ) ;
+#330 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#331 = CIRCLE ( 'NONE', #265, 399.9999999999999432 ) ;
+#332 = FACE_OUTER_BOUND ( 'NONE', #193, .T. ) ;
+#333 = DIRECTION ( 'NONE',  ( -0.7071067811865416886, 8.659560562355005581E-17, -0.7071067811865534569 ) ) ;
+#334 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#335 = DIRECTION ( 'NONE',  ( 1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#336 = VECTOR ( 'NONE', #681, 1000.000000000000000 ) ;
+#337 = ORIENTED_EDGE ( 'NONE', *, *, #381, .F. ) ;
+#338 = DIRECTION ( 'NONE',  ( 1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#339 = APPROVAL ( #709, '未' ) ;
+#340 = VERTEX_POINT ( 'NONE', #198 ) ;
+#341 = CARTESIAN_POINT ( 'NONE',  ( 2299.999999999997272, 0.000000000000000000, 600.0000000000000000 ) ) ;
+#342 = SHAPE_DEFINITION_REPRESENTATION ( #184, #395 ) ;
+#343 = EDGE_CURVE ( 'NONE', #63, #307, #94, .T. ) ;
+#344 = APPROVAL_ROLE ( '' ) ;
+#345 = EDGE_CURVE ( 'NONE', #485, #69, #568, .T. ) ;
+#346 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
+#347 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#348 = CALENDAR_DATE ( 2025, 7, 8 ) ;
+#349 = EDGE_CURVE ( 'NONE', #340, #270, #87, .T. ) ;
+#350 = VERTEX_POINT ( 'NONE', #139 ) ;
+#351 = ORIENTED_EDGE ( 'NONE', *, *, #124, .T. ) ;
+#352 = ADVANCED_FACE ( 'NONE', ( #371 ), #185, .T. ) ;
+#353 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#354 = EDGE_LOOP ( 'NONE', ( #258, #460 ) ) ;
+#355 = ORIENTED_EDGE ( 'NONE', *, *, #239, .F. ) ;
+#356 = AXIS2_PLACEMENT_3D ( 'NONE', #445, #369, #22 ) ;
+#357 = AXIS2_PLACEMENT_3D ( 'NONE', #162, #515, #630 ) ;
+#358 = EDGE_CURVE ( 'NONE', #350, #243, #572, .T. ) ;
+#359 = EDGE_LOOP ( 'NONE', ( #720, #311, #130, #194 ) ) ;
+#360 = AXIS2_PLACEMENT_3D ( 'NONE', #192, #377, #670 ) ;
+#361 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #607, 'distance_accuracy_value', 'NONE');
+#362 = CIRCLE ( 'NONE', #36, 600.0000000000000000 ) ;
+#363 = LINE ( 'NONE', #599, #59 ) ;
+#364 = EDGE_LOOP ( 'NONE', ( #641, #735 ) ) ;
+#365 = CC_DESIGN_APPROVAL ( #339, ( #722 ) ) ;
+#366 = FACE_OUTER_BOUND ( 'NONE', #175, .T. ) ;
+#367 = DIRECTION ( 'NONE',  ( 1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#368 = EDGE_CURVE ( 'NONE', #10, #663, #692, .T. ) ;
+#369 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#370 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 0.000000000000000000, -89.99999999999985789 ) ) ;
+#371 = FACE_OUTER_BOUND ( 'NONE', #733, .T. ) ;
+#372 = ORIENTED_EDGE ( 'NONE', *, *, #160, .F. ) ;
+#373 = EDGE_CURVE ( 'NONE', #481, #85, #487, .T. ) ;
+#374 = ORIENTED_EDGE ( 'NONE', *, *, #266, .T. ) ;
+#375 = ORIENTED_EDGE ( 'NONE', *, *, #381, .T. ) ;
+#376 = LINE ( 'NONE', #370, #125 ) ;
+#377 = DIRECTION ( 'NONE',  ( -0.000000000000000000, 1.000000000000000000, 1.224646799147353207E-16 ) ) ;
+#378 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#379 = PLANE ( 'NONE',  #452 ) ;
+#380 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -570.0000000000002274 ) ) ;
+#381 = EDGE_CURVE ( 'NONE', #481, #519, #99, .T. ) ;
+#382 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 0.000000000000000000, 80.00000000000001421 ) ) ;
+#383 = EDGE_LOOP ( 'NONE', ( #606, #511 ) ) ;
+#384 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#385 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#386 = FACE_OUTER_BOUND ( 'NONE', #697, .T. ) ;
+#387 = EDGE_LOOP ( 'NONE', ( #724, #46, #88, #597 ) ) ;
+#388 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#389 = AXIS2_PLACEMENT_3D ( 'NONE', #430, #645, #761 ) ;
+#390 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#391 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#392 = LOCAL_TIME ( 13, 47, 30.00000000000000000, #119 ) ;
+#393 = EDGE_LOOP ( 'NONE', ( #140, #21, #174, #495 ) ) ;
+#394 = CARTESIAN_POINT ( 'NONE',  ( 2600.000000000000000, 0.000000000000000000, 675.0000000000003411 ) ) ;
+#395 = ADVANCED_BREP_SHAPE_REPRESENTATION ( '\X2\6d4b8bd5\X0\', ( #431, #433 ), #483 ) ;
+#396 = AXIS2_PLACEMENT_3D ( 'NONE', #347, #666, #477 ) ;
+#397 = CC_DESIGN_DATE_AND_TIME_ASSIGNMENT ( #1, #230, ( #636 ) ) ;
+#398 = EDGE_CURVE ( 'NONE', #4, #474, #331, .T. ) ;
+#399 = AXIS2_PLACEMENT_3D ( 'NONE', #686, #632, #150 ) ;
+#400 = APPLICATION_CONTEXT ( 'configuration controlled 3d designs of mechanical parts and assemblies' ) ;
+#401 = EDGE_LOOP ( 'NONE', ( #20, #713, #522, #95 ) ) ;
+#402 = FACE_BOUND ( 'NONE', #383, .T. ) ;
+#403 = CONICAL_SURFACE ( 'NONE', #131, 89.99999999999985789, 0.7853981633974469467 ) ;
+#404 = DIRECTION ( 'NONE',  ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ;
+#405 = EDGE_CURVE ( 'NONE', #179, #251, #588, .T. ) ;
+#406 = PERSON_AND_ORGANIZATION_ROLE ( 'creator' ) ;
+#407 = AXIS2_PLACEMENT_3D ( 'NONE', #190, #683, #669 ) ;
+#408 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#409 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#410 = CONICAL_SURFACE ( 'NONE', #517, 1205.000000000001364, 0.7853981633974335130 ) ;
+#411 = ADVANCED_FACE ( 'NONE', ( #280 ), #403, .F. ) ;
+#412 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ;
+#413 = ORIENTED_EDGE ( 'NONE', *, *, #368, .T. ) ;
+#414 = VERTEX_POINT ( 'NONE', #457 ) ;
+#415 = EDGE_CURVE ( 'NONE', #4, #63, #53, .T. ) ;
+#416 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#417 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ä»', '', #73, .NOT_KNOWN. ) ;
+#418 = EDGE_LOOP ( 'NONE', ( #98, #65, #297, #327 ) ) ;
+#419 = AXIS2_PLACEMENT_3D ( 'NONE', #503, #729, #254 ) ;
+#420 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
+#421 = ORIENTED_EDGE ( 'NONE', *, *, #289, .F. ) ;
+#422 = ORIENTED_EDGE ( 'NONE', *, *, #494, .F. ) ;
+#423 = CIRCLE ( 'NONE', #93, 675.0000000000031832 ) ;
+#424 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#425 = AXIS2_PLACEMENT_3D ( 'NONE', #698, #454, #166 ) ;
+#426 = EDGE_LOOP ( 'NONE', ( #109, #56 ) ) ;
+#427 = ADVANCED_FACE ( 'NONE', ( #695 ), #520, .F. ) ;
+#428 = VECTOR ( 'NONE', #727, 1000.000000000000000 ) ;
+#429 = LINE ( 'NONE', #147, #528 ) ;
+#430 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#431 = MANIFOLD_SOLID_BREP ( '\X2\501289d2\X0\2', #259 ) ;
+#432 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #730, #704, ( #73 ) ) ;
+#433 = AXIS2_PLACEMENT_3D ( 'NONE', #9, #605, #545 ) ;
+#434 = DIRECTION ( 'NONE',  ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#435 = VECTOR ( 'NONE', #472, 1000.000000000000000 ) ;
+#436 = DIRECTION ( 'NONE',  ( 0.7071067811865449082, 0.000000000000000000, -0.7071067811865502373 ) ) ;
+#437 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#438 = CIRCLE ( 'NONE', #699, 1235.000000000000682 ) ;
+#439 = ORIENTED_EDGE ( 'NONE', *, *, #652, .T. ) ;
+#440 = ORIENTED_EDGE ( 'NONE', *, *, #593, .T. ) ;
+#441 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#442 = LINE ( 'NONE', #92, #107 ) ;
+#443 = CARTESIAN_POINT ( 'NONE',  ( 140.0000000000001990, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#444 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 1.512438796946982109E-13, -1235.000000000000682 ) ) ;
+#445 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#446 = CYLINDRICAL_SURFACE ( 'NONE', #151, 1235.000000000000682 ) ;
+#447 = CARTESIAN_POINT ( 'NONE',  ( 2730.000000000000455, 0.000000000000000000, 1235.000000000000682 ) ) ;
+#448 = VERTEX_POINT ( 'NONE', #215 ) ;
+#449 = CARTESIAN_POINT ( 'NONE',  ( 2599.999999999996817, 3.367778697655226672E-14, -275.0000000000003979 ) ) ;
+#450 = ORIENTED_EDGE ( 'NONE', *, *, #220, .T. ) ;
+#451 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#452 = AXIS2_PLACEMENT_3D ( 'NONE', #682, #91, #324 ) ;
+#453 = FACE_OUTER_BOUND ( 'NONE', #612, .T. ) ;
+#454 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#455 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#456 = EDGE_LOOP ( 'NONE', ( #12, #413, #631, #536 ) ) ;
+#457 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 8.266365894244656579E-14, -675.0000000000018190 ) ) ;
+#458 = FACE_OUTER_BOUND ( 'NONE', #359, .T. ) ;
+#459 = EDGE_CURVE ( 'NONE', #519, #448, #702, .T. ) ;
+#460 = ORIENTED_EDGE ( 'NONE', *, *, #648, .F. ) ;
+#461 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#462 = CIRCLE ( 'NONE', #734, 1205.000000000001364 ) ;
+#463 = ADVANCED_FACE ( 'NONE', ( #527, #523 ), #642, .F. ) ;
+#464 = AXIS2_PLACEMENT_3D ( 'NONE', #202, #509, #82 ) ;
+#465 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 0.000000000000000000, 675.0000000000018190 ) ) ;
+#466 = CIRCLE ( 'NONE', #425, 89.99999999999985789 ) ;
+#467 = DATE_TIME_ROLE ( 'creation_date' ) ;
+#468 = AXIS2_PLACEMENT_3D ( 'NONE', #443, #367, #620 ) ;
+#469 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
+#470 = DIRECTION ( 'NONE',  ( 0.7071067811865484609, 8.659560562354919300E-17, 0.7071067811865465735 ) ) ;
+#471 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ;
+#472 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#473 = VECTOR ( 'NONE', #513, 1000.000000000000000 ) ;
+#474 = VERTEX_POINT ( 'NONE', #465 ) ;
+#475 = ORIENTED_EDGE ( 'NONE', *, *, #298, .T. ) ;
+#476 = DATE_AND_TIME ( #348, #392 ) ;
+#477 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#478 = ORIENTED_EDGE ( 'NONE', *, *, #277, .T. ) ;
+#479 = ADVANCED_FACE ( 'NONE', ( #402, #332 ), #42, .F. ) ;
+#480 = EDGE_CURVE ( 'NONE', #234, #583, #466, .T. ) ;
+#481 = VERTEX_POINT ( 'NONE', #341 ) ;
+#482 = ORIENTED_EDGE ( 'NONE', *, *, #508, .T. ) ;
+#483 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #361 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #607, #420, #296 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
+#484 = EDGE_CURVE ( 'NONE', #85, #448, #228, .T. ) ;
+#485 = VERTEX_POINT ( 'NONE', #153 ) ;
+#486 = DIRECTION ( 'NONE',  ( 0.7071067811865580088, 0.000000000000000000, -0.7071067811865370256 ) ) ;
+#487 = CIRCLE ( 'NONE', #66, 600.0000000000000000 ) ;
+#488 = ADVANCED_FACE ( 'NONE', ( #386 ), #23, .T. ) ;
+#489 = DIRECTION ( 'NONE',  ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#490 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#491 = DIRECTION ( 'NONE',  ( 0.7071067811865484609, 0.000000000000000000, -0.7071067811865465735 ) ) ;
+#492 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 80.00000000000001421 ) ) ;
+#493 = CC_DESIGN_SECURITY_CLASSIFICATION ( #636, ( #417 ) ) ;
+#494 = EDGE_CURVE ( 'NONE', #485, #234, #376, .T. ) ;
+#495 = ORIENTED_EDGE ( 'NONE', *, *, #518, .T. ) ;
+#496 = ORIENTED_EDGE ( 'NONE', *, *, #652, .F. ) ;
+#497 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#498 = CIRCLE ( 'NONE', #623, 1205.000000000000000 ) ;
+#499 = LINE ( 'NONE', #134, #760 ) ;
+#500 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#501 = AXIS2_PLACEMENT_3D ( 'NONE', #560, #146, #617 ) ;
+#502 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 0.000000000000000000, 1205.000000000000000 ) ) ;
+#503 = CARTESIAN_POINT ( 'NONE',  ( 29.99999999999947775, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#504 = FACE_BOUND ( 'NONE', #74, .T. ) ;
+#505 = ORIENTED_EDGE ( 'NONE', *, *, #358, .F. ) ;
+#506 = CARTESIAN_POINT ( 'NONE',  ( 2299.999999999997272, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#507 = CIRCLE ( 'NONE', #170, 675.0000000000031832 ) ;
+#508 = EDGE_CURVE ( 'NONE', #103, #602, #429, .T. ) ;
+#509 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#510 = PLANE ( 'NONE',  #629 ) ;
+#511 = ORIENTED_EDGE ( 'NONE', *, *, #637, .T. ) ;
+#512 = LINE ( 'NONE', #444, #336 ) ;
+#513 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#514 = CIRCLE ( 'NONE', #27, 570.0000000000002274 ) ;
+#515 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#516 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#517 = AXIS2_PLACEMENT_3D ( 'NONE', #323, #575, #621 ) ;
+#518 = EDGE_CURVE ( 'NONE', #663, #292, #647, .T. ) ;
+#519 = VERTEX_POINT ( 'NONE', #624 ) ;
+#520 = CYLINDRICAL_SURFACE ( 'NONE', #301, 80.00000000000001421 ) ;
+#521 = CARTESIAN_POINT ( 'NONE',  ( 2300.000000000000455, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#522 = ORIENTED_EDGE ( 'NONE', *, *, #180, .F. ) ;
+#523 = FACE_BOUND ( 'NONE', #426, .T. ) ;
+#524 = EDGE_CURVE ( 'NONE', #591, #292, #138, .T. ) ;
+#525 = LOCAL_TIME ( 13, 47, 30.00000000000000000, #650 ) ;
+#526 = EDGE_LOOP ( 'NONE', ( #664, #351, #246, #553 ) ) ;
+#527 = FACE_OUTER_BOUND ( 'NONE', #316, .T. ) ;
+#528 = VECTOR ( 'NONE', #260, 1000.000000000000114 ) ;
+#529 = CIRCLE ( 'NONE', #14, 80.00000000000001421 ) ;
+#530 = AXIS2_PLACEMENT_3D ( 'NONE', #283, #689, #169 ) ;
+#531 = CALENDAR_DATE ( 2025, 7, 8 ) ;
+#532 = CIRCLE ( 'NONE', #360, 399.9999999999999432 ) ;
+#533 = APPROVAL_ROLE ( '' ) ;
+#534 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#535 = ORIENTED_EDGE ( 'NONE', *, *, #298, .F. ) ;
+#536 = ORIENTED_EDGE ( 'NONE', *, *, #524, .F. ) ;
+#537 = CIRCLE ( 'NONE', #586, 600.0000000000000000 ) ;
+#538 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#539 = CONICAL_SURFACE ( 'NONE', #580, 80.00000000000001421, 0.7853981633974566057 ) ;
+#540 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #117, #2, ( #417 ) ) ;
+#541 = ORIENTED_EDGE ( 'NONE', *, *, #707, .T. ) ;
+#542 = ORIENTED_EDGE ( 'NONE', *, *, #208, .T. ) ;
+#543 = ORIENTED_EDGE ( 'NONE', *, *, #343, .F. ) ;
+#544 = EDGE_CURVE ( 'NONE', #591, #10, #514, .T. ) ;
+#545 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#546 = ORIENTED_EDGE ( 'NONE', *, *, #220, .F. ) ;
+#547 = CONICAL_SURFACE ( 'NONE', #212, 1235.000000000000682, 0.7853981633974410625 ) ;
+#548 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000001421, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#549 = TOROIDAL_SURFACE ( 'NONE', #754, 675.0000000000003411, 399.9999999999999432 ) ;
+#550 = EDGE_LOOP ( 'NONE', ( #535, #244, #482, #496 ) ) ;
+#551 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#552 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#553 = ORIENTED_EDGE ( 'NONE', *, *, #314, .F. ) ;
+#554 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#555 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#556 = EDGE_CURVE ( 'NONE', #133, #758, #499, .T. ) ;
+#557 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#558 = CC_DESIGN_APPROVAL ( #700, ( #636 ) ) ;
+#559 = ORIENTED_EDGE ( 'NONE', *, *, #484, .F. ) ;
+#560 = CARTESIAN_POINT ( 'NONE',  ( 2730.000000000000455, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#561 = CIRCLE ( 'NONE', #721, 1000.000000000000000 ) ;
+#562 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#563 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#564 = ORIENTED_EDGE ( 'NONE', *, *, #544, .T. ) ;
+#565 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'detail', '', ( #73 ) ) ;
+#566 = CYLINDRICAL_SURFACE ( 'NONE', #43, 1235.000000000000682 ) ;
+#567 = FACE_OUTER_BOUND ( 'NONE', #570, .T. ) ;
+#568 = CIRCLE ( 'NONE', #468, 80.00000000000001421 ) ;
+#569 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 7.347880794884118987E-14, -600.0000000000000000 ) ) ;
+#570 = EDGE_LOOP ( 'NONE', ( #543, #745, #60, #37 ) ) ;
+#571 = FACE_OUTER_BOUND ( 'NONE', #165, .T. ) ;
+#572 = CIRCLE ( 'NONE', #389, 80.00000000000001421 ) ;
+#573 = LINE ( 'NONE', #272, #473 ) ;
+#574 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 80.00000000000000000, 0.000000000000000000 ) ) ;
+#575 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#576 = APPROVAL_PERSON_ORGANIZATION ( #408, #339, #344 ) ;
+#577 = ADVANCED_FACE ( 'NONE', ( #366 ), #547, .T. ) ;
+#578 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#579 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#580 = AXIS2_PLACEMENT_3D ( 'NONE', #497, #434, #671 ) ;
+#581 = ORIENTED_EDGE ( 'NONE', *, *, #24, .F. ) ;
+#582 = CARTESIAN_POINT ( 'NONE',  ( 2599.999999999996817, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#583 = VERTEX_POINT ( 'NONE', #614 ) ;
+#584 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#585 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#586 = AXIS2_PLACEMENT_3D ( 'NONE', #118, #424, #7 ) ;
+#587 = DATE_AND_TIME ( #589, #57 ) ;
+#588 = CIRCLE ( 'NONE', #229, 90.00000000000029843 ) ;
+#589 = CALENDAR_DATE ( 2025, 7, 8 ) ;
+#590 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#591 = VERTEX_POINT ( 'NONE', #197 ) ;
+#592 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
+#593 = EDGE_CURVE ( 'NONE', #448, #519, #561, .T. ) ;
+#594 = CC_DESIGN_APPROVAL ( #232, ( #417 ) ) ;
+#595 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#596 = ORIENTED_EDGE ( 'NONE', *, *, #201, .T. ) ;
+#597 = ORIENTED_EDGE ( 'NONE', *, *, #658, .F. ) ;
+#598 = CONICAL_SURFACE ( 'NONE', #284, 570.0000000000002274, 0.7853981633974520538 ) ;
+#599 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 1.102182119232615860E-14, 89.99999999999985789 ) ) ;
+#600 = AXIS2_PLACEMENT_3D ( 'NONE', #274, #219, #516 ) ;
+#601 = EDGE_LOOP ( 'NONE', ( #372, #541, #694, #422 ) ) ;
+#602 = VERTEX_POINT ( 'NONE', #618 ) ;
+#603 = EDGE_CURVE ( 'NONE', #481, #663, #442, .T. ) ;
+#604 = VECTOR ( 'NONE', #625, 1000.000000000000000 ) ;
+#605 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#606 = ORIENTED_EDGE ( 'NONE', *, *, #405, .T. ) ;
+#607 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) );
+#608 = ORIENTED_EDGE ( 'NONE', *, *, #373, .F. ) ;
+#609 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#610 = CIRCLE ( 'NONE', #299, 80.00000000000001421 ) ;
+#611 = DIRECTION ( 'NONE',  ( -1.000000000000000000, 0.000000000000000000, -0.000000000000000000 ) ) ;
+#612 = EDGE_LOOP ( 'NONE', ( #355, #121, #440, #337 ) ) ;
+#613 = CARTESIAN_POINT ( 'NONE',  ( 2599.999999999996817, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#614 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 1.102182119232615860E-14, 89.99999999999985789 ) ) ;
+#615 = CARTESIAN_POINT ( 'NONE',  ( 10.00000000000012079, 9.797174393178827630E-15, -80.00000000000001421 ) ) ;
+#616 = ORIENTED_EDGE ( 'NONE', *, *, #405, .F. ) ;
+#617 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#618 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 0.000000000000000000, 1235.000000000000682 ) ) ;
+#619 = CC_DESIGN_PERSON_AND_ORGANIZATION_ASSIGNMENT ( #714, #295, ( #636 ) ) ;
+#620 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#621 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#622 = CYLINDRICAL_SURFACE ( 'NONE', #236, 600.0000000000000000 ) ;
+#623 = AXIS2_PLACEMENT_3D ( 'NONE', #290, #129, #715 ) ;
+#624 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, 1000.000000000000000 ) ) ;
+#625 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#626 = VERTEX_POINT ( 'NONE', #743 ) ;
+#627 = CARTESIAN_POINT ( 'NONE',  ( 140.0000000000001990, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#628 = DIRECTION ( 'NONE',  ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#629 = AXIS2_PLACEMENT_3D ( 'NONE', #326, #611, #489 ) ;
+#630 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#631 = ORIENTED_EDGE ( 'NONE', *, *, #676, .F. ) ;
+#632 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#633 = EDGE_CURVE ( 'NONE', #133, #340, #462, .T. ) ;
+#634 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#635 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#636 = SECURITY_CLASSIFICATION ( '', '', #288 ) ;
+#637 = EDGE_CURVE ( 'NONE', #251, #179, #752, .T. ) ;
+#638 = AXIS2_PLACEMENT_3D ( 'NONE', #723, #171, #353 ) ;
+#639 = ORIENTED_EDGE ( 'NONE', *, *, #208, .F. ) ;
+#640 = DIRECTION ( 'NONE',  ( 0.000000000000000000, -1.000000000000000000, 0.000000000000000000 ) ) ;
+#641 = ORIENTED_EDGE ( 'NONE', *, *, #633, .T. ) ;
+#642 = PLANE ( 'NONE',  #665 ) ;
+#643 = AXIS2_PLACEMENT_3D ( 'NONE', #582, #224, #334 ) ;
+#644 = ADVANCED_FACE ( 'NONE', ( #247 ), #446, .T. ) ;
+#645 = DIRECTION ( 'NONE',  ( -1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#646 = CONICAL_SURFACE ( 'NONE', #78, 80.00000000000001421, 0.7853981633974566057 ) ;
+#647 = CIRCLE ( 'NONE', #419, 600.0000000000000000 ) ;
+#648 = EDGE_CURVE ( 'NONE', #307, #626, #223, .T. ) ;
+#649 = CIRCLE ( 'NONE', #356, 1205.000000000001364 ) ;
+#650 = COORDINATED_UNIVERSAL_TIME_OFFSET ( 8, 0, .AHEAD. ) ;
+#651 = FACE_OUTER_BOUND ( 'NONE', #387, .T. ) ;
+#652 = EDGE_CURVE ( 'NONE', #685, #602, #319, .T. ) ;
+#653 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#654 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#655 = EDGE_LOOP ( 'NONE', ( #690, #3, #182, #31 ) ) ;
+#656 = ORIENTED_EDGE ( 'NONE', *, *, #707, .F. ) ;
+#657 = EDGE_CURVE ( 'NONE', #626, #307, #90, .T. ) ;
+#658 = EDGE_CURVE ( 'NONE', #4, #626, #706, .T. ) ;
+#659 = ORIENTED_EDGE ( 'NONE', *, *, #289, .T. ) ;
+#660 = AXIS2_PLACEMENT_3D ( 'NONE', #249, #409, #416 ) ;
+#661 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 1.512438796946982109E-13, -1235.000000000000682 ) ) ;
+#662 = CIRCLE ( 'NONE', #325, 570.0000000000002274 ) ;
+#663 = VERTEX_POINT ( 'NONE', #72 ) ;
+#664 = ORIENTED_EDGE ( 'NONE', *, *, #160, .T. ) ;
+#665 = AXIS2_PLACEMENT_3D ( 'NONE', #759, #222, #753 ) ;
+#666 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#667 = VECTOR ( 'NONE', #250, 1000.000000000000114 ) ;
+#668 = ORIENTED_EDGE ( 'NONE', *, *, #593, .F. ) ;
+#669 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#670 = DIRECTION ( 'NONE',  ( 0.000000000000000000, -1.224646799147353207E-16, 1.000000000000000000 ) ) ;
+#671 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#672 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#673 = CIRCLE ( 'NONE', #738, 275.0000000000003979 ) ;
+#674 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#675 = ORIENTED_EDGE ( 'NONE', *, *, #45, .T. ) ;
+#676 = EDGE_CURVE ( 'NONE', #292, #663, #537, .T. ) ;
+#677 = EDGE_LOOP ( 'NONE', ( #141, #668 ) ) ;
+#678 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#679 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#680 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#681 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#682 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 1000.000000000002842, 0.000000000000000000 ) ) ;
+#683 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#684 = LINE ( 'NONE', #569, #763 ) ;
+#685 = VERTEX_POINT ( 'NONE', #661 ) ;
+#686 = CARTESIAN_POINT ( 'NONE',  ( 2730.000000000000455, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#687 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 7.164183775012016264E-14, 570.0000000000002274 ) ) ;
+#688 = VECTOR ( 'NONE', #436, 1000.000000000000114 ) ;
+#689 = DIRECTION ( 'NONE',  ( -0.000000000000000000, 1.000000000000000000, 1.224646799147353207E-16 ) ) ;
+#690 = ORIENTED_EDGE ( 'NONE', *, *, #26, .T. ) ;
+#691 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#692 = LINE ( 'NONE', #40, #67 ) ;
+#693 = ADVANCED_FACE ( 'NONE', ( #16 ), #191, .T. ) ;
+#694 = ORIENTED_EDGE ( 'NONE', *, *, #480, .F. ) ;
+#695 = FACE_OUTER_BOUND ( 'NONE', #526, .T. ) ;
+#696 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 90.00000000000029843 ) ) ;
+#697 = EDGE_LOOP ( 'NONE', ( #712, #478, #252, #221 ) ) ;
+#698 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#699 = AXIS2_PLACEMENT_3D ( 'NONE', #267, #28, #136 ) ;
+#700 = APPROVAL ( #469, '未' ) ;
+#701 = CARTESIAN_POINT ( 'NONE',  ( 2299.999999999997272, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#702 = CIRCLE ( 'NONE', #357, 1000.000000000000000 ) ;
+#703 = VECTOR ( 'NONE', #256, 1000.000000000000000 ) ;
+#704 = PERSON_AND_ORGANIZATION_ROLE ( 'design_owner' ) ;
+#705 = ADVANCED_FACE ( 'NONE', ( #718 ), #294, .T. ) ;
+#706 = LINE ( 'NONE', #62, #435 ) ;
+#707 = EDGE_CURVE ( 'NONE', #69, #583, #363, .T. ) ;
+#708 = AXIS2_PLACEMENT_3D ( 'NONE', #750, #451, #384 ) ;
+#709 = APPROVAL_STATUS ( 'not_yet_approved' ) ;
+#710 = CARTESIAN_POINT ( 'NONE',  ( 2730.000000000000455, 1.512438796946982109E-13, -1235.000000000000682 ) ) ;
+#711 = EDGE_CURVE ( 'NONE', #103, #149, #498, .T. ) ;
+#712 = ORIENTED_EDGE ( 'NONE', *, *, #373, .T. ) ;
+#713 = ORIENTED_EDGE ( 'NONE', *, *, #349, .T. ) ;
+#714 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#715 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#716 = EDGE_LOOP ( 'NONE', ( #546, #505, #659, #11 ) ) ;
+#717 = LOCAL_TIME ( 13, 47, 30.00000000000000000, #6 ) ;
+#718 = FACE_OUTER_BOUND ( 'NONE', #8, .T. ) ;
+#719 = ORIENTED_EDGE ( 'NONE', *, *, #314, .T. ) ;
+#720 = ORIENTED_EDGE ( 'NONE', *, *, #415, .T. ) ;
+#721 = AXIS2_PLACEMENT_3D ( 'NONE', #609, #77, #29 ) ;
+#722 = PRODUCT_DEFINITION ( 'æœ', '', #417, #71 ) ;
+#723 = CARTESIAN_POINT ( 'NONE',  ( 2969.999999999999091, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#724 = ORIENTED_EDGE ( 'NONE', *, *, #76, .F. ) ;
+#725 = AXIS2_PLACEMENT_3D ( 'NONE', #218, #404, #276 ) ;
+#726 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#727 = DIRECTION ( 'NONE',  ( 0.7071067811865580088, 8.659560562354804668E-17, 0.7071067811865370256 ) ) ;
+#728 = FACE_OUTER_BOUND ( 'NONE', #393, .T. ) ;
+#729 = DIRECTION ( 'NONE',  ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#730 = PERSON_AND_ORGANIZATION ( #756, #123 ) ;
+#731 = FACE_OUTER_BOUND ( 'NONE', #354, .T. ) ;
+#732 = ADVANCED_FACE ( 'NONE', ( #651 ), #55, .F. ) ;
+#733 = EDGE_LOOP ( 'NONE', ( #161, #111, #205, #233 ) ) ;
+#734 = AXIS2_PLACEMENT_3D ( 'NONE', #86, #318, #313 ) ;
+#735 = ORIENTED_EDGE ( 'NONE', *, *, #48, .T. ) ;
+#736 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#737 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#738 = AXIS2_PLACEMENT_3D ( 'NONE', #613, #312, #490 ) ;
+#739 = CARTESIAN_POINT ( 'NONE',  ( 0.000000000000000000, 3.367778697655224147E-14, -275.0000000000002274 ) ) ;
+#740 = ADVANCED_FACE ( 'NONE', ( #306 ), #598, .T. ) ;
+#741 = FACE_BOUND ( 'NONE', #677, .T. ) ;
+#742 = AXIS2_PLACEMENT_3D ( 'NONE', #187, #320, #563 ) ;
+#743 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000001421, 0.000000000000000000, 275.0000000000000000 ) ) ;
+#744 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000001421, 3.367778697655222885E-14, -275.0000000000000000 ) ) ;
+#745 = ORIENTED_EDGE ( 'NONE', *, *, #415, .F. ) ;
+#746 = DIRECTION ( 'NONE',  ( -1.000000000000000000, -0.000000000000000000, -0.000000000000000000 ) ) ;
+#747 = CYLINDRICAL_SURFACE ( 'NONE', #225, 275.0000000000002274 ) ;
+#748 = LINE ( 'NONE', #269, #667 ) ;
+#749 = ORIENTED_EDGE ( 'NONE', *, *, #124, .F. ) ;
+#750 = CARTESIAN_POINT ( 'NONE',  ( 150.0000000000000853, 0.000000000000000000, 0.000000000000000000 ) ) ;
+#751 = CARTESIAN_POINT ( 'NONE',  ( 2700.000000000000000, 0.000000000000000000, -1205.000000000001364 ) ) ;
+#752 = CIRCLE ( 'NONE', #75, 90.00000000000029843 ) ;
+#753 = DIRECTION ( 'NONE',  ( -0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
+#754 = AXIS2_PLACEMENT_3D ( 'NONE', #32, #388, #97 ) ;
+#755 = FACE_OUTER_BOUND ( 'NONE', #210, .T. ) ;
+#756 = PERSON ( '未', '未', '未', ('未'), ('未'), ('未') ) ;
+#757 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#758 = VERTEX_POINT ( 'NONE', #710 ) ;
+#759 = CARTESIAN_POINT ( 'NONE',  ( 3000.000000000000000, 1235.000000000000455, 0.000000000000000000 ) ) ;
+#760 = VECTOR ( 'NONE', #486, 1000.000000000000000 ) ;
+#761 = DIRECTION ( 'NONE',  ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
+#762 = DATE_AND_TIME ( #58, #188 ) ;
+#763 = VECTOR ( 'NONE', #261, 1000.000000000000000 ) ;
+ENDSEC;
+END-ISO-10303-21;

+ 86 - 0
models/立方体.stl

@@ -0,0 +1,86 @@
+solid cube
+  facet normal 0.0 0.0 1.0
+    outer loop
+      vertex 0.0 0.0 1.0
+      vertex 1.0 0.0 1.0
+      vertex 1.0 1.0 1.0
+    endloop
+  endfacet
+  facet normal 0.0 0.0 1.0
+    outer loop
+      vertex 0.0 0.0 1.0
+      vertex 1.0 1.0 1.0
+      vertex 0.0 1.0 1.0
+    endloop
+  endfacet
+  facet normal 0.0 0.0 -1.0
+    outer loop
+      vertex 0.0 0.0 0.0
+      vertex 1.0 1.0 0.0
+      vertex 1.0 0.0 0.0
+    endloop
+  endfacet
+  facet normal 0.0 0.0 -1.0
+    outer loop
+      vertex 0.0 0.0 0.0
+      vertex 0.0 1.0 0.0
+      vertex 1.0 1.0 0.0
+    endloop
+  endfacet
+  facet normal 0.0 1.0 0.0
+    outer loop
+      vertex 0.0 1.0 0.0
+      vertex 1.0 1.0 0.0
+      vertex 1.0 1.0 1.0
+    endloop
+  endfacet
+  facet normal 0.0 1.0 0.0
+    outer loop
+      vertex 0.0 1.0 0.0
+      vertex 1.0 1.0 1.0
+      vertex 0.0 1.0 1.0
+    endloop
+  endfacet
+  facet normal 0.0 -1.0 0.0
+    outer loop
+      vertex 0.0 0.0 0.0
+      vertex 1.0 0.0 1.0
+      vertex 1.0 0.0 0.0
+    endloop
+  endfacet
+  facet normal 0.0 -1.0 0.0
+    outer loop
+      vertex 0.0 0.0 0.0
+      vertex 0.0 0.0 1.0
+      vertex 1.0 0.0 1.0
+    endloop
+  endfacet
+  facet normal 1.0 0.0 0.0
+    outer loop
+      vertex 1.0 0.0 0.0
+      vertex 1.0 1.0 0.0
+      vertex 1.0 1.0 1.0
+    endloop
+  endfacet
+  facet normal 1.0 0.0 0.0
+    outer loop
+      vertex 1.0 0.0 0.0
+      vertex 1.0 1.0 1.0
+      vertex 1.0 0.0 1.0
+    endloop
+  endfacet
+  facet normal -1.0 0.0 0.0
+    outer loop
+      vertex 0.0 0.0 0.0
+      vertex 0.0 1.0 1.0
+      vertex 0.0 1.0 0.0
+    endloop
+  endfacet
+  facet normal -1.0 0.0 0.0
+    outer loop
+      vertex 0.0 0.0 0.0
+      vertex 0.0 0.0 1.0
+      vertex 0.0 1.0 1.0
+    endloop
+  endfacet
+endsolid cube

BIN
requirements.txt