スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ArchiCADのGDLに挑戦! 【2】

はいでは3回目、3Dのオブジェクト作成です。
今回は簡易ルーバーを作ってみましょう。


えーと、変数定義ですね。
こんな感じです。

読めるかなw

変数 型 名称
_w 長さ 縦桟幅
_d 長さ 縦桟厚
_pitch 長さ 縦桟間隔
_side_on ブール 端部に追加
_yoko ブール 横桟表示
_yoko_h 長さ 横桟高さ
_yoko_d 長さ 横桟厚
_yoko_ue 長さ 上部横桟上端
_yoko_shita 長さ 下部横桟下端

おお!Tabキーが効かないw
まぁいいや。わかるでしょうw


まず記述をわーっと書いちゃいましょう。

面倒ならコピペでもいいですが自分でキーボードかたかたやるのをオススメしますよ?

!!3D

side = (A MOD _pitch+_pitch)/2

addx side-(_w/2)
for n=1 to int(A/(_pitch))
block _w, _d, ZZYZX
addx _pitch
next n
del top

if _yoko then
add 0, _d, _yoko_h +_yoko_shita
roty 90
block _yoko_h, _yoko_d, A
del 2

add 0, _d, ZZYZX - _yoko_ue
roty 90
block _yoko_h, _yoko_d, A
del 2
endif

if _side_on then
block _w, _d, ZZYZX
addx A - _w
block _w, _d, ZZYZX
del 1
endif

hotspot 0,0,0
hotspot 0,0,ZZYZX
hotspot A,0,0
hotspot A,0,ZZYZX


では2Dのボタンを押して2Dについても記述します。
!!2D

PROJECT2 2,270,2

これだけです。

あともう一つ「マスター」にも次のように記述します。
!!master
if _yoko =0 then
lock "_yoko_h","_yoko_d","_yoko_shita","_yoko_ue"
endif


はい終了す!

では見ていきましょう。
まず3Dですね。

side = (A MOD _pitch+_pitch)/2
ですが、これは色んな場面で使われるであろう計算式を「side」という変数を定義してつめこんでいるんですね。
これにより毎回計算しなくても、引数に「side」と
書くだけでOKになっちゃいます。


さて次!
addx side-(_w/2)
これはまず、「add」というものがあります。
2Dを作図した時は絶対座標で要素の位置を決めていましたが、3Dは割と相対座標です。
…で、例えば次に出てくる
block という要素は大きさを指定すると原点に立方体がモデリングされます。
でも立方体を複数配置する時同じ場所にモデリングされちゃいますよね。
なのでモデリングする前に原点を作図位置に動かしてあげます。
それが「add」です。

「add」は
add (X), (Y), (Z)
というような順番で移動値を入力します。
もちろんマイナスの値を入れるとプラスとは逆方向に動きます。
移動したらそこでモデリングしますがそのままだと次の要素もそこにモデリングされちゃいます。

そこで
「del 1」と
入力すると「add」が一つ前の座標点にもどります。
「add」を2回書いていたら「del 2」と書かないと原点に戻ってきません。

…めんどくさいでしょw

AutoCADで絶対座標テンキーで図面の作図してるみたいな気分になるかと思います。
いや、もちろんそんなことないけどw

さて、話を戻して「addx side-(_w/2)」なのですが、
「addx」は3軸の値を書かずにx軸への移動距離を書くだけで済みます。ちょっと楽チンですし立体的に考えないで済みますね。
yもzも同じように、「addy」「addz」というように入力できます。
でもこれらも一個の移動なので座標を戻す時は「del 1」と
なります。

さて引数のside-(_w/2)ですが、さっきの「side」が活用されてますね。このように毎回出てきそうな計算式はスクリプトの上で書いておきます。上から順番に読まれて行く(実行されていく)ので先に書いておかないとダメです。
あ、あと途中で書き換えることもできますので、そうなるとそれ以降の「side」は別な意味を持つことになります。

…長いなw最後まで行くんかこれw

さあ次w
for n=1 to int(A/(_pitch))
block _w, _d, ZZYZX
addx _pitch
next n

プログラミングっぽくなってきましたw
for~nextループです。
forの次の行からnextの上の行までの内容を繰り返します。
で、どれだけ繰り返すかというと…
forの右側にnがあります。
このnの回数だけ繰り返すんですが、 n=1to10ならnの中の値が1から10になるまで繰り返しますってことですね。
next n というところでnがカウントアップされるのです。

さあここでは計算式分繰り返されるのですが何回addされたのかはこのオブジェクトの大きさによりけりになってしまいます。
add分delしないとモデリング座標が原点にもどってきませんね。
でも大丈夫w
「 del top」と
記述するとすべての座標移動をクリアして原点に戻ってくれます。
便利ですね。

if 文の登場です。
Excelでおなじみですね。
条件別で処理内容を分岐させることができます。
こんな感じで書きます。
if (条件式)then
(処理パターン1)
else
(処理パターン2)
endif


条件式の場合は処理パターン1、そうでなかったら処理パターン2を実行します。
分岐が必要なければ
if (条件式)then
(処理パターン1)
endif

でOKです。
さらに処理が1行なら
if (条件式)then(処理パターン1)

OK!

今回は説明量が多いのでモデリング内容は省略してますが、hotspotは説明しておきましょう。
まあ簡単にいうとオブジェクトを配置した時に掴める点となります。配置しなければ勝手に4隅に配置されますが、多角形状なら角には配置しておいた方が親切ですよね。
3Dでは
hotspot (X),(Y),(Z)
2Dでは
hotspot2 (X),(Y)
と書きます。


さて2Dですが
PROJECT2 2,270,2
と書いておくと3D形状の上面から見た平面投影の形状がそのまま表示されるという簡単仕様w
今回は楽させてくださいw

「マスター」に書かれた分を説明しますと
if _yoko =0 then
lock "_yoko_h","_yoko_d","_yoko_shita","_yoko_ue"
endif


「もし、_yokoの値が0なら"_yoko_h","_yoko_d","_yoko_shita","_yoko_ue"の操作をロック(ゲレーアウト)させてください」という文です。

「マスター」の記述は3D,2Dにわたり有効です。


さあいかがでしたでしょうか。
もうわけわからんでしょうかw

私も書いててなんかまとまりが無いような気がしてきましたw

ちょっとしばらくしたら訂正しますねw



オススメ本
スポンサーサイト

ArchiCADのGDLに挑戦!【1】

なんか寒くなってきました。
風邪引きそうです。虚弱なのでw

さて、GDLについて!
ん、まぁ色々説明する前にサクっと何か作って見ましょうか。

まずは2Dのオブジェクトを作ってみましょう。
そうですね…。図面に配置する記号なんかいいかもしれませんね。

まず…ArchiCADの画面の上のメニューから「ファイル」>「ライブラリとオブジェクト」>「新規オブジェクト」をクリックしてみましょう。

「名称未設定ー1」とダイアログが開きます。
130924001.jpg


とりあえず、各項目の説明は省きますw
だって私もよく知らんのですw
いやわかるけどうまく説明出来なそうw

とりあえずわかるところから追い追い…ってことでw


まず左のボタン群上の方、「パラメータ」。
130924002.jpg

ここで変数を定義します。
「へんすう?」

変数とは文字の通り状況に応じて変更される数字(値)です。つまり今から作ろうとしているものは大きさが変わったりするわけですよね?
「1」だった大きさが「5」とかになるわけです。

で、その「1」とか「5」とか入れとく箱(イメージね)が変数なんです。

一番上に「A」とか「B」とか「ZZYZX」ってありますよね?

スクリプトを書いて行く時に「1」とか「5」とか書かないで、代わりに「A」とか「B」とか書いて行くわけですね。
そうすることによりユーザーさんはパラメータの値をいじるだけでオブジェクトの形状が変えられる…ってわけです。
普通のプログラミングの場合、
A = 5
とか書いて定義します。GDLの場合でもそういう書き方もしますが、ユーザーさんがその値を変更する必要のない場合にしておきましょう。
あ、それと、変数が変えることができるのは数値だけじゃなく文字とかもできます。この辺はその都度書いて行きますね。

…初歩過ぎでしょうか?
まぁいいやw

さてさてまず「ZZYZX」に×を入れましょう。「表示」のとこですね。
一回クリックして項目選んで「×」をクリックしましょう。
今回これは入りません。
そう、ユーザーさんに変更させたくない、見せたくないパラメータは表示に「×」をいれておくと見えなくなります。

次に一番下の段、「 ac_toplevel」とか書いてある行を選らんどいて、上にある「新規」ボタンを押してみましょう。
一行増えて「_A」ができましたね。「_A」を「no」としましょうか。
同じように「font_size」も作っておきますかw

「no」のタイプはabcアイコンの「テキスト」。 値は「1」。
「font_size」のタイプは矢印アイコンの「実数」。値は「4」にしておきましょう。



それでは次の画面…。左側の「2D」のボタンをクリックします。
(ボタンは左右どちらでもいいです。)
130924008.jpg
おお、白い世界w
ここにスクリプト…と言うと難しく感じますので、文字とかを書いていきます。

注意点としては半角英数のみ!
(全角も使うことはありますが基本は半角英数ですね。)
スペースとか全角で入れるとエラーになりますし、探すのが面倒です。

とりあえず書いてみましょうかね。

rect2 0, 0, A, B

はい。これで四角形を書きました。

説明しましょう。
『rect2』は2D要素で2点を指定して作る矩形です。2点しか指定できないので当然四角形になります。
『rect2』の後は半角スペースを入れます。「tab」でもいいです。
その後に2点の座標を記入しましょう。
内容は…
X1,Y1,X2,Y2の順です。
一点目のXY座標、二点目のXY座標ってことですね。
値は「,」カンマで区切ります。
ここはスペースなくても大丈夫ですが見やすくするためにtabいれておくといいですよ。

で、さっき書いたのに直してみると0,0の座標とA,B座標ってことだけど…この「A,B座標」ってなんだー?となりますね。

この「A」と「B」が前の画面で先ほど出てきた変数というやつです。

GDLでは…(と言っていいのかな?)
「A」「B」「ZZYZX」という変数は特別で、どのオブジェクトにもデフォルトで定義されています。
「A」はオブジェクトの横寸法。
「B」は オブジェクトの縦寸法。
(平面で見た時ですね)
「ZZYZX」は3Dで配置された時のオブジェクトの高さを指定するのに使います。(すみません記事訂正しました)


なのでこの四角形の大きさはオブジェクトの値の大きさと連動することになりました。はい。

で、これだけではつまらないので四角形の中に何か文字を入れておきましょうか。
そういえば先ほど「no」という変数を定義しましたよね。
これ使いましょうw

では次の段にテキストを配置するステートメント(文)を書きます。

text2 A/2, B/2, no

座標0、0の位置からxyの距離は「A」「B」ともに半分の位置に文字を置きます。なので「/2」と書きます。
text2 X座標,Y座標, テキストの文字
の順。言い忘れましたが最後は「,」無しです。

さあ左下の「2Dビュー」のボタンをクリックします。
プレビューみたいなもんです。
130924007.jpg

するとあれれ?ちょっとアンバランスですね…。
130924004.jpg

とりあえず簡単に説明すると、テキストの起点は左上になります。
で、起点は変えることができます。起点だけじゃなくて、フォントやサイズ等を定義しておくことができるんです。つまり文字スタイルを作るんです。
そんで、文字スタイルを定義しただけでなく「これから書く文は”定義1”のスタイルですよー」と書いておくのも忘れてはいけません。

なので textの前に次の2行を書いておきます。

define style "TEXT_STYLE_5" "HG_丸ゴシックM-PRO", font_size, 5, 0
set style "TEXT_STYLE_5"


130924003.jpg
ここでもちょっと簡単な説明です。
define styleの後ろから2番目の「5」が起点の位置を中央にするオマジナイですw
私は起点の位置をスタイル名に入れるようにしています。参考までに。
set styleは次のset styleが出てくるまで有効です。

すると、こんなんなります。
130924005.jpg

これで保存して平面に配置してみましょう。
130924006.jpg
名前はテキトーにつけて下さいw

保存先は「埋め込みライブラリ」にすると、ディスクのライブラリを読込みにいかないので楽です。(でもこのファイルでしか使えないオブジェクトになります。つまりプロジェクトを保存し忘れると…www)

どうでしょう。「オブジェクトの設定」のツリーの中、埋め込みライブラリに今作ったオブジェクトが保存されていると思います。
パラメータは少ないですがいじくってどう変化するか試してください。
ちなみに形状や文字幅に制限かけてないので四角や文字の大きさはめちゃくちゃになったりしますw
で、「あー、こういう形になってはマズイな」というパターンを知ってください。

次回は簡単な3Dに挑戦してみましょう。とりあえず何をどうするってのを知らないと説明しにくいのでw


ちょっと途中の画像がなくなってしまったのでw後で貼りますねw

ArchiCADのGDLに挑戦!【0】

ちょいちょいペースは不定期になると思いますがArchiCADのGDL習得についてまとめていきます。

GDLは3次元オブジェクトCADであるArchiCAD上で配置されるオブジェクト(部品)になります。
これは他のCADにもあるセルのようなもので登録しておけば簡単にわんさか配置できるようになります。
しかし作成が難しい(面倒)です。
ArchiCADから柱ツールや壁ツールなんかを使って登録することもできますがパラメトリックな変更はできません。
(全体的な縦横のサイズくらいは可変可能です)
で、アレコレ融通がきく自作のオブジェクトが欲しいな〜って事になるのです。
でもこのオブジェクトの作成方法がスクリプトっていう…(ガーン!)
ここではなるだけ優しいとこから勉強できるように簡単なところから始めていきます。皆様の習得の手助けになれば、と思います。
まぁ私自身もまだまだ勉強中です。
間違いとかあったらウェルカムです。

次回からどうぞよろしくー。
広告
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
広告
検索フォーム
楽天
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。