HisTech Up

UWP: Impression 3D

Introduction

user

Christian Hissibini

I am a Tech enthusiast who loves to blend Dev & Design on Web and Mobile Platforms. I am also a Windows Platform Dev MVP


LATEST POSTS

What are the differences between Data Mining, Machine Learning and Deep Learning? 11th February, 2018

What are the challenges of using Artificial Intelligence? 15th January, 2018

Mobile Development

UWP: Impression 3D

Posted on .

Découvrez comment ajouter des fonctionnalités d’impression3D à votre application Windows universelle. Cette rubrique explique comment charger des données de géométrie3D dans votre application et lancer la boîte de dialogue d’impression3D après avoir vérifié que votre modèle3D est imprimable et au format correct. Pour obtenir un exemple de mise en pratique de ces procédures, voir l’Exemple d’impression3D UWP.

Note

Dans l’exemple de code de ce guide, le signalement et le traitement des erreurs sont grandement simplifiés par souci de concision.

Configuration de la classe

Dans la classe devant recevoir les fonctionnalités d’impression 3D, ajoutez l’espace de noms Windows.Graphics.Printing3D.

C#
using Windows.Graphics.Printing3D;

Les espaces de noms supplémentaires suivants sont utilisés dans ce guide:

C#
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, attribuez à votre classe quelques champs de membre utiles. Déclarez un objet Print3DTask qui sert de référence à 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 à charger dans l’application. Déclarez un objet Printing3D3MFPackage, qui représente un modèle 3D prêt à imprimer avec toutes les métadonnées nécessaires.

C#
private Print3DTask printTask;
private StorageFile file;
private Printing3D3MFPackage package = new Printing3D3MFPackage();

Créer une interface utilisateur simple

Cet exemple utilise trois contrôles utilisateur: un bouton de chargement qui place un fichier dans la mémoire du programme, un bouton de correction qui modifie le fichier si nécessaire et un bouton d’impression qui lance une tâche d’impression. Le code suivant permet de créer ces boutons (avec leurs gestionnaires d’événements Click) dans le fichierXAML de votre classe.

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

Ajoutez un TextBlock pour le commentaire de l’interface utilisateur.

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

Obtenir les données3D

La méthode par laquelle votre application acquiert les données de géométrie3D à imprimer varie. Votre application peut récupérer les données à partir d’une analyse 3D, télécharger les données du modèle à partir d’une ressource web ou générer un maillage3D par programmation à l’aide d’équations ou de l’entrée utilisateur. Par souci de simplicité, ce guide montre comment charger un fichier de données3D (d’un type de fichier courant) dans la mémoire du programme à partir d’un stockage de fichiers. La bibliothèque de modèles 3D Builder fournit plusieurs modèles que vous pouvez facilement télécharger sur votre appareil.

Dans votre méthode OnLoadClick, utilisez la classe FileOpenPicker pour charger un seul fichier dans la mémoire de votre application.

C#
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 3DBuilder pour une conversion au format3DManufacturingFormat (.3mf)

À ce stade, vous êtes en mesure de charger un fichier de données3D dans la mémoire de votre application. Il existe de nombreux formats de données de géométrie 3D, mais ils ne sont pas tous adaptés à l’impression3D. Windows10 utilise le type de fichier 3D Manufacturing Format (.3mf) pour toutes les tâches d’impression3D.

Note

Le type de fichier.3mf offre de nombreuses fonctionnalités non abordées dans ce tutoriel. Pour en savoir plus sur le format3MF et les fonctionnalités proposées aux fabricants et clients de produits3D, reportez-vous à la Spécification 3MF. Pour savoir comment tirer parti de ces fonctionnalités à l’aide des API Windows10, consultez le didacticiel Générer un package3MF.

Heureusement, l’application 3DBuilder peut ouvrir les formats de fichier3D les plus courants et les enregistrer sous forme de fichiers.3mf. Dans cet exemple, où le type de fichier peut varier, une solution très simple consiste à ouvrir 3D Builder et à inviter l’utilisateur à enregistrer les données importées dans un fichier .3mf, puis à le recharger.

Note

En plus de convertir les formats de fichier, 3DBuilder offre des outils simples pour modifier vos modèles, ajouter des données de couleur et effectuer d’autres opérations spécifiques de l’impression. C’est pourquoi il est souvent recommandé de l’intégrer à une application qui prend en charge l’impression3D.

C#
    // 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’impression3D

Les données de modèle 3D ne sont pas toutes imprimables, même dans le type .3mf. Afin que l’imprimante puisse correctement déterminer les espaces à remplir et à laisser vides, le ou les modèles à imprimer doivent (chacun) constituer un ensemble unique et homogène, disposer de normales de surface orientées vers l’extérieur et d’une géométrie de collection. Les problèmes dans ces zones peuvent survenir sous diverses formes et peuvent être difficiles à repérer dans des formes complexes. Heureusement, les solutions logicielles actuelles sont souvent adaptées à la conversion de la géométrie brute en formes3D imprimables. C’est ce qu’on appelle la réparationdu modèle, qui est effectuée dans la méthode OnFixClick.

Le fichier de données3D doit être converti pour implémenter IRandomAccessStream, qui peut ensuite être utilisé pour générer un objet Printing3DModel.

C#
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 est maintenant 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.

C#
    // 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

Par la suite, lorsque la boîte de dialogue d’impression 3D s’affiche et que l’utilisateur choisit de commencer l’impression, votre application doit transmettre les paramètres souhaités au pipeline d’impression3D. L’API d’impression3D déclenche l’événement TaskRequested. Vous devez écrire une méthode pour gérer cet événement de manière appropriée. Comme toujours, la méthode de gestionnaire doit être du même type que son événement: l’événement TaskRequested a un paramètre Print3DManager (une référence à son objet d’expéditeur) et un objet Print3DTaskRequestedEventArgs, qui contient la plupart des informations pertinentes. Son type de retour est void.

C#
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. Elle est de type Print3DTaskRequest et représente une demande de travail d’impression. Sa méthode CreateTask permet au programme d’envoyer les informations appropriées relatives à votre travail d’impression, et renvoie une référence à l’objet Print3DTaskqui a été envoyé dans le pipeline d’impression3D.

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’impression3D approprié.

Print3DTaskSourceRequestedHandler prend un paramètre, un objet Print3DTaskSourceRequestedArgs qui fournit les données à envoyer. SetSource, l’une des méthodes publiques de cette classe, accepte le package à imprimer. Implémentez un délégué Print3DTaskSourceRequestedHandler comme suit.

C#
// 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é sourceHandler que vous venez de définir.

C#
// 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 renvoyé est attribué à la variable de classe déclarée au début. Vous pouvez maintenant (éventuellement) utiliser cette référence pour gérer certains événements levés par la tâche.

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

Note

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’impression3D

L’élément de code final nécessaire est celui qui lance la boîte de dialogue d’impression3D. Comme une fenêtre de boîte de dialogue d’impression classique, la boîte de dialogue d’impression3D fournit un certain nombre d’options d’impression de dernière minute et permet à l’utilisateur de choisir l’imprimante à utiliser (qu’elle soit connectée via USB ou le réseau).

Inscrivez votre méthode MyTaskRequested à l’événement TaskRequested.

C#
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 votre gestionnaire d’événements TaskRequested, vous pouvez appeler la méthode ShowPrintUIAsync, qui fait apparaître la boîte de dialogue d’impression3D dans la fenêtre d’application active.

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

Enfin, il est conseillé de désinscrire vos gestionnaires d’événements une fois que votre application reprend le contrôle.

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



Ref
https://docs.microsoft.com/
profile

Christian Hissibini

I am a Tech enthusiast who loves to blend Dev & Design on Web and Mobile Platforms. I am also a Windows Platform Dev MVP

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation