首页 > 其他分享 >CAD二次开发 实现快速截图

CAD二次开发 实现快速截图

时间:2024-12-30 22:09:53浏览次数:1  
标签:p2 截图 p1 Point System var 二次开发 using CAD

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShotScreen
{
    public class Program
    {
        private static Point p;

        [CommandMethod("ssss")]
        public void Start()
        {
            Application.PreTranslateMessage += Application_PreTranslateMessage;
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            var ppr1 = ed.GetPoint("请选择第一个点");
            Point p1 = new Point(), p2 = new Point();
            if (ppr1.Status != PromptStatus.OK)
            {
                return;
            }
            else if (ppr1.Status == PromptStatus.OK)
            {
                p1 = new Point(p.X,p.Y);
            }
            Point3d bp = ppr1.Value;
            var ppr2 = ed.GetCorner("请选择第二个点", bp);
            if (ppr2.Status != PromptStatus.OK)
            {
                return;
            }
            else if (ppr2.Status == PromptStatus.OK)
            {
                p2 = new Point(p.X, p.Y);
            }

            try
            {
                Bitmap bitmap = Util.SavePng(p1, p2);
                bitmap.Save("D:\\test.png", System.Drawing.Imaging.ImageFormat.Png);
            }
            catch (System.Exception)
            {

            }
            finally
            {
                Application.PreTranslateMessage -= Application_PreTranslateMessage;
            }

        }

        private void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
        {
            p.X = e.Message.pt_x;
            p.Y = e.Message.pt_y;
        }
    }
}
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Acap = Autodesk.AutoCAD.ApplicationServices.Application;

namespace ShotScreen
{
    public class Util
    {
        [DllImport("user32.dll")]
        public static extern bool ClientToScreen(IntPtr hWnd, ref System.Drawing.Point pt);
        public static Bitmap SavePng(Point p1, Point p2)
        {
            Rectangle tScreenRect = new Rectangle(
                Math.Min(p1.X, p2.X),
                Math.Min(p1.Y, p2.Y),
                Math.Abs(p1.X - p2.X),
                Math.Abs(p1.Y - p2.Y)
                );
            Bitmap tSrcBmp = new Bitmap(tScreenRect.Width, tScreenRect.Height);
            using (Graphics gp = Graphics.FromImage(tSrcBmp))
            {
                gp.CopyFromScreen(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y), 0, 0, tScreenRect.Size);
                //gp.DrawImage(tSrcBmp, 0, 0, tScreenRect, GraphicsUnit.Pixel);
            } 
  
            return tSrcBmp;
        }

        public static Point GetScreenPointFromCadPoint(Point3d point)
        {
            var doc = Acap.DocumentManager.MdiActiveDocument;
            var ed = doc.Editor;
            var wcsPoint = point.TransformBy(ed.CurrentUserCoordinateSystem);
            var hWnd = doc.Window.Handle;
            var vp = (short)Acap.GetSystemVariable("CVPORT");
            System.Windows.Point wdPt = ed.PointToScreen(wcsPoint, vp);
            var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;
            var drawingPt = new System.Drawing.Point(Convert.ToInt32(wdPt.X * scale), Convert.ToInt32(wdPt.Y * scale));
            ClientToScreen(hWnd, ref drawingPt);
            return drawingPt;
        }
    }


}

 

标签:p2,截图,p1,Point,System,var,二次开发,using,CAD
From: https://www.cnblogs.com/HRDK-CADeveloper/p/18642557

相关文章

  • 【商城系统的二次开发(二开)是否容易】
    商城系统的二次开发(二开)是否容易,取决于多种因素,包括项目的起点、原始系统的代码质量、开发团队的技术能力以及具体的需求等。以下是对商城系统二次开发难易程度的详细分析:项目起点:商城定制开发通常从零开始,根据客户的实际需求进行全新的系统设计和开发,灵活性更高,但成本和时......
  • H.265流媒体播放器EasyPlayer.js如何实现本地快照抓拍截图功能?
    随着流媒体技术的迅速发展,H5流媒体播放器已成为现代网络视频播放的重要工具。其中,EasyPlayer.js播放器作为一款功能强大的H5播放器,凭借其全面的协议支持、多种解码方式以及跨平台兼容性,赢得了广泛的关注和应用。那么想要实现播放器本地快照抓拍截图功能,应该如何操作呢?实现步骤:......
  • 设计师看过来:SCADA的设计要点和一大波实例来袭。
    相对于移动UI设计,SCADA的设计距离设计师比较遥远,设计师感知不到或者get不到设计要点,SCADA在工业自动化控制领域应用的非常普及,这类需求越来越多,大千UI工场带着大家看一波。一、SCADA是什么SCADA是SupervisoryControlandDataAcquisition(监控与数据采集)的缩写,是一种用于监......
  • FastStone Capture10.9电脑截图工具中文绿色便携版
    前言FSCapture是一款集图像捕捉、浏览编辑、视频录制等功能于一身的屏幕截图软件,软件具有体积小巧、功能强大、操作简便等优点,其方便的浮动工具条和便捷的快捷键堪称完美结合。截图后的图片编辑与保存选项也特别丰富和方便,内置功能完善的图像编辑器,支持几乎所有主流图片格式,除提......
  • 如何使用canvas截图?
    在前端开发中,使用HTML5的<canvas>元素和JavaScript可以实现截图功能。以下是一个基本的步骤指南,帮助你理解如何使用<canvas>进行截图:获取或创建图像:你可以使用HTML的<img>标签加载一个图像,或者使用JavaScript动态创建一个图像。如果你想要截取网页的某一部分,你可能需......
  • 帝国cms内容页文件名生成方式二次开发
    1、\e\admin\AddClass.php找到模块大概在1212行<trbgcolor="#FFFFFF"><tdheight="25">内容页文件命名形式</td><td>[前缀]<inputname="filename_qz"type="text&quo......
  • 一键打断线(根据相交点打断)——CAD c# 二次开发
    多条相交线根据交点一键打断,如下图: 部分代码如下:finallynamespaceIFoxDemo;publicclassClass1{[CommandMethod("ddx")]publicstaticvoidDemo(){//"ifox可以了".Print();Databasedb=HostApplicationServices.WorkingDatabase......
  • 在CAD文件中存储扩展数据
    基础知识:根据CAD官方的资料看来,Database作为一个CAD文件数据库的根对象,其包含10个子对象:九大符号表(SymbolTable)和命名对象词典(NamedObjectsDictionary)。 这10个子对象属于整个数据库内的最高层级,直属于Database。除这10个子对象以外,所有DBObject对象都必须有一个所有者......
  • 蓝牛截图助手
     更新日志2024-12-13V2.00 修复已知BUGv1.302023.03.05增加了快捷和优化蓝牛截图助手 支持全屏截图和区域截图 并将图片自动保存到软件目录方便快速连续截图,同时软件还支持定时全自动截图,日常必备的截图软件本地下载   软件使用教程......
  • CAD图纸显示不全,4大问题、解法汇总!快收藏
    CAD图纸显示不全,4大问题、解法汇总!快收藏你的CAD图纸显示不全?常见的情况有这4种:1.外部参照2.布局/模型切换3.天正及高版本不显示4.ole图片不显示具体表现、判断方法、解决办法,都给大家整理好啦!快来使用CAD快速看图跟着文章一起学习吧~一、外部参照问题情况及......