12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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")
|