| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Wütschner Technologie-Tage, eine Veranstaltung am 17.10.2024
|
Autor
|
Thema: Flächen im Bauteil über UserForm auswählen (1366 / mal gelesen)
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 14. Mrz. 2022 15:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich möchte folgendes verwirklichen. Ich möchte über ein UserForm ein Rohr zeichnen. Hier werden die Daten Radius, Offset und Tiefe eingegeben. Nun möchte ich nicht nur die gesamte Oberfläche berechnen sondern eine Fläche in dem erstelltem Teil anklicken und dieses berechnen. Leider bin ich mit bisherigen Foreneinträge nicht weiter gekommen. Gibt es überhaupt die Möglichkeit dies über ein UserForm zu machen? Ich bedanke mich und schon mal und hoffe, dass mir jemand weiter helfen kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 125 Registriert: 03.11.2021 CAD: SOLIDWORKS 2024 SP3.1 PDM: SpeedyPDM 7.5.7 ------------------------ CPU: Intel Core i7-10700 @ 2.90GHz GPU: NVIDIA Quadro RTX4000 RAM: 64 GB Datenträger: SSD
|
erstellt am: 14. Mrz. 2022 17:22 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 15. Mrz. 2022 08:14 <-- editieren / zitieren --> Unities abgeben:
Genau für ein gerades Rohr. Leider kann ich nicht auf das Teil zugreifen solange die UserForm offen ist. Mein zweiter Ansatz wäre eine zweite UserForm zu erstellen und davor schon die Flächen markieren. Über die Evaluierung/Messen ist ein ähnlicher Vorgang zu sehen, diesen würde ich gerne ähnlich einbauen. Ich bedanke mich für weitere Tipps Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 15. Mrz. 2022 09:57 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2019 Solidworks 2021 Sp5.1 Enterprise PDM 2021 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Dell Ultrasharp U2415 Dell M4800
|
erstellt am: 15. Mrz. 2022 10:00 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hi Sarah, Du meinst sicherlich das der Anwender nichts in Solidworks selektieren kann während die Userform angezeigt wird. Das "blocken" wird darüber gesteuert ob die Form Modal ist oder nicht. Schau mal bei deiner Form was bei der Eigenschaft "ShowModal" eingetragen ist. Stell das mal um und du solltest in Solidworks Elemente auswählen können. Hier mal eine Erklärung dazu. Gruss, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 15. Mrz. 2022 13:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Manfred, so wie in deinem Video beschrieben soll es am Ende aussehen. Besitzt du dann eine Formel die ausschließlich die Oberfläche von den Körper berechnet? Gibt es die Möglichkeit, dass das Programm erkennt um welchen Körper es sich handelt und die richtige Formel verwendet, so wie bei dem manuellen messen? Grüße Sarah Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 15. Mrz. 2022 13:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, vielen Dank für den Hinweis diese Einstellung ermöglicht es mir endliche eine Fläche zu markieren. Nur muss ich erst schauen wie ich die Auswahl dem Programm übermittel. Grüße Sarah Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 15. Mrz. 2022 13:42 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo SarahTKM. Meinst du im Prinzip so was? Wenn du das als Makro oder VB Anwendung programmieren willst, hilft dir das SolidWorks Part Event NewSelectionNotify weiter.Gruß Manfred
Leider finde ich nicht wirklich was zu SolidWorks Part Event NewSelectionNotify. Gibt es vielleicht irgendwo ein Beispiel anhand dem ich es besser verstehen könnte? Vielen Dank sarah Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 15. Mrz. 2022 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hallo. Vorgehensweise als grobes Gerüst : Deklaration im Programm Public WithEvents pDoc As SldWorks.PartDoc Im Programm das aktive SW Dokument zuweisen pDoc = swapp.activedoc dann auf das Event reagieren Private Function pDoc_UserSelectionNotify() As Integer Handles pDoc.NewSelectionNotify ......dein Code End Function In der API Hilfe auch mal nach Notify Event nachschauen. Gruß Manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 125 Registriert: 03.11.2021 CAD: SOLIDWORKS 2024 SP3.1 PDM: SpeedyPDM 7.5.7 ------------------------ CPU: Intel Core i7-10700 @ 2.90GHz GPU: NVIDIA Quadro RTX4000 RAM: 64 GB Datenträger: SSD
|
erstellt am: 15. Mrz. 2022 16:50 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 16. Mrz. 2022 15:18 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo.Vorgehensweise als grobes Gerüst : Deklaration im Programm Public WithEvents pDoc As SldWorks.PartDoc Im Programm das aktive SW Dokument zuweisen pDoc = swapp.activedoc dann auf das Event reagieren Private Function pDoc_UserSelectionNotify() As Integer Handles pDoc.NewSelectionNotify ......dein Code End Function In der API Hilfe auch mal nach Notify Event nachschauen. Gruß Manfred
Hallo Manfred, ich hab etwas gebraucht um diese ganze Notify Event Lektion besser zu verstehen. Woher weiss ich aber in welchen Format die Informationen der angeklickten Fläche verwendet werden? Wird es auch mit selectbyRay dargestellt? boolstatus= Part.Extension.selectByRay(WorldX,WorldY,WorldZ,RayVecZ,RayRadius,TypeWanted,Append,Mark,Option) Meine bisherige Berechnung habe ich durch diese Funktion (siehe Unten) abgedeckt. Diese berechnet aber die komplette Oberfläche des Rohrs nach Eingabe der Parameter: Radius,Tiefe, Offset. Ziel ist es, dass die einzelnen Flächen berechnet werden können. Wie kann ich hier eine Berechnung eingeben die auch unterschiedliche Oberflächen berechnet, hier Mantel, und Außenfläche ect. In deinem Video hast du unterschiedliche Koordinaten verwendet für die Flächen. Ich hoffe ich konnte mein Problem besser erklären und bedanke mich für weitere Tipps. ___________________________________________________________________ Public Sub OberflächenBerechnung(InputRadius As Double, InputOffset As Double, InputTiefe As Double) 'Variablen erstellen Dim Radius As Double Dim Offset As Double Dim Tiefe As Double 'Werte für Radius, Offset und Tiefe werden gesetzt Radius = InputRadius Offset = InputOffset Tiefe = InputTiefe 'Berechnung der Oberfläche Dim Oberfläche As Double Dim PI As Double PI = 3.1415926535 'Oberfläche = 1 + PI Oberfläche = PI * (Radius + (Radius - Offset)) * ((1 / 2) * (Radius - (Radius - Offset)) + Tiefe) MsgBox (Oberfläche) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 16. Mrz. 2022 15:19 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von R3vo: Ein gerades Rohr hat 4 Flächen. Wieso muss ich die vorher auswählen um die Oberfläche zu berechnen. Ich kann diese doch auch einfach direkt nach dem Erstellen ausgeben?
Hallo R3vo, ich möchte nicht immer die gesamte Oberfläche berechnen, sondern nur Teilflächen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 125 Registriert: 03.11.2021 CAD: SOLIDWORKS 2024 SP3.1 PDM: SpeedyPDM 7.5.7 ------------------------ CPU: Intel Core i7-10700 @ 2.90GHz GPU: NVIDIA Quadro RTX4000 RAM: 64 GB Datenträger: SSD
|
erstellt am: 16. Mrz. 2022 17:26 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Zitat: Original erstellt von SarahTKM:
Hallo R3vo, ich möchte nicht immer die gesamte Oberfläche berechnen, sondern nur Teilflächen.
Musst du ja nicht. Ich kann dir die Kreisflächen und innere sowie äußere Mantelflächen einzeln, auch ohne Auswählen ausrechnen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 16. Mrz. 2022 17:35 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von R3vo:
Musst du ja nicht. Ich kann dir die Kreisflächen und innere sowie äußere Mantelflächen einzeln, auch ohne Auswählen ausrechnen.
Wie genau meinst du das? Das ich im Hintergrund alle Flächen schon berechne und durch Anklicken nur der Wert dann angezeigt wird? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 125 Registriert: 03.11.2021 CAD: SOLIDWORKS 2024 SP3.1 PDM: SpeedyPDM 7.5.7 ------------------------ CPU: Intel Core i7-10700 @ 2.90GHz GPU: NVIDIA Quadro RTX4000 RAM: 64 GB Datenträger: SSD
|
erstellt am: 16. Mrz. 2022 19:04 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 17. Mrz. 2022 14:00 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von R3vo: Wieso extra anklicken, ich kann doch einfach eine Grafik in einer Userform einblenden und dort die Werte der Flächen anzeigen.[Diese Nachricht wurde von R3vo am 16. Mrz. 2022 editiert.]
Wie genau machst du diese Anzeige ? Ich habe erst seit 2 Wochen angefangen mit der Makroprogrammierung und bin für jeden Hinweis dankbar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 17. Mrz. 2022 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hallo SarahTKM Über die angewählte Fläche kann man per API die Oberfläche ermitteln. Stichwort in der API : MEASURE Ein Beispiel ist in der APi : Measure Selected Entities Example Man braucht also keine eigene Formel. Hier das Beispiel. Für die Oberfläche wäre Measure.Area vorhanden Public Sub main() Dim swModel As ModelDoc2 Dim swModelDocExt As ModelDocExtension Dim swMeasure As Measure Dim status As Boolean Dim errors As Integer Dim warnings As Integer Dim fileName As String fileName = "C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\dimxpert\coupling_auto_geo.sldprt" swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_ReadOnly, "", errors, warnings) swModelDocExt = swModel.Extension status = swModelDocExt.SelectByID2("", "FACE", -0.00382117299216134, -0.0032246917626253, -0.00153854043344381, False, 0, Nothing, 0) status = swModelDocExt.SelectByID2("", "FACE", 0.00547600669648318, 0.00252191841298099, 0.0050000000000523, True, 0, Nothing, 0) swMeasure = swModelDocExt.CreateMeasure 'Can set this to 0 ' 0 = center to center ' 1 = minimum distance ' 2 = maximum distance swMeasure.ArcOption = 0 status = swMeasure.Calculate(Nothing) If (status) Then If (Not (swMeasure.Length = -1)) Then Debug.Print("Length: " & swMeasure.Length) End If If (Not (swMeasure.Area = -1)) Then Debug.Print("Area: " & swMeasure.Area) End If If (Not (swMeasure.ArcLength = -1)) Then Debug.Print("Arc length: " & swMeasure.ArcLength) End If If (Not (swMeasure.ChordLength = -1)) Then Debug.Print("Chord length: " & swMeasure.ChordLength) End If If (Not (swMeasure.Diameter = -1)) Then Debug.Print("Diameter: " & swMeasure.Diameter) End If If (Not (swMeasure.Radius = -1)) Then Debug.Print("Radius: " & swMeasure.Radius) End If If (Not (swMeasure.Perimeter = -1)) Then Debug.Print("Perimeter: " & swMeasure.Perimeter) End If If (Not (swMeasure.X = -1)) Then Debug.Print("X coordinate: " & swMeasure.X) End If If (Not (swMeasure.Y = -1)) Then Debug.Print("Y coordinate: " & swMeasure.Y) End If If (Not (swMeasure.Z = -1)) Then Debug.Print("Z coordinate: " & swMeasure.Z) End If If (Not (swMeasure.DeltaX = -1)) Then Debug.Print("DeltaX: " & swMeasure.DeltaX) End If If (Not (swMeasure.DeltaY = -1)) Then Debug.Print("DeltaY: " & swMeasure.DeltaY) End If If (Not (swMeasure.DeltaZ = -1)) Then Debug.Print("DeltaZ: " & swMeasure.DeltaZ) End If If (Not (swMeasure.Angle = -1)) Then Debug.Print("Angle: " & swMeasure.Angle) End If If (Not (swMeasure.CenterDistance = -1)) Then Debug.Print("Center distance: " & swMeasure.CenterDistance) End If If (Not (swMeasure.NormalDistance = -1)) Then Debug.Print("Normal distance: " & swMeasure.NormalDistance) End If If (Not (swMeasure.Distance = -1)) Then Debug.Print("Distance: " & swMeasure.Distance) End If If (Not (swMeasure.TotalLength = -1)) Then Debug.Print("Total length: " & swMeasure.TotalLength) End If If (Not (swMeasure.TotalArea = -1)) Then Debug.Print("Total area: " & swMeasure.TotalArea) End If If (swMeasure.IsParallel) Then Debug.Print("Is parallel: " & swMeasure.IsParallel) End If If (swMeasure.IsIntersect) Then Debug.Print("Is intersect: " & swMeasure.IsIntersect) End If If (swMeasure.IsPerpendicular) Then Debug.Print("Is perpendicular: " & swMeasure.IsPerpendicular) End If If (Not (swMeasure.Projection = -1)) Then Debug.Print("Projection: " & swMeasure.Projection) End If If (Not (swMeasure.Normal = -1)) Then Debug.Print("Normal: " & swMeasure.Normal) End If If (Not (swMeasure.SpericalCenterDistance = -1)) Then Debug.Print("Spherical center distance: " & swMeasure.SpericalCenterDistance) End If If (swMeasure.IsConcentricSpheres) Then Debug.Print("Are concentric spheres: " & swMeasure.IsConcentricSpheres) End If Else Debug.Print("Invalid combination of selected entities.") End If swModel.ClearSelection2(True) End Sub Gruß Manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 17. Mrz. 2022 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hallo Als Anhang schnell gestricktes Makro. Oberflächenausgabe ohne eine Fläche anzuwählen. Voraussetzung zum Start leeres Partdokument in SW geöffnet. Kann gerne weiter bearbeitet werden. Gruß Manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
R3vo Mitglied staatl. gepr. Techniker, Konstrukteur
Beiträge: 125 Registriert: 03.11.2021 CAD: SOLIDWORKS 2024 SP3.1 PDM: SpeedyPDM 7.5.7 ------------------------ CPU: Intel Core i7-10700 @ 2.90GHz GPU: NVIDIA Quadro RTX4000 RAM: 64 GB Datenträger: SSD
|
erstellt am: 17. Mrz. 2022 17:37 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 21. Mrz. 2022 08:42 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: HalloAls Anhang schnell gestricktes Makro. Oberflächenausgabe ohne eine Fläche anzuwählen. Voraussetzung zum Start leeres Partdokument in SW geöffnet. Kann gerne weiter bearbeitet werden. Gruß Manfred
Hallo Manfred, vielen Dank für das Beispiel. Leider wird mir beim Versuch das Makro zu starten die Fehlermeldung "Fehler beim Kompilieren: Projekt oder Bibliothek nicht gefunden" für Sub ProcessBodies() angezeigt. Woran könnte das liegen? Ich bedanke mich Viele Grüße sarah Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 21. Mrz. 2022 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 21. Mrz. 2022 09:25 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo SarahTKM Bitte Verweise in VBA unter Extras/Verweise überprüfen. Siehe Bild.Gruß Manfred
Hallo Manfred, das habe ich auch gefunden und gleich gesehen das Paket von 2020 benötigt werden obwohl ich die 2019 Version verwende. Werde wahrscheinlich auf die neuste Version 2021 umsteigen müssen. Grüße
Sarah Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 21. Mrz. 2022 09:29 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo SarahTKM Bitte Verweise in VBA unter Extras/Verweise überprüfen. Siehe Bild.Gruß Manfred
Problem wurde gelöst Der Verweis war für die 2020 Version ausgewählt. Nach Übernahme der 2019 Bibliotheken hat alles geklappt. Wahrscheinlich ist diese Auswahl automatisch bei der Installation erfolgt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 21. Mrz. 2022 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 22. Mrz. 2022 10:20 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: HalloAls Anhang schnell gestricktes Makro. Oberflächenausgabe ohne eine Fläche anzuwählen. Voraussetzung zum Start leeres Partdokument in SW geöffnet. Kann gerne weiter bearbeitet werden. Gruß Manfred
Vielen Dank nochmal für das gute Beispiel. Nur habe ich eine Frage. Wenn bei der Berechnung zur nächsten Fläche gesprungen wird passiert irgendein Fehler. Hier wird die Mantelfläche nicht berechnet sondern die Grundfläche doppelt . Gibt es eine Möglichkeit zu sehen in welcher Reihenfolge SolidWorks die Flächen durchgeht? Vielen Dank und viele Grüße Sarah
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 22. Mrz. 2022 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 23. Mrz. 2022 09:41 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hi. Hier das Makro überarbeitet. Jetzt wird über die GetBox Funktion der Fläche ein Koordinatenvergleich gefahren und ausgewertet.Gruß Manfred Bitte an die Verweise denken!
Hallo Manfred, vielen Dank für deine Hilfe. Es funktioniert mit meinen Ergänzungen einwandfrei. Ich hätte nur noch eine Frage. Mit UserForm1.Show(False)kann ich die Flächen auch einzeln anklicken während das UserForm offen ist. Ich würde gerne dennoch eine Fläche anwählen und diese dann anschließend berechnen. Mit diesem Beispiel wollte ich erstmal sehen, ob das Programm erkennt wenn ich eine Fläche auswähle. Leider erhalte ich aber immer die Nachricht "The selection is not an assembly component". Woran könnte das liegen oder hab ich hier einen Denkfehler? Ich bedanke mich für weitere hilfreiche Tipps. Viele Grüße Sarah 'Dim swApp As SldWorks.SldWorks 'Dim swModelDoc As SldWorks.ModelDoc2 'Dim swSelMgr As SldWorks.SelectionMgr 'Dim swComponent As SldWorks.Component2 'Dim swDrawingComponent As SldWorks.DrawingComponent ' Set swApp = Application.SldWorks 'Set swModelDoc = swApp.ActiveDoc 'If swModelDoc Is Nothing Then ' Exit Sub 'End If 'Set swSelMgr = swModelDoc.SelectionManager 'If swSelMgr.GetSelectedObjectCount2(0) = 0 Then ' MsgBox "No selections detected." ' Exit Sub 'End If 'If swSelMgr.GetSelectedObjectType3(1, 0) = swSelectType_e.swSelCOMPONENTS Then ' Set swDrawingComponent = swSelMgr.GetSelectedObjectsComponent4(1, 0) ' If swDrawingComponent Is Nothing Then ' MsgBox "The component is empty." ' Exit Sub 'Else ' Set swComponent = swDrawingComponent.Component ' MsgBox swComponent.Name2 'End If 'Else ' MsgBox "The selection is not an assembly component." ' Exit Sub 'End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 23. Mrz. 2022 12:16 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo SarahTKM. Meinst du im Prinzip so was? Wenn du das als Makro oder VB Anwendung programmieren willst, hilft dir das SolidWorks Part Event NewSelectionNotify weiter.Gruß Manfred
Hallo Manfred, ich glaube erst jetzt verstehe ich wirklich die Handlung der Auswahl der einzelnen Punkte. Gerne würde ich folgendes machen. Durch das Anklicken in der UserForm X-Koordinaten Textfeld möchte ich die jeweiligen Punkte wie in dem Video selektieren um diese dann einsetzen zu können und zu berechnen. Ich habe die Punkt Selektion als Makro aufgenommen und mir das mal angeschaut . Set skPoint = Part.SketchManager.CreatePoint(0.009478, -0.018444, 0#) Nur wie kann ich die x und y und z- Koordinaten importieren und in dem Textfeld anzeigen? Bzw die Funktion mit den Werten erst füllen beim Anklicken. Ich hoffe ich konnte das Problem gut erklären.Ich bedanke mich und verbleibe mit vielen Grüßen Sarah Dim warnings As Long Dim fileName As String Dim count As Long Dim faces As Variant Dim i As Long Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() 'erstellt eine Oberfläche. mit InsertMidsurface wird eine Mittelfläche erstellt Set swApp = Application.SldWorks Set swModel = swApp.OpenDoc6("C:\cad\PDM\Thesis\grogo.sldprt", 1, 0, "", longstatus, longwarnings) 'Set swModel = swApp.OpenDoc6("C:\cad\PDM\Thesis\Test_2_23_03.sldprt", 1, 0, "", longstatus, longwarnings) 'fileName = "C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2017\tutorial\api\box.sldprt" 'Set swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings) Set swModelDocExt = swModel.Extension 'status = swModelDocExt.SelectByID2("", "FACE", -5.33080255641494E-02, 2.99999999999727E-02, 1.31069871973182E-02, True, 0, Nothing, 0) UserForm1.Show (False) 'x,y,z Werte werden durch anklicken eingefügt Dim X As Double Dim Y As Double Dim Z As Double X = UserForm1.TextBox1.Text Y = UserForm1.TextBox2.Text Z = UserForm1.TextBox3.Text status = swModelDocExt.SelectByID2("", "FACE", X, Y, Z, True, 0, Nothing, 0) status = swModelDocExt.SelectByID2("", "FACE", -3.70905424398416E-02, 0, 2.89438729892595E-02, True, 0, Nothing, 0) Set swFeatureManager = swModel.FeatureManager 'swFeatureManager.InsertMidSurface Nothing, Nothing, 0#, False swFeatureManager.InsertMidSurface Nothing, Nothing, 0#, True status = swModelDocExt.SelectByID2("Surface-MidSurface1", "REFSURFACE", 0, 0, 0, False, 0, Nothing, 0) Set swSelectionMgr = swModel.SelectionManager Set swFeature = swSelectionMgr.GetSelectedObject6(1, -1) Set swMidSurfaceFeature = swFeature.GetSpecificFeature2 count = swMidSurfaceFeature.GetFaceCount Debug.Print "Number of faces for midsurface feature: " & count faces = swMidSurfaceFeature.GetFaces For i = LBound(faces) To UBound(faces) Set swFace = faces(i) Debug.Print "Area of face " & i & " of midsurface feature: " & swFace.GetArea Next i End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 24. Mrz. 2022 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hallo SarahTKM. Bilder sagen mehr als tausend Worte. Im Moment weiß ich nicht wirklich was du programmieren möchtest. Schildere uns doch bitte mal deine genaue Anforderung an dein Makro. Gruß Manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 24. Mrz. 2022 15:25 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo SarahTKM. Bilder sagen mehr als tausend Worte. Im Moment weiß ich nicht wirklich was du programmieren möchtest. Schildere uns doch bitte mal deine genaue Anforderung an dein Makro.Gruß Manfred
Hallo Manfred, es tut mir leid, wenn ich mich nicht so klar ausgedrückt habe.Ich versuch jetzt mein Bestes. In deinem Video wird ja in den X,Y,Z-Koordinatenfeld jeweils eine Fläche bzw. Punkt gewählt und anschließend die Oberfläche berechnet.javascript:InsertSMI(' %20'); Nun mein Problem ich weiss nicht, wie ich die Information aus dem Anklicken erhalte und verwenden kann. Ich habe ein Beispiel ausprobiert um generell zu schauen ob mein Makro erkennt, dass ich eine Fläche selektiere , bekomme aber leider immer nur die Meldung ,dass nichts selektiert wurde. Ziel am Ende der Geschichte wäre es durch Anklicken der Fläche des Bauteils die Oberfläche zu erhalten. Ich hoffe ich hab es etwas verständlicher erklären können . Ich bedanke mich schon vielmals für die ganze Hilfe bin echt für jeden Tipp und Anregung dankbar. javascript:InsertSMI(' %20'); dieses Beispiel habe ich verwendet: _____________________________________________ Sub BodypartSelection() Dim swApp As SldWorks.SldWorks Dim swModelDoc As SldWorks.ModelDoc2 Dim swSelMgr As SldWorks.SelectionMgr Dim swComponent As SldWorks.Component2 Dim swDrawingComponent As SldWorks.DrawingComponent Set swApp = Application.SldWorks Set swModelDoc = swApp.ActiveDoc If swModelDoc Is Nothing Then Exit Sub End If Set swSelMgr = swModelDoc.SelectionManager If swSelMgr.GetSelectedObjectCount2(0) = 0 Then MsgBox "No selections detected." Exit Sub End If If swSelMgr.GetSelectedObjectType3(1, 0) = swSelectType_e.swSelCOMPONENTS Then Set swDrawingComponent = swSelMgr.GetSelectedObjectsComponent4(1, 0) If swDrawingComponent Is Nothing Then MsgBox "The component is empty." Exit Sub Else Set swComponent = swDrawingComponent.Component MsgBox swComponent.Name2 End If Else MsgBox "The selection is not an assembly component." Exit Sub End If End Sub _______________________________________________________ Viele Grüße Sarah javascript:InsertSMI(' %20'); Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 24. Mrz. 2022 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hallo Sarah, wenn du die Fläche nur für eine selektierte Fläche brauchst, wieso gehst du dann nicht über den Messen Befehl (ggf. mit Shortcut)? Oder soll die Fläche in der UserForm angezeigt werden? Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 24. Mrz. 2022 16:19 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bk.sc: Hallo Sarah,wenn du die Fläche nur für eine selektierte Fläche brauchst, wieso gehst du dann nicht über den Messen Befehl (ggf. mit Shortcut)? Oder soll die Fläche in der UserForm angezeigt werden? Gruß Bernd
Hallo Bernd, die berechnete Fläche soll in dem UserForm aufgezeigt werden, bzw. das Ergebnis der Oberflächenberechnung. Im Grunde soll die gleiche Funktion wie mit Messen in dem UserForm funktionieren. Was genau meinst du mit Shortcut? Vielen Dank und Grüße Sarah Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 25. Mrz. 2022 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
Hallo Sarah. Beigefügt kleines Makro das dir die Funktionsweise der User Selektion in SW zeigen und in VBA auswerten soll. Ist in der SWLibrary (siehe Bild) eingebaut. Hoffe du kommst damit weiter. Gruß Manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 25. Mrz. 2022 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 28. Mrz. 2022 08:16 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Sorry, Anhänge fehlten.
Hallo Manfred, heute hatte ich erst die Möglichkeit mir deine Datei anzusehen. Leider wird mir angegeben, dass diese leer ist. Viele Grüße Sarah javascript:InsertSMI(' %20');
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 28. Mrz. 2022 09:35 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 29. Mrz. 2022 08:37 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo Sarah. Sorry. Jetzt sollte es funktionieren.Gruß Manfred
Vielen lieben Dank Manfred, jetzt funktioniert die Selektion und ich konnte Sie gut in mein UserForm einbinden. Nur ist mir eine Sache aufgefallen, sobald ich eine bereist gespeicherte Datei öffne, berechnet sie mir die Oberflächen richtig. Wenn ich ein Bauteil zeichne und dann versuche die Oberflächen zu berechnen kommen nur Werte, wie 1.0; 0.0 raus. Nun gehe ich folgendermaßen vor: 1. Bauteil zeichnen, 2. Bauteil speichern 3. Bauteil öffnen und 4.Oberflächen berechnen. Die Datei wird erfolgreich ins PDM gespeichert und wieder aufgerufen nur erkennt er nicht die Flächen. Mir ist aufgefallen, wenn ich mein Makro über main starte, funktioniert die Flächenberechnung gar nicht nur wenn ich über thisLibrary.Start starte(Ist ja auch logisch, da hier der Selektmanager ist). Ich glaube, weil meine Speichern und Öffnen Funktion im Main Makro drinnen steht, springt es sobald ich speichere in diesen Abschnitt und "vergisst" somit die Fähigkeit die Flächen durch anklicken zu berechnen. Ich wollte nun in meiner speichern und öffnen Funktion nochmal das Makro ThisLibrary.Start mit der RunMacro2-Methode aufrufen . Hier zeigt er mir aber immer einen Fehler. value = instance.RunMacro2(FilePathName, ModuleName, ProcedureName, Options, Error) In der Methode wird der ModuleName auch verlangt, ist dieser dann This.Library.Start? Gibt es vielleicht einen andere Methode die das Makro starten kann oder ist dieser Ansatz völliger Murks (' %20'); Ich bin für jeden Tipp und Hilfe dankbar
Viele Grüße Sarah javascript:InsertSMI(' %20'); Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Kern Mitglied Softwareentwicklung CAD/CAM-Systembetreuung
Beiträge: 86 Registriert: 25.05.2000 ** CSWP 06/2004 ** DELL Precision 7530 SW 2020 SP5 SW 2019 SP3 Visual Studio 2017 pro
|
erstellt am: 29. Mrz. 2022 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für SarahTKM
|
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 29. Mrz. 2022 14:13 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Manfred Kern: Hallo Sarah. Bau doch in deiner Main Prozedur den Aufruf für die Oberflächenberechnung ein.Public Sub Main() Call ThisLibrary.start ..... ..... End Sub Gruß Manfred
Hallo Manfred
vielen Dank für den Tipp. Darauf bin ich nicht gekommen. Leider akzeptiert er den Call-Aufruf in der Main nicht ohne Fehlerausgabe. Ich hab den Call-Aufruf jetzt in einem Extra Button verarbeitet und aktivere somit praktisch die Selektionsmethode. So erkennt er auch die Flächen, wenn ich sie selektiere aber leider ist die Berechnung dennoch falsch. Das seltsame ist bei ein paar Bauteile, die ich zuvor gezeichnet habe funktioniert es einwandfrei. Habe die Unterschied alle nochmal untersucht und bin gleich voran gegangen aber berechnet bei dem neuen Teil immer noch nicht richtig. Ich muss weitersuchen, was der entscheiden Unterschied ist aber nur eine kleine Frage zum Verständnis. Der Selektion Manager erkennt die Flächen nur im aktiven Dokument? Wenn ich jetzt von thisLibrary.start zu main springe und danach die gespeicherte Datei wieder öffne und als aktives Dokument bezeichne, müsste doch thisLibrary.start die neue Datei als aktiv erkennen oder nicht? Ich bedanke mich für jeden weiteren Tipp Grüße Sarah javascript:InsertSMI(' %20'); Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SarahTKM Mitglied
Beiträge: 26 Registriert: 14.03.2022
|
erstellt am: 29. Mrz. 2022 14:50 <-- editieren / zitieren --> Unities abgeben:
Hab die Ursache gefunden Es hat die ganze Zeitberechnet nur in einer falschen Einheit. Nachdem ich einen Faktor dazu nehmen funktioniert das jetzt bei jeden Bauteil. Vielen Dank für die Tipps und Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |