Open Cascade Bibliothek um .step Dateien zu lesen



  • Ich kenne die Bibliothek nicht.

    .cpp-Dateien aus dem Download sollten in deinem Projekt eher nicht vorkommen. Es sollten .lib-Dateien vorhanden sein, die zu deinem Programm gebunden werden.



  • Hm okay danke. Kennt jemand eine kleine library um eine Step-Datei zu lesen? Mit OpenCascade komme ich leider nicht klar.



  • So schwer sollte es mit Open Cascade nicht sein, wenn ich mir diesen Code anschaue: Reading STEP file c++ [Crash] (der Crash kommt wohl wegen seiner speziellen STEP-Datei).

    Ich bezweifle auch, daß die ganzen Includes gebraucht werden.
    M.E. sollte folgendes ausreichen:

    #include <iostream>
    #include "STEPControl_Reader.hxx"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
        if (argc < 2)
        {
            cout << "Usage: Extract Information" << endl;
            cout << "InputFile: a file in STP format" << endl;
            return 1;
        }
    
        //read the STEP file
        STEPControl_Reader reader;
        reader.ReadFile(argv[1]);
    
        //check step file --> invalid or incomplete entities
        IFSelect_PrintCount mode = IFSelect_ItemsByEntity;
        reader.PrintCheckLoad(false, mode);
    
        //Loads file
        int NbRoots = reader.NbRootsForTransfer();
    
        return 0;
    }
    

    Wenn das ersteinmal bei dir kompiliert, dann noch die fehlenden Libs hinzufügen.



  • Danke für deine Antwort.
    ich bekomme den Code leider nicht zum kompilieren. Die Variablen im STEPControl_Reader sind nicht definiert und es werden wieder viele weitere Files inkludiert. Wenn ich diese inkludiere hab ich dort dasselbe Problem

    #ifndef _STEPControl_Reader_HeaderFile
    #define _STEPControl_Reader_HeaderFile
    
    #include <Standard.hxx>
    #include <Standard_DefineAlloc.hxx>
    #include <Standard_Handle.hxx>
    
    #include <XSControl_Reader.hxx>
    #include <Standard_Boolean.hxx>
    #include <Standard_Integer.hxx>
    #include <TColStd_SequenceOfAsciiString.hxx>
    #include <TColStd_Array1OfAsciiString.hxx>
    #include <TColStd_Array1OfReal.hxx>
    class XSControl_WorkSession;
    class StepData_StepModel;
    class StepRepr_RepresentationContext;
    

    Hat denn schon jemand hier OpenCascade hier benutzt?



  • Eine einfache kleine Lib zum Lesen von STEP-Dateien wirst du nicht finden, da STEP nunmal kein kleiner niedlicher Standard ist^^

    OpenCASCADE habe ich schon benutzt und das funktioniert auch. Ich würde dir empfehlen, erstmal das Tutorial durchzuarbeiten, wo man per Code ein Art Flachmann erzeugt.
    Zum Laden von STEP-Dateien brauchst du mehrere Packages von OC, nicht nur TKSTEP, da dieses auf andere aufbaut.

    Wenn du nach Code-Beispielen suchst, achte auch darauf, dass es mit Version 7 ein paar kleine Änderungen in der API gab, weswegen viele OC 6.x-Beispiele nicht gleich kompilieren.



  • Okay Danke. Das werde ich jetzt mal versuchen. Ich glaube fast, dass ich mich als Maschinenbauer mal ins Informatik-Institut begeben muss. Das ganze Thema verlangt wohl doch deutlich mehr Einarbeitung...



  • Wenn ich es nicht vergesse, krame ich zu Hause mal ein altes Testprojekt raus, wo auch nur eine STEP-Datei geladen wird. Von der Arbeit aus habe ich da keinen Zugriff.
    Aber OpenCASCADE erst einmal zum Laufen zu bringen ist nicht unbedingt der einfachste Einstieg^^ Von daher ist deine Idee, dir da Hilfe zu holen, sicherlich nicht verkehrt 🙂



  • Super danke, das würde mich freuen



  • @pellaeon sagte in Open Cascade Bibliothek um .step Dateien zu lesen:

    Aber OpenCASCADE erst einmal zum Laufen zu bringen ist nicht unbedingt der einfachste Einstieg^^

    OpenCASCADE runterladen unter DOWNLOAD OPEN CASCADE TECHNOLOGY 7.3.0: opencascade-7.3.0-vc14-64.exe (237 061 168 bytes)

    Installieren mit Standardeinstellungen.

    In den Visual Studio 2017 Projekteinstellungen

    C:\OpenCASCADE-7.3.0-vc14-64\opencascade-7.3.0\inc zu den Include-Dirs hinzufügen,
    C:\OpenCASCADE-7.3.0-vc14-64\opencascade-7.3.0\win64\vc14\lib zu den Lib-Dirs,

    in Th69's Beispiel #include "STEPControl_Reader.hxx" gegen #include <STEPControl_Reader.hxx> tauschen,

    gegen TKernel.lib, TKXSBase.lib und TKSTEP.lib linken, kompilieren und sich freuen?



  • @Swordfish
    Danke habe ich so probiert. Wenn ich mit der x86-Voreinstellung debug, bekomme ich den Error LNK2019 und für die drei gelinkten libs jeweils die Warnung LNK4272 --> library machine type 'x64' conflicts with target machine type 'x86'

    mit x64 Debug findet er den STEPControl_Reader.hxx nicht. Zuvor mit x86 hingegen schon.

    Weißt du was da los ist? Vielen Dank



  • @simpie sagte in Open Cascade Bibliothek um .step Dateien zu lesen:

    Error LNK2019 und für die drei gelinkten libs jeweils die Warnung LNK4272 --> library machine type 'x64' conflicts with target machine type 'x86'

    x86 Binaries sind bei diesem Installer nicht dabei. Musst Du wohl selbst bauen, wenn Du sie wirklich brauchst.

    @simpie sagte in Open Cascade Bibliothek um .step Dateien zu lesen:

    mit x64 Debug findet er den STEPControl_Reader.hxx nicht. Zuvor mit x86 hingegen schon.

    Die Einstellungen für Include-Dirs und Lib-Dirs gelten pro Konfiguration. Du hast sie offenbar für x64 Release und Debug nicht eigetragen.



  • @Swordfish
    ich habe die Einstellungen für x64 durchgeführt, die Konsole öffnet und es scheint eigentlich zu funktiornieren, dann kommt aber direkt eine Windows-Fehlermeldung
    --> Das Programm kann nicht gestartet werden, da TKSTEP.dll auf dem Computer fehlt. Installieren Sie das Programm erneut, um das Problem zu beheben.

    Ich habe OpenCascade neu runtergeladen --> gleiche Fehlermeldung
    Und aus der Google Suche werde ich auch nicht wirklich schlau 😞



  • TKernel.dll, TKXSBase.dll und TKSTEP.dll kopierst Du aus C:\OpenCASCADE-7.3.0-vc14-64\opencascade-7.3.0\win64\vc14\bin in das Verzeichnis, in dem Deine .exe liegt.



  • Oder die Windows Path-Variable um dieses Verzeichnis erweitern.



  • Vielen Dank. Es scheint fürs erste zu funktionieren



  • Der Vollständigkeit halber: Dynamic-Link Library Search Order
    .



  • Hallo nochmal zusammen,

    laut der Doku kann ein step Datei sehr einfach geladen werden:

    2.3 Description of the process
    2.3.1 Loading the STEP file

    Before performing any other operation you have to load the file with:

    STEPControl_Reader reader;
    IFSelect_ReturnStatus stat = reader.ReadFile(;filename.stp;);
    

    Loading the file only memorizes the data, it does not translate it.
    .....
    --> https://www.opencascade.com/doc/occt-7.3.0/overview/html/occt_user_guides__step.html

    Ich weiß leider nicht wo ich den Pfad zu meiner step-Datei angebe.
    Kann mir eventuell jemand weiterhelfen, vielen Dank!



  • Statt nur den Dateinamen anzugeben, kannst du natürlich dort auch den gesamten Pfad eintragen:

    reader.ReadFile("path\\filename.stp");
    


  • ich komme leider immer noch nur schleppend vorwärts, obwohl ich nur eine einfache step Datei lesen möchte.
    Meine Step Datei besteht aus einem Bemassten Rechteck. Für NbRoots bekomme ich den Wert 1. Sobald ich eine weitere Extrusion im CAD Programm hinzufüge, bekomme ich den Wert 2. Soweit so gut. Ich verstehe leider noch überaupt nicht wie ich bspw. gezielt auf die Bemaßungen zugreifen kann und wie ich mir die Ergebnisse im TopoDS_Shape result anzeigen lassen kann. Ich wäre sehr dankbar wenn mir jemand weiterhelfen könnte!

    #include <iostream>
    #include <STEPControl_Reader.hxx>
    #include <string>
    
    using namespace std;
    
    
    int main() {
    
    	STEPControl_Reader reader;
    	IFSelect_ReturnStatus stat = reader.ReadFile("C:\\Users\\Kelevradesktop.Kelevra-desktop\\Desktop\\Studienarbeit\\steptest.step");
    	IFSelect_PrintCount mode = IFSelect_ListByItem;
    	reader.PrintCheckLoad(false, mode);
    
    	Standard_Integer NbRoots = reader.NbRootsForTransfer();                      //Transfer whole file
    	Standard_Integer num = reader.TransferRoots();
    
    	Standard_Integer NbTrans = reader.TransferRoots();
    	TopoDS_Shape result = reader.OneShape();
    	TopoDS_Shape shape = reader.Shape();
    
    
    	cout << NbRoots << endl;
    	cout << NbTrans << endl;
    	cout << num << endl;
    
    	system("pause");
    
    	return 0;
    }
    


  • @Th69 kannst du mir vielleicht ein bisschen weiterhelfen? Die Zeit schreitet voran und ich komme einfach nicht weiter mit OpenCascade und wie ich es anwenden muss um meine Geometriedaten aus der step Datei auslesen zu können 😞
    Vielen Dank schonmal !
    Beste Grüße simpie


Anmelden zum Antworten