18

GoogleのSketchupは、素晴らしくシンプルな3Dオブジェクトモデラーです。さらに、Googleには3Dオブジェクトの膨大なウェアハウスがあるため、この分野で特に才能がない場合は、実際に自分でモデリングを行う必要はありません。Google Earthの3D建物の多くは、Sketchupで作成されています。SketchupのSKPファイルをMathematicaにインポートする機能は非常に便利ですが、残念ながら、まだそれはできません。

Sketchupの無料バージョンは、KMZ(Google Earth)およびDAE(Collada)形式以外の形式にはエクスポートされません。MMAはKMZ/KMLファイルを読み取ることができますが、3Dオブジェクトを含むファイルは読み取りません。DAEファイルはzip形式のColladaファイルであり、MMAのインポートによってXMLとして読み取ることができます。結果のXMLツリーは、Colladaの定義と同様にかなり複雑であり、オブジェクトのジオメトリを取得することは簡単ではありません(モデルの座標セットを強制することができました)。

私の質問は:MathematicaでSKPファイルをクリーンなポリゴンベースの構造に変換する方法は?

MMAにこのインポート機能を提供するインポートコンバーターを希望しますが、他のルートも歓迎します。明日は、現在使用している間接的な方法を回答として投稿します。

4

4 に答える 4

4

それはおそらくあなたが探しているものとは正確には一致しませんが、私はpycolladaと呼ばれるPythonライブラリを維持しています。これを使ってMathematicaのフォーマットにエクスポートすることができます。私はまた、mathtoolと呼ばれるインポート/エクスポート/変換ユーティリティに取り組んでいます。このユーティリティは、Mathematicaのフォーマットにエクスポートするためのモジュールを書くことができます。

于 2011-06-05T22:56:34.773 に答える
4

私が現在たどっているルートには、いくつかのステップが含まれます。

  1. GoogleリポジトリからSKPファイルをダウンロードします
  2. Sketchupの無料版で開きます
  3. そこからDAEとしてエクスポートします
  4. 無料のAutoDeskfbxコンバータを使用してFBX形式に変換します(ページの詳細はこちら) 。
  5. 同じプログラムを使用して、作成したばかりのFBXファイルをDXFまたはOBJに変換します
  6. Mathematicaにインポートします。

テクスチャが失われているように見えますが、結果はかなり良好です。下の図は結果を示しています。左:元のSketchupモデル、中央:DXFを介した変換/インポート、右:OBJを介した変換/インポート。

ここに画像の説明を入力してください

もちろん、これをあまり頻繁に行う必要はありません。私が取り組んでいる特定のアプリケーションについては、コンピューターにあまり詳しくないユーザーも処理できるソリューションが必要です。


アップデート:

バージョン10.4以降、MathematicaにはDAEファイルをインポートおよびエクスポートする機能があります:https ://reference.wolfram.com/language/ref/format/DAE.html

于 2011-06-06T11:15:09.180 に答える
4

これは、無料版のSketchUp 8.0で生成された非常に単純な.daeファイルをMathematica 8に正常にインポートしたコードです.このコードは変換を検出したり、変換に作用したりしません.座標と三角形のみを調べます.あまり期待しないでください.

data = Import[SystemDialogInput["FileOpen"], "XML"]; 

points = Map[( Partition[ReadList[StringToStream[#[[1]] ], Number], 
3]) &, (Map[Part[#, 3] &, (Partition[
Cases[data, XMLElement["float_array", _, _], Infinity], 
2][[All, 1]])] ) ];

triangles = Map[Partition[1 + ReadList[StringToStream[#[[1]]], Number],3] &, 
Map[Part[#, 3, 2, 3]&, 
Cases[data, XMLElement["triangles", _, _], Infinity]]];

Graphics3D[Map[GraphicsComplex[#[[1]], Polygon[#[[2]]]] &, 
Transpose[{points, triangles}]], Boxed -> False]
于 2012-10-12T18:53:18.750 に答える
2

答えは、正確に何をしたいかによって異なります。画像だけを見たい場合は、.obj ファイル (オブジェクト コードではなくテッセレーション ファイル) としてエクスポートできます。

たとえば、これを試してください:

bunny = Import["http://graphics.stanford.edu/~mdfisher/Data/Meshes/bunny.obj", "OBJ"]

実際にソリッド モデルとして作業したい場合は、より困難な時間を過ごすことになります。ソリッド モデルには、ジオメトリだけでなくトポロジも表すかなり複雑なデータ構造があります。たとえば、モデルからサーフェスを取得できる場合がありますが、サーフェスのどの部分が面で使用されているかを示すために、いくつかのトポロジが必要になります。

于 2011-06-06T07:25:18.660 に答える