• cad.net 在cad上生成二维码


    来自edata的聊天记录节选,嘻嘻..

    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.ApplicationServices;
    using Autodesk.AutoCAD.Geometry;
    using Autodesk.AutoCAD.Runtime; 
    using DoubleCollection = Autodesk.AutoCAD.Geometry.DoubleCollection;
    using JoinBox;
    using QRCoder;//引入nuget包:QRCoder
    
    namespace ClassTemplate
    {
        public static partial class JJCmd_QRCodeGeneratorClass
        {
            /// <summary>
            /// 二维码
            /// </summary>
            [CommandMethod("JJCmd_QRCodeGenerator")]
            public static void JJCmd_QRCodeGenerator()
            {
                var qrGenerator = new QRCodeGenerator();
                var qrCodeData = qrGenerator.CreateQrCode("你好二维码.", QRCodeGenerator.ECCLevel.Q);
                var qrlist = qrCodeData.ModuleMatrix;
    
                // 获取当前文档和数据库
                Document doc = Application.DocumentManager.MdiActiveDocument;
                Database db = doc.Database;
    
                // 启动事务
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    // 以读模式打开Block表
                    var acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                    // 以写模式打开Block表记录Model空间
                    var acBlkTblRec = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
    
                    //填充白色
                    Hatch blankHatch = new Hatch();
                    acBlkTblRec.AppendEntity(blankHatch);
                    tr.AddNewlyCreatedDBObject(blankHatch, true);
                    blankHatch.SetDatabaseDefaults();
                    blankHatch.SetHatchPattern(HatchPatternType.PreDefined, "solid");
                    blankHatch.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(255, 255, 255);
    
                    //填充红色
                    Hatch hatch = new Hatch();
                    acBlkTblRec.AppendEntity(hatch);
                    tr.AddNewlyCreatedDBObject(hatch, true);
                    hatch.SetDatabaseDefaults();
                    hatch.SetHatchPattern(HatchPatternType.PreDefined, "solid");
                    hatch.ColorIndex = 1;
    
                    //设置多段线的凸度
                    var bluges = new DoubleCollection
                    {
                        0.0,
                        0.0,
                        0.0,
                        0.0,
                        0.0
                    };
    
                    double blackSize = 120;
                    int i = 0;
    
                    foreach (var bitarr in qrlist)
                    {
                        //遍历每一行数据
                        for (int j = 0; j < bitarr.Length; j++)
                        {
                            //创建矩形框5个点,否则填充是不闭合的
                            var pts2 = new Point2dCollection
                            {
                                new Point2d(j * blackSize, i * blackSize),
                                new Point2d(j * blackSize + blackSize, i * blackSize),
                                new Point2d(j * blackSize + blackSize, i * blackSize + blackSize),
                                new Point2d(j * blackSize, i * blackSize + blackSize),
                                new Point2d(j * blackSize, i * blackSize)
                            };
                            if (bitarr.Get(j))
                            {
                                //填充黑块,使用2d多段线和凸度的参数2011新增api
                                hatch.AppendLoop(HatchLoopTypes.Default, pts2, bluges);
                            }
                            else
                            {
                                //填充白色背景
                                blankHatch.AppendLoop(HatchLoopTypes.Default, pts2, bluges);
                            } 
                        }
                        //换行 
                        i--;
                    }
    
                    //计算填充
                    blankHatch.EvaluateHatch(true);
                    hatch.EvaluateHatch(true);
                    tr.Commit();
                }
            }
        }
    }
    
  • 相关阅读:
    《Windows编程循序渐进》——对话框应用程序2
    《Windows编程循序渐进》——对话框应用程序
    《Windows编程循序渐进》——建立MFC应用程序
    关于基类和子类构造函数的问题
    《Windows驱动开发技术详解》之分层驱动程序
    《Windows驱动开发技术详解》之驱动程序调用驱动程序——通过设备指针调用其他驱动程序
    《Windows驱动开发技术详解》之驱动程序调用驱动程序——以文件句柄形式调用其它驱动程序
    《Windows驱动开发技术详解》之定时器
    《Windows驱动开发技术详解》之自定义StartIO
    四种UNIX实现
  • 原文地址:https://www.cnblogs.com/JJBox/p/14485956.html
Copyright © 2020-2023  润新知