
Drawing Exchange Format (DXF) 是 AutoCAD 定義的繪圖交換標準,支援 ASCII 與二進制兩種格式。ASCII 格式通用性更強,CadLib 採用 ASCII DXF 格式。
CadLib 非 CAD 軟體,而是建立 DXF 檔案的開發工具庫,包含:
cadio.dll:核心建檔功能需輸出 CAD 可識別圖形檔的程式,如「發動機設計軟體」輸出圖面數據,DXF 為最通用交換格式。

DXF 以群碼標記數據描述圖形資訊。CadLib 支援四大區段:
詳細規範參考:
AutoCAD DXF 參考
DXF 12 規範
// 1. 建立檔案
CDxfFileWrite dxffile;
dxffile.Create("d:\\test.dxf");
// 2. HEADER 區段(為相容 CAD 程式)
dxffile.BeginSection(SEC_HEADER);
dxffile.EndSection();
// 3. TABLES 區段:定義線型、圖層、樣式、標註樣式
dxffile.BeginSection(SEC_TABLES);
// 線型表
dxffile.BeginTableType(TAB_LTYPE);
DXFLTYPE ltype;
double elem[4];
// Continuous 實線
ZeroMemory(<ype, sizeof(ltype));
ltype.Name = "Continuous";
ltype.DescriptiveText = "Solid line";
dxffile.AddLinetype(<ype);
// DASHDOT2 虛點線
ZeroMemory(<ype, sizeof(ltype));
ltype.Name = "DASHDOT2";
ltype.DescriptiveText = "Dash dot (.5x) ...";
ltype.ElementsNumber = 4;
ltype.TotalPatternLength = 0.5;
ltype.Elements = elem;
elem[0]=0.25; elem[1]=-0.125; elem[2]=0.0; elem[3]=-0.125;
dxffile.AddLinetype(<ype);
dxffile.EndTableType();
// 圖層表
dxffile.BeginTableType(TAB_LAYER);
dxffile.AddLayer("Layer1", 1, "Continuous");
dxffile.AddLayer("Layer2", 2, "Continuous");
dxffile.AddLayer("Layer3", 3, "Continuous");
dxffile.AddLayer("Layer4", 4, "Continuous");
dxffile.EndTableType();
// 文字樣式表
dxffile.BeginTableType(TAB_STYLE);
DXFSTYLE tstyle;
ZeroMemory(&tstyle, sizeof(tstyle));
tstyle.Name = "Style1";
tstyle.PrimaryFontFilename = "TIMES.TTF";
tstyle.Height = 0.3;
tstyle.WidthFactor = 1;
dxffile.AddTextStyle(&tstyle);
dxffile.EndTableType();
// 標註樣式表
dxffile.BeginTableType(TAB_DIMSTYLE);
DXFDIMSTYLE dimstyle;
ZeroMemory(&dimstyle, sizeof(dimstyle));
dimstyle.Name = "DIM1";
dimstyle.DIMCLRD = 2; dimstyle.DIMDLE = 0.0;
dimstyle.DIMCLRE = 2; dimstyle.DIMEXE = 0.18;
dimstyle.DIMEXO = 0.0625;
dimstyle.DIMBLK1 = "ClosedFilled";
dimstyle.DIMBLK2 = "ClosedFilled";
dimstyle.DIMASZ = 0.18;
dimstyle.DIMTXSTY = "Style1";
dimstyle.DIMCLRT = 3; dimstyle.DIMTXT = 0.18;
dimstyle.DIMTAD = 1; dimstyle.DIMGAP = 0.09;
dxffile.AddDimStyle(&dimstyle);
dxffile.EndTableType();
dxffile.EndSection(); // 結束 TABLES
// 4. ENTITIES 區段:繪製實體圖形
dxffile.BeginSection(SEC_ENTITIES);
dxffile.SetCurrentLayer("Layer2");
dxffile.Line(1.2, 3.3, 7.5, 7.7); // 直線
dxffile.Circle(7.8, 4.3, 1.75); // 圓形
dxffile.SetCurrentLayer("Layer4");
// 實心多邊形
REALPOINT points[4] = {{10.4,7.2},{13.6,7.4},{13.1,4.9},{10.9,5.9}};
dxffile.Solid(4, points);
dxffile.SetCurrentTextStyle("Style1");
dxffile.Text("Sample Text", 5.9, 6.7, 0.3, 35); // 文字
dxffile.SetCurrentDimStyle("DIM1");
dxffile.DimLinear(6.05, 3, 9.55, 3, 9.55, 2, 0, "3.50"); // 線性標註
dxffile.EndSection();
// 5. 關閉檔案
dxffile.Close();
適用於需互動式繪圖、預覽後再輸出的場景。用法類似但操作對象在記憶體:
CDrawing drw;
drw.Create();
// 建立表格定義(同 CDxfFileWrite,但呼叫 drw.AddXxx)
// ...
// 繪製實體
drw.SetLayer("Layer2");
drw.Line(1.2, 3.3, 7.5, 7.7);
drw.Circle(7.8, 4.3, 1.75);
drw.SetLayer("Layer1");
REALPOINT pts[4] = {{10.4,7.2},{13.6,7.4},{13.1,4.9},{10.9,5.9}};
drw.Solid(pts[0], pts[1], pts[2], pts[3]);
drw.SetTextStyle("Style1");
drw.Text("Sample Text", 5.9, 6.7, 0.3, 35);
drw.SetDimStyle("DIM1");
drw.DimLinear(6.05, 3, 9.55, 3, 9.55, 2, 0, "3.50");
// 存檔
drw.SaveDXFFile("output.dxf");
CDrawing drw;
drw.Create();
drw.LoadDXFFile("Sample.dxf"); // 載入至記憶體進行編輯/分析
CadLib 雖非最強商業 DXF 庫,但開源免費、原始碼可修改,對需在程式中產生 DXF 的開發者極具參考價值。附贈完整範例原始碼供下載研究。