Autor
|
Thema: bestimmte Instanz eines Parts selektieren (1122 mal gelesen)
|
PeterFleischmann Mitglied Software Entwickler
Beiträge: 10 Registriert: 12.09.2016 CATIA V5-6 B29 SP3 HF05
|
erstellt am: 12. Okt. 2017 19:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich stehe gerade irgendwie auf dem Schlauch. Ich habe ein Part, das mehrfach in verschiedenen Lagen innerhalb eines Produktes verbaut ist. Ich brauche dieses Part sowohl als Produkt Ich möchte nun eine Publication (Body) aus einem anderen Part in das markierte Part mit Paste Result With Link einfügen. Wenn ich den unten stehenden Code ausführe wird statt dem markierten, die andere Instanz ausgewählt. Wie kann ich erreichen, dass ich immer die im Bild markierte Instanz bekomme? Ich nutze Catia V5-6 B26 SP3 HF22 und Visual Studio VB Vielen Dank! Peter Code: Dim laserProd As Product Dim laser As Partchildren = rootProduct.Products For i = 1 To children.Count subproduct = children.Item(i) subname = subproduct.Name If subname.ToUpper.StartsWith("LP") Then ' hier stehen noch weitere Bedingungen um die passende Instanz zu finden laserProd = subproduct laser = subproduct.ReferenceProduct.Parent.Part <-- liefert mir nicht immer das gewünschte 'Knoten' End If Next oSelection = oCatia.ActiveDocument.Selection oSelection.Clear() oSelection.Add(oPublication) oSelection.Copy() oSelection.Clear() oSelection.Add(laser) oSelection.PasteSpecial("CATPrtResult") oObject = oSelection.Item2(1) oSelection.Clear() ' oSelection.Add(laserProd) markiert das Richtige "Product"
[Diese Nachricht wurde von PeterFleischmann am 12. Okt. 2017 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: 13. Okt. 2017 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für PeterFleischmann
Servus Peter Ich hab dazu drei Ideen (ungetestet): - entsprechende Instanz selektieren und darin per .Search das Part suchen - alle anderen Instanzen dieses Parts vor dem einfügen deaktivieren - das Part über eine Reference selektieren (per CreateReferenceFromName, Pfad vergleichbar wie bei der Erstellung von Bedingungen) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C.Samer Mitglied CAD Administrator
Beiträge: 72 Registriert: 03.05.2017
|
erstellt am: 19. Okt. 2017 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für PeterFleischmann
Hey, das Originalteil beim Durchwandern eines Produkts kannst du mit meinem Code von diesem Beitrag hier herausfinden: http://ww3.cad.de/foren/ubb/Forum137/HTML/006367.shtml#000008Zitat: Original erstellt von C.Samer: Hallo!Wenn es darum geht z.B. die Anzahl von Schrauben in der aktuellen Baugruppe herauszufinden, lässt sich das so machen: Code: save = 0 If paProductsCount > 0 Then 'Wenn ich mehrere siblings habe For intH = 1 To paProductsCount If pLoc.partnumber = paProducts.Item(intH).PartNumber Then 'Wenn meine Teilenummer gleich der Teilenummer 'des Kindes intH meines Elternteils ist, dann... duplicates = duplicates + 1 If pLoc.Name = paProducts.Item(intH).Name and duplicates = 1 Then 'Wenn mein Exemplarname gleich dem Exemplarnamen 'des Kindes intH meines Elternteils ist, und noch 'keine Duplikate vorgekommen sind, dann... save = 1 Else If save = 0 Then Exit For End If End If End If Next Else 'Wenn ich keine siblings habe duplicates = 1 End IfIf save = 1 then 'speichern End if
Pa ist das Parent von pLoc (aktueller Teil). Der Code geht durch alle Kinder des Parent von pLoc durch und addiert dann die Duplikate. Wenn sowohl die Teilenummer des betrachteten Teils, als auch der Exemplarname gleich sind, weiß der Code, dass es sich um das Original handelt. Daraufhin weiß er, dass er den Artikel in einer beliebigen Liste speichern soll (Variable save = 1). Ansonsten bricht er das Speichern des Teils ab. Er zählt alle Duplikate (Siblings) bis zum Ende und wenn dann save = 1 ist, führt er die Speicherfunktion aus. Das was Bernd meint, geht übrigens so:
Code: Class objType Public artNr As String 'Artikelnummer / PartNumber Public bez As String 'Bezeichnung / Definition Public menge As String 'Menge End ClassDim objArr() As objType Sub CATMain() ReDim objArr(0) 'Initialize the Array objLenY = -1 'Kein Header, daher direkt auf 0 Werte schreiben End Sub Function CreateObjBOM(p as Product) objLenY = objLenY + 1 'Beim ersten mal -1 + 1 = 0 ; ObjArr am anfang (0) ReDim Preserve objArr(objLenY) Set objArr(objLenY) = New objType Set objArr(objLenY).artNr = pLoc.PartNumber End Function
Hab den Code nicht getestet, aber so ähnlich bei mir in Verwendung. Ich denke er hilft dir trotzdem weiter. Liebe Grüße aus Wien, Christoph [Diese Nachricht wurde von C.Samer am 29. Aug. 2017 editiert.]
Man betrachte folgende Zeile: Zitat: Wenn sowohl die Teilenummer des betrachteten Teils, als auch der Exemplarname gleich sind, weiß der Code, dass es sich um das Original handelt.
Liebe Grüße, Christoph [Diese Nachricht wurde von C.Samer am 19. Okt. 2017 editiert.] [Diese Nachricht wurde von C.Samer am 19. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PeterFleischmann Mitglied Software Entwickler
Beiträge: 10 Registriert: 12.09.2016 CATIA V5-6 B29 SP3 HF05
|
erstellt am: 19. Okt. 2017 12:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe eine Lösung für mein Problem gefunden: Da jedes selektierte Part noch sein LeafProduct (Produkt in der das Part im Baum liegt) kann ich das entsprechen Part anhand des LeafProducts erkennen. Ich selektiere über Search alle Instanzen des Parts (laser) und werfe alle wieder raus, deren LeafProduct nicht das gesuchte Product (laserProd) ist.
Code:
oSelection.Clear()' Select all Parts with matching Name oSelection.Search(".Part.Name='" & laser.Name & "';all") ' Then remove those that are not in our product. For i = oSelection.Count To 1 Step -1 oSelElem = oSelection.Item(i) If Not (oSelElem.LeafProduct Is laserProd) Then oSelection.Remove(i) End If Next
Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|