Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Problem Instancenamen zuweisen

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:  Problem Instancenamen zuweisen (1521 mal gelesen)
HeinHein
Mitglied
Dipl Ing Maschinenbau


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

Beiträge: 44
Registriert: 16.02.2012

cgr und models Namen ermitteln

erstellt am: 17. Jul. 2013 20:26    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,

BS: Windows XP
CATIA V5 R16
ich bin am verzweifeln.
Gegenwärtig schreibe ich in VBScript ein Snchronisationsscript.
Dabei soll u.a. der Instancename eines Subassemblies an den Dateinamen angepasst werden.
Das es in CATIA mit Instancenamen Probleme gibt (was manuelle Instancenamenänderungen sowie via CATScript
funktioniert, jedoch nicht via VBScript) hat das Forenmitglied TomTom bereits geschildert.
Aus diesem Grund rufe ich zur Änderung des Instancenamens aus meinem VBScript ein CATScript auf.

Die Zuweisung eines neuen Instancenamens scheint CATIA zu ignorieren.


Hier ein Codeschnipsel

Code:
Dim k as Integer 'Index Instance
Dim ok as Boolean
Dim instanceSoll as String
dim instanceVorher

On Error Resume Next
k=0
ok=False
instanceVorher=objItem.Name

Do
k = k + 1
Err.Clear
instanceSoll=sName & "." & k
objItem.Name = instanceSoll
if Err.Number = 0 then
ok=true
message=""
message = message & "objProductParent : " & vbTab & vbTab & objProductParent.name & chr(13)
message = message & "k : " & vbTab & vbTab & k & chr(13)
message = message & "Soll : " & vbTab & vbTab & instanceSoll & chr(13)
message = message & "vorher : " & vbTab & vbTab & instanceVorher & chr(13)
message = message & "nachher : " & vbTab & objItem.Name & chr(13)
msgbox message, vbinformation, "Ergebnis"
end if'Err.Number = 0
Loop Until ok=true
On Error Goto 0

Nach der Zeile objItem.Name = instanceSoll gibt CATIA jedoch den Wert von
instanceVorher zurück. Das kann man auch im Strukturbaum nachvollziehen, d.h.
Die Zeile
objItem.Name = instanceSoll wurde ignoriert. Es wurde aber auch kein Fehler ausgegeben!

Was mache ich falsch???????
Über einen Hinweis würde ich mich sehr freuen.

Gruss HeinHein

------------------
HeinHein

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: 17. Jul. 2013 22:04    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 HeinHein 10 Unities + Antwort hilfreich

Servus
Wo hast du die Schleife über die einzelnen Instanzen (Products-Collection)?
In deinem Code wird der Zähler k zwar hochgezählt, aber das "objItem" bleibt das gleiche. Was ist "objItem"?
Tritt der Fehler nur bei bestimmten Parts/Products/Componenten auf?
Wo hat TomTom schon mal das gleiche Problem beschrieben?

Gruß
Bernd

PS: Bitte Systeminfo ausfüllen (im Profil)

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

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

ptit.tom
Mitglied
CAD-Berater


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

Beiträge: 114
Registriert: 11.02.2005

win10, CATIA R19 bis R30

erstellt am: 18. Jul. 2013 08:38    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 HeinHein 10 Unities + Antwort hilfreich

Guten Morgen,

Dein Skript funktioniert auf meine Maschine (R19sp9) (als "Macro with arguments" in einem Produkt).
Wie rufst du es auf ?

Gruß,
Florent

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

HeinHein
Mitglied
Dipl Ing Maschinenbau


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

Beiträge: 44
Registriert: 16.02.2012

cgr und models Namen ermitteln

erstellt am: 18. Jul. 2013 09:50    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 Bernd, hallo Florent

ich werde mein Script auf das nötigste herunterbrechen und es heute abend ins Forum stellen. Vielleicht findet jemand die wunde Stelle.

Gruss HeinHein

------------------
HeinHein

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

HeinHein
Mitglied
Dipl Ing Maschinenbau


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

Beiträge: 44
Registriert: 16.02.2012

cgr und models Namen ermitteln

erstellt am: 18. Jul. 2013 17: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 hier die wesentlichsten Teile vom code

Code:

'=== Class members ======
private Sub MainSub
Dim f_i
'1. Step acvtivate assy window
Set m_objWindowsOpen = m_objCATIA.Windows
for f_i = 1 to m_objWindowsOpen.count
'msgbox(m_objCATIA.windows.item(f_i).name),vbinformation, "CATIA Windows"
If m_objCATIA.windows.item(f_i).name=m_NameMainAssemblyNameShort Then
m_objCATIA.windows.item(f_i).Activate
exit for
End If'
next

'2. getActive Product
Set m_objMainProduct=m_objCATIA.ActiveDocument.Product

'2. Synchrone all models of assembly
call synchronizeAffectedModels(m_objMainProduct,m_SettingSynchronizeInstanceName)
End Sub'MainSub

Function synchronizeAffectedModels(f_objcurrProduct, treadInstanceName)

dim f_a 'loop
Dim f_objProductsOfcurrent
dim f_message
dim f_index
dim f_fileNameFull 'file name with full path
Dim f_fileNameBrutto 'file name with wildcard
Dim f_fileNameNetto 'file name without wildcard
Dim f_treadInstanceName 'Festlegung, ob Instanz synchronisiert werden soll - Behandlung ja oder nein

dim f_PartNumberBefore 'PartNumber vor Manipulation
Dim f_match
dim f_errorNumber
dim f_errTest
on error goto 0

f_treadInstanceName=treadInstanceName
f_fileNameBrutto = ""
f_fileNameNetto = ""
f_PartNumberBefore = ""

'Aktion mit dem CurrentProduct
'msgbox "Type name : " & TypeName(f_objcurrProduct)

If TypeName(f_objcurrProduct) = "Product" Then
'Unterscheidung, ob es der Produktknoten oder das File selbst ist
if f_objcurrProduct.Products.count = 0 then
'******************************************************
'*** ***
'*** It is a part -> product.count=0 ***
'*** ***
'******************************************************
'1. Get file name with wildcard -> filenameBrutto
f_fileNameBrutto=""
f_fileNameFull=f_objcurrProduct.GetMasterShapeRepresentationPathName'

f_index=instrRev(f_fileNameFull,"\")
f_fileNameBrutto=Right(f_fileNameFull, len(f_fileNameFull)-f_index)
Else
'******************************************************
'*** ***
'*** It is a product node -> product.count>0 ***
'*** ***
'******************************************************
f_fileNameFull=f_objcurrProduct.ReferenceProduct.Parent.FullName
f_index=instrRev(f_fileNameFull,"\")
f_fileNameBrutto=Right(f_fileNameFull, len(f_fileNameFull)-f_index)
end if'f_objcurrProduct.Products.count = 0

'2. Get file name without wildcard -> filenameNetto
If Right(f_fileNameBrutto, 6) = ".model"  Then f_match = ".model"
If Right(f_fileNameBrutto, 4) = ".cgr"  Then f_match = ".cgr"
If Right(f_fileNameBrutto, 8) = ".CATPart"  Then f_match = ".CATPart"
If Right(f_fileNameBrutto, 11) = ".CATProduct" Then f_match = ".CATProduct"
If Right(f_fileNameBrutto, 11) = ".CATDrawing" Then f_match = ".CATDrawing"
f_fileNameNetto = replace(f_fileNameBrutto,f_match,"")

'4. Task 1. Part number synchrone by file name
f_PartNumberBefore = f_objcurrProduct.PartNumber 'save old part number

If Not f_fileNameNetto=f_PartNumberBefore Then
'Synchronisation is mandatory
f_objcurrProduct.Product.PartNumber = f_fileNameNetto
End If'If Not f_fileNameNetto=f_PartNumberBefore


if not TypeName(f_objcurrProduct.Parent.Parent.Parent.Parent)="Application" then
'wenn es nicht das topassembly ist
If f_treadInstanceName  Then
call FUNC_Rename_BugFix(f_objcurrProduct, f_fileNameNetto)
End If'tread instance name
end if'TypeName(f_objcurrProduct.Parent.Parent)
End If'TypeName(f_objcurrProduct.Products.Item(f_a)) = "Product"

'******************************************************
'*** ***
'*** Rekursion - analyse list ***
'*** ***
'******************************************************
set f_objProductsOfcurrent=f_objcurrProduct.Products
f_a=0
Do while f_a < f_objProductsOfcurrent.Count
f_a = f_a+1
call synchronizeAffectedModels(f_objProductsOfcurrent.Item(f_a), f_treadInstanceName)
Loop
End function'synchronizeAffectedModels

Function FUNC_Rename_BugFix(oItem, sName)
'oItem ist die Instanz (also das .Product)
'sName = nuer InstanceName ohne .Index
const catScriptLibraryTypeDirectory=1 'aus CATIA Objektkatalog F2
Dim f_message
Dim f_objDokFather
Dim aObject1(2)
on error goto 0

If TypeName(oItem.Parent.Parent.Parent.Parent) = "Application" Then
Set f_objDokFather = m_objCATIA.Documents.Item(oItem.Parent.Parent.ReferenceProduct.Parent.Name)
Else
Set f_objDokFather = m_objCATIA.Documents.Item(oItem.Parent.Parent.Parent.Parent.ReferenceProduct.Parent.Name)
End If

Set aObject1(0) = oItem
Set aObject1(1) = f_objDokFather
aObject1(2) = sName
On Error Resume Next
Err.Clear
m_objCATIA.SystemService.ExecuteScript m_ScriptPath, catScriptLibraryTypeDirectory, "InstRename_BugFix.CATScript", "CATMain", aObject1
If Err.Number <> 0 Then
MsgBox "Problem beim Ausführen des InstRename_BugFix_mini.CATScript.  " & vbLf & " Abbruch.", 16, "Unbekannter Fehler."
End If
On Error GoTo 0
End Function'xxxxxx


Lasst euch nicht verwirren, ein Grossteil dient dabei nur der Dateinamensextraktion
Wichtig wird es ab der Function FUNC_Rename_BugFix diese ruft dann das CatScript auf.

Hier das CATScript genannt InstRename_BugFix.CATScript

Code:
Sub CATMain(objItem, objFather, sName)
Dim objProductParent 'das uebergeordnete Produkt
Dim message '
dim NameItem
dim NameProductParent
If objItem.Name = objFather.Name Then
NameProductParent = objItem.Parent.Parent.ReferenceProduct.Parent.Name
NameItem = objItem.Name 'Instance Name
else
NameProductParent = objItem.Parent.Parent.Name 'Funktioniert, wenn es die InstanceNummer ist
NameItem = objItem.Name 'Instance Name
end if


If objItem.Name = objFather.Name Then
'msgbox "CATScript Fall 1"
Set objProductParent = Catia.Documents.Item(NameProductParent) 'filename of main assembly
Set objItem = objProductParent.Product.Products.Item(NameItem)
end if
If objItem.Name <> objFather.Name Then
'msgbox "CATScript Fall 2"
Set objProductParent = objFather.Product.Products.Item(NameProductParent)'error occurs 'part number of father
Set objItem = objProductParent.Products.Item(NameItem)
End if

'--- der kleinst Möglich Index (z.B. .1) für die Instanz
'On Error Resume Next
on error goto 0

Dim k as Integer
Dim ok as Boolean
Dim instanceSoll as String
dim instanceVorher
k=0
ok=False
instanceVorher=objItem.Name

Do
k = k + 1
Err.Clear
instanceSoll=sName & "." & k
objItem.Name = instanceSoll
'if Err.Number = 0 then
ok=true
message=""
message = message & "objProductParent : " & vbTab & vbTab & objProductParent.name & chr(13)
message = message & "k : " & vbTab & vbTab & k & chr(13)
message = message & "Soll : " & vbTab & vbTab & instanceSoll & chr(13)
message = message & "vorher : " & vbTab & vbTab & instanceVorher & chr(13)
message = message & "nachher : " & vbTab & objItem.Name & chr(13)
msgbox message, vbinformation, "Erfolg???"
'end if'Err.Number = 0
Loop Until ok=true
On Error Goto 0
End Sub'CATMain


Es geht halt darum, dass Catia die Instancenamenszuweisung ignoriert.
Für den entscheidenen Hinweis wäre ich wirklich dankbar.

Gruss HeinHein

------------------
HeinHein

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