AutoCAD.NET API2018二次开发第十九章

插入光栅图像,定义并插入块,常见具有属性的块,附加拆离外部参考,附加扩展数据,查看扩展数据,定义布局,创建布局视口,将图形打印到PDF文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//运行时
using Autodesk.AutoCAD.Runtime;
//数据库
using Autodesk.AutoCAD.DatabaseServices;
//应用程序服务
using Autodesk.AutoCAD.ApplicationServices;
//几何
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.PlottingServices;

namespace AutoDemo23
{
    public class Class1
    {
        //插入光栅图像
        [CommandMethod("CRTX")]
        public static void CRTX()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                string strImgName = "世界地图";
                string strFileName = "D:\\世界地图.tif";

                ObjectId zdID = RasterImageDef.GetImageDictionary(db);

                if (zdID.IsNull == true)
                {
                    zdID = RasterImageDef.CreateImageDictionary(db);

                }
                DBDictionary imgDic = tran.GetObject(zdID, OpenMode.ForRead) as DBDictionary;

                RasterImageDef imgDef;

                ObjectId imgDefId;

                if (imgDic.Contains(strImgName))
                {
                    imgDefId = imgDic.GetAt(strImgName);

                    imgDef = tran.GetObject(imgDefId, OpenMode.ForWrite) as RasterImageDef;

                }
                else
                {
                    RasterImageDef newImgDef = new RasterImageDef();

                    newImgDef.SourceFileName = strFileName;

                    newImgDef.Load();

                    tran.GetObject(zdID, OpenMode.ForWrite);

                    imgDefId = imgDic.SetAt(strImgName, newImgDef);

                    tran.AddNewlyCreatedDBObject(newImgDef, true);

                    imgDef = newImgDef;
                }

                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                RasterImage img = new RasterImage();

                img.ImageDefId = imgDefId;

                Vector3d with = new Vector3d(10, 0, 0);

                Vector3d height = new Vector3d(0, 5, 0);

                Point3d wz = new Point3d(0, 0, 0);

                CoordinateSystem3d cs = new CoordinateSystem3d(wz, with, height);

                img.Orientation = cs;

                btr.AppendEntity(img);

                tran.AddNewlyCreatedDBObject(img, true);

                img.AssociateRasterDef(imgDef);

                tran.Commit();

            }


        }

        //定义并插入块
        [CommandMethod("CRK")]
        public static void CRK()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                ObjectId blockID = ObjectId.Null;

                if (bt.Has("我的块") == false)
                {
                    BlockTableRecord block = new BlockTableRecord();

                    block.Name = "我的块";

                    block.Origin = new Point3d(0, 0, 0);

                    Circle c = new Circle();

                    c.Center = new Point3d(0, 0, 0);

                    c.Radius = 1;

                    block.AppendEntity(c);

                    Line L = new Line(new Point3d(-1, 0, 0), new Point3d(1, 0, 0));

                    block.AppendEntity(L);

                    tran.GetObject(db.BlockTableId, OpenMode.ForWrite);

                    bt.Add(block);

                    tran.AddNewlyCreatedDBObject(block, true);

                    blockID = block.ObjectId;

                }
                else
                {
                    blockID = bt["我的块"];

                }

                if (blockID != null)
                {
                    BlockReference blkR = new BlockReference(new Point3d(5, 5, 0), blockID);

                    BlockTableRecord btrC = tran.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;

                    btrC.AppendEntity(blkR);

                    tran.AddNewlyCreatedDBObject(blkR, true);

                }

                tran.Commit();
            }


        }

        //常见具有属性的块
        [CommandMethod("SXK")]
        public static void SXK()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                if (bt.Has("属性块") == false)
                {
                    BlockTableRecord sxk = new BlockTableRecord();

                    sxk.Name = "属性块";

                    sxk.Origin = new Point3d(0, 0, 0);

                    sxk.Units = UnitsValue.Millimeters;

                    Circle c = new Circle();

                    c.Center = new Point3d(0, 0, 0);

                    c.Radius = 1;

                    sxk.AppendEntity(c);

                    AttributeDefinition ad = new AttributeDefinition();

                    ad.Position = new Point3d(0, 0, 0);

                    ad.Verifiable = true;

                    ad.Prompt = "输入名称";

                    ad.Tag = "名称";

                    ad.TextString = "张三";

                    ad.Height = 0.5;

                    ad.Justify = AttachmentPoint.MiddleCenter;

                    sxk.AppendEntity(ad);

                    tran.GetObject(db.BlockTableId, OpenMode.ForWrite);

                    bt.Add(sxk);

                    tran.AddNewlyCreatedDBObject(sxk, true);

                    tran.Commit();

                }


            }

        }

        //附加拆离外部参考
        [CommandMethod("FZCK")]

        public static void FZCK()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                string path = "D:\\测试.dwg";

                ObjectId FJId;

                FJId = db.AttachXref(path, "测试");

                if (FJId.IsNull == false)
                {
                    Point3d p = new Point3d(5, 5, 0);

                    BlockReference bf = new BlockReference(p, FJId);

                    BlockTableRecord btrC = tran.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;

                    btrC.AppendEntity(bf);

                    tran.AddNewlyCreatedDBObject(bf, true);

                }
                tran.Commit();

            }

        }

        //附加拆离外部参考
        [CommandMethod("FLCK")]

        public static void FLCK()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                ObjectId ckID;

                ckID = bt["测试"];

                if (ckID.IsNull == false)
                {
                    db.DetachXref(ckID);

                }

                tran.Commit();

            }

        }

        //附加扩展数据
        [CommandMethod("FJKZ")]
        public static void FJKZ()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            string appName = "测试";

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                PromptSelectionResult psr = doc.Editor.GetSelection();

                if (psr.Status == PromptStatus.OK)
                {
                    RegAppTable art = tran.GetObject(db.RegAppTableId, OpenMode.ForRead) as RegAppTable;

                    if (art.Has(appName) == false)
                    {
                        RegAppTableRecord artr = new RegAppTableRecord();

                        artr.Name = appName;

                        tran.GetObject(db.RegAppTableId, OpenMode.ForWrite);

                        art.Add(artr);

                        tran.AddNewlyCreatedDBObject(artr, true);
                    }

                    SelectionSet ss = psr.Value;

                    foreach (SelectedObject so in ss)
                    {
                        Entity ent = tran.GetObject(so.ObjectId, OpenMode.ForWrite) as Entity;

                        ResultBuffer rb = new ResultBuffer();

                        rb.Add(new TypedValue((int)DxfCode.ExtendedDataRegAppName, appName));

                        string kzsj = "图形的类型是:" + ent.GetType().Name;

                        rb.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, kzsj));

                        ent.XData = rb;
                    }

                }

                tran.Commit();

            }

        }

        //查看扩展数据
        [CommandMethod("CKKZ")]
        public static void CKKZ()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            string appName = "测试";

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                PromptSelectionResult psr = doc.Editor.GetSelection();

                if (psr.Status == PromptStatus.OK)
                {
                    SelectionSet ss = psr.Value;

                    foreach (SelectedObject so in ss)
                    {
                        Entity ent = tran.GetObject(so.ObjectId, OpenMode.ForRead) as Entity;

                        ResultBuffer rb = ent.GetXDataForApplication(appName);

                        string kzsj;

                        kzsj = "";
                        foreach (TypedValue tv in rb)
                        {
                            kzsj = kzsj + "\n" + tv.TypeCode.ToString() + ":" + tv.Value;
                        }
                        Application.ShowAlertDialog(kzsj);

                        kzsj = "";
                    }

                }
                tran.Abort();
            }

        }

        //定义布局
        [CommandMethod("DYBJ")]
        public static void DYBJ()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                LayoutManager Lm = LayoutManager.Current;

                ObjectId bjId = Lm.CreateLayout("测试");

                Layout Lt = tran.GetObject(bjId, OpenMode.ForRead) as Layout;

                if (Lt.TabSelected == false)
                {
                    Lm.CurrentLayout = Lt.LayoutName;
                }

                PlotSettings ps = new PlotSettings(Lt.ModelType);

                ps.CopyFrom(Lt);

                PlotSettingsValidator psv = PlotSettingsValidator.Current;

                psv.SetPlotConfigurationName(ps, "DWG To PDF.pc3", "ISO_A2_(594.00_x_420.00_mm)");

                psv.SetZoomToPaperOnUpdate(ps, true);

                tran.GetObject(bjId, OpenMode.ForWrite);

                Lt.CopyFrom(ps);

                tran.Commit();

                doc.Editor.Regen();


            }
        }

        //创建布局视口
        [CommandMethod("BJSK")]
        public static void BJSK()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForWrite) as BlockTableRecord;

                Application.SetSystemVariable("TILEMODE", 0);

                doc.Editor.SwitchToPaperSpace();

                Viewport vp = new Viewport();
                vp.CenterPoint = new Autodesk.AutoCAD.Geometry.Point3d(1.5, 1.5, 0);

                vp.Width = 3;

                vp.Height = 3;

                btr.AppendEntity(vp);

                tran.AddNewlyCreatedDBObject(vp, true);

                vp.ViewDirection = new Autodesk.AutoCAD.Geometry.Vector3d(0, 0, 1);

                vp.On = true;

                doc.Editor.SwitchToModelSpace();

                tran.Commit();



            }



        }

        //将图形打印到PDF文件
        [CommandMethod("HTDY")]

        public static void HTDY()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                LayoutManager LM = LayoutManager.Current;

                Layout Lt = tran.GetObject(LM.GetLayoutId(LM.CurrentLayout), OpenMode.ForRead) as Layout;

                using (PlotInfo PI = new PlotInfo())
                {
                    PI.Layout = Lt.ObjectId;

                    using (PlotInfoValidator PIV = new PlotInfoValidator())
                    {
                        PIV.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;

                        PIV.Validate(PI);

                        if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
                        {
                            using (PlotEngine PE = PlotFactory.CreatePublishEngine())
                            {
                                PlotProgressDialog PPD = new PlotProgressDialog(false, 1, true);

                                using ((PPD))
                                {
                                    PPD.set_PlotMsgString(PlotMessageIndex.DialogTitle, "打印进度显示");
                                    PPD.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "取消工作");
                                    PPD.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "取消工作表");
                                    PPD.set_PlotMsgString(PlotMessageIndex.SheetSetProgressCaption, "工作表进度");
                                    PPD.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption, "打印进度");

                                    PPD.LowerPlotProgressRange = 0;
                                    PPD.UpperPlotProgressRange = 100;

                                    PPD.PlotProgressPos = 0;

                                    PPD.OnBeginPlot();

                                    PPD.IsVisible = true;

                                    PE.BeginPlot(PPD, null);

                                    PE.BeginDocument(PI, doc.Name, null, 1, true, "c:\\测试");

                                    PPD.set_PlotMsgString(PlotMessageIndex.Status, "绘图:" + doc.Name);

                                    PPD.OnBeginSheet();

                                    PPD.LowerSheetProgressRange = 0;
                                    PPD.UpperSheetProgressRange = 100;

                                    PPD.SheetProgressPos = 0;

                                    using (PlotPageInfo PPI = new PlotPageInfo())
                                    {
                                        PE.BeginPage(PPI, PI, true, null);
                                    }

                                    PE.BeginGenerateGraphics(null);
                                    PE.EndGenerateGraphics(null);

                                    PE.EndPage(null);

                                    PPD.SheetProgressPos = 100;

                                    PPD.OnEndSheet();

                                    PE.EndDocument(null);

                                    PPD.PlotProgressPos = 100;

                                    PPD.OnEndPlot();

                                    PE.EndPlot(null);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AutoCAD .NET API(应用程序编程接口)是用于在AutoCAD软件中定制和扩展功能的编程工具。它提供了一组功能强大的类和方法,使开发人员能够通过编程方式访问和操作AutoCAD的各种对象和功能。 要下载AutoCAD .NET API,可以按照以下步骤进行操作: 1. 打开Autodesk官方网站,进入AutoCAD的下载页面。 2. 在页面上,找到AutoCAD .NET API的下载选项。通常可以在“附加工具”或“开发者工具”部分中找到。 3. 单击下载链接,选择适用于您的操作系统版本的AutoCAD .NET API软件包。 4. 点击下载按钮,等待下载完成。 在下载完成后,您可以按照以下步骤安装AutoCAD .NET API: 1. 打开下载文件的位置,双击运行安装程序。 2. 遵循安装程序的指示,选择您想要安装的文件夹和配置选项。 3. 完成安装后,您可以在指定的文件夹中找到安装文件和示例代码。 安装完成后,您可以开始使用AutoCAD .NET API来开发自定义功能。您可以使用.NET编程语言(如C#或VB.NET)来编写代码,并使用AutoCAD .NET API中的类和方法来访问和操作AutoCAD中的对象,如图形、图层、块等。您还可以创建自定义命令、工具栏、菜单和对话框,以及执行各种操作,如绘制、修改、查询和导出CAD数据。 总之,要下载AutoCAD .NET API,只需前往官方网站下载页面,并按照指示进行下载和安装即可。安装完成后,您可以使用AutoCAD .NET API进行自定义开发和定制AutoCAD软件的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值