Autor
|
Thema: Viewgröße und Position (2090 mal gelesen)
|
elharry Mitglied
Beiträge: 47 Registriert: 03.04.2007
|
erstellt am: 03. Mrz. 2008 13:12 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte prüfen ob alle Views auf einem Zeichnungsblatt liegen. Damit beim Plotten nichts übersteht und nicht mit gedruckt wird. Herrausgefunden habe ich schon wie groß das Blatt ist. Nun wollte ich mit die Boundingbox der Views anschauen und da hänge ich. Ich habe mir den Code dazu aus der Onlinedoku herraus gesucht. Weiterhin benötige ich nocht die Position X, Y der Views, wie macht man das? Sub CATMain() Dim DrawingDocument As Document Dim DrawingSheets As DrawingSheets Dim DrawingSheet As DrawingSheet Dim DrawingViews As DrawingViews Dim DrawingView As DrawingView Dim GenerativeBehavior As Behavior Dim I As Integer Dim Count As Integer Dim Box As String Dim oXY Dim Xmin As Integer Dim Xmax As Integer Dim Ymin As Integer Dim Ymax As Integer Dim Strline As String Dim TEST 'As DrawingView 'Dim MySheet As DrawingSheet Dim PSize Set DrawingDocument = CATIA.ActiveDocument Set DrawingSheets = DrawingDocument.Sheets Set DrawingSheet = DrawingSheets.ActiveSheet Set DrawingViews = DrawingSheet.Views Count = DrawingViews.Count 'MsgBox ("COUNT VIEWS : " & count) For I = 1 To Count TEST = DrawingViews.Item(I).Name ' --> ab hier funkgioniert es nicht mehr DrawingViews.Item(I).Size oXY Xmin = oXY(0) Xmax = oXY(1) Ymin = oXY(2) Ymax = oXY(3) ' Dim MyViewGenBehavior As DrawingViewGenerativeBehavior ' Set MyViewGenBehavior = TEST.GenerativeBehavior Strline = "View : " & TEST & vbLf Strline = Strline & "XMin : " & Xmin & vbLf Strline = Strline & "YMin : " & Ymin & vbLf Strline = Strline & "XMax : " & Xmax & vbLf Strline = Strline & "YMax : " & Ymax & vbLf Box = MsgBox(Strline) Next ' Papiergröße auslesen Dim drawingDocument1 As Document 'As Variant Set drawingDocument1 = CATIA.ActiveDocument Dim drawingSheets1 As DrawingSheets 'As Variant Set drawingSheets1 = drawingDocument1.Sheets Dim drawingSheet1 As DrawingSheet 'As Variant Set drawingSheet1 = drawingSheets1.ActiveSheet Strline = "Blattgröße:" & vbLf Strline = Strline & "Papierhöhe : " & drawingSheet1.GetPaperHeight & vbLf Strline = Strline & "Papierbreite : " & drawingSheet1.GetPaperWidth MsgBox (Strline) ' Papiergröße definieren 'drawingSheet1.SetPaperHeight 1000 'drawingSheet1.SetPaperWidth 300 End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 03. Mrz. 2008 22:24 <-- editieren / zitieren --> Unities abgeben: Nur für elharry
Hallo elharry, habe mich noch nicht tiefer mit Deinem Problem beschäftigt, doch aus meiner Erfahrung heraus denke ich, Du musst die Größe des Arrays vor der Nutzung definieren. Also etwa so: Code: ReDim oXY(3) DrawingViews.Item(I).Size oXY
Dann sollte das erste Problem gelöst sein. Die nächsten Probleme...[Edit] Es sollte auch bei "Dim" so lauten: Code: Dim oXY()
[/Edit]mfg, Lusilnie ------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern [Diese Nachricht wurde von Lusilnie am 03. Mrz. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
elharry Mitglied
Beiträge: 47 Registriert: 03.04.2007
|
erstellt am: 04. Mrz. 2008 07:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, danke für die Antwort. Habe die Deklaration der Variablen geändert. Aber ich bekomme im VBA Editor noch immer die Meldung "Fehler beim Kompilieren: Funktion oder Schnittstelle kann nur eingeschränkt verwendet werden oder verwendet einen Typ der Automatisierung, der von Visual Basic nicht unterstützt wird." Der Zeiger (gelb) des VBA Editors zeigt dann immer auf Size in der Zeile DrawingViews.Item(I).Size oXY Vieleicht hast Du ja noch eine Idee, währe super. vielen Dank schon mal und einen schönen Tag. elHarry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 04. Mrz. 2008 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für elharry
|
elharry Mitglied
Beiträge: 47 Registriert: 03.04.2007
|
erstellt am: 04. Mrz. 2008 12:09 <-- editieren / zitieren --> Unities abgeben:
Hallo CAMiCADse, Danke für die Antwort und sorry, das ich mich erst jetzt melde. Heute ist hier viel los. Habe das AS Views auskommentiert, aber das funktioniert nicht. Danach habe ich das ganze aus dem VBA Editor genommen und in eine CATVBS Datei kopiert. Alle AS... auskommentiert. Fehlermeldung: The method Size failed Ich habe auch folgende Varianten ausprobiert DrawingViews.Item(I).Size oXY DrawingViews.Item(I).Size oXY () DrawingViews.Item(I).Size oXY (i) Hast Du eine Idee oder Anregung? Habe den Code noch mal angehängt, verusche das ganze auch auf anderen Wegen rauszubekommen ob eine View über das Blatt hängt oder nicht.
Option Explicit Sub CATMain() Dim DrawingDocument 'AS Document Dim DrawingSheets 'AS DrawingSheets Dim DrawingSheet 'AS DrawingSheet Dim DrawingViews 'AS DrawingViews Dim DrawingView 'AS DrawingView Dim GenerativeBehavior 'AS Behavior Dim I 'AS Integer Dim Count 'AS Integer Dim Box 'AS String Dim oXY (4) Dim Xmin 'AS Integer Dim Xmax 'AS Integer Dim Ymin 'AS Integer Dim Ymax 'AS Integer Dim Strline 'AS String Dim TEST ''AS DrawingView 'Dim MySheet 'AS DrawingSheet Dim PSize 'Dim AktivView Dim Real_X 'AS Double Dim Real_Y 'AS Double Dim ThatDrawingView 'AS DrawingView Dim Test_X 'AS Double Dim Test_Y 'AS Double Dim GBehave 'Set ThatDrawingView = MySheet.Views.ActiveView.Item("MyView")
Set DrawingDocument = CATIA.ActiveDocument Set DrawingSheets = DrawingDocument.Sheets Set DrawingSheet = DrawingSheets.ActiveSheet Set DrawingViews = DrawingSheet.Views Count = DrawingViews.Count 'MsgBox ("COUNT VIEWS : " & count) For I = 1 To Count TEST = DrawingViews.Item(I).Name Test_X = DrawingViews.Item(I).X Test_Y = DrawingViews.Item(I).Y 'Set GBehave = DrawingViews.Item(I).GenerativeBehavior Dim objGeoElements 'AS GeometricElements Set objGeoElements = CATIA.ActiveDocument.Sheets.ActiveSheet.Views.ActiveView.GeometricElements 'ReDim oXY(4) DrawingViews.Item(I).Size oXY 'TEST.Size oXY 'MsgBox ("NAME der View : " & TEST) Xmin = oXY(0) Xmax = oXY(1) Ymin = oXY(2) Ymax = oXY(3) Real_X = DrawingViews.ActiveView.X - (DrawingViews.ActiveView.X - DrawingViews.ActiveView.xAxisData) * DrawingViews.ActiveView.Scale2 Real_Y = DrawingViews.ActiveView.Y - (DrawingViews.ActiveView.Y - DrawingViews.ActiveView.yAxisData) * DrawingViews.ActiveView.Scale2 Next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 04. Mrz. 2008 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für elharry
Hallo, hab jetzt erst gesehen, dass deine Schleife bei 1 loslegt. Du mußt bei 3 loslegen. Views.Item(1)=Main View Views.Item(2)=Background View Bei diesen Views kannst du keine Size abfragen. Gruß CAMiCADse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
elharry Mitglied
Beiträge: 47 Registriert: 03.04.2007
|
erstellt am: 04. Mrz. 2008 14:43 <-- editieren / zitieren --> Unities abgeben:
|
Knowledge Mitglied Dipl. Ing.
Beiträge: 106 Registriert: 02.03.2004
|
erstellt am: 04. Mrz. 2008 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für elharry
|