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

Extrahovat aktiva z 3MF prostřednictvím C#

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

Jak extrahovat aktiva ze souboru 3MF pomocí C#

K extrahování aktiv ze souboru 3MF 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 3MF prostřednictvím C#

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

  • Načtěte soubor 3MF 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 3MF


//Zdrojové soubory, které potřebují extrahovat aktiva
string file = "template.3mf";
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 3MF

    Podívejte se na naše živé ukázky Extraktor 3MF 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 3MF a stisknout tlačítko "Extrahovat".
      V případě potřeby stáhněte soubor 3MF z odkazu

    3MF Co je formát 3MF

    3MF, 3D Manufacturing Format, používají aplikace k vykreslování 3D objektových modelů pro řadu dalších aplikací, platforem, služeb a tiskáren. Byl vytvořen tak, aby se vyhnul omezením a problémům v jiných formátech souborů 3D, jako je STL, pro práci s nejnovějšími verzemi tiskáren 3D. 3MF je relativně nový formát souborů, který byl vyvinut a publikován konsorciem 3MF.

    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ě.

    3DS (3D Formát souboru Mesh aplikace Studio)
    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)
    VRML (Jazyk pro modelování virtuální reality)
    X (Obrázek modelu DirectX)
    USD (Univerzální popis scény)
    USDZ (Univerzální popis scény Zip archiv)