{
  "range-cache-d:/资料/软件/vtk/lesson/lesson03/main.py": "[{\"originRange\":{\"start\":{\"line\":2,\"character\":0},\"end\":{\"line\":2,\"character\":9}},\"modifyRange\":{\"start\":{\"line\":2,\"character\":0},\"end\":{\"line\":2,\"character\":9}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 创建球体数据源\",\"originTextLength\":9,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860721},{\"originRange\":{\"start\":{\"line\":3,\"character\":0},\"end\":{\"line\":6,\"character\":20}},\"modifyRange\":{\"start\":{\"line\":3,\"character\":0},\"end\":{\"line\":6,\"character\":20}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"source.SetRadius(1.0)            # 设置球体半径\\nsource.SetThetaResolution(32)    # 设置经度方向的分割数（影响球体纵向精度）\\nsource.SetPhiResolution(32)      # 设置纬度方向的分割数（影响球体横向精度）\\n\\n# 创建映射器，将几何数据映射为图形图元\",\"originTextLength\":175,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860726},{\"originRange\":{\"start\":{\"line\":10,\"character\":0},\"end\":{\"line\":10,\"character\":22}},\"modifyRange\":{\"start\":{\"line\":10,\"character\":0},\"end\":{\"line\":10,\"character\":22}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 创建演员对象，负责控制几何体的外观和位置\",\"originTextLength\":22,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860728},{\"originRange\":{\"start\":{\"line\":13,\"character\":0},\"end\":{\"line\":13,\"character\":22}},\"modifyRange\":{\"start\":{\"line\":13,\"character\":0},\"end\":{\"line\":13,\"character\":22}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 创建渲染器，管理场景中的灯光、相机和演员\",\"originTextLength\":22,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860728},{\"originRange\":{\"start\":{\"line\":15,\"character\":0},\"end\":{\"line\":15,\"character\":51}},\"modifyRange\":{\"start\":{\"line\":15,\"character\":0},\"end\":{\"line\":15,\"character\":51}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"renderer.SetBackground(0.1, 0.2, 0.4)  # 设置背景色（深蓝色）\",\"originTextLength\":51,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860729},{\"originRange\":{\"start\":{\"line\":17,\"character\":0},\"end\":{\"line\":17,\"character\":17}},\"modifyRange\":{\"start\":{\"line\":17,\"character\":0},\"end\":{\"line\":17,\"character\":17}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 创建渲染窗口，用于显示渲染结果\",\"originTextLength\":17,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860730},{\"originRange\":{\"start\":{\"line\":19,\"character\":0},\"end\":{\"line\":19,\"character\":34}},\"modifyRange\":{\"start\":{\"line\":19,\"character\":0},\"end\":{\"line\":19,\"character\":34}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"window.SetSize(800, 600)  # 设置窗口尺寸\",\"originTextLength\":34,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860730},{\"originRange\":{\"start\":{\"line\":21,\"character\":0},\"end\":{\"line\":21,\"character\":17}},\"modifyRange\":{\"start\":{\"line\":21,\"character\":0},\"end\":{\"line\":21,\"character\":17}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 创建交互器，支持鼠标和键盘交互\",\"originTextLength\":17,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860731},{\"originRange\":{\"start\":{\"line\":24,\"character\":0},\"end\":{\"line\":24,\"character\":13}},\"modifyRange\":{\"start\":{\"line\":24,\"character\":0},\"end\":{\"line\":24,\"character\":13}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 开始渲染并启动事件循环\",\"originTextLength\":13,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860732},{\"originRange\":{\"start\":{\"line\":26,\"character\":0},\"end\":{\"line\":26,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":26,\"character\":0},\"end\":{\"line\":26,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"\",\"originTextLength\":0,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783706860733}]",
  "range-cache-d:/资料/软件/vtk/lesson/lesson05/main.py": "[{\"originRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":1,\"character\":20}},\"modifyRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":1,\"character\":20}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"import pyvista as pv\",\"originTextLength\":20,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754626184},{\"originRange\":{\"start\":{\"line\":2,\"character\":0},\"end\":{\"line\":3,\"character\":56}},\"modifyRange\":{\"start\":{\"line\":2,\"character\":0},\"end\":{\"line\":3,\"character\":56}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"reader = pv.read(\\\"20260707.step\\\")\\npoly_data = reader.extract_surface().cast_to_poly_data()\",\"originTextLength\":90,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754626186},{\"originRange\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"\",\"originTextLength\":0,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754626186},{\"originRange\":{\"start\":{\"line\":7,\"character\":0},\"end\":{\"line\":7,\"character\":30}},\"modifyRange\":{\"start\":{\"line\":7,\"character\":0},\"end\":{\"line\":7,\"character\":30}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"smooth.SetInputData(poly_data)\",\"originTextLength\":30,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754626187},{\"originRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":50,\"character\":42}},\"modifyRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":50,\"character\":42}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"from cadquery import exporters\\n\\ndef read_step_to_vtk(filename):\\n    from cadquery import Workplane\\n    import numpy as np\\n    \\n    result = Workplane(filename)\\n    shapes = result.objects\\n    \\n    if not shapes:\\n        raise ValueError(\\\"No shapes found in STEP file\\\")\\n    \\n    shape = shapes[0]\\n    \\n    vertices = []\\n    faces = []\\n    \\n    for i in range(shape.Shape.NbVertices()):\\n        vert = shape.Shape.Vertex(i + 1).Point()\\n        vertices.append([vert.X(), vert.Y(), vert.Z()])\\n    \\n    for i in range(shape.Shape.NbFaces()):\\n        face = shape.Shape.Face(i + 1)\\n        wires = face.Wires()\\n        for j in range(wires.Size()):\\n            wire = wires.Item(j)\\n            edge_count = wire.NbEdges()\\n            points = []\\n            for k in range(edge_count):\\n                edge = wire.Edge(k + 1)\\n                start_pt = edge.StartPoint()\\n                points.append([start_pt.X(), start_pt.Y(), start_pt.Z()])\\n            if len(points) >= 3:\\n                faces.append([len(points)] + [vertices.index(p) for p in points])\\n    \\n    vertices = np.array(vertices)\\n    faces = np.array(faces)\\n    \\n    poly_data = vtk.vtkPolyData()\\n    \\n    points = vtk.vtkPoints()\\n    points.SetData(vtk.vtkDoubleArray.FromArray(vertices))\\n    poly_data.SetPoints(points)\\n    \\n    cells = vtk.vtkCellArray()\\n    for face in faces:\\n        cells.InsertNextCell(len(face), face)\\n    poly_data.SetPolys(cells)\\n    \\n    return poly_data\\n\\npoly_data = read_step_to_vtk(\\\"model.step\\\")\",\"originTextLength\":1490,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754714611},{\"originRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":1,\"character\":21}},\"modifyRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":1,\"character\":21}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"import cadquery as cq\",\"originTextLength\":21,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754915883},{\"originRange\":{\"start\":{\"line\":4,\"character\":0},\"end\":{\"line\":6,\"character\":37}},\"modifyRange\":{\"start\":{\"line\":4,\"character\":0},\"end\":{\"line\":6,\"character\":37}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"    result = cq.importers.importStep(filename)\\n    shape = result.val()\\n    poly_data = shape.toVtkPolyData()\",\"originTextLength\":109,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754915883},{\"originRange\":{\"start\":{\"line\":52,\"character\":0},\"end\":{\"line\":52,\"character\":45}},\"modifyRange\":{\"start\":{\"line\":52,\"character\":0},\"end\":{\"line\":52,\"character\":45}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"poly_data = read_step_to_vtk(\\\"20260707.STEP\\\")\",\"originTextLength\":45,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783754915883},{\"originRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":5,\"character\":20}},\"modifyRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":5,\"character\":20}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# -*- coding: utf-8 -*-\\n\\\"\\\"\\\"\\nVTK STEP文件可视化程序\\n\\n功能：使用CadQuery读取STEP格式的CAD模型文件，通过VTK进行3D可视化显示\\n\\\"\\\"\\\"\\n\\n# 导入VTK库，用于3D图形渲染和交互\",\"originTextLength\":115,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015687},{\"originRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":1,\"character\":30}},\"modifyRange\":{\"start\":{\"line\":1,\"character\":0},\"end\":{\"line\":1,\"character\":30}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 导入CadQuery库，用于读取STEP格式的CAD文件\",\"originTextLength\":30,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015688},{\"originRange\":{\"start\":{\"line\":3,\"character\":0},\"end\":{\"line\":3,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":3,\"character\":0},\"end\":{\"line\":3,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"\",\"originTextLength\":0,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015688},{\"originRange\":{\"start\":{\"line\":4,\"character\":0},\"end\":{\"line\":11,\"character\":24}},\"modifyRange\":{\"start\":{\"line\":4,\"character\":0},\"end\":{\"line\":11,\"character\":24}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"    \\\"\\\"\\\"\\n    读取STEP文件并转换为VTK PolyData格式\\n\\n    参数：\\n        filename (str): STEP文件的路径\\n\\n    返回：\\n        vtkPolyData: VTK多边形数据对象，可用于VTK渲染\\n    \\\"\\\"\\\"\\n    # 使用CadQuery导入STEP文件\",\"originTextLength\":164,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015689},{\"originRange\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":17}},\"modifyRange\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":17}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"    # 获取导入的几何形状对象\",\"originTextLength\":17,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015689},{\"originRange\":{\"start\":{\"line\":6,\"character\":0},\"end\":{\"line\":6,\"character\":26}},\"modifyRange\":{\"start\":{\"line\":6,\"character\":0},\"end\":{\"line\":6,\"character\":26}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"    # 将形状转换为VTK PolyData格式\",\"originTextLength\":26,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015690},{\"originRange\":{\"start\":{\"line\":9,\"character\":0},\"end\":{\"line\":11,\"character\":21}},\"modifyRange\":{\"start\":{\"line\":9,\"character\":0},\"end\":{\"line\":11,\"character\":21}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"\\n# ========== 数据加载阶段 ==========\\n# 读取STEP文件，获取VTK多边形数据\",\"originTextLength\":53,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015691},{\"originRange\":{\"start\":{\"line\":11,\"character\":0},\"end\":{\"line\":12,\"character\":21}},\"modifyRange\":{\"start\":{\"line\":11,\"character\":0},\"end\":{\"line\":12,\"character\":21}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 数据处理阶段 ==========\\n# 创建平滑过滤器，对模型表面进行平滑处理\",\"originTextLength\":52,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015691},{\"originRange\":{\"start\":{\"line\":12,\"character\":0},\"end\":{\"line\":13,\"character\":55}},\"modifyRange\":{\"start\":{\"line\":12,\"character\":0},\"end\":{\"line\":13,\"character\":55}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"smooth.SetInputData(poly_data)               # 设置输入数据\\nsmooth.SetNumberOfIterations(30)             # 设置平滑迭代次数\",\"originTextLength\":109,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015692},{\"originRange\":{\"start\":{\"line\":15,\"character\":0},\"end\":{\"line\":16,\"character\":31}},\"modifyRange\":{\"start\":{\"line\":15,\"character\":0},\"end\":{\"line\":16,\"character\":31}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 渲染映射阶段 ==========\\n# 创建多边形数据映射器，将PolyData转换为图形渲染数据\",\"originTextLength\":62,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015692},{\"originRange\":{\"start\":{\"line\":16,\"character\":0},\"end\":{\"line\":16,\"character\":63}},\"modifyRange\":{\"start\":{\"line\":16,\"character\":0},\"end\":{\"line\":16,\"character\":63}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"mapper.SetInputConnection(smooth.GetOutputPort())  # 连接平滑过滤器的输出\",\"originTextLength\":63,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015692},{\"originRange\":{\"start\":{\"line\":18,\"character\":0},\"end\":{\"line\":19,\"character\":22}},\"modifyRange\":{\"start\":{\"line\":18,\"character\":0},\"end\":{\"line\":19,\"character\":22}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 演员创建阶段 ==========\\n# 创建演员对象，表示场景中的一个可渲染实体\",\"originTextLength\":53,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015693},{\"originRange\":{\"start\":{\"line\":19,\"character\":0},\"end\":{\"line\":19,\"character\":52}},\"modifyRange\":{\"start\":{\"line\":19,\"character\":0},\"end\":{\"line\":19,\"character\":52}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"actor.SetMapper(mapper)                      # 关联映射器\",\"originTextLength\":52,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015693},{\"originRange\":{\"start\":{\"line\":21,\"character\":0},\"end\":{\"line\":22,\"character\":20}},\"modifyRange\":{\"start\":{\"line\":21,\"character\":0},\"end\":{\"line\":22,\"character\":20}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 渲染器配置阶段 ==========\\n# 创建渲染器，管理场景中的所有渲染对象\",\"originTextLength\":52,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015694},{\"originRange\":{\"start\":{\"line\":22,\"character\":0},\"end\":{\"line\":23,\"character\":57}},\"modifyRange\":{\"start\":{\"line\":22,\"character\":0},\"end\":{\"line\":23,\"character\":57}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"ren.AddActor(actor)                          # 添加演员到渲染器\\nren.SetBackground(0.15, 0.15, 0.15)         # 设置背景颜色（深灰色）\",\"originTextLength\":113,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015694},{\"originRange\":{\"start\":{\"line\":25,\"character\":0},\"end\":{\"line\":26,\"character\":23}},\"modifyRange\":{\"start\":{\"line\":25,\"character\":0},\"end\":{\"line\":26,\"character\":23}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 渲染窗口配置阶段 ==========\\n# 创建渲染窗口，作为显示VTK图形的窗口容器\",\"originTextLength\":56,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015694},{\"originRange\":{\"start\":{\"line\":26,\"character\":0},\"end\":{\"line\":27,\"character\":53}},\"modifyRange\":{\"start\":{\"line\":26,\"character\":0},\"end\":{\"line\":27,\"character\":53}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"win.AddRenderer(ren)                         # 添加渲染器到窗口\\nwin.SetSize(800, 600)                        # 设置窗口尺寸\",\"originTextLength\":109,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015694},{\"originRange\":{\"start\":{\"line\":29,\"character\":0},\"end\":{\"line\":30,\"character\":35}},\"modifyRange\":{\"start\":{\"line\":29,\"character\":0},\"end\":{\"line\":30,\"character\":35}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 交互器配置阶段 ==========\\n# 创建渲染窗口交互器，处理用户与3D场景的交互（旋转、缩放、平移等）\",\"originTextLength\":67,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015694},{\"originRange\":{\"start\":{\"line\":30,\"character\":0},\"end\":{\"line\":33,\"character\":55}},\"modifyRange\":{\"start\":{\"line\":30,\"character\":0},\"end\":{\"line\":33,\"character\":55}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"iren.SetRenderWindow(win)                    # 关联渲染窗口\\n\\n# ========== 启动渲染 ==========\\nwin.Render()                                 # 执行首次渲染\\niren.Start()                                 # 启动交互事件循环\",\"originTextLength\":193,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755015695},{\"originRange\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":20}},\"modifyRange\":{\"start\":{\"line\":5,\"character\":0},\"end\":{\"line\":5,\"character\":20}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"支持显示XYZ坐标轴和圆台旋转轴(R轴)\",\"originTextLength\":20,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755298322},{\"originRange\":{\"start\":{\"line\":32,\"character\":0},\"end\":{\"line\":76,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":32,\"character\":0},\"end\":{\"line\":76,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"def create_axes_actor():\\n    \\\"\\\"\\\"\\n    创建XYZ坐标轴演员对象\\n\\n    返回：\\n        vtkAxesActor: 包含X(红色)、Y(绿色)、Z(蓝色)轴的演员对象\\n    \\\"\\\"\\\"\\n    axes = vtk.vtkAxesActor()\\n    axes.SetTotalLength(100, 100, 100)       # 设置坐标轴长度\\n    axes.SetShaftTypeToLine()                # 设置轴为线条类型\\n    axes.SetAxisLabels(1)                    # 显示轴标签\\n    return axes\\n\\n\\ndef create_rotation_axis_actor(center, length=200):\\n    \\\"\\\"\\\"\\n    创建圆台旋转轴(R轴)演员对象\\n\\n    参数：\\n        center (tuple): 圆台中心点坐标 (x, y, z)\\n        length (float): 旋转轴的显示长度\\n\\n    返回：\\n        vtkActor: 旋转轴演员对象，以红色虚线显示\\n    \\\"\\\"\\\"\\n    # 创建旋转轴的两个端点\\n    start_point = [center[0], center[1], center[2] - length / 2]\\n    end_point = [center[0], center[1], center[2] + length / 2]\\n\\n    # 创建线条数据\\n    points = vtk.vtkPoints()\\n    points.InsertNextPoint(start_point)\\n    points.InsertNextPoint(end_point)\\n\\n    lines = vtk.vtkCellArray()\\n    lines.InsertNextCell(2)\\n    lines.InsertCellPoint(0)\\n    lines.InsertCellPoint(1)\\n\\n    line_data = vtk.vtkPolyData()\\n    line_data.SetPoints(points)\\n    line_data.SetLines(lines)\\n\\n    # 创建映射器\\n    mapper = vtk.vtkPolyDataMapper()\\n    mapper.SetInputData(line_data)\\n\\n    # 创建演员\\n    actor = vtk.vtkActor()\\n    actor.SetMapper(mapper)\\n    actor.GetProperty().SetColor(1.0, 0.0, 0.0)    # 设置为红色\\n    actor.GetProperty().SetLineWidth(3)            # 设置线宽\\n    actor.GetProperty().SetLineStipplePattern(0x00FF)  # 设置为虚线模式\\n\\n    return actor\\n\\n\",\"originTextLength\":1376,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755298323},{\"originRange\":{\"start\":{\"line\":36,\"character\":0},\"end\":{\"line\":41,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":36,\"character\":0},\"end\":{\"line\":41,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# 获取模型中心点，用于确定旋转轴位置\\nresult = cq.importers.importStep(\\\"20260707.STEP\\\")\\nshape = result.val()\\ncenter = (shape.Center().x, shape.Center().y, shape.Center().z)\\nprint(f\\\"模型中心点: {center}\\\")\\n\",\"originTextLength\":181,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755298323},{\"originRange\":{\"start\":{\"line\":52,\"character\":0},\"end\":{\"line\":57,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":52,\"character\":0},\"end\":{\"line\":57,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"# ========== 创建坐标轴 ==========\\n# 创建XYZ坐标轴演员\\naxes_actor = create_axes_actor()\\n\\n# 创建圆台旋转轴(R轴)演员，以模型中心为旋转轴\\nrotation_axis_actor = create_rotation_axis_actor(center)\\n\",\"originTextLength\":160,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755298323},{\"originRange\":{\"start\":{\"line\":55,\"character\":0},\"end\":{\"line\":57,\"character\":60}},\"modifyRange\":{\"start\":{\"line\":55,\"character\":0},\"end\":{\"line\":57,\"character\":60}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"ren.AddActor(actor)                          # 添加模型演员到渲染器\\nren.AddActor(axes_actor)                     # 添加XYZ坐标轴到渲染器\\nren.AddActor(rotation_axis_actor)            # 添加旋转轴(R轴)到渲染器\",\"originTextLength\":178,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783755298324},{\"originRange\":{\"start\":{\"line\":16,\"character\":4},\"end\":{\"line\":17,\"character\":16}},\"modifyRange\":{\"start\":{\"line\":16,\"character\":4},\"end\":{\"line\":17,\"character\":16}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"    return result\\r\\n                \",\"originTextLength\":35,\"aiScene\":\"Completion\",\"behaviorType\":\"accept\",\"updateTime\":1783769008701},{\"originRange\":{\"start\":{\"line\":18,\"character\":10},\"end\":{\"line\":18,\"character\":46}},\"modifyRange\":{\"start\":{\"line\":18,\"character\":10},\"end\":{\"line\":18,\"character\":46}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"def read_workplane_to_vtk(filename):\",\"originTextLength\":36,\"aiScene\":\"Completion\",\"behaviorType\":\"accept\",\"updateTime\":1783769018271},{\"originRange\":{\"start\":{\"line\":18,\"character\":27},\"end\":{\"line\":18,\"character\":64}},\"modifyRange\":{\"start\":{\"line\":18,\"character\":27},\"end\":{\"line\":18,\"character\":64}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"def read_workplane_to_vtk(workplane):\",\"originTextLength\":37,\"aiScene\":\"Completion\",\"behaviorType\":\"accept\",\"updateTime\":1783769042367},{\"originRange\":{\"start\":{\"line\":16,\"character\":16},\"end\":{\"line\":17,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":16,\"character\":16},\"end\":{\"line\":17,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"    读取STEP文件并转换为CadQuery几何形状对象\\r\\n\",\"originTextLength\":32,\"aiScene\":\"Completion\",\"behaviorType\":\"accept\",\"updateTime\":1783769089161},{\"originRange\":{\"start\":{\"line\":25,\"character\":8},\"end\":{\"line\":25,\"character\":62}},\"modifyRange\":{\"start\":{\"line\":25,\"character\":8},\"end\":{\"line\":25,\"character\":62}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"        workplane (CadQuery.Workplane): CadQuery几何形状对象\",\"originTextLength\":54,\"aiScene\":\"Completion\",\"behaviorType\":\"accept\",\"updateTime\":1783769101760},{\"originRange\":{\"start\":{\"line\":99,\"character\":3},\"end\":{\"line\":100,\"character\":0}},\"modifyRange\":{\"start\":{\"line\":99,\"character\":3},\"end\":{\"line\":100,\"character\":0}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"result = read_workplane_to_vtk(workplane)\\r\\n\",\"originTextLength\":43,\"aiScene\":\"Completion\",\"behaviorType\":\"accept\",\"updateTime\":1783769179232},{\"originRange\":{\"start\":{\"line\":99,\"character\":0},\"end\":{\"line\":100,\"character\":30}},\"modifyRange\":{\"start\":{\"line\":99,\"character\":0},\"end\":{\"line\":100,\"character\":30}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"poly_data = result\\ncenter = poly_data.GetCenter()\",\"originTextLength\":49,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1783769378688}]",
  "range-cache-d:/资料/软件/vtk/lesson/hn8346x6-c_password/huawei_decrypt.py": "[{\"originRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":167,\"character\":10}},\"modifyRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":167,\"character\":10}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"#!/usr/bin/env python3\\n# -*- coding: utf-8 -*-\\n\\nimport hashlib\\nimport base64\\nimport sys\\n\\ntry:\\n    from Crypto.Cipher import AES\\n    from Crypto.Util.Padding import unpad\\n    CRYPTO_AVAILABLE = True\\nexcept ImportError:\\n    CRYPTO_AVAILABLE = False\\n\\ndef decrypt_mode_2(ciphertext):\\n    if not CRYPTO_AVAILABLE:\\n        return \\\"需要安装 PyCryptodome 库，请运行: pip install pycryptodome\\\"\\n    \\n    try:\\n        key = b'Huawei5@2012'\\n        ciphertext = ciphertext.replace('$2$', '')\\n        encrypted = base64.b64decode(ciphertext)\\n        \\n        iv = b'\\\\x00' * 16\\n        cipher = AES.new(key, AES.MODE_CBC, iv)\\n        decrypted = cipher.decrypt(encrypted)\\n        \\n        try:\\n            return unpad(decrypted, AES.block_size).decode('utf-8')\\n        except:\\n            return decrypted.decode('utf-8', errors='ignore').strip('\\\\x00')\\n    except Exception as e:\\n        return f\\\"解密失败: {str(e)}\\\"\\n\\ndef decrypt_su_format(ciphertext):\\n    if not CRYPTO_AVAILABLE:\\n        return \\\"需要安装 PyCryptodome 库，请运行: pip install pycryptodome\\\"\\n    \\n    try:\\n        ciphertext = ciphertext.replace('SU', '')\\n        key = b'CmCCK19D94fDd68S'\\n        \\n        encrypted = bytes.fromhex(ciphertext)\\n        iv = b'\\\\x00' * 16\\n        cipher = AES.new(key, AES.MODE_CBC, iv)\\n        decrypted = cipher.decrypt(encrypted)\\n        \\n        try:\\n            return unpad(decrypted, AES.block_size).decode('utf-8')\\n        except:\\n            return decrypted.decode('utf-8', errors='ignore').strip('\\\\x00')\\n    except Exception as e:\\n        return f\\\"解密失败: {str(e)}\\\"\\n\\ndef decrypt_mode_1(ciphertext):\\n    if not CRYPTO_AVAILABLE:\\n        return \\\"需要安装 PyCryptodome 库，请运行: pip install pycryptodome\\\"\\n    \\n    try:\\n        ciphertext = ciphertext.replace('$1$', '')\\n        encrypted = base64.b64decode(ciphertext)\\n        \\n        key = b'Huawei@2012'\\n        iv = b'\\\\x00' * 16\\n        cipher = AES.new(key, AES.MODE_CBC, iv)\\n        decrypted = cipher.decrypt(encrypted)\\n        \\n        try:\\n            return unpad(decrypted, AES.block_size).decode('utf-8')\\n        except:\\n            return decrypted.decode('utf-8', errors='ignore').strip('\\\\x00')\\n    except Exception as e:\\n        return f\\\"解密失败: {str(e)}\\\"\\n\\ndef decrypt_mode_2_simple(ciphertext):\\n    try:\\n        import itertools\\n        \\n        ciphertext = ciphertext.replace('$2$', '')\\n        target_hash = ciphertext\\n        \\n        charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\\n        \\n        print(\\\"正在穷举解密（可能需要较长时间）...\\\")\\n        for length in range(6, 11):\\n            for attempt in itertools.product(charset, repeat=length):\\n                plaintext = ''.join(attempt)\\n                md5_hash = hashlib.md5(plaintext.encode()).digest()\\n                sha256_hash = hashlib.sha256(md5_hash).hexdigest()\\n                \\n                if sha256_hash == target_hash:\\n                    return plaintext\\n        \\n        return \\\"未找到匹配密码\\\"\\n    except Exception as e:\\n        return f\\\"解密失败: {str(e)}\\\"\\n\\ndef auto_decrypt(ciphertext):\\n    print(f\\\"待解密密文: {ciphertext}\\\")\\n    print(\\\"=\\\" * 50)\\n    \\n    if ciphertext.startswith('$2$'):\\n        print(\\\"检测到 $2$ 格式 (SHA-256加密)\\\")\\n        result = decrypt_mode_2(ciphertext)\\n        print(f\\\"解密结果: {result}\\\")\\n        if \\\"失败\\\" in result:\\n            print(\\\"\\\\n尝试穷举解密...\\\")\\n            result2 = decrypt_mode_2_simple(ciphertext)\\n            print(f\\\"穷举结果: {result2}\\\")\\n    \\n    elif ciphertext.startswith('SU'):\\n        print(\\\"检测到 SU 格式 (华为自定义加密)\\\")\\n        result = decrypt_su_format(ciphertext)\\n        print(f\\\"解密结果: {result}\\\")\\n    \\n    elif ciphertext.startswith('$1$'):\\n        print(\\\"检测到 $1$ 格式 (MD5加密)\\\")\\n        result = decrypt_mode_1(ciphertext)\\n        print(f\\\"解密结果: {result}\\\")\\n    \\n    elif ciphertext.startswith('2') and len(ciphertext) > 10:\\n        print(\\\"检测到 '2'开头格式\\\")\\n        result = decrypt_mode_2('$2$' + ciphertext[1:])\\n        print(f\\\"解密结果: {result}\\\")\\n    \\n    else:\\n        print(\\\"未知密文格式，尝试多种解密方式...\\\")\\n        print(\\\"\\\\n1. 尝试 $2$ 格式:\\\")\\n        result1 = decrypt_mode_2('$2$' + ciphertext)\\n        print(f\\\"   结果: {result1}\\\")\\n        \\n        print(\\\"\\\\n2. 尝试 SU 格式:\\\")\\n        result2 = decrypt_su_format('SU' + ciphertext)\\n        print(f\\\"   结果: {result2}\\\")\\n        \\n        print(\\\"\\\\n3. 尝试 $1$ 格式:\\\")\\n        result3 = decrypt_mode_1('$1$' + ciphertext)\\n        print(f\\\"   结果: {result3}\\\")\\n\\ndef main():\\n    print(\\\"=\\\" * 60)\\n    print(\\\"     华为光猫超级密码解密工具 v1.0\\\")\\n    print(\\\"     支持格式: $1$, $2$, SU, 2开头格式\\\")\\n    print(\\\"=\\\" * 60)\\n    print()\\n    \\n    if not CRYPTO_AVAILABLE:\\n        print(\\\"⚠️  警告：未检测到 PyCryptodome 库\\\")\\n        print(\\\"请先安装：pip install pycryptodome\\\")\\n        print()\\n    \\n    if len(sys.argv) > 1:\\n        ciphertext = sys.argv[1]\\n        auto_decrypt(ciphertext)\\n    else:\\n        while True:\\n            try:\\n                ciphertext = input(\\\"请输入密文 (输入 q 退出): \\\").strip()\\n            except EOFError:\\n                print(\\\"\\\\n退出程序\\\")\\n                break\\n            \\n            if ciphertext.lower() == 'q':\\n                print(\\\"退出程序\\\")\\n                break\\n            \\n            if not ciphertext:\\n                print(\\\"请输入有效的密文\\\")\\n                continue\\n            \\n            auto_decrypt(ciphertext)\\n            print()\\n            print(\\\"-\\\" * 60)\\n            print()\\n\\nif __name__ == '__main__':\\n    main()\",\"originTextLength\":5243,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1784008845910}]",
  "range-cache-d:/资料/软件/vtk/lesson/hn8346x6-c_password/一键获取密码.bat": "[{\"originRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":64,\"character\":28}},\"modifyRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":64,\"character\":28}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"@echo off\\nchcp 65001 >nul\\ntitle 华为HN8346X6-C光猫超级密码获取工具\\n\\npowershell -Command \\\"[System.Windows.Forms.MessageBox]::Show('请确保以下条件已完成：`n`n1. 电脑通过网线连接光猫LAN口（不要连接路由器）`n2. 已拔掉光纤线（重要！避免运营商远程下发配置）`n3. 已运行ONT-V3-V5工具开启Telnet功能`n4. 已启用Windows Telnet客户端`n`n准备就绪后点击确定继续...', '前置准备检查', 'OK', 'Information')\\\"\\n\\necho ================================================\\necho   华为HN8346X6-C光猫超级密码获取工具\\necho ================================================\\necho.\\n\\nset \\\"IP=192.168.1.1\\\"\\nset \\\"USER=root\\\"\\nset \\\"PASS=adminHW\\\"\\nset \\\"OUTPUT=光猫配置信息.txt\\\"\\nset \\\"LOGIN_SCRIPT=telnet_login.txt\\\"\\n\\necho 正在生成登录脚本...\\necho open %IP% > %LOGIN_SCRIPT%\\nping -n 2 127.0.0.1 >nul\\necho %USER% >> %LOGIN_SCRIPT%\\nping -n 1 127.0.0.1 >nul\\necho %PASS% >> %LOGIN_SCRIPT%\\nping -n 1 127.0.0.1 >nul\\necho ? >> %LOGIN_SCRIPT%\\nping -n 1 127.0.0.1 >nul\\necho display current-configuration >> %LOGIN_SCRIPT%\\nping -n 8 127.0.0.1 >nul\\necho quit >> %LOGIN_SCRIPT%\\n\\necho.\\necho 正在连接光猫 %IP%...\\necho 用户名: %USER%\\necho 密码: %PASS%\\necho.\\n\\npowershell -Command \\\"[System.Windows.Forms.MessageBox]::Show('即将连接到光猫 %IP%，`n`n请保持电脑与光猫的网络连接正常。`n`n连接过程可能需要几秒钟，请耐心等待...', '开始连接', 'OK', 'Information')\\\"\\n\\nstart /wait cmd /c \\\"type %LOGIN_SCRIPT% | telnet > %OUTPUT%\\\"\\n\\necho.\\necho 配置信息已保存到: %OUTPUT%\\necho.\\necho 正在搜索超级管理员密码信息...\\necho --------------------------------\\nfindstr /i \\\"CUAdmin telecomadmin CMCCAdmin UserName Password\\\" %OUTPUT%\\necho --------------------------------\\necho.\\n\\necho 搜索结果已保存到: 密码搜索结果.txt\\nfindstr /i \\\"CUAdmin telecomadmin CMCCAdmin UserName Password\\\" %OUTPUT% > 密码搜索结果.txt\\n\\npowershell -Command \\\"[System.Windows.Forms.MessageBox]::Show('配置信息已成功获取！`n`n下一步操作：`n1. 打开密码搜索结果.txt查找Password字段`n2. 复制双引号内的密文`n3. 使用解密工具解密获取超级密码`n`n点击确定打开配置文件...', '配置获取完成', 'OK', 'Information')\\\"\\n\\necho.\\necho ================================================\\necho   下一步操作：\\necho ================================================\\necho.\\necho 1. 打开\\\"密码搜索结果.txt\\\"查找类似如下内容：\\necho    UserName=\\\"CUAdmin\\\" Password=\\\"$2yWqT3<n.L@UzTLN;ujY-FYt~QeSv;;Jby^#/KjR4$\\\"\\necho.\\necho 2. 复制Password=\\\"...\\\" 双引号内的密文\\necho.\\necho 3. 运行华为解密工具解密：\\necho    python huawei_decrypt.py \\\"密文内容\\\"\\necho.\\necho 密文格式说明:\\necho   以 \\\"$2\\\" 开头 -> 使用$2解密模式\\necho   以 \\\"SU\\\" 开头 -> 使用SU解密模式\\necho   以 \\\"2\\\" 开头 -> 使用2解密模式\\necho.\\necho 按任意键打开配置文件...\\npause >nul\\nstart %OUTPUT%\\n\\ndel %LOGIN_SCRIPT% >nul 2>&1\",\"originTextLength\":2235,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1784008848457}]",
  "range-cache-d:/automfl/wuwei/vtk/downloadbook/download_textbooks.py": "[{\"originRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":117,\"character\":10}},\"modifyRange\":{\"start\":{\"line\":0,\"character\":0},\"end\":{\"line\":117,\"character\":10}},\"action\":\"None\",\"isLine\":false,\"originAcceptText\":\"import os\\nimport requests\\nimport json\\nimport urllib.parse\\nimport sys\\nimport time\\n\\nBASE_URL = \\\"https://api.github.com/repos/TapXWorld/ChinaTextbook/contents\\\"\\nDOWNLOAD_BASE = \\\"https://raw.githubusercontent.com/TapXWorld/ChinaTextbook/master\\\"\\nOUTPUT_DIR = \\\"d:/AUTOMFL/WuWei/VTK/downloadbook/初中教材\\\"\\n\\nTARGET_VERSIONS = [\\\"人教版-人民教育出版社\\\", \\\"湘教版-湖南教育出版社\\\"]\\n\\nSUBJECTS = [\\n    \\\"数学\\\",\\n    \\\"语文\\\",\\n    \\\"英语\\\",\\n    \\\"物理\\\",\\n    \\\"化学\\\",\\n    \\\"生物学\\\",\\n    \\\"历史\\\",\\n    \\\"地理\\\",\\n    \\\"道德与法治\\\",\\n    \\\"科学\\\",\\n    \\\"美术\\\",\\n    \\\"音乐\\\",\\n    \\\"体育与健康\\\",\\n]\\n\\nMAX_RETRIES = 3\\nRETRY_DELAY = 5\\n\\ndef get_directory_contents(path):\\n    url = f\\\"{BASE_URL}/{urllib.parse.quote(path)}?ref=master\\\"\\n    print(f\\\"DEBUG: Getting contents from URL: {url}\\\", file=sys.stderr)\\n    for attempt in range(MAX_RETRIES):\\n        try:\\n            response = requests.get(url, timeout=30)\\n            print(f\\\"DEBUG: Response status code: {response.status_code}\\\", file=sys.stderr)\\n            response.raise_for_status()\\n            data = response.json()\\n            print(f\\\"DEBUG: Got {len(data)} items\\\", file=sys.stderr)\\n            return data\\n        except Exception as e:\\n            print(f\\\"ERROR: 获取目录失败 (尝试 {attempt+1}/{MAX_RETRIES}) {path}: {e}\\\", file=sys.stderr)\\n            if attempt < MAX_RETRIES - 1:\\n                time.sleep(RETRY_DELAY)\\n    return []\\n\\ndef download_file(url, save_path):\\n    print(f\\\"DEBUG: Downloading {url} to {save_path}\\\", file=sys.stderr)\\n    for attempt in range(MAX_RETRIES):\\n        try:\\n            response = requests.get(url, timeout=120, stream=True)\\n            response.raise_for_status()\\n            os.makedirs(os.path.dirname(save_path), exist_ok=True)\\n            with open(save_path, 'wb') as f:\\n                for chunk in response.iter_content(chunk_size=8192):\\n                    if chunk:\\n                        f.write(chunk)\\n            print(f\\\"SUCCESS: 已下载: {save_path}\\\")\\n            return True\\n        except Exception as e:\\n            print(f\\\"ERROR: 下载失败 (尝试 {attempt+1}/{MAX_RETRIES}) {url}: {e}\\\", file=sys.stderr)\\n            if attempt < MAX_RETRIES - 1:\\n                time.sleep(RETRY_DELAY * (attempt + 1))\\n    return False\\n\\ndef download_version(subject, version):\\n    version_path = f\\\"初中/{subject}/{version}\\\"\\n    print(f\\\"DEBUG: Checking version path: {version_path}\\\", file=sys.stderr)\\n    contents = get_directory_contents(version_path)\\n    \\n    if not contents:\\n        print(f\\\"INFO: 版本 {version} 在科目 {subject} 中不存在\\\")\\n        return\\n    \\n    for item in contents:\\n        if item[\\\"type\\\"] == \\\"dir\\\":\\n            grade_path = f\\\"{version_path}/{item['name']}\\\"\\n            grade_contents = get_directory_contents(grade_path)\\n            \\n            for file_item in grade_contents:\\n                if file_item[\\\"type\\\"] == \\\"file\\\":\\n                    file_path = f\\\"{grade_path}/{file_item['name']}\\\"\\n                    download_url = f\\\"{DOWNLOAD_BASE}/{urllib.parse.quote(file_path)}\\\"\\n                    \\n                    save_dir = os.path.join(OUTPUT_DIR, subject, version, item[\\\"name\\\"])\\n                    os.makedirs(save_dir, exist_ok=True)\\n                    \\n                    save_path = os.path.join(save_dir, file_item[\\\"name\\\"])\\n                    \\n                    if not os.path.exists(save_path):\\n                        download_file(download_url, save_path)\\n                    else:\\n                        print(f\\\"INFO: 已存在，跳过: {save_path}\\\")\\n\\ndef main():\\n    print(\\\"=\\\"*60, file=sys.stderr)\\n    print(\\\"开始下载人教版和湘教版初中教材\\\", file=sys.stderr)\\n    print(\\\"=\\\"*60, file=sys.stderr)\\n    \\n    os.makedirs(OUTPUT_DIR, exist_ok=True)\\n    \\n    for subject in SUBJECTS:\\n        print(f\\\"\\\\n{'='*60}\\\", file=sys.stderr)\\n        print(f\\\"正在处理科目: {subject}\\\", file=sys.stderr)\\n        print(f\\\"{'='*60}\\\", file=sys.stderr)\\n        \\n        subject_path = f\\\"初中/{subject}\\\"\\n        versions = get_directory_contents(subject_path)\\n        \\n        if not versions:\\n            print(f\\\"INFO: 科目 {subject} 没有找到版本\\\", file=sys.stderr)\\n            continue\\n        \\n        for version_item in versions:\\n            version_name = version_item[\\\"name\\\"]\\n            print(f\\\"DEBUG: Found version: {version_name}\\\", file=sys.stderr)\\n            if version_name in TARGET_VERSIONS:\\n                print(f\\\"\\\\n正在下载版本: {version_name}\\\", file=sys.stderr)\\n                download_version(subject, version_name)\\n    \\n    print(\\\"\\\\n\\\\n下载完成！\\\", file=sys.stderr)\\n\\nif __name__ == \\\"__main__\\\":\\n    main()\",\"originTextLength\":4358,\"aiScene\":\"builder\",\"behaviorType\":\"accept\",\"updateTime\":1784390988003}]"
}