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ó