Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Zeichung: Ansicht auf dem Blatt?

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 Autodesk Produkte
Autor Thema:  Zeichung: Ansicht auf dem Blatt? (853 mal gelesen)
SKYSURFER
Mitglied
Maschinenbautechniker


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

Beiträge: 361
Registriert: 27.08.2004

IV2016 SP2
ständiger Rechnerwechsel

erstellt am: 08. Okt. 2017 13:59    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 möchte ermitteln, ob eine Ansicht auf dem Blatt ist.
Hierzu gehe ich über das Zentrum der Ansicht. Nicht die Eckpunkte der Ansicht.
Hier der Code:

Code:
Public Sub TestDrgView()

    ' Beenden der Funktion, wenn kein Dokument geöffnet ist
    If ThisApplication.Documents.Count = 0 Then
       
        MsgBox "Kein Zeichnungsdokument geöffnet!"
        Exit Sub
    End If
 
    ' Beenden der Funktion, wenn das Dokument keine Zeichnung (*.idw) ist
    If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
       
        MsgBox "Kein Zeichnungsdokument geöffnet!"
        Exit Sub
    End If
 
    ' Aktiviert das geöffnete Dokument
    Dim oDrawDoc As DrawingDocument
    Set oDrawDoc = ThisApplication.ActiveDocument
   
    Dim iSheetSizeX As Double
    Dim iSheetSizeY As Double
   
    'Set the paper size and scale
    On Error Resume Next
    Select Case oDrawDoc.ActiveSheet.Size
        Case kA4DrawingSheetSize
            'Blatt A4
            iSheetSizeX = 21
            iSheetSizeY = 29.7
        Case kA3DrawingSheetSize
            'Blatt A3
            iSheetSizeX = 42
            iSheetSizeY = 29.7
        Case kA2DrawingSheetSize
            'Blatt A2
            iSheetSizeX = 59.4
            iSheetSizeY = 42
        Case kA1DrawingSheetSize
            'Blatt A1
            iSheetSizeX = 84.1
            iSheetSizeY = 59.4
        Case kA0DrawingSheetSize
            'Blatt A0
            iSheetSizeX = 118.9
            iSheetSizeY = 84.1
        Case Else    ' Andere Werte.

                Debug.Print "ungültiges Papierformat"
       
    End Select
   
 
    ' Auswahl der gewünschten Bemaßungen
    Dim oDrawView As DrawingView
    Set oDrawView = ThisApplication.CommandManager.Pick(kDrawingViewFilter, "Ansicht auswählen")
   
    Dim iViewPosX As Double
    Dim iViewPosY As Double
   
    iViewPosX = oDrawView.Center.X
    iViewPosY = oDrawView.Center.Y
   
'  iViewPosX größer 0
'  iViewPosX kleiner iSheetSizeX
'  iViewPosY größer 0
'  iViewPosY kleiner iSheetSizeY
   
    If iViewPosX > 0 Or _
    iViewPosX < iSheetSizeX Or _
    iViewPosY > 0 And _
    iViewPosY < iSheetSizeY Then
       
        MsgBox "Ansicht auf dem Blatt"
    Else
   
        MsgBox "Ansicht NICHT auf dem Blatt"
       
    End If
   
    MsgBox "Ansicht: " & oDrawView.Name
    MsgBox "Pos X: " & iViewPosX
    MsgBox "Pos Y: " & iViewPosY
   
End Sub


Leider stimmt die Ausgabe nicht. Somit müsste meine If-Abfrage nicht passen. Leider habe ich an dieser Stelle gerade Hirnfasching.

Hat jemand einen Tipp für mich?

Gruß
SKYSURFER

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

metalgod
Mitglied
Technischer Zeichner, Mädchen für alles


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

Beiträge: 32
Registriert: 23.09.2015

Win10x64 Prof.
Intel Core i7-8700K
3,70GHz, 16GB Ram
Inventor Prof. 2018 64-Bit
Visual Studio 2015 Express

erstellt am: 09. Okt. 2017 07:44    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 SKYSURFER 10 Unities + Antwort hilfreich

Hallo SKYSURFER,

bei mir hat das hier funktioniert:

Code:
Public Sub AnsichtAufDemBlatt()
    Dim D As DrawingDocument: Set D = ThisApplication.ActiveDocument
    Dim Blatt As Sheet, Ansicht As DrawingView
    For Each Blatt In D.Sheets
        For Each Ansicht In Blatt.DrawingViews
            If Ansicht.Center.X < 0 Or Ansicht.Center.Y < 0 _
            Or Ansicht.Center.X > Blatt.Width Or Ansicht.Center.Y > Blatt.Height Then
                Call MsgBox("Ansicht " & """" & Ansicht.Label.Text & """" & _
                " ist nicht auf dem Blatt!", vbOKOnly)
            End If
        Next
    Next
End Sub

------------------
alex

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

Tacker
Mitglied
TZ, Tech. MB, Softwareentwickler


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

Beiträge: 175
Registriert: 23.09.2010

IV 2017 Pro
i7-7700K 4x4.2GHz
32GB DDR4-2400
GTX 1060 6GB DDR5

erstellt am: 09. Okt. 2017 13:29    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 SKYSURFER 10 Unities + Antwort hilfreich

Hallo  

Code:

    If iViewPosX > 0 Or _
    iViewPosX < iSheetSizeX Or _
    iViewPosY > 0 And _
    iViewPosY < iSheetSizeY Then

Der Irrtum liegt tatsächlich hier. Müsste so aussehen:

Code:

    If iViewPosX > 0 And _
    iViewPosX < iSheetSizeX And _
    iViewPosY > 0 And _
    iViewPosY < iSheetSizeY Then

Hier ist kein OR Operator nötig weil du ja alle Bedingungen als Wahr erfüllt haben willst damit die Ansicht innerhalb des Sheets ist.
→ Punkte müssen alle über 0 liegen, sowohl X und Y und dürfen alle nicht über die Grenzwerte kommen SheetMaxX, SheetMaxY.

Die Case-Abfrage halte ich übrigens für überflüssig. Man könnte recht einfach die Width und Height Angaben des Sheets nutzen → unabhängig von der Papiernorm.

Hab das ganze beim Test minimal überarbeitet (mich haben die vielen Meldungen gestört)

Code:

Public Sub TestDrgView()
    ' Beenden der Funktion, wenn kein Dokument geöffnet ist
    If ThisApplication.Documents.Count = 0 Then
       
        MsgBox "Kein Zeichnungsdokument geöffnet!"
        Exit Sub
    End If
 
    ' Beenden der Funktion, wenn das Dokument keine Zeichnung (*.idw) ist
    If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
       
        MsgBox "Kein Zeichnungsdokument geöffnet!"
        Exit Sub
    End If
 
    ' Aktiviert das geöffnete Dokument
    Dim oDrawDoc As DrawingDocument
    Set oDrawDoc = ThisApplication.ActiveDocument
   
    Dim iSheetSizeX As Double
    Dim iSheetSizeY As Double
   
    'Set the paper size and scale
    On Error Resume Next
 
    ' Auswahl der gewünschten Bemaßungen
    Dim oDrawView As DrawingView
    Set oDrawView = ThisApplication.CommandManager.Pick(kDrawingViewFilter, "Ansicht auswählen")
   
    Dim iViewPosX As Double
    Dim iViewPosY As Double
   
    iViewPosX = oDrawView.Center.X
    iViewPosY = oDrawView.Center.Y
   
'  iViewPosX größer 0
'  iViewPosX kleiner iSheetSizeX
'  iViewPosY größer 0
'  iViewPosY kleiner iSheetSizeY

    Dim Meldung As String
    Meldung = ""
   
    If iViewPosX > 0 And _
    iViewPosX < oDrawDoc.ActiveSheet.Width And _
    iViewPosY > 0 And _
    iViewPosY < oDrawDoc.ActiveSheet.Height Then
       
        Meldung = "Ansicht auf dem Blatt"
    Else
   
        Meldung = "Ansicht NICHT auf dem Blatt"
       
    End If
   
    Meldung = Meldung & vbCrLf & "Ansicht: " & oDrawView.Name
    Meldung = Meldung & vbCrLf & "Pos X: " & iViewPosX
    Meldung = Meldung & vbCrLf & "Pos Y: " & iViewPosY
   
   
    MsgBox (Meldung)
   
    'MsgBox "Ansicht: " & oDrawView.Name
    'MsgBox "Pos X: " & iViewPosX
    'MsgBox "Pos Y: " & iViewPosY
   
End Sub



[Diese Nachricht wurde von Tacker am 09. Okt. 2017 editiert.]

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



Fertigungs-/ Prozessingenieur (m/w/d)

Centrotherm ist eine 100%ige Tochtergesellschaft der Cen­trotec SE, einer in Deutschland ansässigen und international vertretenen Unternehmensgruppe mit annähernd 2.000 Mitarbeitern und Mitarbeiterinnen.
Die enge, familiäre Zusammenarbeit unserer internationalen Standorte und die Nutzung von Synergien garantieren uns entscheidende Wettbewerbsvorteile. Durch unser breite s Unternehmensnetzwerk bieten wir unseren Kunden und Partnern das Gesamtpaket....

Anzeige ansehenProzessmanagement
SKYSURFER
Mitglied
Maschinenbautechniker


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

Beiträge: 361
Registriert: 27.08.2004

IV2016 SP2
ständiger Rechnerwechsel

erstellt am: 09. Okt. 2017 16:49    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 Alex,
hallo Tacker,

Danke für den Input. Nun passt es und kann weiter verwendet werden. Hier mein Code falls diesen noch jemand benötigt:

Code:
Public Sub TestDrgView()

    ' Beenden der Funktion, wenn kein Dokument geöffnet ist
    If ThisApplication.Documents.Count = 0 Then
     
        MsgBox "Kein Zeichnungsdokument geöffnet!"
        Exit Sub
    End If

    ' Beenden der Funktion, wenn das Dokument keine Zeichnung (*.idw) ist
    If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
     
        MsgBox "Kein Zeichnungsdokument geöffnet!"
        Exit Sub
    End If

    ' Aktiviert das geöffnete Dokument
    Dim oDrawDoc As DrawingDocument
    Set oDrawDoc = ThisApplication.ActiveDocument
   
    Dim oSheet As Sheet
    Set oSheet = oDrawDoc.ActiveSheet

    ' Auswahl der gewünschten Bemaßungen
    Dim oDrawView As DrawingView
    Set oDrawView = ThisApplication.CommandManager.Pick(kDrawingViewFilter, "Ansicht auswählen")

    If oDrawView.Center.X > 0 _
    And oDrawView.Center.Y > 0 _
    And oDrawView.Center.X < oSheet.Width _
    And oDrawView.Center.Y < oSheet.Height Then
     
        MsgBox "Ansicht auf dem Blatt"
       
    Else
 
        MsgBox "Ansicht NICHT auf dem Blatt"
     
    End If
 
    'MsgBox "Ansicht: " & oDrawView.Name
    'MsgBox "Pos X: " & oDrawView.Center.X
    'MsgBox "Pos Y: " & oDrawView.Center.Y
 
End Sub


Gruß
SKYSURFER

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