CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes | Static Public Attributes
svgfig.Poly Class Reference

Public Member Functions

def __init__ (self, d=[], mode="L", loop=False, attr)
 
def __repr__ (self)
 
def Path (self, trans=None, local=False)
 
def SVG (self, trans=None)
 

Public Attributes

 attr
 
 d
 
 loop
 
 mode
 

Static Public Attributes

dictionary defaults = {}
 

Detailed Description

Draws a curve specified by a sequence of points. The curve may be
piecewise linear, like a polygon, or a Bezier curve.

Poly(d, mode, loop, attribute=value)

d                       required        list of tuples representing points
                                        and possibly control points
mode                    default="L"   "lines", "bezier", "velocity",
                                        "foreback", "smooth", or an abbreviation
loop                    default=False   if True, connect the first and last
                                        point, closing the loop
attribute=value pairs   keyword list    SVG attributes

The format of the tuples in d depends on the mode.

"lines"/"L"         d=[(x,y), (x,y), ...]
                                        piecewise-linear segments joining the (x,y) points
"bezier"/"B"        d=[(x, y, c1x, c1y, c2x, c2y), ...]
                                        Bezier curve with two control points (control points
                                        preceed (x,y), as in SVG paths). If (c1x,c1y) and
                                        (c2x,c2y) both equal (x,y), you get a linear
                                        interpolation ("lines")
"velocity"/"V"      d=[(x, y, vx, vy), ...]
                                        curve that passes through (x,y) with velocity (vx,vy)
                                        (one unit of arclength per unit time); in other words,
                                        (vx,vy) is the tangent vector at (x,y). If (vx,vy) is
                                        (0,0), you get a linear interpolation ("lines").
"foreback"/"F"      d=[(x, y, bx, by, fx, fy), ...]
                                        like "velocity" except that there is a left derivative
                                        (bx,by) and a right derivative (fx,fy). If (bx,by)
                                        equals (fx,fy) (with no minus sign), you get a
                                        "velocity" curve
"smooth"/"S"        d=[(x,y), (x,y), ...]
                                        a "velocity" interpolation with (vx,vy)[i] equal to
                                        ((x,y)[i+1] - (x,y)[i-1])/2: the minimal derivative

Definition at line 1680 of file svgfig.py.

Constructor & Destructor Documentation

def svgfig.Poly.__init__ (   self,
  d = [],
  mode = "L",
  loop = False,
  attr 
)

Definition at line 1722 of file svgfig.py.

1722  def __init__(self, d=[], mode="L", loop=False, **attr):
1723  self.d = list(d)
1724  self.mode = mode
1725  self.loop = loop
1726 
1727  self.attr = dict(self.defaults)
1728  self.attr.update(attr)
1729 
dictionary defaults
Definition: svgfig.py:1717
def __init__(self, d=[], mode="L", loop=False, attr)
Definition: svgfig.py:1722
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run

Member Function Documentation

def svgfig.Poly.__repr__ (   self)

Definition at line 1719 of file svgfig.py.

References svgfig.SVG.attr, svgfig.Path.attr, svgfig.Curve.attr, svgfig.Poly.attr, svgfig.Fig.d, svgfig.Plot.d, svgfig.Frame.d, svgfig.Path.d, svgfig.Poly.d, svgfig.Curve.loop, svgfig.Poly.loop, and svgfig.Poly.mode.

Referenced by data_sources.json_file.__str__().

1719  def __repr__(self):
1720  return "<Poly (%d nodes) mode=%s loop=%s %s>" % (len(self.d), self.mode, repr(self.loop), self.attr)
1721 
def __repr__(self)
Definition: svgfig.py:1719
def svgfig.Poly.Path (   self,
  trans = None,
  local = False 
)
Apply the transformation "trans" and return a Path object in
global coordinates.  If local=True, return a Path in local coordinates
(which must be transformed again).

Definition at line 1734 of file svgfig.py.

References svgfig.SVG.attr, svgfig.Path.attr, svgfig.Curve.attr, svgfig.Poly.attr, svgfig.Fig.d, svgfig.Plot.d, svgfig.Frame.d, svgfig.Path.d, svgfig.Poly.d, list(), svgfig.Curve.loop, svgfig.Poly.loop, svgfig.Poly.mode, and svgfig.totrans().

Referenced by svgfig.Poly.SVG().

1734  def Path(self, trans=None, local=False):
1735  """Apply the transformation "trans" and return a Path object in
1736  global coordinates. If local=True, return a Path in local coordinates
1737  (which must be transformed again)."""
1738  if isinstance(trans, str): trans = totrans(trans)
1739 
1740  if self.mode[0] == "L" or self.mode[0] == "l": mode = "L"
1741  elif self.mode[0] == "B" or self.mode[0] == "b": mode = "B"
1742  elif self.mode[0] == "V" or self.mode[0] == "v": mode = "V"
1743  elif self.mode[0] == "F" or self.mode[0] == "f": mode = "F"
1744  elif self.mode[0] == "S" or self.mode[0] == "s":
1745  mode = "S"
1746 
1747  vx, vy = [0.]*len(self.d), [0.]*len(self.d)
1748  for i in range(len(self.d)):
1749  inext = (i+1) % len(self.d)
1750  iprev = (i-1) % len(self.d)
1751 
1752  vx[i] = (self.d[inext][0] - self.d[iprev][0])/2.
1753  vy[i] = (self.d[inext][1] - self.d[iprev][1])/2.
1754  if not self.loop and (i == 0 or i == len(self.d)-1):
1755  vx[i], vy[i] = 0., 0.
1756 
1757  else:
1758  raise ValueError("mode must be \"lines\", \"bezier\", \"velocity\", \"foreback\", \"smooth\", or an abbreviation")
1759 
1760  d = []
1761  indexes = list(range(len(self.d)))
1762  if self.loop and len(self.d) > 0: indexes.append(0)
1763 
1764  for i in indexes:
1765  inext = (i+1) % len(self.d)
1766  iprev = (i-1) % len(self.d)
1767 
1768  x, y = self.d[i][0], self.d[i][1]
1769 
1770  if trans == None: X, Y = x, y
1771  else: X, Y = trans(x, y)
1772 
1773  if d == []:
1774  if local: d.append(("M", x, y, False))
1775  else: d.append(("M", X, Y, True))
1776 
1777  elif mode == "L":
1778  if local: d.append(("L", x, y, False))
1779  else: d.append(("L", X, Y, True))
1780 
1781  elif mode == "B":
1782  c1x, c1y = self.d[i][2], self.d[i][3]
1783  if trans == None: C1X, C1Y = c1x, c1y
1784  else: C1X, C1Y = trans(c1x, c1y)
1785 
1786  c2x, c2y = self.d[i][4], self.d[i][5]
1787  if trans == None: C2X, C2Y = c2x, c2y
1788  else: C2X, C2Y = trans(c2x, c2y)
1789 
1790  if local: d.append(("C", c1x, c1y, False, c2x, c2y, False, x, y, False))
1791  else: d.append(("C", C1X, C1Y, True, C2X, C2Y, True, X, Y, True))
1792 
1793  elif mode == "V":
1794  c1x, c1y = self.d[iprev][2]/3. + self.d[iprev][0], self.d[iprev][3]/3. + self.d[iprev][1]
1795  c2x, c2y = self.d[i][2]/-3. + x, self.d[i][3]/-3. + y
1796 
1797  if trans == None: C1X, C1Y = c1x, c1y
1798  else: C1X, C1Y = trans(c1x, c1y)
1799  if trans == None: C2X, C2Y = c2x, c2y
1800  else: C2X, C2Y = trans(c2x, c2y)
1801 
1802  if local: d.append(("C", c1x, c1y, False, c2x, c2y, False, x, y, False))
1803  else: d.append(("C", C1X, C1Y, True, C2X, C2Y, True, X, Y, True))
1804 
1805  elif mode == "F":
1806  c1x, c1y = self.d[iprev][4]/3. + self.d[iprev][0], self.d[iprev][5]/3. + self.d[iprev][1]
1807  c2x, c2y = self.d[i][2]/-3. + x, self.d[i][3]/-3. + y
1808 
1809  if trans == None: C1X, C1Y = c1x, c1y
1810  else: C1X, C1Y = trans(c1x, c1y)
1811  if trans == None: C2X, C2Y = c2x, c2y
1812  else: C2X, C2Y = trans(c2x, c2y)
1813 
1814  if local: d.append(("C", c1x, c1y, False, c2x, c2y, False, x, y, False))
1815  else: d.append(("C", C1X, C1Y, True, C2X, C2Y, True, X, Y, True))
1816 
1817  elif mode == "S":
1818  c1x, c1y = vx[iprev]/3. + self.d[iprev][0], vy[iprev]/3. + self.d[iprev][1]
1819  c2x, c2y = vx[i]/-3. + x, vy[i]/-3. + y
1820 
1821  if trans == None: C1X, C1Y = c1x, c1y
1822  else: C1X, C1Y = trans(c1x, c1y)
1823  if trans == None: C2X, C2Y = c2x, c2y
1824  else: C2X, C2Y = trans(c2x, c2y)
1825 
1826  if local: d.append(("C", c1x, c1y, False, c2x, c2y, False, x, y, False))
1827  else: d.append(("C", C1X, C1Y, True, C2X, C2Y, True, X, Y, True))
1828 
1829  if self.loop and len(self.d) > 0: d.append(("Z",))
1830 
1831  return Path(d, **self.attr)
1832 
def Path(self, trans=None, local=False)
Definition: svgfig.py:1734
def totrans(expr, vars=("x","y"), globals=None, locals=None)
Definition: svgfig.py:598
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
def svgfig.Poly.SVG (   self,
  trans = None 
)
Apply the transformation "trans" and return an SVG object.

Definition at line 1730 of file svgfig.py.

References SiStripHistoPlotter::PlotParameter.Path, Json::PathArgument.Path, svgfig.Curve.Path(), and svgfig.Poly.Path().

1730  def SVG(self, trans=None):
1731  """Apply the transformation "trans" and return an SVG object."""
1732  return self.Path(trans).SVG()
1733 
def Path(self, trans=None, local=False)
Definition: svgfig.py:1734
def SVG(self, trans=None)
Definition: svgfig.py:1730

Member Data Documentation

svgfig.Poly.attr
svgfig.Poly.d
dictionary svgfig.Poly.defaults = {}
static

Definition at line 1717 of file svgfig.py.

Referenced by tree.Tree.reset(), and tree.Tree.var().

svgfig.Poly.loop

Definition at line 1725 of file svgfig.py.

Referenced by svgfig.Poly.__repr__(), and svgfig.Poly.Path().

svgfig.Poly.mode