Hier das Grundgerüst.
Alle STL im ASCII Format sollten geladen werden.
Es könnte sein das div. CAD Programme mit anderen "SPACE" einrückungen arbeiten.
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; Grundgerüst "STL Import" aufgebaut von PureBasic - Manual Mesh
; Geschrieben in PB 5.62
; Jan. 2019 by GreyEnt
;
; Thanks a lot PB Team :)
;
; ------------------------------------------------------------
;
;
datei$=OpenFileRequester("STL-Datei","*.stl","*.stl",0)
If datei$=""
End
EndIf
Structure vertex
vx1_x.d
vx1_y.d
vx1_z.d
vx2_x.d
vx2_y.d
vx2_z.d
vx3_x.d
vx3_y.d
vx3_z.d
normal_x.d
normal_y.d
normal_z.d
EndStructure
Global NewList vxL.vertex()
z.l=0
If ReadFile(0, datei$) ; wenn die Datei geöffnet werden konnte, setzen wir fort...
While Eof(0) = 0 ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
TextZ$= ReadString(0);
Posi = FindString(TextZ$, "facet normal")
If Posi > 0
AddElement(vxL())
Ergebnis$ = StringField(TextZ$, 3, " ")
vxL()\normal_x=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 4, " ")
vxL()\normal_y=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 5, " ")
vxL()\normal_z=ValD(Ergebnis$)
TextZ$= ReadString(0)
TextZ$= ReadString(0)
Ergebnis$ = StringField(TextZ$, 10, " ")
vxL()\vx1_x=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 11, " ")
vxL()\vx1_y=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 12, " ")
vxL()\vx1_z=ValD(Ergebnis$)
TextZ$= ReadString(0)
Ergebnis$ = StringField(TextZ$, 10, " ")
vxL()\vx2_x=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 11, " ")
vxL()\vx2_y=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 12, " ")
vxL()\vx2_z=ValD(Ergebnis$)
TextZ$= ReadString(0)
Ergebnis$ = StringField(TextZ$, 10, " ")
vxL()\vx3_x=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 11, " ")
vxL()\vx3_y=ValD(Ergebnis$)
Ergebnis$ = StringField(TextZ$, 12, " ")
vxL()\vx3_z=ValD(Ergebnis$)
Goto marke1
Debug vxL()\normal_x
Debug vxL()\normal_y
Debug vxL()\normal_z
Debug vxL()\vx1_x
Debug vxL()\vx1_y
Debug vxL()\vx1_z
Debug vxL()\vx2_x
Debug vxL()\vx2_y
Debug vxL()\vx2_z
Debug vxL()\vx3_x
Debug vxL()\vx3_y
Debug vxL()\vx3_z
Debug " "
marke1:
EndIf
z+1
;If z>150000 ;for Debug in Long Files
; Break
;EndIf
Wend
CloseFile(0) ; schließen der zuvor geöffneten Datei
EndIf
#CameraSpeed = 1
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
CreateMesh(0)
z.l=0
ForEach vxL()
z+3
MeshVertexPosition(vxL()\vx1_x, vxL()\vx1_y, vxL()\vx1_z)
MeshVertexColor(RGB(255, 0, 0))
MeshVertexPosition(vxL()\vx2_x, vxL()\vx2_y, vxL()\vx2_z)
MeshVertexColor(RGB(0, 200, 0))
MeshVertexPosition(vxL()\vx3_x, vxL()\vx3_y, vxL()\vx3_z)
MeshVertexColor(RGB(0, 200, 0))
MeshFace(z-3, z-2, z-1)
Next
FinishMesh(1)
CreateTexture(0, 16, 16)
TextureID = TextureID(0)
CreateMaterial(0, LoadTexture(0, "clouds.jpg"))
SetMaterialColor(0, #PB_Material_DiffuseColor, RGB(100,100,100))
MaterialShadingMode(0, #PB_Material_Phong|#PB_Material_Wireframe )
MaterialShininess(0, 5)
CreateEntity(0, MeshID(0), MaterialID(0))
EntityRenderMode(0, #PB_Entity_CastShadow )
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 0, 500, #PB_Absolute)
CameraProjectionMode(0, #PB_Camera_Perspective )
CreateWater(0, 0, -150, 0, 150, #PB_World_WaterHighQuality|#PB_World_WaterSun|#PB_World_WaterCaustics )
Sun(-200, 200, -100, RGB(255,128,0))
SkyDome("clouds.jpg", 500)
CreateLight(1, RGB(128,128,128), -200, 200, -100)
DisableLightShadows(1, #False)
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
RotateEntity(0, 0, -5, 0, #PB_Relative)
ElseIf KeyboardPushed(#PB_Key_Right)
RotateEntity(0, 0, 5, 0, #PB_Relative)
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
RotateEntity(0, -5, 0, 0, #PB_Relative)
ElseIf KeyboardPushed(#PB_Key_Down)
RotateEntity(0, 5, 0, 0, #PB_Relative)
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
End