C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■103802 / )  Re[10]: Visual Basicで簡易CADを作成
□投稿者/ shiro (6回)-(2025/08/02(Sat) 03:38:00)
No103800 (魔界の仮面弁士 さん) に返信
> 2025/08/01(Fri) 14:32:02 編集(投稿者)

魔界の仮面弁士 様


> もしも pointList を「配置済みのすべての壁情報」に変更したいのであれば、現在の MouseUp イベント内の
>  pointList.Clear()
> という行をコメントアウトしてください。そうすれば、過去の壁情報がすべて累積保持されます。
>
> その場合、壁を 3 つ描いたとしたら、
>  pointList(0) は、壁1の開始点
>  pointList(1) は、壁1の終了点
>  pointList(2) は、壁2の開始点
>  pointList(3) は、壁2の終了点
>  pointList(4) は、壁3の開始点
>  pointList(5) は、壁3の終了点
> のように管理されることになります。
>
> すなわち、Paint イベントでは
>  If isDragging Then
>   e.Graphics.DrawLine(Pens.Blue, startPoint, endPoint)
>  ElseIf pointList.Count = 2 Then
>   e.Graphics.DrawLine(Pen7, pointList(0), pointList(1))
>  End If
> ではなく、
>  For n = 0 To pointList.Count - 1 Step 2
>   e.Graphics.DrawLine(Pen7, pointList(n + 0), pointList(n + 1))
>  Next
>  If isDragging Then
>   e.Graphics.DrawLine(Pens.Blue, startPoint, endPoint)
>  End If
> にすれば良い、ということになります。
> これにより、全ての壁が描かれるようになることでしょう。
>
>
> 正しく動作することを確認できたら、コメントアウトしていた pointList.Clear() していた行を復活させてみてください。
> 「最新の壁だけが描かれ、過去の壁は消えてしまう」状態に戻ってしまうことを体験できると思います。

柱と壁が全て描けました。有難うございます。
かなり手こずったので嬉しかったです。


> そして先に述べた通り、pointList As List(Of Point) が保持しているのは
> あくまで座標情報の集合にすぎません。
>
> このままでは、蓄えていった座標が「壁」なのか「柱」なのかを区別できません。

柱は既に、

Private snappedRectangles As New List(Of Rectangle)

としてリストに分けていました。こちらは解決済みでした。

壁の位置情報と、柱の位置情報を、それぞれ別々の List(Of Point) 変数で分けて管理しています。
クラスという概念もまだ分からないことが多く、とりあえず計算が動くことをするための簡易ソフトです。

壁にはとりあえず、剛性5kN/mと仮定し、座標から長さを計算し、乗じることでX,Y方向の耐力を算出するものです。
柱は壁が取り付く場所を判別するために、座標情報だけを与えています。

図形の削除はPolygonではないので、紹介して頂いたような方法では出来ないのでしょうか。

また、計算結果はCSVやtxt形式で出力させますが、簡易CADで作成した情報を、
ファイルで保存や読み込みをして修正・追加入力をする機能も付与したいのですが、
この場合の保存方法は一般的にどうするのが妥当でしょうか。


返信 編集キー/


管理者用

- Child Tree -