shapes.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # Copyright (c) 2010-2024 openpyxl
  2. from openpyxl.descriptors.serialisable import Serialisable
  3. from openpyxl.descriptors import (
  4. Typed,
  5. Alias
  6. )
  7. from openpyxl.descriptors.nested import (
  8. EmptyTag
  9. )
  10. from openpyxl.drawing.colors import ColorChoiceDescriptor
  11. from openpyxl.drawing.fill import *
  12. from openpyxl.drawing.line import LineProperties
  13. from openpyxl.drawing.geometry import (
  14. Shape3D,
  15. Scene3D,
  16. Transform2D,
  17. CustomGeometry2D,
  18. PresetGeometry2D,
  19. )
  20. class GraphicalProperties(Serialisable):
  21. """
  22. Somewhat vaguely 21.2.2.197 says this:
  23. This element specifies the formatting for the parent chart element. The
  24. custGeom, prstGeom, scene3d, and xfrm elements are not supported. The
  25. bwMode attribute is not supported.
  26. This doesn't leave much. And the element is used in different places.
  27. """
  28. tagname = "spPr"
  29. bwMode = NoneSet(values=(['clr', 'auto', 'gray', 'ltGray', 'invGray',
  30. 'grayWhite', 'blackGray', 'blackWhite', 'black', 'white', 'hidden']
  31. )
  32. )
  33. xfrm = Typed(expected_type=Transform2D, allow_none=True)
  34. transform = Alias('xfrm')
  35. custGeom = Typed(expected_type=CustomGeometry2D, allow_none=True) # either or
  36. prstGeom = Typed(expected_type=PresetGeometry2D, allow_none=True)
  37. # fills one of
  38. noFill = EmptyTag(namespace=DRAWING_NS)
  39. solidFill = ColorChoiceDescriptor()
  40. gradFill = Typed(expected_type=GradientFillProperties, allow_none=True)
  41. pattFill = Typed(expected_type=PatternFillProperties, allow_none=True)
  42. ln = Typed(expected_type=LineProperties, allow_none=True)
  43. line = Alias('ln')
  44. scene3d = Typed(expected_type=Scene3D, allow_none=True)
  45. sp3d = Typed(expected_type=Shape3D, allow_none=True)
  46. shape3D = Alias('sp3d')
  47. extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
  48. __elements__ = ('xfrm', 'prstGeom', 'noFill', 'solidFill', 'gradFill', 'pattFill',
  49. 'ln', 'scene3d', 'sp3d')
  50. def __init__(self,
  51. bwMode=None,
  52. xfrm=None,
  53. noFill=None,
  54. solidFill=None,
  55. gradFill=None,
  56. pattFill=None,
  57. ln=None,
  58. scene3d=None,
  59. custGeom=None,
  60. prstGeom=None,
  61. sp3d=None,
  62. extLst=None,
  63. ):
  64. self.bwMode = bwMode
  65. self.xfrm = xfrm
  66. self.noFill = noFill
  67. self.solidFill = solidFill
  68. self.gradFill = gradFill
  69. self.pattFill = pattFill
  70. if ln is None:
  71. ln = LineProperties()
  72. self.ln = ln
  73. self.custGeom = custGeom
  74. self.prstGeom = prstGeom
  75. self.scene3d = scene3d
  76. self.sp3d = sp3d