shapes.py 2.8 KB

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