Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape.
First time visiting? Here are some places to start:- Looking for a certain topic? Check out the categories filter or use Search (upper right).
- Need support? Ask a question to our Community Support category.
- Please submit support tickets for bugs but you can request improvements in the Product Feedback category.
- Be respectful, on topic and if you see a problem, Flag it.
If you would like to contact our Community Manager personally, feel free to send a private message or an email.
multisort an array/custom table with featurescript
rooiejoris
OS Professional Posts: 16 PRO
Hi,
As I start always: I am not a programmer, but I think I want something fairly simple:
I want a 'multisort' in an array or custom table.
At the moment I postprocess the tabel in an php script and use:
But I think this should be possible within onshape as well. Current script:
Maybe an extra for next loop is needed to append the rows and use the current for next loop to fill an array...?!
So then you get: 1- loop through bodies to fill array, 2- multisort that array first Y ascending then X descending, 3- loop through array to append the custom table.
thanks in advance...!
cheers / joris
As I start always: I am not a programmer, but I think I want something fairly simple:
I want a 'multisort' in an array or custom table.
At the moment I postprocess the tabel in an php script and use:
array_multisort(array_column($arrRondjesGrid, 'y'), SORT_ASC, array_column($arrRondjesGrid, 'x'), SORT_DESC, $arrRondjesGrid);
But I think this should be possible within onshape as well. Current script:
FeatureScript 2260;
import(path : "onshape/std/common.fs", version : "2260.0");
annotation { "Table Type Name" : "Get Center Coordinates" }
export const partVolumes = defineTable(function(context is Context, definition is map) returns Table
precondition
{
}
{
/*
var columns = [tableColumnDefinition("name", "Part name"),
tableColumnDefinition("coord", "Coordinates"),
tableColumnDefinition("xcoord", "X"),
tableColumnDefinition("ycoord", "Y"),
tableColumnDefinition("xycoord", "XY")];
*/
var columns = [tableColumnDefinition("xycoord", "XY")];
var rows = [];
for (var part in evaluateQuery(context, qAllModifiableSolidBodies()))
{
var partName = getProperty(context, { "entity" : part, "propertyType" : PropertyType.NAME } );
//var volume = evVolume(context, { "entities" : part });
var coord = box3dCenter(evBox3d(context, {
"topology" : part,
"tight" : true
}));
var xcoord = roundToPrecision(coord[0]/millimeter,3);
var ycoord = roundToPrecision(coord[1]/millimeter,3);
var xycoord = "" ~ xcoord ~ "," ~ ycoord;
/*
for (var key, value in coord)
{
//println("Key: " ~ key ~ ", Value: " ~ value);
var xcoord = key;
var ycoord = value;
rows = append(rows, tableRow({ "name" : partName, "coord" : xcoord, "coord" : ycoord }));
}
*/
rows = append(rows, tableRow({"xycoord" : xycoord }));
//rows = append(rows, tableRow({ "name" : partName, "coord" : coord, "xcoord" : xcoord, "ycoord" : ycoord, "xycoord" : xycoord }));
//rows = append(rows, tableRow({ "name" : partName, "coord" : coord }));
//rows = append(rows, tableRow({ "name" : partName, "coord" : coord["a"] }));
}
//sort(coord,function(a, b) { return a - b; });
return table("Part coordinates", columns, rows);
});Maybe an extra for next loop is needed to append the rows and use the current for next loop to fill an array...?!
So then you get: 1- loop through bodies to fill array, 2- multisort that array first Y ascending then X descending, 3- loop through array to append the custom table.
thanks in advance...!
cheers / joris
Tagged:
0