Skip to main content
1-Visitor
August 5, 2019
Solved

Changing Dimensions Of Datum points in Table driven Pattern

  • August 5, 2019
  • 4 replies
  • 3680 views

Hello

 

We are trying update dimensions of the datum points present in the table driven pattern.

We are using the code below.

 

//Retrieve part and display in part window
status = ProMdlnameRetrieve(MdlName, PRO_MDLFILE_ASSEMBLY, &pHandler);
if (status != 0) {
status = ProMdlnameRetrieve(MdlName, PRO_MDLFILE_PART, &pHandler);
}

status = ProObjectwindowCreate(MdlName, PRO_PART, &win_id);
status = ProWindowActivate(win_id);
status = ProMdlDisplay(pHandler);

 

//get datum points from Model
status = ProUtilCollectdatumPoints((ProAssembly)pHandler,&datumpoints);

//get 2nd Datum point dimensions
status = ProUtilCollectPointDimension(&datumpoints[1],&p_dims);
ProArraySizeGet(p_dims, &dimsize);
for (int i = 0; i < dimsize; i++)

{
ProStringToWstring(dimname, "d5210");
ProDimensionSymbolGet(p_dims + i, dimSymbol);

 

//Update dimension d5210 to 900.12
status = ProWstringCompare(dimSymbol, dimname, 5, &cmpres);
if (cmpres == 0)

{
status = ProDimensionValueSet(p_dims + i,900.12);
status = ProDimensionDisplayUpdate(p_dims + i);
status= ProSolidRegenerate((ProSolid)pHandler, PRO_REGEN_UPDATE_INSTS);
}
}

 

This Code works fine for datum points outside the pattern.

For datum points present in the Table driven pattern the dimensions are updated temporarily but are reverted back to original value upon regeneration.

 

we are using Creo 4.0 M030.

 

Any Suggestion would be great help.

 

Thanks and Regards

Rohit

Best answer by FV_01

modification of the element tree for table driven patterns should work just fine...

here is the sample of the feature tree:2_.png

here is the code:

1.png

 

4 replies

17-Peridot
August 5, 2019

I am pretty sure there is no way in ObjectToolkit to manipulate Pattern Tables...  The fallback seems to be to import a new table with a Mapkey ... a bit painful.

 

If anyone has a better way - please suggest.

 

Dave

Rohit1-VisitorAuthor
1-Visitor
August 6, 2019

1. is there any way we can change data of the table pattern by importing a file using Toolkit?

 

2. The TOOLKIT user Guide contains Element Tree Structure for a Table Pattern.....can we implement this to access table and change dimensions?

17-Peridot
August 6, 2019

THOSE are VERY good questions.... 

 

I will talk to my developer about that a bit more...   Anyone else have any ideas/feedback on that?

 

Best advice - try it if you can.

 

Dave

RPN
18-Opal
August 12, 2019

Hello Rohit, for me it's working fine.

Assume I have a parametric table in my current model, and one dim has the symbol d89, now change that to 105.6

 

# required code in p-Shell, no error checking 
# list with pattern (can contain *, ? ,[chars]) will return a list containing the dim id, the dim symbol and the dim value, 
# from_ids the dim handle,

foreach match [ps_dim list -pattern d89] {

 foreach {dimid dimsym dimval} $match {}

 set dimObj [ps_dim from_ids $dimid]

 $dimObj config -value 105.6

}

ps_regen

 

 

I would re-think your regen option.

 

Note: ProPattern.h will contain all you need to deal with that kind of a feature, in my point of view Dave is wrongSmiley LOL

 

| * Table Pattern *
|
|--- PRO_E_GENPAT_TABLE
| |--- PRO_E_GENPAT_TABLE_DIMS
| | |--- PRO_E_GENPAT_TABLE_DIM_ENTRY
| | |
| | |- PRO_E_GENPAT_TABLE_DIM
| |
| |--- PRO_E_GENPAT_TABLE_LIST
| | |--- PRO_E_GENPAT_TABLE_ENTRY
| | |- PRO_E_GENPAT_TABLE_NAME
| | |--PRO_E_GENPAT_TABLE_INSTANCES
| | |--PRO_E_GENPAT_TABLE_INSTANCE
| | |--PRO_E_GENPAT_TABLE_INSTANCE_INDEX
| | |--PRO_E_GENPAT_TABLE_INSTANCE_DIMS
| | |--PRO_E_GENPAT_TABLE_INSTANCE_DIM_VALUE
| | 
| |--- PRO_E_GENPAT_TABLE_SET_ACTIVE
|

Here is all you need for a Table Pattern. But I think, you don't need that.

 

 

RPN
18-Opal
August 12, 2019

Hello Rohit, for me it's working fine.

Assume I have a parametric table in my current model, and one dim has the symbol d89, now change that to 105.6

# required code in p-Shell, no error checking 
# list with pattern (can contain *, ? ,[chars]) will return a list containing the dim id, the dim symbol and the dim value, 
# from_ids the dim handle,

foreach match [ps_dim list -pattern d89] {

 foreach {dimid dimsym dimval} $match {}

 set dimObj [ps_dim from_ids $dimid]

 $dimObj config -value 105.6

}

ps_regen

 


I would re-think your regen option.

 

Note: ProPattern.h will contain all you need to deal with that kind of a feature, in my point of view Dave is wrongSmiley LOL

 

| * Table Pattern *
|
|--- PRO_E_GENPAT_TABLE
| |--- PRO_E_GENPAT_TABLE_DIMS
| | |--- PRO_E_GENPAT_TABLE_DIM_ENTRY
| | |
| | |- PRO_E_GENPAT_TABLE_DIM
| |
| |--- PRO_E_GENPAT_TABLE_LIST
| | |--- PRO_E_GENPAT_TABLE_ENTRY
| | |- PRO_E_GENPAT_TABLE_NAME
| | |--PRO_E_GENPAT_TABLE_INSTANCES
| | |--PRO_E_GENPAT_TABLE_INSTANCE
| | |--PRO_E_GENPAT_TABLE_INSTANCE_INDEX
| | |--PRO_E_GENPAT_TABLE_INSTANCE_DIMS
| | |--PRO_E_GENPAT_TABLE_INSTANCE_DIM_VALUE
| | 
| |--- PRO_E_GENPAT_TABLE_SET_ACTIVE
|

Here is all you need for a Table Pattern. But I think, you don't need that.

RPN
18-Opal
August 12, 2019

If the model has an error after Regen, the new values may ignored, check your config. As far I know, you have to parse an input file by yourself, a function for input is not available.

 

Regarding the feature tree, for me ProFeatureElemDimensionIdGet() will return NOT_FOUND (-4) but 

.7 -type DPOINT_OFST_CSYS_PNTS_ARRAY -array 
.7.1 -type DPOINT_OFST_CSYS_PNT -compound .7.1.1 -type DPOINT_OFST_CSYS_PNT_NAME -wstring PNT0 .7.1.2 -type DPOINT_OFST_CSYS_DIR1_VAL -double 10.0 .7.1.3 -type DPOINT_OFST_CSYS_DIR2_VAL -double 20.0 .7.1.4 -type DPOINT_OFST_CSYS_DIR3_VAL -double 30.0 .7.2 -type DPOINT_OFST_CSYS_PNT -compound .7.2.1 -type DPOINT_OFST_CSYS_PNT_NAME -wstring PNT1 .7.2.2 -type DPOINT_OFST_CSYS_DIR1_VAL -double 40.0 .7.2.3 -type DPOINT_OFST_CSYS_DIR2_VAL -double 50.0 .7.2.4 -type DPOINT_OFST_CSYS_DIR3_VAL -double 60.0 ...

 you can walk the tree, change the double values, and redefine the feature at the end.

RPN
18-Opal
August 14, 2019

In Tcl your code:

set name mypart
if [catch { set M [ ps_file open $name.asm] } ] {
 set M [ps_file open $name.prt]
}
ps_wind set $M
set dimid [lindex [ps_dim list -model $M -pattern d5210] 0]
set dimObj [ps_dim from -model $M $dimid]
$dimObj config -value 900.12
$dimObj show
ps_regen


 

In your code you mix PART/ASSEMBLY. But I don't believe that this cause your problem.

CollectdatumPoints use ProAssembly even if you load a Model.

ObjectwindowCreate may use PRO_PART even if you load an assembly ...

 

But anyhow I tested it again, and after regen the dimension was changed.

For the tree, here the part of the tree for 2 tables and the second one is active with 3 points

 

.3.2 -type GENPAT_TABLE_LIST -array 
.3.2.1 -type GENPAT_TABLE_ENTRY -compound 
.3.2.1.1 -type GENPAT_TABLE_NAME -wstring TABLE1
.3.2.1.2 -type GENPAT_TABLE_INSTANCES -array 
.3.2.1.2.1 -type GENPAT_TABLE_INSTANCE -compound 
.3.2.1.2.1.1 -type GENPAT_TABLE_INSTANCE_INDEX -integer 1
.3.2.1.2.1.2 -type GENPAT_TABLE_INSTANCE_DIMS -array 
.3.2.1.2.1.2.1 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 11.0
.3.2.1.2.1.2.2 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 31.0
.3.2.1.2.1.2.3 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 21.0
.3.2.1.2.2 -type GENPAT_TABLE_INSTANCE -compound 
.3.2.1.2.2.1 -type GENPAT_TABLE_INSTANCE_INDEX -integer 2
.3.2.1.2.2.2 -type GENPAT_TABLE_INSTANCE_DIMS -array 
.3.2.1.2.2.2.1 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 111.0
.3.2.1.2.2.2.2 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 131.0
.3.2.1.2.2.2.3 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 121.0
.3.2.1.3 -type GENPAT_TABLE_EDIT 
.3.2.1.4 -type GENPAT_TABLE_READ 
.3.2.1.5 -type GENPAT_TABLE_WRITE 
.3.2.2 -type GENPAT_TABLE_ENTRY -compound 
.3.2.2.1 -type GENPAT_TABLE_NAME -wstring TABLE2
.3.2.2.2 -type GENPAT_TABLE_INSTANCES -array 
.3.2.2.2.1 -type GENPAT_TABLE_INSTANCE -compound 
.3.2.2.2.1.1 -type GENPAT_TABLE_INSTANCE_INDEX -integer 1
.3.2.2.2.1.2 -type GENPAT_TABLE_INSTANCE_DIMS -array 
.3.2.2.2.1.2.1 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 50.0
.3.2.2.2.1.2.2 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 60.0
.3.2.2.2.1.2.3 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 70.0
.3.2.2.2.2 -type GENPAT_TABLE_INSTANCE -compound 
.3.2.2.2.2.1 -type GENPAT_TABLE_INSTANCE_INDEX -integer 2
.3.2.2.2.2.2 -type GENPAT_TABLE_INSTANCE_DIMS -array 
.3.2.2.2.2.2.1 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 55.0
.3.2.2.2.2.2.2 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 65.0
.3.2.2.2.2.2.3 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 75.0
.3.2.2.2.3 -type GENPAT_TABLE_INSTANCE -compound 
.3.2.2.2.3.1 -type GENPAT_TABLE_INSTANCE_INDEX -integer 3
.3.2.2.2.3.2 -type GENPAT_TABLE_INSTANCE_DIMS -array 
.3.2.2.2.3.2.1 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 70.0
.3.2.2.2.3.2.2 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 80.0
.3.2.2.2.3.2.3 -type GENPAT_TABLE_INSTANCE_DIM_VALUE -double 90.0
.3.2.2.3 -type GENPAT_TABLE_EDIT 
.3.2.2.4 -type GENPAT_TABLE_READ 
.3.2.2.5 -type GENPAT_TABLE_WRITE 
.3.3 -type GENPAT_TABLE_SET_ACTIVE -integer 1

Here I would be able to modify the value. I need to have the tree for the pattern feature with the id 334. To change the last dim (90.0) within the tree:

 

ps_ftree ft
ft config -model $M -id 334 -type pattern
ft get
ft itemconfig .3.2.2.2.3.2.3 -double 99.99
ft redefine