3Basic usage example of ZLayout library.
5This example demonstrates:
61. Creating geometric shapes (rectangles and polygons)
72. Setting up spatial indexing with quadtree
83. Analyzing layout for sharp angles, narrow distances, and intersections
16sys.path.insert(0, os.path.join(os.path.dirname(__file__),
'..'))
19import matplotlib.pyplot
as plt
22def create_sample_layout():
23 """Create a sample EDA layout with various components."""
39 for rect
in rectangles:
40 processor.add_component(rect)
78 for polygon
in polygons:
79 processor.add_component(polygon)
81 return processor, rectangles, polygons
84def demonstrate_analysis(processor):
85 """Demonstrate layout analysis capabilities."""
87 print(
"=== ZLayout Analysis Demo ===\n")
90 print(
"Analyzing layout...")
91 optimization_results = processor.optimize_layout()
93 analysis = optimization_results[
'analysis']
96 print(f
"Optimization Score: {optimization_results['optimization_score']:.1f}/100\n")
98 print(
"Sharp Angles Analysis:")
99 print(f
" - Found {analysis['sharp_angles']['count']} sharp angles")
100 if analysis[
'sharp_angles'][
'count'] > 0:
101 print(f
" - Sharpest angle: {analysis['sharp_angles']['sharpest']:.1f}°")
102 print(f
" - Average angle: {analysis['sharp_angles']['average']:.1f}°")
105 print(
"Narrow Distances Analysis:")
106 print(f
" - Found {analysis['narrow_distances']['count']} narrow regions")
107 if analysis[
'narrow_distances'][
'count'] > 0:
108 print(f
" - Minimum distance: {analysis['narrow_distances']['minimum']:.3f}")
109 print(f
" - Average distance: {analysis['narrow_distances']['average']:.3f}")
112 print(
"Edge Intersections Analysis:")
113 print(f
" - Found {analysis['intersections']['polygon_pairs']} intersecting polygon pairs")
114 print(f
" - Total intersection points: {analysis['intersections']['total_points']}")
117 print(
"Suggestions:")
118 for suggestion
in optimization_results[
'suggestions']:
119 print(f
" • {suggestion}")
121 return optimization_results
124def demonstrate_visualization(processor, rectangles, polygons, optimization_results):
125 """Demonstrate visualization capabilities."""
127 print(
"\n=== Generating Visualizations ===")
132 print(
"Creating layout overview...")
133 fig1 = visualizer.plot_layout(polygons, rectangles,
"Sample EDA Layout")
136 print(
"Creating analysis visualization...")
137 fig2 = visualizer.plot_analysis_results(polygons, optimization_results[
'analysis'])
140 print(
"Creating optimization summary...")
141 fig3 = visualizer.plot_optimization_summary(optimization_results)
146 return [fig1, fig2, fig3]
149def demonstrate_quadtree():
150 """Demonstrate quadtree spatial indexing."""
152 print(
"\n=== QuadTree Spatial Indexing Demo ===")
167 print(f
"Inserting {len(objects)} objects into quadtree...")
168 for i, obj
in enumerate(objects):
169 success = quadtree.insert(obj)
170 print(f
" Object {i+1}: {'✓' if success else '✗'}")
173 print(f
"\nQuadTree contains {quadtree.size()} objects")
177 objects_in_region = quadtree.query_range(query_region)
178 print(f
"Objects in region (0,0,50,50): {len(objects_in_region)}")
182 objects_at_point = quadtree.query_point(query_point)
183 print(f
"Objects containing point (12,12): {len(objects_at_point)}")
186 intersections = quadtree.find_intersections()
187 print(f
"Potential intersecting pairs: {len(intersections)}")
191 """Main demonstration function."""
193 print(
"Welcome to ZLayout - Advanced EDA Layout Library!")
197 processor, rectangles, polygons = create_sample_layout()
200 optimization_results = demonstrate_analysis(processor)
203 demonstrate_quadtree()
207 figures = demonstrate_visualization(processor, rectangles, polygons, optimization_results)
210 save_plots = input(
"\nSave plots to files? (y/n): ").lower().strip()
211 if save_plots ==
'y':
213 visualizer.save_plots(figures,
"zlayout_demo")
214 print(
"Plots saved!")
217 print(
"\nNote: Matplotlib not available. Skipping visualization demo.")
218 print(
"Install matplotlib to see visual results: pip install matplotlib")
220 print(
"\nDemo completed!")
223if __name__ ==
"__main__":
2D point with high-precision coordinates and utility methods
Polygon class supporting both convex and concave polygons.
Axis-aligned rectangle for bounding boxes and simple EDA components.
Quadtree spatial index for efficient range and intersection queries.