Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Viewport in neues Layout kopieren

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:  Viewport in neues Layout kopieren (1420 mal gelesen)
veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 08. Sep. 2011 09:28    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 gerne ein Ansichtsfenster und ein paar andere Objekte von Layout1 in ein neues Layout2, das ich vorher per Code erstelle, kopieren.

Mein Problem ist, dass alles kopiert wird, nur das Ansichtsfenster nicht.
muss bein Objekt noch etwas "nachgearbeitet" werden? eine bestimmte Eigenschaft umstellen, da es jetzt auf einem anderen Layout liegt?

[Edit]
Wenn ich nachher im Layout suche mit

Code:

Dim tDocLock As ApplicationServices.DocumentLock = Nothing
        Dim tTrAct As DatabaseServices.Transaction = Nothing
        Dim lay As Layout
        Dim BTR As BlockTableRecord
        Dim BTRE As BlockTableRecordEnumerator
        tDocLock = ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument

        tTrAct = ApplicationServices.Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction
        Using tTrAct
            lay = CType(tTrAct.GetObject(LayoutManager.Current.GetLayoutId("Layout2"), DatabaseServices.OpenMode.ForWrite, True, True), DatabaseServices.Layout)
            BTR = CType(tTrAct.GetObject(lay.BlockTableRecordId, DatabaseServices.OpenMode.ForWrite, True, True), DatabaseServices.BlockTableRecord)
            BTRE = BTR.GetEnumerator()
            While BTRE.MoveNext()
                Dim ent As Entity
                ent = tTrAct.GetObject(BTRE.Current, OpenMode.ForRead, True, True)
                If ent.ObjectId.ObjectClass.DxfName = "VIEWPORT" Then
                    Dim Vp As Viewport = CType(ent, Viewport)
                End If
            End While
        End Using



finde ich einen Viewport, mit genau meinen Einstellungen(Größe etc..) aber er wird nicht angezeigt, Visible = true, On = true was kann da noch falsch sein?
Nachdem ich das Layout vorher erst per Code erstellt habe, kann es sein, dass es den standard Layout Viewport Eintrag überschreibt?

mfg

[Diese Nachricht wurde von veydan am 08. Sep. 2011 editiert.]

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Sep. 2011 07:47    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 veydan 10 Unities + Antwort hilfreich

Hallo veydan,

du postest zwar den Code, mit dem der neue Viewport gefunden wird, aner nicht, wie du diesen kopierts? Das solltest du tun, denn der Fehler wird ja dort zu finden sein.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 09. Sep. 2011 09: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

Hallo!
Hier der Code vom Kopieren
Der VP ist wie gesagt ja im Layout, wenn ich das nach den Entities durchlaufe finde ich ihn, aber er wird nicht angezeigt...
Code:

tDocLock = tAcaddoc.LockDocument
            NewLayout = la
            tTrAct = tAcaddoc.TransactionManager.StartTransaction
            Using tTrAct
                tAcadDocDB = tAcaddoc.Database
                tAcadDocED = tAcaddoc.Editor
                tBlTab = CType(tTrAct.GetObject(tAcaddoc.Database.BlockTableId, DatabaseServices.OpenMode.ForWrite, True, True), DatabaseServices.BlockTable)
               
                mypsr = tAcadDocED.SelectWindow(New Geometry.Point3d(X, Y ,0), New Geometry.Point3d(X1,Y1,0))
                If Not IsNothing(mypsr.Value) Then
                    myss = mypsr.Value
                    selectionobjids = New DatabaseServices.ObjectIdCollection(myss.GetObjectIds) 
                    objidcoll = selectionobjids
                End If
            End Using
            If tDocLock IsNot Nothing Then tDocLock.Dispose() : tDocLock = Nothing
            If objidcoll.Count > 0 Then
                tTrAct = tAcaddoc.TransactionManager.StartTransaction
                Using tTrAct
                    tLayoutBlDef = getEmptyLayout(tTrAct, tBlTab)
                    If tLayoutBlDef Is Nothing Then
                        CreateLayout(tAcaddoc, tTrAct)
                        tLayoutBlDef = getEmptyLayout(tTrAct, tBlTab)
                    End If
                    tTrAct.Commit()
                End Using
                If tDocLock IsNot Nothing Then tDocLock.Dispose() : tDocLock = Nothing

                If tLayoutBlDef IsNot Nothing Then
                    tDocLock = tAcaddoc.LockDocument
                    tTrAct = tAcaddoc.TransactionManager.StartTransaction
                    Using tTrAct
                        tLayoutBlDef = CType(tTrAct.GetObject(tLayoutBlDef.ObjectId, DatabaseServices.OpenMode.ForWrite, False, False), DatabaseServices.BlockTableRecord)
                        Dim tlay As Layout = CType(tTrAct.GetObject(tLayoutBlDef.LayoutId, DatabaseServices.OpenMode.ForWrite, False, False), DatabaseServices.Layout)
                        newLayoutname = tlay.LayoutName
                        tlay = Nothing
                        tCopyColl = New DatabaseServices.DBObjectCollection

                        Dim enumerator As Collections.IEnumerator
                        enumerator = objidcoll.GetEnumerator

                        While enumerator.MoveNext
                            tDBObj = CType(tTrAct.GetObject(enumerator.Current, DatabaseServices.OpenMode.ForWrite, True, True), DatabaseServices.Entity)
                            If tDBObj IsNot Nothing Then
                                tDBObjClone = CType(tDBObj.Clone, DatabaseServices.Entity)

                                tLayoutBlDef.AppendEntity(tDBObjClone)
                                tTrAct.AddNewlyCreatedDBObject(tDBObjClone, True)

                                tCopyColl.Add(tDBObjClone)
                                NewObjIdColl.Add(tDBObjClone.ObjectId)

                                If tCopyColl.Count = 1 Then
                                    tCopyExtents = tDBObjClone.GeometricExtents
                                Else
                                    tCopyExtents.AddPoint(tDBObjClone.GeometricExtents.MinPoint)
                                    tCopyExtents.AddPoint(tDBObjClone.GeometricExtents.MaxPoint)
                                End If
                            End If
                        End While
                   
                        Dim tMoveVec As Geometry.Vector3d = New Geometry.Vector3d(-tCopyExtents.MinPoint.X, -tCopyExtents.MinPoint.Y, -tCopyExtents.MinPoint.Z)
                        Dim tTransMat As Geometry.Matrix3d = Geometry.Matrix3d.Displacement(tMoveVec)

                        For Each NewObjectId As ObjectId In NewObjIdColl
                            Try
                                Dim tDbEnt As DatabaseServices.Entity
                                    tDbEnt = CType(tTrAct.GetObject(NewObjectId, DatabaseServices.OpenMode.ForWrite), DatabaseServices.Entity)
                                    tDbEnt.TransformBy(tTransMat)
                                End If
                            Catch ex As Exception
                              End Try
                        Next

                        'Die alten Elemente löschen
                        enumerator = objidcoll.GetEnumerator
                        While enumerator.MoveNext
                            tDBObj = TryCast(tTrAct.GetObject(enumerator.Current, DatabaseServices.OpenMode.ForWrite, True, True), DatabaseServices.Entity)
                            If tDBObj IsNot Nothing Then
                                tDBObjClone = CType(tDBObj.Clone, DatabaseServices.Entity)
                                tDBObj.Erase()
                            End If
                        End While
                        tTrAct.Commit()
                    End Using
                    If tDocLock IsNot Nothing Then tDocLock.Dispose() : tDocLock = Nothing


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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 12. Sep. 2011 08:21    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

konnte das schon jemand nachvollziehen?

es funktioniert auch nicht bei einer einfachen Zeichnung mit einem Kreis im Modell, zwei Rahmen SK Blöcke im Layout und jeweils 1 Ansichtsfenster.
für die GetEmptyLayout Funktion, kann auch gleich direkt auf ein vorhandenes leeres Layout zugegriffen werden...

wäre toll, wenn das jemand bestätigen könnte.
Beziehungsweise, wenn es funktionieren würde, wird auch die Zoomeinstellung des Viewports mitkopiert?
mfg

Lässt sich der Zoombereich in einem Ansichtsfenster per Code auch anders einstellen, als mit SwitchToModelSpace, dann die aktuelle Ansicht setzen und wieder in den Modellbereich wechseln?
Ich wäre jetzt den Umweg gegangen, mir die Viewports zu merken, und sie dann einfach nochmal zu erzeugen, das funktioniert wunderbar, nur die Zoomeinstellungen passen dann natürlich nicht...


Problem gelöst, wie gesagt mit dem merken der Viewports und dann neu Erstellen im jeweiligen Layout.

[Diese Nachricht wurde von veydan am 14. Sep. 2011 editiert.]

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