AutoAlign adalah macro VBA untuk CorelDRAW yang dirancang untuk menyusun dan menggandakan objek Design beserta Cut Line secara otomatis di dalam area produksi.
Macro ini membantu mengurangi pekerjaan manual saat menentukan jumlah objek yang muat, mengatur jarak, mencoba pola susunan, dan menjaga hasil agar tetap berada di dalam area serta menghindari zona mark.
AutoAlign menyediakan mode Minimum dan Medium, model area KissA, DieA, dan Custom, serta pengaturan Quantity untuk jumlah tertentu, pengisian sisa area, atau pembagian beberapa Design dalam satu container.
Objek yang akan diproses didaftarkan ke lbxObjects sebagai:
- Design melalui
cmdSetDesign. - Cut Line melalui
cmdSetCutLine.
Daftar menyimpan peran, StaticID, dan Quantity setiap Design. Objek dengan ID yang sama tidak ditambahkan dua kali.
Pendaftaran beberapa objek sekaligus mengikuti urutan baris dari atas ke bawah, lalu kiri ke kanan. Baris ditentukan dari pusat Y tertinggi dengan toleransi 1 mm terhadap objek pertama pada baris tersebut.
lbxObjects mendukung pilihan banyak baris menggunakan Ctrl/Shift. cmdRemove menghapus baris terpilih dan cmdClear mengosongkan daftar; keduanya mengubah daftar tanpa menghapus objek di dokumen.
Semua objek dalam daftar harus berasal dari satu dokumen dan satu halaman, berada langsung pada halaman atau berupa group induk, serta berada pada layer yang dapat diedit.
AutoAlign mendukung tiga susunan input:
| Input | Perilaku |
|---|---|
| Design tanpa Cut Line | Susunan memakai siluet luar Design sebagai acuan. |
| Satu Cut Line | Cut Line digunakan bersama oleh Design yang didaftarkan. |
| Cut Line sebanyak Design | Design ke-1 dipasangkan dengan Cut Line ke-1, dan seterusnya menurut urutan masing-masing peran dalam daftar. |
Untuk pasangan, Cut Line menjadi acuan pola, gap, dan collision antarunit. Bounds Design tetap diperiksa agar muat di dalam area. Artwork Design berpasangan dapat bertumpuk selama acuan Cut Line memenuhi aturan susunan.
Untuk pasangan selain rectangle bersudut runcing, Design boleh lebih kecil maksimal 0,2 mm atau lebih besar maksimal 2 mm dari Cut Line pada setiap sumbu.
Saat beberapa Design memakai satu Cut Line bersama tanpa Quantity /n, susunan Design pertama yang aktif menjadi template untuk Design lain pada container terpisah. Satu susunan Cut Line dibuat untuk dipakai bersama. Quantity Design pertama menjadi acuan template; Quantity 0 tetap melewati Design terkait.
optMinimum membandingkan rencana Straight dan ZigZag secara keseluruhan, dengan prioritas:
- Jumlah area paling sedikit.
- Jumlah Design paling banyak.
- Isi area awal lebih banyak.
- Straight jika hasil tetap sama.
Rectangle, termasuk rectangle dengan sudut lengkung, disusun dengan pola Straight.
Perencanaan memeriksa batas area, zona mark, gap kontur, dan collision. Langkah Straight dan ZigZag mengikuti kontur acuan serta gap yang diminta. Saat susunan perlu menyesuaikan posisi terhadap mark, Minimum mencoba pergeseran bersama sebelum mengurangi isi susunan.
Untuk Quantity berupa angka dengan beberapa Design berbeda dalam satu container, Minimum juga mencoba posisi tambahan berdasarkan tepi dan alignment tetangga pada rotasi 0° sebelum membuka container baru. Pencarian tambahan ini tetap dibatasi dan harus memenuhi gap, batas area, serta zona mark.
optMedium mencoba kandidat rotasi dan pergeseran untuk mencari susunan yang lebih baik. Rencana Minimum yang lolos validasi juga ikut menjadi kandidat.
- Bentuk non-rectangle mencoba rotasi relatif terhadap sumber dengan langkah 45°:
0°,45°,90°,135°,180°,225°,270°, dan315°. - Rectangle memakai rotasi dengan langkah 90°.
- Segitiga dan kurva custom yang memenuhi syarat dapat memakai pola pasangan dengan rotasi berlawanan, offset vertikal, dan perapatan menurut kontur.
- Pemilihan mengutamakan jumlah area paling sedikit, jumlah Design paling banyak, lalu keteraturan pola. Setelah itu, luas bounding box acuan collision ikut dibandingkan.
- Perapatan dan perataan tetangga tetap diperiksa terhadap gap, collision, batas area, dan mark.
Jika lebar dan tinggi susunan acuan collision pada setiap area setara dalam toleransi 0,001 mm, Medium memilih total rotasi tambahan paling sedikit terhadap orientasi sumber. Toleransi ini hanya untuk membandingkan kandidat, bukan kelonggaran gap atau batas area. Jika total rotasi juga sama, isi area awal diprioritaskan.
Medium memakai pencarian heuristik dengan batas kandidat. Hasilnya bukan jaminan nesting paling optimal untuk setiap bentuk. Waktu Process dapat bertambah pada kurva kompleks, banyak sumber, atau pencarian Quantity kelompok.
| Model | Kontrol | Area susun | Acuan sheet untuk mark |
|---|---|---|---|
| KissA | optKissA |
Preferensi; awal 320 × 470 mm | 325 × 485 mm |
| DieA | optDieA |
Preferensi; awal 320 × 470 mm | 325 × 485 mm |
| Custom | optCustom |
txbAreaWidth × txbAreaHeight; default 320 × 470 mm |
Tanpa zona mark preset |
Kolom ukuran area hanya aktif pada Custom. Lebar dan tinggi harus lebih besar dari nol.
Zona mark preset menjadi area yang dihindari saat menyusun objek:
| Model | Bentuk dan ukuran zona | Pusat zona pada sheet preset, dalam mm |
|---|---|---|
| KissA | Empat persegi 10 × 10 mm | (6; 10), (6; 475), (319; 10), (319; 475) |
| KissA | Satu persegi 12 × 12 mm | (162,5; 11,5) |
| DieA | Empat ellipse 11 × 11 mm | (11; 11), (11; 474), (314; 11), (314; 474) |
Pemeriksaan zona mark memakai toleransi penetrasi 0,2 mm dari tepi mark. Zona ini adalah acuan perencanaan; Process tidak membuat objek sensor atau mark fisik.
Ukuran sheet preset dipakai sementara saat Process, lalu ukuran halaman asli dipulihkan. Hasil tetap mengacu pada pusat halaman asli.
Gap diatur melalui txbGapHorizontal dan txbGapVertical. Isi jarak kontur dalam mm, dengan nilai minimal 0 mm. Pengaturan ini berlaku pada Minimum dan Medium.
Kolom kosong memakai preferensi default model. Nilai bawaan:
| Model | Gap H default | Gap V default |
|---|---|---|
| KissA | 0 mm | 0 mm |
| DieA | 0 mm | 0 mm |
| Custom | 0 mm | 0 mm |
Pada KissA/DieA, rectangle bersudut runcing memakai gap default 0 mm. Input manual diutamakan. Angka desimal dapat menggunakan titik atau koma, misalnya 1.5 atau 1,5.
Tombol cmdDefaultSetting membuka DefaultSettings untuk mengatur Area W/H dan Gap H/V per model. Berpindah KissA/DieA mempertahankan draft masing-masing; Save menyimpan keduanya, sedangkan Cancel atau tombol X membuang perubahan. Area harus positif, gap minimal 0 mm, dan seluruh kolom harus terisi. Hint form utama mengikuti preferensi setelah Save; input gap manual dan input area Custom dipertahankan.
Preferensi disimpan di registry Windows dan dimuat saat AutoAlign digunakan kembali. Ukuran halaman preset dan koordinat mark terpisah dari pengaturan area susun.
Objek acuan adalah Cut Line pada pasangan, atau Design pada standalone. Pemilihan gap mengikuti arah antarpusat bounding box acuan collision:
| Posisi relatif acuan | Gap yang dipakai |
|---|---|
| Sebaris | Gap H |
| Sekolom | Gap V |
| Diagonal | Nilai terbesar antara Gap H dan Gap V |
Gap diperiksa terhadap kontur acuan sesuai arah tetangga pada tabel. Gap 0 memperbolehkan objek bersinggungan, dengan pemeriksaan collision tetap aktif. Pada Minimum, langkah Straight dan ZigZag mengikuti kontur serta gap yang diminta.
Input gap Minimum dan Medium disimpan terpisah saat berpindah mode. Pada kunjungan pertama ke Medium, input mm dari Minimum diteruskan sebagai nilai awal. Angka abu-abu pada kolom kosong adalah placeholder, bukan nilai manual.
txbQuantity berlaku untuk Design. Jika beberapa Design dipilih di lbxObjects, perubahan Quantity diterapkan ke seluruh Design terpilih.
| Nilai | Perilaku |
|---|---|
| Kosong | Mengisi sisa area aktif; mencoba area baru jika sumber tidak muat pada sisa area. |
0 |
Melewati Design tersebut. |
Bilangan bulat positif, misalnya 100 |
Menyusun jumlah yang diminta; kebutuhan yang belum tertampung dilanjutkan ke area berikutnya. |
/n, misalnya /1 |
Mengelompokkan Design dengan nomor yang sama untuk dibagi dalam satu container. |
Tanda - yang tampil saat Quantity kosong adalah placeholder; gunakan kolom kosong untuk pengisian otomatis. Token / harus disertai nomor kelompok positif; / saja dan /0 tidak valid.
Quantity kelompok /n tersedia pada Minimum dan Medium, untuk Design standalone, Cut Line bersama, maupun Cut Line masing-masing. Contohnya, beri /1 pada dua Design agar keduanya mengisi satu container kelompok yang sama. /2 membuat kelompok lain.
Kelompok diproses menurut nomor, lalu Design dengan Quantity biasa diproses terpisah. Pembagian memakai template jika acuan sesuai, atau mencari kuota yang muat dalam satu area. Pembagian template memiliki selisih maksimal satu objek; pencarian kuota dan surplus mengizinkan selisih maksimal dua objek antar Design. Nomor setelah / adalah ID kelompok, bukan jumlah salinan atau pembagi.
Susunan Cut Line bersama yang identik dapat memakai satu template Cut Line. Kelompok /n tetap harus muat dalam satu container.
Indikator progres tampil tanpa perlu mengaktifkan Debug:
| Kontrol | Tampilan |
|---|---|
lblProgressStage |
Tahap yang sedang berjalan, seperti membaca geometri, mencari susunan, merapatkan, atau mengelompokkan hasil. |
lblProgressDetail |
Detail pekerjaan, kelompok Quantity, nomor percobaan/pola, atau jumlah yang sudah diproses. |
lblProgressTime |
Durasi Process dalam format menit:detik. |
frmProgress dan lblProgressFill |
Bar aktivitas atau progres tahap yang sedang berjalan. |
Saat pencarian susunan, bar bergerak sebagai indikator aktivitas; bar ini bukan persentase keseluruhan Process. Pada tahap yang mempunyai total, seperti membaca geometri dan membuat objek hasil, isi bar mengikuti jumlah yang telah diproses.
Pembaruan panel dan pemrosesan event memakai interval 200 ms pada checkpoint. Operasi CorelDRAW yang sedang berjalan dapat membuat jeda aktual lebih panjang.
Selama Process, input form dan interaksi dengan jendela dokumen dinonaktifkan sementara. Tombol Close berubah menjadi Cancel untuk meminta pembatalan. Permintaan diproses pada checkpoint berikutnya; operasi CorelDRAW yang sedang berjalan perlu selesai terlebih dahulu. Selama pemulihan, tombol menampilkan Membatalkan.... Setelah pembatalan, perubahan Process dipulihkan, form tetap terbuka, dan tombol kembali menjadi Close. Saat tidak ada proses berjalan, Close menutup form.
- Area pertama mengacu pada pusat halaman asli. Area tambahan ditempatkan ke kanan pada halaman yang sama, dengan jarak antartepi area 50 mm.
- Objek sumber digunakan sebagai hasil pertama, lalu diduplikasi untuk slot berikutnya.
- Hasil digroup menurut area, sumber, peran, dan layer; Design dan Cut Line tetap terpisah.
- Layer sumber dipertahankan dengan koreksi urutan pasangan bila diperlukan. Pada layer bernama
Layer n, pasangan yang terbalik dapat ditukar layernya; Cut Line pada layer yang sama ditempatkan di depan Design. - Urutan anggota group mengikuti urutan penempatan.
- Group hasil menjadi selection aktif. Process mengaktifkan Pick Tool, termasuk jika dijalankan saat Shape Tool aktif.
- Gunakan Undo sekali untuk membatalkan hasil Process sebelum mencoba mode lain dengan daftar sumber yang sama.
- Satuan dokumen dan ruler yang dipakai sementara dipulihkan setelah Process.
cmdOptimize membaca anggota group container yang terdaftar di lbxObjects. Pilihan optMinimum atau optMedium menentukan algoritma Optimize. Jumlah, rotasi, struktur group, dan offset pasangan Design/Cut Line dipertahankan; Quantity tidak mengubah susunan pada operasi ini. Container yang hanya berisi Cut Line juga didukung.
Optimize Minimum ditujukan untuk susunan baris/kolom sederhana:
- Catat keanggotaan baris dan kolom dari posisi awal. Pusat bounding box Cut Line menjadi acuan untuk pasangan; tanpa pasangan, gunakan pusat Design. Toleransi baris adalah 25% tinggi anchor, sedangkan toleransi kolom 25% lebar anchor. Anggota dibandingkan langsung dengan anchor tetap, tanpa pengelompokan berantai melalui tetangga.
- Proses baris dari pusat Y terbesar ke terkecil. Anchor tiap baris adalah objek paling kiri; pusat Y anggota mengikuti anchor. Objek berikutnya digeser ke kanan jika gap terlalu kecil atau ke kiri jika terlalu lebar, dengan urutan kiri ke kanan tetap dipakai.
- Pakai keanggotaan kolom yang sudah dicatat. Anchor paling atas pada tiap kolom mengikuti posisi hasil tahap baris. Pusat X anggota di bawahnya mengikuti anchor; pergeseran ke atas/bawah menyesuaikan gap vertikal. Koreksi ini dapat mengubah pusat Y anggota setelah tahap baris.
Pencarian memakai pemeriksaan gap kontur dan collision yang sama dengan planner, serta memeriksa bounds Design dan zona mark. Gap awal yang terlalu kecil dapat diperbaiki; susunan boleh melebar atau meninggi sampai batas area. Minimum mempertahankan anchor tanpa memusatkan ulang seluruh hasil. Jika pencarian tidak menemukan posisi aman atau mencapai batas pencarian, proses dibatalkan dengan pesan dan posisi objek asli dipertahankan.
Optimize Medium merapatkan kelompok baris, kolom, dan objek individual, kemudian mencoba memusatkan hasil jika valid. Susunan awal harus memenuhi area, gap, dan mark. Mode ini dapat dicoba untuk susunan dengan bentuk/ukuran campuran; hasilnya tetap perlu diperiksa. optMaximum dinonaktifkan.
Satu Optimize memakai satu CommandGroup dan memulihkan unit dokumen/ruler serta seleksi. Seluruh rencana divalidasi sebelum perubahan diterapkan; hasil aktual diperiksa lagi dan posisi dipulihkan bila gagal. Cancel tersedia melalui lifecycle progres yang sama dengan Process. Pengguna mengonfirmasi compile VBE aman dan melaporkan pengujian awal susunan Straight standar. Rincian hasil gap/anchor, variasi bentuk, serta satu Undo belum dikonfirmasi untuk perubahan ini; simulasi dengan geometri/host mock tetap dibedakan dari hasil runtime tersebut.
- Buka dokumen dan halaman sumber di CorelDRAW, lalu buka
AutoAlignMenu. - Pilih objek Design dan tekan
cmdSetDesign. - Jika memakai Cut Line, daftarkan satu Cut Line bersama atau pasangan sebanyak Design melalui
cmdSetCutLine. Periksa urutan pasangan dalam daftar. - Pilih KissA, DieA, atau Custom. Untuk Custom, isi ukuran area jika ingin mengganti default.
- Pilih Minimum atau Medium, lalu atur Gap H/V sesuai kebutuhan.
- Pilih Design di
lbxObjectsdan atur Quantity. Gunakan Ctrl/Shift untuk menerapkan jumlah atau/nke beberapa Design sekaligus. - Tekan
cmdProcess, lalu periksa susunan, jumlah, gap, dan pasangan hasil. - Untuk membandingkan mode lain, lakukan Undo sekali sebelum Process berikutnya.
cmdClosemenutup form.
Repository menyediakan source VBA berupa code-behind UserForm, class module, dan standard module. Layout visual UserForm lengkap serta paket GMS siap pakai tidak disertakan. Siapkan UserForm AutoAlignMenu dan kontrol sesuai nama dalam kode saat memasangnya di project VBA CorelDRAW.
| Lokasi | Peran |
|---|---|
src/forms/AutoAlignMenu.vba |
Pendaftaran objek, pilihan model/mode, input gap, Quantity, Process, dan callback MacroRunner. |
src/classes/AAPresenter.cls, AAObjectStore.cls, AASettings.cls |
Penghubung form, daftar objek, dan validasi pengaturan. |
src/classes/AADefaultPreferences.cls, src/forms/DefaultSettings.vba |
Preferensi Area/Gap per model, draft editor dan penyimpanan registry. |
src/classes/AAProcessEngine.cls, AAResultBuilder.cls |
Menjalankan proses, menangani pasangan/kelompok, dan membangun hasil. |
src/classes/AAOptimizeEngine.cls, AAOptimizeMinimum.cls, AAOptimizeLayout.cls |
Optimize Minimum/Medium, snapshot kelompok, validasi, dan penerapan translasi. Import sebagai Class Module dengan nama yang sesuai. |
src/classes/AAPlanner.cls, AAMediumPlanner.cls, AAQuantityPlanner.cls |
Perencanaan Minimum, Medium, dan kuota kelompok. |
src/classes/AAModel.cls, AAGeometry.cls, AAContour.cls, AAOccupiedIndex.cls |
Acuan bentuk, kontur, rotasi, gap, dan pemeriksaan tetangga. |
src/modules/AAAlgorithm.bas |
Konstanta serta aturan layer dan Z-Order. |
src/modules/AADebug.bas |
Debug, profiling, dan diagnostik memori. |
src/modules/AAGapBenchmark.bas |
Benchmark diagnostik fungsi jarak lama/baru melalui Immediate Window. Import sebagai Standard Module bernama AAGapBenchmark. |
src/modules/AAProgress.bas |
Indikator tahap/detail/durasi, pembaruan bar, serta penguncian sementara jendela dokumen saat Process. |
src/modules/MRTargetBridge.bas |
Membuka form melalui OpenMacro dan menghubungkan callback MacroRunner. |
Changelog.log |
Riwayat perubahan. |
Integrasi MacroRunner mendukung pembukaan/penutupan form dan pencatatan durasi Process. Pengaturan serta penyusunan dijalankan melalui form AutoAlign.
Preferensi pengguna tersimpan pada HKCU\Software\VB and VBA Program Settings\RinCorelMacros\AutoAlignDefaults, nilai ProfilesV1.
Helper Debug dan progres disembunyikan dari daftar macro workspace. Debug nonaktif secara default. Jalankan perintah berikut di Immediate Window pada project VBA AutoAlign:
AADebugOn ' Ringkas
AADebugOn True ' Detail
AADebugFileOn ' Tambahkan log ke TEMP\AutoAlign-Debug.txt
AADebugFileOff ' Hentikan keluaran file
AADebugOff ' Matikan debug dan tutup file logDebug menyediakan informasi kandidat, waktu tahap Process, pemeriksaan gap/overlap, penempatan, dan snapshot memori proses CorelDRAW. AADebugFileOn juga menerima path file dan menambahkan log ke isi yang sudah ada.
Pada pencarian kuota Medium, Quota reject cache mencatat pemeriksaan posisi gagal yang dipakai ulang (hits), pencarian tanpa kecocokan (misses), dan penggantian slot cache (replacements). Counter ini membantu membandingkan biaya trial pada kasus yang sama.
edge batches mencatat pemakaian query indeks untuk kelompok segmen: queries adalah query gabungan, prechecks pemeriksaan awal per kelompok, dan rechecks verifikasi penolakan melalui query per segmen. fallback cells/spread/dense membedakan batas luas sel, pelebaran query, dan kepadatan kandidat; fallback juga mencakup kelompok yang terlalu pendek. source edges menghitung segmen sumber pada jalur tanpa fallback, termasuk pemeriksaan awal. offered adalah jumlah kandidat yang disediakan untuk pemeriksaan batch, bukan jumlah pasangan yang benar-benar dihitung jaraknya.
Untuk membandingkan biaya fungsi jarak, import AAGapBenchmark.bas, lalu jalankan AADebugBenchmarkGap saat Process tidak berjalan. Helper memakai 4096 pasangan segmen sintetis yang tetap, memeriksa kesamaan hasil, melakukan pemanasan, lalu menjalankan delapan putaran dengan urutan A/B bergantian. A memakai rumus empat akar, B rumus satu akar. median paired ratio B/A di bawah 1 berarti B lebih cepat pada corpus tersebut; angka ini tidak mewakili percepatan Process atau pengujian kurva native.
Benchmark tidak memerlukan dokumen atau seleksi. Hasil tampil di Immediate Window dan mengikuti file debug jika aktif. Contoh penyimpanan log:
AADebugOn
AADebugFileOn Environ$("TEMP") & "\AutoAlign-GapBenchmark.txt"
AADebugBenchmarkGap
AADebugOff- Process menyediakan mode Minimum dan Medium.
optMaximumdinonaktifkan. Optimize bersifat eksperimental; periksa hasil pemadatannya sebelum digunakan. - Perencanaan dibatasi hingga 5000 objek per sumber; satu Cut Line bersama juga mempunyai batas jumlah terkait.
- Sumber harus mempunyai ukuran yang valid dan kurva yang dapat dibaca. Pada group yang perlu dibaca geometrinya, anggota tanpa kurva dapat menyebabkan validasi gagal.
- Daftar mempertahankan ID sumber. Jika sumber dihapus, dipindah, atau berubah struktur, pulihkan sumber atau daftarkan ulang sebelum Process.
- Hasil bergantung pada bentuk, jumlah sumber, model area, gap, Quantity, dan batas pencarian.
Project ini menggunakan MIT License; lihat LICENSE.
Source boleh dipelajari dan dikembangkan, dan issue/feedback tentang bug, edge case, CorelDRAW API, architecture, atau improvement sangat dihargai.