3D STEP-Files
3D STEP-Files
hat sich von euch schon jemand mit dem Einlesen von STEP-Files beschäftigt?
Hab mich jetzt mit der Doku zum STEP-Formt beschäftigt. Das ist echt übel!!
Ich hab mir einigen C-Code zum Parsen von STEPs angesehen, unter anderem von FreeCAD,
hab aber absolut #Null verstanden! Da ist nirgends auch nur eine einziges KeyWord drin, was in den STEPs auftaucht.
Eine brauchbare DLL für STEPs hab ich auch nicht gefunden.
Mein Ziel: STEPs einlesen und als Mesh oder über die OGRE Engine anzeigen
! sicherlich noch ein langer Weg!
Ich hab jetzt mal ein Grundprogramm in PB erzeugt, was alle FunktionsNamen/KeyWords in einer DataSection enthält, dazu die Konstanten, die die Namen repräsentieren. Eine Procedure für jede Function ... (es gibt nach meiner Recherche 2273 Funktionsnamen, die in den STEPs auftauchen können
Das alles zusammen gibt bereits rund 18.000 Zeilen Code, so dass ich das hier nicht posten kann!
Hat von euch schon jemand irgendwelchen Code erstellt, der etwas mit STEPs zu tun hat und kann diesen zur Verfügung stellen?
Dann versuch ich das einzubauen!
hier hab ich eine Doku zu STEP gefunden. Davon hab ich mir die ganzen KeyWords kopiert
https://www.steptools.com/stds/stp_aim/html/
Hab mich jetzt mit der Doku zum STEP-Formt beschäftigt. Das ist echt übel!!
Ich hab mir einigen C-Code zum Parsen von STEPs angesehen, unter anderem von FreeCAD,
hab aber absolut #Null verstanden! Da ist nirgends auch nur eine einziges KeyWord drin, was in den STEPs auftaucht.
Eine brauchbare DLL für STEPs hab ich auch nicht gefunden.
Mein Ziel: STEPs einlesen und als Mesh oder über die OGRE Engine anzeigen
! sicherlich noch ein langer Weg!
Ich hab jetzt mal ein Grundprogramm in PB erzeugt, was alle FunktionsNamen/KeyWords in einer DataSection enthält, dazu die Konstanten, die die Namen repräsentieren. Eine Procedure für jede Function ... (es gibt nach meiner Recherche 2273 Funktionsnamen, die in den STEPs auftauchen können
Das alles zusammen gibt bereits rund 18.000 Zeilen Code, so dass ich das hier nicht posten kann!
Hat von euch schon jemand irgendwelchen Code erstellt, der etwas mit STEPs zu tun hat und kann diesen zur Verfügung stellen?
Dann versuch ich das einzubauen!
hier hab ich eine Doku zu STEP gefunden. Davon hab ich mir die ganzen KeyWords kopiert
https://www.steptools.com/stds/stp_aim/html/
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: 3D STEP-Files
Onshape erzeugte folgendes STEP:
Wie sieht dazu das ORGE-Mesh aus?
Code: Alles auswählen
ISO-10303-21;
HEADER;
/* Generated by software containing ST-Developer
* from STEP Tools, Inc. (www.steptools.com)
*/
/* OPTION: using custom renumber hook */
FILE_DESCRIPTION(
/* description */ ('STEP AP242',
'CAx-IF Rec.Pracs.---Representation and Presentation of Product Manufa
cturing Information (PMI)---4.0---2014-10-13',
'CAx-IF Rec.Pracs.---3D Tessellated Geometry---0.4---2014-09-14','2;1'),
/* implementation_level */ '2;1');
FILE_NAME(
/* name */ '63e86e2dee9848108c104120',
/* time_stamp */ '2023-02-12T04:42:22+00:00',
/* author */ (''),
/* organization */ (''),
/* preprocessor_version */ 'ST-DEVELOPER v18.102',
/* originating_system */ ' ',
/* authorisation */ ' ');
FILE_SCHEMA (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF { 1 0 10303 442 1 1 4 }'));
ENDSEC;
DATA;
#10=SHAPE_REPRESENTATION_RELATIONSHIP('','',#175,#11);
#11=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#173),#273);
#12=ORIENTED_EDGE('',*,*,#52,.F.);
#13=ORIENTED_EDGE('',*,*,#53,.F.);
#14=ORIENTED_EDGE('',*,*,#54,.T.);
#15=ORIENTED_EDGE('',*,*,#55,.T.);
#16=ORIENTED_EDGE('',*,*,#56,.T.);
#17=ORIENTED_EDGE('',*,*,#57,.F.);
#18=ORIENTED_EDGE('',*,*,#58,.F.);
#19=ORIENTED_EDGE('',*,*,#53,.T.);
#20=ORIENTED_EDGE('',*,*,#59,.T.);
#21=ORIENTED_EDGE('',*,*,#60,.F.);
#22=ORIENTED_EDGE('',*,*,#61,.F.);
#23=ORIENTED_EDGE('',*,*,#57,.T.);
#24=ORIENTED_EDGE('',*,*,#62,.F.);
#25=ORIENTED_EDGE('',*,*,#55,.F.);
#26=ORIENTED_EDGE('',*,*,#63,.T.);
#27=ORIENTED_EDGE('',*,*,#60,.T.);
#28=ORIENTED_EDGE('',*,*,#52,.T.);
#29=ORIENTED_EDGE('',*,*,#62,.T.);
#30=ORIENTED_EDGE('',*,*,#59,.F.);
#31=ORIENTED_EDGE('',*,*,#56,.F.);
#32=ORIENTED_EDGE('',*,*,#54,.F.);
#33=ORIENTED_EDGE('',*,*,#64,.F.);
#34=ORIENTED_EDGE('',*,*,#65,.T.);
#35=ORIENTED_EDGE('',*,*,#66,.T.);
#36=ORIENTED_EDGE('',*,*,#58,.T.);
#37=ORIENTED_EDGE('',*,*,#67,.F.);
#38=ORIENTED_EDGE('',*,*,#68,.F.);
#39=ORIENTED_EDGE('',*,*,#64,.T.);
#40=ORIENTED_EDGE('',*,*,#61,.T.);
#41=ORIENTED_EDGE('',*,*,#69,.F.);
#42=ORIENTED_EDGE('',*,*,#70,.F.);
#43=ORIENTED_EDGE('',*,*,#67,.T.);
#44=ORIENTED_EDGE('',*,*,#63,.F.);
#45=ORIENTED_EDGE('',*,*,#66,.F.);
#46=ORIENTED_EDGE('',*,*,#71,.T.);
#47=ORIENTED_EDGE('',*,*,#69,.T.);
#48=ORIENTED_EDGE('',*,*,#65,.F.);
#49=ORIENTED_EDGE('',*,*,#68,.T.);
#50=ORIENTED_EDGE('',*,*,#70,.T.);
#51=ORIENTED_EDGE('',*,*,#71,.F.);
#52=EDGE_CURVE('',#72,#73,#84,.T.);
#53=EDGE_CURVE('',#74,#72,#85,.F.);
#54=EDGE_CURVE('',#74,#75,#86,.T.);
#55=EDGE_CURVE('',#75,#73,#87,.T.);
#56=EDGE_CURVE('',#72,#76,#88,.F.);
#57=EDGE_CURVE('',#77,#76,#89,.T.);
#58=EDGE_CURVE('',#74,#77,#90,.F.);
#59=EDGE_CURVE('',#76,#78,#91,.F.);
#60=EDGE_CURVE('',#79,#78,#92,.F.);
#61=EDGE_CURVE('',#77,#79,#93,.F.);
#62=EDGE_CURVE('',#73,#78,#94,.T.);
#63=EDGE_CURVE('',#75,#79,#95,.T.);
#64=EDGE_CURVE('',#80,#74,#96,.T.);
#65=EDGE_CURVE('',#80,#81,#97,.T.);
#66=EDGE_CURVE('',#81,#75,#98,.T.);
#67=EDGE_CURVE('',#82,#77,#99,.T.);
#68=EDGE_CURVE('',#80,#82,#100,.F.);
#69=EDGE_CURVE('',#83,#79,#101,.T.);
#70=EDGE_CURVE('',#82,#83,#102,.F.);
#71=EDGE_CURVE('',#81,#83,#103,.T.);
#72=VERTEX_POINT('',#232);
#73=VERTEX_POINT('',#233);
#74=VERTEX_POINT('',#235);
#75=VERTEX_POINT('',#237);
#76=VERTEX_POINT('',#241);
#77=VERTEX_POINT('',#243);
#78=VERTEX_POINT('',#247);
#79=VERTEX_POINT('',#249);
#80=VERTEX_POINT('',#257);
#81=VERTEX_POINT('',#259);
#82=VERTEX_POINT('',#263);
#83=VERTEX_POINT('',#267);
#84=LINE('',#231,#104);
#85=LINE('',#234,#105);
#86=LINE('',#236,#106);
#87=LINE('',#238,#107);
#88=LINE('',#240,#108);
#89=LINE('',#242,#109);
#90=LINE('',#244,#110);
#91=LINE('',#246,#111);
#92=LINE('',#248,#112);
#93=LINE('',#250,#113);
#94=LINE('',#252,#114);
#95=LINE('',#253,#115);
#96=LINE('',#256,#116);
#97=LINE('',#258,#117);
#98=LINE('',#260,#118);
#99=LINE('',#262,#119);
#100=LINE('',#264,#120);
#101=LINE('',#266,#121);
#102=LINE('',#268,#122);
#103=LINE('',#270,#123);
#104=VECTOR('',#191,1.);
#105=VECTOR('',#192,1.);
#106=VECTOR('',#193,1.);
#107=VECTOR('',#194,1.);
#108=VECTOR('',#197,1.);
#109=VECTOR('',#198,1.);
#110=VECTOR('',#199,1.);
#111=VECTOR('',#202,1.);
#112=VECTOR('',#203,1.);
#113=VECTOR('',#204,1.);
#114=VECTOR('',#207,1.);
#115=VECTOR('',#208,1.);
#116=VECTOR('',#213,1.);
#117=VECTOR('',#214,1.);
#118=VECTOR('',#215,1.);
#119=VECTOR('',#218,1.);
#120=VECTOR('',#219,1.);
#121=VECTOR('',#222,1.);
#122=VECTOR('',#223,1.);
#123=VECTOR('',#226,1.);
#124=EDGE_LOOP('',(#12,#13,#14,#15));
#125=EDGE_LOOP('',(#16,#17,#18,#19));
#126=EDGE_LOOP('',(#20,#21,#22,#23));
#127=EDGE_LOOP('',(#24,#25,#26,#27));
#128=EDGE_LOOP('',(#28,#29,#30,#31));
#129=EDGE_LOOP('',(#32,#33,#34,#35));
#130=EDGE_LOOP('',(#36,#37,#38,#39));
#131=EDGE_LOOP('',(#40,#41,#42,#43));
#132=EDGE_LOOP('',(#44,#45,#46,#47));
#133=EDGE_LOOP('',(#48,#49,#50,#51));
#134=FACE_BOUND('',#124,.T.);
#135=FACE_BOUND('',#125,.T.);
#136=FACE_BOUND('',#126,.T.);
#137=FACE_BOUND('',#127,.T.);
#138=FACE_BOUND('',#128,.T.);
#139=FACE_BOUND('',#129,.T.);
#140=FACE_BOUND('',#130,.T.);
#141=FACE_BOUND('',#131,.T.);
#142=FACE_BOUND('',#132,.T.);
#143=FACE_BOUND('',#133,.T.);
#144=PLANE('',#177);
#145=PLANE('',#178);
#146=PLANE('',#179);
#147=PLANE('',#180);
#148=PLANE('',#181);
#149=PLANE('',#182);
#150=PLANE('',#183);
#151=PLANE('',#184);
#152=PLANE('',#185);
#153=PLANE('',#186);
#154=ADVANCED_FACE('',(#134),#144,.T.);
#155=ADVANCED_FACE('',(#135),#145,.T.);
#156=ADVANCED_FACE('',(#136),#146,.T.);
#157=ADVANCED_FACE('',(#137),#147,.T.);
#158=ADVANCED_FACE('',(#138),#148,.F.);
#159=ADVANCED_FACE('',(#139),#149,.T.);
#160=ADVANCED_FACE('',(#140),#150,.F.);
#161=ADVANCED_FACE('',(#141),#151,.F.);
#162=ADVANCED_FACE('',(#142),#152,.T.);
#163=ADVANCED_FACE('',(#143),#153,.T.);
#164=CLOSED_SHELL('',(#154,#155,#156,#157,#158,#159,#160,#161,#162,#163));
#165=STYLED_ITEM('',(#166),#173);
#166=PRESENTATION_STYLE_ASSIGNMENT((#167));
#167=SURFACE_STYLE_USAGE(.BOTH.,#168);
#168=SURFACE_SIDE_STYLE('',(#169));
#169=SURFACE_STYLE_FILL_AREA(#170);
#170=FILL_AREA_STYLE('',(#171));
#171=FILL_AREA_STYLE_COLOUR('',#172);
#172=COLOUR_RGB('',0.615686274509804,0.811764705882353,0.929411764705882);
#173=MANIFOLD_SOLID_BREP('Part 1',#164);
#174=SHAPE_DEFINITION_REPRESENTATION(#278,#175);
#175=SHAPE_REPRESENTATION('Part 1',(#176),#273);
#176=AXIS2_PLACEMENT_3D('',#229,#187,#188);
#177=AXIS2_PLACEMENT_3D('',#230,#189,#190);
#178=AXIS2_PLACEMENT_3D('',#239,#195,#196);
#179=AXIS2_PLACEMENT_3D('',#245,#200,#201);
#180=AXIS2_PLACEMENT_3D('',#251,#205,#206);
#181=AXIS2_PLACEMENT_3D('',#254,#209,#210);
#182=AXIS2_PLACEMENT_3D('',#255,#211,#212);
#183=AXIS2_PLACEMENT_3D('',#261,#216,#217);
#184=AXIS2_PLACEMENT_3D('',#265,#220,#221);
#185=AXIS2_PLACEMENT_3D('',#269,#224,#225);
#186=AXIS2_PLACEMENT_3D('',#271,#227,#228);
#187=DIRECTION('',(0.,0.,1.));
#188=DIRECTION('',(1.,0.,0.));
#189=DIRECTION('',(0.,-0.258819045102521,0.965925826289068));
#190=DIRECTION('',(0.,-0.965925826289068,-0.258819045102521));
#191=DIRECTION('',(1.,0.,0.));
#192=DIRECTION('',(0.250562807085731,-0.935113126531029,-0.250562807085731));
#193=DIRECTION('',(1.,0.,0.));
#194=DIRECTION('',(0.250562807085731,0.935113126531029,0.250562807085731));
#195=DIRECTION('',(-0.965925826289068,-0.258819045102521,-6.09314257060343E-17));
#196=DIRECTION('',(0.258819045102521,-0.965925826289068,0.));
#197=DIRECTION('',(-6.30808536718839E-17,0.,1.));
#198=DIRECTION('',(-0.250562807085731,0.935113126531029,-0.250562807085731));
#199=DIRECTION('',(-6.30808536718839E-17,0.,1.));
#200=DIRECTION('',(0.,-0.258819045102521,-0.965925826289068));
#201=DIRECTION('',(0.,0.965925826289068,-0.258819045102521));
#202=DIRECTION('',(-1.,0.,0.));
#203=DIRECTION('',(-0.250562807085731,-0.935113126531029,0.250562807085731));
#204=DIRECTION('',(-1.,0.,0.));
#205=DIRECTION('',(0.965925826289068,-0.258819045102521,0.));
#206=DIRECTION('',(0.258819045102521,0.965925826289068,0.));
#207=DIRECTION('',(0.,0.,-1.));
#208=DIRECTION('',(0.,0.,-1.));
#209=DIRECTION('',(0.,-1.,0.));
#210=DIRECTION('',(1.,0.,0.));
#211=DIRECTION('',(0.,0.,1.));
#212=DIRECTION('',(1.,0.,0.));
#213=DIRECTION('',(0.,1.,0.));
#214=DIRECTION('',(1.,0.,0.));
#215=DIRECTION('',(0.,1.,0.));
#216=DIRECTION('',(1.,0.,6.30808536718839E-17));
#217=DIRECTION('',(6.30808536718839E-17,0.,-1.));
#218=DIRECTION('',(0.,1.,0.));
#219=DIRECTION('',(-6.30808536718839E-17,0.,1.));
#220=DIRECTION('',(0.,0.,1.));
#221=DIRECTION('',(1.,0.,0.));
#222=DIRECTION('',(0.,1.,0.));
#223=DIRECTION('',(-1.,0.,0.));
#224=DIRECTION('',(1.,0.,0.));
#225=DIRECTION('',(0.,0.,-1.));
#226=DIRECTION('',(0.,0.,-1.));
#227=DIRECTION('',(0.,-1.,0.));
#228=DIRECTION('',(1.,0.,0.));
#229=CARTESIAN_POINT('',(0.,0.,0.));
#230=CARTESIAN_POINT('',(0.00819885064847768,0.,0.011230852752924));
#231=CARTESIAN_POINT('',(0.00819885064847768,0.,0.011230852752924));
#232=CARTESIAN_POINT('',(-0.0168011493515224,0.,0.011230852752924));
#233=CARTESIAN_POINT('',(0.0331988506484777,0.,0.011230852752924));
#234=CARTESIAN_POINT('',(-0.0152316063441553,-0.00585761424815824,0.00966130974555693));
#235=CARTESIAN_POINT('',(-0.00257304723342971,-0.0531,-0.00299724936516865));
#236=CARTESIAN_POINT('',(0.00819885064847768,-0.0531,-0.00299724936516865));
#237=CARTESIAN_POINT('',(0.0189707485303851,-0.0531,-0.00299724936516865));
#238=CARTESIAN_POINT('',(0.0316293076411107,-0.00585761424815824,0.00966130974555693));
#239=CARTESIAN_POINT('',(-0.0168011493515224,0.,0.011230852752924));
#240=CARTESIAN_POINT('',(-0.0168011493515224,0.,0.011230852752924));
#241=CARTESIAN_POINT('',(-0.0168011493515223,0.,-0.043769147247076));
#242=CARTESIAN_POINT('',(-0.0152316063441553,-0.00585761424815824,-0.042199604239709));
#243=CARTESIAN_POINT('',(-0.00257304723342971,-0.0531,-0.0295410451289834));
#244=CARTESIAN_POINT('',(-0.00257304723342971,-0.0531,0.011230852752924));
#245=CARTESIAN_POINT('',(0.00819885064847768,0.,-0.043769147247076));
#246=CARTESIAN_POINT('',(0.00819885064847768,0.,-0.043769147247076));
#247=CARTESIAN_POINT('',(0.0331988506484777,0.,-0.043769147247076));
#248=CARTESIAN_POINT('',(0.0316293076411107,-0.00585761424815824,-0.042199604239709));
#249=CARTESIAN_POINT('',(0.0189707485303851,-0.0531,-0.0295410451289834));
#250=CARTESIAN_POINT('',(0.00819885064847768,-0.0531,-0.0295410451289835));
#251=CARTESIAN_POINT('',(0.0331988506484777,0.,0.011230852752924));
#252=CARTESIAN_POINT('',(0.0331988506484777,0.,0.011230852752924));
#253=CARTESIAN_POINT('',(0.0189707485303851,-0.0531,0.011230852752924));
#254=CARTESIAN_POINT('',(0.00819885064847768,0.,-0.0162691472470761));
#255=CARTESIAN_POINT('',(0.00819885064847768,-0.0556,-0.00299724936516865));
#256=CARTESIAN_POINT('',(-0.00257304723342971,-0.0556,-0.00299724936516865));
#257=CARTESIAN_POINT('',(-0.00257304723342971,-0.0556,-0.00299724936516865));
#258=CARTESIAN_POINT('',(0.00819885064847768,-0.0556,-0.00299724936516865));
#259=CARTESIAN_POINT('',(0.0189707485303851,-0.0556,-0.00299724936516865));
#260=CARTESIAN_POINT('',(0.0189707485303851,-0.0556,-0.00299724936516865));
#261=CARTESIAN_POINT('',(-0.00257304723342971,-0.0556,0.011230852752924));
#262=CARTESIAN_POINT('',(-0.00257304723342971,-0.0556,-0.0295410451289834));
#263=CARTESIAN_POINT('',(-0.00257304723342971,-0.0556,-0.0295410451289834));
#264=CARTESIAN_POINT('',(-0.00257304723342971,-0.0556,0.011230852752924));
#265=CARTESIAN_POINT('',(0.00819885064847768,-0.0556,-0.0295410451289835));
#266=CARTESIAN_POINT('',(0.0189707485303851,-0.0556,-0.0295410451289834));
#267=CARTESIAN_POINT('',(0.0189707485303851,-0.0556,-0.0295410451289834));
#268=CARTESIAN_POINT('',(0.00819885064847768,-0.0556,-0.0295410451289835));
#269=CARTESIAN_POINT('',(0.0189707485303851,-0.0556,0.011230852752924));
#270=CARTESIAN_POINT('',(0.0189707485303851,-0.0556,0.011230852752924));
#271=CARTESIAN_POINT('',(0.00819885064847768,-0.0556,-0.0162691472470761));
#272=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#165),
#273);
#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');
#275=(
NAMED_UNIT(*)
SI_UNIT($,.STERADIAN.)
SOLID_ANGLE_UNIT()
);
#276=(
NAMED_UNIT(*)
PLANE_ANGLE_UNIT()
SI_UNIT($,.RADIAN.)
);
#277=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT($,.METRE.)
);
#278=PRODUCT_DEFINITION_SHAPE('','',#279);
#279=PRODUCT_DEFINITION('','',#281,#280);
#280=PRODUCT_DEFINITION_CONTEXT('',#287,'design');
#281=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#283,
.NOT_KNOWN.);
#282=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#283));
#283=PRODUCT('Part 1','Part 1','Part 1',(#285));
#284=PRODUCT_CATEGORY('','');
#285=PRODUCT_CONTEXT('',#287,'mechanical');
#286=APPLICATION_PROTOCOL_DEFINITION('international standard',
'ap242_managed_model_based_3d_engineering',2011,#287);
#287=APPLICATION_CONTEXT('managed model based 3d engineering');
ENDSEC;
END-ISO-10303-21;
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Re: 3D STEP-Files
STEP ist sowas wie eine komplette Sprache und wegen der Vorwärts- und Rückwärtsverweise über mehrere Eben,#167=SURFACE_STYLE_USAGE(.BOTH.,#168); Das verweist auf #168
#168=SURFACE_SIDE_STYLE('',(#169)); Das verweist auf #169
#169=SURFACE_STYLE_FILL_AREA(#170); Das verweist auf #170
#170=FILL_AREA_STYLE('',(#171)); Das verweist auf #171
#171=FILL_AREA_STYLE_COLOUR('',#172); Das verweist auf #172, wo wir dann endlich echte Werte haben
#172=COLOUR_RGB('',0.615686274509804,0.811764705882353,0.929411764705882);
extrem kompliziert umzusetzen.
Praktisch kein STEP Im-/Exporter verwendet alle möglichen Befehle, da es z.B. auch Befehle für Bearbeitungsmaschinen gibt.
Im Prinzip mit den Verweisen hab ich verstanden.
Ich bin auf der Suche nach einer Datenstruktur, die STEP Daten dann als 3D Objekt abbildet und einem Ansatz, das dann in ein Mesh zu verwandeln,
da STEP Volumenköper beschreibt.
Wie gesagt, ich hab mit den C++ Code dazu von FreeCAD angesehen! Nicht's verstanden!
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: 3D STEP-Files
Aus den 43 CARTESIAN_POINT die Liste mit den 120 Punkten für MeshVertexPosition(x, y, z) zu erzeugen wird bestimmt spannend.
- alter Mann
- Beiträge: 201
- Registriert: 29.08.2008 09:13
- Wohnort: hinterm Mond
Re: 3D STEP-Files
ich habe für ein CAM-System eine STEP-Import und -Exportschnittstelle gemacht, allerdings in C. Hilft dir also nicht so viel. Bei den ganzen mathematischen Sachen (B-Splines, Triangulation von Flächen etc.) kann ich sicher helfen.
Win11 64Bit / PB 6.0
Re: 3D STEP-Files
Ich hab eine Grundahnung von C und musste das auch mal lernen. Aber ausser auf dem Arduino verwende ich C nicht!ich habe für ein CAM-System eine STEP-Import und -Exportschnittstelle gemacht, allerdings in C. Hilft dir also nicht so viel.
Vielleicht kannst du mir aber ein paar grundsätzliche Fragen beantworten.
1. In den C-Codes die ich mir angesehen habe (speziell FreeCad) gibt es nirgends KeyWords oder ähnliches.
Es fehlen nach meinem Verständnis also die absoluten Basics.
Wie kann das sein, bzw. gibt es noch irgendein allgemeines Framework, eine Header Datei oder einen STEP_BASIC_PARSER wo das drin ist?
2. Ich hab mir die ganzen Definitionen bei steptools.com angesehen
im Prinzip sind das 2273 unterschiedliche Datentypen, die man als Structure implementieren müsste!
Das wäre nicht das größte Problem. Macht aber wahrscheinlich wenig Sinn!
Meine Idee: eine Allgemeine Struct, welche einen Byte Datenblock definiert, den man per Union als verschiedene Werte interpretiert.
dazu eine ID des STEP Types
etwa in dieser Richtung! Bin ich damit auf dem richtigen Weg oder ist das Blödsinn?
Code: Alles auswählen
Structure TStepUni
Name.s
StepTypeID.i
Data.a[256]
EndStructure
Was ist das?
Für mich sieht das nach speziellen C++ Klassentypen aus, die man recht variable handhaben kann,
was so in Purebasic nicht funktioniert.
Das ist schon mal gut. Das würde ich wohl mit Hilfe von Literatur auch hinbekommen, halt langwieriger!Bei den ganzen mathematischen Sachen (B-Splines, Triangulation von Flächen etc.) kann ich sicher helfen.
Ist das nicht evtl. schon Teil von OpenGL und man kann die OpenGl libraries dafür verwenden?
Re: 3D STEP-Files
hier mal das was ich an Code schon habe:
https://github.com/Maagic7/PureBasicFra ... _Basics.pb
https://github.com/Maagic7/PureBasicFra ... _STEP3D.pb
https://github.com/Maagic7/PureBasicFra ... _Basics.pb
https://github.com/Maagic7/PureBasicFra ... _STEP3D.pb
- alter Mann
- Beiträge: 201
- Registriert: 29.08.2008 09:13
- Wohnort: hinterm Mond
Re: 3D STEP-Files
Also da ich nur die Geometrie und Darstellungsattribute aus dem STEP einlesen wollte, habe ich mich auf folgende Elemente konzentriert
Da die Länge eines STEP-Elements nicht begrenzt ist, ist ein allgemeines STEP-Element nur mit einem fexiblen Speicherbereich umsetzbar.
So lange die Daten nur mit B-Splines (Flächen und Kurven), einfach beschreibbaren Flachen (Ebene,Zylinder,Kegel,Kugel,Torus) und Triangulationsdaten besteht, ist die Darstellung mittels OpenGL am besten geeignet. Ich bin einen anderen Weg gegangen, weil ich mit den Daten weiterarbeiten musste.
Ich habe alle Flächendaten, die nicht Triangulationsdaten sind, in Polynome umgerechnet.
Zu Anfang würde ich empfehlen, erst mal die CARTESIAN_POINT einzulesen und darzustellen.
Super- und Subtypes sind eigentlich nur Ordnungsgruppierungen.
Code: Alles auswählen
CARTESIAN_POINT
VERTEX_POINT
DIRECTION
AXIS2_PLACEMENT_3D
AXIS2_PLACEMENT_2D
AXIS1_PLACEMENT
VECTOR
BOUNDED_CURVE
LINE
CIRCLE
ELLIPSE
POLYLINE
POLY_LOOP
DEFINITIONAL_REPRESENTATION
SURFACE_CURVE
BOUNDED_SURFACE_CURVE
PCURVE
COMPOSITE_CURVE_SEGMENT
UNIFORM_CURVE
BEZIER_CURVE
RATIONAL_B_SPLINE_CURVE
ORIENTED_EDGE
EDGE_LOOP
EDGE_CURVE
FACE_OUTER_BOUND
ADVANCED_FACE
CURVE_BOUNDED_SURFACE
OUTER_BOUNDARY_CURVE
BOUNDARY_CURVE
FACE_SURFACE
FACE_BOUND
BOUNDED_SURFACE
PLANE
CYLINDRICAL_SURFACE
SPHERICAL_SURFACE
TRIMMED_CURVE
COMPOSITE_CURVE
QUASI_UNIFORM_CURVE
QUASI_UNIFORM_SURFACE
UNIFORM_SURFACE
BEZIER_SURFACE
OFFSET_SURFACE
B_SPLINE_CURVE
INTERSECTION_CURVE
B_SPLINE_CURVE_WITH_KNOTS
B_SPLINE_SURFACE
B_SPLINE_SURFACE_WITH_KNOTS
RATIONAL_B_SPLINE_SURFACE
SURFACE_OF_LINEAR_EXTRUSION
SURFACE_OF_REVOLUTION
TOROIDAL_SURFACE
DEGENERATE_TOROIDAL_SURFACE
CONICAL_SURFACE
VERTEX_LOOP
CLOSED_SHELL
OPEN_SHELL
VERTEX_SHELL
WIRE_SHELL
ORIENTED_CLOSED_SHELL
MANIFOLD_SOLID_BREP
FACETED_BREP
GEOMETRIC_REPRESENTATION_ITEM
BREP_WITH_VOIDS
SHELL_BASED_SURFACE_MODEL
GEOMETRIC_SET
GEOMETRIC_CURVE_SET
INVISIBILITY
TESSELLATED_SHAPE_REPRESENTATION
TESSELLATED_SOLID
TESSELLATED_CURVE_SET
COMPLEX_TRIANGULATED_FACE
COMPLEX_TRIANGULATED_SURFACE_SET
COORDINATES_LIST
PRESENTATION_LAYER_ASSIGNMENT
SHAPE_REPRESENTATION
ADVANCED_BREP_SHAPE_REPRESENTATION
MANIFOLD_SURFACE_SHAPE_REPRESENTATION
GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION
GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION
SHAPE_DEFINITION_REPRESENTATION
SHAPE_REPRESENTATION_RELATIONSHIP
MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION
CONTEXT_DEPENDENT_SHAPE_REPRESENTATION
OVER_RIDING_STYLED_ITEM
STYLED_ITEM
SURFACE_STYLE_USAGE
SURFACE_SIDE_STYLE
SURFACE_STYLE_FILL_AREA
SURFACE_STYLE_BOUNDARY
SURFACE_STYLE_PARAMETER_LINE
FILL_AREA_STYLE
FILL_AREA_STYLE_COLOUR
PRESENTATION_STYLE_ASSIGNMENT
CURVE_STYLE
POINT_STYLE
COLOUR_RGB
DRAUGHTING_MODEL
DRAUGHTING_PRE_DEFINED_CURVE_FONT
DRAUGHTING_PRE_DEFINED_COLOUR
ANNOTATION_PLANE
DRAUGHTING_CALLOUT
TESSELLATED_ANNOTATION_OCCURRENCE
PRE_DEFINED_MARKER
PRE_DEFINED_POINT_MARKER_SYMBOL
SURFACE_STYLE_RENDERING_WITH_PROPERTIES
SURFACE_STYLE_TRANSPARENT
PLANE_ANGLE_MEASURE_WITH_UNIT
PLANE_ANGLE_UNIT
SOLID_ANGLE_UNIT
LENGTH_UNIT
LENGTH_MEASURE_WITH_UNIT
UNCERTAINTY_MEASURE_WITH_UNIT
GEOMETRIC_REPRESENTATION_CONTEXT
ITEM_DEFINED_TRANSFORMATION
MAPPED_ITEM
REPRESENTATION_MAP
PROJECT
NEXT_ASSEMBLY_USAGE_OCCURRENCE
PRODUCT_DEFINITION
PRODUCT_DEFINITION_FORMATION
PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE
PRODUCT_DEFINITION_SHAPE
So lange die Daten nur mit B-Splines (Flächen und Kurven), einfach beschreibbaren Flachen (Ebene,Zylinder,Kegel,Kugel,Torus) und Triangulationsdaten besteht, ist die Darstellung mittels OpenGL am besten geeignet. Ich bin einen anderen Weg gegangen, weil ich mit den Daten weiterarbeiten musste.
Ich habe alle Flächendaten, die nicht Triangulationsdaten sind, in Polynome umgerechnet.
Zu Anfang würde ich empfehlen, erst mal die CARTESIAN_POINT einzulesen und darzustellen.
Super- und Subtypes sind eigentlich nur Ordnungsgruppierungen.
Win11 64Bit / PB 6.0
Re: 3D STEP-Files oder IGES!
Das auf die wichtigsten Elemente Begrenzen, ist wohl der einzig gangbare Weg. Ich werd mit dazu mal ein Tool basteln, was die Standard STEP Modelle mal nach den verwendeten Funktionen durchforstet.Also da ich nur die Geometrie und Darstellungsattribute aus dem STEP einlesen wollte, habe ich mich auf folgende Elemente konzentriert
So wie es aussieht werde ich aber erst mal auf IGES umsteigen, das ist relativ einfach zu kapieren, hat nur nur rund 40 Funktionen und ist auch noch gut dokumentiert!
https://wiki.eclipse.org/IGES_file_Specification
STEP nach IGES dürfte mit gängigen CAD Programmen oder Wandlern kein Probem sein. Oft bekommt man auch gleich STEP oder IGES zum Download angeboten.
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten