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

わんくま同盟

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

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

■103830 / 24階層)  Visual Basicで簡易CADを作成
□投稿者/ shiro (14回)-(2025/08/06(Wed) 19:13:25)
No103828 (魔界の仮面弁士 さん) に返信
> ■No103825 (魔界の仮面弁士) に追記

魔界の仮面弁士 様

早速ですが、下記のとおり作成してみました。

それぞれのクラスに、

    Public Property IsSelected As Boolean

を設定しました。

右クリックで

   IsSelected = True

としてみました。

Button5で一気に削除することにしました。

また、柱は楕円で、壁は太さを3で被らないようにして見やすくしました。

コンパイルは成功するのですが、実行すると綺麗に順番に削除されませんでした。
柱や壁が黄色で反転されて削除されるのは確認できましたが。

           記

    Private selectedPillars As New List(Of Pillar)
    Private selectedWalls As New List(Of Wall)



   Private Sub PictureBox1_MouseDown(
          ByVal sender As System.Object,
          ByVal e As System.Windows.Forms.MouseEventArgs) _
          Handles PictureBox1.MouseDown


      If e.Button.HasFlag(MouseButtons.Right) Then

            For Each pillar In pillarList
                pillar.IsSelected = True
            Next

            For Each wall In wallList
                wall.IsSelected = True
            Next

        End If

       '削除する柱や壁をクリックすることで選択できるようにする

        For Each pillar In pillarList

                If pillar.IsSelected Then
                    If Math.Abs(e.X - pillar.X) < 10 AndAlso Math.Abs(e.Y - pillar.Y) < 10 Then
                        If Not selectedPillars.Contains(pillar) Then
                            selectedPillars.Add(pillar)
                        End If
                    End If
                End If

            Next

        For Each wall In wallList

                If wall.IsSelected Then

                    If Math.Abs(e.X - wall.startPoint.X) < 10 AndAlso Math.Abs(e.Y - wall.endPoint.Y) < 10 Then
                        If Not selectedWalls.Contains(wall) Then
                            selectedWalls.Add(wall)
                        End If
                    End If

                End If

            Next



    Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
  
        For Each pillar In pillarList

                If pillar.IsSelected Then

                    If selectedPillars.Contains(pillar) Then
                         e.Graphics.FillEllipse(Brushes.Yellow, pillar.X - rectangleSize \ 2, pillar.Y - rectangleSize \ 2, rectangleSize, rectangleSize)
                    Else
                        e.Graphics.FillRectangle(Brushes.Red, pillar.X - rectangleSize \ 2, pillar.Y - rectangleSize \ 2, rectangleSize, rectangleSize)
                    End If

                End If

            Next

        For Each wall In wallList

                If wall.IsSelected Then

                If selectedWalls.Contains(wall) Then
 
                    e.Graphics.DrawLine(pen9, wall.startPoint, wall.endPoint)
                Else
 
                    e.Graphics.DrawLine(pen7, wall.startPoint, wall.endPoint)
                End If

                End If

        Next


   Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

        '3. 削除ボタンを追加する

        '選択された柱や壁を削除する操作を追加。

         For Each pillar In selectedPillars

                If pillar.IsSelected Then

                    pillarList.Remove(pillar)

                End If

            Next
            selectedPillars.Clear()

        For Each wall In selectedWalls

                If wall.IsSelected Then

                    wallList.Remove(wall)

                End If

            Next
            selectedWalls.Clear()


        PictureBox1.Invalidate() ' 再描画

    End Sub


Public Class Pillar
    Private Shared LastIndex As Integer = 0
    Public ReadOnly Property Index As Integer
    Public Property X As Integer
    Public Property Y As Integer

    Public Property IsSelected As Boolean

    Public Sub New(location As Point)
        LastIndex += 1
        Me.Index = LastIndex
        Me.X = location.X
        Me.Y = location.Y

        'Me.IsSelected = False

    End Sub
End Class




'=== 案1 ===
Public Class Wall
    Private Shared LastIndex As Integer = 0
    Private Const DefaultStiffnessValue As Double = 2.5

    Public ReadOnly Property Index As Integer
    Public Property startPoint As Point
    Public Property endPoint As Point
    Public Property Stiffness As Double

    Public Property IsSelected As Boolean

    Public Sub New(startPoint As Point, endPoint As Point)
        Me.New(startPoint, endPoint, DefaultStiffnessValue)
    End Sub

    Public Sub New(startPoint As Point, endPoint As Point, stiffness As Double)
        LastIndex += 1
        Me.Index = LastIndex
        Me.StartPoint = startPoint
        Me.EndPoint = endPoint
        Me.Stiffness = stiffness

        'Me.IsSelected = IsSelected

    End Sub
End Class

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[23]: Visual Basicで簡易CADを作成 /魔界の仮面弁士 →Re[25]: Visual Basicで簡易CADを作成 /魔界の仮面弁士
→Re[25]: Visual Basicで簡易CADを作成 /魔界の仮面弁士
 
上記関連ツリー

Visual Basicで簡易CADを作成 / shiro (25/07/25(Fri) 20:50) #103783
Re[1]: Visual Basicで簡易CADを作成 / KOZ (25/07/27(Sun) 14:35) #103784
  └ Re[2]: Visual Basicで簡易CADを作成 / shiro (25/07/28(Mon) 20:17) #103785
    ├ Re[3]: Visual Basicで簡易CADを作成 / kiku (25/07/29(Tue) 08:49) #103786
    └ Re[3]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/07/29(Tue) 14:06) #103791
      └ Re[4]: Visual Basicで簡易CADを作成 / shiro (25/07/30(Wed) 12:22) #103792
        └ Re[5]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/07/30(Wed) 15:46) #103794
          └ Re[6]: Visual Basicで簡易CADを作成 / shiro (25/07/31(Thu) 07:34) #103795
            └ Re[7]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/07/31(Thu) 10:48) #103796
              └ Re[8]: Visual Basicで簡易CADを作成 / shiro (25/08/01(Fri) 06:15) #103797
                ├ Re[9]: Visual Basicで簡易CADを作成 / kiku (25/08/01(Fri) 08:47) #103798
                │└ Re[10]: Visual Basicで簡易CADを作成 / shiro (25/08/02(Sat) 03:40) #103803
                └ Re[9]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/01(Fri) 10:46) #103800
                  ├ Re[10]: Visual Basicで簡易CADを作成 / kiku (25/08/01(Fri) 10:50) #103801
                  └ Re[10]: Visual Basicで簡易CADを作成 / shiro (25/08/02(Sat) 03:38) #103802
                    └ Re[11]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/03(Sun) 11:50) #103805
                      └ Re[12]: Visual Basicで簡易CADを作成 / shiro (25/08/04(Mon) 05:10) #103806
                        └ Re[13]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/04(Mon) 11:36) #103808
                          └ Re[14]: Visual Basicで簡易CADを作成 / shiro (25/08/04(Mon) 18:59) #103811
                            └ Re[15]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/04(Mon) 19:43) #103812
                              └ Re[16]: Visual Basicで簡易CADを作成 / shiro (25/08/05(Tue) 12:42) #103814
                                └ Re[17]: Visual Basicで簡易CADを作成 / shiro (25/08/05(Tue) 12:44) #103815
                                  └ Re[18]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/05(Tue) 18:02) #103817
                                    └ Re[19]: Visual Basicで簡易CADを作成 / shiro (25/08/05(Tue) 19:28) #103819
                                      └ Re[20]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/05(Tue) 20:39) #103821
                                        └ Re[21]: Visual Basicで簡易CADを作成 / shiro (25/08/06(Wed) 12:22) #103822
                                          └ Re[22]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 14:42) #103825
                                            ├ Re[23]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 17:53) #103828
                                            │└ Visual Basicで簡易CADを作成 / shiro (25/08/06(Wed) 19:13) #103830 ←Now
                                            │  ├ Re[25]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 19:44) #103832
                                            │  │└ Re[26]: Visual Basicで簡易CADを作成 / shiro (25/08/07(Thu) 07:06) #103834
                                            │  │  └ Re[27]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/07(Thu) 12:18) #103835
                                            │  │    └ Re[28]: Visual Basicで簡易CADを作成 / shiro (25/08/07(Thu) 19:14) #103836
                                            │  │      └ Re[29]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/07(Thu) 20:25) #103837
                                            │  │        ├ Re[30]: Visual Basicで簡易CADを作成 / shiro (25/08/08(Fri) 03:34) #103838
                                            │  │        └ Re[30]: Visual Basicで簡易CADを作成 / shiro (25/08/08(Fri) 07:29) #103839
                                            │  │          └ Re[31]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/08(Fri) 09:40) #103841
                                            │  │            └ Re[32]: Visual Basicで簡易CADを作成 / shiro (25/08/09(Sat) 05:05) #103842
                                            │  │              └ Re[33]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/09(Sat) 14:24) #103843
                                            │  │                └ Re[34]: Visual Basicで簡易CADを作成 / shiro (25/08/09(Sat) 19:18) #103844
                                            │  └ Re[25]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 19:53) #103833
                                            └ Re[23]: Visual Basicで簡易CADを作成 / shiro (25/08/18(Mon) 12:41) #103847
                                              └ Re[24]: Visual Basicで簡易CADを作成 / kiku (25/08/20(Wed) 15:09) #103848
                                                └ Re[25]: Visual Basicで簡易CADを作成 / shiro (25/08/20(Wed) 18:35) #103849
                                                  └ Re[26]: Visual Basicで簡易CADを作成 / kiku (25/08/21(Thu) 09:03) #103850
                                                    └ Re[27]: Visual Basicで簡易CADを作成 / shiro (25/08/21(Thu) 22:01) #103851
                                                      └ Re[28]: Visual Basicで簡易CADを作成 / kiku (25/08/22(Fri) 08:45) #103852
                                                        └ Re[29]: Visual Basicで簡易CADを作成 / shiro (25/08/22(Fri) 13:20) #103853
                                                          └ Re[30]: Visual Basicで簡易CADを作成 / kiku (25/08/22(Fri) 16:45) #103854
                                                            └ Re[31]: Visual Basicで簡易CADを作成 / shiro (25/08/22(Fri) 20:33) #103855
                                                              └ Re[32]: Visual Basicで簡易CADを作成 / kiku (25/08/25(Mon) 08:42) #103857

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信