| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Exception ThickenFeature (1471 mal gelesen)
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 21. Okt. 2011 15:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Wenn ich den unten stehenden Code im VBA-Editor laufen lasse, klappt es. Setz ich den identischen Code (abgesehen von ThisApplication) in eine .Net-AddIn dll, erstellt er die erste Verdickung und bei der zweiten (und jeder weiteren) bekomme ich eine Com-Exception bei "ThickenFeatures.Add". Ich bin ratlos. Hat jemand eine Idee zur Ursache? Code: Private Sub test()Dim myPartDoc As PartDocument Set myPartDoc = ThisApplication.ActiveDocument Dim oFace As Face Dim oObjectCollection As ObjectCollection Set oObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection() Dim oThickenFeature As ThickenFeature Call oObjectCollection.Add(myPartDoc.ComponentDefinition.SurfaceBodies.Item(1).Faces.Item(3)) Call oObjectCollection.Add(myPartDoc.ComponentDefinition.SurfaceBodies.Item(1).Faces.Item(5)) Dim oFaces As ObjectCollection Set oFaces = ThisApplication.TransientObjects.CreateObjectCollection For Each oObject In oObjectCollection If TypeOf oObject Is Face Then oFaces.Add (oObject) Call myPartDoc.ComponentDefinition.Features.ThickenFeatures.Add(oFaces, 1 + 0.2, PartFeatureExtentDirectionEnum.kPositiveExtentDirection, PartFeatureOperationEnum.kNewBodyOperation, False, False) oFaces.Clear End If Next End Sub
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 21. Okt. 2011 15:48 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 21. Okt. 2011 21:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Halte ich kurz vor Erstellen der zweiten Verdickung an, sieht man zumindest das Fläche 3 die gleiche ist (Verdickung entsteht an der gleichen Fläche). Der Fehler ist ein "unbekannter Fehler HRESULT: 0x80004005 E_FAIL". Unter die komplette Kopie der Meldung. Es sieht so aus, daß bei "oFaces.Add (oObject)" das Problem entsteht. In der Überwachung steht der Fehler bei so ziemlich jedem Unterpunkt. Dreh ich die Reihenfolge der Flächen um, funktioniert die Vedickung an Fläche 5 und scheitert plötzlich an Fläche 3. In .Net rufe ich so auf: Code:
Dim oThickenFeature As ThickenFeature oThickenFeature = myPartDoc.ComponentDefinition.Features.ThickenFeatures.Add(oFaces, 1 + 0.2, PartFeatureExtentDirectionEnum.kPositiveExtentDirection, PartFeatureOperationEnum.kNewBodyOperation, False, False)
Zitat:
"System.Runtime.InteropServices.COMException" wurde aufgefangen. ErrorCode=-2147467259 Message="Ein Aufrufziel hat einen Ausnahmefehler verursacht." Source="mscorlib" StackTrace: bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) bei Inventor.ThickenFeatures.Add(Object Faces, Object Distance, PartFeatureExtentDirectionEnum ExtentDirection, PartFeatureOperationEnum Operation, Boolean AutomaticFaceChain, Boolean CreateVerticalSurfaces, Boolean AutomaticBlending) bei Toolbox.CalculateDimensions.GetMatrixRangeBox(PartDocument oPartDoc, Matrix oMatrix) InnerException:
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 22. Okt. 2011 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 22. Okt. 2011 13:58 <-- editieren / zitieren --> Unities abgeben:
Hi Ja, ein oFaces=nothing sollte es doch zerstören oder? Hatte ich bereits versucht, leider mit dem gleichen Ergebnis. Hab meine Frage auch mal parallel im Autodesk Forum gestellt, dort aber noch keine Antwort erhalten. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 22. Okt. 2011 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 22. Okt. 2011 16:33 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 25. Okt. 2011 20:25 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 30. Jan. 2012 21:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Autodesk hat das Verhalten als Fehler eingestuft und arbeitet an einem Fix. Die ObjectCollection aus meinem ersten Beitrag wird ungültig, wenn durch das erste Feature das Modell verändert wird. Man kann den Fehler umgehen, indem mam für jede Fläche die verdickt werden soll einen Referenzkey erzeugt und der Fläche zuweist. Über den Refencekey kann man die Fläche wieder greifen. Es ist nicht ganz sicher, daß das zuverlässig funktioniert, aber ich konnte bisher keinen Fehler provozieren. Zur Erklärung noch der relevante Codeteil: Code: Private Sub ThickenFeature Dim myPartDoc As PartDocument myPartDoc = myInventor.ActiveDocument Dim oThickenFeature As Inventor.ThickenFeature = Nothing Dim keys As List(Of Byte()) = New List(Of Byte()) Dim contexts As List(Of Integer) = New List(Of Integer) Dim face As Face = myPartDoc.ComponentDefinition.SurfaceBodies.Item(1).Faces.Item(3) Dim key As Byte() = New Byte() {} Dim context As Integer = myPartDoc.ReferenceKeyManager.CreateKeyContext() Call face.GetReferenceKey(key, context) keys.Add(key) contexts.Add(context)
face = myPartDoc.ComponentDefinition.SurfaceBodies.Item(1).Faces.Item(5) key = New Byte() {} context = myPartDoc.ReferenceKeyManager.CreateKeyContext() Call face.GetReferenceKey(key, context) keys.Add(key) contexts.Add(context) Dim oFaces As ObjectCollection oFaces = myInventor.TransientObjects.CreateObjectCollection For i As Integer = 0 To 1 key = keys(i) context = contexts(i) face = myPartDoc.ReferenceKeyManager.BindKeyToObject(key, context) oFaces.Add(face) Try oThickenFeature = myPartDoc.ComponentDefinition.Features.ThickenFeatures.Add(oFaces, 1.2, PartFeatureExtentDirectionEnum.kPositiveExtentDirection, PartFeatureOperationEnum.kNewBodyOperation, False, False, False) Catch ex As Exception MessageBox.Show(ex.ToString()) End Try oFaces.Clear() Next End Sub
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 31. Jan. 2012 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
|