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

Extrahovat aktiva z VRML prostřednictvím C#

Sestavte si své vlastní aplikace .NET pro extrahování prostředků ze souborů VRML pomocí rozhraní API na straně serveru.

Jak extrahovat aktiva ze souboru VRML pomocí C#

K extrahování aktiv ze souboru VRML použijeme

Aspose.3D for .NET

API, což je funkčně bohatá, výkonná a snadno použitelná platforma API pro C#, kterou lze použít s aktivy extraktu. Otevřeno

NuGet

správce balíčků, vyhledejte Aspose.3D a nainstalovat. Můžete také použít následující příkaz z konzoly Správce balíčků.

Příkaz konzoly Správce balíčků


PM> Install-Package Aspose.3D

Kroky k extrakci aktiv z VRML prostřednictvím C#

Aspose.3D usnadňuje vývojářům extrahovat prostředky ze souboru VRML pomocí několika řádků kódu.

  • Načtěte soubor VRML pomocí konstruktoru třídy Scene- Vytvořte objekt formátu souboru zip jako výstupní formát souboru- Vytvořte třídu archivu a zpracujte třídu aktiv extraktu- Zavolejte metodu Extract a uložte soubor

Požadavky na systém

Aspose.3D for .NET je podporováno ve všech hlavních operačních systémech. Jen se ujistěte, že máte následující předpoklady.

  • Microsoft Windows nebo kompatibilní OS s .NET Framework, .NET Core, Mono- Vývojové prostředí jako Microsoft Visual Studio- Aspose.3D for .NET odkazované ve vašem projektu
 

C# kód pro extrahování aktiv z VRML


//Zdrojové soubory, které potřebují extrahovat aktiva
string file = "template.vrml";
Scene scene = new Scene(file);  

//Výstup je ve formátu komprimovaného souboru a adresář představuje název existující složky
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Chcete-li provádět operace extrakce aktiv, zavolejte metodu Extract
Extract(scene,za,true);

//Metoda Callable Extract, Parametr textura udává: zda se má extrahovat textura
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Vytvořte třídu zpracování komprimovaného souboru
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;
        }
    }
}

//Vytvořte třídu zpracování extrakce aktiv
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);
    }
}
 
  • Aspose.3D for .NET API

    Aspose.3D je CAD a herní software API k načítání, úpravě a převodu souborů 3D. API je samostatný a nevyžaduje žádný 3D modelovací nebo vykreslovací software. Lze snadno použít API pro Discreet3DS, WavefrontOBJ, STL (ASCII, binární), Universal3D, FBX (ASCII, binární), Collada, glTF, PLY, GLB, DirectX a další formáty.

    Bezplatná aplikace pro extrahování aktiv z VRML

    Podívejte se na naše živé ukázky Extraktor VRML s následujícími výhodami.

      Není potřeba nic stahovat ani nastavovat
      Není třeba psát nebo kompilovat kód
      Stačí nahrát soubor VRML a stisknout tlačítko "Extrahovat".
      V případě potřeby stáhněte soubor VRML z odkazu

    VRML Co je formát VRML

    Jazyk modelování virtuální reality (VRML) je formát souboru pro reprezentaci interaktivních 3D objektů světa přes World Wide Web (www). Své využití nachází při vytváření trojrozměrných reprezentací složitých scén, jako jsou ilustrace, definice a prezentace virtuální reality. Formát byl nahrazen X3D. Mnoho aplikací pro modelování 3D může ukládat objekty a scény ve formátu VRML.

    Více

    Další podporovaná aplikace pro extrahování aktiv z formátů

    Pomocí C# lze také extrahovat prostředky z mnoha dalších formátů souborů včetně.

    3MF (3D Výrobní formát)
    AMF (Formát aditivní výroby)
    ASE (Soubor 2D animace)
    DAE (Výměna digitálních aktiv)
    DXF (Formát výměny výkresů)
    DRC (Google Draco)
    FBX (Formát 3D)
    GLB (3D Binární reprezentace souboru)
    GLTF (Přenosový formát GL)
    JT (Soubor Jupiter Tessellation)
    OBJ (3D Formát souboru)
    PLY (Formát souboru polygonu)
    PDF (3D PDF)
    RVM (Model rostlinného designu AVEVA)
    STL (Vyměnitelná 3D povrchová geometrie)
    U3D (Universal 3D)
    3DS (3D Formát souboru Mesh aplikace Studio)
    X (Obrázek modelu DirectX)
    USD (Univerzální popis scény)
    USDZ (Univerzální popis scény Zip archiv)