📄 form1.vb
字号:
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(736, 299)
Me.Controls.Add(Me.panel1)
Me.Menu = Me.MainMenu1
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub btnLoadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
If Not (CADImage.Equals(IntPtr.Zero)) Then
CloseCAD(CADImage)
CADImage = IntPtr.Zero
End If
dlgOpenDXFFile.ShowDialog()
CADImage = CreateCAD(panel1.Handle, dlgOpenDXFFile.FileName)
If Not (CADImage.Equals(IntPtr.Zero)) Then
panel1.Visible = True
panel1.Invalidate()
Me.MainMenu1.MenuItems(0).MenuItems(1).Enabled = True
Me.MainMenu1.MenuItems(0).MenuItems(2).Enabled = True
Me.MainMenu1.MenuItems(1).MenuItems(0).Enabled = True
Me.MainMenu1.MenuItems(2).MenuItems(0).Enabled = True
Me.MainMenu1.MenuItems(2).MenuItems(1).Enabled = True
Me.MainMenu1.MenuItems(2).MenuItems(2).Enabled = True
Me.MainMenu1.MenuItems(2).MenuItems(3).Enabled = True
Me.MainMenu1.MenuItems(2).MenuItems(4).Enabled = True
Me.MainMenu1.MenuItems(2).MenuItems(5).Enabled = True
End If
'Layers
Dim Cnt As Integer = CADLayerCount(CADImage)
Dim I As Integer
Dim Layer As Integer
Dim EData As Data = New Data
lForm.CheckedListBox1.Items.Clear()
lForm.layers.Clear()
For I = 0 To Cnt - 1
Layer = CADLayer(CADImage, I, EData)
lForm.layers.Add(Layer)
lForm.CheckedListBox1.Items.Add(EData.Text, True)
Next I
'layouts
Dim vName As String = " "
'Form4.Combo1.Clear()
Cnt = CADLayoutsCount(CADImage)
For I = 0 To Cnt - 1
Dim t1 = CADLayoutName(CADImage, I, vName, Len(vName))
'Form4.Combo1.AddItem(vName)
Next I
'Form4.Combo1.ListIndex = DefaultLayoutIndex(CADImage)
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
If Not (CADImage.Equals(IntPtr.Zero)) Then
CloseCAD(CADImage)
CADImage = IntPtr.Zero
End If
End Sub
Private Sub panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles panel1.Paint
Dim R As Rect
Dim AbsWidth As Single
Dim AbsHeight As Single
Dim K As Double
If Not (CADImage.Equals(IntPtr.Zero)) Then
GetBoxCAD(CADImage, AbsWidth, AbsHeight)
If AbsHeight <> -1 Then
GetClientRect(panel1, R)
If AbsWidth = 0 Then
K = 1
Else
K = AbsHeight / AbsWidth
End If
R.Bottom = (R.Top + (R.Right - R.Left) * K)
R.Left = (R.Left * FScale / 100) + Offset.X
R.Right = (R.Right * FScale / 100) + Offset.X
R.Top = (R.Top * FScale / 100) + Offset.Y
R.Bottom = (R.Bottom * FScale / 100) + Offset.Y
Dim g1 As Graphics = Graphics.FromHwnd(panel1.Handle)
DrawCAD(CADImage, g1.GetHdc(), R)
End If
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dlgOpenDXFFile.Filter = "CAD files (dwg, dxf, rtl, spl, prn, gl2, hpgl2, hpgl, hp2, hp1, hp, plo, hpg, hg, hgl, plt, cgm, svg, svgz)|*.dwg;*.dxf;*.rtl;*.spl;*.prn;*.gl2;*.hpgl2;*.hpgl;*.hp2;*.hp1;*.hp;*.plo;*.hpg;*.hg;*.hgl;*.plt;*.cgm;*.svg;*.svgz|" + _
"AutoCAD files (dwg, dxf)|*.dwg;*.dxf;|" + _
"HPGL/2 files (rtl, spl, prn, gl2, hpgl2, hpgl, hp2, hp1, hp, plo, hpg, hg, hgl, plt)|*.rtl;*.spl;*.prn;*.gl2;*.hpgl2;*.hpgl;*.hp2;*.hp1;*.hp;*.plo;*.hpg;*.hg;*.hgl;*.plt;|" + _
"Computer Graphics Metafile (cgm)|*.cgm;|" + _
"Scalable Vector Graphics (svg, svgz)|*.svg;*.svgz;|" + _
"All files (*.*)|*.*"
Dim R As Rect
KX = 1
KY = 1
End Sub
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
panel1.Invalidate()
End Sub
Private Sub panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseDown
PreviousPoint.X = e.X
PreviousPoint.Y = e.Y
panel1.Cursor = Cursors.Hand
drag = True
End Sub
Private Sub panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseMove
If (CADImage.Equals(IntPtr.Zero)) Then
Return
End If
If drag = True Then
Offset.X = Offset.X - (PreviousPoint.X - e.X) / KX
Offset.Y = Offset.Y - (PreviousPoint.Y - e.Y) / KY
PreviousPoint.X = e.X
PreviousPoint.Y = e.Y
panel1.Invalidate()
End If
End Sub
Private Sub panel1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseUp
drag = False
panel1.Cursor = Cursors.Default
panel1.Invalidate()
End Sub
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
panel1.Visible = True
End Sub
Private Sub Form1_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate
panel1.Visible = False
End Sub
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click, MenuItem6.Click, MenuItem7.Click, MenuItem8.Click, MenuItem9.Click
MenuItem5.Checked = False
MenuItem6.Checked = False
MenuItem7.Checked = False
MenuItem8.Checked = False
MenuItem9.Checked = False
Dim tmp As MenuItem = sender
tmp.Checked = True
FScale = Convert.ToInt32(tmp.Text)
panel1.Invalidate()
End Sub
Private Sub MenuItem10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem10.Click
Close()
End Sub
Private Sub MenuItem11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem11.Click
Dim CrDraw As CADDRAW = New CADDRAW
Dim K As Single
Dim AbsWidth As Single
Dim AbsHeight As Single
CD.FileName = ""
CD.Filter = "Bmp files (bmp)|*.bmp"
CD.ShowDialog()
GetBoxCAD(CADImage, AbsWidth, AbsHeight)
If AbsWidth = 0 Then
K = 1
Else
K = AbsHeight / AbsWidth
End If
CrDraw.Size = Len(CrDraw) 'size of CADDRAW
CrDraw.R = New Rect
GetClientRect(panel1, CrDraw.R)
CrDraw.R.Bottom = CrDraw.R.Right * K
CrDraw.R.Right = CrDraw.R.Right * FScale / 100
CrDraw.R.Bottom = CrDraw.R.Bottom * FScale / 100
CrDraw.DrawMode = 0 ' color mode
Dim i = SaveCADtoBitmap(CADImage, CrDraw, CD.FileName)
End Sub
Private Sub MenuItem4_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
Dim CrDraw As CADDRAW = New CADDRAW
Dim K As Single
Dim AbsWidth As Single
Dim AbsHeight As Single
CD.FileName = ""
CD.Filter = "Jpg files (jpg)|*.jpg"
CD.ShowDialog()
GetBoxCAD(CADImage, AbsWidth, AbsHeight)
If AbsWidth = 0 Then
K = 1
Else
K = AbsHeight / AbsWidth
End If
CrDraw.Size = Len(CrDraw) 'size of CADDRAW
CrDraw.R = New Rect
GetClientRect(panel1, CrDraw.R)
CrDraw.R.Bottom = CrDraw.R.Right * K
CrDraw.R.Right = CrDraw.R.Right * FScale / 100
CrDraw.R.Bottom = CrDraw.R.Bottom * FScale / 100
CrDraw.DrawMode = 0 ' color mode
Dim i = SaveCADtoJpeg(CADImage, CrDraw, CD.FileName)
End Sub
Private Sub MenuItem12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem12.Click
lForm.ShowDialog()
End Sub
Private Sub MenuItem15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem15.Click
Me.ColorDialog1.AllowFullOpen = True
Me.ColorDialog1.AnyColor = False
Me.ColorDialog1.Color = Me.panel1.BackColor
Me.ColorDialog1.CustomColors = Nothing
Me.ColorDialog1.FullOpen = False
Me.ColorDialog1.ShowHelp = True
Me.ColorDialog1.SolidColorOnly = False
If (Me.ColorDialog1.ShowDialog() = DialogResult.OK) Then
SetDefaultColor(CADImage, ConvertColorToInt(Me.ColorDialog1.Color))
End If
Me.panel1.Invalidate()
End Sub
Public Function ConvertColorToInt(ByVal sender As Color) As Integer
Dim r, g, b, nColor As Integer
r = sender.R
g = sender.G
b = sender.B
nColor = (b << 16) + (g << 8) + r
Return nColor
End Function
End Class
Public Structure POINTAPI
Public X As Long
Public Y As Long
End Structure
Public Structure Rect
Public Left, Top, Right, Bottom As Integer
Public Sub New(ByVal val As Rectangle)
Left = val.Left
Top = val.Top
Right = val.Right
Bottom = val.Bottom
End Sub
End Structure
Public Structure CADDRAW
Public Size As Single
Public DC As Single
Public R As Rect
Public DrawMode As Byte
End Structure
Public Structure DXFPOINT
Public X As Single
Public Y As Single
Public Z As Single
Public Sub New(ByVal aX As Single, ByVal aY As Single)
X = aX
Y = aY
End Sub
End Structure
Public Structure Data
Public Tag As Char
Public Count As Char
Public TickCount As Char
Public Flags As Byte
Public Style As Byte
Public Dimension As Integer
Public DashDots As Single
Public DashDotsCount As Integer
Public Color As Integer
Public Ticks As Single
Public Thickness As Single
Public Rotation As Single
Public Layer As String
Public Text As String
Public FontName As String
Public Handle As Single
Public Unused As Integer
Public Point As DXFPOINT
Public Point1 As DXFPOINT
Public Point2 As DXFPOINT
Public Point3 As DXFPOINT
'Public Var1(17) As Byte
Public FHeight, FScale, RWidth, RHeight As Single
Public HAlign, VAlign As Byte
End Structure
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -