Shape modifiers
The following classes modify an existing shape. They are Shapes themselves, executing a certain algorithm on an original_shape parameter. They can be used to transform (i.e., round, grow, shrink) geometrical elements.
Returns a shape with circular rounded corners based on a given shape. |
|
Stubs the corners of a given shape |
|
Creates a shape sampling points on another shape along specified distances between the sampling point. |
|
Creates a shape sampling points on another shape along specified periodic distances from the start point of the shape. |
|
Shortens a shape on both ends by given trim lengths. |
|
Puts a bump on the corners of a given shape. |
|
Generates a shape which uniformly grows. |
|
Generates a shape with a given offset from its original shape. |
|
Generates a shape with a variable offset from its original shape. |
|
Extend a shape at both ends by a given extension length. |
|
Fits a shape in a given box. |
|
Returns a shape with adiabatic spline corners |
|
Returns a shape with euler rounded corners |
See also Rounding algorithms
Spline based rounding algorithm that is an extension of i3.ShapeRound, used to create adiabatic spline bends. |
|
Euler rounding algorithm that is an extension of i3.ShapeRound, used to create (partial) Euler bends. |
ShapeRound
- class ipkiss3.all.ShapeRound
Returns a shape with circular rounded corners based on a given shape.
The corners are rounded using a circular arc with a certain radius.
Used as the default rounding algorithm for traces (waveguides).
- Parameters:
- radius: float and Real, number and number >= 0, required
- original_shape: Shape, required
- angle_step: float, optional
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- radii: locked
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 shape = i3.Shape([(10.0, 10.0), (30.0, 10.0), (60.0, 35.0), (10.0, 40.0)]) rounded_shape = i3.ShapeRound(original_shape=shape, radius=5.0) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-.', label='original_shape') plt.plot(rounded_shape.x_coords(), rounded_shape.y_coords(), 'r-', label='rounded shape') plt.xlim([0, 70.0]) plt.ylim([0, 50.0]) plt.legend() plt.show()
ShapeSample
- class ipkiss3.all.ShapeSample
Creates a shape sampling points on another shape along specified distances between the sampling point.
- Parameters:
- sampling_distances: list<number > 0>, required
- original_shape: Shape, required
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 import numpy as np shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) sampled_shape = i3.ShapeSample(original_shape=shape, sampling_distances=[1.0, 3.0, 3.5, 4.0, 7.0, 7.8, 10.0, 12.0, 15.0, 17.0, 25.0]) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=2) plt.plot(sampled_shape.x_coords(), sampled_shape.y_coords(), 'ro', label='sampled shape', markersize=7) plt.legend() plt.show()
ShapeSamplePeriodic
- class ipkiss3.all.ShapeSamplePeriodic
Creates a shape sampling points on another shape along specified periodic distances from the start point of the shape.
- Parameters:
- sampling_period: float and number > 0, required
- original_shape: Shape, required
- exclude_ends: Coord2 and number >= 0, optional
Lengths not taken into account on both ends
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- sampling_distances: locked
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 import numpy as np shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) sampled_shape = i3.ShapeSamplePeriodic(original_shape=shape, sampling_period=0.5, exclude_ends=(1.0, 2.0)) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=2) plt.plot(sampled_shape.x_coords(), sampled_shape.y_coords(), 'ro', label='sampled shape', markersize=7) plt.legend() plt.show()
ShapeStub
- class ipkiss3.all.ShapeStub
Stubs the corners of a given shape
On closed shapes, all corners are stubbed Open shapes are left open: the edge corners are not stubbed
- Parameters:
- stub_width: float and Real, number and number >= 0, required
- original_shape: Shape, required
- only_sharp_angles: ( bool, bool_ or int ), optional
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 shape = i3.Shape([(10.0, 10.0), (30.0, 10.0), (60.0, 35.0), (10.0, 40.0)]) stubbed_shape = i3.ShapeStub(original_shape=shape, only_sharp_angles=False, stub_width=5.0) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-.', label='original_shape') plt.plot(stubbed_shape.x_coords(), stubbed_shape.y_coords(), 'r-', label='stubbed shape') plt.xlim([0, 70.0]) plt.ylim([0, 50.0]) plt.legend() plt.show()
ShapeShorten
- class ipkiss3.all.ShapeShorten
Shortens a shape on both ends by given trim lengths.
- Parameters:
- original_shape: Shape, required
- trim_lengths: Coord2 and number >= 0, optional
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 import numpy as np shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) short_shape = i3.ShapeShorten(original_shape=shape, trim_lengths=(1.0, 2.0)) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=2) plt.plot(short_shape.x_coords(), short_shape.y_coords(), 'ro--', label='shortened shape', markersize=2, linewidth=6) plt.legend() plt.show()
ShapeSerif
- class ipkiss3.all.ShapeSerif
Puts a bump on the corners of a given shape.
- Parameters:
- tip_width: float and Real, number and number >= 0, required
- stub_height: float and number > 0, required
- stub_width: float and number > 0, required
- original_shape: Shape, required
- only_sharp_angles: ( bool, bool_ or int ), optional
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) serif_shape = i3.ShapeSerif(original_shape=shape, stub_width=3.0, stub_height=2.0, tip_width=2.0) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-.', label='original_shape') plt.plot(serif_shape.x_coords(), serif_shape.y_coords(), 'r-', label='serif shape') plt.xlim([0, 30.0]) plt.ylim([0, 15.0]) plt.legend() plt.show()
ShapeGrow
- class ipkiss3.all.ShapeGrow
Generates a shape which uniformly grows.
- Parameters:
- amount: float, required
amount of growth in user units
- original_shape: Shape, required
- offset: optional
offset from the original shape, calculated from amoutn
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 import numpy as np shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) grown_shape = i3.ShapeGrow(original_shape=shape, amount=2.0) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=2) plt.plot(grown_shape.x_coords(), grown_shape.y_coords(), 'ro--', label='grown shape', markersize=2, linewidth=6) plt.legend() plt.show()
ShapeOffset
- class ipkiss3.all.ShapeOffset
Generates a shape with a given offset from its original shape. Similar to
i3.ShapeGrow
, but will remove loops as a result of the offset, if there are any.- Parameters:
- offset: float, required
- original_shape: Shape, required
- remove_loopbacks: ( bool, bool_ or int ), optional
- end_face_angle: float, optional
- start_face_angle: float, optional
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 # If the shape intersects itself by growing/being offsetted, the loop that is formed is removed, in contrast # to i3.ShapeGrow, where the resulting loop is not removed. As can be seen in the following example. shape = i3.Shape([(5.0, 5.0), (5.0, 15.0), (10.0, 15.0), (10.0, 10.0), (12.0, 10.0), (12.0, 15.0), (17.0, 15.0), (17.0, 5.0)], closed=True) offset_shape = i3.ShapeOffset(original_shape=shape, offset=1.5) grown_shape = i3.ShapeGrow(original_shape=shape, amount=1.5) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=2) plt.plot(offset_shape.x_coords(), offset_shape.y_coords(), 'ro--', label='offset shape', markersize=2, linewidth=6) plt.plot(grown_shape.x_coords(), grown_shape.y_coords(), 'go--', label='grown shape', markersize=1, linewidth=2) plt.arrow(10, 13, 1.2, 0, width = 0.05) plt.arrow(12, 12, -1.2, 0, width = 0.05) plt.legend() plt.show()
ShapeVariableOffset
- class ipkiss3.all.ShapeVariableOffset
Generates a shape with a variable offset from its original shape.
- Parameters:
- offsets: list<Real, number>, required
- original_shape: Shape, required
- remove_loopbacks: ( bool, bool_ or int ), optional
- end_face_angle: float, optional
- start_face_angle: float, optional
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 import numpy as np shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) offset_shape = i3.ShapeVariableOffset(original_shape=shape, offsets=[-1.0, 2.0, 3.0, -1.0, 0.0]) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=2) plt.plot(offset_shape.x_coords(), offset_shape.y_coords(), 'ro--', label='offset shape', markersize=2, linewidth=6) plt.legend() plt.show()
ShapeExtendEnds
- class ipkiss3.all.ShapeExtendEnds
Extend a shape at both ends by a given extension length.
- Parameters:
- end_extension: float, required
- start_extension: float, required
- original_shape: Shape, required
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
Examples
import ipkiss3.all as i3 import numpy as np shape = i3.Shape([(5.0, 5.0), (10.0, 10.0), (15.0, 5.0), (20.0, 10.0), (25.0, 5.0)]) extended_shape = i3.ShapeExtendEnds(original_shape=shape, start_extension=1.0, end_extension=3.0) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-', label='original_shape', markersize=2, linewidth=6) plt.plot(extended_shape.x_coords(), extended_shape.y_coords(), 'ro--', label='extended shape', markersize=2, linewidth=3) plt.legend() plt.show()
ShapeFit
- class ipkiss3.all.ShapeFit
Fits a shape in a given box.
- Parameters:
- north_east: Coord2, required
- south_west: Coord2, required
- original_shape: Shape, required
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
ShapeRoundAdiabaticSpline
- class ipkiss3.all.ShapeRoundAdiabaticSpline
Returns a shape with adiabatic spline corners
- Parameters:
- radius: float and Real, number and number >= 0, required
- original_shape: Shape, required
- adiabatic_angles: tuple2, optional
- angle_step: float, optional
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- adiabatic_angles_list: locked
- radii: locked
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
See also
Notes
Do not use this as a rounding algorithm in routing functions or connectors. Use
SplineRoundingAlgorithm
instead.Examples
import ipkiss3.all as i3 shape = i3.Shape([(10.0, 10.0), (30.0, 10.0), (60.0, 35.0), (10.0, 40.0)]) rounded_shape = i3.ShapeRoundAdiabaticSpline(original_shape=shape, radius=3.0, adiabatic_angles=(10.0, 10.0)) rounded_shape2 = i3.ShapeRoundAdiabaticSpline(original_shape=shape, radius=3.0, adiabatic_angles=(40.0, 40.0)) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-.', label='original_shape') plt.plot(rounded_shape.x_coords(), rounded_shape.y_coords(), 'r-', label='rounded shape (10 degrees)') plt.plot(rounded_shape2.x_coords(), rounded_shape2.y_coords(), 'g-', label='rounded shape (40 degrees)') plt.xlim([0, 70.0]) plt.ylim([0, 50.0]) plt.legend() plt.show()
ShapeRoundEuler
- class ipkiss3.all.ShapeRoundEuler
Returns a shape with euler rounded corners
- Parameters:
- radius: float and Real, number and number >= 0, required
- original_shape: Shape, required
- use_effective_radius: ( bool, bool_ or int ), optional
interpret radius as the effective radius of the bend instead of the minimum radius of curvature
- p: float and fraction, optional
fraction of the bend having a linearly increasing curvature
- angle_step: float, optional
- end_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the end of an open shape
- start_face_angle: ( float ), optional, *None allowed*
Use this to overrule the ‘dangling’ angle at the start of an open shape
- points: optional
points of this shape
- Other Parameters:
- radii: locked
- size_info: SizeInfo, locked
get the size information on this Shape
- closed: locked
See also
Notes
Do not use this as a rounding algorithm in routing functions or connectors. Use
EulerRoundingAlgorithm
instead.Examples
import ipkiss3.all as i3 shape = i3.Shape([(10.0, 10.0), (30.0, 10.0), (60.0, 35.0), (10.0, 40.0)]) rounded_shape = i3.ShapeRoundEuler(original_shape=shape, radius=3.0, p=0.2) rounded_shape2 = i3.ShapeRoundEuler(original_shape=shape, radius=3.0, p=0.8) import matplotlib.pyplot as plt plt.figure() plt.plot(shape.x_coords(), shape.y_coords(), 'bo-.', label='original_shape') plt.plot(rounded_shape.x_coords(), rounded_shape.y_coords(), 'r-', label='rounded shape (p=0.2)') plt.plot(rounded_shape2.x_coords(), rounded_shape2.y_coords(), 'g-', label='rounded shape (p=0.8)') plt.axis('equal') plt.legend() plt.show()