Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / İş modülleri

Açıklama

Yerleşim motoru

nesting/engine paketinin kodda ne yaptığı, geometri türleri, dönüşümler, SVG ve DXF çıktısı, ve yerleşimlerin gerçekte nereden geldiği.

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.py ve svg_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 algorithm yerine 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 Decimal tü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.py içindeki read_part_geometry DXF varlıklarını bir dış hatta dönüştürür (src/cluster_erp/modules/nesting/engine/dxf_reader.py:24-56). src/ ve tests/ içinde read_part_geometry için yapılan grep hiçbir çağıran bulmaz.
  • SheetResult ve NestResult yalnızca types.py içinde anılır (grep).
  • İş sütunları algorithm (varsayılan heuristic), ga_population_size, ga_generations ve ga_mutation_rate saklanı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ılan grep model ve şemalar dışında hiçbir kullanım bulmaz.
  • Varsayılan result_source değeri built_in olur; bir içe aktarım onu external yapar (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ı.

Doğrulanan commit 92f8051 · 2026-11-13