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 de géométrie 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 fonctionnel de ces procédures, consultez l’exemple D’impression 3D UWP.

API importantes

Programme d’installation

Ajoutez l’espace de noms Windows.Graphics.Printing3D à votre classe d’application qui nécessite la fonctionnalité 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 de membre utiles.

  • Déclarez un objet Print3DTask pour représenter la tâche d’impression à passer 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 sur clic) 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 de géométrie 3D peut varier. Votre application peut récupérer des données 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 programme à l’aide de formules mathématiques ou d’une entrée 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 de l’appareil. La bibliothèque de modèles 3D Builder fournit une variété de modèles que vous pouvez télécharger.

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

Le code suivant montre comment charger un seul fichier 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 une conversion au format 3D Manufacturing Format (.3mf)

Les données de géométrie 3D peuvent être disponibles dans de nombreux formats différents, et toutes ne sont pas efficaces pour l’impression 3D. Windows utilise le type de fichier Format de fabrication 3D (.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 tutoriel Générer un package 3MF .

Notes

L’application 3D Builder peut ouvrir les fichiers des formats 3D les plus populaires et les enregistrer en tant que 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, lorsque le type de fichier peut varier, vous pouvez ouvrir l’application 3D Builder et inviter l’utilisateur à enregistrer les données importées en tant que fichier .3mf, puis à les 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 des données de modèle pour l’impression 3D

Les données de modèle 3D ne sont pas toutes imprimables, même dans le type .3mf. Pour que l’imprimante détermine correctement l’espace à remplir et ce qu’il faut laisser vide, chaque modèle à imprimer doit être un maillage sans couture, avoir des normales de surface orientées 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 une géométrie brute en formes 3D imprimables. C’est ce que l’on appelle la réparation du modèle et est implémentée dans la OnFixClick méthode présentée ici.

Notes

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 attribuer le modèle à l’objet Printing3D3MFPackage que vous avez déclaré pendant 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 , 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 dans le pipeline. Le type Print3DTaskRequestedEventArgs a une propriété : Request. Il est de type Print3DTaskRequest et représente une demande de travail d’impression. Sa méthode CreateTask permet à l’application d’envoyer les informations correctes pour votre travail d’impression et de retourner une référence à l’objet Print3DTask qui a été 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, ainsi qu’un délégué Print3DTaskSourceRequestedHandler. Le délégué est automatiquement appelé quand l’événement 3DTaskSourceRequested est déclenché (cette opération est effectuée 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;

Notes

Vous devez implémenter des méthodes Task_Submitting et Task_Completed si vous voulez les inscrire à ces événements.

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

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