| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Im Fokus: CAD Automation & CPQE |
Autor
|
Thema: Hinzufügen von Bauteilen (1433 mal gelesen)
|
Muck93 Mitglied
Beiträge: 16 Registriert: 24.01.2016
|
erstellt am: 23. Mai. 2017 18:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich weiß die Frage wird kein Problem für euch sein und Ich habe schon im Forum gesucht jedoch funktioniert davon nichts :-( Also, ich habe mehrere Baugruppen die zueinander gehören. Meine Deklarationen:
Code: Private fso2 As New FileSystemObject Dim swApp As SldWorks.SldWorks Dim Gesamtkraft As Integer Dim FSI As FileSystemInfo Dim strCADFileFolder As String Dim strCADDatei, Dateiname As String Dim strExeFolder As String Dim strEndung As String Dim swPart As SldWorks.ModelDoc2 Dim longstatus, longwarnings As Integer Dim X_Kraft, Y_Kraft, Z_Kraft As Integer Dim Lagerauswahl As String Dim instance As IAssemblyDoc Dim swcomponent As SldWorks.Component2
Zunächst öffne ich die Datei Code: Public Sub MainWindow_Load(sender As Object, e As EventArgs) Handles MyBase.Load swApp = New SldWorks.SldWorks() swApp.Visible = True ' Name und Version der Anwendung im Dialog einblenden. Me.Text = My.Application.Info.AssemblyName & " " & My.Application.Info.Version.ToString ' Pfad der Anwendung ermitteln strExeFolder = My.Application.Info.DirectoryPath Dim FSIs As FileSystemInfo() = _ New DirectoryInfo(strExeFolder).GetFileSystemInfos ' prüft, ob im aktuellen Ordner eine SolidWorks-Part-Datei liegt For Each FSI In FSIs If FSI.Extension.ToUpper = ".SLDASM" Then strCADDatei = fso2.GetFileName(FSI.FullName) strCADFileFolder = strExeFolder Me.TextBox_Dateiname.Text = FSI.FullName Dateiname = "Grundplatte_und_Ritzelwelle.SLDASM" End If Next ' Ermitteln der Endung der SolidWorks Datei strEndung = fso2.GetFileName(strCADDatei) ' Öffnen der Datei swPart = swApp.OpenDoc6(strCADFileFolder & "\" & Dateiname, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", longstatus, longwarnings) ' Geladene Datei zur aktiven Datei machen swApp.ActivateDoc2(strCADDatei, False, longstatus) swPart = swApp.ActiveDoc
Jetzt öffnet sich ein Fenster, und der Benutzer kann nun aussuchen welche Baugruppe zur Hauptbaugruppe hinzugefügt werden soll.
Code: Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Nur Y-Komponente liegt vor If X_Kraft = 0 And Y_Kraft = 1 And Z_Kraft = 0 Then Lagerauswahl = "Lager1.SLDASM" swPart = swApp.ActiveDoc End If End Sub
mit welcher Zeile, sorge ich dafür, dass meine gewünschte Baugruppe (hier die Variable Lagerauswahl) in der Hauptbaugruppe geöffnet wird? Egal was ich mache, es öffnet sich die Baugruppe in einem seperaten Fenster bei Solidworks. Vielen Dank im voraus :-)
[Diese Nachricht wurde von Muck93 am 23. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Muck93 Mitglied
Beiträge: 16 Registriert: 24.01.2016
|
erstellt am: 23. Mai. 2017 19:37 <-- editieren / zitieren --> Unities abgeben:
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 24. Mai. 2017 06:47 <-- editieren / zitieren --> Unities abgeben: Nur für Muck93
Hallo Muck, Zitat:
Was mir nun aufgefallen ist, dass Visual Basic den Befehl "AddComponent" gar nicht kennt. Liegt es vielleicht daran.
Ich sehe in deinem Code jetzt nirgends "AddComponent" daher lässt sich die Frage schwer beantworten, also normalerweise sollte er es erkennen wenn alle Verweise / Deklarationen da sind. Zitat:
Egal was ich mache, es öffnet sich die Baugruppe in einem seperaten Fenster bei Solidworks.
Meinst du mit separatem Fenster eine neue SWX Session? Weil wenn er es nur in einem neuen Fenster in SWX öffnet verstehe ich dein Problem nicht, wohin sollte er es dann auch sonst öffnen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 24. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Muck93 Mitglied
Beiträge: 16 Registriert: 24.01.2016
|
erstellt am: 24. Mai. 2017 08:16 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für deine Antwort :-) Also das addcomponent würde so kommen (hab es weggelassen da ich mir dachte das vielleicht ein anderer Befehl kommt.
Code:
Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Nur Y-Komponente liegt vor If X_Kraft = 0 And Y_Kraft = 1 And Z_Kraft = 0 Then Lagerauswahl = "Lager1.SLDASM" swPart = swApp.ActiveDoc swPart = swApp.AddComponent(strCADFileFolder & "\" & Lagerauswahl,-1,-1,-1)
Also ich würde am liebsten mit Addcomponent4 arbeiten, damit ich die Baugruppe direkt platzieren kann. Wenn ich nur mit dem AddComponent arbeite, kommt folgender fehler: Ein Ausnahmefehler des Typs "System.MissingMemberException" ist in Microsoft.VisualBasic.dll aufgetreten. Und es öffnet sich gar nichts. Deshalb hatte ich es mal ausprobiert mit dem Befehl openDoc6. Aber das ist ja nicht das Ziel und deshalb hat er auch es in einem seperaten Fenster geöffnet. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 24. Mai. 2017 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für Muck93
Hallo, also hab ich dich richtig verstanden und du willst eine Baugruppe in der Baugruppe platzieren? Dein Methodenaufruf ist falsch da du deine Methode auf das falsche Object (swApp) anwendest und dein Rückgabe-Object ist auch falsch deklariert (ModelDoc2).
Code: swPart = swApp.AddComponent(strCADFileFolder & "\" & Lagerauswahl,-1,-1,-1)
Richtig wäre nach deiner Deklaration "instance" als Ausgangs-Object und "swcomponent" als Rückgabe-Object. Code: swcomponent = instance.AddComponent(strCADFileFolder & "\" & Lagerauswahl,-1,-1,-1)
Aber hast du dir überhaupt mal das Beipiel "Add and Mate Component Example" in der API-Hilfe dazu angesehen um eine grobe Vorlage zu haben? Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 24. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Muck93 Mitglied
Beiträge: 16 Registriert: 24.01.2016
|
erstellt am: 25. Mai. 2017 08:29 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank dass du nochmal geantwortet hast. Also mein Code sieht aktuell so aus. Deklarationen:
Code: Private fso2 As New FileSystemObject Dim swApp As SldWorks.SldWorks Dim Gesamtkraft As Integer Dim FSI As FileSystemInfo Dim strCADFileFolder As String Dim strCADDatei, Dateiname As String Dim strExeFolder As String Dim strEndung As String Dim swPart As SldWorks.ModelDoc2 Dim longstatus, longwarnings As Integer Dim X_Kraft, Y_Kraft, Z_Kraft As Integer Dim Lagerauswahl As String Dim swcomponent As SldWorks.Component2 Dim Newname As String = "Baugruppe1" Dim swAssy As AssemblyDoc Dim swAssyEvents As Class1 Dim swModel As ModelDoc2
Öffnen der 1. Baugruppe
Code: swPart = swApp.OpenDoc6(strCADFileFolder & "\" & Dateiname, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", longstatus, longwarnings)
Und jetzt zum entscheidenden Part der noch immer nicht funktionierte :-( Hinzufügen der zweiten Baugruppe
Code: If X_Kraft = 0 And Y_Kraft = 1 And Z_Kraft = 0 Then Lagerauswahl = "Lager1.SLDASM" swModel = swApp.ActivateDoc2(strCADDatei, True, longstatus) swAssy = swPart swcomponent = swAssy.AddComponent5(strCADFileFolder & "\" & Lagerauswahl, swAddComponentConfigOptions_e.swAddComponentConfigOptions_NewConfigWithAllReferenceModels, "", False, "", -1, -1, -1)
aktuell macht er gar nichts :-( Vielen Dank im voraus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Muck93 Mitglied
Beiträge: 16 Registriert: 24.01.2016
|
erstellt am: 25. Mai. 2017 08:41 <-- editieren / zitieren --> Unities abgeben:
sorry, letzer Part war veraltet, zum hinzufügen der Baugruppe steht aktuell. Code: Lagerauswahl = "Lager1.SLDASM" swModel = swApp.ActivateDoc2(strCADDatei, True, longstatus) swAssy = swModel swcomponent = swAssy.AddComponent5(strCADFileFolder & "\" & Lagerauswahl, swAddComponentConfigOptions_e.swAddComponentConfigOptions_NewConfigWithAllReferenceModels, "", False, "", -1, -1, -1)
und folgender fehler tritt auf: Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in SoWo-API-Prak.exe aufgetreten.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 29. Mai. 2017 06:54 <-- editieren / zitieren --> Unities abgeben: Nur für Muck93
Hallo Muck, 1. Brauchst du 2 ModellDoc2 Objecte (swModel und swPart)? 2. Objekte sind keine Normalen Variablen wie z.B. Strings, Boolean usw. die man mit "swModel = ..." zuweist sondern diese müssen i.d.R. auf ein Object gesetzt werden mit "Set swModel = ..." 3. Die Komponenten die du in eine Baugruppe einfügen möchtest müssen im Arbeitspeicher liegen daher müssen diese vorher geöffnet sein, was auch in der API-Hilfe unter Remarks steht. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 29. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|