操作环境
CAD 平台 | ZWCAD 2021 或更高版本
集成开发环境 | Visual studio 2015 或更高版本
目标框架 | .NET Framework 4.7
需要引入的类库文件 | ZwManaged.dll 和 ZwDatabaseMgd.dll
开发语言 | VB.NET 或 C# 等


项目创建与配置

创建一个新项目

打开 Visual studio，新建类库模板项目（.NET Framework），设置目标框架为 .Net Framework 4.7。

添加引用

在解决方案资源管理器中右键点击 引用 然后点击 添加引用…。

切换到“浏览”界面并点击浏览按钮，在 ZWCAD 安装目录下选中 ZwManaged.dll 和 ZwDatabaseMgd.dll。添加后如下图所示:

如果想在程序中使用 COM 特性，需要将ZWCAD.exe添加到引用中，如下图所示:

最后，将 ZwDatabaseMgd 和 ZwManaged 的“复制到本地”属性改为 false。


运行 DLL 文件

成功编译工程之后会得到一个 dll 文件。我们可以在ZWCAD中使用 NETLOAD 命令加载它，然后输入在程序中注册的命令来使用您定义的功能。


示例代码

示例代码注册了名为 AddCircle 的命令，调用命令时会在模型空间生成一个原点在(2, 3, 0)，半径为 10 的红色的圆。

步骤：

按照上文所述的步骤创建工程后，将下面的代码粘贴到 .cs 文件中即可尝试编译运行。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using ZwSoft.ZwCAD.ApplicationServices;
using ZwSoft.ZwCAD.Runtime;
using ZwSoft.ZwCAD.DatabaseServices;
using ZwSoft.ZwCAD.Geometry;
namespace TEST
{
    public class SHMain
    {
        [CommandMethod("AddCircle")]
        public void AddCircle()
        {
            Document zcDoc = Application.DocumentManager.MdiActiveDocument;
            Database zcDB = zcDoc.Database;
            Transaction ZcTran = zcDoc.TransactionManager.StartTransaction();
            using (ZcTran)
            {
                BlockTable zcBLT = (BlockTable)ZcTran.GetObject(zcDB.BlockTableId,OpenMode.ForRead);
                BlockTableRecord zcBLTR = (BlockTableRecord)ZcTran.GetObject(zcBLT[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
                Circle zcCircle = new Circle();
                zcCircle.Center = new Point3d(2, 3, 0);
                zcCircle.Radius = 10;
                zcCircle.ColorIndex = 1;
                zcBLTR.AppendEntity(zcCircle);
                ZcTran.AddNewlyCreatedDBObject(zcCircle, true);
                ZcTran.Commit();
            }
            zcDoc.SendStringToExecute("_ZOOM E ", false, false, false);
        }
    }
}

以下是 VB 代码:

Imports ZwSoft.ZwCAD.ApplicationServices
Imports ZwSoft.ZwCAD.Runtime
Imports ZwSoft.ZwCAD.DatabaseServices
Imports ZwSoft.ZwCAD.Geometry

Namespace TEST
    Public Class SHMain
        <CommandMethod("AddCircle")> _
        Public Sub AddCircle()
            Dim zcDoc As Document = Application.DocumentManager.MdiActiveDocument
            Dim zcDB As Database = zcDoc.Database
            Using zcTran As Transaction = zcDB.TransactionManager.StartTransaction
                Dim zcBLT As BlockTable
                zcBLT = zcTran.GetObject(zcDB.BlockTableId, OpenMode.ForRead)
                Dim zcBLTR As BlockTableRecord
                zcBLTR = zcTran.GetObject(zcBLT(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
                Dim zcCircle As Circle = New Circle
                zcCircle.Center = New Point3d(2, 3, 0)
                zcCircle.Radius = 10
                zcCircle.ColorIndex = 1
                zcBLTR.AppendEntity(zcCircle)
                zcTran.AddNewlyCreatedDBObject(zcCircle, True)
                zcTran.Commit()
            End Using
            zcDoc.SendStringToExecute("_ZOOM E ", False, False, False)
        End Sub
    End Class
End Namespace