来自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();
}
}
}
}