pub trait LayoutBase: HierarchyBase {
    type Coord: CoordinateType + Display + Hash + 'static;
    type Area: Num + Copy + PartialOrd + From<Self::Coord>;
    type LayerId: Eq + Hash + Clone + Debug + 'static;
    type ShapeId: Eq + Hash + Clone + Debug + 'static;

Show 16 methods fn dbu(&self) -> Self::Coord; fn each_layer(&self) -> Box<dyn Iterator<Item = Self::LayerId>>; fn layer_info(&self, layer: &Self::LayerId) -> LayerInfo<Self::NameType>; fn find_layer(&self, index: UInt, datatype: UInt) -> Option<Self::LayerId>; fn layer_by_name(&self, name: &str) -> Option<Self::LayerId>; fn bounding_box_per_layer(
        &self,
        cell: &Self::CellId,
        layer: &Self::LayerId
    ) -> Option<Rect<Self::Coord>>; fn each_shape_id(
        &self,
        cell: &Self::CellId,
        layer: &Self::LayerId
    ) -> Box<dyn Iterator<Item = Self::ShapeId>>; fn for_each_shape<F>(&self, cell: &Self::CellId, layer: &Self::LayerId, f: F)
    where
        F: FnMut(&Self::ShapeId, &Geometry<Self::Coord>)
; fn with_shape<F, R>(&self, shape_id: &Self::ShapeId, f: F) -> R
    where
        F: FnMut(&Self::LayerId, &Geometry<Self::Coord>) -> R
; fn parent_of_shape(
        &self,
        shape_id: &Self::ShapeId
    ) -> (Self::CellId, Self::LayerId); fn get_transform(
        &self,
        cell_inst: &Self::CellInstId
    ) -> SimpleTransform<Self::Coord>; fn bounding_box(&self, cell: &Self::CellId) -> Option<Rect<Self::Coord>> { ... } fn shape_geometry(&self, shape_id: &Self::ShapeId) -> Geometry<Self::Coord> { ... } fn shape_layer(&self, shape_id: &Self::ShapeId) -> Self::LayerId { ... } fn for_each_shape_recursive<F>(
        &self,
        cell: &Self::CellId,
        layer: &Self::LayerId,
        f: F
    )
    where
        F: FnMut(SimpleTransform<Self::Coord>, &Self::ShapeId, &Geometry<Self::Coord>)
, { ... } fn get_shape_property(
        &self,
        shape: &Self::ShapeId,
        key: &Self::NameType
    ) -> Option<PropertyValue> { ... }
}
Expand description

Most basic trait of a layout.

This traits specifies methods for accessing the components of a layout.

Required Associated Types

Number type used for coordinates and distances.

Number type for areas. This is possibly another type then Coord for the following reasons:

  • Distances and areas are semantically different.
  • In practice i32 is a good choice for coordinates. However, computing areas in i32 might easily lead to overflows. Hence a 64-bit integer type might be a better choice.

Layer identifier type.

Shape identifier type.

Required Methods

Get the distance unit used in this layout in ‘pixels per micron’.

Iterate over all defined layers.

Get the LayerInfo data structure for this layer.

Find layer index by the (index, data type) tuple.

Find layer index by the name.

Compute the bounding box of the shapes on one layer. The bounding box also includes all child cell instances.

Iterate over the IDs of all shapes in the cell on a specific layer.

Call a function for each shape on this layer.

Access a shape by its ID.

Get the parent cell and the layer of a shape as a (cell, layer) tuple.

Get the geometric transform that describes the location of a cell instance relative to its parent.

Provided Methods

Compute the bounding box of the cell over all layers. The bounding box is not defined if the cell is empty. In this case return None.

Get a clone of the shape geometry.

Get the layer of a shape.

Call a function f for each shape of this cell and its sub cells. Along to the geometric shape f also gets a transformation as argument. The transformation describes the actual position of the geometric shape relative to the cell.

Get a property of a shape.

Implementors