一、下载安装vs2022
vs2022下载安装
https://visualstudio.microsoft.com/zh-hans/downloads/下载安装社区版即可

二、下载安装中望3D 2025
中望3d下载安装
https://pan.baidu.com/s/11jh6Ym3W4oWkLkYeSEaELQ?pwd=smis
2.1 安装zw3d


安装完不要打开,直接点x关闭即可
2.2 安装许可证
把crack文件夹里的patch.exe解压后放在根目录

点击运行


然后点击应用即可

三、配置二次开发环境
3.1 安装模板
模板安装程序在zw3d的安装目录中



打开vs验证

3.2 二次开发教程
教程一:官方下载
官方教程链接
https://www.zwsoft.cn/support/zw3d-devdoc
教程二:安装包里的教程

四、二次开发例子
4.1 输出helloword(自带示例)
选择模板,创建项目

不需要改动任何代码,直接生成解决方案

把生成的解决方案放到zw3d的安装目录中


打开ZW 3D 2025

验证


4.2 输出helloworld(加强版)
修改内容

修改完记得再次生成解决方案,然后把解决方案放在apilib文件夹里,重新加载



选择上面的转换按钮

新建零件,测试功能


4.3 新建小方块
新建项目


新建项,命名为create_block

在cpp文件中写入以下内容
第一部分:注册和卸载命令
是用于创建zw 3d命令的,输入create_block执行某某程序
cpp
int RegisteBlockCommand(void){
cvxCmdFunc("CreateBlockApi", (void*)CreateBlockApi, VX_CODE_GENERAL);
return 0;
}
int UnloadBlockCommand(void){
cvxCmdFuncUnload("CreateBlockApi");
return 0;
}
第二部分:编写创建方块的代码
cpp
int CreateBlockApi(void) {
cvxMsgDisp("启动绘制正方体!!!");
double length = 50.0;
// 定义中心立方体数据结构
szwCenterBoxData boxData = {}; // 初始化为0
// 设置组合模式:新建特征
boxData.combine = ZW_BOOL_BASE;
// 基础体数量(用于布尔操作),此处为新建,所以为0或1均可,但需设为0更安全
boxData.baseCount = 0;
//boxData.baseList = NULL; // 无基础体
// 工作平面句柄:设为 NULL 使用默认基准平面(如XY平面)
//boxData.planeHandle = NULL;
// 是否使用自定义轴系(0=否,使用默认坐标系)
boxData.useAxis = 0;
//boxData.axis = NULL; // 不使用自定义轴
// 设置立方体尺寸(X, Y, Z方向长度)
boxData.x = length;
boxData.y = length;
boxData.z = length;
// 设置特征名称(注意:featureName 是字符数组,直接赋值)
strcpy_s(boxData.featureName, sizeof(boxData.featureName), "myCube");
boxData.featureName[sizeof(boxData.featureName) - 1] = '\0'; // 确保结尾
// 设置建模公差
boxData.tolerance = 0.02;
// 【关键】调用 API 创建立方体
int count = 1;
szwEntityHandle* boxList = nullptr;
// 检查返回结果
ezwErrors res = ZwFeatureBoxCreateByCenter(boxData, &count, &boxList);
// === 结果输出增强部分 ===
if (res == ZW_API_NO_ERROR) {
// 输出每个实体的句柄信息(可用于后续操作)
cvxMsgDisp("创建成功!!!");
}
else {
// 将错误码转换为可读字符串
// 将错误码转换为可读字符串
const char* errorMsg = "未知错误";
switch (res) {
case ZW_API_GENERAL_ERROR: errorMsg = "操作失败"; break;
case ZW_API_INVALID_INPUT: errorMsg = "输入参数无效"; break;
case ZW_API_ROOT_OBJ_ACT_FAIL: errorMsg = "根对象激活失败"; break;
case ZW_API_WRONG_ROOT_ENV: errorMsg = "未在有效建模会话中"; break;
case ZW_API_CMMD_INIT_ERROR: errorMsg = "命令初始化失败"; break;
case ZW_API_INPUT_ERROR: errorMsg = "输入参数错误"; break;
case ZW_API_CMMD_EXEC_ERROR: errorMsg = "命令执行失败"; break;
default: errorMsg = "其他错误"; break;
}
cvxMsgDisp(errorMsg);
}
// 清理返回的实体列表内存(非常重要!API 分配的内存需手动释放)
ZwEntityHandleListFree(count, &boxList);
return int(res);
}
create_block.cpp全部内容如下:
cpp
#include "..\inc\ZW3D_create_blockPr.h"
#if _MSC_VER
#define snprintf _snprintf
#endif
static int CreateBlockApi(void);
int RegisteBlockCommand(void){
cvxCmdFunc("CreateBlockApi", (void*)CreateBlockApi, VX_CODE_GENERAL);
return 0;
}
int UnloadBlockCommand(void){
cvxCmdFuncUnload("CreateBlockApi");
return 0;
}
int CreateBlockApi(void) {
cvxMsgDisp("启动绘制正方体!!!");
double length = 50.0;
// 定义中心立方体数据结构
szwCenterBoxData boxData = {}; // 初始化为0
// 设置组合模式:新建特征
boxData.combine = ZW_BOOL_BASE;
// 基础体数量(用于布尔操作),此处为新建,所以为0或1均可,但需设为0更安全
boxData.baseCount = 0;
//boxData.baseList = NULL; // 无基础体
// 工作平面句柄:设为 NULL 使用默认基准平面(如XY平面)
//boxData.planeHandle = NULL;
// 是否使用自定义轴系(0=否,使用默认坐标系)
boxData.useAxis = 0;
//boxData.axis = NULL; // 不使用自定义轴
// 设置立方体尺寸(X, Y, Z方向长度)
boxData.x = length;
boxData.y = length;
boxData.z = length;
// 设置特征名称(注意:featureName 是字符数组,直接赋值)
strcpy_s(boxData.featureName, sizeof(boxData.featureName), "myCube");
boxData.featureName[sizeof(boxData.featureName) - 1] = '\0'; // 确保结尾
// 设置建模公差
boxData.tolerance = 0.02;
// 【关键】调用 API 创建立方体
int count = 1;
szwEntityHandle* boxList = nullptr;
// 检查返回结果
ezwErrors res = ZwFeatureBoxCreateByCenter(boxData, &count, &boxList);
// === 结果输出增强部分 ===
if (res == ZW_API_NO_ERROR) {
// 输出每个实体的句柄信息(可用于后续操作)
cvxMsgDisp("创建成功!!!");
}
else {
// 将错误码转换为可读字符串
// 将错误码转换为可读字符串
const char* errorMsg = "未知错误";
switch (res) {
case ZW_API_GENERAL_ERROR: errorMsg = "操作失败"; break;
case ZW_API_INVALID_INPUT: errorMsg = "输入参数无效"; break;
case ZW_API_ROOT_OBJ_ACT_FAIL: errorMsg = "根对象激活失败"; break;
case ZW_API_WRONG_ROOT_ENV: errorMsg = "未在有效建模会话中"; break;
case ZW_API_CMMD_INIT_ERROR: errorMsg = "命令初始化失败"; break;
case ZW_API_INPUT_ERROR: errorMsg = "输入参数错误"; break;
case ZW_API_CMMD_EXEC_ERROR: errorMsg = "命令执行失败"; break;
default: errorMsg = "其他错误"; break;
}
cvxMsgDisp(errorMsg);
}
// 清理返回的实体列表内存(非常重要!API 分配的内存需手动释放)
ZwEntityHandleListFree(count, &boxList);
return int(res);
}
第三部分:在头文件中加入创建和卸载命令的调用函数

cpp
#pragma once
#include "zwapi_cmd.h"
#include "zwapi_memory.h"
#include "zwapi_message.h"
#include <VxApi.h>
#include <zwapi_feature_shape.h>
#include <string.h>
/* Function declaration */
int RegisterCustomCommand(void);
int UnloadCustomCommand(void);
int RegisterTemplateCommand(void);
int UnloadTemplateCommand(void);
int RegisterFormCommand(void);
int UnloadFormCommand(void);
int RegisteBlockCommand(void);
int UnloadBlockCommand(void);
第四部分:在主程序中调用函数

第五部分:生成dll,加载到zw3d中
把生成的解决方案复制到zw 3d的apilibs文件夹下



新建零件,点击按钮,运行成功
