Source code for qpdk.samples.sample4

# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: percent
#       format_version: '1.3'
#       jupytext_version: 1.17.3
# ---

# %% [markdown]
# # Packing Algorithm Sample
#
# This sample demonstrates the use of gdsfactory's packing algorithm to efficiently arrange shapes.

# %%
import gdsfactory as gf
import numpy as np

# %% [markdown]
# ## Sample Function
#
# Creates a set of random ellipses and packs them efficiently into a rectangular area.


# %%
[docs] @gf.cell def sample4_pack(): """Returns a component with a packed set of ellipses.""" rng = np.random.default_rng() ellipses = [ gf.components.ellipse(radii=tuple(rng.random(2) * n + 2), layer="M1_DRAW") for n in range(80) ] bins = gf.pack( ellipses, # Must be a list or tuple of Components spacing=4, # Minimum distance between adjacent shapes aspect_ratio=(1, 1), # Shape of the box max_size=(500, 500), # Limits the size into which the shapes will be packed density=1.05, # Values closer to 1 pack tighter but require more computation sort_by_area=True, # Pre-sorts the shapes by area ) return bins[0]