Oud 22-02-2006, 21:39
Ssstudente
Ssstudente is offline
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)
Met citaat reageren
Advertentie
Oud 22-02-2006, 22:16
dafelix
Avatar van dafelix
dafelix is offline
volume is de 3e dimensie, dus dat word gewoon een Xtra dimensie toevoegen, echter gaan we je huiswerk niet zitten maken, maar als je specifieke vragen/knelpunten hebt willen we wellicht helpen
__________________
$karma++;
Met citaat reageren
Advertentie
Reageren

Topictools Zoek in deze topic
Zoek in deze topic:

Geavanceerd zoeken

Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 16:11.