rafarq

[Arquitectura && vida && código]

Categoría: Uncategorized

Plumilla de la playa de Calahonda en Motril

Este fin de semana he vuelto a dibujar. Esta vez inspirado en una fotografía de mi padre. De nuevo, la técnica es plumilla en el iPad con la App Autodesk Sketchbook Ink. 
 

La portada del PFG

Esta es la imagen de fondo de la portada de mi proyecto fin de grado:
Model

Variables

  • altura: altura del modelo en el eje Y.
    • Inicio: 0 mm
    • Final: 100 mm
    • Paso: 0 mm
  • giro: giro de los cuadrados
    • Inicio: 0 mm
    • Final: 100 mm
    • Paso: 0 mm
  • apertura: tamaño de los cuadrados
    • Inicio: 0 mm
    • Final: 100 mm
    • Paso: 0 mm

Y esta es la animación de cómo se mueven los cuadrados cambiando los parámetros que dejé libres:

Desarrollo del modelo generativo

En primer lugar se hace una matriz de puntos de 20×10 puntos a partir de una serie de puntos en diagonal al que se le aplica una replicación.

transaction modelChange 'Add point01'
{
    node User.Objects.point01 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              = Series(0,80,4);
        YTranslation              = Series(0,40,4);
        ZTranslation              = 0;
        Origin                    = null;
        Replication               = ReplicationOption.AllCombinations;
        GraphLocation             = <auto> {300.0, 40.0};
    }
}

A partir de esta matriz de puntos se crea un conjunto de polígonos que usa los puntos como vértices.

transaction modelChange 'Add polygon01'
{
    node User.Objects.polygon01 Bentley.GC.Features.Polygon
    {
        Technique                 = 'ByPointGrid';
        Points                    = point01;
        Fill                      = false;
        SkipAlternates            = false;
        FacetOption               = FacetOption.Quads;
        PlaneIndex                = 1;
        TextStyle                 = null;
        UClosed                   = false;
        VClosed                   = false;
        GraphLocation             = <auto> {560.0, 40.0};
    }
}

Se calcula el centroide de cada polígono y usandolo como comienzo se traza una línea en la dirección del eje Z cuya longitud depende de la distancia a otro punto que se usará como atractor que se llama “point02”, es la línea “line01”.

transaction modelChange 'Add point02'
{
    node User.Objects.point02 Bentley.GC.Features.Point
    {
        Technique                 = 'CentroidOfSet';
        SetToFindCentroidFrom     = polygon01.Vertices;
        GraphLocation             = <auto> {820.0, 40.0};
    }
}

transaction modelChange 'Add point03'
{
    node User.Objects.point03 Bentley.GC.Features.Point
    {
        Technique                 = 'ByCartesianCoordinates';
        CoordinateSystem          = baseCS;
        XTranslation              = <free> 12.0569421656741;
        YTranslation              = <free> 16.1699104640786;
        ZTranslation              = <free> -9.03728241466236;
        Origin                    = null;
        GraphLocation             = <auto> {820.0, 180.59};
    }
}

transaction modelChange 'Add altura'
{
    node User.Objects.altura Bentley.GC.Features.GraphVariable
    {
        Technique                 = 'EvaluateExpression';
        Value                     = 25;
        LimitValueToRange         = true;
        RangeMinimum              = 0.0;
        RangeMaximum              = 100.0;
        RangeStepSize             = 0.0;
        GraphLocation             = <auto> {1080.0, 40.0};
    }
}

transaction modelChange 'Add line01'
{
    node User.Objects.line01 Bentley.GC.Features.Line
    {
        Technique                 = 'ByStartPointDirectionLength';
        StartPoint                = point02;
        Direction                 = baseCS.ZDirection;
        Length                    = Distance(point02,point03)/4-altura;
        GraphLocation             = <auto> {1080.0, 40.0};
    }
}

En cada centroide se coloca, además, un sistema de coordenadas que toma como base el sistema de coordenadas principal y le aplica un giro definido con la fórmula:

transaction modelChange 'Add coordinateSystem01, giro'
{
    node User.Objects.giro Bentley.GC.Features.GraphVariable
    {
        Technique                 = 'EvaluateExpression';
        Value                     = 27.0;
        LimitValueToRange         = true;
        RangeMinimum              = 0.0;
        RangeMaximum              = 100.0;
        RangeStepSize             = 0.0;
        GraphLocation             = <auto> {1340.0, 40.0};
    }
    node User.Objects.coordinateSystem01 Bentley.GC.Features.CoordinateSystem
    {
        Technique                 = 'ByOriginRotationAboutCoordinateSystem';
        Origin                    = point02;
        CoordinateSystem          = baseCS;
        RotationAngle             = line01.Length*giro;
        Axis                      = AxisOption.Z;
        GuideRadius               = 1.0;
        GraphLocation             = <auto> {1600.0, 40.0};
    }
}


line01.Length*giro

Por lo que el giro dependerá, además de la variable giro, de la longitud de la línea 01.

Se trazan cuatro puntos a partir del centroide basados en el sistema de coordenadas girado que formarán los vértices de un nuevo polígono. La distancia entre estos puntos está determinada por la variable apertura que divide a la longitud de la línea 01:

line01.Length/apertura

node User.Objects.point04 Bentley.GC.Features.Point
    {
        Technique                 = 'ByDirectionAndDistanceFromOrigin';
        Origin                    = point02;
        Direction                 = coordinateSystem01.XDirection;
        DistanceFromOrigin        = line01.Length/apertura;
        GraphLocation             = <auto> {1860.0, 40.0};
    }
    node User.Objects.apertura Bentley.GC.Features.GraphVariable
    {
        Technique                 = 'EvaluateExpression';
        Value                     = 5;
        LimitValueToRange         = true;
        RangeMinimum              = 0.0;
        RangeMaximum              = 100.0;
        RangeStepSize             = 0.0;
        GraphLocation             = <auto> {2120.0, 40.0};
    }
    node User.Objects.point05 Bentley.GC.Features.Point
    {
        Technique                 = 'ByDirectionAndDistanceFromOrigin';
        Origin                    = point02;
        Direction                 = coordinateSystem01.YDirection;
        DistanceFromOrigin        = line01.Length/apertura;
        GraphLocation             = <auto> {2380.0, 40.0};
    }
    node User.Objects.point06 Bentley.GC.Features.Point
    {
        Technique                 = 'ByDirectionAndDistanceFromOrigin';
        Origin                    = point02;
        Direction                 = coordinateSystem01.XDirection;
        DistanceFromOrigin        = -line01.Length/apertura;
        GraphLocation             = <auto> {2380.0, 40.0};
    }
    node User.Objects.point07 Bentley.GC.Features.Point
    {
        Technique                 = 'ByDirectionAndDistanceFromOrigin';
        Origin                    = point02;
        Direction                 = coordinateSystem01.YDirection;
        DistanceFromOrigin        = -line01.Length/apertura;
        GraphLocation             = <auto> {2380.0, 40.0};
    }
}

transaction modelChange 'Add polygon02'
{
    node User.Objects.polygon02 Bentley.GC.Features.Polygon
    {
        Technique                 = 'ByVertices';
        VertexPoints              = { point06, point07,point04, point05};
        Fill                      = false;
        ForcePlanar               = false;
        PlaneIndex                = 1;
        TextStyle                 = null;
        Key                       = "";
        GraphLocation             = <auto> {2640.0, 40.0};
    }
}

Mi primer repositorio en github

Aunque es un proyecto sencillo, resuelve para mi un problema que tenia en casa: Saber cual es la ip externa de mi conexión y sobre todo, si esta cambia, recibir una notificación con la nueva IP.

Para ello hago uso de la raspberry Pi que tengo en casa con un sencillo script que podéis encontrar en https://github.com/rafarq/pushIP

Os dejo la explicación completa del script que he escrito para GitHUB.

pushIP

Get a push notification via PushOver when your computer changes its public IP.

1. Why?

Because I have a Raspbery Pi in my home where I have some tools. I want them to be accesible from the internet. I can’t use ddns, so, I want to be notified when it changes in my phone.

2. What do you need?

  • An account on PushOver.net
  • A linux/mac computer
  • An android/iOS device with pushover App.

3. How to make it work

Put all the files on your home directory, in my case it was /home/pi/. This is going to be yours if you use a raspberry pi like me.

Make the script executable and the file currentIP.txtaccesible with the command:

chmod 777 currentIP.txt script.sh

3.1 Edit the script

First of all you have to edit the script file in te repository to match your personal data:

3.1.1 Paths

You have to give the script the path to the currentIP.txt file on lines #14 and #35 Note that the user that runs the script must give write access to the file.

3.1.2 PushOver

Make an account on pushOver and create a new application to hold all the push notifications. You have to write in the script these:

  • token: line #31. Write here the app token
  • user: line #32.

Customize the message that you will reicive with the notification on line #33 changing the string la nueva IP esfor your text.

--form-string "message=la nueva IP es $IP" \

Now if you fire it with sh script.shit will send you the current IP but we want this to be done by itself when we are not at home so we are going to use crontab.

4. Automating the script

To make your linux box to check IP changes you can use crontab. crontab -e

You get the file where you cron jobs are listed. Add a new line at the end of the file like this: */30 * * * * sh /home/pi/script.sh

It will run the script.shat hour:30 minutes and at o’clock hours: 12:00-12:30-13:00-13:30—–and so on.

If the IP changes you will reicive the notification with the new IP, if not it will wait for another 30 minutes.

If you want to know more about crontab to setup another configuration, please refer to:

5. Me

I’m @rafarq on twitter. I would appreciate to know about you If you find this script useful for you.

© 2017 rafarq

Tema por Anders NorenArriba ↑