| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | Optimieren Sie Ihre SOLIDWORKS Tasks mit Visiativ myCADtools - Jetzt Kostenlos testen >>, eine Pressemitteilung
|
Autor
|
Thema: Makro - Text auf Positionslinie (1491 / mal gelesen)
|
Olls Lai Lolli Mitglied Konstrukteur
 
 Beiträge: 378 Registriert: 07.05.2009 MS Windows 10 Prof. Intel Xeon E5-1630 v 3 3.7 GHz 32 GB Ram Nvidia Quadro M4000 SWX 2019 x64 SP 5 PDM Enterprise 2019 SP 3
|
erstellt am: 24. Okt. 2016 23:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo Kollegen, ich will mich über die Winterzeit, endlich mal tiefer mit dem Thema Makroprogrammierung auseinander setzen, bisher hat mir die Zeit und eine herausfordernde Aufgabe gefehlt. Eine Aufgabe für eine Makro habe ich jetzt und in den langen Winterabenden hoffentlich auch Zeit zum Probieren und Lernen. Als Aufgabe habe ich mir gestellt, ein Makro zu schreiben (zusammen zu kopieren) mit dem auf die Positionslinie in einer Zeichnung, ausgehend von der Blase ein Beschriftung mit einem Wert aus der Stückliste eingefügt wird. Das Makro soll im groben wie folgt ablaufen: 1. Anfangs und Endpunkt einer Beschriftungsfahne ermitteln 2. Ermitteln welcher Wert in der Blase angezeigt wird. 3. In der Stückliste in der entsprechenden Zeile den Wert auslesen, der auf die Linie geschrieben werden soll. 4. Winkel des Beschriftung berechne und ob der Einfügepunkt vorne oder hinten sein muss. Hört sich eigentlich leicht an, aber die Schwierigkeiten kommen noch. Ich habe bisher (auch in der „normalen“ Bedienoberfläche) keine Möglichkeit gefunden, den eingefügten Text so mit der Positionslinie zu verknüpfen, dass der sich Winkelrichtig mit bewegt, wenn die Blase verschoben wird. Eine Möglichkeit wäre, eine Aktualisierungsfunktion mit ein zu bauen. Dazu müssten die Beschriftungen einem eigenen Layer zugeordnet werden. Beim Aktualisieren, werden dann alle Texte die sich auf dem Layer befinden gelöscht und anschließend neu eingefügt. Aber….So weit bin ich noch lange nicht! Ich scheiterte schon viel früher :-( Ich habe mal damit angefangen, dass ich mir dieses Makro: http://forum.cad.de/foren/ubb/Forum2/HTML/025421.shtml noch mit weiteren Werten ergänzt habe die ich hier gefunden haben: http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.INote~GetBalloonInfo.html
Weil ich mir nicht sicher war, für welche Stelle die Koordinaten bei der Position auf der Seite der Blase gelten (Zentrum, oder Ende Linie) habe in die Zeichnung eine Skizze eingefügt und als Anfangs und Endpunkt die Werte übernommen, die das Makro ermittelt hat. Das Ergebnis war ernüchternd… Meine Skizze ist an einer ganz anderen Stelle gesessen. Von welcher Null aus ermittelt das Makro den die Positionen? Kann mir da jemand ein bisschen weiter helfen? Ich erwarte nicht dass mir jemand das Makro auf dem Tablett serviert, ich will ja selber lernen wie man Makros schreibt. Die Daten sind mit Solidworks 2013 erstellt. Grüße OLL
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1792 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 25. Okt. 2016 08:32 <-- editieren / zitieren --> Unities abgeben:          Nur für Olls Lai Lolli
Hallo OLL, Deine Aufgabenstellung ist ganz schön heftig, für den Einstieg in die Makroprogrammierung. Die Ermittlung von Koordinaten von Zeichnungselementen hat mich auch schon ganz schön beschäftigt, und ich muss gestehen ich hab dann aufgegeben. Das Problem ist (mein Wissensstand), dass die Koordinaten nicht einfach übernommen werden können. Du musst dabei auch noch folgendes beachten die Position der Zeichnungsansicht auf dem Blatt den Skalierungsfaktor der Ansicht die Verdrehung der Zeichnungsansicht Ich wünsch Dir auf jeden Fall viel Erfolg bei Deinem Vorhaben (weiterhelfen kann ich Dir leider nicht )
------------------ Grüße Heinz 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: 3352 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 25. Okt. 2016 10:14 <-- editieren / zitieren --> Unities abgeben:          Nur für Olls Lai Lolli
Hallo Oll, stimme Heinz zu, sportliche Aufgabe toitoitoi! meine auch, die Position auf die Ansicht bezogen ist. aber auf welche? die Positionsnummern können - unabhängig davon wo sie auf eine Komponente zeigen - anderen Ansichten zugeordnet sein als man optisch denkt. also Position wird in Ansicht 1 gezeigt, die Positionsnummer ist aber Ansicht 2 zugeordnet (merkt man beim Verschieben der Ansicht 2). vielleicht müsste man das erstmal bereinigen.. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olls Lai Lolli Mitglied Konstrukteur
 
 Beiträge: 378 Registriert: 07.05.2009 MS Windows 10 Prof. Intel Xeon E5-1630 v 3 3.7 GHz 32 GB Ram Nvidia Quadro M4000 SWX 2019 x64 SP 5 PDM Enterprise 2019 SP 3
|
erstellt am: 25. Okt. 2016 22:22 <-- editieren / zitieren --> Unities abgeben:         
Jungs, ich muss zugeben, ihr habt Recht :-( aber man wächst ja mit seinen Aufgaben. Hab mal meine Zeichnung angepasst, nur noch eine Ansicht (Vorderansicht) , eine Positionsfahne, Blattmassstab 1:1. Habs trotzdem nicht fertig gebracht, nachzuvollziehen wie SWX auf die Werte kommt, die im Makro ausgegeben werden. Hab auch mal versucht die Differenz zwischen Blattursprung und Ansichtenursprung mit zu verrechnen. Keine Chance. Eine Erkenntnis hab ich aber doch gewonnen. Die ausgegebenen Werte stellen nicht den Anfangs und Endpunkt der Verbindungslinie dar. Sondern die Werte Endpunkt der Verbindungslinie (Übergang Linie <> Kreis) und Kreismittelpunkt. Jetzt muss ich mal schauen, ob ich einen Befehl finde um den Anfangspunkt der Linie zu ermitteln. Gruß OLL Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olls Lai Lolli Mitglied Konstrukteur
 
 Beiträge: 378 Registriert: 07.05.2009 MS Windows 10 Prof. Intel Xeon E5-1630 v 3 3.7 GHz 32 GB Ram Nvidia Quadro M4000 SWX 2019 x64 SP 5 PDM Enterprise 2019 SP 3
|
erstellt am: 16. Nov. 2016 20:16 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von nahe: Die Ermittlung von Koordinaten von Zeichnungselementen hat mich auch schon ganz schön beschäftigt, und ich muss gestehen ich hab dann aufgegeben. Das Problem ist (mein Wissensstand), dass die Koordinaten nicht einfach übernommen werden können. Du musst dabei auch noch folgendes beachten die Position der Zeichnungsansicht auf dem Blatt den Skalierungsfaktor der Ansicht die Verdrehung der Zeichnungsansicht
Hallo Nahe, schau mal was ich gefunden habe: '------------------------------------------------------------------------------------------------------------------- 'Position der Bemaßung finden: AnnotationPosition(0) , AnnotationPosition(1), AnnotationPosition(2) '------------------------------------------------------------------------------------------------------------------- MSTAB = view.ScaleDecimal ViPos = view.Position ViAngBo = view.angle ViAngWi = 360 / (2 * pi) * ViAngBo Set CurAnnotation = swDispDim.GetAnnotation AnnotationPosition = CurAnnotation.GetPosition AnnotationWinkel = CurAnnotation.GetLeaderAllAround If Not IsNull(AnnotationPosition) Then XCord = ((AnnotationPosition(0) + (2 / 1000)) / MSTAB) - (ViPos(0) / MSTAB) YCord = ((AnnotationPosition(1) + (2 / 1000)) / MSTAB) - (ViPos(1) / MSTAB) End If '------------------------------------------------------------------------------------------------------------------- 'Block einfügepunkt setzen '------------------------------------------------------------------------------------------------------------------- Set swMathUtil = swApp.GetMathUtility pt(0) = XCord pt(1) = YCord '------------------------------------------------------------------------------------------------------------------- 'Falls Ansicht gedreht muss Einfügepunkt gedreht werden (Funktioniert zum Teil!!) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX '------------------------------------------------------------------------------------------------------------------- Dim wi As Double rp = view.Position 'Ansichts Position wi = view.angle 'Ansichts Winkel p2 = pt If wi <> 0 Then temp = rotate_point(rp, p2, wi) Set swMathPoint = swMathUtil.CreatePoint((temp)) Else Set swMathPoint = swMathUtil.CreatePoint((pt)) End If '------------------------------------------------------------------------------------------------------------------- Quelle: http://ww3.cad.de/foren/ubb/Forum2/HTML/025220.shtml#000000 Ich versuch mal das Code-Schnipsel in meine Makrobaustelle rein zu basteln und schau mal was dann passiert. Gruß OLL -> wieder mit einem Funken Hoffnung, sein Projekt doch noch realisiert zu bekommen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
nahe Ehrenmitglied
    
 Beiträge: 1792 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 17. Nov. 2016 15:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Olls Lai Lolli
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |