get_acute_angle_points
- ipkiss3.all.get_acute_angle_points(layout, layers=None, angle_threshold=0.0)
Returns a dictionary of points that form an acute angle per given layer in a given layout.
The layout gets flattened and the elements on the same layer are merged together before determining the acute angles. The returned points are snapped to the grid.
- Parameters:
- layout: Layout data or LayoutView of a PCell or ElementList
The Layout data or LayoutView of a PCell or ElementList
- layers: list
List of layers that need to be inspected. If it is empty then all layers are inspected.
- angle_threshold: float
An extra threshold for acute angles. For instance, if angle_threshold=0.5, angles that are smaller than 89.5 and bigger than 270.5 will be returned instead of the default <90 and >270.
- Returns:
- collection: defaultdict
A dictionary with, per layer, a nested list of acute angles (degrees) and the points that make up those angles. For instance: {TECH.PPLAYER.WG.CORE: [(acute point, (previous point, next point), acute angle in degrees), …]}
Examples
import ipkiss3.all as i3 class SharpShape(i3.PCell): class Layout(i3.LayoutView): def _generate_elements(self, elems): elems += i3.Boundary( layer=i3.Layer(0), shape=[(0,0), (40,30), (10,30), (-10,10), (20,20), (0,0)]) return elems cell = SharpShape() cell_lay = cell.Layout() print(i3.get_acute_angle_points(cell_lay, layers=[i3.Layer(0)])) print(i3.get_acute_angle_points(cell_lay.layout)) cell_lay.visualize()