下の画像はtubeコマンドを使用した例ですが、これをみてもどんな形状を表しているのか分からないと思います。そこでもっと簡単に形状を管理できないか考えていました。
![]() |
tubeコマンドの実装例 |
そもそもArchicadには断面形状マネージャーという便利な機能があるじゃないかと思い、GDLで断面形状を呼び出す方法を探しました。
意外と簡単に実装できましたので、今回はそれを共有できればと思います。まずは以下のスクリプトを確認してみてください。
マスタースクリプト
dim geom_info[] n = REQUEST ("Profile_components", profile_index, _nComp,_componentTypes) n = REQUEST ("Profile_default_geometry", profile_index,geom_info) num_x = _nComp + 1 num_y = _nComp + 2 num_s = _nComp + 5 for i=1 to _nComp n = REQUEST{4} ("Profile_component_info", profile_index, i, "gs_profile_bmat",_bmat) !!!構成要素の材質 n = REQUEST{4} ("Profile_component_info", profile_index, i, "gs_profile_outlinepen",_pen) for j=1 to geom_info[i] PUT geom_info[num_x], geom_info[num_y], geom_info[num_s] num_x = num_x + 5 num_y = num_y + 5 num_s = num_s + 5 next j put pos[1][1] - (pos[2][1]-pos[1][1]) , pos[1][2] - (pos[2][2]-pos[1][2]) , pos[1][3] - (pos[2][3]-pos[1][3]) ,0 put pos[1][1] , pos[1][2] , pos[1][3] ,0 put pos[2][1] , pos[2][2] , pos[2][3] ,0 put pos[2][1] + (pos[2][1]-pos[1][1]) , pos[2][2] + (pos[2][2]-pos[1][2]) , pos[2][3] + (pos[2][3]-pos[1][3]) ,0 BUILDING_MATERIAL _bmat,_pen,1,1 tube geom_info[i], 4, 1+2+16+32, get(NSP) next i hotspot 0 ,pos[1][2] ,pos[1][3] ,unID,pos[1][1],1+128 :unID=unID+1 !BASE hotspot pos[1][1] ,pos[1][2] ,pos[1][3] ,unID,pos[1][1],2 :unID=unID+1 !MOVE hotspot -1 ,pos[1][2] ,pos[1][3] ,unID,pos[1][1],3 :unID=unID+1 !REF hotspot pos[1][1] ,0 ,pos[1][3] ,unID,pos[1][2],1+128 :unID=unID+1 !BASE hotspot pos[1][1] ,pos[1][2] ,pos[1][3] ,unID,pos[1][2],2 :unID=unID+1 !MOVE hotspot pos[1][1] ,-1 ,pos[1][3] ,unID,pos[1][2],3 :unID=unID+1 !REF hotspot pos[1][1] ,pos[1][2] ,0 ,unID,pos[1][3],1+128 :unID=unID+1 !BASE hotspot pos[1][1] ,pos[1][2] ,pos[1][3] ,unID,pos[1][3],2 :unID=unID+1 !MOVE hotspot pos[1][1] ,pos[1][2] ,-1 ,unID,pos[1][3],3 :unID=unID+1 !REF hotspot 0 ,pos[2][2] ,pos[2][3] ,unID,pos[2][1],1+128 :unID=unID+1 !BASE hotspot pos[2][1] ,pos[2][2] ,pos[2][3] ,unID,pos[2][1],2 :unID=unID+1 !MOVE hotspot -1 ,pos[2][2] ,pos[2][3] ,unID,pos[2][1],3 :unID=unID+1 !REF hotspot pos[2][1] ,0 ,pos[2][3] ,unID,pos[2][2],1+128 :unID=unID+1 !BASE hotspot pos[2][1] ,pos[2][2] ,pos[2][3] ,unID,pos[2][2],2 :unID=unID+1 !MOVE hotspot pos[2][1] ,-1 ,pos[2][3] ,unID,pos[2][2],3 :unID=unID+1 !REF hotspot pos[2][1] ,pos[2][2] ,0 ,unID,pos[2][3],1+128 :unID=unID+1 !BASE hotspot pos[2][1] ,pos[2][2] ,pos[2][3] ,unID,pos[2][3],2 :unID=unID+1 !MOVE hotspot pos[2][1] ,pos[2][2] ,-1 ,unID,pos[2][3],3 :unID=unID+1 !REF
profile_components
3行目のようにRequestコマンドを用いて、第一パラメータに"profile_components"という文字列を指定し、第二パラメータに断面形状の名前もしくはインデックスを指定すると、断面形状の総数及び、構成要素のタイプを取得できます。(リファレンスではこの構成要素をコンポーネントと表現しています。)
断面形状の総数とは、下の画像のように数えることができます。下の場合は砕石、捨てコン、基礎コンの3つから構成されているので、総数は3となります。
![]() |
断面形状の構成 |
また、構成要素のタイプとは、躯体・仕上げ・その他のいずれかを断面形状マネージャーから設定したものになります。
profile_default_geometry
続いて4行目では、第一パラメータに"profile_default_geometry"を指定しています。このリクエストは断面形状の形状データを返してます。返ってくるデータは配列形式で、各コンポーネントの頂点数、頂点座標、輪郭の表示設定や、追加ステータスコードなどが含まれています。やや複雑ですが、上記のスクリプトを参考にしてどのようなデータ構成になっているのかを確認してみてください。
Profile_component_info
このリクエストは、各コンポーネントの属性値を返してくれるものです。属性値とはビルディングマテリアルや材質、ペン設定などです。上記スクリプトではビルディングマテリアルとペン設定をリクエストしています。
その他についてはリファレンスで確認できますので、気になる方はそちらをご確認いただければと思います。
まとめ
これらの情報を用いて、putコマンドやgetコマンド、tubeコマンドで形状を作成したものが以下の画像になります。
![]() |
GDLで断面形状を呼び出し |
任意の2点にhotspotを追加して、自由にコントロールできるようにしてみました。
ちなみにパラメータタイプを断面形状にしておけば、好きな断面形状に変更可能です。
便利ですので是非試していただければと思います。
今回は以上となります。
【お知らせ】
ココナラでのサポートサービスも承っておりますので、
ご活用いただければと思います。
1日GDL作成やArchiCAD関連の相談のります 自分でGDLを作成している方へXのアカウントもありますので、ぜひフォロー頂けると嬉しいです。
アカウントはこちらから⇨https://x.com/BIM_arekore
世界の建設業従事者、BIM推進者と繋がりたいです。よろしくお願いします。
0 件のコメント:
コメントを投稿
何でも気軽にコメントください。