DXF

**AutoCAD DXF** (**D**rawing e**X**change **F**ormat) on CAD-andmete salvestamise failivorming, mille eesmärgiks on jooniste andmete vahetamine erinevate CAD-i programmide vahel.

DXF võeti esimest korda kasutusele 1982. aasta detsembris, AutoCAD-i esimesest täisversioonist. Joonestajatel oli vaja avada AutoCAD-i jooniseid kasutades teisi joonestamise programme. DXF sai loodud eesmärgiga esindada täpselt samu graafilisi andmeid Autodeski omandiõigusega DWG-failivorminguga, et neid oleks võimalik jagada erinevate CAD-i programmide vahel.

DXF-failid on populaarsed tööstuses, kus neid kasutatakse CNC pinkide, 3D-printerite, laserlõikuspinkide, vesilõikuspinkide ja paljudele teistele erinevatele arvprogrammjuhtimisega tööpinkidele koodi (näiteks G-koodi) genereerimisel.

Alates AutoCAD-i versioonist "Release 10", mis väljastati 1988. aasta oktoobris, toetab programm nii ASCII kui ka binaarset DXF-failivormingut. Varasematel versioonidel on tugi ainult ASCII DXF-failivormingule. Binaarse DXF-failivorming nõuab salvestamiseks kuni 25% vähem ruumi, faili kirjutamine ja lugemine on tüüpiliselt viis korda kiirem ning ujukomaarvude täpsus on võrdne DWG-failivormingu omaga. ASCII failivorming on inimloetav ja seda on ka teistel programmidel lihtsam lugeda.

## Faili struktuur
DXF-failivorming on kogu AutoCAD-i joonistusfailis sisalduva informatsiooni esitus märgistatud andmetena. Märgistatud andmed tähendavad seda, et faili iga andmeelemendi ees on täisarv, mida nimetatakse grupikoodiks. Grupikoodi väärtus näitab, millist tüüpi andmeelement sellele järgneb. See väärtus näitab ka selle objektitüübi andmeelemendi tähendust. Peaaegu kõiki joonise kasutaja määratud andmeid on võimalik esitada DXF-failivormingus.

ASCII DXF-faili on võimalik lugeda suvalise tekstiredaktoriga. Põhiline DXF-faili struktuur koosneb järgmistest sektsioonidest.

***HEADER** (päis) – üldine teave AutoCAD-i seadete kohta. Igal parameetril on muutuja nimi ja seotud väärtus. Näiteks võib siin olla muutuja "$ACADVER" mille väärtus oleks "AC1012", kui DXF-fail on salvestatud AutoCAD-i versiooniga "Release 13".
***CLASSES** (klassid) – teave rakenduse enda defineeritud klasside kohta, mille instantse kasutatakse sektsioonides BLOCKS, ENTITIES ja OBJECTS.
***TABLES** (tabelid) – eri tabelid joonise kohta. Näiteks informatsiooni kasutatud joonte tüüpide, kihtide nimede ja kirjatüüpide kohta.
***BLOCKS** (plokid) – väiksemad jooniseid või šabloonid, mida võib olla kasutatud põhijoonises. Näiteks võib see sisaldada joonist mingi keerulisema kujuga august, mida on pärast korduvalt paigutatud põhijoonisele. Plokkide definitsioonidele viidatakse ENTITIES-i tabelis INSERT-käsu abil.
***ENTITIES** (üksused) – joonise üksused, näiteks jooned, ringid, INSERT-käsud plokkide kasutamiseks või isegi tekst.
***OBJECTS** (objektid) – andmed mittegraafiliste objektide kohta joonises.
***THUMBNAILIMAGE** (pisipilt) – DXF-faili eelvaate pilti.
***EOF** ehk **END OF FILE** – tähistab DXF-andmete lõppu.

## DXF-failivormingu liidestamine
DXF-vorming teeb lihtsaks failist ainult vajaliku informatsiooni lugemise.

Järgmine näide on Microsoft BASIC-us kirjutatud programm, mis loeb DXF-faili ja leiab sealt jooniselt kõik joon tüüpi üksused (v.a jooned, mis on plokkides). See kirjutab nende joonte otspunktid ekraanile. Programm näitab, kui lihtne on DXF-faili programmiliselt lugeda.
```basic
1000 REM
1010 REM Extract lines from DXF file
1020 REM
1030 G1% = 0
1040 LINE INPUT "DXF file name: "; A$
1050 OPEN "i", 1, A$ + ".dxf"
1060 REM
1070 REM Ignore until section start encountered
1080 REM
1090 GOSUB 2000
1100 IF G% <> 0 THEN 1090
1110 IF S$ <> "SECTION" THEN 1090
1120 GOSUB 2000
1130 REM
1140 REM Skip unless ENTITIES section
1150 REM
1160 IF S$ <> "ENTITIES" THEN 1090
1170 REM
1180 REM Scan until end of section, processing LINEs
1190 REM
1200 GOSUB 2000
1210 IF G% = 0 AND S$ = "ENDSEC" THEN 2200
1220 IF G% = 0 AND S$ = "LINE" THEN GOSUB 1400 : GOTO 1210
1230 GOTO 1200
1400 REM
1410 REM Accumulate LINE entity groups
1420 REM
1430 GOSUB 2000
1440 IF G% = 10 THEN X1 = X : Y1 = Y : Z1 = Z
1450 IF G% = 11 THEN X2 = X : Y2 = Y : Z2 = Z
1460 IF G% = 0 THEN PRINT "Line from
(";X1;",";Y1;",";Z1;") to (";X2;",";Y2;",";Z2;")":RETURN
1470 GOTO 1430
2000 REM
2010 REM Read group code and following value
2020 REM For X coordinates, read Y and possibly Z also
2030 REM
2040 IF G1% < 0 THEN G% = -G1% : G1% = 0 ELSE INPUT #1, G%
2050 IF G% < 10 OR G% = 999 THEN LINE INPUT #1, S$ : RETURN
2060 IF G% >= 38 AND G% <= 49 THEN INPUT #1, V : RETURN
2080 IF G% >= 50 AND G% <= 59 THEN INPUT #1, A : RETURN
2090 IF G% >= 60 AND G% <= 69 THEN INPUT #1, P% : RETURN
2100 IF G% >= 70 AND G% <= 79 THEN INPUT #1, F% : RETURN
2110 IF G% >= 210 AND G% <= 219 THEN 2130
2115 IF G% >= 1000 THEN LINE INPUT #1, T$ : RETURN
2120 IF G% >= 20 THEN PRINT "Invalid group code";G% : STOP
2130 INPUT #1, X
2140 INPUT #1, G1%
2150 IF G1% <> (G%+10) THEN PRINT "Invalid Y coord code";
G1% : STOP
2160 INPUT #1, Y
2170 INPUT #1, G1%
2180 IF G1% <> (G%+20) THEN G1% = -G1% ELSE INPUT #1, Z
2190 RETURN

2200 CLOSE 1
```


## Viited

## Välislingid
* LibreCAD – vabavaraline CAD-programm, millega on võimalik jooniseid teha, muuta ja DXF-failidena salvestada.
* DXF Reference – DXF-failivormingu täpsemad spetsifikatsioonid PDF-i kujul.