Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  ENOVIA SmarTeam
  ISmObject aus CATIA Skript

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:  ISmObject aus CATIA Skript (2867 mal gelesen)
phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 29. Aug. 2005 16:06    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,

Ich möchte in einem CATIA Skript auf Smarteam Objekte zugreifen. Leider habe ich bisher in der API Dokumentation noch keinen eindeutigen Weg gefunden um das ISmObject des gerade in CATIA aktiven Dokuments zu erhalten.

Wie macht man so etwas üblicherweise? Mit einem Query nach File Namen ist mir etwas zu wacklig, da es unter Umständen mehrere Resultate geben kann.


Gruss, Beat

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

ChristianS
Moderator
Leiter Kundenbetreuung


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

Beiträge: 635
Registriert: 27.09.2000

erstellt am: 30. Aug. 2005 08:43    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 phimUoB 10 Unities + Antwort hilfreich

Hi,

ob es in CATIA eine Info über das Object gibt weiß ich leider nicht, jedoch ist es in anderen CAD's nicht der Fall.
Die Info über das Object selber wird in der SmCAD Schnittstelle normalerweise auch nicht 'gemerkt', es sei denn der Entwickler der Schnittstelle hat sich selber irgentetwas gecachet.

Das Wiederfinden des Objectes geht auch in der CAD Schnittstelle über den Dateinamen und ggf. den Komponentennamen und das Behavior.
Damit ist die Localisierung eindeutig.

SmCAD.Locate (ruft einen Datensatz auf)

Das eruieren der Object und Class ID funktioniert in dem Interface über die Routine SmCAD.Findfile in diesem Fall gibst Du nur den Dateinamen (inkl. Verzeichnis) an und bekommst die Object und Class ID zurück.

Wenn es also in CATIA keine weiteren Info's über die ID's oder das Object gibt (wovon ich ausgehe) dann bleibt Dir nur ein eigenes SmCAD interface zu initialisieren oder eine Query auf die DB zu machen.

Bei der eigenen Query würde ich mit :

V5R10 :
CLASS_NAME,DIRECTORY,FILE_NAME,FILE_TYPE,USER_OBJECT_ID

>=V5R11:
DIRECTORY,FILE_NAME,INTEGRATION_BEHAVIOR,TDM_COMPONENT_NAME,USER_OBJECT_ID

arbeiten.

Damit ist die eigene Query Narren sicher.

Wenn es nun noch dazu kommt, dass Du etwas falsches zurück bekommst müssten folgende Umstände eintreffen :

- Ein Anwender arbeitet an mehreren Rechnern
- Das Arbeitsverzeichnis liegt lokal auf dem selben Directory
- Es gibt verschiedene Objekte in SMARTEAM mit dem selben CAD_REF_FILE_NAME
- Der Anwender hat auf beiden Rechnern jeweils eines dieser unterschiedlichen Objekte ausgecheckt

Dieser Umstand ist sehr, sehr unwahrscheinlich und wenn er eintreten sollte, dann ist die Lokalisierung des falschen Objektes Dein geringste Problem.

Gruß
Christian

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

phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 31. Aug. 2005 17:46    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,

OK, ich mache ein SmCADInterface:

Code:
    Set Engine = New SmApplic.SmEngine
        Engine.Init "SmTeam32"
   
    Set Database = Engine.Databases(0)
   
    Set Session = Engine.CreateSession("UniBern_BOM", "SmTeam32")
        Session.OpenDatabaseConnection Database.Alias, Database.Password, True
   
    Dim CADInterface As SmCADInterface
    Set CADInterface = Session.GetService("SmCad.SmCADInterface")
        CADInterface.UserLogin "CATIA", "", ""

FindFile sollte mir ja einen Filenamen liefern. Den habe ich aber von CATIA. Also:

Code:
    Dim FileDescription As SmRecList.SmRecordList
    Dim RetCode As Integer
    Dim ObjectId As Long
    Dim ClassId As Integer
   
    Set FileDescription = New SmRecList.SmRecordList
        FileDescription.AddHeader "FILE_NAME", 256, sdtChar
        FileDescription.AddHeader "INTEGRATION_BEHAVIOR", 256, sdtChar
        FileDescription.AddHeader "TDM_COMPONENT_NAME", 256, sdtChar
        FileDescription.AddRecord
        FileDescription.Value("FILE_NAME", 0) = FullPath
        FileDescription.Value("INTEGRATION_BEHAVIOR", 0) = "TN_CATIA_DRAWING"
        FileDescription.Value("TDM_COMPONENT_NAME", 0) = ""
       
    RetCode = SmCAD.FindObject(FileDescription, ObjectId, ClassId)
   
    MsgBox "RetCode: " & RetCode & " ObjectId: " & ObjectId & " ClassId: " & ClassId

Gibt fuer RetCode 1 aber fuer ObjectId und ClassId 0


In diversen Postings habe ich gesehen dass das SmCADInterface problematisch ist, wenn gleichzeitig ein anders SmCADInterface läuft. Was ist da jetzt genau Sache?

Gruss, Beat

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

ChristianS
Moderator
Leiter Kundenbetreuung


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

Beiträge: 635
Registriert: 27.09.2000

erstellt am: 01. Sep. 2005 08: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 phimUoB 10 Unities + Antwort hilfreich

Hi,

sorry, Du hast Recht. es ist natürlich .findobject... hab mich da vergriffen.

Bei Deinem SmCAD fehlt nach dem Login noch das .initialize erst dann ist das Interface 'scharf' und gibt Dir auch sinnvolle Werte zurück.

Damit Du mit der findobject Methode auch das gewünschte Ergebnis bekommst, musst Du das .initialize mit dem Namen der CATIA Integration durchführen.

Da es in ST nicht vorgesehen ist, dass sich mehrere Programme mit dem selben Integrationsnamen anmelden (Ist ja wie wenn alle Leute in einer Straße die selbe Hausnummer und den selben Namen haben) kann es im weiteren Velauf zu Problemen kommen. Also nicht zu empfehlen, wenn Du gleichzeitig im CATIA in ST angemeldet bist.

Wenn der Aufruf Deiner Routine aus dem CATIA Script heraus erfolgen muß, dann solltest Du die Query Einsetzen. So weit ich weiß macht .findobject intern eh nichts anderes.


Hast Du schon mal überlegt, das ganze aus einem SMARTEAM Script heraus zu machen ?
In den meisten Fällen habe ich aus dem SMARTEAM Script heraus mir das CAD.activedocument geholt und dann das CAD gesteuert.... SW, SE und Inventor. Ich denke das müsste mit CATIA auch gehen.

Gruß
Christian

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

phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 01. Sep. 2005 14:57    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,

Ok, bauen wir einen Query. Ich habe noch etwas Mühe mit TDM_COMPONENT_NAME und TDM_INTEGRATION_BEHAVIOR. In der DB gibt es TDM_INTEGRATION_BEHAVIOR nicht, nur TDM_INTEGRATION_MANAGED. TDM_COMPONENT_NAME ist wohl das, was in Catia die UUID ist. Wie von wo kommt die her? Die scheint in CATIA v5 ein heisses Eisen zu sein:

http://ww3.cad.de/foren/ubb/Forum137/HTML/000253.shtml#000000

Eigentlich tut es auch ohne:

Code:
Private Function GetDwgObject(DrawingDoc As DrawingDocument, SmSession As SmApplic.SmSession) As SmApplic.ISmObject
   
    Dim SmQuery    As SmApplic.ISmQuery
    Dim QueryDef    As SmApplic.ISmQueryDefinition
    Dim DrawingObj  As SmApplic.ISmObject
   
    On Error GoTo ErrorGetDwgObject
   
    Set SmQuery = SmSession.ObjectStore.NewQuery
    Set QueryDef = SmQuery.QueryDefinition

    QueryDef.Roles.Add SmSession.MetaInfo.SmClassByName("CATIA Drawing").ClassId, "F"
    QueryDef.Where.Add "", "DIRECTORY", "=", DrawingDoc.Path & "\", False, "F"
    QueryDef.Where.Add "", "FILE_NAME", "=", DrawingDoc.Name, False, "F"
'    QueryDef.Where.Add "", "INTEGRATION_BEHAVIOR", "=", "?", False, "F"
'    QueryDef.Where.Add "", "TDM_COMPONENT_NAME", "=", "?", False, "F"
    QueryDef.Where.Add "", "USER_OBJECT_ID", "=", SmSession.UserMetaInfo.UserId, False, "F"
   
    SmQuery.Run
   
    If SmQuery.QueryResult.RecordCount = 1 Then
        Set DrawingObj = SmSession.ObjectStore.ObjectFromData(SmQuery.QueryResult.GetRecord(0), True)
    Else
        Set DrawingObj = Nothing
    End If
   
    On Error GoTo 0
    GoTo EndGetDwgObject
   
ErrorGetDwgObject:
        Set DrawingObj = Nothing
        MsgBox "GetDwgObject: " & Err.Description & " (" & Err.Number & ")", vbCritical
   
EndGetDwgObject:
    Set GetDwgObject = DrawingObj

End Function



Gruss, Beat

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

ChristianS
Moderator
Leiter Kundenbetreuung


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

Beiträge: 635
Registriert: 27.09.2000

erstellt am: 01. Sep. 2005 15:10    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 phimUoB 10 Unities + Antwort hilfreich

Hi,

umso besser.

Beim Directory mußt Du ggf. noch beide Fälle (mit und ohne schließenden \ ) betrachten

Gruß
Christian

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

phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 01. Sep. 2005 17:02    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

Stimmt. Vielen Dank für den Hinweis (und auch für die anderen Tips). Es ist tatsächlich so dass 'New'-Objekte kein \ haben und 'Checked Out' ein \ am Ende haben.

Also:

Code:
    QueryDef.Where.Add "", "DIRECTORY", "like", DrawingDoc.Path & "%", False, "F"

funktioniert. Sowas wie "regexp_like", DrawingDoc.Path & "?" wäre besser, wird aber von SmarTEAM nicht geschluckt.

Wie wichtig sind die Attribute INTEGRATION_BEHAVIOR, TDM_COMPONENT_NAME?

Gruss, Beat

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

phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 01. Sep. 2005 17: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

Zitat:
Hast Du schon mal überlegt, das ganze aus einem SMARTEAM Script heraus zu machen ?
In den meisten Fällen habe ich aus dem SMARTEAM Script heraus mir das CAD.activedocument geholt und dann das CAD gesteuert.... SW, SE und Inventor. Ich denke das müsste mit CATIA auch gehen.

Ist zwar einfacher für den Skript-Knecht weil da das Objekt ja grad dem Skript beim Aufruff mitgegeben wird. Der CATIA Administrations-Knecht muss aber dann bei jedem CATIA Release dafür sorgen dass das SmarTEAM-Skript auch im CATIA verfügbar ist. Wir wollten halt den CATIA Administrationsaufwand klein halten, indem dort wenig bis nichts customised wird.

Gruss, Beat

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

ChristianS
Moderator
Leiter Kundenbetreuung


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

Beiträge: 635
Registriert: 27.09.2000

erstellt am: 01. Sep. 2005 17: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 Nur für phimUoB 10 Unities + Antwort hilfreich

Hi,

Das Integration Behavior liegt in dem Attribut TDM_SUPPORTED_CLB und gibt nur an, von welcher Integration es gespeichert wurde ... also ob z.B. CATIA , SW, Inventor, SE oder was auch immer, das Teil nach ST gespeichert hat.

TDM_COMPONENT_NAME ist ein Identifikator für die Komponenten/Konfigurationen/Varianten...(z.B. tabellengesteuerte Normteile) wie auch immer es in den verschiedenen CAD's heist.

Schlicht und ergreifend werden damit die CFO's auseinander gehalten.
Wenn Du nur Konstruktionen hast, die je Datei mit einem Datensatz verbunden sind spielt es keine Rolle.

Hast Du jedoch Konstruktionen wo die Datei mit mehreren Datensätzen verbunden ist (z.B. DIN912 M10x20, DIN912 M10x25 etc), ist es wichtig zu wissen, welcher Datensatz zu der aktuell geöffneten Konfiguration gehört.


Gruß
Christian

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