Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions docs/source/rst/primitive.rst
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ It's possible to invert the orientation of a shape.
# Create any shape, positive at counter-clockwise
circle = Primitive.circle()
# Change orientation to clockwise, negative
circle.invert()
-circle


|pic1| |pic2|
Expand All @@ -203,10 +203,6 @@ It's possible to invert the orientation of a shape.
.. |pic2| image:: ../img/primitive/negative_circle.svg
:width: 49 %

.. note::

The ``invert`` function is available only in ``SimpleShape``. Use ``~shape`` for a inversion as general

------------------------------------------------------------------------------------------

------------------
Expand Down
2 changes: 1 addition & 1 deletion src/shapepy/bool2d/boolean.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def clean_bool2d_not(subset: LazyNot) -> SubSetR2:
if Is.instance(inverted, SimpleShape):
return SimpleShape(~inverted.jordan, True)
if Is.instance(inverted, ConnectedShape):
return DisjointShape((~s).clean() for s in inverted.subshapes)
return DisjointShape((~s).clean() for s in inverted)
if Is.instance(inverted, DisjointShape):
return shape_from_jordans(~jordan for jordan in inverted.jordans)
raise NotImplementedError(f"Missing typo: {type(inverted)}")
Expand Down
10 changes: 4 additions & 6 deletions src/shapepy/bool2d/curve.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from ..geometry.base import IGeometricCurve
from ..geometry.point import Point2D
from ..geometry.transform import move, rotate, scale
from ..loggers import debug
from ..scalar.angle import Angle
from ..scalar.reals import Real
Expand Down Expand Up @@ -64,16 +65,13 @@ def __hash__(self):
return hash(self.internal.length)

def move(self, vector: Point2D) -> SingleCurve:
self.__curve = self.__curve.move(vector)
return self
return SingleCurve(move(self.__curve, vector))

def scale(self, amount: Union[Real, Tuple[Real, Real]]) -> SingleCurve:
self.__curve = self.__curve.scale(amount)
return self
return SingleCurve(scale(self.__curve, amount))

def rotate(self, angle: Angle) -> SingleCurve:
self.__curve = self.__curve.rotate(angle)
return self
return SingleCurve(rotate(self.__curve, angle))

def density(self, center: Point2D) -> Density:
return Density.zero
33 changes: 9 additions & 24 deletions src/shapepy/bool2d/lazy.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,16 +124,13 @@ def __eq__(self, other):
)

def move(self, vector):
self.__internal.move(vector)
return self
return LazyNot(self.__internal.move(vector))

def scale(self, amount):
self.__internal.scale(amount)
return self
return LazyNot(self.__internal.scale(amount))

def rotate(self, angle):
self.__internal.rotate(angle)
return self
return LazyNot(self.__internal.rotate(angle))

def density(self, center):
return ~self.__internal.density(center)
Expand Down Expand Up @@ -178,19 +175,13 @@ def __eq__(self, other):
)

def move(self, vector):
for subset in self:
subset.move(vector)
return self
return LazyOr(sub.move(vector) for sub in self)

def scale(self, amount):
for subset in self:
subset.scale(amount)
return self
return LazyOr(sub.scale(amount) for sub in self)

def rotate(self, angle):
for subset in self:
subset.rotate(angle)
return self
return LazyOr(sub.rotate(angle) for sub in self)

def density(self, center):
return unite_densities(sub.density(center) for sub in self)
Expand Down Expand Up @@ -235,19 +226,13 @@ def __eq__(self, other):
)

def move(self, vector):
for subset in self:
subset.move(vector)
return self
return LazyAnd(sub.move(vector) for sub in self)

def scale(self, amount):
for subset in self:
subset.scale(amount)
return self
return LazyAnd(sub.scale(amount) for sub in self)

def rotate(self, angle):
for subset in self:
subset.rotate(angle)
return self
return LazyAnd(sub.rotate(angle) for sub in self)

def density(self, center):
return intersect_densities(sub.density(center) for sub in self)
Expand Down
11 changes: 4 additions & 7 deletions src/shapepy/bool2d/point.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from copy import copy
from typing import Tuple, Union

from ..geometry.point import Point2D
from ..geometry.point import Point2D, move, rotate, scale
from ..loggers import debug
from ..scalar.angle import Angle
from ..scalar.reals import Real
Expand Down Expand Up @@ -68,16 +68,13 @@ def __hash__(self):
return hash((self.internal.xcoord, self.internal.ycoord))

def move(self, vector: Point2D) -> SinglePoint:
self.__point = self.__point.move(vector)
return self
return SinglePoint(move(self.__point, vector))

def scale(self, amount: Union[Real, Tuple[Real, Real]]) -> SinglePoint:
self.__point = self.__point.scale(amount)
return self
return SinglePoint(scale(self.__point, amount))

def rotate(self, angle: Angle) -> SinglePoint:
self.__point = self.__point.rotate(angle)
return self
return SinglePoint(rotate(self.__point, angle))

def density(self, center: Point2D) -> Density:
return Density.zero
Loading