3D STEP-Files

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: 3D STEP-Files

Beitrag von juergenkulow »

Code: Alles auswählen

; Lese PYRA.STEP ein und gebe es als Baum aus. 6.01 Beta 4 Linux x64 

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux 
    #NeueZeile=#LF$
  CompilerCase #PB_OS_Windows
    #NeueZeile=#CRLF$
  CompilerCase #PB_OS_MacOS
    #NeueZeile=#CR$
CompilerEndSelect

Structure ref 
  q.q 
  j.q
EndStructure

Structure STEPZeile
  Nummer.q
  Start.q
  Laenge.l
  List ref.ref()
  genutzt.l ; Bool 
EndStructure

Structure StepBaumTyp
  index.q
  ebene.w
EndStructure

Global NewList Zeilen.STEPZeile()
Global NewList StepBaum.StepBaumTyp()

s.s=PeekS(?Start,?Stop-?Start,#PB_UTF8)
Datasec=FindString(s,#LF$+"DATA;")
; Debug Datasec
EndDataSec=FindString(s,#LF$+"ENDSEC;",Datasec)-8
i=Datasec+7
j=i
While i<EndDataSec  
  i=FindString(s,");"+#NeueZeile,i)+1 
  ;Debug Str(j)+" "+Mid(s,j,i-j+1)
  AddElement(Zeilen())
  Zeilen()\Nummer=Val(Mid(s,j+1,i-j+1))
  t.s=Mid(s,j,i-j+1)
  If FindString(t,"=")
    Zeilen()\Start=FindString(s,"=",j+1)+1 ; Vorsicht was ist wenn kein = vorhanden wie bei #275 bis #277 
  Else 
    Zeilen()\Start=j
  EndIf 
  Zeilen()\Laenge=i-Zeilen()\Start+1
  CompilerIf #PB_Compiler_OS=#PB_OS_Windows : j=i+3 : CompilerElse : j=i+2 : CompilerEndIf
Wend 
ls=ListSize(Zeilen())
Global Dim ZeilenArray.STEPZeile(ls)
i=1
ForEach Zeilen()
  ; Debug Str(Zeilen()\Nummer)+":"+Mid(s,Zeilen()\Start,Zeilen()\Laenge)
  CopyStructure(@Zeilen(),@ZeilenArray(i),STEPZeile)
  i+1
Next 
For i=1 To ls
  ;Debug Str(ZeilenArray(i)\Nummer)+":"+Mid(s,ZeilenArray(i)\Start,ZeilenArray(i)\Laenge)
  t=Mid(s,ZeilenArray(i)\Start,ZeilenArray(i)\Laenge)
  j=FindString(t,"#") ; Vorsicht # darf nicht in '#' Strings vorkommen.!
  While j
    AddElement(ZeilenArray(i)\ref())
    ZeilenArray(i)\ref()\q=Val(Mid(t,j+1)) ;
    ;Debug "ref:"+Str(ZeilenArray(i)\ref()\q)
    j=FindString(t,"#",j+1)
  Wend 
Next 
i=1
While i<=ls 
  ;Debug Str(ZeilenArray(i)\Nummer)+":"+Mid(s,ZeilenArray(i)\Start,ZeilenArray(i)\Laenge)
  ForEach ZeilenArray(i)\ref()
    j=1
    While ZeilenArray(j)\Nummer<>ZeilenArray(i)\ref()\q
      j+1 
    Wend 
    ZeilenArray(i)\ref()\j=j
    ;Debug "  "+Str(ZeilenArray(j)\Nummer)+":"+Mid(s,ZeilenArray(j)\Start,ZeilenArray(j)\Laenge)
    ZeilenArray(j)\genutzt=#True
  Next   
  i+1
Wend 

Procedure StepBaumAdd(ebene,index)
  ForEach ZeilenArray(index)\ref()
    AddElement(StepBaum())
     StepBaum()\ebene=ebene+1
    StepBaum()\index=ZeilenArray(index)\ref()\j
    ; Debug Str(ZeilenArray(i)\Nummer)+":"+Mid(s,ZeilenArray(i)\Start,ZeilenArray(i)\Laenge)
    StepBaumAdd(ebene+1,StepBaum()\index)     
  Next 
EndProcedure

i=1
While i<=ls
  If #False=ZeilenArray(i)\genutzt
    AddElement(StepBaum())
    StepBaum()\ebene=0
    StepBaum()\index=i
    ; Debug Str(ZeilenArray(i)\Nummer)+":"+Mid(s,ZeilenArray(i)\Start,ZeilenArray(i)\Laenge)
    StepBaumAdd(0,i)
  EndIf 
  i+1
Wend 

ForEach StepBaum()
  i=StepBaum()\index
  Debug Space(2 * StepBaum()\ebene)+Str(ZeilenArray(i)\Nummer)+":"+
        ReplaceString(Mid(s,ZeilenArray(i)\Start,ZeilenArray(i)\Laenge),#NeueZeile," ")
Next 
 
DataSection
  Start:
  IncludeBinary "/media/kulow/BCE4-8C0F/STEP_EXPRESS/PYRA.STEP" ; Bitte anpassen. 
  Stop:
EndDataSection

Code: Alles auswählen

10:SHAPE_REPRESENTATION_RELATIONSHIP('','',#175,#11);
  175:SHAPE_REPRESENTATION('Part 1',(#176),#273);
    176:AXIS2_PLACEMENT_3D('',#229,#187,#188);
      229:CARTESIAN_POINT('',(0.,0.,0.));
      187:DIRECTION('',(0.,0.,1.));
      188:DIRECTION('',(1.,0.,0.));
    273:( GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#274)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#277,#276,#275)) REPRESENTATION_CONTEXT('Part 1','TOP_LEVEL_ASSEMBLY_PART') );
      274:UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(5.E-6),#277, 'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
        277:( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) );
      277:( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) );
      276:( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
      275:( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
  11:ADVANCED_BREP_SHAPE_REPRESENTATION('',(#173),#273);
    173:MANIFOLD_SOLID_BREP('Part 1',#164);
      164:CLOSED_SHELL('',(#154,#155,#156,#157,#158,#159,#160,#161,#162,#163));
        154:ADVANCED_FACE('',(#134),#144,.T.);
          134:FACE_BOUND('',#124,.T.);
            124:EDGE_LOOP('',(#12,#13,#14,#15));
              12:ORIENTED_EDGE('',*,*,#52,.F.);
                52:EDGE_CURVE('',#72,#73,#84,.T.);
                  72:VERTEX_POINT('',#232);
                    232:CARTESIAN_POINT('',(-0.0168011493515224,0.,0.011230852752924));
                  73:VERTEX_POINT('',#233);
                    233:CARTESIAN_POINT('',(0.0331988506484777,0.,0.011230852752924));
                  84:Line('',#231,#104);
                    231:CARTESIAN_POINT('',(0.00819885064847768,0.,0.011230852752924));
                    104:VECTOR('',#191,1.);
                      191:DIRECTION('',(1.,0.,0.));
              13:ORIENTED_EDGE('',*,*,#53,.F.);
                53:EDGE_CURVE('',#74,#72,#85,.F.);
                  74:VERTEX_POINT('',#235);
                    235:CARTESIAN_POINT('',(-0.00257304723342971,-0.0531,-0.00299724936516865));
                  72:VERTEX_POINT('',#232);
                    232:CARTESIAN_POINT('',(-0.0168011493515224,0.,0.011230852752924));
                  85:Line('',#234,#105);
                    234:CARTESIAN_POINT('',(-0.0152316063441553,-0.00585761424815824,0.00966130974555693));
                    105:VECTOR('',#192,1.);
                      192:DIRECTION('',(0.250562807085731,-0.935113126531029,-0.250562807085731));
...
Antworten