Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  VBA: Bezugshinweise einfügen: SetAttachedEntities/GetAttachedEntities/Face->Vertex

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von red5000 an!   Senden Sie eine Private Message an red5000  Schreiben Sie einen Gästebucheintrag für red5000

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für red5000 10 Unities + Antwort hilfreich

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 Object

Dim 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.


Sehen Sie sich das Profil von Winni-two an!   Senden Sie eine Private Message an Winni-two  Schreiben Sie einen Gästebucheintrag für Winni-two

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für red5000 10 Unities + Antwort hilfreich

Hallo red,

wieso gibst du nicht einfach dem vorhandenen Hinweis die Eigenschaften die er haben soll, anstelle zu löschen und neu zu erstellen ??

Gruss Winni

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

red5000
Mitglied



Sehen Sie sich das Profil von red5000 an!   Senden Sie eine Private Message an red5000  Schreiben Sie einen Gästebucheintrag für red5000

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz