Autor
|
Thema: Parts und Products in Struktur Fixen VB.Net (catCstTypeReference) (4102 mal gelesen)
|
makebeth Mitglied
Beiträge: 12 Registriert: 21.03.2009 Dell Precision T3400; Vista x64; CATIA V5 R16 32Bit;
|
erstellt am: 23. Mrz. 2009 21:08 <-- editieren / zitieren --> Unities abgeben:
hallo zusammen, ich habe in vb.net eine anwendung geschrieben, die es ermöglicht über eine treeview standardstrukturen zu erstellen, zu bearbeiten und zu speichern. das übertragen in catia ist kein problem. was mir kopfschmerzen bereitet ist das fixen der parts und produkte. Code:
'CATIA V5 GSMInterfaces Object Library 'CATIA V5 InfInterfaces Object Library 'CATIA V5 ProductStructureInterfaces Object Library 'CATIA V5 MecModInterface Object Library 'CATIA V5 KnowledgeInterfaces Object Library 'als Referenz eingebundenSub Run(rootNode As TreeNode, rootProd as Product) Dim subNode As TreeNode Dim subProd As Product Dim subPRef As Reference Dim rootCol As INFITF.Collection '#### deklaration direkt über INFITF, um konflikte zu verhindern Dim subType As String For Each subNode In rootNode.Nodes If subNode.ImageIndex = 0 Then subType = "Product" Else If subNode.ImageIndex = 1 Then subType = "Part" Else subType = "Component" End If subProd = rootProd.Products.AddNewComponent(subType, subNode.Text) Try Dim rootDoc As ProductDocument rootDoc = rootProd.Parent msgbox(rootDoc.Name) Dim oInstNameChangeProd As Product = CATIA.Documents.Item(subProd.Parent.Parent.ReferenceProduct.Parent.Name) Dim oInstNameChangeItem As Product = oInstNameChangeProd.Product.Products.Item(subProd.Name) oInstNameChangeItem.Name = subNode.Name Catch subProd.Name = subNode.Name End Try subPRef = subProd.CreateReferenceFromName(rootProd.PartNumber + "/" + subProd.Name + "/!" + rootProd.PartNumber + "/" + subProd.Name + "/") rootCol = rootProd.Connections("CATIAConstraints") rootCol.AddMonoEltCst(catCstTypeReference, subPRef) '#### schlägt fehl, da catCstTypeReference nicht deklariert ist If Not subNode.GetNodeCount(False) = 0 Then Run(subNode, subProd) End If Next End Sub
wo finde ich "catCstTypeReference"? das ganze funktioniert als CATScript ohne probleme. vielen dank im voraus EDIT: Code: '#### alter code '## Dim rootCol As INFITF.Collection '## rootCol.AddMonoEltCst(catCstTypeReference, subPRef) '#### ersetzt durch Dim rootCol As MECMOD.Constraints rootCol.AddMonoEltCst(MECMOD.CatConstraintType.catCstTypeReference, subPRef)
soweit passt nun die deklaration und der constrainttype, doch trotzdem bleibt noch ein fehler beim ausführen: Ausnahme System.Runtime.InteropServices.COMException wurde im ausgeführten Programm ausgelöst: Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben.鏒䃲耀V [Diese Nachricht wurde von makebeth am 23. Mrz. 2009 editiert.] [Diese Nachricht wurde von makebeth am 23. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 24. Mrz. 2009 18:30 <-- editieren / zitieren --> Unities abgeben: Nur für makebeth
|
makebeth Mitglied
Beiträge: 12 Registriert: 21.03.2009 Dell Precision T3400; Vista x64; CATIA V5 R16 32Bit;
|
erstellt am: 24. Mrz. 2009 19:20 <-- editieren / zitieren --> Unities abgeben:
Hier der Aktuelle Code: Code:
Sub Run(rootNode As TreeNode, rootProd as Product) Dim subNode As TreeNode Dim subProd As Product Dim subPRef As INFITF.Reference Dim rootCol As MECMOD.Constraints Dim rootCon As MECMOD.Constraint Dim subType As String For Each subNode In rootNode.Nodes If subNode.ImageIndex = 0 Then subType = "Product" Else If subNode.ImageIndex = 1 Then subType = "Part" Else subType = "Component" End If subProd = rootProd.Products.AddNewComponent(subType, subNode.Text) Dim oInstNameChangeProd As ProductDocument = CATIA.Documents.Item(rootProd.PartNumber + ".CATProduct") Dim oInstNameChangeItem As Product = oInstNameChangeProd.Product.Products.Item(subProd.Name) If oInstNameChangeItem.Name.Length >= 50 Then oInstNameChangeItem.Name = subNode.Name + oInstNameChangeItem.Name.Substring(50) Else oInstNameChangeItem.Name = subNode.Name End If 'Try subPRef = rootProd.CreateReferenceFromName(rootProd.PartNumber + "/" + subProd.Name + "/!" + rootProd.PartNumber + "/" + subProd.Name + "/") rootCol = rootProd.Connections("CATIAConstraints") rootCon = rootCol.AddMonoEltCst(CatConstraintType.catCstTypeReference, subPRef) 'Catch 'nix 'End Try If Not subNode.GetNodeCount(False) = 0 Then Run(subNode, subProd) End If Next End Sub
Der Fehler tritt beim erzeugen des Constraints auf. Für die direkt im Hauptprodukt liegenden Elemente wird ein Fix erzeugt. Alles darunter schlägt fehl. Dies ist der Stand unter R16 SP05 HF70 32Bit auf Vista x64. Ich habe die Gelegenheit genutzt es auch unter R19 64Bit auf Vista x64 zu testen. Dort werden garkeine Constraints erzeugt.
Code: rootCon = rootCol.AddMonoEltCst(CatConstraintType.catCstTypeReference, subPRef) '#fehler
Ausnahme System.Runtime.InteropServices.COMException wurde im ausgeführten Programm ausgelöst: 10 20 40 Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben.鏒砸⌴䱘耀?Oꆌ掷က掶ᖭRun() - E:\SharpDevelopPortable\Projects\CATIA_Leerstruktur\MainForm.vb:311,5 Run() - E:\SharpDevelopPortable\Projects\CATIA_Leerstruktur\MainForm.vb:317,5 go_Click() - E:\SharpDevelopPortable\Projects\CATIA_Leerstruktur\MainForm.vb:205,3 RaiseEvent() OnClick() HandleClick() HandleMouseUp() FireEventInteractive() FireEvent() OnMouseUp() OnMouseUp() WmMouseUp() WndProc() WndProc() WndProc() WndProc() OnMessage() WndProc() DebuggableCallback() System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop() RunMessageLoopInner() RunMessageLoop() Run() OnRun() DoApplicationModel() Run() Main() - 17d14f5c-a337-4978-8281-53493378c1071.vb:81,13 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 24. Mrz. 2009 19:38 <-- editieren / zitieren --> Unities abgeben: Nur für makebeth
Hallo, bei mir funktioniert auf R16 was ähnliches, wird aber nur für die erste Productebene notwendig. Ich vermute den Fehler bei tiefer liegenden Products/Parts beim CreateReferenceByName. Versuche diese Constraints per Hand zu erzeugen, während du die Schritte aufzeichnest. Bei tieferen Elementen kann sich diese Name unterscheiden. Das ist zwar VBA/VBScript, kann aber sehr nützlich sein. Auf 64 bit habe ich kein Zugriff, würde aber dort Schritt für Schritt ausführen und nachsehen, welcher Schritt nicht geht. Die Fehlermeldung ist nur eine allgemeine Fehlermeldung. Hast du nicht zufällig ein Part aktiviert (blau hinterlegt)? Beim Löschen aus einer Selection war es bei mir das Problem... Gruß, Zoltan [Diese Nachricht wurde von zoltan.bekesi am 24. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
makebeth Mitglied
Beiträge: 12 Registriert: 21.03.2009 Dell Precision T3400; Vista x64; CATIA V5 R16 32Bit;
|
erstellt am: 24. Mrz. 2009 20:12 <-- editieren / zitieren --> Unities abgeben:
Hallo, Durch die Aufzeichnung bin ich bis hier hin gekommen. Der Pfad ist bei der Aufzeichnung immer gleich. Ich erzeuge eine neue Datei und lege hiermit die Struktur neu an. Somit kann eine Selektion nicht das Problem sein. Vielleicht vertraue ich der zickigen Dame lieber nicht und spiele etwas mit den Pfaden. EDIT:
Ein Constraint kann nur innherhalb eines Produktes geeriert werden. Öffne ich das unterprodukt in einem extra Fenster, so kann ich alle darin liegenden Elemente fixen. Wie kann ich die Constarints setzen ohne jedes mal das Produkt in einem neuen Fenster zu öffnen? Das jeweilige Produkt zu aktivieren (Blaue Selektion) würde sicher auch helfen. Habe dazu aber noch keine Funktion in der Referenz gefunden. [Diese Nachricht wurde von makebeth am 24. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
makebeth Mitglied
Beiträge: 12 Registriert: 21.03.2009 Dell Precision T3400; Vista x64; CATIA V5 R16 32Bit;
|
erstellt am: 25. Mrz. 2009 18:24 <-- editieren / zitieren --> Unities abgeben:
Nach einer weile bin ich nun sebst drauf gekommen. Mit CATIA.Documents.Read läufts ohne Probleme. Code:
Dim path As String path = rootProd.PartNumber + "/" + subProd.Name + "/!" + rootProd.PartNumber + "/" + subProd.Name + "/" subPRef = rootProd.CreateReferenceFromName(path) rootCol = rootProd.Connections("CATIAConstraints") Try rootCon = rootCol.AddMonoEltCst(CatConstraintType.catCstTypeReference, subPRef) Catch Dim docNewWin As ProductDocument = CATIA.Documents.Read(rootProd.PartNumber + ".CATProduct") rootProd = docNewWin.Product path = rootProd.PartNumber + "/" + subProd.Name + "/!" + rootProd.PartNumber + "/" + subProd.Name + "/" subPRef = rootProd.CreateReferenceFromName(path) rootCol = rootProd.Connections("CATIAConstraints") rootCon = rootCol.AddMonoEltCst(CatConstraintType.catCstTypeReference, subPRef) End Try
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |