godot

L101 計算ツール1


godot4.2で計算ツールを作成してみました。(このページで動いているのは4.3)

godotモデル

キャプチャー

実行ツール

別タブ表示

beam bend

git

GitHub - WOCae/L101BeamBend
Contribute to WOCae/L101BeamBend development by creating an account on GitHub.

L101BeamBend-main.zip

同様のものは以下になります。

K052 片持ち梁 曲げについて 計算
オーダーチェックに使用(参考:A110 例題A 片持ち梁の解析)軸の曲げについて計算入力寸法部位長さ(mm)Lbh入力荷重荷重入力値(N)P物性値項目入力値(N/mm2)ヤング率 E半角数字で入力結果項目結果値変位(mm)応力(N/mm2)

作成

プロジェクト設定

このモデルでは、画面サイズの設定をします。
メニュー>プロジェクト>プロジェクトの設定

600 x 800で設定

シーン追加

構成するノードを追加します。
ラベルと入力用のラインが大部分です。模式図用のラインも追加しています。

Label

タイトル、項目や部位名についてLabelで表記をつけていきます。
テキストをインスペクター(右ペイン)で入力しますが、
結果表示とする場合は、スクリプトから入力表示します。(dx、σについて)
Labelは誤入力して上書きされませんので、結果表示として使用します。

LineEdit

値などの入力用に使用します。こちらも必要な数だけ設置します。

ColorRect

背景の色を変えるために使用します。デザインの話だけになります。

Line2D

線分の描画を行います。ここでは、梁の正面図と側面図を描画しています。
長さと、断面形状の模式的な表示を行います。
入力値にしたがって、描画が変化するようにコードを付けています。

Button

ボタンを押すと計算を実行するようにします。
既定だと左クリックになります。

ボタンを押した場合、シグナルする部分を作成します。
mainにスクリプトを設定して、Buttonのノードからpressのシグナルを設定します。

TextEdit

入力や出力の内容を表示するために、複数行のテキスト欄を設けます。

整列とコード

見やすいように並べて、コードを追加します。

main.gd

extends Control

#入力用のライン設定
var line_edit_L: LineEdit
var line_edit_b: LineEdit
var line_edit_h: LineEdit
var line_edit_P: LineEdit
var line_edit_E: LineEdit
#var line_edit_dx: LineEdit
#var line_edit_Stress: LineEdit

#実行用ボタン
var Button_edit: Button

#出力用のテキスト欄
var Text_edit: TextEdit

func _ready():
	#シーンノードセット
	line_edit_L = $LineEdit_L
	line_edit_b = $LineEdit_b
	line_edit_h = $LineEdit_h
	line_edit_P = $LineEdit_P
	line_edit_E = $LineEdit_E	
	#line_edit_dx = $LineEdit_dx
	#line_edit_Stress = $LineEdit_Stress	
	#line_edit_dx.set_editable(false) #グレーアウトして触れなくできる
	Text_edit = $TextEdit
	
	Button_edit = $Button

#-----------------------------------
#変数
var L:float
var b:float
var h:float
var P:float
var E:float

var I:float
var y:float
var Z:float
var M:float

var dx:float
var Stress:float

#calc実行
func _on_button_pressed():
	#入力値
	L = float(line_edit_L.text)
	b = float(line_edit_b.text)
	h = float(line_edit_h.text)
	P = float(line_edit_P.text)
	E = float(line_edit_E.text)
	
	#計算
	I = b*h**3/12
	dx = P*L**3/3/E/I

	y = h/2
	Z = I/y
	M = P*L
	Stress = M/Z

	#結果表示
	$Label_dx_output.text = str("%8.3f" % dx).replace(" ","")
	$Label_Stress_output.text = str("%8.2f" % Stress).replace(" ","")

	Text_edit.text = (
	"I:"+
	str("%8.3f" % I)
	+"\n"+
	"Z:"+
	str("%8.2f" % Z)
	+"\n"+
	"dx:"+
	str("%8.3f" % dx)
	+"\n"+
	"Stress:"+
	str("%8.3f" % Stress)
	)
	
	#上部形状について
	#--------ラインの位置変更------------------------------------
	var base_L:float = 100
	var base_b:float = 10
	var base_h:float = 10
	var coefficient_L:float
	var coefficient_b:float
	var coefficient_h:float
	
	coefficient_L = L/base_L
	coefficient_b = b/base_b
	coefficient_h = h/base_h
	
	#var my_array = [1, 2, 3, 4, 5]
	#var max_value = my_array[0]


	var coefArry = [coefficient_L,coefficient_b,coefficient_h]
	var maxCoef:float
	for i in range(0, coefArry.size()):
		if coefArry[i] > maxCoef:
			maxCoef = coefArry[i]
	#print(maxCoef)

	var minCoef:float = 10000
	for i in range(0, coefArry.size()):
		if coefArry[i] < minCoef:
			minCoef = coefArry[i]
	#print(minCoef)
	var coef:float
	coef = maxCoef/1
	#print(coef)
	#正面
	$Line2D.set_point_position(0, Vector2(0, 0))		
	$Line2D.set_point_position(1, Vector2(L, 0))
	$Line2D.set_point_position(2, Vector2(L, h))
	$Line2D.set_point_position(3, Vector2(0, h))
	#断面形状
	$Line2D2.set_point_position(0, Vector2(0, 0))	
	$Line2D2.set_point_position(1, Vector2(b, 0))
	$Line2D2.set_point_position(2, Vector2(b, h))
	$Line2D2.set_point_position(3, Vector2(0, h))
	
	#描画スケール
	$Line2D.scale = Vector2(3/coef,3/coef)
	$Line2D2.scale = Vector2(3/coef,3/coef)	
	
	$Line2D.width = 1*coef
	$Line2D2.width = 1*coef

	#ラベル
	var rightVertex = $Line2D.get_point_position(1).x * 3/coef
	$Label_L2.position.x = rightVertex/2 + $Line2D.position.x
	$Label_P2.position.x = rightVertex + $Line2D.position.x

注記

例では、レトロゲーム調のフォントを使用しています。

Copyright 2012 The Press Start 2P Project Authors (cody@zone38.net), with Reserved Font Name "Press Start 2P".

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:

SIL Open Font License
The website of the SIL Open Font License
----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 -----------------------------------------------------------

3D表示

模式形状を3Dにしてみました。

キャプチャー

実行ツール

L101BeamBend_3d

git

GitHub - WOCae/L101BeamBend_3d
Contribute to WOCae/L101BeamBend_3d development by creating an account on GitHub.

シーン構成

前出の2D部分を取り込む形で、3D部分をメインに構成しています。

WorldEnvironment:3D空間の背景
CSGBox3D:操作するBOX形状
Camera3D_control:カメラ(操作)
DirectionalLight3D:光源
main:前出の2D部分
TabContainer:タブウィンドウの部分

WorldEnvironment

CSGBox3D

Camera & Light

カメラのコントロールとして、アセットから

2D部分

前出の2D部分を作業中のモデルに取り込みます。
取り込むのは、フォルダから必要なファイルをドラッグ&ドロップします。(またはフォルダにコピー)

タブ部品

表示に関するいくつかの設定をタブにまとめています。

前半はサイズや配置を整えています。

コメント