| |
| 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
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 |
| Fertigungs-/ Prozessingenieur (m/w/d) | Centrotherm ist eine 100%ige Tochtergesellschaft der Centrotec 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 ansehen | Prozessmanagement |
|
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 |