Z Surfer's Blog

百聞は一見にしかず!ビジュアライゼーションの最前線を考えるブログ!      Translate to English

2008-10

FSL基本講座09



今回はオブジェクトの属性についてです。


まず、最もよく使う質感レイヤー


取得(get)
オブジェクトから質感やレイヤー情報を取得するには、
fz_objt_attr_get_objt_rmtl() や、fz_objt_attr_get_objt_layer() を使います。

これらの関数を使うと "タグ" というタイプの値が得られます。(直接、質感やレイヤーのポインタが取れるわけではありません。)
タグをポインタに変換してからいろいろな処理にまわします。
fz_layr_tag_to_ptr()
fz_rmtl_tag_to_ptr()

20080318_03449.png


続きを読む »


FSL基本講座08



今回は編集系ツールの超基本!移動、回転、スケールなどのジオメトリック変換についてです。


ジオメトリック変換の方法は2つあります。
fz_objt_edit_move_objt() など専用の関数を使う方法と、fz_objt_edit_transform_objt() を使う方法です。


方法1.
移動、回転、スケールにはそれぞれ専用の関数があります。
fz_objt_edit_move_objt()
fz_objt_edit_rotate_objt()
fz_objt_edit_scale_objt()

サンプル1
20080317_03443.png

test1_zip.txt
これらの関数の使い方は非常に簡単ですが、 "回転" と "スケール" に関して "任意の基点" を指定できないという問題があります。(問題というか仕様です...。)
サンプルをテストしてみればすぐわかりますが、これだと使い方が限定されてしまいます。


続きを読む »


FSL基本講座07



今日から応用に入ります。

最初は "選択オブジェクトから情報を取得する方法" です。

まず選択オブジェクトのポインタを取得する必要があります。
以下が基本形

   fz_model_pick_get_count(windex,cnt);
   for (i = 0; i < cnt; i++)
   {
     fz_model_pick_get_data(windex,i,NULL,NULL,obj,NULL);
     //ここに処理を書く
   }




オブジェクトから情報を得るには解析(Analysis)用の関数を使います。
20080315_03430.png



続きを読む »


FSL基本講座06



読み方
プログラミングに慣れていない人のために基本を少しだけ。




for文(繰り返し)

  for(i=1;i<=10;i++){
     result=result+i;
  }
iは1。iが10以下の間、iを1つずつ増やす。





if文(条件分岐)

  if(n == 0){
     a();
  }else{
     b();
  }
nが0なら a() を実行する。nが0でないなら b() を実行する。

test1_zip.txt

最低限この2つをマスターしてれば大抵のことができます。
ほか、while文やswitch文などもよく使いますが、初心者は混乱するので、とりあえずいいです。(上の2つでも代用できるし...。)
もう少し勉強したい人はGoogle様に訊いてください。CとかC++と文法一緒です。




いよいよ次から少し実用的な応用をやります!


FSL基本講座05



だいたい大枠は説明したので少し細かいところも見ていきましょう。


今回はプログラム内で使う基本的な "アイテム" について説明します。




変数(variable)
変数というのは値をやり取りするときの "入れ物" です。
データタイプ(変数の型)によって専用の入れ物があります。
これらを使う場合ははじめに宣言しなければなりません。

たとえば、数値を扱うもの、文字列を扱うもの、論理値を扱うものなどがあります。
サンプルでは変数名の型がわかりやすいような名前が付けられています。
long     lval(整数)
double     dval(実数)
fz_string_td    str," hellow "(文字列)
fzrt_boolean    TRUEかFALSE (論理値)
etc...

FSLの場合、他にも専用の型がいろいろあります。
fz_xy_td
fz_xyz_td
fz_rgb_float_td
fz_xyz_mm_td
etc...
(※ _td は "type data" の略)





enum(enumeration)
これはあらかじめ定められた特定の値しか取れない変数です。
最後に _enum が付きます。
たとえば、fz_objt_model_type_enumなら取れる値は以下の3つ。
FZ_OBJT_MODEL_TYPE_UNSPEC
FZ_OBJT_MODEL_TYPE_FACT
FZ_OBJT_MODEL_TYPE_SMOD





ポインタ(pointer)
ポインタというのは、どのデータを処理しているのかを指し示すマーカーみたいなものです。
ポインタ用の変数はデータタイプを示す名前の最後に _ptr が付きます。これも変数の一種です。
fz_objt_ptr
fz_layr_ptr
fzrt_floc_ptr





関数(function)
関数というのは、何らかの処理をする機能を提供するものです。
たとえば、fz_objt_cnstr_cyln() は円柱を作るための関数です。
名前の頭に "fz_" が付いて、だいたい意味がわかるような名前になってます。
fz_objt_attr_get_objt_layer()
fz_objt_alys_get_objt_centroid()
fz_view_new_camera()

算術関数や文字列用の関数は
"FZ_MATH_" や、 "fz_std_" などが付いています。
FZ_MATH_3D_MID_PT()
FZ_PI
fz_std_sin()
fz_std_strcat()
fz_std_strlen()





ユーザー関数
複数の機能をまとめて1つにしたものをユーザー関数といいます。
ユーザー関数には大きく分けて2つの種類があります。
"値を返すもの" と "返さないもの" です。
返すものには、頭に返す値のデータタイプを示し、最後にreturn (返す)します。
返さないものにはvoidをつけます。(あるいはlongで代用したりします。)
ユーザー関数の名前は自由に付けられます。

double ichikaranmadetasu(long n)
{
   long i,result=0;

   for(i=1;i<=n;i++){
      result=result+i;
   }
return result;
}

呼び出すときは、ichikaranmadetasu(10);
この場合は1から10まで足して55を返します。





他にもいくつかありますが、このへんのことがわかってれば大抵のことは出来ます。
もっと細かいことはAPI Referenceを参照してください。


次回はfor文やif文などの基本文型を少しやります。

FSL基本講座04



スクリプトの体裁
プラグラミングコードというのは、細かい "部品" の集合体です。
その細かい部品を集めて何らかの処理をおこなうものです。
たとえば、スクリプト全体を1つの "工場" と見立てると、処理するデータはその工場で作っている "商品" といったところです。
1つひとつの工程は関数そのもの。( fz_objt_cnstr_line() だとか fz_objt_cnstr_rectangle() などです。)
複数の工程をまとめたものがユーザー関数。( たとえば "塗装" なら、下地調整、マスキング、下塗り、中塗り、仕上げ塗装、乾燥など複数の工程を経るわけです。)
"組み立て作業" あたりがメインルーチンでしょうか。



たとえば、もっともシンプルなものだとこうです。
サンプル1
20080313_03344.png
test1_zip.txt
円柱を作るスクリプトですが、短いのでメインルーチンだけで済みます。
町工場で "一品" だけなにかを製造しているイメージでしょうか...。

続きを読む »


FSL基本講座03



サンプルファイルの見方
formZのSDKにはサンプルがたくさん付いています。
"細かく解説するよりもコードを読ませたほうが早い!" ということなのでしょう...。


サンプルを見るには、API Referenceからリンクを開くか、Scriptフォルダ内のSamplesフォルダ内の.fslファイルを直接エディタで開きます。

ただし、初心者がこれを見るとちょっと混乱してしまうかもしれません。
たとえば、util_objt_cnstr_simple.fsl を見てみましょう。
20080312_03330.png

util_objt_cnstr_simple.txt

プロが書いたものなのでちゃんと "エラー回避コード" が入っているのです...。そのせいで少し読みにくくなっています。
さらに、ユーザー関数を使って機能を分離してあったりして少し複雑に見えます。(自分もはじめは「なんかゴチャゴチャ書いてあってよくわからん!」って思ってました...。)

なのでそのへんを頭に入れて読む必要があります。
ちなみに自分の場合、読みにくい時はテキストエディタにコピペしてエラー回避コードを全部削除してしまいます。わかりづらいので。(個人が自分のために作るスクリプトなので最低限動けばいいんです...。)


続きを読む »


FSL基本講座02



準備 〜スクリプトを作るのに必要なもの〜

・SDK(Software Development Kit)
 付属のDVDからインストールします。
 ・API Reference(HTML形式のformZ API Documenation)
 ・マニュアル(formZ SDK.pdf)
 どちらも英語ですが、とりあえずAPI Referenceは必須!
 自分はブラウザにブックマークして、いつでも見れるようにしてあります。
 
・テキストエディタ
 formZにも専用のエディタがありますが、遅いし使いにくいのでおすすめしません...。
 MacならMiがおすすめ。
 ちなみに自分はWinなので、EmEditorを使ってます。
 自分が使ってる構文ファイルをアップしますので、Em使ってるひとは試してみてください。
 EmEditor用の構文ファイル (※Zip圧縮してあります)

・C言語の文法知識
 FSLはC言語ライクなスクリプトなので、そういう知識が必要です。
 自分の場合、JavaScriptの知識が役に立っています。(C言語と文法一緒なので)
 "プログラミングは初めて" って人はネットをチラっと検索してみてください。(いくらでも出てきます)
 まず、for文if文は必須です。そのほか while文や Switch文もよく使いますが、
 for文とif文がわかってれば大抵のことは出来ます。

・しつこさ
 いい意味での "しつこさ" が無いとやっぱりおぼえられません。トライ&エラーの繰り返しこそ大事です。

・好奇心
 あとは、「面白い!」と思うかどうかだけ。

続きを読む »


FSL基本講座01



今日からformZ Script Language(FSL)講座やります。
といっても、全部を完璧に解説できるほど自分もよくわかっているわけではありません...。
とりあえず、 "お題" を提示してそれを解説しながらやっていきます。細かいことはその都度やりましょう。


点を作るスクリプト
formZの場合、MAXScriptなどと違って、一行書いただけでは全く動きません。
必要最低限の体裁は整えなければなりません。(初心者がとっかかりにくい原因のひとつですよね...。)
最初は一番簡単な体裁のスクリプトから。

20080310_03307.png

test1_zip.txt (※右クリックしてリンク先を保存>解凍)
これは点オブジェクトを作るスクリプトです。
どの部分が何を表しているのか、じっくり見ればだいたい想像つくと思いますが、最低でもこれだけは必要です。(※画像リンクの先に解説画像あります)


続きを読む »


formZ : スクリプトの使い方



ちょっとまとめてみました。


■起動方法
 エクステンションメニューの "ユーティリティーの起動..." からスクリプトファイル(.fsl)を選んで実行します。
 (※実行すると.fsbという拡張子のファイルが作られますが、これはコンパイル済みのファイルです。
 そのままにしておいてください。次ぎに実行するときは、.fslでも.fsbでもどっちでも同じ動作をします。)


■保存場所
 スクリプトファイルの置き場所は、formZが入ってるフォルダにある "Script" フォルダ内がデフォルトです。
 (※パスの設定さえしてあればどこでもいい...)


■解凍
 このブログにアップしてあるスクリプトはほとんどがZip圧縮してあります。
 ですが、ブログにアップできるファイル形式に制限があるので、とりあえず.txtにしてあります。
 解凍して使ってください。
 (※ブラウザによりますが、そのまま開いてしまうと文字化けしたテキスト画面になります...。
 その場合は右クリック保存して、デスクトップ上で解凍。)


■注意・その他
・たいていのスクリプトは何かオブジェクトを先に選択しておく必要があります。

・取り消しできないのもあります。ご自分の責任でお使いください。
 なんかあっても、作者は責任取りません。

・ここにアップされているものはちゃんと勉強したプロのプログラマーが書いたものではありません。
 素人が独学でおぼえたもので、テキトーに書いてます。
 例外処理とか書いてませんので、なるべく余計な条件が入らない状態でお使いください...。

・自由に改変していいですが、いいのが出来たら教えてください...。

・スクリプトにはいくつか種類があります。自分が書いたのは"ユーティリティースクリプト" と "コマンドスクリプト" の2つだけです。
 "ユーティリティースクリプト" はファイルを選んで実行します。
 "コマンドスクリプト" の場合はエクステンションメニューにコマンドが並びます。(ファイル名の頭に "cmnd_" をつけてあります。)





シンボルの一覧を作る



シンボルパレットのアイコンはちょっと小さいので、もっと見やすいカタログ的なのを作ろうと思って、ずらーと並べてみました。スクリプトで。

昔作ったものほどショボイのがよくわかります...。

Symbol_Catalog_zip.txt
ロードされているシンボルを全部並べます。
インターフェースはありません。
配列ピッチとか変えたい人は自分でコードをいじってください...。

はしごのセンターをトレースする



道路をスウィープで作ったとき、後から白線(センターライン)を入れたい思ったことありませんか?
"それ" をスクリプトにしてみました。
といっても完璧なものではないので、運が良ければ成功します...。

注意:
1.はしご状のスウィープオブジェクトが最適。
2.オブジェクトのポイントインデックスを順に拾っていくという仕様なので、ポイントインデックスがキレイに並んでいないと成功しません。
3.編集を重ねたオブジェクトだとインデックスがバラバラになっているので無理...。
使えねー!...。

Trace_midpoint_of_Ladder_zip.txt

«  | HOME |  »
無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て

 

Category


Recent Entries


Recent Comments


Archive


Tags

formZ fsl modo Maxwell pylon Silo max chair Photoshop Maya script Melbourne mentalray サンプル ワイヤーフレーム 間接照明 チュートリアル 透過マップ matrix 描画エンジン ヤシの木" 屋根 パースの下絵 .fsl コンター contour 7500 スクリプト 等高線 テキスト メッシュ ブロック図形 覚え書き レイヤ分け フラット化 スウィープ Google GoogleEarth GR Eiffel Earth Illustrator RenderZone BonZai View SketchUp Rhinoceros DIGITAL AutoCAD max9 3ds 絶対角度 コンパクトカメラ パノラマ写真 トレンクル formz paris furniture コルビュジエ 読み込み 


Links

このブログをリンクに追加する


Profile

Takeharu Yabe


Mail


RSS



Search



Counter