home *** CD-ROM | disk | FTP | other *** search
/ The Houseplan Collection / HRCD2005.ISO / data1.cab / Zusatz / 3DS / DATA2.Z / Haeuser.Bas < prev    next >
BASIC Source File  |  1998-05-18  |  12KB  |  337 lines

  1. Attribute VB_Name = "Haeuser"
  2. Option Explicit
  3.  
  4. ' Referenz auf das globale ArCon Control
  5. Public geschoss As ArCon.Story
  6.  
  7. ' Globale Faktoren fⁿr benutzerdefinierte Gr÷▀enanpassung
  8. Public xFaktor As Single
  9. Public yFaktor As Single
  10.  
  11. ' Ein Array mit Wand-Nummern
  12. Private wand(300) As Object
  13. Private anzahlWaende As Integer
  14.  
  15. Sub ErzeugeEinfachHaus(kZimmer As Integer, kammer As Integer, Laenge As Single, Breite As Single)
  16.     Dim name As String
  17.     Dim fenster As Object
  18.     Dim tuer As Object
  19.     
  20.     ' Bestimme den Ma▀stab - unser Original ist 18 m breit und 13 m lang
  21.     xFaktor = Breite / 18
  22.     yFaktor = Laenge / 13
  23.     
  24.     ' Starte das Script - dadurch wird eventuell auch ArCon gestartet
  25.     Set Main.ArConEXE = New ArCon.ArCon
  26.     If Not Main.ArConEXE.StartMe(Main.hWnd, "") Then
  27.         MsgBox "Keine Verbindung zu ArCon+"
  28.         Exit Sub
  29.     End If
  30.     
  31.     ' ZunΣchst einmal ben÷tigen wir ein neues, leeres Projekt mit Standardeinstellungen
  32.     Main.ArConEXE.CloseProject
  33.     Main.ArConEXE.CreateProject Nothing
  34.     ' Raster, Nordpfeil und Ursprung nicht anzeigen
  35.     Main.ArConEXE.state = Main.ArConEXE.state And Not (ACST_Grid Or ACST_North Or ACST_Origins)
  36.     
  37.     ' Bisher haben wir noch keine WΣnder erzeugt
  38.     anzahlWaende = 0
  39.     
  40.     ' Stockwerk definieren
  41.     Set geschoss = Main.ArConEXE.CurrentStory
  42.     
  43.     ' Au▀enmauern
  44.     NeueWand -10, -7, 7.9, -7
  45.     NeueWand 7.9, -7, 7.9, 6
  46.     NeueWand 7.9, 6, -10, 6
  47.     NeueWand -10, 6, -10, -7
  48.     
  49.     ' GΣste-WC
  50.     NeueWand -7, -7, -7, -3.9
  51.     NeueWand -7, -3.9, -10, -3.9
  52.     
  53.     ' Flur
  54.     NeueWand -7, -3.9, 0.9, -3.9
  55.     NeueWand 0.9, -3.9, 0.9, -7
  56.     
  57.     ' Wohnzimmer
  58.     NeueWand -2, -3.9, -2, 3
  59.     NeueWand -2, 3, -10, 3
  60.     
  61.     ' Toilette
  62.     NeueWand -2, 3, -2, 6
  63.     
  64.     ' Kⁿche
  65.     NeueWand -2, -1.38, 7.9, -1.38
  66.     
  67.     ' Schlafzimmer
  68.     NeueWand 2.9, -1.38, 2.9, 6
  69.     
  70.     ' Jetzt bestehen alle RΣume, daher k÷nnen wir sie jetzt mit Namen versehen
  71.     ' Erster variabler Name: die kleine Kammer
  72.     If kammer = 0 Then
  73.         name = "GΣste-WC"
  74.     ElseIf kammer = 1 Then
  75.         name = "Vogel-" + vbCrLf + "voliere"
  76.     Else
  77.         name = "Dunkel-" + vbCrLf + "kammer"
  78.     End If
  79.     RaumName -9, -6, name
  80.     ' Zweiter variabler Name
  81.     If kZimmer = 0 Then
  82.         name = "Kinderzimmer"
  83.     ElseIf kZimmer = 1 Then
  84.         name = "Bⁿro"
  85.     Else
  86.         name = "Hobbyraum"
  87.     End If
  88.     RaumName -1, 5, name
  89.     ' Die ⁿbrigen Namen sind fest
  90.     RaumName -9, 5, "Toilette"
  91.     RaumName -9, 2, "Wohnzimmer"
  92.     RaumName -6, -6, "Flur"
  93.     RaumName 6, -6, "Kⁿche"
  94.     RaumName 7, 5, "Schlafzimmer"
  95.     
  96.     ' Fenster sind etwas unⁿbersichtlich, da sie neben der Position und eigenen Parametern
  97.     ' auch eine Wand ben÷tigen. Die WΣnde sind in der oben erzeugten Reihenfolge
  98.     ' beginnend bei 0 durchnummeriert. Als Fensterart benutzen wir das erste
  99.     ' geladene Fenster (bei den konstruierten Fenster sind mehr Angaben erforderlich)
  100.     Set fenster = Main.ArConEXE.NewWindow(3)
  101.     fenster.Type = Main.ArConEXE.ConstructedWindows
  102.     fenster.ParapetHeight = 0.885
  103.     fenster.Height = 1.375
  104.     fenster.Width = 0.76 * yFaktor
  105.     wand(3).PlaceWindow fenster, -10 * xFaktor, -5.45 * yFaktor
  106.     wand(3).PlaceWindow fenster, -10 * xFaktor, 4.5 * yFaktor
  107.     fenster.Width = 3.5 * yFaktor
  108.     wand(3).PlaceWindow fenster, -10 * xFaktor, -0.45 * yFaktor
  109.     fenster.Width = 1.5 * yFaktor
  110.     wand(1).PlaceWindow fenster, 7.9 * xFaktor, -4.19 * yFaktor
  111.     fenster.Width = 2 * yFaktor
  112.     wand(1).PlaceWindow fenster, 7.9 * xFaktor, 2.31 * yFaktor
  113.     fenster.Width = 1.8 * xFaktor
  114.     wand(2).PlaceWindow fenster, -6 * xFaktor, 6 * yFaktor
  115.     fenster.Width = 2 * xFaktor
  116.     wand(2).PlaceWindow fenster, 0.45 * xFaktor, 6 * yFaktor
  117.     wand(2).PlaceWindow fenster, 5.4 * xFaktor, 6 * yFaktor
  118.     fenster.Width = 2.2 * xFaktor
  119.     wand(0).PlaceWindow fenster, 4.4 * xFaktor, -7 * yFaktor
  120.     fenster.Width = 0.76 * xFaktor
  121.     wand(0).PlaceWindow fenster, -5 * xFaktor, -7 * yFaktor
  122.     
  123.     ' Tⁿren
  124.     Set tuer = Main.ArConEXE.NewDoor(0)
  125.     tuer.Type = 0
  126.     tuer.Width = 1.5
  127.     tuer.Height = 2.2
  128.     wand(0).PlaceDoor tuer, -2 * xFaktor, -7 * yFaktor              ' Haustⁿr
  129.     wand(4).PlaceDoor tuer, -7 * xFaktor, -5.45 * yFaktor           ' GΣste-WC
  130.     wand(6).PlaceDoor tuer, -4.5 * xFaktor, -3.9 * yFaktor          ' Flur - Wohnzimmer
  131.     wand(6).PlaceDoor tuer, -0.55 * xFaktor, -3.9 * yFaktor         ' Flur - Kⁿche
  132.     wand(8).PlaceDoor tuer, -2 * xFaktor, -2.64 * yFaktor           ' Kⁿche - Wohnzimmer
  133.     wand(8).PlaceDoor tuer, -2 * xFaktor, 0                         ' Kinderzimmer - Wohnzimmer
  134.     wand(11).PlaceDoor tuer, 1.8 * xFaktor, -1.38 * yFaktor         ' Kⁿche - Kinderzimmer
  135.     wand(11).PlaceDoor tuer, 4 * xFaktor, -1.38 * yFaktor           ' Kⁿche - Schlafzimmer
  136.     wand(9).PlaceDoor tuer, -3 * xFaktor, 3 * yFaktor               ' Wohnzimmer - Toilette
  137.  
  138.     ' Fertig, beende das Script
  139.     Main.ArConEXE.EndMe
  140.  
  141.     ' L÷se die Referenz zum Active-X Control
  142.     Set Main.ArConEXE = Nothing
  143. End Sub
  144.  
  145.  
  146. Sub ErzeugeZweistockHaus(garage As Integer, Laenge As Single, Breite As Single)
  147.     ' Bestimme den Ma▀stab - unser Original ist 20 m breit und 15 m lang
  148.     xFaktor = Breite / 20
  149.     yFaktor = Laenge / 15
  150.     
  151.     ' Starte das Script - dadurch wird eventuell auch ArCon gestartet
  152.     Set Main.ArConEXE = New ArCon.ArCon
  153.     If Not Main.ArConEXE.StartMe(Main.hWnd, "") Then
  154.         MsgBox "Keine Verbindung zu ArCon+"
  155.         Exit Sub
  156.     End If
  157.     
  158.     ' ZunΣchst einmal ben÷tigen wir ein neues, leeres Projekt mit Standardeinstellungen
  159.     Main.ArConEXE.CloseProject
  160.     Main.ArConEXE.CreateProject Nothing
  161.     ' Raster, Nordpfeil und Ursprung nicht anzeigen
  162.     Main.ArConEXE.state = Main.ArConEXE.state And Not (ACST_Grid Or ACST_North Or ACST_Origins)
  163.     
  164.     ' Bisher haben wir noch keine WΣnder erzeugt
  165.     anzahlWaende = 0
  166.     
  167.     ' Erzeuge das Erdgescho▀
  168.     Set geschoss = Main.ArConEXE.CurrentStory
  169.     ErzeugeZweistockHausStockwerk garage, AC_StockwerkErdgeschoss
  170.     
  171.     ' Nun das Obergescho▀
  172.     Main.ArConEXE.CurrentBuilding.CreateStory True, AC_StockwerkObergeschoss
  173.     Set geschoss = Main.ArConEXE.CurrentStory
  174.     ErzeugeZweistockHausStockwerk 0, AC_StockwerkObergeschoss
  175.     
  176.     ' Und schlie▀lich das Dachgescho▀
  177.     Main.ArConEXE.CurrentBuilding.CreateStory True, AC_StockwerkDachgeschoss
  178.     Set geschoss = Main.ArConEXE.CurrentStory
  179.     ErzeugeZweistockHausStockwerk 0, AC_StockwerkDachgeschoss
  180.     
  181.     ' Dieses bekommt jetzt noch ein Dach
  182.     geschoss.PlaceRoofAutomatic Main.ArConEXE.NewRoof, 0, 0, False
  183.     
  184.     ' Und das Ergebnis betrachten wir in 3D
  185.     Main.ArConEXE.Mode = AC_ModeDesign
  186.     
  187.     ' Fertig, beende das Script
  188.     Main.ArConEXE.EndMe
  189.  
  190.     ' L÷se die Referenz zum Active-X Control
  191.     Set Main.ArConEXE = Nothing
  192. End Sub
  193.  
  194. Sub ErzeugeZweistockHausNurErdgeschoss(garage As Integer, Laenge As Single, Breite As Single)
  195.     ' Bestimme den Ma▀stab - unser Original ist 20 m breit und 15 m lang
  196.     xFaktor = Breite / 20
  197.     yFaktor = Laenge / 15
  198.     
  199.     ' Starte das Script - dadurch wird eventuell auch ArCon gestartet
  200.     Set Main.ArConEXE = New ArCon.ArCon
  201.     If Not Main.ArConEXE.StartMe(Main.hWnd, "") Then
  202.         MsgBox "Keine Verbindung zu ArCon+"
  203.         Exit Sub
  204.     End If
  205.     
  206.     ' ZunΣchst einmal ben÷tigen wir ein neues, leeres Projekt mit Standardeinstellungen
  207.     Main.ArConEXE.CloseProject
  208.     Main.ArConEXE.CreateProject Nothing
  209.     ' Raster, Nordpfeil und Ursprung nicht anzeigen
  210.     Main.ArConEXE.state = Main.ArConEXE.state And Not (ACST_Grid Or ACST_North Or ACST_Origins)
  211.     
  212.     ' Bisher haben wir noch keine WΣnder erzeugt
  213.     anzahlWaende = 0
  214.     
  215.     ' Stockwerk definieren
  216.     Set geschoss = Main.ArConEXE.CurrentStory
  217.  
  218.     ' Erzeuge das Erdgescho▀
  219.     ErzeugeZweistockHausStockwerk garage, AC_StockwerkErdgeschoss
  220.     
  221.     ' Fertig, beende das Script
  222.     Main.ArConEXE.EndMe
  223.  
  224.     ' L÷se die Referenz zum Active-X Control
  225.     Set Main.ArConEXE = Nothing
  226. End Sub
  227.  
  228. ' Erzeuge ein Stockwerk des Zweistockhauses.
  229. ' Dabei gibt "garage" die Art einer eventuell zu erzeugenden Garage an und
  230. ' "art" ist der Code fⁿr das Gescho▀ (siehe AC_StockwerkXXXX Konstanten)
  231. Private Sub ErzeugeZweistockHausStockwerk(garage As Integer, art As Integer)
  232.     Dim name As String
  233.     Dim fenster As Object
  234.     Dim tuer As Object
  235.     Dim x As Single
  236.     Dim ersteWand As Integer
  237.  
  238.     ' Merken, mit welcher Wand-Nummer wir dieses Stockwerk beginnen
  239.     ersteWand = anzahlWaende
  240.  
  241.     ' Au▀enmauern
  242.     NeueWand -6.8, -7.7, 8.2, -7.7
  243.     NeueWand 8.2, -7.7, 8.2, 7.3
  244.     NeueWand 8.2, 7.3, -6.8, 7.3
  245.     NeueWand -6.8, 7.3, -6.8, -7.7
  246.     
  247.     ' Im Dachgescho▀ war's das
  248.     If art = AC_StockwerkDachgeschoss Then
  249.         Exit Sub
  250.     End If
  251.     
  252.     ' Bⁿro, Flur und Kⁿche
  253.     NeueWand -6.8, -0.68, 8.2, -0.68
  254.     NeueWand -1.8, -7.7, -1.8, -0.68
  255.     NeueWand 2, -7.7, 2, 3.4
  256.     
  257.     ' Bad und Schlafzimmer
  258.     NeueWand 2, 3.4, -0.9, 3.4
  259.     NeueWand -0.9, -0.68, -0.9, 7.3
  260.     
  261.     ' Jetzt noch die Garage, falls gewⁿnscht
  262.     If garage > 0 Then
  263.         If garage = 1 Then
  264.             x = -9.3
  265.             name = "Garage"
  266.         Else
  267.             x = -11.8
  268.             name = "Doppelgarage"
  269.         End If
  270.         NeueWand -6.8, 7.3, x, 7.3
  271.         NeueWand x, 7.3, x, 0.25
  272.         NeueWand x, 0.25, -6.8, 0.25
  273.         RaumName -8, 1, name
  274.     End If
  275.     
  276.     ' RΣume benennen
  277.     RaumName -5, -5, "Bⁿro"
  278.     RaumName 0, -5, "Flur"
  279.     RaumName 4, -5, "Kⁿche"
  280.     RaumName 1, 1, "Bad"
  281.     RaumName 3, 3, "Wohnzimmer"
  282.     RaumName -5, 5, "Schlafzimmer"
  283.     
  284.     ' Fenster sind etwas unⁿbersichtlich, da sie neben der Position und eigenen Parametern
  285.     ' auch eine Wand ben÷tigen. Die WΣnde sind in der oben erzeugten Reihenfolge
  286.     ' beginnend bei 0 durchnummeriert. Als Fensterart benutzen wir das erste
  287.     ' geladene Fenster (bei den konstruierten Fenster sind mehr Angaben erforderlich)
  288.     Set fenster = Main.ArConEXE.NewWindow(3)
  289.     fenster.Type = Main.ArConEXE.ConstructedWindows
  290.     fenster.ParapetHeight = 0.885
  291.     fenster.Height = 1.375
  292.     fenster.Width = 2 * xFaktor
  293.     wand(ersteWand + 0).PlaceWindow fenster, -4.3 * xFaktor, -7.7 * yFaktor
  294.     wand(ersteWand + 0).PlaceWindow fenster, 5.1 * xFaktor, -7.7 * yFaktor
  295.     wand(ersteWand + 2).PlaceWindow fenster, -4.3 * xFaktor, 7.3 * yFaktor
  296.     fenster.Width = 3.2 * xFaktor
  297.     wand(ersteWand + 2).PlaceWindow fenster, 3.85 * xFaktor, 7.3 * yFaktor
  298.     fenster.Width = 2 * yFaktor
  299.     wand(ersteWand + 1).PlaceWindow fenster, 8.2 * xFaktor, -4.19 * yFaktor
  300.     fenster.Width = 3.2 * yFaktor
  301.     wand(ersteWand + 1).PlaceWindow fenster, 8.2 * xFaktor, 3.31 * yFaktor
  302.     fenster.Width = 2 * yFaktor
  303.     wand(ersteWand + 3).PlaceWindow fenster, -6.8 * xFaktor, -4.19 * yFaktor
  304.     
  305.     ' Tⁿren
  306.     Set tuer = Main.ArConEXE.NewDoor(0)
  307.     tuer.Type = 0
  308.     tuer.Width = 1.5
  309.     tuer.Height = 2.2
  310.     If art = AC_StockwerkErdgeschoss Then
  311.         wand(ersteWand + 0).PlaceDoor tuer, 0.1 * xFaktor, -7.7 * yFaktor   ' Haustⁿr
  312.     End If
  313.     wand(ersteWand + 5).PlaceDoor tuer, -1.8 * xFaktor, -4.19 * yFaktor     ' Flur - Bⁿro
  314.     wand(ersteWand + 6).PlaceDoor tuer, 2 * xFaktor, -4.19 * yFaktor        ' Flur - Kⁿche
  315.     wand(ersteWand + 4).PlaceDoor tuer, 0.55 * xFaktor, -0.68 * yFaktor     ' Flur - Bad
  316.     wand(ersteWand + 4).PlaceDoor tuer, 5.1 * xFaktor, -0.68 * yFaktor      ' Kⁿche - Wohnzimmer
  317.     wand(ersteWand + 8).PlaceDoor tuer, -0.9 * xFaktor, 5 * yFaktor         ' Wohnzimmer - Schlafzimmer
  318. End Sub
  319.  
  320. ' Erzeuge eine neue Wand von (x1/y1) nach (x2/y2).
  321. ' Trage das Wand-Handle in der modulglobalen Liste ein.
  322. Private Sub NeueWand(x1 As Single, y1 As Single, x2 As Single, y2 As Single)
  323.     Set wand(anzahlWaende) = Main.ArConEXE.NewWall(0)
  324.     geschoss.PlaceWall wand(anzahlWaende), x1 * xFaktor, y1 * yFaktor, x2 * xFaktor, y2 * yFaktor
  325.     anzahlWaende = anzahlWaende + 1
  326. End Sub
  327.  
  328. ' Benenne den Raum bei Position (x/y) mit dem angegebenen Namen
  329. Private Sub RaumName(x As Single, y As Single, name As String)
  330.     Dim raum As Object
  331.     
  332.     Set raum = geschoss.FindRoom(x * xFaktor, y * yFaktor)
  333.     raum.name = name
  334. End Sub
  335.  
  336.  
  337.