NX二次开发 克隆

1.在基于模板的参数化建模中:
如果模板是单个部件.prt文件,则可以直接复制模板,然后重命名;
如果模板是装配体,则需要克隆模板。
2.克隆的函数如下,以CoolingDesign项目为例:
3.容易出错的地方:
在NX7.5版本以前,无需下面这句,但是NX7.5以后的版本中调用,必须添加下面这句,否则会显示克隆出错。
name_rule.base_string="";


CString CCoolingDesignDlg::CoolClone(CString &strCloneDir,CString &strCloneName )
{
USES_CONVERSION;
        //模板路径
        CString  strTemplPath=Filepath + _T("\\CoolTemplates\\pattern1\\pattern1.prt");


//初始化
UF_CLONE_operation_class_t operation_class = UF_CLONE_clone_operation;
UF_CLONE_initialise(operation_class);


//添加原装配到克隆装配中,有Add Assembly和Add Part两种方法,此处用Add Assembly
UF_PART_load_status_t error_status;
UF_CALL(UF_CLONE_add_assembly(W2A(strTemplPath.GetBuffer(strTemplPath.GetLength())),&error_status));
UF_free_string_array(error_status.n_parts,error_status.file_names);
UF_free(error_status.statuses);
//UF_CALL(UF_CLONE_add_part(W2A(strTemplPath.GetBuffer(strTemplPath.GetLength()))));


//指定默认的克隆方式
UF_CLONE_action_t action = UF_CLONE_clone;
UF_CLONE_set_def_action(action);


//指定默认文件名的方法
UF_CLONE_naming_technique_t naming_technique = UF_CLONE_naming_rule;
UF_CLONE_set_def_naming(naming_technique);


//定义新装配的克隆命名规则
UF_CLONE_name_rule_def_t name_rule;
UF_CLONE_naming_failures_t naming_failures;


CString strPreName;
CTime t = CTime::GetCurrentTime(); 
CString strTime; 
strTime.Format(_T("%02d%02d%02d%02d"),t.GetMonth() ,t.GetDay(),t.GetHour(),t.GetMinute()); 
strPreName=_T("_")+strTime;


name_rule.type = UF_CLONE_append_string; 
name_rule.new_string=W2A(strPreName.GetBuffer(strPreName.GetLength()));
name_rule.base_string="";


UF_CLONE_init_naming_failures(&naming_failures);
UF_CLONE_set_name_rule(&name_rule,&naming_failures);
if (naming_failures.n_failures>0)
{
UF_free_string_array(naming_failures.n_failures, naming_failures.input_names);
UF_free_string_array(naming_failures.n_failures, naming_failures.output_names);
UF_free(naming_failures.statuses);
}
        
        //创建或定义克隆部件的存储目录
strCloneDir = Filepath + _T("\\CoolModels\\");
UF_CALL(UF_CLONE_set_def_directory(W2A(strCloneDir.GetBuffer(strCloneDir.GetLength()))));


//执行克隆操作
UF_CALL(UF_CLONE_perform_clone(&naming_failures));


if (naming_failures.n_failures>0)
{
UF_free_string_array(naming_failures.n_failures, naming_failures.input_names);
UF_free_string_array(naming_failures.n_failures, naming_failures.output_names);
UF_free(naming_failures.statuses);
}


UF_CLONE_terminate();


CString strClonePath;
strClonePath=strCloneDir+_T("\\")+_T("pattern1")+strPreName+_T(".prt");
strCloneName=_T("pattern1")+strPreName;
return strClonePath;
}

 
  

你可能感兴趣的:(UG,二次开发)