Continue to Site

Welcome to MCAD Central

Join our MCAD Central community forums, the largest resource for MCAD (Mechanical Computer-Aided Design) professionals, including files, forums, jobs, articles, calendar, and more.

question about pattern around axis(during

zwj23232

New member
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:
 
anybody can help me? maybe i dont describle the question clearly? i just want to realize pattern around a axis through the code , but it doesnt work! somebody does the work like this? thanks!
 
Hello,

I tried to create pattern of datum planes using ProPatternCreate(). Following is the function:

ProError CreatePattarn()
{
ProError status;
ProMdl Model;
ProModelitem mdl_item;

ProElement ElemTree, ElemType, ElemRef, ElemRegen;
ProElement Elem1Dir, Elem1DimComp;
ProElement Elem1Dim, Elem1VarType, Elem1VarVal, Elem1Num;
ProSelection *datum_sel, *dim_sel;
int iSel;
ProValue value;
ProValueData value_data;

// Get current model
status = ProMdlCurrentGet(&Model);

// create root element
status = ProElementAlloc(PRO_E_PATTERN_ROOT, &ElemTree);

// set pattern type
status = ProElementAlloc(PRO_E_PAT_TYPE, &ElemType);
status = ProElementIntegerSet(ElemType, PRO_PAT_DIM_DRIVEN);
status = ProElemtreeElementAdd(ElemTree, NULL, ElemType);

// prompt user for pattern reference
status = ProSelect("feat", 1, NULL, NULL, NULL, NULL, &datum_sel, &iSel);
// get model item
status = ProSelectionModelitemGet(datum_sel[0], &mdl_item);
// set pattern reference
status = ProElementAlloc(PRO_E_PAT_REF, &ElemRef);
value_data.type = PRO_VALUE_TYPE_SELECTION;
value_data.v.r = datum_sel[0];
status = ProValueAlloc(&value);
status = ProValueDataSet(value, &value_data);
status = ProElementValueSet(ElemRef, value);
status = ProElemtreeElementAdd(ElemTree, NULL, ElemRef);

// set pattern regen method
status = ProElementAlloc(PRO_E_PAT_REGEN_METHOD, &ElemRegen);
status = ProElementIntegerSet(ElemRegen, PRO_PAT_GENERAL);
status = ProElemtreeElementAdd(ElemTree, NULL, ElemRegen);

// Set first dir and dim compound
status = ProElementAlloc(PRO_E_PAT_FIRST_DIR, &Elem1Dir);
status = ProElemtreeElementAdd(ElemTree, NULL, Elem1Dir);
status = ProElementAlloc(PRO_E_PAT_DIR_DIM_COMPOUND, &Elem1DimComp);
status = ProElemtreeElementAdd(Elem1Dir, NULL, Elem1DimComp);

// prompt user for dimension
status = ProSelect("dimension", 1, NULL, NULL, NULL, NULL, &dim_sel, &iSel);
// set dimension
status = ProElementAlloc(PRO_E_PAT_DIR_DIMENSION, &Elem1Dim);
value_data.type = PRO_VALUE_TYPE_SELECTION;
value_data.v.r = dim_sel[0];
status = ProValueAlloc(&value);
status = ProValueDataSet(value, &value_data);
status = ProElementValueSet(Elem1Dim, value);
status = ProElemtreeElementAdd(Elem1DimComp, NULL, Elem1Dim);
// set var type
status = ProElementAlloc(PRO_E_PAT_DIR_VAR_TYPE, &Elem1VarType);
status = ProElementIntegerSet(Elem1VarType, PRO_PAT_VALUE_DRIVEN);
status = ProElemtreeElementAdd(Elem1DimComp, NULL, Elem1VarType);
// add spacing
status = ProElementAlloc(PRO_E_PAT_DIR_VAR_VALUE, &Elem1VarVal);
status = ProElementDoubleSet(Elem1VarVal, 90);
status = ProElemtreeElementAdd(Elem1DimComp, NULL, Elem1VarVal);
// add no. of instances
status = ProElementAlloc(PRO_E_PAT_FIRST_DIR_NUM_INST, &Elem1Num);
status = ProElementIntegerSet(Elem1Num, 2);
status = ProElemtreeElementAdd(ElemTree, NULL, Elem1Num);

// set second dir and dim compound - see pattern tree
ProElement Elem2Dir;
status = ProElementAlloc(PRO_E_PAT_SECOND_DIR, &Elem2Dir);
status = ProElemtreeElementAdd(ElemTree, NULL, Elem2Dir);

// set no. of instances for dir2
ProElement Elem2Num;
status = ProElementAlloc(PRO_E_PAT_SECOND_DIR_NUM_INST, &Elem2Num);
status = ProElementIntegerSet(Elem2Num, 1);
status = ProElemtreeElementAdd(ElemTree, NULL, Elem2Num);

// create pattern
status = ProPatternCreate((ProFeature *)&mdl_item, PRO_FEAT_PATTERN, ElemTree);

return status;
}

Following is the result:



The plane I used for pattern is a plane through an axis and angle offset to another datum plane.

I will suggest to use ProSelect for selecting datum plane and dimension for testing.
To select dimension, you will need to Edit (Select feature and right click -> Edit) datum plane before using Pro/Toolkit function.
Or
check datum feature and dimension ids manually and make sure that they same in Pro/Toolkit function.

Let me know if it works with ProSelect. Also if possible, provide details about how the datum plane is created.

Regards,
Amar Junankar
 

Sponsor

Articles From 3DCAD World

Back
Top