| ■103811 / ) |
Re[14]: Visual Basicで簡易CADを作成 |
□投稿者/ shiro (9回)-(2025/08/04(Mon) 18:59:38)
|
■No103808 (魔界の仮面弁士 さん) に返信 > ■No103806 (shiro さん) に返信
魔界の仮面弁士 様
> 幾つか疑問が。 > > a)柱を配置しないと、壁を描けない仕様でしょうか? > あるいは先に壁を描いた後、両端に柱が建つという手順もあるのでしょうか? > > b)もしも壁の両端が柱と接触していなければならないという条件なのだとしたら > 柱を撤去した場合、それに付随する壁も一緒に削除されるべきということになりますか? > > c)一本の柱に複数の壁が接触している可能性がありますか? > 一つの柱交点から複数の壁が伸びるイメージで(「╋」「┗」「┫」「*」など)
壁は必ず柱間に配置するルールとなっています。 順番はどちらが先でも構いませんが、このようなルールのため、 先に柱を配置し、その間をラバーバンドのように壁を配置しました。
計算したい項目は3つあります。
1つ目は柱情報は関係なく、X,Y方向の壁の長さを座標から計算し、 その壁の剛性を乗じて方向別に耐力を出します。
2つ目は、1つ目の計算を上下左右の1/4の面積に存在する壁だけで計算します。 この際に柱の座標によって平面図の輪郭から1/4の面積を計算することになります。
3つ目は、柱の両側に接続する、壁の左右の剛性の差から引張力を計算します。 その際、2階建ての場合は、その柱の上の柱も同様に計算します。 X,Y方向別なので、最大でも両側に壁がある2つの剛性の差となります。
取り合えず、1つ目の簡単な計算を完成することを目標にしています。 間違って配置した柱・壁の削除、座標情報等のCSVファイルの入出力が成功すれば、 計算自体は方向別に集計するだけですのでうまくいくと思います。
まずは1階(平屋)だけをイメージし、PictureBoxも1つだけで1,2階を選択できません。
また、俄か仕込みですが、CLASSを試してみました。 コンパイルは成功したのですが、柱を選択しグリッドをクリックしても全く配置されなくなりました。 初心者にはクラスの使用は難しいかもしれません。
以下、変更した部分です。
Private Sub PictureBox1_MouseDown( ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles PictureBox1.MouseDown
Dim pillarList As New List(Of Pillar)
Dim newPillar As New Pillar With { .Index = pillarList.Count + 1, .X = SnapToGrid(e.Location).X, .Y = SnapToGrid(e.Location).Y }
pillarList.Add(newPillar)
PictureBox1.Invalidate() ' 再描画
Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint Dim pillarList As New List(Of Pillar)
For Each pillar In pillarList g.FillRectangle(Brushes.Red, pillar.X - rectangleSize \ 2, pillar.Y - rectangleSize \ 2, rectangleSize, rectangleSize) g.DrawRectangle(Pens.Black, pillar.X - rectangleSize \ 2, pillar.Y - rectangleSize \ 2, rectangleSize, rectangleSize)
Next
Public Class Pillar
Public Property Index As Integer ' 柱のインデックス Public Property X As Integer ' X座標 Public Property Y As Integer ' Y座標 End Class
|
|