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

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

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

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

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

Aspose.3D for .NET

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

NuGet

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

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


PM> Install-Package Aspose.3D

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

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

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

システム要求

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

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

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


//アセットを抽出する必要があるソースファイル
string file = "template.u3d";
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およびその他の形式。

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

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

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

    U3D U3D ファイル形式とは

    U3D(Universal 3D)は、3Dコンピュータグラフィックスの圧縮ファイル形式とデータ構造です。三角形メッシュ、照明、シェーディング、モーションデータ、色と構造の線と点などの3Dモデル情報が含まれています。このフォーマットは、2005年8月にECMA-363標準として承認されました。3D PDFドキュメントはU3Dオブジェクトの埋め込みをサポートし、Adobe Reader(バージョン7以降)で表示できます。

    続きを読む

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

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

    3MF (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表面形状)
    3DS (3Dスタジオメッシュファイル形式)
    VRML (仮想現実モデリング言語)
    バツ (DirectXモデルイメージ)
    USD (ユニバーサルシーンの説明)
    USDZ (ユニバーサルシーンの説明Zipアーカイブ)