| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Dassault Systèmes auf der Hannover Messe 2024 (kostenlose Tickets verfügbar) |
Autor
|
Thema: Tabellengesteuertes Teil, Löschen von Konfigurationen (1212 / mal gelesen)
|
andi5785 Mitglied Ingenieur Elektrotechnik
Beiträge: 8 Registriert: 18.07.2017 SolidWorks 2017 SP4.1
|
erstellt am: 18. Jul. 2017 13:51 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander, mein erster Beitrag hier, nachdem ich bisher immer über die Suchfunktion fündig wurde... Ich verwende für die Erstellung einer Bauteilbibliothek mit SWX2017 Konstruktionstabellen, in denen die Varianten gespeichert sind. Ich habe bewusst auf die Verknüpfung des Teils zur Tabelle verzichtet, da das beim Verwenden der Bibliothek durch den Konstrukteur (in dem Moment sind die Dateien schreibgeschützt) immer wieder Probleme gemacht hat. Workflow fürs Anlegen/Entfernen neue Varianten ist jetzt folgender: 1. Hinzufügen der Variante in Excel 2. Starten eines VB-Skripts, welches die Tabelle mit dem Lager abgleicht und diese nachher in das Teil lädt. Letzteres funktioniert wunderbar, wenn ich eine neue Variante hinzufüge. Lösche ich jedoch aus der Tabelle eine Variante, bleibt diese im Teil erhalten. Gibt es eine Möglichkeit, diesen Abgleich automatisiert durchzuführen? Alternativ wäre das Löschen aller Varianten und nachfolgender Neuimport der Tabelle ja eine Lösung. Fürs Importieren der Tabelle verwende ich den Befehl Part.InsertFamilyTableOpen(Pfad). Gibt es hier evtl. eine Option zu setzen? Vielen Dank für Eure Hilfe Andreas Vielen Dank für Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi5785 Mitglied Ingenieur Elektrotechnik
Beiträge: 8 Registriert: 18.07.2017 SolidWorks 2017 SP4.1
|
erstellt am: 18. Jul. 2017 15:17 <-- editieren / zitieren --> Unities abgeben:
Habe jetzt die Variante umgesetzt, die: - alle Konfigurationen außer die erste löscht - die erste in Default umbenennt - die Design-Tabelle erneut lädt - die Default-Konfiguration löscht Vielleicht nutzt das ja dem ein oder anderen: Code: Set swApp = Application.SldWorks Set Part = swApp.OpenDoc6(root & "\" & NameR & "\" & path_part(index, 1), 1, 0, "", longstatus, longwarnings) swApp.ActivateDoc2 std(index, 1), False, longstatus Set Part = swApp.ActiveDoc ' Löschen aller Varianten im Teil configs = Part.GetConfigurationNames() 'Konfigurationsnamen lesen Part.ShowConfiguration2 (configs(0)) ' Oberste Konfiguration aktivieren configs = Part.GetConfigurationNames() 'Konfigurationsnamen lesen l = UBound(configs) ' Anzahl Konfigurationen
For p = 1 To l a = Part.DeleteConfiguration2(configs(p)) 'Lösche alle Konfigurationen Next ' Aktive Konfiguration in Default umbenennen Set swConfMgr = Part.ConfigurationManager Set swConfig = swConfMgr.ActiveConfiguration swConfig.Name = "Default" ' Entfernen der vormaligen Designtabelle boolstatus = Part.Extension.SelectByID2("Tabelle", "DESIGNTABLE", 0, 0, 0, False, 0, Nothing, 0) Part.EditDelete
' Laden der neuen Designtabelle Value = Part.InsertFamilyTableOpen(root & "\" & NameR & "\" & path_table(index, 1)) swApp.ActivateDoc2 std(index, 1), False, longstatus 'Speichern zum Aktivieren longstatus = Part.SaveAs3(root & "\" & NameR & "\" & path_part(index, 1), 0, 0) ' Lösche Default-Konfiguration configs = Part.GetConfigurationNames() l = UBound(configs) 'Wähle letzte Konfiguration Part.ShowConfiguration2 (configs(l)) a = Part.DeleteConfiguration2("Default") ' Save & Close Document longstatus = Part.SaveAs3(root & "\" & NameR & "\" & path_part(index, 1), 0, 0) swApp.CloseDoc std(index, 1)
Oder hat wer eine bessere Idee? Cheers Andreas 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: 19. Jul. 2017 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für andi5785
Hallo Andreas, das sieht für mich erst mal nach einer resoluten Lösung aus, ich bin mir allerdings nicht ganz sicher, was so z.B. mit irgendwie eingebauten Komponenten passiert, wenn du die Konfigurationen alle löscht und wieder neu erzeugst, ob dann immer sicher alle Verknüpfungen noch gefunden werden etc.. Außerdem müssen alle Konfigurationen noch neu berechnet werden, das dauert natürlich seine Zeit Wenn das alles kein Hinderungsgrund bei euch ist, ist das doch eine gute Vorgehensweise. Alternativ dazu kannst du versuchen herauszufinden, welche der Konfigurationen im Modell durch Excel gesteuert werden. Leider habe ich da keinen eigenen Call für gefunden, sowas wie Configuration.IsDrivenByDesignTable oder so. Aber man kann sich das natürlich selber basteln, siehe dieses Beispiel: Code:
'************************************************************************** '* Beispiel: herausfinden, ob eine Konfiguration durch Excel '* gesteuert wird. '* '* Stefan Berlitz '* 19.07.2017 '**************************************************************************Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim ConfigCount As Long Dim ConfigNames As Variant Dim ConfName As String Dim swDesTable As SldWorks.DesignTable Dim TotalRow As Long Dim TotalCol As Long Dim i As Long Dim bRet As Boolean Dim BomConfig As Collection ' an die laufende Sitzung SolidWorks anhängen Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc ' Collection für die Configs aus der DT (DesignTable) vorbereiten Set BomConfig = New Collection ' zunächst mal aus der aktuellen DesignTable alle Namen der von ' dort gesteuerten Konfigurationen auslesen Set swDesTable = swModel.GetDesignTable bRet = swDesTable.Attach ' Anzahl der Zeilen und Spalten aus der DT holen. ' ACHTUNG: laut API Beschreibung beginnt Zählung bei 1 TotalRow = swDesTable.GetTotalRowCount TotalCol = swDesTable.GetTotalColumnCount ' jetzt alle in der DT ausgeführten Konfigurationsnamen auslesen, ' die stehen in der ersten Spalte For i = 1 To TotalRow BomConfig.Add swDesTable.GetEntryText(i, 1), swDesTable.GetEntryText(i, 1) Next i ' und DT wieder loslassen, gibt leider Geflacker im Grafikbereich swDesTable.Detach ' dann alle Konfigurationsnamen des Modell holen, da können ja welche ' dabei sein, die nicht von der DT gesteuert werden ConfigCount = swModel.GetConfigurationCount ConfigNames = swModel.GetConfigurationNames ' dann alle Konfigurationen durchschauen, ob die von der ' Exceltabelle gesteuert werden For i = 0 To ConfigCount - 1 ConfName = ConfigNames(i) If IsInCollection(BomConfig, ConfName) Then Debug.Print "XLS: " & ConfName Else Debug.Print "std: " & ConfName End If Next i End Sub ' von http://www.vb-tec.de/collctns.htm Public Function IsInCollection( _ ByRef col As Collection, _ ByRef elem As String _ ) As Boolean
On Error Resume Next If IsEmpty(col(elem)) Then: 'DoNothing IsInCollection = (Err.Number = 0) On Error GoTo 0 End Function
Wenn also in deinem Modell nur DT-gesteuerte Konfigurationen sein sollen kannst du nach einem Update der DT damit schauen, welche der Konfiguartionen durch die Tabelle gestuert werden und die anderen ggf. gezielt löschen Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|