| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Zeichung: Ansicht auf dem Blatt? (886 / mal gelesen)
|
SKYSURFER Mitglied Maschinenbautechniker
Beiträge: 361 Registriert: 27.08.2004 IV2016 SP2 ständiger Rechnerwechsel
|
erstellt am: 08. Okt. 2017 13:59 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für SKYSURFER
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
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 / zitieren --> Unities abgeben: Nur für SKYSURFER
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 |
SKYSURFER Mitglied Maschinenbautechniker
Beiträge: 361 Registriert: 27.08.2004 IV2016 SP2 ständiger Rechnerwechsel
|
erstellt am: 09. Okt. 2017 16:49 <-- editieren / zitieren --> Unities abgeben:
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 |