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

Extrahieren Sie Assets aus U3D über C#

Erstellen Sie mithilfe serverseitiger APIs Ihre eigenen .NET-Apps, um Assets aus U3D-Dateien zu extrahieren.

So extrahieren Sie Assets aus der U3D-Datei mit C#

Um Assets aus der U3D-Datei zu extrahieren, verwenden wir

Aspose.3D for .NET

API, eine funktionsreiche, leistungsstarke und benutzerfreundliche API für C#-Plattform, die mit Extrakt-Assets verwendet werden kann. Offen

NuGet

Paketmanager, suche nach Aspose.3D und installieren. Sie können auch den folgenden Befehl in der Paket-Manager-Konsole verwenden.

Paket-Manager-Konsolenbefehl


PM> Install-Package Aspose.3D

Schritte zum Extrahieren von Assets aus U3D über C#

Aspose.3D erleichtert Entwicklern das Extrahieren von Assets aus der U3D-Datei mit nur wenigen Codezeilen.

  • Laden Sie die U3D-Datei über den Konstruktor der Scene-Klasse- ZIP-Dateiformatobjekt als Ausgabedateiformat erstellen- Archivklasse erstellen und Anlagenklasse extrahieren- Rufen Sie die Methode Extract auf und speichern Sie die Datei

System Anforderungen

Aspose.3D for .NET wird auf allen wichtigen Betriebssystemen unterstützt. Stellen Sie einfach sicher, dass Sie die folgenden Voraussetzungen erfüllen.

  • Microsoft Windows oder ein kompatibles Betriebssystem mit .NET Framework, .NET Core, Mono- Entwicklungsumgebung wie Microsoft Visual Studio- Aspose.3D for .NET in Ihrem Projekt referenziert
 

C#-Code zum Extrahieren von Assets aus U3D


//Quelldateien, die Assets extrahieren müssen
string file = "template.u3d";
Scene scene = new Scene(file);  

//Die Ausgabe erfolgt in einem komprimierten Dateiformat, und Verzeichnis steht für den Namen eines vorhandenen Ordners
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Rufen Sie die Extract-Methode auf, um Objektextraktionsvorgänge auszuführen
Extract(scene,za,true);

//Aufrufbare Extraktionsmethode, Der Parameter Textur gibt an: ob die Textur extrahiert werden soll
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Erstellen Sie eine Verarbeitungsklasse für komprimierte Dateien
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;
        }
    }
}

//Erstellen Sie eine Verarbeitungsklasse für die Asset-Extraktion
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);
    }
}
 
  • Über Aspose.3D for .NET API

    Aspose.3D ist eine CAD und Gameware API zum Laden, Modifizieren und Konvertieren von 3D Dateien. API ist eigenständig und erfordert keine 3D-Modellierungs- oder Rendering-Software. Man kann API einfach für Discreet3DS, WavefrontOBJ, STL (ASCII, binär), Universal3D, FBX (ASCII, binär), Collada, glTF, PLY, GLB, DirectX und weitere Formate.

    Kostenlose App zum Extrahieren von Assets aus U3D

    Sehen Sie sich unsere Live-Demos an Extraktor U3D mit folgenden Vorteilen.

      Sie müssen nichts herunterladen oder einrichten
      Es ist nicht erforderlich, Code zu schreiben oder zu kompilieren
      Laden Sie einfach die Datei U3D hoch und klicken Sie auf die Schaltfläche "Extrahieren".
      Laden Sie bei Bedarf die Datei U3D über den Link herunter

    U3D Was ist U3D Dateiformat

    U3D (Universal 3D) ist ein komprimiertes Dateiformat und eine Datenstruktur für 3D Computergrafiken. Es enthält 3D Modellinformationen wie Dreiecksnetze, Beleuchtung, Schattierung, Bewegungsdaten, Linien und Punkte mit Farbe und Struktur. Das Format wurde im August 2005 als ECMA-363-Standard akzeptiert. 3D PDF Dokumente unterstützen das Einbetten von U3D Objekten und können in Adobe Reader (Version 7 und höher) angezeigt werden.

    Weiter lesen

    Andere unterstützte App zum Extrahieren von Assets aus Formaten

    Mit C# kann man auch Assets aus vielen anderen Dateiformaten extrahieren, einschließlich.

    3MF (3D Herstellungsformat)
    AMF (Format der additiven Fertigung)
    ASE (2D-Animationsdatei)
    DAE (Austausch digitaler Assets)
    DXF (Zeichnungsaustauschformat)
    DRC (Google Draco)
    FBX (3D-Format)
    GLB (3D Binäre Dateidarstellung)
    GLTF (GL-Übertragungsformat)
    JT (Jupiter-Tessellationsdatei)
    OBJ (3D Dateiformat)
    PLY (Polygon-Dateiformat)
    PDF (3D PDF)
    RVM (AVEVA Anlagendesignmodell)
    STL (Austauschbare 3D Oberflächengeometrie)
    3DS (3D Studio-Mesh-Dateiformat)
    VRML (Modellierungssprache für virtuelle Realität)
    x (DirectX-Modellbild)
    USD (Universelle Szenenbeschreibung)
    USDZ (Universelle Szene Beschreibung Zip-Archiv)