⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmdrawm.frm

📁 较好的工程计算程序功能较强 计算桥梁的跨度等
💻 FRM
字号:
VERSION 5.00
Begin VB.Form frmDrawM 
   Caption         =   "弯矩图"
   ClientHeight    =   5940
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   9495
   LinkTopic       =   "Form2"
   ScaleHeight     =   5940
   ScaleWidth      =   9495
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton btnReturn 
      Caption         =   "返回"
      Height          =   435
      Left            =   8040
      TabIndex        =   0
      Top             =   5160
      Width           =   915
   End
   Begin VB.Label Label1 
      Caption         =   "弯矩图 (kNm,上部受拉为正)"
      Height          =   255
      Left            =   360
      TabIndex        =   1
      Top             =   240
      Width           =   3255
   End
End
Attribute VB_Name = "frmDrawM"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public lStep As Long

Public Sub DrawM()

   Dim dScaleX As Double '每米长度在屏幕上的大小
   Dim SigmaL As Double '梁总长度
   Dim CurrentL As Double '画笔在梁上的位置
   Dim Left As Long, Right As Long
   Dim Y As Long
   Dim FontWidth As Long
   Dim deltaL As Double
   Dim Ymax As Long
   Dim Mmax As Double
   Dim dScaleY As Double
   Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
   
   Ymax = 2000
   lStep = 100
   FontWidth = 100
   Left = 1000
   Right = frmDrawM.ScaleWidth - 1000
   Y = frmDrawM.ScaleHeight / 2 - 200
   SigmaL = 0
   For i = 1 To N
     SigmaL = SigmaL + L(i)
   Next
   dScaleX = (Right - Left) / SigmaL
   deltaL = lStep / dScaleX
   
   Mmax = 0
   For i = 1 To N + 1
     If Abs(m(i)) > Mmax Then Mmax = m(i)
   Next
   For i = 1 To N
     Dim M0 As Double
     Select Case Fc(i)
     Case 0
       M0 = 0
     Case 1
       M0 = (m(i) + m(i + 1)) / 2 - q(i) * PosA(i) ^ 2 * L(i) ^ 2 / 8
     Case 2
       M0 = (m(i) + m(i + 1)) / 2 - q(i) * L(i) * (1 - PosA(i)) * PosA(i)
     End Select
     If M0 > Mmax Then Mmax = M0
     Next
     If Mmax = 0 Then
      dScaleY = Ymax
     Else
      dScaleY = Ymax / Mmax
     End If
   frmDrawM.Line (Left, Y)-(Right, Y + 15), RGB(0, 0, 0), BF

   
   CurrentL = 0
   
   
   CurrentL = 0
 
   For i = 1 To N
     
     strm = Format(m(i), "#####0.00000") + "kNm"
     If m(i) > 0 Then
          frmDrawM.CurrentY = Y - m(i) * dScaleY - 180
     Else
          frmDrawM.CurrentY = Y - m(i) * dScaleY + 30
     End If
          frmDrawM.CurrentX = Left + CurrentL * dScaleX - FontWidth * Len(strm) / 2
     Print strm
     CurrentL = CurrentL + L(i)
     
     Select Case Fc(i)
     Case 0
     
       frmDrawM.Line (Left + (CurrentL - L(i)) * dScaleX, Y - m(i) * dScaleY)-(Left + CurrentL * dScaleX, Y - m(i + 1) * dScaleY), RGB(50, 50, 255)
       For j = 0 To L(i) Step deltaL
          frmDrawM.Line (Left + (CurrentL - L(i) + j) * dScaleX, Y - (m(i) + j * (m(i + 1) - m(i)) / L(i)) * dScaleY)-(Left + (CurrentL - L(i) + j) * dScaleX, Y), RGB(50, 50, 255)
       Next
     Case 1

       mMiddle = m(i) + PosA(i) * (m(i + 1) - m(i)) - q(i) * PosA(i) ^ 2 * (1 - PosA(i)) * L(i) ^ 2 / 2
       M0 = (m(i) + mMiddle) / 2 - q(i) * PosA(i) ^ 2 * L(i) ^ 2 / 8
       strm = Format(M0, "#####0.00000") + "kNm"
       frmDrawM.CurrentY = Y - M0 * dScaleY + 300
       frmDrawM.CurrentX = Left + (CurrentL - L(i) + PosA(i) * L(i) / 2) * dScaleX - FontWidth * Len(strm) / 2
       Print strm
       X2 = Left + (CurrentL - L(i)) * dScaleX
       Y2 = Y - m(i) * dScaleY
       For j = 0 To PosA(i) * L(i) Step deltaL
         X1 = X2: Y1 = Y2
         X2 = Left + (CurrentL - L(i) + j) * dScaleX
         Dim mj As Double
         mj = m(i) + (m(i + 1) - m(i)) * j / L(i) / PosA(i) + q(i) * ((PosA(i) * L(i) / 2 - j) ^ 2 - PosA(i) ^ 2 * L(i) ^ 2 / 4) / 2
         Y2 = Y - mj * dScaleY
         frmDrawM.Line (X1, Y1)-(X2, Y2), RGB(50, 50, 255)
         frmDrawM.Line (X2, Y2)-(X2, Y), RGB(50, 50, 255)
       Next
         X1 = X2: Y1 = Y2
         X2 = Left + (CurrentL - L(i) + PosA(i) * L(i)) * dScaleX
         Y2 = Y - mMiddle * dScaleY
         frmDrawM.Line (X1, Y1)-(X2, Y2), RGB(50, 50, 255)
       If PosA(i) < 1 Then
       frmDrawM.Line (Left + CurrentL * dScaleX, Y - m(i + 1) * dScaleY)-(Left + (CurrentL - L(i) + PosA(i)) * dScaleX, Y - mMiddle * dScaleY), RGB(50, 50, 255)
       For j = PosA(i) * L(i) To L(i) Step deltaL
           frmDrawM.Line (Left + (CurrentL - L(i) + j) * dScaleX, Y - (mMiddle + (j - PosA(i) * L(i)) * (m(i + 1) - mMiddle) / (L(i) * (1 - PosA(i)))) * dScaleY)-(Left + (CurrentL - L(i) + j) * dScaleX, Y), RGB(50, 50, 255)
       Next
       End If
     Case 2
       mMiddle = m(i) + (m(i + 1) - m(i)) * PosA(i) - q(i) * L(i) * PosA(i) * (1 - PosA(i))
       strm = Format(mMiddle, "#####0.00000") + "kNm"
       frmDrawM.CurrentY = Y - mMiddle * dScaleY + 300
       frmDrawM.CurrentX = Left + (CurrentL - L(i) + PosA(i) * L(i)) * dScaleX - FontWidth * Len(strm) / 2
       Print strm
       frmDrawM.Line (Left + (CurrentL - L(i)) * dScaleX, Y - m(i) * dScaleY)-(Left + (CurrentL - L(i) + PosA(i) * L(i)) * dScaleX, Y - mMiddle * dScaleY), RGB(50, 50, 255)
       For j = 0 To PosA(i) * L(i) Step deltaL
         frmDrawM.Line (Left + (CurrentL - L(i) + j) * dScaleX, Y - (m(i) + j * (mMiddle - m(i)) / (L(i) * PosA(i))) * dScaleY)-(Left + (CurrentL - L(i) + j) * dScaleX, Y), RGB(50, 50, 255)
       Next
       
       If PosA(i) < 1 Then
       frmDrawM.Line (Left + CurrentL * dScaleX, Y - m(i + 1) * dScaleY)-(Left + (CurrentL - L(i) + L(i) * PosA(i)) * dScaleX, Y - mMiddle * dScaleY), RGB(50, 50, 255)
       For j = PosA(i) * L(i) To L(i) Step deltaL
         frmDrawM.Line (Left + (CurrentL - L(i) + j) * dScaleX, Y - (mMiddle + (j - PosA(i) * L(i)) * (m(i + 1) - mMiddle) / (L(i) * (1 - PosA(i)))) * dScaleY)-(Left + (CurrentL - L(i) + j) * dScaleX, Y), RGB(50, 50, 255)
       Next
       End If
 

   End Select
 Next

     strm = Format(m(N + 1), "#####0.00000") + "kNm"
     If m(N + 1) > 0 Then
          frmDrawM.CurrentY = Y - m(N + 1) * dScaleY - 180
     Else
          frmDrawM.CurrentY = Y - m(N + 1) * dScaleY + 30
     End If
          frmDrawM.CurrentX = Right - FontWidth * Len(strm) / 2
     Print strm
     frmDrawM.Line (Right, Y)-(Right, Y - m(N + 1) * dScaleY), RGB(50, 50, 255)
End Sub

Private Sub btnReturn_Click()
   Unload Me
   frmCompute.Show
   
End Sub

Private Sub Form_Paint()
 Call frmDrawM.Cls
 Call DrawM
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -