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));
...