D X F F Á J L K É S Z Í T É S E M A T L A B B A L

Hasonló dokumentumok
M A T L A B A D A T O K B E O L V A S Á S A / K I Í R Á S A

MATLAB. 9. gyakorlat. Cellatömbök, struktúrák, fájlműveletek

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

% % MATLAB alapozó % % , Földváry Lóránt % Laky Piroska (kiegészítés)

3. ZH-ban a minimum pontszám 15

A számok kiíratásának formátuma

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

E G Y S Z E R Ű A U T O C A D D X F F Á J L

QGIS Gyakorló. 1. kép: Koordináta levétel plugin bekapcsolása.

MATLAB alapismeretek II.

Baran Ágnes. Gyakorlat Függvények, Matlab alapok

Szöveges fájlok szerkesztése Jegyzettömb használata

ArchiPHYSIK AutoCAD Architecture kapcsolat használata

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Meglévő munkafüzet megnyitása, mentése új néven

MATLAB alapismeretek III.

Egyszerűbb a Google keresőbe beírni a Sharepoint Designer 2007 letöltés kulcsszavakat és az első találat erre a címre mutat.

Bevezetés a programozásba I.

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

SZE INFORMATIKAI KÉPZÉS 1

MATLAB gyakorlat. Fájlműveletek folytatás, gyakorlás

AutoCAD 2000H rajzszerkesztés

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Láncolt lista. az itt adott nevet csak a struct deklaráción belül használjuk

ü ű í ú ú ü ü ü ű ü ű ü ű ü ű ü í ü ű í í ü í í í í í ü í ű

S z á m í t ó g é p e s a l a p i s m e r e t e k

CabMap hálózat-dokumentáló rendszer

Adatsor feldolgozása Scilab-bal

Bevezetés a programozásba I.

DXF állományok megnyitása QGIS programmal (1.7 verzió) Összeállította: Ács Eszter, dr. Siki Zoltán

Mechatronika segédlet 3. gyakorlat

Programozás alapjai 9.Gy: Struktúra 2.

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Í Ó ü ü í ü ü ü í Í í É í í Í Í ü ü ü í Í ü

3. modul - Szövegszerkesztés

ü É ö É É ö ö ö ü ö ö Á ű ö ű ű ű Á Í ö ö Ó ö

12 48 b Oldjuk meg az Egyenlet munkalapon a következő egyenletrendszert az inverz mátrixos módszer segítségével! Lépések:

ReszlAd fájl, kitöltési útmutató:

É Í Á Á É Ü Ó É É É É Í Ó Ó Ő Á Á É Á É É É É Á É É Á Á É É Á É Í

ö ő ő ü ü Ó ü ö ű Á ő ő ö ő Á Ó ű ö ü ő ő ű

Ü

Ö Ö ú

Í Ú É ő ő ú ö Ö ú ú ú ö ö ú ö ö ű ö ő ö ö ú ö ő ő ö ö ö ő ő ú ő ú ö ö ö ú ö ö ú ő ö ú ö ű ö ő Ó ő Á ö ő ö ö

ú Ü Í ú ú ú ú ú ú

ú ű ű É ü ű ü ű ű í ü í ő í Ü ő ő ü ú Í ő ő í ú ü ü ő ü

Ü ű ö Á Ü ü ö ö

ó É ó í ó ó í í ö í ó í ö ö ö ü ö ó ó ó ü ú ö ü ó ó ö ö ü ü ü ö ö ó ö í ó ű Ü ó í ú í ö í ö í Í ó ó í í ö ü ö ö í ö í ö ö ö ü ó í ö ö ó í ú ü ó ö

ű Á ü ő ö í ö ö ő ő ő ő ö

ú ű ú ú ű ú ű ű ú ű ú ű Á ű ű Á ű ű ú ú ú ú ú ú ű ú ú ú ú ú ú ú ú

í Ó ó ó í ó ó ó ő í ó ó ó ó

Í Í Í Ü Ó Ó Ö Á Ü Ü Ó Ü Ü Ó Ö Í É Ö


ü ő ő ü ü ő ő ű í í ű ő ő ő ü ő ő í í ő ő ő ő ő ő ü ü í ő Ö ő ü í ő ü í í ő ü ő í ő ő í í ő ü ü í ő ü í ő í ő í ő ü í ő í ü í í ő

Í ö ö ű ú ö ö Í ö ü ö ü

Gyakran Ismétlődő Kérdések

ő ő Ű ü ú ú Ú ü ű ő ő ő ő Á Á Í ü É ő ő ő ő ő É ő ú ú ú ő Á Ö ő

í í É í ó ó É ö í ó í ó í ó ó í ó í í ó ó ó í ö ö ö ö í í í ó ó ö ó

í í ü í í í í í Ó ő ő í í í Ú ü Ú í í Ú ő ü Ú ü ő

ű ú Í Ó Á ú Ű ű Ő Ö Á ú Ű Ü ú ú Á ú ű

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

ő ő ő ő ő ő ú ő ü Á ü ü ő ő ő ő ő ő ő ő ő ő Ö Ó ő ő ő Ö ő ő ő

É ő ő ű ú Á ő Á ő ű ő ő ő ő ő ő ő ő ű ú ű ű ő ő ő ű

í ó ő í é ö ő é í ó é é ó é í é é í é í íí é é é í é ö é ő é ó ő ő é ö é Ö ü é ó ö ü ö ö é é é ő í ő í ő ö é ő ú é ö é é é í é é í é é ü é é ö é ó í é

é ö é Ö é é ő í ó í é ő ö ú é ó é ő ü ü é ó ö é é ó é é ö é ő í é é ő é é ö é ű ö é í ó é é í ö í ó í ó é é ö ó í ó ó í ó é é ö ő í ó ó í ó ü é í ü

É Í ü ú É ü ő ő ő ő ú ő ú ü ü ő ü ú ü ű ú ú ü ü Í ü ű ő ő É ő

ú ú ü ü Á ú ú ü ű ű ú ü ü ü ü

ő ö ő ű ó ö ó ű Í Ö Ö Á Í Ó Ö Ü É Ö Ö Ö Á Á Ö É Á Ö

ü ö ú ö ú ü ö ü Á Ó ö ö ö ö ú ü ú ü ü ú ú ö ö ü ü ú ü ü ö ö ű ö ü ü ü ü ö ö

ű í ú ü ü ü ü ü Ó í ü í í í É Á

Ö Ö Ú Ó Ö ű Ő Ő ű ű Ü Ő Ó Ő

Ö Ö Ö Ö Ö Á Ű É Ö Ö Ö

Í Í Ó ű Ü Ó Ó Ü ü Ö Í Ü Í Í ú Ö Ó Í ú ú Ö Ó É Í ű ú

ő ő ő ő ú É ü ú ú ű ú ű ő ő ő ő Á Á ü ő É É É É É É Á Ú Á Á ő ő ő ő ő É Á Á Á ő ő ő Á ü ő ő ü

ú ü ü ú Ö ú ü ü ü ü ü ú ü ú ü ű Í ü ü ű ü ű Ó ü Ü ű ú ú Á ü ű ű ü ü Ö ü ű ü Í ü ü

ö ö Ö ó ó ö ó ó ó ü ö í ü ú ó ó í ö ö ö ó ö ü ú ó ü ö ü ö ö Ö ü ö ö Ö ó

ö ö ö ö ö ö ö ü ö ü ö ű ö ú ü ű ö ü Í ö ú ü ü ű ö ú ü Á ü

ű ú ú Ö ó Ö ó ó ó Ö ű ó ű ű ü Á ó ó ó ó ü ó ü Ö ó ó ó Ö ű ű ü Ö ű Á ú ú ú ó ű í í Ő ú Á É Ö í ó ü ű í ó ű ó Ö ú Ő ú ó í ú ó

ö ö ó ú ö ö ú ü ó ö ö Í ö ö ö ü ó ö ö ú ú ö ü ó ü ó ü ö ú ü ó ü ö ó Á Á ö ü ú ó ö ü ü ö ó ü ü Á ü ö ü ö ü ö ö ö ü ö ú ö ö ö ü ú ö ú ö ű ú ú ü ö ó ö ö

É ö Ű ő ű ő ő ű ű

ö ü ü ú ó í ó ü ú ö ó ű ö ó ö í ó ö í ö ű ö ó Ú ú ö ü É ó í ö Ó Á í ó í í Ú ö ú ö ű ü ó

é ú é é é é é é é é é é é é ú é ö é é é ö Ő é é é ú é é é é é é é é ö é é é ö é Ö é é ö é ö é é é ű é ö ö é ö é é ö ö é é ö ö é ö é Ö é ú é é é é é é

í ü í ü ő ő ü Í ő ő ő ú í ő ő ö ö ö ű ü í ő ő í ú ö ö ú ő ő ú í ő í ő ö ö í ő ü ü í ő ö ü ü ú í í ü ő í ü Í í í í ö ő ö ü ő í ő ő ü ű ő ő í ő í í ő ő

ö Ó ű ö ó í ó ü ö Ó ó í ö ö ó Ö ó ö í ó í ó Á í ó Á Á Ő ú ü ó Í ü ú ü

ő ö ő ú ő ö ö ő ó ő ö ü ú ö ö ó ő ö ü ó ó ó ó ő ő ő ó ó ú ő ü ő ö ö ó ü ö ö ő ű ö ö ő ú ú ó ö ő ű ö ó

ú ú ö ö ü ü ü ü ű ü ü

ö ö ö Ö ö ú Ö í Ö ű ö í Ö í ö ü ö í ú Ö Ö ö í ű ö ö í ö ö Ő ö í ü ö ö í Ö ö ö í ö í Ő í ű ű í Ö Ó í ö ö ö ö Ö Ö ö í ü ö ö Ö í ü Ö ö í ö ö ö ö ö Ö ö í

1. Alapok. Programozás II

Ö Ö ű ű ű Ú Ú ű ű ű Ú ű

ó ú ú ü ú ő ó ő ő ó ó ó ö ó ü ő ó ő ö ü ü ó ö ő É ó ö ö ö ó ó ö ü ü ö ü ó ó ő ó ü ó ü ü ö ö É ú ó ó ö ú ö ü ü ó ó ó ü Á ö ö ü ó ö ó ö ö ö ö ó ó ö ó ó

í ó í ó ó ó í í ü ú í ú ó ó ü ü í ó ü ú ó ü í í ü ü ü ó í ü í ü ü í ü ü í ó ó ó í ó í ü ó í Á

í í í í ó í ó ö ö í ű ü ó ó ü ú Á Á ó ó ó ó ó ó í ó ö ö ü Ó ö ü í ö ó ö í í ö í ó ó í ö í ú ó ú í ö ú ö ö ö í ó ó ó ú ó ü ó ö í ó ó í í í Á í ó ó ó

Ü ü Ü Ö Ó ö ü ö Ó Ú Ó ü Ó ö ö Á ö ö ö ö ü

ü ö ö ő ü ó ó ú ó

ű ú ü ü ü Í ü ö ü ö ü ö ü Ó ü ö ü ö ö ü ű ű ú ü ö ö ü Ó ö ű ü ö ú ö ö ü ü ű ü ü ö ö ü ü ú ö ö ü ü ú ü

Bevezetés a programozásba I.

É Ö Á Í Á Ó Ö ü

Átírás:

D X F F Á J L K É S Z Í T É S E M A T L A B B A L Feladat egy szöveges állományban tárolt koordinátajegyzék beolvasása, majd ebből DXF vonallánc készítése, AutoCAD-be történő beolvasása. Az xydata.txt állományban pontok koordinátái vannak eltárolva. 6.784537e+1 3.754498e+1 6.7616798e+1 3.7562482e+1 6.798632e+1 3.7412988e+1 Ezek a pontok egy folytonos vonal pontjai. Olvassuk be őket MATLAB-ba, majd készítsünk belőle egy alap DXF fájlt, ahol a pontok vonallánccal vannak összekötve! A feladat első része nagyon egyszerű, mivel a fájlban azonos típusú adatok vannak azonos sorhosszakkal, így a megoldás történhet az egyszerű load paranccsal, majd válogassuk szét őket x és y koordinátákra! clear all;clc; % Korabbi valtozok torlese, command window torlese load 'xydata.txt' % Koordinatak beolvasasa txt fajlbol x=xydata(:,1); % x koordiinatak vannak az elso oszlopban y=xydata(:,2); % y koordinatak pedig a masodik oszlopban plot(x,y,'r+'); % Pontok felrajzolasa Ezután jön a DXF fájl készítése, amihez ismernünk kell a DXF fájlok szerkezetét (lásd mellékelt DXF segédlet!). Először nyissuk meg írásra a fájlt, amibe menteni szeretnénk a vonalláncot! filename='xypolyline.dxf'; % Fajlnev megadasa fid=fopen(filename,'w'); % Fajl megnyitasa írasra Az adott fájlban egy darab folytonos vonal pontjai találhatóak. Ha ezt AutoCAD-ben szeretnénk megjeleníteni, akkor választhatjuk a vonal, vagy a vonallánc parancsot is. A vonal esetében két pontot kell megadnunk, kezdőpont, végpont. Egy folytonos vonal esetében ez azt jelentené, hogy a közbülső pontokat duplán kellene megadni, egyszer, mint az előző vonal végpontja, majd mint a következő vonal kezdőpontja. A vonallánc célszerűbb ilyenkor, amikor minden pontot egyszer adunk meg csomópontként. 1

Példa DXF vonalláncra: SECTION 2 ENTITIES POLYLINE 8 vonal 66 1 1 VERTEX 8 2 vonal 1 32.65 2 67.89 SEQEND ENDSEC EOF Szekció eleje Rajzi elemek szekció követezik Vonallánc típusú elem Rétegmegadás kódja vonal a réteg neve Csomópontok következnek értéke mindig 1 Csomópont következik Rétegmegadás kódja vonal a réteg neve X koordináta (kezdőpont) 32.65 Y koordináta (kezdőpont) 67.89 Csomópontok vége Szekció vége Fájl vége A fenti példa mutatja egy egyszerű vonallánc szerkezetét DXF fájlban. A sorok kettesével összetartoznak, először egy kód van, hogy mi fog következni (pl. szekció eleje, vége, vonallánc típusú rajzi elem, rétegmegadás, szín stb.,, utána pedig a hozzá tartozó érték, vagy az érték kódja). A fájl első része teljesen általános, szekció eleje, rajzi elemek szekció (az összes többi szekció fejléc, táblák, blokkok stb. kihagyható. Meg kell adni a rajzi elem típusát is (vonallánc-polyline), hogy milyen rétegre kerüljön, majd utána következnek a csomópontok, 66-os kód az elején, majd VERTEX megnevezéssel az egyes csomópontok. A fájl végén jön egy csomópontok vége jel, majd szekció vége, fájl vége. Ha esetleg a vonallánc színét is szeretnénk az alapértelmezettről másra megváltoztatni, akkor még a csomópontok megadása előtt van erre is lehetőségünk. A 62-es kód jelenti a színt, utána pedig az adott szín kódja jön pl az AutoCAD-ben: 1-piros, 2-sárga, 3-zöld, 4- világoskék, 5-sötétkék, 6-lila, 7-fekete/fehér, 8-szürke. 1 A 66-os kód jelöli, hogy csomópontok következnek, ez nem minden CAD programnál kötelező elem, de a tanszéki AutoCAD MAP 28 változatnál igen. 2 Lásd mint előbb. Nem minden CAD programnál kötelező minden csomópontnál megadni a réteg nevét is, de az AutoCAD MAP 28 esetében igen. 2

Írjunk a fájl elejére egy megjegyzést, hogy ez egy MATLAB-bal készült vonallánc. A DXFben a megjegyzés kódja a 999, az AutoCAD a 999 után következő sort nem olvassa be, azt megjegyzésnek tekinti. MATLAB-ban ezt az fprintf használatával írhatjuk ki a fájlba. fprintf(fid,' 999\r\nPolyline with matlab\r\n'); % Megjegyzes - 999 Be kell iktatnunk sorvége jeleket is a fájlba \r\n, itt vegyük figyelembe, hogy a sorvége karaktert különböző operációs rszerek máshogy jelölik. A sor vége jel Windows esetében: \r\n, Mac (OS 9-) esetében \r, Unix/Linux esetében: \n. Az adott programtól is függ, hogy mit tud értelmezni sor végének. Sok olyan program van, ami mind a \n mind a \r\n jelet elfogadja. Ilyen például a Wordpad, de ha Notepad-et használunk, akkor az csak a \r\n jelet tudja értelmezni. Ugyanígy van olyan CAD program, ami elfogadja mindkét jelölést, de van, ami csak a \r\n-t Windows alatt. A következőkben adjuk meg a szükséges szekció eleje stb. parancsokat a csomópontokig! fprintf(fid, ' \r\nsection\r\n 2\r\nENTITIES\r\n'); % Uj szekcio, rajzi egysegek szekcio fprintf(fid,' \r\npolyline\r\n 8\r\nvonal\r\n 66\r\n1\r\n'); % Vonallanc típus, 'vonal' retegre, csomopontok kovetkeznek A csomópontok megadását egy ciklussal tudjuk megoldani fprintf használatával, ahol a koordinátákat a megfelelő vektorból vesszük. Utána írjuk ki a csomópontok, szekció és fájl vége kódokat. Végül zárjuk le a fájlt és nézzük meg, hogy mi került a fájlba! for i=1:length(x) fprintf(fid,' \r\nvertex\r\n 8\r\nvonal\r\n 1\r\n%f\r\n 2\r\n%f\r\n',x(i),y(i)); % uj csomopont, reteg neve, x es y koordinata megadasa fprintf(fid,' \r\nseqend\r\n \r\nendsec\r\n \r\neof\r\n'); % csomopontok vege, szekcio vege, fajl vege fclose(fid); % Fajl bezarasa type('xypolyline.dxf') % Eredmeny kiiratasa kepernyore Az fprintf-nél %f-fel adjuk meg, hogy a beilleszteni kívánt x(i), y(i) egy lebegőpontos szám típus. Nyissuk meg az eredmény fájlt és nézzük meg mit ábrázol! Mentsük el a rajzunkat az AutoCAD-ből is dxf fájlként. Nézzük meg a különbséget az általunk létrehozott és az elmentett között. Mindkettő ugyanazt a rajzot tartalmazza, de amíg az általunk létrehozott dxf fájl pár száz sorból áll, addig az AutoCAD által elmentett fájl több, mint 15 sorból, pedig ugyanazt ábrázolja mindkettő! Ez nagyrészt a plusz fejléc (HEADER) szekció miatt van, amiben különböző változók értékei kerülnek elmentésre. 3

DXF FÁJLBÓL KOORDINÁTÁK KINYERÉSE Nézzük meg röviden a feladat fordítottját, ha egy AutoCAD által dxf-be elmentett vonalláncból szeretnénk kinyerni a koordinátákat és egy szöveges állományba elmenteni! Ezt a következő programmal tehetjük meg. clear all; clc; page_screen_output(); % laponkenti megjelenites leallitasa Octave-ban fid=fopen('satellite_polyline.dxf'); szoveg=textscan(fid,'%s') fclose(fid); t=szoveg{1}; % clear szoveg; x=[];y=[]; for i=1:length(t) s=t{i}; if strcmpi(s,'vertex') x1=str2num(t{i+6}); y1=str2num(t{i+8}); x=[x;x1]; y=[y;y1]; plot(x,y,'r+') xy=[x y] save xydata.txt xy -ascii Ehhez a textscan paranccsal beolvashatjuk az egész fájlt egy cella tömbbe (szoveg). Ez egy 1x1-es méretű cella tömb, aminek az első (és egyetlen eleme) egy 153x1 méretű cella lesz (t), azaz minden sor (elem) egy cellába kerül. Az AutoCAD által elmentett fájlban meg kell vizsgálni a csomópontok szerkezetét: VERTEX 5 21A 8 1 67.84536693976 2 37.54497719354967 3. Itt a csomópontot jelző VERTEX után a 6. sorban van az x és a 8. sorban az y koordináta, amire nekünk szükségünk van. Egy for ciklusban menjünk végig a cella elemeken és keressük meg a VERTEX elemeket (strcmpi string összehasonlítás parancs), majd tároljuk le, az őt követkő 6. és 8. elemet az x és y változókba! Ezeket előbb számmá kell konvertálni a str2num paranccsal. Ezután már csak el kell menteni a mátrixot a save paranccsal szöveges állományba. 4

AZ ÁLTALUNK KÉSZÍTETT MATLAB PROGRAMOK SZÖVEGES ÁLLOMÁNYBÓL KOORDINÁTA BEOLVASÁS ÉS DXF VONALLÁNC KÉSZÍTÉSE: %% Koordinatakat olvasunk be egy txt fajlbol, majd polyline-kent kiíratjuk %oket egy dxf fajlba, a dxf strukturanak megfeleloen clear all;clc; % Korabbi valtozok torlese, command window torlese load 'xydata.txt' % Koordinatak beolvasasa txt fajlbol x=xydata(:,1); % x koordiinatak vannak az elso oszlopban y=xydata(:,2); % y koordinatak pedig a masodik oszlopban plot(x,y,'r+'); % Pontok felrajzolasa filename='xypolyline.dxf'; % Fajlnev megadasa fid=fopen(filename,'w'); % Fajl megnyitasa írasra fprintf(fid,' 999\r\nPolyline with matlab\r\n \r\nsection\r\n 2\r\nENTITIES\r\n'); % Megjegyzes-999, uj szekcio, rajzi egysegek szekcio fprintf(fid,' \r\npolyline\r\n 8\r\nvonal\r\n 66\r\n1\r\n'); % Vonallanc típus, 'vonal' retegre, csomopontok kovetkeznek for i=1:length(x) fprintf(fid,' \r\nvertex\r\n 8\r\nvonal\r\n 1\r\n%f\r\n 2\r\n%f\r\n',x(i),y(i)); % uj csomopont, reteg neve, x es y koordinata megadasa fprintf(fid,' \r\nseqend\r\n \r\nendsec\r\n \r\neof\r\n'); % csomopontok vege, szekcio vege, fajl vege fclose(fid); % Fajl bezarasa type('xypolyline.dxf') % Eredmeny kiíratasa kepernyore DXF FÁJLBÓL KOORDINÁTÁK KINYERÉSE clear all; clc; fid=fopen('satellite_polyline.dxf'); szoveg=textscan(fid,'%s') fclose(fid); t=szoveg{1}; % clear szoveg; x=[];y=[]; for i=1:length(t) s=t{i}; if strcmpi(s,'vertex') x1=str2num(t{i+6}); y1=str2num(t{i+8}); x=[x;x1]; y=[y;y1]; plot(x,y,'r+') xy=[x y] save xydata.txt xy -ascii 5