明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 328|回复: 6

CAD.Net 获取绘图区域范围[左下,右上]

  [复制链接]
发表于 2024-6-11 13:21 | 显示全部楼层 |阅读模式
本帖最后由 fangmin723 于 2024-6-11 13:45 编辑

  1. [CommandMethod("ScreenExtents")]
  2. public void ScreenExtents()
  3. {
  4.     Document doc = Acap.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     var ext = Env.ScreenArea;

  7.     var ext1 = Env.DrawingArea;
  8.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  9.     {
  10.         //Draws a line to visualize result...

  11.         Line line = new Line(ext.MinPoint, ext.MaxPoint);
  12.         Line line1 = new Line(ext1.MinPoint, ext1.MaxPoint);
  13.         line1.ColorIndex = 1;
  14.         BlockTableRecord btr = Tx.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  15.         btr.AppendEntity(line);
  16.         btr.AppendEntity(line1);
  17.         Tx.AddNewlyCreatedDBObject(line, true);
  18.         Tx.AddNewlyCreatedDBObject(line1, true);
  19.         Tx.Commit();
  20.     }
  21. }

autocad.net(c#)获取autocad模型空间窗口大小_c#获取窗口大小-CSDN博客
  1. /// <summary>
  2. /// 获取绘图区域范围[左下,右上]
  3. /// 参考:<see href="https://adndevblog.typepad.com/AutoCAD/2012/04/getting-the-extents-of-autocad-model-window.html"/>
  4. /// </summary>
  5. public static Extents3d ScreenArea
  6. {
  7.     get
  8.     {
  9.         var doc = Acap.DocumentManager.MdiActiveDocument;
  10.         var ed = doc.Editor;
  11.         var screenSize = (Point2d)Acap.GetSystemVariable("SCREENSIZE");
  12.         var leftUpper = new System.Drawing.Point(0, 0);
  13.         var rightLower = new System.Drawing.Point((int)screenSize.X, (int)screenSize.Y);
  14.         var leftUpperPt = ed.PointToWorld(leftUpper, 0);
  15.         var rightLowerPt = ed.PointToWorld(rightLower, 0);
  16.         return new(leftUpperPt.GetMinPtTo(rightLowerPt), leftUpperPt.GetMaxPtTo(rightLowerPt));
  17.     }
  18. }

  19. /// <summary>
  20. /// 获取绘图区域范围[左下,右上]
  21. /// 参考:<see href="http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=171361&pid=763395&fromuid=7316343"/>
  22. /// </summary>
  23. public static Extents3d DrawingArea
  24. {
  25.     get
  26.     {
  27.         var areaCenter = "VIEWCTR".GetVar<Point3d>();
  28.         var areaHeight = "VIEWSIZE".GetVar<double>() * 0.5;
  29.         var areaSize = "SCREENSIZE".GetVar<Point2d>();
  30.         var areaVect = new Vector3d(areaSize.X / areaSize.Y * areaHeight, areaHeight, 0);
  31.         return new(areaCenter - areaVect, areaCenter + areaVect);
  32.     }
  33. }


出自:IFoxCad
  1. /// <summary>
  2. /// 获取CAD的系统变量
  3. /// </summary>
  4. /// <typeparam name="T">值的类型</typeparam>
  5. /// <param name="name">要获取的系统变量名称</param>
  6. /// <returns>返回系统变量</returns>
  7. public static T GetVar<T>(this string name)
  8. {
  9.     if (string.IsNullOrEmpty(name)) return default;
  10.     try { return (T)Acap.GetSystemVariable(name); }
  11.     catch (Exception) { throw; }
  12.     //return Acaop.GetSystemVariable(name);
  13. }

  14. /// <summary>
  15. /// 设置CAD的系统变量
  16. /// 0x01 建议先获取现有变量值和设置的是否相同,否则直接设置会发生异常<br/>
  17. /// 0x02 建议锁文档,否则 Psltscale 设置发生异常<br/>
  18. /// 发生异常的时候vs输出窗口会打印一下,但是如果不介意也没啥问题
  19. /// </summary>
  20. /// <param name="name">要设置的系统变量名称</param>
  21. /// <param name="value">要设置的系统变量值</param>
  22. /// <param name="echo">输出异常,默认true;此设置仅为打印到命令栏,无法控制vs输出</param>
  23. public static void SetVar(this string name, object value, bool echo = true)
  24. {
  25.     if (string.IsNullOrEmpty(name)) return;
  26.     if (value is null) return;
  27.     try { Acap.SetSystemVariable(name, value); }
  28.     catch (Exception) { if (echo) $"{value} 是不存在的变量!".PrintLine(); }
  29. }







评分

参与人数 2明经币 +2 金钱 +50 收起 理由
zhoupeng220 + 1 很给力!
zixuan203344 + 1 + 50 小青春niubility

查看全部评分

发表于 2024-6-11 14:27 | 显示全部楼层
楼主这是要写批打插件了吗
 楼主| 发表于 2024-6-11 15:46 | 显示全部楼层
szhorse 发表于 2024-6-11 14:27
楼主这是要写批打插件了吗

不是,批量打印我用lisp写了个,.NET版,暂时没有想法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-6-11 16:25 | 显示全部楼层
fangmin723 发表于 2024-6-11 15:46
不是,批量打印我用lisp写了个,.NET版,暂时没有想法

厉害了,自给自足
发表于 2024-6-11 18:21 | 显示全部楼层
芜湖,居然看到了更新了getvar,但是这个事务怎么没有using(xx);短写
 楼主| 发表于 2024-6-11 22:03 | 显示全部楼层
你有种再说一遍 发表于 2024-6-11 18:21
芜湖,居然看到了更新了getvar,但是这个事务怎么没有using(xx);短写

从网站上看抄来的,为了新手的可读性,我就没改动他了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-22 20:36 , Processed in 0.152305 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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