2023-10-16 08:13 AM - 編集済み 2023-10-21 06:15 PM
試験機能として搭載されているPythonパレットを利用し、ゾーンから要素プロパティに各仕上面の表面積等を取得するスクリプトを作成してみました。
1ボタンでフロアに存在するゾーンの3Dバウンディボックスの座標を利用して、プロパティに仕上面積等の数値を自動入力することができます。
改良の余地は色々とありますが、一応使える場面もでてきたので、この場で公開をさせていただきます。
スクリプトは改良OKですので、よさげな改良方法と活用方法・アイディアがありましたら是非教えていただきたいと思います!!
●使えそうなシチュエーション
1_企画設計や基本計画段階での各室の壁仕上数量のざっくり算出
→仕上表に仕上面積を追加とかもやろうと思えば可能
→室グレードごとに、面積集計とかもできそう?
2_仮設計画における東西南北の見付け面積を手早く算出
3_ゾーン高さをプロパティに値として一括取得
●注意事項
1_プロパティのグループ名・プロパティ名を変更するとスクリプトは動作しなくなります。
VScode等でプロパティ名を直接編集していただければ問題なく動作させることが可能です。
2_正確な値が取得できるのはゾーンが矩形の場合のみです、非矩形の場合は、正確な値では取得できません。
これはゾーンの周長等から値を取得しているのではなく、3DのバウンティボックスのXYZの座標値を取得しているためです。
そのため、実施設計等において柱型やPS壁などがある場合は、手動で減算するなどの措置が必要なため使用ケースが限られます。
・・・一応、減算用のゾーンを手動で作ったりすれば、数式プロパティを組み合わせることで非矩形にも対応できるかもしれません(未実証)
3_Pythonパレットの使用方法
https://support.graphisoft.co.jp/hc/ja/articles/900004054666Archicad%E3%81%A7Python%E3%82%92%E5%88%A...
●使う手順
1_プロパティのXMLデータをインポート
2_Pythonパレットを起動し、[zone_all_plus_wall_area_properties_setter_final_jp.py]を実行
3_各ゾーンの要素プロパティに数値が記入される
●取得できる値・・・・・・プロパティの名称
総仕上面積・・・・・Total Surface Area
天井仕上面積・・・Ceiling Area
床仕上面積・・・・・Floor Area
壁仕上面積・・・・・Total Wall Area
上辺壁面積・・・・・Top Wall Area
下辺壁面積・・・・・Bottom Wall Area
左辺壁面積・・・・・Left Wall Area
右辺壁面積・・・・・Right Wall Area
天井高さ・・・・・・・Zone Height
上辺長さ・・・・・・・Top Perimeter
下辺長さ・・・・・・・Bottom Perimeter
左辺長さ・・・・・・・Left Perimeter
右辺長さ・・・・・・・Right Perimeter
周長・・・・・・・・・・Total Perimeter
2023-12-19 09:42 AM
PYTHON入れてみようとしましたが、
なぜかエラーです。
ArchicadでPythonを利用する方法 – GRAPHISOFTナレッジセンター
この通りやったり、PYTHONも再度インストールしたんですけどね。
困った。。。
2023-12-19 09:44 AM - 編集済み 2023-12-19 09:51 AM
OSエラーのためパッケージをインストールできませんでした: プロキシ URL を確認してください。形式が正しくないため、ホストが欠落している可能性があります。警告: pip の最新バージョンをチェック中にエラーが発生しました。
翻訳するとこんな感じですね。
現在、サポートに問い合わせ中です。
ぜひ、解決したらトライさせて頂きます。
2023-12-19 09:55 AM
@TOMIMARI さん
会社の通信にプロキシを使用しているのであれば、下記の記事で紹介した設定でうまくいくかもしれません。
https://howtousearchicad.com/addons/8593/
※ システム環境変数をいじるので自己責任 or システム管理者に相談の上実施してください。
2023-12-19 01:08 PM
ありがとうございます。
システム管理者に相談してみます!
2024-01-19 06:37 PM
こんにちは
うまく動作いたしました。
実はこちらでも、ゾーンの壁面積を接する壁毎に分けて集計出来ないか悩んでいます。
特にゾーンから室の外壁側の面積と間仕切り壁側の面積をそれぞれ区別して集計したいのですが、以下の様な考え方でコードを作れないでしょうか。
(ArchiCAD Python APIは素人でまだよく分かりません。)
(1)ゾーンは壁オブジェクトに囲まれているとする。
(2)ゾーンを囲っている壁のリノベーションフィルタを、デフォルトの「既存」から「解体」に変更すると、ゾーンの壁表面積には「解体」に変更した壁の面積は計上されずに、「既存」の壁のみからなる値が集計される。
(3)よって、一つのゾーンに対して全ての壁のリノベーションフィルタを順番に1つづつ「既存」状態にし、壁の仕上を表す適当なIDとセットで壁面積を各ゾーンに保存していけば、ゾーン毎に壁種毎の面積が集計出来ないでしょうか。(下記のイメージ)
for ゾーン in 全ゾーン
for 壁 in 全壁
順番に1つの壁のリノベフィルタのみ「既存」とし、他は「解体」として、壁表面積と壁種IDをゾーンに記録
2024-02-01 08:14 AM
KJKAN様
返信遅くなりました。
やりたいことのイメージが理解できていないかもしれないのですが、リノベーションフィルタを利用したうえで、壁に仕上IDをプロパティ等で入力し、その情報をゾーンのプロパティに入力させるようなイメージでしょうか?
既存のPythonAPIでは壁ツールで書いた情報を特定のゾーンツールのプロパティに移し替えることは困難かもしれません。
壁の情報→ゾーンの情報に移し替えるということは、壁がどのゾーンのどの面に設置しているかをコード上で表現してプロパティの情報を移し替える感じになると思うのですが、Pythonのコマンド的にそれを判断する方法は現状ないと思われるからです。
2024-02-01 05:04 PM - 編集済み 2024-02-02 09:33 AM
(投稿場所誤り削除)
2024-02-01 05:13 PM
ご連絡ありがとうございます。
(簡潔にまとめるのが下手で申し訳ありません。)
>やりたいことのイメージが理解できていないかもしれないのですが、リノベーションフィルタを利用したうえで、壁に仕上IDをプロパティ等で入力し、その情報をゾーンのプロパティに入力させるようなイメージでしょうか?
はい、ご理解の通りと思いますが、分けて書きますと、
(1)やりたいことは、各室毎に天井下までの壁面積を出来れば壁の種類毎に(少なくとも、外壁側と間仕切壁を分けて)出したい。
(2)開口部は除かれた壁面積で。ゾーンの高さは天井高とします。種類毎というのは接している壁の種別ID毎です。
(3)ゾーンのプロパティ「壁表面積」(a) が目的の値に近いですが、これは接している壁がある場合の全ての面積の合計です。
(4)壁オブジェクトのリノベーションフィルタを「既存」→「解体」にすればその壁のみゾーンの(a)の面積から除外されるので、この性質を利用。
>既存のPythonAPIでは壁ツールで書いた情報を特定のゾーンツールのプロパティに移し替えることは困難かもしれません。
壁の情報→ゾーンの情報に移し替えるということは、壁がどのゾーンのどの面に設置しているかをコード上で表現してプロパティの情報を移し替える感じになると思うのですが、Pythonのコマンド的にそれを判断する方法は現状ないと思われるからです。
なるほど、そうなんですね。因みに私が、Python APIでできるかな、と思った点は、
(6)Pythonでは図形オブジェクトを新規作成は出来ない(?)が、プロパティ値の変更は可能なはず(?)。
(7)ご指摘の「壁がどのゾーンに属すか」の判定については、特定のゾーンに対して、図面内の壁の方を総当たりで1つのみリノベフィルタで「既存」に切り替えて、ゾーンに壁面積(a)が現れるまで試すので、現れた時点の壁IDと面積でもってゾーンと壁を特定し、ゾーンのカスタムプロパティに記録出来るかもしれないと思いました。(総当たりのイメージは下記)
for ゾーン in 全ゾーン
for 壁 in 全壁
順番に1つの壁のみリノベフィルタを「既存」(他は「解体」)とし、
面積が(a)に発生したときの値と壁種IDを同じゾーンのカスタムプロパティ
「壁面積1」~「壁面積4」「ID1」~「ID4」に記録(ID別に加算上書き)
(8)「壁がゾーンのどの面に属すか」につきましては、面積とセットの壁種IDがあれば具体的な面の位置については必要ないと思いました。
(※2)そもそも、壁オブジェクトのプロパティ(ここではカスタムプロパティの種別ID)の取得や変更はPython APIでは出来ないということなのでしょうか。プロパティの種類にPythonで取得・代入が出来るものと出来ないものがあるのでしょうか。(もちろん形状に関わるものは変更出来ないと思いますが)
(※3)総当たりというのはプログラムの効率が悪いとは思いますが、工夫できそうかなあとも...
(※4)サンプルプログラムのFill Zone Overall with Dimensions.py を編集して、独自に作ったゾーンのカスタムプロパティに2Dバインドボックスの値を代入したりは出来ました。 ただし、例えば壁表面積(a)の取得が出来なかったりと、うまくいきません。
(※5)カスタムプロパティであれば、Pythonから取得や追加ができるのかと、ArchiCAD 上でゾーンのデフォルトプロパティの壁表面積を、同じゾーンのカスタムプロパティとして代入式で表示は出来ましたが...Pythonでの取得と値の代入方法が良く分かりませんでした。
2024-02-07 11:56 AM
PYTHONが、、、、
やっと、、、、
使えるようになったので報告します。
12/19にここでコメントして、本日やっと使えるようになりました。
何度もABKSSサポートセンター様や、うちの会社のセキュリティ担当と、
何度も何度も打ち合わせしてやっと。
プロキシや、マカフィーや、URLブロック解除や、
セキュリティを弱めたり?色々な事を行って出来たので報告します。
たくさん時間を使ってもらったので、サポート対応の方に感謝です。
各社セキュリティ対応も違うと思いますが、これだけ時間がかかった報告でした。