1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//! # physdes-rs
//!
//! A library for Physical Design in Rust with geometric operations and algorithms.
//!
//! ## Overview
//!
//! ```svgbob
//! Point (x, y)
//! *
//! /|\
//! / | \
//! / | \
//! / | \
//! *----*----*
//! Interval [lb, ub]
//!
//! Vector2 (x, y)
//! -->
//! (dx, dy)
//! ```
//!
//! ## Main Components
//!
//! The library provides several geometric structures:
//!
//! - `Point<T1, T2>`: A 2D point with x and y coordinates
//! - `Vector2<T1, T2>`: A 2D vector with x and y components
//! - `Interval<T>`: A range with lower and upper bounds
//! - `Polygon<T>`: An arbitrary polygon
//! - `RPolygon<T>`: A rectilinear polygon
//! - `GeomError`: Error types for geometric operations
//! - `vlsi_ops`: VLSI-specific geometric operations
//! - `algorithms`: Additional geometric algorithms
//!
//! # Examples
//!
//! ```
//! use physdes::{Point, Vector2};
//! use physdes::interval::Interval;
//! use physdes::polygon::Polygon as Poly;
//!
//! // Create a point
//! let p = Point::new(3, 4);
//! assert_eq!(p.xcoord, 3);
//! assert_eq!(p.ycoord, 4);
//!
//! // Create a vector
//! let v = Vector2::new(1, 2);
//! assert_eq!(v.x_, 1);
//! assert_eq!(v.y_, 2);
//!
//! // Create an interval
//! let interval = Interval::new(1, 5);
//! assert_eq!(interval.lb(), 1);
//! assert_eq!(interval.ub(), 5);
//!
//! // Create a polygon from points
//! let points = vec![Point::new(0, 0), Point::new(1, 0), Point::new(1, 1), Point::new(0, 1)];
//! let polygon = Poly::new(&points);
//! assert_eq!(polygon.origin, Point::new(0, 0));
//! ```
//!
/// Geometric algorithms module
/// Doubly-linked list node for polygon decomposition
/// DME algorithm for clock tree synthesis
/// SVG visualizer for DME clock trees
/// Error types for geometric operations
/// Generic traits for geometric operations
/// Global router for Steiner tree routing
/// Interval operations and types
/// Manhattan arc geometry for the DME algorithm
/// Merge object for combining geometric objects
/// Point types and operations
/// Polygon types and operations
/// Circular doubly-linked list for polygon decomposition
/// Rectilinear polygon types and operations
/// Rectilinear polygon cut (decomposition) operations
/// Rectilinear polygon hull operations
/// Steiner forest grid construction using primal-dual approximation
/// Vector2 types and operations
/// VLSI-specific geometric operations
/// Logging module - available when `std` feature is enabled.
pub use cratePoint;
pub use cratePolygon;
pub use crateRPolygon;
pub use crateVector2;