Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SldWorks-API: Konflikt bei SelectByID2

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
  
Was hat Simulation mit erfolgreicher Produktentwicklung zu tun?
Autor Thema:  SldWorks-API: Konflikt bei SelectByID2 (5814 mal gelesen)
dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 08:41    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

Hi,

ich bin im Moment fleissig am programmieren mit VB 2005 und komme auch ganz gut zurecht. Allerdings hab ich jetzt einen Konflikt, sobald ich die Funktion SelectByID2 aus meinem Programm aufrufe.

Code:
Dim swApp As SldWorks.SldWorks
        Dim Part As Object
        Dim boolstatus As Object
        Dim longstatus As Long, longwarnings As Long

...

boolstatus = Part.Extension.SelectByID2("Ebene vorne", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        boolstatus = Part.Extension.SelectByID2("Ebene vorne@2006-11-15 Test_Leitschaufel_links_1-1@Baugruppe_Test", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        feature = Part.AddMate2(0, 0, False, 0, 0, 0, 1, 1, 0, 0.5235987755983, 0.5235987755983, longstatus)


Es erscheint dann folgende Fehlermeldung, sobald mein Programm bei der Zeile ankommt.

Zitat:
COMException wurde nicht behandelt.
Typkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))

An was kann denn das liegen? Hab ich irgendeinen Fehler in der Syntax? Ich kann auch den kompletten Quellcode hochstellen, falls es nicht ausreicht.

Vielen Dank für die Hilfe,

DMJ

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.

erstellt am: 20. Nov. 2006 09:16    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 dmj 10 Unities + Antwort hilfreich

Hi,

also ich glaub Dim boolstatus As Object ist falsch ..

sollte eher Dim boolstatus As Boolean sein ...

(nur geraten)

Gruß
Micha

------------------
Stell dir vor, es geht, und keiner kriegts hin.

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 09:20    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

Hi Micha,

das ist natürlich richtig. Hab ich jetzt nur in aller Schnelle falsch geschrieben.

Aber auch als Boolean gibt es diesen Typkonflikt.

Hat das vielleicht etwas mit dem Modus Baugruppe zu tun?

MfG,

DMJ

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: 20. Nov. 2006 09:46    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 dmj 10 Unities + Antwort hilfreich

Guten Morgen,

in diesem Codeschnipsel ist nicht viel zu erkennen.
Es wäre deshalb net wenn du den gesamten Code und das Model hochladen könntest.
Da werde ich es mit mal anschauen!

------------------
Mfg Daniel

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unseren Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|    kontakt@schuler-da.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 10:03    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


2006-11-15Test_Leitschaufel_links_1.zip

 
Hallo Daniel,

dann will ich mal den kompletten Code der Subroutine hochstellen.

Code:
    Private Sub Ausgabe_SldWorks()

        '**************************
        '*  Ausgabe SolidWorks  *
        '**************************

        TextBox2.Text = TextBox2.Text + vbCrLf + "Funktion 'Ausgabe_SldWorks' aufgerufen"

        'Definition der Variablen
        Dim swApp As SldWorks.SldWorks
        Dim Part As Object
        Dim boolstatus As Boolean
        Dim longstatus As Long, longwarnings As Long
        Const phi As Double = 10 ^ (1 / 20)

        '*********************
        '* SolidWorks öffnen *
        '*********************

        'Eine Instanz von SolidWorks öffnen
        swApp = New SldWorks.SldWorks()
        swApp.Visible = True
        swApp.UserControl = True

        TextBox2.Text = TextBox2.Text + vbCrLf + "Instanz von SolidWorks geöffnet"

        'Dokument öffnen
        Part = swApp.OpenDoc6("\\Kanisserver\Users\sauer\Beschaufelung\CAD\" & modelname & ".SLDPRT", 1, 0, "", longstatus, longwarnings)
        Part = swApp.ActivateDoc2(modelname, False, longstatus)

        TextBox2.Text = TextBox2.Text + vbCrLf + "Teil geöffnet"

        'Ansicht aktivieren
        swApp.ActiveDoc.ActiveView.FrameLeft = 0
        swApp.ActiveDoc.ActiveView.FrameTop = 0
        swApp.ActiveDoc.ActiveView.FrameState = 1
        swApp.ActiveDoc.ActiveView.FrameState = 1

        TextBox2.Text = TextBox2.Text + vbCrLf + "Ansicht aktiviert"

        '********************************
        '* Werte in SolidWorks einlesen *
        '********************************

        TextBox2.Text = TextBox2.Text + vbCrLf + "Werte in SolidWorks einlesen"

        '********************
        '*  Leitschaufel  *
        '********************
        If RadioButton3.Checked Then
            'Profil
            Part.Parameter("D7@Profil").SystemValue = Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D6@Profil").SystemValue = Part.Parameter("D6@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D5@Profil").SystemValue = Part.Parameter("D5@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D4@Profil").SystemValue = Part.Parameter("D4@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D3@Profil").SystemValue = Part.Parameter("D3@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D2@Profil").SystemValue = Part.Parameter("D2@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D1@Profil").SystemValue = Part.Parameter("D1@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D8@Profil").SystemValue = Part.Parameter("D8@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D12@Profil").SystemValue = (100 / phi ^ normstufe) / 1000
            'Gesamtlänge des Profils DLTLE
            Part.Parameter("D1@Profil_Austragen").SystemValue = Feld(1, (Stufenzahl1 * 4) - 1 + gewstufe, 0) / 1000    'Hier muss noch die aktuelle Stufenzahl automatisch abgefragt werden

            'Schnitt Di
            'Länge der Linie
            Part.Parameter("D1@Di").SystemValue = Feld(10, feldstufe, 0) * 2 / 1000
            'Überstand von der Ebene hinten
            Part.Parameter("D3@Di").SystemValue = Feld(10, feldstufe, 0) / 2 / 1000
            'Innerer Durchmesser
            Part.Parameter("D2@Di").SystemValue = Feld(3, feldstufe, 0) / 1000

            'Deckband
            'Innerer Durchmesser
            Part.Parameter("D1@Deckband_roh").SystemValue = Feld(3, feldstufe, 0) / 1000
            'Abstand von Ursprung bis Abströmkante
            Part.Parameter("D2@Deckband_roh").SystemValue = (Feld(6, feldstufe + Stufenzahl1 * 2 + 1, 0) - Feld(7, feldstufe + Stufenzahl1 * 2 + 1, 0)) / 1000 + 0.5 / 1000
            'Abstand von Ursprung bis Anströmkante
            Part.Parameter("D3@Deckband_roh").SystemValue = (Feld(6, feldstufe + Stufenzahl1 * 2, 0) - Feld(7, feldstufe + Stufenzahl1 * 2, 0)) / 1000 + Feld(10, feldstufe, 0) / 1000 + 0.5 / 1000
            'Dicke des Deckbandes
            Part.Parameter("D4@Deckband_roh").SystemValue = D4_Deckband_roh

            'Schnitt Da
            Part.Parameter("D1@Da").SystemValue = Feld(10, feldstufe, 0) / 2 / 1000
            'Länge der Linie
            Part.Parameter("D2@Da").SystemValue = Feld(10, feldstufe, 0) * 2 / 1000
            'Innerer Durchmesser + Länge der Schaufel
            Part.Parameter("D3@Da").SystemValue = Feld(3, feldstufe, 0) / 1000 + Feld(6, feldstufe, 0) * 2 / 1000

            'Fuß
            Part.Parameter("D1@Fuß").SystemValue = Feld(3, feldstufe, 0) / 1000 + Feld(6, feldstufe, 0) * 2 / 1000
            Part.Parameter("D2@Fuß").SystemValue = (Feld(1, Stufenzahl1 * 4 - 1 + gewstufe, 0) - 1) / 1000
            Part.Parameter("D3@Fuß").SystemValue = Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D4@Fuß").SystemValue = Feld(10, feldstufe, 0) / 1000 - Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D5@Fuß").SystemValue = 5 / 1000
            Part.Parameter("D6@Fuß").SystemValue = 7 / 1000
            Part.Parameter("D7@Fuß").SystemValue = 5 / 1000

            'Orginal der Schnittebene
            'Verdrehwinkel
            Part.Parameter("D1@Verdrehwinkel").SystemValue = verdrehwinkel
            'Verschieben der Ebene für Punkt für Ebene
            Part.Parameter("D1@Ebene_oben_Versatz").SystemValue = Feld(3, feldstufe, 0) / 1000 / 2
            'Definiton des Schwerpunktes
            Part.Parameter("D1@Ursprung_Versatz").SystemValue = schwery / phi ^ normstufe
            Part.Parameter("D2@Ursprung_Versatz").SystemValue = schwerx / phi ^ normstufe

            'Schnittebene links
            Part.Parameter("D1@Schnittebene_links").SystemValue = winkel_schnittebene * Math.PI / 180
            'Schnittebene rechts
            Part.Parameter("D1@Schnittebene_rechts").SystemValue = 2 * Math.PI - winkel_schnittebene * Math.PI / 180

            TextBox2.Text = TextBox2.Text + vbCrLf + "Werte geändert"

            'Teil neu aufbauen
            boolstatus = Part.EditRebuild3
            TextBox2.Text = TextBox2.Text + vbCrLf + "Teil neu aufgebaut"

            '********************
            '*  Laufschaufel  *
            '********************

        Else
            'Profil
            Part.Parameter("D1@Profil").SystemValue = Part.Parameter("D1@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D2@Profil").SystemValue = Part.Parameter("D2@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D3@Profil").SystemValue = Part.Parameter("D3@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D4@Profil").SystemValue = Part.Parameter("D4@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D5@Profil").SystemValue = Part.Parameter("D5@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D6@Profil").SystemValue = Part.Parameter("D6@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D7@Profil").SystemValue = Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D8@Profil").SystemValue = Part.Parameter("D8@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D9@Profil").SystemValue = Part.Parameter("D9@Kanis_Profil_17_DH").SystemValue
            Part.Parameter("D10@Profil").SystemValue = 16 * Math.PI / 180
            Part.Parameter("D11@Profil").SystemValue = Part.Parameter("D11@Kanis_Profil_17_DH").SystemValue
            Part.Parameter("D12@Profil").SystemValue = (100 / phi ^ normstufe) / 1000
            Part.Parameter("D13@Profil").SystemValue = Part.Parameter("D14@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            Part.Parameter("D14@Profil").SystemValue = Part.Parameter("D13@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe

            'Profil auf Länge DLTLE austragen
            Part.Parameter("D1@Profil_Austragen").SystemValue = Feld(1, (Stufenzahl1 * 4) + gewstufe - 1, 0) / 1000

            'Schnitt Di
            'Länge der Linie
            Part.Parameter("D1@Di").SystemValue = Feld(10, feldstufe, 0) * 2 / 1000
            'Innerer Durchmesser
            Part.Parameter("D2@Di").SystemValue = Feld(3, feldstufe, 0) / 1000

            'Schnitt Da
            'Länge der Linie
            Part.Parameter("D1@Da").SystemValue = Feld(10, feldstufe, 0) * 2 / 1000
            'Innerer Durchmesser + Länge der Schaufel
            Part.Parameter("D2@Da").SystemValue = Feld(3, feldstufe, 0) / 1000 + Feld(6, feldstufe, 0) * 2 / 1000

            'Fuss
            'Winkel 30° oben
            Part.Parameter("D2@Nib_Fuss").SystemValue = 30 * Math.PI / 180
            'B2
            Part.Parameter("D3@Nib_Fuss").SystemValue = Feld(2, fusszeile, 2) / 1000
            'B1
            Part.Parameter("D4@Nib_Fuss").SystemValue = Feld(1, fusszeile, 2) / 1000
            'Fase1
            Part.Parameter("D5@Nib_Fuss").SystemValue = Feld(7, fusszeile, 2) / 1000
            'Winkel 45°
            Part.Parameter("D6@Nib_Fuss").SystemValue = 45 * Math.PI / 180
            'H1
            Part.Parameter("D7@Nib_Fuss").SystemValue = Feld(3, fusszeile, 2) / 1000
            'H2
            Part.Parameter("D8@Nib_Fuss").SystemValue = Feld(4, fusszeile, 2) / 1000
            'Winkel 30° unten
            Part.Parameter("D9@Nib_Fuss").SystemValue = 30 * Math.PI / 180
            'Fusstiefe
            Part.Parameter("D10@Nib_Fuss").SystemValue = Feld(8, fusszeile, 2) / 1000
            'Di
            Part.Parameter("D11@Nib_Fuss").SystemValue = Feld(3, feldstufe, 0) / 1000
            'Breite des Fusses
            Part.Parameter("D12@Nib_Fuss").SystemValue = Feld(10, feldstufe, 0) / 1000
            'Versatz nach x
            Part.Parameter("D13@Nib_Fuss").SystemValue = Part.Parameter("D13@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe + Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            'R1
            Part.Parameter("D16@Nib_Fuss").SystemValue = Feld(5, fusszeile, 2) / 1000
            'R2
            Part.Parameter("D17@Nib_Fuss").SystemValue = Feld(6, fusszeile, 2) / 1000

            'Deckband
            'Breite
            Part.Parameter("D1@Deckband").SystemValue = Feld(10, feldstufe, 0) / 1000
            'Höhe
            Part.Parameter("D2@Deckband").SystemValue = 10 / 1000
            'Versatz nach x (x-Richtung Schwerpunkt + D7)
            Part.Parameter("D3@Deckband").SystemValue = Part.Parameter("D13@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe + Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe
            'Da (Innerer Durchmesser + Länge der Schaufel)
            Part.Parameter("D4@Deckband").SystemValue = Feld(3, feldstufe, 0) / 1000 + Feld(6, feldstufe, 0) * 2 / 1000

            'Orginal der Schnittebene
            'Verdrehwinkel
            Part.Parameter("D2@Verdrehwinkel").SystemValue = verdrehwinkel
            'Länge der Linie
            Part.Parameter("D1@Verdrehwinkel").SystemValue = Feld(10, feldstufe, 0) * 2 / 1000
            'Verschieben der Ebene für Punkt für Ebene
            Part.Parameter("D1@Ebene_oben_Versatz").SystemValue = Feld(3, feldstufe, 0) / 1000 / 2
            'Definiton des Schwerpunktes
            'Part.Parameter("D1@Ursprung_Versatz").SystemValue = 0
            'Part.Parameter("D2@Ursprung_Versatz").SystemValue = 0

            'Schnittebene links
            Part.Parameter("D1@Schnittebene_links").SystemValue = winkel_schnittebene * Math.PI / 180
            'Schnittebene rechts
            Part.Parameter("D1@Schnittebene_rechts").SystemValue = winkel_schnittebene * Math.PI / 180

            'Teil neu aufbauen
            boolstatus = Part.EditRebuild3
            TextBox2.Text = TextBox2.Text + vbCrLf + "Teil neu aufgebaut"

        End If

        'Teil speichern
        Part.SaveAs2("\\Kanisserver\Users\sauer\Beschaufelung\CAD\Test\" & modelname & "_" & gewstufe & ".SLDPRT", 0, False, False)

        'Teil schließen
        'Part = Nothing
        'swApp.CloseDoc(modelname)

        '*****************
        '*  Baugruppe  *
        '*****************

        Dim SelMgr As Object
        Dim feature As Object
        Dim Assembly As Object

        Assembly = swApp.NewDocument("Z:\CAD\Templates\Kanis Templates\Baugruppe.asmdot", 0, 0.0#, 0.0#)

        swApp.ActiveDoc.ActiveView.FrameLeft = 0
        swApp.ActiveDoc.ActiveView.FrameTop = 0
        swApp.ActiveDoc.ActiveView.FrameState = 1
        swApp.ActiveDoc.ActiveView.FrameState = 1

        SelMgr = Assembly.SelectionManager

        'Teil zur Baugruppe hinzufügen
        Assembly.AddComponent("\\Kanisserver\Users\sauer\Beschaufelung\CAD\Test\" & modelname & "_" & gewstufe & ".SLDPRT", 0, 0, 0)
        boolstatus = Assembly.EditRebuild3

        assembly.SaveAs2("\\Kanisserver\Users\sauer\Beschaufelung\CAD\Test\Baugruppe_Test.SLDASM", 0, False, False)

        'Teil verknüpfen
        boolstatus = Assembly.Extension.SelectByID2("2006-11-15 Test_Leitschaufel_links_1-1@Baugruppe_Test", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
        Assembly.UnfixComponent()
        Assembly.ClearSelection2(True)

        boolstatus = Assembly.Extension.SelectByID2("Ebene vorne", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        boolstatus = Assembly.Extension.SelectByID2("Ebene vorne@2006-11-15 Test_Leitschaufel_links_1-1@Baugruppe_Test", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        feature = Part.AddMate2(0, 0, False, 0, 0, 0, 1, 1, 0, 0.5235987755983, 0.5235987755983, longstatus)
        Part.ClearSelection2(True)

        boolstatus = Part.Extension.SelectByID2("Ebene oben", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        boolstatus = Part.Extension.SelectByID2("Ebene oben@2006-11-15 Test_Leitschaufel_links_1-1@Baugruppe_Test", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        feature = Part.AddMate2(0, 0, False, 0, 0, 0, 1, 1, 0, 0.5235987755983, 0.5235987755983, longstatus)
        Part.ClearSelection2(True)

        boolstatus = Part.Extension.SelectByID2("Ebene rechts", "PLANE", 0, 0, 0, True, 1, Nothing, 0)
        boolstatus = Part.Extension.SelectByID2("", "FACE", 0.00007943435542757, 0.2902449154045, 0.002659057145934, True, 1, Nothing, 0)
        feature = Part.AddMate2(5, 0, False, 0.02, 0.02, 0.02, 1, 1, 0, 0.5235987755983, 0.5235987755983, longstatus)
        Part.ClearSelection2(True)
        boolstatus = Part.EditRebuild3

        boolstatus = Part.Extension.SelectByID2("2006-11-15 Test_Leitschaufel_links_1-1@Baugruppe_" & modelname & "_" & gewstufe, "COMPONENT", 0.0002388227640608, 0.02492167354751, 0.006982361557448, True, 0, Nothing, 0)
        boolstatus = Part.Extension.SelectByID2("Drehachse_x@2006-11-15 Test_Leitschaufel_links_1-1@Baugruppe_" & modelname & "_" & gewstufe, "AXIS", 0, 0, 0, True, 2, Nothing, 0)
        feature = Part.FeatureManager.FeatureCircularPattern2(Schaufelzahl, 0.05235987755983, False, "NULL", False)
        Part.ClearSelection2(True)

        boolstatus = Part.EditRebuild3

        TextBox2.Text = TextBox2.Text + vbCrLf + "Funktion 'Ausgabe_SldWorks' abgeschlossen"
    End Sub


Ist jetzt sehr umfangreich. Eine kurze Erklärung dazu.

Ich habe ein Urmodel einer Turbinenschaufel, dass ich manipuliere. Dann speichere ich dieses Model und will es in eine Baugruppe laden. Dort soll das Model dann entsprechend am Koordinatensystem ausgerichtet werden und mit einem kreisförmigen Muster ein Schaufelkranz erzeugt werden.

Das Problem liegt im unteren Teil. Ich kann das Urmodel laden, verändern, speichern, eine Baugruppe laden, Teil einfügen, speichern und dann hört es auf.

Sobald die Funktion SelectByID2 ins Spiel kommt, tritt der Fehler auf. Es könnte an meiner Syntax liegen, den Dateinamen oder Objektbezeichungen etc.

Ich hab jetzt mal das Model der Schaufel mit hochgeladen, damit du dir das mal anschauen kannst.

Vielen Dank für deine Hilfe

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: 20. Nov. 2006 10:05    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 dmj 10 Unities + Antwort hilfreich

Dann gebe mir bei der Menge ein bisschen Zeit!
Werde mir das so schnell wie möglich anschauen!

Kann sich ja nur um Jahre handeln ... :-)

------------------
Mfg Daniel

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unseren Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|    kontakt@schuler-da.de 

[Diese Nachricht wurde von tbd am 20. Nov. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 10:09    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

Kein Problem!

Vielen Dank für die Mühe.

Noch kurz zur weiteren Information: Ich habe die letzten Zeilen als Makro in SldWorks erzeugt und dann kopiert. Bei der ganzen Ausprobiererei kann schon der ein oder andere Fehler passiert sein. Sollte aber nicht das entscheidende für den Fehler sein.

MfG,

DMJ

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.

erstellt am: 20. Nov. 2006 10:14    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 dmj 10 Unities + Antwort hilfreich

Hi,

blöde Idee aber Versuche doch mal über die ModelDocExtension den SelectbyID2 auszuführen ...

Dim mDoc As ModelDoc2
Dim pExt As ModelDocExtension
Dim cOut As Callout
Set mDoc = part
    Set pExt = mDoc.Extension
    rb = pExt.SelectByID2("PLANE2", "PLANE", 0, 0, 0, True, 1, cOut, 0)

vielleicht klappt es damit besser jedenfalls haste dann schoneinmal die Syntax Unterstützung ;o)

Gruß
Micha

------------------
Stell dir vor, es geht, und keiner kriegts hin.

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 10:34    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

Super,

das scheint schon mal zu funktionieren. Vielen Dank für deinen tollen Tipp!

Jetzt stimmt der Typ für AddMate2 auch noch nicht.

Wobei ich mich gerade wegen AddMate2 frage, ob das überhaupt noch aktuell ist, da in der API-Hilfe nur AddMate und AddMate3 drin stehen.

Mfg,

DMJ

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sbtSDA
Mitglied
Softwareentwickler


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

Beiträge: 30
Registriert: 12.04.2006

Dell PRECISION M70
2,0 GHz; 2 GB RAM
NVIDIA Quadro FX Go 1400
MS Win XP Prof SP2
SolidWorks 2005 SP5.0
SolidWorks 2006 SP5.0
SolidWorks 2007 SP1.0
MS Office Prof 2003
Visual Basic 6
Visual Studio 2005 Express

erstellt am: 20. Nov. 2006 11:02    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 dmj 10 Unities + Antwort hilfreich


Modul.gif

 
Hallo DMJ,

habe mir gerade mal Deinen Code angesehen. Ist schwierig da den eigentlichen Fehler zu finden. Das hängt damit zusammen, daß Du unbedingt erst einmal ein paar Regeln beachten solltest.

1. "Option Explicit On" und "Option Strict On" im Modul/Klasse festlegen bwz. für das ganze Projekt
2. Saubere Deklarationen. Wenn Du das "Option Strict On" bei Dir einfügst wirst Du schon eine Anhnung davon bekommen, was ich meine! Da werden Dir alle möglichen Fehler angezeigt. Durch deren Bereinigung wird sichergestellt, das der VB-Code erst mal sauber ist. Das heißt überall richtige Typumwandlungen. Das schafft wirkliche Code-Sicherheit und so entstehen keine Fehler an ungewollten Ecken im Code.
3. Saubere Deklaration heißt hier nie irgendwelche SolidWorks Objekte  "as Object" deklaieren - ganz schlecht!!! Also z.B. bei Dir "Dim Part as SldWorks.ModelDoc2" deklairen. Wenn Du das immer so machst bekommst Du auch ein Klappmenue im VB (wie bei den VB-Objekten auch) wo Du gleiche die Methoden und Eigenschaften sehen kannst, die Dir das Objekt zur Verfügung stellt. Wenn die Methode oder Eigenschaft nicht dabei ist, die Du suchst, dann hast Du einfach das Falsche SW-Objekt. Das zu wisse ist ja auch schon was, dann mußt Du in der API-Hilfe zu SW nochmal nachschauen und das richtige Objekt holen.
4. In VB2005 wurde Long zu Integer, d.h. wo Du früher z.B. "Dim RetVal as Long" geschrieben hast, mußt Du jetzt "Dim RetVal as Integer" schreiben. Da wo SolidWorks Werte SafeArrays in einer Variant zurückgibt mußt nicht wie früher "Dim SafeArray as Variant" schreiben sondern "Dim SafeArray as Object", da der universelle Typ Variant durch Object ersetzt wurde usw. Ist erst mal nicht so einfach die ganze neue Syntax so umzusetzten, doch hilft Dir das hinterher bei der Fehlersuche immens.

Dein Code enthält eine unmenge an untiefen, die erst mal bereinigt werden sollten. Ggf. wird Dein Problem dadruch verursacht. An den SW-Befehlen dürfte es nicht liegen.

Wenn Du das alles etwas umgesetzt hast, ist Dein Code viel besser und Du schließt aus, das Du schon Fehler erzeugst, die nix mit SW zu tun haben.

Solltest Du bei der Umsetzung der obigen Sachen Probleme/Fragen haben, dann melde Dich einfach mal, dann helfe ich Dir.

------------------
Mfg Thomas

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unserem Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|      kontakt@schuler-da.de 
----------------------------------------------
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
(John Osborne 1929 - 1994)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 11:25    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 Thomas,

das ist allerdings richtig. Ich bin jetzt einfach mal davon ausgegangen, dass SolidWorks seine Makros in der richtigen Syntax schreibt.   War wohl ein Fehler...

Zur Umsetzung gleich zwei Fragen.

Code:
'Ansicht aktivieren
        swApp.ActiveDoc.ActiveView.FrameLeft = 0
        swApp.ActiveDoc.ActiveView.FrameTop = 0
        swApp.ActiveDoc.ActiveView.FrameState = 1
        swApp.ActiveDoc.ActiveView.FrameState = 1

Wird von Option Strict On bemängelt. Wie muss ich das jetzt deklarieren, damit das nicht mehr vorkommt?

Vielen Dank,

DMJ

[Diese Nachricht wurde von dmj am 20. Nov. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sbtSDA
Mitglied
Softwareentwickler


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

Beiträge: 30
Registriert: 12.04.2006

Dell PRECISION M70
2,0 GHz; 2 GB RAM
NVIDIA Quadro FX Go 1400
MS Win XP Prof SP2
SolidWorks 2005 SP5.0
SolidWorks 2006 SP5.0
SolidWorks 2007 SP1.0
MS Office Prof 2003
Visual Basic 6
Visual Studio 2005 Express

erstellt am: 20. Nov. 2006 11:53    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 dmj 10 Unities + Antwort hilfreich


ActiveDoc.gif


ActiveView.gif


Code.gif

 
Hallo DMJ,

die erste Frage ist eigentlich, was willst Du Da eigentlich machen. Nachdem Du das Dokument (Part) geldaden hast, dann ist das doch schon aktiv. Für was sind die Zeilen eigentlich gut?

1. Erst mal in der API-Hilfe nachschauen, unter welchen SW-Objekten man die Eigenschaften findet oder welches Objekt der Befehl zurückliefert.
2. z.B. ergibt dei Suche "Dim oSwActiveView As SldWorks.ModelView" wäre hier die richtige deklaration.
3. sieh Dir mal den Codeschnipsel an. Da siehst Du das es eigentlich zwei völlig getrennt Geschichten sind!

Das nächste ist, das mit dem Makro aufzeichen solltest Du nur dafür benutzen die Suche nach dem ein oder anderen SW-Befehl abzuküren, ansonsten ist der Code den SW erzeugt einfach schlecht und viele unnütze sachen dabei die man oft gar nicht braucht. Wo die herkommen - gute frage. Also nicht einfach Code aus dem Makro kopieren. Immer die Befehle nachschlage in der API-Hilfe und lesen was die Befehle machen. Das was man nicht braucht einfach nicht übernehmen. Anfangs kann man sich auch so behelfen - wenn man noch etwas unsicher ist -, einfach mal die Zeilen zu kommentar machen und dann wieder probieren. Klappt es immer noch, dann hat man die Zeile wohln nicht gebraucht.

------------------
Mfg Thomas

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unserem Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|       kontakt@schuler-da.de  
----------------------------------------------
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
(John Osborne 1929 - 1994)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Nov. 2006 11:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Part = swApp.ActivateDoc2(modelname, False, longstatus)

        TextBox2.Text = TextBox2.Text + vbCrLf + "Teil geöffnet"

        'Ansicht aktivieren
        swApp.ActiveDoc.ActiveView.FrameLeft = 0
        swApp.ActiveDoc.ActiveView.FrameTop = 0
        swApp.ActiveDoc.ActiveView.FrameState = 1
        swApp.ActiveDoc.ActiveView.FrameState = 1

Einfach ändern in

Part = swApp.ActivateDoc2(modelname, False, longstatus)
TextBox2.Text = TextBox2.Text + vbCrLf + "Teil geöffnet"

Set ModelView = PartActiveView
ModelView.FrameLeft = 0
ModelVIewFrameTop = 0
usw.

So sollte es gehen.
Edit: Verdammter Zwischenposter 

[Diese Nachricht wurde von Rummelsdorf am 20. Nov. 2006 editiert.]

sbtSDA
Mitglied
Softwareentwickler


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

Beiträge: 30
Registriert: 12.04.2006

Dell PRECISION M70
2,0 GHz; 2 GB RAM
NVIDIA Quadro FX Go 1400
MS Win XP Prof SP2
SolidWorks 2005 SP5.0
SolidWorks 2006 SP5.0
SolidWorks 2007 SP1.0
MS Office Prof 2003
Visual Basic 6
Visual Studio 2005 Express

erstellt am: 20. Nov. 2006 12:14    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 dmj 10 Unities + Antwort hilfreich


Code2.gif

 
Hallo DMJ,

hier nochmal das ganze zur Verdeutlichung wegen Deklarationen.
Durch den Open Befehl beommst Du ja schon Dein Part Objekt belegt,
d. h. da würde der 1. Schritt entfallen.

Code:

Dim oSwApplication As SldWorks.SldWorks = Nothing
Dim oSwModelDoc As SldWorks.ModelDoc2
Dim oSwActiveView As SldWorks.ModelView = Nothing

' 1. Schritt
oSwModelDoc = CType(oSwApplication.ActiveDoc, SldWorks.ModelDoc2)
' 2. Schritt
oSwActiveView = CType(oSwModelDoc.ActiveView, SldWorks.ModelView)
' 3. Schritt
oSwActiveView.FrameState = SwConst.swWindowState_e.swWindowNormal


Das Bildchen schicke ich mit, damit Du besser sieht, was es bringt, wenn man sauber Deklaration macht. Da bekommt man zu allem Dingen ein Klappmenu und kann den Code auch besser lesen...

------------------
Mfg Thomas

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unserem Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|       kontakt@schuler-da.de  
----------------------------------------------
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
(John Osborne 1929 - 1994)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sbtSDA
Mitglied
Softwareentwickler


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

Beiträge: 30
Registriert: 12.04.2006

Dell PRECISION M70
2,0 GHz; 2 GB RAM
NVIDIA Quadro FX Go 1400
MS Win XP Prof SP2
SolidWorks 2005 SP5.0
SolidWorks 2006 SP5.0
SolidWorks 2007 SP1.0
MS Office Prof 2003
Visual Basic 6
Visual Studio 2005 Express

erstellt am: 20. Nov. 2006 12:42    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 dmj 10 Unities + Antwort hilfreich


Typumwandlung1.gif


Typumwandlung2.gif

 
Hallo DMJ,

hier noch ein kleiner Nachtrag zur automatische Typ-Umwandlung
in VB 2005.

Ist wirklich eine prima Sache ...

------------------
Mfg Thomas

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unserem Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|       kontakt@schuler-da.de  
----------------------------------------------
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
(John Osborne 1929 - 1994)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

dmj
Mitglied


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

Beiträge: 8
Registriert: 28.07.2005

erstellt am: 20. Nov. 2006 13:01    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

Wahnsinn, was man hier für ein Feedback bekommt!!!

Ich gebe zu, mein Code ist sehr stümperhaft und unleserlich. Allerdings tut man sich ohne Lehrbuch als Autodidakt schon etwas hart mit der ganzen Geschichte. Die Hilfe ist eher was für Fortgeschrittene.

Die ganzen Objekte einzeln zu definieren ist wohl sehr sinnvoll. Ich gelobe Besserung meines Programmierstils.  

Allerdings hab ich gleich wieder ein Problem. Bei den ganzen Zeilen, in denen Werte zugewiesen werden kommt folgendes vor:

Code:
Part.Parameter("D7@Profil").SystemValue=Part.Parameter("D7@Kanis_Profil_17_DH").SystemValue / phi ^ normstufe

Wie muss ich da die Objekte definieren, damit "Option Strict On" keinen Fehler bringt?

Ich habe es mal mit

Code:
Dim oSwDimension As SldWorks.Dimension
            oSwDimension = CType(Part.Parameter("D7@Profil"), SldWorks.Dimension)

versucht.
Das führt aber zu viel Code, da ich den String für den Parameter jedes mal wieder ändern muss und "oSwDimension" neu definieren muss. Gibt es da eine andere Möglichkeit?


MfG,

DMJ

[Diese Nachricht wurde von dmj am 20. Nov. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sbtSDA
Mitglied
Softwareentwickler


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

Beiträge: 30
Registriert: 12.04.2006

Dell PRECISION M70
2,0 GHz; 2 GB RAM
NVIDIA Quadro FX Go 1400
MS Win XP Prof SP2
SolidWorks 2005 SP5.0
SolidWorks 2006 SP5.0
SolidWorks 2007 SP1.0
MS Office Prof 2003
Visual Basic 6
Visual Studio 2005 Express

erstellt am: 20. Nov. 2006 14:16    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 dmj 10 Unities + Antwort hilfreich

Hallo DMJ,

ja wenn man das richtig machen will, dann ist für so eine Kleinigkeit wie eine Bemaßungswert ändern oft ganz schön viel Code nötig - das läßt sich nicht ändern, wenn man das richtig machen will. Wichtig ist auch immer zu beachten, daß man im Code überprüfen kann, ob die Aktion auch geklappt hat. Dazu sollte man stets Befehle verwenden, die einem zurückliefen, ob die Ausführung geklappt hat. Das ist ein ganz wichtiger Punkt bei der Geometriemanipulation. Schließlich will man ja nach dem Programmende sicher sein, das die Erzeugte Geometrie auch alle Bemaßungswerte hat, die man ins Modell übergeben hat. Also immer prüfen, prüfen, prüfen.

Da hierfür oft viel Code erforderlich ist macht man sich die Arbeit natürlich nur einmal, indem man sich eine Funktion schreibt, die z.B. nichts anders macht, als einem Maß im Modell einen Wert zu übergeben. In die Funktion kann man dann soviel Code reinpacken wie man will, man hat ja im eigentlichen Programmablauf dann nur noch den Funktionsaufruf und übergibt hier nur noch den Bemaßungsnamen und den Bemaßungswert (Vorsicht: hier gibt es Längen, Winkel und Stück). Dafür läßt sich prima eine allgemeine Funktion schreiben. Die Funktion muß aber so geschrieben sein, daß immer sichergestellt ist das der Wert auch wirklich an die Bemaßung übergeben wurde. Wenn nicht, dann muß die Funktion "false" zurückliefern.

Klingt alles sehr aufwendig, macht sich aber bezahlt, so kann nix schiefgehn im code, ohne das man das mitkriegt. Schließlich kostet es ja viel Geld wenn man nach der Herstellung des Teils feststellt, das es Ausschuß ist, weil ein Maß falsch ist.

Hier z.B. mal so ein kleines Beispiel, wie sowas aussehen könnte.
Da kann man natürlich noch viel mehr machen ...
Gebe allerdings keine Garantie, das die Funktion gleich klappt, habe ich nur schnell zusammengebaut für Dich.

Code:

Function MassAendern( _
        ByVal oSwApplication As SldWorks.SldWorks, _
        ByVal sMassName As String, _
        ByVal dMassGroesse As Double _
        ) As Boolean

        Dim oSwModelDoc As SldWorks.ModelDoc2 = Nothing
        Dim oSwSelectionMgr As SldWorks.SelectionMgr
        Dim oSwDisplayDimension As SldWorks.DisplayDimension
        Dim oSwDimension As SldWorks.Dimension
        Dim lRetVal As Long
        Dim bStatus As Boolean

        Try
            oSwModelDoc = CType(oSwApplication.ActiveDoc, SldWorks.ModelDoc2)
            oSwSelectionMgr = CType(oSwModelDoc.SelectionManager, SldWorks.SelectionMgr)
            ' Selektionmanager leeren
            oSwModelDoc.ClearSelection2(True)
            ' Selektieren des Maßes
            bStatus = oSwModelDoc.Extension.SelectByID2( _
                sMassName, "DIMENSION", 0, 0, 0, False, 0, Nothing, _
                SwConst.swSelectOption_e.swSelectOptionDefault)
            If bStatus = False Then
                MsgBox("Deine Fehlermeldung")
                Return False
            End If
            ' DisplayDimension mit dem ersten Objekt (sollte ein Maß sein) vom Selektionmanager belegen
            oSwDisplayDimension = CType(oSwSelectionMgr.GetSelectedObject4(1), SldWorks.DisplayDimension)
            If oSwDisplayDimension Is Nothing Then
                MsgBox("Deine Fehlermeldung")
                Return False
            End If
            oSwDimension = CType(oSwDisplayDimension.GetDimension, SldWorks.Dimension)
            If oSwDimension Is Nothing Then
                MsgBox("Deine Fehlermeldung")
                Return False
            End If
            ' Maßwert in die übergebene Größe ändern
            If oSwDimension.SetSystemValue2(dMassGroesse, _
                SwConst.swSetValueInConfiguration_e.swSetValue_InThisConfiguration) _
                <> SwConst.swSetValueReturnStatus_e.swSetValue_Successful Then
                MsgBox("Deine Fehlermeldung")
                Return False
            End If
            ' Modell neu aufbauen lassen um die Änderung zu sehen
            oSwModelDoc.EditRebuild3()

            Return True

        Catch ex As Exception

            ' Modell neu aufbauen lassen
            oSwModelDoc.EditRebuild3()
            MsgBox("Deine Fehlermeldung")
            Return False

        End Try

    End Function


------------------
Mfg Thomas

Brauchen Sie Hilfe, sind Sie in Not? Wir retten Sie mit unserem Code!
----------------------------------------------
SolidWorks API-Programmierung | Makros | Tools | Addins | Schulung

SolidWorks API Programmierung; Schuler Design Automation GmbH
|       kontakt@schuler-da.de  
----------------------------------------------
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
(John Osborne 1929 - 1994)

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