| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: API - Zeichnung gezielt mit erstem Blatt öffnen (2100 / mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2583 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 02. Jul. 2019 22:34 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich setze mich gerade mit dem OpenDoc7 Befehl auseinander, weil mir unter SW2019 der OpenDoc6 Befehl Probleme beschert. Mit dem OpenDoc6 Befehl wird eine Zeichnung mit dem Blatt geladen, wie zuletzt gespeichert. Über weitere Befehle kann ich nun zum 1sten Blatt wechseln, falls nicht sowieso damit geöffnet wurde. Mit folgendem Code kann ich nun gezielt mit "Blatt1" öffnen. Code:
Dim swApp As SldWorks.SldWorks Dim myDwgDoc As SldWorks.ModelDoc2 Dim DwgPath As String Dim swDocSpecification As SldWorks.DocumentSpecification Dim longstatus As Long Dim longwarnings As Long Set swApp = Application.SldWorks
DwgPath = "C:\1Arbeitsverzeichnis\00-05-01-009-01.SLDDRW" Set swDocSpecification = swApp.GetOpenDocSpec(DwgPath) swDocSpecification.DocumentType = swDocDRAWING swDocSpecification.ReadOnly = True swDocSpecification.Silent = True swDocSpecification.ConfigurationName = "" swDocSpecification.DisplayState = "" swDocSpecification.IgnoreHiddenComponents = True swDocSpecification.SheetName = "Blatt1" Set myDwgDoc = swApp.OpenDoc7(swDocSpecification) longstatus = swDocSpecification.Error longwarnings = swDocSpecification.Warning
Dies funktioniert allerdings nur, wenn auch das erste Blatt "Blatt1" heißt. Ist der Name "Sheet1", wird wie gespeichert geöffnet. Ich vermisse hier einen Befehl firstsheet etc. Hat jemand eine Idee, wie das gezielt zuverlässig gehen kann, ohne das ich einen 2ten Schritt mit Blattwechsel gehen muss? Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LeonardStark Mitglied
Beiträge: 108 Registriert: 14.08.2018
|
erstellt am: 03. Jul. 2019 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
StMoll Mitglied CAD Administrator
Beiträge: 43 Registriert: 22.01.2019 SolidWorks 2018 SP 5.0 Windows 10 Enterprise HP Z440 Workstation NVIDIA Quadro K2200
|
erstellt am: 03. Jul. 2019 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Guten Morgen, gibt es eine feste Nomenklatur für die Bezeichnungen? Wenn es nur 2-3 mögliche Varianten gibt (Blatt1, Sheet1, usw.) dann könnte man es doch mit einer IF-Funktion lösen. Über GetSheetNames die Namen auslesen und abgleichen. Nur eine Idee. Meine API Kenntnisse sind leider noch im Entstehen begriffen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 03. Jul. 2019 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2583 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 03. Jul. 2019 11:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, das hatte ich befürchtet, dass ich nur über den DocumentManager an die Informationen komme. Da müsste ich mir erst mal einen Lizenz-Key besorgen, da ich da bisher noch drum rum gekommen bin. Das Beispiel ist für NET programmiert. Weißt du ob das auch mit VBA funktioniert? Grüße und vielen Dank, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2583 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 03. Jul. 2019 12:26 <-- editieren / zitieren --> Unities abgeben:
Hallo StMoll, schön das du dich auch mit Vorschlägen meldest, obwohl du nicht so viel Erfahrung hast. Das allgemeine Problem ist, dass du normalerweise erst Informationen auslesen kannst, wenn das Dokument bereits geladen ist. Dann ist aber mein Ansinnen schon gelaufen, wenn eine aufwendige Zeichnung für den Aufbau 2 Minuten Zeit braucht. Der Wechsel zum Blatt1 braucht dann auch noch mal solange, und dies möchte ich ja vermeiden. Der Vorschlag von Carsten zielt darauf, noch vor dem Laden des Dokumentes die benötigten Informationen zu holen. Dazu ist aber die Document-Manager-API nötig, wozu du eine Lizenz von SW benötigst, die aber umsonst ist. Ein Beispielcode zum wechseln auf das erste Blatt wäre dieser: Code:
Dim swDraw As SldWorks.DrawingDoc Dim swSheet As SldWorks.Sheet Dim vSheetNames As Variant Dim bRet As Boolean vSheetNames = swDraw.GetSheetNames 'Namen aller Zeichenblätter Set swSheet = swDraw.Sheet(vSheetNames(0)) 'der Name des ersten Zeichenblattes bRet = swDraw.ActivateSheet(vSheetNames(0)) 'öffnen des ersten Zeichenblattes
Also, immer schön am Ball bleiben und neugierig bleiben. Mahlzeit, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StMoll Mitglied CAD Administrator
Beiträge: 43 Registriert: 22.01.2019 SolidWorks 2018 SP 5.0 Windows 10 Enterprise HP Z440 Workstation NVIDIA Quadro K2200
|
erstellt am: 03. Jul. 2019 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3281 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 03. Jul. 2019 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Zitat: … Der Vorschlag von Carsten zielt darauf, noch vor dem Laden des Dokumentes die benötigten Informationen zu holen. Dazu ist aber die Document-Manager-API nötig, wozu du eine Lizenz von SW benötigst, die aber umsonst ist …
@Andi falls du die Blattnamen irgendwo im PDM oder so abgelegt hast … (ist bei uns mit calink aber auch nicht gegeben) @StMoll und diese Documentmanager Lizenz hat 2 unangenehme Eigenschaften: - man darf sie nicht einfach so weitergeben - man muss für eine neue Version auch einen neuen Key einbauen. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 03. Jul. 2019 14:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hi Andi, Das sollte auch mit VBA gehen. Da mal einfach den Kram mit den Bildern weglassen. Den Key bekommst du eigentlich auch problemlos (meist) innerhalb von einem Arbeitstag. Du musst nur Wissen was du da alles haben willst weil der je nach Umfang unterschiedlich lang ist. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 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: 03. Jul. 2019 17:42 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi Anderer Ansatz Die Zeichnung in der Schnellansicht laden. (swDocSpecification.Selective = True) Die Blattnamen einlesen. (vSheetNames = swDraw.GetSheetNames) Zeichnung schliessen (swApp.QuitDoc swModel.GetTitle) Blattnamen zuweisen(swDocSpecification.SheetName = vSheetNames(0)) Zeichnung erneut öffnen (swDocSpecification.Selective = False) Code: Option Explicit Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDraw As DrawingDoc Dim vSheetNames As Variant Dim swDocSpecification As SldWorks.DocumentSpecification Dim sName As String Dim longstatus As Long, longwarnings As LongSub main() Dim sName As String Dim longstatus As Long, longwarnings As Long sName = "C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\advdrawings\foodprocessor.slddrw" Set swApp = Application.SldWorks Set swDocSpecification = swApp.GetOpenDocSpec(sName) swDocSpecification.DocumentType = swDocDRAWING swDocSpecification.Silent = True swDocSpecification.Selective = True Set swModel = swApp.OpenDoc7(swDocSpecification) longstatus = swDocSpecification.Error longwarnings = swDocSpecification.Warning Set swDraw = swModel vSheetNames = swDraw.GetSheetNames swApp.QuitDoc swModel.GetTitle swDocSpecification.Selective = False swDocSpecification.ReadOnly = True swDocSpecification.ConfigurationName = "" swDocSpecification.DisplayState = "" swDocSpecification.IgnoreHiddenComponents = True swDocSpecification.SheetName = vSheetNames(0) Set swModel = swApp.OpenDoc7(swDocSpecification) longstatus = swDocSpecification.Error longwarnings = swDocSpecification.Warning End Sub
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2583 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 04. Jul. 2019 07:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, Not macht erfinderisch, toller Ansatz, und das alles nur, weil mal wieder der direkte Befehl fehlt. Muss ich mal einen Vergleich starten, wieviel Zeit da verlustig geht. Da 99.9 % unserer Zeichnungen mit Blatt1 bezeichnet sind, werde ich das abwägen, ob das lohnt. Grüße auch, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2583 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 07. Jul. 2019 11:00 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Andi Beck:
Muss ich mal einen Vergleich starten, wieviel Zeit da verlustig geht.
Hallo, habe nun einen Vergleich gemacht und bin doch etwas überrascht. Die Version von Andreas ist fast immer um ca. 1 bis 2 Sekunden schneller. Einzig wenn die Zeichnung bereits geladen war, ist die direkte Definition des Blattes schneller. Warum das so ist, keine Ahnung, aber erfreulich ist es. (Die Zeiten habe ich Handgestoppt.) Schönen Sonntag auch, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |