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.

Proyecto fin de grado. Introducción.

Model

Esta semana he defendido, por fin, mi proyecto fin de grado de Ingeniería de edificación en la ETSIE de Granada. El título del proyecto es: El diseño paramétrico aplicado a las soluciones y detalles constructivos.

Los que me conocéis podéis imaginaros lo que he disfrutado con este proyecto.

En estos momentos las herramientas mas importantes del mercado son las siguientes:

  • Bentley Systems Incorporated:
    • Plataforma: Microstation
    • Programa: GenerativeComponentsTM
    • Scripting: C#
  • Robert McNeel and Associates:
    • Plataforma: Rhinoceros 3D
    • Programa: GrassHopper
    • Scripting: RhinoScript, Python
  • Autodesk:
    • Plataforma: Revit, Vasari
    • Programa: Dynamo
    • Scripting: Python
  • Gehry Technologies:
    • Plataforma: Digital Project (CATIA)
    • Programa: Digital Project
    • Scripting: Visual Basic for Applications (VBA)

Mi trayectoria profesional me ha llevado a conocer profundamente el manejo de GC (GenerativeComponents™), y aunque últimamente me atrae mucho Dynamo, para este trabajo me decidí a usar GC por su potencia y versatilidad.

El objetivo de mi proyecto ha sido demostrar que el diseño paramétrico puede usarse para desarrollar detalles constructivos que sean fácilmente adaptables y que lleven programada la normativa que le es de aplicación para que todas las soluciones sean válidas.

En este caso, mi tutor, el prof. Ildefonso Naverrete y yo, decidimos que el detalle más significativo era el encuentro de un forjado, viga y pilar.

Pilar_forjado2014925-terminado reducido

 

Para abordar este detalle se dividió en componentes para ir reutilizando el código y optimizar el tiempo usado para el desarrollo del modelo.

Presentacion PFG.010

El componente mínimo del dibujo es la barra corrugada que se usó para crear los componentes de la viga/zuncho, el mallazo y la vigueta. Estos cuatro componentes junto con la bovedilla se unieron para formar el detalle constructivo final.

Las variables que se dejaron abiertas en el detalle para que fuera sencillo adaptarlo a las situaciones concretas de cada proyecto son las siguientes:

Presentacion PFG.008En futuras entradas os explicaré desde cómo hice la portada usando GC, pasando por los componentes y el detalle final parándome a explicar los retos más importantes que hubo que superar para llegar al modelo final.

Espigón en Port Saplaya (Valencia)

Anoche di por terminado mi nuevo dibujo. Se trata de un espigón que hay en Valencia, en una zona a la que llaman Port Saplaya.

La técnica es plumilla, aunque lo he hecho en mi iPad usando la aplicación Autodesk Sketchbook Pro y un lápiz para iPad de los económicos, y por supuesto con muchísima paciencia para ir trazando línea a línea.

Espero que os guste. Hacía mucho que me apetecía volver a dibujar y este es el primer resultado.

Marcado CE y el China Export

Hoy me gustaría concienciar a la gente de un engaño al que nos están sometiendo desde China, país comunista al que le encanta el capitalismo, que gusta de moverse en la delgada línea que marca el comercio económico del engaño puro.

El marcado CE proviene de las siglas Conformidad Europea y se estableció en el ámbito de la Unión Europea para marcar aquellos productos que cumplen con los mínimos estandares de seguridad, NO DE CALIDAD.

Pues bien, como veis en la imagen se inventaron un logotipo usando la misma tipografía y las mismas siglas, con la única diferencia de que la C y la E están más cerca. Como era de esperar no hay ningún requisito de seguridad que cumplir para usar la marca China Export, sólo que el producto haya sido fabricado en china.

¿Por qué no comprar en comercios económicos tipo “TODO A 100”?
Parto de la premisa de que creo en el libre comercio y en la competencia en igualdad de condiciones entre las empresas. En el caso de estos establecimientos:
1.- Venden un producto de muy pocos usos y generalmente de mala calidad.
2.- En plásticos que estén en contacto con alimentos no me fio que no hayan usado productos prohibidos en Europa.
3.- No me gusta que me engañen con imitaciones que no puedo distinguir de las reales.
4.- Los productos eléctricos y electrónicos tienen soldaduras y cables de baja calidad que los hacen realmente peligrosos.
5.- Ecológicamente toda esta fabricación sin control que acaba en la basura muy rápido es un gran problema.

Esta reflexión no va contra los chinos que, como en todas partes, tienen empresas punteras en todos los ámbitos. Empezando porque la mayoría de productos de Apple se fabrican en Foxconn, en China.

Esta reflexión va en contra de las empresas que usan el pillaje y la mentira para llenar nuestras casas de basura, lo que supone un problema económico, de seguridad y ambiental.

Resumiendo: Si la C y la E están pegadas NO ES SEGURO.