參考文章: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();
}