import json import math import xml.etree.ElementTree as ET import re import os import plistlib # 2024-11-12 增加从情况文件读取盘子和钉子的scale参数 # 转换盘子显示名称到sprite名称 # ‘plate_wh_03_8_三角圆弧’ 转换成sprite名称 plate_wh_03_8.png def tranformDName2SName(displayName): startpos = 0 for i in [1,2,3,4]: startpos = displayName.index('_', startpos) + 1 if startpos == -1: break if startpos == -1: return displayName else: return displayName[0:startpos-1]+".png" # 文件名转换 plate_wh_01_1_ 小方形_盘子情况.red 转换为 plate_wh_01_1_H.json def fnameTransform2(displayName): startpos = 0 for i in [1,2,3,4]: startpos = displayName.index('_', startpos) + 1 if startpos == -1: break if startpos == -1: return displayName else: return displayName[0:startpos-1]+"_H.json" def getPropertyValues(obj,pptname,defaultValues): for ppt1 in obj["properties"]: if ppt1["name"] == pptname: return ppt1["value"] return defaultValues # 盘子情况(孔位)转JSON def readOnePlateWithHoles( name ): redfilename = "../ccb/盘子上位置情况/" + name plate_obj = {} # position always 0,0 in center and no size property! with open(redfilename,'rb') as fileobject: plist_root = plistlib.load(fileobject,fmt=plistlib.FMT_XML) children = plist_root['nodeGraph']['children'] ichild = 0 plate_obj["holes"] = [] for child in children: ichild = ichild + 1 if ichild==1: name1 = child["displayName"] # 把显示名称 ‘plate_wh_03_8_三角圆弧’ 转换成sprite名称 plate_wh_03_8.png name2 = tranformDName2SName(name1) plate_obj["name"] = name2 scale_arr = getPropertyValues(child,"scale",[1.0,1.0]) plate_obj["scale_x"] = scale_arr[0] plate_obj["scale_y"] = scale_arr[1] else: hole1 = {} hole1["x"] = child["properties"][0]["value"][0] hole1["y"] = child["properties"][0]["value"][1] scale_arr = getPropertyValues(child, "scale", [1.0, 1.0]) hole1["scale_x"] = scale_arr[0] hole1["scale_y"] = scale_arr[1] plate_obj["holes"].append(hole1) return plate_obj # 写入JSON文件 def writeJsonFile( obj, jsonbasename ): fullname = "../config/盘子孔位JSON/" + jsonbasename with open(fullname,'w') as fileobject: fileobject.write(json.dumps(obj,ensure_ascii=False)) ## 程序入口 -------------------------------------- #读取 ../ccb/盘子上位置情况/ 下面全部red文件,转换成json写入 盘子孔位JSON 文件夹。 for (root,dirs,files) in os.walk('../ccb/盘子上位置情况',topdown=True): for fname in files: if( "情况" in fname and ".red" in fname ): kongwei_filename = fname out_name = fnameTransform2(kongwei_filename) print("read ", kongwei_filename) holes_obj = readOnePlateWithHoles(kongwei_filename) print("write ", out_name) writeJsonFile(holes_obj, out_name) print("done")