| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Auszubildende der HERMLE AG bei SolidCAM, eine Pressemitteilung
|
Autor
|
Thema: Einfügen Block per API (5598 mal gelesen)
|
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002 SolidWorks 2016 SP4.0 M6800 K3100 Win7 64bit Eplan P8 2.5 ARAS
|
erstellt am: 17. Jul. 2007 11:59 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielleicht gibts hier ein paar API Spezialisten die mir helfen können. Das Einfügen von Blöcken per API hat sich in SWX2007 geändert. Wenn ich nun den geänderten Befehl verwende: set swBlockDef = swSketchMgr.MakeSketchBlockFromFile(pos, "Hallo.SLDBLK", False, 1, 0) set swBlockInst = swSketchMgr.InsertSketchBlockInstance(swBlockDef, pos, 1, 0) dann bekomme ich zwar alles wie ich will nur der Name des Blocks entspricht nicht dem Namen der Datei "Hallo" sonder er wird im FeatureBaum einfach Block-1 genannt. Wenn ich den Block von Hand einfüge dann heist er "Hallo". Hat jemand eine Idee wie ich den Block dann "Hallo" genannte bekomme? ------------------ Gruß weinel 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: 17. Jul. 2007 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 17. Jul. 2007 12:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, genau das wars. Danke! Ich hatte das auch schon ausprobiert, aber man muss einen EditRebuild machen, damit man den geänderten Namen zu sehen bekommt. Das hatte ich nicht gemacht und deshalb dachte ich, dass es so nicht geht! Nochmal vielen Dank!
------------------ Gruß weinel 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: 17. Sep. 2007 16:49 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Hallo Spezialisten, an den Thread muss ich mich gleich anhängen, ich hab da auch ein älteres Programm, dass ich an SWX2007 anpassen muss, und auch ich scheitere am Einfügen des Blocks..aber schon an der Definition der Einfügeposition. (Die API ist mit der 2007 nicht wirklich durchschaubarer geworden ) Mit der Hilfe komme ich hier nicht weiter, und die C#-Beispiele bringen mir jetzt auch nicht gerade viel Wenn ich das mit dem Super-Macro-Recorder aufzeichne, bringt der mir an der Stelle, wo eigentlich die Position stehen sollte, ein "Nothing". Richtigerweise lässt sich das aufgenommene Macro auch nicht abspielen. Was mache ich denn hier falsch? Code: Dim swApp As Object Dim Part As ObjectDim swMathUtil As SldWorks.MathUtility Dim swMathPoint As SldWorks.MathPoint Dim newBlockDefinition As Object Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set swMathUtil = swApp.GetMathUtility Set SelMgr = Part.SelectionManager Dim pt(2) As Long ' oder as Double? pt(0) = 100 'irgendwelche Koordinaten zum Testen pt(1) = 100 pt(2) = 0 Hier bleibts stecken: swMathPoint = swMathUtil.CreatePoint(pt) 'CreatePoint will laut Hilfe ein "ArrayData" als Input..wieso frisst der mein Array nicht? Ist ja auch ein schmarrn...warum reichen hier nicht einfach die Koordinaten? 'so müsste es dann (vielleicht) weiter gehen, aber soweit bin ich noch nicht gekommmen: Set newBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile _ (swMathPoint, "c:\temp\testblock.sldblk", False, Nothing, 1, 0) set swBlockInst = swSketchMgr.InsertSketchBlockInstance(newBlockDefinition , swMathPoint, 1, 0) 'Zu was eigentlich nochmal einfügen, die Position wurde doch schon bei "MakeSketchBlockFromFile" mitgegeben? End Sub
Mann war das früher schön einfach: Set Block = Part.InsertBlock(BlockName, X, Y, 0, 1) Basta Nix mit tausend Objekten rummachen und zig dinge definieren, die keiner braucht. Da wurde die API gehörig verschlimmbessert. "Objektorientiertes Programmieren" ist ja schön und gut, aber man kann auch alles übertreiben.. Ups...gehört ja gar nicht hier her, musste aber mal raus.
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... 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: 17. Sep. 2007 21:10 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Hallo Klaus, nicht gleich aufgeben! Der Laufzeitfehler 91 müsste dir doch eigentlich bekannt sein. Zumindest der Hinweis: "Objektvariable oder With-Blockvariable nicht festgelegt" gibt dir bereits den Hinweis! Aber ich weis wie schwer es ist, wenn man eine Zeit in .Net programmiert, an das Set bei vb6 und somit auch in der SolidWorks VBA zu denken. Also einfach dein MathPoint mit folgender Zeile belegen:
Code: Set swMathPoint = swMathUtil.CreatePoint(pt)
Die Funktion habe ich weiter nicht getestet. Wenn es Probleme gibt, wie immer einfach melden!Gruß aus Nürnberg ------------------ Mfg Daniel Wer A sagt, der muss nicht B sagen. Er kann auch erkennen, dass A falsch war. Bertolt Brecht ------------------ VBasic / vb.net / vbs / wsh | Freeware 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: 18. Sep. 2007 09:00 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Danke, da hätte ich vielleicht auch drauf kommen können/müssen/sollen...aber manchmal..naja. Nach Lektüre vom Beitrag Makro für Oberflächenbeschaffenheit und Bearbeitungsangaben bi ich jetzt darauf gekommen, dass die nächste Zeile auch falsch war, da war ein "Nothing" zuviel drin..obwohl diese Syntax vom Super-Macro-Recorder stammt. Die muss also heißen Code: Set newBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile _ (swMathPoint, "c:\temp\testblock.sldblk", False, 1, 0)
Ach ja, Pt muss natürlich als Double definiert sein, nicht als Long So, der Block kommt jetzt. Aber an der nächsten Zeile ist wieder Schluss:
Code: Set swBlockInstance = Part.SketchManager.InsertSketchBlockInstance(newBlockDefinition, swMathPoint, 1, 0)
bringt wieder den Laufzeitfehler 13: Typen unverträglich. Auch die Variante von der Seite blog.inflow-tech.com
Code: vInstances = swSketchBlockDef.GetInstances Set BlockInstance1A = vInstances(0)
macht da keinen Unterschied. Aber ich denke, auf diese Instanzierung kann ich erst mal verzichten, da ich die Blöcke nur absetzen muss, nicht weiter damit arbeiten.Uff...
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 18. Sep. 2007 09:37 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von KMassler: Aber an der nächsten Zeile ist wieder Schluss:
Code: Set swBlockInstance = Part.SketchManager.InsertSketchBlockInstance(newBlockDefinition, swMathPoint, 1, 0)
bringt wieder den Laufzeitfehler 13: Typen unverträglich.
Wie hast du denn die Variable SwBlockInstance definiert? ------------------ Gruß weinel 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: 18. Sep. 2007 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 18. Sep. 2007 10:08 <-- editieren / zitieren --> Unities abgeben:
|
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: 18. Sep. 2007 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 18. Sep. 2007 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 18. Sep. 2007 14:49 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Zitat: Original erstellt von mkkk: So ist's besser:Set swMathPoint = swMathUtil.CreatePoint((pt))
...Der Einfügepunkt liegt nicht mehr im Zeichnungs-Dokument- Koordinatensystem, sondern im Koordinatensystem der jeweiligen Zeichenansicht. 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: 18. Sep. 2007 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 19. Sep. 2007 11:37 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Die doppelte Klammerung bei der Parameterübergabe sollte man immer im Hinterkopf behalten. Denn hiermit wird Basic gezwungen den Variablentyp in den Parametertyp der Funktion zu konvertieren, was nicht immer automatisch korrekt funktioniert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 19. Sep. 2007 13:47 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Hallo Forum, nachdem ich beim Thema Makro/VB bis jetzt nur immer intressiert gelesen habe, habe ich mich mittlerweilen für einen VB Kurs entschieden und diesen auch gerade begonnen. Nun jucken natürlich die Finger und ich möchte mir ein Helferlein bauen, das schon länger in meinem Kopf rumspukt. Ich möchte via Makro ein Formular aufrufen auf dem Auswahlfelder für diverse Blöcke vorhanden sind. Dort soll anfewählt werden welche Blöcke auf der Zeichnung plaziert werden sollen. So weit so gut. Nun stehe ich zur Zeit bei genau diesem MathPoint an der hier im Beitrag behandelt wurde. Wenn ich mein Makro jetzt aufrufe erscheint prima mein Formular aber wenn ich meine Haken setze und Einfügen klicke bekomme ich einen: Laufzeitfehler '91':Objektvariable oder With-Blockvariable nicht festgelegt. Option Explicit
Dim swApp As Object Dim Part As Object Dim swMathUtil As SldWorks.MathUtility Dim swMathPoint As SldWorks.MathPoint Dim newBlockDefinition As Object Dim swBlockInstance As SldWorks.SketchBlockInstance Dim pt(2) As Double Sub cmdEinfuegen_Click() If cbxChemischBrueniert = True Then Set swMathPoint = swMathUtil.CreatePoint((pt)) pt(0) = 100 pt(1) = 100 pt(2) = 0 Set newBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(swMathPoint, "R:\22 Engineering\CH20\KONSTR\BibSW\TextBloecke\Beschichtung\Galvanob_Chemisch_Brünieren.SLDBLK", False, 1, 0) End If Unload Me End Sub Sub cmdAbbrechen_Click() Unload Me End Sub Kann mir jemand sagen was ich vergessen habe?
Wäre dankbar wenn mir jemand vom Schlauch runter hilft.
------------------ Bis demnächst! Hans Meiser 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: 19. Sep. 2007 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Zitat: Original erstellt von Hans Meiser: Kann mir jemand sagen was ich vergessen habe?
Hallo Hans, wenn ich mir deine Code, auf die Schnelle und ohne zu Testen anschaue, würde ich sagen: Nichts vergessen sondern nur verdreht! Dein Punkt ist noch leer:
Code:
pt(0) = 100 pt(1) = 100 pt(2) = 0 Set swMathPoint = swMathUtil.CreatePoint((pt))
So rum ist es besser! ------------------ Mfg Daniel Wer A sagt, der muss nicht B sagen. Er kann auch erkennen, dass A falsch war. Bertolt Brecht ------------------ VBasic / vb.net / vbs / wsh | Freeware Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 19. Sep. 2007 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 19. Sep. 2007 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Danke für die Hilfe, habe jetzt wie folgt korrigiert: Option Explicit Dim swApp As Object Dim Part As Object Dim swMathUtil As SldWorks.MathUtility Dim swMathPoint As SldWorks.MathPoint Dim newBlockDefinition As Object Dim swBlockInstance As SldWorks.SketchBlockInstance Dim pt(2) As Double Sub cmdEinfuegen_Click() Set swMathUtil = swApp.GetMathUtility ' Hier bleibt er nun mit Laufzeitfehler 91 stehen??? If cbxChemischBrueniert = True Then pt(0) = 100 pt(1) = 100 pt(2) = 0 Set swMathPoint = swMathUtil.CreatePoint((pt)) Set newBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(swMathPoint, "R:\22 Engineering\CH20\KONSTR\BibSW\TextBloecke\Beschichtung\Galvanob_Chemisch_Brünieren.SLDBLK", False, 1, 0) End If Unload Me End Sub Sub cmdAbbrechen_Click() Unload Me End Sub Kann mir nochmals jemand einen Input geben?
Danke ------------------ Bis demnächst! Hans Meiser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 19. Sep. 2007 15:21 <-- editieren / zitieren --> Unities abgeben:
Mal ein Verbesserungsvorschlag (habs nicht getestet): Option Explicit
Dim swApp As Object Dim Part As SldWorks.ModelDoc2 Dim swMathUtil As SldWorks.MathUtility Dim swMathPoint As SldWorks.MathPoint Dim newBlockDefinition As Object Dim swBlockInstance As SldWorks.SketchBlockInstance Dim pt(2) As Double Sub cmdEinfuegen_Click() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set swMathUtil = swApp.GetMathUtility If cbxChemischBrueniert = True Then pt(0) = 100 pt(1) = 100 pt(2) = 0 Set swMathPoint = swMathUtil.CreatePoint((pt)) Set newBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(swMathPoint, "R:\22 Engineering\CH20\KONSTR\BibSW\TextBloecke\Beschichtung\Galvanob_Chemisch_Brünieren.SLDBLK", False, 1, 0) End If Unload Me End Sub Sub cmdAbbrechen_Click() Unload Me End Sub ------------------ Gruß weinel [Diese Nachricht wurde von weinel am 19. Sep. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 19. Sep. 2007 15:52 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
DANKE! Es funktioniert! Nur die Koordinaten werden in Meter interpretiert, aber das ist ja weiter kein Problem! U's sind untertwegs und wenn mein Helferlein fertig ist werde ich es euch wissen lassen.
------------------ Bis demnächst! Hans Meiser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jörg W Mitglied Maschinenbautechniker und CAD Admin
Beiträge: 1232 Registriert: 12.07.2001 Win 10 64bit SW2018 SP5 HP z240 16GB Ram Quadro P1000
|
erstellt am: 08. Okt. 2007 15:57 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 09. Okt. 2007 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Hallo zusammen, da mir einige von euch geholfen haben mein Blöcke Einfügen Makro zum laufen zu bringen, stelle ich die erste Version jetzt auch hier zur Verfügung. Vielleicht kanns ja jemand für sich anpassen und gebrauchen. Vielen Dank nochmals für die Hilfe!! ------------------ Bis demnächst! Hans Meiser 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: 10. Okt. 2007 07:39 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 10. Okt. 2007 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Voilà, hier noch eine etwas überarbeitete Version meines Block Makros (habe noch Härten eingefügt) inkl. der Blöcke. Die oberste Verzeichnis Struktur muss halt angepasst werden. ------------------ Bis demnächst! Hans Meiser 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: 10. Okt. 2007 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Da scheint beim Upload was schief gelaufen zu sein, ich seh keinen Unterschied in den Zip-Dateien. Du hast in deinem Makro sehr viele Wiederholungen drin, das bläht das Makro extrem auf und macht es auch schwierig bzw. aufwändig, das zu pflegen. Ich hab mir mal erlaubt, es "gesundzuschrumpfen" Testen konnte ich das Ergebnis allerdings nicht, da ich deine Blöcke nicht habe. Probiers mal aus, könnte sein, dass ich den einen oder anderen Faktor verwurschtelt hab. Gruß Klaus ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 10. Okt. 2007 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Danke für den Hinweis, dass es bezüglich Übersichtlichkeit langsam etwas eng wurde hatte ich auch schon bemerkt, aber es ist halt so vor sich hin gewachsen und hat ja funktioniert. Deine kurze Variante scheint auf den ersten Blick auch zu funktionieren, werde sie mir mal noch näher anschauen um zu lernen. Es ist eigentlich mein erstes "selbst" erstelltes Makro und vor einem Monat habe ich davon nur Bahnhof verstanden. Von daher bin froh um konstruktive Kritik. Habe noch die Blöcke angehängt. ------------------ Bis demnächst! Hans Meiser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jörg W Mitglied Maschinenbautechniker und CAD Admin
Beiträge: 1232 Registriert: 12.07.2001 Win 10 64bit SW2018 SP5 HP z240 16GB Ram Quadro P1000
|
erstellt am: 10. Okt. 2007 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
Hans Meiser Mitglied CAD/PLM-Supporter / CSWP
Beiträge: 84 Registriert: 09.05.2003 SolidWorks 2009 SP5.1 (produktiv) Aigle 5.1 (PLM) proAlpha (ERP) WinXP x64 Prof. SP.2.0 HP XW 4400 8GB RAM FX 3500 Treiber 6.14.10.9136
|
erstellt am: 10. Okt. 2007 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Hallo Jörg, falls Stefan meinen Spagetti-Code brauchen kann, darf er das natürlich aufnehmen und die Blöcke sind sicher auch kein Staatsgeheimnis. Ansonsten müsste man die kurze Version von Klaus noch näher ansehen, aber dafür habe ich zur Zeit nur sehr wenig Zeit.
------------------ Bis demnächst! Hans Meiser 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: 10. Okt. 2007 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
So, dank der nun vorhandenen Textblöcke hab ichs direkt mal testen können..und natürlich nen groben Schnitzer gefunden. Aber der ist behoben, mit dieser Version funktionierts (bei mir). Allerdings fehlen noch die Textblöcke für die Farben, aber die kann sich ja jeder selber schnitzen. Ach, mir ist an deinem Code noch was aufgefallen, du hast da mehrmals so Stellen wie
Code: If obGasnitrieren Or obOxy90 Or obNiRo = True Then 'Kontrolle ob ein Thermischer Block ausgewählt ist ThermischGesetzt = 1 Else: ThermischGesetzt = 0 End If
Nach dem "Else" darfst du nicht in der gleichen Zeile weiter machen, da setzt VBA automatisch einen : dahinter (keine Ahnung was das soll), ich hab jetzt nicht getestet, ob das trotzdem richtig ausgewertet wird, wäre aber komisch. Mit dem Doppelpunkt wird eine Sprungmarke für den Goto-Befehl markiert. Sollte man aber vermeiden, sonst wird's wirklich Spagetti-Code. Richtiger wäre
Code: If obGasnitrieren Or obOxy90 Or obNiRo = True Then 'Kontrolle ob ein Thermischer Block ausgewählt ist ThermischGesetzt = 1 Else ThermischGesetzt = 0 End If
Nächster Punkt, der mir gerade aufgefallen ist:
Code: If obGasnitrieren Or obOxy90 Or obNiRo = True Then ...
Das "= True" bezieht sich in diesem Fall nur auf das obNiRo. Und ist eigentlich überflüssig, da die Controls selber True oder False zurückgeben, es würde reichen
Code: If obGasnitrieren Or obOxy90 Or obNiRo Then ...
, das hätte den gleichen Effekt. Ganz richtig ist das aber auch nicht, denn eigentlich fragst du hier, ob das Objekt vom Typ OptionButton dir True oder False liefert, tatsächlich steckt das aber in der Objekt-Eigenschaft "Value" dieses Objekttyps drin. Es funktioniert zwar, aber nur weil VBA hier beide Augen zudrückt. Ganz eigentlich müsste das heißen
Code:
If obGasnitrieren.value Or obOxy90.value Or obNiRo.value Then ...
Übrigens: da es ja funktioniert, war ich zu faul, das in dem Makro überall zu korrigieren ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... [Diese Nachricht wurde von KMassler am 10. Okt. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jörg W Mitglied Maschinenbautechniker und CAD Admin
Beiträge: 1232 Registriert: 12.07.2001 Win 10 64bit SW2018 SP5 HP z240 16GB Ram Quadro P1000
|
erstellt am: 10. Okt. 2007 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
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: 10. Okt. 2007 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|
Baumjäger Mitglied CAD/PDM Administrator
Beiträge: 339 Registriert: 21.06.2006 SW2017 - S5.0 AutoCAD Mechanical 2018 Win10 Intel Xeon E3-1240 V2 3,4GHz 16GB RAM NVIDIA Quadro 4000
|
erstellt am: 07. Apr. 2008 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Hallo, Erstmal ein verspätetes Danke für das Makro, jetzt kann ich endlich auch Blöcke einfügen Für alle blutigen Anfänger (wie z.B. ich) hab ich das Makro mal auf minimal heruntergeschreddert. Also keine Fehlerabfragen mehr und nur einen einzigen Block einfügen. viele Grüße Andy [Diese Nachricht wurde von Baumjäger am 07. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
swx-cad-nutzer Mitglied Konstr
Beiträge: 411 Registriert: 15.06.2011 SWX 2023 SP 4.0 64 bit
|
erstellt am: 28. Nov. 2018 07:54 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Hallo Zusammen, Leider komme ich damit nicht weiter.
Ich würde gernee einen Einizigen Block per Makro einfügen, welcher abgelegt in der konstruktionsbibliothek liegt. Dieser soll Abhängig von der Blattgrösse rechts unten im Schriftfeld (nachplaziert in vorhandenen Zeichnungen) platziert werden. Die Makroaufzeichnung kannst glatt vergessen. Danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 28. Nov. 2018 08:13 <-- editieren / zitieren --> Unities abgeben:
|
weinel Mitglied
Beiträge: 464 Registriert: 04.09.2002 SolidWorks 2016 SP4.0 M6800 K3100 Win7 64bit Eplan P8 2.5 ARAS
|
erstellt am: 28. Nov. 2018 08:13 <-- editieren / zitieren --> Unities abgeben:
|
swx-cad-nutzer Mitglied Konstr
Beiträge: 411 Registriert: 15.06.2011 SWX 2023 SP 4.0 64 bit
|
erstellt am: 28. Nov. 2018 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Danke, Das kann schon sein, momentan landet der Block über mein Makro (aufgezeichnet) auf links unten (0,0) besser wäre: A4 Blatt X= 155/ Y= 22 A3 Blatt X= 360/ Y= 28 A2 Blatt X= 535/ Y= 28 A1 Blatt X= 780/ Y= 28 A0 Blatt X= 1130/ Y= 28 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: 28. Nov. 2018 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Du kannst mit GetProperties2 die Blattgrösse herausfinden und den Einfügepunkt danach setzten. Hier einmal der Code aus meinem ergänzten Makro. Die Koordinaten des Punktes muss du noch nach deinen Bedürfnissen anpassen. Code: Option ExplicitDim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDraw As SldWorks.DrawingDoc Dim swSheet As SldWorks.Sheet Dim swView As SldWorks.View Dim swSketchBlockDef As SldWorks.SketchBlockDefinition Dim swMathUtil As SldWorks.MathUtility Dim swMathPoint As SldWorks.MathPoint Dim nPt(2) As Double Dim vPt As Variant Dim SheetProps As Variant Dim PaperSize As Single Dim Massstab As Single Const BlockPfad As String = "S:\Engineering\SWX_TZTW\SWX-Blöcke\STB-Freigabe.SLDBLK" Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If swModel Is Nothing Then MsgBox "Kein Dokument geöffnet!" End End If ' Prüfen, ob Zeichnung geöffnet ist If swModel.GetType <> swDocDRAWING Then MsgBox "Aktives Dokument ist keine Zeichnung!" End End If Set swDraw = swModel Set swSheet = swDraw.GetCurrentSheet swSheet.FocusLocked = True SheetProps = swSheet.GetProperties2 'see swDwgPaperSizes_e for values ' what is the 5th (the width) PaperSize = SheetProps(5) * 1000 '/ 25.4 Massstab = SheetProps(2) / SheetProps(3) ' Define an insertion point 'nPt(0) = 60# / 1000# / Massstab nPt(1) = 48# / 1000# / Massstab nPt(2) = 0# Select Case PaperSize Case 210 nPt(0) = 202# / 1000# / Massstab nPt(1) = 80# / 1000# / Massstab Case 297 nPt(0) = 100.4 / 1000# / Massstab nPt(1) = 12# / 1000# / Massstab Case 420 nPt(0) = 412# / 1000# / Massstab Case 594 nPt(0) = 586 / 1000# / Massstab Case 841 nPt(0) = 833# / 1000# / Massstab Case 1189 nPt(0) = 1181 / 1000# / Massstab Case Else MsgBox "Aktuelles Blatt hat kein Standardformat!!!", vbOKOnly, "Blattformat Fehler" Exit Sub End Select vPt = nPt Set swMathUtil = swApp.GetMathUtility Set swMathPoint = swMathUtil.CreatePoint(vPt) ' Insert an instance of the block definition Set swSketchBlockDef = swDraw.SketchManager.MakeSketchBlockFromFile(swMathPoint, BlockPfad, True, 1, 0) swSheet.FocusLocked = False swDraw.ClearSelection2 True End Sub
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 727 Registriert: 17.01.2007 SWX 2023 SP5 Draftsight 2023 Win 11 Enterprise Intel i7-13700 2.10 GHz 64GB RAM Nvidia RTX A2000 12GB SWx EPDM AP+ CSWE 2018
|
erstellt am: 28. Nov. 2018 09:23 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Code:
Dim swSheet As SldWorks.Sheet Dim swMathPoint As SldWorks.MathPoint Dim swMathUtility As SldWorks.MathUtility Dim pointsArray(2) As DoubleSub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc If Part Is Nothing Then MsgBox "Keine Zeichnung geöffnet!" End Else If Part.GetType <> swDocDRAWING Then MsgBox "Funktioniert nur in Zeichnungen!", vbCritical End End If End If Set swSheet = Part.GetCurrentSheet vSheetProps = swSheet.GetProperties vMaßstab = vSheetProps(3) / vSheetProps(2) Set swMathUtility = swApp.GetMathUtility Select Case vSheetProps(5) Case 1.189 'A0 pointsArray(0) = (vSheetProps(5) - 0.19606) * vMaßstab 'X pointsArray(1) = 0.01428 * vMaßstab 'Y Case 0.841 'A1 pointsArray(0) = (vSheetProps(5) - 0.19713) * vMaßstab pointsArray(1) = 0.01766 * vMaßstab Case 0.594 'A2 pointsArray(0) = (vSheetProps(5) - 0.20122) * vMaßstab pointsArray(1) = 0.01468 * vMaßstab Case 0.42 'A3 pointsArray(0) = (vSheetProps(5) - 0.19473) * vMaßstab pointsArray(1) = 0.01276 * vMaßstab Case 0.21 'A4 pointsArray(0) = (vSheetProps(5) - 0.00508) * vMaßstab pointsArray(1) = 0.075514 * vMaßstab End Select pointsArray(2) = 0 'Z pointsArr = pointsArray Set swMathPoint = swMathUtility.CreatePoint(pointsArr) Vorlage = "D:\ ... .SLDBLK" Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(swMathPoint, Vorlage, False, 1, 0) End Sub
Der Block aus dem Makro wird hier bei uns links neben das Schriftfeld geklatscht, für deinen Fall musst du halt die "Korrekturwerte" (0.19606 etc.) entsprechend anpassen. Am einfachsten geht das IMHO, wenn man das Makro für jede Blattgröße laufen lässt, den Unterschied auf der Zeichnung ausmisst und im Makro korrigiert. Gruß, Jens ------------------ CSWE =) 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: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 28. Nov. 2018 11:02 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
Zitat: Original erstellt von SWX-cad-nutzer: ... abhängig von der Blattgrösse rechts unten im Schriftfeld (nachplaziert in vorhandenen Zeichnungen) platziert werden.
Hallo, ist das evtl ein Fall für ein "Blattformat neu laden"? Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
swx-cad-nutzer Mitglied Konstr
Beiträge: 411 Registriert: 15.06.2011 SWX 2023 SP 4.0 64 bit
|
erstellt am: 28. Nov. 2018 12:51 <-- editieren / zitieren --> Unities abgeben: Nur für weinel
|