copper1fzp.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # usage:
  2. # copper1fzp.py -d [fzp folder]
  3. # adds a copper1 layer if there isn't one found already.
  4. import getopt, sys, os, os.path, re, xml.dom.minidom, xml.dom
  5. def usage():
  6. print """
  7. usage:
  8. copper1fzp.py -d [fzp folder]
  9. adds a copper1 layer if there isn't one found already.
  10. """
  11. def main():
  12. try:
  13. opts, args = getopt.getopt(sys.argv[1:], "hd:", ["help", "directory"])
  14. except getopt.GetoptError, err:
  15. # print help information and exit:
  16. print str(err) # will print something like "option -a not recognized"
  17. usage()
  18. sys.exit(2)
  19. dir = None
  20. for o, a in opts:
  21. #print o
  22. #print a
  23. if o in ("-d", "--directory"):
  24. dir = a
  25. elif o in ("-h", "--help"):
  26. usage()
  27. sys.exit(2)
  28. else:
  29. assert False, "unhandled option"
  30. if(not(dir)):
  31. usage()
  32. sys.exit(2)
  33. for root, dirs, files in os.walk(dir, topdown=False):
  34. for filename in files:
  35. if not filename.endswith(".fzp"):
  36. continue
  37. fzpFilename = os.path.join(root, filename)
  38. try:
  39. dom = xml.dom.minidom.parse(fzpFilename)
  40. except xml.parsers.expat.ExpatError, err:
  41. print str(err), fzpFilename
  42. continue
  43. fzp = dom.documentElement
  44. pcbViewNodes = fzp.getElementsByTagName("pcbView")
  45. needsCopper1 = 0
  46. for pcbView in pcbViewNodes:
  47. layersNodes = pcbView.getElementsByTagName("layers")
  48. if layersNodes.length == 1:
  49. viewsLayers = layersNodes.item(0)
  50. copper0 = None
  51. copper1 = None
  52. for layer in viewsLayers.getElementsByTagName("layer"):
  53. if layer.getAttribute("layerId") == "copper1":
  54. copper1 = layer
  55. elif layer.getAttribute("layerId") == "copper0":
  56. copper0 = layer
  57. if not copper1 and copper0:
  58. needsCopper1 = 1
  59. copper1 = dom.createElement("layer")
  60. copper1.setAttribute("layerId", "copper1")
  61. viewsLayers.appendChild(copper1)
  62. else:
  63. break
  64. else:
  65. connectorsView = pcbView
  66. copper1 = None
  67. copper0 = None
  68. for p in connectorsView.getElementsByTagName("p"):
  69. if p.getAttribute("layer") == "copper1":
  70. copper1 = p
  71. elif p.getAttribute("layer") == "copper0":
  72. copper0 = p
  73. if copper0 and not copper1:
  74. copper1 = dom.createElement("p")
  75. copper1.setAttribute("layer", "copper1")
  76. copper1.setAttribute("svgId", copper0.getAttribute("svgId"))
  77. connectorsView.appendChild(copper1)
  78. if not needsCopper1:
  79. print "no copper1 needed for", fzpFilename
  80. continue
  81. print "adding copper1 to", fzpFilename
  82. outfile = open(fzpFilename, 'wb')
  83. s = dom.toxml("UTF-8")
  84. outfile.write(s)
  85. outfile.flush()
  86. outfile.close()
  87. if __name__ == "__main__":
  88. main()