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

C#を介して3MFからアセットを抽出します

サーバー側APIを使用して3MFファイルからアセットを抽出する独自の.NETアプリを作成します。

C#を使用して3MFファイルからアセットを抽出する方法

3MFファイルからアセットを抽出するために、

Aspose.3D for .NET

APIは、機能が豊富で強力で使いやすいAPIforC#プラットフォームで抽出アセットで使用されます。開ける

NuGet

パッケージマネージャー、検索 ** Aspose.3D ** とインストールします。パッケージマネージャーコンソールから次のコマンドを使用することもできます。

パッケージマネージャーコンソールコマンド


PM> Install-Package Aspose.3D

3MFからC#を介してアセットを抽出する手順

Aspose.3Dを使用すると、開発者は数行のコードで3MFファイルからアセットを簡単に抽出できます。

  • Sceneクラスのコンストラクターを介して3MFファイルをロードします- zipファイル形式オブジェクトを出力ファイル形式として作成します- アーカイブクラスを作成し、アセットクラスの抽出を処理します- Extractメソッドを呼び出して、ファイルを保存します

システム要求

Aspose.3D for .NETは、すべての主要なオペレーティングシステムでサポートされています。次の前提条件があることを確認してください。

  • Microsoft Windowsまたは.NETフレームワーク、.NETコア、Monoと互換性のあるOS- MicrosoftVisualStudioのような開発環境- プロジェクトで参照されているAspose.3Dfor .NET
 

3MFからアセットを抽出するためのC#コード


//アセットを抽出する必要があるソースファイル
string file = "template.3mf";
Scene scene = new Scene(file);  

//出力は圧縮ファイル形式であり、ディレクトリは既存のフォルダの名前を表します
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Extractメソッドを呼び出して、アセット抽出操作を実行します
Extract(scene,za,true);

//呼び出し可能なExtractメソッド、パラメータtextureは、テクスチャを抽出するかどうかを示します
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//圧縮ファイル処理クラスを作成する
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;
        }
    }
}

//アセット抽出処理クラスを作成する
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.3Dfor .NETAPI

    Aspose.3Dは、3Dファイルをロード、変更、変換するためのCADおよびゲームウェアAPIです。 APIはスタンドアロンであり、3Dモデリングまたはレンダリングソフトウェアを必要としません。 Discreet3DS、WavefrontOBJ、STL(ASCII、バイナリ)、Universal3D、FBX(ASCII、バイナリ)、Collada、glTF、PLY、 GLB、DirectXおよびその他の形式。

    3MFからアセットを抽出する無料アプリ

    ライブデモをチェックして エクストラクタ3MF 以下の利点があります。

      何かをダウンロードしたりセットアップしたりする必要はありません
      コードを書いたりコンパイルしたりする必要はありません
      3MFファイルをアップロードして[抽出]ボタンを押すだけです
      必要に応じて、リンクから3MFファイルをダウンロードします

    3MF 3MF ファイル形式とは

    3MF、3D製造フォーマットは、アプリケーションによって3Dオブジェクトモデルを他のさまざまなアプリケーション、プラットフォーム、サービス、およびプリンターにレンダリングするために使用されます。これは、最新バージョンの3Dプリンタで動作するために、STLなどの他の3Dファイル形式の制限と問題を回避するために構築されました。 3MFは、3MFコンソーシアムによって開発および公開された比較的新しいファイル形式です。

    続きを読む

    フォーマットからアセットを抽出するためにサポートされているその他のアプリ

    C#を使用すると、を含む他の多くのファイル形式からアセットを抽出することもできます。

    3DS (3Dスタジオメッシュファイル形式)
    AMF (アディティブマニュファクチャリングフォーマット)
    ASE (2Dアニメーションファイル)
    DAE (デジタル資産交換)
    DXF (図面交換フォーマット)
    DRC (Google Draco)
    FBX (3D形式)
    GLB (3Dファイルのバイナリ表現)
    GLTF (GL伝送フォーマット)
    JT (木星テッセレーションファイル)
    OBJ (3Dファイル形式)
    PLY (ポリゴンファイル形式)
    PDF (3D PDF)
    RVM (AVEVAプラント設計モデル)
    STL (交換可能な3D表面形状)
    U3D (Universal 3D)
    VRML (仮想現実モデリング言語)
    バツ (DirectXモデルイメージ)
    USD (ユニバーサルシーンの説明)
    USDZ (ユニバーサルシーンの説明Zipアーカイブ)