📄 frmdrawm.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 + -