| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Bechtle Competence Days | Online |
Autor
|
Thema: Externe Referenz in einem Einzelteil tauschen (2462 mal gelesen)
|
DieGraetsche Mitglied Informatiker
Beiträge: 61 Registriert: 28.09.2007 WIN7 64BIT und SolidWorks 2014 SP4
|
erstellt am: 16. Feb. 2015 11:10 <-- editieren / zitieren --> Unities abgeben:
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 ObjectConst 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)
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: 16. Feb. 2015 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für DieGraetsche
|
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 16. Feb. 2015 12:11 <-- editieren / zitieren --> Unities abgeben: Nur für DieGraetsche
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
Beiträge: 61 Registriert: 28.09.2007 WIN7 64BIT und SolidWorks 2014 SP4
|
erstellt am: 16. Feb. 2015 13:10 <-- editieren / zitieren --> Unities abgeben:
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...
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: 16. Feb. 2015 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für DieGraetsche
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 V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 16. Feb. 2015 15:42 <-- editieren / zitieren --> Unities abgeben: Nur für DieGraetsche
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 CAD-Admin
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 17. Feb. 2015 07:52 <-- editieren / zitieren --> Unities abgeben: Nur für DieGraetsche
|