kqcircuits.util.geometry_helper

Helper module for general geometric functions

kqcircuits.util.geometry_helper.vector_length_and_direction(vector)[source]

Returns the direction and length of the pya.DVector “vector”.

kqcircuits.util.geometry_helper.point_shift_along_vector(start, other, distance=None)[source]

Returns a point at a distance away from point start in the direction of point other.

kqcircuits.util.geometry_helper.get_direction(angle)[source]

Returns the direction vector corresponding to angle.

Parameters:

angle – angle in degrees

Returns: Unit vector in direction angle

kqcircuits.util.geometry_helper.get_angle(vector)[source]

Returns the angle in degrees for a given DVector (or DPoint)

Parameters:

vector – input vector

Returns: angle in degrees

kqcircuits.util.geometry_helper.get_cell_path_length(cell, layer=None)[source]

Returns the length of the paths in the cell.

Adding together the cell’s paths’ lengths in the “1t1_waveguide_path”, “2b1_waveguide_path” and “waveguide_length” layers.

Parameters:
  • cell – A cell object.

  • layer – None or an unsigned int to specify a non-standard layer

kqcircuits.util.geometry_helper.get_object_path_length(obj, layer=None)[source]

Returns sum of lengths of all the paths in the object and its children

Parameters:
  • obj – ObjectInstPath object

  • layer – layer integer id in the database, waveguide layer by default

kqcircuits.util.geometry_helper.simple_region(region)[source]
kqcircuits.util.geometry_helper.region_with_merged_points(region, tolerance)[source]

In each polygon of the region, removes points that are closer to other points than a given tolerance.

Parameters:
  • region – Input region

  • tolerance – Minimum distance, in database units, between two adjacent points in the resulting region

Returns:

with merged points

Return type:

region

kqcircuits.util.geometry_helper.region_with_merged_polygons(region, tolerance, expansion=0.0)[source]

Merges polygons in given region. Ignores gaps that are smaller than given tolerance.

Parameters:
  • region – input region

  • tolerance – largest gap size to be ignored

  • expansion – the amount by which the polygons are expanded (edges move outwards)

Returns:

region with merged polygons

kqcircuits.util.geometry_helper.merge_points_and_match_on_edges(regions, tolerance=2)[source]

Merges adjacent points of regions. Also goes through each polygon edge and splits the edge whenever it passes close to existing point.

This function can eliminate gaps and overlaps caused by transformation to simple_polygon.

Parameters:
  • regions – List of regions to be considered and modified

  • tolerance – Tolerance in pixels

kqcircuits.util.geometry_helper.is_clockwise(polygon_points)[source]

Returns True if the polygon points are in clockwise order, False if they are counter-clockwise.

Parameters:

polygon_points – list of polygon points, must be either in clockwise or counterclockwise order

kqcircuits.util.geometry_helper.circle_polygon(r, n=64, origin=0, 0)[source]

Returns a polygon for a full circle around the origin.

Parameters:
  • r – Radius

  • origin – Center of the circle, default (0,0)

  • n – Number of points.

Returns: list of DPoint``s, length ``n.

kqcircuits.util.geometry_helper.arc_points(r, start=0, stop=6.283185307179586, n=64, origin=0, 0)[source]

Returns point describing an arc around the origin with specified start and stop angles. The start and stop angle are included.

If start < stop, the points are counter-clockwise; if start > stop, the points are clockwise.

Parameters:
  • r – Arc radius

  • start – Start angle in radians, default 0

  • stop – Stop angle in radians, default 2*pi

  • origin – Center of the arc, default (0,0)

  • n – Number of steps corresponding to a full circle.

kqcircuits.util.geometry_helper.bspline_points(control_points: List[DPoint], sample_points: int = 100, startpoint: bool = False, endpoint: bool = False) List[DPoint][source]

Samples points uniformly from the B-Spline constructed from a sequence of control points. The spline is derived from a sequence of cubic splines for each subsequence of four-control points in a sliding window.

Unlike Bezier curves, for each spline in B-Spline it is not guaranteed that the first and last control point will be in the spline.

B-Spline cubic polynomial implemented based on the following reference: Kaihuai Qin, “General matrix representations for B-splines”, Proceedings Pacific Graphics ‘98 Sixth Pacific Conference on Computer Graphics and Applications, Singapore, 1998, pp. 37-43, doi: 10.1109/PCCGA.1998.731996

Parameters:
  • control_points – a sequence of control points, must have at least 4 pya.DPoints elements

  • sample_points – number of uniform samples of each cubic B-spline, total number of samples is: sample_points * (control_points - 3)

  • startpoint – If True, will prepend duplicates of the first control point so that the first control point will be in the B-Spline

  • endpoint – If True, will append duplicates of the last control point so that the last control point will be in the B-Spline

Returns:

List of pya.DPoints that can be used as part of a polygon

kqcircuits.util.geometry_helper.bezier_points(control_points: List[DPoint], sample_points: int = 100) List[DPoint][source]

Samples points uniformly from the Bezier curve constructed from a sequence of control points. The curve is derived from a sequence of cubic splines for each subsequence of four-control points such that subsequence shares one control point with the previous subsequence.

Special care needs to be taken to guarantee continuity in the tangent of the curve. The third and fourth control point of each subsequence as well as the second control point of the next subsequence have to be in the same line.

Bezier cubic polynomial implemented based on the following reference: Kaihuai Qin, “General matrix representations for B-splines”, Proceedings Pacific Graphics ‘98 Sixth Pacific Conference on Computer Graphics and Applications, Singapore, 1998, pp. 37-43, doi: 10.1109/PCCGA.1998.731996

Parameters:
  • control_points – a sequence of control points, must be of length equal to 3*n+1 for some integer n

  • sample_points – number of uniform samples of each cubic spline, total number of samples is: sample_points * ((control_points - 3) / 3)

Returns:

List of pya.DPoints that can be used as part of a polygon

kqcircuits.util.geometry_helper.round_dpath_width(dpath: DPath, dbu: float, precision: int = 2) DPath[source]

Takes pya.DPath and rounds its width so that it can be saved in OAS format.

All geometry objects are formatted such that their numeric values are represented as integers (database units). However, most D-prefixed geometry objects used in KQCircuits are defined using microns for convenience, with conversion between itypes and dtypes configured in layout.dbu.

The OAS standard does not allow a Path object to be stored such that its width value in database units is odd, i.e. not divisible by two. This function rounds the DPath’s width so that it can be saved in OAS.

At this time this is mostly relevant when adding DPaths to the “waveguide_path” layer, setting their width to waveguide’s “a” value. This function acts as safe guard so that “a” value of arbitrary precision can be used.

Parameters:
  • dpath – Unrounded DPath object

  • dbu – layout.dbu for layout where the dpath is intended to be placed

  • precision – rounds (integer) Path’s width to this precision. 2 by default.

Returns: Rounded DPath object

../_images/kqcircuits.util.geometry_helper.png