CADとPython 09 if文と面積スタンプ
if文について
if文は分岐をつけるもので、非常に多く使用します。CADの場合の利用シーンとしては、オブジェクトタイプによって処理を行うかどうかなどがあります。
面積スタンプ
今回は面積スタンプを例にサンプルを作成しています。文字やグループなど面積が必要ない場合は、面積スタンプの処理を行わないというものです。
オブジェクトタイプなど、分岐ではソフトが設定している設定値が利用されます。詳しくは動画を見てください。
Vectorworksのサンプル
import vs
target = vs.FSActLayer() #対象をtargetという変数(受け皿)に入れる
# オブジェクトタイプを取得
target_type = vs.GetTypeN(target)
typeList = [3,4,5,6,21]
if target_type in typeList:
area = vs.ObjAreaN(target)
tsubo = str(round(area / 3.3, 1)) + "坪" #小数点第一にして坪をつける
m2 = str(round(area,1)) + 'm2' #小数点第一にして坪をつける
#targetの中心座標を取得
center = vs.HCenter(target) #中心座標をcenterと呼ぶ
text = (m2 + '/' + tsubo)
#centerへ移動して面積を書く
vs.MoveTo(center) #centerに移動する。
vs.CreateText(text)
elif target_type == 11:
vs.AlrtDialog('グループです')
else:
vs.AlrtDialog('対称図形が適切ではありません')
ライノセラスのサンプル
# -*- coding: utf-8 -*-
import rhinoscriptsyntax as rs
# 対象の図形を選択
target = rs.GetObject("図形を選択してください")
# オブジェクトタイプを取得
target_type = rs.ObjectType(target)
# オブジェクトタイプが8(Surface or single-face brep)の場合
if target_type == 8:
# 面積を計算(単位は平方メートル)
area = rs.Area(target)
tsubo = str(round(area / 3.3, 1)) + "坪" #小数点第一にして坪をつける
m2 = str(round(area,1)) + 'm2' #小数点第一にして坪をつける
center = rs.SurfaceAreaCentroid(target)[0]
text = "{:.2f} m²".format(area)
#centerにtextdotを配置
rs.AddTextDot(text, center)
else:
rs.MessageBox("サーフェスまたはシングルフェースのBREPではないため、中心座標を計算しません。")