乐筑天下

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

[编程交流] 缩放视口

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:39:17 | 显示全部楼层 |阅读模式
大家好,
 
现在,我正在尝试创建一个命令,允许用户在创建图形时输入默认的视口大小,但有几件事我还没有解决。第一个问题是如何使默认视口大小同时应用于模型空间和所有布局,还是自动实现?第二个问题是如何使用c#设置自定义视口大小?
 
下面是一些代码,允许我查询现有视口的比例。
  1. [CommandMethod("CHVScale")]
  2.        public void CurrentVportScale()
  3.        {
  4.            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  5.            ObjectId vpid = ed.CurrentViewportObjectId;
  6.            using (Transaction tr =
  7.            ed.Document.TransactionManager.StartTransaction())
  8.            {
  9.                Viewport vport = (Viewport)tr.GetObject(vpid, OpenMode.ForRead);
  10.                ed.WriteMessage(vport.CustomScale.ToString());
  11.            }
  12.        }

我试图将最后几行更改为
  1. vport.CustomScale.Equals(2:1);
  2. tr.commit();
  3. tr.dispose();

但是没有用。如有任何见解,将不胜感激。值得一提的是,我之前运行了一个命令(但可以在之后运行),该命令根据用户输入创建“x”个布局,因此这些布局还需要接受新的视口比例。
 
提前感谢!
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 22:48:14 | 显示全部楼层
是否要将比例应用于模型空间中的对象和图纸空间布局中的视口?
回复

举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:52:34 | 显示全部楼层
我只是仔细检查了一下,它实际上只需要应用于图纸空间布局
回复

举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 23:01:47 | 显示全部楼层
这很好。你刚才把我弄糊涂了。
回复

举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 23:08:43 | 显示全部楼层
请阅读代码发布指南。
回复

举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 23:14:23 | 显示全部楼层
抱歉,我假设是格式问题,现在已经解决了,很抱歉打扰您。
回复

举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 23:18:01 | 显示全部楼层
 
你不麻烦,谢谢你把代码放在标签里。
回复

举报

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-6 23:26:39 | 显示全部楼层
可以使用StandardScaleType枚举设置StandardScale
如果不是标准比例,可以使用CustomScale属性进行设置(即使是标准比例,也可以使用Custom scale属性进行设置,但要传递“double”值)
回复

举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 23:32:02 | 显示全部楼层
感谢您迄今为止的帮助,非常感谢。在开发者手册或其他地方是否有这样的例子。我仍然有点迷路,我的代码似乎抛出了很多致命的错误。
回复

举报

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-6 23:33:28 | 显示全部楼层
就像我在之前的帖子中提到的,你用标准比例改变它,并传递一个枚举值
 
  1. [CommandMethod("StandardScaleViewPort")]
  2.        public void StandardScaleViewPort()
  3.        {
  4.            Document doc = Application.DocumentManager.MdiActiveDocument;
  5.            Database db = doc.Database;
  6.            Editor ed = doc.Editor;
  7.            using (Transaction trx = db.TransactionManager.StartTransaction())
  8.            {
  9.                PromptEntityOptions peo = new PromptEntityOptions("\nSelect Viewport: ");
  10.                peo.SetRejectMessage("\nInvalid selection...");
  11.                peo.AddAllowedClass(typeof(Viewport), true);
  12.                PromptEntityResult per = ed.GetEntity(peo);
  13.                if (per.Status != PromptStatus.OK)
  14.                {
  15.                    return;
  16.                }
  17.                Viewport vp = trx.GetObject(per.ObjectId, OpenMode.ForWrite) as Viewport;
  18.                vp.StandardScale = StandardScaleType.Scale1To8inchAnd1ft;
  19.                trx.Commit();
  20.            }
  21.        }

 
或者使用自定义比例并在双精度中传递,这与第一个命令相同,只是它要求比例并使用customscale属性
 
  1.   [CommandMethod("CustomScaleViewport")]
  2.           public void CustomScaleViewport()
  3.           {
  4.               Document doc = Application.DocumentManager.MdiActiveDocument;
  5.               Database db = doc.Database;
  6.               Editor ed = doc.Editor;
  7.               using (Transaction trx = db.TransactionManager.StartTransaction())
  8.               {            
  9.                   PromptEntityOptions peo = new PromptEntityOptions("\nSelect Viewport: ");
  10.                   peo.SetRejectMessage("\nInvalid selection...");
  11.                   peo.AddAllowedClass(typeof(Viewport), true);
  12.                   PromptEntityResult per = ed.GetEntity(peo);
  13.                   if (per.Status != PromptStatus.OK)
  14.                   {
  15.                       return;
  16.                   }
  17.                   Viewport vp = trx.GetObject(per.ObjectId, OpenMode.ForWrite) as Viewport;
  18.                   PromptDoubleOptions pdo = new PromptDoubleOptions("\nEnter Scale");
  19.                   PromptDoubleResult pdr = ed.GetDouble(pdo);
  20.                   if (pdr.Status != PromptStatus.OK)
  21.                   {
  22.                       return;
  23.                   }
  24.                   vp.CustomScale = pdr.Value;
  25.                   trx.Commit();
  26.               }
  27.           }
回复

举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-28 14:44 , Processed in 0.326538 second(s), 83 queries .

© 2020-2025 乐筑天下

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