Partager via


Impression 3D à partir de votre application plateforme Windows universelle

Découvrez comment ajouter des fonctionnalités d’impression 3D à votre application plateforme Windows universelle (UWP).

Cette rubrique explique comment charger des données géométriques 3D dans votre application et lancer la boîte de dialogue d’impression 3D après avoir vérifié que votre modèle 3D est imprimable et au format correct. Pour obtenir un exemple de fonctionnement de ces procédures, consultez l’exemple d’impression UWP 3D.

API importantes

Programme d’installation

Ajoutez l’espace de noms Windows.Graphics.Printing3D à votre classe d’application qui nécessite des fonctionnalités d’impression 3D.

using Windows.Graphics.Printing3D;

Les espaces de noms suivants seront également utilisés dans ce guide.

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;

Ensuite, donnez à votre classe des champs membres utiles.

  • Déclarez un objet Print3DTask pour représenter la tâche d’impression à transmettre au pilote d’impression.
  • Déclarez un objet StorageFile pour contenir le fichier de données 3D d’origine qui sera chargé dans l’application.
  • Déclarez un objet Printing3D3MFPackage pour représenter un modèle 3D prêt pour l’impression avec toutes les métadonnées nécessaires.
private Print3DTask printTask;
private StorageFile file;
private Printing3D3MFPackage package = new Printing3D3MFPackage();

Créer une interface utilisateur simple

Cet exemple utilise un bouton Charger pour placer un fichier dans la mémoire du programme, un bouton Corriger pour apporter les modifications nécessaires au fichier et un bouton Imprimer pour lancer le travail d’impression. Le code suivant crée ces boutons (avec leurs gestionnaires d’événements en cliquant) dans le fichier XAML correspondant de votre classe .cs.

<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"/>

L’exemple inclut également un TextBlock pour les commentaires de l’interface utilisateur.

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

Obtenir les données 3D

La méthode par laquelle votre application acquiert des données géométriques 3D peut varier. Votre application peut récupérer des données à partir d’une analyse 3D, télécharger des données de modèle à partir d’une ressource web ou générer un maillage 3D par programmation à l’aide de formules mathématiques ou d’entrées utilisateur. Ici, nous montrons comment charger un fichier de données 3D (de l’un des types de fichiers courants) dans la mémoire du programme à partir du stockage d’appareils. La bibliothèque de modèles 3D Builder fournit un large éventail de modèles que vous pouvez télécharger.

Dans la OnLoadClick méthode, la classe FileOpenPicker charge un seul fichier dans la mémoire de l’application.

Le code suivant montre comment charger un fichier unique dans la mémoire de l’application à l’aide de la classe FileOpenPicker dans la OnLoadClick méthode.

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;
    }

Utiliser 3D Builder pour convertir en format de fabrication 3D (.3mf)

Les données géométriques 3D peuvent être fournies dans de nombreux formats différents, et toutes ne sont pas toutes efficaces pour l’impression 3D. Windows utilise le type de fichier 3D Manufacturing Format (.3mf) pour toutes les tâches d’impression 3D.

Consultez la spécification 3MF pour en savoir plus sur 3MF et les fonctionnalités prises en charge pour les producteurs et les consommateurs de produits 3D. Pour savoir comment utiliser ces fonctionnalités avec les API Windows, consultez le didacticiel Générer un package 3MF.

Remarque

L’application 3D Builder peut ouvrir des fichiers de formats 3D les plus populaires et les enregistrer sous forme de fichiers .3mf. Il fournit également des outils pour modifier vos modèles, ajouter des données de couleur et effectuer d’autres opérations spécifiques à l’impression.

Dans cet exemple, où le type de fichier peut varier, vous pouvez ouvrir l’application 3D Builder et inviter l’utilisateur à enregistrer les données importées sous la forme d’un fichier .3mf, puis la recharger.

    // 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";
    }
}

Réparer les données de modèle pour l’impression 3D

Toutes les données de modèle 3D ne sont pas imprimables, même dans le type .3mf. Pour que l’imprimante détermine correctement l’espace à remplir et ce qui laisse vide, chaque modèle à imprimer doit être un maillage fluide unique, avoir des normales de surface vers l’extérieur et avoir une géométrie multiple. Les problèmes dans ces domaines peuvent survenir sous différentes formes et peuvent être difficiles à repérer dans des formes complexes. Toutefois, les solutions logicielles modernes sont souvent adéquates pour convertir la géométrie brute en formes 3D imprimables. Ceci est appelé réparation du modèle et est implémenté dans la OnFixClick méthode indiquée ici.

Remarque

Le fichier de données 3D doit être converti pour implémenter IRandomAccessStream, qui peut ensuite être utilisé pour générer un objet 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();

L’objet Printing3DModel doit maintenant être réparé et imprimable. Utilisez SaveModelToPackageAsync pour affecter le modèle à l’objet Printing3D3MFPackage que vous avez déclaré lors de la création de la classe.

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

}

Exécuter la tâche d’impression : créer un gestionnaire TaskRequested

Plus tard, lorsque la boîte de dialogue d’impression 3D s’affiche à l’utilisateur et que l’utilisateur choisit de commencer l’impression, votre application doit passer les paramètres souhaités au pipeline d’impression 3D. L’API d’impression 3D déclenche l’événement TaskRequested , ce qui nécessite une gestion appropriée.

private void MyTaskRequested(Print3DManager sender, Print3DTaskRequestedEventArgs args) {

L’objectif principal de cette méthode est d’utiliser le paramètre args pour envoyer un Printing3D3MFPackage vers le bas du pipeline. Le type Print3DTaskRequestedEventArgs a une propriété : Request. Il s’agit du type Print3DTaskRequest et représente une demande de travail d’impression. Sa méthode CreateTask permet à l’application d’envoyer les informations appropriées pour votre travail d’impression et de renvoyer une référence à l’objet Print3DTask envoyé dans le pipeline d’impression 3D.

CreateTask a les paramètres d’entrée suivants : une chaîne pour le nom du travail d’impression, une chaîne pour l’ID de l’imprimante à utiliser et un délégué Print3DTaskSourceRequestedHandler . Le délégué est appelé automatiquement lorsque l’événement 3DTaskSourceRequested est déclenché (cela est effectué par l’API elle-même). Il est important de noter que ce délégué est appelé lorsqu’un travail d’impression est lancé et qu’il est responsable de la fourniture du package d’impression 3D approprié.

Print3DTaskSourceRequestedHandler prend un paramètre, un objet Print3DTaskSourceRequestedArgs , qui contient les données à envoyer. La méthode SetSource accepte l’impression du package. Le code suivant montre une implémentation de délégué Print3DTaskSourceRequestedHandler (sourceHandler).

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

Ensuite, appelez CreateTask à l’aide du délégué nouvellement défini.

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

L’objet Print3DTask retourné est affecté à la variable de classe déclarée au début. Cette référence peut être utilisée pour gérer certains événements levées par la tâche.

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

Remarque

Vous devez implémenter une méthode et Task_Completed une Task_Submitting méthode si vous souhaitez les inscrire à ces événements.

Exécuter la tâche d’impression : boîte de dialogue d’impression 3D ouverte

Enfin, vous devez lancer la boîte de dialogue d’impression 3D qui fournit un certain nombre d’options d’impression.

Ici, nous inscrivons une MyTaskRequested méthode avec l’événement 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;

Après avoir inscrit le gestionnaire d’événements TaskRequested , vous pouvez appeler la méthode ShowPrintUIAsync, qui affiche la boîte de dialogue d’impression 3D dans la fenêtre d’application active.

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

Il est également recommandé de désinscrire vos gestionnaires d’événements une fois que votre application reprend le contrôle.

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

Impression 3D avec Windows 10Générer un package 3MF
Exemple d’impression 3D UWP