📄 form1.cs
字号:
R.Top = (R.Top * fScale / 100) + DLLWin32Import.FY;
R.Bottom = (R.Bottom * fScale / 100) + DLLWin32Import.FY;
Graphics g1 = Graphics.FromHwnd(panel1.Handle);
DLLWin32Import.DrawCAD(DLLWin32Import.CADFile, g1.GetHdc(), ref R);
}
public void GetClientRect(Control acl, ref Rect R)
{
R.Left = acl.Left;
R.Top = acl.Top;
R.Right = acl.Size.Width;
R.Bottom = acl.Size.Height;
}
private void cbStretch_CheckedChanged(object sender, System.EventArgs e)
{
panel1.Invalidate();
}
private void fmCADImage_Resize(object sender, System.EventArgs e)
{
panel1.Invalidate();
}
private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
DLLWin32Import.fStart = new Point(e.X, e.Y);
DLLWin32Import.fOld = new Point(DLLWin32Import.FX, DLLWin32Import.FY);
panel1.Cursor = Cursors.Hand;
}
}
private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(panel1.Cursor == Cursors.Hand) {
DLLWin32Import.FX = DLLWin32Import.fOld.X + e.X - DLLWin32Import.fStart.X;
DLLWin32Import.FY = DLLWin32Import.fOld.Y + e.Y - DLLWin32Import.fStart.Y;
panel1.Invalidate();
} else {
if(DLLWin32Import.CADFile == IntPtr.Zero) {
return;
}
}
}
private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if((e.Button == MouseButtons.Right)&&(panel1.Cursor == Cursors.Hand)) {
panel1.Cursor = Cursors.Default;
}
}
private void button2_Click(object sender, System.EventArgs e)
{
layerForm.layerList.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.chLay_ItemCheck);
layerForm.ShowDialog();
}
private void MouseZoom(object sender, System.Windows.Forms.MouseEventArgs e)
{
float prev_scale = fScale;
prev_scale = fScale;
fScale += e.Delta/12;
float fs = fScale / prev_scale;
DLLWin32Import.FX = (int)((DLLWin32Import.FX - e.X) * Math.Abs(fs) + e.X);
DLLWin32Import.FY = (int)((DLLWin32Import.FY - e.Y) * Math.Abs(fs) + e.Y);
panel1.Invalidate();
}
private void chLay_ItemCheck(Object sender, System.Windows.Forms.ItemCheckEventArgs e)
{
if(e.NewValue == CheckState.Checked)
DLLWin32Import.CADLayerVisible(((int)layerForm.layers[e.Index]), 1);
if(e.NewValue == CheckState.Unchecked)
DLLWin32Import.CADLayerVisible(((int)layerForm.layers[e.Index]), 0);
panel1.Invalidate();
}
private void menuItem14_Click(object sender, System.EventArgs e)
{
for(int i = 0; i < MainMenu1.MenuItems[1].MenuItems.Count; i++)
MainMenu1.MenuItems[1].MenuItems[i].Checked = false;
(sender as MenuItem).Checked = ! (sender as MenuItem).Checked;
fScale = Convert.ToInt32((sender as MenuItem).Text);
DLLWin32Import.FX = 0;
DLLWin32Import.FY = 0;
panel1.Invalidate();
}
private void MenuItem10_Click(object sender, System.EventArgs e)
{
Close();
}
private void MenuItem11_Click(object sender, System.EventArgs e)
{
CADDRAW CrDraw = new CADDRAW();
float K;
float AbsWidth = 0;
float AbsHeight = 0;
CD.FileName = "";
CD.Filter = "Bmp files (bmp)|*.bmp";
CD.ShowDialog();
DLLWin32Import.GetBoxCAD(DLLWin32Import.CADFile, ref AbsWidth, ref AbsHeight);
if(AbsWidth == 0)
K = 1;
else K = AbsHeight / AbsWidth;
CrDraw.Size = Marshal.SizeOf(CrDraw); //size of CADDRAW
CrDraw.R = new Rect();
GetClientRect(panel1, ref CrDraw.R);
CrDraw.R.Bottom = (int)(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
int i = DLLWin32Import.SaveCADtoBitmap(DLLWin32Import.CADFile, ref CrDraw, CD.FileName);
}
private void MenuItem4_Click(object sender, System.EventArgs e)
{
CADDRAW CrDraw = new CADDRAW();
float K;
float AbsWidth = 0;
float AbsHeight = 0;
CD.FileName = "";
CD.Filter = "Jpg files (jpg)|*.jpg";
CD.ShowDialog();
DLLWin32Import.GetBoxCAD(DLLWin32Import.CADFile, ref AbsWidth, ref AbsHeight);
if(AbsWidth == 0) K = 1;
else K = AbsHeight / AbsWidth;
CrDraw.Size = Marshal.SizeOf(CrDraw); //size of CADDRAW
CrDraw.R = new Rect();
GetClientRect(panel1, ref CrDraw.R);
CrDraw.R.Bottom = (int)(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
int i = DLLWin32Import.SaveCADtoJpeg(DLLWin32Import.CADFile, ref CrDraw, CD.FileName);
}
}
public class DLLWin32Import
{
public static IntPtr CADFile = new IntPtr();
public static float fAbsHeight, fAbsWidth;
public static int FX, FY;
public static FPoint fScaleRect = new FPoint();
public static Point fStart = new Point();
public static Point fOld = new Point();
[DllImport("CADImage")]
public static extern IntPtr CreateCAD(IntPtr hWindow, string lpFileName);
[DllImport("CADImage")]
public static extern int CloseCAD(IntPtr hObject);
[DllImport("CADImage")]
public static extern int DrawCAD(IntPtr hObject, IntPtr hDC, ref Rect lprc);
[DllImport("CADImage")]
public static extern int GetExtentsCAD(IntPtr handle, ref FRect fRect);
[DllImport("CADImage")]
public static extern int CADLayerCount(IntPtr hObject);
[DllImport("CADImage")]
public static extern int CADLayer(IntPtr hObject, int nIndex, ref DXFData lpData);
[DllImport("CADImage")]
public static extern int GetLastErrorCAD([MarshalAs(UnmanagedType.LPStr)]string lbBuf);
[DllImport("CADImage")]
public static extern int DrawCADEx(IntPtr hObject, ref CADDraw lpcd);
[DllImport("CADImage")]
public static extern int CADLayerVisible(int Handle, int Visible);
[DllImport("CADImage")]
public static extern int CADVisible(IntPtr hObject, [MarshalAs(UnmanagedType.LPStr)] string lpLayerName);
[DllImport("CADImage")]
public static extern IntPtr DrawCADtoBitmap(IntPtr hObject, ref CADDraw lpcd);
[DllImport("CADImage")]
public static extern IntPtr DrawCADtoGif(IntPtr hObject, ref CADDraw lpcd);
[DllImport("CADImage")]
public static extern IntPtr DrawCADtoJpeg(IntPtr hObject, ref CADDraw lpcd);
[DllImport("CADImage")]
public static extern int GetBoxCAD(IntPtr Handle, ref float AbsWidth, ref float AbsHeight);
[DllImport("CADImage")]
public static extern int SetProcessMessagesCAD(IntPtr hObject, int AIsProcess);
[DllImport("CADImage")]
public static extern int SaveCADtoBitmap(IntPtr Handle, ref CADDRAW cADDraw, string FileName);
[DllImport("CADImage")]
public static extern int SaveCADtoJpeg(IntPtr Handle, ref CADDRAW cADDraw, string FileName);
[DllImport("kernel32.dll")]
public static extern long WriteFile (long hFile, long lpBuffer ,
long nNumberOfBytesToWrite, long lpNumberOfBytesWritten, int lpOverlapped);
[DllImport("kernel32.dll")]
public static extern long CreateFile(string lpFileName, long dwDesiredAccess, long dwShareMode, IntPtr SecurityAttributes, long
dwCreationDisposition , long dwFlagsAndAttributes, long hTemplateFile);
[DllImport("kernel32.dll")]
public static extern long CloseHandle(long hObject);
[DllImport("kernel32.dll")]
public static extern long GlobalAlloc(long wFlags, long dwBytes);
[DllImport("kernel32.dll")]
public static extern long GlobalFree(long hMem);
[DllImport("kernel32.dll")]
public static extern long GlobalLock (long hMem);
[DllImport("kernel32.dll")]
public static extern long GlobalUnlock(long hMem);
[DllImport("kernel32.dll")]
public static extern long GlobalSize(long hMem);
}
public struct FRect
{
public float Left, Top, Z1, Right, Bottom, Z2;
public FPoint TopLeft, BottomRight;
}
public struct FPoint
{
public float X, Y, Z;
}
public struct RPoint
{
public float X, Y;
public RPoint(float x, float y)
{
X = x;
Y = y;
}
}
public struct CADDraw
{
public long Size;
public IntPtr DC;
public Rect R;
public byte DrawMode;
}
public struct POINTAPI
{
public long X;
public long Y;
}
public struct Rect
{
public int Left, Top, Right, Bottom;
public Rect(Rectangle val)
{
Left = val.Left;
Top = val.Top;
Right = val.Right;
Bottom = val.Bottom;
}
}
public struct CADDRAW
{
public Single Size;
public int DC; //single
public Rect R;
public byte DrawMode;
}
public struct DXFPoint
{
public int X; //As Single
public int Y; //As Single
public int Z; //As Single
public DXFPoint(int aX, int aY, int aZ)
{
X = aX;
Y = aY;
Z = aZ;
}
}
public struct DXFData
{
public char Tag;
public char count;
public char TickCount;
public byte flags;
public byte Style;
public int Dimension;
public int DashDots; // As Single
public int DashDotsCount;
public int Color;
public int Ticks;
public int Thickness;
public int Rotation;
public string Layer;
public string Text;
public string FontName;
public int Handle;
public int Unused;
public DXFPoint Point;
public DXFPoint Point1;
public DXFPoint Point2;
public DXFPoint Point3;
public int FHeight, FScale, RWidth, RHeight;
public byte HAlign, VAlign;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -