Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Procházení sestavy i CPP linků

UživatelPříspěvek
Břeťa Doležal

Poslat zprávu | Profil
Datum: 14.4. 2015 | Zobrazeno: 9641x
Konfigurace CATIA: V5 R19

Text dotazu:
Zdravím, stavím makro na procházení sestavy a výpis do kusovníku, což se tu již řešilo. Nyní však bych rád procházel sestavu i s CPP linkama - mám v sestavě obrobek, který je vytvořen jako CATPart s CPP linkem na odlitek. Potřeboval bych se dostat i na ten odlitek a dostat ho do výpisu dílů. Byl by někdo ochotný se podělit o zkušenost jak toto tvoří. Alespoň jak vyzískat kolekci Solidů, které vstupují do Partu?
Zatím mě napadá vypsat si všechna Body a následně si vypsat všechny Shapes a z nich vyfiltrovat nějak Solid objekt...

Dá se následně vstupující Part získat za pomocí metody: SourceElement či SourceProduct?

Jaký je zápis pro Selection Search pro Solidy?
Díky za případné rady.

Břeťa Doležal

Poslat zprávu | Profil
[#5055] | Publikováno: 14.04. 2015 - 17:02
Ev. je nějaká možnost vyexportovat stromovou strukturu z desku? Jsou nějaké vazby mezi CATPart a CATProduct dokumenty, které mám viditelné na desku?
Ing Jan Cinert

Poslat zprávu | Profil
[#5063] | Publikováno: 14.04. 2015 - 21:22
Dobrý den,

s linky je to obecně řehole. Kromě linků ve výkresu jsem zatím nenašel nic, s čím by se daly externí linky zjistit nebo s nimi dokonce pracovat.

Syntaxi pro hledání také neznám, tj. najít všechny Shapes a porovnávat podle typu (zdlouhavé).

Desk se asi ovládat nedá, v API jsem zatím nic nenašel. Kdysi mi fungovalo vybrat referenci podle PN a vycentrovat jí pomocí Center graph (hnul se strom v Desku) ale nic víc. Linky v sestavě zjistíte, ale max. to co si sestava drží jako seznam referencí (procházení stromu), ale import, kontext nebo CCP linky se podle mě zjistit nedají.

Už jste něco zkoušel?
Břeťa Doležal

Poslat zprávu | Profil
[#5069] | Publikováno: 15.04. 2015 - 09:05
Zatím jsem si vypsal všechny Solidy, ale SourceElement a SourceProduct jsem zatím nezprovoznil a ani nevím, zda by mi to mohlo dát co chci.


Dim locSubKomp As New cls_SubComponent
Dim strT1, strT2 As String
Dim mycount As Integer
Dim myShapes As Shapes
Dim myHybBod As HybridBodies
Dim myHybSha As HybridShapes
Dim mySolid As MECMOD.Solid


'mySolid.SourceElement
'mySolid.SourceProduct


myShapes = iBody.Shapes
mycount = myShapes.Count
strT1 = ""
strT2 = ""
For Each mySp As Shape In myShapes
If Not IsNothing(mySp) Then
strT1 = strT1 + mySp.Name + "-" + TypeName(mySp) + "|"
If TypeName(mySp) = "Solid" Then

mySolid = CType(mySp, MECMOD.Solid)
strT2 = strT2 + TypeName(mySolid.Parent)

'strT2 = mySolid.SourceElement.Name
'strT2 = strT2 + mySolid.SourceProduct.Parent.ToString

End If
End If
Next mySp

myShapes = Nothing




Spíš se bojím, že tudy cesta nevede a žo to bude spíš chtít řešení na úrovni dokumentů. Co umí Vaše makro IsolateExternals.exe (stahoval jsem, ale nefungovalo u mě)? Ještě zkusím hledat a pátrat. Asi by to mělo jít, protože snad všechny PLM systémy umí rozeznat CPP linky.

Přiložené obrázky:

Břeťa Doležal

Poslat zprávu | Profil
[#5070] | Publikováno: 15.04. 2015 - 12:50
Solid.SourceElement
bude možná řešením, každopádně to musím ještě ozkoušet a dám vědět. Při prvních pokusech jsem zapomněl, že mám v sestavě Solidy bez linku.
Břeťa Doležal

Poslat zprávu | Profil
[#5071] | Publikováno: 15.04. 2015 - 13:02
Je Parent od kolekce Bodies, vždy Part?, pokud se jedná o základní Catii - Mechanical Design 2.
Břeťa Doležal

Poslat zprávu | Profil
[#5094] | Publikováno: 21.04. 2015 - 06:41
Nevím zda je vše OK, ale zde je můj výsledek, který mi zatím funguje na procházení Solid linků v Partu. Je třeba mít všechny Party na desku Loaded, jinak nerozpozná SourceElement. Asi není vše ošetřeno, ale to už si poradíte. ;-)


''' <summary>
''' Rekurzivní funkce pro procházení dílu CATPartu
''' </summary>
''' <param name="iPart">Definuje Product který se má projít</param>
''' <param name="iAssyLevel">Aktuální úroveň Productu v sestavě</param>
''' <param name="iParty">
''' Kolekce vyzískaných Partu
''' Přidává se cls_SubComponent Do kolekce iPodprodukty
''' </param>
''' <remarks>
''' Prozkoumá iPart Do hloubky a případné nalezené další Párty přidá Do kolekce iParty
''' Příklad:
''' Dim Pole As System.Collections.Generic.List(Of cls_SubComponent)
''' PartCPPExplorer (Part, Level, Pole)
''' </remarks>
Public Sub PartCPPExplorer(ByVal iPart As Part, ByVal iAssyLevel As Integer, ByVal iParty As System.Collections.Generic.List(Of cls_SubComponent))

Dim locSubKomp As New cls_SubComponent
Dim intAssyLevel As Integer = iAssyLevel
Dim locShapes As MECMOD.Shapes
Dim locSolid As MECMOD.Solid
Dim locSourceElem As INFITF.AnyObject
Dim locPart As Part
Dim blnIsCPP, blnIsIn As Boolean
Dim locColParty As New System.Collections.Generic.List(Of Part)

intAssyLevel += 1
locColParty.Clear()
For Each iBody As Body In iPart.Bodies
locShapes = iBody.Shapes
For Each locfShape As Shape In locShapes
If Not IsNothing(locfShape) Then
If TypeName(locfShape) = "Solid" Then
blnIsCPP = False
'pokud je to Solid, tak mi ho dej mySp
locSolid = CType(locfShape, MECMOD.Solid)


Try 'zkus zjistit zdroj Solidu, né všechny Solidy jsou s linkem, některé jsou mrtvoly
locSourceElem = locSolid.SourceElement
'locSourceElem je Body -> parent je Bodies -> paret je Part
locPart = CType(locSourceElem.Parent.Parent, Part)

If Not ReferenceEquals(iPart, locPart) Then
blnIsCPP = True

blnIsIn = False
For Each locfPart As Part In locColParty 'procházení již zařazených dílů
If ReferenceEquals(locfPart, locPart) Then 'porovnání
blnIsIn = True 'pokud bude někdy shoda, tak přepni na TRUE
End If
Next locfPart

If Not blnIsIn Then 'pokud ještě není v seznamu, tak přidej díl
locColParty.Add(locPart)
End If
End If
Catch ex As Exception 'pokud vyhodí chybu, tak je solid mrtvola a né CPP link
blnIsCPP = False
Finally
End Try

End If
End If
Next locfShape
Next iBody


For Each locfPart As Part In locColParty
locSubKomp = StorePartInfo(locfPart, intAssyLevel, 0) 'dej Do třídy info o Partu
locSubKomp.CPPLinked = True
iParty.Add(locSubKomp) 'přidat na seznam
PartCPPExplorer(locfPart, intAssyLevel, iParty) 'Rekurzivní volání
Next locfPart

intAssyLevel -= 1
End Sub 'PartCPPExplorer
Ing Jan Cinert

Poslat zprávu | Profil
[#5072] | Publikováno: 21.04. 2015 - 09:32
To vypadá dobře. Jen mě ještě napadlo - jak poznáte CPP link od Import linku? Zde se porovnává jen reference s vlastním partem, a pokud se liší, je jasné že link vede někam jinak ( = ven).

Díval jsem se že kromě vlastnosti SourceElement existuje i SourceProduct. Nezkoušel jste co to vrací při CCP linku? V dokumentaci se píše, že by v tom měla být schována instance dané reference v sestavě, takže u CCP linku by to mělo být prázdné.

Pro účely zjištění pouhé existence linku je to samozřejmě jedno.


Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.