Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Externe Referenz in einem Einzelteil tauschen

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
Autor Thema:   Externe Referenz in einem Einzelteil tauschen (1063 mal gelesen)
DieGraetsche
Mitglied
Informatiker


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

Beiträge: 61
Registriert: 28.09.2007

WIN7 64BIT und SolidWorks 2014 SP4

erstellt am: 16. Feb. 2015 11:10    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


Circular-References.zip


Bild1.png


Bild2.png

 
Hallo zusammen,

Wie bekomme ich es mit der SolidWorks-API hin folgende Baugruppe inkl. Kinder auf neue Nummern zu speichern (nicht mit SaveAsCopy)
Siehe Bild1.png

Struktur:
ASM-cicular-Reference.SLDASM
- Part-cicular-Reference.SLDPRT
  -- ASM-cicular-Reference.SLDASM (externe Referenz)

Ich habe es wie folgt versucht. (CAD-Dateien sind ebenfalls im Anhang)

Code:

Dim swApp As Object

Const AsmName As String = "C:\cad_pools\swpool\ASM-circular-References.SLDASM"
Const PartName As String = "C:\cad_pools\swpool\Part-circular-Refrences.SLDPRT"
Const NewAsmName As String = "C:\cad_pools\swpool\D4711.SLDASM"
Const NewPartName As String = "C:\cad_pools\swpool\D4712.SLDPRT"

Sub main()

    Dim swApp                   As SldWorks.SldWorks
    Dim swModel                 As SldWorks.ModelDoc2
    Dim lRet                    As Long
  

    Set swApp = CreateObject("SldWorks.Application")
    ' 1. Step, Baugruppe auf neuen namen Speichern
    Set swModel = swApp.GetOpenDocumentByName(AsmName)
    lRet = swModel.SaveAsSilent(NewAsmName, True)
   
   
    ' 2. Einzelteil auf neuen Namen speichern
    Set swModel = swApp.GetOpenDocumentByName(PartName)
    lRet = swModel.SaveAsSilent(NewPartName, False)
   
    ' 3. Baugruppe erneut speichern.
    Set swModel = swApp.GetOpenDocumentByName(NewAsmName)
    swModel.Save

End Sub


Das Ergebnis könnt ihr euch in Bild2.png anschauen.

Struktur:
D4711.SLDASM
- D4712.SLDPRT
  -- ASM-cicular-Reference.SLDASM (nicht geöffnet)

Mein Problem ist, das der Link auf die externe Referenz nicht getauscht wird.

Wie kann man dies mit der API technisch löschen.
Wichtig: Die Top-Baugruppe darf nicht geschlossen


Ich sage jetzt schon mal vielen Dank für eure Hilfe.

Grüße,
DieGraetsche

[Diese Nachricht wurde von DieGraetsche am 16. Feb. 2015 editiert.]

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: 8613
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: 16. Feb. 2015 11:56    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 DieGraetsche 10 Unities + Antwort hilfreich

Hallo DieGraetsche,

beim "normalen" Speichern wird die Referenz auf dem Original gelassen, auch per API. Du kannst in deinem Programm entweder durch SldWorks::ReplaceRefer encedDocument die Referenz auf die neue Baugruppe umbiegen oder mit dem PackAnd Go Interface arbeiten, dass biegt die Referenzen auch um, wenn ich das richtig im Kopf habe (wie eben auch interaktiv).

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

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

Winni-two
Mitglied
Ing. Maschb.


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

Beiträge: 77
Registriert: 12.03.2010

SW 2014 SP4
Intel Xenon X5667 @3.07GHz
Win 7 64 bit
Graka: Nvidia Quadro FX3800
24 GB Ram (schon 19,8GB nur für Win+SW benötigt)

erstellt am: 16. Feb. 2015 12:11    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 DieGraetsche 10 Unities + Antwort hilfreich

Versuch mal:


Dim swApp, Part As Object
Dim boolstatus As Boolean
Dim OpenError As Long
Dim OpenError2 As Long
Const AsmName As String = "C:\cad_pools\swpool\ASM-circular-References.SLDASM"
Const PartName As String = "C:\cad_pools\swpool\Part-circular-Refrences.SLDPRT"
Const NewAsmName As String = "C:\cad_pools\swpool\D4711.SLDASM"
Const NewPartName As String = "C:\cad_pools\swpool\D4712.SLDPRT"

Sub main()

    Dim swApp                  As SldWorks.SldWorks
    Dim swModel                As SldWorks.ModelDoc2
    Dim lRet                    As Long
 

    Set swApp = CreateObject("SldWorks.Application")
    Set Part = swApp.ActiveDoc
    ' 1. Step, Baugruppe auf neuen namen Speichern
    Set swModel = swApp.GetOpenDocumentByName(AsmName)
    lRet = swModel.SaveAsSilent(NewAsmName, True)
   
    ' 2. Einzelteil auf neuen Namen speichern
    Set swModel = swApp.GetOpenDocumentByName(PartName)
    lRet = swModel.SaveAsSilent(NewPartName, True)
   
    ' 3. Baugruppe erneut speichern.
    'Set swModel = swApp.GetOpenDocumentByName(NewAsmName)
    boolstatus = swApp.ReplaceReferencedDocument(NewAsmName, PartName, NewPartName)
    boolstatus = swApp.ReplaceReferencedDocument(NewPartName, AsmName, NewAsmName)
    Set Part = swApp.OpenDoc6(NewAsmName, 2, swOpenDocOptions_Silent, "", OpenError, OpenError2)
    Set Part = swApp.ActivateDoc(NewAsmName)
    lRet = swModel.SaveAsSilent(NewAsmName, False)
    swApp.CloseDoc NewAsmName

End Sub


Gruß Winni

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

DieGraetsche
Mitglied
Informatiker


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

Beiträge: 61
Registriert: 28.09.2007

WIN7 64BIT und SolidWorks 2014 SP4

erstellt am: 16. Feb. 2015 13:10    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

Erst mal vielen Dank für eure schnelle Unterstützung.

Die Funktion

Code:
swApp.ReplaceReferencedDocument(PartName, AsmName, NewAsmName)
funktioniert leider nur, wenn die das Dokument im SolidWorks nicht geöffnet habe.

Hier liegt aber genau das Problem. Ich muss die Referenzen/Link am geöffneten Teil/ASM tauschen. Ein schließen und wieder öffnen ist leider keine Option.
-> Bei einer Baugruppe von mehreren 100 oder gar 1000 Teilen würde das erneute Öffnen im SolidWorks einfach zu lange dauern.

Grüße,
DieGraetsche

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: 2556
Registriert: 06.11.2000

** CSWP 01/2008 **
(noch) HP Z400, 8GB, Quadro FX 2000 :(
SWX2016 SP4;
SAP/PLM;
DriveWorks Pro;
Programmierung: VBA, Relikte mit VB6, aktuell VB.NET 2015

erstellt am: 16. Feb. 2015 15:24    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 DieGraetsche 10 Unities + Antwort hilfreich

So wie Winnie geschrieben hat.

Nur würde ich von unten anfangen, jedes Teil bzw. jede Komponente "Speichern unter", damit ist die Referenz in der nächst höheren Baugruppe schon umgebogen.
Also die ganze Struktur von unten nach oben durchgehen und unter neuem Namen speichern. Dann sparst du dir Winnies Effekt, dass du die Baugruppe nochmal speichern musst.
Hoffentlich hast du keine externen Referenzen außerhalb der Struktur.

------------------
Klaus

www.al-ko.com | mein Gästebuch

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

Christian_W
Ehrenmitglied
Konstrukteur (Dipl-Ing)


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

Beiträge: 1737
Registriert: 04.04.2001

(SWX 2016)
SWX 2012sp5 WIN7-64
proAlpha6.1d05/calinkV8
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)<P>CSWP 12/2015

erstellt am: 16. Feb. 2015 15: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 DieGraetsche 10 Unities + Antwort hilfreich

Zitat:
... Ich muss die Referenzen/Link am geöffneten Teil/ASM tauschen. Ein schließen und wieder öffnen ist leider keine Option...

Hallo,

im ersten Beitrag stand noch, du willst sie unter neuem Namen speichern, nichts von am geöffnetem Teil tauschen.
Unsere pdm macht es IMHO so ähnlich:
- speichern unter / bzw. auf Dateisystemebene kopieren.
- Referenzen tauschen
- kopierte Datei öffnen.

Gruß, Christian

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

riesi
Mitglied
Konstrukteur, CAD-Admin


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

Beiträge: 816
Registriert: 06.05.2002

SWX Office Pre. 2013-Sp5
OneSpaceDrafting V19 M050
MS-Windows 7 Prof. 64Bit
Core i7-3820 @ 3.60 GHz
16,00 GB RAM
Nvidia Quadro FX 4000

erstellt am: 17. Feb. 2015 07:52    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 DieGraetsche 10 Unities + Antwort hilfreich

Ich mache es so, dass ich das Parts mit externen Referenzen virtuell mache, Baugruppe speichere und die Parts mit externen Referenzen anschließend vernummere und wieder speichere.

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)2017 CAD.de