| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | SOLIDWORKS 3D CAD Grundlagen E-Learning (SOLIDWORKS) |
Autor
|
Thema: wechsel von Zeichnung ins teil (2145 mal gelesen)
|
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 10:50 <-- editieren / zitieren --> Unities abgeben:
Folgender Fall: Ich habe eine Zeichnung geöffnet und in der Variable "partdateipfad" steht, wo das Teil liegt, das in der Zeichnung detailliert ist. Ich will nun mit dem Befehl (siehe nachstehend): Set SwApp = Application.SldWorks Set Draw = SwApp.ActiveDoc Set SelMgr = Part.SelectionManager 'boolstatus = Part.ActivateView("Zeichenansicht1") 'boolstatus = Part.Extension.SelectByID2("Zeichenansicht1", "DRAWINGVIEW", 0.1184391127542, 0.2058962107209, 0, False, 0, Nothing, 0) Set Draw = SwApp.OpenDoc6(partdateipfad, 1, 0, "", longstatus, longwarnings) Set Draw = SwApp.ActivateDoc2(Datei, False, longstatus) 'prt-Datei aktivieren SwApp.Visible = True Set Model = SwApp.ActiveDoc 'Index aus datei an wert1 übergeben wert1 = Model.CustomInfo("dateiindex") in dei Datei wechslen und den den wert1 auslesen. Dies haut bei Teilen und bei Zeichungen, die neu sind (seit es das Macro gibt) hin. Bei alten wechselt der Befehl nicht in die Part-Datei. Woran kan das leigen. Gibt es noch einen eifacheren Befehl, mit dem man von der Zeichung ins Teil wechselt??? Das Teil liegt übrigens genau da, wo auch die Zeichung leigt, und heißt auch genauso (Bis auf die Endung :-)) HIIIIIIIIIIIIIIIIIIILFEEEEEEEEEEEEEEEEE !!!!!
------------------ cma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lutz Federbusch Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau
Beiträge: 3094 Registriert: 03.12.2001 alle SW seit 97+ AutoCAD2016-2022 ERP ProAlpha + CA-Link Intel Core i7-7820K 32GB Win10x64 Quadro K5000 SpacePilot
|
erstellt am: 26. Okt. 2006 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Sind die alten schon gespeicherte und die neuen ungespeicherte? Dann kann es am Titel des Dokumentfensters liegen, weil entweder eine Endung dranhängt oder noch nicht... Du gibst ja Model nur das ActiveDoc. Interessant wäre, ob Du das auch vorher lädst oder ob es schon auf ist oder eben neu, da fehlt noch eine Zuweisung. ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? [Diese Nachricht wurde von Lutz Federbusch am 26. Okt. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 26. Okt. 2006 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hallo oma 1 Woher bekommst du den Parameter Datei, welchen du in folgendem Programmteil verwendest? Code: Set Draw = SwApp.ActivateDoc2(Datei, False, longstatus)
Ersetze diesen evtl. durch Draw.GetTitle, dann müsste dein Bauteil aktivert werden. Kann es aber auch sein das dein OpenDoc6 befehl nicht funktioniert? Ectl. ist das Bauteil schon im SolidWorks hintergrund geöffent, oder der Parameter partdateipfad ist nicht richtig belegt. Kleines Makro von mir welches ein Bauteil aktivert Code: Sub main() partdateipfad = "???" Set oSwApp = Application.SldWorks oSwApp.Visible = True Set oSwModel = swApp.ActiveDoc Set oSwDrawingModel = _ oSwApp.OpenDoc6( _ partdateipfad, 1, 0, "", _ longstatus, longwarnings) Set oSwDrawingModel = _ oSwApp.ActivateDoc2( _ oSwDrawingModel.GetTitle, False, longstatus) 'Index aus datei an wert1 übergeben wert1 = oSwDrawingModel.CustomInfo("dateiindex") End Sub
Die Belegung der Varible partdateipfad habe ich mit "???" gekennzeichnet, da ich nicht weis wo du diese Informationen her bekommst. Hinweis: Man kann den Pfad auch aus einer Ansicht der Zeichnung auslesen, nur als Vorschlag. Ich hoffe es hilft dir weiter!
------------------ Mfg Daniel Es gibt nur drei Möglichkeiten: Sieg, Unentschieden oder Niederlage ---------------------------------------------- Effektive Produktivitätswerkzeuge in der Konstruktion und Zeichnungserstellung. Automatisiert komplette Baugruppen, Teile und Zeichnungen nach Kundenvorgaben.
SolidWorks API Programmierung; Tools und Addin's für SolidWorks | kontakt@schuler-da.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 11:11 <-- editieren / zitieren --> Unities abgeben:
|
P.Reidel Mitglied
Beiträge: 53 Registriert: 17.12.2004 SolidWorks 2007
|
erstellt am: 26. Okt. 2006 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hallo oma1, ich übernehme das Objekt wenns geht direkt mit dem Dateinamen: retval = SldWorks.ActivateDoc2 ( name, silent, &errors ) In deinem Fall: Set Model = SwApp.ActivateDoc2 ("Pfad\Dateiname.sldprt", false, &errors ) Auch haben wir festgestellt, dass Dateien nicht immer geladen/geöffnet werden, wenn im (Windows-)Explorer die Dateianhänge nicht angezeigt werden. Grüße, Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 11:20 <-- editieren / zitieren --> Unities abgeben:
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 26. Okt. 2006 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hi zusammen, einwenig Senf hab ich auch noch. 1. Props sind CaseSensitiv und so sieht meine Lösung aus
Code:
Sub main() Set swApp = Application.SldWorks Dim partfile As String Dim mDoc As ModelDoc2 Dim pDoc As ModelDoc2 Dim lerr As Long Dim lWarn As Long Dim RetWert As String Dim cust As Variant Dim i As Integer On Error GoTo fail If Not swApp.ActiveDoc Is Nothing Then Set mDoc = swApp.ActiveDoc If mDoc.GetType = 3 Then partfile = Replace(LCase(mDoc.GetPathName), ".slddrw", ".sldprt") If FileSystem.FileLen(partfile) > 0 Then Set pDoc = swApp.OpenDoc6(partfile, 1, 0, "Default", lerr, lWarn) Call swApp.ActivateDoc2(pDoc.GetTitle, False, lerr) If lerr <> 0 Then Err.Raise -1, "FileOpen", "Fehler beim Öffnen der Datei " & partfile End If cust = pDoc.GetCustomInfoNames2("") For i = LBound(cust) To UBound(cust) If LCase(cust(i)) = "dateiindex" Then RetWert = pDoc.GetCustomInfoValue("", cust(i)) Exit For End If Next i Err.Raise -2, "FileOpen", "Dateieigenschaft nicht gefunden." Else Err.Raise -3, "FileOpen", "Datei nicht gefunden." End If Else Err.Raise -4, "FileOpen", "Kein Drawing geladen." End If Else Err.Raise -5, "FileOpen", "Kein Dokument geladen." End If Exit Sub fail: MsgBox "Fehler:" & Err.Number & vbCrLf & "Beschreibung:" & Err.Description, vbInformation + vbOKOnly End Sub
------------------ Manche Menschen gehen so plötzlich, daß die Zeit für einen Abschied nicht reicht… Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 15:13 <-- editieren / zitieren --> Unities abgeben:
@bd: Dein Programm haut zwar bei den alten Teilen hin, nur leider blockt es jetzt bei Baugruppen ab. Wenn ich mein altes Macro hernehme, kann ich erkenne, dass beim öffnen des Teils die Variable longstatus auf 2 gesetzt wird. Wenn das MAcro funktioniert, ist die Variable auf 0. Ich kann nicht herausfinden, was mir der longststus= 2 zu verstehen geben mag. Der lngstatus wird übrigends auf 2 gesetzt, wenn ich dein Macro bei Baugruppen verwende !!! Ich bin schon schier am verzweifeln !!!!!
------------------ cma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 15:39 <-- editieren / zitieren --> Unities abgeben:
Hab jetzt diese Fehelrmeldungen für longstatus gefunden: swIdMatchError swReadOnlyWarn swSharingViolationWarn swDrawingANSIUpdateWarn swSheetScaleUpdateWarn swNeedsRegenWarn swBasePartNotLoadedWarn swFileAlreadyOpenWarn swInvalidFileTypeError swDrawingsOnlyRapidDraftWarn swViewOnlyRestrictions swFutureVersion swViewMissingReferencedConfig swDrawingSFSymbolConvertWarn Wenn ich es richtig sehe, ist dann die 2 die Meldung
swReadOnlyWarn. Was soll das bedeuten?? Dass sie schriebgescütz ist ?? Ich will eh nur was auslesen, und nix schriebn !!!! ------------------ cma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 26. Okt. 2006 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hi, du musst beim Open Befehl nach sldprt oder sldasm unterscheiden. anstelle von swApp.OpenDoc6(partfile, 1, 0, "Default", lerr, lWarn) 'PART swApp.OpenDoc6(partfile, 2, 0, "Default", lerr, lWarn) 'ASSEMBLY Gruß Micha ------------------ Manche Menschen gehen so plötzlich, daß die Zeit für einen Abschied nicht reicht… Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 26. Okt. 2006 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hallo oma1, Bei dieser Variable handelt es sich eigentlich um eine SolidWorks Konstante, welche den Fehlertyp definiert! Diese Konstante kannst du durch einen Verweis auf die Constant Type Library in dein Makro einbinden, oder Sie direkt in deim Makro deklarieren: Code:
'Public Enum FileLoadError_ePublic Const swGenericError = 1 Public Const swFileNotFoundError = 2 Public Const swIdMatchError = 4 Public Const swReadOnlyWarn = 8 Public Const swSharingViolationWarn = 16 Public Const swDrawingANSIUpdateWarn = 32 Public Const swSheetScaleUpdateWarn = 64 Public Const swNeedsRegenWarn = 128 Public Const swBasePartNotLoadedWarn = 256 Public Const swFileAlreadyOpenWarn = 512 Public Const swInvalidFileTypeError = 1024 Public Const swDrawingsOnlyRapidDraftWarn = 2048 Public Const swViewOnlyRestrictions = 4096 Public Const swFutureVersion = 8192 Public Const swViewMissingReferencedConfig = 16384 Public Const swDrawingSFSymbolConvertWarn = 32768 Public Const swFileWithSameTitleAlreadyOpen = 65536
longstatus 2 bedeutet also das diese Datei nicht existriert! (Flascher Pfad) Wann wird dir dieser longstatus zurück gegeben, beim Befehl OpenDoc6 oder ActivateDoc2? ------------------ Mfg Daniel Es gibt nur drei Möglichkeiten: Sieg, Unentschieden oder Niederlage ---------------------------------------------- Effektive Produktivitätswerkzeuge in der Konstruktion und Zeichnungserstellung. Automatisiert komplette Baugruppen, Teile und Zeichnungen nach Kundenvorgaben.
SolidWorks API Programmierung; Tools und Addin's für SolidWorks | kontakt@schuler-da.de [Diese Nachricht wurde von tbd am 26. Okt. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 16:28 <-- editieren / zitieren --> Unities abgeben:
Bei openDoc6! Aber es gibt keinen Unterschied zu neuen und alten dateien. Es liegt immer die Zeichnung und das Teil im gleichen ordner !!! Aber was mir auffällt: Man muss beim opendoc ja angeben, ob man ein Teil, oder eine BG aufmachen will. Ich hab unwissend 1 (=part) angegeben. Das hat SW aber nicht gekümmert und es macht beides auf, ja nach dem was in der ZTeichung ist. Wenn SW das haben will, muss ich ja abfragen, was in der Zeichnung drinnen ist. Ob Part oder Baugruppe. Wie mach ich denn das ??? ------------------ cma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 26. Okt. 2006 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hallo Oma1, Man ermittelt auf welches Dokument sich die ersten Zeichnungsansicht bezieht. Dieses kann man dann weiter auswerten (durch Extension). Somit öffnest du immer das richtige Dokument! Mit dem im Beispiel befüllten Objekt oSwTeilModelDoc kannst du dann wieter arbeiten. Hier das Beispiel:
Code:
Option Compare TextDim oSwApp As SldWorks.SldWorks Dim oSwModelDoc As SldWorks.ModelDoc2 Dim lStatus As Long Dim lWarnings As Long Dim bstatus As Boolean Sub main() 'Daniel Bühling 'Schuler Design Automation GmbH 'Api-Programmierung / Schulung / Tools / Addins 'www.schuler-da.de Dim oSwDrawing As SldWorks.DrawingDoc Dim oSwTeilModelDoc As SldWorks.ModelDoc2 Dim oSwView As SldWorks.View Dim sModelPfad As String Dim lDocTyp As Long Set oSwApp = Application.SldWorks Set oSwModelDoc = oSwApp.ActiveDoc If oSwModelDoc.GetType = swDocDRAWING Then Set oSwDrawing = oSwModelDoc Set oSwView = oSwDrawing.GetFirstView 'Um das Zeichnungsblatt zu überspringen Set oSwView = oSwView.GetNextView If Not oSwView Is Nothing Then 'Referenz der ersten Ansicht ermitteln sModelPfad = oSwView.GetReferencedModelName 'Extension der Referen ermitteln Select Case Right(sModelPfad, 6) Case "sldprt" lDocTyp = swDocPART Case "sldasm" lDocTyp = swDocASSEMBLY Case Else lDocTyp = swDocNONE Debug.Assert (False) End Select If lDocTyp <> swDocNONE Then 'Teil oder Baugruppe der Zeichnung öffnen Set oSwTeilModelDoc = _ oSwApp.OpenDoc6( _ sModelPfad, lDocTyp, 0, "", _ lStatus, lWarnings) Set oSwDrawingModel = _ oSwApp.ActivateDoc2( _ oSwTeilModelDoc.GetTitle, False, lStatus) End If End If End If Set oSwDrawing = Nothing Set oSwView = Nothing End Sub
------------------ Mfg Daniel Es gibt nur drei Möglichkeiten: Sieg, Unentschieden oder Niederlage ---------------------------------------------- Effektive Produktivitätswerkzeuge in der Konstruktion und Zeichnungserstellung. Automatisiert komplette Baugruppen, Teile und Zeichnungen nach Kundenvorgaben.
SolidWorks API Programmierung; Tools und Addin's für SolidWorks | kontakt@schuler-da.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 26. Okt. 2006 17:36 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|