| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| PLM TechnologieForum Hannover |
Autor
|
Thema: VBA: Pos. von Ursprung von Komponenten auf Zeichnung ermitteln (2339 mal gelesen)
|
red5000 Mitglied
Beiträge: 47 Registriert: 23.08.2011 Solidworks 2012 x64 Windows 7 Xeon W3565 Quadro 4000 RAM 12 GB
|
erstellt am: 25. Feb. 2014 12:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem, dass eigentlich leicht zu lösen sein müsste aber ich steh grad wohl auf dem Schlauch. Ich möchte Bezugshinweise genau auf den Ursprüngen der Unterbaugruppen der in einer Zeichenansicht dargestellten Baugruppe erstellen. Aber ich kriege nicht heraus wie man die Position des Ursprungs ermittelt. Was bereits funktioniert: 1. In einer Schleife werden alle Unterbaugruppen der in der Zeichenansicht dargestellten Baugruppe durchgegangen. 2. Von den Unterbaugruppen werden alle Features durchlaufen und mit swFeat.GetTypeName = "OriginProfileFeature" ermittelt ob es sich um den Ursprung handelt. 4. Bezugshinweis wird an den vorgegebenen Koordinaten erstellt Was also fehlt ist Schritt 3: Koordinaten dieses Ursprungs ermitteln. Der Ursprung ist bereits in einem Feature-Objekt gespeichert. Wahrscheinlich ist das Featureobjekt gar nicht nötig und es gibt einen anderen Weg? Ich hoffe ihr könnt mir helfen. LG, red Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 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: 25. Feb. 2014 17:18 <-- editieren / zitieren --> Unities abgeben: Nur für red5000
|
red5000 Mitglied
Beiträge: 47 Registriert: 23.08.2011 Solidworks 2012 x64 Windows 7 Xeon W3565 Quadro 4000 RAM 12 GB
|
erstellt am: 26. Feb. 2014 09:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, danke für die Antwort. Ich hab mir den Thread angeschaut und auch das fertige Makro am Ende getestet. Damit kann ich in einer Zeichenansicht ein Punkt einfügen und (Vorausgesetzt es ist selektiert) von dem Punkt die Koordinaten ermitteln. Funktioniert perfekt aber bringt mich trotzdem nicht weiter oder übersehe ich etwas? Ich krieg die Koordinaten von einem Ursprung nicht heraus. Wenn ich auf dem Ursprung ein Punkt platziere kann ich theoretisch mit diesem Makro davon die Koordinaten ermitteln. Aber um den Punkt zu einzufügen brauche ich ja wieder die Koordinaten vom Ursprung? Ich kanns eigentlich nicht glauben aber ist es tatsächlich nicht mit einfachen Mitteln möglich die Koordinaten vom Ursprung eines Komponenten in einer Zeichnung auszulesen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 26. Feb. 2014 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für red5000
Hallo red5000, Zitat: Original erstellt von red5000: Ich kanns eigentlich nicht glauben aber ist es tatsächlich nicht mit einfachen Mitteln möglich die Koordinaten vom Ursprung eines Komponenten in einer Zeichnung auszulesen?
Hm, das kommt immer darauf an, was man unter einfach versteht. Als Programmierer muss du mit dem zurecht kommen was da ist, und sooooo schwierig ist das auch nicht. Dein Ursprung hat immer die Korodinaten 0,0,0 - in Bezug auf das Modell (die Komponentenursprünge sind natürlich was anders, die sind ja in Bezug auf das Hauptmodell wiederum transformiert). Wenn du von dem Modell eine Zeichenansicht erstellst hat die eine Matrix, mit der man vom Modell auf die Zeichenansichtskoordinaten kommt. An diese kommst du per View::ModelToViewTransform. Jetzt musst du "nur" noch deine Modellkoordinaten mit der Zeichenansichtstransformmatrix multiplizieren (vektoriell) und schon hast du deine Modellkoordinaten in Bezug für diese Zeichenansicht in bezug auf den Zeichnungsnullpunkt. Ich hab dir mal ein Beispiel gebastelt:
Code: ' ********************************************************************** ' * Makro läuft über alle Zeichenansichten einer Zeichnung und gibt ' * die Koordinaten eines Modellpunktes in Bezug auf diese Zeichenansicht ' * in der Zeichnung aus ' * ' * 26.02.2014 Stefan Berlitz (stefan.berlitz@solidworks.cad.de) ' * http://solidworks.cad.de ' * http://swtools.cad.de ' ********************************************************************** Sub main() Dim swApp As SldWorks.SldWorks Dim swDraw As SldWorks.DrawingDoc Dim swView As SldWorks.View Dim swViewXform As SldWorks.MathTransform Dim swMathUtil As SldWorks.MathUtility Dim nPtData(2) As Double Dim vPtData As Variant Dim PunktModell As SldWorks.MathPoint Dim PunktAnsicht As SldWorks.MathPoint ' an SolidWorks anhängen, aktive Zeichnung holen Set swApp = Application.SldWorks Set swDraw = swApp.ActiveDoc ' um einen Punkt zu bekommen brauchen wir die MathUtils Set swMathUtil = swApp.GetMathUtility ' Punkt in Modellkoordinaten, wie auch immer ermittelt. ' Hier im Beispiel per Hand vorgegeben der Nullpunkt nPtData(0) = 0 'X-Koordinate nPtData(1) = 0 'Y-Koordinate nPtData(2) = 0 'Z-Koordinate vPtData = nPtData Set PunktModell = swMathUtil.CreatePoint(vPtData) ' durch alle Zeichenansichten laufen und den Modellpunkt in ' Koordinaten der Zeichenansicht "übersetzen" Set swView = swDraw.GetFirstView Set swView = swView.GetNextView Do While Not swView Is Nothing ' Select regardless Set swViewXform = swView.ModelToViewTransform Set PunktAnsicht = PunktModell.MultiplyTransform(swViewXform) Debug.Print "View = " & swView.Name Debug.Print "Punkt = (" & PunktAnsicht.ArrayData(0) * 1000# & ", " & _ PunktAnsicht.ArrayData(1) * 1000# & ", " & _ PunktAnsicht.ArrayData(2) * 1000# & ") mm " Debug.Print "" Set swView = swView.GetNextView LoopEnd Sub
Wenn es dir hilft und dir ein paar weitere Stunden Suchen und Probieren gespart hat wäre es schön, wenn du mal einen Blick auf diesen Aufruf wie bei vielen meiner Makros wirst (natürlich auf freiwilliger Basis), deine örtliche Tafel wird es dir danken Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
red5000 Mitglied
Beiträge: 47 Registriert: 23.08.2011 Solidworks 2012 x64 Windows 7 Xeon W3565 Quadro 4000 RAM 12 GB
|
erstellt am: 27. Feb. 2014 13:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, danke für die Antwort, es wurde mir einiges klar. Sobald ich zuhause bin wird überwiesen. Aber bin gerade am verzweifeln Ich habe nämlich gemerkt, dass das gar nicht das ist was ich brauche. Kannst du mir bitte sagen wie ich ein Bezugshinweis an den Ursprung einer Unterbaugruppe auf einer Zeichnung verknüpfe? Es reicht nämlich nicht den Bezugshinweis einfach an die Koordinaten des Ursprungs einzufügen... Mit swAnnotation.SetAttachedEntities(...) kann ich den Bezugshinweis an eine Entity heften. Außer IEntity Interface Members habe ich auch SelectEntity Method (IView) gefunden (für das ich blöderweise trotzdem die Entity brauche). Doch ich komme nicht weiter. Ich muss vom Ursprung irgendwie die Entity ermitteln, wie mache ich das? LG, red Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |