| ■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で作成した情報を、 ファイルで保存や読み込みをして修正・追加入力をする機能も付与したいのですが、 この場合の保存方法は一般的にどうするのが妥当でしょうか。
|
|