Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  ENOVIA SmarTeam
  :: Scripting CATIA-Drawing -- CATIA-Part - Verbinung

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:  :: Scripting CATIA-Drawing -- CATIA-Part - Verbinung (4310 mal gelesen)
Schmidberger Karl
Mitglied
EDV-Administrator

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

Beiträge: 8
Registriert: 24.06.2008

+ SmarTeam Version: V5R16 SP4
+ SDK: Visual Basic .NET 2.0 (über COM+)

erstellt am: 10. Jul. 2008 11:12    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,

Bin mir nicht ganz sicher ob ich richtig bin mit meiner SmarTeam-Programmier frage.


Vorgang:
-------
+ Ich mache ein "CATIA Part"
+ Ich hole ein "CATIA Drawing" (Vorlage vom Kunden)
+ Das "CATIA Drawing" bekommt eine 2D-Zeichnungsableitung von dem "CATIA Part"
+ Das ganze wir in SmarTeam gespeichert

Wenn ich nun auf die Profilkarte (CATIA Drawing) "Verknüpfungen/CATIA-Verknüpfungen" und "CATIA Downstream Anwendung" wähle sehe ich das "CATIA Part" bzw "CATIA Teil"

Wenn ich nun auf die Profilkarte (CATIA Part) "Verknüpfungen/CATIA-Verknüpfungen" und "CATIA Downstream Anwendung - umgekehrt" wähle sehe ich das "CATIA Drawing" bzw "CATIA Zeichnung"

Natürlich sehe ich die Verknüpfungen mit "<Alle>" auch.

Ich habe:
---------
=> CurObj.SmClass.Name ["CATIA Drawing"]
=> CurObj.SmClass.ExternalName ["CATIA Zeichnung"]
=> CurObj.SmClass.ClassId [684]


=> CurObj.SmClass.Name ["CATIA Part"]
=> CurObj.SmClass.ExternalName ["CATIA Teil"]
=> CurObj.SmClass.ClassId [687]


=> CurObj.SmClass.Name ["Documents Documents Relation"]
=> CurObj.SmClass.ExternalName ["Dokumente-Dokumente-Beziehung"]
=> CurObj.SmClass.ClassId [5]
  => ClassId habe ich mit Code #1 (siehe unten) ermittelt

Ich brauche:
------------

Ich brauche die **ObjektID** vom "CATIA Part" während des Programmablaufes.

Das Ausgangsobjekt ist ein "CATIA Drawing"


Was ich nicht verstehe:
---------------------
(Ausgangsobjekt ist ein CATIA-Drawing)

+ In der Smartem Profilkarte "Verknüpfungen/CATIA-Verknüpfungen" bekomme ich wenn ich den
  Verknüpfungstypen "CATIA Downstream Anwendung" wähle das gewünschte "CATIA-Part"
  angezeigt

+ Wenn ich per Code (Code #1, siehe unten) mir die Verknüpfung zweier Objekte hole bekomme
  ich das Objekt "Documents Documents Relation" mit der ClassId 7

=> Wie sind den CATIA-Drawing und CATIA-Part verbunden ???

+ Wenn ich per Code nach Relation und Links suche, bekomme ich keine Objekt zurück ?

=> info :: ich bekomme mit Code #2 das Gewünschte Objekt jedoch nur wenn ich die ID kenne.


Infos:
------
+ Das ist das 3. kleine Tool das ich schreiben möchte.


Bin um jeden Tipp Dankbar

MfG. Karl


Anhang:
======

Code #1
--------
Option Explicit On

Imports System
Imports System.IO
Imports SmarTeam.Std.Interop.SmarTeam


Function GetLink(ByVal ses As SmApplic.SmSession) As SmApplic.ISmClass

  Dim PartClass As SmApplic.ISmClass = ses.MetaInfo.SmClassByName("CATIA Part")
  Dim DrawingClass As SmApplic.ISmClass = ses.MetaInfo.SmClassByName("CATIA Drawing")

  GetLink = DrawingClass.GeneralLinks.GetLinkClasses(PartClass.ClassId).Item(0)

End Function

End Module


Code #2
--------
Function Testomat( _
  ByVal obj As SmApplic.ISmObject, _
  ByVal Session As SmApplic.SmSession, _
  ByVal recli As SmRecList.SmRecordList) As String

  Dim QueryDefinition As SmApplic.ISmQueryDefinition

  ' Define query 
  QueryDefinition = Nothing

  'rückgabewert für die funktion
  Return obj.RetrieveParents(QueryDefinition).Item(0).RetrieveChildren(QueryDefinition).Item(1).Value("TDM_DESCRIPTION")

End Function


Code #3
---------

Sub RetrieveRelationsAndLinks( _
  ByVal obj As SmApplic.ISmObject, _
  ByVal LinkClassId As Integer) 'LinkClassId hole ich mit Code #1'

  Dim QueryDefinition As SmApplic.ISmQueryDefinition
  Dim RelationsAndLinks As SmApplic.ISmCompositeObjects ' collection of objects
  Dim Roles As ISmQueryRoles ' query roles
  Dim QueryResultAttributes As SmApplic.ISmQueryResultAttributes


  ' Define query    - see query definition examples
  QueryDefinition = obj.ObjectStore.NewQueryDefinition()
  QueryResultAttributes = QueryDefinition.Select
  Roles = QueryDefinition.Roles
  Roles.Add(obj.SmClass.SuperClassId, "S")
  Roles.Add(LinkClassId, "L")
  QueryResultAttributes.Add("CN_ID", "S", False)
  QueryDefinition.RecordLimit = 4

  ' Retrieve up to 4 relations and links
  RelationsAndLinks = obj.RetrieveRelationsAndLinks(QueryDefinition)

  ' Check if there are relations and links for object
  If RelationsAndLinks.Count = 0 Then
    MsgBox("No relatations found")
  Else
    MsgBox("Number of relatations: " & CStr(RelationsAndLinks.Count))
  End If
End Sub

[Diese Nachricht wurde von Schmidberger Karl am 10. Jul. 2008 editiert.]

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: 10. Jul. 2008 18:17    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 Schmidberger Karl 10 Unities + Antwort hilfreich

Hi,

einige Anmerkungen zu Deinem Code :

Zwischen 2 Objekten kann es immer mehrere Linkklasse geben, die je nach Typ unterschiedliche Eigenschaften haben.
In #1 gehst Du davon aus, dass es nur eine gibt
''DrawingClass.GeneralLinks.GetLinkClasses(PartClass.ClassId).Item(0)''
Wenn Du den Namen der Klasse nicht genau kennst, musst Du alle beachten
--> for I = 0 to  DrawingClass.GeneralLinks.GetLinkClasses(PartClass.ClassId).Count -1
    ....
    next i

In Deinem konkreten Fall hast Du die Document-Document klasse mit Item(0) bekommen es gibt jedoch noch eine menge mehr.
Deine benötigte Klasse ist : "CATIA Downstream Application"


In #2 holst Du Dir zu Deinem Objekt die 'Parents' und gehst davon aus, dass das erste
'obj.RetrieveParents(QueryDefinition).Item(0).'  das ist welches du brauchst und holst davon die 'Childs'.
Auch dabei gehst Du davon aus, dass das 2te 'child' das richtige ist
'obj.RetrieveParents(QueryDefinition).Item(0).RetrieveChildren(QueryDefinition).Item(1)'

Bei allen Abfragen zu verknüpften Dokumenten wird Dir immer eine Collection von verknüpften Dokumenten zurückgegeben.
So kann ja ein Teil in mehreren Baugruppen verbaut sein und eine Baugruppe mehrere Teile beinhalten.
Analog zu Deinem Problem könnten theoretisch zu einer Zeichnung mehrere Teile Verknüpft sein. In der Programmierung solltest Du dieses auch mit berücksichtigen und keine hardcodierten .Item(0) oder Item(1) etc. verwenden

Unabhägig davon ist die von Dir gesuchte Verknüpfung keine Parent/Child Verknüpfung.


In #3 bekommst Du kein Ergebnis, weil die Linkklasse falsch ist.


Um Deine Aufgabe zu lösen


<--snip -->

RetrieveAction  = "Normal"

LinkClassName="CATIA Downstream Application"
linkclass = smsession.Metainfo.SmClassByName(LinkClassName).ClassId
SmQueryDef.Roles.Add linkclass, "L"


ClassName = "CATIA Part"
SmQueryDef.Roles.Add smsession.Metainfo.SmClassByName(ClassName).ClassId, "S"


If RetrieveAction = "Normal" Then
  Set SmFoundObjects = smobject.RetrieveDependencies(SmQueryDef)
ElseIf RetrieveAction = "Umgekehrt" Then
  Set SmFoundObjects = smobject.RetrieveReverseDependencies(SmQueryDef)
Else
  Set SmFoundObjects = smobject.RetrieveRelations(SmQueryDef)
End If

<--snip -->

Mit der RetrieveAction kann man noch definieren, ob die Richtung der Verknüpfungen beachtet werden soll.
So ist in deiner gewünschten Lösung Die Zeichnung von dem Teil abhängig (normal).
Aus Sicht des Teiles gibt es zwar eine Verknüpfung, diese ist jedoch für das TEil nicht wirklich wichtig (umgekehrt)

Gruß
Christian

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

Schmidberger Karl
Mitglied
EDV-Administrator

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

Beiträge: 8
Registriert: 24.06.2008

+ SmarTeam Version: V5R16 SP4
+ SDK: Visual Basic .NET 2.0 (über COM+)

erstellt am: 11. Jul. 2008 16: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

Hallo,

erstmal **vielen** Dank Christian für die Hilfe :-)


Mein kleines Programm funktioniert jetzt :-)


Ich habe deine Antwort genau Studiert und auch wieder einem Menge gelernt.

Das schwierigst ist es die **relevanten** SmarTeam-API-Objekte und Methoden zu finden.

Mit den Collection habe ich, außer in diesem Fall keine Problem.

Grüße an alle

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