Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  bestimmte Instanz eines Parts selektieren

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:  bestimmte Instanz eines Parts selektieren (1122 mal gelesen)
PeterFleischmann
Mitglied
Software Entwickler


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

Beiträge: 10
Registriert: 12.09.2016

CATIA V5-6 B29 SP3 HF05

erstellt am: 12. Okt. 2017 19: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


CatTree.jpg

 
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 Part

children = 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


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: 13. Okt. 2017 09: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 PeterFleischmann 10 Unities + Antwort hilfreich

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


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

Beiträge: 72
Registriert: 03.05.2017

erstellt am: 19. Okt. 2017 11:43    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 PeterFleischmann 10 Unities + Antwort hilfreich

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#000008

Zitat:
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 If

If 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 Class

Dim 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


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

Beiträge: 10
Registriert: 12.09.2016

CATIA V5-6 B29 SP3 HF05

erstellt am: 19. Okt. 2017 12:10    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,

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 >>)

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