| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | AMB |
Autor
|
Thema: VBA: Bezugshinweise einfügen: SetAttachedEntities/GetAttachedEntities/Face->Vertex (1774 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: 09. Apr. 2014 11:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem beim Einfügen von Bezugshinweisen. Mein Makro soll vorhandene Bezugshinweise in der Zeichnung mit anderen Bezugshinweisen (aus einer Vorlage bzw. Stil) ersetzen. D.h.: 1. Neuen Bezugshinweis einfügen 2. Eigenschaften vom alten Hinweis zum neuen übertragen (Position des Pfeils, Position des Bezugshinweises, Hinweislinieneigenschaften etc.) 3. Alten Bezugshinweis löschen Mit InsertAnnotationFavorite (nur damit kann ich die Vorlagen benutzen) füge ich den Bezugshinweis ein. Mit SetAttachedEntities stelle ich die "Position" des Pfeils ein bzw. woran der Bezugshinweis hängen soll. Woran der alte Bezugshinweis hing ermittle ich mit GetAttachedEntities3. Das Problem: Wenn der alte Bezugshinweis an einer Fläche hing (und das sollen auch die neuen), greift der neue trotzdem eine Ecke dieser Fläche. Wieso?? Wenn ich mit GetAttachedEntityTypes den Typ ermittle bekomme ich den Wert "2" für Fläche. An der Entity liegts also nicht. Hier mal der Code (die Objekte mit "New" im Namen sind die neuen Bezugshinweise):
Code:
Set swNote = vNotes(y) Set swAnn = swNote.GetAnnotation Set swNewAnn = swModel.Extension.InsertAnnotationFavorite(strStil, swNote.GetAttachPos(0), swNote.GetAttachPos(1), swNote.GetAttachPos(2)) 'Richtige Pfeilpos. aber fängt nicht das Teil (Note leer) 'Set swNewAnn = swModel.Extension.InsertAnnotationFavorite(strStil, 0, 0, 0) vEntities = swAnn.GetAttachedEntities3 'vEntityTypes = swAnn.GetAttachedEntityTypes bRet = swNewAnn.SetAttachedEntities(vEntities) 'Fängt das Teil (Note richtig gefüllt) aber verschiebt Pfeilpos. in die Ecke 'lRet = swNewAnn.SetArrowHeadStyleAtIndex(0, swAnn.GetArrowHeadStyleAtIndex(0)) 'lRet = swNewAnn.SetLeader3(swAnn.GetLeaderStyle, swAnn.GetLeaderSide, swAnn.GetSmartArrowHeadStyle, swAnn.GetLeaderPerpendicular, swAnn.GetLeaderAllAround, swAnn.GetDashedLeader) bRet = swNewAnn.SetPosition(swAnn.GetPosition(0), swAnn.GetPosition(1), swAnn.GetPosition(2)) 'Stellt die Richtige Notepos. ein
Außerdem: Gibt es eine Methode um die Pfeilposition nachträglich noch einstellen zu können? Gruß, red 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: 09. Apr. 2014 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für red5000
Hallo red, wenn ich das bei meinen Versuchen gerade richtig interprtiert habe wird mit SetLeader3 die Pfeilspitze (oder Knubbel) da hin gesetzt, wo du zuletzt was selktiert hast. Es soltle also gehen, wenn du vorher an der richtigen Stelle virtuell hinklickst. Ein aufbereitetes Makro von mir auf einer A3 Zeichnung trifft so jedenfalls die richtige Stell: Code:
' ****************************************************************************** ' C:\Users\b082757\AppData\Local\Temp\swx7828\Macro1.swb - macro recorded on 04/09/14 by b082757 ' ****************************************************************************** Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("", "FACE", 0.16, 0.145, 0#, False, 0, Nothing, 0) Dim myNote As Object Dim myAnnotation As Object Dim myTextFormat As Object Set myNote = Part.InsertNote("test") If Not myNote Is Nothing Then myNote.LockPosition = False myNote.Angle = 0 boolstatus = myNote.SetBalloon(0, 0) Set myAnnotation = myNote.GetAnnotation() If Not myAnnotation Is Nothing Then longstatus = myAnnotation.SetLeader3(swLeaderStyle_e.swSTRAIGHT, 1, True, False, False, False) boolstatus = myAnnotation.SetPosition(0.186, 0.173, 0#) boolstatus = myAnnotation.SetTextFormat(0, True, myTextFormat) End If End If Part.ClearSelection2 True Part.WindowRedraw End Sub
Zum Verschieben scheint derselbe Trick zu funktionieren, Leader löschen, virtuell Klicken, Leader erzeugen. Elegantere Methoden hab ich jetzt aber nicht auf Lager Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 09. Apr. 2014 12:45 <-- 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: 09. Apr. 2014 14:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan und Winni, @Winni: Das habe ich vorher tatsächlich so gemacht, aber dann muss ich im Makro den Text für die Bezugshinweise manuell festlegen statt auf interne Vorlagen zugreifen zu können. Außerdem sind manche der Bezugshinweise die ersetzt werden müssen Stücklistensymbole, die nicht mehr verwendet werden sollen. Diese können aber nicht "umgeändert" werden sondern nur ersetzt. Falls ich irgendwo falsch liege sag bitte Bescheid. @Stefan: Danke für den Tipp mit Selektieren, damit kann ich Bezugshinweise endlich an der richtigen Stelle einfügen *und* auch die Entity "fangen". Aber.. Jetzt muss ich die Bezugshinweise mit swModel.InsertNote("Text") einfügen. Ich muss den Text also im Makro festlegen und kann nicht die Vorlagen ("Stile") für Bezugshinweise benutzen. Denn wenn ich die Fläche (Face) vorher selektiere und dann per swModel.Extension.InsertAnnotationFavorite den Bezugshinweis einfüge fängt er die Fläche nicht. Und mit SetLeader scheint es nichts zu tun zu haben (?) sondern die Position der Pfeilspitze wird gleich beim Einfügen festgelegt. Gruß red [Diese Nachricht wurde von red5000 am 09. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|