Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: sldprt in einer Baugruppe einfügen

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
  
AMB 2024
Autor Thema:  API: sldprt in einer Baugruppe einfügen (2867 mal gelesen)
jchenri
Mitglied
Programmierer

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

Beiträge: 8
Registriert: 04.03.2005

erstellt am: 12. Jun. 2013 11:17    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 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



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

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

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

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

Beiträge: 8
Registriert: 04.03.2005

erstellt am: 12. Jun. 2013 12: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 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


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

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

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


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

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

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

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

Beiträge: 8
Registriert: 04.03.2005

erstellt am: 12. Jun. 2013 16:38    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

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)



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

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

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

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

Beiträge: 8
Registriert: 04.03.2005

erstellt am: 13. Jun. 2013 18:45    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

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


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

Beiträge: 1
Registriert: 17.09.2015

erstellt am: 17. Sep. 2015 13:54    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 jchenri 10 Unities + Antwort hilfreich

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



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

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

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

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