Pencetakan 3D dari aplikasi Platform Windows Universal Anda

Pelajari cara menambahkan fungsionalitas pencetakan 3D ke aplikasi Platform Windows Universal (UWP) Anda.

Topik ini membahas cara memuat data geometri 3D ke dalam aplikasi Anda dan meluncurkan dialog cetak 3D setelah memastikan model 3D Anda dapat dicetak dan dalam format yang benar. Untuk contoh kerja prosedur ini, lihat sampel UWP pencetakan 3D.

API penting

Siapkan

Tambahkan namespace Layanan Windows.Graphics.Printing3D ke kelas aplikasi Anda yang memerlukan fungsionalitas cetak 3D.

using Windows.Graphics.Printing3D;

Namespace berikut juga akan digunakan dalam panduan ini.

using System;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

Selanjutnya, berikan bidang anggota kelas yang bermanfaat.

  • Nyatakan objek Print3DTask untuk mewakili tugas pencetakan yang akan diteruskan ke pengandar cetak.
  • Deklarasikan objek StorageFile untuk menyimpan file data 3D asli yang akan dimuat ke dalam aplikasi.
  • Deklarasikan objek Printing3D3MFPackage untuk mewakili model 3D siap cetak dengan semua metadata yang diperlukan.
private Print3DTask printTask;
private StorageFile file;
private Printing3D3MFPackage package = new Printing3D3MFPackage();

Membuat UI sederhana

Sampel ini menggunakan tombol Muat untuk membawa file ke dalam memori program, tombol Perbaikan untuk membuat modifikasi yang diperlukan pada file, dan tombol Cetak untuk memulai pekerjaan cetak. Kode berikut membuat tombol ini (dengan penanganan aktivitas saat diklik) dalam file XAML yang sesuai dari kelas .cs Anda.

<StackPanel Orientation="Vertical" VerticalAlignment="Center">
    <Button x:Name="loadbutton" Content="Load Model from File" HorizontalAlignment="Center" Margin="5,5,5,5" VerticalAlignment="Center" Click="OnLoadClick"/>
    <Button x:Name="fixbutton" Content="Fix Model" HorizontalAlignment="Center" Margin="5,5,5,5" VerticalAlignment="Center" Click="OnFixClick"/>
    <Button x:Name="printbutton" Content="Print" HorizontalAlignment="center" Margin="5,5,5,5" VerticalAlignment="Center" Click="OnPrintClick"/>

Sampel juga menyertakan TextBlock untuk umpan balik UI.

    <TextBlock x:Name="OutputTextBlock" TextAlignment="Center"></TextBlock>
</StackPanel>

Mendapatkan data 3D

Metode di mana aplikasi Anda memperoleh data geometri 3D dapat bervariasi. Aplikasi Anda dapat mengambil data dari pemindaian 3D, mengunduh data model dari sumber daya web, atau menghasilkan jala 3D secara terprogram menggunakan rumus matematika atau input pengguna. Di sini, kami menunjukkan cara memuat file data 3D (dari salah satu dari beberapa jenis file umum) ke dalam memori program dari penyimpanan perangkat. Pustaka model 3D Builder menyediakan berbagai model untuk Anda unduh.

Dalam metode , OnLoadClick kelas FileOpenPicker memuat satu file ke dalam memori aplikasi.

Kode berikut menunjukkan cara memuat satu file ke dalam memori aplikasi menggunakan kelas FileOpenPicker dalam OnLoadClick metode .

private async void OnLoadClick(object sender, RoutedEventArgs e) {

    FileOpenPicker openPicker = new FileOpenPicker();

    // allow common 3D data file types
    openPicker.FileTypeFilter.Add(".3mf");
    openPicker.FileTypeFilter.Add(".stl");
    openPicker.FileTypeFilter.Add(".ply");
    openPicker.FileTypeFilter.Add(".obj");

    // pick a file and assign it to this class' 'file' member
    file = await openPicker.PickSingleFileAsync();
    if (file == null) {
        return;
    }

Gunakan 3D Builder untuk mengonversi ke Format Manufaktur 3D (.3mf)

Data geometri 3D dapat datang dalam berbagai format, dan tidak semua efisien untuk pencetakan 3D. Windows menggunakan jenis file Format Manufaktur 3D (.3mf) untuk semua tugas pencetakan 3D.

Lihat Spesifikasi 3MF untuk mempelajari lebih lanjut tentang 3MF dan fitur yang didukung untuk produsen dan konsumen produk 3D. Untuk mempelajari cara menggunakan fitur-fitur ini dengan API Windows, lihat tutorial Membuat paket 3MF .

Catatan

Aplikasi 3D Builder dapat membuka file dengan format 3D paling populer dan menyimpannya sebagai file .3mf. Ini juga menyediakan alat untuk mengedit model Anda, menambahkan data warna, dan melakukan operasi khusus cetak lainnya.

Dalam contoh ini, di mana jenis file dapat bervariasi, Anda dapat membuka aplikasi 3D Builder dan meminta pengguna untuk menyimpan data yang diimpor sebagai file .3mf lalu memuat ulang.

    // if user loaded a non-3mf file type
    if (file.FileType != ".3mf") {

        // elect 3D Builder as the application to launch
        LauncherOptions options = new LauncherOptions();
        options.TargetApplicationPackageFamilyName = "Microsoft.3DBuilder_8wekyb3d8bbwe";

        // Launch the retrieved file in 3D builder
        bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);

        // prompt the user to save as .3mf
        OutputTextBlock.Text = "save " + file.Name + " as a .3mf file and reload.";
        
        // have user choose another file (ideally the newly-saved .3mf file)
        file = await openPicker.PickSingleFileAsync();

    } else {
        // if the file type is .3mf
        // notify user that load was successful
        OutputTextBlock.Text = file.Name + " loaded as file";
    }
}

Memperbaiki data model untuk pencetakan 3D

Tidak semua data model 3D dapat dicetak, bahkan dalam jenis .3mf. Agar printer dapat menentukan dengan benar ruang apa yang harus diisi dan apa yang harus diisi dan apa yang harus dikosongkan, setiap model yang akan dicetak harus menjadi jala yang mulus tunggal, memiliki permukaan normal yang menghadap ke luar, dan memiliki geometri manifold. Masalah di area ini dapat muncul dalam berbagai bentuk yang berbeda dan bisa sulit ditemukan dalam bentuk yang kompleks. Namun, solusi perangkat lunak modern sering kali memadai untuk mengonversi geometri mentah menjadi bentuk 3D yang dapat dicetak. Ini dikenal sebagai memperbaiki model dan diimplementasikan dalam metode yang OnFixClick ditunjukkan di sini.

Catatan

File data 3D harus dikonversi untuk mengimplementasikan IRandomAccessStream, yang kemudian dapat digunakan untuk menghasilkan objek Printing3DModel .

private async void OnFixClick(object sender, RoutedEventArgs e) {

    // read the loaded file's data as a data stream
    IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read);

    // assign a Printing3DModel to this data stream
    Printing3DModel model = await package.LoadModelFromPackageAsync(fileStream);

    // use Printing3DModel's repair function
    OutputTextBlock.Text = "repairing model";
    var data = model.RepairAsync();

Objek Printing3DModel sekarang harus diperbaiki dan dapat dicetak. Gunakan SaveModelToPackageAsync untuk menetapkan model ke objek Printing3D3MFPackage yang Anda deklarasikan saat membuat kelas.

    // save model to this class' Printing3D3MFPackage
    OutputTextBlock.Text = "saving model to 3MF package";
    await package.SaveModelToPackageAsync(model);

}

Menjalankan tugas pencetakan: membuat handler TaskRequested

Kemudian, ketika dialog cetak 3D ditampilkan kepada pengguna dan pengguna memilih untuk mulai mencetak, aplikasi Anda harus meneruskan parameter yang diinginkan ke alur cetak 3D. API cetak 3D akan menaikkan peristiwa TaskRequested , yang memerlukan penanganan dengan tepat.

private void MyTaskRequested(Print3DManager sender, Print3DTaskRequestedEventArgs args) {

Tujuan inti dari metode ini adalah untuk menggunakan parameter args untuk mengirim Printing3D3MFPackage ke bawah alur. Jenis Print3DTaskRequestedEventArgs memiliki satu properti: Permintaan. Ini adalah jenis Print3DTaskRequest dan mewakili satu permintaan pekerjaan cetak. Metode CreateTask memungkinkan aplikasi mengirimkan informasi yang benar untuk pekerjaan cetak Anda dan mengembalikan referensi ke objek Print3DTask yang dikirimkan ke alur cetak 3D.

CreateTask memiliki parameter input berikut: string untuk nama pekerjaan cetak, string untuk ID printer yang akan digunakan, dan delegasi Print3DTaskSourceRequestedHandler . Delegasi secara otomatis dipanggil ketika peristiwa 3DTaskSourceRequested dinaikkan (ini dilakukan oleh API itu sendiri). Hal penting yang perlu diperhatikan adalah bahwa delegasi ini dipanggil ketika pekerjaan cetak dimulai, dan bertanggung jawab untuk menyediakan paket cetak 3D yang tepat.

Print3DTaskSourceRequestedHandler mengambil satu parameter, objek Print3DTaskSourceRequestedArgs , yang berisi data yang akan dikirim. Metode SetSource menerima paket yang akan dicetak. Kode berikut menunjukkan implementasi delegasi Print3DTaskSourceRequestedHandler (sourceHandler).

// this delegate handles the API's request for a source package
Print3DTaskSourceRequestedHandler sourceHandler = delegate (Print3DTaskSourceRequestedArgs sourceRequestedArgs) {
    sourceRequestedArgs.SetSource(package);
};

Selanjutnya, panggil CreateTask, menggunakan delegasi yang baru ditentukan.

// the Print3DTaskRequest ('Request'), a member of 'args', creates a Print3DTask to be sent down the pipeline.
printTask = args.Request.CreateTask("Print Title", "Default", sourceHandler);

Print3DTask yang dikembalikan ditetapkan ke variabel kelas yang dideklarasikan di awal. Referensi ini dapat digunakan untuk menangani peristiwa tertentu yang dilemparkan oleh tugas.

// optional events to handle
printTask.Completed += Task_Completed; 
printTask.Submitting += Task_Submitting;

Catatan

Anda harus menerapkan Task_Submitting metode dan Task_Completed jika Anda ingin mendaftarkannya ke peristiwa ini.

Jalankan tugas pencetakan: buka dialog cetak 3D

Terakhir, Anda perlu meluncurkan dialog cetak 3D yang menyediakan sejumlah opsi pencetakan.

Di sini, kami mendaftarkan MyTaskRequested metode dengan peristiwa TaskRequested .

private async void OnPrintClick(object sender, RoutedEventArgs e) {

    // get a reference to this class' Print3DManager
    Print3DManager myManager = Print3DManager.GetForCurrentView();

    // register the method 'MyTaskRequested' to the Print3DManager's TaskRequested event
    myManager.TaskRequested += MyTaskRequested;

Setelah mendaftarkan penanganan aktivitas TaskRequested , Anda dapat memanggil metode ShowPrintUIAsync, yang memunculkan dialog cetak 3D di jendela aplikasi saat ini.

// show the 3D print dialog
OutputTextBlock.Text = "opening print dialog";
var result = await Print3DManager.ShowPrintUIAsync();

Ini juga merupakan praktik yang baik untuk membatalkan pendaftaran penanganan aktivitas Anda setelah aplikasi Anda melanjutkan kontrol.

    // remove the print task request after dialog is shown            
    myManager.TaskRequested -= MyTaskRequested;
}

Pencetakan 3D dengan Windows 10Buat paket 3MF
Sampel UWP pencetakan 3D