明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1907|回复: 2

如何在不将指定布局设置为当前布局的情况下,在该布局上新建视口?

[复制链接]
发表于 2012-5-6 23:30:00 | 显示全部楼层 |阅读模式
如何在不将指定布局设置为当前布局的情况下(布局切换起来速度比较慢),在该布局上新建视口?
通过第一个sub创建布局,然后由第二个sub在该布局上创建视口。可是,可以由第二个sub在第一个过程中生成的布局上画直线等对象,但无法创建创建视口,为何?又试了一下可以通过第二个sub在已经存在的指定布局(非程序生成的)上创建视口,貌似同一个程序运行过程中生成的布局只生成在内存中,而没有生成在记录中。请高人指点。一下是部分代码:
    Public Sub CreatLayouts(ByVal VPNo As Double, ByRef acLytBTRId As ObjectId)
        Dim acCurDb As Database = HostApplicationServices.WorkingDatabase
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        Dim layoutId As ObjectId
        Dim acLayout As Layout
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim acLayoutMgr As LayoutManager
            acLayoutMgr = LayoutManager.Current
            layoutId = acLayoutMgr.CreateLayout("VP" & VPNo)
            acLayout = Trans.GetObject(layoutId, OpenMode.ForWrite)
            acLytBTRId = acLayout.BlockTableRecordId()
            acTrans.Commit()
        End Using
    End Sub

   Public Sub CreateFloatingViewport(ByVal ViewPortParab As VPpara, ByVal Vwidth As Double, ByVal Vheight As Double, _
                                      ByVal BkTbRdId As ObjectId, ByVal VP_layer As ObjectId)
        Dim acCurDb As Database = HostApplicationServices.WorkingDatabase
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        Dim acLayout As Layout
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(BkTbRdId, OpenMode.ForWrite)
            Dim LineEnt As New Line(New Point3d(0, 500 / 2, 0.0), New Point3d(0, -500 / 2, 0.0))
            acBlkTblRec.AppendEntity(LineEnt)
            acTrans.AddNewlyCreatedDBObject(LineEnt, True)
            Dim acVport As Viewport = New Viewport()
            acVport.SetDatabaseDefaults()
            acVport.CenterPoint = New Point3d(Vwidth / 2, Vheight / 2, 0)
            acVport.Width = Vwidth
            acVport.Height = Vheight
            acVport.TwistAngle = ViewPortParab.Slopeangle
            acVport.ViewCenter = New Point2d(ViewPortParab.x_coordinate * Math.Cos(-ViewPortParab.Slopeangle) + ViewPortParab.y_coordinate * Math.Sin(-ViewPortParab.Slopeangle), -ViewPortParab.x_coordinate * Math.Sin(-ViewPortParab.Slopeangle) + ViewPortParab.y_coordinate * Math.Cos(-ViewPortParab.Slopeangle))
            acVport.ViewHeight = Vheight * ViewPortParab.Plotscale
            acVport.LayerId = VP_layer
            acBlkTblRec.AppendEntity(acVport)
            acTrans.AddNewlyCreatedDBObject(acVport, True)
            acVport.On = True
            acTrans.Commit()
        End Using
    End Sub
发表于 2012-5-7 09:45:15 | 显示全部楼层
通过第一个sub创建布局,然后由第二个sub在该布局上创建视口。可是,可以由第二个sub在第一个过程中生成的布局上画直线等对象,但无法创建创建视口
---------------------------------
感觉你这里两句话说的同一个意思。你当前第二个sub没有创建布局也没有调用第一个sub
或许你要注意AppendEntity 或 AddNewlyCreatedDBObject
 楼主| 发表于 2012-5-7 22:22:03 | 显示全部楼层
非常感谢!请问创建布局需要用到AppendEntity 或 AddNewlyCreatedDBObject吗?
运行第一个sub可以创建布局(比如VP1,VP2等),但当运行到第二个sub时却无法在布局上生成视口。我是通过在两个sub之间传递指定布局的BlockTableRecordId来实现此功能,我尝试了一下可以通过该方法在布局中生成直线等对象,但就是无法创建视口。难道对于新创建的布局必须将布局设为current才能创建视口吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 18:34 , Processed in 0.190526 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表