i want to make a datum plane to pattern around axis, the program execute without any error, but no pattern datum planes created.
you can reference the picture in the attachment,you will be clear.
the code is as follow:
//these code to gain the dimension for pattern, the dimension is the angle between the datum to be patterned and the datum "RIGHT", the value is zero degree.
status=ProModelitemInit((ProMdl)solid,dim[n_dims-1].id, PRO_DIMENSION, &modelitem);
ProSelection p_selection_pat;
status=ProSelectionAlloc(NULL, &modelitem, &p_selection_pat);
////////////// these codes are correct.
///the codes to pattern
ProElement elem_tree, elem_pattype, elem_patregen;
ProElement elem_patdir1, elem_dir1var, elem_dir1vtype;
ProElement elem_dir1dim, elem_dir1inc, elem_dir1num;
ProElement elem_patdir2, elem_dir2num;
ProValue value_pat;
ProValueData value_data_pat;
ProError err;
err = ProElementAlloc (PRO_E_PATTERN_ROOT, &elem_tree);
/*---------------------------------------------------------- ------*\
Add the pattern type element (dimension-driven).
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_TYPE, &elem_pattype);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = PRO_PAT_DIM_DRIVEN;
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_pattype, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_pattype);
err = ProElementAlloc (PRO_E_PAT_REGEN_METHOD, &elem_patregen);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i =PRO_PAT_GENERAL;//
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_patregen, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_patregen);
err = ProElementAlloc (PRO_E_PAT_FIRST_DIR, &elem_patdir1);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_patdir1);
/*---------------------------------------------------------- ------*\
Add the first direction dimension variation element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_DIM_COMPOUND,&elem_dir1var);
err = ProElemtreeElementAdd (elem_patdir1, NULL, elem_dir1var);
/*---------------------------------------------------------- ------*\
Add the first direction dimension element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_DIMENSION, &elem_dir1dim);
value_data.type = PRO_VALUE_TYPE_SELECTION;
value_data.v.r = p_selection_pat;
err = ProValueAlloc(&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1dim, value_pat);
err = ProElemtreeElementAdd (elem_dir1var, NULL, elem_dir1dim);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("elem_dir1dim:%d"),err);
AfxMessageBox(temp);
}
/*---------------------------------------------------------- ------*\
Add the first direction variation type.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_VAR_TYPE, &elem_dir1vtype);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = PRO_PAT_VALUE_DRIVEN;
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1vtype, value_pat);
err = ProElemtreeElementAdd (elem_dir1var, NULL, elem_dir1vtype);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("elem_dir1vtype:%d"),err);
AfxMessageBox(temp);
}
/*---------------------------------------------------------- ------*\
Add the first direction variation (increment) element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_VAR_VALUE, &elem_dir1inc);
value_data.type = PRO_VALUE_TYPE_DOUBLE;
value_data.v.d =12.0 ;//increment
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1inc, value_pat);
err = ProElemtreeElementAdd (elem_dir1var, NULL, elem_dir1inc);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("elem_dir1inc:%d"),err);
AfxMessageBox(temp);
}
/*---------------------------------------------------------- ------*\
Add the first direction number of instances element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_FIRST_DIR_NUM_INST, &elem_dir1num);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = 10;//num_inst
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1num, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_dir1num);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T(" elem_dir1num:%d"),err);
AfxMessageBox(temp);
}
err = ProElementAlloc (PRO_E_PAT_SECOND_DIR, &elem_patdir2);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_patdir2);
err = ProElementAlloc (PRO_E_PAT_SECOND_DIR_NUM_INST, &elem_dir2num);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = 1;
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir2num, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_dir2num);
//ProMessageDisplay (msg_file, "USER %0s", "Element tree is complete.");
//err = ProUtilElementtreePrint (elem_tree, PRO_TEST_INFO_WINDOW,NULL);
/*---------------------------------------------------------- ------*\
Create the pattern.
\*---------------------------------------------------------- ------*/
err=ProPatternCreate (&feature_dtm, PRO_FEAT_PATTERN, elem_tree);//
if(err!=PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("%d"),err);
AfxMessageBox(temp);
}
else
{
AfxMessageBox("success");
}<SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family:
you can reference the picture in the attachment,you will be clear.
the code is as follow:
//these code to gain the dimension for pattern, the dimension is the angle between the datum to be patterned and the datum "RIGHT", the value is zero degree.
status=ProModelitemInit((ProMdl)solid,dim[n_dims-1].id, PRO_DIMENSION, &modelitem);
ProSelection p_selection_pat;
status=ProSelectionAlloc(NULL, &modelitem, &p_selection_pat);
////////////// these codes are correct.
///the codes to pattern
ProElement elem_tree, elem_pattype, elem_patregen;
ProElement elem_patdir1, elem_dir1var, elem_dir1vtype;
ProElement elem_dir1dim, elem_dir1inc, elem_dir1num;
ProElement elem_patdir2, elem_dir2num;
ProValue value_pat;
ProValueData value_data_pat;
ProError err;
err = ProElementAlloc (PRO_E_PATTERN_ROOT, &elem_tree);
/*---------------------------------------------------------- ------*\
Add the pattern type element (dimension-driven).
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_TYPE, &elem_pattype);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = PRO_PAT_DIM_DRIVEN;
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_pattype, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_pattype);
err = ProElementAlloc (PRO_E_PAT_REGEN_METHOD, &elem_patregen);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i =PRO_PAT_GENERAL;//
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_patregen, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_patregen);
err = ProElementAlloc (PRO_E_PAT_FIRST_DIR, &elem_patdir1);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_patdir1);
/*---------------------------------------------------------- ------*\
Add the first direction dimension variation element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_DIM_COMPOUND,&elem_dir1var);
err = ProElemtreeElementAdd (elem_patdir1, NULL, elem_dir1var);
/*---------------------------------------------------------- ------*\
Add the first direction dimension element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_DIMENSION, &elem_dir1dim);
value_data.type = PRO_VALUE_TYPE_SELECTION;
value_data.v.r = p_selection_pat;
err = ProValueAlloc(&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1dim, value_pat);
err = ProElemtreeElementAdd (elem_dir1var, NULL, elem_dir1dim);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("elem_dir1dim:%d"),err);
AfxMessageBox(temp);
}
/*---------------------------------------------------------- ------*\
Add the first direction variation type.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_VAR_TYPE, &elem_dir1vtype);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = PRO_PAT_VALUE_DRIVEN;
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1vtype, value_pat);
err = ProElemtreeElementAdd (elem_dir1var, NULL, elem_dir1vtype);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("elem_dir1vtype:%d"),err);
AfxMessageBox(temp);
}
/*---------------------------------------------------------- ------*\
Add the first direction variation (increment) element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_DIR_VAR_VALUE, &elem_dir1inc);
value_data.type = PRO_VALUE_TYPE_DOUBLE;
value_data.v.d =12.0 ;//increment
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1inc, value_pat);
err = ProElemtreeElementAdd (elem_dir1var, NULL, elem_dir1inc);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("elem_dir1inc:%d"),err);
AfxMessageBox(temp);
}
/*---------------------------------------------------------- ------*\
Add the first direction number of instances element.
\*---------------------------------------------------------- ------*/
err = ProElementAlloc (PRO_E_PAT_FIRST_DIR_NUM_INST, &elem_dir1num);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = 10;//num_inst
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir1num, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_dir1num);
if (err!= PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T(" elem_dir1num:%d"),err);
AfxMessageBox(temp);
}
err = ProElementAlloc (PRO_E_PAT_SECOND_DIR, &elem_patdir2);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_patdir2);
err = ProElementAlloc (PRO_E_PAT_SECOND_DIR_NUM_INST, &elem_dir2num);
value_data.type = PRO_VALUE_TYPE_INT;
value_data.v.i = 1;
err = ProValueAlloc (&value_pat);
err = ProValueDataSet (value_pat, &value_data_pat);
err = ProElementValueSet (elem_dir2num, value_pat);
err = ProElemtreeElementAdd (elem_tree, NULL, elem_dir2num);
//ProMessageDisplay (msg_file, "USER %0s", "Element tree is complete.");
//err = ProUtilElementtreePrint (elem_tree, PRO_TEST_INFO_WINDOW,NULL);
/*---------------------------------------------------------- ------*\
Create the pattern.
\*---------------------------------------------------------- ------*/
err=ProPatternCreate (&feature_dtm, PRO_FEAT_PATTERN, elem_tree);//
if(err!=PRO_TK_NO_ERROR)
{
CString temp;
temp.Format(_T("%d"),err);
AfxMessageBox(temp);
}
else
{
AfxMessageBox("success");
}<SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: