Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  VB.net: Feature eines Musters in Array speichern

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


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

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

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


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

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 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 JensemannDU 10 Unities + Antwort hilfreich

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


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

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


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

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 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 JensemannDU 10 Unities + Antwort hilfreich

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


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

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


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

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 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 JensemannDU 10 Unities + Antwort hilfreich

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


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

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

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


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

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 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 JensemannDU 10 Unities + Antwort hilfreich

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

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)2024 CAD.de | Impressum | Datenschutz