Hey!
Voor school moet ik een trap programmeren in visual basic. Eentje die aanpasbaar is en die zo in mijn ontwerp in autocad en alle mogelijke volgende ontwerpen kan passen.
Ik heb al een begin: een 2D platte grond en een 3D-lijntekening van tredes en zelfs al een dialoogbokske waar een gebruiker zelf breedte enz... kan ingeven.
Maar dat is niet genoeg. Die trap zou ook oppervlak moeten krijgen en een zekere dikte van treden. Enfin, het moet een 3D-trap worden met volume.
(De opdracht gaat verder: wenteltrappen en leuningen enz... zorgen voor bonuspunten, maar dat is niet direct mijn eerste doel.)
Kan iemand mij verder helpen met de code?
Dit is wat ik al heb:
Public Sub Trap()
' roep de dialoogbox op
UserForm1.Show
End Sub
'Voor de dialoogbox: die staat verder uitgewerkt bij de Userform
'die ik heb ingevoerd (helemaal achteraan verder uitgewerkt)
Sub TrapFunctie( _
aantalTreden As Integer, _
trapbreedte As Double, _
aantrede As Double, _
optrede As Double)
'--------------------------
' Variabelen en instellingen
'---------------------------
' Trapbreedte, reëel getal (standaard 900 mm)
'Dim trapbreedte As Double
'trapbreedte = 0.9
' Optrede, reëel getal (standaard 180 mm)
'Dim optrede As Double
'optrede = 0.18
' Aantrede, reëel getal (standaard 240 mm)
'Dim aantrede As Double
'aantrede = 0.24
' Aantaltreden, geheel getal (standaard 15)
'Dim aantalTreden As Integer
'aantalTreden = 15
'--------------------------
' Definieer Layers
'---------------------------
Dim myLayer As AcadLayer
Set myLayer = ThisDrawing.Layers.Add("2D")
myLayer.color = acBlue
Set myLayer = ThisDrawing.Layers.Add("3D")
myLayer.color = acCyan
'voor alle treden
Dim trede As Integer
For trede = 0 To aantalTreden - 1
'teken trede
Call tekenTrede(0, trede * aantrede, trede * optrede, trapbreedte, optrede, aantrede, trede + 1)
'ga naar de volgende trede
Next trede
'afwerking
Dim startPt(2) As Double
Dim endPt(2) As Double
Dim centerPt(2) As Double
startPt(0) = 0
startPt(1) = 0
endPt(0) = 0
endPt(1) = aantalTreden * aantrede
centerPt(0) = trapbreedte / 2
centerPt(1) = 0
' teken trapbomen
Dim myLine As AcadLine
Set myLine = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
myLine.Layer = "2D"
startPt(0) = trapbreedte
startPt(1) = 0
endPt(0) = trapbreedte
endPt(1) = aantalTreden * aantrede
Set myLine = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
myLine.Layer = "2D"
' teken looplijn (begincirkel en looprichting)
startPt(0) = trapbreedte / 2
startPt(1) = 0
endPt(0) = trapbreedte / 2
endPt(1) = aantalTreden * aantrede
Set myLine = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
myLine.Layer = "2D"
'teken pijl
startPt(0) = endPt(0) - 100
startPt(1) = endPt(1) - 100
Set myLine = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
myLine.Layer = "2D"
startPt(0) = endPt(0) + 100
startPt(1) = endPt(1) - 100
Set myLine = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
myLine.Layer = "2D"
'teken cirkel
Dim myCircle As AcadCircle
Set myCircle = ThisDrawing.ModelSpace.AddCircle(centerPt, 80)
myCircle.Layer = "2D"
' beëindig tekening
ThisDrawing.Regen (True)
End Sub
Private Sub tekenTrede( _
X, Y, Z As Double, _
trapbreedte, optrede, aantrede As Double, _
tredeNummer As Integer)
'variabelen declareren
' optrede, aantrede, breedte
'tredenummer
' p1,p2,p3,p4
Dim p1(2) As Double
Dim p2(2) As Double
Dim p3(2) As Double
Dim p4(2) As Double
'bereken de vier punten
'p1 = X,Y
p1(0) = X
p1(1) = Y
p2(0) = X + trapbreedte
p2(1) = Y
p3(0) = X + trapbreedte
p3(1) = Y + aantrede
p4(0) = X
p4(1) = Y + aantrede
'p2 = X + trapbreedte, Y
'p3 = X + trapbreedte, Y+ aantrede
'p4 = X, Y + aantrede
' teken een lijn om de trede voor te stellen in 2D
Dim myLine As AcadLine
Set myLine = ThisDrawing.ModelSpace.AddLine(p1, p2)
myLine.Layer = "2D"
' teken een vlak in 3D
Dim myFace As Acad3DFace
p1(2) = Z + optrede
p2(2) = Z + optrede
p3(2) = Z + optrede
p4(2) = Z + optrede
Set myFace = ThisDrawing.ModelSpace.Add3DFace(p1, p2, p3, p4)
myFace.Layer = "3D"
' schrijf tredenummer op trede
Dim myText As AcadText
Dim insertionPt(2) As Double
insertionPt(0) = X + 0.05
insertionPt(1) = Y + 0.05
Set myText = ThisDrawing.ModelSpace.AddText(tredeNummer, insertionPt, 100)
myText.Layer = "2D"
End Sub
'---------------------------
'Dan de dialoog box!
'---------------------------
'Daarvoor heb ik een Userform gemaakt waarbij ge het '
'aantalTreden, de trapbreedte, de aantrede en de optrede
' kunt invullen (aantalTreden als integer, de rest als double
' en in millimeter)
'Bij dat userform komt deze code:
Private Sub BT_maakTrap_Click()
' sluit het venster
UserForm1.Hide
' roep de trapfunctie, met de waarden uit de dialoogbox
' maar voer eerst een controle uit!
If (UserForm1.TB_aantalTreden <> "") And _
(UserForm1.TB_trapbreedte <> "") And _
(UserForm1.TB_aantrede <> "") And _
(UserForm1.TB_optrede <> "") Then
Call TrapFunctie.TrapFunctie( _
UserForm1.TB_aantalTreden.Value, _
UserForm1.TB_trapbreedte.Value, _
UserForm1.TB_aantrede.Value, _
UserForm1.TB_optrede.Value)
End If
End Sub
Private Sub BT_cancel_Click()
UserForm1.Hide
End
End Sub
'Dat was het, maar hoe moet het nu verder met volumes en opp?
__________________
De werkelijkheid slaat de fantasie buiten westen. (plagiaat)
|