src/cluster_erp/modules/nesting/engine/ paketi nesting modülünün geometri kodunu tutar: ortak geometri türleri, çokgen dönüşümleri, bir DXF okuyucu, bir DXF yazıcı ve bir SVG yazıcı. Bu commit'te bir yerleştirme algoritması içermez; yerleşimler içe aktarım ucu üzerinden harici bir yerleşim aracından gelir. Bu sayfa paketin ne yaptığını, modülün onu nasıl kullandığını ve neyin saklanıp kullanılmadığını açıklar. İçe aktarımın kendisi entegrasyon ve KPI sayfasındadır.
Kısaca¶
- Pakette beş dosya vardır:
types.py,transforms.py,dxf_reader.py,dxf_writer.pyvesvg_writer.py(src/cluster_erp/modules/nesting/engine/klasör listesi). - Paketteki hiçbir işlev parçaları bir levhaya yerleştirmez. İş özeti sonuçların yalnızca harici bir araçtan geldiğini belirtir ve saklanan
algorithmyerine aracın adını gösterir (src/cluster_erp/modules/nesting/nesting_jobs/services.py:827-834). - İçe aktarım denetimi dönüşümleri, yerleştirilen her dış hattı yeniden kurmak ve levha dışında kalan veya üst üste binen parçaları reddetmek için kullanır (
src/cluster_erp/modules/nesting/integration/services.py:48-106). - Çizim uçları yerleşimleri saklanan yerleşimden yeniden kurar ve SVG veya DXF olarak işler (
src/cluster_erp/modules/nesting/nesting_jobs/routes.py:33-118,src/cluster_erp/modules/nesting/nesting_jobs/routes.py:307-396).
Nasıl çalışır¶
Geometri türleri¶
types.py, geometriyi modül ile yazıcılar arasında taşıyan dondurulmuş ve düz veri sınıfları tanımlar (src/cluster_erp/modules/nesting/engine/types.py:12-142):
| Tür | Tuttuğu | Kaynak |
|---|---|---|
SheetGeom |
Levha genişliği ve yüksekliği, kenar payı, kesim payı, parça aralığı; kullanılabilir ölçü ve alan | src/cluster_erp/modules/nesting/engine/types.py:12-36 |
PartGeom |
Parça kimliği, etiket, dış hat, miktar, izin verilen döndürmeler, öncelik, aynalama bayrağı | src/cluster_erp/modules/nesting/engine/types.py:39-61 |
Placement |
Yerleştirilen örnek: parça kimliği, örnek numarası, x, y, döndürme, aynalama bayrağı, dış hat, levha sırası | src/cluster_erp/modules/nesting/engine/types.py:64-84 |
RemnantRect |
Bir levhada artan bir dikdörtgen | src/cluster_erp/modules/nesting/engine/types.py:87 |
SheetResult, NestResult |
Levha başına ve tüm çalışma için sonuç kapları | src/cluster_erp/modules/nesting/engine/types.py:109-142 |
Dönüşümler¶
transforms.py Shapely afin işlemlerini sarar: ağırlık merkezi etrafında döndürme, öteleme, aynalama, dış hattı sınır kutusu başlangıç noktasından başlayacak şekilde taşıma, alan, sınır kutusu, tampon ve çokgenlerle koordinat listeleri arasında dönüşüm (src/cluster_erp/modules/nesting/engine/transforms.py:9-88). rotate_and_normalize döndürür ve dış hattı başlangıç noktasına geri taşır (src/cluster_erp/modules/nesting/engine/transforms.py:84-88). make_rect dış hattı olmayan bir parça için bir dikdörtgen kurar (src/cluster_erp/modules/nesting/engine/transforms.py:68-69).
Saklanan bir yerleşimi yeniden kurma¶
Şema bir çizimin saklanan bir işten nasıl üretildiğini gösterir.
flowchart LR J["NestingJob.layout_placements"] --> R["_reconstruct_placements"] P["NestingPart.geometry_polygon veya parça ölçüsü"] --> R R --> T["mirror_polygon, rotate_and_normalize, translate_polygon"] T --> S["render_svg veya render_multi_sheet_svg"] T --> D["write_multi_sheet_dxf"]
Düz anlatımla: _reconstruct_placements işten bir SheetGeom kurar ve saklanan her yerleşim için, varsa parçanın gerçek dış hattını, yoksa parçanın uzunluğu ve genişliğinde bir dikdörtgeni alır (src/cluster_erp/modules/nesting/nesting_jobs/routes.py:45-82). Yerleşim aynalıysa dış hattı aynalar, döndürür ve normalleştirir ve yerleşimin x ve y konumuna taşır (src/cluster_erp/modules/nesting/nesting_jobs/routes.py:84-90). GET /nesting-jobs/{id}/svg varsa saklanan layout_svg değerini döndürür; yoksa tüm levhaları, sheet_index verildiğinde ise tek bir levhayı işler (src/cluster_erp/modules/nesting/nesting_jobs/routes.py:307-361). GET /nesting-jobs/{id}/dxf çok levhalı bir DXF yazar (src/cluster_erp/modules/nesting/nesting_jobs/routes.py:364-396).
Yazıcılar¶
- DXF yazıcı levha dış hattını, parçaları, etiketleri ve artıkları dört adlı katmana yerleştirir (
src/cluster_erp/modules/nesting/engine/dxf_writer.py:19-27,src/cluster_erp/modules/nesting/engine/dxf_writer.py:30). - SVG yazıcı her levhayı payıyla, parça kimliğine göre renklendirilmiş parçalarla, etiketlerle ve artıklarla çizer (
src/cluster_erp/modules/nesting/engine/svg_writer.py:14-41,src/cluster_erp/modules/nesting/engine/svg_writer.py:147-239).
Neden böyle kurulmuştur¶
Kod iki neden belirtir. İş özeti, sonuçların yalnızca harici bir araçtan geldiğini, bu yüzden yerleşik algorithm değerini göstermenin yerleşimin nasıl yapıldığını yanlış yansıtacağını söyler (src/cluster_erp/modules/nesting/nesting_jobs/services.py:827-829). İçe aktarım, harici aracın kaynak DXF'i okuduğunu ve parça dış hattının asıl kaynağı olduğunu söyler (src/cluster_erp/modules/nesting/integration/services.py:214-216). Bu yorumların ötesinde gerekçe koddan belirlenemez.
Kurallar ve sınırlar¶
- Geometri kayan noktalı Shapely nesneleriyle hesaplanır; motordan çıkan alanlar dizgeler aracılığıyla
Decimaltürüne çevrilir (src/cluster_erp/modules/nesting/engine/types.py:49-61,src/cluster_erp/modules/nesting/integration/services.py:31-45). Motorda para hesaplanmaz. - Üst üste binme ve levha içinde kalma denetimi yalnızca yerleştirilen her parçanın gerçek bir dış hattı olduğunda çalışır; çünkü sınır kutusu denetimi iç içe geçmiş şekilleri reddederdi (
src/cluster_erp/modules/nesting/integration/services.py:53-64).
Diğer parçalarla etkileşim¶
Motor yalnızca nesting modülü içinde kullanılır: içe aktarım denetimi tarafından (src/cluster_erp/modules/nesting/integration/services.py:68-73) ve çizim uçları tarafından (src/cluster_erp/modules/nesting/nesting_jobs/routes.py:36-43, src/cluster_erp/modules/nesting/nesting_jobs/routes.py:328-371). Hiçbir sözleşme motor türlerini taşımaz. Web yerleşim görüntüleyicisi SVG ucunu yükler; bkz. nesting modülü.
Sınırlar ve açık noktalar¶
dxf_reader.pyiçindekiread_part_geometryDXF varlıklarını bir dış hatta dönüştürür (src/cluster_erp/modules/nesting/engine/dxf_reader.py:24-56).src/vetests/içinderead_part_geometryiçin yapılangrephiçbir çağıran bulmaz.SheetResultveNestResultyalnızcatypes.pyiçinde anılır (grep).- İş sütunları
algorithm(varsayılanheuristic),ga_population_size,ga_generationsvega_mutation_ratesaklanır (src/cluster_erp/modules/nesting/nesting_jobs/models.py:56-60,src/cluster_erp/modules/nesting/nesting_jobs/models.py:156-173). Üçga_adı için yapılangrepmodel ve şemalar dışında hiçbir kullanım bulmaz. - Varsayılan
result_sourcedeğeribuilt_inolur; bir içe aktarım onuexternalyapar (src/cluster_erp/modules/nesting/nesting_jobs/models.py:215-219,src/cluster_erp/modules/nesting/integration/services.py:323).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| placement | Placement |
Bir parçanın bir levhaya konum, döndürme ve aynalama bayrağıyla yerleştirilmiş tek bir örneği. | Yerleşim konumu | src/cluster_erp/modules/nesting/engine/types.py:65 |
| sheet geometry | SheetGeom |
Kenar payı, kesim payı ve parça aralığıyla levha ölçüsü. | Levha geometrisi | src/cluster_erp/modules/nesting/engine/types.py:13 |
| result source | result_source |
Bir işin yerleşiminin built_in mi external mı olduğu. |
Sonuç kaynağı | src/cluster_erp/modules/nesting/nesting_jobs/models.py:215 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.