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();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/JJBox/p/14485956.html