news 2026/9/3 12:00:08

三维GIS/BIM标绘批量平移升降:数据驱动自动化操作实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三维GIS/BIM标绘批量平移升降:数据驱动自动化操作实战

还在手动一个个调整三维模型里的标绘位置吗?对于从事BIM报建、三维可视化项目,尤其是涉及大量点位调整的工程师来说,这绝对是工作中最耗时、最枯燥的环节之一。想象一下,一个大型厂区的三维可视化项目中,成百上千个设备标签、管线标识需要根据最新的设计图纸进行整体偏移或升降,如果全靠手动拖拽,不仅效率低下,还极易出错,导致模型与现场不符。

今天要讨论的,就是一个能彻底改变这种工作流的“效率神器”——图新说软件的“批量平移升降”功能。它绝不是一个简单的“移动”工具,其核心价值在于将原本离散、重复的手动操作,转化为基于规则和数据的批量自动化处理。对于真正需要处理海量三维标绘的工程师而言,掌握这个功能,效率提升10倍并非虚言。

本文将深入拆解“批量平移升降”的应用场景、核心原理,并通过一个从数据准备到批量执行的完整实战案例,手把手教你如何利用它高效完成三维场景中的标绘编辑工作。无论你是BIM工程师、三维可视化开发者,还是智慧城市、数字孪生项目的实施人员,这篇文章都将为你提供一套可直接复用的高效工作方法。

1. 这篇文章真正要解决的问题:告别低效手动拖拽

在三维GIS、BIM或数字孪生项目中,“标绘”是一个基础但至关重要的概念。它指的是在三维场景中,以图标、文本、模型等形式,对特定的地理位置或对象进行可视化标注。例如,在智慧园区场景中,每一个摄像头、路灯、消防栓的位置都需要用一个图标标绘出来;在BIM报审模型中,需要对关键构件、管线接口进行文字说明。

这些标绘点位的管理,在实际项目中面临两大核心痛点:

  1. 批量创建后的联动调整困难:标绘点位的初始位置可能来源于CAD图纸、GIS坐标或设备台账。当底图坐标系调整、设计变更导致所有点位需要整体平移(如X方向+5米,Y方向-3米)或整体升降(所有Z坐标+1.5米)时,传统方法只能在软件中一个个选中、输入坐标或手动拖拽。数量一多,不仅工作量巨大,精度也无法保证。
  2. 与业务数据脱节:标绘的本质是空间数据与属性数据的结合。手动调整位置,意味着调整动作与背后的业务数据(如设备ID、名称、状态)是割裂的。无法通过修改一份数据表格,就驱动所有相关标绘自动更新位置。

“批量平移升降”功能,正是为了解决上述痛点而生。它通过读取一份包含标绘唯一标识和期望坐标偏移量的数据表(如Excel、CSV),自动、精准地对三维场景中成百上千的标绘进行位置更新。这背后的思维转变,是从“图形界面操作”升级为“数据驱动更新”,是三维可视化项目管理走向规范化、自动化的重要一步。

2. 基础概念与核心原理

在深入实操之前,有必要厘清几个关键概念,这能帮助你更好地理解功能的边界和适用场景。

标绘(Plotting):在三维地理信息系统(3D GIS)或可视化引擎中,指代所有叠加在三维地形或模型之上的点状、线状、面状图形元素。常见类型包括:

  • 点标绘:图标(Icon)、文本(Label)、简易模型(Billboard)。
  • 线标绘:测量线、航线、管道。
  • 面标绘:区域范围、电子围栏。

批量平移升降:特指对大量“点标绘”的空间位置进行批量数学变换的操作。

  • 平移(Translation):在水平面(XY平面)上移动。通常涉及东方向(X或Easting)和北方向(Y或Northing)的偏移量(ΔX, ΔY)。
  • 升降(Elevation Adjustment):在垂直方向(Z轴)上移动。即调整高程值(ΔZ)。
  • 批量(Batch):意味着操作对象是一个集合,处理逻辑是统一的、自动化的。

核心原理:该功能本质上是一个空间坐标变换的批处理引擎。其工作流程可以抽象为以下几步:

  1. 输入:一份映射表。表中每一行对应一个标绘,至少包含两个关键字段:唯一标识(如ID、名称)和坐标偏移量(ΔX, ΔY, ΔZ)。
  2. 处理:软件内部根据唯一标识在场景中查找对应的标绘对象,获取其当前坐标(X0, Y0, Z0)
  3. 计算:将当前坐标与偏移量相加,得到新坐标(X1 = X0 + ΔX, Y1 = Y0 + ΔY, Z1 = Z0 + ΔZ)
  4. 输出:将标绘对象的位置更新为新坐标(X1, Y1, ZZ),并在场景中实时刷新显示。

理解这个原理后,你就会明白,用好这个功能的关键在于准备一份准确、规范的偏移量数据表

3. 环境准备与前置条件

为了完成后续的实战演练,你需要准备好以下环境。请注意,本文以通用工作流程和思路为核心,具体软件版本请以你实际使用的图新说(或同类三维GIS平台)为准。

  1. 软件环境

    • 图新说桌面端软件:确保已安装并授权。本文演示的功能通常在专业的桌面端编辑工具中,而非仅用于浏览的Web端。
    • 三维场景数据:你已经有一个加载了地形、影像或BIM模型的三维场景文件(如.lrp,.scp等工程文件)。
    • 标绘数据:场景中已存在需要被批量修改的标绘对象。这些标绘最好在创建时就具有唯一的、可被识别的属性字段(如“设备ID”、“编号”)。
  2. 数据准备工具

    • Microsoft Excel 或 WPS表格:用于准备和编辑偏移量数据表。这是最常用的工具。
    • 文本编辑器(如VS Code, Notepad++):用于查看或编辑CSV格式的数据。
  3. 关键知识

    • 坐标系认知:清楚你的三维场景所使用的坐标系(如WGS84、CGCS2000、地方独立坐标系)。平移偏移量的单位(米、度)需与坐标系匹配。
    • 标绘属性管理:了解如何在图新说中查看和编辑标绘的属性表。通常可以在标绘上右键选择“属性”进行查看。

4. 核心流程拆解

整个批量平移升降操作可以分解为五个清晰的步骤,下图展示了从数据准备到最终验证的完整工作流:

flowchart TD A[开始:准备原始标绘与偏移量表] --> B[第一步:分析需求<br>确定偏移量ΔX, ΔY, ΔZ] B --> C[第二步:制作映射表<br>(ID, ΔX, ΔY, ΔZ)] C --> D[第三步:软件内执行批量操作] D --> E{第四步:验证与检查} E -- 成功 --> F[第五步:保存工程与数据归档] E -- 失败 --> G[检查映射表与标绘ID] G --> C

下面,我们将对流程中的每一个环节进行详细说明。

第一步:需求分析与偏移量确定这是最重要的前置步骤。你需要明确:

  • 调整对象:是所有标绘,还是某一类标绘(如所有“摄像头”)?
  • 调整原因:是坐标系转换引起的整体偏移,还是设计变更导致的局部移动?
  • 偏移量计算:如何获取精确的ΔX, ΔY, ΔZ?可能来源于坐标转换参数、两版设计图的坐标差量计算等。务必确保偏移量数据的准确性

第二步:制作偏移量映射表根据第一步的分析,在Excel中创建表格。一个标准的表格应包含以下列:

标绘ID (Plot_ID)偏移东 (Delta_X)偏移北 (Delta_Y)偏移高 (Delta_Z)备注 (Note)
CAM-0015.25-3.100.00摄像头1号,向东5.25米,向南3.10米
CAM-0025.25-3.100.00同上
LIGHT-1010.000.001.50路灯101号,仅抬高1.5米
...............

关键点

  • 标绘ID必须与三维场景中对应标绘的属性字段完全一致(大小写、空格、符号)。
  • 偏移量单位通常是。正负值代表方向(东/西,北/南,上/下)。
  • 保存为CSV (逗号分隔)格式,以便软件读取。

第三步:在图新说中执行批量操作

  1. 打开包含目标标绘的三维场景工程。
  2. 找到“标绘管理”或“图层管理”面板,定位到你的标绘图层。
  3. 找到“批量编辑”、“属性更新”或专门的“批量平移”功能入口(具体名称因版本而异)。
  4. 在功能对话框中,选择“通过文件导入偏移量”或类似选项。
  5. 选择你制作好的CSV文件,并正确映射表格列到软件字段(将标绘ID列映射到软件用于匹配的字段,将Delta_X/Y/Z列映射到偏移量字段)。
  6. 点击“执行”或“应用”。软件会开始遍历匹配并计算新坐标。

第四步:结果验证与检查操作完成后,切勿直接保存覆盖!必须进行验证:

  • 视觉检查:在场景中随机抽查多个标绘,观察其新位置是否合理。使用测量工具,检查关键点之间的距离是否与预期偏移一致。
  • 数据检查:打开几个标绘的属性表,查看其坐标值是否已按规则更新。
  • 样本核对:针对不同类型的偏移(纯平移、纯升降、混合),各选取2-3个样本,手动计算新坐标并与软件更新后的坐标对比。

第五步:保存与归档验证无误后,保存工程文件。同时,将本次使用的偏移量CSV文件、操作日志(如果有)以及需求说明文档一并归档。这是重要的过程资产,便于后续审计、回溯或再次调整。

5. 完整示例与代码实现

下面我们通过一个模拟的“智慧园区设备位置校准”场景,来演示一个完整的操作闭环。假设我们有100个设备标绘(摄像头和路灯),因底图坐标系纠偏,需要整体向东平移5.2米,向北平移-2.8米(即向南2.8米),所有设备抬高至离地3米统一高度。

5.1 准备原始标绘数据

首先,我们需要在场景中创建或已拥有这些标绘。每个标绘在创建时,都应在其属性中设置一个唯一的Device_ID。我们可以通过导出功能,先获取所有标绘的当前信息。

操作:在图新说中,选中设备标绘图层,右键选择“导出属性到表格”。得到文件device_plot_current.csv内容示例

Device_ID,Name,Type,Longitude,Latitude,Height CAM-001,南门主摄像头,Camera,116.403847,39.915285,1.5 CAM-002,东侧路口摄像头,Camera,116.404100,39.915500,1.5 LIGHT-101,园区中路灯1,Light,116.403950,39.915150,5.0 ...(更多行)

注:此处经纬度为示例,实际可能是平面坐标。

5.2 计算并生成偏移量映射表

我们的需求是:ΔX = +5.2米, ΔY = -2.8米, ΔZ =3.0 - 当前Height米。我们需要让所有设备最终高度为3米。

我们在Excel中新建一个工作表来处理:

  1. A-D列粘贴导入的device_plot_current.csv数据。
  2. 在E列(Delta_X)输入5.2
  3. 在F列(Delta_Y)输入-2.8
  4. 在G列(Delta_Z)输入公式=3 - D2(假设Height在D列)。此公式计算每个设备需要抬升的高度差。
  5. 最终,我们只需要保留Device_IDDelta_XDelta_YDelta_Z这几列用于批量操作。

生成用于批量操作的offset_mapping.csv文件:

Device_ID,Delta_X,Delta_Y,Delta_Z CAM-001,5.2,-2.8,1.5 CAM-002,5.2,-2.8,1.5 LIGHT-101,5.2,-2.8,-2.0 ...(后续行)

解释:摄像头CAM-001原高1.5米,目标3米,需抬高1.5米(ΔZ=1.5)。路灯LIGHT-101原高5米,目标3米,需降低2米(ΔZ=-2.0)。

5.3 软件内批量操作步骤详解

  1. 打开工程与面板:启动图新说,打开智慧园区工程文件。在左侧图层管理器中,找到并选中“设备标绘”图层。
  2. 找到批量功能:在顶部菜单栏或右键菜单中,寻找“批量编辑”、“高级编辑”或“属性工具”组,点击“批量平移升降”功能按钮。这会弹出一个参数设置对话框。
  3. 配置参数与导入文件
    • 在对话框中,首先选择“根据属性字段匹配标绘”。
    • 在“匹配字段”下拉框中,选择Device_ID。这是软件在场景中识别每个标绘的关键。
    • 选择“从文件导入偏移量”,点击“浏览”按钮,选择我们准备好的offset_mapping.csv文件。
    • 软件会尝试自动识别CSV文件的列头。我们需要手动完成字段映射:
      • 将CSV的Device_ID列映射到软件的“匹配字段”。
      • 将CSV的Delta_X列映射到软件的“东偏移(米)”。
      • 将CSV的Delta_Y列映射到软件的“北偏移(米)”。
      • 将CSV的Delta_Z列映射到软件的“高程偏移(米)”。
    • 对话框下方通常有一个预览区域,可以显示前几条匹配结果,请务必核对是否正确。
  4. 执行与预览:点击“应用”或“执行”按钮。软件会提示“即将修改XX个要素的位置”,确认无误后点击“确定”。处理过程通常很快,场景中的标绘会实时移动到新位置。

5.4 通过脚本实现自动化(进阶)

对于需要频繁进行此类操作或集成到自动化流程的用户,图新说可能提供API或脚本接口。以下是一个概念性的Python伪代码,演示了如何通过脚本逻辑驱动批量更新(请注意,具体API调用需参考官方开发文档):

# 伪代码:基于图新说脚本API的批量平移示例 import csv import topscenescriptapi as tsapi # 假设的图新说脚本模块 def batch_translate_plots(csv_file_path, layer_name): """ 根据CSV文件批量平移指定图层的标绘 :param csv_file_path: 偏移量映射CSV文件路径 :param layer_name: 目标图层名称 """ # 1. 连接到当前场景 scene = tsapi.get_active_scene() layer = scene.get_layer_by_name(layer_name) if not layer: print(f"错误:未找到图层 '{layer_name}'") return # 2. 读取偏移量CSV文件 updates = [] with open(csv_file_path, mode='r', encoding='utf-8-sig') as file: reader = csv.DictReader(file) for row in reader: plot_id = row['Device_ID'] dx = float(row['Delta_X']) dy = float(row['Delta_Y']) dz = float(row['Delta_Z']) updates.append({'id': plot_id, 'offset': (dx, dy, dz)}) # 3. 遍历图层中的标绘,应用偏移 count = 0 for plot in layer.get_all_plots(): plot_attr = plot.get_attributes() current_id = plot_attr.get('Device_ID') # 查找该标绘对应的偏移量 matched_update = next((u for u in updates if u['id'] == current_id), None) if matched_update: # 获取当前坐标 current_pos = plot.get_position() # 返回 (x, y, z) # 计算新坐标 new_pos = ( current_pos[0] + matched_update['offset'][0], current_pos[1] + matched_update['offset'][1], current_pos[2] + matched_update['offset'][2] ) # 更新标绘位置 plot.set_position(new_pos) count += 1 print(f"已更新标绘 {current_id} 的位置。") print(f"批量平移完成。成功处理 {count} 个标绘。") # 使用函数 if __name__ == "__main__": batch_translate_plots("offset_mapping.csv", "设备标绘图层")

注意:此代码为逻辑示意,不可直接运行。实际开发需查阅图新说官方提供的脚本API手册。

6. 运行结果与效果验证

执行批量操作后,我们通过以下方式验证结果:

  1. 场景视觉反馈:所有设备标绘应瞬间从旧位置“跳转”到新位置。你可以使用鼠标环视场景,观察整体布局是否符合“整体向东、微向南、高度统一”的预期。
  2. 属性表验证:随机选择几个标绘(如CAM-001, LIGHT-101),右键查看“属性”。
    • 验证前:记录或截图旧坐标。
    • 验证后:查看新坐标。检查新X ≈ 旧X + 5.2,新Y ≈ 旧Y - 2.8,新Z ≈ 3.0(允许有微小浮点数误差)。
  3. 测量工具验证
    • 使用软件内的“距离测量”工具。
    • 测量任意两个未移动的固定点(如两个建筑角点)的距离D1。
    • 找到与这两个固定点相对位置关系明确的两个标绘,测量它们移动后的距离D2。
    • 理论上,D1应等于D2。如果标绘是整体刚性平移,它们之间的相对距离不会改变。这可以验证平移过程是否产生了意外的旋转或扭曲。
  4. 数据导出验证:再次将“设备标绘”图层的属性导出为CSV(device_plot_after.csv)。与之前的device_plot_current.csv在Excel中进行对比,可以清晰看到每个点坐标的变化量是否与设计的偏移量一致。

7. 常见问题与排查思路

在实际操作中,你可能会遇到以下问题。这里提供了系统的排查指南。

问题现象可能原因排查方式解决方案
导入CSV后,软件提示“匹配到0个要素”1. 匹配字段选择错误。
2. CSV中的ID与场景中标绘的属性ID不完全一致(如空格、尾随字符)。
3. 标绘图层未正确选中或不可编辑。
1. 检查对话框中匹配字段是否选择了正确的属性字段(如Device_ID)。
2. 从场景中手动查看一个标绘的ID,与CSV中对应行的ID进行严格比对(复制粘贴对比)。
3. 确认目标图层已选中且处于可编辑状态。
1. 修正匹配字段。
2. 清洗CSV数据,确保ID完全一致。可使用TRIM()函数去除空格。
3. 解锁图层或切换到编辑模式。
部分标绘位置更新,部分未更新CSV文件中包含了场景中不存在的ID,或者部分标绘缺失用于匹配的属性值。1. 检查未更新的标绘,查看其Device_ID属性是否为空或异常。
2. 核对CSV文件,找出哪些ID在场景中不存在。
1. 为缺失ID的标绘补全属性。
2. 清理CSV文件,只保留场景中存在的ID。可以先导出所有ID作为基准。
标绘移动到了完全错误的位置1. 偏移量ΔX, ΔY的正负号弄反(方向错误)。
2. 偏移量单位错误(如输入了“厘米”但软件预期是“米”)。
3. 坐标系不匹配(如偏移量基于A坐标系,但场景是B坐标系)。
1. 检查1-2个样本的偏移量计算逻辑。
2. 确认软件中偏移量参数的单位。
3. 确认整个项目使用的坐标系是否统一。
立即撤销操作!
1. 重新计算并检查偏移量数据。
2. 进行小范围样本测试(如只对2个标绘操作)确认无误后,再全量运行。
执行批量操作后软件无响应或卡死1. 处理的标绘数量极大(数万以上)。
2. 软件内存不足。
3. CSV文件格式错误或过大。
1. 观察任务管理器中的软件内存和CPU占用。
2. 尝试对数据分块处理(如每次处理1000个)。
1. 关闭其他大型程序,释放内存。
2. 将CSV文件拆分成多个小文件,分批执行。
3. 检查CSV文件是否被其他程序占用。
高程(Z值)调整后,标绘陷入地下或漂浮过高1. ΔZ计算逻辑错误,未考虑原始高程。
2. 对“绝对高度”和“相对高度”概念混淆。
1. 复核ΔZ的计算公式。是想设置绝对高度(如所有点到海拔100米),还是相对抬升(所有点+10米)?
2. 检查场景地形的高程基准面。
明确需求:
-绝对高度:ΔZ = 目标高度 - 当前高度。
-相对抬升:ΔZ = 固定值。
在CSV中正确计算。

8. 最佳实践与工程建议

将“批量平移升降”从一个临时工具,升级为稳定可靠的工程化流程,需要遵循以下最佳实践:

  1. 标绘属性规范化是基石:在创建任何标绘之初,就定义好一套属性规范。至少包含一个全局唯一的ID字段(如UUID项目编码_序列号)。这是所有批量操作能够正确匹配的前提。
  2. 操作前必备份:在执行任何批量修改前,务必另存工程文件副本,或使用软件的“创建备份”功能。对于重要数据,甚至可以导出整个标绘图层为数据文件(如Shapefile、GeoJSON)。
  3. 采用“测试-验证-全量”流程
    • 测试:从生产数据中抽取一个小样本(如10个不同种类的标绘),制作测试CSV。
    • 验证:在测试工程或副本中运行批量操作,严格按第6节的方法验证。
    • 全量:测试无误后,再对全部数据执行操作。
  4. 文档化偏移量来源:在CSV文件或配套的README中,记录本次批量调整的原因、计算依据、负责人、执行日期。例如:“2023-10-27,因底图坐标系从BJ54转为CGCS2000,采用七参数转换模型计算得到平面偏移量(ΔX, ΔY),高程采用拟合曲面修正。”
  5. 与版本控制结合:如果你的项目使用Git等版本控制系统管理设计数据(如GeoJSON格式的标绘数据),那么批量平移操作实际上就是生成一份新的数据文件。通过提交差异,可以清晰追溯每一次批量调整的历史。
  6. 警惕“复合坐标系”场景:在有些项目中,水平坐标可能用地方坐标系(单位:米),而高程可能用海拔高(单位:米)或大地高。确保你的偏移量ΔZ与高程数据的基准一致。混合使用不同基准的高程数据是常见错误。
  7. 性能优化:当处理超过5000个标绘时,建议:
    • 关闭场景中不必要的其他图层,减少渲染负担。
    • 在软件设置中,暂时关闭标绘移动时的动画效果。
    • 如果软件支持,在脚本或批处理命令中执行,而非图形界面。

9. 总结与后续学习方向

“批量平移升降”功能,其技术原理并不复杂,但它在三维可视化工程项目中扮演着“效率杠杆”的角色。它将工程师从繁琐、重复、易错的手动操作中解放出来,让精力更多地集中在空间分析、业务逻辑和效果优化上。

通过本文,你应该掌握了从理解原理、准备数据、软件操作到验证排查的完整链条。关键在于建立起“数据驱动更新”的思维模式:将修改意图沉淀为一份结构化的数据(CSV表),然后让软件自动化执行。

下一步,你可以探索更多数据驱动的批量操作:

  • 批量属性更新:通过CSV文件,批量修改标绘的颜色、大小、图标样式、显示文本等属性,实现动态样式切换。
  • 批量生成与导入:直接根据业务数据表(如设备清单),批量生成三维标绘,实现从“数据”到“场景”的一键构建。
  • 与外部系统联动:探索如何通过图新说的API,将批量处理功能集成到你的项目管理系统或运维平台中,实现标绘位置的自动同步与更新。

效率的提升,始于对重复性工作的识别和工具化。希望“批量平移升降”能成为你三维可视化工具箱中一件趁手的利器,助你更从容地应对海量数据的挑战。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 11:52:07

Z-Image-Turbo人像训练:从数据到推理解决AI生成的“变脸”难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:51:03

VelocityNote:带本地AI的轻量纯文本Markdown笔记工具实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:50:40

SMG:单目动态3D重建的语义运动图方法解析

如果你正在做短视频编辑、3D 内容生产、虚拟拍摄或仿真数据生成&#xff0c;大概率已经撞上一堵墙&#xff1a;用手机随手拍一段动态视频容易&#xff0c;想把这短短几秒变成“可换视角、可编辑运动、可重新摆放”的 3D 场景却非常难。过去一年多&#xff0c;3D Gaussian Splat…

作者头像 李华
网站建设 2026/9/3 11:50:08

重视孩子的倾诉欲,耐心倾听比急于给出评判更关键

孩子从学校回来&#xff0c;兴致勃勃地讲述白天发生的趣事&#xff0c;或是皱着眉头诉说与同学之间的小摩擦&#xff0c;这个时候&#xff0c;很多家长的第一反应是立刻给出回应——“你应该这样做”、“这件事是你做得不对”。其实&#xff0c;孩子在开口的那一刻&#xff0c;…

作者头像 李华
网站建设 2026/9/3 11:49:09

WinUtil:Windows 批量安装与系统优化一站式方法

WinUtil&#xff1a;Windows 批量安装与系统优化一站式方法 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil WinUtil&#xff08;Chris Titus …

作者头像 李华