2017年5月21日

TIN to OBJ


LANDXMLをOBJに変換する方法

航空レーザー測量の会社から来たファイルなのですが、.XMLとか.RNDというメッシュデータのはずなのに見慣れない形式でした。
TINだと言われたのですが普段使っているformZやMayaでは開けそうもない...。
調べてみると3ds maxで開けそうです。

でも実際やってみると開かない...。
たぶんファイルサイズが大きすぎるせいでしょう。(300MB以上ある)


簡単な方法

XMLの中身をよく見てみるとデータ構造がOBJと一緒なことに気づきました。
点の座標データと点のインデックスによる面の定義です。


そこでEmEditor上でOBJのフォーマットになるように整形してみたところ、Mayaで開くことができました。(Mayaだと1秒で開きました。)
OBJなので他のCGソフトでも開くはずです。

ポイント

  • 測量データなのでXとYを入れ替える
  • Yアップ系のアプリに持っていくなら、YとZも入れ替えて符号を反転する
  • 法線の向きが反転するようなら、面のインデックス番号の並び順を入れ替える
  • グループ名を先頭につける。名前の先頭は数字以外のアルファベットにする
  • ファイル名を.objにする


CG系のアプリで開くならこの方法が一番早そうですね。







2017年5月19日

Grasshopper : テキストファイルの読み込み


勉強を進めようという前にごく基本的なデータの取り込みで少しハマりました...。
単純な座標データの取り込みなんですが、やってみるとなかなか思い通りにいかないもんです。
Grasshopper 0.9.0076

Read File Component

読み込むだけなら Read File で簡単にできるのですが、そのあとの整形・変換が注意ポイントです。

Split Text Component

Read File で取り込むと1行ずつの文字列のリストになります。
座標データなので各カラムを分割して数値に直す必要があります。
文字列の分割には Split Text を使いますが、"セパレータ文字"を指定するところで注意です。
※1列目はインデックス番号


使いやすいようにとセパレーター(区切り文字:Delimiter)を Value List にしてみたのですが、これが問題で書き方によって認識したりしなかったりします...。



カンマとスペースはダブルクォーテーションで囲む。
タブは通常プログラムコードではエスケープして ¥t と書くのですが使えないようです。
{tab} というGrasshopper上の特殊文字の指定も認識しません。
結局、Panelでタブ(エスケープしないで)を接続したら機能しました。

区切り文字にタブは向かないということなのでしょう...。




GhPython Component

取り込みと整形・リスト化にPythonを使う方法も試しました。

こちらも区切り文字(Delimiter)を指定できるようにしたのですが、
ここでは Value List でシングルクォーテーションで囲った¥t が使えます。
{tab}も使えます。
逆にダブルクォーテーションで囲った¥t はダメでした。



IronPython.Runtime.List

Pythonを使う時、ちょっとわかりづらいのがPythonのリストを直接出力できないということです。
そのまま出力しようとするとIronPython.Runtime.List というリストになって、データとして認識しません。
forumの過去スレを調べて解決しましたが、初心者にはわかりづらいポイントですね。

DataTreeで出す方法







点として出す方法


















2017年5月12日

Revit API : 独習


Revitでもマクロが書けるようになりたいなぁと前から思っていたのですがようやく一歩踏み出せました。

未知の世界

なんせ全く知らない世界なので取っ掛かりがわからなかったのです。
とりあえず、マクロIDEを起動してサンプルをコピペしてみてもエラーで動かない...。?
うーむ、わからない。
動かない...。

といったことを繰り返していたのですが、どうもRevitではコードの実行スタイルによって若干作法が異なるということがわかりました。
さらにRevitの進化と共にAPIも更新されてきているので、参照したコードが"すでに古い"なんてこともあります。
だから単純にコピペしても動かない場合が多いのです。
まあ、APIドキュメントをちゃんと読めばわかることなのですが、はじめからそんなもの読むなんて面倒ですからね...。


開発言語

RevitではC#、VB.NET、Ruby、Pythonといった言語が使えますが、
今のところ、C#以外はサンプルがほとんど無いので非常に勉強しにくいです。
自分のように独習するなら始めはC#から入ったほうが良さそうです。


C#

C#は初めてなのですが、基本的な書式はC言語風で自分には馴染みのあるものです。
またVBに似た関数もたくさんあり、ExecelVBAなどを書いたことがある人にも親しみやすいと思います。
C#もまた進化を繰り返してきた言語で色々高度なことができる代わりに、自分のような"非職業プログラマー"には結構難しく感じます。
もっとも、わからない機能は使わないのであんまり関係ないですが...。


初めてのマクロ

やはり勉強は実用的なものを題材にしたほうが捗ります。
今回は、ファミリを作る時に、一括で平面図・正面図・側面図のCADを取り込んで適切なビューに配置するマクロを作りました。
社内の命名規則に沿ったファイル名さえついていれば、ワンクリックでCAD図配置完了です。