home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Houseplan Collection
/
HRCD2005.ISO
/
data1.cab
/
Zusatz
/
3DS
/
DATA2.Z
/
Haeuser.Bas
< prev
next >
Wrap
BASIC Source File
|
1998-05-18
|
12KB
|
337 lines
Attribute VB_Name = "Haeuser"
Option Explicit
' Referenz auf das globale ArCon Control
Public geschoss As ArCon.Story
' Globale Faktoren fⁿr benutzerdefinierte Gr÷▀enanpassung
Public xFaktor As Single
Public yFaktor As Single
' Ein Array mit Wand-Nummern
Private wand(300) As Object
Private anzahlWaende As Integer
Sub ErzeugeEinfachHaus(kZimmer As Integer, kammer As Integer, Laenge As Single, Breite As Single)
Dim name As String
Dim fenster As Object
Dim tuer As Object
' Bestimme den Ma▀stab - unser Original ist 18 m breit und 13 m lang
xFaktor = Breite / 18
yFaktor = Laenge / 13
' Starte das Script - dadurch wird eventuell auch ArCon gestartet
Set Main.ArConEXE = New ArCon.ArCon
If Not Main.ArConEXE.StartMe(Main.hWnd, "") Then
MsgBox "Keine Verbindung zu ArCon+"
Exit Sub
End If
' ZunΣchst einmal ben÷tigen wir ein neues, leeres Projekt mit Standardeinstellungen
Main.ArConEXE.CloseProject
Main.ArConEXE.CreateProject Nothing
' Raster, Nordpfeil und Ursprung nicht anzeigen
Main.ArConEXE.state = Main.ArConEXE.state And Not (ACST_Grid Or ACST_North Or ACST_Origins)
' Bisher haben wir noch keine WΣnder erzeugt
anzahlWaende = 0
' Stockwerk definieren
Set geschoss = Main.ArConEXE.CurrentStory
' Au▀enmauern
NeueWand -10, -7, 7.9, -7
NeueWand 7.9, -7, 7.9, 6
NeueWand 7.9, 6, -10, 6
NeueWand -10, 6, -10, -7
' GΣste-WC
NeueWand -7, -7, -7, -3.9
NeueWand -7, -3.9, -10, -3.9
' Flur
NeueWand -7, -3.9, 0.9, -3.9
NeueWand 0.9, -3.9, 0.9, -7
' Wohnzimmer
NeueWand -2, -3.9, -2, 3
NeueWand -2, 3, -10, 3
' Toilette
NeueWand -2, 3, -2, 6
' Kⁿche
NeueWand -2, -1.38, 7.9, -1.38
' Schlafzimmer
NeueWand 2.9, -1.38, 2.9, 6
' Jetzt bestehen alle RΣume, daher k÷nnen wir sie jetzt mit Namen versehen
' Erster variabler Name: die kleine Kammer
If kammer = 0 Then
name = "GΣste-WC"
ElseIf kammer = 1 Then
name = "Vogel-" + vbCrLf + "voliere"
Else
name = "Dunkel-" + vbCrLf + "kammer"
End If
RaumName -9, -6, name
' Zweiter variabler Name
If kZimmer = 0 Then
name = "Kinderzimmer"
ElseIf kZimmer = 1 Then
name = "Bⁿro"
Else
name = "Hobbyraum"
End If
RaumName -1, 5, name
' Die ⁿbrigen Namen sind fest
RaumName -9, 5, "Toilette"
RaumName -9, 2, "Wohnzimmer"
RaumName -6, -6, "Flur"
RaumName 6, -6, "Kⁿche"
RaumName 7, 5, "Schlafzimmer"
' Fenster sind etwas unⁿbersichtlich, da sie neben der Position und eigenen Parametern
' auch eine Wand ben÷tigen. Die WΣnde sind in der oben erzeugten Reihenfolge
' beginnend bei 0 durchnummeriert. Als Fensterart benutzen wir das erste
' geladene Fenster (bei den konstruierten Fenster sind mehr Angaben erforderlich)
Set fenster = Main.ArConEXE.NewWindow(3)
fenster.Type = Main.ArConEXE.ConstructedWindows
fenster.ParapetHeight = 0.885
fenster.Height = 1.375
fenster.Width = 0.76 * yFaktor
wand(3).PlaceWindow fenster, -10 * xFaktor, -5.45 * yFaktor
wand(3).PlaceWindow fenster, -10 * xFaktor, 4.5 * yFaktor
fenster.Width = 3.5 * yFaktor
wand(3).PlaceWindow fenster, -10 * xFaktor, -0.45 * yFaktor
fenster.Width = 1.5 * yFaktor
wand(1).PlaceWindow fenster, 7.9 * xFaktor, -4.19 * yFaktor
fenster.Width = 2 * yFaktor
wand(1).PlaceWindow fenster, 7.9 * xFaktor, 2.31 * yFaktor
fenster.Width = 1.8 * xFaktor
wand(2).PlaceWindow fenster, -6 * xFaktor, 6 * yFaktor
fenster.Width = 2 * xFaktor
wand(2).PlaceWindow fenster, 0.45 * xFaktor, 6 * yFaktor
wand(2).PlaceWindow fenster, 5.4 * xFaktor, 6 * yFaktor
fenster.Width = 2.2 * xFaktor
wand(0).PlaceWindow fenster, 4.4 * xFaktor, -7 * yFaktor
fenster.Width = 0.76 * xFaktor
wand(0).PlaceWindow fenster, -5 * xFaktor, -7 * yFaktor
' Tⁿren
Set tuer = Main.ArConEXE.NewDoor(0)
tuer.Type = 0
tuer.Width = 1.5
tuer.Height = 2.2
wand(0).PlaceDoor tuer, -2 * xFaktor, -7 * yFaktor ' Haustⁿr
wand(4).PlaceDoor tuer, -7 * xFaktor, -5.45 * yFaktor ' GΣste-WC
wand(6).PlaceDoor tuer, -4.5 * xFaktor, -3.9 * yFaktor ' Flur - Wohnzimmer
wand(6).PlaceDoor tuer, -0.55 * xFaktor, -3.9 * yFaktor ' Flur - Kⁿche
wand(8).PlaceDoor tuer, -2 * xFaktor, -2.64 * yFaktor ' Kⁿche - Wohnzimmer
wand(8).PlaceDoor tuer, -2 * xFaktor, 0 ' Kinderzimmer - Wohnzimmer
wand(11).PlaceDoor tuer, 1.8 * xFaktor, -1.38 * yFaktor ' Kⁿche - Kinderzimmer
wand(11).PlaceDoor tuer, 4 * xFaktor, -1.38 * yFaktor ' Kⁿche - Schlafzimmer
wand(9).PlaceDoor tuer, -3 * xFaktor, 3 * yFaktor ' Wohnzimmer - Toilette
' Fertig, beende das Script
Main.ArConEXE.EndMe
' L÷se die Referenz zum Active-X Control
Set Main.ArConEXE = Nothing
End Sub
Sub ErzeugeZweistockHaus(garage As Integer, Laenge As Single, Breite As Single)
' Bestimme den Ma▀stab - unser Original ist 20 m breit und 15 m lang
xFaktor = Breite / 20
yFaktor = Laenge / 15
' Starte das Script - dadurch wird eventuell auch ArCon gestartet
Set Main.ArConEXE = New ArCon.ArCon
If Not Main.ArConEXE.StartMe(Main.hWnd, "") Then
MsgBox "Keine Verbindung zu ArCon+"
Exit Sub
End If
' ZunΣchst einmal ben÷tigen wir ein neues, leeres Projekt mit Standardeinstellungen
Main.ArConEXE.CloseProject
Main.ArConEXE.CreateProject Nothing
' Raster, Nordpfeil und Ursprung nicht anzeigen
Main.ArConEXE.state = Main.ArConEXE.state And Not (ACST_Grid Or ACST_North Or ACST_Origins)
' Bisher haben wir noch keine WΣnder erzeugt
anzahlWaende = 0
' Erzeuge das Erdgescho▀
Set geschoss = Main.ArConEXE.CurrentStory
ErzeugeZweistockHausStockwerk garage, AC_StockwerkErdgeschoss
' Nun das Obergescho▀
Main.ArConEXE.CurrentBuilding.CreateStory True, AC_StockwerkObergeschoss
Set geschoss = Main.ArConEXE.CurrentStory
ErzeugeZweistockHausStockwerk 0, AC_StockwerkObergeschoss
' Und schlie▀lich das Dachgescho▀
Main.ArConEXE.CurrentBuilding.CreateStory True, AC_StockwerkDachgeschoss
Set geschoss = Main.ArConEXE.CurrentStory
ErzeugeZweistockHausStockwerk 0, AC_StockwerkDachgeschoss
' Dieses bekommt jetzt noch ein Dach
geschoss.PlaceRoofAutomatic Main.ArConEXE.NewRoof, 0, 0, False
' Und das Ergebnis betrachten wir in 3D
Main.ArConEXE.Mode = AC_ModeDesign
' Fertig, beende das Script
Main.ArConEXE.EndMe
' L÷se die Referenz zum Active-X Control
Set Main.ArConEXE = Nothing
End Sub
Sub ErzeugeZweistockHausNurErdgeschoss(garage As Integer, Laenge As Single, Breite As Single)
' Bestimme den Ma▀stab - unser Original ist 20 m breit und 15 m lang
xFaktor = Breite / 20
yFaktor = Laenge / 15
' Starte das Script - dadurch wird eventuell auch ArCon gestartet
Set Main.ArConEXE = New ArCon.ArCon
If Not Main.ArConEXE.StartMe(Main.hWnd, "") Then
MsgBox "Keine Verbindung zu ArCon+"
Exit Sub
End If
' ZunΣchst einmal ben÷tigen wir ein neues, leeres Projekt mit Standardeinstellungen
Main.ArConEXE.CloseProject
Main.ArConEXE.CreateProject Nothing
' Raster, Nordpfeil und Ursprung nicht anzeigen
Main.ArConEXE.state = Main.ArConEXE.state And Not (ACST_Grid Or ACST_North Or ACST_Origins)
' Bisher haben wir noch keine WΣnder erzeugt
anzahlWaende = 0
' Stockwerk definieren
Set geschoss = Main.ArConEXE.CurrentStory
' Erzeuge das Erdgescho▀
ErzeugeZweistockHausStockwerk garage, AC_StockwerkErdgeschoss
' Fertig, beende das Script
Main.ArConEXE.EndMe
' L÷se die Referenz zum Active-X Control
Set Main.ArConEXE = Nothing
End Sub
' Erzeuge ein Stockwerk des Zweistockhauses.
' Dabei gibt "garage" die Art einer eventuell zu erzeugenden Garage an und
' "art" ist der Code fⁿr das Gescho▀ (siehe AC_StockwerkXXXX Konstanten)
Private Sub ErzeugeZweistockHausStockwerk(garage As Integer, art As Integer)
Dim name As String
Dim fenster As Object
Dim tuer As Object
Dim x As Single
Dim ersteWand As Integer
' Merken, mit welcher Wand-Nummer wir dieses Stockwerk beginnen
ersteWand = anzahlWaende
' Au▀enmauern
NeueWand -6.8, -7.7, 8.2, -7.7
NeueWand 8.2, -7.7, 8.2, 7.3
NeueWand 8.2, 7.3, -6.8, 7.3
NeueWand -6.8, 7.3, -6.8, -7.7
' Im Dachgescho▀ war's das
If art = AC_StockwerkDachgeschoss Then
Exit Sub
End If
' Bⁿro, Flur und Kⁿche
NeueWand -6.8, -0.68, 8.2, -0.68
NeueWand -1.8, -7.7, -1.8, -0.68
NeueWand 2, -7.7, 2, 3.4
' Bad und Schlafzimmer
NeueWand 2, 3.4, -0.9, 3.4
NeueWand -0.9, -0.68, -0.9, 7.3
' Jetzt noch die Garage, falls gewⁿnscht
If garage > 0 Then
If garage = 1 Then
x = -9.3
name = "Garage"
Else
x = -11.8
name = "Doppelgarage"
End If
NeueWand -6.8, 7.3, x, 7.3
NeueWand x, 7.3, x, 0.25
NeueWand x, 0.25, -6.8, 0.25
RaumName -8, 1, name
End If
' RΣume benennen
RaumName -5, -5, "Bⁿro"
RaumName 0, -5, "Flur"
RaumName 4, -5, "Kⁿche"
RaumName 1, 1, "Bad"
RaumName 3, 3, "Wohnzimmer"
RaumName -5, 5, "Schlafzimmer"
' Fenster sind etwas unⁿbersichtlich, da sie neben der Position und eigenen Parametern
' auch eine Wand ben÷tigen. Die WΣnde sind in der oben erzeugten Reihenfolge
' beginnend bei 0 durchnummeriert. Als Fensterart benutzen wir das erste
' geladene Fenster (bei den konstruierten Fenster sind mehr Angaben erforderlich)
Set fenster = Main.ArConEXE.NewWindow(3)
fenster.Type = Main.ArConEXE.ConstructedWindows
fenster.ParapetHeight = 0.885
fenster.Height = 1.375
fenster.Width = 2 * xFaktor
wand(ersteWand + 0).PlaceWindow fenster, -4.3 * xFaktor, -7.7 * yFaktor
wand(ersteWand + 0).PlaceWindow fenster, 5.1 * xFaktor, -7.7 * yFaktor
wand(ersteWand + 2).PlaceWindow fenster, -4.3 * xFaktor, 7.3 * yFaktor
fenster.Width = 3.2 * xFaktor
wand(ersteWand + 2).PlaceWindow fenster, 3.85 * xFaktor, 7.3 * yFaktor
fenster.Width = 2 * yFaktor
wand(ersteWand + 1).PlaceWindow fenster, 8.2 * xFaktor, -4.19 * yFaktor
fenster.Width = 3.2 * yFaktor
wand(ersteWand + 1).PlaceWindow fenster, 8.2 * xFaktor, 3.31 * yFaktor
fenster.Width = 2 * yFaktor
wand(ersteWand + 3).PlaceWindow fenster, -6.8 * xFaktor, -4.19 * yFaktor
' Tⁿren
Set tuer = Main.ArConEXE.NewDoor(0)
tuer.Type = 0
tuer.Width = 1.5
tuer.Height = 2.2
If art = AC_StockwerkErdgeschoss Then
wand(ersteWand + 0).PlaceDoor tuer, 0.1 * xFaktor, -7.7 * yFaktor ' Haustⁿr
End If
wand(ersteWand + 5).PlaceDoor tuer, -1.8 * xFaktor, -4.19 * yFaktor ' Flur - Bⁿro
wand(ersteWand + 6).PlaceDoor tuer, 2 * xFaktor, -4.19 * yFaktor ' Flur - Kⁿche
wand(ersteWand + 4).PlaceDoor tuer, 0.55 * xFaktor, -0.68 * yFaktor ' Flur - Bad
wand(ersteWand + 4).PlaceDoor tuer, 5.1 * xFaktor, -0.68 * yFaktor ' Kⁿche - Wohnzimmer
wand(ersteWand + 8).PlaceDoor tuer, -0.9 * xFaktor, 5 * yFaktor ' Wohnzimmer - Schlafzimmer
End Sub
' Erzeuge eine neue Wand von (x1/y1) nach (x2/y2).
' Trage das Wand-Handle in der modulglobalen Liste ein.
Private Sub NeueWand(x1 As Single, y1 As Single, x2 As Single, y2 As Single)
Set wand(anzahlWaende) = Main.ArConEXE.NewWall(0)
geschoss.PlaceWall wand(anzahlWaende), x1 * xFaktor, y1 * yFaktor, x2 * xFaktor, y2 * yFaktor
anzahlWaende = anzahlWaende + 1
End Sub
' Benenne den Raum bei Position (x/y) mit dem angegebenen Namen
Private Sub RaumName(x As Single, y As Single, name As String)
Dim raum As Object
Set raum = geschoss.FindRoom(x * xFaktor, y * yFaktor)
raum.name = name
End Sub