HTML JPG PDF XML U3D
Aspose.3D  for .NET
U3D

Extraire les actifs de U3D via C#

Créez vos propres applications .NET pour extraire des ressources à partir de fichiers U3D à l'aide d'API côté serveur.

Comment extraire les ressources du fichier U3D à l\'aide de C#

Afin d’extraire les ressources du fichier U3D, nous utiliserons

Aspose.3D for .NET

API qui est une plate-forme riche en fonctionnalités, puissante et facile à utiliser API pour C# à utiliser avec des actifs d’extraction. Ouvrir

NuGet

gestionnaire de paquets, recherchez Aspose.3D et installer. Vous pouvez également utiliser la commande suivante à partir de la console du gestionnaire de packages.

Commande de la console du gestionnaire de packages


PM> Install-Package Aspose.3D

Étapes pour extraire les actifs de U3D via C#

Aspose.3D permet aux développeurs d’extraire facilement les actifs du fichier U3D avec seulement quelques lignes de code.

  • Charger le fichier U3D via le constructeur de la classe Scene- Créer un objet de format de fichier zip comme format de fichier de sortie- Créer une classe d’archive et gérer la classe d’actifs d’extraction- Appelez la méthode Extract et enregistrez le fichier

Configuration requise

Aspose.3D for .NET est pris en charge sur tous les principaux systèmes d’exploitation. Assurez-vous simplement que vous disposez des prérequis suivants.

  • Microsoft Windows ou un système d’exploitation compatible avec .NET Framework, .NET Core, Mono- Environnement de développement comme Microsoft Visual Studio- Aspose.3D for .NET référencé dans votre projet
 

Code C# pour extraire les actifs de U3D


//Fichiers sources qui doivent extraire des actifs
string file = "template.u3d";
Scene scene = new Scene(file);  

//La sortie est dans un format de fichier compressé et Directory représente le nom d'un dossier existant
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Appelez la méthode Extract pour effectuer des opérations d'extraction d'actifs
Extract(scene,za,true);

//Callable Extract method,Le paramètre texture indique : s'il faut extraire la texture
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Créer une classe de traitement de fichiers compressés
class Zip : IDisposable
{
    private ZipArchive archive;
    private HashSet<string> entries = new HashSet<string>();

    public Zip(Stream stream)
    {
        archive = new ZipArchive(stream, ZipArchiveMode.Create);
    }
    public void Dispose()
    {
        archive.Dispose();
    }

    public void Add(string fileName, byte[] content, bool enableCompression)
    {
        var entryName = PickName(fileName);
        var compressionLevel = enableCompression ? CompressionLevel.Fastest : CompressionLevel.NoCompression;
        var entry = archive.CreateEntry(entryName, compressionLevel);
        using var stream = entry.Open();
        stream.Write(content, 0, content.Length);
    }
    
    private string PickName(string fileName)
    {
        if (!entries.Contains(fileName))
        {
            entries.Add(fileName);
            return fileName;
        }
        var baseName = Path.GetFileNameWithoutExtension(fileName);
        var ext = Path.GetExtension(fileName);
        for (var idx = 2; ; idx++)
        {
            var newName = baseName + "_" + idx;
            if (!string.IsNullOrEmpty(ext))
                newName += ext;
            if (entries.Contains(newName))
                continue;
            entries.Add(newName);
            return newName;
        }
    }
}

//Créer une classe de traitement d'extraction d'actifs
class Extractor
{
    private Zip zip;
    private bool texture;
    HashSet<A3DObject> visited = new HashSet<A3DObject>();
    public Extractor(Zip zip,bool texture)
    {
        this.zip = zip;
        this.texture = texture;
    }

    private bool CanVisit(A3DObject obj)
    {
        if (visited.Contains(obj))
            return false;
        visited.Add(obj);
        return true;
    }
    public void Extract(Scene scene)
    {
        if (scene.Library != null && scene.Library.Count > 0)
        {
            foreach (var obj in scene.Library)
            {
                Visit(obj);
            }
        }
        VisitNode(scene.RootNode);
    }
    private void VisitNode(Node node)
    {
        if (!CanVisit(node))
            return;
        if (texture)
        {
            foreach (var mat in node.Materials)
            {
                VisitMaterial(mat);
            }
        }

        foreach (var entity in node.Entities)
        {
            if (entity is Mesh)
                Save((Mesh)entity, node.Name);
        }
        
        foreach (var child in node.ChildNodes)
        {
            VisitNode(child);
        }
    }
    private void VisitMaterial(Material mat)
    {
        if (!CanVisit(mat))
            return;
        if (!texture)
            return;
        foreach (var tslot in mat)
        {
            if (tslot.Texture is Texture)
            {
                Save((Texture)tslot.Texture);
            }
        }
    }
    private void Visit(A3DObject obj)
    {
        if (texture && obj is Texture)
        {
            Save((Texture)obj);
        }
        else if (obj is Mesh)
        {
            Save((Mesh)obj, null);
        }
        else if (obj is Node)
        {
            VisitNode((Node)obj);
        }
    }
    private void Save(Mesh mesh, string? nodeName)
    {
        if (!CanVisit(mesh))
            return;
        Scene scene = new Scene(mesh);
        using (var ms = new MemoryStream())
        {
            scene.Save(ms, FileFormat.FBX7400ASCII);
            var name = nodeName;
            if (string.IsNullOrEmpty(name))
                name = mesh.Name;
            if (string.IsNullOrEmpty(name))
                name = "mesh";
            var ext = ".fbx";
            zip.Add(name + ext, ms.ToArray(), true);
        }
    }
    private void Save(Texture tex)
    {
        if (tex.Content == null || !CanVisit(tex))
            return;
        var fileName = tex.FileName != null ? Path.GetFileName(tex.FileName) : null;
        zip.Add(fileName, tex.Content, false);
    }
}
 
  • À propos de Aspose.3D for .NET API

    Aspose.3D est un CAD et un Gameware API pour charger, modifier et convertir des fichiers 3D. API est autonome et ne nécessite aucun logiciel de modélisation ou de rendu 3D. On peut facilement utiliser API pour Discreet3DS, WavefrontOBJ, STL (ASCII, Binaire), Universal3D, FBX (ASCII, Binaire), Collada, glTF, PLY, GLB, DirectX et d’autres formats.

    Application gratuite pour extraire les actifs de U3D

    Consultez nos démos en direct pour Extracteur U3D avec les avantages suivants.

      Pas besoin de télécharger ou de configurer quoi que ce soit
      Pas besoin d\'écrire ou de compiler du code
      Téléchargez simplement le fichier U3D et cliquez sur le bouton "Extraire"
      Téléchargez le fichier U3D à partir du lien, si nécessaire

    U3D Qu'est-ce que le format de fichier U3D

    U3D (Universal 3D) est un format de fichier compressé et une structure de données pour l'infographie 3D. Il contient 3D des informations sur le modèle telles que les maillages triangulaires, l'éclairage, l'ombrage, les données de mouvement, les lignes et les points avec couleur et structure. Le format a été accepté en tant que norme ECMA-363 en août 2005. 3D PDF documents prennent en charge l'incorporation de U3D objets et peuvent être visualisés dans Adobe Reader (version 7 et ultérieure).

    En savoir plus

    Autre application prise en charge pour extraire des ressources à partir de formats

    À l\'aide de C#, One peut également extraire des actifs de nombreux autres formats de fichiers, y compris.

    3MF (3D Format de fabrication)
    AMF (Format de fabrication additive)
    ASE (Fichier d\'animation 2D)
    DAE (Échange d\'actifs numériques)
    DXF (Format d\'échange de dessin)
    DRC (Google Draco)
    FBX (Format 3D)
    GLB (3D Représentation binaire du fichier)
    GLTF (Format de transmission GL)
    JT (Fichier de tessellation Jupiter)
    OBJ (3D Format de fichier)
    PLY (Format de fichier polygone)
    PDF (3D PDF)
    RVM (Modèle de conception d\'usine AVEVA)
    STL (Géométrie de surface 3D interchangeable)
    3DS (3D Format de fichier Studio Mesh)
    VRML (Langage de modélisation de réalité virtuelle)
    X (Image du modèle DirectX)
    USD (Description de la scène universelle)
    USDZ (Description de la scène universelle Archive Zip)