Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  CATIA Umgebungssprache per Makro

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 Umgebungssprache per Makro (7196 mal gelesen)
Filippo
Mitglied
CAx-Systemverwalter


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

Beiträge: 168
Registriert: 09.11.2003

erstellt am: 05. Jul. 2004 08: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,

wer weisst wie man die Umgebungssprache per Makro abfragen kann?
z.B.: Deutsch, Englisch ...
Gibt es eine Variable dazu?


Ciao
Filippo

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

Filippo
Mitglied
CAx-Systemverwalter


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

Beiträge: 168
Registriert: 09.11.2003

erstellt am: 07. Jul. 2004 12:28    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,

es ist so das ich ein Makro erstellt habe das in einer Deutsch und Englischen Umgebungssprache laufen soll.
Da ja die Variablen in CATIA bei unterschiedlicher Sprache auch unterschiedlich sind, währ ja sinnvoll, vorher die eingestellte Sprache zu wissen.

Danke in voraus

Ciao
Filippo

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

MaxZ
Mitglied
Computer Aided Designer


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

Beiträge: 125
Registriert: 24.05.2005

V5 R16

erstellt am: 24. Jun. 2005 14:34    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 Filippo 10 Unities + Antwort hilfreich

Gleiches Problem bei mir:

Lösung garnicht so schwer:

Sub catmain()
   
    Dim e(255)
   
    Dim Splitenv
   
    For i = 1 To 255
   
        e(i) = Environ(i)
       
        Splitenv = Split(e(i), "=")
       
        If e(i) <> "" Then
       
            sign = Splitenv(0)
           
            If sign = "V5_LANG" Then

                msgbox splitenv(1)
     
                If Splitenv(1) = "en" Then
               
                    Langu = "Englisch"
                   
                ElseIf Splitenv(1) = "de" Then
               
                    Langu = "Deutsch"
                   
                End If
           
            End If
           
        End If
           
    Next i
   
    MsgBox Langu
      
End Sub

Keine gewähr auf das "de", kanns nicht testen, weil ichs nur in Englisch hab. die erste msgbox müssts dir ja ausgeben, was dahin gehört.

Hoffs hilft,
Ciao
Max

[Diese Nachricht wurde von MaxZ am 24. Jun. 2005 editiert.]

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

Filippo
Mitglied
CAx-Systemverwalter


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

Beiträge: 168
Registriert: 09.11.2003

erstellt am: 24. Jun. 2005 15:19    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 Max,

vielen Dank für die Hilfe, leider ist die variable "V5_Lang" bei uns nicht vorhanden, wird aber auch nicht von CATIA gesetzt.
Wenn es bei dir gesetzt wird dann muss es jemand anderen gesetzt haben(Administrator?).

So viel ich weiss wird diese Sprachvariable von CATIA in einen CATSetting gesetzt.


Ciao
Filippo

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

MaxZ
Mitglied
Computer Aided Designer


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

Beiträge: 125
Registriert: 24.05.2005

V5 R16

erstellt am: 24. Jun. 2005 15:36    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 Filippo 10 Unities + Antwort hilfreich

Sonst fällt mir leider auch nix ein.
In den cryptischen CATSetting-files kommt das Wort "Language" auch
nur recht sporadisch vor.

Nixdestotrotz:
Schönes Wochenende!
Ciao
Max

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

BetterOfTwoEvils
Mitglied



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

Beiträge: 11
Registriert: 19.10.2004

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

Hallo,

weiß ja net ob ihr mittlerweile was gefunden habt um die Umgebungssprache abzurufen. Ich hab mir jetzt auch den ganzen Tag den Kopf darüber zerbrochen. Mir ist nur eines eingefallen, und zwar die Sprache anhand vorhandener Objektnamen zu erkennen. Das funzt aber nur innerhalb einer Workbench, in der die Objekte ihre Namen mit unterschiedlichen Spracheinstellungen ändern. Leider habe ich kein globales Objekt gefunden, bei dem das der Fall wäre.
Also für alle die wie ich im PartDesign arbeiten ist das zwar keine schöne, aber vielleicht eine Lösung:

Sub CATMain()

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim Part1 As Part
Set Part1 = partDocument1.Part

Dim Bodies1 As Bodies
Set Bodies1 = Part1.Bodies

Dim Sprache As String

Dim body1 As Body

    If Bodies1.Item(1).Name = "Hauptkörper" Then
        Sprache = "Deutsch"
MsgBox (Sprache)
End If

If Bodies1.Item(1).Name = "PartBody" Then
Sprache = "English"
MsgBox (Sprache)
End If

End Sub

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

Filippo
Mitglied
CAx-Systemverwalter


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

Beiträge: 168
Registriert: 09.11.2003

erstellt am: 22. Sep. 2005 16:24    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


FrameGeneral.CATSettings.zip


Systemsprache.zip

 
ich habe selber etwas gefunden, ist aber immer noch nicht das was man wirklich braucht.
Mit dieses VB-Programm(siehe Systemsprache.zip) kann man zwar die Sprache vom Betriebssystem finden, nicht aber die CATIA-Umgebungssprache.
Die Variable fuer die Umgebungssprache ist in die CATSettings "FrameGeneral.CATSettings" gespeichert. Man sollte ein Programm/Makro schreiben der diese Variable aus diese Datei lesen kann.

Ciao
Filippo

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

rfriedrich
Mitglied



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

Beiträge: 39
Registriert: 11.05.2005

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

Hallo,

diese Vorgehensweise kenne ich auch. Man sollte einfach per Makro ein neues leeres CATPart erstellen, dort dann schauen ob es einen "PartBody" oder einen "Hauptkörper" gibt und anschließend das CATPart mit dem Makro wieder schliessen. Das ist bisher die beste Methode, die ich kenne.

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

noir333
Mitglied
Ingenieur


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

Beiträge: 148
Registriert: 27.01.2004

Dell Precision 450 Dual Xeon, 2MB RAM,
XP SP2, NX3
V5R17SP3

erstellt am: 23. Feb. 2007 00:07    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 Filippo 10 Unities + Antwort hilfreich

Hallo rfriedrich,
ein neues Teil ist nicht unbedingt erforderlich, solange schon ein Part geöffnet ist. Hier ein Vorschlag:

        Dim Bodies1 As Bodies
        Dim Body1 As Body
        Dim Bname, catlanguage As String

        Bodies1 = MyPart.Bodies
        Body1 = Bodies1.Add
        Bname = Body1.Name
        If Bname.Contains("Body") Then
            catlanguage = "en"
        ElseIf Bname.Contains("Körper") Then
            catlanguage = "de"
        Else
            MsgBox("Sprachumgebung muss Deutsch oder Englisch sein! Only German or English environment allowed!")
            Exit Sub
        End If

        Mysel.Clear()
        Mysel.Add(Body1)
        Mysel.Delete()

------------------
Bernd

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

INLU
Mitglied
Konstrukteur Automotive


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

Beiträge: 71
Registriert: 01.03.2008

erstellt am: 08. Okt. 2008 07: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 Nur für Filippo 10 Unities + Antwort hilfreich

Hallo Zusammen,

ich weiß, das der Thread schon älter ist, aber ich hatte Gestern das selbe Problem. Ich habe es jetzt über die Statusbar gelöst.

Bei der Englischen Umgebung steht in der Statusbar entweder ein "selected" , "preselected" oder ein "command" . Dann habe ich mit Instr festgestellt, ob die Wörter in der Statusbar vorhanden.

Code:

......

statbar = Catia.ActiveDocument.Application.Statusbar

statbartmp = Instr (statbar, "selected")

If statbartmp > 0 then
 
  sprache = englisch
   
    u.s.w.

Oder gibt es eine einfachere Lösung ?

Übrigens wird Umgebungssprache nicht in den Catsettings gespeichert.

mfg
  INLU

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

apollo11
Mitglied



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

Beiträge: 47
Registriert: 31.03.2007

MacBook Leopard 10.5.6 4GB Ram
VMWARE 3
WinXP Pro SP2
V5R16 SP5

erstellt am: 09. Okt. 2008 00:07    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 Filippo 10 Unities + Antwort hilfreich

Code:
'Option Explicit
Dim oSettingControllers 'As SettingControllers
Dim oDocumentationSettingAtt 'As DocumentationSettingAtt
Dim iLanguageCode As Integer
Dim sLanguage As String

Sub CATMain()

  Set oSettingControllers = CATIA.SettingControllers
  Set oDocumentationSettingAtt = oSettingControllers.Item("CATCafDocumentationSettingCtrl")

  iLanguageCode = oDocumentationSettingAtt.doclanguage
  Select Case iLangCode
  Case 0
      sLanguage = "System Default"
  Case 714
      sLanguage = "English"
  Case 598
      sLanguage = "French"
  Case 602
      sLanguage = "German"
  Case 706
      sLanguage = "Italian"
  Case 807
      sLanguage = "Japanese"
  Case 608
      sLanguage = "Korean"
  Case 1828
      sLanguage = "Simplified Chinese"
  End Select

  MsgBox sLanguage

End Sub



Wenn 'System Default' rauskommt müsstest du die Systemsprache, wie von Filippo beschrieben, ermitteln.

Hier die Originalquelle:
http://www.coe.org/Collaboration/DiscussionForum/ ActiveDiscussions/tabid/210/forumid/10/postid/114970/view/topic/Default.aspx

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 09. Okt. 2008 06:21    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 Filippo 10 Unities + Antwort hilfreich

Hallo apollo11,

mit deinem Code bekommst du die Spracheinstellung für die Online-Doku zurück, und nicht die User Interface Language.
Das sind zwei paar Schuhe.

Gruß TomTom

------------------
tomtom1972

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

apollo11
Mitglied



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

Beiträge: 47
Registriert: 31.03.2007

erstellt am: 12. Okt. 2008 06:25    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 Filippo 10 Unities + Antwort hilfreich

Die Spracheinstellung wird in der FrameGeneral.CATSetting gespeichert. Mit 'CATBatGenXMLSet.exe' kannst du dir die Settings als XML ausgeben lassen.

Die Programmierung ist zwar etwas holprig aber es läuft. (nur in VBA)

Vielleicht findet jemand eine etwas elegantere Lösung aber der Ansatz wäre da.

Code:
Sub GetV5Lang()

    shelltext = Chr(34) & CATIA.SystemService.Environ("CATDLLPATH") & _
      "\CATBatGenXMLSet.exe" & Chr(34) & " " & Chr(34) & _
      CATIA.SystemService.Environ("CATTEMP") & Chr(34) & " FrameGeneral"

    Start = Shell(shelltext, vbHide)
    FileTxt = txt_ReadAll(CATIA.SystemService.Environ("CATTEMP") & _
              "\FrameGeneral.xml")
   
    txt = LTrim2(FileTxt, InStr(FileTxt, "UserInterfaceLanguage"))
    txt = Left(txt, InStr(txt, "</Attribute>") - 1)
    If InStr(txt, "<Value>") = 0 Then
        'value 4 lang not found
        Exit Sub
    End If
       
  txt = LTrim2(txt, InStr(txt, "<Value>") + 6)
  iLangCode = RTrim2(txt, Len(txt) - InStr(txt, "</Value>") + 1)
 
    Select Case iLangCode
    Case 0
    sLanguage = "System Default"
    Case 714
    sLanguage = "English"
    Case 598
    sLanguage = "French"
    Case 602
    sLanguage = "German"
    Case 706
    sLanguage = "Italian"
    Case 807
    sLanguage = "Japanese"
    Case 608
    sLanguage = "Korean"
    Case 1828
    sLanguage = "Simplified Chinese"
    End Select
   
    MsgBox sLanguage

End Sub

Private Function txt_ReadAll(ByVal sFilename As String) As String

  Dim F As Integer
  Dim sInhalt As String

  ' Existiert die Datei ?
  If Dir$(sFilename, vbNormal) <> "" Then
    ' Textdatei im Binärmodus öffnen und gesamten
    ' Inhalt in einem Rutsch auslesen
    F = FreeFile
    Open sFilename For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close #F
  End If

  txt_ReadAll = sInhalt
End Function

Private Function LTrim2(ByVal str As String, ByVal dig As Integer)
    LTrim2 = Right(str, Len(str) - dig)
End Function

Private Function RTrim2(ByVal str As String, ByVal dig As Integer)
    RTrim2 = Left(str, Len(str) - dig)
End Function


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

NoobCat
Mitglied


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

Beiträge: 7
Registriert: 09.12.2009

erstellt am: 27. Sep. 2016 09: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 Nur für Filippo 10 Unities + Antwort hilfreich

Leider leider liest das nur das "default" Environment aus. Wenn CATIA jedoch mit einer speziellen Environment-Datei gestartet wurde (z.B. im Link per -env Parameter), die eine eigene Sprache vorgibt, dann führt diese Methode ins Leere, weil die falsche Sprache ermittelt wird.

Ansonsten ist das der bisher beste Ansatz, den ich finden konnte.

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

NoobCat
Mitglied


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

Beiträge: 7
Registriert: 09.12.2009

erstellt am: 27. Sep. 2016 10:14    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 Filippo 10 Unities + Antwort hilfreich

Der Vollständigkeit halber hier noch eine Methode, die ich in VB.NET geschrieben habe. Es ist eher ein brute force Ansatz, der versucht, die "Part Number" des aktuellen Dokuments in diversen Sprachen auszulesen.

Das Problem: die Strings, die in den CATNls-Dateien für Chinesisch, Japanisch, Koreanisch und Russisch stehen, können nicht in ein Visual Studio eingegeben werden, deshalb ist diese Methode auf europäische Sprachen beschränkt  

Code:
   
      Public Shared Function GetCATIAInterfaceLanguage3() As Integer
        Dim workdoc As Object = GetWorkDocument()

        Dim paras As Parameters = workdoc.Parameters
        Dim pp As Parameter

        Try
            pp = paras.GetItem("Part Number")
            If pp IsNot Nothing Then
                Return 714 'English
            End If
        Catch x As Exception
        End Try


        Try
            pp = paras.GetItem("Teilenummer")
            If pp IsNot Nothing Then
                Return 602 'German
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("Référence")
            If pp IsNot Nothing Then
                Return 598 'Francais
            End If

        Catch x As Exception
        End Try


        Try
            pp = paras.GetItem("Numero parte")
            If pp IsNot Nothing Then
                Return 706 'Italiano
            End If
        Catch x As Exception
        End Try

        'well well well... now there are some languages like Japanese and Chinese, whose Strings CANNOT be entered into Visual Studio
        'this is really a pity.
        Throw New Exception("Language not detectable by programmatic means. Please contact your Dassault Software Experience Senior Deployment Developer Consultant Specialist Expert.")
    End Function


    ''' <summary>
    ''' Returns the root Part or an Activated Top Level Product
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetWorkDocument() As Object
        Dim ReturnObject As Object = Nothing
        ReturnObject = getPartFromCATIA()

        If ReturnObject Is Nothing Then
            ReturnObject = getProductFromCATIA()
            ReturnObject = ActivateTopLevelProduct(ReturnObject)
        End If

        Return ReturnObject
    End Function

    ''' <summary>
    ''' Retrieves the part
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Function getPartFromCATIA() As MECMOD.Part
        Dim oPart = Nothing

        Dim CATIAapp As INFITF.Application = getCATIA()

        If CATIAapp Is Nothing Then
            Return Nothing
        End If

        Try
            If TypeName(CATIAapp.ActiveDocument) = "PartDocument" Then
                oPart = CATIAapp.ActiveDocument.Part
            End If

        Catch COMex As System.Runtime.InteropServices.COMException
            'TODO? error handling here?
        End Try
        Return oPart
    End Function

    ''' <summary>
    ''' Retrieves the product
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Function getProductFromCATIA() As ProductStructureTypeLib.Product
        Dim oProduct = Nothing

        Dim CATIAapp As INFITF.Application = getCATIA()

        If CATIAapp Is Nothing Then
            Return Nothing
        End If

        Try
            If TypeName(CATIAapp.ActiveDocument) = "ProductDocument" Then
                Dim oSelection As INFITF.Selection = GetSelection()

                Try

                    oSelection.Clear()

                    oSelection.Search("CATProductSearch.Product,in")

                    'TODO: what happens if oSelection.Count was 0?!?
                    If oSelection.Count > 0 Then
                        Dim oCheckProd
                        oCheckProd = oSelection.Item(1).Value
                        oProduct = oCheckProd.ReferenceProduct
                    End If
                    oSelection.Clear()
                    'if the Product structure has not been loaded yet, we force that:
                    oProduct.ApplyWorkMode(DESIGN_MODE)

                Catch ex As Exception
                    Throw New Exception("Error retrieving product: " & ex.Message)
                End Try
            End If
        Catch COMex As System.Runtime.InteropServices.COMException
            Throw New Exception("Error retrieving product: " & COMex.Message)
        End Try

        Return oProduct


    End Function

    ''' <summary>
    ''' Retrieves a handle to CATIA/DELMIA via InteropServices
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function getCATIA() As INFITF.Application

        Try
            If Process.GetProcessesByName("cnext").Length = 0 Then
                MessageBox.Show("No CATIA Application launched. Exiting.", "CATIA not found.", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return Nothing
            ElseIf Process.GetProcessesByName("cnext").Length > 1 Then
                MessageBox.Show("Multiple CATIA instances detected. Please ensure that only one CATIA instance is running before launching FFA Next Generation", "Multiple CATIA instances found.", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return Nothing
            End If
            Dim appl As Object = System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application")
            Return CType(appl, INFITF.Application)
        Catch ex As System.Runtime.InteropServices.COMException

            Try
                Dim appl As Object = System.Runtime.InteropServices.Marshal.GetActiveObject("DELMIA.Application")
                Return CType(appl, INFITF.Application)
            Catch ex2 As System.Runtime.InteropServices.COMException
                MessageBox.Show("CATIA.Application (CNEXT.exe) not found! Start V5 application first." & System.Environment.NewLine & System.Environment.NewLine & ex2.Message, "CATIA not found.", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Return Nothing
            End Try
            MessageBox.Show("DELMIA.Application (DELMIA.exe) not found! Start V5 application first." & System.Environment.NewLine & System.Environment.NewLine & ex.Message, "DELMIA not found.", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return Nothing
        End Try

    End Function

    Shared Function GetSelection() As INFITF.Selection
        Return getCATIA().ActiveDocument.Selection
    End Function

    ''' <summary>
    ''' Activates and returns the top level product
    ''' </summary>
    ''' <param name="checkProd"></param>
    ''' <remarks></remarks>
    Public Shared Function ActivateTopLevelProduct(checkProd As Product) As Product

        If checkProd Is Nothing Then
            Throw New ArgumentNullException("Cannot activate top level product when product to be checked is NULL.")
        End If

        Dim ActivatedTopLevelProduct As Product

        Dim oProd As INFITF.Document = getCATIA.ActiveDocument

        If oProd.Product.Name <> checkProd.Name Then

            oProd.Product.ReferenceProduct.ApplyWorkMode(DESIGN_MODE)
            ActivatedTopLevelProduct = oProd.Product.ReferenceProduct
            ActivatedTopLevelProduct.Parent.Activate()
        Else
            ActivatedTopLevelProduct = oProd.Product.ReferenceProduct
        End If

        Return ActivatedTopLevelProduct
    End Function


[Diese Nachricht wurde von NoobCat am 27. Sep. 2016 editiert.]

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

NoobCat
Mitglied


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

Beiträge: 7
Registriert: 09.12.2009

erstellt am: 27. Sep. 2016 13:18    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 Filippo 10 Unities + Antwort hilfreich

Update: nach vielem hin und her mit CATNls Dateien, Codepages und Encoding Settings ist es mir nun gelungen, diese Brute Force Methode für alle in CATIA möglichen Sprachen umzusetzen.

Achtung:
1. die Methode ist in VB.NET geschrieben!
2. die Methode funktioniert NUR auf CatParts und CatProducts
3. die Methode benötigt diverse Hilfsmethoden, die in der Antwort über dieser hier stehen.

Code:
''' <summary>
    ''' Determines the currently set Tools -> Customize -> Options -> User Interface Language
    ''' by trying to read the "Part Number" in all possible languages.
    ''' </summary>
    ''' <returns>A string with the name of the language (English, German, French, Italian, Japanese, Korean, Russian or Simplified Chinese)</returns>
    ''' <remarks>Yeah, I know this is a dirty brute force hack, but the method the internet favourites (see GetCATIAInterfaceLanguage2) is
    ''' not reliable at al because it does NOT tect the corret UI-language when CATIA was started using an -env which sets the UI-language!!</remarks>
    Public Shared Function GetCATIAInterfaceLanguage() As String
        Dim workdoc As Object = GetWorkDocument()

        Dim paras As Parameters = workdoc.Parameters
        Dim pp As Parameter

        Try
            pp = paras.GetItem("Part Number")
            If pp IsNot Nothing Then
                'Return 714 'English
                Return "English"
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("Teilenummer")
            If pp IsNot Nothing Then
                'Return 602 'German
                Return "German"
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("Référence")
            If pp IsNot Nothing Then
                'Return 598 'Francais
                Return "French"
            End If

        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("Numero parte")
            If pp IsNot Nothing Then
                'Return 706 'Italiano
                Return "Italian"
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("パーツ番号")
            If pp IsNot Nothing Then
                'Return ??? 'Japanese
                Return "Japanese"
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("파트 번호")
            If pp IsNot Nothing Then
                'Return ??? 'Korean
                Return "Korean"
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("Номер детали")
            If pp IsNot Nothing Then
                'Return ??? 'Russian
                Return "Russian"
            End If
        Catch x As Exception
        End Try

        Try
            pp = paras.GetItem("零件编号")
            If pp IsNot Nothing Then
                'Return ??? 'Simplified Chinese
                Return "Simplified Chinese"
            End If
        Catch x As Exception
        End Try

        Throw New Exception("Language not detectable by programmatic means. Please contact your Dassault Software Experience Senior Deployment Developer Consultant Specialist Expert.")
    End Function


[Diese Nachricht wurde von NoobCat am 27. Sep. 2016 editiert.]

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