BME Építészmérnöki Kar,
Építészeti Ábrázolás Tanszék.
CAAD és Építészinformatika, VBA
programozás (Excel, AutoCAD)
Előadó: dr. Peredy
József prof. em.
3. Feladat. Lelátó
vázlatos térbeli modelje AutoCAD-ben.
Az AutoCAD rendszer VBA programozása során maga
a programozási technika ugyanaz, mint amivel az Excel-lel kapcsolatban
találkoztunk. Új feladat azonban az AutoCAD objektumainak, azok
tulajdonságainak és a velük kapcsolatos módszereknek a VBA programba való
beillesztése. Az Excel esetében nagy segítség volt e tekintetben az, hogy a
kézi munkánkat közvetlenül lejegyeztethettük VBA makrók formájában, és ezeket
az automatikusan lejegyzet makrókat saját programjaink építőköveiként
használhattuk. Az AutoCAD-nél ilyen lehetőség nem áll rendelkezésre, ehhez
az AutoCAD túl bonyolult. A prograjainkban az AutoCAD objektumok létrehozását,
kezelését kezdettől fogva magunknak kell megírni, ehhez azonban az AutoCAD
Helpje igen hatékony segítséget nyújt. Innen a szükséges utasításokat a
szokásos (pl. A Word-ben is alkalmazott) módon akár ki is másolhatjuk és
programunkba beilleszthetjük. Építőkövek tehát itt is vannak, talán csak
megkeresésük nehezebb. Első AutoCAD-programozási feladatként egy kis
szabadtéri lépcsős lelátó vázlatos térbeli modeljét fogjuk elkészíteni.
3.1 Egy hasáb létrehozása VBA
programból. Objektumok, módszerek
Az AutoCAD VBA programozásánál az első
eltérés az Excel esetében látottakhoz képest az, hogy intenzíven használnunk
kell bizonyos Help fájlokat, elsősorban az AutoCAD Help/Developer Help/ActiveX
and VBA Reference című anyagot.. Kezdjük az ismerkedést egy hasáb
létrehozásával. Az ehhez szükséges VBA szubrutin az alábbi:
Sub Egyhasab()
Dim elhPont(0 To 2) As Double
Dim test As Acad3DSolid
elhPont(0)
= 200
elhPont(1)
= 100
elhPont(2) = 0
Set
test = ThisDrawing.ModelSpace.AddBox(elhPont, 35#, 68#, 60#)
End Sub
A program lényegi része a Set kulcsszóval
kezdődő, utolsó előtti sor. Itt az AddBox(elhPont,
35#, 68#, 60#) módszer (Method) hozza létre a kívánt hasábot.. A módszer
alkalmazása előtt, a már ismert redszer szerint meg kell nevezni azt a
sokaságot (Collection), amihez
az új objektumot csatolni akarjuk. Ez az éppen munkában lévő rajz (ThisDrawing ) „modelltere”. A modelltér (ModelSpace) az a sokaság, amihez egy rajzot, vagy tőmegvázlatot
alkotó valamennyi geometriai objektum tartozik, összes tulajdonságával együtt.
Egy rajz, vagy tömegvázlat létrehozása során a modelltérhez adunk hozzá
objektumokat, vagy a modelltér már korábban létrehozott objektumait módosítjuk.
Az új objektumok létrehozása a Set kulcsszóval kezdődő értékadó utasítással történik. Az új
objektumokat létrehozó módszereket a jelen pont elején említett Help helyen
találjuk meg. Megnyitva a Methods listát megtaláljuk az AddBox módszert s erre klikkelve megjelenik a szóbanforgó módszer saját
helpje, a helyes használathoz szükséges
valamennyi információval, többek között a paraméterek jelentésének leírásával.
Rendszerint kis mintaprogramot (Example) is találunk, amelyet akár ki is másolhatunk, és beilleszthetünk saját
programunkba (természetesen a szüksége módosításokkal). A Set utasítás egyenlőségjele előtt álló
objektumnévet mi adjuk, de típusát deklarálni kell, amint azt a fenti szubrutin
harmadik sora mutatja. (Azt, hogy milyen típus tarozik ez egyes hozzáadó (Add) módszerekhez, a helpjük mutatja, de a szóbajövő
típusokat a programírás során az As
kulcsszó beütése után a rendszer ki is jelzi. Figyeljük meg még azt is, hogy a
háromdimenziós testmodellezés sorár a térbeli pontok három koordinátáját egy
három elemből álló tömbbe célszerű összevonni, és a hasáb
középpontjának meghatározását az AddBox módszer is ilyen formában várja el.
3.2 Egy lelátó vázlatos térbeli modellje
Az Egyhasab() szubrutin megírása során szerzett ismeretek
birtokában és a VBA programozásnak a Excel keretében való alkalmazásánál már alkalmazott eszközeinek a
felhasználásával már könnyen
létrehozhatjuk az elemi hasáboknak egy lejtős terepre való
megfelelő elhelyezésével előálló egyszerű lelátó térbeli
modelljét. Erre szolgál az alábbi szubrutin:
Public Sub
Lelátó()
Dim
i As Integer, j As Integer 'A ciklusváltozók
Dim
elhPonta(0 To 2) As Double 'Az egyes hasábok elhelyezési pontja
Dim
elhPont1(0 To 2) As Double 'A lelátó első hasábjának elhelyezési pontja
Dim
test As Acad3DSolid 'Az elhelyezendő AutoCAD test
elhPont1(0)
= 200
elhPont1(1)
= 100
elhPont1(2)
= 0
For
j = 0 To 4 ’Az öt üléssort elhelyező ciklus indítása
elhPonta(0)
= elhPont1(0) - 35 * j ’A következő sor első hasábjának az x koordinátája
elhPonta(2)
= elhPont1(2) + 15 * j ’A következő sor első hasábjának a z koordinátája
For
i = 0 To 5 + j ’A
soronként eggyel több hasábot elhelyező ciklus indítása
elhPonta(1) = elhPont1(1) + 70 * i - 35 * j ’Az egyes hasábok y koordinátája
Set test =
ThisDrawing.ModelSpace.AddBox(elhPonta, 35#, 68#, 60#) ’Az egyes hasábok elhelyezése
Next
i
Next
j
End Sub
Láthatjuk, hogy egy külső ciklus veszi
sorra az üléssorokat, és egy belső ciklus építi be az egyes üléssorokat
képező hasábokat. Ez a kis példa azt is mutatja, hogy a VBA rendszerben a
programozás fő részei és eszközei a felhasználói rendszertől
függetlenek, csak azokon a helyeken van eltérés (esetünkben az Excel és az
AutoCAD között), ahol közvetlenül az alkalmazói rendszer objektumainak
felhasználásáról van szó