| <<Elöző rész | Tartalom | Következő rész>> |
Az előző részben a Visual Basic for Application-nal való ismerkedés során zömében a felhasználói felület kialakításával foglalkoztunk egy mintapélda alapján. Most szintén egy példán keresztül az AutoCAD-hez kapcsolódó Visual Basic objektumokkal foglalkozunk.
Gyakran kerültem olyan helyzetbe amikor egy rajzi állomány tartalmát, struktúráját kellett ellenőriznem. Az AutoCAD MAP rajztisztítási és topológia létrehozó funkciói sokat segítenek a rajz vagy térkép szerkesztése során elkövetett hibák megtalálásában. Tapasztalataim szerint sokszor fordul elő, hogy egy-egy rajzelem nem a megfelelő rétegre kerül. Az ilyen hibák kimutatásához készítsünk egy Visual Basic Makrót, mely leltárt készít a rajzunkról. A leltár tartalmazza, hogy milyen rétegek szerepelnek a rajzban és, hogy az egyes rétegeken a különböző típusú rajzi elemből hány darab szerepel. Az eredményeket a rajz nevével egyező ".OUT" kiterjesztésű fájlba írjuk ki.A munka megkezdése előtt indítsuk el az AutoCAD 2000-t (vagy az AutoCAD 2000 alapú alkalmazását). Majd a Visual Basic szerkesztőbe lépjünk be az ALT-F11 billentyűk megnyomásával, vagy a menüből a Tools>Macro>Visual Basic Editor kiválasztásával. A megjelenő ablakot használhatjuk Visual Basic programok létrehozására és módosítására.
A munkánkat a Visual Basic projektekbe szervezi, egy projekt AutoCAD objektumokból és modulokból áll. A projekt valamennyi modulját egy .DVB kiterjesztésű fájl tartalmazza, bináris formátumban (azaz egy szövegszerkesztő, pl. Notepad segítségével nem tudjuk megnézni a tartalmát). Minden projekthez automatikusan létrejön egy "ThisDrawing" nevű AutoCAD specifikus objektum, melynek segítségével az aktuális rajz tartalmával dolgozhatunk. Három típusú modult adhatunk a projektünkhöz, párbeszéd ablakot (UserForm), kód modult (Module), osztály modult (Class Module). A párbeszéd ablak modul a párbeszéd ablak grafikus elemeit és a hozzájuk kapcsolódó Visual Basic kódot tartalmazza, ilyen modult készítettünk az előző részben szereplő "Pontok felrakása" című részben. A kód modul csak Visual Basic eljárásokat és függvényeket tartalmaz, ilyen modult fogunk létrehozni ebben a példában. Az osztály modul segítségével saját objektum osztályt hozhatunk létre, az objektum osztályhoz tulajdonságokat és metódusokat adhatunk hozzá. Az új projekt neve ACADProject lesz automatikusan. Már létező projektet a Tools>Macro>Load Project vagy VBA Manager menüpontjának segítségével tölthetünk be. Egyszerre több projektet is nyitva tarthatunk.
Változtassuk meg a projektünk nevét "ACADProject"-ről "Leltár"-ra. Először kattintsunk a projekt ablakban az ACADProjekt szövegre, ezután a Properties (Tulajdonságok) ablakban módosíthatjuk a projekt nevét, a projektnek csak ez az egy tulajdonsága (adata) van.
Mielőtt tovább mennék a makró elkészítésében ismerkedjünk meg a projekthez tartozó további beállítási lehetőségekkel. A Tools>Options menüpont kiválasztása után az 1. Ábrán látható többfüles párbeszéd ablak jelenik meg. Az Editor fülön a makró írás közbeni segítő, ellenőrző funkciókat, az Editor Format fülön a szövegszerkesztő ablakban megjelenő betűtípusokat és színeket, a General fülön további, a párbeszéd ablak szerkesztőre és fordításra vonatkozó paramétereket, a Docking fülön pedig a Visual Basic fejlesztőkörnyezet ablakainak dokkolt vagy szabadon mozgatható állapotát állíthatjuk be.

1 ábra Projekt beállítások
Az Editor fülön található beállítások jelentése a következő.
Ebben a példánkban csak egy kód modult kell hozzáadni a projektünkhöz. Új kód modult az Insert>Module menüpont vagy a projekt ablak jobb egérgomb menü Insert>Module menüpontjának segítségével adhatunk az aktuális projekthez. A kód modulnak szintén csak egy tulajdonsága van, a neve. A modul nevét a projekt nevéhez hasonlóan változtathatjuk meg. Jelöljük ki a projekt ablakban az egérrel a modulunkat, majd a projekt ablakban megjelenő név (Name) mellett megjelenő Module1 nevet módosíthatjuk. Az új modulhoz egy szövegszerkesztő ablak is megnyílik, melyben az Option Explicit utasítás is megjelenik, ha a kötelező változó deklarációt (Require Variable Declaration) beállítottuk a projekt beállításai között.
Mivel csak egy Basic eljárásból áll a programunk, a forráskód sorszámozott listáját közöljük és a sorszámokra hivatkozom a magyarázatok során. A mellékelt Basic kódot közvetlenül be lehet gépelni a sorszámok nélkül, de a innen is letölthető a leltar.dvb projekt.
A második sor tartalmazza a dwg_list nevű eljárás fejlécét. A Public kulcsszó azt jelenti, hogy ezt az eljárást más modulokból is meg lehet hívni. A Public ellentettje a Private kulcsszó, a privát eljárásokat csak azok a függvények, eljárások hívhatják meg, melyek ugyanabban a modulban találhatók. Az eljárás neve után álló nyitó és záró zárójel pár azt jelenti, hogy nincsenek paraméterei az eljárásnak. Csak ilyen eljárások hajthatók végre közvetlenül az AutoCAD-ből a makró futtatás paranccsal (Tools>Macro>Macros a menüből vagy Alt-F8 a billentyűzetről), ezeket rendelhetjük hozzá egy menüponthoz vagy az eszköztár egy eleméhez. A 4. sorban található feltétel megvizsgálja, hogy van-e nyitott dokumentum (AutoCAD rajz), ha nincs akkor egy üzenet kiírása után befejeződik az eljárás végrehajtása (Exit Sub). A nyolcadik és harminckettedik sor között a változók deklarációja szerepel. Az "Option Explicit" utasítás miatt valamennyi változót deklarálnunk kell. A nyolcadik sorban szereplő AcadObject típusú változó bármelyik AutoCAD rajzelemet tartalmazhatja, ebből származtatott objektumok az egyes konkrét rajzelemekhez tartozó objektumok, mint például a AcadLine, AcadArc, stb. A 12. sor végén levő aláhúzás karakter azt jelenti, hogy az utasítás a következő sorban folytatódik. A 14-32 sorok közötti ReDim utasításokkal az aktuális rajz rétegeinek számával egyező méretű tömböket hozunk létre, a különböző típusú rajzelemek rétegenkénti számának a tárolásához. Erre a célra a Dim utasítás közvetlenül nem alkalmas, mert ott csak konstans érték szerepelhet a tömb maximális indexének a helyén. A tömbök deklarációjában a zárójelben a legnagyobb tömbindex értéke szerepel, a tömbindexek pedig nullától kezdődnek. Ezért szerepel a rétegek számánál eggyel kisebb érték a deklarációkban.
A ThisDrawing egy AcadDocument típusú objektum, ennek eleme a Layers, mely az aktív rajz valamennyi rétegét tartalmazza. A VBA AutoCAD objektumai között több, a Layers-hez hasonló gyűjtemény (collection) található. A 2. Ábra mutatja be az AutoCAD objektum modell példánk szempontjából lényeges elemeit.

2. ábra AutoCAD objektum modell (részlet)
A 34. sorban szereplő feltétel azt vizsgálja, hogy az aktív rajzunknak van-e már neve. Erre azért van szükség, mert a rajzról összegyűjtött adatokat a rajz nevével egyező .OUT kiterjesztésű fájlba írjuk ki, ha még nem mentettük el a rajzunkat akkor a név helyén üres sztring szerepel, ami hibához vezetne.
A 41-58 sorokban a teljes rajzra vonatkozó különböző típusú elemek számát tároló változókat inicializáljuk. A 60-79 sorok közötti ciklusban beszerezzük valamennyi réteg nevét és a rétegenkénti különböző típusú rajzelemek számát inicializáljuk. A Layers gyűjtemény Item tulajdonságán keresztül szerezzük be a rajzban szereplő rétegek nevét. Minden gyűjtemény (collection) tartalmaz Count és Item tulajdonságokat. Az Item egy tömb, melyben az indexek nullától kezdődnek. Rétegek esetén az Item paramétereként nem csak egy egész értéket használhatunk, hanem a réteg nevét is, például ThisDrawing.Layers.Item("0").Color a nullás réteg színe.
A 80-89 sorokban szereplő egymásba ágyazott ciklusok a names tömbben összegyűjtött rétegnevek ABC sorrendbe rendezését szolgálják. Nem állítom, hogy a leghatékonyabb rendezési módszert alkalmaztam, de pár tíz rétegnév esetén ez is kielégítő.
A kilencvenedik sorban kezdődő és a 143. sorban befejeződő ciklus végzi el a rajzi elemek rétegenkénti megszámlálását. A ModelSpace a Layers-hez hasonló objektum gyűjtemény. A gyűjtemény elemeinek végigjárásához itt nem az Item tömböt használjuk (vö 61. sor). A "For Each" ciklus ent változója a modelltérben lévő elemek értékeit veszi fel a ciklus végrehajtása során. Ez egy biztonságosabb megoldás a gyűjtemény elemeinek végigjárására, a Count és Item tulajdonságokra épülő ciklus csak akkor működik helyesen, ha a ciklus végrehajtása során nem változik meg az objektum gyűjtemény tartalma. Azaz, ha új elemeket adunk a gyűjteményhez vagy elemeket törlünk, akkor muszáj a For Each ciklust használnunk. Bár ebben a ciklusban szereplő utasítások nem változtatják meg a modelltér gyűjtemény tartalmát, didaktikai okokból használtam ezt a megoldást.
A 92-96 sorokban szereplő utasítások az aktuális rajzelem rétegének (ent.Layer) a sorszámát keresik ki. A Select utasítás pedig a rajzelem típusa (ent.EntityType) alapján megnöveli az i. rétegen szereplő megfelelő elemek számát. Az ac3dFace, ac3dSolid stb. konstansokat a VBA szolgáltatja. A számlálás során bizonyos egyszerűsítéseket alkalmaztam, a különböző 3D-s elemeket és a különböző méretezéseket együtt számlálom, néhány objektum típust kihagyok a leltárból (acAttribute, acGroup, acPViewport, acRay, acTrace, acXline).
Valamennyi rajzelem figyelembe vétele után nem marad más mint az eredmények fájlba írása. Az eredmény fájl neve megegyezik a rajz nevével, csak a kiterjesztést cserélem .DWG-ről .OUT-ra (145.,146. sor). A kiírás során a szép táblázatos formátum kialakítása érdekében a Space és Len függvényeket használtam. A Utility objektum RealToString metódusát használtam a számok szöveggé alakítására, erre azért volt szükség, hogy egységesen négy tizedes jegyre jelenjenek meg a rajzi határok értékei. Emellett a Utility objektum az interaktív parancsok kialakításhoz szükséges metódusokat tartalmazza. Az eredmény listában az üres rétegeket a név után megjelenő "*" karakterrel jelölöm meg. Ezt a 174. sorban állítom be.
Az elkészített vagy a letöltött leltar.dvb projektet be kell töltenünk, csak utána használható a dwg_list makró. A Tools>Macro>Load project menüpont segítségével tölthetünk be egy már létező projektet. A megjelenő fájl kiválasztó ablakban kell kiválasztanunk a betöltendő projektet. Az AutoCAD-ben alapértelmezésben a projektek önálló fájlba (.DVB) kerülnek, de a DWG fájlba is beágyazhatunk egy projektet. Ebben az esetben maga a rajz tartalmazza makrókat, nem kell külön betölteni őket. A projekt rajzba ágyazását a VBA Manager segítségével hajthatjuk végre (Embed). A most elkészített leltár projektet nem célszerű rajzba ágyazni, mert ez általános funkciót valósít meg, melyet minden rajz esetén használhatunk. A beágyazás mellett további két módszert használhatunk a Visual Basic projektek automatikus betöltésére. A megnyitott rajzzal azonos könyvtárban levő ACAD.DVB nevű fájlt automatikusan betölti az AutoCAD. Az AutoCAD Support alkönyvtárában elhelyezett ACAD.DVB fájlt az AutoCAD indításakor automatikusan betöltésre kerül. A program letölthető innen.
dr. Siki Zoltán
db_samp.dwg
Terjedelem
xmin= 843.0000 ymin= 843.0000 zmin= 0.0000
xmax= 3431.4502 ymax= 3384.0049 zmax= 97.5000
Réteg pont vonal vonal könnyü 3D szöveg shape kör körív splin blokk attri ellip sraff régió solid 3D Méret
lánc lánc lánc
--------------------------------------------------------------------------------------------------------------------------------------------
0 0 2 0 0 0 0 0 0 0 0 99 0 0 0 0 0 0 0
A-DOOR-TRIM-3D 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CHAIRS 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0
CPU 0 0 0 0 0 0 0 0 0 0 54 0 0 0 0 0 0 0
E-B-CORE 0 318 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-B-ELEV 0 4 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-B-FURR 0 349 0 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-B-GLAZ 0 129 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-B-MULL 0 0 0 168 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-B-SHEL 0 174 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-C-HEAD 0 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-F-CASE 0 6 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0
E-F-DOOR 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 0 0 0
E-F-PLMB 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-F-SILL 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-F-STAIR 0 211 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-F-TERR 0 303 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E-S-COLM 0 2 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0
EMPLOYEE 0 0 0 0 0 53 0 0 0 0 0 0 0 0 0 0 0 0
FILE_CABINETS 0 6 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
FURNITURE 0 0 0 0 0 0 0 0 0 0 102 0 0 0 0 0 0 0
GRID-08 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0
GRIDLN 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
IDOORE 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0
IWALLE 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PANELS_201 0 108 0 1910 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PHONES 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 0 0 0
PRINTER_ISLAND 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0
RMNUM * 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--------------------------------------------------------------------------------------------------------------------------------------------
29 rétegen összesen 0 1737 0 2193 0 55 0 0 0 0 437 0 0 0 0 0 0 0
1 Option Explicit
2 Sub dwg_list()
3 ' informació az aktuális rajz rétegeinek tartalmáról
4 If Documents.Count = 0 Then
5 MsgBox "Nincs nyitott dokumentum"
6 Exit Sub
7 End If
8 Dim ent As AcadObject
9 Dim i, j, f As Integer
10 Dim c, w, fname As String
11 Dim extmi, extma As Variant
12 Dim sli, stx, siv, spl, slw, sbl, sci, sdi, spt, sp3, sd3, _
13 ssh, ssp, sat, sel, sha, sre, sso As Integer
14 ReDim names(ThisDrawing.Layers.Count - 1) As String
15 ReDim li(ThisDrawing.Layers.Count - 1) As Integer ' vonal
16 ReDim tx(ThisDrawing.Layers.Count - 1) As Integer ' szöveg
17 ReDim iv(ThisDrawing.Layers.Count - 1) As Integer ' ív
18 ReDim pl(ThisDrawing.Layers.Count - 1) As Integer ' vonallánc
19 ReDim lw(ThisDrawing.Layers.Count - 1) As Integer ' könnyű vonallánc
20 ReDim bl(ThisDrawing.Layers.Count - 1) As Integer ' blokk
21 ReDim ci(ThisDrawing.Layers.Count - 1) As Integer ' kör
22 ReDim di(ThisDrawing.Layers.Count - 1) As Integer ' méretezés
23 ReDim pt(ThisDrawing.Layers.Count - 1) As Integer ' pont
24 ReDim p3(ThisDrawing.Layers.Count - 1) As Integer ' 3d vonallánc
25 ReDim d3(ThisDrawing.Layers.Count - 1) As Integer ' 3d objektumok
26 ReDim sh(ThisDrawing.Layers.Count - 1) As Integer ' shape
27 ReDim sp(ThisDrawing.Layers.Count - 1) As Integer ' spline
28 ReDim at(ThisDrawing.Layers.Count - 1) As Integer ' attribútum definíció
29 ReDim el(ThisDrawing.Layers.Count - 1) As Integer ' ellipszis
30 ReDim ha(ThisDrawing.Layers.Count - 1) As Integer ' sraffozás
31 ReDim re(ThisDrawing.Layers.Count - 1) As Integer ' régió
32 ReDim so(ThisDrawing.Layers.Count - 1) As Integer ' szolid
33
34 If ThisDrawing.FullName = "" Then
35 ' meg nincs elmentve igy nem tudunk nevet adni az eredmény fájlnak
36 MsgBox "Mentse el előbb a rajzot és indítsa újra a makrót"
37 Exit Sub
38 End If
40 ' változók inicializálása
41 sli = 0 ' vonalak száma a rajzban
42 stx = 0 ' szövegek száma a rajzban
43 siv = 0 ' körívek száma a rajzban
44 spl = 0 ' vonalláncok száma a rajzban
45 slw = 0 ' könnyű vonalláncok száma a rajzban
46 sbl = 0 ' blokk beillesztések száma a rajzban
47 sci = 0 ' körök száma a rajzban
48 sdi = 0 ' méretvonalak száma a rajzban
49 spt = 0 ' pontok száma a rajzban
50 sp3 = 0 ' 3D-s vonalláncok száma a rajzban
51 sd3 = 0 ' 3D-s objektumok száma a rajzban
52 ssh = 0 ' shape beillesztések száma a rajzban
53 ssp = 0 ' spline görbék száma a rajzban
54 sat = 0 ' blokk attribútumok száma a rajzban
55 sel = 0 ' ellipszisek száma a rajzban
56 sha = 0 ' sraffozások száma a rajzban
57 sre = 0 ' régiók száma a rajzban
58 sso = 0 ' szolidok száma a rajzban
59 ' réteg nevek beszerzése
60 For i = 0 To ThisDrawing.Layers.Count - 1
61 names(i) = ThisDrawing.Layers.Item(i).Name
62 li(i) = 0 ' vonalak száma a rétegen
63 tx(i) = 0 ' szövegek száma a rétegen
64 iv(i) = 0 ' ívek száma a rétegen
65 pl(i) = 0 ' vonalláncok száma a rétegen
66 lw(i) = 0 ' könnyű vonallálncok száma a rétegen
67 bl(i) = 0 ' blokk beillesztések száma a rétegen
68 di(i) = 0 ' méretvonalak száma a rétegen
69 pt(i) = 0 ' pontok száma a rétegen
70 p3(i) = 0 ' 3D-s vonalláncok száma a rétegen
71 d3(i) = 0 ' 3D-s elemek száma a rétegen
72 sh(i) = 0 ' shape beillesztések száma a rétegen
73 sp(i) = 0 ' spline görbék száma a rétegen
74 at(i) = 0 ' blokk attribútumok száma a rétegen
75 el(i) = 0 ' ellipszisek száma a rétegen
76 ha(i) = 0 ' sraffozások száma a rétegen
77 re(i) = 0 ' régiók száma a rétegen
78 so(i) = 0 ' szolidok száma a rétegen
79 Next i
80 ' retegnevek rendezese ABC-be
81 For i = 0 To ThisDrawing.Layers.Count - 1
82 For j = i + 1 To ThisDrawing.Layers.Count - 1
83 If names(j) < names(i) Then
84 w = names(j)
85 names(j) = names(i)
86 names(i) = w
87 End If
88 Next j
89 Next i
90 For Each ent In ThisDrawing.ModelSpace ' a modelltér minden elemére
91 ' réteg index kikeresése
92 For i = 0 To ThisDrawing.Layers.Count - 1
93 If ent.Layer = names(i) Then
94 Exit For
95 End If
96 Next
97 Select Case ent.EntityType
98 Case ac3dFace, ac3dSolid, acPolymesh
99 d3(i) = d3(i) + 1
100 Case ac3dPolyline
101 p3(i) = p3(i) + 1
102 Case acArc
103 iv(i) = iv(i) + 1
104 Case acAttribute
105 Case acAttributeReference
106 at(i) = at(i) + 1
107 Case acBlockReference
108 bl(i) = bl(i) + 1
109 Case acCircle
110 ci(i) = ci(i) + 1
111 Case acDimAligned, acDimAngular, acDimDiametric, acDimOrdinate, _
112 acDimRadial, acDimRotated, acLeader, acTolerance
113 di(i) = di(i) + 1
114 Case acEllipse
115 el(i) = el(i) + 1
116 Case acGroup
117 Case acHatch
118 ha(i) = ha(i) + 1
119 Case acLine
120 li(i) = li(i) + 1
121 Case acPoint
122 pt(i) = pt(i) + 1
123 Case acPolyline
124 pl(i) = pl(i) + 1
125 Case acPolylineLight
126 lw(i) = lw(i) + 1
127 Case acRegion
128 re(i) = re(i) + 1
129 Case acShape
130 sh(i) = sh(i) + 1
131 Case acSolid
132 so(i) = so(i) + 1
133 Case acSpline
134 sp(i) = sp(i) + 1
135 Case acText, acMtext
136 tx(i) = tx(i) + 1
137 Case acPViewport
138 Case acRaster
139 Case acRay
140 Case acTrace
141 Case acXline
142 End Select
143 Next ent
144 ' output
145 fname = Left(ThisDrawing.FullName, _
146 InStr(UCase(ThisDrawing.FullName), ".DWG") - 1) & ".out"
147 f = FreeFile
148 Open fname For Output As f
149 ' terjedelem
150 extmi = ThisDrawing.GetVariable("EXTMIN")
151 extma = ThisDrawing.GetVariable("EXTMAX")
152 Print #f, ThisDrawing.Name
153 Print #f, "Terjedelem"
154 w = ThisDrawing.Utility.RealToString(extmi(0), acDecimal, 4)
155 Print #f, " xmin="; Space(12 - Len(w)); w;
156 w = ThisDrawing.Utility.RealToString(extmi(1), acDecimal, 4)
157 Print #f, " ymin="; Space(12 - Len(w)); w;
158 w = ThisDrawing.Utility.RealToString(extmi(2), acDecimal, 4)
159 Print #f, " zmin="; Space(12 - Len(w)); w
160 w = ThisDrawing.Utility.RealToString(extma(0), acDecimal, 4)
161 Print #f, " xmax="; Space(12 - Len(w)); w;
162 w = ThisDrawing.Utility.RealToString(extma(1), acDecimal, 4)
163 Print #f, " ymax="; Space(12 - Len(w)); w;
164 w = ThisDrawing.Utility.RealToString(extma(2), acDecimal, 4)
165 Print #f, " zmax="; Space(12 - Len(w)); w
166 Print #f, " "
167 Print #f, "Réteg";
168 ' táblázat fejléc
169 Print #f, Space(27); " pont vonal vonal könnyü 3D szöveg shape " & _
170 "kör körív splin blokk attri ellip sraff régió solid 3D Méret"
171 Print #f, Space(32); " lánc lánc lánc"
172 Print #f, String(140, "-")
173 For i = 0 To ThisDrawing.Layers.Count - 1
174 c = IIf(pt(i) + li(i) + pl(i) + lw(i) + p3(i) + tx(i) + sh(i) + _
175 ci(i) + iv(i) + sp(i) + bl(i) + at(i) + el(i) + ha(i) + _
176 re(i) + so(i) + d3(i) + di(i), " ", "*")
177 Print #f, names(i); Space(31 - Len(names(i))); c;
178 Print #f, Space(6 - Len(Str(pt(i)))); Str(pt(i));
179 Print #f, Space(6 - Len(Str(li(i)))); Str(li(i));
180 Print #f, Space(6 - Len(Str(pl(i)))); Str(pl(i));
181 Print #f, Space(6 - Len(Str(lw(i)))); Str(lw(i));
182 Print #f, Space(6 - Len(Str(p3(i)))); Str(p3(i));
183 Print #f, Space(6 - Len(Str(tx(i)))); Str(tx(i));
184 Print #f, Space(6 - Len(Str(sh(i)))); Str(sh(i));
185 Print #f, Space(6 - Len(Str(ci(i)))); Str(ci(i));
186 Print #f, Space(6 - Len(Str(iv(i)))); Str(iv(i));
187 Print #f, Space(6 - Len(Str(sp(i)))); Str(sp(i));
188 Print #f, Space(6 - Len(Str(bl(i)))); Str(bl(i));
189 Print #f, Space(6 - Len(Str(at(i)))); Str(at(i));
190 Print #f, Space(6 - Len(Str(el(i)))); Str(el(i));
191 Print #f, Space(6 - Len(Str(ha(i)))); Str(ha(i));
192 Print #f, Space(6 - Len(Str(re(i)))); Str(re(i));
193 Print #f, Space(6 - Len(Str(so(i)))); Str(so(i));
194 Print #f, Space(6 - Len(Str(d3(i)))); Str(d3(i));
195 Print #f, Space(6 - Len(Str(di(i)))); Str(di(i))
196 sli = sli + li(i)
197 stx = stx + tx(i)
198 siv = siv + iv(i)
199 spl = spl + pl(i)
200 slw = slw + lw(i)
201 sbl = sbl + bl(i)
202 sdi = sdi + di(i)
203 spt = spt + pt(i)
204 sp3 = sp3 + p3(i)
205 sd3 = sd3 + d3(i)
206 ssh = ssh + sh(i)
207 ssp = ssp + sp(i)
208 sat = sat + at(i)
209 sel = sel + el(i)
210 sha = sha + ha(i)
211 sre = sre + re(i)
212 sso = sso + so(i)
213 Next i
214 Print #f, String(140, "-")
215 Print #f, Space(4 - Len(Str(ThisDrawing.Layers.Count))); _
216 Str(ThisDrawing.Layers.Count); " rétegen összesen"; Space(11);
217 Print #f, Space(6 - Len(Str(spt))); Str(spt);
218 Print #f, Space(6 - Len(Str(sli))); Str(sli);
219 Print #f, Space(6 - Len(Str(spl))); Str(spl);
220 Print #f, Space(6 - Len(Str(slw))); Str(slw);
221 Print #f, Space(6 - Len(Str(sd3))); Str(sd3);
222 Print #f, Space(6 - Len(Str(stx))); Str(stx);
223 Print #f, Space(6 - Len(Str(ssh))); Str(ssh);
224 Print #f, Space(6 - Len(Str(sci))); Str(sci);
225 Print #f, Space(6 - Len(Str(siv))); Str(siv);
226 Print #f, Space(6 - Len(Str(ssp))); Str(ssp);
227 Print #f, Space(6 - Len(Str(sbl))); Str(sbl);
228 Print #f, Space(6 - Len(Str(sat))); Str(sat);
229 Print #f, Space(6 - Len(Str(sel))); Str(sel);
230 Print #f, Space(6 - Len(Str(sha))); Str(sha);
231 Print #f, Space(6 - Len(Str(sre))); Str(sre);
232 Print #f, Space(6 - Len(Str(sso))); Str(sso);
233 Print #f, Space(6 - Len(Str(sd3))); Str(sd3);
234 Print #f, Space(6 - Len(Str(sdi))); Str(sdi)
235 Close f
236 End Sub
Az eljárás listája
| <<Elöző rész | Tartalom | Következő rész>> |