Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Screenshots mit unterschiedlichen Auflösungen -> Laufzeitfehler?!?!

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Screenshots mit unterschiedlichen Auflösungen -> Laufzeitfehler?!?! (3359 mal gelesen)
crob08
Mitglied



Sehen Sie sich das Profil von crob08 an!   Senden Sie eine Private Message an crob08  Schreiben Sie einen Gästebucheintrag für crob08

Beiträge: 43
Registriert: 17.07.2005

erstellt am: 22. Jul. 2010 10:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo CATIA-Freunde,

ich habe folgendes Problem:
In einem CATVBA-Makro möchte ich mehrere Bilder automatisiert erstellen lassen. Mit einer vorherigen Festlegung des RenderingModes, Pfades etc. lässt sich ja über folgende Befehlszeile relativ einfach ein Bild des aktuellen Viewers erzeugen.

Code:
CATIA.ActiveWindow.ActiveViewer.CaptureToFile catCaptureFormatBMP, oFileName & ".bmp"

So weit so gut.
Nun zum schwierigeren Part!
Um die Qualität der aufgenommenen Bilder zu erhöhen, möchte ich die Auflösung bzw. die Größe des aktiven CATIA-Fensters anpassen. Ohne Makro lässt sich das ja auch sehr schnell über Tools -> Bild -> Erfassen -> Optionen -> Pixel -> Wiedergabequalität=angepasst -> mehr realisieren.
In Form eines Makros habe ich bereits auch einen Weg gefunden:

Code:
For I = 1 To Cntr
    CATIA.ActiveWindow.Width = WindowWidth(I)
    CATIA.ActiveWindow.Height = WindowHeight(I)
    CATIA.ActiveWindow.ActiveViewer.CaptureToFile catCaptureFormatBMP, oFileName & ".bmp"
    oPart.Update
    CATIA.ActiveWindow.ActiveViewer.Update
    CATIA.ActiveWindow.ActiveViewer.Reframe
Next

Wie ihr seht, habe ich 2 1-dim-Arrays "WindowWidth" und "WindowHeight", in denen ich unterschiedliche Auflösungskonfigurationen abgespeichert habe. Wenn ich nun das Makro normal ausführe, werden die einzelnen Konfigurationen nicht berücksichtigt, sondern Cntr-mal Bilder mit gleicher Auflösung erstellt. Lasse ich das Makro allerdings im Einzelschritt-Modus (F8) durchlaufen, dann wird das aktive Fenster auch mit den unterschiedlichen Konfigurationen angepasst und alles funktioniert!

-> Fragen!!! Ist das ein Problem mit der Laufzeit? Wenn ja, wie kann ich das umgehen? Gibt es eventuell eine Delay-Funktion, die eine kurze Pause erzeugt, so dass die Laufzeit wieder passt? Oder habe ich einen prinzipiellen Fehler im Code? Oder? Oder? Oder?

Würde mich freuen, wenn ihr mir helfen könntet.

Schöne Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

crob08
Mitglied



Sehen Sie sich das Profil von crob08 an!   Senden Sie eine Private Message an crob08  Schreiben Sie einen Gästebucheintrag für crob08

Beiträge: 43
Registriert: 17.07.2005

erstellt am: 22. Jul. 2010 12:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nachtrag:
konkret scheint es an Änderung des ActiveViewers zu liegen. Die Windows-Größe wird korrekt wiedergegeben, jedoch die Größe des ActiveViewers nicht! Erst nach Beendigung des Makros aktualisiert sich letzterer auf den letzten Wert der jeweiligen Arrays.
In der Zwischenzeit habe ich auch mit einem "Timer" eine Wartezeit eingebaut. Leider ebenfalls ohne Erfolg.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 26. Jul. 2010 13:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für crob08 10 Unities + Antwort hilfreich

Also ja, es gibt eine Delay-Funktion, siogar mehrere.

Google dafür einfach nach Sleep. Ich baue aber auch gern eine Schleife, die einfach mehrfach DoEvents macht. 

Dann zu deinem Problem: CATIA muss manchmal die Grafiksachen neu berechnen, dazu kannst Du es mit der Funktion RefreshDisplay, oder so, auffordern.
Habe aktuell kein CATIA hier, daher muss ich eben raten.  Es gibt jedenfalls so eine Funtkion, die Du mal ausprobieren solltest.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

crob08
Mitglied



Sehen Sie sich das Profil von crob08 an!   Senden Sie eine Private Message an crob08  Schreiben Sie einen Gästebucheintrag für crob08

Beiträge: 43
Registriert: 17.07.2005

erstellt am: 27. Jul. 2010 11:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Henry,

Danke für den Tipp "RefreshDisplay"!!!
durch die Zeile

Code:
CATIA.Application.RefreshDisplay = True


wird anscheinend die Auflösung des aktuellen Viewers an die des aktuellen Windows angepasst.
Danke nochmal!!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

N2high
Mitglied



Sehen Sie sich das Profil von N2high an!   Senden Sie eine Private Message an N2high  Schreiben Sie einen Gästebucheintrag für N2high

Beiträge: 44
Registriert: 09.09.2013

Catia V5R19 SP9

erstellt am: 07. Nov. 2013 11:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für crob08 10 Unities + Antwort hilfreich

ich habe gerade das gleiche Problem wie in dem alten Thread beschrieben. Teilweise funktioniert die Funktion einwandfrei (manuell mit F8 und im normalen Aufruf). Aber eben nur teilweise.

Das Problem tritt immer auf wenn ich die Auflösung des ActiveWindow erhöhen möchte. Statt zu vierviefachern stehen dann nur minimal größere Werte drinnen.
Hat jemand eine Idee?

Code:
Function Screenshot(destination_name As String, file_name As String)

    Set aktiwin = CATIA.ActiveWindow
    Set oViewer = aktiwin.ActiveViewer

    aktiwin.Layout = catWindowGeomOnly
   
    Dim color(2)
    oViewer.GetBackgroundColor color
    oViewer.PutBackgroundColor Array(1, 1, 1)
   
    'Qualität erhöhen, 100% --> 400%
    Dim height1 As Long
    Dim width1 As Long
    height1 = oViewer.Height
    width1 = oViewer.Width
     
    aktiwin.Height = height1 * 4
    aktiwin.Width = width1 * 4

    CATIA.Application.RefreshDisplay = True 
   
    CATIA.StartCommand "CompassDisplayOff"
   
    oViewer.Activate
    oViewer.CaptureToFile 5, destination_name & file_name & ".jpeg"
   
    'Ausgangszustand wiederherstellen
   
    oViewer.PutBackgroundColor color
    aktiwin.Layout = catWindowSpecsAndGeom
   
    CATIA.StartCommand "CompassDisplayOn"
   
    aktiwin.Height = height1
    aktiwin.Width = width1
    CATIA.Application.RefreshDisplay = True

End Function


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Nov. 2013 12:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für crob08 10 Unities + Antwort hilfreich

Servus
Gemäß Doku lässt sich der Wert Height bzw Width des Viewers gar nicht per Makro ändern.
Wundert mich warum du keine Fehlermeldung erhältst.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

N2high
Mitglied



Sehen Sie sich das Profil von N2high an!   Senden Sie eine Private Message an N2high  Schreiben Sie einen Gästebucheintrag für N2high

Beiträge: 44
Registriert: 09.09.2013

Catia V5R19 SP9

erstellt am: 07. Nov. 2013 12:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für crob08 10 Unities + Antwort hilfreich

das ist korrekt. Darum ändere ich auch Height und Wight des Objekt Window.

ich habe mittlerweile eine Lösung gefunden:
Mittels einer nichtabweisenden Schleife ändere ich Height und Wight so oft bis es passt.
Interessant dabei ist. Beim ersten setzten (also bei i) läuft die Schleife immer zweimal durch,
beim zweiten setzten (j) nur einmal

Code:
Function Screenshot(destination_name As String, file_name As String)

    Set aktiwin = CATIA.ActiveWindow
    Set oViewer = aktiwin.ActiveViewer

    aktiwin.Layout = catWindowGeomOnly
   
    Dim color(2)
    oViewer.GetBackgroundColor color
    oViewer.PutBackgroundColor Array(1, 1, 1)
   
    'Qualität erhöhen, 100% --> 400%
    Dim height1 As Long
    Dim width1 As Long
    height1 = oViewer.Height
    width1 = oViewer.Width
   
    Dim i As Integer
   
    i = 0
   
    Do
        aktiwin.Height = height1 * 4
        aktiwin.Width = width1 * 4
        CATIA.Application.RefreshDisplay = True
       
        i = i + 1
       
    Loop While aktiwin.Height <> height1 * 4
   
    Debug.Print "i= " & i & "   " & file_name
   
    CATIA.StartCommand "CompassDisplayOff"
   
    oViewer.Activate
    oViewer.CaptureToFile 5, destination_name & file_name & ".jpeg"
   
    'Ausgangszustand wiederherstellen
   
    oViewer.PutBackgroundColor color
    aktiwin.Layout = catWindowSpecsAndGeom
   
    CATIA.StartCommand "CompassDisplayOn"
   
    Dim j As Integer
   
    j = 0
   
    Do
        aktiwin.Height = height1
        aktiwin.Width = width1
        CATIA.Application.RefreshDisplay = True
       
        j = j + 1
       
    Loop While aktiwin.Height <> height1
   
    Debug.Print "j= " & j & "   " & file_name

End Function



[Diese Nachricht wurde von N2high am 07. Nov. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 07. Nov. 2013 15:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für crob08 10 Unities + Antwort hilfreich

Ich glaube Du gibst ihm nach CATIA.Application.RefreshDisplay = True nicht genug Zeit.

mach mal ein

Code:

For iIterator = 0 to 1000
    DoEvents
Next iIterator

danach.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

N2high
Mitglied



Sehen Sie sich das Profil von N2high an!   Senden Sie eine Private Message an N2high  Schreiben Sie einen Gästebucheintrag für N2high

Beiträge: 44
Registriert: 09.09.2013

Catia V5R19 SP9

erstellt am: 13. Nov. 2013 09:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für crob08 10 Unities + Antwort hilfreich

klappt so leider nicht.
Warum es mit meiner Schleife jedoch klappt, weiß ich selbst nicht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz