乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 55|回复: 3

[求助]在图纸空间创建浮动视口的问题

[复制链接]

4

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
28
发表于 2010-5-4 00:22:00 | 显示全部楼层 |阅读模式
//下面的代码在图形空间创建了一个浮动视口,但要如何实现下面几项功能还要请高手指教。
        //1. 如何将视口设置为等轴测视图,如西南视图
        //2. 如何在视口内最大化显示指定的实体
        //3. 如何在视口内冻结指定的图层
        public void vp()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Viewport vp = new Viewport();
                vp.CenterPoint = new Point3d(0,0,0);
                vp.Width = 30;
                vp.Height = 40;               
               
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForWrite);
                btr.AppendEntity(vp);
                trans.AddNewlyCreatedDBObject(vp,true);
                //激活视口
                vp.On = true;
                //设置视口的视图
                vp.SetViewDirection(OrthographicView.LeftView);//OrthographicView只有正交视图的参数,要如何设置为等轴测视图呢?如西南视图...
                vp.SetShadePlot(ShadePlotType.Hidden, vp.Id);//第二个参数我用vp.Id是我瞎猜的,虽然编译通过,但具体什么意思我还不明白
                //设置要冻结的图层我猜过去一定是用FreezeLayersInViewport方法,但这个方法所需要的参数却不知道要怎样写.
                //vp.FreezeLayersInViewport(???)
                trans.Commit();
            }
            
        }
回复

使用道具 举报

4

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
28
发表于 2010-5-4 09:28:00 | 显示全部楼层
解决了第3个问题 下面的代码可以在视口内冻结0层以外的图层
                //下面的代码可以在视口内冻结0层以外的图层
                LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
                ObjectIdCollection ids = new ObjectIdCollection();
                foreach (ObjectId id in lt)
                {
                    LayerTableRecord ltr = (LayerTableRecord)trans.GetObject(id, OpenMode.ForRead);
                    if (ltr.Name != "0")
                    {
                        ids.Add(id);
                    }
                }
            
                vp.FreezeLayersInViewport(ids.GetEnumerator());
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-5-4 13:57:00 | 显示全部楼层
参考下这里
不过视口的缩放好像不太一样,kean的博客有看到类似的代码
视图方向应该是更改当前视图的扭转角等的途径实现吧
回复

使用道具 举报

4

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
28
发表于 2010-5-5 19:05:00 | 显示全部楼层
解决了第1个问题,原来只要下面这一行代码就可以将视口设置为西南等轴测视图
vp.ViewDirection = new Vector3d(-1, -1, 1);
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:16 , Processed in 0.446063 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表