1.ZW3D中的方程式主要分为草图环境方程式和零件环境方程式
草图环境方程式平台功能如下图:
零件环境方程式平台功能如下图:
2.草图环境中使用接口操作方程式如下:
//添加本地变量
//添加数字变量
svxVariable var_num = { 0 };
strcpy_s(var_num.Name, "数字");//变量名
var_num.type = evxVarType::VX_VAR_NUM;//变量类型
strcpy_s(var_num.Expression, "666");//变量值,这样设置没问题
ZF_CALL(cvxSkVarAdd(&var_num));
//添加字符串变量
svxVariable var_string = { 0 };
strcpy_s(var_string.Name, "字符串");//变量名
var_string.type = evxVarType::VX_VAR_STR;//变量类型
strcpy_s(var_string.Expression, "\"字符串值\"");//变量表达式
ZF_CALL(cvxSkVarAdd(&var_string));
//添加点变量
svxVariable var_point = { 0 };
strcpy_s(var_point.Name, "点");//变量名
var_point.type = evxVarType::VX_VAR_PNT;//变量类型
strcpy_s(var_point.Expression, "Point(1,2,3)");//变量表达式
ZF_CALL(cvxSkVarAdd(&var_point));
//添加向量变量
svxVariable var_vector = { 0 };
strcpy_s(var_vector.Name, "向量");//变量名
var_vector.type = evxVarType::VX_VAR_VEC;//变量类型
strcpy_s(var_vector.Expression, "Vector(1,2,3)");//变量表达式
ZF_CALL(cvxSkVarAdd(&var_vector));
//添加数字变量,表达式使用当前本地变量
svxVariable var_num2 = { 0 };
strcpy_s(var_num2.Name, "数字2");//变量名
var_num2.type = evxVarType::VX_VAR_NUM;//变量类型
strcpy_s(var_num2.Expression, "2 * 数字");//变量表达式
ZF_CALL(cvxSkVarAdd(&var_num2));
//表达式链接到外部文件的变量
svxVariable var_external = { 0 };
strcpy_s(var_external.Name, "外部变量");//变量名
var_external.type = evxVarType::VX_VAR_STR;//变量类型,必须与要链接的外部变量的类型一致
strcpy_s(var_external.Expression, "[off-road_vehicle_transfer_case.Z3ASM:字符串]");//变量表达式,格式为:[外部文件名:外部变量名]
ZF_CALL(cvxSkVarAdd(&var_external));
//获取指定名称的变量
svxVariable var = { 0 };
strcpy_s(var.Name, "数字");//变量名
ZF_CALL(cvxSkVarGet(&var));
WriteMessage("方程式[%s]的值为[%f]", var.Name, var.Value);
//设置指定名称的变量
strcpy_s(var.Expression, "777");//通过修改变量的表达式来修改变量值
ZF_CALL(cvxSkVarSet(1, &var));
WriteMessage("方程式[%s]的值设置为[%s]", var.Name, "777");
//获取所有变量
int count = 0;
svxVariable* pVars = NULL;
ZF_CALL(cvxSkInqVars(&count, &pVars));
for (int i = 0; i < count; i++)
{
WriteMessage("====================================");
WriteMessage("Name = %s", pVars[i].Name);
WriteMessage("Expression = %s", pVars[i].Expression);
}
ZF_VOID(cvxMemFree((void**)&pVars));//释放内存
3.零件环境中使用接口操作方程式如下:
//添加本地变量
//添加数字变量
svxVariable var_num = { 0 };
strcpy_s(var_num.Name, "数字");//变量名
var_num.type = evxVarType::VX_VAR_NUM;//变量类型
strcpy_s(var_num.Expression, "666");//变量表达式
ZF_CALL(cvxPartVarAdd(&var_num));
//添加字符串变量
svxVariable var_string = { 0 };
strcpy_s(var_string.Name, "字符串");//变量名
var_string.type = evxVarType::VX_VAR_STR;//变量类型
strcpy_s(var_string.Expression, "\"字符串值\"");//变量表达式
ZF_CALL(cvxPartVarAdd(&var_string));
//添加点变量
svxVariable var_point = { 0 };
strcpy_s(var_point.Name, "点");//变量名
var_point.type = evxVarType::VX_VAR_PNT;//变量类型
strcpy_s(var_point.Expression, "Point(1,2,3)");//变量表达式
ZF_CALL(cvxPartVarAdd(&var_point));
//添加向量变量
svxVariable var_vector = { 0 };
strcpy_s(var_vector.Name, "向量");//变量名
var_vector.type = evxVarType::VX_VAR_VEC;//变量类型
strcpy_s(var_vector.Expression, "Vector(1,2,3)");//变量表达式
ZF_CALL(cvxPartVarAdd(&var_vector));
//添加数字变量,表达式使用当前本地变量
svxVariable var_num2 = { 0 };
strcpy_s(var_num2.Name, "数字2");//变量名
var_num2.type = evxVarType::VX_VAR_NUM;//变量类型
strcpy_s(var_num2.Expression, "2 * 数字");//变量表达式
ZF_CALL(cvxPartVarAdd(&var_num2));
//表达式链接到外部文件的变量
//svxVariable var_external = { 0 };
//strcpy_s(var_external.Name, "外部变量");//变量名
//var_external.type = evxVarType::VX_VAR_STR;//变量类型,必须与要链接的外部变量的类型一致
//strcpy_s(var_external.Expression, "[off-road_vehicle_transfer_case.Z3ASM:字符串]");//变量表达式,格式为:[外部文件名:外部变量名]
//ZF_CALL(cvxPartVarAdd(&var_external));
//获取指定名称的变量
svxVariable var = { 0 };
strcpy_s(var.Name, "数字");//变量名
ZF_CALL(cvxPartVarGet(&var));
WriteMessage("value = %f", var.Value);
//设置指定名称的变量
strcpy_s(var.Expression, "777");//通过修改变量的表达式来修改变量值
ZF_CALL(cvxPartVarSet(1, &var, TRUE));
//输出方程
WriteMessage("【SUP-67627】ZW3D_API_方程式管理器_输出_希望添加函数以输出方程式");
//输入方程
//https://jira.zwcad.com/browse/SUP-67688
WriteMessage("输入方程 https://jira.zwcad.com/browse/SUP-67688");
string equationFile = ZF_GetFilePathInThisDirectory("方程式.csv");
ZF_CALL(cvxEqLoadFile(equationFile.c_str(), evxEqnSetOpt::VX_EQN_AUTO_OVERWRITE_ALL_EQN));
//获取所有变量
int count = 0;
svxVariable* pVars = NULL;
ZF_CALL(cvxPartInqVars(NULL, NULL, &count, &pVars));
for (int i = 0; i < count; i++)
{
WriteMessage("Name = %s", pVars[i].Name);
WriteMessage("Expression = %s", pVars[i].Expression);
WriteMessage("====================================");
}
ZF_VOID(cvxMemFree((void**)&pVars));//释放内存
//创建(空)方程式组
ZF_CALL(cvxPartEqnSetWithName("EquationSet", 0, NULL));
WriteMessage("创建方程式组[EquationSet]");
//相似接口
//cvxPartEqnSet
//获取所有方程式和方程式组
int equationNumber = 0;
int *pEquationIds = NULL;
int equationSetNumber = 0;
int *pEquationSetIds = NULL;
ZF_CALL(cvxPartInqEqnAllId(&equationNumber, &pEquationIds, &equationSetNumber, &pEquationSetIds));
WriteMessage("方程式的数量 = [%d]", equationNumber);
for (int i = 0; i < equationNumber; i++)
{
//获取方程式对应的变量
svxVariable equVar{};
ZF_CALL(cvxPartVarGetById(pEquationIds[i], &equVar));
WriteMessage("方程式[%d]对应的变量的名称 = %s", pEquationIds[i], equVar.Name);
//获取方程式所在的方程式组
int idSet = 0;
ZF_CALL(cvxPartInqEqnAssociatedSet(pEquationIds[i], &idSet));
WriteMessage("方程式[%d]所在的方程式组 = [%d]", pEquationIds[i], idSet);
//设置方程式的描述
ZF_CALL(cvxEqSetDescById(pEquationIds[i], (char*)"方程式描述"));
//获取方程式的描述
char equationDescription[128];
ZF_CALL(cvxEqGetDescById(pEquationIds[i], equationDescription, sizeof(equationDescription)));
WriteMessage("方程式[%d]对应的描述:%s", pEquationIds[i], equationDescription);
}
WriteMessage("方程式组的数量 = [%d]", equationSetNumber);
//获取方程式组下的方程式
if (equationSetNumber>1)
{
int nSubEquation = 0;
int* pSubEquation = NULL;
ZF_CALL(cvxPartInqEqnSetMembers(pEquationSetIds[equationSetNumber-1], &nSubEquation, &pSubEquation));
WriteMessage("方程式组[%d]下所有方程式的数量为[%d]", pEquationSetIds[equationSetNumber - 1], nSubEquation);
ZF_VOID(cvxMemFree((void**)&pSubEquation));//释放内存
}
//删除变量/方程式
if (equationNumber > 0)
{
ZF_CALL(cvxPartEqnDelete(pEquationIds[0]));
WriteMessage("删除方程式[%d]", pEquationIds[0]);
}
//在方程式组中添加变量
for (int i = 0; i < equationSetNumber; i++)
{
char tempName[128];
ZF_CALL(cvxEntName(pEquationSetIds[i], tempName, sizeof(tempName)));
if (strcmp(tempName, "EquationSet") == 0)//找到"EquationSet"方程式组的id
{
svxVariable sub_var_num = { 0 };
strcpy_s(sub_var_num.Name, "方程式组下的数字");//变量名
sub_var_num.type = evxVarType::VX_VAR_NUM;//变量类型
strcpy_s(sub_var_num.Expression, "888");//变量表达式
ZF_CALL(cvxPartVarAddToEqnSet(pEquationSetIds[i], 1, &sub_var_num));//在方程式组中添加变量
//将变量移动到方程式组中
if (equationNumber > 0)//判断pEquationIds不为空
{
ZF_CALL(cvxPartEqnMoveToEqnSet(pEquationSetIds[i], 1, pEquationIds));//将pEquationIds中第一个变量移动到方程式组中
WriteMessage("将变量[%d]移动到方程式组[%d]中", pEquationIds[0], pEquationSetIds[i]);
}
}
}
ZF_VOID(cvxMemFree((void**)&pEquationIds));//释放内存
ZF_VOID(cvxMemFree((void**)&pEquationSetIds));//释放内存
//获取方程式的表达式
char expressionName[] = "字符串";
char expressionValue[128];
ZF_CALL(cvxEqGetExpByName(expressionName, expressionValue, sizeof(expressionValue)));
WriteMessage("方程式:%s = %s", expressionName, expressionValue);
//重生成所有方程式
ZF_CALL(cvxEqRegen(-1));
WriteMessage("重生成所有方程式");