2013-10-02 5 views
1

Каков правильный способ копирования существующего видового экрана, то, что я на самом деле делаю, заключается в том, что клонировать макет, копируя то, что внутри него, все работает плавно, за исключением видовых экранов. Я попытался использовать метод clone, но это не сработало, я также попытался использовать метод copyfrom, но также безрезультатно. В обоих случаях скопированный окна просмотра немой черный прямоугольникКак скопировать или закрыть окно просмотра?

Dim exkeyvport As Autodesk.AutoCAD.DatabaseServices.Viewport = DirectCast(acTrans.GetObject(objId, OpenMode.ForRead), Autodesk.AutoCAD.DatabaseServices.Viewport) 
Dim keyvport As New Autodesk.AutoCAD.DatabaseServices.Viewport 

keyvport.CopyFrom(exkeyvport) 
keyvport.UpdateDisplay() 
NewblkTableRec.AppendEntity(keyvport) 
acTrans.AddNewlyCreatedDBObject(keyvport, True) 

Единственный способ, который частично работал для меня, чтобы создать окно просмотра и копировать его атрибуты один на один, но это является исчерпывающим и не является надежным, так может кто-нибудь говорит нам о правильном способе копирования окна просмотра?

+0

Viewport.deepClone()? –

+0

Спасибо, много это сработало: D –

ответ

2

для других людей, которые заинтересованы в деталях о том, как выполнить deepclone здесь код: ObjId относится к объекту видового экрана идентификатор

If (objId.ObjectClass.DxfName.ToUpper = "VIEWPORT") Then 
        Dim id As ObjectId = newLayout.BlockTableRecordId 
        Dim idcol As New ObjectIdCollection 
        idcol.Add(objId) 
        Dim idmap As New IdMapping 
        acCurdb.DeepCloneObjects(idcol, acCurdb.CurrentSpaceId, idmap, False) 
    End if