| |
| KISTERS 3DViewStation: Mit 3D-Montageanleitungen werden Produkte bei der Fertigung lebendig, eine Pressemitteilung
|
Autor
|
Thema: Bei selection ersetzen (1862 mal gelesen)
|
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 19. Nov. 2009 15:58 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte gerne, nachdem man ein Part im PRODUCT ausgewählt hat, es durch ein fest vorgegebenes Teil ersetzen lassen, nachdem draufgeklickt wurde. Dazu benutze ich derzeit den source: Set PAlt = PListe.Item(2) Set PNeu = Pliste.ReplaceComponent (PAlt, "C:\...CATPart", True) natürlich ist der Source so statisch und noch nicht mit der Selektion verbunden. Mein Problem ist, dass ich Pliste.Item(2) nicht variabel beschreiben kann, es kommt immer ein Fehler zurück für Pliste.Item(variable) hinzu kommt der andere thread mit dem Problem des auslesens der Item nummer, was mir auch nicht so recht gelingen will. Gibt es dazu schon Codes oder ist jemand bereit dafür mal ein Anschauungsbeispiel zu posten? Wäre super Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pittyplatsh Mitglied
Beiträge: 62 Registriert: 27.12.2008 CATIA V5 R16 SP3
|
erstellt am: 19. Nov. 2009 18:50 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
" [...] Mein Problem ist, dass ich Pliste.Item(2) nicht variabel beschreiben kann, es kommt immer ein Fehler zurück für Pliste.Item(variable) [...] " Ich weis was du vor hast, aber ohne zu wissen wie du an die Sache herangehst weis keiner wo es bei dir klemmt. So wie du das Problem geschildert hast willst du alle selektieren Part's ersetzen lassen. PListe ist vermutlich deine Selection: Code: Dim i As Integer For i = 1 To (PListe.Count) Step 1 Set PAlt = PListe.Item(i).Value Set PNeu = Pliste.ReplaceComponent (PAlt, "C:\...CATPart", True) [weitere Anweisungen] Next
Ich würde vermuten dass du auf ein Item zugreifen wolltest, dass in der Selection nicht existiert. Kann man aber ohne Quelltext nicht sagen. Liebe Grüße, pitty Edit: Glatt das Value vergessen. Sonst zeigst du nur auf das "SelectedObject" welches die Referenz zum eigentlichen Objekt hält [Diese Nachricht wurde von pittyplatsh am 19. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 19. Nov. 2009 19:16 <-- editieren / zitieren --> Unities abgeben:
Sub main() Dim oDoc As Document Dim oProd As Product Dim oSel As Object Dim myType(0) Dim myStatus As String Dim Itemname As String Set oDoc = CATIA.ActiveDocument Set oProd = oDoc.Product Set oSel = oDoc.Selection oSel.Clear myType(0) = "Part" myStatus = oSel.SelectElement2(myType, "Bitte Part auswählen", True) If myStatus = "Normal" Then Itemname = oSel.Item(1).Value.Name 'hier müsste Item(X) ausgelsen werden, command fehlt MsgBox (Itemname) End If Dim Pliste As Products Set Pliste = CATIA.ActiveDocument.Product.Products Dim Pneu As Product Dim Palt As Product Set Palt = Pliste.Itemname.Value ' hier müsste Item(X) wieder eingefügt werden, command fehlt Set Pneu = Pliste.ReplaceComponent(Palt, "C:\...CATPart", True) End Sub Zitat: So wie du das Problem geschildert hast willst du alle selektieren Part's ersetzen lassen.
Mir würde ein spezielles, selektiertes Part erstmal reichen Zitat: Ich würde vermuten dass du auf ein Item zugreifen wolltest, dass in der Selection nicht existiert
Nein, ich will auf genau DAS Item zugreifen, das vorher auch selektiert wurde Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Nov. 2009 19:35 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Servus Über den Index des "Item" ist IMHO ein Umweg. Versuch es mal so ungetestet: Code: Sub CATmain() Dim oDoc As Document Dim oProd As Product Dim oSel As Object Dim myType(0) Dim myStatus As String Dim Itemname As String Set oDoc = CATIA.ActiveDocument Set oProd = oDoc.Product Set oSel = oDoc.Selection oSel.Clear myType(0) = "Product" myStatus = oSel.SelectElement2(myType, "Bitte Part auswählen", True) If myStatus = "Normal" Then Part = oSel.Item(1).Value Set Palt = oProduct.Products.Item(Part.Name) Set Pneu = oProduct.Products.ReplaceComponent(Palt, "C:\...CATPart", True) End If End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 19. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pittyplatsh Mitglied
Beiträge: 62 Registriert: 27.12.2008 CATIA V5 R16 SP3
|
erstellt am: 19. Nov. 2009 19:38 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Naja nen paar grobe Schnitzer sind noch drin^^ Code: Sub main() Dim oDoc As Document Dim oProd As Product Dim oSel As Selection 'Formsache^^ Dim myType(0) Dim myStatus As String Dim Itemname As String Dim Pneu As Part Dim Palt As Part Set oDoc = CATIA.ActiveDocument Set oProd = oDoc.Product Set oSel = oDoc.Selection oSel.Clear myType(0) = "Part" myStatus = oSel.SelectElement2(myType, "Bitte Part auswählen", True) If myStatus = "Normal" Then Dim i As Integer For i = 1 To (oSel.Count) Step 1 Itemname = oSel.Item(i).Value.Name MsgBox (Itemname) 'Jetzt hast du den Namen... du willst aber sicher das Objekt selbst: Set Palt = oSel.Item(i).Value 'das ist das Objekt (meinst du damit Item(X) ??? ) Set Pneu = oProd.ReplaceComponent(Palt, "C:\...CATPart", True) 'Wenn du mit Pneu nichts weiter vor hast reicht es auch nur alles nach dem Gleichheitszeichnen zu schreiben Next End If End Sub
Hoffe ich hab nichts vergessen^^ Nicht getestet Liebe Grüße, pitty [Diese Nachricht wurde von pittyplatsh am 19. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 20. Nov. 2009 08:17 <-- editieren / zitieren --> Unities abgeben:
Zitat: Dim oSel as selection
geht leider nicht, weil ich mit catvba programmiere und "as selection" ist dort nicht gültig Zitat: Set Pneu = oProd.ReplaceComponent(Palt, "C:\test.CATPart", True)
natürlich gibt es das test.catpart unter c:\ gibt aber den Fehler zurück: Object doesn't support this property or method Genau das Gleiche, aber bei einer anderen Stelle bei bgrittmann Zitat: part = oSel.Item(1).Value
Trotzdem danke für die bisherigen Antworten, kann aber leider die Fehler nicht finden.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Nov. 2009 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Servus Da war wohl das "oProduct" falsch und ein "Set" hat gefehlt: Code: Sub CATmain() Dim oDoc As Document Dim oProd As Product Dim oSel As Object Dim myType(0) Dim myStatus As String Set oDoc = CATIA.ActiveDocument Set oProd = oDoc.Product Set oSel = oDoc.Selection oSel.Clear myType(0) = "Product" myStatus = oSel.SelectElement2(myType, "Bitte Part auswählen", True) If myStatus = "Normal" Then Set Part = oSel.Item(1).Value 'MsgBox Part.Name 'der Exemplarname Set Palt = oProd.Products.Item(Part.Name) Set Pneu = oProd.Products.ReplaceComponent(Palt, "c:\.....CATPart", True) End IfEnd Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 20. Nov. 2009 08:38 <-- editieren / zitieren --> Unities abgeben:
|
Lionel Hutz Mitglied
Beiträge: 451 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 27. Aug. 2020 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Aug. 2020 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Servus Lionel Dann musst du ReplaceComponent von der Products-Collection ausführen im dem sich das auszutauschende Teil befindet. Beispiel: Code: Sub CATMain() Dim oDoc As Document Dim oProducts As Products Dim oSel As Object Dim myType(0) Dim myStatus As String Dim oProductOld as Product Dim oProductNew as Product Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection oSel.Clear myType(0) = "Product" myStatus = oSel.SelectElement2(myType, "Bitte Part auswählen", True) If myStatus = "Normal" Then Set oProductOld = oSel.Item(1).Value Set oProducts = oSel.Item(1).LeafProduct.Parent Set oProductNew = oProducts.ReplaceComponent(oProductOld, "C:\.....CATPart", False) End If End Sub
Was meinst du mit Fallunterscheidung? Komponente und CATProduct sollten sich gleich verhalten. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 451 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 27. Aug. 2020 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
|