| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- # Copyright (c) 2010-2024 openpyxl
- import math
- from openpyxl.utils.units import pixels_to_EMU
- class Drawing:
- """ a drawing object - eg container for shapes or charts
- we assume user specifies dimensions in pixels; units are
- converted to EMU in the drawing part
- """
- count = 0
- def __init__(self):
- self.name = ''
- self.description = ''
- self.coordinates = ((1, 2), (16, 8))
- self.left = 0
- self.top = 0
- self._width = 21 # default in px
- self._height = 192 #default in px
- self.resize_proportional = False
- self.rotation = 0
- self.anchortype = "absolute"
- self.anchorcol = 0 # left cell
- self.anchorrow = 0 # top row
- @property
- def width(self):
- return self._width
- @width.setter
- def width(self, w):
- if self.resize_proportional and w:
- ratio = self._height / self._width
- self._height = round(ratio * w)
- self._width = w
- @property
- def height(self):
- return self._height
- @height.setter
- def height(self, h):
- if self.resize_proportional and h:
- ratio = self._width / self._height
- self._width = round(ratio * h)
- self._height = h
- def set_dimension(self, w=0, h=0):
- xratio = w / self._width
- yratio = h / self._height
- if self.resize_proportional and w and h:
- if (xratio * self._height) < h:
- self._height = math.ceil(xratio * self._height)
- self._width = w
- else:
- self._width = math.ceil(yratio * self._width)
- self._height = h
- @property
- def anchor(self):
- from .spreadsheet_drawing import (
- OneCellAnchor,
- TwoCellAnchor,
- AbsoluteAnchor)
- if self.anchortype == "absolute":
- anchor = AbsoluteAnchor()
- anchor.pos.x = pixels_to_EMU(self.left)
- anchor.pos.y = pixels_to_EMU(self.top)
- elif self.anchortype == "oneCell":
- anchor = OneCellAnchor()
- anchor._from.col = self.anchorcol
- anchor._from.row = self.anchorrow
- anchor.ext.width = pixels_to_EMU(self._width)
- anchor.ext.height = pixels_to_EMU(self._height)
- return anchor
|