Goulib.drawing module

Read/Write and handle vector graphics in .dxf, .svg and .pdf formats

requires:
optional:
Goulib.drawing.Trans(scale=1, offset=None, rotation=None)[source]
Parameters:
  • scale – float or (scalex,scaley) tuple of scale factor
  • offsetVector3
  • rotation – float angle in degrees
Returns:

Matrix3 of generalized scale+offset+rotation

class Goulib.drawing.BBox(p1=None, p2=None)[source]

Bases: Goulib.interval.Box

bounding box

Parameters:
  • pt1Point2 first corner (any)
  • pt2Point2 opposite corner (any)
__init__(p1=None, p2=None)[source]
Parameters:
  • pt1Point2 first corner (any)
  • pt2Point2 opposite corner (any)
xmin
ymin
xmax
ymax
xmed
ymed
width
height
area
__contains__(other)[source]
Returns:True if other lies in bounding box.
__iadd__(pt)[source]

enlarge box if required to contain specified point :param pt1: geom.Point2 point to add

__call__()[source]
Returns:list of flatten corners
size()[source]
Returns:geom.Vector2 with xy sizes
center()[source]
Returns:Pt center
trans(trans)[source]
Parameters:trans – Xform
Returns:BBox = self transformed by trans
class Goulib.drawing.Entity[source]

Bases: Goulib.plot.Plot

Base class for all drawing entities

color = 'black'
setattr(**kwargs)[source]

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

start
end
__repr__()[source]

Return repr(self).

center
bbox()[source]
Returns:BBox bounding box of Entity
isclosed()[source]
isline()[source]
isvertical(tol=0.01)[source]
ishorizontal(tol=0.01)[source]
to_dxf(**attr)[source]
Parameters:attr – dict of attributes passed to the dxf entity, overriding those defined in self
Returns:dxf entity
static from_svg(path, color)[source]
Parameters:path – svg path
Returns:Entity of correct subtype
static from_pdf(path, trans, color)[source]
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_dxf(e, mat3)[source]
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

patches(**kwargs)[source]
Returns:list of (a single) Patch corresponding to entity
Note:this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
static figure(box, **kwargs)[source]
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

draw(fig=None, **kwargs)[source]

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

render(fmt, **kwargs)[source]

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

class Goulib.drawing.Spline(points)[source]

Bases: Goulib.drawing.Entity, Goulib.geom.Geometry

cubic spline segment

Parameters:points – list of (x,y) tuples
__init__(points)[source]
Parameters:points – list of (x,y) tuples
start
end
xy
length
Returns:float (very) approximate length
bbox()[source]
Returns:BBox bounding box of Entity
swap()[source]

swap start and end

__abstractmethods__ = frozenset()
class Goulib.drawing.Group[source]

Bases: list, Goulib.drawing._Group

group of Entities but it is a Geometry since we can intersect, connect and compute distances between Groups

color

str(object=’‘) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.

layer
append(entity, **kwargs)[source]

append entity to group :param entity: Entity :param kwargs: dict of attributes copied to entity :return: Group (or Chain) to which the entity was added, or None if entity was None

extend(entities, **kwargs)[source]

Extend list by appending elements from the iterable.

__copy__()[source]
swap()[source]

swap start and end

chainify(mergeable)[source]

merge all possible entities into chains

from_dxf(dxf, layers=None, only=[], ignore=['POINT'], trans=Matrix3(1.0, 0, 0, 0, 1.0, 0, 0, 0, 1.0), flatten=False)[source]
Parameters:
  • dxf – dxf.entity
  • layers – list of layer names to consider. entities not on these layers are ignored. default=None: all layers are read
  • only – list of dxf entity types names that are read. default=[]: all are read
  • ignore – list of dxf entity types names that are ignored. default=[‘POINT’]: points and null length segments are ignored
  • transTrans optional transform matrix
Parm flatten:

bool flatten block structure

Returns:

Entity of correct subtype

__abstractmethods__ = frozenset()
class Goulib.drawing.Instance(group, trans)[source]

Bases: Goulib.drawing._Group

Parameters:
  • group – Group
  • trans – optional mat3 of transformation
__init__(group, trans)[source]
Parameters:
  • group – Group
  • trans – optional mat3 of transformation
static from_dxf(e, blocks, mat3)[source]
Parameters:
  • e – dxf.entity
  • blocks – dict of Groups indexed by name
  • mat3 – Matrix3 transform
__repr__()[source]

Return repr(self).

__iter__()[source]
__abstractmethods__ = frozenset()
class Goulib.drawing.Chain(data=[])[source]

Bases: Goulib.drawing.Group

group of contiguous Entities (Polyline or similar)

__init__(data=[])[source]

Initialize self. See help(type(self)) for accurate signature.

start
end
__repr__()[source]

Return repr(self).

contiguous(edge, abs_tol=1e-06, allow_swap=True)[source]

check if edge can be appended to the chain :param edge: Entity to append :param tol: float tolerance on contiguity :param allow_swap: if True (default), tries to swap edge or self to find contiguity :return: int,bool index where to append in chain, swap of edge required

append(entity, tol=1e-06, allow_swap=True, mergeable=None, **attrs)[source]

append entity to chain, ensuring contiguity :param entity: Entity to append :param tol: float tolerance on contiguity :param allow_swap: if True (default), tries to swap edge or self to find contiguity :param mergeable: function of the form f(e1,e2) returning True if entities e1,e2 can be merged :param attrs: attributes passed to Group.append :return: self, or None if edge is not contiguous

static from_pdf(path, trans, color)[source]
Parameters:path – pdf path
Returns:Entity of correct subtype
See:http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf p. 132
static from_svg(path, color)[source]
Parameters:path – svg path
Returns:Entity of correct subtype
static from_dxf(e, mat3)[source]
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

to_dxf(split=False, **attr)[source]
Parameters:
  • split – bool if True, each segment in Chain is saved separately
  • attr – dict of graphic attributes
Returns:

polyline or list of entities along the chain

__abstractmethods__ = frozenset()
Goulib.drawing.chains(group, tol=1e-06, mergeable=None)[source]

build chains from all possible segments in group :param mergeable: function(e1,e2) returning True if entities e1,e2 can be merged

class Goulib.drawing.Rect(*args)[source]

Bases: Goulib.drawing.Chain

a rectangle starting at low/left and going trigowise through top/right

__init__(*args)[source]

Initialize self. See help(type(self)) for accurate signature.

p1
p2
__repr__()[source]

Return repr(self).

__abstractmethods__ = frozenset()
class Goulib.drawing.Text(text, point, size=12, rotation=0)[source]

Bases: Goulib.drawing.Entity

Parameters:
  • text – string
  • point – Point2
  • size – size in points
  • rotation – float angle in degrees trigowise
__init__(text, point, size=12, rotation=0)[source]
Parameters:
  • text – string
  • point – Point2
  • size – size in points
  • rotation – float angle in degrees trigowise
bbox()[source]
Returns:BBox bounding box of Entity
length
Returns:float length of the text contour in mm
intersect(other)[source]
to_dxf(**attr)[source]
Parameters:attr – dict of attributes passed to the dxf entity, overriding those defined in self
Returns:dxf entity
patches(**kwargs)[source]
Returns:list of (a single) Patch corresponding to entity
class Goulib.drawing.Drawing(data=[], **kwargs)[source]

Bases: Goulib.drawing.Group

list of Entities representing a vector graphics drawing

__init__(data=[], **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

load(filename, **kwargs)[source]
read_pdf(filename, **kwargs)[source]

reads a vector graphics on a .pdf file only the first page is parsed

read_svg(content, **kwargs)[source]

appends svg content to drawing :param content: string, either filename or svg content

__abstractmethods__ = frozenset()
read_dxf(filename, options=None, **kwargs)[source]

reads a .dxf file :param filename: string path to .dxf file to read :param options: passed to from_dxf

save(filename, **kwargs)[source]

save graph in various formats

Classes

Inheritance diagram of BBox, Entity, Spline, Group, Chain, Drawing

Read/Write and handle vector graphics in .dxf, .svg and .pdf formats

requires:
optional:
Goulib.drawing.Trans(scale=1, offset=None, rotation=None)[source]
Parameters:
  • scale – float or (scalex,scaley) tuple of scale factor
  • offsetVector3
  • rotation – float angle in degrees
Returns:

Matrix3 of generalized scale+offset+rotation

class Goulib.drawing.BBox(p1=None, p2=None)[source]

Bases: Goulib.interval.Box

bounding box

Parameters:
  • pt1Point2 first corner (any)
  • pt2Point2 opposite corner (any)
__init__(p1=None, p2=None)[source]
Parameters:
  • pt1Point2 first corner (any)
  • pt2Point2 opposite corner (any)
xmin
ymin
xmax
ymax
xmed
ymed
width
height
area
__contains__(other)[source]
Returns:True if other lies in bounding box.
__iadd__(pt)[source]

enlarge box if required to contain specified point :param pt1: geom.Point2 point to add

__call__()[source]
Returns:list of flatten corners
size()[source]
Returns:geom.Vector2 with xy sizes
center()[source]
Returns:Pt center
trans(trans)[source]
Parameters:trans – Xform
Returns:BBox = self transformed by trans
__add__(other)

enlarge box if required to contain specified point :param other: Box or (list of) N-tuple point(s) :return: new Box containing both

__class__

alias of builtins.type

__delattr__

Implement delattr(self, name).

__delitem__

Delete self[key].

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__getitem__()

x.__getitem__(y) <==> x[y]

__gt__

Return self>value.

__hash__ = None
__imul__

Implement self*=value.

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__iter__

Implement iter(self).

__le__

Return self<=value.

__len__

Return len(self).

__lt__

Return self<value.

__mul__

Return self*value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__nonzero__()
__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__repr__

Return repr(self).

__reversed__()

Return a reverse iterator over the list.

__rmul__

Return value*self.

__setattr__

Implement setattr(self, name, value).

__setitem__

Set self[key] to value.

__sizeof__()

Return the size of the list in memory, in bytes.

__str__

Return str(self).

append()

Append object to the end of the list.

clear()

Remove all items from list.

copy()

Return a shallow copy of the list.

corner(n)

return n-th corner of box 0-th corner is “start” made of all minimal values of intervals -1.th corner is “end”, made of all maximal values of intervals

count()

Return number of occurrences of value.

empty()
Returns:True iff Box is empty.
end
extend()

Extend list by appending elements from the iterable.

index()

Return first index of value.

Raises ValueError if the value is not present.

insert()

Insert object before index.

max
min
pop()

Remove and return item at index (default last).

Raises IndexError if list is empty or index is out of range.

remove()

Remove first occurrence of value.

Raises ValueError if the value is not present.

reverse()

Reverse IN PLACE.

sort()

Stable sort IN PLACE.

start
class Goulib.drawing.Entity[source]

Bases: Goulib.plot.Plot

Base class for all drawing entities

color = 'black'
setattr(**kwargs)[source]

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

start
end
__repr__()[source]

Return repr(self).

center
bbox()[source]
Returns:BBox bounding box of Entity
isclosed()[source]
isline()[source]
isvertical(tol=0.01)[source]
ishorizontal(tol=0.01)[source]
to_dxf(**attr)[source]
Parameters:attr – dict of attributes passed to the dxf entity, overriding those defined in self
Returns:dxf entity
static from_svg(path, color)[source]
Parameters:path – svg path
Returns:Entity of correct subtype
static from_pdf(path, trans, color)[source]
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_dxf(e, mat3)[source]
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

patches(**kwargs)[source]
Returns:list of (a single) Patch corresponding to entity
Note:this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
static figure(box, **kwargs)[source]
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

draw(fig=None, **kwargs)[source]

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

render(fmt, **kwargs)[source]

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

__class__

alias of builtins.type

__delattr__

Implement delattr(self, name).

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init__

Initialize self. See help(type(self)) for accurate signature.

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__le__

Return self<=value.

__lt__

Return self<value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__setattr__

Implement setattr(self, name, value).

__sizeof__()

Size of object in memory, in bytes.

__str__

Return str(self).

html(**kwargs)
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
save(filename, **kwargs)
svg(**kwargs)
class Goulib.drawing.Spline(points)[source]

Bases: Goulib.drawing.Entity, Goulib.geom.Geometry

cubic spline segment

Parameters:points – list of (x,y) tuples
__init__(points)[source]
Parameters:points – list of (x,y) tuples
start
end
xy
length
Returns:float (very) approximate length
bbox()[source]
Returns:BBox bounding box of Entity
swap()[source]

swap start and end

__abstractmethods__ = frozenset()
__class__

alias of abc.ABCMeta

__contains__(pt)
__delattr__

Implement delattr(self, name).

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__le__

Return self<=value.

__lt__

Return self<value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__repr__()

Return repr(self).

__setattr__

Implement setattr(self, name, value).

__sizeof__()

Size of object in memory, in bytes.

__str__

Return str(self).

center
color = 'black'
connect(other)
Returns:Geometry shortest (Segment2 or Segment3) that connects self to other
distance(other)
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

static from_dxf(e, mat3)
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

static from_pdf(path, trans, color)
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_svg(path, color)
Parameters:path – svg path
Returns:Entity of correct subtype
html(**kwargs)
intersect(other)
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
patches(**kwargs)
Returns:list of (a single) Patch corresponding to entity
Note:this is the only method that needs to be overridden in descendants for draw, render and IPython _repr_xxx_ to work
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
point(u)
Returns:Point2 or Point3 at parameter u
render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

save(filename, **kwargs)
setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

svg(**kwargs)
tangent(u)
Returns:Vector2 or Vector3 tangent at parameter u
to_dxf(**attr)
Parameters:attr – dict of attributes passed to the dxf entity, overriding those defined in self
Returns:dxf entity
class Goulib.drawing.Group[source]

Bases: list, Goulib.drawing._Group

group of Entities but it is a Geometry since we can intersect, connect and compute distances between Groups

color

str(object=’‘) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.

layer
append(entity, **kwargs)[source]

append entity to group :param entity: Entity :param kwargs: dict of attributes copied to entity :return: Group (or Chain) to which the entity was added, or None if entity was None

extend(entities, **kwargs)[source]

Extend list by appending elements from the iterable.

__copy__()[source]
swap()[source]

swap start and end

chainify(mergeable)[source]

merge all possible entities into chains

from_dxf(dxf, layers=None, only=[], ignore=['POINT'], trans=Matrix3(1.0, 0, 0, 0, 1.0, 0, 0, 0, 1.0), flatten=False)[source]
Parameters:
  • dxf – dxf.entity
  • layers – list of layer names to consider. entities not on these layers are ignored. default=None: all layers are read
  • only – list of dxf entity types names that are read. default=[]: all are read
  • ignore – list of dxf entity types names that are ignored. default=[‘POINT’]: points and null length segments are ignored
  • transTrans optional transform matrix
Parm flatten:

bool flatten block structure

Returns:

Entity of correct subtype

__abstractmethods__ = frozenset()
__add__

Return self+value.

__class__

alias of abc.ABCMeta

__contains__

Return key in self.

__delattr__

Implement delattr(self, name).

__delitem__

Delete self[key].

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__getitem__()

x.__getitem__(y) <==> x[y]

__gt__

Return self>value.

__hash__ = None
__iadd__

Implement self+=value.

__imul__

Implement self*=value.

__init__

Initialize self. See help(type(self)) for accurate signature.

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__iter__

Implement iter(self).

__le__

Return self<=value.

__len__

Return len(self).

__lt__

Return self<value.

__mul__

Return self*value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__repr__

Return repr(self).

__reversed__()

Return a reverse iterator over the list.

__rmul__

Return value*self.

__setattr__

Implement setattr(self, name, value).

__setitem__

Set self[key] to value.

__sizeof__()

Return the size of the list in memory, in bytes.

__str__

Return str(self).

bbox(filter=None)
Parameters:filter – optional function(entity):bool returning True if entity should be considered in box
Returns:BBox bounding box of Entity
center
clear()

Remove all items from list.

connect(other)
Returns:Geometry shortest (Segment2 or Segment3) that connects self to other
copy()

Return a shallow copy of the list.

count()

Return number of occurrences of value.

distance(other)
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

end
static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

static from_pdf(path, trans, color)
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_svg(path, color)
Parameters:path – svg path
Returns:Entity of correct subtype
html(**kwargs)
index()

Return first index of value.

Raises ValueError if the value is not present.

insert()

Insert object before index.

intersect(other)
Parameters:othergeom.Entity
Result:generate tuples (Point2,Entity_self) of intersections between other and each Entity
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
length
patches(**kwargs)
Returns:list of Patch corresponding to group
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
point(u)
Returns:Point2 or Point3 at parameter u
pop()

Remove and return item at index (default last).

Raises IndexError if list is empty or index is out of range.

remove()

Remove first occurrence of value.

Raises ValueError if the value is not present.

render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

reverse()

Reverse IN PLACE.

save(filename, **kwargs)
setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

sort()

Stable sort IN PLACE.

start
svg(**kwargs)
tangent(u)
Returns:Vector2 or Vector3 tangent at parameter u
to_dxf(**kwargs)
Returns:flatten list of dxf entities
class Goulib.drawing.Instance(group, trans)[source]

Bases: Goulib.drawing._Group

Parameters:
  • group – Group
  • trans – optional mat3 of transformation
__init__(group, trans)[source]
Parameters:
  • group – Group
  • trans – optional mat3 of transformation
static from_dxf(e, blocks, mat3)[source]
Parameters:
  • e – dxf.entity
  • blocks – dict of Groups indexed by name
  • mat3 – Matrix3 transform
__repr__()[source]

Return repr(self).

__iter__()[source]
__abstractmethods__ = frozenset()
__class__

alias of abc.ABCMeta

__contains__(pt)
__delattr__

Implement delattr(self, name).

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__le__

Return self<=value.

__lt__

Return self<value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__setattr__

Implement setattr(self, name, value).

__sizeof__()

Size of object in memory, in bytes.

__str__

Return str(self).

bbox(filter=None)
Parameters:filter – optional function(entity):bool returning True if entity should be considered in box
Returns:BBox bounding box of Entity
center
color = 'black'
connect(other)
Returns:Geometry shortest (Segment2 or Segment3) that connects self to other
distance(other)
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

end
static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

static from_pdf(path, trans, color)
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_svg(path, color)
Parameters:path – svg path
Returns:Entity of correct subtype
html(**kwargs)
intersect(other)
Parameters:othergeom.Entity
Result:generate tuples (Point2,Entity_self) of intersections between other and each Entity
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
length
patches(**kwargs)
Returns:list of Patch corresponding to group
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
point(u)
Returns:Point2 or Point3 at parameter u
render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

save(filename, **kwargs)
setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

start
svg(**kwargs)
tangent(u)
Returns:Vector2 or Vector3 tangent at parameter u
to_dxf(**kwargs)
Returns:flatten list of dxf entities
class Goulib.drawing.Chain(data=[])[source]

Bases: Goulib.drawing.Group

group of contiguous Entities (Polyline or similar)

__init__(data=[])[source]

Initialize self. See help(type(self)) for accurate signature.

start
end
__repr__()[source]

Return repr(self).

contiguous(edge, abs_tol=1e-06, allow_swap=True)[source]

check if edge can be appended to the chain :param edge: Entity to append :param tol: float tolerance on contiguity :param allow_swap: if True (default), tries to swap edge or self to find contiguity :return: int,bool index where to append in chain, swap of edge required

append(entity, tol=1e-06, allow_swap=True, mergeable=None, **attrs)[source]

append entity to chain, ensuring contiguity :param entity: Entity to append :param tol: float tolerance on contiguity :param allow_swap: if True (default), tries to swap edge or self to find contiguity :param mergeable: function of the form f(e1,e2) returning True if entities e1,e2 can be merged :param attrs: attributes passed to Group.append :return: self, or None if edge is not contiguous

static from_pdf(path, trans, color)[source]
Parameters:path – pdf path
Returns:Entity of correct subtype
See:http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf p. 132
static from_svg(path, color)[source]
Parameters:path – svg path
Returns:Entity of correct subtype
static from_dxf(e, mat3)[source]
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

to_dxf(split=False, **attr)[source]
Parameters:
  • split – bool if True, each segment in Chain is saved separately
  • attr – dict of graphic attributes
Returns:

polyline or list of entities along the chain

__abstractmethods__ = frozenset()
__add__

Return self+value.

__class__

alias of abc.ABCMeta

__contains__

Return key in self.

__copy__()
__delattr__

Implement delattr(self, name).

__delitem__

Delete self[key].

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__getitem__()

x.__getitem__(y) <==> x[y]

__gt__

Return self>value.

__hash__ = None
__iadd__

Implement self+=value.

__imul__

Implement self*=value.

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__iter__

Implement iter(self).

__le__

Return self<=value.

__len__

Return len(self).

__lt__

Return self<value.

__mul__

Return self*value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__reversed__()

Return a reverse iterator over the list.

__rmul__

Return value*self.

__setattr__

Implement setattr(self, name, value).

__setitem__

Set self[key] to value.

__sizeof__()

Return the size of the list in memory, in bytes.

__str__

Return str(self).

bbox(filter=None)
Parameters:filter – optional function(entity):bool returning True if entity should be considered in box
Returns:BBox bounding box of Entity
center
chainify(mergeable)

merge all possible entities into chains

clear()

Remove all items from list.

color

str(object=’‘) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.

connect(other)
Returns:Geometry shortest (Segment2 or Segment3) that connects self to other
copy()

Return a shallow copy of the list.

count()

Return number of occurrences of value.

distance(other)
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

extend(entities, **kwargs)

Extend list by appending elements from the iterable.

static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

html(**kwargs)
index()

Return first index of value.

Raises ValueError if the value is not present.

insert()

Insert object before index.

intersect(other)
Parameters:othergeom.Entity
Result:generate tuples (Point2,Entity_self) of intersections between other and each Entity
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
layer
length
patches(**kwargs)
Returns:list of Patch corresponding to group
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
point(u)
Returns:Point2 or Point3 at parameter u
pop()

Remove and return item at index (default last).

Raises IndexError if list is empty or index is out of range.

remove()

Remove first occurrence of value.

Raises ValueError if the value is not present.

render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

reverse()

Reverse IN PLACE.

save(filename, **kwargs)
setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

sort()

Stable sort IN PLACE.

svg(**kwargs)
swap()

swap start and end

tangent(u)
Returns:Vector2 or Vector3 tangent at parameter u
Goulib.drawing.chains(group, tol=1e-06, mergeable=None)[source]

build chains from all possible segments in group :param mergeable: function(e1,e2) returning True if entities e1,e2 can be merged

class Goulib.drawing.Rect(*args)[source]

Bases: Goulib.drawing.Chain

a rectangle starting at low/left and going trigowise through top/right

__init__(*args)[source]

Initialize self. See help(type(self)) for accurate signature.

p1
p2
__repr__()[source]

Return repr(self).

__abstractmethods__ = frozenset()
__add__

Return self+value.

__class__

alias of abc.ABCMeta

__contains__

Return key in self.

__copy__()
__delattr__

Implement delattr(self, name).

__delitem__

Delete self[key].

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__getitem__()

x.__getitem__(y) <==> x[y]

__gt__

Return self>value.

__hash__ = None
__iadd__

Implement self+=value.

__imul__

Implement self*=value.

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__iter__

Implement iter(self).

__le__

Return self<=value.

__len__

Return len(self).

__lt__

Return self<value.

__mul__

Return self*value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__reversed__()

Return a reverse iterator over the list.

__rmul__

Return value*self.

__setattr__

Implement setattr(self, name, value).

__setitem__

Set self[key] to value.

__sizeof__()

Return the size of the list in memory, in bytes.

__str__

Return str(self).

append(entity, tol=1e-06, allow_swap=True, mergeable=None, **attrs)

append entity to chain, ensuring contiguity :param entity: Entity to append :param tol: float tolerance on contiguity :param allow_swap: if True (default), tries to swap edge or self to find contiguity :param mergeable: function of the form f(e1,e2) returning True if entities e1,e2 can be merged :param attrs: attributes passed to Group.append :return: self, or None if edge is not contiguous

bbox(filter=None)
Parameters:filter – optional function(entity):bool returning True if entity should be considered in box
Returns:BBox bounding box of Entity
center
chainify(mergeable)

merge all possible entities into chains

clear()

Remove all items from list.

color

str(object=’‘) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.

connect(other)
Returns:Geometry shortest (Segment2 or Segment3) that connects self to other
contiguous(edge, abs_tol=1e-06, allow_swap=True)

check if edge can be appended to the chain :param edge: Entity to append :param tol: float tolerance on contiguity :param allow_swap: if True (default), tries to swap edge or self to find contiguity :return: int,bool index where to append in chain, swap of edge required

copy()

Return a shallow copy of the list.

count()

Return number of occurrences of value.

distance(other)
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

end
extend(entities, **kwargs)

Extend list by appending elements from the iterable.

static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

static from_dxf(e, mat3)
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

static from_pdf(path, trans, color)
Parameters:path – pdf path
Returns:Entity of correct subtype
See:http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf p. 132
static from_svg(path, color)
Parameters:path – svg path
Returns:Entity of correct subtype
html(**kwargs)
index()

Return first index of value.

Raises ValueError if the value is not present.

insert()

Insert object before index.

intersect(other)
Parameters:othergeom.Entity
Result:generate tuples (Point2,Entity_self) of intersections between other and each Entity
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
layer
length
patches(**kwargs)
Returns:list of Patch corresponding to group
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
point(u)
Returns:Point2 or Point3 at parameter u
pop()

Remove and return item at index (default last).

Raises IndexError if list is empty or index is out of range.

remove()

Remove first occurrence of value.

Raises ValueError if the value is not present.

render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

reverse()

Reverse IN PLACE.

save(filename, **kwargs)
setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

sort()

Stable sort IN PLACE.

start
svg(**kwargs)
swap()

swap start and end

tangent(u)
Returns:Vector2 or Vector3 tangent at parameter u
to_dxf(split=False, **attr)
Parameters:
  • split – bool if True, each segment in Chain is saved separately
  • attr – dict of graphic attributes
Returns:

polyline or list of entities along the chain

class Goulib.drawing.Text(text, point, size=12, rotation=0)[source]

Bases: Goulib.drawing.Entity

Parameters:
  • text – string
  • point – Point2
  • size – size in points
  • rotation – float angle in degrees trigowise
__init__(text, point, size=12, rotation=0)[source]
Parameters:
  • text – string
  • point – Point2
  • size – size in points
  • rotation – float angle in degrees trigowise
bbox()[source]
Returns:BBox bounding box of Entity
length
Returns:float length of the text contour in mm
intersect(other)[source]
to_dxf(**attr)[source]
Parameters:attr – dict of attributes passed to the dxf entity, overriding those defined in self
Returns:dxf entity
patches(**kwargs)[source]
Returns:list of (a single) Patch corresponding to entity
__class__

alias of builtins.type

__delattr__

Implement delattr(self, name).

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__le__

Return self<=value.

__lt__

Return self<value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__repr__()

Return repr(self).

__setattr__

Implement setattr(self, name, value).

__sizeof__()

Size of object in memory, in bytes.

__str__

Return str(self).

center
color = 'black'
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

end
static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

static from_dxf(e, mat3)
Parameters:
  • e – dxf.entity
  • mat3 – Matrix3 transform
Returns:

Entity of correct subtype

static from_pdf(path, trans, color)
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_svg(path, color)
Parameters:path – svg path
Returns:Entity of correct subtype
html(**kwargs)
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

save(filename, **kwargs)
setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

start
svg(**kwargs)
class Goulib.drawing.Drawing(data=[], **kwargs)[source]

Bases: Goulib.drawing.Group

list of Entities representing a vector graphics drawing

__init__(data=[], **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

load(filename, **kwargs)[source]
read_pdf(filename, **kwargs)[source]

reads a vector graphics on a .pdf file only the first page is parsed

read_svg(content, **kwargs)[source]

appends svg content to drawing :param content: string, either filename or svg content

__abstractmethods__ = frozenset()
__add__

Return self+value.

__class__

alias of abc.ABCMeta

__contains__

Return key in self.

__copy__()
__delattr__

Implement delattr(self, name).

__delitem__

Delete self[key].

__dir__()

Default dir() implementation.

__eq__

Return self==value.

__format__()

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__getitem__()

x.__getitem__(y) <==> x[y]

__gt__

Return self>value.

__hash__ = None
__iadd__

Implement self+=value.

__imul__

Implement self*=value.

__init_subclass__()

This method is called when a class is subclassed.

The default implementation does nothing. It may be overridden to extend subclasses.

__iter__

Implement iter(self).

__le__

Return self<=value.

__len__

Return len(self).

__lt__

Return self<value.

__mul__

Return self*value.

__ne__

Return self!=value.

__new__()

Create and return a new object. See help(type) for accurate signature.

__reduce__()

Helper for pickle.

__reduce_ex__()

Helper for pickle.

__repr__

Return repr(self).

__reversed__()

Return a reverse iterator over the list.

__rmul__

Return value*self.

__setattr__

Implement setattr(self, name, value).

__setitem__

Set self[key] to value.

__sizeof__()

Return the size of the list in memory, in bytes.

__str__

Return str(self).

append(entity, **kwargs)

append entity to group :param entity: Entity :param kwargs: dict of attributes copied to entity :return: Group (or Chain) to which the entity was added, or None if entity was None

bbox(filter=None)
Parameters:filter – optional function(entity):bool returning True if entity should be considered in box
Returns:BBox bounding box of Entity
center
chainify(mergeable)

merge all possible entities into chains

clear()

Remove all items from list.

color

str(object=’‘) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.

connect(other)
Returns:Geometry shortest (Segment2 or Segment3) that connects self to other
copy()

Return a shallow copy of the list.

count()

Return number of occurrences of value.

distance(other)
draw(fig=None, **kwargs)

draw entities :param fig: matplotlib figure where to draw. figure(g) is called if missing :return: fig,patch

end
extend(entities, **kwargs)

Extend list by appending elements from the iterable.

static figure(box, **kwargs)
Parameters:
  • boxdrawing.BBox bounds and clipping box
  • kwargs – parameters passed to ~matplotlib.pyplot.figure
Returns:

matplotlib axis suitable for drawing

from_dxf(dxf, layers=None, only=[], ignore=['POINT'], trans=Matrix3(1.0, 0, 0, 0, 1.0, 0, 0, 0, 1.0), flatten=False)
Parameters:
  • dxf – dxf.entity
  • layers – list of layer names to consider. entities not on these layers are ignored. default=None: all layers are read
  • only – list of dxf entity types names that are read. default=[]: all are read
  • ignore – list of dxf entity types names that are ignored. default=[‘POINT’]: points and null length segments are ignored
  • transTrans optional transform matrix
Parm flatten:

bool flatten block structure

Returns:

Entity of correct subtype

static from_pdf(path, trans, color)
Parameters:path – pdf path
Returns:Entity of correct subtype
static from_svg(path, color)
Parameters:path – svg path
Returns:Entity of correct subtype
html(**kwargs)
index()

Return first index of value.

Raises ValueError if the value is not present.

insert()

Insert object before index.

intersect(other)
Parameters:othergeom.Entity
Result:generate tuples (Point2,Entity_self) of intersections between other and each Entity
isclosed()
ishorizontal(tol=0.01)
isline()
isvertical(tol=0.01)
layer
length
patches(**kwargs)
Returns:list of Patch corresponding to group
plot(**kwargs)

renders on IPython Notebook (alias to make usage more straightforward)

png(**kwargs)
point(u)
Returns:Point2 or Point3 at parameter u
pop()

Remove and return item at index (default last).

Raises IndexError if list is empty or index is out of range.

read_dxf(filename, options=None, **kwargs)[source]

reads a .dxf file :param filename: string path to .dxf file to read :param options: passed to from_dxf

remove()

Remove first occurrence of value.

Raises ValueError if the value is not present.

render(fmt, **kwargs)

render graph to bitmap stream :return: matplotlib figure as a byte stream in specified format

reverse()

Reverse IN PLACE.

setattr(**kwargs)

set (graphic) attributes to entity :param kwargs: dict of attributes copied to entity

sort()

Stable sort IN PLACE.

start
svg(**kwargs)
swap()

swap start and end

tangent(u)
Returns:Vector2 or Vector3 tangent at parameter u
to_dxf(**kwargs)
Returns:flatten list of dxf entities
save(filename, **kwargs)[source]

save graph in various formats