1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power Pointで3Dモデルを専用ソフトウェアなしで表示させたい!

Posted at

これは、とある金融機関(PCセキュリティがちがち、ソフトウェアインストール一切不可、装備はOffice365とメモ帳、インターネット接続に著しい制限)で戦うサラリーマンの物語である。

Power Pointで3Dをぐりぐり動かしたいんじゃ

課長からそう言われた俺は、Power Pointを立ち上げ、「挿入>3Dモデル>3Dモデルのストック」を押す。そして、ここから素敵な3Dを選択する。簡単すぎるぜ。
PowerPointに3Dモデルを挿入

ぼけぇ!俺の顔写真入りの3DをPower Pointでぐりぐりうごかせるようにせぇ!

ふと気が付くと、俺は課長に怒鳴られていた。既存の3Dモデルの挿入ではお気に召さないらしい。仕方ない。次なる手段を提案するか。

「課長、Blenderか六角王(←古い)をつかって3Dモデルを作ってPowerPointで読み込めばいいですよ 」

やっぱり俺って頭いい!

じゃあ、やって。ちなみに、会社のPCにソフトウェアインストールするの禁止だからね。ルールやぶったらセキュリティ研修受けて反省文書いてもらうよ。

かくして、俺の「無理ゲー:謎の会社セキュリティをかいくぐり課長の顔社員入りの3DをPowerPointに読み込め」チャレンジが始まった。

何はともあれ、やってみよう。

Power Pointの機能で、3Dオブジェクトのファイルを読み込む機能はある。
例えば、obj形式、3mf形式、ply形式だそうだ。
このうち一つの形式を、会社のPCに入っている「メモ帳」と「PowerPoint」を使って作ることができればいいんだな。(後からわかるが、zip圧縮も使うことになる)
とりあえず、ググって情報が多そうな3mf形式を選ぶ。ここからは、「メモ帳」で3mf形式を作ることに全力を注ぐ。

情報源

3mf形式の公式情報は以下のページにあるっぽい。

でも、正直見てもよくわからん。きっと、しっかりとした情報が書いてあると思うのだが。。英語だしよくわからん。

ただ、

このページに

The 3MF Document format MUST use a ZIP archive for its physical model.

と書いてある。どうやら、3mfファイルの正体はzipファイルらしく、関係するファイルをすべて圧縮しているとのこと。これがわかれば、3mfファイルのサンプルを探して、実際に中身を見てみよう。
サンプルをあさっていたら、このページにあるようだ。

まずは、基本的な構造をさぐるために、「core」フォルダにある「box.3mf」をダウンロードしてみる。

早速中身をみていく

先ほど知った、3mfファイルの実態はzipファイルということを利用して、ダウンロードした「box.3mf」を「box.zip」ファイルにリネーム。圧縮ファイルを解凍してみる。
(あ、元のbox.3mfはコピーして置いといてね。後で使うので。)
すると中身はこんな感じ。

.
└── box/
    ├── [Content_Types].xml
    ├── _rels/
    │   └── .rels
    └── 3D/
     └── 3dmodel.model

入っているファイルは、「[Content_Types].xml」と「.rels」と「3dmodel.model」の3つだけ。
これらのファイルはすべてメモ帳で開くことができた。
そして、「.xml」というファイルがあることからも想像できるがすべてxml形式で書かれている。これは重要なことなので覚えておこう。

「[Content_Types].xml」と「.rels」は中身を見るに、ファイル形式やら「3dmodel.model」ファイルがどこにあるかを指定しているだけなので、フォルダ構造を変えなければそのままコピーして使えそうだ。
つまりは、「3dmodel.model」さえ書き換えることができたら、自由に3Dモデルを作れそう。

3dmodel.model

早速、box.3mfの「3dmodel.model」をメモ帳で開けてみよう。
お、、、長い。。。。長いよ。

<?xml version="1.0" encoding="UTF-8"?>
<model unit="millimeter" xml:lang="en-US" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02">
  <metadata name="Copyright">Copyright (c) 2015 3MF Consortium. All rights reserved.</metadata>
  <resources>
    <object id="1" type="model">
      <mesh>
        <vertices>
          <vertex x="0" y="0" z="0" />
          <vertex x="10" y="0" z="0" />
          <vertex x="10" y="20" z="0" />
          <vertex x="0" y="20" z="0" />
          <vertex x="0" y="0" z="30" />
          <vertex x="10" y="0" z="30" />
          <vertex x="10" y="20" z="30" />
          <vertex x="0" y="20" z="30" />
        </vertices>
        <triangles>
          <triangle v1="3" v2="2" v3="1" />
          <triangle v1="1" v2="0" v3="3" />
          <triangle v1="4" v2="5" v3="6" />
          <triangle v1="6" v2="7" v3="4" />
          <triangle v1="0" v2="1" v3="5" />
          <triangle v1="5" v2="4" v3="0" />
          <triangle v1="1" v2="2" v3="6" />
          <triangle v1="6" v2="5" v3="1" />
          <triangle v1="2" v2="3" v3="7" />
          <triangle v1="7" v2="6" v3="2" />
          <triangle v1="3" v2="0" v3="4" />
          <triangle v1="4" v2="7" v3="3" />
        </triangles>
      </mesh>
    </object>
  </resources>
  <build>
    <item objectid="1" />
  </build>
</model>

/
でも、落ち着いてみると、初めの何行かは「おまじない」っぽいものがあって、そのあとに
<mesh>タグで囲まれているやつがある。そしてその中に<vertex>タグがいくつかと、<triangle>タグがいくつか続いている。

お、これはわかるぞ。おじさんでもこれはわかるぞーー! :relaxed:

Vertex = 頂点!
つまり、<vertex>タグでは、頂点を作ってるんだな。タグの中にある、x,y,zというのもx座標、y座標、z座標を現している。
box.3mfのサンプルでは、「box=立方体」なので全部で8個の頂点(vertex)が書かれている。

ほうほう。そして、次は<triangle>。つまり三角形ね。
タグの中には、必ずv1, v2, v3がある。これは三角形の頂点をを現しているのだろう。しかし、v1="3"のように書かれた謎の番号。3ってなんじゃ?でも、よくよくみると、この番号0番~7番まであ~るじゃないですか。
0~7ということは全部で8個!これは頂点の番号を現しているに違いない!
きっと、<vertex>タグで書かれた頂点は、書かれた順番に0、1、2、3・・・と番号が自動的に降られていて、`'タグではどの頂点を使って三角形を作るのかを指定しているのね。

はて、でも僕の知ってる立方体は三角形ではなく、正方形が6面でできているんご。
なんで、ここには三角形が12個も定義されているんだ?

神の声:angel_tone1:
それは、正方形が2つの三角形の組み合わせで作れるからですよ:cactus:

Thank You Angel!! よくわかったぜ。

修正してみる

でも、この3dmodel.modelの<vertex>をよく見ると、立方体(サイコロ)じゃなくて直方体になっているね。

<vertex x="0" y="0" z="0" />
<vertex x="10" y="0" z="0" />
<vertex x="10" y="20" z="0" />
<vertex x="0" y="20" z="0" />
<vertex x="0" y="0" z="30" />
<vertex x="10" y="0" z="30" />
<vertex x="10" y="20" z="30" />
<vertex x="0" y="20" z="30" />

xは0か10になっているけど、yは0か20、zは0か30になっちゃっている。
これだと、x方向の長さが10、y方向の長さが20、z方向の長さが30の直方体になってしまうね。

だから、次のようにコードを直す。

<vertex x="0" y="0" z="0" />
<vertex x="10" y="0" z="0" />
<vertex x="10" y="10" z="0" />
<vertex x="0" y="10" z="0" />
<vertex x="0" y="0" z="10" />
<vertex x="10" y="0" z="10" />
<vertex x="10" y="10" z="10" />
<vertex x="0" y="10" z="10" />

修正したファイルをもう一度3mfファイルに

ここまでで、3dmodel.modelを修正し、保存することができた。
それでは、修正したファイルを使って3mfファイルを作ろう。

といっても、簡単で、解凍した(そしてその中の3dmodel.modelを修正した)boxフォルダを、zipで再圧縮すればよいだけ。
ちなみに、再圧縮しただけだとファイル名が「box.zip」になるので「box.3mf」にリネームしてあげましょう。

ここで注意!!🐻

私は7zipを使っているのですが、普通にzipに圧縮して3mfにリネームするだけだとうまくいきませんでした。(あとでPowerPointで読み込もうとしたらエラーになって読み込めませんでした。)
どうやら、圧縮するときに「圧縮レベル」を「9 - 超圧縮」にしないと、3mfとしてPowerPointは認識してくれないようですので、お気を付けを。(他の圧縮ソフトでは事情がわからないのですが、もしうまくいかないときは、7zipをお試しください)

image.png

ここで注意その2!!🐻

圧縮するときは、「[Content_Types].xml」ファイル、「_rels」フォルダ、「3D」フォルダを直接選択して、一気に圧縮!
間違っても、この3つのファイル・フォルダが入っているフォルダ(boxフォルダ)を選択して圧縮したら、読み込みの際にエラーになるので気を付けて。

image.png

そしてふと我に返る

box.3mfの構造を見てすげぇ満足したけど、俺何やってる?ここはどこ?
とりあえず、box.3mfをパワーポイントで読ませてみよう。(元のbox.3mfはとっくにzipに名前を変えて解凍してしまったといういたずら小僧は、もう一度ダウンロードしてくるか、box.zipをそっとbox.3mfに名前を変えてみよう。)

さてさて、パワーポイントと。
image.png

つぎに、box.3mfを読み込むぞっと。
box.3mfを選択すると・・・・

image.png

よし、ちゃんと立方体に変化した3Dモデルを入れることができたぜい!
こんなご時世にメモ帳だけで3Dモデルを作ってPower Pointにインポートするなんてワイルドだろ~

ぼけぇ!俺の顔写真入りの3DをPower Pointでぐりぐりうごかせるようにせぇ!

あ、目的忘れてた。
でも、3mfの構造がわかったから、あとはこの立方体に写真を張り付ければいいのね。
今日の業務はこれにて終了。次回へ続く・・・

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?