參考文章:CadLib 3.5 documentationhttps://www.woutware.com/doc/cadlib3.5/Index.aspx
讀取:定義DxfModel類型的變量model,使用DxfReader或DwgReader的Read(String)讀取dxf或dwg格式的CAD文件filename。
顯示:使用GIDGraphics3D類來顯示CAD文件,基本步驟:
1、使用CreateDrawables(DxfModel)創建中間可繪制對象(點/線/折線)。
2、使用BoundingBox(Bounds3D)方法獲取bounding box。
3、使用GetScaleTransform(Point3D, Point3D, Point3D, Point3D, Point3D, Point3D)計算將繪圖擬合到顯示矩形中所需的縮放變換,使用To2Dtransform屬性設置結果。(寫一個函數CalculateTo2DTransform)
4、使用Draw(Graphics, Rectangle)繪制中間可繪制對象。
注意:需要重寫控件的Resize和Paint事件。
- //Read and view CAD file 讀和顯示CAD文件
- private Matrix4D modelTransform = Matrix4D.Identity;
- private GDIGraphics3D gdiGraphics3D;
- private DxfModel model;//定義DxfModel對象
- private Bounds3D bounds;
- private string filename;
- //計算GDIGraphics3D的屬性To2DTransform
- private void CalculateTo2DTransform()
- {
- if (bounds != null)
- {
- //計算將CAD文件放入顯示矩陣中需要的縮放比例變換
- Matrix4D to2DTransform = DxfUtil.GetScaleTransform(
- bounds.Corner1,
- bounds.Corner2,
- bounds.Center,
- new Point3D(0d, this.xtraTabPage3.Height, 0d),
- new Point3D(this.xtraTabPage3.Width, 0d, 0d),
- new Point3D(this.xtraTabPage3.Width / 2, this.xtraTabPage3.Height / 2, 0d)
- );
- gdiGraphics3D.To2DTransform = to2DTransform * modelTransform;
- }
- }
- //打開CAD文件
- private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- //選取要打開的CAD文件
- OpenFileDialog dialog = new OpenFileDialog();
- dialog.Filter = "AutoCad files (*.dwg, *.dxf)|*.dxf;*.dwg";
- if (dialog.ShowDialog() == DialogResult.OK)
- {
- filename = dialog.FileName;
- }
- if (!string.IsNullOrEmpty(filename))
- {
- try
- {
- //通過文件擴展名判斷CAD文件是dwg格式還是dxf格式
- string extension = Path.GetExtension(filename);
- if (string.Compare(extension, ".dwg", true) == 0)
- model = DwgReader.Read(filename);
- else
- model = DxfReader.Read(filename);
- //將控件的標簽添加上文件名
- this.xtraTabPage3.Text = "二維仿真(" + Path.GetFileName(filename) + ")";
- //設置控件背景為黑色
- this.xtraTabPage3.BackColor = System.Drawing.Color.Black;
- //使用GDIGraphics3D繪制CAD文件的方法
- //創建中間可繪制對象
- gdiGraphics3D.CreateDrawables(model);
- //獲得bounding box
- bounds = new Bounds3D();
- gdiGraphics3D.BoundingBox(bounds, modelTransform);
- //計算GDIGraphics3D的屬性To2DTransform
- CalculateTo2DTransform();
- //響應控件的Paint事件,畫CAD文件
- }
- catch (Exception ex)
- {
- MessageBox.Show("文件有錯!請用AutoCad打開,通過“文件-核查”嘗試修復。錯誤信息:" + ex.Message);
- }
- }
- }
- //xtraTabPage3控件的Paint事件,畫CAD文件
- private void xtraTabPage3_Paint(object sender, PaintEventArgs e)
- {
- gdiGraphics3D.Draw(e.Graphics, this.xtraTabPage3.ClientRectangle);
- }
- //使繪制的CAD文件適應屏幕
- private void xtraTabPage3_Resize(object sender, EventArgs e)
- {
- base.OnResize(e);
- CalculateTo2DTransform();
- this.xtraTabPage3.Invalidate();
- }
http://blog.csdn.net/zjzytnn/article/details/53708655