Autor
|
Thema: Publications / CreateReferenceFromName nicht geschafft (1551 / mal gelesen)
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 29. Okt. 2019 14:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute! Ich versuche jetzt par Publications aus Collection-Elemente machen. Code unter:
Code:
Public Sub CreatePublications(ByVal pubProduct As Product, _ ByVal pubCollection As Collection) ', ByVal iIndex As Integer) Dim pubRef As Reference Dim thePublications As Publications Dim thePublication As Publication Dim i As Integer Dim pubObject As ObjectFor i = 1 To pubCollection.Count Set pubObject = pubCollection.Item(i) Set pubRef = pubProduct.CreateReferenceFromName(pubProduct.Name & "/!" & pubObject.Name) Set thePublications = pubProduct.Publications Set thePublication = thePublications.Add(pubObject.Name) thePublications.SetDirect pubObject.Name, pubRef pubProduct.Update Next End Sub [CODE] pubProduct ist mein Hauptadapter pubCollection ist meine Collection mit Elemente zu publiziren Ich kriege ein Fehlermeldung bei
Set pubRef = pubProduct.CreateReferenceFromName(pubProduct.Name & "/!" & pubObject.Name) [/CODE] Kann mir jemand sagen wo hab ich ein Fehler gemacht? Danke Lucas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Okt. 2019 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Lucas Musst du da nicht die PartNumber verwenden?
Code: Set pubRef = pubProduct.CreateReferenceFromName(pubProduct.PartNumber & "/!" & pubObject.Name)
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 29. Okt. 2019 14:59 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Okt. 2019 17:59 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Willst du im Part was veröffentlichen oder im CATProduct? Ist pubProduct eine Instanz im CATProduct? Was willst du veröffentlichen? (hat alles Einfluss auf den String für die Reference) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 30. Okt. 2019 08:20 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusWillst du im Part was veröffentlichen oder im CATProduct? Ist pubProduct eine Instanz im CATProduct? Was willst du veröffentlichen? (hat alles Einfluss auf den String für die Reference) Gruß Bernd
Hallo Bernd pubProduct is das Hauptadapter - Part -> ein Instanz im ZSB Product
Ich habe oKol mit unterschiedliche Elemente (Linien, Curven, Punkte, AxisSystem, etc... - die kommen aus ein GeoSet in dem Hauptadapter), welche ich will veröffentlichen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Okt. 2019 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Und du willst im Part (Hauptadapter) veröffentlichen? Dann musst du statt die Instanz das ReferenceProduct davon (also das Product im PartDocument) an die Unterroutine übergeben. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 30. Okt. 2019 11:08 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusUnd du willst im Part (Hauptadapter) veröffentlichen? Dann musst du statt die Instanz das [i]ReferenceProduct davon (also das Product im PartDocument) an die Unterroutine übergeben. Gruß Bernd [/i]
Code: For Each oDoc In CATIA.Documents If TypeName(oDoc) = "PartDocument" Then If InStr(1, oDoc.Product.PartNumber, "HAUPTADAPTER") <> 0 Then Set oProd = oDoc.Product End If Next
und Code:
CreatePublications oProd, oKol
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 30. Okt. 2019 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Moin, hat es jetzt denn geklappt? Habe gerade kein CATIA offen, aber müsst das nicht einfacher über CreateReferenceFromObject gehen? Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Okt. 2019 12:05 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Lucas Was willst du mit deiner "Antwort" mitteilen? Hast du schon versucht deinen Fehler einzugrenzen? Bekommst du hin in einem Part ein Element zu veröffentlichen? Ein kleines Beispiel: folgender Code veröffentlicht im ersten Product in der Baugruppe den Hauptkörper (Achtung: keine Fehlerbehandlung integriert): Code: Sub CATMain()Dim oProductDocument as ProductDocument Dim oRootProduct as Product Dim oInstanceProduct as Product Dim oPartProduct as Product Dim oPart as Part Dim oMainBody as Body Dim oPublication as Publication Set oProductDocument = CATIA.ActiveDocument Set oRootProduct = oProductDocument.Product Set oInstanceProduct = oRootProduct.Products.Item(1) Set oPartProduct = oInstanceProduct.ReferenceProduct Set oPart = oPartProduct.Parent.Part Set oMainBody = oPart.Mainbody
AddPublication oPartProduct, oMainBody End Sub Function AddPublication(MyPartproduct, MyElement) as Publication 'Publiziert ein Element Set MyParentProduct = MyPartproduct MyRefName = MyParentProduct.PartNumber & "/!" & MyElement.Name Set MyRef = MyParentProduct.CreateReferenceFromName(MyRefName) MyPubName = "Publication_von_" & MyElement.Name Set AddPublication = MyPartproduct.Publications.Add (MyPubName) MyParentProduct.Publications.SetDirect MyPubName, MyRef End Function
@Randle: Die Refernz muss wohl vom Product (im PartDocument) aus erstellt werden. Und da gibt es kein CreateReferenceFromObject. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 30. Okt. 2019 15:00 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Okt. 2019 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Wo kommt ein Fehler? Welche Fehlermeldung kommt? Passt der String für die Reference? (mit Makroaufzeichnung vergleichen!) Was für Element willst du veröffentlichen? Wie greifst du auf die Elemente zu? Was hast du schon alles getestet? Klappt es im extra Fenster? Läuft mein Code (leere Baugruppe mit einem leeren Part)? Hast du den Code schrittweise ablaufen lassen? Passen da die Anzeigen im Watch/Local-Fenster? ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 31. Okt. 2019 09:12 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Wo kommt ein Fehler? Welche Fehlermeldung kommt? Passt der String für die Reference? (mit Makroaufzeichnung vergleichen!) Was für Element willst du veröffentlichen? Wie greifst du auf die Elemente zu? Was hast du schon alles getestet? Klappt es im extra Fenster? Läuft mein Code (leere Baugruppe mit einem leeren Part)? Hast du den Code schrittweise ablaufen lassen? Passen da die Anzeigen im Watch/Local-Fenster?
Hi Bernd Ich habe mein Code mit Makroaufzeichnung vergleichen, und was witzich ist: mein Code nimmt anderes opubProduct.Name wie im der Baum steht! Ich habe der Name vom oben (oDoc.Product.Name) statt vom unten (oHybridBody.Parent.Parent.Parent.Product) gekriegt. Jetzt lauft super! Danke! P.S. Noch eine Frage dazu: Ich habe ein AxisSystem unter den GeometricalSet (die ich will auch veröffentlichen) aber Makro nimmst für die Collection alle Elemente aus GeoSet, außer der AxisSzstem - warum? [Diese Nachricht wurde von Sylas am 31. Okt. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 31. Okt. 2019 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Dann hast du wohl doch das falsche Prodcut an die Unterroutine übergeben. Zu deiner weiteren Frage: - Ist das Achsensystem auch in einem GeoSet angeordnet? - wie sieht jetzt dein Code aus - Wie sieht der Sting für die Refernce aus wenn du die Veröffentlichung per Makrorekorder aufzeichnest? - gibt es mehrere Achsensysteme die gleich heißen? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 05. Nov. 2019 09:01 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusDann hast du wohl doch das falsche Prodcut an die Unterroutine übergeben. Zu deiner weiteren Frage: - Ist das Achsensystem auch in einem GeoSet angeordnet? - wie sieht jetzt dein Code aus - Wie sieht der Sting für die Refernce aus wenn du die Veröffentlichung per Makrorekorder aufzeichnest? - gibt es mehrere Achsensysteme die gleich heißen? Gruß Bernd
Hallo Bernd Ich entschuldige mich für spät Antwort Hier ist mein Code:
Code:
Sub CATMain() 'On Error Resume Next Dim oProd As Product Dim oDoc As Document For Each oDoc In CATIA.Documents If TypeName(oDoc) = "PartDocument" Then If InStr(1, oDoc.Product.PartNumber, "HAUPTADAPTER") <> 0 Then Set oProd = oDoc.Product End If Next Dim sSel As selection Dim oSel Set sSel = CATIA.ActiveDocument.selection Set oSel = sSel Dim InputObjectType(0) InputObjectType(0) = "AnyObject"oSelection = oSel.SelectElement3(InputObjectType, "Wybierz elementy", True, CATMultiSelTriggWhenUserValidatesSelection, False) Zmiana_nazw = MsgBox("Chcesz zmieniæ jakieœ nazwy?", vbYesNo, "Zmiana nazw") If Zmiana_nazw = vbYes Then sStringToBeChanged = InputBox("Podaj czêœæ nazwy do zmiany", "Ci¹g znaków do zmiany", "001") sStringNew = InputBox("Podaj now¹ czêœæ nazwy", "Nowy ci¹g znaków", "00x") For i = 1 To oSel.Count If TypeName(oSel.Item(i).Value) = "HybridBody" Then oSel.Item(i).Value.Name = VBA.Replace(oSel.Item(i).Value.Name, sStringToBeChanged, sStringNew) For Each HybridBody In oSel.Item(i).Value.HybridBodies For Each Shape In HybridBody.HybridShapes Shape.Name = VBA.Replace(Shape.Name, sStringToBeChanged, sStringNew) Next Next For Each Shape In oSel.Item(i).Value.HybridShapes Shape.Name = VBA.Replace(Shape.Name, sStringToBeChanged, sStringNew) Next Else oSel.Item(i).Value.Name = VBA.Replace(oSel.Item(i).Value.Name, sStringToBeChanged, sStringNew) End If Next End If sPub = MsgBox("Publikowaæ?", vbYesNo, "Publikacje") If sPub = vbNo Then GoTo koniec: End If Dim oKugel As HybridShapeSphere Dim oSchnitt As HybridShapeIntersection For i = 1 To oSel.Count If (TypeName(oSel.Item(i).Value) = "HybridBody" And InStr(1, oSel.Item(i).Value.Name, "Spannstelle_Hilfe_") <> 0) Then For Each Shape In oSel.Item(i).Value.HybridShapes If TypeName(Shape) = "HybridShapeSphere" Then Set oKugel = Shape oKugel.Center = oRef1 End If Next ElseIf (TypeName(oSel.Item(i).Value) = "HybridBody" And InStr(1, oSel.Item(i).Value.Name, "SPM_") <> 0) Then For Each Shape In oSel.Item(i).Value.HybridShapes If TypeName(Shape) = "HybridShapeIntersection" Then Set oSchnitt = Shape oSchnitt.Element2 = oRef2 End If Next End If Next Dim oKol As New VBA.Collection For i = 1 To oSel.Count If (TypeName(oSel.Item(i).Value) = "HybridBody" And InStr(1, oSel.Item(i).Value.Name, "SPM_") <> 0) Then For Each Shape In oSel.Item(i).Value.HybridShapes oKol.Add Shape Next Else oKol.Add oSel.Item(i).Value End If Next For i = oKol.Count To 1 Step -1 If TypeName(oKol.Item(i)) = "HybridBody" Then oKol.Remove i Next CreatePublications oProd, oKol Set oKol = New VBA.Collection oSel.Clear koniec: End Sub Function CreatePublications(ByVal pubProduct As Product, _ ByVal pubCollection As Collection) As Publication ', ByVal iIndex As Integer) Dim pubRef As Reference Dim thePublications As Publications Dim thePublication As Publication Dim i As Integer Dim sPubName As String Dim pubObject As Object For i = 1 To pubCollection.Count Set pubObject = pubCollection.Item(i) sPubName = pubProduct.Name & "/!" & pubObject.Name Set pubRef = pubProduct.CreateReferenceFromName(sPubName) Set thePublications = pubProduct.Publications Set thePublication = thePublications.Add(pubObject.Name) thePublications.SetDirect pubObject.Name, pubRef pubProduct.Update Next i End Function
Und hier was Macro-recorder hat gegeben:
Code:
Sub CATMain()Dim documents1 As Documents Set documents1 = CATIA.Documents Dim partDocument1 As PartDocument Set partDocument1 = documents1.Item("05-15D_434483_________0000_________A00_HAUPTADAPTER.CATPart") Dim product1 As Product Set product1 = partDocument1.GetItem("05-15D_434483_________0000_________A00_HAUPTADAPTER") Dim reference1 As Reference Set reference1 = product1.CreateReferenceFromName("05-15D_434483_________0000_________A00_HAUPTADAPTER/!SPM_012/SPM_012") Dim publications1 As Publications Set publications1 = product1.Publications Dim publication1 As Publication Set publication1 = publications1.Add("SPM_012") publications1.SetDirect "SPM_012", reference1 Dim settingControllers1 As SettingControllers Set settingControllers1 = CATIA.SettingControllers Dim visualizationSettingAtt1 As VisualizationSettingAtt Set visualizationSettingAtt1 = settingControllers1.Item("CATVizVisualizationSettingCtrl") visualizationSettingAtt1.SaveRepository End Sub
Das AchsenSystem steht unter das gleiches GeoSet, wie ändere Elemente. Ich will zuerst jeder Name von GeoSet Elemente ändern, danach publizieren, aber der Code findet dem Achsensystem unter dem GeoSet nicht Sorry für mein Deutsch Lucas EDIT: Ich habe das Axis Problem mit
Code:
Set oSel2 = sSel oSel2.Search ("'Part Design'.'Axis System',sel") oSel2.Item(1).Value.Name = VBA.Replace(oSel2.Item(1).Value.Name, sStringToBeChanged, sStringNew) oKol.Add oSel2.Item(1).Value oSel2.Clear
gelöst. Aber ich habe wieder das Problem, das code nimmt anderes Product.Name wie in der Baum steht... Der Produktname ist mit nur eine Buchstabe änderes als die richtiges Product, und existiert in der Baum nicht (ist auch nicht in CATIA.documents geladen). [Diese Nachricht wurde von Sylas am 05. Nov. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Nov. 2019 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus AFIAR sind Achsensystem in GeoSet etwas problematisch. Die einzige Möglichkeit die mir dazu einfällt: GeoSet selektieren und per .Search nach den Achsensystem darin suchen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Nov. 2019 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Warum bestimmst du das Product in dem was veröffentlicht werden soll über die Documents-Collection? Was ist wenn in einem andern Part was selektiert wurde? Was wenn mehrerer Dokumente mit HAUPTADAPTER in der PartNumber geöffnet sind (oder nicht richtig geschlossen wurden)? Ich würde das Product über die selektierenden Elemente (zB .LeafProduct.ReferenceProduct, geht aber nur wenn in einer Baugruppe etwas selektiert wurde) bestimmen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 05. Nov. 2019 10:15 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: ServusWarum bestimmst du das Product in dem was veröffentlicht werden soll über die Documents-Collection? Was ist wenn in einem andern Part was selektiert wurde? Was wenn mehrerer Dokumente mit HAUPTADAPTER in der PartNumber geöffnet sind (oder nicht richtig geschlossen wurden)? Ich würde das Product über die selektierenden Elemente (zB [i].LeafProduct.ReferenceProduct, geht aber nur wenn in einer Baugruppe etwas selektiert wurde) bestimmen. Gruß Bernd [/i]
Danke Bernd! Jetzt func super! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |