GenerativeComponents Offset

En GC todo es paramétrico, y toda la geometría que construyes es referenciada desde el sistema de coordenadas: baseCS. Cada vez que creas información, gráfica y no gráfica, es referenciada en el script editor y en la ventana de relaciones graph. Este ejemplo es muy simple y básicamente implica 6 puntos, una curva, dos variables y una función.

Los puntos y la curva.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
transaction modelChange 'points and crv'
{
    node User.Objects.baseCS Bentley.GC.Features.CoordinateSystem
    {
        GraphLocation             = {-26.79296, 554.16064};
    }
    node User.Objects.point01 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              =  -6.2602786594442;
        YTranslation              =  7.6286302114139;
        ZTranslation              =  0.0;
        Origin                    = null;
        GraphLocation             =  {300.0, 40.0};
    }
    node User.Objects.point02 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              =  -1.63677113230983;
        YTranslation              =  -0.118798498644851;
        ZTranslation              =  0.0;
        Origin                    = null;
        GraphLocation             =  {300.0, 220.87};
    }
    node User.Objects.point03 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              =  -5.60497663024408;
        YTranslation              =  -9.74083824291451;
        ZTranslation              =  0.0;
        Origin                    = null;
        GraphLocation             =  {300.0, 401.74};
    }
    node User.Objects.point04 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              =  1.20565450213718;
        YTranslation              =  -1.25112677677538;
        ZTranslation              =  0.0;
        Origin                    = null;
        GraphLocation             =  {300.0, 582.61};
    }
    node User.Objects.point05 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              =  10.3798360884589;
        YTranslation              =  0.27604278091386;
        ZTranslation              =  0.0;
        Origin                    = null;
        GraphLocation             =  {300.0, 763.48};
    }
    node User.Objects.point06 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              =  1.15784384138527;
        YTranslation              =  1.34190901404483;
        ZTranslation              =  0.0;
        Origin                    = null;
        GraphLocation             =  {300.0, 944.35};
    }
    node User.Objects.crv Bentley.GC.Features.BSplineCurve
    {
        Technique                 = 'ByPoles';
        Poles                     = {point01, point02, point03, point04, point05, point06};
        Order                     = 4;
        InputKnots                = null;
        InputWeights              = null;
        MakePeriodic              = true;
        GraphLocation             = {639.62624, 601.76128};
    }
}

Luego se crean las dos variables. Aqui se define su rango, resolución, su posición en la ventana graph y otras propiedades:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
transaction modelChange 'Add slider01, slider02'
{
    node User.Objects.inc Bentley.GC.Slider
    {
        Technique                 = 'Default';
        Value                     = 0.32;
        Minimum                   = 0.01;
        Maximum                   = 1;
        Resolution                = 0.01;
        SnapToTicks               = false;
        TickInterval              = 1.0;
        TicksVisible              = false;
        GraphLocation             = {722.11060302131, 449.504824501508};
    }
    node User.Objects.cant Bentley.GC.Slider
    {
        Technique                 = 'Default';
        Value                     = 5;
        Minimum                   = 1;
        Maximum                   = 10.0;
        Resolution                = 1;
        SnapToTicks               = true;
        TickInterval              = 1.0;
        TicksVisible              = true;
        GraphLocation             = {716.324477392594, 323.109741511111};
    }
}

Finalmente la función:
la función toma como parametros una curva, un entero y un double. la función hace una serie de offsets de la curva que entra como parametro. cant es de nuevas curvas generadas e inc es un incremento para que las curvas no queden equidistantes entre si. Todas las curvas son guardadas en una lista llamada arrCrv. Todas las variables dentro de la función son locales, por lo que cant o inc o refPt no existen fuera de la función.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
transaction modelChange 'Add crvOffsetByFunc'
{
    node User.Objects.crvOffsetByFunc Bentley.GC.Features.BSplineCurve
    {
        Technique = 'ByFunction';
        Function  = function(BSplineCurve crvInCenter, int cant, double inc)
                  {
                      Point refPt = new Point().ByCartesianCoordinates(baseCS, 
                      1000000, 1000000, 0);
                      BSplineCurve arrCrv = {};
                      BSplineCurve crvTemp;
 
                      double j = 0;
                      for(int i = 0 ; i < cant; i++)
                      {
                          arrCrv[i] = new BSplineCurve().Offset(crvInCenter, 
                          OffsetMethod.ByDistance, refPt, (i + 1) * inc);
                          inc += inc;
                      }
 
                      return arrCrv;
 
                   };
        FunctionArguments = {crv, cant, inc};
        GraphLocation     = {1029.69344, 484.21112};
    }
}

Ventana de relaciones entre los diferentes nodos de GC.
gcOffsetGraph
 
RESULTADO:
gcOffsetModel

Leave a Reply