cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

How to create create varied items for inheritance feature using Pro/Toolkit?

Highlighted

How to create create varied items for inheritance feature using Pro/Toolkit?

Hi all,

I still have a TS call open but for sure someone will answer me there

I'm trying to create varied items on an inheritance feature using Pro/Toolkit

Varied dimension creation is ok but I cannot find a way to create varied parameter or varied feature

Perhaps I've to use otk or jlink instead of toolkit.

Thanks in advance

2 REPLIES 2

Re: How to create create varied items for inheritance feature using Pro/Toolkit?

Hi Frédérick,

  I am also working on inheritance nowadays, but it is unsuccessful, it always told me "BAD_INPUT", can you share me your code about this?

I have a dozens of parts need to inheritance automatically, don't need to create the varied items, just only inheritance.

my email address: -

I am very appreciate if you can share me. thanks!

Re: How to create create varied items for inheritance feature using Pro/Toolkit?

Here is my code, but it doesn't work, I can't figure out why? Can you help me?

/*====================================================================*\
FUNCTION : ProTestInheritMerge ()
PURPOSE  : Inherit Merge  general merge feature .
\*====================================================================*/
void ProTestInheritMerge ()
{
    ProError       err;
    ProElement     elem_root;
    ProSelection   sel;
    ProModelitem   modelitem;
ProErrorlist   errors;
ProFeature     feature;
ProFamilyName comp_name;
ProModelitem item_asm_csys,item_comp_csys,comp_item;
ProName asm_csys,comp_csys;
ProMdl       assembly,component;
ProSelection   _asm_csys,_comp_csys,comp_mdl;

err=ProMdlCurrentGet(&assembly);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProMdlCurrentGet failed!");
  return;
    }
ProStringToWstring(comp_name,"prt0001.prt");
err=ProMdlRetrieve(comp_name,PRO_MDL_PART,&component);
ProStringToWstring(asm_csys,"INSTALL");
ProStringToWstring(comp_csys,"INSTALL");
err = ProModelitemByNameInit(assembly,PRO_CSYS,asm_csys,&item_asm_csys);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProModelitemByNameInit((ProMdl)assembly failed!");
  return;
    }
err = ProModelitemByNameInit (component, PRO_CSYS,comp_csys, &item_comp_csys);
     if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"PRO_TK_BAD_INPUTS");
  return;
    }
ProAsmcomppath comp_path;
ProIdTable c_id_table;
c_id_table [0] = -1;
err =ProAsmcomppathInit ((ProSolid)assembly, c_id_table, 0, &comp_path);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProAsmcomppathInit failed!");
  return;
    }
err = ProSelectionAlloc (&comp_path, &item_asm_csys, &_asm_csys);
      if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProSelectionAlloc failed!");
  return;
    }
err = ProSelectionAlloc (NULL, &item_comp_csys, &_comp_csys);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProSelectionAlloccomponent failed!");
  return;
    }

ProFeatureCreateOptions  opts[] = {PRO_FEAT_CR_INCOMPLETE_FEAT};
static ElemTreeData tree[] = {
  {0, PRO_E_FEATURE_TREE,{(ProValueDataType)-1}},
  {1, PRO_E_FEATURE_TYPE, {PRO_VALUE_TYPE_INT, {PRO_FEAT_GEN_MERGE}}},
  {1, PRO_E_GMRG_FEAT_TYPE, {PRO_VALUE_TYPE_INT, {PRO_GEN_MERGE_TYPE_MERGE}}},
  {1, PRO_E_DSF_REF_MDL, {(ProValueDataType)-1}},
  {1, PRO_E_GMRG_MATERIAL_OPT, {PRO_VALUE_TYPE_INT, {PRO_GEN_MERGE_ADD_MATERIAL}}},
  //{1, PRO_E_GMRG_VARIED_ITEMS,  {(ProValueDataType)-1}},
  //{1, PRO_E_GMRG_COPY_DATUMS, {PRO_VALUE_TYPE_INT, {PRO_B_FALSE}}},
  //{1, PRO_E_DSF_PROPAGATE_ANNOTS, {(ProValueDataType)-1}},
  //{1, PRO_E_DSF_DTMS_FIT,  {(ProValueDataType)-1}},
  {1, PRO_E_DSF_DEPENDENCY, {PRO_VALUE_TYPE_INT, {PRO_DSF_ANNOT_DEPENDENT}}},

  //{2, PRO_E_DSF_ANNOT_CPY_ALL, {PRO_VALUE_TYPE_INT, {PRO_B_TRUE}}},
  //{2, PRO_E_DSF_ANNOT_DEPEND_ALL, {PRO_VALUE_TYPE_INT, {PRO_B_TRUE}}},
  //{2, PRO_E_DSF_ANNOT_AUTO_CPY_DTM , {PRO_VALUE_TYPE_INT, {PRO_B_TRUE}}},

  {2, PRO_E_DSF_EXT_LOCAL_TYPE, {PRO_VALUE_TYPE_INT, {PRO_DSF_PLACE_EXTERNAL}}},
  {2, PRO_E_DSF_SEL_REF_MDL, {PRO_VALUE_TYPE_SELECTION}},
  {2, PRO_E_DSF_PLACEMENT , {(ProValueDataType)-1}},
  //{2, PRO_E_DSF_DTM_FIT, {(ProValueDataType)-1}},

  {3, PRO_E_COMPONENT_CONSTRAINTS, {(ProValueDataType)-1}},
  {4, PRO_E_COMPONENT_CONSTRAINT, {(ProValueDataType)-1}},
  {5, PRO_E_COMPONENT_CONSTR_TYPE, {PRO_VALUE_TYPE_INT, {PRO_ASM_CSYS}}},
  {5, PRO_E_COMPONENT_COMP_CONSTR_REF, {PRO_VALUE_TYPE_SELECTION}},
  {5, PRO_E_COMPONENT_ASSEM_CONSTR_REF, {PRO_VALUE_TYPE_SELECTION}}};

/*--------------------------------------------------------------------*\
    Prepare value for the component model element.
\*--------------------------------------------------------------------*/
err=ProMdlToModelitem(component,&comp_item);
err = ProSelectionAlloc (NULL, &comp_item, &comp_mdl);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProSelectionAlloc ProMdlToModelitem failed!");
  return;
    }
    tree[7].data.v.r = comp_mdl;
/*--------------------------------------------------------------------*\
    Prepare value for the component and assembly reference element.
\*--------------------------------------------------------------------*/
    tree[12].data.v.r=_comp_csys;
    tree[13].data.v.r=_asm_csys;
/*--------------------------------------------------------------------*\
    Create element tree
\*--------------------------------------------------------------------*/
    err = ProUtilElemtreeCreate(tree, sizeof(tree)/sizeof(tree[0]),NULL, &elem_root);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProUtilElemtreeCreate failed!");
  return;
    }
/*--------------------------------------------------------------------*\
    Set up a selection structure for the feature context.
\*--------------------------------------------------------------------*/
    err = ProMdlToModelitem (assembly, &modelitem);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProMdlToModelitem failed!");
  return;
    }
err = ProSelectionAlloc (NULL, &modelitem, &sel);
if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"ProSelectionAlloc failed!");
  return;
    }
/*--------------------------------------------------------------------*\
    Assemble the component by feature creation.
\*--------------------------------------------------------------------*/
    err = ProFeatureWithoptionsCreate (sel, elem_root, opts,
sizeof(opts)/sizeof(opts[0]), &feature, &errors);

    if (err != PRO_TK_NO_ERROR)
    {
  AfxMessageBox(L"Assembly failed!");
    }
     if (err == PRO_TK_BAD_INPUTS)
    {
  AfxMessageBox(L"PRO_TK_BAD_INPUTS!");
    }

/*--------------------------------------------------------------------*\
    Free Allocated memory
\*--------------------------------------------------------------------*/
    err = ProElementFree(&elem_root);
    err = ProSelectionFree(&sel);
ProSelectionFree(&_asm_csys);
ProSelectionFree(&_comp_csys);
ProSelectionFree(&comp_mdl);
}


/*=============================================================*\
  Function:  ProUtilElemtreeCreate
  Purpose: Create element tree by the ElemTreeData structure
  Return :      PRO_TK_NO_ERROR if successfull,
\*=============================================================*/
ProError ProUtilElemtreeCreate(
    ElemTreeData *elemarr,     /* In : The array of ElemTreeData */
    int n_elem,       /* In : number of ElemTreeData in elemarr */
    ProElement base_tree,     /* In : the base tree */
    ProElement *elem_tree)     /* Out : element tree */
{
    ProElement elem_level[10], elem;
    ProValue value;
    int i;
    ProError err;

    if (base_tree!=NULL)
elem_level[0] = base_tree;

    for (i=0; i<n_elem; i++)
    {
err = ProElementAlloc((ProElemId)elemarr[i].elem_id, &elem);
if (err != PRO_TK_NO_ERROR)
     return (err);
if (elemarr[i].data.type != -1)
{
/*----------------------------------------------------------*\
    Add Element value
\*----------------------------------------------------------*/
     err = ProValueAlloc(&value);
     if (err != PRO_TK_NO_ERROR)
  return (err);
     err = ProValueDataSet(value, &elemarr[i].data);
     if (err != PRO_TK_NO_ERROR)
  return (err);
     err = ProElementValueSet(elem, value);
     if (err != PRO_TK_NO_ERROR)
  return (err);
}
/*----------------------------------------------------------*\
    Add Element to the tree
\*----------------------------------------------------------*/
if (elemarr[i].level!=0)
{
     err = ProElemtreeElementAdd(elem_level[elemarr[i].level-1], NULL,
  elem);
}
elem_level[elemarr[i].level] = elem;
}
    elem_tree[0] = elem_level[0];
    return (PRO_TK_NO_ERROR);
}