| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | SOLIDWORKS Simulation – Online-Live Schulung, ein Seminar am 19.05.2025
|
Autor
|
Thema: VB.net: Feature eines Musters in Array speichern (2272 mal gelesen)
|
JensemannDU Mitglied Student

 Beiträge: 69 Registriert: 13.10.2009 Windows 7 Prof. 32 Bit SolidWorks 2009 SP4.0 Visual Studio 2008 Dell XPS M1530 Core2Duo 2,4 GHz 4 GB RAM GeForce 8600M GT
|
erstellt am: 06. Nov. 2009 16:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo, allgemein möchte ich eine Bauteildatei analysieren. Dazu habe ich zuerst alle Features des Bauteils ermittelt und differenziere dann über GetTypeName2, um an weitere Informationen über die entsprechenden Feature zu kommen. Das funktioniert auch tadellos. Um aber alle Feature (z.B. Bohrungen) bei einer Zählung richtig zu erfassen, müssen auch die gemusterten Instanzen berücksichtigt werden. Dazu habe ich bereits beim Beispiel von gemusterten Borhungen das entsprechende Kreismuster-Feature in ein ICircularPatternFeatureData Objekt umgewandelt, womit ich die Anzahl der Instanzen auslesen kann. Jetzt möchte ich aber auch eine Auflistung (Array) der gemusterten Feature um die ebenfalls zu differenzieren. Dazu hatte ich mir aus diesem Snippet folgenden Code zusammengebastelt: Code: Dim CircPatternDummyObjekt As Object Dim CircPatternDummyArray() As Object Dim CircPatternComponents As List(Of SldWorks.ICircularPatternFeatureData)CircPatternDummyObjekt = swCircPattern.IGetPatternFeatureArray() CircPatternDummyArray = CType(CircPatternDummyObjekt, [Object]()) CircPatternComponents = New List(Of SldWorks.ICircularPatternFeatureData) For iComponente As Integer = 0 To _ CircPatternDummyArray.GetUpperBound(0) CircPatternComponents.Add( _ CType(CircPatternDummyArray(iComponente), _ SldWorks.ICircularPatternFeatureData)) Next
Aber leider bekomme ich im Bezug auf die Typumwandlung diese Fehlermeldung: Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Klassentyp "System.Object[]" umgewandelt werden. Instanzen von Typen, die COM-Komponenten repräsentieren, können nicht in andere Typen umgewandelt werden, die keine COM-Komponenten repräsentieren. Eine Umwandlung in Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt. Hat jemand eine Idee, wie ich das Problem lösen könnte? ------------------ Windows 7 Prof. 32 Bit SolidWorks 2009 SP4.0 Visual Studio 2008 Dell XPS M1530 Core2Duo 2,4 GHz 4 GB RAM GeForce 8600M GT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 10. Nov. 2009 10:18 <-- editieren / zitieren --> Unities abgeben:          Nur für JensemannDU
Hallo JensemannDU, Idee 1: bist du dir sicher das du durch swCircPattern.IGetPatternFeatureArray eine Rückgabe erhältst? Ich denke der Fehler entsteht, da CircPatternDummyObjekt Nothing ist. Baue mal eine Abfrage in der Art:
Code: If CircPatternDummyObjekt is Nothing Then Debug.Assert(False) End If
in deinen Code ein um dies zu prüfen.Idee 2: Da du mit den Schnittstellen arbeitest, könnte es sein, das du den Umweg über ein SaveArray nicht gehen musst, sondern direkt die richtigen Typen zurück bekommst. Versuche es mal mit:
Code: Dim CircPatternDummyObjekt As Object Dim CircPatternDummyArray() As SldWorks.ICircularPatternFeatureData CircPatternDummyObjekt = swCircPattern.IGetPatternFeatureArray() CircPatternDummyArray = CType(CircPatternDummyObjekt, [SldWorks.ICircularPatternFeatureData]())
oder
Code: Dim CircPatternDummyObjekt As Object Dim CircPatternComponents As List(Of SldWorks.ICircularPatternFeatureData) CircPatternDummyObjekt = swCircPattern.IGetPatternFeatureArray() CircPatternComponents = CType(CircPatternDummyObjekt, List(Of SldWorks.ICircularPatternFeatureData))
------------------ Mfg Daniel www.MySldWorks.de - SolidWorks API Snippets [Diese Nachricht wurde von tbd am 10. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JensemannDU Mitglied Student

 Beiträge: 69 Registriert: 13.10.2009 Windows 7 Prof. 32 Bit SolidWorks 2009 SP4.0 Visual Studio 2008 Dell XPS M1530 Core2Duo 2,4 GHz 4 GB RAM GeForce 8600M GT
|
erstellt am: 10. Nov. 2009 11:33 <-- editieren / zitieren --> Unities abgeben:         
Hallo Daniel, wiederum vielen Dank für deinen Beitrag! Zu Idee 1: von swCircPattern.IGetPatternFeatureArray() erhalte ich ein COM-Objekt des Typs System.__ComObject zurück, es ist also nicht nothing. Zu Idee 2: Ich habe beide Varianten ausprobiert und jeweils bei der Umwandlung mit CType bekam ich die gleiche Fehlermeldung wie oben beschrieben. Bei der zweiten Variante hat er allerdings vorher noch gemeckert, ich solle CircPatternDummyArray = CType(CircPatternDummyObjekt, [SldWorks.ICircularPatternFeatureData]()) in CircPatternDummyArray = CType(CircPatternDummyObjekt, [SldWorks].ICircularPatternFeatureData()) ändern, da dem Bezeichner das schließende ] fehlt. Heißt das nun, dass ich eigentlich schon den richtigen Typ habe? Du hast nicht zufällig noch eine dritte Idee? :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 10. Nov. 2009 17:36 <-- editieren / zitieren --> Unities abgeben:          Nur für JensemannDU
Hallo, ich denke, dass wir mit der zweiten Idee der Lösung schon sehr nahe kommen. Ich habe aber kein Beispiel zur Hand und möchte auch nicht deinen kompletten Code nachprogrammieren, glaube da hätte mein Brot und Wasser Geber etwas dagegen ;-). Versuche es deshalb mal ohne die Umwandlung, also:
Code: Dim CircPatternDummyObjekt As Object Dim CircPatternComponents As List(Of SldWorks.ICircularPatternFeatureData) CircPatternDummyObjekt = swCircPattern.IGetPatternFeatureArray() CircPatternComponents = New List(Of SldWorks.ICircularPatternFeatureData)For iComponente As Integer = 0 To _ CircPatternDummyObjekt.GetUpperBound(0) CircPatternComponents.Add( _ CType(CircPatternDummyArray(iComponente), _ SldWorks.ICircularPatternFeatureData)) Next
oder verwendet statt der Schnittstelle die Klasse also:
Code: Dim CircPatternDummyObjekt As Object Dim CircPatternDummyArray() As Object Dim CircPatternComponents As List(Of SldWorks.CircularPatternFeatureData) CircPatternDummyObjekt = swCircPattern.PatternFeatureArray() CircPatternDummyArray = CType(CircPatternDummyObjekt, [Object]()) CircPatternComponents = New List(Of SldWorks.CircularPatternFeatureData)For iComponente As Integer = 0 To _ CircPatternDummyArray.GetUpperBound(0) CircPatternComponents.Add( _ CType(CircPatternDummyArray(iComponente), _ SldWorks.CircularPatternFeatureData)) Next
------------------ Mfg Daniel www.MySldWorks.de - SolidWorks API Snippets [Diese Nachricht wurde von tbd am 10. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JensemannDU Mitglied Student

 Beiträge: 69 Registriert: 13.10.2009 Windows 7 Prof. 32 Bit SolidWorks 2009 SP4.0 Visual Studio 2008 Dell XPS M1530 Core2Duo 2,4 GHz 4 GB RAM GeForce 8600M GT
|
erstellt am: 11. Nov. 2009 12:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo Daniel, dein Brötchengeber hätte damit ja auch recht. :-) Leider hat es aber bisher noch nicht funktioniert. Bei dem Code ohne die Umwandlung Code: Dim CircPatternDummyObjekt As Object Dim CircPatternComponents As List(Of SldWorks.ICircularPatternFeatureData) CircPatternDummyObjekt = swCircPattern.IGetPatternFeatureArray() CircPatternComponents = New List(Of SldWorks.ICircularPatternFeatureData)For iComponente As Integer = 0 To _ CircPatternDummyObjekt.GetUpperBound(0) CircPatternComponents.Add( _ CType(CircPatternDummyArray(iComponente), _ SldWorks.ICircularPatternFeatureData)) Next
meckert er, dass CircPatternDummyArray verwendet wird, bevor ihm ein Wert zugewiesen wurde. Allerdings wüsste ich jetzt auch nicht, welchen Wert es vorher haben sollte. Bei Verwendung der Klasse, also aus dem zweiten Codebeispiel, erstellt er das CircPatternDummyArray mit der Länge 1, was in meinem Beispiel auch richtig ist. Bie der Zeile Code: CircPatternComponents.Add( _ CType(CircPatternDummyArray(iComponente), _ SldWorks.CircularPatternFeatureData))
bekomme ich aber diese Fehlermeldung: Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "SldWorks.CircularPatternFeatureData" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{DBBF39DE-7AB5-11D4-AEB6-00C04FA0AC51}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)). Wäre es hilfreich, wenn ich hier eine entsprechende Visual Basic Projektdatei hochladen würde? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 11. Nov. 2009 13:55 <-- editieren / zitieren --> Unities abgeben:          Nur für JensemannDU
Das kommt davon wenn ich in einem Forum programmiere ohne die Unterstützung einer richtigen Entwicklungsumgebung :-) Fehlerlösung zu 2: Ich denke du bekommts hier nicht ein SldWorks.CircularPatternFeatureData sondern ja die Features, welche gemustert werden. Diese sind, meiner Meinung nach vom Typ SldWorks.Feature
Code: CircPatternComponents = New List(Of SldWorks.Feature) CircPatternComponents.Add( _ CType(CircPatternDummyArray(iComponente), _ SldWorks.Feature))
Fehlerlösung zu 1: Neben den Falschen Typ, siehe Lösung zu Fehler 2 muss hier statt CircPatternDummyArray natürlich die Variable CircPatternDummyObjekt verwendet werden. Die Variable CircPatternDummyArray wird ja nicht initialisiert.
Code: CircPatternComponents.Add( _ CType(CircPatternDummyObjekt(iComponente), _ SldWorks.Feature))
Wenn ich mich jetzt noch mal vertippt oder vertan habe, programmiere ich es doch nach! ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks API Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JensemannDU Mitglied Student

 Beiträge: 69 Registriert: 13.10.2009 Windows 7 Prof. 32 Bit SolidWorks 2009 SP4.0 Visual Studio 2008 Dell XPS M1530 Core2Duo 2,4 GHz 4 GB RAM GeForce 8600M GT
|
erstellt am: 11. Nov. 2009 14:33 <-- editieren / zitieren --> Unities abgeben:         
Heho, ich könnte dich mit Unities überschütten! :-) Danke, nun tut es das, was es soll. Jetzt mache ich mich daran, das auch für die anderen Mustertypen umzuschreiben. Ohne deine Hilfe wäre ich echt verzweifelt! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 11. Nov. 2009 14:44 <-- editieren / zitieren --> Unities abgeben:          Nur für JensemannDU
Merci, aber ich habe auch drei Anläufe gebraucht. Beim nächstem Mal ist es wahrscheinlich doch sinnvoller ein kleines Beispiel nachzuprogrammieren, viel mehr Zeit hätte das auch nicht in Anspruch genommen. Freut mich aber das es jetzt klappt ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks API Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |