// Bentley GenerativeComponents Transaction File -- File structure version 1.03. (Please do not delete or change this line.)
environment
{
GCVersion = "08.09.04.76";
MSVersion = "08.09.04.51";
MSProject = "GC_Default";
MSDesignFile = "C:\\Program Files\\BentleyXM\\Workspace\\projects\\examples\\GC_Default\\out\\$gcworkdgn.tmp";
} transaction modelBased "Add Circles"
{
feature circle01 GC.Circle
{
CenterPoint = baseCS;
Radius = 10;
Support = baseCS.XYPlane;
}
feature circle02 GC.Circle
{
CenterPoint = point03;
Radius = 10;
Support = baseCS.XYPlane;
}
feature point03 GC.Point
{
CoordinateSystem = baseCS;
XTranslation = 0;
YTranslation = 0;
ZTranslation = 30;
HandlesVisible = true;
}
} transaction modelBased "Initial Surface"
{
feature bsplineSurface04 GC.BSplineSurface
{
Curves = {circle01,circle02,};
}
} transaction modelBased "Dump some points on it"
{
feature point01 GC.Point
{
Function = function (BSplineSurface myBsplineSurface, double pointNumber) { Point johnPoint = new Point();
double holder = {};
holder = Series(0,1,0.05); johnPoint.Replication = ReplicationOption.AllCombinations;
johnPoint.ByUVParametersOnSurface(myBsplineSurface, holder, holder); return johnPoint;
};
FunctionArguments = {bsplineSurface04,5};
}
} transaction modelBased "Make the relaxation graph function (the important bit)"
{
feature graphFunction02 GC.GraphFunction
{
Definition = function (Point myPoint, double generations, CoordinateSystem myCS){ double particle = {};
double k = 0.1;
for (int i=0 ; i
particle[i] = {};
for (int j=0; j particle[i][j] = {};
particle[i][j][0] = myPoint[i][j].X;
particle[i][j][1] = myPoint[i][j].Y;
particle[i][j][2] = myPoint[i][j].Z;
}
}
for (int m=0; m for (int i=1; i for (int j=1; j //***vectorsum**+=*spring_force***+***damping*****
particle[i][j][3] += k*((particle[i+1][j][0]+particle[i][j+1][0]+particle[i-1][j][0]+particle[i][j-1][0]-(4*particle[i][j][0])-particle[i][j][3]));
particle[i][j][4] += k*((particle[i+1][j][1]+particle[i][j+1][1]+particle[i-1][j][1]+particle[i][j-1][1]-(4*particle[i][j][1])-particle[i][j][4]));
particle[i][j][5] += k*((particle[i+1][j][2]+particle[i][j+1][2]+particle[i-1][j][2]+particle[i][j-1][2]-(4*particle[i][j][2])-particle[i][j][5]));
//add gravity force
//particle[i][j][5] += 9.81*0.02;
}
}
// update the positions of the particles
for (int i=1; i for (int j=1; j particle[i][j][0] += particle[i][j][3];
particle[i][j][1] += particle[i][j][4];
particle[i][j][2] += particle[i][j][5];
}
}
}
//draw the new Points here
Point mynewPoint = new Point();
double Xholder = {};
double Yholder = {};
double Zholder = {};
for (int i=0 ; i
Xholder[i] = {};
Yholder[i] = {};
Zholder[i] = {};
for (int j=0; j
Xholder[i][j] = particle[i][j][0];
Yholder[i][j] = particle[i][j][1];
Zholder[i][j] = particle[i][j][2];
}
}
mynewPoint.ByCartesianCoordinates(myCS, Xholder, Yholder, Zholder);
mynewPoint.Replication = ReplicationOption.CorrespondingIndexing;
return mynewPoint;
};
}
}
transaction modelBased "Run the Script"
{
feature point02 GC.Point
{
Function = graphFunction02;
FunctionArguments = {point01, 200, baseCS};
}
}
transaction modelBased "Hide the Initial Points and Surface"
{
feature bsplineSurface04 GC.BSplineSurface
{
Visible = false;
}
feature circle01 GC.Circle
{
Visible = false;
}
feature circle02 GC.Circle
{
Visible = false;
}
feature point01 GC.Point
{
Visible = false;
}
}
transaction modelBased "Make a surface with the result"
{
feature bsplineSurface03 GC.BSplineSurface
{
Points = point02;
}
}