您的位置:网站首页 > CAD新闻

在cad中用圆绘制位图,第一个c#程序

时间:2009-03-29 19:38:42 来源:
此处到处是高手,发个很简单的c#程序,见笑了。

1. 程序说明: 在autocad中打开一个位图,程序将每一个像素用圆绘制出来。
程序作用:无聊游戏之作,不过也是以前一个位图矢量化的初步设想,假如对于黑白线条位图,可用此绘出后,查找圆心,对圆心距离小于sqrt(2)单位的进行连线,以后再进行抽点等操作。当然对于复杂实体和文字等,还需要再寻找算法。




2. 开发平台 visual studio 2005中文版+ autocad 2007英文版。acmgd.dll等的位置是在d:program filesautocad 2007。

3. 程序使用:用Netload导入form1.dll,然后键入命令 my
   需要注意的是,由于每个像素绘制一个圆,所以,本程序是没有图片大小限制的,但是假若图片大于250*250像素的时候,需要比较长的时间(我导入的750*350的图片,大概需要2分钟,我是P4 2.8G的CPU),会导致CPU运行满载的情况,请选择图片的时候选择小图片。

4.一些基本代码
  1. // by qjchen
  2. // chenqj.blogspot.com
  3. // 2009-3-27 9:33:23

  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Drawing;
  9. using System.Text;
  10. using System.Windows.Forms;
  11. using System.IO;
  12. using form1;
  13. namespace form1
  14. {
  15.     using Autodesk.AutoCAD.Runtime;
  16.     using Autodesk.AutoCAD.ApplicationServices;
  17.     using Autodesk.AutoCAD.Colors;
  18.     using Autodesk.AutoCAD.DatabaseServices;
  19.     using Autodesk.AutoCAD.Geometry;
  20.     using Autodesk.AutoCAD.EditorInput;
  21.     using Autodesk.AutoCAD.Internal;
  22.     using Autodesk.AutoCAD.Interop;
  23.     using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
  24.     public partial class ModalForm : Form
  25.     {
  26.         public ModalForm()
  27.         {
  28.             InitializeComponent();
  29.         }
  30.         private void button1_Click(object sender, EventArgs e)
  31.         {
  32.             try
  33.             {
  34.                 Bitmap myBitmap = new Bitmap(label1.Text);
  35.                 System.Drawing.Color c1;
  36.                 int intWidth = myBitmap.Width;
  37.                 int intHeight = myBitmap.Height;
  38.                 if (intWidth * intHeight > 100000)
  39.                 {
  40.                     MessageBox.Show("It is a big pic" + intHeight + "," + intWidth);
  41.                 }
  42.                 for (int i = 0; i <= intWidth - 1; i++)
  43.                 {
  44.                     for (int j = 0; j <= intHeight - 1; j++)
  45.                     {
  46.                         this.progressBar1.Value = (int)(i) * 100 / intWidth;
  47.                         c1 = myBitmap.GetPixel(i, j);
  48.                         int cr = c1.R;
  49.                         int cg = c1.G;
  50.                         int cb = c1.B;
  51.                         ObjectId entId = ModelSpace.AddCircle(new Point3d(i, (intHeight - j), 0), 0.5);
  52.                         Database db = HostApplicationServices.WorkingDatabase;
  53.                         using (Transaction trans = db.TransactionManager.StartTransaction())
  54.                         {
  55.                             Entity ent = (Entity)trans.GetObject(entId, OpenMode.ForWrite);
  56.                             ent.Color = Color.FromRgb((byte)cr, (byte)cg, (byte)cb);
  57.                             trans.Commit();
  58.                         }
  59.                     }
  60.                 }
  61.                 AcadApplication pApp;
  62.                 pApp = (Autodesk.AutoCAD.Interop.AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
  63.                 pApp.ZoomExtents();
  64.             }
  65.             catch { }
  66.         }
  67.         private void button2_Click(object sender, EventArgs e)
  68.         {
  69.             OpenFileDialog ofdPic = new OpenFileDialog();
  70.             ofdPic.Filter = "JPG(*.JPG;*.JPEG);gif file(*.GIF);bmp file(*.BMP);png file(*.PNG)|*.jpg;*.jpeg;*.gif;*.bmp;*.png";
  71.             ofdPic.FilterIndex = 1;
  72.             ofdPic.RestoreDirectory = true;
  73.             ofdPic.FileName = "";
  74.             if (ofdPic.ShowDialog() == DialogResult.OK)
  75.             {
  76.                 string sPicPaht = ofdPic.FileName.ToString();
  77.                 FileInfo fiPicInfo = new FileInfo(sPicPaht);
  78.                 long lPicLong = fiPicInfo.Length / 1024;
  79.                 string sPicName = fiPicInfo.Name;
  80.                 string sPicDirectory = fiPicInfo.Directory.ToString();
  81.                 string sPicDirectoryPath = fiPicInfo.DirectoryName;
  82.                 Bitmap bmPic = new Bitmap(sPicPaht);
  83.                 Point ptLoction = new Point(bmPic.Size);
  84.                 if (ptLoction.X > picBox.Size.Width || ptLoction.Y > picBox.Size.Height)
  85.                 {
  86.                     picBox.SizeMode = PictureBoxSizeMode.Zoom;
  87.                 }
  88.                 else
  89.                 {
  90.                     picBox.SizeMode = PictureBoxSizeMode.CenterImage;
  91.                 }
  92.                 picBox.LoadAsync(sPicPaht);
  93.                 label1.Text = sPicDirectoryPath + @"" + sPicName;
  94.             }
  95.         }
  96.         private void button3_Click(object sender, EventArgs e)
  97.         {
  98.             this.Close();
  99.         }
  100.         private void button4_Click(object sender, EventArgs e)
  101.         {
  102.             MessageBox.Show(" To draw bitmap into Autocad by each pixels in circle.n by qjchenn chenqj.blogspot.com");
  103.         }

  104.         [CommandMethod("my")]
  105.         public void drawpic()
  106.         {
  107.             ModalForm modalForm = new ModalForm();
  108.             Application.ShowModalDialog(modalForm);
  109.         }
  110.     }

  111. }
复制代码