Autor
|
Thema: ISmObject aus CATIA Skript (2879 mal gelesen)
|
phimUoB Mitglied Ingenieur
Beiträge: 107 Registriert: 08.08.2003 CATIA/Smarteam V5R16 Linux, Oracle, VMWare
|
erstellt am: 29. Aug. 2005 16:06 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 635 Registriert: 27.09.2000
|
erstellt am: 30. Aug. 2005 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für phimUoB
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
Beiträge: 107 Registriert: 08.08.2003 CATIA/Smarteam V5R16 Linux, Oracle, VMWare
|
erstellt am: 31. Aug. 2005 17:46 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 635 Registriert: 27.09.2000
|
erstellt am: 01. Sep. 2005 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für phimUoB
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
Beiträge: 107 Registriert: 08.08.2003 CATIA/Smarteam V5R16 Linux, Oracle, VMWare
|
erstellt am: 01. Sep. 2005 14:57 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 635 Registriert: 27.09.2000
|
erstellt am: 01. Sep. 2005 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für phimUoB
|
phimUoB Mitglied Ingenieur
Beiträge: 107 Registriert: 08.08.2003 CATIA/Smarteam V5R16 Linux, Oracle, VMWare
|
erstellt am: 01. Sep. 2005 17:02 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 107 Registriert: 08.08.2003 CATIA/Smarteam V5R16 Linux, Oracle, VMWare
|
erstellt am: 01. Sep. 2005 17:32 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 635 Registriert: 27.09.2000
|
erstellt am: 01. Sep. 2005 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für phimUoB
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 >>)
|