Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Linienart für tangentiale Linien setzen

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
Autor Thema:   API: Linienart für tangentiale Linien setzen (1093 mal gelesen)
Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 658
Registriert: 20.11.2001

SWx 2016 SP4

erstellt am: 20. Jan. 2014 12:10    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


TangentialeLinien.swp.txt

 
SWX zeigt in Zeichnungen standardmäßig tangentiale Linien als dünne Phantomlinien an. Normgerecht wäre eine dünne Volllinie mit verkürzten Enden.
Unsere Vorlagen und Standardeinstellungen habe ich so angepasst, dass die Darstellung bei neuen Zeichnungen korrekt ist. Für alte Zeichnungen benutze ich ein Makro, um diverse Dokumentoptionen auf den aktuellen Stand zu ändern. In dieses Makro will ich jetzt eine Routine integrieren, die mir die tangentialen Linien normgerecht einstellt.

Die Linienart ist eine Dokumentoption, das klappt problemlos. Um die Linienenden zu kürzen, muss man offenbar durch alle Ansichten gehen und in jeder Ansicht den Stil für die tangentiale Linie einstellen. Bei der betreffenden Zeile bekomme ich immer die Fehlermeldung "Objekt erforderlich", und hier bin ich mit meinen bescheidenen Programmierkenntnissen am Ende. Weiß jemand Rat?

Gruß,
Piet

' ******************************************************************************
' TangentialeLinien
' Precondition: Zeichnung geöffnet
' Version 1.0, 20.1.14 P. Sach
' Setzt tangentiale Kanten auf durchgehende Linien mit entfernten Linienenden
' ******************************************************************************
Dim swApp As SldWorks.SldWorks
Dim swView As Object    'SldWorks.View
Dim swDraw As Object    'SldWorks.DrawingDoc
Dim boolstatus As Boolean

'Public Enum DocumentTypes_e
Public Const swDocNONE = 0
Public Const swDocPART = 1
Public Const swDocASSEMBLY = 2
Public Const swDocDRAWING = 3
Public Const swDocSDM = 4

Public Enum swDisplayTangentEdges_e
    swTangentEdgesHidden = 0
    swTangentEdgesVisibleAndFonted = 1
    swTangentEdgesVisible = 2
End Enum

Private Sub SetTangentialeKanten()
Dim value As Variant

boolstatus = swDraw.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swLineFontTangentEdgesStyle, 0, swLineStyles_e.swLineCONTINUOUS)    'setzt tangentiale Kanten auf durchgehend
Set swView = swDraw.GetFirstView 'erste Ansicht=Blattformat
Do While Not swView Is Nothing
    Set swView = swView.GetNextView
    If swView Is Nothing Then
        MsgBox "Keine Ansicht ausgewählt"
    End If
    Set value = sview.SetDisplayTangentEdges2(swTangentEdgesVisibleAndFonted) '<<<<<<<<<<< Objekt erfoderlich
Loop    'swView
End Sub

Sub main()
Set swApp = Application.SldWorks
Set swDraw = swApp.ActiveDoc                'an's aktuelle SWX-Dokument anklinken

If Not swDraw.GetType = swDocDRAWING Then    'wenn keine Zeichnung, Meldung und Ende
    MsgBox "Das geht nur bei Zeichnungen", vbCritical, "Falsche Datei"
    Exit Sub
End If

Call SetTangentialeKanten

End Sub

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: 20. Jan. 2014 13:00    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 Piet 10 Unities + Antwort hilfreich

Hallo Piet,

der erste Baum im Wald ist der Name deiner Objektvariable für den View. Der muss heißen:

Code:
Set value = swView.SetDisplayTangentEdges2(swTangentEdgesVisibleAndFonted)

Des weiteren liefert laut der API Hilfe SetDisplayTangentEdges2 keinen Wert zurück, du versuchst damit aber das Objekt "value" zu belegen. Ein einfaches
Code:
Set value = Call swView.SetDisplayTangentEdges2(swTangentEdgesVisibleAndFonted)

müsste eigentlich reichen.

Last not least fängst du zwar in deinem Loop ab, wenn das ganze alle Views durchlaufen hat und gibst eine Meldung aus, versuchst aber trotzdem anschließend einen nicht mehr vorhandenen View anzusprechen. Von der Logik her müsste das so gehen:

Code:

Private Sub SetTangentialeKanten()
    Dim value As Variant
   
    boolstatus = swDraw.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swLineFontTangentEdgesStyle, 0, swLineStyles_e.swLineCONTINUOUS)    'setzt tangentiale Kanten auf durchgehend

    Set swView = swDraw.GetFirstView 'erste Ansicht=Blattformat

    ' erste "echte" Ansicht selektieren
    Set swView = swView.GetNextView

    Do While Not swView Is Nothing
        Call swView.SetDisplayTangentEdges2(swTangentEdgesVisibleAndFonted)
        Set swView = swView.GetNextView
    Loop

End Sub



Ich finde, so passt das mit der Schleifenlogik besser.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

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

Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 658
Registriert: 20.11.2001

SWx 2016 SP4

erstellt am: 20. Jan. 2014 15:34    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

Vielen Dank, Stefan! Dein Code funktioniert, wie nicht anders zu erwarten, reibungslos. Leider lag ich mit der Interpretation von SWX-Befehlen falsch.

Das erste swDraw.Extension.SetUserPreferenceInteger setzt die tangentiale Kante auf durchgehend, und die von dir bearbeitete Schleife macht eine dünne Linie daraus. Die Linienenden werden dabei noch nicht entfernt.
Nach langem Suchen hab ich einen Verdächtigen für diesen Befehl in swDraw.Extension.SetUserPreferenceInteger gefunden, aber die Zeile hat keine Wirkung. Bin ich der Einzige, der die API-Onlinehilfe seit Jahren mit jeder Version konsequent unverständlicher findet? Hab ich da eine falsche Syntax oder den falschen Befehl am Wickel?

So sieht's jetzt aus:

Dim swApp As SldWorks.SldWorks
Dim swView As SldWorks.View 'Object    'SldWorks.View
Dim swDraw As SldWorks.DrawingDoc  'Object    'SldWorks.DrawingDoc
Dim ModelDocExtension As ModelDocExtension

Dim boolstatus As Boolean

'Public Enum DocumentTypes_e
Public Const swDocNONE = 0
Public Const swDocPART = 1
Public Const swDocASSEMBLY = 2
Public Const swDocDRAWING = 3
Public Const swDocSDM = 4

Public Enum swDisplayTangentEdges_e
    swTangentEdgesHidden = 0
    swTangentEdgesVisibleAndFonted = 1
    swTangentEdgesVisible = 2
End Enum
'Public Enum EdgesTangentEdgeDisplay_e

Public Const swEdgesTangentEdgeDisplayVisible = 1
Public Const swEdgesTangentEdgeDisplayPhantom = 2
Public Const swEdgesTangentEdgeDisplayRemoved = 3

'Public Const swLineFontTangentEdgesStyle = 70

Private Sub SetTangentialeKanten()
Dim value As Variant

boolstatus = swDraw.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swLineFontTangentEdgesStyle, 0, swLineStyles_e.swLineCONTINUOUS)  'setzt tangentiale Kanten auf durchgehend, aber nicht dünn
boolstatus = swDraw.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swEdgesTangentEdgeDisplay, swUserPreferenceOption_e.swDetailingNoOptionSpecified, EdgesTangentEdgeDisplay_e.swEdgesTangentEdgeDisplayRemoved) '<<< tut nichts

Set swView = swDraw.GetFirstView 'erste Ansicht=Blattformat

' erste "echte" Ansicht selektieren
Set swView = swView.GetNextView

Do While Not swView Is Nothing
    Call swView.SetDisplayTangentEdges2(1)  'swTangentEdgesVisibleAndFonted = dünne Volllinien
    boolstatus = ModelDocExtension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swDetailingDimensionStandard, swUserPreferenceOption_e.swDetailingNoOptionSpecified, swDetailingStandard_e.swDetailingStandardISO)

    Set swView = swView.GetNextView
Loop

End Sub

Sub main()
Set swApp = Application.SldWorks
Set swDraw = swApp.ActiveDoc                'an's aktuelle SWX-Dokument anklinken
Set ModelDocExtension = swDraw.Extension

If Not swDraw.GetType = swDocDRAWING Then    'wenn keine Zeichnung, Meldung und Ende
    MsgBox "Das geht nur bei Zeichnungen", vbCritical, "Falsche Datei"
    Exit Sub
End If

Call SetTangentialeKanten

End Sub

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)2019 CAD.de | Impressum | Datenschutz