AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OpenCascade

Ein Thema von Raible · begonnen am 14. Jul 2016 · letzter Beitrag vom 29. Jul 2016
Antwort Antwort
Raible

Registriert seit: 12. Mär 2012
30 Beiträge
 
#1

AW: OpenCascade

  Alt 19. Jul 2016, 08:07
vielen Dank schon mal im voraus.



was meinen eigenen C/C++ Code anbelangt habe ich zunächst
ein Win32 Projekt mit Anwendungstyp DLL erstellt.
Die dabei erstellten Dateien
dllmain.cpp
stdafx.cpp
stdafx.h
targetver.h

sind unverändert.

zusätzlich erstellte ich die Datei "C_WNT_Window.cpp" mit folgendem Inhalt:

Code:
#include "stdafx.h"
#include <WNT_Window.hxx>

#define EXPORTCALL __declspec(dllexport)


typedef WNT_Window *WNT_WindowHandle;

extern "C"
{
   WNT_WindowHandle EXPORTCALL NewWNT_Window(
      const Aspect_Handle aHandle,
      const Quantity_NameOfColor aBackColor = Quantity_NOC_MATRAGRAY)
   {
      WNT_WindowHandle handle = new WNT_Window(aHandle, aBackColor);
      return handle;
   }


   void EXPORTCALL DeleteWNT_Window(WNT_WindowHandle handle)
   {
      handle->Unmap();
      delete handle;

   }



}// extern "C"
Damit wollte ich testen ob es mir überhaupt gelingt ein C++ Object
aus Delphi heraus zu verwenden.

Die Fehler ereignen sich aber bereits bei der Initialisierung der OCC DLLs.
Obiger Code ist da noch nicht involviert.

auf der Delphi Seite binde ich die DLL Dynamisch ein
Code:
unit OCCWrapper;

interface
uses
  WinApi.Windows;

const
  LibName = 'OCCWrapper.dll';

var
  OCCLibHnd: THandle;

implementation

initialization
  OCCLibHnd := LoadLibrary(LibName);
finalization
  FreeLibrary(OCCLibHnd);
  OCCLibHnd := 0;
end.


Möglicherweise genügt es nicht, nur #include <WNT_Window.hxx> einzubinden?
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: OpenCascade

  Alt 19. Jul 2016, 13:22
Hallo also mit dem include von

#include <WNT_Window.hxx>
bindest Du quasi das ganze OCC mit ein.
das ist zum testen wohl kaum optimal.

Auch das mischen von c++ Windows und Delphi Forms würde ich lassen.... Damit fällst Du 100% auf die Nase.

Opencascade ist auch mehr eine Geometrie Library als ein Viewer. Mit den reinen Geometrie Klassen klappt das super.

Was willst Du eigentlich genau machen?
Fritz Westermann
  Mit Zitat antworten Zitat
Raible

Registriert seit: 12. Mär 2012
30 Beiträge
 
#3

AW: OpenCascade

  Alt 19. Jul 2016, 20:15
Zitat:
Auch das mischen von c++ Windows und Delphi Forms würde ich lassen.... Damit fällst Du 100% auf die Nase.

Opencascade ist auch mehr eine Geometrie Library als ein Viewer. Mit den reinen Geometrie Klassen klappt das super.
OK. Dann werde ich mal kleinere Brötchen backen und mit einfachen Geometriedaten beginnen.
Wobei laut Stacktrace diese Meldungen aus TKernel.dll heraus aufgerufen werden,
Und TKernel.dll werde ich wahrscheinlich immer benötigen.

Habt ihr denn eine Konsole mit laufen auf der Ausgaben stattfinden?
Eine Vermutung ist dass OCC bei der Initialisierung etwas ausgeben
möchte dies aber nicht kann weil ein wie auch immer gearteter Ausgabekanal
nicht eingerichtet ist.


Nur so Interesse halber, für was setzt ihr den OCC ein?

Ich für meinen Teil entwickle für einen Behälterbauer
einen Produktkonfigurator auf der Basis eines
regelbasierten Expertensystems.

Damit kann man automatisch sehr nützliche Dinge erstellen
Arbeitspläne, Stücklisten, Maschinenansteuerungen, 2D Zeichnung ...

Nun möchte ich prüfen ob auch 3D möglich ist.
Die Geometriedaten könnten automatisch erstellt werden.
Die Anzeige der Daten wäre natürlich ganz nett,
und das Speichern in einem gängigen CAD Format auch.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: OpenCascade

  Alt 20. Jul 2016, 10:41
Also wir setzen OpenCascade als Volumen Generator ein.
Wir machen Tools für Holzbearbeitung bis hin zur Maschinenansteuerung.
Wir erzeugen Parameterisierte Volumen wodurch jederzeit etwas geändert werden kann.
es gibt also verschiedene primitive und bearbeiten die dann so nach dem Schema
Quader Länge / Breite Höhe erzeugen. Dann kommen die Bearbeitungen dran. Abschneiden an Ebenen, abrunden / fasen, Öffnungen einschneiden etc.
Das Ergebnis holen wir uns dann von Opencascade in verschiedenen Formaten für Rendering Zeichnungen etc.
Funktioniert klasse. Das einzige was stört ist die Geschwindigkeit von Opencascade im Vergleich zb zum ACIS Kern oder ähnlichem.
Mit der V7.0 von OCC ist das allerdings etwas besser geworden da die Boolschen Funktionen und auch der Mesher / Hiddenline Generator jetzt auch multi-thread unterstützen.

Auch benutzen wir den Step Import recht häufig für Verbindungsmittel etc.
Fritz Westermann
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#5

AW: OpenCascade

  Alt 20. Jul 2016, 11:50
Zitat:
Wir machen Tools für Holzbearbeitung bis hin zur Maschinenansteuerung.
Wer seid Ihr denn? IMOS?
Achtung: Bin kein Informatiker sondern komme vom Bau.

Geändert von Jens01 (20. Jul 2016 um 11:54 Uhr)
  Mit Zitat antworten Zitat
Raible

Registriert seit: 12. Mär 2012
30 Beiträge
 
#6

AW: OpenCascade

  Alt 28. Jul 2016, 08:45
Ich habe nun eine Lösung für das Problem gefunden.

Beim Laden der Wrapper DLL werden auch diverse OCC DLL
geladen und Initialisiert.
Dabei werden Daten an StdErr ausgegeben.
In einem VCL Programm sind die Standardausgaben aber
nicht vorhanden.
Der Aufruf aus einem Delphi Konsolenprogramm
funktioniert hingegen ohne Probleme.

Als Lösung binde ich die DLL nun dynamisch ein, und setze
vorher aber die Standardausgaben.

Delphi-Quellcode:
unit OCCWrapper;

interface
uses
  System.Classes,
  WinApi.Windows;

const
  LibName = 'OCCWrapper.dll';

var
  prevStdOutputHandle : NativeUInt;
  prevStdErrorHandle : NativeUInt;

  OCCLibHnd: THandle;
  StdFileStream: TFileStream;

implementation

initialization
  prevStdOutputHandle := GetStdHandle(STD_OUTPUT_HANDLE);
  prevStdErrorHandle := GetStdHandle(STD_ERROR_HANDLE );

  StdFileStream := TFileStream.Create('C:\Temp\output.log', fmCreate);

  SetStdHandle(STD_OUTPUT_HANDLE, StdFileStream.Handle);
  SetStdHandle(STD_ERROR_HANDLE , StdFileStream.Handle);

  OCCLibHnd := LoadLibrary(LibName);

finalization
  FreeLibrary(OCCLibHnd);
  OCCLibHnd := 0;

  SetStdHandle(STD_OUTPUT_HANDLE, prevStdOutputHandle);
  SetStdHandle(STD_ERROR_HANDLE , prevStdErrorHandle );

  StdFileStream.Free;
  StdFileStream:=nil;
end.
prevStdOutputHandle und prevStdErrorHandle sind gleich Null,
und nur der Form halber mit GetStdHandle abgefragt.
  Mit Zitat antworten Zitat
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: OpenCascade

  Alt 29. Jul 2016, 07:59
Ich will jetzt nicht Werbung machen.
Im Betrieb nutzen wir seit Jahren eine (gekaufte) 3D-Cad Komponente. Mit der kann man enorm viel Tipparbeit einsparen.
Guck mal da http://www.eastwindsoft.com/de/index.htm
Ist aber eine ActiveX, mit den typischen Vor- und Nachteilen. Und sie strauchelt beim Export von STEP-Dateien, wenn zu viele "Entities" enthalten sind.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz