Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  CATIA per MS Access steuern

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:  CATIA per MS Access steuern (1484 mal gelesen)
Antelito
Mitglied



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

Beiträge: 88
Registriert: 27.11.2013

CATIA R24
WIN 10 x64

erstellt am: 04. Nov. 2014 09:41    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 Zusammen,

ich versuche aus einem CATIA-Datensatz informationen nach MS Access zu schreiben. Dazu schreibe ich ein Makro in Access, womit ich dann auf CATIA zugreife. Da ich mich mit den Catia-Bibliotheken nicht auskenne, habe ich vorsichtshalber alle Bibliotheken eingebunden.

Doch leider ergeben sich hierbei hin und wieder Probleme, die sehr mühsam zu lösen sind. An folgendem Problem sitze ich schon seit letzter Woche, komme aber nicht weiter.

Mein Problem ist folgendes: Ich möchte aus einer Punktewolke die Koordinaten nach Access schreiben, allerdings nur von den Punkten, die auch sichtbar sind. Dazu muss ich prüfen, ob sich ein Punkt bzw. ein Geometrical Set oder aber ein ganzes Part im Hide-Modus befindet. Ich benutze dazu die Methode
visPropertySet1.GetShow(catVisPropertyShowAttr)
welche mir bei einem ausgeblendeten Teil den Wert 1 zurückgibt, sonst 0. Dies funktioniert in CATIA auch wunderbar, allerdings nicht aus Access heraus...

Zum besseren Verständnis, hier der Code aus dem CATIA:

Code:
Sub CATMain()

Dim oSelection As Selection
Dim visPropertySet1 As VisPropertySet

Set oSelection = CATIA.documents.Item(2).Selection

Set visPropertySet1 = oSelection.VisProperties

Debug.Print visPropertySet1.GetShow(catVisPropertyShowAttr)

oSelection.Clear

End Sub


Aus Access heraus stehe ich nun vor folgendem Problem:

So kann ich z.B. Dim oSelection As Selection nicht als Selection deklarieren, sondern muss es mit Dim oSelection As Object deklarieren. Sonst läuft das Makro auf einen Fehler...

Das selbe Problem taucht auch bei der Verwendung der Methode visPropertySet1.GetShow(catVisPropertyShowAttr) auf, doch leider lässt sich dieses Problem nicht einfach durch eine andere Deklaration lösen... Daher hoffe ich, dass ich hier Hilfe finde... Anbei der Code aus Access:

Code:

Public Sub subCATIA_Fuegeinformationen_auslesen(p_strDatei As String, p_lngRootID As Long)

'*~*~*~*~*~*~*~Variablendeklaration*~*~*~*~*~*~*~*~*~*~*~*~*~
'*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
'*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
                Dim CATIA As Object
                Dim i As Integer
                Dim docDocuments
                Dim prodWurzel As Product
                Dim objSelection As Object
                Dim prodDoc As ProductDocument
                Dim objvisPropertySet 'As VisPropertySet
                'Dim visibility As CatVisPropertyShow
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Set CATIA = CreateObject("catia.application")

'CATIA Dokument referenzieren
Set docDocuments = CATIA.Documents

'CATproduct laden
Set prodDoc = docDocuments.Open(p_strDatei)

'Hauptproduct referenzieren
Set prodWurzel = prodDoc.Product

'Activate Terminal Node
Set objSelection = prodDoc.Selection
objSelection.Clear
objSelection.add prodWurzel
CATIA.StartCommand "Activate Terminal Node"

'Design Mode aktivieren
prodWurzel.ApplyWorkMode DESIGN_MODE

For i = 1 To docDocuments.Count

Set objSelection = docDocuments.Item(i)
'Visibility referenzieren
Set objvisPropertySet = objSelection.VisProperties 'Dieser Befehl funktioniert unter CATIA, allerdings nicht unter MS Access

    'Wenn das CatProduct weitere Parts enthält und diese sichtbar sind, dann soll die Rekursion gestartet werden
    If Right(docDocuments.Item(i).Name, 7) = "CATPart" And objvisPropertySet.GetShow(catVisPropertyShowAttr) = 0 Then
   
        fct_Products_Rekursion docDocuments.Item(i)
   
    End If

Next i

'Referenzierungen löschen
Set objvisPropertySet = Nothing
Set prodDoc = Nothing
Set docDocuments = Nothing
Set prodWurzel = Nothing
Set objSelection = Nothing
Set CATIA = Nothing


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: 04. Nov. 2014 11:59    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 Antelito 10 Unities + Antwort hilfreich

Servus
Hast du (bzw Kannst du) die Referenzen zu CATIA in VBA unter Access hinzufügen?

Gruß
Bernd

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

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

Antelito
Mitglied



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

Beiträge: 88
Registriert: 27.11.2013

CATIA R24
WIN 10 x64

erstellt am: 04. Nov. 2014 12:41    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


Screenshot.jpg

 
Hallo,

ja, ich habe überall ein Haken gesetzt, wo CATIA V5 im Namen steht. Darüber hinaus habe ich noch die Referenzen aus dem Screenshot (siehe angehängte Datei) hinzugefügt.

Wieso verhält sich CATIA eigentlich anders, wenn man aus einem anderen Programm (hier Access) darauf zugreift? Die Frage geht in die Richtung der Deklarationen. Wieso kann man unter einem anderen Programm die Selection nur als Object deklarieren und nicht wie im CATIA als Selection (hab das mal eben aus Excel probiert und es taucht der selbe Fehler auf)?

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: 04. Nov. 2014 12:54    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 Antelito 10 Unities + Antwort hilfreich

Servus
Unter CATIA-VBA kannst du eine Selektion auch nicht direkt als Selection deklarieren (geht nur in CATScript) siehe auch hier.

Gruß
Bernd

EDIT:
Die Zeile "Set objSelection = docDocuments.Item(i)" sieht sonderbar aus.
Müsste eher so heißen:

Code:
objSelection.Clear
objSelection.add docDocuments.Item(i)

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

[Diese Nachricht wurde von bgrittmann am 04. Nov. 2014 editiert.]

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

Antelito
Mitglied



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

Beiträge: 88
Registriert: 27.11.2013

CATIA R24
WIN 10 x64

erstellt am: 04. Nov. 2014 13:11    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,

ich habe deinen Vorschlag mal ebend ausprobiert: leider ohne Erfolg. Es kommt folgende Fehlermeldung:

-2147467259 The method Add failed

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 05. Nov. 2014 16:05    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 Antelito 10 Unities + Antwort hilfreich

Hallo,

ich bin mir nicht ganz sicher, aber wäre es nicht sinnvoller die Produktstruktur nach ausgeblendeten Instanzen durchzuscannen? Momentan gehst du ja die Document Collection durch. Nun kann ein Dokument innerhalb einer Struktur ja mehrfach vorkommen und somit mal ein- mal ausgeblendet sein.

Weiter bin ich mir gerade (ohne es selber zu testen) nicht ganz sicher ob das überhaupt geht,  der Selection eines Produkts ein Dokument hinzuzufügen (wird das entsprechende Dokument denn in der Produktstruktur gehighlightet?). Außerdem könnten noch andere Dokumente (im Hintergrund) geöffnet sein, die vielleicht gar nicht in dem Produkt vorkommen.

Und dann hast du geschrieben, das nur Punkte die sichtbar sind, exportiert/ausgelesen werden sollen. Innerhalb eines Parts kann es ja beides geben.

Soviel von meiner Seite.

Gruß und viel Erfolg
Randle

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

Antelito
Mitglied



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

Beiträge: 88
Registriert: 27.11.2013

CATIA R24
WIN 10 x64

erstellt am: 05. Nov. 2014 19:01    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 Randle,

danke für deine Antwort...

Du hast recht mit deinen Zweifel, ob einer Selection ein Dokument übergeben werden kann... Hab es mittlerweile geändert und es werden die Products an die Selection übergeben.

Deine Bedenken bezüglich der eingeblendeten/ausgeblendeten Objekte stimme ich ebenfalls zu, allerdings gibt es eine Besonderheit in meiner Struktur (ich hoffe dich jetzt nicht zu sehr zu verwirren):

Wir bekommen ständig irgendwelche Punktewolken und müssen die Koordinaten auslesen. Manchmal sind Products ausgeblendet, manchmal sind die in den Parts liegenden Geometrical Sets ausgeblendet, und manchmal liegen in den eingeblendeten Geometrical Sets weitere Ordner vom Typ Geometrical Sets, die wiederum ein- oder ausgeblendet sein können. Erschwerend kommt noch hinzu, dass auf jeder Ebene unterhalb des ersten Geometrical Sets schon Punkte liegen können...

Naja, was ich eigentlich damit sagen will ist, dass ich den Strukturbaum rekursiv durchlaufen muss. Mein Plan ist daher folgender:

Die Products per for-schleife durchlaufen und innerhalb dieser Rekursiv die Geometrical Sets durchlaufen. Doch bevor das funktioniert muss ich natürlich wissen, ob ein Teil/Punkt/Geometrical Set ein- oder ausgeblendet ist! Und das bring mich direkt zu meinem größten Problem:

Die Visproperties.getShow - Methode funktioniert irgendwie nicht bei mir! Ich habe in diesen Forum nach Lösungen gesucht, natürlich auch welche gefunden die anscheinend bei den Leuten funktioniert haben... Bei mir funktionieren sie aber nicht...

Ich poste mal einen Programm-Code aus diesem Forum, da ich schon Feierabend habe und nicht auf Arbeit bin. Der Code ist aber meinem sehr ähnlich:

Code:

VisProterty.GetShow Status

If Status = 1 Then
    oSel.VisProperties.SetShow 0
Else
    oSel.VisProperties.SetShow 1
End If


Mein Problem liegt jetzt darin, dass Status immer(!!!) 0 ist, egal ob das Teil ein- oder ausgeblendet ist...

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 05. Nov. 2014 20:20    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 Antelito 10 Unities + Antwort hilfreich

Hallo,

ich habe das mal eben schnell und schmutzig aus Excel getestet, mit Erfolg. Testmodell ist ein CATPart bei dem die Sichtbarkeit des Körpers geprüft wird.

Hier der Quellcode:

Sub Main()

Set CATIA = GetObject(, "CATIA.Application")

Set oPartDOc = CATIA.ActiveDocument
Set oBody = oPartDOc.Part.MainBody

Set osel = oPartDOc.Selection
osel.Clear
osel.Add oBody


CommonShowState = osel.VisProperties.GetShow(ShowState)

If ShowState = 0 And CommonShowState = 0 Then
    MsgBox "Komponenten sind sichtbar"
ElseIf ShowState = 1 And CommonShowState = 0 Then
    MsgBox "Komponenten sind nicht sichtbar"
Else
    MsgBox "Einige Komponenten sind sichtbar und einige unsichtbar"
End If

End Sub

Den Haupteil habe ich hier aus dem Forum (http://ww3.cad.de/foren/ubb/Forum137/HTML/000393.shtml#000001).

Ich hoffe das hilft weiter.

Gruß
Randle

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

Antelito
Mitglied



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

Beiträge: 88
Registriert: 27.11.2013

CATIA R24
WIN 10 x64

erstellt am: 05. Nov. 2014 20:53    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

Vielen Dank soweit, werde es morgen früh gleich testen!

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

Antelito
Mitglied



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

Beiträge: 88
Registriert: 27.11.2013

CATIA R24
WIN 10 x64

erstellt am: 06. Nov. 2014 10:20    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

Funktioniert! Danke!

ich habe es nun wie folgt gelöst:

Code:

'Part Selektieren
Set objSelection = CATIA.ActiveDocument.Selection
objSelection.Clear
objSelection.add prodWurzel.Products.Item(i)

'Visibility prüfen
ShowState = objSelection.VisProperties.GetShow(visibility)

If ShowState = 0 And visibility = 0 Then
'Part ist sichtbar. Rekursion starten

    fct_Products_Rekursion prodWurzel.Products.Item(i)

End If


Ich hätte da aber noch eine Verständnisfrage:

wieso müssen sowohl Showstate als auch visibility geprüft werden?

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