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

📄 form1.cs

📁 CAD转换工具 CAD转换工具 CAD转换工具 CAD转换工具
💻 CS
📖 第 1 页 / 共 2 页
字号:
			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 + -