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;
}
Rubriques connexes
Impression 3D avec Windows 10Générer un package 3MF
Exemple d’impression 3D UWP