Aktuelle Zeit: 22.04.2019 20:16

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [gelöst] Viewer für STL Dateien erstellen?
BeitragVerfasst: 11.01.2019 20:05 
Offline
Benutzeravatar

Registriert: 20.07.2006 19:41
Hallo Progger.
Frohes Neues Jahr. :)

Stelle mir vor das mit den Befehlen aus der Mesh Librarie ein Viewer für STL Dateien zu erstellen ist.
Hab leider nicht das Zeug das ich mit den Mesh Befehlen umgehen kann. :(

Eine kleine Beschreibung für das STL Format:
Eingesetzt meist für die Bearbeitung im 3D Druck Bereich.
Aus einem 3D CAD Modell werden sämtliche Aussenflächen in Dreiecke beschrieben.
Fast jedes 3D CAD Programm hat heutzutage eine Schnittstelle um ein Modell in STL zu exportieren.
Das Format gibt es Standardmäßig als ASCII und Binär.
Würde mir gern die erzeugten STL Dateien im eigenen Viewer anzeigen lassen.
Hat jemand Lust mir aufs Pferd zu helfen? :)
Könnte mir auch ein Beispiel Code vorstellen.
Falls Ihr ein STL benötigt so ist es kein Problem.

Hier ein kleiner Auszug einer STL.
Zitat:
solid Model
facet normal -6.4e-001 -6.9e-001 3.4e-001
outer loop
vertex -5.7e-001 -1.4e+000 -1.2e+001
vertex -5.8e-001 -1.4e+000 -1.2e+001
vertex -5.8e-001 -1.4e+000 -1.2e+001
endloop
endfacet
.
.
.
endsolid Model


Gruß
GreyEnt

_________________
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.


Zuletzt geändert von GreyEnt am 20.01.2019 11:48, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Update
BeitragVerfasst: 17.01.2019 07:41 
Offline
Benutzeravatar

Registriert: 20.07.2006 19:41
Guten Morgen.

Hab ein Super Beispiel gefunden.
...\Examples\3D\MeshManualCube.pb
Einfach Geil. :)

Daraus lässt sich mein Vorhaben ableiten. :)

Gruß
GreyEnt

_________________
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewer für STL Dateien erstellen?
BeitragVerfasst: 20.01.2019 10:39 
Offline
Benutzeravatar

Registriert: 20.07.2006 19:41
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:
;
; ------------------------------------------------------------
;
;  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

_________________
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Exabot [Bot] und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye