| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| AMB 2024 |
Autor
|
Thema: API: sldprt in einer Baugruppe einfügen (2867 mal gelesen)
|
jchenri Mitglied Programmierer
Beiträge: 8 Registriert: 04.03.2005
|
erstellt am: 12. Jun. 2013 11:17 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, hoffe jemanden zu finden der mir behilflich sein kann. Ich habe eine kleine Datenbank und verwalte damit meine CAD Daten. So weit so gut, ich öffne eine Baugruppe und möchte jetzt ein Einzelteil der Baugruppe zuweisen/einfügen (am besten an der Maus geführt). In Inventor funktioniert das ohne Probleme, aber wie Programmiere ich das für Solidworks 2013? Versucht habe ich es unter Delphi folgendermassen: (Delphi 6/7/2007) Function GetSolidworksApplication(start: Boolean): SldWorks_; Var V : OleVariant; begin if start then begin V := CreateOleObject('SldWorks.Application') as SldWorks_TLB.SldWorks_; SWApp := IDispatch(V) as SldWorks_; SWApp.Visible := True; end; end; procedure InsertSLDFile(SolidFilename : String); var Model : IAssemblyDoc; begin GetSolidworksApplication(true); If Assigned(SWApp) then Begin Model := SWApp.ActiveDoc as IAssemblyDoc; Model.AddComponent2(SolidFilename,0,0,0); end; end; Wenn das Part bereits eingefügt wurde(drag'n drop), funktioniert die Rotiene. Auf neue Parts reagiert Solidworks nicht Eine andere Variante habe ich ohne erfolg probiert: (* geht nicht procedure InsertSolidFile(SolidFilename : String); var swModel : IModelDoc2; swAssy : IAssemblyDoc; swSelectionMgr : ISelectionMgr; swPlaneFeature : IFeature; swPlane : IRefPlane; begin GetSolidworksApplication(true); If Assigned(SWApp) then Begin swModel := swApp.ActiveDoc as IModelDoc2; swAssy := swModel as IAssemblyDoc; swSelectionMgr := swModel.SelectionManager as ISelectionMgr; swPlaneFeature := swSelectionMgr.GetSelectedObject6(1,-1) as IFeature; swPlane := swPlaneFeature.GetSpecificFeature2 as IRefPlane; <-- Hier exception error swAssy.InsertNewPart2(SolidFilename, swPlane); end; end; *) Vielen Dank für eure hilfe. JCHenri
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 12. Jun. 2013 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für jchenri
Hallo Henri hast schon mal die Online Hilfe bemüht? Dort steht nämlich The specified file must be loaded in memory. A file is loaded into memory when you load the file in your SolidWorks session (ISldWorks::OpenDoc6) or open an assembly that already contains the file ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jchenri Mitglied Programmierer
Beiträge: 8 Registriert: 04.03.2005
|
erstellt am: 12. Jun. 2013 12:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, danke für die schnelle Antwort. das Part muss geladen sein!? Wie macht das der Windowsexplorer? Mit der Maus eine sldprt Datei in das SW Fenster schieben und schon ist es abgelegt bzw. wird an der Maus geführt. Habe jetzt die Funktion erweitert und eine opendoc6 eingefügt. Funktioniert zwar, öffnet mir aber ein weiteres SW Fenster. Ist unschön, wenn ich 50 einzelteile einfüge. Vielleicht gibt es noch eine andere Lösung. JCHenri
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
THSEFA Mitglied Konstrukteur/CAD-Admin
Beiträge: 1141 Registriert: 27.11.2002 SWX 2020 SP5.0 Premium Windows 10 Pro 64Bit Citrix VM Intel(R) XEON(R) Gold 6146 CPU @ 3.20GHz 24 GB Ram<P>Windows 10 Pro 64Bit
|
erstellt am: 12. Jun. 2013 13:26 <-- editieren / zitieren --> Unities abgeben: Nur für jchenri
Nur mal ganz grob als Idee: Teil öffnen - Einfügen in die BG - Teil schließen! ------------------ Viele Grüße, THSEFA "Nichts ist so hart wie das Leben! Wenn man sagt, was man denkt, muss man mehr als alles geben!..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 12. Jun. 2013 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für jchenri
Hallo JCHenri Zum Einfügen eines Teils in eine Baugruppe gibt es in der API-Hilfe ein Beispiel. Add Component and Mate Example Das Teil wird aber an den vordefinierten Koordinaten eingefühgt. Wenn du das Teil an der Maus hängen haben willst, musst du das über einen Umweg machen. Hier mal ein Beispiel-Code für vb.net.
Code: ''' <summary> ''' Drag 'n Drop von Teilen in Baugruppen ''' </summary> ''' <remarks>Nach dem Auswählen eines Teils, ''' kann das Teil mit gedrückter rechten Maustaste ''' auf die Form in Solidworks gezogen werden werden.</remarks> Public Class Form1 Private fName As String Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click Dim ofd As New OpenFileDialog If ofd.ShowDialog() = DialogResult.OK Then fName = ofd.FileName End If End Sub Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown If Not System.IO.File.Exists(fName) Then MessageBox.Show("No file selected") End If Dim fList As String() = New String(0) {} fList(0) = fName Dim dataObj As New DataObject(DataFormats.FileDrop, fList) Dim eff As DragDropEffects = DoDragDrop(dataObj, DragDropEffects.Link Or DragDropEffects.Copy) End Sub End Class
Gruss Andreas
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jchenri Mitglied Programmierer
Beiträge: 8 Registriert: 04.03.2005
|
erstellt am: 12. Jun. 2013 16:38 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von THSEFA: Nur mal ganz grob als Idee: Teil öffnen - Einfügen in die BG - Teil schließen!
Hatte ich mir auch gedacht, aber wüsste nicht wie das Fenster wieder schliessen kann var Model : IAssemblyDoc; iErrors iWarning: Integer; tmpDoc : IModelDoc2; begin Model := SWApp.ActiveDoc as IAssemblyDoc; opDoc := SWApp.OpenDoc6(SolidFilename,1,1,'',iErrors,iwarning); Model.AddComponent2(SolidFilename,0,0,0);
tmpDoc.Close; <-- Funktioniert leider nicht end; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 13. Jun. 2013 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für jchenri
Hallo jchenri, Zitat: Original erstellt von jchenri: Hatte ich mir auch gedacht, aber wüsste nicht wie das Fenster wieder schliessen kann [...] tmpDoc.Close; <-- Funktioniert leider nicht
Laut API Hilfe: ModelDoc2::Close Not implemented. Use ISldWorks::CloseDoc Die API Hilfedatei ist deine Freundin, manchmal sogar deine Wichtigste und sie mag es gar nicht ignoriert zu werden Ciao, Stefan
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jchenri Mitglied Programmierer
Beiträge: 8 Registriert: 04.03.2005
|
erstellt am: 13. Jun. 2013 18:45 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von StefanBerlitz: Hallo jchenri,Laut API Hilfe: ModelDoc2::Close Not implemented. Use ISldWorks::CloseDoc Die API Hilfedatei ist deine Freundin, manchmal sogar deine Wichtigste und sie mag es gar nicht ignoriert zu werden Ciao, Stefan
Hallo Stefan, hast recht ich sollte mir die API Hilfe mehr zur Brust nehmen. Jetzt funktioniert alles soweit. Danke an alle Gruß JCHenri Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven12345 Mitglied
Beiträge: 1 Registriert: 17.09.2015
|
erstellt am: 17. Sep. 2015 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für jchenri
Hallo Andreas, hast Du ein Beispiel für vda? Ich habe Beispiel von API-Hilfe für mich angepasst. Das sieht jetzt so aus:
Code:
Sub main() Set swApp = CreateObject("SldWorks.Application") Set swModel = swApp.ActiveDoc AssemblyTitle = swModel.GetTitle strings = Split(AssemblyTitle, ".") AssemblyName = strings(0) boolstat = True Set swAssy = swModel strCompModelname = "C:\Temp\Teil1.SLDPRT" Set tmpObj = swApp.OpenDoc6(strCompModelname, swDocPART, 0, "", errors, warnings) Set swModel = swApp.ActivateDoc3(AssemblyTitle, True, swUserDecision, errors) Set swcomponent = swAssy.AddComponent5(strCompModelname, swAddComponentConfigOptions_CurrentSelectedConfig, "", False, "", 0, 0, 0) End Sub
Das Teil wird aber an Ursprung eingefügt. "Teil an der Maus hängen" krieg ich nicht hin, hab schon alles versucht Gruß Sven
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 17. Sep. 2015 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für jchenri
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!
Zitat: Original erstellt von StefanBerlitz: Die API Hilfedatei ist deine Freundin, manchmal sogar deine Wichtigste und sie mag es gar nicht ignoriert zu werden
... ist aber auch- wie die Freundin- oft schwer zu verstehen ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |