Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@Takashi_Kasuya

Autodesk Forge上でのBucket上のファイル変換

More than 1 year has passed since last update.

Forgeのビューワはいろいろな機能があるだけれど、選択したオブジェクトをOBJ, SVFなどに出力する機能を備えている。そんなに難しわけではないのですが、アクセストークンやURN取得の流れなどを理解していないととっつきにくいので、その辺は前回の記事を参照してほしい。
基本的には以下のサイトを参考にした。
https://developer.autodesk.com/en/docs/model-derivative/v2/tutorials/translate-source-file-to-obj/
ちなみに、どんなフォーマットにも変換できるわけではない。IFCだと、SVFだけですね。
https://developer.autodesk.com/en/docs/model-derivative/v2/overview/supported-translations/

URNへの変換

Bucket上にアップされたファイルを参照するためのURN(urn:adsk.objects:os.object:mybucket_xxxxxxx/HelloWall.ifc)は、ファイルをアップロードするときにレスポンスコードに記載されている。それをURL-safe Base64(No padding)に変換する必要がある。

このサイトでURNを変換するとURNは以下のようになるので、URL-safeにするために、最後にある=を削除するということらしい。「dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM=」

OBJへの変換

変換のためには、以下のAPIを利用すればよい。
https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/job-POST/

具体的には、以下のようなトークン、URNと出力するフォーマットを指定する。

curl -X 'POST' -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxx' -H 'Content-Type: application/json' -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/job' -d
'{
  "input": {
    "urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM"
  },
  "output": {
    "formats": [
      {
        "type": "svf",
        "views": ["2d","3d"]
      }
    ]
  }
}'

うまくいくと、以下のようなレスポンスがある。

{
"result":"created",
"urn":"dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM",
"registerKeys":["6614afbe-1af2-4fc0-8e56-6c9a4a223b9a"],
"acceptedJobs":{"output":{"formats":[{"type":"svf","views":["2d","3d"]}]}}
}

変換が終わるまで少し時間がかかるので、以下のように問い合わせを行う。

curl -X 'GET' 
  -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx' 
  -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM/manifest'

変換が終わっていると、SVFのURNが入ったレスポンスが返ってくる。そのURNを今度はURLエンコードする(Base64ではない!)。結果を先ほどと同じURLの最後に加えてリクエストする。すると変換後のバイナリが送られてくる。

curl -X 'GET' 
  -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx' 
  -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM/manifest/urn%3Aadsk.viewing%3Afs.file%3AdXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM%2Foutput%2F0%2F0.svf'

ちなみに、以下のように問い合わせるとファイルのメタデータを取得することもできる。

curl -X 'GET' 
  -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx' 
  -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM/metadata

レスポンスでは、リクエストしたデータのGUIDなどを取得することができる。上記のmetadataのあとにつけてリクエストすると、オブジェクトの構造を教えてくれる。要するにIFCの場合は、その階層とプロパティのデータということになる。

curl -X 'GET' 
  -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx' 
  -v 'https://developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXlidWNrZXRfa2FzdXlhL0hlbGxvV2FsbC5pZmM/metadata/26af68b6-8952-4a43-89b4-f771aa807d8a

ここでレスポンスとして帰ってきたobjectidを使って、変換のリクエストをすることができる。この方法を使うと、IFCからでもOBJに変換することは可能であることが確認できた。
https://developer.autodesk.com/en/docs/model-derivative/v2/tutorials/extract-geometry-from-source-file/

具体的には、以下のようなOBJとなった。

WaveFront *.obj file (generated by Autodesk ATF)

mtllib 6f9d3481-728b-3363-af95-42adb0a4a9ea.mtl

g Obj.7

v -240.000000 -14.999986 240.000000
v -240.000000 -14.999986 0.000000
v 159.999988 -15.000011 240.000000
v 159.999988 -15.000011 0.000000
v -240.000000 15.000011 240.000000
v -240.000000 15.000011 0.000000
v 159.999988 14.999986 240.000000
v 159.999988 14.999986 0.000000
vn -0.000001 -10.000000 0.000000
vn -10.000000 0.000001 0.000000
vn 0.000001 10.000000 0.000000
vn 10.000000 -0.000001 0.000000
vn 0.000000 0.000000 10.000000
vn 0.000000 0.000000 -10.000000
usemtl Obj.7
f 1//1 2//1 3//1
f 3//1 2//1 4//1
f 5//2 6//2 1//2
f 1//2 6//2 2//2
f 7//3 8//3 5//3
f 5//3 8//3 6//3
f 3//4 4//4 7//4
f 7//4 4//4 8//4
f 3//5 7//5 1//5
f 1//5 7//5 5//5
f 8//6 4//6 6//6
f 6//6 4//6 2//6

# 8 vertices
# 0 texture params
# 6 normals
# 12 facets

# 1 groups
0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Takashi_Kasuya
建設会社で働いています。博士(情報理工学)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?