2009年06月07日
3Dデータ 使用例
2009年05月16日
SHADEとスケッチアップ
2008年04月15日
3D 建築パース用 添景素材
2008年04月03日
再開
2008年02月26日
線形状の角度
2008年02月07日
sin cosin 勾配
前日の結果から
つまるところ
a=3/10
v=XShade.atan(a)/3.141*180
XShade.Message v
3寸勾配 16.702度
4寸勾配 21.865度
4.5寸勾配 24.23度
5寸勾配 26.57度
つまるところ
a=3/10
v=XShade.atan(a)/3.141*180
XShade.Message v
3寸勾配 16.702度
4寸勾配 21.865度
4.5寸勾配 24.23度
5寸勾配 26.57度
2008年02月05日
sin cos 勾配
底辺と高さから角度を求める記述は下の様らしい
下の記述に90度30度60度の直角三角形の比率で数値を入れて見た。
直角三角形 各辺の比率は 1 : 2 : √3 となっているので
w=距離 √3
h=高さ 1
a 勾配 = h/w = 1/sqr(3)
sqr(3)はスクリプトの記述で√3をこのように記述する
角度 v=XShade.atan(a)/3.141*180 はこの記述で出るらしい
Shadeのスクリプトで計算してみる
a=1/sqr(3)
v=XShade.atan(a)/3.141*180
XShade.Message
値は 30.0056604927392 と出た少し誤差がでるらしい
a=1/2
v=XShade.asin(a)/3.141*180
XShade.Message v
a=sqr(3)/2
v=XShade.acos(a)/3.141*180
XShade.Message v
でも結果は同じでした、少数点1位か2位で切り捨てるか四捨五入が必要か・・
ちなみに
asin() は sin()の逆関数
acos() は cos()の逆関数
atan() は tan()の逆関数
sin30゜は sin(3.14159265/180*30)
cos30゜は cos(3.14159265/180*30)
tan30゜は tan(3.14159265/180*30) と記述
下の記述に90度30度60度の直角三角形の比率で数値を入れて見た。
直角三角形 各辺の比率は 1 : 2 : √3 となっているので
w=距離 √3
h=高さ 1
a 勾配 = h/w = 1/sqr(3)
sqr(3)はスクリプトの記述で√3をこのように記述する
角度 v=XShade.atan(a)/3.141*180 はこの記述で出るらしい
Shadeのスクリプトで計算してみる
a=1/sqr(3)
v=XShade.atan(a)/3.141*180
XShade.Message
値は 30.0056604927392 と出た少し誤差がでるらしい
a=1/2
v=XShade.asin(a)/3.141*180
XShade.Message v
a=sqr(3)/2
v=XShade.acos(a)/3.141*180
XShade.Message v
でも結果は同じでした、少数点1位か2位で切り捨てるか四捨五入が必要か・・
ちなみに
asin() は sin()の逆関数
acos() は cos()の逆関数
atan() は tan()の逆関数
sin30゜は sin(3.14159265/180*30)
cos30゜は cos(3.14159265/180*30)
tan30゜は tan(3.14159265/180*30) と記述
2008年02月04日
忘れていた円形窓終了

円形窓スクリプトが完成しました、多角形の窓も作成できる様になっております
一応R4用のVBScriptです、R5 6 でも環境設定で日本語表示、レガシー何とかにしてコントロールポイントが出てる状態でなければ利用できるとおもいます、
このスクリプトを利用されての一切のトラブルには責任を負えませんので
各個人の責任においてご利用下さい。
'円形窓多角形窓作成スクリプト
XShade.BeginDialog(0)
XShade.AppendFloatDialogItem " 窓幅"
XShade.AppendFloatDialogItem " 窓枠の見付"
XShade.AppendFloatDialogItem " 外枠の見付"
XShade.AppendFloatDialogItem " 外枠の見込"
XShade.AppendIntDialogItem " 形状の分割数"
XShade.AppendBoolDialogItem " 多角形窓"
XShade.AppendBoolDialogItem "多角形窓サイズ調整"
XShade.FloatPropertyValue(0)=1000
XShade.FloatPropertyValue(1)=50
XShade.FloatPropertyValue(2)=50
XShade.FloatPropertyValue(3)=60
XShade.IntPropertyValue(4)=16
XShade.boolPropertyValue(5)=0
XShade.boolPropertyValue(6)=0
kaisi=XShade.AskDialog()
If kaisi=-1 Then
w=XShade.FloatPropertyValue(0)'-----wに窓幅の数値を代入
mm=XShade.FloatPropertyValue(1)'-----mmに窓枠の見付の数値を代入
sm=XShade.FloatPropertyValue(2)'-----smに外枠の見付の数値を代入
sk=XShade.FloatPropertyValue(3)'-----skに外枠の見込の数値を代入
mk=sk-10
bn=XShade.IntPropertyValue(4)'-----bnに形状の分割数の数値を代入
tk=XShade.boolPropertyValue(5)
tt=XShade.boolPropertyValue(6)
If bn < 3 Then
MsgBox "分割数がたりませんので終了します",4112
Else
XShade.InhibitUpdate
XShade.CreatePart
If tk=-1 Then
XShade.ObjectName = "多角形窓"
Else
XShade.ObjectName = "円形窓"
End If
XShade.CreateSurfacePart
If tk=-1 Then
tkk=360/bn/2
mm=mm/cos(3.14159265/180*tkk)
sm=sm/cos(3.14159265/180*tkk)
End If
XShade.StartPolygon true
XShade.AppendPoint 0,0,mk/2
XShade.AppendPoint 0,mm,mk/2
XShade.AppendPoint 0,mm,-mk/2
XShade.AppendPoint 0,0,-mk/2
XShade.FinishPolygon
If tk=-1 Then
XShade.MOveObjectRotate 0,w/2,0,0,0,-360/bn
py=XShade.Anchorpoint(0,1)
XShade.MOveObjectTranslate 0,-py,0
XShade.CopyObjectRotate 0,w/2-py,0,0,0,-360/bn
else
XShade.CopyObjectRotate 0,w/2,0,0,0,360/bn
End If
XShade.Repeat bn-2
XShade.Switch
XShade.LineObjectClosed = true
XShade.SelectBrother 1
XShade.LineObjectClosed = true
XShade.SelectBrother 1
XShade.LineObjectClosed = true
XShade.SelectBrother 1
XShade.LineObjectClosed = true
XShade.SelectParent 1
If tk= 0 Then XShade.Smooth
XShade.CreateSurfacePart
XShade.StartPolygon true
XShade.AppendPoint 0,-sm,sk/2
XShade.AppendPoint 0,0,sk/2
XShade.AppendPoint 0,0,-sk/2
XShade.AppendPoint 0,-sm,-sk/2
XShade.FinishPolygon
If tk=-1 Then
XShade.MOveObjectRotate 0,w/2,0,0,0,-360/bn
py=XShade.Anchorpoint(1,1)
XShade.MOveObjectTranslate 0,-py,0
XShade.CopyObjectRotate 0,w/2-py,0,0,0,-360/bn
else
XShade.CopyObjectRotate 0,w/2,0,0,0,360/bn
End If
XShade.Repeat bn-2
XShade.Switch
XShade.LineObjectClosed = true
XShade.SelectBrother 1
XShade.LineObjectClosed = true
XShade.SelectBrother 1
XShade.LineObjectClosed = true
XShade.SelectBrother 1
XShade.LineObjectClosed = true
XShade.SelectParent 1
If tk=0 Then XShade.Smooth
XShade.SelectSister 1
XShade.SelectChild 2
XShade.CopyObjectTranslate 0,0,0
XShade.BaseColor(0) = 0.000000
XShade.BaseColor(1) = 0.501961
XShade.BaseColor(2) = 0.752941
XShade.MoveObjectTranslate 0,0,-mk/2
XShade.PlaceParent 1
XShade.PlaceBrother 1
If tk=-1 Then
XShade.SelectParent 1
If bn=2*Round(bn/2,0) Then
XShade.SelectChild 1
XShade.SelectChild 1
py=XShade.Anchorpoint((bn-1),1)
XShade.SelectParent 2
XShade.MOveObjectTranslate 0,-py,0
End If
If bn<>2*Round(bn/2,0) Then
XShade.SelectChild 1
XShade.SelectChild 1
py=XShade.Anchorpoint(round(bn/2)-1,1)
XShade.SelectParent 2
XShade.MOveObjectTranslate 0,-py,0
XShade.MoveObjectScale 0, 0, 0, 1, -1, 1
End If
End If
If tk=-1 and tt=-1 Then
XShade.SelectChild 1
XShade.SelectChild 1
pv=0
For i=0 to bn-1
py=XShade.Anchorpoint(i,0)
If pv
XShade.SelectParent 2
kv=w/2/pv
XShade.MoveObjectScale 0, 0, 0, kv, kv, 1
XShade.SelectChild 1
XShade.SelectChild 2
fx=XShade.Center(0)
fy=XShade.Center(1)
fz=XShade.Center(2)
kv1=(kv*w/2-mm)/(kv*(w/2-mm))
XShade.MoveObjectScale fx, fy, fz, kv1, kv1, 1
XShade.SelectBrother 1
XShade.MoveObjectScale fx, fy, fz, kv1, kv1, 1
XShade.SelectParent 2
XShade.SelectChild 2
XShade.MoveObjectScale fx, fy, fz, kv1, kv1, 1
XShade.SelectParent 1
XShade.SelectChild 3
XShade.SelectChild 1
kv1=(kv*w/2+sm)/(kv*(w/2+sm))
XShade.MoveObjectScale fx, fy, fz, kv1, kv1, 1
XShade.SelectBrother 3
XShade.MoveObjectScale fx, fy, fz, kv1, kv1, 1
XShade.SelectParent 2
End If
XShade.AllowUpDate
End If
End If
XShade.EndDialog
2008年02月03日
忘れていた円形窓6
円形窓作成スクリプト
忘れていた円形窓5の赤字の部分でとりあえず色々なサイズの円形窓が作成出来るようになってきました、がスクリプトとしてまだ使い勝手が良くありませんのでダイアログボックスを表示して数値を変更できる様にします、
ダイアログボックスを表示させる記述は下の通りです、
XShade.BeginDialog(0)・・・ダイアログボックスを作る()内の数字は0の時はダイアログボックスを表示する時常に数値を初期化する、0以外時は前回の数値を持ち越します
XShade.AskDialog()・・・・・ダイアログボックスを表示させる
XShade.EndDialog・・・・ダイアログを終了させる、ダイアログを使用した場合は必ず記述する
以上の3行でセットです、がこれはダイアログボックスの枠縁と考えて下さい。
枠縁の中に下のようないろんなアイテムを詰め込んで初めて役に立ちます、
XShade.AppendFloatDialogItem " 数値入力"
XShade.AppendSelectionDialogItem "選択 /no1 / no2 / no3 "
XShade.AppendBoolDialogItem "チェック"
XShade.AppendIntDialogItem "整数入力"
XShade.Appendvec3DialogItem "ベクトル "
XShade.AppendrgbDialogItem "RGB "
XShade.AppendstringDialogItem "文字入力"
そしてアイテムの初期値を決めたり入力された数値を読み取るのが
XShade.FloatPropertyValue(0)=100
XShade.SelectionPropertyValue(1)=0
XShade.boolPropertyValue(2)=1
XShade.IntPropertyValue(3)=10
XShade.vec3PropertyValue(4,0)=100
XShade.vec3PropertyValue(4,1)=200
XShade.vec3PropertyValue(4,2)=300
XShade.rgbPropertyValue(5,0)=1
XShade.rgbPropertyValue(5,1)=2
XShade.rgbPropertyValue(5,2)=3
XShade.stringPropertyValue(6)=" 文字入力"
です、()内の数値は枠縁の中に置かれたアイテムの上からの順番をいれます、一番上のアイテムは0です、(4)はXYZ値で3個、(5)はRGB値で3個の入力粋があります、
以上を踏まえて今回の円形窓スクリプトのダイアログボックスを作成します、
XShade.BeginDialog(0)
XShade.AppendFloatDialogItem " 窓幅"
XShade.AppendFloatDialogItem " 窓枠の見付"
XShade.AppendFloatDialogItem " 外枠の見付"
XShade.AppendFloatDialogItem " 外枠の見込"
XShade.AppendFloatDialogItem " 形状の分割数"
XShade.AppendBoolDialogItem " 多角形窓"
XShade.FloatPropertyValue(0)=1000
XShade.FloatPropertyValue(1)=50
XShade.FloatPropertyValue(2)=50
XShade.FloatPropertyValue(3)=60
XShade.FloatPropertyValue(4)=16
XShade.boolPropertyValue(5)=0
kaisi=XShade.AskDialog()
If kaisi=-1 Then
'|
XShade.InhibitUpdate
'|
'プログラム
'|
XShade.AllowUpDate
'|
End If
XShade.EndDialog

左図のようなダイアログボックスが表示される筈です。
アイテムの5番目の多角形窓と言うのは円形窓にスムースをかけなければ多角形窓になるんじゃないかと気が付きまして入れております但し少し小細工が必要ですが。
上のダイアログ記述の中で
If kaisi=-1 Then
'|
'|
'プログラム
'|
'|
End If
の記述がありますがこれはIf文と言って上行If〜からEnd Ifまでがセットです If〜は もし kaisi=-1 ならば その下に書かれるプログラムを実行し kaisi=-1 で無いなら途中のプログラムを飛ばして一騎に End If まで進ませてしまう構文です、今回の場合はダイアログを表示した際に ok か キャンセル かを聞いてきますので ok を押せば kaisi=XShade.AskDialog() が -1 の値をkaisiに代入しキャンセルをおすとkaisi=XShade.AskDialog() がkaisiに0の値を代入する仕組みです、
ですからダイアログのokを押せばkaisiは-1となり If kaisi=-1 Then を成立させる事になりプログラムに進むことになります、
また XShade.InhibitUpdate XShade.AllowUpDate の記述はスクリプトの実行速度をあげる為の記述でして 2つでセットですプログラムの前後に配置します、但しこの記述で気をつけていただく事は XShade.InhibitUpdateが実行されて XShade.AllowUpDate が実行される前にプログラムが何かのエラーで止まってしまった場合画面が反応しなくなります
そうなった時はSHDEを再度立ち上げるか、スクリプトウインドウにXShade.AllowUpDate だけを記述し単体で実行させる必要がでてきます。
次に続く
忘れていた円形窓5の赤字の部分でとりあえず色々なサイズの円形窓が作成出来るようになってきました、がスクリプトとしてまだ使い勝手が良くありませんのでダイアログボックスを表示して数値を変更できる様にします、
ダイアログボックスを表示させる記述は下の通りです、
XShade.BeginDialog(0)・・・ダイアログボックスを作る()内の数字は0の時はダイアログボックスを表示する時常に数値を初期化する、0以外時は前回の数値を持ち越します
XShade.AskDialog()・・・・・ダイアログボックスを表示させる
XShade.EndDialog・・・・ダイアログを終了させる、ダイアログを使用した場合は必ず記述する
以上の3行でセットです、がこれはダイアログボックスの枠縁と考えて下さい。
枠縁の中に下のようないろんなアイテムを詰め込んで初めて役に立ちます、
XShade.AppendFloatDialogItem " 数値入力"
XShade.AppendSelectionDialogItem "選択 /no1 / no2 / no3 "
XShade.AppendBoolDialogItem "チェック"
XShade.AppendIntDialogItem "整数入力"
XShade.Appendvec3DialogItem "ベクトル "
XShade.AppendrgbDialogItem "RGB "
XShade.AppendstringDialogItem "文字入力"
そしてアイテムの初期値を決めたり入力された数値を読み取るのが
XShade.FloatPropertyValue(0)=100
XShade.SelectionPropertyValue(1)=0
XShade.boolPropertyValue(2)=1
XShade.IntPropertyValue(3)=10
XShade.vec3PropertyValue(4,0)=100
XShade.vec3PropertyValue(4,1)=200
XShade.vec3PropertyValue(4,2)=300
XShade.rgbPropertyValue(5,0)=1
XShade.rgbPropertyValue(5,1)=2
XShade.rgbPropertyValue(5,2)=3
XShade.stringPropertyValue(6)=" 文字入力"
です、()内の数値は枠縁の中に置かれたアイテムの上からの順番をいれます、一番上のアイテムは0です、(4)はXYZ値で3個、(5)はRGB値で3個の入力粋があります、
以上を踏まえて今回の円形窓スクリプトのダイアログボックスを作成します、
XShade.BeginDialog(0)
XShade.AppendFloatDialogItem " 窓幅"
XShade.AppendFloatDialogItem " 窓枠の見付"
XShade.AppendFloatDialogItem " 外枠の見付"
XShade.AppendFloatDialogItem " 外枠の見込"
XShade.AppendFloatDialogItem " 形状の分割数"
XShade.AppendBoolDialogItem " 多角形窓"
XShade.FloatPropertyValue(0)=1000
XShade.FloatPropertyValue(1)=50
XShade.FloatPropertyValue(2)=50
XShade.FloatPropertyValue(3)=60
XShade.FloatPropertyValue(4)=16
XShade.boolPropertyValue(5)=0
kaisi=XShade.AskDialog()
If kaisi=-1 Then
'|
XShade.InhibitUpdate
'|
'プログラム
'|
XShade.AllowUpDate
'|
End If
XShade.EndDialog

左図のようなダイアログボックスが表示される筈です。
アイテムの5番目の多角形窓と言うのは円形窓にスムースをかけなければ多角形窓になるんじゃないかと気が付きまして入れております但し少し小細工が必要ですが。
上のダイアログ記述の中で
If kaisi=-1 Then
'|
'|
'プログラム
'|
'|
End If
の記述がありますがこれはIf文と言って上行If〜からEnd Ifまでがセットです If〜は もし kaisi=-1 ならば その下に書かれるプログラムを実行し kaisi=-1 で無いなら途中のプログラムを飛ばして一騎に End If まで進ませてしまう構文です、今回の場合はダイアログを表示した際に ok か キャンセル かを聞いてきますので ok を押せば kaisi=XShade.AskDialog() が -1 の値をkaisiに代入しキャンセルをおすとkaisi=XShade.AskDialog() がkaisiに0の値を代入する仕組みです、
ですからダイアログのokを押せばkaisiは-1となり If kaisi=-1 Then を成立させる事になりプログラムに進むことになります、
また XShade.InhibitUpdate XShade.AllowUpDate の記述はスクリプトの実行速度をあげる為の記述でして 2つでセットですプログラムの前後に配置します、但しこの記述で気をつけていただく事は XShade.InhibitUpdateが実行されて XShade.AllowUpDate が実行される前にプログラムが何かのエラーで止まってしまった場合画面が反応しなくなります
そうなった時はSHDEを再度立ち上げるか、スクリプトウインドウにXShade.AllowUpDate だけを記述し単体で実行させる必要がでてきます。
次に続く





