| | | 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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 08. Sep. 2011 09:28 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 09. Sep. 2011 07:47 <-- editieren / zitieren --> Unities abgeben: Nur für veydan
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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 09. Sep. 2011 09:29 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 12. Sep. 2011 08:21 <-- editieren / zitieren --> Unities abgeben:
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 >>)
|